@navikt/ds-react 1.3.21 → 1.3.23
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/_docs.json +57 -0
- package/cjs/button/Button.js +1 -0
- package/cjs/date/hooks/useDatepicker.js +14 -12
- package/cjs/date/hooks/useMonthPicker.js +14 -12
- package/cjs/date/hooks/useRangeDatepicker.js +24 -16
- package/esm/button/Button.js +1 -0
- package/esm/button/Button.js.map +1 -1
- package/esm/date/hooks/useDatepicker.d.ts +4 -0
- package/esm/date/hooks/useDatepicker.js +14 -12
- package/esm/date/hooks/useDatepicker.js.map +1 -1
- package/esm/date/hooks/useMonthPicker.d.ts +4 -0
- package/esm/date/hooks/useMonthPicker.js +14 -12
- package/esm/date/hooks/useMonthPicker.js.map +1 -1
- package/esm/date/hooks/useRangeDatepicker.d.ts +5 -1
- package/esm/date/hooks/useRangeDatepicker.js +24 -16
- package/esm/date/hooks/useRangeDatepicker.js.map +1 -1
- package/package.json +3 -3
- package/src/button/Button.tsx +1 -0
- package/src/button/button.stories.tsx +20 -1
- package/src/date/datepicker/datepicker.stories.tsx +31 -9
- package/src/date/hooks/useDatepicker.tsx +22 -12
- package/src/date/hooks/useMonthPicker.tsx +21 -12
- package/src/date/hooks/useRangeDatepicker.tsx +43 -18
- package/src/date/monthpicker/monthpicker.stories.tsx +1 -2
|
@@ -13,11 +13,15 @@ import {
|
|
|
13
13
|
import { UseDatepickerOptions } from "./useDatepicker";
|
|
14
14
|
|
|
15
15
|
interface UseRangeDatepickerOptions
|
|
16
|
-
extends Omit<UseDatepickerOptions, "defaultSelected"> {
|
|
16
|
+
extends Omit<UseDatepickerOptions, "defaultSelected" | "onDateChange"> {
|
|
17
17
|
/**
|
|
18
18
|
* The initially selected DateRange
|
|
19
19
|
*/
|
|
20
20
|
defaultSelected?: DateRange;
|
|
21
|
+
/**
|
|
22
|
+
* Callback for changed state
|
|
23
|
+
*/
|
|
24
|
+
onRangeChange?: (val?: DateRange) => void;
|
|
21
25
|
}
|
|
22
26
|
|
|
23
27
|
interface UseRangeDatepickerValue {
|
|
@@ -66,12 +70,13 @@ export const useRangeDatepicker = (
|
|
|
66
70
|
): UseRangeDatepickerValue => {
|
|
67
71
|
const {
|
|
68
72
|
locale: _locale = "nb",
|
|
69
|
-
defaultSelected,
|
|
73
|
+
defaultSelected: _defaultSelected,
|
|
70
74
|
today = new Date(),
|
|
71
75
|
fromDate,
|
|
72
76
|
toDate,
|
|
73
77
|
disabled,
|
|
74
78
|
disableWeekends,
|
|
79
|
+
onRangeChange,
|
|
75
80
|
} = opt;
|
|
76
81
|
|
|
77
82
|
const locale = getLocaleFromString(_locale);
|
|
@@ -80,11 +85,15 @@ export const useRangeDatepicker = (
|
|
|
80
85
|
const inputRefFrom = useRef<HTMLDivElement>(null);
|
|
81
86
|
const datePickerRef = useRef<HTMLDivElement | null>(null);
|
|
82
87
|
|
|
88
|
+
const [defaultSelected, setDefaultSelected] = useState(_defaultSelected);
|
|
89
|
+
|
|
83
90
|
// Initialize states
|
|
84
91
|
const [month, setMonth] = useState(
|
|
85
|
-
defaultSelected ? defaultSelected
|
|
92
|
+
defaultSelected ? defaultSelected?.from : today
|
|
93
|
+
);
|
|
94
|
+
const [selectedRange, setSelectedRange] = useState<DateRange | undefined>(
|
|
95
|
+
defaultSelected ?? { from: undefined, to: undefined }
|
|
86
96
|
);
|
|
87
|
-
const [selectedRange, setSelectedRange] = useState(defaultSelected);
|
|
88
97
|
|
|
89
98
|
const [fromInputValue, setFromInputValue] = useState(
|
|
90
99
|
defaultSelected?.from
|
|
@@ -99,6 +108,11 @@ export const useRangeDatepicker = (
|
|
|
99
108
|
);
|
|
100
109
|
const [open, setOpen] = useState(false);
|
|
101
110
|
|
|
111
|
+
const getSelectedRange = (range?: DateRange) => {
|
|
112
|
+
onRangeChange?.(range);
|
|
113
|
+
return range;
|
|
114
|
+
};
|
|
115
|
+
|
|
102
116
|
const handleFocusIn = useCallback(
|
|
103
117
|
(e) =>
|
|
104
118
|
![
|
|
@@ -123,8 +137,10 @@ export const useRangeDatepicker = (
|
|
|
123
137
|
}, [handleFocusIn]);
|
|
124
138
|
|
|
125
139
|
const reset = () => {
|
|
126
|
-
setSelectedRange(
|
|
127
|
-
|
|
140
|
+
setSelectedRange(
|
|
141
|
+
getSelectedRange(defaultSelected ?? { from: undefined, to: undefined })
|
|
142
|
+
);
|
|
143
|
+
setMonth(defaultSelected ? defaultSelected?.from : today);
|
|
128
144
|
setFromInputValue(
|
|
129
145
|
defaultSelected?.from
|
|
130
146
|
? formatDateForInput(defaultSelected.from, locale, "date")
|
|
@@ -135,10 +151,11 @@ export const useRangeDatepicker = (
|
|
|
135
151
|
? formatDateForInput(defaultSelected.to, locale, "date")
|
|
136
152
|
: ""
|
|
137
153
|
);
|
|
154
|
+
setDefaultSelected(_defaultSelected);
|
|
138
155
|
};
|
|
139
156
|
|
|
140
157
|
const setSelected = (range?: DateRange) => {
|
|
141
|
-
setSelectedRange(range);
|
|
158
|
+
setSelectedRange(getSelectedRange(range));
|
|
142
159
|
setFromInputValue(
|
|
143
160
|
range?.from ? formatDateForInput(range.from, locale, "date") : ""
|
|
144
161
|
);
|
|
@@ -212,7 +229,7 @@ export const useRangeDatepicker = (
|
|
|
212
229
|
};
|
|
213
230
|
|
|
214
231
|
const handleSelect = (range) => {
|
|
215
|
-
if (range
|
|
232
|
+
if (range?.from && range?.to) {
|
|
216
233
|
setOpen(false);
|
|
217
234
|
}
|
|
218
235
|
const prevToRange =
|
|
@@ -224,7 +241,7 @@ export const useRangeDatepicker = (
|
|
|
224
241
|
prevToRange
|
|
225
242
|
? setToInputValue(formatDateForInput(prevToRange, locale, "date"))
|
|
226
243
|
: setToInputValue("");
|
|
227
|
-
setSelectedRange({ from: range?.from, to: prevToRange });
|
|
244
|
+
setSelectedRange(getSelectedRange({ from: range?.from, to: prevToRange }));
|
|
228
245
|
};
|
|
229
246
|
|
|
230
247
|
/* live-update datepicker based on changes in inputfields */
|
|
@@ -240,9 +257,11 @@ export const useRangeDatepicker = (
|
|
|
240
257
|
((disableWeekends && isWeekend(day)) || isMatch(day, disabled)))
|
|
241
258
|
) {
|
|
242
259
|
setSelectedRange((x) =>
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
260
|
+
getSelectedRange(
|
|
261
|
+
src === RANGE.FROM
|
|
262
|
+
? { ...x, from: undefined }
|
|
263
|
+
: { from: x?.from, to: undefined }
|
|
264
|
+
)
|
|
246
265
|
);
|
|
247
266
|
return;
|
|
248
267
|
}
|
|
@@ -251,8 +270,10 @@ export const useRangeDatepicker = (
|
|
|
251
270
|
const isAfter = toDate && differenceInCalendarDays(day, toDate) > 0;
|
|
252
271
|
if (isBefore || isAfter) {
|
|
253
272
|
src === RANGE.FROM
|
|
254
|
-
? setSelectedRange((x) => ({ ...x, from: undefined }))
|
|
255
|
-
: setSelectedRange((x) =>
|
|
273
|
+
? setSelectedRange((x) => getSelectedRange({ ...x, from: undefined }))
|
|
274
|
+
: setSelectedRange((x) =>
|
|
275
|
+
getSelectedRange({ from: x?.from, to: undefined })
|
|
276
|
+
);
|
|
256
277
|
return;
|
|
257
278
|
}
|
|
258
279
|
|
|
@@ -262,7 +283,9 @@ export const useRangeDatepicker = (
|
|
|
262
283
|
selectedRange?.from &&
|
|
263
284
|
differenceInCalendarDays(selectedRange?.from, day) >= 0
|
|
264
285
|
) {
|
|
265
|
-
setSelectedRange(
|
|
286
|
+
setSelectedRange(
|
|
287
|
+
getSelectedRange({ from: day, to: selectedRange?.from })
|
|
288
|
+
);
|
|
266
289
|
setMonth(day);
|
|
267
290
|
return;
|
|
268
291
|
}
|
|
@@ -273,13 +296,15 @@ export const useRangeDatepicker = (
|
|
|
273
296
|
selectedRange?.to &&
|
|
274
297
|
differenceInCalendarDays(day, selectedRange?.to) >= 0
|
|
275
298
|
) {
|
|
276
|
-
setSelectedRange({ to: day, from: selectedRange?.to });
|
|
299
|
+
setSelectedRange(getSelectedRange({ to: day, from: selectedRange?.to }));
|
|
277
300
|
setMonth(day);
|
|
278
301
|
return;
|
|
279
302
|
}
|
|
280
303
|
|
|
281
|
-
src === RANGE.FROM &&
|
|
282
|
-
|
|
304
|
+
src === RANGE.FROM &&
|
|
305
|
+
setSelectedRange((x) => getSelectedRange({ ...x, from: day }));
|
|
306
|
+
src === RANGE.TO &&
|
|
307
|
+
setSelectedRange((x) => getSelectedRange({ from: x?.from, to: day }));
|
|
283
308
|
setMonth(day);
|
|
284
309
|
};
|
|
285
310
|
|
|
@@ -73,9 +73,8 @@ export const Standalone = () => {
|
|
|
73
73
|
|
|
74
74
|
export const UseMonthpicker = () => {
|
|
75
75
|
const { inputProps, monthpickerProps } = UNSAFE_useMonthpicker({
|
|
76
|
-
locale: "nb",
|
|
77
|
-
defaultSelected: new Date(),
|
|
78
76
|
disabled: [new Date("Apr 1 2022")],
|
|
77
|
+
onMonthChange: console.log,
|
|
79
78
|
});
|
|
80
79
|
|
|
81
80
|
return (
|