diff options
Diffstat (limited to 'packages/web-util/src/forms/InputAbsoluteTime.tsx')
-rw-r--r-- | packages/web-util/src/forms/InputAbsoluteTime.tsx | 61 |
1 files changed, 39 insertions, 22 deletions
diff --git a/packages/web-util/src/forms/InputAbsoluteTime.tsx b/packages/web-util/src/forms/InputAbsoluteTime.tsx index ee18e5592..f5fd4fc50 100644 --- a/packages/web-util/src/forms/InputAbsoluteTime.tsx +++ b/packages/web-util/src/forms/InputAbsoluteTime.tsx @@ -1,35 +1,50 @@ import { AbsoluteTime } from "@gnu-taler/taler-util"; -import { InputLine } from "./InputLine.js"; -import { Fragment, VNode, h } from "preact"; import { format, parse } from "date-fns"; -import { Dialog } from "./Dialog.js"; -import { Calendar } from "./Calendar.js"; +import { Fragment, VNode, h } from "preact"; import { useState } from "preact/hooks"; -import { useField } from "./useField.js"; +import { Calendar } from "./Calendar.js"; +import { Dialog } from "./Dialog.js"; import { UIFormProps } from "./FormProvider.js"; -import { TimePicker } from "./TimePicker.js"; +import { InputLine } from "./InputLine.js"; +import { useField } from "./useField.js"; +import { noHandlerPropsAndNoContextForField } from "./InputArray.js"; export function InputAbsoluteTime<T extends object, K extends keyof T>( - props: { pattern?: string } & UIFormProps<T, K>, + properties: { pattern?: string } & UIFormProps<T, K>, ): VNode { - const pattern = props.pattern ?? "dd/MM/yyyy"; - const [open, setOpen] = useState(false) - const { value, onChange } = useField<T, K>(props.name); + const pattern = properties.pattern ?? "dd/MM/yyyy"; + const [open, setOpen] = useState(false); + + //FIXME: remove deprecated + const fieldCtx = useField<T, K>(properties.name); + const { value, onChange } = + properties.handler ?? fieldCtx ?? noHandlerPropsAndNoContextForField(properties.name); return ( <Fragment> - <InputLine<T, K> type="text" after={{ type: "button", onClick: () => { - setOpen(true) + setOpen(true); }, // icon: <CalendarIcon class="h-6 w-6" />, children: ( - <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="w-6 h-6"> - <path stroke-linecap="round" stroke-linejoin="round" d="M6.75 3v2.25M17.25 3v2.25M3 18.75V7.5a2.25 2.25 0 012.25-2.25h13.5A2.25 2.25 0 0121 7.5v11.25m-18 0A2.25 2.25 0 005.25 21h13.5A2.25 2.25 0 0021 18.75m-18 0v-7.5A2.25 2.25 0 015.25 9h13.5A2.25 2.25 0 0121 11.25v7.5" /> - </svg>) + <svg + xmlns="http://www.w3.org/2000/svg" + fill="none" + viewBox="0 0 24 24" + stroke-width="1.5" + stroke="currentColor" + class="w-6 h-6" + > + <path + stroke-linecap="round" + stroke-linejoin="round" + d="M6.75 3v2.25M17.25 3v2.25M3 18.75V7.5a2.25 2.25 0 012.25-2.25h13.5A2.25 2.25 0 0121 7.5v11.25m-18 0A2.25 2.25 0 005.25 21h13.5A2.25 2.25 0 0021 18.75m-18 0v-7.5A2.25 2.25 0 015.25 9h13.5A2.25 2.25 0 0121 11.25v7.5" + /> + </svg> + ), }} converter={{ //@ts-ignore @@ -51,17 +66,19 @@ export function InputAbsoluteTime<T extends object, K extends keyof T>( : format(v.t_ms, pattern); }, }} - {...props} + {...properties} /> - {open && + {open && ( <Dialog onClose={() => setOpen(false)}> - <Calendar value={value as AbsoluteTime ?? AbsoluteTime.now()} + <Calendar + value={(value as AbsoluteTime) ?? AbsoluteTime.now()} onChange={(v) => { - onChange(v as any) - setOpen(false) - }} /> + onChange(v as any); + setOpen(false); + }} + /> </Dialog> - } + )} {/* {open && <Dialog onClose={() => setOpen(false)} > <TimePicker value={value as AbsoluteTime ?? AbsoluteTime.now()} |