materialuiupgraded
Version:
Material-UI's workspace package
88 lines (77 loc) • 2.4 kB
JavaScript
import React from 'react';
import url from 'url';
import PropTypes from 'prop-types';
import Inspector from 'react-inspector';
import { withStyles, withTheme, createMuiTheme } from '@material-ui/core/styles';
import FormControlLabel from '@material-ui/core/FormControlLabel';
import Switch from '@material-ui/core/Switch';
const styles = theme => ({
root: {
padding: theme.spacing.unit * 2,
paddingTop: 0,
// Match <Inspector /> default theme.
backgroundColor: theme.palette.type === 'light' ? theme.palette.common.white : '#242424',
minHeight: theme.spacing.unit * 40,
width: '100%',
},
switch: {
paddingBottom: theme.spacing.unit,
},
});
class ThemeDefault extends React.Component {
state = {
checked: false,
expandPaths: null,
};
componentDidMount() {
const URL = url.parse(document.location.href, true);
const expandPath = URL.query['expend-path'];
if (!expandPath) {
return;
}
// eslint-disable-next-line react/no-did-mount-set-state
this.setState({
expandPaths: expandPath.split('.').reduce((acc, path) => {
const last = acc.length > 0 ? `${acc[acc.length - 1]}.` : '';
acc.push(last + path);
return acc;
}, []),
});
}
render() {
const { classes, theme: docsTheme } = this.props;
const { checked, expandPaths } = this.state;
const theme = createMuiTheme({
palette: {
type: docsTheme.palette.type,
},
direction: docsTheme.direction,
});
return (
<div className={classes.root}>
<FormControlLabel
className={classes.switch}
control={
<Switch
checked={checked}
onChange={(event, value) => this.setState({ checked: value })}
/>
}
label="Expand all"
/>
<Inspector
theme={theme.palette.type === 'light' ? 'chromeLight' : 'chromeDark'}
data={theme}
expandPaths={expandPaths}
expandLevel={checked ? 100 : 1}
key={`${checked}-${theme.palette.type}`} // Remount
/>
</div>
);
}
}
ThemeDefault.propTypes = {
classes: PropTypes.object.isRequired,
theme: PropTypes.object.isRequired,
};
export default withStyles(styles)(withTheme()(ThemeDefault));