@bigbinary/neetoui 6.5.8 → 6.5.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cjs/index.js CHANGED
@@ -5794,6 +5794,21 @@ var HoverIcon = function HoverIcon(_ref) {
5794
5794
  }));
5795
5795
  };
5796
5796
 
5797
+ // A wrapper hook around useState, that updates a ref as well, useful when dealing directly with dom event listeners.
5798
+ var useRefState = function useRefState(val) {
5799
+ // eslint-disable-next-line react/hook-use-state
5800
+ var _useState = React$3.useState(val),
5801
+ _useState2 = Typography._slicedToArray(_useState, 2),
5802
+ value = _useState2[0],
5803
+ _setValue = _useState2[1];
5804
+ var valueRef = React$3.useRef(value);
5805
+ var setValue = function setValue(val) {
5806
+ valueRef.current = val;
5807
+ _setValue(val);
5808
+ };
5809
+ return [value, valueRef, setValue];
5810
+ };
5811
+
5797
5812
  var FORMAT = "HH:mm";
5798
5813
  var getFormattedTime = function getFormattedTime(value) {
5799
5814
  if (Typography.dayjs.isDayjs(value)) {
@@ -5815,8 +5830,39 @@ var toDayJs = function toDayJs(value) {
5815
5830
  });
5816
5831
  return Typography.dayjs(value, FORMAT);
5817
5832
  };
5833
+ var isValidTime = function isValidTime(minTime, maxTime, value) {
5834
+ if (neetoCist.isPresent(minTime) && toDayJs(value).isBefore(toDayJs(minTime))) {
5835
+ return false;
5836
+ }
5837
+ return !(neetoCist.isPresent(maxTime) && toDayJs(value).isAfter(toDayJs(maxTime)));
5838
+ };
5839
+ var isValidRange = function isValidRange(minTime, maxTime, value) {
5840
+ return value.every(function (item) {
5841
+ return isValid(minTime, maxTime, item);
5842
+ });
5843
+ };
5844
+ var isValid = function isValid(minTime, maxTime, value) {
5845
+ return (Array.isArray(value) ? isValidRange : isValidTime)(minTime, maxTime, value);
5846
+ };
5847
+ var getValidTime = function getValidTime(minTime, maxTime, value) {
5848
+ if (neetoCist.isPresent(minTime) && toDayJs(value).isBefore(toDayJs(minTime))) {
5849
+ return minTime;
5850
+ }
5851
+ if (neetoCist.isPresent(maxTime) && toDayJs(value).isAfter(toDayJs(maxTime))) {
5852
+ return maxTime;
5853
+ }
5854
+ return value;
5855
+ };
5856
+ var getValidRange = function getValidRange(minTime, maxTime, value) {
5857
+ return value.map(function (item) {
5858
+ return getValidTime(minTime, maxTime, item);
5859
+ });
5860
+ };
5861
+ var getValid = function getValid(minTime, maxTime, value) {
5862
+ return (Array.isArray(value) ? getValidRange : getValidTime)(minTime, maxTime, value);
5863
+ };
5818
5864
 
