UNPKG

rsuite

Version:

A suite of react components

117 lines (111 loc) 5.37 kB
'use client'; "use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); exports.__esModule = true; exports.default = void 0; exports.useCustom = useCustom; var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose")); var _react = require("react"); var _assign = _interopRequireDefault(require("lodash/assign")); var _en_GB = _interopRequireDefault(require("../locales/en_GB")); var _date = require("../internals/utils/date"); var _CustomProvider = require("./CustomProvider"); var _excluded = ["locale"]; function getDefaultRTL() { return typeof document !== 'undefined' && (document.body.getAttribute('dir') || document.dir) === 'rtl'; } function toLocaleKey(componentName) { var Picker = ['Cascader', 'CheckTreePicker', 'MultiCascader', 'SelectPicker', 'TreePicker', 'CheckPicker', 'CheckTreePicker']; if (Picker.includes(componentName)) { return 'Combobox'; } return componentName; } /** * A hook to get custom configuration of `<CustomProvider>` * @param componentName - The name of the component * @param componentProps - The props of the component */ function useCustom(componentName, componentProps) { var _globalLocale$DateTim; var _useContext = (0, _react.useContext)(_CustomProvider.CustomContext), _useContext$component = _useContext.components, components = _useContext$component === void 0 ? {} : _useContext$component, _useContext$locale = _useContext.locale, globalLocale = _useContext$locale === void 0 ? _en_GB.default : _useContext$locale, _useContext$rtl = _useContext.rtl, rtl = _useContext$rtl === void 0 ? getDefaultRTL() : _useContext$rtl, formatDate = _useContext.formatDate, parseDate = _useContext.parseDate, classPrefix = _useContext.classPrefix, toasters = _useContext.toasters, disableRipple = _useContext.disableRipple; var _ref = componentProps || {}, componentLocale = _ref.locale, restProps = (0, _objectWithoutPropertiesLoose2.default)(_ref, _excluded); var dateLocale = globalLocale === null || globalLocale === void 0 || (_globalLocale$DateTim = globalLocale.DateTimeFormats) === null || _globalLocale$DateTim === void 0 ? void 0 : _globalLocale$DateTim.dateLocale; var code = globalLocale === null || globalLocale === void 0 ? void 0 : globalLocale.code; var getLocale = (0, _react.useCallback)(function (key, overrideLocale) { // Initialize with common locale var publicLocale = (globalLocale === null || globalLocale === void 0 ? void 0 : globalLocale.common) || {}; // Merge component-specific locale(s) based on key type var specificLocale = typeof key === 'string' ? globalLocale === null || globalLocale === void 0 ? void 0 : globalLocale[key] : Array.isArray(key) ? _assign.default.apply(void 0, [{}].concat(key.map(function (k) { return globalLocale === null || globalLocale === void 0 ? void 0 : globalLocale[k]; }))) : {}; // Merge all parts: public locale, specific locale, custom component locale return (0, _assign.default)({}, publicLocale, specificLocale, componentLocale, overrideLocale); }, [globalLocale, componentLocale]); var propsWithDefaults = (0, _react.useMemo)(function () { var _components$component; if (!componentName) { return; } //Memoize the global default props based on component name var globalDefaultProps = ((_components$component = components[componentName]) === null || _components$component === void 0 ? void 0 : _components$component.defaultProps) || {}; var mergedProps = (0, _assign.default)({}, globalDefaultProps, restProps); var localeKey = toLocaleKey(componentName); // If the default locale has the component name, then merge the locale. if (Object.keys(_en_GB.default).includes(localeKey)) { return (0, _extends2.default)({}, mergedProps, { locale: getLocale(localeKey) }); } return mergedProps; }, [componentName, components, getLocale, restProps]); var _formatDate = (0, _react.useCallback)(function (date, formatStr, options) { try { if (formatDate) { return formatDate(date, formatStr, options); } return (0, _date.format)((0, _date.isValid)(date) ? date : new Date(), formatStr, (0, _extends2.default)({ locale: dateLocale }, options)); } catch (error) { if (process.env.NODE_ENV === 'development') { console.error('Error: Invalid date format', error); } return 'Error: Invalid date format'; } }, [dateLocale, formatDate]); var _parseDate = (0, _react.useCallback)(function (dateString, formatString, referenceDate, options) { if (parseDate) { return parseDate(dateString, formatString, referenceDate, options); } return (0, _date.parse)(dateString, formatString, referenceDate || new Date(), (0, _extends2.default)({ locale: dateLocale }, options)); }, [parseDate, dateLocale]); return { code: code, rtl: rtl, toasters: toasters, disableRipple: disableRipple, classPrefix: classPrefix, propsWithDefaults: propsWithDefaults, getLocale: getLocale, formatDate: _formatDate, parseDate: _parseDate }; } var _default = exports.default = useCustom;