42 lines
1.2 KiB
Plaintext
42 lines
1.2 KiB
Plaintext
// @flow
|
|
|
|
import warning from 'warning';
|
|
import deepmerge from 'deepmerge'; // < 1kb payload overhead when lodash/merge is > 3kb.
|
|
|
|
function getStylesCreator(stylesOrCreator: Object | (Object => Object)) {
|
|
function create(theme: Object, name?: string): Object {
|
|
const styles = typeof stylesOrCreator === 'function' ? stylesOrCreator(theme) : stylesOrCreator;
|
|
|
|
if (!theme.overrides || !name || !theme.overrides[name]) {
|
|
return styles;
|
|
}
|
|
|
|
const overrides = theme.overrides[name];
|
|
const stylesWithOverrides = { ...styles };
|
|
|
|
Object.keys(overrides).forEach(key => {
|
|
warning(
|
|
stylesWithOverrides[key],
|
|
[
|
|
'Material-UI: you are trying to override a style that does not exist.',
|
|
// $FlowFixMe - flow isn't smart enough
|
|
`Fix the \`${key}\` key of \`theme.overrides.${name}\`.`,
|
|
].join('\n'),
|
|
);
|
|
stylesWithOverrides[key] = deepmerge(stylesWithOverrides[key], overrides[key]);
|
|
});
|
|
|
|
return stylesWithOverrides;
|
|
}
|
|
|
|
return {
|
|
create,
|
|
options: {
|
|
index: undefined,
|
|
},
|
|
themingEnabled: typeof stylesOrCreator === 'function',
|
|
};
|
|
}
|
|
|
|
export default getStylesCreator;
|