2.9 KiB
| name | description |
|---|---|
| date-time-pickers | Use RhfDateField and RhfTimeField (shadcn Calendar/Popover-based) for all date and time inputs in forms. Use when: adding date fields, adding time fields, replacing `type="date"` or `type="time"` RhfTextField inputs, building any form that captures a date or time value. |
Date & Time Pickers
Always use the shadcn-based picker components for date and time fields. Never use <RhfTextField type="date"> or <RhfTextField type="time">.
Components
| Use For | Component | Import |
|---|---|---|
| Date fields (YYYY-MM-DD) | RhfDateField |
@/shared/components/form |
| Time fields (HH:MM:SS) | RhfTimeField |
@/shared/components/form |
RhfDateField
Renders a shadcn Calendar inside a Popover. Value is a string in "YYYY-MM-DD" format.
import { RhfDateField } from "@/shared/components/form"
<RhfDateField name="check_in_date" label="Check-in Date" />
Schema type: z.string().optional() (stores "YYYY-MM-DD")
Default value: "" for empty, or new Date().toISOString().split("T")[0] for today.
mapToFormValues: d.check_in_date ? d.check_in_date.split("T")[0] : ""
mapFormToPayload: values.check_in_date || undefined
RhfTimeField
Renders an HH / MM / SS spinner inside a Popover. Value is a string in "HH:MM:SS" format.
import { RhfTimeField } from "@/shared/components/form"
// With seconds (default)
<RhfTimeField name="check_in_time" label="Check-in Time" withSeconds />
// Without seconds
<RhfTimeField name="check_in_time" label="Check-in Time" />
Props:
withSeconds?: boolean— show the SS spinner (defaulttrue)placeholder?: string— trigger button placeholder text
Schema type: z.string().optional() (stores "HH:MM:SS" or "HH:MM")
Default value for current time:
(() => {
const n = new Date()
return `${String(n.getHours()).padStart(2,"0")}:${String(n.getMinutes()).padStart(2,"0")}:${String(n.getSeconds()).padStart(2,"0")}`
})()
mapToFormValues (API returns "HH:MM" or ISO datetime):
- If ISO:
d.check_in_time ? d.check_in_time.split("T")[1]?.slice(0, 8) ?? "" : "" - If plain time string:
d.check_in_time ?? ""
mapFormToPayload: values.check_in_time || undefined
Underlying Controls (non-RHF use)
If you need to use the pickers outside of RHF:
import { DatePickerField, TimePickerField } from "@/shared/components/form"
<DatePickerField value={date} onChange={setDate} placeholder="Select date" />
<TimePickerField value={time} onChange={setTime} withSeconds />
File Locations
- Control:
apps/dashboard/shared/components/form/controls/date-picker-field.tsx - Control:
apps/dashboard/shared/components/form/controls/time-picker-field.tsx - RHF wrapper:
apps/dashboard/shared/components/form/fields/rhf-date-field.tsx - RHF wrapper:
apps/dashboard/shared/components/form/fields/rhf-time-field.tsx - Exports:
apps/dashboard/shared/components/form/index.ts