Files
nym/ts-packages/react-webpack-with-theme-example/src/App.tsx
T
2022-03-09 11:41:04 +00:00

73 lines
2.5 KiB
TypeScript

import * as React from 'react';
import { Box, Container, Grid, Typography } from '@mui/material';
import { NymLogo, Playground } from '@nymproject/react';
import { NymThemeProvider } from '@nymproject/mui-theme';
import { useTheme } from '@mui/material/styles';
import { ThemeToggle } from './ThemeToggle';
import { AppContextProvider, useAppContext } from './context';
export const AppTheme: React.FC = ({ children }) => {
const { mode } = useAppContext();
return <NymThemeProvider mode={mode}>{children}</NymThemeProvider>;
};
export const Content: React.FC = () => {
const { mode } = useAppContext();
const theme = useTheme();
const swatches: Record<string, string> = {
'palette.primary.main': theme.palette.primary.main,
'palette.secondary.main': theme.palette.secondary.main,
'palette.info.main': theme.palette.info.main,
'palette.success.main': theme.palette.success.main,
'palette.text.primary': theme.palette.text.primary,
'theme.palette.nym.networkExplorer.mixnodes.status.active':
theme.palette.nym.networkExplorer.mixnodes.status.active,
'theme.palette.nym.networkExplorer.mixnodes.status.standby':
theme.palette.nym.networkExplorer.mixnodes.status.standby,
};
return (
<Container sx={{ py: 4 }}>
<Box display="flex" flexDirection="row-reverse" pb={2}>
<ThemeToggle />
</Box>
<NymLogo height={50} />
<h1>Example App</h1>
<Box mb={10}>
<Typography sx={{ color: ({ palette }) => palette.nym.networkExplorer.mixnodes.status.active }}>
This is an example app that uses React, Typescript, Webpack and the Nym theme + components.
</Typography>
<h4>Some colours from the theme (mode = {mode}) are:</h4>
<Grid container spacing={2}>
{Object.keys(swatches).map((key) => (
<Grid item key={key}>
<Box display="flex" alignItems="center">
<svg height="50px" width="50px">
<rect width="100%" height="100%" fill={swatches[key]} />
</svg>
<Typography mx={2}>
<code>{swatches[key]}</code>
<br />
<code>{key}</code>
</Typography>
</Box>
</Grid>
))}
</Grid>
</Box>
<h1>Component playground</h1>
<Playground />
</Container>
);
};
export const App: React.FC = () => (
<AppContextProvider>
<AppTheme>
<Content />
</AppTheme>
</AppContextProvider>
);