@atlaskit/datetime-picker 17.5.6 → 17.6.0
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/CHANGELOG.md +17 -0
- package/dist/cjs/components/date-picker.js +1 -0
- package/dist/cjs/components/date-time-picker-class.js +1 -0
- package/dist/cjs/components/date-time-picker-fc-new.js +479 -0
- package/dist/cjs/components/date-time-picker-fc-old.js +370 -0
- package/dist/cjs/components/date-time-picker-fc.js +8 -362
- package/dist/cjs/components/time-picker.js +1 -1
- package/dist/cjs/internal/date-picker-migration.js +2 -0
- package/dist/cjs/internal/menu.js +1 -0
- package/dist/cjs/internal/parse-date.js +2 -0
- package/dist/cjs/internal/single-value.js +2 -1
- package/dist/es2019/components/date-picker.js +2 -0
- package/dist/es2019/components/date-time-picker-class.js +1 -0
- package/dist/es2019/components/date-time-picker-fc-new.js +456 -0
- package/dist/es2019/components/date-time-picker-fc-old.compiled.css +6 -0
- package/dist/es2019/components/date-time-picker-fc-old.js +336 -0
- package/dist/es2019/components/date-time-picker-fc.js +5 -332
- package/dist/es2019/components/time-picker.js +2 -0
- package/dist/es2019/internal/date-picker-migration.js +1 -0
- package/dist/es2019/internal/menu.js +2 -0
- package/dist/es2019/internal/parse-date.js +1 -0
- package/dist/es2019/internal/single-value.js +2 -1
- package/dist/esm/components/date-picker.js +2 -0
- package/dist/esm/components/date-time-picker-class.js +1 -0
- package/dist/esm/components/date-time-picker-fc-new.compiled.css +6 -0
- package/dist/esm/components/date-time-picker-fc-new.js +473 -0
- package/dist/esm/components/date-time-picker-fc-old.compiled.css +6 -0
- package/dist/esm/components/date-time-picker-fc-old.js +364 -0
- package/dist/esm/components/date-time-picker-fc.js +7 -360
- package/dist/esm/components/time-picker.js +2 -0
- package/dist/esm/internal/date-picker-migration.js +1 -0
- package/dist/esm/internal/menu.js +2 -0
- package/dist/esm/internal/parse-date.js +1 -0
- package/dist/esm/internal/single-value.js +2 -1
- package/dist/types/components/date-time-picker-fc-new.d.ts +6 -0
- package/dist/types/components/date-time-picker-fc-old.d.ts +6 -0
- package/dist/types/components/date-time-picker-fc.d.ts +2 -6
- package/dist/types-ts4.5/components/date-time-picker-fc-new.d.ts +6 -0
- package/dist/types-ts4.5/components/date-time-picker-fc-old.d.ts +6 -0
- package/dist/types-ts4.5/components/date-time-picker-fc.d.ts +2 -6
- package/package.json +16 -9
- /package/dist/cjs/components/{date-time-picker-fc.compiled.css → date-time-picker-fc-new.compiled.css} +0 -0
- /package/dist/{es2019/components/date-time-picker-fc.compiled.css → cjs/components/date-time-picker-fc-old.compiled.css} +0 -0
- /package/dist/{esm/components/date-time-picker-fc.compiled.css → es2019/components/date-time-picker-fc-new.compiled.css} +0 -0
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
* broken out to be it's own function.
|
|
17
17
|
*/
|
|
18
18
|
|
|
19
|
+
// oxlint-disable-next-line @atlassian/no-restricted-imports
|
|
19
20
|
import { format, lastDayOfMonth, parseISO } from 'date-fns';
|
|
20
21
|
import { convertTokens } from './parse-tokens';
|
|
21
22
|
import { defaultDateFormat, padToTwo, placeholderDatetime } from './index';
|
|
@@ -4,6 +4,8 @@ import "./menu.compiled.css";
|
|
|
4
4
|
import * as React from 'react';
|
|
5
5
|
import { ax, ix } from "@compiled/react/runtime";
|
|
6
6
|
import { Fragment } from 'react';
|
|
7
|
+
|
|
8
|
+
// oxlint-disable-next-line @atlassian/no-restricted-imports
|
|
7
9
|
import { isValid, parseISO } from 'date-fns';
|
|
8
10
|
import Calendar from '@atlaskit/calendar';
|
|
9
11
|
import { Layering } from '@atlaskit/layering';
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import _extends from "@babel/runtime/helpers/extends";
|
|
2
2
|
import React from 'react';
|
|
3
|
+
import { fg } from '@atlaskit/platform-feature-flags';
|
|
3
4
|
import { components } from '@atlaskit/select';
|
|
4
5
|
|
|
5
6
|
/**
|
|
@@ -40,7 +41,7 @@ export const makeSingleValue =
|
|
|
40
41
|
hasValue: hasValue,
|
|
41
42
|
innerProps: {
|
|
42
43
|
id,
|
|
43
|
-
lang
|
|
44
|
+
lang: fg('platform-dst-single-value-lang-replace') ? lang.replace('_', '-') : lang
|
|
44
45
|
},
|
|
45
46
|
isDisabled: isDisabled,
|
|
46
47
|
isMulti: isMulti,
|
|
@@ -12,6 +12,8 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
|
|
|
12
12
|
/// <reference types="node" />
|
|
13
13
|
// for typing `process`
|
|
14
14
|
import { forwardRef, useCallback, useEffect, useReducer, useRef, useState } from 'react';
|
|
15
|
+
|
|
16
|
+
// oxlint-disable-next-line @atlassian/no-restricted-imports
|
|
15
17
|
import { isValid, parseISO } from 'date-fns';
|
|
16
18
|
import { usePlatformLeafEventHandler } from '@atlaskit/analytics-next';
|
|
17
19
|
import { IconButton } from '@atlaskit/button/new';
|
|
@@ -14,6 +14,7 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
|
|
|
14
14
|
/// <reference types="node" />
|
|
15
15
|
|
|
16
16
|
import React from 'react';
|
|
17
|
+
// oxlint-disable-next-line @atlassian/no-restricted-imports
|
|
17
18
|
import { format, isValid, parseISO } from 'date-fns';
|
|
18
19
|
import { createAndFireEvent, withAnalyticsContext, withAnalyticsEvents } from '@atlaskit/analytics-next';
|
|
19
20
|
import SelectClearIcon from '@atlaskit/icon/core/cross-circle';
|
|
@@ -0,0 +1,473 @@
|
|
|
1
|
+
/* date-time-picker-fc-new.tsx generated by @compiled/babel-plugin v0.39.1 */
|
|
2
|
+
import _extends from "@babel/runtime/helpers/extends";
|
|
3
|
+
import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
|
|
4
|
+
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
5
|
+
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
6
|
+
var _excluded = ["selectProps"],
|
|
7
|
+
_excluded2 = ["selectProps"];
|
|
8
|
+
import "./date-time-picker-fc-new.compiled.css";
|
|
9
|
+
import { ax, ix } from "@compiled/react/runtime";
|
|
10
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
11
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
12
|
+
/// <reference types="node" />
|
|
13
|
+
// for typing `process`
|
|
14
|
+
|
|
15
|
+
import React, { forwardRef, useCallback, useEffect, useReducer, useState } from 'react';
|
|
16
|
+
|
|
17
|
+
// oxlint-disable-next-line @atlassian/no-restricted-imports
|
|
18
|
+
import { format, isValid, parseISO } from 'date-fns';
|
|
19
|
+
import { usePlatformLeafEventHandler } from '@atlaskit/analytics-next';
|
|
20
|
+
import { IconButton } from '@atlaskit/button/new';
|
|
21
|
+
import SelectClearIcon from '@atlaskit/icon/core/cross-circle';
|
|
22
|
+
import { Box, Inline } from '@atlaskit/primitives/compiled';
|
|
23
|
+
import { mergeStyles } from '@atlaskit/select';
|
|
24
|
+
import { formatDateTimeZoneIntoIso } from '../internal';
|
|
25
|
+
import { DateTimePickerContainer } from '../internal/date-time-picker-container';
|
|
26
|
+
import { convertTokens } from '../internal/parse-tokens';
|
|
27
|
+
import DatePicker from './date-picker';
|
|
28
|
+
import TimePicker from './time-picker';
|
|
29
|
+
var packageName = "@atlaskit/datetime-picker";
|
|
30
|
+
var packageVersion = "0.0.0-development";
|
|
31
|
+
var analyticsAttributes = {
|
|
32
|
+
componentName: 'dateTimePicker',
|
|
33
|
+
packageName: packageName,
|
|
34
|
+
packageVersion: packageVersion
|
|
35
|
+
};
|
|
36
|
+
var compiledStyles = {
|
|
37
|
+
datePickerContainerStyles: "_i0dl1ssb _16jlkb7n _1o9zidpf",
|
|
38
|
+
timePickerContainerStyles: "_i0dl1ssb _16jlkb7n",
|
|
39
|
+
iconContainerStyles: "_1e0c1txw _4cvr1h6o _i0dl1kw7"
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
// react-select overrides (via @atlaskit/select).
|
|
43
|
+
var styles = {
|
|
44
|
+
control: function control(style) {
|
|
45
|
+
return _objectSpread(_objectSpread({}, style), {}, {
|
|
46
|
+
backgroundColor: 'transparent',
|
|
47
|
+
border: 2,
|
|
48
|
+
borderRadius: 0,
|
|
49
|
+
paddingLeft: 0,
|
|
50
|
+
':hover': {
|
|
51
|
+
backgroundColor: 'transparent',
|
|
52
|
+
cursor: 'inherit'
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Two action types keep the reducer focused:
|
|
60
|
+
*
|
|
61
|
+
* - APPLY: used by user-interaction handlers. The handler computes the full
|
|
62
|
+
* next state (including the new ISO value) and applies it atomically. This
|
|
63
|
+
* guarantees a single re-render with no cascades regardless of React version.
|
|
64
|
+
*
|
|
65
|
+
* - SET_VALUE: used by the `providedValue` prop effect. The reducer owns all
|
|
66
|
+
* parsing logic for external value changes, including the empty-string case
|
|
67
|
+
* that the previous useState approach missed.
|
|
68
|
+
*/
|
|
69
|
+
|
|
70
|
+
export var datePickerDefaultAriaLabel = 'Date';
|
|
71
|
+
export var timePickerDefaultAriaLabel = 'Time';
|
|
72
|
+
var DateTimePickerNew = /*#__PURE__*/forwardRef(function (_ref2, _ref) {
|
|
73
|
+
var ariaDescribedBy = _ref2['aria-describedby'],
|
|
74
|
+
_ref2$appearance = _ref2.appearance,
|
|
75
|
+
appearance = _ref2$appearance === void 0 ? 'default' : _ref2$appearance,
|
|
76
|
+
_ref2$autoFocus = _ref2.autoFocus,
|
|
77
|
+
autoFocus = _ref2$autoFocus === void 0 ? false : _ref2$autoFocus,
|
|
78
|
+
_ref2$clearControlLab = _ref2.clearControlLabel,
|
|
79
|
+
clearControlLabel = _ref2$clearControlLab === void 0 ? 'clear' : _ref2$clearControlLab,
|
|
80
|
+
_ref2$datePickerProps = _ref2.datePickerProps,
|
|
81
|
+
datePickerPropsWithSelectProps = _ref2$datePickerProps === void 0 ? {} : _ref2$datePickerProps,
|
|
82
|
+
_ref2$defaultValue = _ref2.defaultValue,
|
|
83
|
+
defaultValue = _ref2$defaultValue === void 0 ? '' : _ref2$defaultValue,
|
|
84
|
+
_ref2$id = _ref2.id,
|
|
85
|
+
id = _ref2$id === void 0 ? '' : _ref2$id,
|
|
86
|
+
_ref2$innerProps = _ref2.innerProps,
|
|
87
|
+
innerProps = _ref2$innerProps === void 0 ? {} : _ref2$innerProps,
|
|
88
|
+
_ref2$isDisabled = _ref2.isDisabled,
|
|
89
|
+
isDisabled = _ref2$isDisabled === void 0 ? false : _ref2$isDisabled,
|
|
90
|
+
_ref2$isInvalid = _ref2.isInvalid,
|
|
91
|
+
isInvalid = _ref2$isInvalid === void 0 ? false : _ref2$isInvalid,
|
|
92
|
+
_ref2$isRequired = _ref2.isRequired,
|
|
93
|
+
isRequired = _ref2$isRequired === void 0 ? false : _ref2$isRequired,
|
|
94
|
+
_ref2$name = _ref2.name,
|
|
95
|
+
name = _ref2$name === void 0 ? '' : _ref2$name,
|
|
96
|
+
_ref2$onBlur = _ref2.onBlur,
|
|
97
|
+
onBlur = _ref2$onBlur === void 0 ? function (_event) {} : _ref2$onBlur,
|
|
98
|
+
_ref2$onChange = _ref2.onChange,
|
|
99
|
+
onChangeProp = _ref2$onChange === void 0 ? function (_value) {} : _ref2$onChange,
|
|
100
|
+
_ref2$onFocus = _ref2.onFocus,
|
|
101
|
+
onFocus = _ref2$onFocus === void 0 ? function (_event) {} : _ref2$onFocus,
|
|
102
|
+
providedParseValue = _ref2.parseValue,
|
|
103
|
+
_ref2$spacing = _ref2.spacing,
|
|
104
|
+
spacing = _ref2$spacing === void 0 ? 'default' : _ref2$spacing,
|
|
105
|
+
_ref2$locale = _ref2.locale,
|
|
106
|
+
locale = _ref2$locale === void 0 ? 'en-US' : _ref2$locale,
|
|
107
|
+
testId = _ref2.testId,
|
|
108
|
+
_ref2$timePickerProps = _ref2.timePickerProps,
|
|
109
|
+
timePickerPropsWithSelectProps = _ref2$timePickerProps === void 0 ? {} : _ref2$timePickerProps,
|
|
110
|
+
providedValue = _ref2.value;
|
|
111
|
+
var _useState = useState(false),
|
|
112
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
113
|
+
isFocused = _useState2[0],
|
|
114
|
+
setIsFocused = _useState2[1];
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Defined inside the component so the reducer closes over `providedParseValue`
|
|
118
|
+
* without needing to smuggle it through every action payload. React always
|
|
119
|
+
* calls the reducer from the latest render, so stale-closure is not a concern.
|
|
120
|
+
*/
|
|
121
|
+
var reducer = function reducer(state, action) {
|
|
122
|
+
switch (action.type) {
|
|
123
|
+
case 'APPLY':
|
|
124
|
+
return action.payload;
|
|
125
|
+
case 'SET_VALUE':
|
|
126
|
+
{
|
|
127
|
+
var newValue = action.payload;
|
|
128
|
+
|
|
129
|
+
// Explicit empty-string handling: clear all sub-fields so the date
|
|
130
|
+
// and time pickers visually reset when a controlled value is cleared.
|
|
131
|
+
if (!newValue) {
|
|
132
|
+
return {
|
|
133
|
+
value: '',
|
|
134
|
+
dateValue: '',
|
|
135
|
+
timeValue: '',
|
|
136
|
+
zoneValue: ''
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
if (providedParseValue) {
|
|
140
|
+
var _parsed = providedParseValue(newValue, state.dateValue, state.timeValue, state.zoneValue);
|
|
141
|
+
return _parsed ? _objectSpread({
|
|
142
|
+
value: newValue
|
|
143
|
+
}, _parsed) : {
|
|
144
|
+
value: newValue,
|
|
145
|
+
dateValue: state.dateValue,
|
|
146
|
+
timeValue: state.timeValue,
|
|
147
|
+
zoneValue: state.zoneValue
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
var parsed = parseISO(newValue);
|
|
151
|
+
return isValid(parsed) ? {
|
|
152
|
+
value: newValue,
|
|
153
|
+
dateValue: format(parsed, convertTokens('YYYY-MM-DD')),
|
|
154
|
+
timeValue: format(parsed, convertTokens('HH:mm')),
|
|
155
|
+
zoneValue: format(parsed, convertTokens('ZZ'))
|
|
156
|
+
} : {
|
|
157
|
+
value: newValue,
|
|
158
|
+
dateValue: '',
|
|
159
|
+
timeValue: '',
|
|
160
|
+
zoneValue: ''
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
default:
|
|
164
|
+
return state;
|
|
165
|
+
}
|
|
166
|
+
};
|
|
167
|
+
var _useReducer = useReducer(reducer, null, function () {
|
|
168
|
+
var initialValue = providedValue || defaultValue || '';
|
|
169
|
+
var initialDate = (datePickerPropsWithSelectProps === null || datePickerPropsWithSelectProps === void 0 ? void 0 : datePickerPropsWithSelectProps.defaultValue) || '';
|
|
170
|
+
var initialTime = (timePickerPropsWithSelectProps === null || timePickerPropsWithSelectProps === void 0 ? void 0 : timePickerPropsWithSelectProps.defaultValue) || '';
|
|
171
|
+
if (!initialValue) {
|
|
172
|
+
return {
|
|
173
|
+
value: '',
|
|
174
|
+
dateValue: initialDate,
|
|
175
|
+
timeValue: initialTime,
|
|
176
|
+
zoneValue: ''
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
if (providedParseValue) {
|
|
180
|
+
var _parsed2 = providedParseValue(initialValue, initialDate, initialTime, '');
|
|
181
|
+
return _parsed2 ? _objectSpread({
|
|
182
|
+
value: initialValue
|
|
183
|
+
}, _parsed2) : {
|
|
184
|
+
value: initialValue,
|
|
185
|
+
dateValue: initialDate,
|
|
186
|
+
timeValue: initialTime,
|
|
187
|
+
zoneValue: ''
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
var parsed = parseISO(initialValue);
|
|
191
|
+
return isValid(parsed) ? {
|
|
192
|
+
value: initialValue,
|
|
193
|
+
dateValue: format(parsed, convertTokens('YYYY-MM-DD')),
|
|
194
|
+
timeValue: format(parsed, convertTokens('HH:mm')),
|
|
195
|
+
zoneValue: format(parsed, convertTokens('ZZ'))
|
|
196
|
+
} : {
|
|
197
|
+
value: initialValue,
|
|
198
|
+
dateValue: initialDate,
|
|
199
|
+
timeValue: initialTime,
|
|
200
|
+
zoneValue: ''
|
|
201
|
+
};
|
|
202
|
+
}),
|
|
203
|
+
_useReducer2 = _slicedToArray(_useReducer, 2),
|
|
204
|
+
dtState = _useReducer2[0],
|
|
205
|
+
dispatch = _useReducer2[1];
|
|
206
|
+
useEffect(function () {
|
|
207
|
+
if (providedValue !== undefined) {
|
|
208
|
+
dispatch({
|
|
209
|
+
type: 'SET_VALUE',
|
|
210
|
+
payload: providedValue
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
214
|
+
}, [providedValue]);
|
|
215
|
+
var parseValue = useCallback(function (value, providedDateValue, providedTimeValue, providedZoneValue) {
|
|
216
|
+
if (providedParseValue) {
|
|
217
|
+
var parsedFromFn = providedParseValue(value, providedDateValue, providedTimeValue, providedZoneValue);
|
|
218
|
+
// This handles cases found in Jira where the parse function actually does
|
|
219
|
+
// nothing and returns undefined. The previous `getSafeState` function
|
|
220
|
+
// just spread the values over the state, but if it returned `undefined`,
|
|
221
|
+
// it would just rely on the previous state values. Considering this is
|
|
222
|
+
// what is input to this function anyway, this is a safe way to handle
|
|
223
|
+
// this, colocate the behavior, and not rely on `getSafeState`.
|
|
224
|
+
return parsedFromFn || {
|
|
225
|
+
dateValue: providedDateValue,
|
|
226
|
+
timeValue: providedTimeValue,
|
|
227
|
+
zoneValue: providedZoneValue
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
var parsed = parseISO(value);
|
|
231
|
+
return isValid(parsed) ? {
|
|
232
|
+
dateValue: format(parsed, convertTokens('YYYY-MM-DD')),
|
|
233
|
+
timeValue: format(parsed, convertTokens('HH:mm')),
|
|
234
|
+
zoneValue: format(parsed, convertTokens('ZZ'))
|
|
235
|
+
} : {
|
|
236
|
+
dateValue: dtState.dateValue,
|
|
237
|
+
timeValue: dtState.timeValue,
|
|
238
|
+
zoneValue: dtState.zoneValue
|
|
239
|
+
};
|
|
240
|
+
}, [providedParseValue, dtState.dateValue, dtState.timeValue, dtState.zoneValue]);
|
|
241
|
+
var onDateBlur = function onDateBlur(event) {
|
|
242
|
+
setIsFocused(false);
|
|
243
|
+
onBlur(event);
|
|
244
|
+
if (datePickerPropsWithSelectProps !== null && datePickerPropsWithSelectProps !== void 0 && datePickerPropsWithSelectProps.onBlur) {
|
|
245
|
+
datePickerPropsWithSelectProps.onBlur(event);
|
|
246
|
+
}
|
|
247
|
+
};
|
|
248
|
+
var onTimeBlur = function onTimeBlur(event) {
|
|
249
|
+
setIsFocused(false);
|
|
250
|
+
onBlur(event);
|
|
251
|
+
if (timePickerPropsWithSelectProps !== null && timePickerPropsWithSelectProps !== void 0 && timePickerPropsWithSelectProps.onBlur) {
|
|
252
|
+
timePickerPropsWithSelectProps.onBlur(event);
|
|
253
|
+
}
|
|
254
|
+
};
|
|
255
|
+
var onDateFocus = function onDateFocus(event) {
|
|
256
|
+
setIsFocused(false);
|
|
257
|
+
onFocus(event);
|
|
258
|
+
if (datePickerPropsWithSelectProps !== null && datePickerPropsWithSelectProps !== void 0 && datePickerPropsWithSelectProps.onFocus) {
|
|
259
|
+
datePickerPropsWithSelectProps.onFocus(event);
|
|
260
|
+
}
|
|
261
|
+
};
|
|
262
|
+
var onTimeFocus = function onTimeFocus(event) {
|
|
263
|
+
setIsFocused(false);
|
|
264
|
+
onFocus(event);
|
|
265
|
+
if (timePickerPropsWithSelectProps !== null && timePickerPropsWithSelectProps !== void 0 && timePickerPropsWithSelectProps.onFocus) {
|
|
266
|
+
timePickerPropsWithSelectProps.onFocus(event);
|
|
267
|
+
}
|
|
268
|
+
};
|
|
269
|
+
var onDateChange = function onDateChange(newDateValue) {
|
|
270
|
+
var parsedValues = parseValue(dtState.value, newDateValue, dtState.timeValue, dtState.zoneValue);
|
|
271
|
+
onValueChange({
|
|
272
|
+
providedDateValue: newDateValue,
|
|
273
|
+
providedTimeValue: parsedValues.timeValue,
|
|
274
|
+
providedZoneValue: parsedValues.zoneValue
|
|
275
|
+
});
|
|
276
|
+
if (datePickerPropsWithSelectProps !== null && datePickerPropsWithSelectProps !== void 0 && datePickerPropsWithSelectProps.onChange) {
|
|
277
|
+
datePickerPropsWithSelectProps.onChange(newDateValue);
|
|
278
|
+
}
|
|
279
|
+
};
|
|
280
|
+
var onTimeChange = function onTimeChange(newTimeValue) {
|
|
281
|
+
var parsedValues = parseValue(dtState.value, dtState.dateValue, newTimeValue, dtState.zoneValue);
|
|
282
|
+
onValueChange({
|
|
283
|
+
providedDateValue: parsedValues.dateValue,
|
|
284
|
+
providedTimeValue: newTimeValue,
|
|
285
|
+
providedZoneValue: parsedValues.zoneValue
|
|
286
|
+
});
|
|
287
|
+
if (timePickerPropsWithSelectProps !== null && timePickerPropsWithSelectProps !== void 0 && timePickerPropsWithSelectProps.onChange) {
|
|
288
|
+
timePickerPropsWithSelectProps.onChange(newTimeValue);
|
|
289
|
+
}
|
|
290
|
+
};
|
|
291
|
+
var onClear = function onClear() {
|
|
292
|
+
var parsedValues = parseValue(dtState.value, dtState.dateValue, dtState.timeValue, dtState.zoneValue);
|
|
293
|
+
onValueChange({
|
|
294
|
+
providedDateValue: '',
|
|
295
|
+
providedTimeValue: '',
|
|
296
|
+
providedZoneValue: parsedValues.zoneValue
|
|
297
|
+
});
|
|
298
|
+
if (datePickerPropsWithSelectProps !== null && datePickerPropsWithSelectProps !== void 0 && datePickerPropsWithSelectProps.onChange) {
|
|
299
|
+
datePickerPropsWithSelectProps.onChange('');
|
|
300
|
+
}
|
|
301
|
+
if (timePickerPropsWithSelectProps !== null && timePickerPropsWithSelectProps !== void 0 && timePickerPropsWithSelectProps.onChange) {
|
|
302
|
+
timePickerPropsWithSelectProps.onChange('');
|
|
303
|
+
}
|
|
304
|
+
};
|
|
305
|
+
var onChangePropWithAnalytics = usePlatformLeafEventHandler(_objectSpread({
|
|
306
|
+
fn: onChangeProp,
|
|
307
|
+
action: 'selectedDate',
|
|
308
|
+
actionSubject: 'datePicker'
|
|
309
|
+
}, analyticsAttributes));
|
|
310
|
+
var onValueChange = function onValueChange(_ref3) {
|
|
311
|
+
var providedDateValue = _ref3.providedDateValue,
|
|
312
|
+
providedTimeValue = _ref3.providedTimeValue,
|
|
313
|
+
providedZoneValue = _ref3.providedZoneValue;
|
|
314
|
+
if (providedDateValue && providedTimeValue) {
|
|
315
|
+
var isoValue = formatDateTimeZoneIntoIso(providedDateValue, providedTimeValue, providedZoneValue);
|
|
316
|
+
var _parseValue = parseValue(isoValue, providedDateValue, providedTimeValue, providedZoneValue),
|
|
317
|
+
parsedZone = _parseValue.zoneValue;
|
|
318
|
+
var valueWithValidZone = formatDateTimeZoneIntoIso(providedDateValue, providedTimeValue, parsedZone);
|
|
319
|
+
dispatch({
|
|
320
|
+
type: 'APPLY',
|
|
321
|
+
payload: {
|
|
322
|
+
value: valueWithValidZone,
|
|
323
|
+
dateValue: providedDateValue,
|
|
324
|
+
timeValue: providedTimeValue,
|
|
325
|
+
zoneValue: parsedZone
|
|
326
|
+
}
|
|
327
|
+
});
|
|
328
|
+
onChangePropWithAnalytics(valueWithValidZone);
|
|
329
|
+
// If the date or time value was cleared when there is an existing datetime value, then clear the value.
|
|
330
|
+
} else if (dtState.value) {
|
|
331
|
+
dispatch({
|
|
332
|
+
type: 'APPLY',
|
|
333
|
+
payload: {
|
|
334
|
+
value: '',
|
|
335
|
+
dateValue: providedDateValue,
|
|
336
|
+
timeValue: providedTimeValue,
|
|
337
|
+
zoneValue: providedZoneValue
|
|
338
|
+
}
|
|
339
|
+
});
|
|
340
|
+
onChangePropWithAnalytics('');
|
|
341
|
+
} else {
|
|
342
|
+
dispatch({
|
|
343
|
+
type: 'APPLY',
|
|
344
|
+
payload: {
|
|
345
|
+
value: '',
|
|
346
|
+
dateValue: providedDateValue,
|
|
347
|
+
timeValue: providedTimeValue,
|
|
348
|
+
zoneValue: providedZoneValue
|
|
349
|
+
}
|
|
350
|
+
});
|
|
351
|
+
}
|
|
352
|
+
};
|
|
353
|
+
var datePickerSelectProps = datePickerPropsWithSelectProps.selectProps,
|
|
354
|
+
datePickerProps = _objectWithoutProperties(datePickerPropsWithSelectProps, _excluded);
|
|
355
|
+
var datePickerAriaDescribedBy = datePickerProps['aria-describedby'] || ariaDescribedBy;
|
|
356
|
+
var datePickerLabel = datePickerProps.label || 'Date';
|
|
357
|
+
var mergedDatePickerSelectProps = _objectSpread(_objectSpread({}, datePickerSelectProps), {}, {
|
|
358
|
+
styles: mergeStyles(styles, datePickerSelectProps === null || datePickerSelectProps === void 0 ? void 0 : datePickerSelectProps.styles)
|
|
359
|
+
});
|
|
360
|
+
var timePickerSelectProps = timePickerPropsWithSelectProps.selectProps,
|
|
361
|
+
timePickerProps = _objectWithoutProperties(timePickerPropsWithSelectProps, _excluded2);
|
|
362
|
+
var timePickerAriaDescribedBy = timePickerProps['aria-describedby'] || ariaDescribedBy;
|
|
363
|
+
var timePickerLabel = timePickerProps.label || 'Time';
|
|
364
|
+
var mergedTimePickerSelectProps = _objectSpread(_objectSpread({}, timePickerSelectProps), {}, {
|
|
365
|
+
styles: mergeStyles(styles, timePickerSelectProps === null || timePickerSelectProps === void 0 ? void 0 : timePickerSelectProps.styles)
|
|
366
|
+
});
|
|
367
|
+
|
|
368
|
+
// Render DateTimePicker's IconContainer when a value has been filled
|
|
369
|
+
// Don't use Date or TimePicker's because they can't be customised
|
|
370
|
+
var isClearable = Boolean(dtState.dateValue || dtState.timeValue);
|
|
371
|
+
return /*#__PURE__*/React.createElement(DateTimePickerContainer, {
|
|
372
|
+
appearance: appearance,
|
|
373
|
+
isDisabled: isDisabled,
|
|
374
|
+
isFocused: isFocused,
|
|
375
|
+
isInvalid: isInvalid,
|
|
376
|
+
testId: testId,
|
|
377
|
+
innerProps: innerProps
|
|
378
|
+
}, /*#__PURE__*/React.createElement("input", {
|
|
379
|
+
name: name,
|
|
380
|
+
type: "hidden",
|
|
381
|
+
value: dtState.value,
|
|
382
|
+
"data-testid": testId && "".concat(testId, "--input")
|
|
383
|
+
}), /*#__PURE__*/React.createElement(Box, {
|
|
384
|
+
xcss: compiledStyles.datePickerContainerStyles
|
|
385
|
+
}, /*#__PURE__*/React.createElement(DatePicker, {
|
|
386
|
+
appearance: appearance,
|
|
387
|
+
"aria-describedby": datePickerAriaDescribedBy,
|
|
388
|
+
autoFocus: datePickerProps.autoFocus || autoFocus,
|
|
389
|
+
dateFormat: datePickerProps.dateFormat,
|
|
390
|
+
defaultIsOpen: datePickerProps.defaultIsOpen,
|
|
391
|
+
defaultValue: datePickerProps.defaultValue,
|
|
392
|
+
disabled: datePickerProps.disabled,
|
|
393
|
+
disabledDateFilter: datePickerProps.disabledDateFilter,
|
|
394
|
+
formatDisplayLabel: datePickerProps.formatDisplayLabel,
|
|
395
|
+
hideIcon: datePickerProps.hideIcon || true,
|
|
396
|
+
icon: datePickerProps.icon,
|
|
397
|
+
id: datePickerProps.id || id,
|
|
398
|
+
innerProps: datePickerProps.innerProps,
|
|
399
|
+
inputLabel: datePickerProps.inputLabel,
|
|
400
|
+
inputLabelId: datePickerProps.inputLabelId,
|
|
401
|
+
isDisabled: datePickerProps.isDisabled || isDisabled,
|
|
402
|
+
isInvalid: datePickerProps.isInvalid || isInvalid,
|
|
403
|
+
isOpen: datePickerProps.isOpen,
|
|
404
|
+
isRequired: datePickerProps.isRequired || isRequired,
|
|
405
|
+
label: datePickerLabel,
|
|
406
|
+
locale: datePickerProps.locale || locale,
|
|
407
|
+
maxDate: datePickerProps.maxDate,
|
|
408
|
+
minDate: datePickerProps.minDate,
|
|
409
|
+
name: datePickerProps.name,
|
|
410
|
+
nextMonthLabel: datePickerProps.nextMonthLabel,
|
|
411
|
+
onBlur: onDateBlur,
|
|
412
|
+
onChange: onDateChange,
|
|
413
|
+
onFocus: onDateFocus,
|
|
414
|
+
openCalendarLabel: datePickerProps.openCalendarLabel,
|
|
415
|
+
parseInputValue: datePickerProps.parseInputValue,
|
|
416
|
+
placeholder: datePickerProps.placeholder,
|
|
417
|
+
previousMonthLabel: datePickerProps.previousMonthLabel,
|
|
418
|
+
selectProps: mergedDatePickerSelectProps,
|
|
419
|
+
shouldShowCalendarButton: datePickerProps.shouldShowCalendarButton,
|
|
420
|
+
spacing: datePickerProps.spacing || spacing,
|
|
421
|
+
testId: testId && "".concat(testId, "--datepicker") || datePickerProps.testId,
|
|
422
|
+
value: dtState.dateValue,
|
|
423
|
+
weekStartDay: datePickerProps.weekStartDay
|
|
424
|
+
})), /*#__PURE__*/React.createElement(Box, {
|
|
425
|
+
xcss: compiledStyles.timePickerContainerStyles
|
|
426
|
+
}, /*#__PURE__*/React.createElement(TimePicker, {
|
|
427
|
+
appearance: timePickerProps.appearance || appearance,
|
|
428
|
+
"aria-describedby": timePickerAriaDescribedBy,
|
|
429
|
+
autoFocus: timePickerProps.autoFocus,
|
|
430
|
+
defaultIsOpen: timePickerProps.defaultIsOpen,
|
|
431
|
+
defaultValue: timePickerProps.defaultValue,
|
|
432
|
+
formatDisplayLabel: timePickerProps.formatDisplayLabel,
|
|
433
|
+
hideIcon: timePickerProps.hideIcon || true,
|
|
434
|
+
id: timePickerProps.id,
|
|
435
|
+
innerProps: timePickerProps.innerProps,
|
|
436
|
+
isDisabled: timePickerProps.isDisabled || isDisabled,
|
|
437
|
+
isInvalid: timePickerProps.isInvalid || isInvalid,
|
|
438
|
+
isOpen: timePickerProps.isOpen,
|
|
439
|
+
isRequired: timePickerProps.isRequired || isRequired,
|
|
440
|
+
label: timePickerLabel,
|
|
441
|
+
locale: timePickerProps.locale || locale,
|
|
442
|
+
name: timePickerProps.name,
|
|
443
|
+
onBlur: onTimeBlur,
|
|
444
|
+
onChange: onTimeChange,
|
|
445
|
+
onFocus: onTimeFocus,
|
|
446
|
+
parseInputValue: timePickerProps.parseInputValue,
|
|
447
|
+
placeholder: timePickerProps.placeholder,
|
|
448
|
+
selectProps: mergedTimePickerSelectProps,
|
|
449
|
+
spacing: timePickerProps.spacing || spacing,
|
|
450
|
+
testId: timePickerProps.testId || testId && "".concat(testId, "--timepicker"),
|
|
451
|
+
timeFormat: timePickerProps.timeFormat,
|
|
452
|
+
timeIsEditable: timePickerProps.timeIsEditable,
|
|
453
|
+
times: timePickerProps.times,
|
|
454
|
+
value: dtState.timeValue
|
|
455
|
+
})), isClearable && !isDisabled ? /*#__PURE__*/React.createElement(Inline, {
|
|
456
|
+
xcss: compiledStyles.iconContainerStyles
|
|
457
|
+
}, /*#__PURE__*/React.createElement(IconButton, {
|
|
458
|
+
appearance: "subtle",
|
|
459
|
+
label: clearControlLabel,
|
|
460
|
+
icon: function icon(iconProps) {
|
|
461
|
+
return /*#__PURE__*/React.createElement(SelectClearIcon, _extends({}, iconProps, {
|
|
462
|
+
color: "var(--ds-text-subtlest, #6B6E76)",
|
|
463
|
+
size: "small"
|
|
464
|
+
}));
|
|
465
|
+
},
|
|
466
|
+
onClick: onClear,
|
|
467
|
+
testId: testId && "".concat(testId, "--icon--container"),
|
|
468
|
+
tabIndex: -1
|
|
469
|
+
})) : null);
|
|
470
|
+
});
|
|
471
|
+
|
|
472
|
+
// eslint-disable-next-line @repo/internal/react/require-jsdoc
|
|
473
|
+
export default DateTimePickerNew;
|