@entur/datepicker 10.1.3 → 11.0.1-beta.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.
@@ -1,4 +1,4 @@
1
- import { useRandomId, ConditionalWrapper, useWindowDimensions, useOnClickOutside, useOnEscape, useOnMount, mergeRefs, warnAboutMissingStyles } from '@entur/utils';
1
+ import { useRandomId, ConditionalWrapper, mergeRefs, useWindowDimensions, useOnClickOutside, useOnEscape, useOnMount, warnAboutMissingStyles } from '@entur/utils';
2
2
  import React, { useRef, useState, useEffect } from 'react';
3
3
  import { useDateFieldState, useDatePickerState, useTimeFieldState } from '@react-stately/datepicker';
4
4
  import { useDateSegment, useDateField, useDatePicker, useTimeField } from '@react-aria/datepicker';
@@ -49,7 +49,7 @@ var FieldSegment = function FieldSegment(_ref) {
49
49
  ref: ref,
50
50
  className: classNames('eds-date-and-time-field__segment', {
51
51
  'eds-date-and-time-field__segment--placeholder': segment.isPlaceholder,
52
- 'eds-date-and-time-field__segment--dot-separator': segment.text === '.'
52
+ 'eds-date-and-time-field__segment--dot-separator': segment.text === '.' || segment.text === ':'
53
53
  }),
54
54
  tabIndex: state.isDisabled ? -1 : segmentProps.tabIndex
55
55
  }, rest), segment.text);
@@ -202,17 +202,31 @@ function getWeekNumberForDate(date) {
202
202
  var weekNumber = Math.ceil((thursdayOfWeek.compare(firstDayOfYearForThursday) + 1) / 7);
203
203
  return weekNumber;
204
204
  }
205
+ function handleOnChange(_ref2) {
206
+ var value = _ref2.value,
207
+ selectedDate = _ref2.selectedDate,
208
+ forcedReturnType = _ref2.forcedReturnType,
209
+ onChange = _ref2.onChange;
210
+ if (forcedReturnType !== undefined || !selectedDate) {
211
+ return onChange == null ? void 0 : onChange(convertValueToType({
212
+ value: value,
213
+ type: forcedReturnType != null ? forcedReturnType : 'ZonedDateTime',
214
+ timezone: value !== null && 'timezone' in value ? value.timezone : undefined
215
+ }));
216
+ }
217
+ onChange == null || onChange(value);
218
+ }
205
219
 
