useTimeInfo.js 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
  2. import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
  3. import { warning } from 'rc-util';
  4. import * as React from 'react';
  5. import { findValidateTime } from "../PickerPanel/TimePanel/TimePanelBody/util";
  6. import { leftPad } from "../utils/miscUtil";
  7. function emptyDisabled() {
  8. return [];
  9. }
  10. function generateUnits(start, end) {
  11. var step = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
  12. var hideDisabledOptions = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
  13. var disabledUnits = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : [];
  14. var pad = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 2;
  15. var units = [];
  16. var integerStep = step >= 1 ? step | 0 : 1;
  17. for (var i = start; i <= end; i += integerStep) {
  18. var disabled = disabledUnits.includes(i);
  19. if (!disabled || !hideDisabledOptions) {
  20. units.push({
  21. label: leftPad(i, pad),
  22. value: i,
  23. disabled: disabled
  24. });
  25. }
  26. }
  27. return units;
  28. }
  29. /**
  30. * Parse time props to get util info
  31. */
  32. export default function useTimeInfo(generateConfig) {
  33. var props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  34. var date = arguments.length > 2 ? arguments[2] : undefined;
  35. var _ref = props || {},
  36. use12Hours = _ref.use12Hours,
  37. _ref$hourStep = _ref.hourStep,
  38. hourStep = _ref$hourStep === void 0 ? 1 : _ref$hourStep,
  39. _ref$minuteStep = _ref.minuteStep,
  40. minuteStep = _ref$minuteStep === void 0 ? 1 : _ref$minuteStep,
  41. _ref$secondStep = _ref.secondStep,
  42. secondStep = _ref$secondStep === void 0 ? 1 : _ref$secondStep,
  43. _ref$millisecondStep = _ref.millisecondStep,
  44. millisecondStep = _ref$millisecondStep === void 0 ? 100 : _ref$millisecondStep,
  45. hideDisabledOptions = _ref.hideDisabledOptions,
  46. disabledTime = _ref.disabledTime,
  47. disabledHours = _ref.disabledHours,
  48. disabledMinutes = _ref.disabledMinutes,
  49. disabledSeconds = _ref.disabledSeconds;
  50. var mergedDate = React.useMemo(function () {
  51. return date || generateConfig.getNow();
  52. }, [date, generateConfig]);
  53. // ======================== Warnings ========================
  54. if (process.env.NODE_ENV !== 'production') {
  55. var isHourStepValid = 24 % hourStep === 0;
  56. var isMinuteStepValid = 60 % minuteStep === 0;
  57. var isSecondStepValid = 60 % secondStep === 0;
  58. warning(isHourStepValid, "`hourStep` ".concat(hourStep, " is invalid. It should be a factor of 24."));
  59. warning(isMinuteStepValid, "`minuteStep` ".concat(minuteStep, " is invalid. It should be a factor of 60."));
  60. warning(isSecondStepValid, "`secondStep` ".concat(secondStep, " is invalid. It should be a factor of 60."));
  61. }
  62. // ======================== Disabled ========================
  63. var getDisabledTimes = React.useCallback(function (targetDate) {
  64. var disabledConfig = (disabledTime === null || disabledTime === void 0 ? void 0 : disabledTime(targetDate)) || {};
  65. return [disabledConfig.disabledHours || disabledHours || emptyDisabled, disabledConfig.disabledMinutes || disabledMinutes || emptyDisabled, disabledConfig.disabledSeconds || disabledSeconds || emptyDisabled, disabledConfig.disabledMilliseconds || emptyDisabled];
  66. }, [disabledTime, disabledHours, disabledMinutes, disabledSeconds]);
  67. var _React$useMemo = React.useMemo(function () {
  68. return getDisabledTimes(mergedDate);
  69. }, [mergedDate, getDisabledTimes]),
  70. _React$useMemo2 = _slicedToArray(_React$useMemo, 4),
  71. mergedDisabledHours = _React$useMemo2[0],
  72. mergedDisabledMinutes = _React$useMemo2[1],
  73. mergedDisabledSeconds = _React$useMemo2[2],
  74. mergedDisabledMilliseconds = _React$useMemo2[3];
  75. // ========================= Column =========================
  76. var getAllUnits = React.useCallback(function (getDisabledHours, getDisabledMinutes, getDisabledSeconds, getDisabledMilliseconds) {
  77. var hours = generateUnits(0, 23, hourStep, hideDisabledOptions, getDisabledHours());
  78. // Hours
  79. var rowHourUnits = use12Hours ? hours.map(function (unit) {
  80. return _objectSpread(_objectSpread({}, unit), {}, {
  81. label: leftPad(unit.value % 12 || 12, 2)
  82. });
  83. }) : hours;
  84. // Minutes
  85. var getMinuteUnits = function getMinuteUnits(nextHour) {
  86. return generateUnits(0, 59, minuteStep, hideDisabledOptions, getDisabledMinutes(nextHour));
  87. };
  88. // Seconds
  89. var getSecondUnits = function getSecondUnits(nextHour, nextMinute) {
  90. return generateUnits(0, 59, secondStep, hideDisabledOptions, getDisabledSeconds(nextHour, nextMinute));
  91. };
  92. // Milliseconds
  93. var getMillisecondUnits = function getMillisecondUnits(nextHour, nextMinute, nextSecond) {
  94. return generateUnits(0, 999, millisecondStep, hideDisabledOptions, getDisabledMilliseconds(nextHour, nextMinute, nextSecond), 3);
  95. };
  96. return [rowHourUnits, getMinuteUnits, getSecondUnits, getMillisecondUnits];
  97. }, [hideDisabledOptions, hourStep, use12Hours, millisecondStep, minuteStep, secondStep]);
  98. var _React$useMemo3 = React.useMemo(function () {
  99. return getAllUnits(mergedDisabledHours, mergedDisabledMinutes, mergedDisabledSeconds, mergedDisabledMilliseconds);
  100. }, [getAllUnits, mergedDisabledHours, mergedDisabledMinutes, mergedDisabledSeconds, mergedDisabledMilliseconds]),
  101. _React$useMemo4 = _slicedToArray(_React$useMemo3, 4),
  102. rowHourUnits = _React$useMemo4[0],
  103. getMinuteUnits = _React$useMemo4[1],
  104. getSecondUnits = _React$useMemo4[2],
  105. getMillisecondUnits = _React$useMemo4[3];
  106. // ======================== Validate ========================
  107. /**
  108. * Get validate time with `disabledTime`, `certainDate` to specific the date need to check
  109. */
  110. var getValidTime = function getValidTime(nextTime, certainDate) {
  111. var getCheckHourUnits = function getCheckHourUnits() {
  112. return rowHourUnits;
  113. };
  114. var getCheckMinuteUnits = getMinuteUnits;
  115. var getCheckSecondUnits = getSecondUnits;
  116. var getCheckMillisecondUnits = getMillisecondUnits;
  117. if (certainDate) {
  118. var _getDisabledTimes = getDisabledTimes(certainDate),
  119. _getDisabledTimes2 = _slicedToArray(_getDisabledTimes, 4),
  120. targetDisabledHours = _getDisabledTimes2[0],
  121. targetDisabledMinutes = _getDisabledTimes2[1],
  122. targetDisabledSeconds = _getDisabledTimes2[2],
  123. targetDisabledMilliseconds = _getDisabledTimes2[3];
  124. var _getAllUnits = getAllUnits(targetDisabledHours, targetDisabledMinutes, targetDisabledSeconds, targetDisabledMilliseconds),
  125. _getAllUnits2 = _slicedToArray(_getAllUnits, 4),
  126. targetRowHourUnits = _getAllUnits2[0],
  127. targetGetMinuteUnits = _getAllUnits2[1],
  128. targetGetSecondUnits = _getAllUnits2[2],
  129. targetGetMillisecondUnits = _getAllUnits2[3];
  130. getCheckHourUnits = function getCheckHourUnits() {
  131. return targetRowHourUnits;
  132. };
  133. getCheckMinuteUnits = targetGetMinuteUnits;
  134. getCheckSecondUnits = targetGetSecondUnits;
  135. getCheckMillisecondUnits = targetGetMillisecondUnits;
  136. }
  137. var validateDate = findValidateTime(nextTime, getCheckHourUnits, getCheckMinuteUnits, getCheckSecondUnits, getCheckMillisecondUnits, generateConfig);
  138. return validateDate;
  139. };
  140. return [
  141. // getValidTime
  142. getValidTime,
  143. // Units
  144. rowHourUnits, getMinuteUnits, getSecondUnits, getMillisecondUnits];
  145. }