@navikt/ds-react 1.3.20 → 1.3.22

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.
Files changed (90) hide show
  1. package/_docs.json +57 -0
  2. package/cjs/button/Button.js +1 -0
  3. package/cjs/date/datepicker/DatePicker.js +3 -3
  4. package/cjs/date/datepicker/DatePickerStandalone.js +3 -3
  5. package/cjs/date/datepicker/DayButton.js +5 -2
  6. package/cjs/date/datepicker/caption/DropdownCaption.js +5 -3
  7. package/cjs/date/hooks/useDatepicker.js +22 -16
  8. package/cjs/date/hooks/useMonthPicker.js +14 -12
  9. package/cjs/date/hooks/useRangeDatepicker.js +36 -24
  10. package/cjs/date/hooks/useSharedMonthContext.js +6 -2
  11. package/cjs/date/monthpicker/MonthButton.js +14 -10
  12. package/cjs/date/monthpicker/MonthCaption.js +9 -6
  13. package/cjs/date/monthpicker/MonthSelector.js +11 -8
  14. package/cjs/date/utils/check-dates.js +6 -2
  15. package/cjs/date/utils/dates-disabled.js +6 -3
  16. package/cjs/date/utils/format-date.js +5 -2
  17. package/cjs/date/utils/get-dates.js +20 -13
  18. package/cjs/date/utils/get-initial-year.js +5 -2
  19. package/cjs/date/utils/is-match.js +20 -14
  20. package/cjs/date/utils/navigation.js +24 -21
  21. package/cjs/date/utils/parse-date.js +5 -2
  22. package/esm/button/Button.js +1 -0
  23. package/esm/button/Button.js.map +1 -1
  24. package/esm/date/datepicker/DatePicker.js +1 -1
  25. package/esm/date/datepicker/DatePicker.js.map +1 -1
  26. package/esm/date/datepicker/DatePickerStandalone.js +1 -1
  27. package/esm/date/datepicker/DatePickerStandalone.js.map +1 -1
  28. package/esm/date/datepicker/DayButton.js +1 -1
  29. package/esm/date/datepicker/DayButton.js.map +1 -1
  30. package/esm/date/datepicker/caption/DropdownCaption.js +3 -1
  31. package/esm/date/datepicker/caption/DropdownCaption.js.map +1 -1
  32. package/esm/date/hooks/useDatepicker.d.ts +4 -0
  33. package/esm/date/hooks/useDatepicker.js +16 -13
  34. package/esm/date/hooks/useDatepicker.js.map +1 -1
  35. package/esm/date/hooks/useMonthPicker.d.ts +4 -0
  36. package/esm/date/hooks/useMonthPicker.js +14 -12
  37. package/esm/date/hooks/useMonthPicker.js.map +1 -1
  38. package/esm/date/hooks/useRangeDatepicker.d.ts +5 -1
  39. package/esm/date/hooks/useRangeDatepicker.js +26 -17
  40. package/esm/date/hooks/useRangeDatepicker.js.map +1 -1
  41. package/esm/date/hooks/useSharedMonthContext.js +2 -1
  42. package/esm/date/hooks/useSharedMonthContext.js.map +1 -1
  43. package/esm/date/monthpicker/MonthButton.js +5 -1
  44. package/esm/date/monthpicker/MonthButton.js.map +1 -1
  45. package/esm/date/monthpicker/MonthCaption.js +4 -1
  46. package/esm/date/monthpicker/MonthCaption.js.map +1 -1
  47. package/esm/date/monthpicker/MonthSelector.js +4 -1
  48. package/esm/date/monthpicker/MonthSelector.js.map +1 -1
  49. package/esm/date/utils/check-dates.js +2 -1
  50. package/esm/date/utils/check-dates.js.map +1 -1
  51. package/esm/date/utils/dates-disabled.js +1 -1
  52. package/esm/date/utils/dates-disabled.js.map +1 -1
  53. package/esm/date/utils/format-date.js +1 -1
  54. package/esm/date/utils/format-date.js.map +1 -1
  55. package/esm/date/utils/get-dates.js +5 -1
  56. package/esm/date/utils/get-dates.js.map +1 -1
  57. package/esm/date/utils/get-initial-year.js +1 -1
  58. package/esm/date/utils/get-initial-year.js.map +1 -1
  59. package/esm/date/utils/is-match.js +4 -1
  60. package/esm/date/utils/is-match.js.map +1 -1
  61. package/esm/date/utils/navigation.js +1 -1
  62. package/esm/date/utils/navigation.js.map +1 -1
  63. package/esm/date/utils/parse-date.js +1 -1
  64. package/esm/date/utils/parse-date.js.map +1 -1
  65. package/package.json +3 -4
  66. package/src/button/Button.tsx +1 -0
  67. package/src/button/button.stories.tsx +20 -1
  68. package/src/date/datepicker/DatePicker.tsx +1 -1
  69. package/src/date/datepicker/DatePickerStandalone.tsx +1 -1
  70. package/src/date/datepicker/DayButton.tsx +1 -1
  71. package/src/date/datepicker/caption/DropdownCaption.tsx +3 -1
  72. package/src/date/datepicker/datepicker.stories.tsx +32 -10
  73. package/src/date/hooks/useDatepicker.tsx +24 -13
  74. package/src/date/hooks/useMonthPicker.tsx +21 -12
  75. package/src/date/hooks/useRangeDatepicker.tsx +45 -19
  76. package/src/date/hooks/useSharedMonthContext.tsx +2 -1
  77. package/src/date/monthpicker/MonthButton.tsx +5 -7
  78. package/src/date/monthpicker/MonthCaption.tsx +4 -1
  79. package/src/date/monthpicker/MonthSelector.tsx +4 -1
  80. package/src/date/monthpicker/monthpicker.stories.tsx +1 -2
  81. package/src/date/utils/__tests__/get-initial-year.test.ts +1 -1
  82. package/src/date/utils/__tests__/parse-dates.test.ts +2 -1
  83. package/src/date/utils/check-dates.ts +2 -1
  84. package/src/date/utils/dates-disabled.ts +1 -1
  85. package/src/date/utils/format-date.ts +1 -1
  86. package/src/date/utils/get-dates.ts +5 -7
  87. package/src/date/utils/get-initial-year.ts +1 -1
  88. package/src/date/utils/is-match.ts +5 -6
  89. package/src/date/utils/navigation.ts +1 -1
  90. package/src/date/utils/parse-date.ts +1 -1
