@mui/icons-material#Calculate TypeScript Examples
The following examples show how to use
@mui/icons-material#Calculate.
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source File: index.tsx From genshin-optimizer with MIT License | 6 votes |
function TabNav({ tab }: { tab: string }) {
const { t } = useTranslation("page_character")
return <Tabs
value={tab}
variant="scrollable"
allowScrollButtonsMobile
sx={{
"& .MuiTab-root:hover": {
transition: "background-color 0.25s ease",
backgroundColor: "rgba(255,255,255,0.1)"
},
}}
>
<Tab sx={{ minWidth: "20%" }} value="overview" label={t("tabs.overview")} icon={<Person />} component={RouterLink} to="" />
<Tab sx={{ minWidth: "20%" }} value="talent" label={t("tabs.talent")} icon={<FactCheck />} component={RouterLink} to="talent" />
<Tab sx={{ minWidth: "20%" }} value="equip" label={t("tabs.equip")} icon={<Checkroom />} component={RouterLink} to="equip" />
<Tab sx={{ minWidth: "20%" }} value="teambuffs" label={t("tabs.teambuffs")} icon={<Groups />} component={RouterLink} to="teambuffs" />
<Tab sx={{ minWidth: "20%" }} value="optimize" label={t("tabs.optimize")} icon={<Calculate />} component={RouterLink} to="optimize" />
</Tabs>
}
Example #2
Source File: AbrechnungIcons.tsx From abrechnung with GNU Affero General Public License v3.0 | 5 votes |
ClearingAccountIcon = Calculate
Example #3
Source File: index.tsx From genshin-optimizer with MIT License | 4 votes |
export default function PageCharacter(props) {
// TODO: #412 We shouldn't be loading all the character translation files. Should have a separate lookup file for character name.
const { t } = useTranslation(["page_character", ...allCharacterKeys.map(k => `char_${k}_gen`)])
const { database } = useContext(DatabaseContext)
const [state, stateDispatch] = useDBState("CharacterDisplay", initialState)
const [searchTerm, setSearchTerm] = useState("")
const deferredSearchTerm = useDeferredValue(searchTerm)
const [pageIdex, setpageIdex] = useState(0)
const invScrollRef = useRef<HTMLDivElement>(null)
const setPage = useCallback(
(e, value) => {
invScrollRef.current?.scrollIntoView({ behavior: "smooth" })
setpageIdex(value - 1);
},
[setpageIdex, invScrollRef],
)
const brPt = useMediaQueryUp()
const maxNumToDisplay = numToShowMap[brPt]
const [newCharacter, setnewCharacter] = useState(false)
const [dbDirty, forceUpdate] = useForceUpdate()
//set follow, should run only once
useEffect(() => {
ReactGA.send({ hitType: "pageview", page: '/characters' })
return database.followAnyChar(forceUpdate)
}, [forceUpdate, database])
const characterSheets = usePromise(CharacterSheet.getAll, [])
const deleteCharacter = useCallback(async (cKey: CharacterKey) => {
const chararcterSheet = await CharacterSheet.get(cKey)
let name = chararcterSheet?.name
//use translated string
if (typeof name === "object")
name = i18next.t(`char_${cKey}_gen:name`)
if (!window.confirm(t("removeCharacter", { value: name }))) return
database.removeChar(cKey)
}, [database, t])
const editCharacter = useCharSelectionCallback()
const navigate = useNavigate()
const { element, weaponType } = state
const sortConfigs = useMemo(() => characterSheets && characterSortConfigs(database, characterSheets), [database, characterSheets])
const filterConfigs = useMemo(() => characterSheets && characterFilterConfigs(database, characterSheets), [database, characterSheets])
const { charKeyList, totalCharNum } = useMemo(() => {
const chars = database._getCharKeys()
const totalCharNum = chars.length
if (!sortConfigs || !filterConfigs) return { charKeyList: [], totalCharNum }
const charKeyList = database._getCharKeys()
.filter(filterFunction({ element, weaponType, favorite: "yes", name: deferredSearchTerm }, filterConfigs))
.sort(sortFunction(state.sortType, state.ascending, sortConfigs))
.concat(
database._getCharKeys()
.filter(filterFunction({ element, weaponType, favorite: "no", name: deferredSearchTerm }, filterConfigs))
.sort(sortFunction(state.sortType, state.ascending, sortConfigs)))
return dbDirty && { charKeyList, totalCharNum }
},
[dbDirty, database, sortConfigs, state.sortType, state.ascending, element, filterConfigs, weaponType, deferredSearchTerm])
const { charKeyListToShow, numPages, currentPageIndex } = useMemo(() => {
const numPages = Math.ceil(charKeyList.length / maxNumToDisplay)
const currentPageIndex = clamp(pageIdex, 0, numPages - 1)
return { charKeyListToShow: charKeyList.slice(currentPageIndex * maxNumToDisplay, (currentPageIndex + 1) * maxNumToDisplay), numPages, currentPageIndex }
}, [charKeyList, pageIdex, maxNumToDisplay])
const totalShowing = charKeyList.length !== totalCharNum ? `${charKeyList.length}/${totalCharNum}` : `${totalCharNum}`
return <Box my={1} display="flex" flexDirection="column" gap={1}>
<CardDark ref={invScrollRef} ><CardContent sx={{ display: "flex", flexDirection: "column", gap: 1 }}>
<Grid container spacing={1}>
<Grid item>
<WeaponToggle sx={{ height: "100%" }} onChange={weaponType => stateDispatch({ weaponType })} value={state.weaponType} size="small" />
</Grid>
<Grid item>
<ElementToggle sx={{ height: "100%" }} onChange={element => stateDispatch({ element })} value={state.element} size="small" />
</Grid>
<Grid item flexGrow={1}>
<TextField
autoFocus
value={searchTerm}
onChange={(e: ChangeEvent<HTMLTextAreaElement>) => setSearchTerm(e.target.value)}
label={t("characterName")}
/>
</Grid>
<Grid item >
<SortByButton sx={{ height: "100%" }}
sortKeys={characterSortKeys} value={state.sortType} onChange={sortType => stateDispatch({ sortType })}
ascending={state.ascending} onChangeAsc={ascending => stateDispatch({ ascending })} />
</Grid>
</Grid>
<Grid container alignItems="flex-end">
<Grid item flexGrow={1}>
<Pagination count={numPages} page={currentPageIndex + 1} onChange={setPage} />
</Grid>
<Grid item>
<ShowingCharacter numShowing={charKeyListToShow.length} total={totalShowing} t={t} />
</Grid>
</Grid>
</CardContent></CardDark>
<Suspense fallback={<Skeleton variant="rectangular" sx={{ width: "100%", height: "100%", minHeight: 5000 }} />}>
<Grid container spacing={1} columns={columns}>
<Grid item xs={1} >
<CardDark sx={{ height: "100%", minHeight: 400, width: "100%", display: "flex", flexDirection: "column" }}>
<CardContent>
<Typography sx={{ textAlign: "center" }}><Trans t={t} i18nKey="addNew" /></Typography>
</CardContent>
<CharacterSelectionModal newFirst show={newCharacter} onHide={() => setnewCharacter(false)} onSelect={editCharacter} />
<Box sx={{
flexGrow: 1,
display: "flex",
justifyContent: "center",
alignItems: "center"
}}
>
<Button onClick={() => setnewCharacter(true)} color="info" sx={{ borderRadius: "1em" }}>
<Typography variant="h1"><FontAwesomeIcon icon={faPlus} className="fa-fw" /></Typography>
</Button>
</Box>
</CardDark>
</Grid>
{charKeyListToShow.map(charKey =>
<Grid item key={charKey} xs={1} >
<CharacterCard
characterKey={charKey}
onClick={() => navigate(`${charKey}`)}
footer={<><Divider /><Box sx={{ py: 1, px: 2, display: "flex", gap: 1, justifyContent: "space-between" }}>
<BootstrapTooltip placement="top" title={<Typography>{t("tabs.talent")}</Typography>}>
<IconButton onClick={() => navigate(`${charKey}/talent`)}>
<FactCheck />
</IconButton>
</BootstrapTooltip>
<BootstrapTooltip placement="top" title={<Typography>{t("tabs.equip")}</Typography>}>
<IconButton onClick={() => navigate(`${charKey}/equip`)} >
<Checkroom />
</IconButton>
</BootstrapTooltip>
<BootstrapTooltip placement="top" title={<Typography>{t("tabs.teambuffs")}</Typography>}>
<IconButton onClick={() => navigate(`${charKey}/teambuffs`)} >
<Groups />
</IconButton>
</BootstrapTooltip>
<BootstrapTooltip placement="top" title={<Typography>{t("tabs.optimize")}</Typography>}>
<IconButton onClick={() => navigate(`${charKey}/optimize`)} >
<Calculate />
</IconButton>
</BootstrapTooltip>
<Divider orientation="vertical" />
<BootstrapTooltip placement="top" title={<Typography>{t("delete")}</Typography>}>
<IconButton color="error" onClick={() => deleteCharacter(charKey)}>
<DeleteForever />
</IconButton>
</BootstrapTooltip>
</Box></>}
/>
</Grid>)}
</Grid>
</Suspense>
{numPages > 1 && <CardDark ><CardContent>
<Grid container alignItems="flex-end">
<Grid item flexGrow={1}>
<Pagination count={numPages} page={currentPageIndex + 1} onChange={setPage} />
</Grid>
<Grid item>
<ShowingCharacter numShowing={charKeyListToShow.length} total={totalShowing} t={t} />
</Grid>
</Grid>
</CardContent></CardDark>}
</Box>
}