32 lines
1.4 KiB
JavaScript
32 lines
1.4 KiB
JavaScript
|
"use strict";
|
||
|
|
||
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
exports.default = useTheme;
|
||
|
var _useMemo = _interopRequireDefault(require("rc-util/lib/hooks/useMemo"));
|
||
|
var _isEqual = _interopRequireDefault(require("rc-util/lib/isEqual"));
|
||
|
var _internal = require("../../theme/internal");
|
||
|
function useTheme(theme, parentTheme) {
|
||
|
const themeConfig = theme || {};
|
||
|
const parentThemeConfig = themeConfig.inherit === false || !parentTheme ? _internal.defaultConfig : parentTheme;
|
||
|
return (0, _useMemo.default)(() => {
|
||
|
if (!theme) {
|
||
|
return parentTheme;
|
||
|
}
|
||
|
// Override
|
||
|
const mergedComponents = Object.assign({}, parentThemeConfig.components);
|
||
|
Object.keys(theme.components || {}).forEach(componentName => {
|
||
|
mergedComponents[componentName] = Object.assign(Object.assign({}, mergedComponents[componentName]), theme.components[componentName]);
|
||
|
});
|
||
|
// Base token
|
||
|
return Object.assign(Object.assign(Object.assign({}, parentThemeConfig), themeConfig), {
|
||
|
token: Object.assign(Object.assign({}, parentThemeConfig.token), themeConfig.token),
|
||
|
components: mergedComponents
|
||
|
});
|
||
|
}, [themeConfig, parentThemeConfig], (prev, next) => prev.some((prevTheme, index) => {
|
||
|
const nextTheme = next[index];
|
||
|
return !(0, _isEqual.default)(prevTheme, nextTheme, true);
|
||
|
}));
|
||
|
}
|