5819
- var _excluded$f = ["type", "className", "label", "labelProps", "size", "nakedInput", "required", "value", "defaultValue", "onChange", "error", "onBlur"];
5865
+ var _excluded$f = ["type", "className", "label", "labelProps", "size", "nakedInput", "required", "value", "defaultValue", "onChange", "error", "onBlur", "minTime", "maxTime"];
5820
5866
  function ownKeys$c(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
5821
5867
  function _objectSpread$c(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$c(Object(source), !0).forEach(function (key) { Typography._defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$c(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
5822
5868
  Typography.dayjs.extend(customParseFormat);
@@ -5850,11 +5896,15 @@ var TimePickerInput = /*#__PURE__*/React$3.forwardRef(function (_ref, ref) {
5850
5896
  error = _ref$error === void 0 ? "" : _ref$error,
5851
5897
  _ref$onBlur = _ref.onBlur,
5852
5898
  onBlur = _ref$onBlur === void 0 ? Typography.noop : _ref$onBlur,
5899
+ minTime = _ref.minTime,
5900
+ maxTime = _ref.maxTime,
5853
5901
  otherProps = Typography._objectWithoutProperties(_ref, _excluded$f);
5854
- var _useState = React$3.useState(null),
5855
- _useState2 = Typography._slicedToArray(_useState, 2),
5856
- value = _useState2[0],
5857
- setValue = _useState2[1];
5902
+ var _useRefState = useRefState(null),
5903
+ _useRefState2 = Typography._slicedToArray(_useRefState, 3),
5904
+ value = _useRefState2[0],
5905
+ valueRef = _useRefState2[1],
5906
+ setValue = _useRefState2[2];
5907
+ var componentRef = React$3.useRef(null);
5858
5908
  var id = TreeSelect.useId(otherProps.id);
5859
5909
  var errorId = "error_".concat(id);
5860
5910
  React$3.useEffect(function () {
@@ -5863,16 +5913,43 @@ var TimePickerInput = /*#__PURE__*/React$3.forwardRef(function (_ref, ref) {
5863
5913
  }, [type, inputValue]);
5864
5914
  var handleChange = function handleChange(newValue) {
5865
5915
  setValue(newValue);
5866
- onChange(toDayJs(newValue), newValue);
5916
+ if (isValid(minTime, maxTime, newValue)) {
5917
+ onChange(toDayJs(newValue), newValue);
5918
+ }
5867
5919
  };
5868
- var handleShouldCloseClock = function handleShouldCloseClock() {
5869
- onBlur(toDayJs(value), value);
5920
+ var onBlurHandle = function onBlurHandle() {
5921
+ var value = valueRef.current;
5922
+ if (isValid(minTime, maxTime, value)) {
5923
+ onBlur(toDayJs(value), value);
5924
+ } else {
5925
+ var validValue = getValid(minTime, maxTime, value);
5926
+ setValue(validValue);
5927
+ onChange(toDayJs(validValue), validValue);
5928
+ onBlur(toDayJs(validValue), validValue);
5929
+ }
5870
5930
  return true;
5871
5931
  };
5932
+
5933
+ // If you just make amPm select change, onBlurHandle is not triggering. A work around
5934
+ React$3.useEffect(function () {
5935
+ var _document$getElementB;
5936
+ var amPmChange = function amPmChange() {
5937
+ return setTimeout(onBlurHandle);
5938
+ };
5939
+ var selectElements = (_document$getElementB = document.getElementById(id)) === null || _document$getElementB === void 0 ? void 0 : _document$getElementB.querySelectorAll("[name='amPm']");
5940
+ selectElements === null || selectElements === void 0 || selectElements.forEach(function (element) {
5941
+ return element.addEventListener("change", amPmChange);
5942
+ });
5943
+ return function () {
5944
+ selectElements === null || selectElements === void 0 || selectElements.forEach(function (element) {
5945
+ return element.removeEventListener("change", amPmChange);
5946
+ });
5947
+ };
5948
+ }, [value]);
5872
5949
  var handleKeyDown = function handleKeyDown(_ref2) {
5873
5950
  var code = _ref2.code;
5874
5951
  if (code !== "Enter") return;
5875
- onBlur(toDayJs(value), value);
5952
+ onBlurHandle();
5876
5953
  };
5877
5954
  var Component = timeComponents[type];
5878
5955
  return /*#__PURE__*/React__default["default"].createElement("div", {
@@ -5890,8 +5967,9 @@ var TimePickerInput = /*#__PURE__*/React$3.forwardRef(function (_ref, ref) {
5890
5967
  format: "hh:mm a",
5891
5968
  hourPlaceholder: "HH",
5892
5969
  minutePlaceholder: "mm",
5970
+ ref: componentRef,
5893
5971
  secondAriaLabel: "ss",
5894
- shouldCloseClock: handleShouldCloseClock,
5972
+ shouldCloseClock: onBlurHandle,
5895
5973
  className: Typography.classnames("neeto-ui-time-picker", [className], {
5896
5974
  "neeto-ui-time-picker--small": size === "small",
5897
5975
  "neeto-ui-time-picker--medium": size === "medium",
@@ -5928,6 +6006,9 @@ var getAllowedTime = function getAllowedTime(date, time, minDateTime, maxDateTim
5928
6006
  }
5929
6007
  return newTime;
5930
6008
  };
6009
+ var getTime = function getTime(date) {
6010
+ return date === null || date === void 0 ? void 0 : date.format(TIME_FORMAT);
6011
+ };
5931
6012
 
5932
6013
  function ownKeys$b(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
5933
6014
  function _objectSpread$b(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$b(Object(source), !0).forEach(function (key) { Typography._defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$b(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
@@ -6030,7 +6111,7 @@ var DateTimePicker = function DateTimePicker(_ref) {
6030
6111
  error: error,
6031
6112
  nakedInput: nakedInput,
6032
6113
  size: size
6033
- }, "error", !!error), "maxTime", (date === null || date === void 0 ? void 0 : date.isSame(maxDateTime, "day")) && (maxDateTime === null || maxDateTime === void 0 ? void 0 : maxDateTime.toDate())), "minTime", (date === null || date === void 0 ? void 0 : date.isSame(minDateTime, "day")) && (minDateTime === null || minDateTime === void 0 ? void 0 : minDateTime.toDate())), "ref", timeRef), "value", time), "onBlur", handleTimeBlur), "onChange", handleTimeChange), timePickerProps))), !!error && /*#__PURE__*/React__default["default"].createElement("p", {
6114
+ }, "error", !!error), "maxTime", (date === null || date === void 0 ? void 0 : date.isSame(maxDateTime, "day")) && getTime(maxDateTime)), "minTime", (date === null || date === void 0 ? void 0 : date.isSame(minDateTime, "day")) && getTime(minDateTime)), "ref", timeRef), "value", time), "onBlur", handleTimeBlur), "onChange", handleTimeChange), timePickerProps))), !!error && /*#__PURE__*/React__default["default"].createElement("p", {
6034
6115
  className: "neeto-ui-input__error",
6035
6116
  "data-cy": "".concat(Typography.hyphenize(label), "-input-error"),
6036
6117
  id: errorId