@elliemae/ds-date-time-picker 2.2.1 → 2.3.0-alpha.4

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.
@@ -1,285 +1,254 @@
1
- 'use strict';
2
-
3
- var _objectWithoutProperties = require('@babel/runtime/helpers/objectWithoutProperties');
4
- var _defineProperty = require('@babel/runtime/helpers/defineProperty');
5
- var _jsx = require('@babel/runtime/helpers/jsx');
6
- require('core-js/modules/web.dom-collections.iterator.js');
7
- require('core-js/modules/esnext.async-iterator.filter.js');
8
- require('core-js/modules/esnext.iterator.constructor.js');
9
- require('core-js/modules/esnext.iterator.filter.js');
10
- require('core-js/modules/esnext.async-iterator.for-each.js');
11
- require('core-js/modules/esnext.iterator.for-each.js');
12
- var react = require('react');
13
- var moment = require('moment');
14
- var dsClassnames = require('@elliemae/ds-classnames');
15
- var dsDatePicker = require('@elliemae/ds-date-picker');
16
- var dsForm = require('@elliemae/ds-form');
17
- var dsUtilities = require('@elliemae/ds-utilities');
18
- var dsTimePicker = require('@elliemae/ds-time-picker');
19
- var utils = require('../utils.js');
20
- var jsxRuntime = require('react/jsx-runtime');
21
-
22
- function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
23
-
24
- var _objectWithoutProperties__default = /*#__PURE__*/_interopDefaultLegacy(_objectWithoutProperties);
25
- var _defineProperty__default = /*#__PURE__*/_interopDefaultLegacy(_defineProperty);
26
- var _jsx__default = /*#__PURE__*/_interopDefaultLegacy(_jsx);
27
- var moment__default = /*#__PURE__*/_interopDefaultLegacy(moment);
28
-
29
- const _excluded = ["onChange"];
30
-
31
- function ownKeys(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; }
32
-
33
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
34
- const blockName = 'date-time-picker';
35
- const DateTimePickerWrapper = dsClassnames.aggregatedClasses('div')(blockName, 'wrapper');
36
- const TimePicker = dsClassnames.aggregatedClasses(dsTimePicker.DSTimePickerMenu)(blockName, 'time-picker');
37
- const TimePickerWrapper = dsClassnames.aggregatedClasses('div')(blockName, 'time-picker-wrapper'); // const DateInput = aggregatedClasses(DateInputsV2Impl)(blockName, 'date-input');
38
-
39
- const formatDate = 'MMDDYYYY';
40
-
41
- const DSDateTimePickerImpl = _ref => {
42
- let {
43
- onBlur = () => null,
44
- placeholder,
45
- date,
46
- clearable,
47
- datePickerProps: {
48
- disabled = false,
49
- numberOfMonths = 1,
50
- readOnly = false,
51
- enableOutsideDays = false,
52
- transitionDuration = 0,
53
- firstDayOfWeek = 0,
54
- keepOpenOnDateSelect = true,
55
- hideKeyboardShortcutsPanel = true,
56
- onPrevMonthClick = () => null,
57
- onNextMonthClick = () => null,
58
- onClose = () => null,
59
- onChange: onDatePickerChange = () => null,
60
- onDateChange = () => null,
61
- onError: onErrorDate = () => null,
62
- phrases = dsDatePicker.SingleDatePickerPhrases,
63
- displayFormatDay = 'D',
64
- isDayBlocked = () => false,
65
- isOutsideRange = () => false,
66
- isDayHighlighted = () => false,
67
- zIndex = 11
68
- },
69
- timePickerProps: {
70
- format = 'hh:mm A',
71
- onChange: onChangeTimePicker = () => null,
72
- disabledTimes = undefined,
73
- onError: onErrorTime = () => null,
74
- minutesInterval = 1
75
- },
76
- dateInputProps: {
77
- onDateInputDateChange = () => null
78
- }
79
- } = _ref;
80
- const [selectedDate, setSelectedDate] = react.useState(undefined);
81
- const [incompleteInput, setIncompleteInput] = react.useState(undefined);
82
- const [isOpen, setIsOpen] = react.useState(false);
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __markAsModule = (target) => __defProp(target, "__esModule", { value: true });
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __reExport = (target, module2, copyDefault, desc) => {
13
+ if (module2 && typeof module2 === "object" || typeof module2 === "function") {
14
+ for (let key of __getOwnPropNames(module2))
15
+ if (!__hasOwnProp.call(target, key) && (copyDefault || key !== "default"))
16
+ __defProp(target, key, { get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable });
17
+ }
18
+ return target;
19
+ };
20
+ var __toESM = (module2, isNodeMode) => {
21
+ return __reExport(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", !isNodeMode && module2 && module2.__esModule ? { get: () => module2.default, enumerable: true } : { value: module2, enumerable: true })), module2);
22
+ };
23
+ var __toCommonJS = /* @__PURE__ */ ((cache) => {
24
+ return (module2, temp) => {
25
+ return cache && cache.get(module2) || (temp = __reExport(__markAsModule({}), module2, 1), cache && cache.set(module2, temp), temp);
26
+ };
27
+ })(typeof WeakMap !== "undefined" ? /* @__PURE__ */ new WeakMap() : 0);
28
+ var DateTimePickerImpl_exports = {};
29
+ __export(DateTimePickerImpl_exports, {
30
+ DSDateTimePickerImpl: () => DSDateTimePickerImpl,
31
+ default: () => DateTimePickerImpl_default
32
+ });
33
+ var React = __toESM(require("react"));
34
+ var import_react = __toESM(require("react"));
35
+ var import_moment = __toESM(require("moment"));
36
+ var import_ds_classnames = require("@elliemae/ds-classnames");
37
+ var import_ds_date_picker = require("@elliemae/ds-date-picker");
38
+ var import_ds_form = require("@elliemae/ds-form");
39
+ var import_ds_utilities = require("@elliemae/ds-utilities");
40
+ var import_ds_time_picker = require("@elliemae/ds-time-picker");
41
+ var import_utils = require("../utils");
42
+ const blockName = "date-time-picker";
43
+ const DateTimePickerWrapper = (0, import_ds_classnames.aggregatedClasses)("div")(blockName, "wrapper");
44
+ const TimePicker = (0, import_ds_classnames.aggregatedClasses)(import_ds_time_picker.DSTimePickerMenu)(blockName, "time-picker");
45
+ const TimePickerWrapper = (0, import_ds_classnames.aggregatedClasses)("div")(blockName, "time-picker-wrapper");
46
+ const formatDate = "MMDDYYYY";
47
+ const DSDateTimePickerImpl = ({
48
+ onBlur = () => null,
49
+ placeholder,
50
+ date,
51
+ clearable,
52
+ datePickerProps: {
53
+ disabled = false,
54
+ numberOfMonths = 1,
55
+ readOnly = false,
56
+ enableOutsideDays = false,
57
+ transitionDuration = 0,
58
+ firstDayOfWeek = 0,
59
+ keepOpenOnDateSelect = true,
60
+ hideKeyboardShortcutsPanel = true,
61
+ onPrevMonthClick = () => null,
62
+ onNextMonthClick = () => null,
63
+ onClose = () => null,
64
+ onChange: onDatePickerChange = () => null,
65
+ onDateChange = () => null,
66
+ onError: onErrorDate = () => null,
67
+ phrases = import_ds_date_picker.SingleDatePickerPhrases,
68
+ displayFormatDay = "D",
69
+ isDayBlocked = () => false,
70
+ isOutsideRange = () => false,
71
+ isDayHighlighted = () => false,
72
+ zIndex = 11
73
+ },
74
+ timePickerProps: {
75
+ format = "hh:mm A",
76
+ onChange: onChangeTimePicker = () => null,
77
+ disabledTimes = void 0,
78
+ onError: onErrorTime = () => null,
79
+ minutesInterval = 1
80
+ },
81
+ dateInputProps: { onDateInputDateChange = () => null }
82
+ }) => {
83
+ const [selectedDate, setSelectedDate] = (0, import_react.useState)(void 0);
84
+ const [incompleteInput, setIncompleteInput] = (0, import_react.useState)(void 0);
85
+ const [isOpen, setIsOpen] = (0, import_react.useState)(false);
83
86
  const disabledTimeRange = disabledTimes && {
84
- from: dsTimePicker.convertTimeString(disabledTimes.from),
85
- to: dsTimePicker.convertTimeString(disabledTimes.to)
87
+ from: (0, import_ds_time_picker.convertTimeString)(disabledTimes.from),
88
+ to: (0, import_ds_time_picker.convertTimeString)(disabledTimes.to)
86
89
  };
87
- const dateTimePickerWrapperRef = react.useRef();
88
- const fullFormat = "".concat(formatDate, " ").concat(format);
89
- react.useEffect(() => {
90
+ const dateTimePickerWrapperRef = (0, import_react.useRef)();
91
+ const fullFormat = `${formatDate} ${format}`;
92
+ (0, import_react.useEffect)(() => {
90
93
  if (date) {
91
- setSelectedDate(moment__default["default"](date));
92
- } else if (date === null) setSelectedDate(undefined);
94
+ setSelectedDate((0, import_moment.default)(date));
95
+ } else if (date === null)
96
+ setSelectedDate(void 0);
93
97
  }, [date]);
94
- const visiblePanels = react.useMemo(() => dsUtilities.getVisibleTimeByFormat(format), []);
95
- const currentYear = moment__default["default"]().year();
96
-
97
- const handleDatePickerChange = dateSelected => {
98
- const splittedDate = utils.updateDateAndTime(dateSelected, selectedDate);
99
-
98
+ const visiblePanels = (0, import_react.useMemo)(() => (0, import_ds_utilities.getVisibleTimeByFormat)(format), []);
99
+ const currentYear = (0, import_moment.default)().year();
100
+ const handleDatePickerChange = (dateSelected) => {
101
+ const splittedDate = (0, import_utils.updateDateAndTime)(dateSelected, selectedDate);
100
102
  if (!readOnly) {
101
103
  setSelectedDate(splittedDate);
102
104
  onDateChange(splittedDate);
103
105
  }
104
106
  };
105
-
106
- const onTimeChange = pickerTime => {
107
- const splittedDate = utils.updateDateAndTime(selectedDate, pickerTime);
107
+ const onTimeChange = (pickerTime) => {
108
+ const splittedDate = (0, import_utils.updateDateAndTime)(selectedDate, pickerTime);
108
109
  onChangeTimePicker(splittedDate);
109
110
  setSelectedDate(splittedDate);
110
111
  };
111
-
112
112
  const handleInputChange = (inputValue, type) => {
113
113
  onDatePickerChange(inputValue);
114
114
  let timeBlocked = false;
115
- const inputMoment = moment__default["default"](inputValue, fullFormat);
115
+ const inputMoment = (0, import_moment.default)(inputValue, fullFormat);
116
116
  setIncompleteInput(inputValue);
117
-
118
- if (type === 'date') {
119
- const splittedDate = utils.updateDateAndTime(inputMoment, selectedDate);
120
-
117
+ if (type === "date") {
118
+ const splittedDate = (0, import_utils.updateDateAndTime)(inputMoment, selectedDate);
121
119
  if (inputValue.length < 8) {
122
- onErrorDate({
123
- message: 'date incomplete',
124
- inputValue
125
- });
126
- if (clearable) onDateChange('error');
120
+ onErrorDate({ message: "date incomplete", inputValue });
121
+ if (clearable)
122
+ onDateChange("error");
127
123
  return;
128
124
  }
129
-
130
125
  if (inputValue.length === 8 && inputMoment.isValid()) {
131
126
  setSelectedDate(splittedDate);
132
127
  onChangeTimePicker(splittedDate);
133
128
  }
134
-
135
129
  onDateChange(splittedDate);
136
130
  return;
137
131
  }
138
-
139
132
  if (disabledTimeRange) {
140
133
  const hour = inputValue.hour();
141
134
  const min = inputValue.minutes();
142
- const {
143
- from,
144
- to
145
- } = disabledTimeRange;
146
-
135
+ const { from, to } = disabledTimeRange;
147
136
  if (hour > from.hour && hour < to.hour || hour === to.hour && min < to.min) {
148
137
  timeBlocked = true;
149
138
  }
150
139
  }
151
-
152
- if (timeBlocked) onErrorTime({
153
- message: 'time blocked',
154
- inputValue
155
- });
140
+ if (timeBlocked)
141
+ onErrorTime({ message: "time blocked", inputValue });
156
142
  const dateBlocked = isDayBlocked(inputMoment);
157
- if (dateBlocked) onErrorDate({
158
- message: 'date blocked',
159
- inputValue
160
- });
161
-
143
+ if (dateBlocked)
144
+ onErrorDate({ message: "date blocked", inputValue });
162
145
  if (!timeBlocked && !dateBlocked) {
163
146
  onDateChange(inputValue);
164
147
  }
165
148
  };
166
-
167
- const handleOutsideClick = event => {
149
+ const handleOutsideClick = (event) => {
168
150
  if (!dateTimePickerWrapperRef.current.contains(event.target)) {
169
151
  setIsOpen(false);
170
152
  }
171
153
  };
172
-
173
154
  const handleClickEscape = () => setIsOpen(false);
174
-
175
155
  const handleOpen = () => setIsOpen(true);
176
-
177
- const handleContainerBlur = event => {
156
+ const handleContainerBlur = (event) => {
178
157
  if (!isOpen && !event.currentTarget.contains(event.relatedTarget)) {
179
- onBlur(event, selectedDate !== null && selectedDate !== void 0 && selectedDate.isValid() ? selectedDate : {
158
+ onBlur(event, selectedDate?.isValid() ? selectedDate : {
180
159
  error: true,
181
- message: 'incomplete input',
160
+ message: "incomplete input",
182
161
  input: incompleteInput
183
162
  });
184
-
185
163
  if (clearable && !selectedDate && !!incompleteInput) {
186
- const inputMoment = moment__default["default"](incompleteInput, fullFormat);
187
- const splittedDate = utils.updateDateAndTime(inputMoment, selectedDate);
164
+ const inputMoment = (0, import_moment.default)(incompleteInput, fullFormat);
165
+ const splittedDate = (0, import_utils.updateDateAndTime)(inputMoment, selectedDate);
188
166
  setSelectedDate(splittedDate);
189
167
  onDateChange(splittedDate);
190
168
  }
191
169
  }
192
170
  };
193
-
194
- react.useEffect(() => {
195
- if (!isOpen) onBlur({}, selectedDate !== null && selectedDate !== void 0 && selectedDate.isValid() ? selectedDate : {
196
- error: true,
197
- message: 'incomplete input',
198
- input: incompleteInput
199
- });
171
+ (0, import_react.useEffect)(() => {
172
+ if (!isOpen)
173
+ onBlur({}, selectedDate?.isValid() ? selectedDate : {
174
+ error: true,
175
+ message: "incomplete input",
176
+ input: incompleteInput
177
+ });
200
178
  }, [isOpen]);
201
179
  const hasSelectedDate = !!selectedDate;
202
- return /*#__PURE__*/_jsx__default["default"](dsForm.DSInputGroup, {
180
+ return /* @__PURE__ */ import_react.default.createElement(import_ds_form.DSInputGroup, {
203
181
  containerProps: {
204
182
  onBlur: handleContainerBlur
205
183
  },
206
- rightAddon: /*#__PURE__*/_jsx__default["default"](dsDatePicker.DatePickerDropdown, {
207
- disabled: disabled,
208
- isOpen: isOpen,
209
- zIndex: zIndex,
210
- menu: /*#__PURE__*/jsxRuntime.jsxs(DateTimePickerWrapper, {
184
+ rightAddon: /* @__PURE__ */ import_react.default.createElement(import_ds_date_picker.DatePickerDropdown, {
185
+ disabled,
186
+ isOpen,
187
+ zIndex,
188
+ menu: /* @__PURE__ */ import_react.default.createElement(DateTimePickerWrapper, {
211
189
  ref: dateTimePickerWrapperRef,
212
- "data-testid": "date-time-picker",
213
- children: [/*#__PURE__*/_jsx__default["default"]("div", {
214
- className: hasSelectedDate ? 'has-selected-date' : 'without-selected-date',
215
- "data-testid": "date-time-picker-portal-wrapper"
216
- }, void 0, /*#__PURE__*/_jsx__default["default"](dsDatePicker.DSDatePickerController, {
217
- date: selectedDate,
218
- displayFormatDay: displayFormatDay,
219
- enableOutsideDays: enableOutsideDays,
220
- firstDayOfWeek: firstDayOfWeek,
221
- hideKeyboardShortcutsPanel: hideKeyboardShortcutsPanel,
222
- isDayBlocked: isDayBlocked,
223
- isDayHighlighted: isDayHighlighted,
224
- isOutsideRange: isOutsideRange,
225
- keepOpenOnDateSelect: keepOpenOnDateSelect,
226
- numberOfMonths: numberOfMonths,
227
- onClickEscape: handleClickEscape,
228
- onClose: onClose,
229
- onDateChange: handleDatePickerChange,
230
- onNextMonthClick: onNextMonthClick,
231
- onOutsideClick: event => handleOutsideClick(event),
232
- onPrevMonthClick: onPrevMonthClick,
233
- phrases: phrases,
234
- transitionDuration: transitionDuration
235
- })), /*#__PURE__*/_jsx__default["default"](TimePickerWrapper, {}, void 0, /*#__PURE__*/jsxRuntime.jsx(TimePicker, _objectSpread({
236
- disabled: disabled,
237
- disabledTimes: disabledTimeRange,
238
- format: format,
239
- hasHeader: true,
240
- hasHeaderDisplay: true,
241
- onTimeChange: onTimeChange,
242
- showSeconds: false,
243
- minutesInterval: minutesInterval,
244
- time: selectedDate
245
- }, visiblePanels)))]
246
- }),
190
+ "data-testid": "date-time-picker"
191
+ }, /* @__PURE__ */ import_react.default.createElement("div", {
192
+ className: hasSelectedDate ? "has-selected-date" : "without-selected-date",
193
+ "data-testid": "date-time-picker-portal-wrapper"
194
+ }, /* @__PURE__ */ import_react.default.createElement(import_ds_date_picker.DSDatePickerController, {
195
+ date: selectedDate,
196
+ displayFormatDay,
197
+ enableOutsideDays,
198
+ firstDayOfWeek,
199
+ hideKeyboardShortcutsPanel,
200
+ isDayBlocked,
201
+ isDayHighlighted,
202
+ isOutsideRange,
203
+ keepOpenOnDateSelect,
204
+ numberOfMonths,
205
+ onClickEscape: handleClickEscape,
206
+ onClose,
207
+ onDateChange: handleDatePickerChange,
208
+ onNextMonthClick,
209
+ onOutsideClick: (event) => handleOutsideClick(event),
210
+ onPrevMonthClick,
211
+ phrases,
212
+ transitionDuration
213
+ })), /* @__PURE__ */ import_react.default.createElement(TimePickerWrapper, null, /* @__PURE__ */ import_react.default.createElement(TimePicker, {
214
+ disabled,
215
+ disabledTimes: disabledTimeRange,
216
+ format,
217
+ hasHeader: true,
218
+ hasHeaderDisplay: true,
219
+ onTimeChange,
220
+ showSeconds: false,
221
+ minutesInterval,
222
+ time: selectedDate,
223
+ ...visiblePanels
224
+ }))),
247
225
  onClick: handleOpen,
248
- readOnly: readOnly
226
+ readOnly
249
227
  })
250
- }, void 0, /*#__PURE__*/_jsx__default["default"](dsForm.DSInput, {
251
- customInputType: _ref2 => {
252
- let {
253
- onChange: handleChange
254
- } = _ref2,
255
- restInputProps = _objectWithoutProperties__default["default"](_ref2, _excluded);
256
-
257
- return /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
258
- children: [/*#__PURE__*/_jsx__default["default"]("div", {
259
- style: {
260
- display: 'flex'
261
- }
262
- }, void 0, /*#__PURE__*/jsxRuntime.jsx(dsForm.DateInputsV2Impl, _objectSpread(_objectSpread({
263
- disabled: disabled,
264
- onChange: input => handleChange(input, 'date')
265
- }, restInputProps), {}, {
266
- onDateChange: onDateInputDateChange,
267
- yearMaxRange: currentYear + 100,
268
- yearMinRange: currentYear - 100,
269
- time: restInputProps.value && restInputProps.value.hour && restInputProps.value.isValid() ? restInputProps.value.format(formatDate) : restInputProps.value
270
- }))), /*#__PURE__*/jsxRuntime.jsx(dsForm.TimeInputImpl, _objectSpread({
271
- disabled: disabled,
272
- format: format,
273
- onChange: time => handleChange(time, 'time')
274
- }, restInputProps))]
275
- });
276
- },
228
+ }, /* @__PURE__ */ import_react.default.createElement(import_ds_form.DSInput, {
229
+ customInputType: ({ onChange: handleChange, ...restInputProps }) => /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, /* @__PURE__ */ import_react.default.createElement("div", {
230
+ style: { display: "flex" }
231
+ }, /* @__PURE__ */ import_react.default.createElement(import_ds_form.DateInputsV2Impl, {
232
+ disabled,
233
+ onChange: (input) => handleChange(input, "date"),
234
+ ...restInputProps,
235
+ onDateChange: onDateInputDateChange,
236
+ yearMaxRange: currentYear + 100,
237
+ yearMinRange: currentYear - 100,
238
+ time: restInputProps.value && restInputProps.value.hour && restInputProps.value.isValid() ? restInputProps.value.format(formatDate) : restInputProps.value
239
+ })), /* @__PURE__ */ import_react.default.createElement(import_ds_form.TimeInputImpl, {
240
+ disabled,
241
+ format,
242
+ onChange: (time) => handleChange(time, "time"),
243
+ ...restInputProps
244
+ })),
277
245
  isShowElipsisActive: false,
278
- disabled: disabled,
246
+ disabled,
279
247
  onChange: handleInputChange,
280
- placeholder: placeholder,
248
+ placeholder,
281
249
  value: selectedDate
282
250
  }));
283
251
  };
284
-
285
- module.exports = DSDateTimePickerImpl;
252
+ var DateTimePickerImpl_default = DSDateTimePickerImpl;
253
+ module.exports = __toCommonJS(DateTimePickerImpl_exports);
254
+ //# sourceMappingURL=DateTimePickerImpl.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/DateTimePickerImpl.tsx", "../../../../../scripts/build/transpile/react-shim.js"],
4
+ "sourcesContent": ["/* eslint-disable indent */\n/* eslint-disable max-statements */\n/* eslint-disable complexity */\n/* eslint-disable no-empty-pattern */\n/* eslint-disable import/no-unresolved */\n/* eslint-disable max-lines */\n/* eslint-disable react/prop-types */\nimport React, { useState, useEffect, useMemo, useRef } from 'react';\nimport moment from 'moment';\nimport { aggregatedClasses } from '@elliemae/ds-classnames';\nimport { DSDatePickerController, DatePickerDropdown, SingleDatePickerPhrases } from '@elliemae/ds-date-picker';\nimport { DSInput, DSInputGroup, DateInputsV2Impl, TimeInputImpl } from '@elliemae/ds-form';\nimport { getVisibleTimeByFormat } from '@elliemae/ds-utilities';\nimport { DSTimePickerMenu, convertTimeString } from '@elliemae/ds-time-picker';\nimport { updateDateAndTime } from '../utils';\n\nconst blockName = 'date-time-picker';\n\nconst DateTimePickerWrapper = aggregatedClasses('div')(blockName, 'wrapper');\nconst TimePicker = aggregatedClasses(DSTimePickerMenu)(blockName, 'time-picker');\nconst TimePickerWrapper = aggregatedClasses('div')(blockName, 'time-picker-wrapper');\n// const DateInput = aggregatedClasses(DateInputsV2Impl)(blockName, 'date-input');\nconst formatDate = 'MMDDYYYY';\n\nconst DSDateTimePickerImpl = ({\n onBlur = () => null,\n placeholder,\n date,\n clearable,\n datePickerProps: {\n disabled = false,\n numberOfMonths = 1,\n readOnly = false,\n enableOutsideDays = false,\n transitionDuration = 0,\n firstDayOfWeek = 0,\n keepOpenOnDateSelect = true,\n hideKeyboardShortcutsPanel = true,\n onPrevMonthClick = () => null,\n onNextMonthClick = () => null,\n onClose = () => null,\n onChange: onDatePickerChange = () => null,\n onDateChange = () => null,\n onError: onErrorDate = () => null,\n phrases = SingleDatePickerPhrases,\n displayFormatDay = 'D',\n isDayBlocked = () => false,\n isOutsideRange = () => false,\n isDayHighlighted = () => false,\n zIndex = 11,\n },\n timePickerProps: {\n format = 'hh:mm A',\n onChange: onChangeTimePicker = () => null,\n disabledTimes = undefined,\n onError: onErrorTime = () => null,\n minutesInterval = 1,\n },\n dateInputProps: { onDateInputDateChange = () => null },\n}) => {\n const [selectedDate, setSelectedDate] = useState(undefined);\n const [incompleteInput, setIncompleteInput] = useState(undefined);\n const [isOpen, setIsOpen] = useState(false);\n\n const disabledTimeRange = disabledTimes && {\n from: convertTimeString(disabledTimes.from),\n to: convertTimeString(disabledTimes.to),\n };\n\n const dateTimePickerWrapperRef = useRef();\n const fullFormat = `${formatDate} ${format}`;\n\n useEffect(() => {\n if (date) {\n setSelectedDate(moment(date));\n } else if (date === null) setSelectedDate(undefined);\n }, [date]);\n\n const visiblePanels = useMemo(() => getVisibleTimeByFormat(format), []);\n\n const currentYear = moment().year();\n\n const handleDatePickerChange = (dateSelected) => {\n const splittedDate = updateDateAndTime(dateSelected, selectedDate);\n if (!readOnly) {\n setSelectedDate(splittedDate);\n onDateChange(splittedDate);\n }\n };\n\n const onTimeChange = (pickerTime) => {\n const splittedDate = updateDateAndTime(selectedDate, pickerTime);\n onChangeTimePicker(splittedDate);\n setSelectedDate(splittedDate);\n };\n\n const handleInputChange = (inputValue, type) => {\n onDatePickerChange(inputValue);\n let timeBlocked = false;\n const inputMoment = moment(inputValue, fullFormat);\n setIncompleteInput(inputValue);\n if (type === 'date') {\n const splittedDate = updateDateAndTime(inputMoment, selectedDate);\n if (inputValue.length < 8) {\n onErrorDate({ message: 'date incomplete', inputValue });\n if (clearable) onDateChange('error');\n return;\n }\n if (inputValue.length === 8 && inputMoment.isValid()) {\n setSelectedDate(splittedDate);\n onChangeTimePicker(splittedDate);\n }\n onDateChange(splittedDate);\n return;\n }\n\n if (disabledTimeRange) {\n const hour = inputValue.hour();\n const min = inputValue.minutes();\n const { from, to } = disabledTimeRange;\n\n if ((hour > from.hour && hour < to.hour) || (hour === to.hour && min < to.min)) {\n timeBlocked = true;\n }\n }\n if (timeBlocked) onErrorTime({ message: 'time blocked', inputValue });\n const dateBlocked = isDayBlocked(inputMoment);\n if (dateBlocked) onErrorDate({ message: 'date blocked', inputValue });\n if (!timeBlocked && !dateBlocked) {\n onDateChange(inputValue);\n }\n };\n\n const handleOutsideClick = (event) => {\n if (!dateTimePickerWrapperRef.current.contains(event.target)) {\n setIsOpen(false);\n }\n };\n\n const handleClickEscape = () => setIsOpen(false);\n const handleOpen = () => setIsOpen(true);\n\n const handleContainerBlur = (event) => {\n if (!isOpen && !event.currentTarget.contains(event.relatedTarget)) {\n onBlur(\n event,\n selectedDate?.isValid()\n ? selectedDate\n : {\n error: true,\n message: 'incomplete input',\n input: incompleteInput,\n },\n );\n if (clearable && !selectedDate && !!incompleteInput) {\n const inputMoment = moment(incompleteInput, fullFormat);\n const splittedDate = updateDateAndTime(inputMoment, selectedDate);\n\n setSelectedDate(splittedDate);\n onDateChange(splittedDate);\n }\n }\n };\n\n useEffect(() => {\n if (!isOpen)\n onBlur(\n {},\n selectedDate?.isValid()\n ? selectedDate\n : {\n error: true,\n message: 'incomplete input',\n input: incompleteInput,\n },\n );\n }, [isOpen]);\n\n const hasSelectedDate = !!selectedDate;\n return (\n <DSInputGroup\n containerProps={{\n onBlur: handleContainerBlur,\n }}\n rightAddon={\n <DatePickerDropdown\n disabled={disabled}\n isOpen={isOpen}\n zIndex={zIndex}\n menu={\n <DateTimePickerWrapper ref={dateTimePickerWrapperRef} data-testid=\"date-time-picker\">\n <div\n className={hasSelectedDate ? 'has-selected-date' : 'without-selected-date'}\n data-testid=\"date-time-picker-portal-wrapper\"\n >\n <DSDatePickerController\n date={selectedDate}\n displayFormatDay={displayFormatDay}\n enableOutsideDays={enableOutsideDays}\n firstDayOfWeek={firstDayOfWeek}\n hideKeyboardShortcutsPanel={hideKeyboardShortcutsPanel}\n isDayBlocked={isDayBlocked}\n isDayHighlighted={isDayHighlighted}\n isOutsideRange={isOutsideRange}\n keepOpenOnDateSelect={keepOpenOnDateSelect}\n numberOfMonths={numberOfMonths}\n onClickEscape={handleClickEscape}\n onClose={onClose}\n onDateChange={handleDatePickerChange}\n onNextMonthClick={onNextMonthClick}\n onOutsideClick={(event) => handleOutsideClick(event)}\n onPrevMonthClick={onPrevMonthClick}\n phrases={phrases}\n transitionDuration={transitionDuration}\n />\n </div>\n <TimePickerWrapper>\n <TimePicker\n disabled={disabled}\n disabledTimes={disabledTimeRange}\n format={format}\n hasHeader\n hasHeaderDisplay\n onTimeChange={onTimeChange}\n showSeconds={false}\n minutesInterval={minutesInterval}\n time={selectedDate}\n {...visiblePanels}\n />\n </TimePickerWrapper>\n </DateTimePickerWrapper>\n }\n onClick={handleOpen}\n readOnly={readOnly}\n />\n }\n >\n <DSInput\n customInputType={({ onChange: handleChange, ...restInputProps }) => (\n <>\n <div style={{ display: 'flex' }}>\n <DateInputsV2Impl\n disabled={disabled}\n onChange={(input) => handleChange(input, 'date')}\n {...restInputProps}\n onDateChange={onDateInputDateChange}\n yearMaxRange={currentYear + 100}\n yearMinRange={currentYear - 100}\n time={\n restInputProps.value && restInputProps.value.hour && restInputProps.value.isValid()\n ? restInputProps.value.format(formatDate)\n : restInputProps.value\n }\n />\n </div>\n <TimeInputImpl\n disabled={disabled}\n format={format}\n onChange={(time) => handleChange(time, 'time')}\n {...restInputProps}\n />\n </>\n )}\n isShowElipsisActive={false}\n disabled={disabled}\n onChange={handleInputChange}\n placeholder={placeholder}\n value={selectedDate}\n />\n </DSInputGroup>\n );\n};\n\nexport { DSDateTimePickerImpl };\nexport default DSDateTimePickerImpl;\n", "import * as React from 'react';\nexport { React };\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
package/cjs/index.js CHANGED
@@ -1,10 +1,37 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- var DSDateTimePicker = require('./DSDateTimePicker.js');
6
-
7
-
8
-
9
- exports.DateTimePickerWithSchema = DSDateTimePicker.DateTimePickerWithSchema;
10
- exports["default"] = DSDateTimePicker["default"];
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __markAsModule = (target) => __defProp(target, "__esModule", { value: true });
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __reExport = (target, module2, copyDefault, desc) => {
13
+ if (module2 && typeof module2 === "object" || typeof module2 === "function") {
14
+ for (let key of __getOwnPropNames(module2))
15
+ if (!__hasOwnProp.call(target, key) && (copyDefault || key !== "default"))
16
+ __defProp(target, key, { get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable });
17
+ }
18
+ return target;
19
+ };
20
+ var __toESM = (module2, isNodeMode) => {
21
+ return __reExport(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", !isNodeMode && module2 && module2.__esModule ? { get: () => module2.default, enumerable: true } : { value: module2, enumerable: true })), module2);
22
+ };
23
+ var __toCommonJS = /* @__PURE__ */ ((cache) => {
24
+ return (module2, temp) => {
25
+ return cache && cache.get(module2) || (temp = __reExport(__markAsModule({}), module2, 1), cache && cache.set(module2, temp), temp);
26
+ };
27
+ })(typeof WeakMap !== "undefined" ? /* @__PURE__ */ new WeakMap() : 0);
28
+ var src_exports = {};
29
+ __export(src_exports, {
30
+ DSDateTimePicker: () => import_DSDateTimePicker.DSDateTimePicker,
31
+ DateTimePickerWithSchema: () => import_DSDateTimePicker.DateTimePickerWithSchema,
32
+ default: () => import_DSDateTimePicker.default
33
+ });
34
+ var React = __toESM(require("react"));
35
+ var import_DSDateTimePicker = __toESM(require("./DSDateTimePicker"));
36
+ module.exports = __toCommonJS(src_exports);
37
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/index.tsx", "../../../../scripts/build/transpile/react-shim.js"],
4
+ "sourcesContent": ["export { default, DSDateTimePicker, DateTimePickerWithSchema } from './DSDateTimePicker';\n", "import * as React from 'react';\nexport { React };\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADAvB,8BAAoE;",
6
+ "names": []
7
+ }
@@ -1,9 +1,39 @@
1
- 'use strict';
2
-
3
- var english = {
4
- placeholder: 'Select date and time',
5
- className: '',
6
- id: ''
7
- };
8
-
9
- module.exports = english;
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __markAsModule = (target) => __defProp(target, "__esModule", { value: true });
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __reExport = (target, module2, copyDefault, desc) => {
13
+ if (module2 && typeof module2 === "object" || typeof module2 === "function") {
14
+ for (let key of __getOwnPropNames(module2))
15
+ if (!__hasOwnProp.call(target, key) && (copyDefault || key !== "default"))
16
+ __defProp(target, key, { get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable });
17
+ }
18
+ return target;
19
+ };
20
+ var __toESM = (module2, isNodeMode) => {
21
+ return __reExport(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", !isNodeMode && module2 && module2.__esModule ? { get: () => module2.default, enumerable: true } : { value: module2, enumerable: true })), module2);
22
+ };
23
+ var __toCommonJS = /* @__PURE__ */ ((cache) => {
24
+ return (module2, temp) => {
25
+ return cache && cache.get(module2) || (temp = __reExport(__markAsModule({}), module2, 1), cache && cache.set(module2, temp), temp);
26
+ };
27
+ })(typeof WeakMap !== "undefined" ? /* @__PURE__ */ new WeakMap() : 0);
28
+ var english_exports = {};
29
+ __export(english_exports, {
30
+ default: () => english_default
31
+ });
32
+ var React = __toESM(require("react"));
33
+ var english_default = {
34
+ placeholder: "Select date and time",
35
+ className: "",
36
+ id: ""
37
+ };
38
+ module.exports = __toCommonJS(english_exports);
39
+ //# sourceMappingURL=english.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/lang/english.tsx", "../../../../../scripts/build/transpile/react-shim.js"],
4
+ "sourcesContent": ["export default {\n placeholder: 'Select date and time',\n className: '',\n id: '',\n};\n", "import * as React from 'react';\nexport { React };\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADAvB,IAAO,kBAAQ;AAAA,EACb,aAAa;AAAA,EACb,WAAW;AAAA,EACX,IAAI;AAAA;",
6
+ "names": []
7
+ }