@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 +1 -1
- package/es/DateTimeInput/index.js +168 -165
- package/lib/DateTimeInput/index.js +170 -167
- package/package.json +18 -18
- package/tsconfig.build.tsbuildinfo +1 -1
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-
|
|
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
|
-
|
|
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
|
-
}
|
|
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 };
|