@entur/datepicker 9.0.4-beta.0 → 9.1.0-RC.1

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.
@@ -64,8 +64,27 @@ export type DatePickerProps<DateType extends DateValue> = {
64
64
  * @default 'Bruk piltastene til å navigere mellom datoer'
65
65
  */
66
66
  navigationDescription?: string;
67
+ /** Tvinger typen på onChange til den gitte typen.
68
+ * Dette er nyttig når utgangsverdien din er 'null', men du ønsker at
69
+ * DatePicker f.eks alltid skal returnere en 'ZonedDateTime'.
70
+ *
71
+ * @default undefined (onChange returnerer DateValue bassert på value, og om tid vises eller ikke)
72
+ *
73
+ * Hvorfor er dette nødvendig?
74
+ * I utgangspunktet vil en DatePicker som initieres med 'null' som verdi og ikke viser tid returnere en CalendarDate.
75
+ * Dette er problematisk hvis du bruker datovelgeren sammen en TimePicker da
76
+ * denne ikke støtter dato uten tidspunkt (CalendarDate). Ved å da tvinge DatePicker til å returnere
77
+ * CalendarDateTime eller ZonedDateTime vil du kunne bruke den sammen med TimePicker.
78
+ *
79
+ * Hvorfor kan ikke dette gjøres automatisk?
80
+ * En DatePicker som initieres med 'null' som verdi gir ingen informasjon om hvilken type man ønsker å returnere.
81
+ * DatePicker støtter dog at du kan sende med en TypeScript-type, men TypeScript eksisterer ikke i runtime og
82
+ * kan derfor ikke brukes til å bestemme hvilken type som skal returneres. Det er derfor nødvendig å enten gi
83
+ * en initiell 'selectedDate' eller tvinge typen med denne prop-en.
84
+ */
85
+ forcedReturnType?: 'CalendarDate' | 'CalendarDateTime' | 'ZonedDateTime';
67
86
  /** Ekstra klassenavn */
68
87
  className?: string;
69
88
  style?: React.CSSProperties;
70
89
  } & Omit<AriaDatePickerProps<DateType>, 'value' | 'onChange' | 'label' | 'hideTimeZone' | 'placeholder' | 'minValue' | 'maxValue'>;
71
- export declare const DatePicker: <DateType extends DateValue>({ selectedDate, onChange, locale, disabled, showTime, showTimeZone, className, style, variant, feedback, validationVariant, validationFeedback, disableModal, labelTooltip, navigationDescription, minDate, maxDate, modalTreshold, ...rest }: DatePickerProps<DateType>) => React.JSX.Element;
90
+ export declare const DatePicker: <DateType extends DateValue>({ selectedDate, onChange, locale, disabled, showTime, showTimeZone, className, style, variant, feedback, validationVariant, validationFeedback, disableModal, labelTooltip, navigationDescription, minDate, maxDate, modalTreshold, forcedReturnType, ...rest }: DatePickerProps<DateType>) => React.JSX.Element;
@@ -155,6 +155,21 @@ var lastMillisecondOfDay = function lastMillisecondOfDay(dateValue) {
155
155
  milliseconds: -1
156
156
  });
157
157
  };
158
+ var convertValueToType = function convertValueToType(_ref) {
159
+ var value = _ref.value,
160
+ type = _ref.type;
161
+ if (value === null) return null;
162
+ switch (type) {
163
+ case 'CalendarDate':
164
+ return date.toCalendarDate(value);
165
+ case 'CalendarDateTime':
166
+ return date.toCalendarDateTime(value);
167
+ case 'ZonedDateTime':
168
+ return date.toZoned(value, 'Europe/Oslo');
169
+ default:
170
+ return value;
171
+ }
172
+ };
158
173
 
159
174
  var _excluded$9 = ["selectedDate", "onChange", "label", "locale", "showTimeZone", "showTime", "granularity", "disabled", "isDisabled", "variant", "feedback", "validationVariant", "validationFeedback", "labelTooltip", "minDate", "maxDate", "style", "className", "labelProps", "append"];
160
175
  var DateField = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
@@ -370,15 +385,16 @@ var Calendar = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
370
385
  rest = _objectWithoutPropertiesLoose(_ref, _excluded$5);
371
386
  var _useLocale = i18n.useLocale(),
372
387
  locale = _useLocale.locale;
373
- var state = calendar$1.useCalendarState(_extends({}, rest, {
388
+ var allProps = _extends({}, rest, {
374
389
  value: selectedDate,
375
390
  onChange: onChange,
376
391
  locale: customLocale != null ? customLocale : locale,
377
392
  createCalendar: createCalendar,
378
393
  minValue: minDate,
379
394
  maxValue: maxDate
380
- }));
381
- var _useCalendar = calendar.useCalendar(rest, state),
395
+ });
396
+ var state = calendar$1.useCalendarState(allProps);
397
+ var _useCalendar = calendar.useCalendar(allProps, state),
382
398
  calendarProps = _useCalendar.calendarProps,
