@datarobot/design-system 29.7.5 → 29.7.6

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.
@@ -61,10 +61,10 @@ export type DateRangePickerPanelProps = {
61
61
  timeFormat: string | boolean;
62
62
  utcSuffix?: string;
63
63
  validateOnClick?: ValidateOnClick;
64
- validateOnChange: ValidateOnChange;
64
+ validateOnChange?: ValidateOnChange;
65
65
  dateStartInputAriaLabel: string;
66
66
  dateEndInputAriaLabel: string;
67
67
  };
68
68
  /** Represents the panel used to select two datetimes that make up a range. */
69
- declare function DateRangePickerPanel({ buttonText, cancelButtonText, dateFormat, defaultEnd, defaultStart, initialDirection, initialViewMode, initialTargetInput, maxEnd, minStart, sameDateError, onSubmit, onDismiss, resetText, timeFormat, utcSuffix, validateOnClick: propValidateOnClick, validateOnChange, dateStartInputAriaLabel, dateEndInputAriaLabel, }: DateRangePickerPanelProps): import("react/jsx-runtime").JSX.Element;
69
+ declare function DateRangePickerPanel({ buttonText, cancelButtonText, dateFormat, defaultEnd, defaultStart, initialDirection, initialViewMode, initialTargetInput, maxEnd, minStart, sameDateError, onSubmit, onDismiss, resetText, timeFormat, utcSuffix, validateOnClick: propValidateOnClick, validateOnChange: propValidateOnChange, dateStartInputAriaLabel, dateEndInputAriaLabel, }: DateRangePickerPanelProps): import("react/jsx-runtime").JSX.Element;
70
70
  export default DateRangePickerPanel;
