From 3c15bdb80fd5406f3cfa078bf10f5e1a24287cff Mon Sep 17 00:00:00 2001 From: Stefano Pigozzi Date: Fri, 10 Jun 2022 05:21:02 +0200 Subject: [PATCH] Fix datetime inputs --- components/ActionEventList.tsx | 6 ++- components/editable/EditableDateTimeLocal.tsx | 15 ++++++- components/editable/EditableEventDuration.tsx | 43 +++++++++++++++++++ components/extensions/FestaMoment.tsx | 21 +++++++-- pages/events/[slug].tsx | 17 +++++++- utils/dateFields.ts | 20 +++++++++ 6 files changed, 114 insertions(+), 8 deletions(-) create mode 100644 components/editable/EditableEventDuration.tsx create mode 100644 utils/dateFields.ts diff --git a/components/ActionEventList.tsx b/components/ActionEventList.tsx index cc9720d..cc5d663 100644 --- a/components/ActionEventList.tsx +++ b/components/ActionEventList.tsx @@ -28,7 +28,11 @@ export function ActionEventList(props: HTMLProps) { } else if (!data) { - contents = + contents = <> +

+ +

+ } else { if (data.length === 0) { diff --git a/components/editable/EditableDateTimeLocal.tsx b/components/editable/EditableDateTimeLocal.tsx index 50412ec..fc117a8 100644 --- a/components/editable/EditableDateTimeLocal.tsx +++ b/components/editable/EditableDateTimeLocal.tsx @@ -1,12 +1,23 @@ import { HTMLProps } from "react"; +import { toDatetimeLocal } from "../../utils/dateFields"; import { FestaMoment } from "../extensions/FestaMoment"; import { Editable } from "./Editable"; -export function EditableDateTimeLocal(props: HTMLProps & { value: Date }) { + +export type EditableDateTimeLocalProps = Omit, "value" | "max" | "min"> & { value: Date | null, max?: Date, min?: Date } + + +export function EditableDateTimeLocal(props: EditableDateTimeLocalProps) { return ( + } preview={ diff --git a/components/editable/EditableEventDuration.tsx b/components/editable/EditableEventDuration.tsx new file mode 100644 index 0000000..ee1a7c1 --- /dev/null +++ b/components/editable/EditableEventDuration.tsx @@ -0,0 +1,43 @@ +import { faCalendar, faChevronRight } from "@fortawesome/free-solid-svg-icons"; +import { useDefinedContext } from "../../utils/definedContext"; +import { FestaIcon } from "../extensions/FestaIcon"; +import { FormFromTo } from "../form/FormFromTo"; +import { EditableDateTimeLocal, EditableDateTimeLocalProps } from "./EditableDateTimeLocal"; +import { EditingContext } from "./EditingContext"; + + +type EditableEventDurationProps = { + startProps: EditableDateTimeLocalProps, + endProps: EditableDateTimeLocalProps, +} + + +export function EditableEventDuration({ startProps, endProps }: EditableEventDurationProps) { + const [editing,] = useDefinedContext(EditingContext) + + return ( + + } + start={ + + } + connector={ + + } + end={ + + } + /> + ) +} \ No newline at end of file diff --git a/components/extensions/FestaMoment.tsx b/components/extensions/FestaMoment.tsx index 83559ac..ccf1366 100644 --- a/components/extensions/FestaMoment.tsx +++ b/components/extensions/FestaMoment.tsx @@ -1,7 +1,7 @@ import { useTranslation } from "next-i18next" type FestaMomentProps = { - date: Date, + date: Date | null, } /** @@ -10,7 +10,7 @@ type FestaMomentProps = { export function FestaMoment({ date }: FestaMomentProps) { const { t } = useTranslation() - if (Number.isNaN(date.getTime())) { + if (!date || Number.isNaN(date.getTime())) { return ( {t("dateNaN")} @@ -18,9 +18,22 @@ export function FestaMoment({ date }: FestaMomentProps) { ) } + const now = new Date() + const machine = date.toISOString() + + let human + // If the date is less than 24 hours away, display just the time + if (date.getTime() - now.getTime() < 86_400_000) { + human = date.toLocaleTimeString() + } + // Otherwise, display the full date + else { + human = date.toLocaleString() + } + return ( -