@navikt/ds-react 7.12.2 → 7.14.0-alpha.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.
- package/cjs/date/Date.Dialog.d.ts +18 -0
- package/cjs/date/Date.Dialog.js +67 -0
- package/cjs/date/Date.Dialog.js.map +1 -0
- package/cjs/date/Date.Input.d.ts +50 -0
- package/cjs/date/Date.Input.js +96 -0
- package/cjs/date/Date.Input.js.map +1 -0
- package/cjs/date/Date.locale.d.ts +44 -0
- package/cjs/date/Date.locale.js +57 -0
- package/cjs/date/Date.locale.js.map +1 -0
- package/cjs/date/Date.typeutils.d.ts +14 -0
- package/cjs/date/Date.typeutils.js +15 -0
- package/cjs/date/Date.typeutils.js.map +1 -0
- package/cjs/date/date-utils/calendar-range.d.ts +11 -0
- package/cjs/date/date-utils/calendar-range.js +30 -0
- package/cjs/date/date-utils/calendar-range.js.map +1 -0
- package/cjs/date/date-utils/check-dates.d.ts +8 -0
- package/cjs/date/date-utils/check-dates.js +20 -0
- package/cjs/date/date-utils/check-dates.js.map +1 -0
- package/cjs/date/date-utils/clamp-dates.d.ts +19 -0
- package/cjs/date/date-utils/clamp-dates.js +41 -0
- package/cjs/date/date-utils/clamp-dates.js.map +1 -0
- package/cjs/date/date-utils/dates-disabled.d.ts +1 -0
- package/cjs/date/date-utils/dates-disabled.js +29 -0
- package/cjs/date/date-utils/dates-disabled.js.map +1 -0
- package/cjs/date/date-utils/dropdown-options.d.ts +13 -0
- package/cjs/date/date-utils/dropdown-options.js +45 -0
- package/cjs/date/date-utils/dropdown-options.js.map +1 -0
- package/cjs/date/date-utils/format-date.d.ts +2 -0
- package/cjs/date/date-utils/format-date.js +13 -0
- package/cjs/date/date-utils/format-date.js.map +1 -0
- package/cjs/date/date-utils/index.d.ts +8 -0
- package/cjs/date/date-utils/index.js +27 -0
- package/cjs/date/date-utils/index.js.map +1 -0
- package/cjs/date/date-utils/is-match.d.ts +3 -0
- package/cjs/date/date-utils/is-match.js +61 -0
- package/cjs/date/date-utils/is-match.js.map +1 -0
- package/cjs/date/date-utils/parse-date.d.ts +4 -0
- package/cjs/date/date-utils/parse-date.js +87 -0
- package/cjs/date/date-utils/parse-date.js.map +1 -0
- package/cjs/date/datepicker/DatePicker.d.ts +3 -3
- package/cjs/date/datepicker/DatePicker.js +47 -63
- package/cjs/date/datepicker/DatePicker.js.map +1 -1
- package/cjs/date/datepicker/DatePicker.types.d.ts +108 -0
- package/cjs/date/datepicker/DatePicker.types.js +3 -0
- package/cjs/date/datepicker/DatePicker.types.js.map +1 -0
- package/cjs/date/datepicker/hooks/useDatepicker.d.ts +90 -0
- package/cjs/date/datepicker/hooks/useDatepicker.js +164 -0
- package/cjs/date/datepicker/hooks/useDatepicker.js.map +1 -0
- package/cjs/date/datepicker/hooks/useRangeDatepicker.d.ts +76 -0
- package/cjs/date/datepicker/hooks/useRangeDatepicker.js +322 -0
- package/cjs/date/datepicker/hooks/useRangeDatepicker.js.map +1 -0
- package/cjs/date/datepicker/index.d.ts +4 -3
- package/cjs/date/datepicker/index.js +8 -7
- package/cjs/date/datepicker/index.js.map +1 -1
- package/cjs/date/datepicker/parts/DatePicker.DayButton.d.ts +9 -0
- package/cjs/date/datepicker/parts/DatePicker.DayButton.js +70 -0
- package/cjs/date/datepicker/parts/DatePicker.DayButton.js.map +1 -0
- package/cjs/date/datepicker/parts/DatePicker.Months.d.ts +11 -0
- package/cjs/date/datepicker/parts/DatePicker.Months.js +84 -0
- package/cjs/date/datepicker/parts/DatePicker.Months.js.map +1 -0
- package/cjs/date/datepicker/parts/DatePicker.RDP.d.ts +15 -0
- package/cjs/date/datepicker/parts/DatePicker.RDP.js +103 -0
- package/cjs/date/datepicker/parts/DatePicker.RDP.js.map +1 -0
- package/cjs/date/datepicker/parts/DatePicker.Standalone.d.ts +18 -0
- package/cjs/date/datepicker/parts/DatePicker.Standalone.js +60 -0
- package/cjs/date/datepicker/parts/DatePicker.Standalone.js.map +1 -0
- package/cjs/date/datepicker/parts/DatePicker.WeekNumber.d.ts +9 -0
- package/cjs/date/datepicker/parts/DatePicker.WeekNumber.js +64 -0
- package/cjs/date/datepicker/parts/DatePicker.WeekNumber.js.map +1 -0
- package/cjs/date/datepicker/parts/DatePicker.WeekRow.d.ts +8 -0
- package/cjs/date/datepicker/parts/DatePicker.WeekRow.js +28 -0
- package/cjs/date/datepicker/parts/DatePicker.WeekRow.js.map +1 -0
- package/cjs/date/monthpicker/MonthPicker.context.d.ts +21 -0
- package/cjs/date/monthpicker/MonthPicker.context.js +48 -0
- package/cjs/date/monthpicker/MonthPicker.context.js.map +1 -0
- package/cjs/date/monthpicker/MonthPicker.d.ts +3 -3
- package/cjs/date/monthpicker/MonthPicker.js +34 -43
- package/cjs/date/monthpicker/MonthPicker.js.map +1 -1
- package/cjs/date/monthpicker/MonthPicker.types.d.ts +86 -0
- package/cjs/date/monthpicker/MonthPicker.types.js +3 -0
- package/cjs/date/monthpicker/MonthPicker.types.js.map +1 -0
- package/cjs/date/monthpicker/MonthPicker.util.d.ts +2 -0
- package/cjs/date/monthpicker/MonthPicker.util.js +156 -0
- package/cjs/date/monthpicker/MonthPicker.util.js.map +1 -0
- package/cjs/date/monthpicker/hooks/useMonthPicker.d.ts +85 -0
- package/cjs/date/monthpicker/hooks/useMonthPicker.js +179 -0
- package/cjs/date/monthpicker/hooks/useMonthPicker.js.map +1 -0
- package/cjs/date/monthpicker/index.d.ts +4 -4
- package/cjs/date/monthpicker/index.js +6 -6
- package/cjs/date/monthpicker/index.js.map +1 -1
- package/cjs/date/monthpicker/parts/MonthPicker.Button.d.ts +11 -0
- package/cjs/date/monthpicker/parts/MonthPicker.Button.js +82 -0
- package/cjs/date/monthpicker/parts/MonthPicker.Button.js.map +1 -0
- package/cjs/date/monthpicker/parts/MonthPicker.Caption.d.ts +3 -0
- package/cjs/date/monthpicker/parts/MonthPicker.Caption.js +52 -0
- package/cjs/date/monthpicker/parts/MonthPicker.Caption.js.map +1 -0
- package/cjs/date/monthpicker/parts/MonthPicker.Standalone.d.ts +10 -0
- package/cjs/date/monthpicker/parts/MonthPicker.Standalone.js +51 -0
- package/cjs/date/monthpicker/parts/MonthPicker.Standalone.js.map +1 -0
- package/cjs/date/monthpicker/parts/MonthPicker.Table.d.ts +3 -0
- package/cjs/date/monthpicker/parts/MonthPicker.Table.js +79 -0
- package/cjs/date/monthpicker/parts/MonthPicker.Table.js.map +1 -0
- package/cjs/form/combobox/Combobox.d.ts +1 -1
- package/cjs/form/combobox/Input/InputController.d.ts +1 -1
- package/cjs/form/confirmation-panel/ConfirmationPanel.js +6 -1
- package/cjs/form/confirmation-panel/ConfirmationPanel.js.map +1 -1
- package/cjs/modal/Modal.js +2 -2
- package/cjs/modal/Modal.js.map +1 -1
- package/cjs/popover/Popover.js +3 -3
- package/cjs/popover/Popover.js.map +1 -1
- package/cjs/theme/Theme.d.ts +7 -1
- package/cjs/theme/Theme.js +24 -2
- package/cjs/theme/Theme.js.map +1 -1
- package/cjs/theme/index.d.ts +1 -1
- package/cjs/theme/index.js.map +1 -1
- package/cjs/tooltip/Tooltip.js +2 -5
- package/cjs/tooltip/Tooltip.js.map +1 -1
- package/esm/date/Date.Dialog.d.ts +18 -0
- package/esm/date/Date.Dialog.js +38 -0
- package/esm/date/Date.Dialog.js.map +1 -0
- package/esm/date/Date.Input.d.ts +50 -0
- package/esm/date/Date.Input.js +66 -0
- package/esm/date/Date.Input.js.map +1 -0
- package/esm/date/Date.locale.d.ts +44 -0
- package/esm/date/Date.locale.js +47 -0
- package/esm/date/Date.locale.js.map +1 -0
- package/esm/date/Date.typeutils.d.ts +14 -0
- package/esm/date/Date.typeutils.js +10 -0
- package/esm/date/Date.typeutils.js.map +1 -0
- package/esm/date/date-utils/calendar-range.d.ts +11 -0
- package/esm/date/date-utils/calendar-range.js +27 -0
- package/esm/date/date-utils/calendar-range.js.map +1 -0
- package/esm/date/date-utils/check-dates.d.ts +8 -0
- package/esm/date/date-utils/check-dates.js +14 -0
- package/esm/date/date-utils/check-dates.js.map +1 -0
- package/esm/date/date-utils/clamp-dates.d.ts +19 -0
- package/esm/date/date-utils/clamp-dates.js +37 -0
- package/esm/date/date-utils/clamp-dates.js.map +1 -0
- package/esm/date/date-utils/dates-disabled.d.ts +1 -0
- package/esm/date/date-utils/dates-disabled.js +25 -0
- package/esm/date/date-utils/dates-disabled.js.map +1 -0
- package/esm/date/date-utils/dropdown-options.d.ts +13 -0
- package/esm/date/date-utils/dropdown-options.js +41 -0
- package/esm/date/date-utils/dropdown-options.js.map +1 -0
- package/esm/date/date-utils/format-date.d.ts +2 -0
- package/esm/date/date-utils/format-date.js +9 -0
- package/esm/date/date-utils/format-date.js.map +1 -0
- package/esm/date/date-utils/index.d.ts +8 -0
- package/esm/date/date-utils/index.js +9 -0
- package/esm/date/date-utils/index.js.map +1 -0
- package/esm/date/date-utils/is-match.d.ts +3 -0
- package/esm/date/date-utils/is-match.js +57 -0
- package/esm/date/date-utils/is-match.js.map +1 -0
- package/esm/date/date-utils/parse-date.d.ts +4 -0
- package/esm/date/date-utils/parse-date.js +83 -0
- package/esm/date/date-utils/parse-date.js.map +1 -0
- package/esm/date/datepicker/DatePicker.d.ts +3 -3
- package/esm/date/datepicker/DatePicker.js +46 -62
- package/esm/date/datepicker/DatePicker.js.map +1 -1
- package/esm/date/datepicker/DatePicker.types.d.ts +108 -0
- package/esm/date/datepicker/DatePicker.types.js +2 -0
- package/esm/date/datepicker/DatePicker.types.js.map +1 -0
- package/esm/date/datepicker/hooks/useDatepicker.d.ts +90 -0
- package/esm/date/datepicker/hooks/useDatepicker.js +160 -0
- package/esm/date/datepicker/hooks/useDatepicker.js.map +1 -0
- package/esm/date/datepicker/hooks/useRangeDatepicker.d.ts +76 -0
- package/esm/date/datepicker/hooks/useRangeDatepicker.js +318 -0
- package/esm/date/datepicker/hooks/useRangeDatepicker.js.map +1 -0
- package/esm/date/datepicker/index.d.ts +4 -3
- package/esm/date/datepicker/index.js +4 -3
- package/esm/date/datepicker/index.js.map +1 -1
- package/esm/date/datepicker/parts/DatePicker.DayButton.d.ts +9 -0
- package/esm/date/datepicker/parts/DatePicker.DayButton.js +41 -0
- package/esm/date/datepicker/parts/DatePicker.DayButton.js.map +1 -0
- package/esm/date/datepicker/parts/DatePicker.Months.d.ts +11 -0
- package/esm/date/datepicker/parts/DatePicker.Months.js +58 -0
- package/esm/date/datepicker/parts/DatePicker.Months.js.map +1 -0
- package/esm/date/datepicker/parts/DatePicker.RDP.d.ts +15 -0
- package/esm/date/datepicker/parts/DatePicker.RDP.js +74 -0
- package/esm/date/datepicker/parts/DatePicker.RDP.js.map +1 -0
- package/esm/date/datepicker/parts/DatePicker.Standalone.d.ts +18 -0
- package/esm/date/datepicker/parts/DatePicker.Standalone.js +31 -0
- package/esm/date/datepicker/parts/DatePicker.Standalone.js.map +1 -0
- package/esm/date/datepicker/parts/DatePicker.WeekNumber.d.ts +9 -0
- package/esm/date/datepicker/parts/DatePicker.WeekNumber.js +35 -0
- package/esm/date/datepicker/parts/DatePicker.WeekNumber.js.map +1 -0
- package/esm/date/datepicker/parts/DatePicker.WeekRow.d.ts +8 -0
- package/esm/date/datepicker/parts/DatePicker.WeekRow.js +22 -0
- package/esm/date/datepicker/parts/DatePicker.WeekRow.js.map +1 -0
- package/esm/date/monthpicker/MonthPicker.context.d.ts +21 -0
- package/esm/date/monthpicker/MonthPicker.context.js +41 -0
- package/esm/date/monthpicker/MonthPicker.context.js.map +1 -0
- package/esm/date/monthpicker/MonthPicker.d.ts +3 -3
- package/esm/date/monthpicker/MonthPicker.js +31 -40
- package/esm/date/monthpicker/MonthPicker.js.map +1 -1
- package/esm/date/monthpicker/MonthPicker.types.d.ts +86 -0
- package/esm/date/monthpicker/MonthPicker.types.js +2 -0
- package/esm/date/monthpicker/MonthPicker.types.js.map +1 -0
- package/esm/date/monthpicker/MonthPicker.util.d.ts +2 -0
- package/esm/date/monthpicker/MonthPicker.util.js +152 -0
- package/esm/date/monthpicker/MonthPicker.util.js.map +1 -0
- package/esm/date/monthpicker/hooks/useMonthPicker.d.ts +85 -0
- package/esm/date/monthpicker/hooks/useMonthPicker.js +175 -0
- package/esm/date/monthpicker/hooks/useMonthPicker.js.map +1 -0
- package/esm/date/monthpicker/index.d.ts +4 -4
- package/esm/date/monthpicker/index.js +3 -3
- package/esm/date/monthpicker/index.js.map +1 -1
- package/esm/date/monthpicker/parts/MonthPicker.Button.d.ts +11 -0
- package/esm/date/monthpicker/parts/MonthPicker.Button.js +52 -0
- package/esm/date/monthpicker/parts/MonthPicker.Button.js.map +1 -0
- package/esm/date/monthpicker/parts/MonthPicker.Caption.d.ts +3 -0
- package/esm/date/monthpicker/parts/MonthPicker.Caption.js +46 -0
- package/esm/date/monthpicker/parts/MonthPicker.Caption.js.map +1 -0
- package/esm/date/monthpicker/parts/MonthPicker.Standalone.d.ts +10 -0
- package/esm/date/monthpicker/parts/MonthPicker.Standalone.js +22 -0
- package/esm/date/monthpicker/parts/MonthPicker.Standalone.js.map +1 -0
- package/esm/date/monthpicker/parts/MonthPicker.Table.d.ts +3 -0
- package/esm/date/monthpicker/parts/MonthPicker.Table.js +50 -0
- package/esm/date/monthpicker/parts/MonthPicker.Table.js.map +1 -0
- package/esm/form/combobox/Combobox.d.ts +1 -1
- package/esm/form/combobox/Input/InputController.d.ts +1 -1
- package/esm/form/confirmation-panel/ConfirmationPanel.js +6 -1
- package/esm/form/confirmation-panel/ConfirmationPanel.js.map +1 -1
- package/esm/modal/Modal.js +3 -3
- package/esm/modal/Modal.js.map +1 -1
- package/esm/popover/Popover.js +4 -4
- package/esm/popover/Popover.js.map +1 -1
- package/esm/theme/Theme.d.ts +7 -1
- package/esm/theme/Theme.js +22 -2
- package/esm/theme/Theme.js.map +1 -1
- package/esm/theme/index.d.ts +1 -1
- package/esm/theme/index.js.map +1 -1
- package/esm/tooltip/Tooltip.js +2 -5
- package/esm/tooltip/Tooltip.js.map +1 -1
- package/package.json +7 -8
- package/src/date/{parts/DateWrapper.tsx → Date.Dialog.tsx} +12 -9
- package/src/date/{parts/DateInput.tsx → Date.Input.tsx} +30 -5
- package/src/date/{utils/locale.ts → Date.locale.ts} +11 -2
- package/src/date/Date.typeutils.ts +32 -0
- package/src/date/date-utils/calendar-range.test.ts +54 -0
- package/src/date/date-utils/calendar-range.ts +46 -0
- package/src/date/date-utils/check-dates.test.ts +49 -0
- package/src/date/date-utils/check-dates.ts +28 -0
- package/src/date/date-utils/clamp-dates.test.ts +156 -0
- package/src/date/date-utils/clamp-dates.ts +63 -0
- package/src/date/{utils/__tests__ → date-utils}/dates-disabled.test.ts +1 -1
- package/src/date/{utils → date-utils}/dates-disabled.ts +1 -2
- package/src/date/date-utils/dropdown-options.test.ts +143 -0
- package/src/date/date-utils/dropdown-options.ts +79 -0
- package/src/date/{utils/__tests__ → date-utils}/format-dates.test.ts +2 -2
- package/src/date/date-utils/index.ts +16 -0
- package/src/date/{utils/__tests__ → date-utils}/is-match.test.ts +1 -1
- package/src/date/{utils → date-utils}/is-match.ts +2 -11
- package/src/date/{utils/__tests__ → date-utils}/parse-dates.test.ts +2 -1
- package/src/date/datepicker/DatePicker.tsx +67 -92
- package/src/date/datepicker/{types.ts → DatePicker.types.ts} +10 -4
- package/src/date/{hooks → datepicker/hooks}/useDatepicker.tsx +12 -13
- package/src/date/{hooks → datepicker/hooks}/useRangeDatepicker.test.tsx +1 -1
- package/src/date/{hooks → datepicker/hooks}/useRangeDatepicker.tsx +19 -19
- package/src/date/datepicker/index.ts +4 -5
- package/src/date/datepicker/parts/DatePicker.DayButton.tsx +56 -0
- package/src/date/datepicker/parts/DatePicker.Months.tsx +149 -0
- package/src/date/datepicker/parts/DatePicker.RDP.tsx +170 -0
- package/src/date/datepicker/parts/DatePicker.Standalone.tsx +93 -0
- package/src/date/datepicker/parts/DatePicker.WeekNumber.tsx +86 -0
- package/src/date/datepicker/parts/{WeekRow.tsx → DatePicker.WeekRow.tsx} +20 -21
- package/src/date/monthpicker/MonthPicker.context.tsx +103 -0
- package/src/date/monthpicker/MonthPicker.tsx +63 -68
- package/src/date/monthpicker/{types.ts → MonthPicker.types.ts} +1 -1
- package/src/date/{utils/navigation.ts → monthpicker/MonthPicker.util.ts} +2 -1
- package/src/date/{hooks → monthpicker/hooks}/useMonthPicker.tsx +14 -13
- package/src/date/monthpicker/index.ts +4 -4
- package/src/date/monthpicker/{MonthButton.tsx → parts/MonthPicker.Button.tsx} +21 -10
- package/src/date/monthpicker/{MonthCaption.tsx → parts/MonthPicker.Caption.tsx} +20 -21
- package/src/date/monthpicker/parts/MonthPicker.Standalone.tsx +86 -0
- package/src/date/monthpicker/{MonthSelector.tsx → parts/MonthPicker.Table.tsx} +7 -7
- package/src/form/confirmation-panel/ConfirmationPanel.tsx +7 -0
- package/src/modal/Modal.tsx +3 -3
- package/src/popover/Popover.tsx +4 -4
- package/src/react-css.d.ts +4 -0
- package/src/theme/RenameCSS.test.ts +80 -0
- package/src/theme/Theme.tsx +45 -8
- package/src/theme/index.ts +1 -1
- package/src/tooltip/Tooltip.tsx +2 -6
- package/src/date/context/index.ts +0 -9
- package/src/date/context/useDateInputContext.tsx +0 -34
- package/src/date/context/useDateTranslationContext.ts +0 -9
- package/src/date/context/useSharedMonthContext.tsx +0 -68
- package/src/date/datepicker/DatePickerStandalone.tsx +0 -136
- package/src/date/datepicker/datepicker.test.tsx +0 -28
- package/src/date/datepicker/parts/Caption.tsx +0 -54
- package/src/date/datepicker/parts/DayButton.tsx +0 -32
- package/src/date/datepicker/parts/DropdownCaption.tsx +0 -110
- package/src/date/datepicker/parts/HeadRow.tsx +0 -56
- package/src/date/datepicker/parts/Row.tsx +0 -48
- package/src/date/datepicker/parts/TableHead.tsx +0 -17
- package/src/date/datepicker/parts/WeekNumber.tsx +0 -75
- package/src/date/hooks/index.ts +0 -6
- package/src/date/monthpicker/MonthPickerStandalone.tsx +0 -102
- package/src/date/utils/__tests__/check-dates.test.ts +0 -22
- package/src/date/utils/__tests__/get-dates.test.ts +0 -121
- package/src/date/utils/__tests__/get-initial-year.test.ts +0 -83
- package/src/date/utils/__tests__/get-month-weeks.test.ts +0 -116
- package/src/date/utils/check-dates.ts +0 -13
- package/src/date/utils/get-dates.ts +0 -60
- package/src/date/utils/get-initial-year.ts +0 -25
- package/src/date/utils/get-month-weeks.ts +0 -93
- package/src/date/utils/index.ts +0 -18
- /package/src/date/{utils → date-utils}/format-date.ts +0 -0
- /package/src/date/{utils → date-utils}/parse-date.ts +0 -0
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
import cl from "clsx";
|
|
2
|
+
import { isWeekend } from "date-fns";
|
|
3
|
+
import React, { useCallback } from "react";
|
|
4
|
+
import { ClassNames, DayPicker, dateMatchModifiers } from "react-day-picker";
|
|
5
|
+
import { Show } from "../../../layout/responsive";
|
|
6
|
+
import { omit } from "../../../util";
|
|
7
|
+
import { useDateLocale } from "../../../util/i18n/i18n.hooks";
|
|
8
|
+
import { getLocaleFromString } from "../../Date.locale";
|
|
9
|
+
import { clampDisplayMonth, isDateOutsideRange } from "../../date-utils";
|
|
10
|
+
import {
|
|
11
|
+
ConditionalModeProps,
|
|
12
|
+
DatePickerDefaultProps,
|
|
13
|
+
} from "../DatePicker.types";
|
|
14
|
+
import { DatePickerDayButton } from "./DatePicker.DayButton";
|
|
15
|
+
import { DatePickerMonths } from "./DatePicker.Months";
|
|
16
|
+
import { DatePickerWeekNumber } from "./DatePicker.WeekNumber";
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* To support backwards compatibility with the old datepicker,
|
|
20
|
+
* we need to provide a partial implementation of the classnames
|
|
21
|
+
*/
|
|
22
|
+
const LegacyClassNames: Partial<ClassNames> = {
|
|
23
|
+
root: "rdp",
|
|
24
|
+
button_next: "button",
|
|
25
|
+
day: "rdp-cell",
|
|
26
|
+
day_button: "rdp-day rdp-button",
|
|
27
|
+
/* We set this directly on DayButton */
|
|
28
|
+
disabled: "",
|
|
29
|
+
hidden: "rdp-day_hidden",
|
|
30
|
+
outside: "rdp-day_outside",
|
|
31
|
+
selected: "rdp-day_selected",
|
|
32
|
+
weekday: "rdp-head_cell",
|
|
33
|
+
weekdays: "rdp-head_row",
|
|
34
|
+
week: "rdp-row",
|
|
35
|
+
weeks: "rdp-tbody",
|
|
36
|
+
month_grid: "rdp-table",
|
|
37
|
+
week_number: "rdp-weeknumber",
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
type ReactDayPickerProps = DatePickerDefaultProps &
|
|
41
|
+
ConditionalModeProps & {
|
|
42
|
+
/**
|
|
43
|
+
* If datepicker should be fixed to 6 weeks, regardless of actual weeks in month
|
|
44
|
+
* @default false
|
|
45
|
+
*/
|
|
46
|
+
fixedWeeks?: boolean;
|
|
47
|
+
/**
|
|
48
|
+
* Update selected date
|
|
49
|
+
*/
|
|
50
|
+
handleSelect: (newSelected: any) => void;
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
const ReactDayPicker = ({
|
|
54
|
+
className,
|
|
55
|
+
dropdownCaption,
|
|
56
|
+
disabled = [],
|
|
57
|
+
disableWeekends = false,
|
|
58
|
+
showWeekNumber = false,
|
|
59
|
+
selected,
|
|
60
|
+
fixedWeeks = false,
|
|
61
|
+
onWeekNumberClick,
|
|
62
|
+
fromDate,
|
|
63
|
+
toDate,
|
|
64
|
+
month,
|
|
65
|
+
mode: _mode,
|
|
66
|
+
handleSelect,
|
|
67
|
+
locale: _locale,
|
|
68
|
+
...rest
|
|
69
|
+
}: ReactDayPickerProps) => {
|
|
70
|
+
const langProviderLocale = useDateLocale();
|
|
71
|
+
const locale = _locale ? getLocaleFromString(_locale) : langProviderLocale;
|
|
72
|
+
|
|
73
|
+
const mode = _mode ?? ("single" as any);
|
|
74
|
+
|
|
75
|
+
return (
|
|
76
|
+
<DayPicker
|
|
77
|
+
captionLayout={dropdownCaption ? "dropdown" : "label"}
|
|
78
|
+
hideNavigation
|
|
79
|
+
locale={locale}
|
|
80
|
+
mode={mode as any}
|
|
81
|
+
onSelect={handleSelect}
|
|
82
|
+
selected={selected}
|
|
83
|
+
classNames={LegacyClassNames}
|
|
84
|
+
components={{
|
|
85
|
+
MonthCaption: () => <></>,
|
|
86
|
+
DayButton: useCallback(
|
|
87
|
+
(props) => <DatePickerDayButton {...props} locale={locale} />,
|
|
88
|
+
[locale],
|
|
89
|
+
),
|
|
90
|
+
Month: useCallback(
|
|
91
|
+
(props) => (
|
|
92
|
+
<DatePickerMonths
|
|
93
|
+
{...props}
|
|
94
|
+
locale={locale}
|
|
95
|
+
onWeekNumberClick={
|
|
96
|
+
mode === "multiple" ? onWeekNumberClick : undefined
|
|
97
|
+
}
|
|
98
|
+
/>
|
|
99
|
+
),
|
|
100
|
+
[locale, mode, onWeekNumberClick],
|
|
101
|
+
),
|
|
102
|
+
Day: useCallback(
|
|
103
|
+
(props) => (
|
|
104
|
+
<td
|
|
105
|
+
{...omit(props, ["day", "modifiers"])}
|
|
106
|
+
className="rdp-cell"
|
|
107
|
+
role={undefined}
|
|
108
|
+
/>
|
|
109
|
+
),
|
|
110
|
+
[],
|
|
111
|
+
),
|
|
112
|
+
WeekNumber: useCallback(
|
|
113
|
+
(props) => (
|
|
114
|
+
<DatePickerWeekNumber
|
|
115
|
+
{...props}
|
|
116
|
+
showOnDesktop
|
|
117
|
+
onWeekNumberClick={
|
|
118
|
+
mode === "multiple" ? onWeekNumberClick : undefined
|
|
119
|
+
}
|
|
120
|
+
/>
|
|
121
|
+
),
|
|
122
|
+
[mode, onWeekNumberClick],
|
|
123
|
+
),
|
|
124
|
+
/* On smaller screens we hide it to accomedate our custom week-selector */
|
|
125
|
+
WeekNumberHeader: useCallback(
|
|
126
|
+
(props) => (
|
|
127
|
+
<Show above="sm" asChild>
|
|
128
|
+
<th {...props} />
|
|
129
|
+
</Show>
|
|
130
|
+
),
|
|
131
|
+
[],
|
|
132
|
+
),
|
|
133
|
+
Weekdays: useCallback(
|
|
134
|
+
(props) => (
|
|
135
|
+
<thead {...props} className="rdp-head" aria-hidden>
|
|
136
|
+
<tr className="rdp-head_row">{props.children}</tr>
|
|
137
|
+
</thead>
|
|
138
|
+
),
|
|
139
|
+
[],
|
|
140
|
+
),
|
|
141
|
+
}}
|
|
142
|
+
className={cl("navds-date", className)}
|
|
143
|
+
disabled={(day) => {
|
|
144
|
+
return (
|
|
145
|
+
(disableWeekends && isWeekend(day)) ||
|
|
146
|
+
dateMatchModifiers(day, disabled) ||
|
|
147
|
+
isDateOutsideRange({ day, fromDate, toDate })
|
|
148
|
+
);
|
|
149
|
+
}}
|
|
150
|
+
weekStartsOn={1}
|
|
151
|
+
modifiers={{
|
|
152
|
+
weekend: (day) => disableWeekends && isWeekend(day),
|
|
153
|
+
}}
|
|
154
|
+
modifiersClassNames={{
|
|
155
|
+
weekend: "rdp-day__weekend",
|
|
156
|
+
}}
|
|
157
|
+
// eslint-disable-next-line jsx-a11y/no-autofocus
|
|
158
|
+
autoFocus={false}
|
|
159
|
+
showWeekNumber={showWeekNumber}
|
|
160
|
+
fixedWeeks={fixedWeeks}
|
|
161
|
+
showOutsideDays
|
|
162
|
+
startMonth={fromDate}
|
|
163
|
+
endMonth={toDate}
|
|
164
|
+
month={clampDisplayMonth({ month, start: fromDate, end: toDate })}
|
|
165
|
+
{...omit(rest, ["onSelect", "role", "id", "defaultSelected"])}
|
|
166
|
+
/>
|
|
167
|
+
);
|
|
168
|
+
};
|
|
169
|
+
|
|
170
|
+
export { ReactDayPicker };
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import cl from "clsx";
|
|
2
|
+
import React, { forwardRef } from "react";
|
|
3
|
+
import { DateRange } from "react-day-picker";
|
|
4
|
+
import { useControllableState } from "../../../util/hooks";
|
|
5
|
+
import { useI18n } from "../../../util/i18n/i18n.hooks";
|
|
6
|
+
import {
|
|
7
|
+
DateTranslationContextProvider,
|
|
8
|
+
getTranslations,
|
|
9
|
+
} from "../../Date.locale";
|
|
10
|
+
import {
|
|
11
|
+
DatePickerDefaultProps,
|
|
12
|
+
MultipleMode,
|
|
13
|
+
RangeMode,
|
|
14
|
+
SingleMode,
|
|
15
|
+
} from "../DatePicker.types";
|
|
16
|
+
import { ReactDayPicker } from "./DatePicker.RDP";
|
|
17
|
+
|
|
18
|
+
interface DatePickerStandaloneDefaultProps
|
|
19
|
+
extends Omit<
|
|
20
|
+
DatePickerDefaultProps,
|
|
21
|
+
"open" | "onClose" | "onOpenToggle" | "wrapperClassName" | "strategy"
|
|
22
|
+
> {
|
|
23
|
+
/**
|
|
24
|
+
* Datepicker classname
|
|
25
|
+
*/
|
|
26
|
+
className?: string;
|
|
27
|
+
/**
|
|
28
|
+
* If datepicker should be fixed to 6 weeks, regardless of actual weeks in month
|
|
29
|
+
* @default true
|
|
30
|
+
*/
|
|
31
|
+
fixedWeeks?: boolean;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
type StandaloneConditionalModeProps = SingleMode | MultipleMode | RangeMode;
|
|
35
|
+
|
|
36
|
+
export type DatePickerStandaloneProps = DatePickerStandaloneDefaultProps &
|
|
37
|
+
StandaloneConditionalModeProps;
|
|
38
|
+
|
|
39
|
+
export type DatePickerStandaloneType = React.ForwardRefExoticComponent<
|
|
40
|
+
DatePickerStandaloneProps & React.RefAttributes<HTMLDivElement>
|
|
41
|
+
>;
|
|
42
|
+
|
|
43
|
+
export const DatePickerStandalone: DatePickerStandaloneType = forwardRef<
|
|
44
|
+
HTMLDivElement,
|
|
45
|
+
DatePickerStandaloneProps
|
|
46
|
+
>(
|
|
47
|
+
(
|
|
48
|
+
{
|
|
49
|
+
className,
|
|
50
|
+
locale,
|
|
51
|
+
translations,
|
|
52
|
+
selected,
|
|
53
|
+
defaultSelected,
|
|
54
|
+
onSelect,
|
|
55
|
+
mode,
|
|
56
|
+
...rest
|
|
57
|
+
},
|
|
58
|
+
ref,
|
|
59
|
+
) => {
|
|
60
|
+
const translate = useI18n(
|
|
61
|
+
"DatePicker",
|
|
62
|
+
translations,
|
|
63
|
+
getTranslations(locale),
|
|
64
|
+
);
|
|
65
|
+
|
|
66
|
+
const [value, setValue] = useControllableState<
|
|
67
|
+
Date | Date[] | DateRange | undefined
|
|
68
|
+
>({
|
|
69
|
+
defaultValue: defaultSelected,
|
|
70
|
+
value: selected,
|
|
71
|
+
onChange: (newValue) => onSelect?.(newValue as any),
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
return (
|
|
75
|
+
<DateTranslationContextProvider translate={translate}>
|
|
76
|
+
<div
|
|
77
|
+
ref={ref}
|
|
78
|
+
className={cl("navds-date__standalone-wrapper", className)}
|
|
79
|
+
>
|
|
80
|
+
<ReactDayPicker
|
|
81
|
+
{...rest}
|
|
82
|
+
locale={locale}
|
|
83
|
+
handleSelect={setValue}
|
|
84
|
+
selected={value as any}
|
|
85
|
+
mode={mode as any}
|
|
86
|
+
/>
|
|
87
|
+
</div>
|
|
88
|
+
</DateTranslationContextProvider>
|
|
89
|
+
);
|
|
90
|
+
},
|
|
91
|
+
);
|
|
92
|
+
|
|
93
|
+
export default DatePickerStandalone;
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import cl from "clsx";
|
|
2
|
+
import React, { useMemo } from "react";
|
|
3
|
+
import { CalendarWeek, useDayPicker } from "react-day-picker";
|
|
4
|
+
import { Button } from "../../../button";
|
|
5
|
+
import { Hide, Show } from "../../../layout/responsive";
|
|
6
|
+
import { Detail } from "../../../typography";
|
|
7
|
+
import { useDateTranslationContext } from "../../Date.locale";
|
|
8
|
+
import { MultipleMode } from "../DatePicker.types";
|
|
9
|
+
|
|
10
|
+
const DatePickerWeekNumber = ({
|
|
11
|
+
week: { weekNumber, days },
|
|
12
|
+
onWeekNumberClick,
|
|
13
|
+
className,
|
|
14
|
+
style,
|
|
15
|
+
showOnDesktop,
|
|
16
|
+
}: {
|
|
17
|
+
week: CalendarWeek;
|
|
18
|
+
onWeekNumberClick: MultipleMode["onWeekNumberClick"];
|
|
19
|
+
showOnDesktop: boolean;
|
|
20
|
+
} & React.ThHTMLAttributes<HTMLTableCellElement>) => {
|
|
21
|
+
const translate = useDateTranslationContext().translate;
|
|
22
|
+
|
|
23
|
+
const { getModifiers } = useDayPicker();
|
|
24
|
+
|
|
25
|
+
const hideWeek = useMemo(() => {
|
|
26
|
+
if (
|
|
27
|
+
days.filter((day) => {
|
|
28
|
+
const mods = getModifiers(day);
|
|
29
|
+
return !(mods.hidden || mods.outside || mods.disabled);
|
|
30
|
+
}).length === 0
|
|
31
|
+
) {
|
|
32
|
+
return true;
|
|
33
|
+
}
|
|
34
|
+
return false;
|
|
35
|
+
}, [days, getModifiers]);
|
|
36
|
+
|
|
37
|
+
const DisplayMode = showOnDesktop ? Show : Hide;
|
|
38
|
+
|
|
39
|
+
if (!onWeekNumberClick || hideWeek) {
|
|
40
|
+
return (
|
|
41
|
+
<DisplayMode above="sm" asChild>
|
|
42
|
+
<td className="rdp-cell">
|
|
43
|
+
<Detail
|
|
44
|
+
as="span"
|
|
45
|
+
textColor="subtle"
|
|
46
|
+
className={className}
|
|
47
|
+
style={style}
|
|
48
|
+
aria-label={translate("weekNumber", { week: weekNumber })}
|
|
49
|
+
>
|
|
50
|
+
{weekNumber}
|
|
51
|
+
</Detail>
|
|
52
|
+
</td>
|
|
53
|
+
</DisplayMode>
|
|
54
|
+
);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
return (
|
|
58
|
+
<DisplayMode above="sm" asChild>
|
|
59
|
+
<td
|
|
60
|
+
className={cl("rdp-cell", {
|
|
61
|
+
"navds-date__week-wrapper": !showOnDesktop,
|
|
62
|
+
})}
|
|
63
|
+
>
|
|
64
|
+
<Button
|
|
65
|
+
variant="secondary-neutral"
|
|
66
|
+
size="small"
|
|
67
|
+
name="week-number"
|
|
68
|
+
aria-label={translate("selectWeekNumber", { week: weekNumber })}
|
|
69
|
+
style={style}
|
|
70
|
+
className={cl("navds-date__weeknumber", "rdp-weeknumber")}
|
|
71
|
+
onClick={() => {
|
|
72
|
+
onWeekNumberClick(
|
|
73
|
+
weekNumber,
|
|
74
|
+
days.map((day) => day.date),
|
|
75
|
+
);
|
|
76
|
+
}}
|
|
77
|
+
icon={
|
|
78
|
+
<span className="navds-date__weeknumber-number">{weekNumber}</span>
|
|
79
|
+
}
|
|
80
|
+
/>
|
|
81
|
+
</td>
|
|
82
|
+
</DisplayMode>
|
|
83
|
+
);
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
export { DatePickerWeekNumber };
|
|
@@ -1,14 +1,19 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
import {
|
|
2
|
+
import { CalendarWeek } from "react-day-picker";
|
|
3
3
|
import { Show } from "../../../layout/responsive";
|
|
4
4
|
import { Detail } from "../../../typography";
|
|
5
5
|
import { useId } from "../../../util/hooks";
|
|
6
|
-
import { useDateTranslationContext } from "../../
|
|
7
|
-
import {
|
|
8
|
-
import
|
|
6
|
+
import { useDateTranslationContext } from "../../Date.locale";
|
|
7
|
+
import { MultipleMode } from "../DatePicker.types";
|
|
8
|
+
import { DatePickerWeekNumber } from "./DatePicker.WeekNumber";
|
|
9
9
|
|
|
10
|
-
const
|
|
11
|
-
|
|
10
|
+
const DatePickerWeekRow = ({
|
|
11
|
+
onWeekNumberClick,
|
|
12
|
+
weeks,
|
|
13
|
+
}: {
|
|
14
|
+
onWeekNumberClick: MultipleMode["onWeekNumberClick"];
|
|
15
|
+
weeks?: CalendarWeek[];
|
|
16
|
+
}) => {
|
|
12
17
|
const translate = useDateTranslationContext().translate;
|
|
13
18
|
const labelId = useId();
|
|
14
19
|
|
|
@@ -16,11 +21,6 @@ const WeekRow = ({ displayMonth }: { displayMonth: Date }) => {
|
|
|
16
21
|
return null;
|
|
17
22
|
}
|
|
18
23
|
|
|
19
|
-
const weeks = getMonthWeeks(displayMonth, {
|
|
20
|
-
useFixedWeeks: Boolean(fixedWeeks),
|
|
21
|
-
locale,
|
|
22
|
-
});
|
|
23
|
-
|
|
24
24
|
return (
|
|
25
25
|
<Show below="sm" asChild>
|
|
26
26
|
<table className="rdp-table" role="grid">
|
|
@@ -32,19 +32,18 @@ const WeekRow = ({ displayMonth }: { displayMonth: Date }) => {
|
|
|
32
32
|
className="rdp-cell navds-date__week-cell"
|
|
33
33
|
>
|
|
34
34
|
<span className="navds-date__week-wrapper" id={labelId}>
|
|
35
|
-
{
|
|
35
|
+
{translate("week")}
|
|
36
36
|
</span>
|
|
37
37
|
</Detail>
|
|
38
38
|
|
|
39
|
-
{weeks
|
|
40
|
-
<
|
|
39
|
+
{weeks?.map((week) => (
|
|
40
|
+
<DatePickerWeekNumber
|
|
41
41
|
key={week.weekNumber}
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
</td>
|
|
42
|
+
week={week}
|
|
43
|
+
onWeekNumberClick={onWeekNumberClick}
|
|
44
|
+
showOnDesktop={false}
|
|
45
|
+
className="navds-date__week-wrapper"
|
|
46
|
+
/>
|
|
48
47
|
))}
|
|
49
48
|
</tr>
|
|
50
49
|
</tbody>
|
|
@@ -53,4 +52,4 @@ const WeekRow = ({ displayMonth }: { displayMonth: Date }) => {
|
|
|
53
52
|
);
|
|
54
53
|
};
|
|
55
54
|
|
|
56
|
-
export
|
|
55
|
+
export { DatePickerWeekRow };
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { Locale, isSameYear } from "date-fns";
|
|
2
|
+
import React from "react";
|
|
3
|
+
import { createContext } from "../../util/create-context";
|
|
4
|
+
import { useControllableState } from "../../util/hooks";
|
|
5
|
+
import { clampDisplayYear } from "../date-utils";
|
|
6
|
+
import { MonthPickerProps } from "./MonthPicker.types";
|
|
7
|
+
|
|
8
|
+
type MonthPickerProviderProps = Pick<
|
|
9
|
+
MonthPickerProps,
|
|
10
|
+
| "dropdownCaption"
|
|
11
|
+
| "disabled"
|
|
12
|
+
| "selected"
|
|
13
|
+
| "defaultSelected"
|
|
14
|
+
| "onMonthSelect"
|
|
15
|
+
| "year"
|
|
16
|
+
| "onYearChange"
|
|
17
|
+
| "fromDate"
|
|
18
|
+
| "toDate"
|
|
19
|
+
> & {
|
|
20
|
+
children: React.ReactNode;
|
|
21
|
+
locale: Locale;
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
type MonthPickerContextProps = {
|
|
25
|
+
caption: "label" | "dropdown";
|
|
26
|
+
year: Date;
|
|
27
|
+
onYearChange: (year: Date) => void;
|
|
28
|
+
selected: MonthPickerProps["selected"];
|
|
29
|
+
onMonthSelect: MonthPickerProps["onMonthSelect"];
|
|
30
|
+
disabled: NonNullable<MonthPickerProps["disabled"]>;
|
|
31
|
+
locale: Locale;
|
|
32
|
+
fromDate?: MonthPickerProps["fromDate"];
|
|
33
|
+
toDate?: MonthPickerProps["toDate"];
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
const [MonthPickerContextProvider, useMonthPickerContext] =
|
|
37
|
+
createContext<MonthPickerContextProps>({
|
|
38
|
+
name: "MonthPickerContext",
|
|
39
|
+
errorMessage:
|
|
40
|
+
"useMonthPickerContext must be used within an MonthPickerContextProvider",
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
const MonthPickerProvider = ({
|
|
44
|
+
children,
|
|
45
|
+
disabled = [],
|
|
46
|
+
year,
|
|
47
|
+
onYearChange,
|
|
48
|
+
fromDate,
|
|
49
|
+
toDate,
|
|
50
|
+
selected,
|
|
51
|
+
defaultSelected,
|
|
52
|
+
onMonthSelect,
|
|
53
|
+
dropdownCaption,
|
|
54
|
+
locale,
|
|
55
|
+
}: MonthPickerProviderProps) => {
|
|
56
|
+
/**
|
|
57
|
+
* Controlls current displayed year in MonthPicker
|
|
58
|
+
*/
|
|
59
|
+
const [displayYear, setDisplayYear] = useControllableState({
|
|
60
|
+
defaultValue:
|
|
61
|
+
clampDisplayYear({
|
|
62
|
+
month: year ?? selected ?? defaultSelected,
|
|
63
|
+
start: fromDate,
|
|
64
|
+
end: toDate,
|
|
65
|
+
}) ?? new Date(),
|
|
66
|
+
value: year,
|
|
67
|
+
onChange: onYearChange,
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Allows both controlled and uncontrolled use of MonthPicker
|
|
72
|
+
*/
|
|
73
|
+
const [month, setMonth] = useControllableState({
|
|
74
|
+
defaultValue: defaultSelected,
|
|
75
|
+
value: selected,
|
|
76
|
+
onChange: onMonthSelect,
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
const handleDisplayYearUpdate = (newYear: Date) => {
|
|
80
|
+
if (isSameYear(newYear, displayYear)) {
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
setDisplayYear(newYear);
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
return (
|
|
87
|
+
<MonthPickerContextProvider
|
|
88
|
+
caption={dropdownCaption && fromDate && toDate ? "dropdown" : "label"}
|
|
89
|
+
disabled={disabled}
|
|
90
|
+
selected={month}
|
|
91
|
+
onMonthSelect={setMonth}
|
|
92
|
+
year={displayYear}
|
|
93
|
+
onYearChange={handleDisplayYearUpdate}
|
|
94
|
+
locale={locale}
|
|
95
|
+
fromDate={fromDate}
|
|
96
|
+
toDate={toDate}
|
|
97
|
+
>
|
|
98
|
+
{children}
|
|
99
|
+
</MonthPickerContextProvider>
|
|
100
|
+
);
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
export { MonthPickerProvider, useMonthPickerContext };
|
|
@@ -1,21 +1,20 @@
|
|
|
1
1
|
import cl from "clsx";
|
|
2
2
|
import React, { forwardRef, useState } from "react";
|
|
3
|
-
import {
|
|
4
|
-
import { useId } from "../../util/hooks";
|
|
3
|
+
import { useControllableState, useId } from "../../util/hooks";
|
|
5
4
|
import { useMergeRefs } from "../../util/hooks/useMergeRefs";
|
|
6
5
|
import { useDateLocale, useI18n } from "../../util/i18n/i18n.hooks";
|
|
6
|
+
import { DateDialog } from "../Date.Dialog";
|
|
7
|
+
import { DateInputContextProvider, MonthPickerInput } from "../Date.Input";
|
|
7
8
|
import {
|
|
8
|
-
DateInputContext,
|
|
9
9
|
DateTranslationContextProvider,
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import
|
|
16
|
-
import MonthPickerStandalone from "./
|
|
17
|
-
import
|
|
18
|
-
import { MonthPickerProps } from "./types";
|
|
10
|
+
getLocaleFromString,
|
|
11
|
+
getTranslations,
|
|
12
|
+
} from "../Date.locale";
|
|
13
|
+
import { MonthPickerProvider } from "./MonthPicker.context";
|
|
14
|
+
import { MonthPickerProps } from "./MonthPicker.types";
|
|
15
|
+
import { MonthPickerCaption } from "./parts/MonthPicker.Caption";
|
|
16
|
+
import { MonthPickerStandalone } from "./parts/MonthPicker.Standalone";
|
|
17
|
+
import { MonthPickerTable } from "./parts/MonthPicker.Table";
|
|
19
18
|
|
|
20
19
|
interface MonthPickerComponent
|
|
21
20
|
extends React.ForwardRefExoticComponent<MonthPickerProps> {
|
|
@@ -91,20 +90,26 @@ export const MonthPicker = forwardRef<HTMLDivElement, MonthPickerProps>(
|
|
|
91
90
|
);
|
|
92
91
|
const langProviderLocale = useDateLocale();
|
|
93
92
|
const ariaId = useId(id);
|
|
94
|
-
|
|
93
|
+
|
|
94
|
+
const [open, setOpen] = useControllableState({
|
|
95
|
+
defaultValue: false,
|
|
96
|
+
value: _open,
|
|
97
|
+
onChange: () => {
|
|
98
|
+
onOpenToggle?.();
|
|
99
|
+
},
|
|
100
|
+
});
|
|
95
101
|
|
|
96
102
|
/* We use state here to insure that anchor is defined if open is true on initial render */
|
|
97
103
|
const [wrapperRef, setWrapperRef] = useState<HTMLDivElement | null>(null);
|
|
98
104
|
const mergedRef = useMergeRefs(setWrapperRef, ref);
|
|
99
105
|
|
|
100
|
-
const [selectedMonth, setSelectedMonth] = useState<Date | undefined>(
|
|
101
|
-
defaultSelected,
|
|
102
|
-
);
|
|
103
|
-
|
|
104
106
|
const handleSelect = (month?: Date) => {
|
|
105
|
-
!onMonthSelect && setSelectedMonth(month);
|
|
106
107
|
onMonthSelect?.(month);
|
|
107
|
-
|
|
108
|
+
|
|
109
|
+
if (month) {
|
|
110
|
+
onClose?.();
|
|
111
|
+
setOpen(false);
|
|
112
|
+
}
|
|
108
113
|
};
|
|
109
114
|
|
|
110
115
|
if (dropdownCaption && (!fromDate || !toDate)) {
|
|
@@ -114,62 +119,52 @@ export const MonthPicker = forwardRef<HTMLDivElement, MonthPickerProps>(
|
|
|
114
119
|
|
|
115
120
|
return (
|
|
116
121
|
<DateTranslationContextProvider translate={translate}>
|
|
117
|
-
<
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
onOpenToggle?.();
|
|
123
|
-
},
|
|
124
|
-
ariaId,
|
|
125
|
-
defined: true,
|
|
126
|
-
}}
|
|
122
|
+
<DateInputContextProvider
|
|
123
|
+
open={open}
|
|
124
|
+
onOpen={() => setOpen((x) => !x)}
|
|
125
|
+
ariaId={ariaId}
|
|
126
|
+
defined={true}
|
|
127
127
|
>
|
|
128
|
-
<
|
|
129
|
-
|
|
130
|
-
|
|
128
|
+
<MonthPickerProvider
|
|
129
|
+
dropdownCaption={dropdownCaption}
|
|
130
|
+
defaultSelected={defaultSelected}
|
|
131
|
+
selected={selected}
|
|
132
|
+
disabled={disabled}
|
|
133
|
+
fromDate={fromDate}
|
|
134
|
+
toDate={toDate}
|
|
135
|
+
year={year}
|
|
136
|
+
onYearChange={onYearChange}
|
|
137
|
+
onMonthSelect={handleSelect}
|
|
138
|
+
locale={locale ? getLocaleFromString(locale) : langProviderLocale}
|
|
131
139
|
>
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
anchor={wrapperRef}
|
|
136
|
-
onClose={() => onClose?.() ?? setOpen(false)}
|
|
137
|
-
locale={locale}
|
|
138
|
-
translate={translate}
|
|
139
|
-
variant="month"
|
|
140
|
-
popoverProps={{
|
|
141
|
-
id: ariaId,
|
|
142
|
-
strategy,
|
|
143
|
-
}}
|
|
140
|
+
<div
|
|
141
|
+
ref={mergedRef}
|
|
142
|
+
className={cl("navds-date__wrapper", wrapperClassName)}
|
|
144
143
|
>
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
144
|
+
{children}
|
|
145
|
+
<DateDialog
|
|
146
|
+
open={open}
|
|
147
|
+
anchor={wrapperRef}
|
|
148
|
+
onClose={() => {
|
|
149
|
+
onClose?.();
|
|
150
|
+
open && setOpen(false);
|
|
151
|
+
}}
|
|
152
|
+
locale={locale}
|
|
153
|
+
translate={translate}
|
|
154
|
+
variant="month"
|
|
155
|
+
popoverProps={{
|
|
156
|
+
id: ariaId,
|
|
157
|
+
strategy,
|
|
154
158
|
}}
|
|
155
159
|
>
|
|
156
160
|
<div className={cl("rdp-month", className)}>
|
|
157
|
-
<
|
|
158
|
-
|
|
159
|
-
disabled={disabled}
|
|
160
|
-
selected={selected ?? selectedMonth}
|
|
161
|
-
onSelect={handleSelect}
|
|
162
|
-
year={year}
|
|
163
|
-
onYearChange={onYearChange}
|
|
164
|
-
>
|
|
165
|
-
<MonthCaption />
|
|
166
|
-
<MonthSelector />
|
|
167
|
-
</SharedMonthProvider>
|
|
161
|
+
<MonthPickerCaption />
|
|
162
|
+
<MonthPickerTable />
|
|
168
163
|
</div>
|
|
169
|
-
</
|
|
170
|
-
</
|
|
171
|
-
</
|
|
172
|
-
</
|
|
164
|
+
</DateDialog>
|
|
165
|
+
</div>
|
|
166
|
+
</MonthPickerProvider>
|
|
167
|
+
</DateInputContextProvider>
|
|
173
168
|
</DateTranslationContextProvider>
|
|
174
169
|
);
|
|
175
170
|
},
|