206
- var _excluded$a = ["selectedDate", "onChange", "label", "locale", "showTimeZone", "showTime", "granularity", "disabled", "isDisabled", "variant", "feedback", "validationVariant", "validationFeedback", "labelTooltip", "minDate", "maxDate", "style", "className", "labelProps", "fieldProps", "groupProps", "append", "prepend", "dateFieldRef"];
220
+ var _excluded$a = ["selectedDate", "onChange", "label", "locale", "showTimeZone", "showTime", "granularity", "disabled", "isDisabled", "variant", "feedback", "validationVariant", "validationFeedback", "labelTooltip", "minDate", "maxDate", "forcedReturnType", "style", "className", "labelProps", "append", "prepend", "dateFieldRef"];
207
221
  var DateField = function DateField(_ref) {
208
222
  var selectedDate = _ref.selectedDate,
209
- onChange = _ref.onChange,
223
+ _onChange = _ref.onChange,
210
224
  label = _ref.label,
211
225
  customLocale = _ref.locale,
212
226
  showTimeZone = _ref.showTimeZone,
213
227
  showTime = _ref.showTime,
214
228
  _ref$granularity = _ref.granularity,
215
- granularity = _ref$granularity === void 0 ? 'day' : _ref$granularity,
229
+ granularity = _ref$granularity === void 0 ? showTime ? 'minute' : 'day' : _ref$granularity,
216
230
  disabled = _ref.disabled,
217
231
  isDisabled = _ref.isDisabled,
218
232
  variant = _ref.variant,
@@ -224,34 +238,40 @@ var DateField = function DateField(_ref) {
224
238
  labelTooltip = _ref.labelTooltip,
225
239
  minDate = _ref.minDate,
226
240
  maxDate = _ref.maxDate,
241
+ forcedReturnType = _ref.forcedReturnType,
227
242
  style = _ref.style,
228
243
  className = _ref.className,
229
244
  parentLabelProps = _ref.labelProps,
230
- parentFieldProps = _ref.fieldProps,
231
- parentGroupProps = _ref.groupProps,
232
245
  append = _ref.append,
233
246
  prepend = _ref.prepend,
234
247
  ref = _ref.dateFieldRef,
235
248
  rest = _objectWithoutPropertiesLoose(_ref, _excluded$a);
236
249
  var _useLocale = useLocale(),
237
250
  locale = _useLocale.locale;
238
- var state = useDateFieldState(_extends({}, rest, {
251
+ var _props = _extends({}, rest, {
252
+ label: label,
239
253
  locale: customLocale != null ? customLocale : locale,
240
254
  createCalendar: createCalendar,
241
255
  value: selectedDate,
242
- onChange: onChange,
256
+ onChange: function onChange(value) {
257
+ return handleOnChange({
258
+ value: value,
259
+ selectedDate: selectedDate,
260
+ forcedReturnType: forcedReturnType,
261
+ onChange: _onChange
262
+ });
263
+ },
243
264
  hideTimeZone: !showTimeZone,
244
- granularity: showTime ? 'minute' : granularity,
265
+ granularity: granularity,
245
266
  minValue: minDate,
246
267
  // this weird logic makes sure the entire day is included if no time is provided in maxDate
247
268
  maxValue: 'hour' in (maxDate != null ? maxDate : {}) ? maxDate : maxDate !== undefined ? lastMillisecondOfDay(maxDate) : undefined,
248
269
  isDisabled: isDisabled || disabled,
249
270
  shouldForceLeadingZeros: true
250
- }));
271
+ });
272
+ var state = useDateFieldState(_props);
251
273
  var dateFieldRef = useRef(null);
252
- var _useDateField = useDateField(_extends({}, parentFieldProps, rest, {
253
- label: label
254
- }), state, dateFieldRef),
274
+ var _useDateField = useDateField(_props, state, dateFieldRef),
255
275
  labelProps = _useDateField.labelProps,
256
276
  fieldProps = _useDateField.fieldProps;
257
277
  var id = useRandomId('datefield');
@@ -276,22 +296,16 @@ var DateField = function DateField(_ref) {
276
296
  labelProps: parentLabelProps != null ? parentLabelProps : labelProps,
277
297
  labelTooltip: labelTooltip,
278
298
  prepend: prepend,
279
- ref: ref,
299
+ ref: mergeRefs(ref, dateFieldRef),
280
300
  style: style,
281
- variant: variant != null ? variant : state.validationState === 'invalid' ? validationVariant : undefined
282
- }, parentGroupProps), React.createElement("span", _extends({
283
- ref: dateFieldRef
284
- }, fieldProps, {
285
- style: {
286
- display: 'contents'
287
- }
288
- }), state.segments.map(function (segment, i) {
301
+ variant: variant != null ? variant : state.isInvalid ? validationVariant : undefined
302
+ }, fieldProps), state.segments.map(function (segment, i) {
289
303
  return React.createElement(FieldSegment, {
290
304
  segment: segment,
291
305
  state: state,
292
306
  key: i
293
307
  });
294
- }))));
308
+ })));
295
309
  };
296
310
 
297
311
  var _excluded$9 = ["children", "className", "style"];
