diff --git a/packages/react/src/components/Forms/DatePicker/DatePicker.spec.tsx b/packages/react/src/components/Forms/DatePicker/DatePicker.spec.tsx index c05e1b1..c4b901a 100644 --- a/packages/react/src/components/Forms/DatePicker/DatePicker.spec.tsx +++ b/packages/react/src/components/Forms/DatePicker/DatePicker.spec.tsx @@ -1131,4 +1131,160 @@ describe("", () => { await user.keyboard("{ArrowRight}"); expectFocusedMonthToBeEqual(nextMonthValue); }); + + it("uses the locale props calendar system", async () => { + const user = userEvent.setup(); + render( + + + + ); + + const input = (await screen.findAllByRole("button"))[0]; + + // Toggle button opens the calendar. + await user.click(input); + expectCalendarToBeOpen(); + expectDateFieldToBeDisplayed(); + + // Make sure dateField is in the right locale + const dateFieldContent = screen.getByRole("presentation").textContent; + expect(dateFieldContent).eq("4/4/1945 शक"); + + // Make sure month is in the right locale + const focusedMonth = screen + .getByRole("combobox", { + name: "Select a month", + })! + .textContent?.replace("arrow_drop_down", ""); + expect(focusedMonth).eq("आषाढ़"); + + // Make sure year is in the right locale + const focusedYear = screen + .getByRole("combobox", { + name: "Select a year", + })! + .textContent?.replace("arrow_drop_down", ""); + expect(focusedYear).eq("1945 शक"); + + // Make sure weekdays are in the right locale + screen.getByText("रवि"); + screen.getByText("सोम"); + screen.getByText("मंगल"); + screen.getByText("बुध"); + screen.getByText("गुरु"); + screen.getByText("शुक्र"); + screen.getByText("शनि"); + }); + + it("uses the cunningham provider props calendar systems", async () => { + const user = userEvent.setup(); + render( + + + + ); + + const input = (await screen.findAllByRole("button"))[0]; + + // Toggle button opens the calendar. + await user.click(input); + expectCalendarToBeOpen(); + expectDateFieldToBeDisplayed(); + + // Make sure dateField is in the right locale + const dateFieldContent = screen.getByRole("presentation").textContent; + expect(dateFieldContent).eq("25/06/2023"); + + // Make sure month is in the right locale + const focusedMonth = screen + .getByRole("combobox", { + name: "Sélectionner un mois", + })! + .textContent?.replace("arrow_drop_down", ""); + expect(focusedMonth).eq("juin"); + + // Make sure year is in the right locale + const focusedYear = screen + .getByRole("combobox", { + name: "Sélectionner une année", + })! + .textContent?.replace("arrow_drop_down", ""); + expect(focusedYear).eq("2023"); + + // Make sure weekdays are in the right locale + screen.getByText("lun."); + screen.getByText("mar."); + screen.getByText("mer."); + screen.getByText("jeu."); + screen.getByText("ven."); + screen.getByText("sam."); + screen.getByText("dim."); + }); + + it("makes sure the locale props override the cunningham provider calendar system", async () => { + const user = userEvent.setup(); + render( + + + + ); + + const input = (await screen.findAllByRole("button"))[0]; + + // Toggle button opens the calendar. + await user.click(input); + expectCalendarToBeOpen(); + expectDateFieldToBeDisplayed(); + + // Make sure dateField is in the right locale + const dateFieldContent = screen.getByRole("presentation").textContent; + expect(dateFieldContent).eq("4/4/1945 शक"); + + // Make sure month is in the right locale + // And aria-label uses the right translation. + const focusedMonth = screen + .getByRole("combobox", { + name: "Sélectionner un mois", + })! + .textContent?.replace("arrow_drop_down", ""); + expect(focusedMonth).eq("आषाढ़"); + + // Make sure year is in the right locale + // And aria-label uses the right translation. + const focusedYear = screen + .getByRole("combobox", { + name: "Sélectionner une année", + })! + .textContent?.replace("arrow_drop_down", ""); + expect(focusedYear).eq("1945 शक"); + + // Make sure weekdays are in the right locale + screen.getByText("रवि"); + screen.getByText("सोम"); + screen.getByText("मंगल"); + screen.getByText("बुध"); + screen.getByText("गुरु"); + screen.getByText("शुक्र"); + screen.getByText("शनि"); + }); + + it("has a wrong locale props", async () => { + vi.spyOn(console, "error").mockImplementation(() => undefined); + expect(() => + render( + + + + ) + ).toThrow("Incorrect locale information provided"); + }); }); diff --git a/packages/react/src/components/Forms/DatePicker/DatePickerAux.tsx b/packages/react/src/components/Forms/DatePicker/DatePickerAux.tsx index 1d49a00..2f4360d 100644 --- a/packages/react/src/components/Forms/DatePicker/DatePickerAux.tsx +++ b/packages/react/src/components/Forms/DatePicker/DatePickerAux.tsx @@ -11,6 +11,7 @@ import { } from "@react-stately/datepicker"; import { DateRangePickerAria, DatePickerAria } from "@react-aria/datepicker"; import classNames from "classnames"; +import { I18nProvider } from "@react-aria/i18n"; import { Button } from ":/components/Button"; import { Popover } from ":/components/Popover"; import { Field, FieldProps } from ":/components/Forms/Field"; @@ -27,6 +28,7 @@ export type DatePickerAuxSubProps = FieldProps & { maxValue?: StringOrDate; disabled?: boolean; name?: string; + locale?: string; }; export type DatePickerAuxProps = PropsWithChildren & @@ -58,13 +60,14 @@ const DatePickerAux = forwardRef( calendar, children, name, + locale, disabled = false, optionalClassName, ...props }: DatePickerAuxProps, ref: Ref ) => { - const { t } = useCunningham(); + const { t, currentLocale } = useCunningham(); const pickerRef = useRef(null); const isDateInvalid = useMemo( @@ -79,93 +82,97 @@ const DatePickerAux = forwardRef( pickerProps.buttonProps; return ( - -
+ +
!pickerState.isOpen && pickerState.open()} > - {"dateRange" in pickerState ? ( - <> +
!pickerState.isOpen && pickerState.open()} + > + {"dateRange" in pickerState ? ( + <> + + + + ) : ( - +
- {children} -
- {pickerState.isOpen && ( - - {calendar} - - )} -
-
+ + ); } );