From af8aa083a1b9922f4b9642d3fb66e38d7d2827d8 Mon Sep 17 00:00:00 2001 From: nezouse Date: Thu, 21 Mar 2024 15:48:44 +0100 Subject: [PATCH 1/4] =?UTF-8?q?=F0=9F=A6=82=20Update=20create=20wave=20ui?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../applications/create/steps/mainDetails.tsx | 6 +- src/app/waves/create/createWaveAction.ts | 4 +- src/app/waves/create/createWaveForm.tsx | 10 +- src/app/waves/create/createWaveSchema.ts | 15 -- src/app/waves/create/steps/mainDetails.tsx | 108 ++++++------- src/app/waves/create/steps/timeline.tsx | 150 ++++++++++++++++++ src/components/ui/form.tsx | 6 +- src/constants/validationSchemas.ts | 3 +- .../unit/validation/validationSchemas.test.ts | 22 +-- 9 files changed, 218 insertions(+), 106 deletions(-) delete mode 100644 src/app/waves/create/createWaveSchema.ts create mode 100644 src/app/waves/create/steps/timeline.tsx diff --git a/src/app/waves/[waveId]/applications/create/steps/mainDetails.tsx b/src/app/waves/[waveId]/applications/create/steps/mainDetails.tsx index 192366d0..06f48ea4 100644 --- a/src/app/waves/[waveId]/applications/create/steps/mainDetails.tsx +++ b/src/app/waves/[waveId]/applications/create/steps/mainDetails.tsx @@ -37,11 +37,7 @@ const FORM_FIELD_PARAMS = { export const mainDetailsSchema = z.object({ imageId: z.string().optional(), - name: specificLengthStringSchema( - "Project name", - FORM_FIELD_PARAMS.name.min, - FORM_FIELD_PARAMS.name.max, - ), + name: specificLengthStringSchema("Project name", FORM_FIELD_PARAMS.name), entityName: z.string(), duration: z.string(), budget: positiveNumberSchema("Project budget"), diff --git a/src/app/waves/create/createWaveAction.ts b/src/app/waves/create/createWaveAction.ts index bbc6aa61..52db0c60 100644 --- a/src/app/waves/create/createWaveAction.ts +++ b/src/app/waves/create/createWaveAction.ts @@ -4,9 +4,7 @@ import { revalidatePath } from "next/cache"; import { redirect } from "next/navigation"; import { insertWave } from "@/drizzle/queries/waves"; -import { createWaveSchema } from "./createWaveSchema"; - -export async function createWaveAction(data: createWaveSchema) { +export async function createWaveAction(data: any) { const [{ id }] = await insertWave({ name: data.waveName, startsAt: data.duration.from, diff --git a/src/app/waves/create/createWaveForm.tsx b/src/app/waves/create/createWaveForm.tsx index ddf25daf..edcd3600 100644 --- a/src/app/waves/create/createWaveForm.tsx +++ b/src/app/waves/create/createWaveForm.tsx @@ -1,11 +1,11 @@ import { BackButton } from "@/components/ui/backButton"; import { PageTitle } from "@/components/ui/pageTitle"; import { Stepper } from "@/components/ui/stepper"; -import { CampaignIcon } from "@/components/icons/campaignIcon"; import { ClockIcon } from "@/components/icons/clockIcon"; import { ComputerIcon } from "@/components/icons/computerIcon"; import { MainDetails } from "./steps/mainDetails"; +import { Timeline } from "./steps/timeline"; const stepsConfig = [ { name: "Main details", icon: }, @@ -13,10 +13,6 @@ const stepsConfig = [ name: "Timeline", icon: , }, - { - name: "Additional info", - icon: , - }, ]; export function CreateWaveForm() { @@ -26,9 +22,9 @@ export function CreateWaveForm() { Create new wave - - + + ); diff --git a/src/app/waves/create/createWaveSchema.ts b/src/app/waves/create/createWaveSchema.ts deleted file mode 100644 index b4283d22..00000000 --- a/src/app/waves/create/createWaveSchema.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { errorMessages } from "@/constants/errorMessages"; -import { z } from "zod"; - -export const createWaveSchema = z.object({ - waveName: z - .string() - .min(3, { message: errorMessages.minLength("Wave name", 3) }) - .max(50, { message: errorMessages.maxLength("Wave name", 50) }), - duration: z.object({ - from: z.date({ required_error: errorMessages.required("Start date") }), - to: z.date({ required_error: errorMessages.required("End date") }), - }), -}); - -export type createWaveSchema = z.infer; diff --git a/src/app/waves/create/steps/mainDetails.tsx b/src/app/waves/create/steps/mainDetails.tsx index 5d43feef..68cefd60 100644 --- a/src/app/waves/create/steps/mainDetails.tsx +++ b/src/app/waves/create/steps/mainDetails.tsx @@ -1,19 +1,15 @@ "use client"; +import { specificLengthStringSchema } from "@/constants/validationSchemas"; import { zodResolver } from "@hookform/resolvers/zod"; import { useForm } from "react-hook-form"; +import { z } from "zod"; -import { - addDays, - formatDate, - formatDateRange, - getStartOfDate, -} from "@/lib/dates"; import { Button } from "@/components/ui/button"; -import { Calendar } from "@/components/ui/calendar"; import { Form, FormControl, + FormCounter, FormField, FormFooter, FormItem, @@ -21,27 +17,38 @@ import { FormMessage, } from "@/components/ui/form"; import { Input } from "@/components/ui/input"; -import { - Popover, - PopoverContent, - PopoverTrigger, -} from "@/components/ui/popover"; -import { CalendarIcon } from "@/components/icons/calendarIcon"; +import { Textarea } from "@/components/ui/textarea"; +import { ArrowIcon } from "@/components/icons/arrowIcon"; import { createWaveAction } from "../createWaveAction"; -import { createWaveSchema } from "../createWaveSchema"; -export function MainDetails() { - const todayDate = getStartOfDate(new Date()); +const FORM_FIELD_PARAMS = { + waveName: { + min: 3, + max: 20, + }, + waveSummary: { + min: 3, + max: 160, + }, +}; + +export const mainDetailsSchema = z.object({ + waveName: specificLengthStringSchema("Wave name", FORM_FIELD_PARAMS.waveName), + waveSummary: specificLengthStringSchema( + "Wave summary", + FORM_FIELD_PARAMS.waveSummary, + ), +}); - const form = useForm({ - resolver: zodResolver(createWaveSchema), +export type mainDetailsSchema = z.infer; + +export function MainDetails() { + const form = useForm({ + resolver: zodResolver(mainDetailsSchema), defaultValues: { waveName: "", - duration: { - from: todayDate, - to: addDays(todayDate, 30), - }, + waveSummary: "", }, }); @@ -57,11 +64,15 @@ export function MainDetails() { control={form.control} name="waveName" render={({ field }) => ( - + Wave name + )} @@ -69,49 +80,26 @@ export function MainDetails() { ( - - Wave duration - - - - - - - - date < todayDate} - /> - - + + Wave summary + +