"use client" import * as React from "react" import { fromDate, getLocalTimeZone, toCalendarDate, type CalendarDate, } from "@internationalized/date" import { parseDate as parseNaturalLanguage } from "chrono-node" import { CalendarIcon } from "lucide-react" import { Calendar } from "@/styles/aria-nova/ui/calendar" import { Field, FieldLabel } from "@/styles/aria-nova/ui/field" import { InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput, } from "@/styles/aria-nova/ui/input-group" import { Popover, PopoverTrigger } from "@/styles/aria-nova/ui/popover" function parseDate(value: string) { const date = parseNaturalLanguage(value) return date ? toCalendarDate(fromDate(date, getLocalTimeZone())) : undefined } function formatDate(calendarDate: CalendarDate | undefined) { if (!calendarDate) { return "" } const date = calendarDate?.toDate(getLocalTimeZone()) return date.toLocaleDateString("en-US", { day: "2-digit", month: "long", year: "numeric", }) } export function DatePickerNaturalLanguage() { const [open, setOpen] = React.useState(false) const [value, setValue] = React.useState("In 2 days") const [date, setDate] = React.useState(() => parseDate(value) ) return ( Schedule Date { setValue(e.target.value) const date = parseDate(e.target.value) if (date) { setDate(date) } }} onKeyDown={(e) => { if (e.key === "ArrowDown") { e.preventDefault() setOpen(true) } }} /> Select date { setDate(date) setValue(formatDate(date)) setOpen(false) }} />
Your post will be published on{" "} {formatDate(date)}.
) }