@mui/material#ThemeProvider JavaScript Examples
The following examples show how to use
@mui/material#ThemeProvider.
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: App.js From react-saas-template with MIT License | 6 votes |
function App() {
return (
<BrowserRouter>
<StyledEngineProvider injectFirst>
<ThemeProvider theme={theme}>
<CssBaseline />
<GlobalStyles />
<Pace color={theme.palette.primary.light} />
<Suspense fallback={<Fragment />}>
<Switch>
<Route path="/c">
<LoggedInComponent />
</Route>
<Route>
<LoggedOutComponent />
</Route>
</Switch>
</Suspense>
</ThemeProvider>
</StyledEngineProvider>
</BrowserRouter>
);
}
Example #2
Source File: ColoredButton.js From react-saas-template with MIT License | 6 votes |
function ColoredButton(props) {
const { color, children, theme } = props;
const buttonTheme = createTheme(adaptV4Theme({
...theme,
palette: {
primary: {
main: color
}
}
}));
const buttonProps = (({ color, theme, children, ...o }) => o)(props);
return (
<StyledEngineProvider injectFirst>
<ThemeProvider theme={buttonTheme}>
<Button {...buttonProps} color="primary">
{children}
</Button>
</ThemeProvider>
</StyledEngineProvider>
);
}
Example #3
Source File: DateTimePicker.js From react-saas-template with MIT License | 6 votes |
function DTPicker(props) {
const { disabled, value, onChange } = props;
return (
<StyledEngineProvider injectFirst>
<ThemeProvider theme={Theme2}>
<LocalizationProvider dateAdapter={AdapterDateFns}>
<MobileDatePicker
inputVariant="outlined"
leftArrowIcon={<KeyboardArrowLeft />}
rightArrowIcon={<KeyboardArrowRight />}
timeIcon={<AccessTime />}
dateRangeIcon={<DateRange />}
variant="outlined"
disabled={disabled}
value={value}
onChange={onChange}
renderInput={(params) => <TextField {...params} />}
{...props}
/>
</LocalizationProvider>
</ThemeProvider>
</StyledEngineProvider>
);
}
Example #4
Source File: Footer.jsx From matx-react with MIT License | 6 votes |
Footer = () => {
const theme = useTheme();
const { settings } = useSettings();
const footerTheme = settings.themes[settings.footer.theme] || theme;
return (
<ThemeProvider theme={footerTheme}>
<AppBar color="primary" position="static" sx={{ zIndex: 96 }}>
<AppFooter>
<FooterContent>
<a href="https://ui-lib.com/downloads/matx-pro-react-admin/">
<Button variant="contained" color="secondary">
Get MatX Pro
</Button>
</a>
<Span sx={{ m: 'auto' }}></Span>
<Paragraph sx={{ m: 0 }}>
Design and Developed by <a href="http://ui-lib.com">UI Lib</a>
</Paragraph>
</FooterContent>
</AppFooter>
</AppBar>
</ThemeProvider>
);
}
Example #5
Source File: MatxTheme.jsx From matx-react with MIT License | 6 votes |
MatxTheme = ({ children }) => {
const { settings } = useSettings();
let activeTheme = { ...settings.themes[settings.activeTheme] };
return (
<ThemeProvider theme={activeTheme}>
<CssBaseline />
{children}
</ThemeProvider>
);
}
Example #6
Source File: App.js From CRM with Apache License 2.0 | 5 votes |
App = () => {
const allPages = useRoutes(routes);
const toasterOptions = {
style: {
fontWeight: 500,
fontFamily: "'Poppins', sans-serif",
},
};
AOS.init({
// Global settings:
disable: false, // accepts following values: 'phone', 'tablet', 'mobile', boolean, expression or function
startEvent: "DOMContentLoaded", // name of the event dispatched on the document, that AOS should initialize on
initClassName: "aos-init", // class applied after initialization
animatedClassName: "aos-animate", // class applied on animation
useClassNames: false, // if true, will add content of `data-aos` as classes on scroll
disableMutationObserver: false, // disables automatic mutations' detections (advanced)
debounceDelay: 50, // the delay on debounce used while resizing window (advanced)
throttleDelay: 99, // the delay on throttle used while scrolling the page (advanced)
// Settings that can be overridden on per-element basis, by `data-aos-*` attributes:
offset: 120, // offset (in px) from the original trigger point
delay: 0, // values from 0 to 3000, with step 50ms
duration: 400, // values from 0 to 3000, with step 50ms
easing: "ease", // default easing for AOS animations
once: false, // whether animation should happen only once - while scrolling down
mirror: false, // whether elements should animate out while scrolling past them
anchorPlacement: "top-bottom", // defines which position of the element regarding to window should trigger the animation
});
return (
<React.Fragment>
<StyledEngineProvider injectFirst>
<ThemeProvider theme={darkTheme}>
<CssBaseline />
<Toaster toastOptions={toasterOptions} />
{allPages}
</ThemeProvider>
</StyledEngineProvider>
</React.Fragment>
);
}
Example #7
Source File: MatxMenu.jsx From matx-react with MIT License | 5 votes |
MatxMenu = (props) => {
const [anchorEl, setAnchorEl] = React.useState(null);
const children = React.Children.toArray(props.children);
let { shouldCloseOnItemClick = true, horizontalPosition = 'left' } = props;
const { settings } = useSettings();
const handleClick = (event) => {
setAnchorEl(event.currentTarget);
};
const handleClose = () => {
setAnchorEl(null);
};
return (
<Fragment>
<MenuButton onClick={handleClick}>{props.menuButton}</MenuButton>
<ThemeProvider theme={settings.themes[settings.activeTheme]}>
<Menu
elevation={8}
getContentAnchorEl={null}
anchorEl={anchorEl}
open={!!anchorEl}
onClose={handleClose}
anchorOrigin={{
vertical: 'bottom',
horizontal: horizontalPosition,
}}
transformOrigin={{
vertical: 'top',
horizontal: horizontalPosition,
}}
>
{children.map((child, index) => (
<div onClick={shouldCloseOnItemClick ? handleClose : () => {}} key={index}>
{child}
</div>
))}
</Menu>
</ThemeProvider>
</Fragment>
);
}
Example #8
Source File: SecondarySidenavTheme.jsx From matx-react with MIT License | 5 votes |
SecondarySidenavTheme = ({ theme, classes, children, open }) => {
return <ThemeProvider theme={theme}>{children}</ThemeProvider>;
}
Example #9
Source File: SidenavTheme.jsx From matx-react with MIT License | 5 votes |
SidenavTheme = ({ children }) => {
const theme = useTheme();
const { settings } = useSettings();
const sidenavTheme = settings.themes[settings.layout1Settings.leftSidebar.theme] || theme;
return <ThemeProvider theme={sidenavTheme}>{children}</ThemeProvider>;
}
Example #10
Source File: MatxCustomizer.jsx From matx-react with MIT License | 4 votes |
MatxCustomizer = () => {
const theme = useTheme();
const [open, setOpen] = useState(false);
const [tabIndex, setTabIndex] = useState(0);
const { settings, updateSettings } = useSettings();
const secondary = theme.palette.text.secondary;
const tooglePanel = () => setOpen(!open);
const handleTabChange = (index) => setTabIndex(index);
let activeTheme = { ...settings.themes[settings.activeTheme] };
return (
<Fragment>
<Tooltip title="Theme Settings" placement="left">
<Label className="open" onClick={tooglePanel}>
DEMOS
</Label>
</Tooltip>
<ThemeProvider theme={activeTheme}>
<Drawer
open={open}
anchor="right"
variant="temporary"
onClose={tooglePanel}
ModalProps={{ keepMounted: true }}
>
<MaxCustomaizer>
<Controller>
<Box display="flex">
<Icon className="icon" color="primary">
settings
</Icon>
<H5 sx={{ ml: 1, fontSize: '1rem' }}>Theme Settings</H5>
</Box>
<IconButton onClick={tooglePanel}>
<Icon className="icon">close</Icon>
</IconButton>
</Controller>
<Box px={3} mb={2} display="flex">
<Button
variant="outlined"
onClick={() => handleTabChange(0)}
color={tabIndex === 0 ? 'secondary' : 'primary'}
sx={{ mr: 2 }}
>
Demos
</Button>
<Button
variant="outlined"
onClick={() => handleTabChange(1)}
color={tabIndex === 1 ? 'secondary' : 'primary'}
>
Settings
</Button>
</Box>
<StyledScrollBar options={{ suppressScrollX: true }}>
{tabIndex === 0 && (
<Box sx={{ mb: 4, mx: 3 }}>
<Box sx={{ color: secondary }}>Layouts</Box>
<Box display="flex" flexDirection="column">
{demoLayouts.map((layout) => (
<LayoutBox
key={layout.name}
color="secondary"
badgeContent={'Pro'}
invisible={!layout.isPro}
>
<Card
elevation={4}
sx={{ position: 'relative' }}
onClick={() => updateSettings(layout.options)}
>
<Box sx={{ overflow: 'hidden' }} className="layout-name">
<Button variant="contained" color="secondary">
{layout.name}
</Button>
</Box>
<IMG src={layout.thumbnail} alt={layout.name} />
</Card>
</LayoutBox>
))}
</Box>
</Box>
)}
{/* END LAYOUT */}
{tabIndex === 1 && (
<div>
<div className="helpText">
We used React context API to control layout. Check out the{' '}
<Link href="http://demos.ui-lib.com/matx-react-doc/layout.html" target="_blank">
Documentation
</Link>
</div>
</div>
)}
</StyledScrollBar>
</MaxCustomaizer>
</Drawer>
</ThemeProvider>
</Fragment>
);
}
Example #11
Source File: NotificationBar.jsx From matx-react with MIT License | 4 votes |
NotificationBar = ({ container }) => {
const { settings } = useSettings();
const theme = useTheme();
const secondary = theme.palette.text.secondary;
const [panelOpen, setPanelOpen] = React.useState(false);
const { deleteNotification, clearNotifications, notifications } = useNotification();
const handleDrawerToggle = () => {
setPanelOpen(!panelOpen);
};
const { palette } = useTheme();
const textColor = palette.text.primary;
return (
<Fragment>
<IconButton onClick={handleDrawerToggle}>
<Badge color="secondary" badgeContent={notifications?.length}>
<Icon sx={{ color: textColor }}>notifications</Icon>
</Badge>
</IconButton>
<ThemeProvider theme={settings.themes[settings.activeTheme]}>
<Drawer
width={'100px'}
container={container}
variant="temporary"
anchor={'right'}
open={panelOpen}
onClose={handleDrawerToggle}
ModalProps={{
keepMounted: true,
}}
>
<Box sx={{ width: sideNavWidth }}>
<Notification>
<Icon color="primary">notifications</Icon>
<h5>Notifications</h5>
</Notification>
{notifications?.map((notification) => (
<NotificationCard key={notification.id}>
<DeleteButton
size="small"
className="deleteButton"
onClick={() => deleteNotification(notification.id)}
>
<Icon className="icon">clear</Icon>
</DeleteButton>
<Link
to={`/${notification.path}`}
onClick={handleDrawerToggle}
style={{ textDecoration: 'none' }}
>
<Card sx={{ mx: 2, mb: 3 }} elevation={3}>
<CardLeftContent>
<Box display="flex">
<Icon className="icon" color={notification.icon.color}>
{notification.icon.name}
</Icon>
<Heading>{notification.heading}</Heading>
</Box>
<Small className="messageTime">
{getTimeDifference(new Date(notification.timestamp))}
ago
</Small>
</CardLeftContent>
<Box sx={{ px: 2, pt: 1, pb: 2 }}>
<Paragraph sx={{ m: 0 }}>{notification.title}</Paragraph>
<Small sx={{ color: secondary }}>{notification.subtitle}</Small>
</Box>
</Card>
</Link>
</NotificationCard>
))}
{!!notifications?.length && (
<Box sx={{ color: secondary }}>
<Button onClick={clearNotifications}>Clear Notifications</Button>
</Box>
)}
</Box>
</Drawer>
</ThemeProvider>
</Fragment>
);
}
Example #12
Source File: ShoppingCart.jsx From matx-react with MIT License | 4 votes |
function ShoppingCart({ container }) {
const [totalCost, setTotalCost] = useState(0);
const [panelOpen, setPanelOpen] = useState(false);
const dispatch = useDispatch();
const navigate = useNavigate();
const { user } = useAuth();
const { cartList } = useSelector((state) => state.ecommerce);
const { settings } = useSettings();
const theme = useTheme();
const secondary = theme.palette.text.secondary;
if (!cartListLoaded) {
dispatch(getCartList(user.id));
cartListLoaded = true;
}
const handleDrawerToggle = () => {
setPanelOpen(!panelOpen);
};
const handleCheckoutClick = () => {
if (totalCost > 0) {
navigate('/ecommerce/checkout');
setPanelOpen(false);
}
};
useEffect(() => {
let total = 0;
cartList.forEach((product) => {
total += product.price * product.amount;
});
setTotalCost(total);
}, [cartList]);
const { palette } = useTheme();
const textColor = palette.text.primary;
return (
<Fragment>
<IconButton onClick={handleDrawerToggle}>
<Badge color="secondary" badgeContent={cartList.length}>
<Icon sx={{ color: textColor }}>shopping_cart</Icon>
</Badge>
</IconButton>
<ThemeProvider theme={settings.themes[settings.activeTheme]}>
<Drawer
container={container}
variant="temporary"
anchor={'right'}
open={panelOpen}
onClose={handleDrawerToggle}
ModalProps={{
keepMounted: true,
}}
>
<MiniCart>
<CartBox>
<Icon color="primary">shopping_cart</Icon>
<h5>Cart</h5>
</CartBox>
<Box flexGrow={1} overflow="auto">
{cartList.map((product) => (
<ProductBox key={product.id}>
<Box mr="4px" display="flex" flexDirection="column">
<StyledIconButton
size="small"
onClick={() =>
dispatch(updateCartAmount(user.id, product.id, product.amount + 1))
}
>
<Icon sx={{ cursor: 'pinter' }}>keyboard_arrow_up</Icon>
</StyledIconButton>
<StyledIconButton
disabled={!(product.amount - 1)}
size="small"
onClick={() =>
dispatch(updateCartAmount(user.id, product.id, product.amount - 1))
}
>
<Icon id={!(product.amount - 1) && 'disable'}>keyboard_arrow_down</Icon>
</StyledIconButton>
</Box>
<Box mr={1}>
<IMG src={product.imgUrl} alt={product.title} />
</Box>
<ProductDetails>
<H6>{product.title}</H6>
<Small sx={{ color: secondary }}>
${product.price} x {product.amount}
</Small>
</ProductDetails>
<StyledIconButton
size="small"
onClick={() => dispatch(deleteProductFromCart(user.userId, product.id))}
>
<Icon fontSize="small">clear</Icon>
</StyledIconButton>
</ProductBox>
))}
</Box>
<Button
sx={{ width: '100%', borderRadius: 0 }}
variant="contained"
color="primary"
onClick={handleCheckoutClick}
>
Checkout (${totalCost.toFixed(2)})
</Button>
</MiniCart>
</Drawer>
</ThemeProvider>
</Fragment>
);
}
Example #13
Source File: Layout1.jsx From matx-react with MIT License | 3 votes |
Layout1 = () => {
const { settings, updateSettings } = useSettings();
const { layout1Settings, secondarySidebar } = settings;
const topbarTheme = settings.themes[layout1Settings.topbar.theme];
const {
leftSidebar: { mode: sidenavMode, show: showSidenav },
} = layout1Settings;
const getSidenavWidth = () => {
switch (sidenavMode) {
case 'full':
return sideNavWidth;
case 'compact':
return sidenavCompactWidth;
default:
return '0px';
}
};
const sidenavWidth = getSidenavWidth();
const theme = useTheme();
const isMdScreen = useMediaQuery(theme.breakpoints.down('md'));
const ref = useRef({ isMdScreen, settings });
const layoutClasses = `theme-${theme.palette.type}`;
useEffect(() => {
let { settings } = ref.current;
let sidebarMode = settings.layout1Settings.leftSidebar.mode;
if (settings.layout1Settings.leftSidebar.show) {
let mode = isMdScreen ? 'close' : sidebarMode;
updateSettings({ layout1Settings: { leftSidebar: { mode } } });
}
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [isMdScreen]);
return (
<Layout1Root className={layoutClasses}>
{showSidenav && sidenavMode !== 'close' && (
<SidenavTheme>
<Layout1Sidenav />
</SidenavTheme>
)}
<LayoutContainer width={sidenavWidth} secondarySidebar={secondarySidebar}>
{layout1Settings.topbar.show && layout1Settings.topbar.fixed && (
<ThemeProvider theme={topbarTheme}>
<Layout1Topbar fixed={true} className="elevation-z8" />
</ThemeProvider>
)}
{settings.perfectScrollbar && (
<StyledScrollBar>
{layout1Settings.topbar.show && !layout1Settings.topbar.fixed && (
<ThemeProvider theme={topbarTheme}>
<Layout1Topbar />
</ThemeProvider>
)}
<Box flexGrow={1} position="relative">
<MatxSuspense>
<Outlet />
</MatxSuspense>
</Box>
{settings.footer.show && !settings.footer.fixed && <Footer />}
</StyledScrollBar>
)}
{!settings.perfectScrollbar && (
<ContentBox>
{layout1Settings.topbar.show && !layout1Settings.topbar.fixed && (
<ThemeProvider theme={topbarTheme}>
<Layout1Topbar />
</ThemeProvider>
)}
<Box flexGrow={1} position="relative">
<MatxSuspense>
<Outlet />
</MatxSuspense>
</Box>
{settings.footer.show && !settings.footer.fixed && <Footer />}
</ContentBox>
)}
{settings.footer.show && settings.footer.fixed && <Footer />}
</LayoutContainer>
{settings.secondarySidebar.show && <SecondarySidebar />}
</Layout1Root>
);
}