@instructure/ui-date-time-input 8.25.1-snapshot-10 → 8.25.1-snapshot-15

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 CHANGED
@@ -3,7 +3,7 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
- ## [8.25.1-snapshot-10](https://github.com/instructure/instructure-ui/compare/v8.25.0...v8.25.1-snapshot-10) (2022-06-20)
6
+ ## [8.25.1-snapshot-15](https://github.com/instructure/instructure-ui/compare/v8.25.0...v8.25.1-snapshot-15) (2022-06-23)
7
7
 
8
8
  **Note:** Version bump only for package @instructure/ui-date-time-input
9
9
 
@@ -1,4 +1,4 @@
1
- var _dec, _class, _IconArrowOpenStartSo, _IconArrowOpenEndSoli;
1
+ var _dec, _class, _class2, _IconArrowOpenStartSo, _IconArrowOpenEndSoli;
2
2
 
3
3
  /*
4
4
  * The MIT License (MIT)
@@ -42,33 +42,168 @@ category: components
42
42
  @tsProps
43
43
  **/
44
44
 
45
- let DateTimeInput = (_dec = testable(), _dec(_class = class DateTimeInput extends Component {
46
- static displayName = "DateTimeInput";
45
+ let DateTimeInput = (_dec = testable(), _dec(_class = (_class2 = class DateTimeInput extends Component {
47
46
  // extra verbose localized date and time
48
- static DEFAULT_MESSAGE_FORMAT = 'LLLL';
49
- static propTypes = propTypes;
50
- static allowedProps = allowedProps;
51
- static defaultProps = {
52
- layout: 'inline',
53
- colSpacing: 'medium',
54
- rowSpacing: 'small',
55
- timeStep: 30,
56
- messageFormat: DateTimeInput.DEFAULT_MESSAGE_FORMAT,
57
- isRequired: false,
58
- dateFormat: 'LL' // Localized date with full month, e.g. "August 6, 2014"
59
-
60
- };
61
- static contextType = ApplyLocaleContext;
62
- ref = null; // This is used by Tooltip for positioning
63
-
64
- handleRef = el => {
65
- this.ref = el;
66
- };
67
-
47
+ // This is used by Tooltip for positioning
68
48
  constructor(props) {
69
49
  super(props); // State needs to be calculated because render could be called before
70
50
  // componentDidMount()
71
51
 
52
+ this.ref = null;
53
+
54
+ this.handleRef = el => {
55
+ this.ref = el;
56
+ };
57
+
58
+ this.handleDateTextChange = (_event, date) => {
59
+ const dateParsed = this.tryParseDate(date.value);
60
+ this.setState({
61
+ dateInputText: date.value,
62
+ dateInputTextChanged: true,
63
+ calendarSelectedDate: dateParsed ? dateParsed : void 0,
64
+ renderedDate: dateParsed ? dateParsed.clone() : DateTime.now(this.locale(), this.timezone())
65
+ });
66
+ };
67
+
68
+ this.handleDayClick = (event, _ref) => {
69
+ let date = _ref.date;
70
+ const dateParsed = DateTime.parse(date, this.locale(), this.timezone());
71
+ this.updateStateBasedOnDateInput(dateParsed, event);
72
+ };
73
+
74
+ this.handleHideCalendar = event => {
75
+ // update state based on the DateInput's text value
76
+ if (this.state.dateInputTextChanged || event.key === 'Enter') {
77
+ const dateParsed = this.tryParseDate(this.state.dateInputText);
78
+ this.updateStateBasedOnDateInput(dateParsed, event);
79
+ } else {
80
+ // user clicked outside or tabbed away or pressed esc, reset text
81
+ this.setState({
82
+ dateInputText: this.state.iso ? this.state.iso.format(this.dateFormat) : '',
83
+ calendarSelectedDate: this.state.iso ? this.state.iso.clone() : void 0
84
+ });
85
+ }
86
+
87
+ this.setState({
88
+ isShowingCalendar: false,
89
+ dateInputTextChanged: false
90
+ });
91
+ };
92
+
93
+ this.handleTimeChange = (event, option) => {
94
+ let newValue;
95
+
96
+ if (this.state.iso) {
97
+ newValue = option.value;
98
+ } else {
99
+ // if no date is set just return the input text, it will error
100
+ newValue = option.inputText;
101
+ }
102
+
103
+ const newState = this.recalculateState(newValue, true, false);
104
+ this.changeStateIfNeeded(newState, event);
105
+ this.setState({
106
+ timeSelectValue: option.value
107
+ });
108
+ };
109
+
110
+ this.changeStateIfNeeded = (newState, e) => {
111
+ this.setState({
112
+ message: newState.message
113
+ });
114
+
115
+ if (!newState.iso && !this.state.iso) {
116
+ return;
117
+ }
118
+
119
+ if (!this.state.iso || !newState.iso || !this.state.iso.isSame(newState.iso)) {
120
+ this.setState(newState);
121
+
122
+ if (this.props.onChange) {
123
+ var _newState$iso;
124
+
125
+ this.props.onChange(e, (_newState$iso = newState.iso) === null || _newState$iso === void 0 ? void 0 : _newState$iso.toISOString());
126
+ }
127
+ }
128
+ };
129
+
130
+ this.handleBlur = e => {
131
+ // when TABbing from the DateInput to TimeInput or visa-versa, the blur
132
+ // happens on the target before the relatedTarget gets focus.
133
+ // The timeout gives it a moment for that to happen
134
+ if (typeof this.props.onBlur === 'function') {
135
+ window.setTimeout(() => {
136
+ var _this$props$onBlur, _this$props;
137
+
138
+ (_this$props$onBlur = (_this$props = this.props).onBlur) === null || _this$props$onBlur === void 0 ? void 0 : _this$props$onBlur.call(_this$props, e);
139
+ }, 0);
140
+ }
141
+ };
142
+
143
+ this.handleShowCalendar = _event => {
144
+ this.setState({
145
+ isShowingCalendar: true
146
+ });
147
+ };
148
+
149
+ this.handleSelectNextDay = _event => {
150
+ let toAlter;
151
+
152
+ if (this.state.calendarSelectedDate) {
153
+ toAlter = this.state.calendarSelectedDate.clone();
154
+ } else if (this.state.iso) {
155
+ toAlter = this.state.iso.clone();
156
+ } else {
157
+ toAlter = DateTime.now(this.locale(), this.timezone());
158
+ }
159
+
160
+ toAlter.add({
161
+ days: 1
162
+ });
163
+ this.setState({
164
+ calendarSelectedDate: toAlter,
165
+ renderedDate: toAlter.clone(),
166
+ dateInputText: toAlter.format(this.dateFormat)
167
+ });
168
+ };
169
+
170
+ this.handleSelectPrevDay = _event => {
171
+ let toAlter;
172
+
173
+ if (this.state.calendarSelectedDate) {
174
+ toAlter = this.state.calendarSelectedDate.clone();
175
+ } else if (this.state.iso) {
176
+ toAlter = this.state.iso.clone();
177
+ } else {
178
+ toAlter = DateTime.now(this.locale(), this.timezone());
179
+ }
180
+
181
+ toAlter.subtract({
182
+ days: 1
183
+ });
184
+ this.setState({
185
+ calendarSelectedDate: toAlter,
186
+ renderedDate: toAlter.clone(),
187
+ dateInputText: toAlter.format(this.dateFormat)
188
+ });
189
+ };
190
+
191
+ this.handleRenderNextMonth = _event => {
192
+ this.setState({
193
+ renderedDate: this.state.renderedDate.clone().add({
194
+ months: 1
195
+ })
196
+ });
197
+ };
198
+
199
+ this.handleRenderPrevMonth = _event => {
200
+ this.setState({
201
+ renderedDate: this.state.renderedDate.clone().subtract({
202
+ months: 1
203
+ })
204
+ });
205
+ };
206
+
72
207
  this.state = this.recalculateState(props.value || props.defaultValue);
73
208
  }
74
209
 
@@ -212,46 +347,12 @@ let DateTimeInput = (_dec = testable(), _dec(_class = class DateTimeInput extend
212
347
  } // Called when the user enters text into dateInput
213
348
 
214
349
 
215
- handleDateTextChange = (_event, date) => {
216
- const dateParsed = this.tryParseDate(date.value);
217
- this.setState({
218
- dateInputText: date.value,
219
- dateInputTextChanged: true,
220
- calendarSelectedDate: dateParsed ? dateParsed : void 0,
221
- renderedDate: dateParsed ? dateParsed.clone() : DateTime.now(this.locale(), this.timezone())
222
- });
223
- };
224
-
225
350
  tryParseDate(val) {
226
351
  const parsed = DateTime.parse(val, this.locale(), this.timezone());
227
352
  return parsed.isValid() ? parsed : null;
228
353
  } // date is returned es a ISO string, like 2021-09-14T22:00:00.000Z
229
354
 
230
355
 
231
- handleDayClick = (event, _ref) => {
232
- let date = _ref.date;
233
- const dateParsed = DateTime.parse(date, this.locale(), this.timezone());
234
- this.updateStateBasedOnDateInput(dateParsed, event);
235
- };
236
- handleHideCalendar = event => {
237
- // update state based on the DateInput's text value
238
- if (this.state.dateInputTextChanged || event.key === 'Enter') {
239
- const dateParsed = this.tryParseDate(this.state.dateInputText);
240
- this.updateStateBasedOnDateInput(dateParsed, event);
241
- } else {
242
- // user clicked outside or tabbed away or pressed esc, reset text
243
- this.setState({
244
- dateInputText: this.state.iso ? this.state.iso.format(this.dateFormat) : '',
245
- calendarSelectedDate: this.state.iso ? this.state.iso.clone() : void 0
246
- });
247
- }
248
-
249
- this.setState({
250
- isShowingCalendar: false,
251
- dateInputTextChanged: false
252
- });
253
- };
254
-
255
356
  updateStateBasedOnDateInput(dateParsed, event) {
256
357
  let newState;
257
358
 
@@ -273,113 +374,6 @@ let DateTimeInput = (_dec = testable(), _dec(_class = class DateTimeInput extend
273
374
  this.changeStateIfNeeded(newState, event);
274
375
  }
275
376
 
276
- handleTimeChange = (event, option) => {
277
- let newValue;
278
-
279
- if (this.state.iso) {
280
- newValue = option.value;
281
- } else {
282
- // if no date is set just return the input text, it will error
283
- newValue = option.inputText;
284
- }
285
-
286
- const newState = this.recalculateState(newValue, true, false);
287
- this.changeStateIfNeeded(newState, event);
288
- this.setState({
289
- timeSelectValue: option.value
290
- });
291
- };
292
- changeStateIfNeeded = (newState, e) => {
293
- this.setState({
294
- message: newState.message
295
- });
296
-
297
- if (!newState.iso && !this.state.iso) {
298
- return;
299
- }
300
-
301
- if (!this.state.iso || !newState.iso || !this.state.iso.isSame(newState.iso)) {
302
- this.setState(newState);
303
-
304
- if (this.props.onChange) {
305
- var _newState$iso;
306
-
307
- this.props.onChange(e, (_newState$iso = newState.iso) === null || _newState$iso === void 0 ? void 0 : _newState$iso.toISOString());
308
- }
309
- }
310
- };
311
- handleBlur = e => {
312
- // when TABbing from the DateInput to TimeInput or visa-versa, the blur
313
- // happens on the target before the relatedTarget gets focus.
314
- // The timeout gives it a moment for that to happen
315
- if (typeof this.props.onBlur === 'function') {
316
- window.setTimeout(() => {
317
- var _this$props$onBlur, _this$props;
318
-
319
- (_this$props$onBlur = (_this$props = this.props).onBlur) === null || _this$props$onBlur === void 0 ? void 0 : _this$props$onBlur.call(_this$props, e);
320
- }, 0);
321
- }
322
- };
323
- handleShowCalendar = _event => {
324
- this.setState({
325
- isShowingCalendar: true
326
- });
327
- };
328
- handleSelectNextDay = _event => {
329
- let toAlter;
330
-
331
- if (this.state.calendarSelectedDate) {
332
- toAlter = this.state.calendarSelectedDate.clone();
333
- } else if (this.state.iso) {
334
- toAlter = this.state.iso.clone();
335
- } else {
336
- toAlter = DateTime.now(this.locale(), this.timezone());
337
- }
338
-
339
- toAlter.add({
340
- days: 1
341
- });
342
- this.setState({
343
- calendarSelectedDate: toAlter,
344
- renderedDate: toAlter.clone(),
345
- dateInputText: toAlter.format(this.dateFormat)
346
- });
347
- };
348
- handleSelectPrevDay = _event => {
349
- let toAlter;
350
-
351
- if (this.state.calendarSelectedDate) {
352
- toAlter = this.state.calendarSelectedDate.clone();
353
- } else if (this.state.iso) {
354
- toAlter = this.state.iso.clone();
355
- } else {
356
- toAlter = DateTime.now(this.locale(), this.timezone());
357
- }
358
-
359
- toAlter.subtract({
360
- days: 1
361
- });
362
- this.setState({
363
- calendarSelectedDate: toAlter,
364
- renderedDate: toAlter.clone(),
365
- dateInputText: toAlter.format(this.dateFormat)
366
- });
367
- };
368
- handleRenderNextMonth = _event => {
369
- this.setState({
370
- renderedDate: this.state.renderedDate.clone().add({
371
- months: 1
372
- })
373
- });
374
- };
375
- handleRenderPrevMonth = _event => {
376
- this.setState({
377
- renderedDate: this.state.renderedDate.clone().subtract({
378
- months: 1
379
- })
380
- });
381
- };
382
-
383
377
  renderDays() {
384
378
  if (!this.state.isShowingCalendar) {
385
379
  // this is an expensive function, only execute if the calendar is open
@@ -531,6 +525,15 @@ let DateTimeInput = (_dec = testable(), _dec(_class = class DateTimeInput extend
531
525
  }));
532
526
  }
533
527
 
534
- }) || _class);
528
+ }, _class2.displayName = "DateTimeInput", _class2.DEFAULT_MESSAGE_FORMAT = 'LLLL', _class2.propTypes = propTypes, _class2.allowedProps = allowedProps, _class2.defaultProps = {
529
+ layout: 'inline',
530
+ colSpacing: 'medium',
531
+ rowSpacing: 'small',
532
+ timeStep: 30,
533
+ messageFormat: _class2.DEFAULT_MESSAGE_FORMAT,
534
+ isRequired: false,
535
+ dateFormat: 'LL' // Localized date with full month, e.g. "August 6, 2014"
536
+
537
+ }, _class2.contextType = ApplyLocaleContext, _class2)) || _class);
535
538
  export default DateTimeInput;
536
539
  export { DateTimeInput };