useFieldsInvalidate.js 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
  2. import { fillIndex } from "../../utils/miscUtil";
  3. import * as React from 'react';
  4. /**
  5. * Used to control each fields invalidate status
  6. */
  7. export default function useFieldsInvalidate(calendarValue, isInvalidateDate) {
  8. var allowEmpty = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
  9. var _React$useState = React.useState([false, false]),
  10. _React$useState2 = _slicedToArray(_React$useState, 2),
  11. fieldsInvalidates = _React$useState2[0],
  12. setFieldsInvalidates = _React$useState2[1];
  13. var onSelectorInvalid = function onSelectorInvalid(invalid, index) {
  14. setFieldsInvalidates(function (ori) {
  15. return fillIndex(ori, index, invalid);
  16. });
  17. };
  18. /**
  19. * For the Selector Input to mark as `aria-disabled`
  20. */
  21. var submitInvalidates = React.useMemo(function () {
  22. return fieldsInvalidates.map(function (invalid, index) {
  23. // If typing invalidate
  24. if (invalid) {
  25. return true;
  26. }
  27. var current = calendarValue[index];
  28. // Not check if all empty
  29. if (!current) {
  30. return false;
  31. }
  32. // Not allow empty
  33. if (!allowEmpty[index] && !current) {
  34. return true;
  35. }
  36. // Invalidate
  37. if (current && isInvalidateDate(current, {
  38. activeIndex: index
  39. })) {
  40. return true;
  41. }
  42. return false;
  43. });
  44. }, [calendarValue, fieldsInvalidates, isInvalidateDate, allowEmpty]);
  45. return [submitInvalidates, onSelectorInvalid];
  46. }