Skip to content

Commit 0ad7134

Browse files
committed
If date are ISO string must be converted to date
1 parent 08b4fd4 commit 0ad7134

3 files changed

Lines changed: 23 additions & 9 deletions

File tree

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@skillbill/reactlace",
3-
"version": "1.0.1",
3+
"version": "1.0.2",
44
"private": false,
55
"author": "skillbill",
66
"license": "MIT",

src/components/RLDatePicker/RLDatePicker.tsx

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -56,26 +56,40 @@ export const RLDatePicker = forwardRef<RLDatePickerRef, RLDatePickerProps>(
5656
[withTime]
5757
)
5858

59+
const toDate = useCallback((v: Date | Date[] | string | null | undefined): Date | Date[] | null | undefined => {
60+
if (!v) return v as null | undefined
61+
if (typeof v === 'string') {
62+
const d = new Date(v)
63+
return isNaN(d.getTime()) ? null : d
64+
}
65+
return v
66+
}, [])
67+
68+
const calendarValue = useMemo(() => toDate(value) ?? null, [value, toDate])
69+
5970
const formattedValue = useMemo((): string | undefined => {
6071
if (!value) return undefined
6172

62-
if (Array.isArray(value)) {
73+
const resolved = toDate(value)
74+
if (!resolved) return undefined
75+
76+
if (Array.isArray(resolved)) {
6377
if (selectionMode === 'range') {
64-
const [startDate, endDate] = value
78+
const [startDate, endDate] = resolved
6579
const formattedStartDate = formatDate(startDate)
6680
const formattedEndDate = endDate ? formatDate(endDate) : ''
6781
return `${formattedStartDate} ~ ${formattedEndDate}`
6882
} else if (selectionMode === 'multiple') {
69-
return value.map((date) => formatDate(date)).join(', ')
83+
return resolved.map((date) => formatDate(date)).join(', ')
7084
}
7185
}
7286

73-
if (value instanceof Date) {
74-
return formatDate(value)
87+
if (resolved instanceof Date) {
88+
return formatDate(resolved)
7589
}
7690

7791
return ''
78-
}, [value, selectionMode, formatDate])
92+
}, [value, selectionMode, formatDate, toDate])
7993

8094
const handleDateSelect = useCallback(
8195
(date: Date | Date[] | null) => {
@@ -141,7 +155,7 @@ export const RLDatePicker = forwardRef<RLDatePickerRef, RLDatePickerProps>(
141155
{errorMessage && <ErrorMessage>{errorMessage}</ErrorMessage>}
142156
</div>
143157
<Calendar
144-
value={value}
158+
value={calendarValue}
145159
onChange={(e) => handleDateSelect(e.value as Date | Date[] | null)}
146160
dateFormat="yy/mm/dd"
147161
inline

src/components/RLDatePicker/types.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import type { RLInputRuleType } from '../utils/types'
22

33
export interface RLDatePickerProps {
44
className?: string
5-
value?: Date | Date[] | null
5+
value?: Date | Date[] | string | null
66
onChange?: (value: Date | Date[] | null) => void
77
name?: string
88
label: string

0 commit comments

Comments
 (0)