package/_docs.json CHANGED
@@ -8673,6 +8673,25 @@
8673
8673
  "name": "boolean"
8674
8674
  }
8675
8675
  },
8676
+ "onDateChange": {
8677
+ "defaultValue": null,
8678
+ "description": "Callback for changed state",
8679
+ "name": "onDateChange",
8680
+ "parent": {
8681
+ "fileName": "src/date/hooks/useDatepicker.tsx",
8682
+ "name": "UseDatepickerOptions"
8683
+ },
8684
+ "declarations": [
8685
+ {
8686
+ "fileName": "src/date/hooks/useDatepicker.tsx",
8687
+ "name": "UseDatepickerOptions"
8688
+ }
8689
+ ],
8690
+ "required": false,
8691
+ "type": {
8692
+ "name": "((val?: Date) => void)"
8693
+ }
8694
+ },
8676
8695
  "locale": {
8677
8696
  "defaultValue": {
8678
8697
  "value": "\"nb\" (norsk bokmål)"
@@ -8797,6 +8816,25 @@
8797
8816
  "name": "boolean"
8798
8817
  }
8799
8818
  },
8819
+ "onMonthChange": {
8820
+ "defaultValue": null,
8821
+ "description": "Callback for month-change",
8822
+ "name": "onMonthChange",
8823
+ "parent": {
8824
+ "fileName": "src/date/hooks/useMonthPicker.tsx",
8825
+ "name": "UseMonthPickerOptions"
8826
+ },
8827
+ "declarations": [
8828
+ {
8829
+ "fileName": "src/date/hooks/useMonthPicker.tsx",
8830
+ "name": "UseMonthPickerOptions"
8831
+ }
8832
+ ],
8833
+ "required": false,
8834
+ "type": {
8835
+ "name": "((date?: Date) => void)"
8836
+ }
8837
+ },
8800
8838
  "locale": {
8801
8839
  "defaultValue": {
8802
8840
  "value": "\"nb\" (norsk bokmål)"
@@ -8919,6 +8957,25 @@
8919
8957
  "name": "DateRange"
8920
8958
  }
8921
8959
  },