383
399
  prevButtonProps = _useCalendar.prevButtonProps,
384
400
  nextButtonProps = _useCalendar.nextButtonProps,
@@ -411,7 +427,7 @@ var Calendar = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
411
427
  })));
412
428
  });
413
429
 
414
- var _excluded$4 = ["selectedDate", "onChange", "locale", "disabled", "showTime", "showTimeZone", "className", "style", "variant", "feedback", "validationVariant", "validationFeedback", "disableModal", "labelTooltip", "navigationDescription", "minDate", "maxDate", "modalTreshold"];
430
+ var _excluded$4 = ["selectedDate", "onChange", "locale", "disabled", "showTime", "showTimeZone", "className", "style", "variant", "feedback", "validationVariant", "validationFeedback", "disableModal", "labelTooltip", "navigationDescription", "minDate", "maxDate", "modalTreshold", "forcedReturnType"];
415
431
  var DatePicker = function DatePicker(_ref) {
416
432
  var selectedDate = _ref.selectedDate,
417
433
  onChange = _ref.onChange,
@@ -433,6 +449,7 @@ var DatePicker = function DatePicker(_ref) {
433
449
  maxDate = _ref.maxDate,
434
450
  _ref$modalTreshold = _ref.modalTreshold,
435
451
  modalTreshold = _ref$modalTreshold === void 0 ? 1000 : _ref$modalTreshold,
452
+ forcedReturnType = _ref.forcedReturnType,
436
453
  rest = _objectWithoutPropertiesLoose(_ref, _excluded$4);
437
454
  var CALENDAR_MODAL_MAX_SCREEN_WIDTH = modalTreshold;
438
455
  var datePickerRef = React.useRef(null);
@@ -440,12 +457,21 @@ var DatePicker = function DatePicker(_ref) {
440
457
  var dateFieldRef = React.useRef(null);
441
458
  var _useWindowDimensions = utils.useWindowDimensions(),
442
459
  width = _useWindowDimensions.width;
460
+ var handleOnChange = function handleOnChange(value) {
461
+ if (forcedReturnType !== undefined) {
462
+ return onChange(convertValueToType({
463
+ value: value,
464
+ type: forcedReturnType
465
+ }));
466
+ }
467
+ onChange(value);
468
+ };
443
469
  var state = datepicker$1.useDatePickerState(_extends({}, rest, {
444
470
  minValue: minDate,
445
471
  // this weird logic makes sure the entire day is included if no time is provided in maxDate
446
472
  maxValue: 'hour' in (maxDate != null ? maxDate : {}) ? maxDate : maxDate !== undefined ? lastMillisecondOfDay(maxDate) : undefined,
447
473
  value: selectedDate,
448
- onChange: onChange,
474
+ onChange: handleOnChange,
449
475
  granularity: showTime ? 'minute' : rest.granularity,
450
476
  isDisabled: disabled
451
477
  }));
@@ -482,10 +508,9 @@ var DatePicker = function DatePicker(_ref) {
482
508
  return state.setOpen(false);
483
509
  },
484
510
  selectedDate: selectedDate,
485
- onChange: onChange,
511
+ onChange: handleOnChange,
486
512
  minDate: minDate,
487
513
  maxDate: maxDate,
488
- granularity: showTime ? 'minute' : rest.granularity,
489
514
  ref: calendarRef
490
515
  });
491
516
  var useModal = typeof width !== 'undefined' && width <= CALENDAR_MODAL_MAX_SCREEN_WIDTH && !disableModal;
@@ -531,7 +556,7 @@ var DatePicker = function DatePicker(_ref) {
531
556
  className: "eds-datepicker__datefield__wrapper"
532
557
  }), React.createElement(DateField, _extends({}, fieldProps, {
533
558
  selectedDate: selectedDate,
534
- onChange: onChange,
559
+ onChange: handleOnChange,
535
560
  label: rest.label,
536
561
  labelProps: labelProps,
537
562
  disabled: disabled,
@@ -1036,6 +1061,7 @@ exports.NativeTimePicker = NativeTimePicker;
1036
1061
  exports.SimpleTimePicker = SimpleTimePicker;
1037
1062
  exports.TimePicker = TimePicker;
1038
1063
  exports.ariaLabelIfNorwegian = ariaLabelIfNorwegian;
1064
+ exports.convertValueToType = convertValueToType;
1039
1065
  exports.createCalendar = createCalendar;
1040
1066
  exports.lastMillisecondOfDay = lastMillisecondOfDay;
1041
1067
  exports.nativeDateToDateValue = nativeDateToDateValue;