@@ -397,9 +411,9 @@ var CalendarGrid = function CalendarGrid(_ref) {
397
411
  className: "eds-datepicker__calendar__grid"
398
412
  }), React.createElement("thead", _extends({}, headerProps), React.createElement("tr", null, showWeekNumbers && React.createElement("th", {
399
413
  className: "eds-datepicker__calendar__grid__weeknumber-header"
400
- }, weekNumberHeader), weekDaysMapped().map(function (day, index) {
414
+ }, weekNumberHeader), weekDaysMapped().map(function (day) {
401
415
  return React.createElement("th", {
402
- key: index
416
+ key: day
403
417
  }, day);
404
418
  }))), React.createElement("tbody", null, weeksArray.map(function (weekIndex) {
405
419
  var weekNumber = getWeekNumberForDate(state.getDatesInWeek(weekIndex)[0]);
@@ -410,7 +424,7 @@ var CalendarGrid = function CalendarGrid(_ref) {
410
424
  className: "eds-datepicker__calendar__grid__weeknumber"
411
425
  }, weekNumber), state.getDatesInWeek(weekIndex).map(function (date, i) {
412
426
  return date ? React.createElement(CalendarCell, {
413
- key: i,
427
+ key: date.month + "." + date.day,
414
428
  state: state,
415
429
  date: date,
416
430
  "aria-describedby": calendarGridId + 'description',
@@ -428,7 +442,7 @@ var CalendarGrid = function CalendarGrid(_ref) {
428
442
  };
429
443
 
430
444
  var _excluded$6 = ["locale"],
431
- _excluded2$3 = ["selectedDate", "onChange", "minDate", "maxDate", "showWeekNumbers", "weekNumberHeader", "style", "className", "navigationDescription", "onSelectedCellClick", "classNameForDate", "ariaLabelForDate", "calendarRef"];
445
+ _excluded2$3 = ["selectedDate", "onChange", "minDate", "maxDate", "showWeekNumbers", "weekNumberHeader", "forcedReturnType", "style", "className", "navigationDescription", "onSelectedCellClick", "classNameForDate", "ariaLabelForDate", "calendarRef"];
432
446
  var Calendar = function Calendar(_ref) {
433
447
  var localOverride = _ref.locale,
434
448
  rest = _objectWithoutPropertiesLoose(_ref, _excluded$6);
@@ -440,13 +454,14 @@ var Calendar = function Calendar(_ref) {
440
454
  };
441
455
  var CalendarBase = function CalendarBase(_ref2) {
442
456
  var selectedDate = _ref2.selectedDate,
443
- onChange = _ref2.onChange,
457
+ _onChange = _ref2.onChange,
444
458
  minDate = _ref2.minDate,
445
459
  maxDate = _ref2.maxDate,
446
460
  _ref2$showWeekNumbers = _ref2.showWeekNumbers,
447
461
  showWeekNumbers = _ref2$showWeekNumbers === void 0 ? false : _ref2$showWeekNumbers,
448
462
  _ref2$weekNumberHeade = _ref2.weekNumberHeader,
449
463
  weekNumberHeader = _ref2$weekNumberHeade === void 0 ? 'uke' : _ref2$weekNumberHeade,
464
+ forcedReturnType = _ref2.forcedReturnType,
450
465
  style = _ref2.style,
451
466
  className = _ref2.className,
452
467
  navigationDescription = _ref2.navigationDescription,
@@ -460,16 +475,23 @@ var CalendarBase = function CalendarBase(_ref2) {
460
475
  rest = _objectWithoutPropertiesLoose(_ref2, _excluded2$3);
461
476
  var _useLocale2 = useLocale(),
462
477
  locale = _useLocale2.locale;
463
- var allProps = _extends({}, rest, {
478
+ var _props = _extends({}, rest, {
464
479
  value: selectedDate,
465
- onChange: onChange,
480
+ onChange: function onChange(value) {
481
+ return handleOnChange({
482
+ value: value,
483
+ selectedDate: selectedDate,
484
+ forcedReturnType: forcedReturnType,
485
+ onChange: _onChange
486
+ });
487
+ },
466
488
  locale: locale,
467
489
  createCalendar: createCalendar,
468
490
  minValue: minDate,
469
491
  maxValue: maxDate
470
492
  });
471
- var state = useCalendarState(allProps);
472
- var _useCalendar = useCalendar(allProps, state),
493
+ var state = useCalendarState(_props);
494
+ var _useCalendar = useCalendar(_props, state),
473
495
  calendarProps = _useCalendar.calendarProps,
474
496
  prevButtonProps = _useCalendar.prevButtonProps,
475
497
  nextButtonProps = _useCalendar.nextButtonProps,
@@ -488,7 +510,7 @@ var CalendarBase = function CalendarBase(_ref2) {
488
510
  "aria-label": ariaLabelIfNorwegian('Neste måned', locale, nextButtonProps)
489
511
  }), React.createElement(RightArrowIcon, {
490
512
  size: 20
491
- }))), React.createElement(CalendarGrid, {
513
+ }))), React.createElement(CalendarGrid, _extends({}, rest, {
492
514
  state: state,
493
515
  navigationDescription: navigationDescription,
494
516
  onSelectedCellClick: onSelectedCellClick,
@@ -496,13 +518,12 @@ var CalendarBase = function CalendarBase(_ref2) {
496
518
  ariaLabelForDate: ariaLabelForDate,
497
519
  showWeekNumbers: showWeekNumbers,
498
520
  weekNumberHeader: weekNumberHeader
499
- }));
521
+ })));
500
522
  };
501
523
 
502
- var _excluded$5 = ["selectedDate", "onChange", "locale", "disabled", "showTime", "showTimeZone", "classNameForDate", "className", "style", "variant", "feedback", "validationVariant", "validationFeedback", "showWeekNumbers", "weekNumberHeader", "disableModal", "labelTooltip", "navigationDescription", "minDate", "maxDate", "modalTreshold", "forcedReturnType", "ariaLabelForDate", "append", "prepend"];
524
+ var _excluded$5 = ["selectedDate", "locale", "disabled", "showTime", "showTimeZone", "classNameForDate", "className", "variant", "feedback", "validationVariant", "validationFeedback", "showWeekNumbers", "weekNumberHeader", "disableModal", "labelTooltip", "navigationDescription", "minDate", "maxDate", "modalTreshold", "forcedReturnType", "ariaLabelForDate", "append", "prepend", "granularity"];
503
525
  var DatePicker = function DatePicker(_ref) {
504
526
  var selectedDate = _ref.selectedDate,
505
- onChange = _ref.onChange,
506
527
  locale = _ref.locale,
507
528
  disabled = _ref.disabled,
508
529
  showTime = _ref.showTime,
@@ -510,7 +531,6 @@ var DatePicker = function DatePicker(_ref) {
510
531
  showTimeZone = _ref$showTimeZone === void 0 ? false : _ref$showTimeZone,
511
532
  classNameForDate = _ref.classNameForDate,
512
533
  className = _ref.className,
513
- style = _ref.style,
514
534
  variant = _ref.variant,
515
535
  feedback = _ref.feedback,
516
536
  validationVariant = _ref.validationVariant,
@@ -525,36 +545,27 @@ var DatePicker = function DatePicker(_ref) {
525
545
  maxDate = _ref.maxDate,
526
546
  _ref$modalTreshold = _ref.modalTreshold,
527
547
  modalTreshold = _ref$modalTreshold === void 0 ? 1000 : _ref$modalTreshold,
528
- forcedReturnType = _ref.forcedReturnType,
529
548
  ariaLabelForDate = _ref.ariaLabelForDate,
530
549
  append = _ref.append,
531
550
  prepend = _ref.prepend,
551
+ _ref$granularity = _ref.granularity,
552
+ granularity = _ref$granularity === void 0 ? showTime ? 'minute' : 'day' : _ref$granularity,
532
553
  rest = _objectWithoutPropertiesLoose(_ref, _excluded$5);
533
554
  var CALENDAR_MODAL_MAX_SCREEN_WIDTH = modalTreshold;
534
555
  var datePickerRef = useRef(null);
535
556
  var calendarRef = useRef(null);
536
557
  var _useWindowDimensions = useWindowDimensions(),
537
558
  width = _useWindowDimensions.width;
538
- var handleOnChange = function handleOnChange(value) {
539
- if (forcedReturnType !== undefined) {
540
- return onChange(convertValueToType({
541
- value: value,
542
- type: forcedReturnType,
543
- timezone: value !== null && 'timezone' in value ? value.timezone : undefined
544
- }));
545
- }
546
- onChange(value);
547
- };
548
- var state = useDatePickerState(_extends({}, rest, {
559
+ var _props = _extends({}, rest, {
549
560
  minValue: minDate,
550
561
  // this weird logic makes sure the entire day is included if no time is provided in maxDate
551
562
  maxValue: 'hour' in (maxDate != null ? maxDate : {}) ? maxDate : maxDate !== undefined ? lastMillisecondOfDay(maxDate) : undefined,
552
563
  value: selectedDate,
553
- onChange: handleOnChange,
554
- granularity: showTime ? 'minute' : rest.granularity,
564
+ granularity: granularity,
555
565
  isDisabled: disabled
556
- }));
557
- var _useDatePicker = useDatePicker(_extends({}, rest), state, datePickerRef),
566
+ });
567
+ var state = useDatePickerState(_props);
568
+ var _useDatePicker = useDatePicker(_props, state, datePickerRef),
558
569
  groupProps = _useDatePicker.groupProps,
559
570
  labelProps = _useDatePicker.labelProps,
560
571
  fieldProps = _useDatePicker.fieldProps,
@@ -583,13 +594,13 @@ var DatePicker = function DatePicker(_ref) {
583
594
  state.setOpen(false);
584
595
  });
585
596
  var calendarSharedProps = _extends({}, dialogProps, calendarProps, {
597
+ onChange: rest.onChange,
586
598
  disabled: disabled,
587
599
  navigationDescription: navigationDescription,
588
600
  onSelectedCellClick: function onSelectedCellClick() {
589
601
  return state.setOpen(false);
590
602
  },
591
603
  selectedDate: selectedDate,
592
- onChange: handleOnChange,
593
604
  minDate: minDate,
594
605
  maxDate: maxDate,
595
606
  calendarRef: calendarRef,
@@ -598,14 +609,14 @@ var DatePicker = function DatePicker(_ref) {
598
609
  showWeekNumbers: showWeekNumbers,
599
610
  weekNumberHeader: weekNumberHeader
600
611
  });
601
- var useModal = typeof width !== 'undefined' && width <= CALENDAR_MODAL_MAX_SCREEN_WIDTH && !disableModal;
612
+ var isModal = typeof width !== 'undefined' && width <= CALENDAR_MODAL_MAX_SCREEN_WIDTH && !disableModal;
602
613
  var popoverCalendar = React.createElement("div", {
603
614
  style: _extends({}, floatingStyles, {
604
615
  zIndex: zIndexes.popover
605
616
  }),
606
617
  ref: refs.setFloating
607
618
  }, React.createElement(FocusLock, {
608
- disabled: !state.isOpen || useModal,
619
+ disabled: !state.isOpen || isModal,
609
620
  returnFocus: true
610
621
  }, state.isOpen && React.createElement(Calendar, _extends({}, calendarSharedProps))));
611
622
  var modalCalendar = React.createElement(Modal, {
@@ -624,7 +635,7 @@ var DatePicker = function DatePicker(_ref) {
624
635
  locale: locale
625
636
  }, child);
626
637
  }
627
- }, React.createElement(DateField, {
638
+ }, React.createElement(DateField, _extends({}, groupProps, fieldProps, rest, {
628
639
  append: !disabled && React.createElement("div", {
629
640
  style: {
630
641
  display: 'flex',
@@ -643,14 +654,10 @@ var DatePicker = function DatePicker(_ref) {
643
654
  }),
644
655
  disabled: disabled,
645
656
  feedback: feedback,
646
- fieldProps: fieldProps,
647
- groupProps: groupProps,
648
- label: rest.label,
649
657
  labelProps: labelProps,
650
658
  labelTooltip: labelTooltip,
651
659
  maxDate: maxDate,
652
660
  minDate: minDate,
653
- onChange: handleOnChange,
654
661
  dateFieldRef: function dateFieldRef(node) {
655
662
  refs.setReference(node);
656
663
  datePickerRef.current = node;
@@ -658,11 +665,10 @@ var DatePicker = function DatePicker(_ref) {
658
665
  selectedDate: selectedDate,
659
666
  showTime: showTime,
660
667
  showTimeZone: showTimeZone,
661
- style: style,
662
668
  validationFeedback: validationFeedback,
663
669
  validationVariant: validationVariant,
664
670
  variant: variant
665
- }), useModal ? modalCalendar : popoverCalendar);
671
+ })), isModal ? modalCalendar : popoverCalendar);
666
672
  };
667
673
 
668
674
  var _excluded$4 = ["className", "style", "label", "onChange", "feedback", "variant", "disableLabelAnimation", "prepend"],
@@ -791,10 +797,10 @@ var TimePicker = function TimePicker(_ref) {
791
797
  var timePickerId = useRandomId('eds-timepicker');
792
798
  var timeZone = forcedTimeZone != null ? forcedTimeZone : selectedTime !== null && 'timezone' in selectedTime ? selectedTime.timezone : 'Europe/Oslo';
793
799
  var handleOnChange = function handleOnChange(value) {
794
- if (forcedReturnType !== undefined) {
800
+ if (forcedReturnType !== undefined || !selectedTime) {
795
801
  return onChange(convertValueToType({
796
802
  value: value,
797
- type: forcedReturnType,
803
+ type: forcedReturnType != null ? forcedReturnType : 'ZonedDateTime',
798
804
  timezone: timeZone
799
805
  }));
800
806
  }
@@ -1170,5 +1176,5 @@ var SimpleTimePicker = function SimpleTimePicker(_ref) {
1170
1176
 
1171
1177
  warnAboutMissingStyles('datepicker', 'form', 'icons');
1172
1178
 
1173
- export { Calendar, DateField, DatePicker, NativeDatePicker, NativeTimePicker, SimpleTimePicker, TimePicker, ariaLabelIfNorwegian, convertValueToType, createCalendar, focusSegment, getWeekNumberForDate, lastMillisecondOfDay, modulo, nativeDateToDateValue, nativeDateToTimeValue, timeOrDateValueToNativeDate };
1179
+ export { Calendar, DateField, DatePicker, NativeDatePicker, NativeTimePicker, SimpleTimePicker, TimePicker, ariaLabelIfNorwegian, convertValueToType, createCalendar, focusSegment, getWeekNumberForDate, handleOnChange, lastMillisecondOfDay, modulo, nativeDateToDateValue, nativeDateToTimeValue, timeOrDateValueToNativeDate };
1174
1180
  //# sourceMappingURL=datepicker.esm.js.map