@@ -98,12 +98,14 @@ function DateRangePickerPanel({
98
98
  timeFormat,
99
99
  utcSuffix,
100
100
  validateOnClick: propValidateOnClick,
101
- validateOnChange,
101
+ validateOnChange: propValidateOnChange,
102
102
  dateStartInputAriaLabel,
103
103
  dateEndInputAriaLabel
104
104
  }) {
105
105
  const defaultValidateOnClick = (0, _helpers.useValidateOnClick)();
106
+ const defaultValidateOnChange = (0, _helpers.useGetDateTimeValidityError)();
106
107
  const validateOnClick = propValidateOnClick || defaultValidateOnClick;
108
+ const validateOnChange = propValidateOnChange || defaultValidateOnChange;
107
109
  const dateTimeFormat = (0, _helpers.getDateTimeFormat)(dateFormat, timeFormat);
108
110
 
109
111
  // Developer-provided datetimes might not always follow the exact date and time format they want to use.
@@ -24,7 +24,7 @@ export type InitialDirection = ValueOf<typeof INITIAL_DIRECTION>;
24
24
  export type DateRangePickerProps = {
25
25
  onUpdate: (updatedStart: Moment, updatedEnd: Moment) => void;
26
26
  validateOnClick?: ValidateOnClick;
27
- validateOnChange: ValidateOnChange;
27
+ validateOnChange?: ValidateOnChange;
28
28
  start: Moment;
29
29
  end: Moment;
30
30
  minStart?: Moment;
@@ -23,6 +23,14 @@ export declare function useValidateOnClick(): ({ start, end, minStart, maxEnd, v
23
23
  END_AFTER_MAX?: string | undefined;
24
24
  };
25
25
  };
26
+ /** Checks whether a string can be strictly parsed as a moment object following a provided datetime format
27
+ *
28
+ * @param {string} proposedDateTime
29
+ * @param {string} dateTimeFormat
30
+ * @returns {boolean}
31
+ */
32
+ export declare function isValidDateTime(proposedDateTime: string, dateTimeFormat: string): boolean;
33
+ export declare function useGetDateTimeValidityError(): (dateTime: string, dateTimeFormat: string) => string | undefined;
26
34
  export interface StringToMomentParams {
27
35
  dateTimeFormat?: string;
28
36
  strictParse?: boolean;
@@ -13,7 +13,9 @@ exports.getValidityFromErrors = getValidityFromErrors;
13
13
  exports.isMonthRelatedToTimePicker = isMonthRelatedToTimePicker;
14
14
  exports.isNavigationAvailableForMonthsView = isNavigationAvailableForMonthsView;
15
15
  exports.isNavigationAvailableForYearsView = isNavigationAvailableForYearsView;
16
+ exports.isValidDateTime = isValidDateTime;
16
17
  exports.truncateDateTimeToFormat = truncateDateTimeToFormat;
18
+ exports.useGetDateTimeValidityError = useGetDateTimeValidityError;
17
19
  exports.useValidateOnClick = useValidateOnClick;
18
20
  var _react = _interopRequireDefault(require("react"));
19
21
  var _moment = _interopRequireDefault(require("moment"));
@@ -93,7 +95,7 @@ function useValidateOnClick() {
93
95
  fieldName: VALIDATION_ENTITY[viewMode].end
94
96
  });
95
97
  }
96
- if (start && end) {
98
+ if (start && end && end.isValid()) {
97
99
  endErrors = (0, _omit.default)(endErrors, [_datetimeRangePickerPanel.DATE_RANGE_ERROR_TYPES.INVALID_END_DATE]);
98
100
  }
99
101
  if (sameDateError && start?.isSame(end)) {
@@ -108,6 +110,43 @@ function useValidateOnClick() {
108
110
  };
109
111
  };
110
112
  }
113
+
114
+ /** Checks whether a string can be strictly parsed as a moment object following a provided datetime format
115
+ *
116
+ * @param {string} proposedDateTime
117
+ * @param {string} dateTimeFormat
118
+ * @returns {boolean}
119
+ */
120
+ function isValidDateTime(proposedDateTime, dateTimeFormat) {
121
+ try {
122
+ convertStringToMoment(proposedDateTime, {
123
+ dateTimeFormat
124
+ })?.isValid();
125
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
126
+ } catch (err) {
127
+ return false;
128
+ }
129
+ return true;
130
+ }
131
+ function useGetDateTimeValidityError() {
132
+ const {
133
+ t
134
+ } = (0, _useTranslation.useTranslation)();
135
+ return function getDateTimeValidityError(dateTime, dateTimeFormat) {
136
+ if (_moment.default.isMoment(dateTime)) {
137
+ return;
138
+ }
139
+ if (typeof dateTime === 'string') {
140
+ if (isValidDateTime(dateTime, dateTimeFormat)) {
141
+ return;
142
+ }
143
+ return t('Must follow {{dateTimeFormat}} format', {
144
+ dateTimeFormat
145
+ });
146
+ }
147
+ return t('Expected a datetime');
148
+ };
149
+ }
111
150
  function getValidityFromErrors(errorMapping) {
112
151
  let validityValues;
113
152
  if ((0, _isEmpty.default)(errorMapping)) {
@@ -61,10 +61,10 @@ export type DateRangePickerPanelProps = {
61
61
  timeFormat: string | boolean;
62
62
  utcSuffix?: string;
63
63
  validateOnClick?: ValidateOnClick;
64
- validateOnChange: ValidateOnChange;
64
+ validateOnChange?: ValidateOnChange;
65
65
  dateStartInputAriaLabel: string;
66
66
  dateEndInputAriaLabel: string;
67
67
  };
68
68
  /** Represents the panel used to select two datetimes that make up a range. */
69
- declare function DateRangePickerPanel({ buttonText, cancelButtonText, dateFormat, defaultEnd, defaultStart, initialDirection, initialViewMode, initialTargetInput, maxEnd, minStart, sameDateError, onSubmit, onDismiss, resetText, timeFormat, utcSuffix, validateOnClick: propValidateOnClick, validateOnChange, dateStartInputAriaLabel, dateEndInputAriaLabel, }: DateRangePickerPanelProps): import("react/jsx-runtime").JSX.Element;
69
+ declare function DateRangePickerPanel({ buttonText, cancelButtonText, dateFormat, defaultEnd, defaultStart, initialDirection, initialViewMode, initialTargetInput, maxEnd, minStart, sameDateError, onSubmit, onDismiss, resetText, timeFormat, utcSuffix, validateOnClick: propValidateOnClick, validateOnChange: propValidateOnChange, dateStartInputAriaLabel, dateEndInputAriaLabel, }: DateRangePickerPanelProps): import("react/jsx-runtime").JSX.Element;
70
70
  export default DateRangePickerPanel;
@@ -7,7 +7,7 @@ import { ValidityMessages } from '../form-field';
7
7
  import DateRangeSingleDatePicker from './date-range-single-date-picker';
8
8
  import { VIEW_MODE_TYPE } from './datetime-range-picker';
9
9
  import DateRangeSingleDatePickerInput from './date-range-single-date-picker-input';
10
- import { getValidityFromErrors, customizeCalendarView, customizeRenderCalendarView, isMonthRelatedToTimePicker, isNavigationAvailableForMonthsView, isNavigationAvailableForYearsView, getLeftCalendarInitialView, getRightCalendarInitialView, truncateDateTimeToFormat, convertStringToMoment, getDateTimeFormat, useValidateOnClick } from './helpers';
10
+ import { getValidityFromErrors, customizeCalendarView, customizeRenderCalendarView, isMonthRelatedToTimePicker, isNavigationAvailableForMonthsView, isNavigationAvailableForYearsView, getLeftCalendarInitialView, getRightCalendarInitialView, truncateDateTimeToFormat, convertStringToMoment, getDateTimeFormat, useValidateOnClick, useGetDateTimeValidityError } from './helpers';
11
11
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
12
12
  export let DATE_RANGE_ERROR_TYPES = /*#__PURE__*/function (DATE_RANGE_ERROR_TYPES) {
13
13
  DATE_RANGE_ERROR_TYPES["INVALID_DATETIME"] = "INVALID_DATETIME";
@@ -90,12 +90,14 @@ function DateRangePickerPanel({
90
90
  timeFormat,
91
91
  utcSuffix,
92
92
  validateOnClick: propValidateOnClick,
93
- validateOnChange,
93
+ validateOnChange: propValidateOnChange,
94
94
  dateStartInputAriaLabel,
95
95
  dateEndInputAriaLabel
96
96
  }) {
97
97
  const defaultValidateOnClick = useValidateOnClick();
98
+ const defaultValidateOnChange = useGetDateTimeValidityError();
98
99
  const validateOnClick = propValidateOnClick || defaultValidateOnClick;
100
+ const validateOnChange = propValidateOnChange || defaultValidateOnChange;
99
101
  const dateTimeFormat = getDateTimeFormat(dateFormat, timeFormat);
100
102
 
101
103
  // Developer-provided datetimes might not always follow the exact date and time format they want to use.
@@ -24,7 +24,7 @@ export type InitialDirection = ValueOf<typeof INITIAL_DIRECTION>;
24
24
  export type DateRangePickerProps = {
25
25
  onUpdate: (updatedStart: Moment, updatedEnd: Moment) => void;
26
26
  validateOnClick?: ValidateOnClick;
27
- validateOnChange: ValidateOnChange;
27
+ validateOnChange?: ValidateOnChange;
28
28
  start: Moment;
29
29
  end: Moment;
30
30
  minStart?: Moment;
@@ -23,6 +23,14 @@ export declare function useValidateOnClick(): ({ start, end, minStart, maxEnd, v
23
23
  END_AFTER_MAX?: string | undefined;
24
24
  };
25
25
  };
26
+ /** Checks whether a string can be strictly parsed as a moment object following a provided datetime format
27
+ *
28
+ * @param {string} proposedDateTime
29
+ * @param {string} dateTimeFormat
30
+ * @returns {boolean}
31
+ */
32
+ export declare function isValidDateTime(proposedDateTime: string, dateTimeFormat: string): boolean;
33
+ export declare function useGetDateTimeValidityError(): (dateTime: string, dateTimeFormat: string) => string | undefined;
26
34
  export interface StringToMomentParams {
27
35
  dateTimeFormat?: string;
28
36
  strictParse?: boolean;
@@ -75,7 +75,7 @@ export function useValidateOnClick() {
75
75
  fieldName: VALIDATION_ENTITY[viewMode].end
76
76
  });
77
77
  }
78
- if (start && end) {
78
+ if (start && end && end.isValid()) {
79
79
  endErrors = omit(endErrors, [DATE_RANGE_ERROR_TYPES.INVALID_END_DATE]);
80
80
  }
81
81
  if (sameDateError && start?.isSame(end)) {
@@ -90,6 +90,43 @@ export function useValidateOnClick() {
90
90
  };
91
91
  };
92
92
  }
93
+
94
+ /** Checks whether a string can be strictly parsed as a moment object following a provided datetime format
95
+ *
96
+ * @param {string} proposedDateTime
97
+ * @param {string} dateTimeFormat
98
+ * @returns {boolean}
99
+ */
100
+ export function isValidDateTime(proposedDateTime, dateTimeFormat) {
101
+ try {
102
+ convertStringToMoment(proposedDateTime, {
103
+ dateTimeFormat
104
+ })?.isValid();
105
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
106
+ } catch (err) {
107
+ return false;
108
+ }
109
+ return true;
110
+ }
111
+ export function useGetDateTimeValidityError() {
112
+ const {
113
+ t
114
+ } = useTranslation();
115
+ return function getDateTimeValidityError(dateTime, dateTimeFormat) {
116
+ if (moment.isMoment(dateTime)) {
117
+ return;
118
+ }
119
+ if (typeof dateTime === 'string') {
120
+ if (isValidDateTime(dateTime, dateTimeFormat)) {
121
+ return;
122
+ }
123
+ return t('Must follow {{dateTimeFormat}} format', {
124
+ dateTimeFormat
125
+ });
126
+ }
127
+ return t('Expected a datetime');
128
+ };
129
+ }
93
130
  export function getValidityFromErrors(errorMapping) {
94
131
  let validityValues;
95
132
  if (isEmpty(errorMapping)) {
@@ -49883,11 +49883,13 @@ function DateRangePickerPanel(_ref2) {
49883
49883
  timeFormat = _ref2.timeFormat,
49884
49884
  utcSuffix = _ref2.utcSuffix,
49885
49885
  propValidateOnClick = _ref2.validateOnClick,
49886
- validateOnChange = _ref2.validateOnChange,
49886
+ propValidateOnChange = _ref2.validateOnChange,
49887
49887
  dateStartInputAriaLabel = _ref2.dateStartInputAriaLabel,
49888
49888
  dateEndInputAriaLabel = _ref2.dateEndInputAriaLabel;
49889
49889
  var defaultValidateOnClick = (0,_helpers__WEBPACK_IMPORTED_MODULE_8__.useValidateOnClick)();
49890
+ var defaultValidateOnChange = (0,_helpers__WEBPACK_IMPORTED_MODULE_8__.useGetDateTimeValidityError)();
49890
49891
  var validateOnClick = propValidateOnClick || defaultValidateOnClick;
49892
+ var validateOnChange = propValidateOnChange || defaultValidateOnChange;
49891
49893
  var dateTimeFormat = (0,_helpers__WEBPACK_IMPORTED_MODULE_8__.getDateTimeFormat)(dateFormat, timeFormat);
49892
49894
 
49893
49895
  // Developer-provided datetimes might not always follow the exact date and time format they want to use.
@@ -50499,8 +50501,10 @@ function DateRangePicker(_ref) {
50499
50501
  /* harmony export */ isNavigationAvailableForMonthsView: () => (/* binding */ isNavigationAvailableForMonthsView),
50500
50502
  /* harmony export */ isNavigationAvailableForYearsView: () => (/* binding */ isNavigationAvailableForYearsView),
50501
50503
  /* harmony export */ truncateDateTimeToFormat: () => (/* binding */ truncateDateTimeToFormat),
50504
+ /* harmony export */ useGetDateTimeValidityError: () => (/* binding */ useGetDateTimeValidityError),
50502
50505
  /* harmony export */ useValidateOnClick: () => (/* binding */ useValidateOnClick)
50503
50506
  /* harmony export */ });
50507
+ /* unused harmony export isValidDateTime */
50504
50508
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
50505
50509
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
50506
50510
  /* harmony import */ var moment__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! moment */ "moment");
@@ -50598,7 +50602,7 @@ function useValidateOnClick() {
50598
50602
  fieldName: VALIDATION_ENTITY[viewMode].end
50599
50603
  });
50600
50604
  }
50601
- if (start && end) {
50605
+ if (start && end && end.isValid()) {
50602
50606
  endErrors = (0,lodash_es_omit__WEBPACK_IMPORTED_MODULE_8__["default"])(endErrors, [_datetime_range_picker_panel__WEBPACK_IMPORTED_MODULE_7__.DATE_RANGE_ERROR_TYPES.INVALID_END_DATE]);
50603
50607
  }
50604
50608
  if (sameDateError && start !== null && start !== void 0 && start.isSame(end)) {
@@ -50613,6 +50617,43 @@ function useValidateOnClick() {
50613
50617
  };
50614
50618
  };
50615
50619
  }
50620
+
50621
+ /** Checks whether a string can be strictly parsed as a moment object following a provided datetime format
50622
+ *
50623
+ * @param {string} proposedDateTime
50624
+ * @param {string} dateTimeFormat
50625
+ * @returns {boolean}
50626
+ */
50627
+ function isValidDateTime(proposedDateTime, dateTimeFormat) {
50628
+ try {
50629
+ var _convertStringToMomen;
50630
+ (_convertStringToMomen = convertStringToMoment(proposedDateTime, {
50631
+ dateTimeFormat: dateTimeFormat
50632
+ })) === null || _convertStringToMomen === void 0 || _convertStringToMomen.isValid();
50633
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
50634
+ } catch (err) {
50635
+ return false;
50636
+ }
50637
+ return true;
50638
+ }
50639
+ function useGetDateTimeValidityError() {
50640
+ var _useTranslation2 = (0,_hooks_use_translation__WEBPACK_IMPORTED_MODULE_6__.useTranslation)(),
50641
+ t = _useTranslation2.t;
50642
+ return function getDateTimeValidityError(dateTime, dateTimeFormat) {
50643
+ if (moment__WEBPACK_IMPORTED_MODULE_1___default().isMoment(dateTime)) {
50644
+ return;
50645
+ }
50646
+ if (typeof dateTime === 'string') {
50647
+ if (isValidDateTime(dateTime, dateTimeFormat)) {
50648
+ return;
50649
+ }
50650
+ return t('Must follow {{dateTimeFormat}} format', {
50651
+ dateTimeFormat: dateTimeFormat
50652
+ });
50653
+ }
50654
+ return t('Expected a datetime');
50655
+ };
50656
+ }
50616
50657
  function getValidityFromErrors(errorMapping) {
50617
50658
  var validityValues;
50618
50659
  if ((0,lodash_es_isEmpty__WEBPACK_IMPORTED_MODULE_9__["default"])(errorMapping)) {