@mui/material#Fab TypeScript Examples
The following examples show how to use
@mui/material#Fab.
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: ResumeFAB.tsx From Tachidesk-WebUI with Mozilla Public License 2.0 | 6 votes |
export default function ResumeFab(props: ResumeFABProps) {
const { chapter: { index, lastPageRead }, mangaId } = props;
return (
<Fab
sx={{ position: 'fixed', bottom: '2em', right: '3em' }}
component={Link}
variant="extended"
color="primary"
to={`/manga/${mangaId}/chapter/${index}/page/${lastPageRead}`}
>
<PlayArrow />
{index === 1 ? 'Start' : 'Resume' }
</Fab>
);
}
Example #2
Source File: SourceOptions.tsx From Tachidesk-WebUI with Mozilla Public License 2.0 | 5 votes |
export default function SourceOptions({
sourceFilter,
updateFilterValue,
resetFilterValue,
setTriggerUpdate,
setSearch,
update,
}: IFilters1) {
const [FilterOptions, setFilterOptions] = React.useState(false);
function handleReset() {
resetFilterValue(0);
setFilterOptions(false);
}
function handleSubmit() {
setTriggerUpdate(0);
setSearch(true);
setFilterOptions(false);
}
return (
<>
<Fab
sx={{ position: 'fixed', bottom: '2em', right: '3em' }}
onClick={() => setFilterOptions(!FilterOptions)}
variant="extended"
color="primary"
>
<FilterListIcon />
Filter
</Fab>
<Drawer
anchor="bottom"
open={FilterOptions}
onClose={() => setFilterOptions(false)}
PaperProps={{
style: {
maxWidth: 600, padding: '1em', marginLeft: 'auto', marginRight: 'auto',
},
}}
>
<Box sx={{ display: 'flex' }}>
<Button
onClick={handleReset}
>
Reset
</Button>
<Button
sx={{ marginLeft: 'auto' }}
variant="contained"
onClick={handleSubmit}
>
Submit
</Button>
</Box>
<Options
sourceFilter={sourceFilter}
updateFilterValue={updateFilterValue}
group={undefined}
update={update}
/>
</Drawer>
</>
);
}
Example #3
Source File: App.tsx From genshin-optimizer with MIT License | 5 votes |
function App() {
const [database, setDatabase] = useState(() => new ArtCharDatabase(new DBLocalStorage(localStorage)))
const dbContextObj = useMemo(() => ({ database, setDatabase }), [database, setDatabase])
return <React.StrictMode>
{/* https://mui.com/guides/interoperability/#css-injection-order-2 */}
<StyledEngineProvider injectFirst>
<ThemeProvider theme={theme}>
<CssBaseline />
<DatabaseContext.Provider value={dbContextObj}>
<HashRouter basename="/">
<MatchTitle />
<Grid container direction="column" minHeight="100vh">
<Grid item >
<Header anchor="back-to-top-anchor" />
</Grid>
<Container maxWidth="xl" sx={{ px: { xs: 0.5, sm: 1, md: 2 } }}>
<Suspense fallback={<Skeleton variant="rectangular" sx={{ width: "100%", height: "100%" }} />}>
<Routes>
<Route index element={<PageHome />} />
<Route path="/artifacts" element={<PageArtifact />} />
<Route path="/weapons" element={<PageWeapon />} />
<Route path="/characters/*" >
<Route index element={<PageCharacter />} />
<Route path=":characterKey/*" element={<CharacterDisplay />} />
</Route>
<Route path="/tools" element={<PageTools />} />
<Route path="/setting" element={<PageSettings />} />
<Route path="/doc/*" element={<PageDocumentation />} />
<Route path="/scanner" element={<PageScanner />} />
</Routes>
</Suspense>
</Container>
{/* make sure footer is always at bottom */}
<Grid item flexGrow={1} />
<Grid item >
<Footer />
</Grid>
</Grid>
<ScrollTop >
<Fab color="secondary" size="small" aria-label="scroll back to top">
<KeyboardArrowUp />
</Fab>
</ScrollTop>
</HashRouter>
</DatabaseContext.Provider>
</ThemeProvider>
</StyledEngineProvider>
</React.StrictMode>
}
Example #4
Source File: Profiler.tsx From NekoMaid with MIT License | 5 votes |
Profiler: React.FC = () => { const plugin = usePlugin() const theme = useTheme() const globalData = useGlobalData() const [tab, setTab] = useState(0) const [key, setTKey] = useState(0) const [status, setStatus] = useState(!!globalData.profilerStarted) useEffect(() => { const off = plugin.on('profiler:status', setStatus) return () => { off() } }, []) const transitionDuration = { enter: theme.transitions.duration.enteringScreen, exit: theme.transitions.duration.leavingScreen } const Elm = components[tab] const createFab = (onClick: any, children: any, show: boolean) => <Zoom in={show} timeout={transitionDuration} style={{ transitionDelay: (show ? transitionDuration.exit : 0) + 'ms' }} unmountOnExit > <Fab color='primary' sx={{ position: 'fixed', bottom: { xs: 16, sm: 40 }, right: { xs: 16, sm: 40 }, zIndex: 3 }} onClick={onClick} >{children}</Fab> </Zoom> return <Box sx={{ minHeight: status || !tab ? '100%' : undefined }}> <Toolbar /> <Paper square variant='outlined' sx={{ margin: '0 -1px', position: 'fixed', width: 'calc(100% + 1px)', zIndex: 3 }}> <Tabs value={tab} onChange={(_, it) => setTab(it)} variant='scrollable' scrollButtons='auto'> <Tab label={lang.profiler.summary} /> <Tab label='Timings' disabled={!globalData.hasTimings} /> <Tab label={lang.profiler.plugins} /> <Tab label={lang.profiler.carbageCollection} /> <Tab label={lang.profiler.entities} /> <Tab label={lang.profiler.heap} /> <Tab label={lang.profiler.threads} /> </Tabs> </Paper> <Tabs /> {tab < 4 && !status ? <Box sx={{ textAlign: 'center', marginTop: '40vh' }}>{lang.profiler.notStarted}</Box> : Elm && <Elm key={key} />} {createFab(() => plugin.emit('profiler:status', !status), status ? <Stop /> : <PlayArrow />, tab < 4)} {createFab(() => setTKey(key + 1), <Refresh />, tab >= 4)} </Box> }
Example #5
Source File: RouterPage.tsx From react-flight-tracker with MIT License | 4 votes |
RouterPage: React.FC<Props> = (props) => {
// Fields
const contextName: string = 'RouterPage'
// External hooks
const navigate = useNavigate();
// Contexts
const systemContext = useContext(SystemContext);
const navigationService = systemContext.getService<INavigationService>(ServiceKeys.NavigationService);
// States
const [navigationRequest, setNavigationRequest] = useState<INavigationRequest | undefined>(undefined);
const [menuAnchor, setMenuAnchor] = useState<HTMLElement | null>(null);
const [selectableMenuItems, setSelectableMenuItems] = useState<Array<ISelectableProps>>([
ViewNavigationElements[ViewKeys.SettingsView],
ViewNavigationElements[ViewKeys.LogView],
ViewNavigationElements[ViewKeys.AboutView]
]);
// Refs
const navigationSubscriptionRef = useRef<string>('');
const errorSourceNameRef = useRef('');
const errorMessageRef = useRef('');
// Effects
useEffect(() => {
// Mount
if (navigationService) {
// Get a register key for the subscription and save it as reference
const registerKey = navigationService.onNavigationRequest(contextName, handleNavigationRequest);
navigationSubscriptionRef.current = registerKey;
}
// Unmount
return () => {
if (navigationService) {
// Get the register key from the reference to unsubscribe
const registerKey = navigationSubscriptionRef.current;
navigationService.offNavigationRequest(registerKey);
}
}
}, []);
const handleNavigationError = (sourceName: string, errorMessage: string) => {
// Setup error references
errorSourceNameRef.current = sourceName;
errorMessageRef.current = errorMessage;
// Go to error page
navigate('/error');
};
const handleNavigationRequest = (navigationRequest: INavigationRequest) => {
setNavigationRequest(navigationRequest);
if (navigationRequest.url !== undefined)
navigate(navigationRequest.url);
};
const handleMenuButtonClick = (e: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {
setMenuAnchor(menuAnchor ? null : e.currentTarget);
};
const handleMenuSelect = (e: React.MouseEvent<HTMLElement>, item: ISelectableProps, index: number) => {
setMenuAnchor(null);
if (navigationService)
navigationService.show(item.key, NavigationTypeEnumeration.Dialog);
};
return (
<Box
sx={{
height: '100vh',
width: '100vw',
overflow: 'hidden',
userSelect: 'none',
display: 'flex',
flexDirection: 'column',
backgroundColor: (theme) => theme.palette.primary.main
}}>
<Box
sx={{
overflow: 'hidden',
flex: 'auto',
margin: (theme) => theme.spacing(1),
backgroundColor: (theme) => theme.palette.background.default,
color: (theme) => theme.palette.text.secondary
}}>
<Box
sx={{
position: 'absolute',
top: (theme) => theme.spacing(2),
left: (theme) => theme.spacing(2),
zIndex: 10
}}>
<Fab
color="primary"
aria-label="menu"
onClick={handleMenuButtonClick}>
<MenuIcon />
</Fab>
</Box>
<Routes>
{/* Redirect to 'StartPage' on a unknown path */}
<Route
path="/"
element={
<Navigate
replace to="/start" />
} />
<Route
path="/start"
element={
<StartPage
navigationRequest={navigationRequest}
onNavigationError={handleNavigationError} />
}
/>
<Route
path="/error"
element={
<ErrorPage />
} />
</Routes>
<SelectableMenu
anchor={menuAnchor}
items={selectableMenuItems}
onLocalize={(localizableContent) => localizableContent.value}
onSelect={handleMenuSelect}
onClose={() => setMenuAnchor(null)} />
</Box>
</Box>
);
}