acud
Version:
acg react 组件库
180 lines (178 loc) • 7.58 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _typeof = require("@babel/runtime/helpers/typeof");
Object.defineProperty(exports, "__esModule", {
value: true
});
Object.defineProperty(exports, "ConfigConsumer", {
enumerable: true,
get: function get() {
return _context.ConfigConsumer;
}
});
Object.defineProperty(exports, "ConfigContext", {
enumerable: true,
get: function get() {
return _context.ConfigContext;
}
});
exports.globalConfig = exports.defaultPrefixCls = exports.defaultIconPrefixCls = exports["default"] = exports.configConsumerProps = void 0;
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var React = _interopRequireWildcard(require("react"));
var _useMemo = _interopRequireDefault(require("rc-util/lib/hooks/useMemo"));
var _IconContext = _interopRequireDefault(require("acud-icon/lib/components/IconContext"));
var _localeProvider = _interopRequireDefault(require("../locale-provider"));
var _LocaleReceiver = _interopRequireDefault(require("../locale-provider/LocaleReceiver"));
var _context = require("./context");
var _SizeContext = _interopRequireWildcard(require("./SizeContext"));
var _context2 = require("../form/context");
var _UnstableContext = require("./UnstableContext");
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
/**
* @file
* @author zhousheng
*/
var configConsumerProps = exports.configConsumerProps = ['getTargetContainer', 'getPopupContainer', 'rootPrefixCls', 'getPrefixCls', 'renderEmpty', 'csp', 'autoInsertSpaceInButton', 'locale', 'pageHeader'];
// These props is used by `useContext` directly in sub component
var PASSED_PROPS = ['getTargetContainer', 'getPopupContainer', 'renderEmpty', 'pageHeader', 'input'];
var defaultPrefixCls = exports.defaultPrefixCls = 'acud';
var defaultIconPrefixCls = exports.defaultIconPrefixCls = "".concat(defaultPrefixCls, "icon");
var globalPrefixCls = defaultPrefixCls;
var globalIconPrefixCls;
function getGlobalIconPrefixCls(prefixCls) {
return globalIconPrefixCls || (prefixCls ? "".concat(prefixCls, "icon") : defaultIconPrefixCls);
}
var setGlobalConfig = function setGlobalConfig(_ref) {
var prefixCls = _ref.prefixCls,
iconPrefixCls = _ref.iconPrefixCls,
unstableRender = _ref.unstableRender;
if (prefixCls !== undefined) {
globalPrefixCls = prefixCls;
}
if (iconPrefixCls !== undefined) {
globalIconPrefixCls = iconPrefixCls;
}
if (unstableRender !== undefined) {
(0, _UnstableContext.unstableSetRender)(unstableRender);
}
};
var globalConfig = exports.globalConfig = function globalConfig() {
return {
getPrefixCls: function getPrefixCls(suffixCls, customizePrefixCls) {
if (customizePrefixCls) {
return customizePrefixCls;
}
return suffixCls ? "".concat(globalPrefixCls, "-").concat(suffixCls) : globalPrefixCls;
},
getIconPrefixCls: getGlobalIconPrefixCls
};
};
var ProviderChildren = function ProviderChildren(props) {
var children = props.children,
csp = props.csp,
autoInsertSpaceInButton = props.autoInsertSpaceInButton,
locale = props.locale,
componentSize = props.componentSize,
direction = props.direction,
space = props.space,
virtual = props.virtual,
dropdownMatchSelectWidth = props.dropdownMatchSelectWidth,
legacyLocale = props.legacyLocale,
parentContext = props.parentContext,
customIconPrefixCls = props.iconPrefixCls,
form = props.form;
var getPrefixCls = React.useCallback(function (suffixCls, customizePrefixCls) {
var prefixCls = props.prefixCls;
if (customizePrefixCls) {
return customizePrefixCls;
}
var mergedPrefixCls = prefixCls || parentContext.getPrefixCls('');
return suffixCls ? "".concat(mergedPrefixCls, "-").concat(suffixCls) : mergedPrefixCls;
},
// eslint-disable-next-line react-hooks/exhaustive-deps
[parentContext.getPrefixCls]);
var iconPrefixCls = customIconPrefixCls || parentContext.iconPrefixCls || getGlobalIconPrefixCls(getPrefixCls(''));
var config = (0, _extends2["default"])((0, _extends2["default"])({}, parentContext), {
csp: csp,
autoInsertSpaceInButton: autoInsertSpaceInButton,
locale: locale || legacyLocale,
direction: direction,
space: space,
virtual: virtual,
dropdownMatchSelectWidth: dropdownMatchSelectWidth,
form: form,
getPrefixCls: getPrefixCls
});
// Pass the props used by `useContext` directly with child component.
// These props should merged into `config`.
PASSED_PROPS.forEach(function (propName) {
var propValue = props[propName];
if (propValue) {
config[propName] = propValue;
}
});
var memoedConfig = (0, _useMemo["default"])(function () {
return config;
},
// eslint-disable-next-line react-hooks/exhaustive-deps
config, function (prevConfig, currentConfig) {
var prevKeys = Object.keys(prevConfig);
var currentKeys = Object.keys(currentConfig);
return prevKeys.length !== currentKeys.length || prevKeys.some(function (key) {
return prevConfig[key] !== currentConfig[key];
});
});
var memoIconContextValue = React.useMemo(function () {
return {
prefixCls: iconPrefixCls
};
}, [iconPrefixCls]);
var childNode = children;
// Additional Form provider
if (locale) {
childNode = /*#__PURE__*/React.createElement(_localeProvider["default"], {
locale: locale
}, childNode);
}
if (iconPrefixCls) {
childNode = /*#__PURE__*/React.createElement(_IconContext["default"].Provider, {
value: memoIconContextValue
}, childNode);
}
if (componentSize) {
childNode = /*#__PURE__*/React.createElement(_SizeContext.SizeContextProvider, {
size: componentSize
}, childNode);
}
if (form) {
childNode = /*#__PURE__*/React.createElement(_context2.FormProvider, form, childNode);
}
return /*#__PURE__*/React.createElement(_context.ConfigContext.Provider, {
value: memoedConfig
}, childNode);
};
var ConfigProvider = function ConfigProvider(props) {
React.useEffect(function () {
if (props.direction) {
// message.config({
// rtl: props.direction === 'rtl',
// });
// notification.config({
// rtl: props.direction === 'rtl',
// });
}
}, [props.direction]);
return /*#__PURE__*/React.createElement(_LocaleReceiver["default"], null, function (_, __, legacyLocale) {
return /*#__PURE__*/React.createElement(_context.ConfigConsumer, null, function (context) {
return /*#__PURE__*/React.createElement(ProviderChildren, (0, _extends2["default"])({
parentContext: context,
legacyLocale: legacyLocale
}, props));
});
});
};
/** @private internal Usage. do not use in your production */
ConfigProvider.ConfigContext = _context.ConfigContext;
ConfigProvider.SizeContext = _SizeContext["default"];
ConfigProvider.config = setGlobalConfig;
var _default = exports["default"] = ConfigProvider;