8960
+ "onRangeChange": {
8961
+ "defaultValue": null,
8962
+ "description": "Callback for changed state",
8963
+ "name": "onRangeChange",
8964
+ "parent": {
8965
+ "fileName": "src/date/hooks/useRangeDatepicker.tsx",
8966
+ "name": "UseRangeDatepickerOptions"
8967
+ },
8968
+ "declarations": [
8969
+ {
8970
+ "fileName": "src/date/hooks/useRangeDatepicker.tsx",
8971
+ "name": "UseRangeDatepickerOptions"
8972
+ }
8973
+ ],
8974
+ "required": false,
8975
+ "type": {
8976
+ "name": "((val?: DateRange) => void)"
8977
+ }
8978
+ },
8922
8979
  "locale": {
8923
8980
  "defaultValue": {
8924
8981
  "value": "\"nb\" (norsk bokmål)"
@@ -62,6 +62,7 @@ exports.Button = (0, react_1.forwardRef)((_a, ref) => {
62
62
  return (react_1.default.createElement(Component, Object.assign({}, rest, { ref: mergedRef, className: (0, clsx_1.default)(className, "navds-button", `navds-button--${variant}`, `navds-button--${size}`, {
63
63
  "navds-button--loading": widthOverride,
64
64
  "navds-button--icon-only": !!icon && !children,
65
+ "navds-button--disabled": disabled !== null && disabled !== void 0 ? disabled : widthOverride,
65
66
  }), style: Object.assign(Object.assign({}, style), { width: widthOverride }), disabled: (disabled !== null && disabled !== void 0 ? disabled : widthOverride) ? true : undefined }), widthOverride ? (react_1.default.createElement(__1.Loader, { size: size })) : (react_1.default.createElement(react_1.default.Fragment, null,
66
67
  icon && iconPosition === "left" && (react_1.default.createElement("span", { className: "navds-button__icon" }, icon)),
67
68
  children && (react_1.default.createElement(__1.Label, { as: "span", size: size === "medium" ? "medium" : "small", "aria-live": "polite" }, children)),
@@ -39,7 +39,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
39
39
  Object.defineProperty(exports, "__esModule", { value: true });
40
40
  exports.DatePicker = void 0;
41
41
  const clsx_1 = __importDefault(require("clsx"));
42
- const date_fns_1 = require("date-fns");
42
+ const isWeekend_1 = __importDefault(require("date-fns/isWeekend"));
43
43
  const react_1 = __importStar(require("react"));
44
44
  const react_day_picker_1 = require("react-day-picker");
45
45
  const __1 = require("../..");
@@ -102,10 +102,10 @@ exports.DatePicker = (0, react_1.forwardRef)((_a, ref) => {
102
102
  }, className: (0, clsx_1.default)("navds-date", className), classNames: {
103
103
  vhidden: "navds-sr-only",
104
104
  }, disabled: (day) => {
105
- return ((disableWeekends && (0, date_fns_1.isWeekend)(day)) ||
105
+ return ((disableWeekends && (0, isWeekend_1.default)(day)) ||
106
106
  (0, react_day_picker_1.isMatch)(day, disabled));
107
107
  }, weekStartsOn: 1, initialFocus: false, labels: utils_1.labels, modifiers: {
108
- weekend: (day) => disableWeekends && (0, date_fns_1.isWeekend)(day),
108
+ weekend: (day) => disableWeekends && (0, isWeekend_1.default)(day),
109
109
  }, modifiersClassNames: {
110
110
  weekend: "rdp-day__weekend",
111
111
  }, showWeekNumber: showWeekNumber }, (0, __1.omit)(rest, ["onSelect"]))))))));
@@ -39,7 +39,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
39
39
  Object.defineProperty(exports, "__esModule", { value: true });
40
40
  exports.DatePickerStandalone = void 0;
41
41
  const clsx_1 = __importDefault(require("clsx"));
42
- const date_fns_1 = require("date-fns");
42
+ const isWeekend_1 = __importDefault(require("date-fns/isWeekend"));
43
43
  const react_1 = __importStar(require("react"));
44
44
  const react_day_picker_1 = require("react-day-picker");
45
45
  const __1 = require("../..");
@@ -73,9 +73,9 @@ exports.DatePickerStandalone = (0, react_1.forwardRef)((_a, ref) => {
73
73
  react_1.default.createElement(react_day_picker_1.DayPicker, Object.assign({ locale: (0, utils_1.getLocaleFromString)(locale) }, overrideProps, { selected: selected !== null && selected !== void 0 ? selected : selectedDates, components: {
74
74
  Caption: dropdownCaption ? caption_1.DropdownCaption : caption_1.Caption,
75
75
  }, className: "navds-date", classNames: { vhidden: "navds-sr-only" }, disabled: (day) => {
76
- return ((disableWeekends && (0, date_fns_1.isWeekend)(day)) || (0, react_day_picker_1.isMatch)(day, disabled));
76
+ return ((disableWeekends && (0, isWeekend_1.default)(day)) || (0, react_day_picker_1.isMatch)(day, disabled));
77
77
  }, weekStartsOn: 1, initialFocus: false, labels: utils_1.labels, modifiers: {
78
- weekend: (day) => disableWeekends && (0, date_fns_1.isWeekend)(day),
78
+ weekend: (day) => disableWeekends && (0, isWeekend_1.default)(day),
79
79
  }, modifiersClassNames: {
80
80
  weekend: "rdp-day__weekend",
81
81
  }, showWeekNumber: showWeekNumber }, (0, __1.omit)(rest, ["onSelect"])))));
@@ -22,16 +22,19 @@ var __importStar = (this && this.__importStar) || function (mod) {
22
22
  __setModuleDefault(result, mod);
23
23
  return result;
24
24
  };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
25
28
  Object.defineProperty(exports, "__esModule", { value: true });
26
29
  exports.DayButton = void 0;
27
- const date_fns_1 = require("date-fns");
30
+ const format_1 = __importDefault(require("date-fns/format"));
28
31
  const react_1 = __importStar(require("react"));
29
32
  const react_day_picker_1 = require("react-day-picker");
30
33
  const DayButton = (props) => {
31
34
  const buttonRef = (0, react_1.useRef)(null);
32
35
  const dayRender = (0, react_day_picker_1.useDayRender)(props.date, props.displayMonth, buttonRef);
33
36
  const { locale } = (0, react_day_picker_1.useDayPicker)();
34
- const dateTime = (0, date_fns_1.format)(props.date, "cccc d", { locale });
37
+ const dateTime = (0, format_1.default)(props.date, "cccc d", { locale });
35
38
  if (dayRender.isHidden) {
36
39
  return react_1.default.createElement(react_1.default.Fragment, null);
37
40
  }
@@ -5,7 +5,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.DropdownCaption = void 0;
7
7
  const ds_icons_1 = require("@navikt/ds-icons");
8
- const date_fns_1 = require("date-fns");
8
+ const setMonth_1 = __importDefault(require("date-fns/setMonth"));
9
+ const setYear_1 = __importDefault(require("date-fns/setYear"));
10
+ const startOfMonth_1 = __importDefault(require("date-fns/startOfMonth"));
9
11
  const react_1 = __importDefault(require("react"));
10
12
  const react_day_picker_1 = require("react-day-picker");
11
13
  const __1 = require("../../..");
@@ -18,8 +20,8 @@ const DropdownCaption = ({ displayMonth, id }) => {
18
20
  console.warn("Using dropdownCaption required fromDate and toDate");
19
21
  return null;
20
22
  }
21
- const handleYearChange = (e) => goToMonth((0, date_fns_1.setYear)((0, date_fns_1.startOfMonth)(displayMonth), Number(e.target.value)));
22
- const handleMonthChange = (e) => goToMonth((0, date_fns_1.setMonth)((0, date_fns_1.startOfMonth)(displayMonth), Number(e.target.value)));
23
+ const handleYearChange = (e) => goToMonth((0, setYear_1.default)((0, startOfMonth_1.default)(displayMonth), Number(e.target.value)));
24
+ const handleMonthChange = (e) => goToMonth((0, setMonth_1.default)((0, startOfMonth_1.default)(displayMonth), Number(e.target.value)));
23
25
  const years = (0, get_dates_1.getYears)(fromDate, toDate);
24
26
  const months = (0, get_dates_1.getMonths)(fromDate, toDate, displayMonth);
25
27
  const previousLabel = labelPrevious(previousMonth, { locale });
@@ -1,15 +1,20 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
6
  exports.useDatepicker = void 0;
4
- const date_fns_1 = require("date-fns");
7
+ const differenceInCalendarDays_1 = __importDefault(require("date-fns/differenceInCalendarDays"));
8
+ const isWeekend_1 = __importDefault(require("date-fns/isWeekend"));
5
9
  const react_1 = require("react");
6
10
  const react_day_picker_1 = require("react-day-picker");
7
11
  const utils_1 = require("../utils");
8
12
  const useDatepicker = (opt = {}) => {
9
- const { locale: _locale = "nb", required, defaultSelected, today = new Date(), fromDate, toDate, disabled, disableWeekends, } = opt;
13
+ const { locale: _locale = "nb", required, defaultSelected: _defaultSelected, today = new Date(), fromDate, toDate, disabled, disableWeekends, onDateChange, } = opt;
10
14
  const locale = (0, utils_1.getLocaleFromString)(_locale);
11
15
  const inputRef = (0, react_1.useRef)(null);
12
16
  const daypickerRef = (0, react_1.useRef)(null);
17
+ const [defaultSelected, setDefaultSelected] = (0, react_1.useState)(_defaultSelected);
13
18
  // Initialize states
14
19
  const [month, setMonth] = (0, react_1.useState)(defaultSelected !== null && defaultSelected !== void 0 ? defaultSelected : today);
15
20
  const [selectedDay, setSelectedDay] = (0, react_1.useState)(defaultSelected);
@@ -18,6 +23,10 @@ const useDatepicker = (opt = {}) => {
18
23
  ? (0, utils_1.formatDateForInput)(defaultSelected, locale, "date")
19
24
  : "";
20
25
  const [inputValue, setInputValue] = (0, react_1.useState)(defaultInputValue);
26
+ const getSelectedDate = (date) => {
27
+ onDateChange === null || onDateChange === void 0 ? void 0 : onDateChange(date);
28
+ return date;
29
+ };
21
30
  const handleFocusIn = (0, react_1.useCallback)((e) => {
22
31
  var _a;
23
32
  ![
@@ -38,21 +47,18 @@ const useDatepicker = (opt = {}) => {
38
47
  };
39
48
  }, [handleFocusIn]);
40
49
  const reset = () => {
41
- setSelectedDay(defaultSelected);
50
+ setSelectedDay(getSelectedDate(defaultSelected));
42
51
  setMonth(defaultSelected !== null && defaultSelected !== void 0 ? defaultSelected : today);
43
52
  setInputValue(defaultInputValue !== null && defaultInputValue !== void 0 ? defaultInputValue : "");
53
+ setDefaultSelected(_defaultSelected);
44
54
  };
45
55
  const setSelected = (date) => {
46
- setSelectedDay(date);
56
+ setSelectedDay(getSelectedDate(date));
47
57
  setMonth(date !== null && date !== void 0 ? date : today);
48
58
  setInputValue(date ? (0, utils_1.formatDateForInput)(date, locale, "date") : "");
49
59
  };
50
60
  const handleFocus = (e) => {
51
61
  !open && setOpen(true);
52
- if (!e.target.value) {
53
- reset();
54
- return;
55
- }
56
62
  let day = (0, utils_1.parseDate)(e.target.value, today, locale, "date");
57
63
  if ((0, utils_1.isValidDate)(day)) {
58
64
  setMonth(day);
@@ -70,11 +76,11 @@ const useDatepicker = (opt = {}) => {
70
76
  inputRef.current && inputRef.current.focus();
71
77
  }
72
78
  if (!required && selected) {
73
- setSelectedDay(undefined);
79
+ setSelectedDay(getSelectedDate(undefined));
74
80
  setInputValue("");
75
81
  return;
76
82
  }
77
- setSelectedDay(day);
83
+ setSelectedDay(getSelectedDate(day));
78
84
  setMonth(day);
79
85
  setInputValue(day ? (0, utils_1.formatDateForInput)(day, locale, "date") : "");
80
86
  };
@@ -86,17 +92,17 @@ const useDatepicker = (opt = {}) => {
86
92
  const day = (0, utils_1.parseDate)(e.target.value, today, locale, "date");
87
93
  if (!(0, utils_1.isValidDate)(day) ||
88
94
  (disabled &&
89
- ((disableWeekends && (0, date_fns_1.isWeekend)(day)) || (0, react_day_picker_1.isMatch)(day, disabled)))) {
90
- setSelectedDay(undefined);
95
+ ((disableWeekends && (0, isWeekend_1.default)(day)) || (0, react_day_picker_1.isMatch)(day, disabled)))) {
96
+ setSelectedDay(getSelectedDate(undefined));
91
97
  return;
92
98
  }
93
- const isBefore = fromDate && (0, date_fns_1.differenceInCalendarDays)(fromDate, day) > 0;
94
- const isAfter = toDate && (0, date_fns_1.differenceInCalendarDays)(day, toDate) > 0;
99
+ const isBefore = fromDate && (0, differenceInCalendarDays_1.default)(fromDate, day) > 0;
100
+ const isAfter = toDate && (0, differenceInCalendarDays_1.default)(day, toDate) > 0;
95
101
  if (isBefore || isAfter) {
96
- setSelectedDay(undefined);
102
+ setSelectedDay(getSelectedDate(undefined));
97
103
  return;
98
104
  }
99
- setSelectedDay(day);
105
+ setSelectedDay(getSelectedDate(day));
100
106
  setMonth(day);
101
107
  };
102
108
  const handleClose = (0, react_1.useCallback)(() => {
@@ -4,7 +4,8 @@ exports.useMonthpicker = void 0;
4
4
  const react_1 = require("react");
5
5
  const utils_1 = require("../utils");
6
6
  const useMonthpicker = (opt = {}) => {
7
- const { locale: _locale = "nb", defaultSelected, fromDate, toDate, disabled, required, } = opt;
7
+ const { locale: _locale = "nb", defaultSelected: _defaultSelected, fromDate, toDate, disabled, required, onMonthChange, } = opt;
8
+ const [defaultSelected, setDefaultSelected] = (0, react_1.useState)(_defaultSelected);
8
9
  const today = new Date();
9
10
  const locale = (0, utils_1.getLocaleFromString)(_locale);
10
11
  const inputRef = (0, react_1.useRef)(null);
@@ -17,6 +18,10 @@ const useMonthpicker = (opt = {}) => {
17
18
  ? (0, utils_1.formatDateForInput)(defaultSelected, locale, "month")
18
19
  : "";
19
20
  const [inputValue, setInputValue] = (0, react_1.useState)(defaultInputValue);
21
+ const getMonth = (date) => {
22
+ onMonthChange === null || onMonthChange === void 0 ? void 0 : onMonthChange(date);
23
+ return date;
24
+ };
20
25
  const handleFocusIn = (0, react_1.useCallback)((e) => {
21
26
  var _a;
22
27
  return ![
@@ -37,21 +42,18 @@ const useMonthpicker = (opt = {}) => {
37
42
  };
38
43
  }, [handleFocusIn]);
39
44
  const reset = () => {
40
- setSelectedMonth(defaultSelected);
45
+ setSelectedMonth(getMonth(defaultSelected));
41
46
  setYear(defaultSelected !== null && defaultSelected !== void 0 ? defaultSelected : today);
42
47
  setInputValue(defaultInputValue !== null && defaultInputValue !== void 0 ? defaultInputValue : "");
48
+ setDefaultSelected(_defaultSelected);
43
49
  };
44
50
  const setSelected = (date) => {
45
- setSelectedMonth(date);
51
+ setSelectedMonth(getMonth(date));
46
52
  setYear(date !== null && date !== void 0 ? date : today);
47
53
  setInputValue(date ? (0, utils_1.formatDateForInput)(date, locale, "month") : "");
48
54
  };
49
55
  const handleFocus = (e) => {
50
56
  !open && setOpen(true);
51
- if (!e.target.value) {
52
- reset();
53
- return;
54
- }
55
57
  let day = (0, utils_1.parseDate)(e.target.value, today, locale, "month");
56
58
  if ((0, utils_1.isValidDate)(day)) {
57
59
  setYear(day);
@@ -69,11 +71,11 @@ const useMonthpicker = (opt = {}) => {
69
71
  inputRef.current && inputRef.current.focus();
70
72
  }
71
73
  if (!required && !month) {
72
- setSelectedMonth(undefined);
74
+ setSelectedMonth(getMonth(undefined));
73
75
  setInputValue("");
74
76
  return;
75
77
  }
76
- setSelectedMonth(month);
78
+ setSelectedMonth(getMonth(month));
77
79
  setInputValue(month ? (0, utils_1.formatDateForInput)(month, locale, "month") : "");
78
80
  };
79
81
  // When changing the input field, save its value in state and check if the
@@ -83,7 +85,7 @@ const useMonthpicker = (opt = {}) => {
83
85
  setInputValue(e.target.value);
84
86
  const month = (0, utils_1.parseDate)(e.target.value, today, locale, "month");
85
87
  if (!(0, utils_1.isValidDate)(month) || (disabled && (0, utils_1.isMatch)(month, disabled))) {
86
- setSelectedMonth(undefined);
88
+ setSelectedMonth(getMonth(undefined));
87
89
  return;
88
90
  }
89
91
  const isBefore = fromDate &&
@@ -97,10 +99,10 @@ const useMonthpicker = (opt = {}) => {
97
99
  if (isAfter ||
98
100
  isBefore ||
99
101
  (fromDate && toDate && !(0, utils_1.isMatch)(month, [{ from: fromDate, to: toDate }]))) {
100
- setSelectedMonth(undefined);
102
+ setSelectedMonth(getMonth(undefined));
101
103
  return;
102
104
  }
103
- setSelectedMonth(month);
105
+ setSelectedMonth(getMonth(month));
104
106
  setYear(month);
105
107
  };
106
108
  const handleClose = (0, react_1.useCallback)(() => {
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
6
  exports.useRangeDatepicker = void 0;
4
- const date_fns_1 = require("date-fns");
7
+ const differenceInCalendarDays_1 = __importDefault(require("date-fns/differenceInCalendarDays"));
8
+ const isWeekend_1 = __importDefault(require("date-fns/isWeekend"));
5
9
  const react_1 = require("react");
6
10
  const react_day_picker_1 = require("react-day-picker");
7
11
  const utils_1 = require("../utils");
@@ -10,14 +14,15 @@ const RANGE = {
10
14
  TO: "TO",
11
15
  };
12
16
  const useRangeDatepicker = (opt = {}) => {
13
- const { locale: _locale = "nb", defaultSelected, today = new Date(), fromDate, toDate, disabled, disableWeekends, } = opt;
17
+ const { locale: _locale = "nb", defaultSelected: _defaultSelected, today = new Date(), fromDate, toDate, disabled, disableWeekends, onRangeChange, } = opt;
14
18
  const locale = (0, utils_1.getLocaleFromString)(_locale);
15
19
  const inputRefTo = (0, react_1.useRef)(null);
16
20
  const inputRefFrom = (0, react_1.useRef)(null);
17
21
  const datePickerRef = (0, react_1.useRef)(null);
22
+ const [defaultSelected, setDefaultSelected] = (0, react_1.useState)(_defaultSelected);
18
23
  // Initialize states
19
- const [month, setMonth] = (0, react_1.useState)(defaultSelected ? defaultSelected.from : today);
20
- const [selectedRange, setSelectedRange] = (0, react_1.useState)(defaultSelected);
24
+ const [month, setMonth] = (0, react_1.useState)(defaultSelected ? defaultSelected === null || defaultSelected === void 0 ? void 0 : defaultSelected.from : today);
25
+ const [selectedRange, setSelectedRange] = (0, react_1.useState)(defaultSelected !== null && defaultSelected !== void 0 ? defaultSelected : { from: undefined, to: undefined });
21
26
  const [fromInputValue, setFromInputValue] = (0, react_1.useState)((defaultSelected === null || defaultSelected === void 0 ? void 0 : defaultSelected.from)
22
27
  ? (0, utils_1.formatDateForInput)(defaultSelected.from, locale, "date")
23
28
  : "");
@@ -25,6 +30,10 @@ const useRangeDatepicker = (opt = {}) => {
25
30
  ? (0, utils_1.formatDateForInput)(defaultSelected.to, locale, "date")
26
31
  : "");
27
32
  const [open, setOpen] = (0, react_1.useState)(false);
33
+ const getSelectedRange = (range) => {
34
+ onRangeChange === null || onRangeChange === void 0 ? void 0 : onRangeChange(range);
35
+ return range;
36
+ };
28
37
  const handleFocusIn = (0, react_1.useCallback)((e) => {
29
38
  var _a, _b;
30
39
  return ![
@@ -47,17 +56,18 @@ const useRangeDatepicker = (opt = {}) => {
47
56
  };
48
57
  }, [handleFocusIn]);
49
58
  const reset = () => {
50
- setSelectedRange(defaultSelected);
51
- setMonth(defaultSelected ? defaultSelected.from : today);
59
+ setSelectedRange(getSelectedRange(defaultSelected !== null && defaultSelected !== void 0 ? defaultSelected : { from: undefined, to: undefined }));
60
+ setMonth(defaultSelected ? defaultSelected === null || defaultSelected === void 0 ? void 0 : defaultSelected.from : today);
52
61
  setFromInputValue((defaultSelected === null || defaultSelected === void 0 ? void 0 : defaultSelected.from)
53
62
  ? (0, utils_1.formatDateForInput)(defaultSelected.from, locale, "date")
54
63
  : "");
55
64
  setToInputValue((defaultSelected === null || defaultSelected === void 0 ? void 0 : defaultSelected.to)
56
65
  ? (0, utils_1.formatDateForInput)(defaultSelected.to, locale, "date")
57
66
  : "");
67
+ setDefaultSelected(_defaultSelected);
58
68
  };
59
69
  const setSelected = (range) => {
60
- setSelectedRange(range);
70
+ setSelectedRange(getSelectedRange(range));
61
71
  setFromInputValue((range === null || range === void 0 ? void 0 : range.from) ? (0, utils_1.formatDateForInput)(range.from, locale, "date") : "");
62
72
  setToInputValue((range === null || range === void 0 ? void 0 : range.to) ? (0, utils_1.formatDateForInput)(range === null || range === void 0 ? void 0 : range.to, locale, "date") : "");
63
73
  };
@@ -74,7 +84,7 @@ const useRangeDatepicker = (opt = {}) => {
74
84
  const handleInputs = (day, src) => {
75
85
  if (src === RANGE.FROM) {
76
86
  const isAfter = toInputValue &&
77
- (0, date_fns_1.differenceInCalendarDays)(day, (0, utils_1.parseDate)(toInputValue, today, locale, "date")) > 0;
87
+ (0, differenceInCalendarDays_1.default)(day, (0, utils_1.parseDate)(toInputValue, today, locale, "date")) > 0;
78
88
  if (isAfter) {
79
89
  setFromInputValue((0, utils_1.formatDateForInput)((0, utils_1.parseDate)(toInputValue, today, locale, "date"), locale, "date"));
80
90
  setToInputValue((0, utils_1.formatDateForInput)(day, locale, "date"));
@@ -85,7 +95,7 @@ const useRangeDatepicker = (opt = {}) => {
85
95
  }
86
96
  else if (src === RANGE.TO) {
87
97
  const isBefore = fromInputValue &&
88
- (0, date_fns_1.differenceInCalendarDays)((0, utils_1.parseDate)(fromInputValue, today, locale, "date"), day) > 0;
98
+ (0, differenceInCalendarDays_1.default)((0, utils_1.parseDate)(fromInputValue, today, locale, "date"), day) > 0;
89
99
  if (isBefore) {
90
100
  setToInputValue((0, utils_1.formatDateForInput)((0, utils_1.parseDate)(fromInputValue, today, locale, "date"), locale, "date"));
91
101
  setFromInputValue((0, utils_1.formatDateForInput)(day, locale, "date"));
@@ -103,7 +113,7 @@ const useRangeDatepicker = (opt = {}) => {
103
113
  handleInputs(day, src);
104
114
  };
105
115
  const handleSelect = (range) => {
106
- if (range.from && range.to) {
116
+ if ((range === null || range === void 0 ? void 0 : range.from) && (range === null || range === void 0 ? void 0 : range.to)) {
107
117
  setOpen(false);
108
118
  }
109
119
  const prevToRange = !(selectedRange === null || selectedRange === void 0 ? void 0 : selectedRange.from) && (selectedRange === null || selectedRange === void 0 ? void 0 : selectedRange.to) ? selectedRange === null || selectedRange === void 0 ? void 0 : selectedRange.to : range === null || range === void 0 ? void 0 : range.to;
@@ -113,7 +123,7 @@ const useRangeDatepicker = (opt = {}) => {
113
123
  prevToRange
114
124
  ? setToInputValue((0, utils_1.formatDateForInput)(prevToRange, locale, "date"))
115
125
  : setToInputValue("");
116
- setSelectedRange({ from: range === null || range === void 0 ? void 0 : range.from, to: prevToRange });
126
+ setSelectedRange(getSelectedRange({ from: range === null || range === void 0 ? void 0 : range.from, to: prevToRange }));
117
127
  };
118
128
  /* live-update datepicker based on changes in inputfields */
119
129
  const handleChange = (e, src) => {
@@ -123,37 +133,39 @@ const useRangeDatepicker = (opt = {}) => {
123
133
  const day = (0, utils_1.parseDate)(e.target.value, today, locale, "date");
124
134
  if (!(0, utils_1.isValidDate)(day) ||
125
135
  (disabled &&
126
- ((disableWeekends && (0, date_fns_1.isWeekend)(day)) || (0, react_day_picker_1.isMatch)(day, disabled)))) {
127
- setSelectedRange((x) => src === RANGE.FROM
128
- ? Object.assign(Object.assign({}, x), { from: undefined }) : { from: x === null || x === void 0 ? void 0 : x.from, to: undefined });
136
+ ((disableWeekends && (0, isWeekend_1.default)(day)) || (0, react_day_picker_1.isMatch)(day, disabled)))) {
137
+ setSelectedRange((x) => getSelectedRange(src === RANGE.FROM
138
+ ? Object.assign(Object.assign({}, x), { from: undefined }) : { from: x === null || x === void 0 ? void 0 : x.from, to: undefined }));
129
139
  return;
130
140
  }
131
- const isBefore = fromDate && (0, date_fns_1.differenceInCalendarDays)(fromDate, day) > 0;
132
- const isAfter = toDate && (0, date_fns_1.differenceInCalendarDays)(day, toDate) > 0;
141
+ const isBefore = fromDate && (0, differenceInCalendarDays_1.default)(fromDate, day) > 0;
142
+ const isAfter = toDate && (0, differenceInCalendarDays_1.default)(day, toDate) > 0;
133
143
  if (isBefore || isAfter) {
134
144
  src === RANGE.FROM
135
- ? setSelectedRange((x) => (Object.assign(Object.assign({}, x), { from: undefined })))
136
- : setSelectedRange((x) => ({ from: x === null || x === void 0 ? void 0 : x.from, to: undefined }));
145
+ ? setSelectedRange((x) => getSelectedRange(Object.assign(Object.assign({}, x), { from: undefined })))
146
+ : setSelectedRange((x) => getSelectedRange({ from: x === null || x === void 0 ? void 0 : x.from, to: undefined }));
137
147
  return;
138
148
  }
139
149
  /* If to-value < from-value, switch places in state */
140
150
  if (src === RANGE.TO &&
141
151
  (selectedRange === null || selectedRange === void 0 ? void 0 : selectedRange.from) &&
142
- (0, date_fns_1.differenceInCalendarDays)(selectedRange === null || selectedRange === void 0 ? void 0 : selectedRange.from, day) >= 0) {
143
- setSelectedRange({ from: day, to: selectedRange === null || selectedRange === void 0 ? void 0 : selectedRange.from });
152
+ (0, differenceInCalendarDays_1.default)(selectedRange === null || selectedRange === void 0 ? void 0 : selectedRange.from, day) >= 0) {
153
+ setSelectedRange(getSelectedRange({ from: day, to: selectedRange === null || selectedRange === void 0 ? void 0 : selectedRange.from }));
144
154
  setMonth(day);
145
155
  return;
146
156
  }
147
157
  /* If from-value > to-value , switch places in state */
148
158
  if (src === RANGE.FROM &&
149
159
  (selectedRange === null || selectedRange === void 0 ? void 0 : selectedRange.to) &&
150
- (0, date_fns_1.differenceInCalendarDays)(day, selectedRange === null || selectedRange === void 0 ? void 0 : selectedRange.to) >= 0) {
151
- setSelectedRange({ to: day, from: selectedRange === null || selectedRange === void 0 ? void 0 : selectedRange.to });
160
+ (0, differenceInCalendarDays_1.default)(day, selectedRange === null || selectedRange === void 0 ? void 0 : selectedRange.to) >= 0) {
161
+ setSelectedRange(getSelectedRange({ to: day, from: selectedRange === null || selectedRange === void 0 ? void 0 : selectedRange.to }));
152
162
  setMonth(day);
153
163
  return;
154
164
  }
155
- src === RANGE.FROM && setSelectedRange((x) => (Object.assign(Object.assign({}, x), { from: day })));
156
- src === RANGE.TO && setSelectedRange((x) => ({ from: x === null || x === void 0 ? void 0 : x.from, to: day }));
165
+ src === RANGE.FROM &&
166
+ setSelectedRange((x) => getSelectedRange(Object.assign(Object.assign({}, x), { from: day })));
167
+ src === RANGE.TO &&
168
+ setSelectedRange((x) => getSelectedRange({ from: x === null || x === void 0 ? void 0 : x.from, to: day }));
157
169
  setMonth(day);
158
170
  };
159
171
  const handleClose = (0, react_1.useCallback)(() => {
@@ -22,9 +22,13 @@ var __importStar = (this && this.__importStar) || function (mod) {
22
22
  __setModuleDefault(result, mod);
23
23
  return result;
24
24
  };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
25
28
  Object.defineProperty(exports, "__esModule", { value: true });
26
29
  exports.SharedMonthProvider = exports.useSharedMonthContext = exports.SharedMonthContext = void 0;
27
- const date_fns_1 = require("date-fns");
30
+ const setYear_1 = __importDefault(require("date-fns/setYear"));
31
+ const startOfMonth_1 = __importDefault(require("date-fns/startOfMonth"));
28
32
  const react_1 = __importStar(require("react"));
29
33
  const react_day_picker_1 = require("react-day-picker");
30
34
  const utils_1 = require("../utils");
@@ -56,7 +60,7 @@ const SharedMonthProvider = ({ children, dropdownCaption, disabled, selected, on
56
60
  disabled,
57
61
  selected,
58
62
  onSelect: (v) => v
59
- ? onSelect((0, date_fns_1.setYear)((0, date_fns_1.startOfMonth)(v), (_year !== null && _year !== void 0 ? _year : year).getFullYear()))
63
+ ? onSelect((0, setYear_1.default)((0, startOfMonth_1.default)(v), (_year !== null && _year !== void 0 ? _year : year).getFullYear()))
60
64
  : onSelect(undefined),
61
65
  } }, children));
62
66
  };
@@ -28,20 +28,24 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
28
28
  Object.defineProperty(exports, "__esModule", { value: true });
29
29
  exports.MonthButton = void 0;
30
30
  const clsx_1 = __importDefault(require("clsx"));
31
- const date_fns_1 = require("date-fns");
31
+ const compareAsc_1 = __importDefault(require("date-fns/compareAsc"));
32
+ const compareDesc_1 = __importDefault(require("date-fns/compareDesc"));
33
+ const format_1 = __importDefault(require("date-fns/format"));
34
+ const isSameMonth_1 = __importDefault(require("date-fns/isSameMonth"));
35
+ const setYear_1 = __importDefault(require("date-fns/setYear"));
32
36
  const react_1 = __importStar(require("react"));
33
37
  const react_day_picker_1 = require("react-day-picker");
34
38
  const hooks_1 = require("../hooks");
35
39
  const utils_1 = require("../utils");
36
40
  const disableMonth = (month, fromDate, toDate) => {
37
41
  if (fromDate && toDate) {
38
- return ((0, date_fns_1.compareAsc)(month, fromDate) === -1 || (0, date_fns_1.compareDesc)(month, toDate) === -1);
42
+ return ((0, compareAsc_1.default)(month, fromDate) === -1 || (0, compareDesc_1.default)(month, toDate) === -1);
39
43
  }
40
44
  else if (fromDate) {
41
- return (0, date_fns_1.compareAsc)(month, fromDate) === -1;
45
+ return (0, compareAsc_1.default)(month, fromDate) === -1;
42
46
  }
43
47
  else if (toDate) {
44
- return (0, date_fns_1.compareDesc)(month, toDate) === -1;
48
+ return (0, compareDesc_1.default)(month, toDate) === -1;
45
49
  }
46
50
  return false;
47
51
  };
@@ -49,20 +53,20 @@ const MonthButton = ({ month, months, focus, setFocus, tabRoot, setTabRoot, }) =
49
53
  const ref = (0, react_1.useRef)(null);
50
54
  const { hasDropdown, selected, onSelect, year, toYear, disabled } = (0, hooks_1.useSharedMonthContext)();
51
55
  const { fromDate, toDate, locale } = (0, react_day_picker_1.useDayPicker)();
52
- const isSelected = selected && (0, date_fns_1.isSameMonth)(month, selected);
56
+ const isSelected = selected && (0, isSameMonth_1.default)(month, selected);
53
57
  (0, react_1.useEffect)(() => {
54
58
  if (focus) {
55
- (0, date_fns_1.isSameMonth)(month, focus) && ref.current && ref.current.focus();
59
+ (0, isSameMonth_1.default)(month, focus) && ref.current && ref.current.focus();
56
60
  setFocus();
57
61
  }
58
62
  }, [focus, month, setFocus]);
59
- const isDisabled = (0, utils_1.isMatch)((0, date_fns_1.setYear)(month, year.getFullYear()), disabled) ||
63
+ const isDisabled = (0, utils_1.isMatch)((0, setYear_1.default)(month, year.getFullYear()), disabled) ||
60
64
  disableMonth(month, fromDate, toDate);
61
65
  return (react_1.default.createElement("button", { ref: ref, type: "button", onClick: () => onSelect(isSelected ? undefined : month), disabled: isDisabled, className: (0, clsx_1.default)("navds-date__month-button", {
62
66
  "rdp-day_today": (0, utils_1.dateIsInCurrentMonth)(month, year),
63
67
  "rdp-day_selected": isSelected,
64
68
  "rdp-day_disabled": isDisabled,
65
- }), tabIndex: tabRoot && (0, date_fns_1.isSameMonth)(month, (0, date_fns_1.setYear)(tabRoot, year.getFullYear()))
69
+ }), tabIndex: tabRoot && (0, isSameMonth_1.default)(month, (0, setYear_1.default)(tabRoot, year.getFullYear()))
66
70
  ? 0
67
71
  : -1, onKeyDown: (e) => {
68
72
  const next = (0, utils_1.nextEnabled)(months, e.key, disabled, month, toYear, year, hasDropdown, fromDate, toDate);
@@ -71,10 +75,10 @@ const MonthButton = ({ month, months, focus, setFocus, tabRoot, setTabRoot, }) =
71
75
  }, onFocus: () => {
72
76
  setTabRoot(focus);
73
77
  } },
74
- react_1.default.createElement("span", { "aria-hidden": "true" }, (0, date_fns_1.format)(new Date(month), "LLL", { locale })
78
+ react_1.default.createElement("span", { "aria-hidden": "true" }, (0, format_1.default)(new Date(month), "LLL", { locale })
75
79
  .replace(".", "")
76
80
  .substring(0, 3)),
77
- react_1.default.createElement("span", { className: "navds-sr-only" }, (0, date_fns_1.format)(new Date(month), "LLLL", { locale }))));
81
+ react_1.default.createElement("span", { className: "navds-sr-only" }, (0, format_1.default)(new Date(month), "LLLL", { locale }))));
78
82
  };
79
83
  exports.MonthButton = MonthButton;
80
84
  exports.default = exports.MonthButton;