flowbite-react
Version:
Official React components built for Flowbite and Tailwind CSS
1 lines • 20.1 kB
Source Map (JSON)
{"version":3,"file":"Datepicker.mjs","sources":["../../../../src/components/Datepicker/Datepicker.tsx"],"sourcesContent":["\"use client\";\n\nimport type { ForwardRefRenderFunction, ReactNode } from \"react\";\nimport { forwardRef, useEffect, useImperativeHandle, useRef, useState } from \"react\";\nimport { HiArrowLeft, HiArrowRight, HiCalendar } from \"react-icons/hi\";\nimport { twMerge } from \"tailwind-merge\";\nimport { mergeDeep } from \"../../helpers/merge-deep\";\nimport { getTheme } from \"../../theme-store\";\nimport type { DeepPartial } from \"../../types\";\nimport { TextInput, type FlowbiteTextInputTheme, type TextInputProps } from \"../TextInput\";\nimport { DatepickerContext } from \"./DatepickerContext\";\nimport {\n addMonths,\n addYears,\n getFirstDateInRange,\n getFormattedDate,\n isDateEqual,\n startOfYearPeriod,\n Views,\n WeekStart,\n} from \"./helpers\";\nimport type { FlowbiteDatepickerViewsDaysTheme } from \"./Views/Days\";\nimport { DatepickerViewsDays } from \"./Views/Days\";\nimport { DatepickerViewsDecades, type FlowbiteDatepickerViewsDecadesTheme } from \"./Views/Decades\";\nimport { DatepickerViewsMonth, type FlowbiteDatepickerViewsMonthsTheme } from \"./Views/Months\";\nimport { DatepickerViewsYears, type FlowbiteDatepickerViewsYearsTheme } from \"./Views/Years\";\n\nexport interface FlowbiteDatepickerTheme {\n root: {\n base: string;\n input?: FlowbiteTextInputTheme;\n };\n popup: FlowbiteDatepickerPopupTheme;\n views: {\n days: FlowbiteDatepickerViewsDaysTheme;\n months: FlowbiteDatepickerViewsMonthsTheme;\n years: FlowbiteDatepickerViewsYearsTheme;\n decades: FlowbiteDatepickerViewsDecadesTheme;\n };\n}\n\nexport interface FlowbiteDatepickerPopupTheme {\n root: {\n base: string;\n inline: string;\n inner: string;\n };\n header: {\n base: string;\n title: string;\n selectors: {\n base: string;\n button: {\n base: string;\n prev: string;\n next: string;\n view: string;\n };\n };\n };\n view: {\n base: string;\n };\n footer: {\n base: string;\n button: {\n base: string;\n today: string;\n clear: string;\n };\n };\n}\n\nexport interface DatepickerRef {\n /**\n * Focus the datepicker input.\n */\n focus: () => void;\n /**\n * Clears the datepicker value back to the defaultDate.\n */\n clear: () => void;\n}\n\nexport interface DatepickerProps extends Omit<TextInputProps, \"theme\"> {\n open?: boolean;\n inline?: boolean;\n autoHide?: boolean;\n showClearButton?: boolean;\n labelClearButton?: string;\n showTodayButton?: boolean;\n labelTodayButton?: string;\n defaultDate?: Date;\n minDate?: Date;\n maxDate?: Date;\n language?: string;\n weekStart?: WeekStart;\n theme?: DeepPartial<FlowbiteDatepickerTheme>;\n onSelectedDateChanged?: (date: Date) => void;\n}\n\nconst DatepickerRender: ForwardRefRenderFunction<DatepickerRef, DatepickerProps> = (\n {\n title,\n open,\n inline = false,\n autoHide = true, // Hide when selected the day\n showClearButton = true,\n labelClearButton = \"Clear\",\n showTodayButton = true,\n labelTodayButton = \"Today\",\n defaultDate = new Date(),\n minDate,\n maxDate,\n language = \"en\",\n weekStart = WeekStart.Sunday,\n className,\n theme: customTheme = {},\n onSelectedDateChanged,\n ...props\n },\n ref,\n) => {\n const theme = mergeDeep(getTheme().datepicker, customTheme);\n\n // Default date should respect the range\n defaultDate = getFirstDateInRange(defaultDate, minDate, maxDate);\n\n const [isOpen, setIsOpen] = useState(open);\n const [view, setView] = useState<Views>(Views.Days);\n // selectedDate is the date selected by the user\n const [selectedDate, setSelectedDate] = useState<Date>(defaultDate);\n // viewDate is only for navigation\n const [viewDate, setViewDate] = useState<Date>(defaultDate);\n\n const inputRef = useRef<HTMLInputElement>(null);\n const datepickerRef = useRef<HTMLDivElement>(null);\n\n // Triggers when user select the date\n const changeSelectedDate = (date: Date, useAutohide: boolean) => {\n setSelectedDate(date);\n\n if (onSelectedDateChanged) {\n onSelectedDateChanged(date);\n }\n\n if (autoHide && view === Views.Days && useAutohide == true && !inline) {\n setIsOpen(false);\n }\n };\n\n const clearDate = () => {\n changeSelectedDate(defaultDate, true);\n if (defaultDate) {\n setViewDate(defaultDate);\n }\n };\n\n useImperativeHandle(ref, () => ({\n focus() {\n inputRef.current?.focus();\n },\n clear() {\n clearDate();\n },\n }));\n\n // Render the DatepickerView* node\n const renderView = (type: Views): ReactNode => {\n switch (type) {\n case Views.Decades:\n return <DatepickerViewsDecades theme={theme.views.decades} />;\n case Views.Years:\n return <DatepickerViewsYears theme={theme.views.years} />;\n case Views.Months:\n return <DatepickerViewsMonth theme={theme.views.months} />;\n case Views.Days:\n default:\n return <DatepickerViewsDays theme={theme.views.days} />;\n }\n };\n\n // Coordinate the next view based on current view (statemachine-like)\n const getNextView = (): Views => {\n switch (view) {\n case Views.Days:\n return Views.Months;\n case Views.Months:\n return Views.Years;\n case Views.Years:\n return Views.Decades;\n }\n return view;\n };\n\n // Get the view title based on active View\n const getViewTitle = (): string => {\n switch (view) {\n case Views.Decades:\n return `${startOfYearPeriod(viewDate, 100)} - ${startOfYearPeriod(viewDate, 100) + 90}`;\n case Views.Years:\n return `${startOfYearPeriod(viewDate, 10)} - ${startOfYearPeriod(viewDate, 10) + 9}`;\n case Views.Months:\n return getFormattedDate(language, viewDate, { year: \"numeric\" });\n case Views.Days:\n default:\n return getFormattedDate(language, viewDate, { month: \"long\", year: \"numeric\" });\n }\n };\n\n // Navigate to prev/next for given view's date by value\n const getViewDatePage = (view: Views, date: Date, value: number): Date => {\n switch (view) {\n case Views.Days:\n return new Date(addMonths(date, value));\n case Views.Months:\n return new Date(addYears(date, value));\n case Views.Years:\n return new Date(addYears(date, value * 10));\n case Views.Decades:\n return new Date(addYears(date, value * 100));\n default:\n return new Date(addYears(date, value * 10));\n }\n };\n\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n const clickedInsideDatepicker = datepickerRef?.current?.contains(event.target as Node);\n const clickedInsideInput = inputRef?.current?.contains(event.target as Node);\n\n if (!clickedInsideDatepicker && !clickedInsideInput) {\n setIsOpen(false);\n }\n };\n\n document.addEventListener(\"mousedown\", handleClickOutside);\n\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n };\n }, [inputRef, datepickerRef, setIsOpen]);\n\n return (\n <DatepickerContext.Provider\n value={{\n theme,\n language,\n minDate,\n maxDate,\n weekStart,\n isOpen,\n setIsOpen,\n view,\n setView,\n viewDate,\n setViewDate,\n selectedDate,\n setSelectedDate,\n changeSelectedDate,\n }}\n >\n <div className={twMerge(theme.root.base, className)}>\n {!inline && (\n <TextInput\n theme={theme.root.input}\n icon={HiCalendar}\n ref={inputRef}\n onFocus={() => {\n if (!isDateEqual(viewDate, selectedDate)) {\n setViewDate(selectedDate);\n }\n setIsOpen(true);\n }}\n value={selectedDate && getFormattedDate(language, selectedDate)}\n readOnly\n {...props}\n />\n )}\n {(isOpen || inline) && (\n <div ref={datepickerRef} className={twMerge(theme.popup.root.base, inline && theme.popup.root.inline)}>\n <div className={theme.popup.root.inner}>\n <div className={theme.popup.header.base}>\n {title && <div className={theme.popup.header.title}>{title}</div>}\n <div className={theme.popup.header.selectors.base}>\n <button\n type=\"button\"\n className={twMerge(\n theme.popup.header.selectors.button.base,\n theme.popup.header.selectors.button.prev,\n )}\n onClick={() => setViewDate(getViewDatePage(view, viewDate, -1))}\n >\n <HiArrowLeft />\n </button>\n <button\n type=\"button\"\n className={twMerge(\n theme.popup.header.selectors.button.base,\n theme.popup.header.selectors.button.view,\n )}\n onClick={() => setView(getNextView())}\n >\n {getViewTitle()}\n </button>\n <button\n type=\"button\"\n className={twMerge(\n theme.popup.header.selectors.button.base,\n theme.popup.header.selectors.button.next,\n )}\n onClick={() => setViewDate(getViewDatePage(view, viewDate, 1))}\n >\n <HiArrowRight />\n </button>\n </div>\n </div>\n <div className={theme.popup.view.base}>{renderView(view)}</div>\n {(showClearButton || showTodayButton) && (\n <div className={theme.popup.footer.base}>\n {showTodayButton && (\n <button\n type=\"button\"\n className={twMerge(theme.popup.footer.button.base, theme.popup.footer.button.today)}\n onClick={() => {\n const today = new Date();\n changeSelectedDate(today, true);\n setViewDate(today);\n }}\n >\n {labelTodayButton}\n </button>\n )}\n {showClearButton && (\n <button\n type=\"button\"\n className={twMerge(theme.popup.footer.button.base, theme.popup.footer.button.clear)}\n onClick={() => {\n changeSelectedDate(defaultDate, true);\n if (defaultDate) {\n setViewDate(defaultDate);\n }\n }}\n >\n {labelClearButton}\n </button>\n )}\n </div>\n )}\n </div>\n </div>\n )}\n </div>\n </DatepickerContext.Provider>\n );\n};\n\nexport const Datepicker = forwardRef(DatepickerRender);\n\nDatepicker.displayName = \"Datepicker\";\n"],"names":[],"mappings":"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"}