antd
Version:
An enterprise-class UI design language and React components implementation
29 lines • 1.23 kB
JavaScript
import _extends from "@babel/runtime/helpers/esm/extends";
import useMemo from "rc-util/es/hooks/useMemo";
import shallowEqual from 'shallowequal';
import { defaultConfig } from '../../theme';
export default function useTheme(theme, parentTheme) {
var themeConfig = theme || {};
var parentThemeConfig = themeConfig.inherit === false || !parentTheme ? defaultConfig : parentTheme;
var mergedTheme = useMemo(function () {
if (!theme) {
return parentTheme;
}
// Override
var mergedComponents = _extends({}, parentThemeConfig.components);
Object.keys(theme.components || {}).forEach(function (componentName) {
mergedComponents[componentName] = _extends(_extends({}, mergedComponents[componentName]), theme.components[componentName]);
});
// Base token
return _extends(_extends(_extends({}, parentThemeConfig), themeConfig), {
token: _extends(_extends({}, parentThemeConfig.token), themeConfig.token),
components: mergedComponents
});
}, [themeConfig, parentThemeConfig], function (prev, next) {
return prev.some(function (prevTheme, index) {
var nextTheme = next[index];
return !shallowEqual(prevTheme, nextTheme);
});
});
return mergedTheme;
}