Skip to content

Commit d701eb0

Browse files
add a new muiComponent() helper
1 parent ce28e80 commit d701eb0

File tree

9 files changed

+122
-98
lines changed

9 files changed

+122
-98
lines changed

docs/scripts/buildApi.js

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,9 @@ function getInheritance(src) {
7373
};
7474
}
7575

76+
const stylesRegexp = /const styles.*[\r\n](.*[\r\n])*};[\r\n][\r\n]/;
77+
const styleRegexp = /\/\* (.*) \*\/[\r\n]\s*(\w*)/g;
78+
7679
function buildDocs(options) {
7780
const { component: componentObject, pagesMarkdown } = options;
7881
const src = readFileSync(componentObject.filename, 'utf8');
@@ -92,11 +95,11 @@ function buildDocs(options) {
9295
descriptions: {},
9396
};
9497

95-
if (component.styles && component.default.options) {
98+
if ((component.styles && component.default.options) || component.default.stylesOrCreator) {
9699
// Collect the customization points of the `classes` property.
97-
styles.classes = Object.keys(getStylesCreator(component.styles).create(theme)).filter(
98-
className => !className.match(/^(@media|@keyframes)/),
99-
);
100+
styles.classes = Object.keys(
101+
getStylesCreator(component.styles || component.default.stylesOrCreator).create(theme),
102+
).filter(className => !className.match(/^(@media|@keyframes)/));
100103
styles.name = component.default.options.name;
101104

102105
let styleSrc = src;
@@ -111,12 +114,7 @@ function buildDocs(options) {
111114
);
112115
}
113116

114-
/**
115-
* Collect classes comments from the source
116-
*/
117-
const stylesRegexp = /export const styles.*[\r\n](.*[\r\n])*};[\r\n][\r\n]/;
118-
const styleRegexp = /\/\* (.*) \*\/[\r\n]\s*(\w*)/g;
119-
// Extract the styles section from the source
117+
// Extract the styles section from the source.
120118
const stylesSrc = stylesRegexp.exec(styleSrc);
121119

122120
if (stylesSrc) {

packages/material-ui-styles/src/makeStyles/makeStyles.js

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,8 @@ function makeStyles(stylesOrCreator, options = {}) {
207207
};
208208
const listenToTheme = stylesCreator.themingEnabled || typeof name === 'string';
209209

210-
return (props = {}) => {
210+
const useStyles = (props = {}) => {
211+
// eslint-disable-next-line react-hooks/rules-of-hooks
211212
const theme = (listenToTheme ? useTheme() : null) || defaultTheme;
212213
const stylesOptions = {
213214
...React.useContext(StylesContext),
@@ -244,6 +245,15 @@ function makeStyles(stylesOrCreator, options = {}) {
244245

245246
return getClasses(instance.current, props.classes, Component);
246247
};
248+
249+
useStyles.options = options;
250+
251+
if (process.env.NODE_ENV !== 'production') {
252+
// For the markdown generation
253+
useStyles.stylesOrCreator = stylesOrCreator;
254+
}
255+
256+
return useStyles;
247257
}
248258

249259
export default makeStyles;

packages/material-ui/src/Table/Table.js

Lines changed: 16 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@ import clsx from 'clsx';
44
import makeStyles from '../styles/makeStyles';
55
import useThemeProps from '../styles/useThemeProps';
66
import TableContext from './TableContext';
7+
import muiComponent from '../utils/muiComponent';
78

8-
export const styles = {
9+
const styles = {
910
/* Styles applied to the root element. */
1011
root: {
1112
display: 'table',
@@ -15,17 +16,18 @@ export const styles = {
1516
},
1617
};
1718

18-
export const useStyles = makeStyles(styles, { name: 'MuiTable' });
19+
const options = { name: 'MuiTable' };
20+
const useStyles = makeStyles(styles, options);
1921

2022
const Table = React.forwardRef(function Table(props, ref) {
2123
const {
2224
classes: classesProp,
2325
className,
24-
component: Component,
25-
padding,
26-
size,
26+
component: Component = 'table',
27+
padding = 'default',
28+
size = 'medium',
2729
...other
28-
} = useThemeProps(props, { name: 'MuiTable' });
30+
} = useThemeProps(props, options);
2931
const classes = useStyles(props);
3032
const table = React.useMemo(() => ({ padding, size }), [padding, size]);
3133

@@ -70,15 +72,12 @@ Table.propTypes = {
7072
size: PropTypes.oneOf(['small', 'medium']),
7173
};
7274

73-
Table.defaultProps = {
74-
component: 'table',
75-
padding: 'default',
76-
size: 'medium',
77-
};
78-
79-
Table.useStyles = useStyles;
80-
Table.options = {
81-
name: 'MuiTable',
82-
};
75+
if (process.env.NODE_ENV !== 'production') {
76+
Table.defaultProps = {
77+
component: 'table',
78+
padding: 'default',
79+
size: 'medium',
80+
};
81+
}
8382

84-
export default Table;
83+
export default muiComponent(useStyles, Table);

packages/material-ui/src/TableBody/TableBody.js

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,24 +4,29 @@ import clsx from 'clsx';
44
import makeStyles from '../styles/makeStyles';
55
import useThemeProps from '../styles/useThemeProps';
66
import Tablelvl2Context from '../Table/Tablelvl2Context';
7+
import muiComponent from '../utils/muiComponent';
78

89
const tablelvl2 = {
910
variant: 'body',
1011
};
1112

12-
export const styles = {
13+
const styles = {
1314
/* Styles applied to the root element. */
1415
root: {
1516
display: 'table-row-group',
1617
},
1718
};
1819

19-
const useStyles = makeStyles(styles, { name: 'MuiTableBody' });
20+
const options = { name: 'MuiTableBody' };
21+
const useStyles = makeStyles(styles, options);
2022

2123
const TableBody = React.forwardRef(function TableBody(props, ref) {
22-
const { classes: classesProp, className, component: Component, ...other } = useThemeProps(props, {
23-
name: 'MuiTableBody',
24-
});
24+
const {
25+
classes: classesProp,
26+
className,
27+
component: Component = 'tbody',
28+
...other
29+
} = useThemeProps(props, options);
2530
const classes = useStyles(props);
2631

2732
return (
@@ -52,13 +57,10 @@ TableBody.propTypes = {
5257
component: PropTypes.elementType,
5358
};
5459

55-
TableBody.defaultProps = {
56-
component: 'tbody',
57-
};
58-
59-
TableBody.useStyles = useStyles;
60-
TableBody.options = {
61-
name: 'MuiTableBody',
62-
};
60+
if (process.env.NODE_ENV !== 'production') {
61+
TableBody.defaultProps = {
62+
component: 'tbody',
63+
};
64+
}
6365

64-
export default TableBody;
66+
export default muiComponent(useStyles, TableBody);

packages/material-ui/src/TableCell/TableCell.js

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,9 @@ import { capitalize } from '../utils/helpers';
77
import { darken, fade, lighten } from '../styles/colorManipulator';
88
import TableContext from '../Table/TableContext';
99
import Tablelvl2Context from '../Table/Tablelvl2Context';
10+
import muiComponent from '../utils/muiComponent';
1011

11-
export const styles = theme => ({
12+
const styles = theme => ({
1213
/* Styles applied to the root element. */
1314
root: {
1415
...theme.typography.body2,
@@ -99,11 +100,12 @@ export const styles = theme => ({
99100
},
100101
});
101102

102-
const useStyles = makeStyles(styles, { name: 'MuiTableCell' });
103+
const options = { name: 'MuiTableCell' };
104+
const useStyles = makeStyles(styles, options);
103105

104106
const TableCell = React.forwardRef(function TableCell(props, ref) {
105107
const {
106-
align,
108+
align = 'inherit',
107109
children,
108110
classes: classesProp,
109111
className,
@@ -114,7 +116,7 @@ const TableCell = React.forwardRef(function TableCell(props, ref) {
114116
sortDirection,
115117
variant,
116118
...other
117-
} = useThemeProps(props, { name: 'MuiTableCell' });
119+
} = useThemeProps(props, options);
118120

119121
const classes = useStyles(props);
120122
const table = React.useContext(TableContext);
@@ -216,13 +218,10 @@ TableCell.propTypes = {
216218
variant: PropTypes.oneOf(['head', 'body', 'footer']),
217219
};
218220

219-
TableCell.defaultProps = {
220-
align: 'inherit',
221-
};
222-
223-
TableCell.useStyles = useStyles;
224-
TableCell.options = {
225-
name: 'MuiTableCell',
226-
};
221+
if (process.env.NODE_ENV !== 'production') {
222+
TableCell.defaultProps = {
223+
align: 'inherit',
224+
};
225+
}
227226

228-
export default TableCell;
227+
export default muiComponent(useStyles, TableCell);

packages/material-ui/src/TableFooter/TableFooter.js

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,24 +4,29 @@ import clsx from 'clsx';
44
import makeStyles from '../styles/makeStyles';
55
import useThemeProps from '../styles/useThemeProps';
66
import Tablelvl2Context from '../Table/Tablelvl2Context';
7+
import muiComponent from '../utils/muiComponent';
78

89
const tablelvl2 = {
910
variant: 'footer',
1011
};
1112

12-
export const styles = {
13+
const styles = {
1314
/* Styles applied to the root element. */
1415
root: {
1516
display: 'table-footer-group',
1617
},
1718
};
1819

19-
const useStyles = makeStyles(styles, { name: 'MuiTableFooter' });
20+
const options = { name: 'MuiTableFooter' };
21+
const useStyles = makeStyles(styles, options);
2022

2123
const TableFooter = React.forwardRef(function TableFooter(props, ref) {
22-
const { classes: classesProp, className, component: Component, ...other } = useThemeProps(props, {
23-
name: 'MuiTableFooter',
24-
});
24+
const {
25+
classes: classesProp,
26+
className,
27+
component: Component = 'tfoot',
28+
...other
29+
} = useThemeProps(props, options);
2530
const classes = useStyles(props);
2631

2732
return (
@@ -52,13 +57,10 @@ TableFooter.propTypes = {
5257
component: PropTypes.elementType,
5358
};
5459

55-
TableFooter.defaultProps = {
56-
component: 'tfoot',
57-
};
58-
59-
TableFooter.useStyles = useStyles;
60-
TableFooter.options = {
61-
name: 'MuiTableFooter',
62-
};
60+
if (process.env.NODE_ENV !== 'production') {
61+
TableFooter.defaultProps = {
62+
component: 'tfoot',
63+
};
64+
}
6365

64-
export default TableFooter;
66+
export default muiComponent(useStyles, TableFooter);

packages/material-ui/src/TableHead/TableHead.js

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,24 +4,29 @@ import clsx from 'clsx';
44
import makeStyles from '../styles/makeStyles';
55
import useThemeProps from '../styles/useThemeProps';
66
import Tablelvl2Context from '../Table/Tablelvl2Context';
7+
import muiComponent from '../utils/muiComponent';
78

89
const tablelvl2 = {
910
variant: 'head',
1011
};
1112

12-
export const styles = {
13+
const styles = {
1314
/* Styles applied to the root element. */
1415
root: {
1516
display: 'table-header-group',
1617
},
1718
};
1819

19-
const useStyles = makeStyles(styles, { name: 'MuiTableHead' });
20+
const options = { name: 'MuiTableHead' };
21+
const useStyles = makeStyles(styles, options);
2022

2123
const TableHead = React.forwardRef(function TableHead(props, ref) {
22-
const { classes: classesProp, className, component: Component, ...other } = useThemeProps(props, {
23-
name: 'MuiTableHead',
24-
});
24+
const {
25+
classes: classesProp,
26+
className,
27+
component: Component = 'thead',
28+
...other
29+
} = useThemeProps(props, options);
2530
const classes = useStyles(props);
2631

2732
return (
@@ -52,13 +57,10 @@ TableHead.propTypes = {
5257
component: PropTypes.elementType,
5358
};
5459

55-
TableHead.defaultProps = {
56-
component: 'thead',
57-
};
58-
59-
TableHead.useStyles = useStyles;
60-
TableHead.options = {
61-
name: 'MuiTableHead',
62-
};
60+
if (process.env.NODE_ENV !== 'production') {
61+
TableHead.defaultProps = {
62+
component: 'thead',
63+
};
64+
}
6365

64-
export default TableHead;
66+
export default muiComponent(useStyles, TableHead);

packages/material-ui/src/TableRow/TableRow.js

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,9 @@ import PropTypes from 'prop-types';
33
import clsx from 'clsx';
44
import makeStyles from '../styles/makeStyles';
55
import Tablelvl2Context from '../Table/Tablelvl2Context';
6+
import muiComponent from '../utils/muiComponent';
67

7-
export const styles = theme => ({
8+
const styles = theme => ({
89
/* Styles applied to the root element. */
910
root: {
1011
color: 'inherit',
@@ -45,9 +46,9 @@ const TableRow = React.forwardRef(function TableRow(props, ref) {
4546
const {
4647
classes: classesProp,
4748
className,
48-
component: Component,
49-
hover,
50-
selected,
49+
component: Component = 'tr',
50+
hover = false,
51+
selected = false,
5152
...other
5253
} = props;
5354
const tablelvl2 = React.useContext(Tablelvl2Context);
@@ -100,15 +101,12 @@ TableRow.propTypes = {
100101
selected: PropTypes.bool,
101102
};
102103

103-
TableRow.defaultProps = {
104-
component: 'tr',
105-
hover: false,
106-
selected: false,
107-
};
108-
109-
TableRow.useStyles = useStyles;
110-
TableRow.options = {
111-
name: 'MuiTableRow',
112-
};
104+
if (process.env.NODE_ENV !== 'production') {
105+
TableRow.defaultProps = {
106+
component: 'tr',
107+
hover: false,
108+
selected: false,
109+
};
110+
}
113111

114-
export default TableRow;
112+
export default muiComponent(useStyles, TableRow);

0 commit comments

Comments
 (0)