useFilledProps.js 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. "use strict";
  2. var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
  3. var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
  4. Object.defineProperty(exports, "__esModule", {
  5. value: true
  6. });
  7. exports.default = useFilledProps;
  8. var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
  9. var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
  10. var _rcUtil = require("rc-util");
  11. var React = _interopRequireWildcard(require("react"));
  12. var _useLocale = _interopRequireDefault(require("../../hooks/useLocale"));
  13. var _useTimeConfig = require("../../hooks/useTimeConfig");
  14. var _miscUtil = require("../../utils/miscUtil");
  15. var _useClearIcon = require("../Selector/hooks/useClearIcon");
  16. var _useDisabledBoundary = _interopRequireDefault(require("./useDisabledBoundary"));
  17. var _useFieldFormat3 = require("./useFieldFormat");
  18. var _useInputReadOnly = _interopRequireDefault(require("./useInputReadOnly"));
  19. var _useInvalidate = _interopRequireDefault(require("./useInvalidate"));
  20. function useList(value) {
  21. var fillMode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
  22. var values = React.useMemo(function () {
  23. var list = value ? (0, _miscUtil.toArray)(value) : value;
  24. if (fillMode && list) {
  25. list[1] = list[1] || list[0];
  26. }
  27. return list;
  28. }, [value, fillMode]);
  29. return values;
  30. }
  31. /**
  32. * Align the outer props with unique typed and fill undefined props.
  33. * This is shared with both RangePicker and Picker. This will do:
  34. * - Convert `value` & `defaultValue` to array
  35. * - handle the legacy props fill like `clearIcon` + `allowClear` = `clearIcon`
  36. */
  37. function useFilledProps(props, updater) {
  38. var generateConfig = props.generateConfig,
  39. locale = props.locale,
  40. _props$picker = props.picker,
  41. picker = _props$picker === void 0 ? 'date' : _props$picker,
  42. _props$prefixCls = props.prefixCls,
  43. prefixCls = _props$prefixCls === void 0 ? 'rc-picker' : _props$prefixCls,
  44. _props$styles = props.styles,
  45. styles = _props$styles === void 0 ? {} : _props$styles,
  46. _props$classNames = props.classNames,
  47. classNames = _props$classNames === void 0 ? {} : _props$classNames,
  48. _props$order = props.order,
  49. order = _props$order === void 0 ? true : _props$order,
  50. _props$components = props.components,
  51. components = _props$components === void 0 ? {} : _props$components,
  52. inputRender = props.inputRender,
  53. allowClear = props.allowClear,
  54. clearIcon = props.clearIcon,
  55. needConfirm = props.needConfirm,
  56. multiple = props.multiple,
  57. format = props.format,
  58. inputReadOnly = props.inputReadOnly,
  59. disabledDate = props.disabledDate,
  60. minDate = props.minDate,
  61. maxDate = props.maxDate,
  62. showTime = props.showTime,
  63. value = props.value,
  64. defaultValue = props.defaultValue,
  65. pickerValue = props.pickerValue,
  66. defaultPickerValue = props.defaultPickerValue;
  67. var values = useList(value);
  68. var defaultValues = useList(defaultValue);
  69. var pickerValues = useList(pickerValue);
  70. var defaultPickerValues = useList(defaultPickerValue);
  71. // ======================== Picker ========================
  72. /** Almost same as `picker`, but add `datetime` for `date` with `showTime` */
  73. var internalPicker = picker === 'date' && showTime ? 'datetime' : picker;
  74. /** The picker is `datetime` or `time` */
  75. var multipleInteractivePicker = internalPicker === 'time' || internalPicker === 'datetime';
  76. var complexPicker = multipleInteractivePicker || multiple;
  77. var mergedNeedConfirm = needConfirm !== null && needConfirm !== void 0 ? needConfirm : multipleInteractivePicker;
  78. // ========================== Time ==========================
  79. // Auto `format` need to check `showTime.showXXX` first.
  80. // And then merge the `locale` into `mergedShowTime`.
  81. var _getTimeProps = (0, _useTimeConfig.getTimeProps)(props),
  82. _getTimeProps2 = (0, _slicedToArray2.default)(_getTimeProps, 4),
  83. timeProps = _getTimeProps2[0],
  84. localeTimeProps = _getTimeProps2[1],
  85. showTimeFormat = _getTimeProps2[2],
  86. propFormat = _getTimeProps2[3];
  87. // ======================= Locales ========================
  88. var mergedLocale = (0, _useLocale.default)(locale, localeTimeProps);
  89. var mergedShowTime = React.useMemo(function () {
  90. return (0, _useTimeConfig.fillShowTimeConfig)(internalPicker, showTimeFormat, propFormat, timeProps, mergedLocale);
  91. }, [internalPicker, showTimeFormat, propFormat, timeProps, mergedLocale]);
  92. // ======================= Warning ========================
  93. if (process.env.NODE_ENV !== 'production' && picker === 'time') {
  94. if (['disabledHours', 'disabledMinutes', 'disabledSeconds'].some(function (key) {
  95. return props[key];
  96. })) {
  97. (0, _rcUtil.warning)(false, "'disabledHours', 'disabledMinutes', 'disabledSeconds' will be removed in the next major version, please use 'disabledTime' instead.");
  98. }
  99. }
  100. // ======================== Props =========================
  101. var filledProps = React.useMemo(function () {
  102. return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, props), {}, {
  103. prefixCls: prefixCls,
  104. locale: mergedLocale,
  105. picker: picker,
  106. styles: styles,
  107. classNames: classNames,
  108. order: order,
  109. components: (0, _objectSpread2.default)({
  110. input: inputRender
  111. }, components),
  112. clearIcon: (0, _useClearIcon.fillClearIcon)(prefixCls, allowClear, clearIcon),
  113. showTime: mergedShowTime,
  114. value: values,
  115. defaultValue: defaultValues,
  116. pickerValue: pickerValues,
  117. defaultPickerValue: defaultPickerValues
  118. }, updater === null || updater === void 0 ? void 0 : updater());
  119. }, [props]);
  120. // ======================== Format ========================
  121. var _useFieldFormat = (0, _useFieldFormat3.useFieldFormat)(internalPicker, mergedLocale, format),
  122. _useFieldFormat2 = (0, _slicedToArray2.default)(_useFieldFormat, 2),
  123. formatList = _useFieldFormat2[0],
  124. maskFormat = _useFieldFormat2[1];
  125. // ======================= ReadOnly =======================
  126. var mergedInputReadOnly = (0, _useInputReadOnly.default)(formatList, inputReadOnly, multiple);
  127. // ======================= Boundary =======================
  128. var disabledBoundaryDate = (0, _useDisabledBoundary.default)(generateConfig, locale, disabledDate, minDate, maxDate);
  129. // ====================== Invalidate ======================
  130. var isInvalidateDate = (0, _useInvalidate.default)(generateConfig, picker, disabledBoundaryDate, mergedShowTime);
  131. // ======================== Merged ========================
  132. var mergedProps = React.useMemo(function () {
  133. return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, filledProps), {}, {
  134. needConfirm: mergedNeedConfirm,
  135. inputReadOnly: mergedInputReadOnly,
  136. disabledDate: disabledBoundaryDate
  137. });
  138. }, [filledProps, mergedNeedConfirm, mergedInputReadOnly, disabledBoundaryDate]);
  139. return [mergedProps, internalPicker, complexPicker, formatList, maskFormat, isInvalidateDate];
  140. }