336 lines
13 KiB
JavaScript
336 lines
13 KiB
JavaScript
"use strict";
|
||
|
||
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
||
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
|
||
Object.defineProperty(exports, "__esModule", {
|
||
value: true
|
||
});
|
||
var _exportNames = {
|
||
isNeedOpenHash: true,
|
||
ConfigConsumer: true,
|
||
ProConfigProvider: true,
|
||
useIntl: true,
|
||
ProProvider: true
|
||
};
|
||
exports.isNeedOpenHash = exports.default = exports.ProProvider = exports.ProConfigProvider = exports.ConfigConsumer = void 0;
|
||
exports.useIntl = useIntl;
|
||
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
||
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
||
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
|
||
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
|
||
var _cssinjs = require("@ant-design/cssinjs");
|
||
var _antd = require("antd");
|
||
var _zh_CN = _interopRequireDefault(require("antd/lib/locale/zh_CN"));
|
||
var _react = _interopRequireWildcard(require("react"));
|
||
var _swr = require("swr");
|
||
var _intl = require("./intl");
|
||
Object.keys(_intl).forEach(function (key) {
|
||
if (key === "default" || key === "__esModule") return;
|
||
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
||
if (key in exports && exports[key] === _intl[key]) return;
|
||
Object.defineProperty(exports, key, {
|
||
enumerable: true,
|
||
get: function get() {
|
||
return _intl[key];
|
||
}
|
||
});
|
||
});
|
||
var _dayjs = _interopRequireDefault(require("dayjs"));
|
||
var _layoutToken = require("./typing/layoutToken");
|
||
var _useStyle = require("./useStyle");
|
||
Object.keys(_useStyle).forEach(function (key) {
|
||
if (key === "default" || key === "__esModule") return;
|
||
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
||
if (key in exports && exports[key] === _useStyle[key]) return;
|
||
Object.defineProperty(exports, key, {
|
||
enumerable: true,
|
||
get: function get() {
|
||
return _useStyle[key];
|
||
}
|
||
});
|
||
});
|
||
var _token = require("./useStyle/token");
|
||
var _merge = require("./utils/merge");
|
||
require("dayjs/locale/zh-cn");
|
||
var _jsxRuntime = require("react/jsx-runtime");
|
||
var _excluded = ["locale", "getPrefixCls"],
|
||
_excluded2 = ["locale", "theme"];
|
||
var omitUndefined = function omitUndefined(obj) {
|
||
var newObj = {};
|
||
Object.keys(obj || {}).forEach(function (key) {
|
||
if (obj[key] !== undefined) {
|
||
newObj[key] = obj[key];
|
||
}
|
||
});
|
||
if (Object.keys(newObj).length < 1) {
|
||
return undefined;
|
||
}
|
||
return newObj;
|
||
};
|
||
|
||
/**
|
||
* 用于判断当前是否需要开启哈希(Hash)模式。
|
||
* 首先也会判断当前是否处于测试环境中(通过 process.env.NODE_ENV === 'TEST' 判断),
|
||
* 如果是,则返回 false。否则,直接返回 true 表示需要打开。
|
||
* @returns
|
||
*/
|
||
var isNeedOpenHash = exports.isNeedOpenHash = function isNeedOpenHash() {
|
||
var _process$env$NODE_ENV, _process$env$NODE_ENV2;
|
||
if (typeof process !== 'undefined' && (((_process$env$NODE_ENV = process.env.NODE_ENV) === null || _process$env$NODE_ENV === void 0 ? void 0 : _process$env$NODE_ENV.toUpperCase()) === 'TEST' || ((_process$env$NODE_ENV2 = process.env.NODE_ENV) === null || _process$env$NODE_ENV2 === void 0 ? void 0 : _process$env$NODE_ENV2.toUpperCase()) === 'DEV')) {
|
||
return false;
|
||
}
|
||
return true;
|
||
};
|
||
|
||
/**
|
||
* 用于配置 ValueEnum 的通用配置
|
||
*/
|
||
|
||
/**
|
||
* 支持 Map 和 Object
|
||
*
|
||
* @name ValueEnum 的类型
|
||
*/
|
||
|
||
/**
|
||
* 支持 Map 和 Object
|
||
*/
|
||
|
||
/**
|
||
* BaseProFieldFC 的类型设置
|
||
*/
|
||
|
||
/** Render 第二个参数,里面包含了一些常用的参数 */
|
||
|
||
/**
|
||
* 自带的token 配置
|
||
*/
|
||
|
||
/* Creating a context object with the default values. */
|
||
var ProConfigContext = /*#__PURE__*/_react.default.createContext({
|
||
intl: (0, _objectSpread2.default)((0, _objectSpread2.default)({}, _intl.zhCNIntl), {}, {
|
||
locale: 'default'
|
||
}),
|
||
valueTypeMap: {},
|
||
theme: _token.emptyTheme,
|
||
hashed: true,
|
||
dark: false,
|
||
token: _token.defaultToken
|
||
});
|
||
var ConfigConsumer = exports.ConfigConsumer = ProConfigContext.Consumer;
|
||
|
||
/**
|
||
* 组件解除挂载后清空一下 cache
|
||
* @date 2022-11-28
|
||
* @returns null
|
||
*/
|
||
var CacheClean = function CacheClean() {
|
||
var _useSWRConfig = (0, _swr.useSWRConfig)(),
|
||
cache = _useSWRConfig.cache;
|
||
(0, _react.useEffect)(function () {
|
||
return function () {
|
||
// is a map
|
||
// @ts-ignore
|
||
cache.clear();
|
||
};
|
||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||
}, []);
|
||
return null;
|
||
};
|
||
|
||
/**
|
||
* 用于配置 Pro 的组件,分装之后会简单一些
|
||
* @param props
|
||
* @returns
|
||
*/
|
||
var ConfigProviderContainer = function ConfigProviderContainer(props) {
|
||
var _proTheme$useToken;
|
||
var children = props.children,
|
||
dark = props.dark,
|
||
valueTypeMap = props.valueTypeMap,
|
||
_props$autoClearCache = props.autoClearCache,
|
||
autoClearCache = _props$autoClearCache === void 0 ? false : _props$autoClearCache,
|
||
propsToken = props.token,
|
||
prefixCls = props.prefixCls,
|
||
intl = props.intl;
|
||
var _useContext = (0, _react.useContext)(_antd.ConfigProvider.ConfigContext),
|
||
locale = _useContext.locale,
|
||
getPrefixCls = _useContext.getPrefixCls,
|
||
restConfig = (0, _objectWithoutProperties2.default)(_useContext, _excluded);
|
||
var tokenContext = (_proTheme$useToken = _useStyle.proTheme.useToken) === null || _proTheme$useToken === void 0 ? void 0 : _proTheme$useToken.call(_useStyle.proTheme);
|
||
var proProvide = (0, _react.useContext)(ProConfigContext);
|
||
|
||
/**
|
||
* pro 的 类
|
||
* @type {string}
|
||
* @example .ant-pro
|
||
*/
|
||
|
||
var proComponentsCls = prefixCls ? ".".concat(prefixCls) : ".".concat(getPrefixCls(), "-pro");
|
||
var antCls = '.' + getPrefixCls();
|
||
var salt = "".concat(proComponentsCls);
|
||
/**
|
||
* 合并一下token,不然导致嵌套 token 失效
|
||
*/
|
||
var proLayoutTokenMerge = (0, _react.useMemo)(function () {
|
||
return (0, _layoutToken.getLayoutDesignToken)(propsToken || {}, tokenContext.token || _token.defaultToken);
|
||
}, [propsToken, tokenContext.token]);
|
||
var proProvideValue = (0, _react.useMemo)(function () {
|
||
var _proProvide$intl;
|
||
var localeName = locale === null || locale === void 0 ? void 0 : locale.locale;
|
||
var key = (0, _intl.findIntlKeyByAntdLocaleKey)(localeName);
|
||
// antd 的 key 存在的时候以 antd 的为主
|
||
var resolvedIntl = intl !== null && intl !== void 0 ? intl : localeName && ((_proProvide$intl = proProvide.intl) === null || _proProvide$intl === void 0 ? void 0 : _proProvide$intl.locale) === 'default' ? _intl.intlMap[key] : proProvide.intl || _intl.intlMap[key];
|
||
return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, proProvide), {}, {
|
||
dark: dark !== null && dark !== void 0 ? dark : proProvide.dark,
|
||
token: (0, _merge.merge)(proProvide.token, tokenContext.token, {
|
||
proComponentsCls: proComponentsCls,
|
||
antCls: antCls,
|
||
themeId: tokenContext.theme.id,
|
||
layout: proLayoutTokenMerge
|
||
}),
|
||
intl: resolvedIntl || _intl.zhCNIntl
|
||
});
|
||
}, [locale === null || locale === void 0 ? void 0 : locale.locale, proProvide, dark, tokenContext.token, tokenContext.theme.id, proComponentsCls, antCls, proLayoutTokenMerge, intl]);
|
||
var finalToken = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, proProvideValue.token || {}), {}, {
|
||
proComponentsCls: proComponentsCls
|
||
});
|
||
var _useCacheToken = (0, _cssinjs.useCacheToken)(tokenContext.theme, [tokenContext.token, finalToken !== null && finalToken !== void 0 ? finalToken : {}], {
|
||
salt: salt,
|
||
override: finalToken
|
||
}),
|
||
_useCacheToken2 = (0, _slicedToArray2.default)(_useCacheToken, 2),
|
||
token = _useCacheToken2[0],
|
||
nativeHashId = _useCacheToken2[1];
|
||
var hashed = (0, _react.useMemo)(function () {
|
||
if (props.hashed === false) {
|
||
return false;
|
||
}
|
||
if (proProvide.hashed === false) return false;
|
||
return true;
|
||
}, [proProvide.hashed, props.hashed]);
|
||
var hashId = (0, _react.useMemo)(function () {
|
||
if (props.hashed === false) {
|
||
return '';
|
||
}
|
||
if (proProvide.hashed === false) return '';
|
||
//Fix issue with hashId code
|
||
if (isNeedOpenHash() === false) {
|
||
return '';
|
||
} else if (tokenContext.hashId) {
|
||
return tokenContext.hashId;
|
||
} else {
|
||
// 生产环境或其他环境
|
||
return nativeHashId;
|
||
}
|
||
}, [nativeHashId, proProvide.hashed, props.hashed]);
|
||
(0, _react.useEffect)(function () {
|
||
_dayjs.default.locale((locale === null || locale === void 0 ? void 0 : locale.locale) || 'zh-cn');
|
||
}, [locale === null || locale === void 0 ? void 0 : locale.locale]);
|
||
var themeConfig = (0, _react.useMemo)(function () {
|
||
return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, restConfig.theme), {}, {
|
||
hashId: hashId,
|
||
hashed: hashed && isNeedOpenHash()
|
||
});
|
||
}, [restConfig.theme, hashId, hashed, isNeedOpenHash()]);
|
||
var proConfigContextValue = (0, _react.useMemo)(function () {
|
||
return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, proProvideValue), {}, {
|
||
valueTypeMap: valueTypeMap || (proProvideValue === null || proProvideValue === void 0 ? void 0 : proProvideValue.valueTypeMap),
|
||
token: token,
|
||
theme: tokenContext.theme,
|
||
hashed: hashed,
|
||
hashId: hashId
|
||
});
|
||
}, [proProvideValue, valueTypeMap, token, tokenContext.theme, hashed, hashId]);
|
||
var configProviderDom = (0, _react.useMemo)(function () {
|
||
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_antd.ConfigProvider, (0, _objectSpread2.default)((0, _objectSpread2.default)({}, restConfig), {}, {
|
||
theme: themeConfig,
|
||
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(ProConfigContext.Provider, {
|
||
value: proConfigContextValue,
|
||
children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
|
||
children: [autoClearCache && /*#__PURE__*/(0, _jsxRuntime.jsx)(CacheClean, {}), children]
|
||
})
|
||
})
|
||
}));
|
||
|
||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||
}, [restConfig, themeConfig, proConfigContextValue, autoClearCache, children]);
|
||
if (!autoClearCache) return configProviderDom;
|
||
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_swr.SWRConfig, {
|
||
value: {
|
||
provider: function provider() {
|
||
return new Map();
|
||
}
|
||
},
|
||
children: configProviderDom
|
||
});
|
||
};
|
||
|
||
/**
|
||
* 用于配置 Pro 的一些全局性的东西
|
||
* @param props
|
||
* @returns
|
||
*/
|
||
var ProConfigProvider = exports.ProConfigProvider = function ProConfigProvider(props) {
|
||
var needDeps = props.needDeps,
|
||
dark = props.dark,
|
||
token = props.token;
|
||
var proProvide = (0, _react.useContext)(ProConfigContext);
|
||
var _useContext2 = (0, _react.useContext)(_antd.ConfigProvider.ConfigContext),
|
||
locale = _useContext2.locale,
|
||
theme = _useContext2.theme,
|
||
rest = (0, _objectWithoutProperties2.default)(_useContext2, _excluded2);
|
||
|
||
// 是不是不需要渲染 provide
|
||
var isNullProvide = needDeps && proProvide.hashId !== undefined && Object.keys(props).sort().join('-') === 'children-needDeps';
|
||
if (isNullProvide) return /*#__PURE__*/(0, _jsxRuntime.jsx)(_jsxRuntime.Fragment, {
|
||
children: props.children
|
||
});
|
||
var mergeAlgorithm = function mergeAlgorithm() {
|
||
var isDark = dark !== null && dark !== void 0 ? dark : proProvide.dark;
|
||
if (isDark && !Array.isArray(theme === null || theme === void 0 ? void 0 : theme.algorithm)) {
|
||
return [theme === null || theme === void 0 ? void 0 : theme.algorithm, _useStyle.proTheme.darkAlgorithm].filter(Boolean);
|
||
}
|
||
if (isDark && Array.isArray(theme === null || theme === void 0 ? void 0 : theme.algorithm)) {
|
||
return [].concat((0, _toConsumableArray2.default)((theme === null || theme === void 0 ? void 0 : theme.algorithm) || []), [_useStyle.proTheme.darkAlgorithm]).filter(Boolean);
|
||
}
|
||
return theme === null || theme === void 0 ? void 0 : theme.algorithm;
|
||
};
|
||
// 自动注入 antd 的配置
|
||
var configProvider = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, rest), {}, {
|
||
locale: locale || _zh_CN.default,
|
||
theme: omitUndefined((0, _objectSpread2.default)((0, _objectSpread2.default)({}, theme), {}, {
|
||
algorithm: mergeAlgorithm()
|
||
}))
|
||
});
|
||
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_antd.ConfigProvider, (0, _objectSpread2.default)((0, _objectSpread2.default)({}, configProvider), {}, {
|
||
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(ConfigProviderContainer, (0, _objectSpread2.default)((0, _objectSpread2.default)({}, props), {}, {
|
||
token: token
|
||
}))
|
||
}));
|
||
};
|
||
|
||
/**
|
||
* It returns the intl object from the context if it exists, otherwise it returns the intl object for
|
||
* 获取国际化的方法
|
||
* @param locale
|
||
* @param localeMap
|
||
* the current locale
|
||
* @returns The return value of the function is the intl object.
|
||
*/
|
||
function useIntl() {
|
||
var _useContext3 = (0, _react.useContext)(_antd.ConfigProvider.ConfigContext),
|
||
locale = _useContext3.locale;
|
||
var _useContext4 = (0, _react.useContext)(ProConfigContext),
|
||
intl = _useContext4.intl;
|
||
if (intl && intl.locale !== 'default') {
|
||
return intl || _intl.zhCNIntl;
|
||
}
|
||
if (locale !== null && locale !== void 0 && locale.locale) {
|
||
return _intl.intlMap[(0, _intl.findIntlKeyByAntdLocaleKey)(locale.locale)] || _intl.zhCNIntl;
|
||
}
|
||
return _intl.zhCNIntl;
|
||
}
|
||
ProConfigContext.displayName = 'ProProvider';
|
||
var ProProvider = exports.ProProvider = ProConfigContext;
|
||
var _default = exports.default = ProConfigContext; |