feat: add onSelect callback to SingleDatePicker and integrate with WeekPicker

This commit is contained in:
Astrian Zheng 2025-02-19 19:55:36 +11:00
parent a7e7cbe3fa
commit 92f22d1331
Signed by: Astrian
SSH Key Fingerprint: SHA256:rVnhx3DAKjujCwWE13aDl7uV6+9U1MvydLkNRXJrBiA
2 changed files with 24 additions and 6 deletions

View File

@ -4,14 +4,20 @@ import './app.scss'
export default () => { export default () => {
function onSelect(value) {
alert(`You select ${value.year}-${value.month}-${value.day}`)
}
return (<div className='app'> return (<div className='app'>
<div className="border"> <div className="border">
<WeekPicker value={{ <WeekPicker
year: 2025, value={{
month: 1, year: 2025,
day: 1 month: 1,
}} /> day: 1
}}
onSelect={onSelect}
/>
</div> </div>
</div>) </div>)
} }

View File

@ -5,6 +5,11 @@ import { getCalendarDates, getL10Weekday } from '../utils'
interface Props { interface Props {
value?: Date | { year: number, month: number, day: number } value?: Date | { year: number, month: number, day: number }
onSelect?: (date: {
year: number,
month: number,
day: number
}) => void
} }
/** /**
@ -16,8 +21,10 @@ interface Props {
* @param {Date | { year: number, month: number, day: number }} props.value - Control the selected * @param {Date | { year: number, month: number, day: number }} props.value - Control the selected
* date programmatically, including situations like provide a default value or control the selected * date programmatically, including situations like provide a default value or control the selected
* date by parent component. * date by parent component.
* @param {(date: { year: number, month: number, day: number }) => void} props.onSelect - A callback
* function that will be called when a date is selected inside the panel.
*/ */
export default ({ value }: Props) => { export default ({ value, onSelect }: Props) => {
const [currentMonth, setCurrentMonth] = useState(new Date().getMonth()) const [currentMonth, setCurrentMonth] = useState(new Date().getMonth())
const [currentYear, setCurrentYear] = useState(new Date().getFullYear()) const [currentYear, setCurrentYear] = useState(new Date().getFullYear())
const [selectedDate, setSelectedDate] = useState(new Date()) const [selectedDate, setSelectedDate] = useState(new Date())
@ -39,6 +46,11 @@ export default ({ value }: Props) => {
function selectDate(date: Date) { function selectDate(date: Date) {
setSelectedDate(date) setSelectedDate(date)
onSelect?.({
year: date.getFullYear(),
month: date.getMonth() + 1,
day: date.getDate()
})
} }
function skipToLastMonth() { function skipToLastMonth() {