Skip to content

Commit 52105bc

Browse files
authored
Merge pull request #1 from mariovalney/master
Added "onClear" callback
2 parents 7eee201 + b10bcc9 commit 52105bc

File tree

5 files changed

+20
-8
lines changed

5 files changed

+20
-8
lines changed

README.md

+5-1
Original file line numberDiff line numberDiff line change
@@ -93,13 +93,16 @@ const DemoComponent = () => {
9393
const handleChange = (selectedDate: Date) => {
9494
console.log(selectedDate)
9595
}
96+
const handleClear = () => {
97+
console.log('Date is cleared!')
98+
}
9699
const handleClose = (state: boolean) => {
97100
setShow(state)
98101
}
99102

100103
return (
101104
<div>
102-
<Datepicker options={options} onChange={handleChange} show={show} setShow={handleClose} />
105+
<Datepicker options={options} onChange={handleChange} onClear={handleClear} show={show} setShow={handleClose} />
103106
</div>
104107
)
105108
}
@@ -179,6 +182,7 @@ const DemoComponent = () => {
179182
- value?: Date
180183
- options?: [IOptions](###IOptions)
181184
- onChange?: (date: Date) => void
185+
- onClear?: () => void
182186
- show: boolean
183187
- setShow: (show: boolean) => void
184188
- classNames?: string

demo-app/pages/index.tsx

+2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import type { NextPage } from "next"
22
import { useState } from "react"
33
import DatePicker from "tailwind-datepicker-react"
4+
// import DatePicker from "../../dist/Components/DatePicker"
45
import ThemeSelector from "../components/ThemeSelector"
56
import { IOptions } from "tailwind-datepicker-react/types/Options"
67

@@ -27,6 +28,7 @@ const Home: NextPage = () => {
2728
selected: "",
2829
},
2930
}
31+
3032
return (
3133
<div className="flex flex-col items-center w-full h-full gap-5 mt-20">
3234
<ThemeSelector />

src/Components/Buttons.tsx

+5-2
Original file line numberDiff line numberDiff line change
@@ -98,15 +98,18 @@ export const ButtonToday = () => {
9898
}
9999

100100
export const ButtonClear = () => {
101-
const { setShowSelectedDate, options } = useContext(DatePickerContext)
101+
const { setShowSelectedDate, onClear, options } = useContext(DatePickerContext)
102102
return (
103103
<button
104104
type="button"
105105
className={twMerge(
106106
"w-full px-5 py-2 text-sm font-medium text-center text-gray-900 bg-white border border-gray-300 rounded-lg dark:text-white dark:bg-gray-700 dark:border-gray-600 hover:bg-gray-100 dark:hover:bg-gray-600 focus:ring-4 focus:ring-blue-300",
107107
options?.theme?.clearBtn
108108
)}
109-
onClick={() => setShowSelectedDate(false)}
109+
onClick={() => {
110+
setShowSelectedDate(false);
111+
if (onClear) onClear()
112+
}}
110113
>
111114
{options?.clearBtnText}
112115
</button>

src/Components/DatePicker.tsx

+3-2
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,16 @@ export interface IDatePickerProps {
1010
children?: ReactElement | ReactNode
1111
options?: IOptions
1212
onChange?: (date: Date) => void
13+
onClear?: () => void
1314
show: boolean
1415
setShow: (show: boolean) => void
1516
classNames?: string
1617
selectedDateState?: [Date, (date: Date) => void]
1718
}
1819

19-
const DatePicker = ({ value, children, options, onChange, classNames, show, setShow, selectedDateState }: IDatePickerProps) => (
20+
const DatePicker = ({ value, children, options, onChange, onClear, classNames, show, setShow, selectedDateState }: IDatePickerProps) => (
2021
<div className={twMerge("w-full", classNames)}>
21-
<DatePickerProvider options={options} onChange={onChange} show={show} setShow={setShow} selectedDateState={selectedDateState}>
22+
<DatePickerProvider options={options} onChange={onChange} onClear={onClear} show={show} setShow={setShow} selectedDateState={selectedDateState}>
2223
<DatePickerMain value={value} options={options}>
2324
{children}
2425
</DatePickerMain>

src/Components/DatePickerProvider.tsx

+5-3
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ interface IDatePickerContext {
1515
setShowSelectedDate: Dispatch<SetStateAction<boolean>>
1616
selectedMonth: number
1717
selectedYear: number
18+
onClear: () => void
1819
getFormattedDate: (date: Date | number, formatOptions?: Intl.DateTimeFormatOptions | null | undefined) => string
1920
}
2021

@@ -32,20 +33,21 @@ export const DatePickerContext = createContext<IDatePickerContext>({
3233
setShowSelectedDate: () => {},
3334
selectedMonth: 0,
3435
selectedYear: 0,
36+
onClear: () => {},
3537
getFormattedDate: () => "",
3638
})
3739

3840
interface IDatePickerProviderProps {
3941
children: ReactElement
4042
options?: IOptions
4143
onChange?: (date: Date) => void
44+
onClear: () => void
4245
show: boolean
4346
setShow: (show: boolean) => void
4447
selectedDateState?: [Date, (date: Date) => void]
4548
}
4649

47-
const DatePickerProvider = ({ children, options: customOptions, onChange, show, setShow, selectedDateState }: IDatePickerProviderProps) => {
48-
50+
const DatePickerProvider = ({ children, options: customOptions, onChange, onClear, show, setShow, selectedDateState }: IDatePickerProviderProps) => {
4951
const options = { ...defaultOptions, ...customOptions }
5052
const [view, setView] = useState<Views>("days")
5153
const [selectedDate, setSelectedDate] = selectedDateState || useState<Date>(options?.defaultDate || new Date())
@@ -67,7 +69,7 @@ const DatePickerProvider = ({ children, options: customOptions, onChange, show,
6769

6870
return (
6971
<DatePickerContext.Provider
70-
value={{ options, view, setView, show, setShow, selectedDate, changeSelectedDate, showSelectedDate, setShowSelectedDate, selectedMonth, selectedYear, getFormattedDate }}
72+
value={{ options, view, setView, show, setShow, selectedDate, changeSelectedDate, showSelectedDate, setShowSelectedDate, selectedMonth, selectedYear, onClear, getFormattedDate }}
7173
>
7274
{children}
7375
</DatePickerContext.Provider>

0 commit comments

Comments
 (0)