މި ލިޔުމަކީ ސަރވޭޖޭއެސް އިން ސްޕޮންސަރ ކޮށްފައިވާ ލިޔުމެކެވެ ދުވަހަކުވެސް އަޑުގަދަކޮށް މަޝްވަރާ ނުކޮށް ގިނަ ރިއެކްޓް ޑިވެލޮޕަރުން ހިއްސާކުރާ ނަފްސާނީ މޮޑެލްއެއް އެބައޮތެވެ. އެއީ ފޯމްތަކަކީ އަބަދުވެސް ކޮމްޕޯނެންޓްތަކެއް ކަމަށް ބެލެވެއެވެ. މާނައަކީ މިފަދަ ސްޓޭކެއް:

ލޯކަލް ސްޓޭޓަށް ރިއެކްޓް ހޫކް ފޯމް (މިނިމަލް ރީ-ރެންޑަރސް، އެރގޮނޮމިކް ފީލްޑް ރެޖިސްޓްރޭޝަން، އިމްޕެރެޓިވް އިންޓަރެކްޝަން) . ވެލިޑޭޝަން އަށް ޒޯޑް (އިންޕުޓް ކަރެކްޓްނެސް، ބައުންޑަރީ ވެލިޑޭޝަން، ޓައިޕް-ސޭފް ޕާސިންގ) އެވެ. ބެކްއެންޑަށް ރިއެކްޓް ކިއުއަރީ: ސަބްމިޝަން، ރީޓްރައިސް، ކެޝިންގ، ސަރވަރ ސިންކް، އަދި މިނޫންވެސް ކަންތައްތައް.

އަދި ގިނަ ފޯމްތަކަށް — ތިބާގެ ލޮގިން ސްކްރީންތަކަށް، ތިބާގެ ސެޓިންގސް ޕޭޖްތަކަށް، ތިބާގެ ސީއާރުޔޫޑީ މޮޑަލްސްތަކަށް — މިއީ ވަރަށް ރަނގަޅަށް މަސައްކަތްކުރާ ކަމެކެވެ. ކޮންމެ އެއްޗަކުން ވެސް އޭގެ މަސައްކަތް ކުރާއިރު، އެމީހުން ކޮމްޕޯސް ކުރަނީ ސާފުކޮށް، އަދި ތިމާގެ އެޕްލިކޭޝަންގެ ބައިތަކަށް ކުރިއަށް ދެވޭނެ ކަމަށާއި އެއީ ހަގީގަތުގައި ތިމާގެ އުފެއްދުން ތަފާތު ކުރާ ބައިތަކަށެވެ. އެކަމަކު ކޮންމެ ފަހަރަކު ފޯމެއް ޖަމާވާން ފަށަނީ ކުރީގެ ޖަވާބުތަކަށް ބަރޯސާވާ ވިޒިބިލިޓީ ރޫލްސް ނުވަތަ ތިން ދާއިރާއެއްގެ ތެރެއިން ކެސްކޭޑް ކުރާ ޑައިރެވިޑް ވެލިއުސް ފަދަ ތަކެތި. ފަހަރެއްގައި ދުއްވާ ޖުމްލައަކަށް ބަލައިގެން ދޫކޮށްލަން ނުވަތަ ދައްކަން ޖެހޭ މުޅި ޞަފްޙާތައް ވެސް ވެދާނެއެވެ. ފުރަތަމަ ކޮންޑިޝަނަލް ޔޫސްވޮޗް އާއި އިންލައިން ބްރާންޗަކުން ހެންޑްލް ކުރާއިރު، އެއީ ރަނގަޅު ކަމެކެވެ. ދެން އަނެއްކާ. ދެން ތިޔަ ހޯދަނީ ސުޕަރރިފައިން އަށް ތިބާގެ ޒޯޑް ސްކީމާއަށް އާންމު ގޮތެއްގައި ފާޅުނުކުރެވޭ ކްރޮސް ފީލްޑް އުސޫލުތައް އެންކޯޑް ކުރުމަށެވެ. ދެން، ސްޓެޕް ނެވިގޭޝަން ބިޒްނަސް ލޮޖިކް ލީކުވާން ފަށައެވެ. ކޮންމެވެސް ހިސާބަކުން ތިމާ ބިނާކޮށްފައިވާ އެއްޗެއް ބަލާލުމުން އެ ފޯމަކީ މިހާރު ހަގީގަތުގައި ޔޫއައިއެއް ނޫންކަން ވިސްނޭނެއެވެ. އެއީ ގިނައިން ޑިސިޝަން ޕްރޮސެސްއެއް، އަދި ކޮމްޕޮނެންޓް ޓްރީ އަކީ ހަމަ ދިމާވި ގޮތަކަށް ރައްކާކުރި ތަނެވެ. މިއީ އަޅުގަނޑަށް ހީވާގޮތުން ރިއެކްޓްގައި ފޯމްތަކުގެ ނަފްސާނީ މޮޑެލް ރޫޅިގެންދާ ތަން، އަދި އެއީ ހަގީގަތުގައި އެއްވެސް މީހެއްގެ ކުށެއް ނޫން. އާރްއެޗްއެފް + ޒޯޑް ސްޓޭކް އަކީ ޑިޒައިން ކުރި އެއްޗަކަށް މޮޅު އެއްޗެކެވެ. މައްސަލައަކީ، އޭގެ އެބްސްޓްރެކްޝަންތައް މައްސަލައާ ގުޅޭ ހިސާބުން ފާއިތުވެގެން ގޮސް އަޅުގަނޑުމެން އެ ބޭނުން ކުރަމުން ގެންދަން ފަށަނީ، ބަދަލުގެ ގޮތުގައި މުޅިން ފޯމްތަކާ މެދު ވިސްނުމަށް ތަފާތު ގޮތެއް ބޭނުންވާތީ އެވެ. މި ލިޔުމަކީ އެ ބަދަލާ ބެހޭ ލިޔުމެކެވެ. މިކަން ދައްކާލުމަށްޓަކައި، އަޅުގަނޑުމެން ދެފަހަރު ސީދާ އެއް މަލްޓި-ސްޓެޕް ފޯމް ބިލްޑް ކުރާނަމެވެ:

ހުށަހެޅުމަށް ރިއެކްޓް ހޫކް ފޯމް + ޒޯޑް ރިއެކްޓް ކިއުއަރީއަށް ވަޔަރ ކޮށްފައި ހުރުމާއެކު، ފޯމެއް ކޮމްޕޮނެންޓް ޓްރީއެއްގެ ގޮތުގައި ބެލުމުގެ ބަދަލުގައި ޑޭޓާއެއްގެ ގޮތުގައި — ސާދާ ޖޭއެސްއޯއެން ސްކީމާއެއް — ސަރވޭޖޭއެސް އާއެކު.

ހަމަ ރިކުއަރމަންޓްސް، ހަމަ ކޮންޑިޝަނަލް ލޮޖިކް، އެއް އެޕީއައި ކޯލް ނިމުމުގައި. ދެން އަޅުގަނޑުމެން ސީދާ ކޮން އެއްޗެއް ބަދަލުވީ ކޮން އެއްޗެއްތޯއާއި، ތިބީ ކޮން އެއްޗެއްތޯ މެޕްކޮށް، ބޭނުންކުރަންވީ ކޮން މޮޑެލްއެއްތޯ، އަދި ކޮން އިރަކު ބޭނުންކުރަންވީތޯ ނިންމުމަށް އަމަލީ ގޮތެއް ކަނޑައަޅާނަމެވެ. އަޅުގަނޑުމެން މި ބިނާކުރާ ފޯމު:

މި ފޯމުގައި ބޭނުންކުރާނީ 4 ފިޔަވަހީގެ ފްލޯއެކެވެ: ފިޔަވަޅު 1: ތަފްސީލު

ފުރަތަމަ ނަން (އެކަށީގެންވަނީ)، އީމެއިލް (ކޮންމެހެން ބޭނުންވާ، ސައްހަ ފޯމެޓް) އެވެ.

ފިޔަވަޅު 2: ތަރުތީބުކުރުން

ޔުނިޓް އަގު، ޢަދަދު، ޓެކްސް ރޭޓް، އުފެދިފައިވަނީ: ސަބްޓޯޓަލް، ޓެކްސް، ޖުމްލަ...

3 ވަނަ ފިޔަވަޅު: އެކައުންޓް އެންޑް ފީޑްބެކް

އެކައުންޓެއް އެބައޮތްތަ؟ (އާނ/ނޫން) އާނ → ޔޫޒަރނޭމް + ޕާސްވޯޑް ނަމަ، މިދެކަންތައްވެސް ބޭނުންވާނެއެވެ. ނޫން → އީމެއިލް މިހާރުވެސް 1 ވަނަ ފިޔަވަހީގައި އެއްކޮށްފައިވާނަމަ.

ހިތްހަމަޖެހުމުގެ ރޭޓިންގ (1–5) ≥ 4 ނަމަ → އަހާ “ކަމުދިޔައީ ކޮން އެއްޗެއް ހެއްޔެވެ؟” ≤ 2 ނަމަ → އަހާ “އަހަރެމެންނަށް ރަނގަޅު ކުރެވޭނީ ކޮންކަމެއް ހެއްޔެވެ؟”

4 ވަނަ ފިޔަވަޅު: ރިވިއުކުރުން

ފެންނަނީ ހަމައެކަނި ޖުމްލަ >= 100 ނަމައެވެ ފައިނަލް ހުށަހެޅުން.

މިއީ ހައްދުފަހަނަޅާފައިވާ ކަމެއް ނޫނެވެ. އެކަމަކު އެއީ އާކިޓެކްޗަރަލް ތަފާތުތައް ހާމަކުރަން ފުދޭވަރުގެ ކަމެކެވެ. 1 ވަނަ ބައި: ކޮމްޕޮނެންޓް ޑްރައިވަން (ރިއެކްޓް ހޫކް ފޯމް + ޒޯޑް) އިންސްޓޯލް ކުރުން npm އިންސްޓޯލް ރިއެކްޓް-ހޫކް-ފޯމް ޒޯޑް @hookform/resolvers @tanstack/react-query

ޒޯޑް ސްކީމާ އެވެ ޒޯޑް ސްކީމާ އިން ފަށަމާ ހިނގާ، ސަބަބަކީ އެއީ އާންމުކޮށް ފޯމްގެ ބައްޓަން ގާއިމްވާ ތަނެވެ. ފުރަތަމަ ދެ ފިޔަވަޅަށް — ޕާސަނަލް ޑީޓެއިލްސް އަދި އޯޑަރ އިންޕުޓްސް — ހުރިހާ ކަމެއްވެސް ސީދާ: ބޭނުންވާ ސްޓްރިންގްސް، މިނިމަމްސް އާއި އެކު ނަންބަރުތަކާއި، އެނަމް އެއް. ޝައުގުވެރި ބައި ފެށެނީ ޝަރުޠު ހަމަވާ އުސޫލުތައް ފާޅުކުރަން އުޅުމުންނެވެ.

"ޒޯޑް" އިން { z } އިމްޕޯޓްކުރުން؛

export const formSchema = z.object({ firstName: z.string().min(1, "އެކަށީގެންވާ"), އީމެއިލް: z.string().email("ސައްހަ ނޫން އީމެއިލް"), އަގު: z.number().min(0), ކިއުއަންޓީ: z.number().min(1), taxRate: z.number(), hasAccount: z.enum(["Yes", "No"]), username: z.string().optional(), ޕާސްވޯޑް: z.string().optional(), ހިތްހަމަޖެހުން: z.number().min(1).max(5), positiveFeedback: z.string().optional(), improvementFeedback: z.string().optional(),}).superRefine((ޑޭޓާ، ctx) => { if (data.hasAccount === "Yes") { if (!data.username) { ctx.addIssue({ ކޯޑް: "ކަސްޓަމް"، މަގު: ["ޔޫޒަރނަން"], މެސެޖް: "އެކަށީގެންވާ" });

if (data.satisfaction >= 4 && !data.positiveFeedback) { ctx.addIssue({ ކޯޑް: "ކަސްޓަމް", path: ["ޕޮޒިޓިވްފީޑްބެކް"], message: "ކަމުދިޔަ އެއްޗެއް ހިއްސާކުރައްވާ" }); }

if (ޑޭޓާ.ސެޓިސްފެކްޝަން <= 2 && !ޑޭޓާ.އިމްޕްރޫވްމަންޓްފީޑްބެކް) { ctx.addIssue({ ކޯޑް: "ކަސްޓަމް", މަގު:["improvementFeedback"], message: "ރަނގަޅު ކުރަންވީ ކަންތައްތައް ކިޔައިދެއްވާ" }); }});

އެކްސްޕޯޓް ޓައިޕް ފޯމްޑޭޓާ = z.infer<ޓައިޕްއޮފް ފޯމްސްކީމާ>;

ޒޯޑްގެ ޓައިޕް-ލެވެލް ސްކީމާގައި އޮބްޖެކްޓްގެ ބައްޓަން ބަޔާންކުރާތީ، ފީލްޑްތައް މުހިންމު ވަގުތުތައް ކަނޑައަޅާ އުސޫލުތައް ނޫން، ޝަރުތު ހަމަވާ ގޮތަށް ޓައިޕް ކުރެވެނީ އޮޕްޝަނަލް() ގެ ގޮތުގައިކަން ފާހަގަކޮށްލެވެއެވެ. ޝަރުޠުވެރި ޝަރުޠު ދިރިއުޅެން ޖެހެނީ ސުޕަރރިފައިންގެ ތެރޭގައި ކަމަށާއި، މިއީ ބައްޓަން ސައްޙަ ކުރުމަށްފަހު ހިނގާ އަދި ފުލް އޮބްޖެކްޓަށް އެކްސެސް ލިބޭ އެއްޗެކެވެ. އެ ވަކިވުމަކީ އުނިކަމެއް ނޫނެވެ؛ it’s just what the tool is designed for: ސުޕަރރިފައިން އަކީ ސްކީމާ ސްޓްރަކްޗަރގައި ވެސް އެކްސްޕްރެސް ނުކުރެވޭ ވަގުތުތަކުގައި ކްރޮސް-ފީލްޑް ލޮޖިކް ދާ ތަނެކެވެ. މިތަނުގައި ވެސް ފާހަގަކޮށްލެވޭ ކަމަކީ މި ސްކީމާއިން ހާމަ ނުކުރާ ކަންތައްތަކެވެ. އެއީ ޞަފްޙާތަކުގެ ކޮންސެޕްޓެއް، ކޮން ދާއިރާތަކެއް ކޮން ހިސާބަކުން ފެންނަ ކަމުގެ ކޮންސެޕްޓެއް، އަދި ނޭވިގޭޝަންގެ ކޮންސެޕްޓެއް ނެތެވެ. އެ ހުރިހާ ކަމެއް އެހެން ތަނެއްގައި އުޅޭނެއެވެ. ފޯމް ކޮމްޕޮނެންޓް

import { useForm, useWatch } from "react-hook-form";import { zodResolver } from "@hookform/resolvers/zod";import { useMutation } from "@tanstack/react-query";import { useState, useMemo } from "react";import { formSchema, type FormData } from "./ސްކީމާ";

const STEPS = ["ތަފްސީލް"، "އޯޑަރ"، "އެކައުންޓް"، "ރިވިއު"];

type OrderPayload = ފޯމްޑޭޓާ & { ސަބްޓޯޓަލް: ނަންބަރު؛ ޓެކްސް: ނަންބަރު؛ ޖުމްލަ: ނަންބަރު };

އެކްސްޕޯޓް ފަންކްޝަން RHFMultiStepForm() { const [ސްޓެޕް، ސެޓްސްޓެޕް] = ޔޫސްސްޓޭޓް(0);

const mutation = ޔޫސްމިއުޓޭޝަން({ mutationFn: async (ޕޭލޯޑް: އޯޑަރޕޭލޯޑް) => { const res = އިންތިޒާރު ކުރައްވާ fetch("/api/orders", { ގޮތް: "ޕޯސްޓް"، headers: { "ކޮންޓެންޓް-ޓައިޕް": "އެޕްލިކޭޝަން/ޖޭއެސްއޯއެން" }, ބޮޑީ: ޖޭއެސްއޯއެން.ސްޓްރިންގްފައި(ޕޭލޯޑް)، }); if (!res.ok) throw new Error("ހުށަހަޅުއްވަން ނާކާމިޔާބު"); ރިޓަރން res.json(); }، });

const { ރެޖިސްޓަރ، ކޮންޓްރޯލް، ހެންޑްލްސަބްމިޓް، ފޯމްސްޓޭޓް: { އެރަރސް }، } = ޔޫސްފޯމް<ފޯމްޑޭޓާ>({ ރިޒޮލްވަރ: ޒޯޑްރިޒޮލްވަރ(ފޯމްސްކީމާ)، ޑިފޯލްޓްވެލިއުސް: { އަގު: 0، ކިއުއަންޓީ: 1، ޓެކްސްރޭޓް: 0.1، ހިތްހަމަޖެހުން: 3، hasAccount: "ނޫން", }، }); const price = useWatch({ ކޮންޓްރޯލް، ނަން: "އަގު" }); const quantity = useWatch({ ކޮންޓްރޯލް، ނަން: "ކުއަންޓިޓީ" }); const taxRate = useWatch({ ކޮންޓްރޯލް، ނަން: "ޓެކްސްރޭޓް" }); const hasAccount = useWatch({ ކޮންޓްރޯލް، ނަން: "ހަސްއެކައުންޓް" }); const ހިތްހަމަޖެހުން = useWatch({ ކޮންޓްރޯލް، ނަން: " ހިތްހަމަޖެހުން" }); const subtotal = useMemo(() => (އަގު ?? 0) * (އަދަދު ?? 1), [އަގު، އަދަދު]); const tax = useMemo(() => ސަބްޓޯޓަލް * (ޓެކްސްރޭޓް ?? 0)، [ސަބްޓޯޓަލް، ޓެކްސްރޭޓް]); const total = useMemo(() => ސަބްޓޯޓަލް + ޓެކްސް، [ސަބްޓޯޓަލް، ޓެކްސް]); const onSubmit = (ޑޭޓާ: ފޯމްޑޭޓާ) => mutation.mutate({ ...ޑޭޓާ، ސަބްޓޯޓަލް، ޓެކްސް، ޖުމްލަ }); const showSubmit = (ފިޔަވަޅު === 2 && ޖުމްލަ < 100) || (ފިޔަވަޅު === 3 && ޖުމްލަ >= 100)

return (

{step === 0 && ( <> )}

{step === 1 && ( <> <އިންޕުޓް ޓައިޕް="ނަންބަރު" {...register("price", { valueAsNumber: true })} />

ސަބްޓޯޓަލް: {ސަބްޓޯޓަލް}
ޓެކްސް: {ޓެކްސް}
ޖުމްލަ: {ޖުމްލަ}
)}

{step === 2 && ( <>

{hasAccount === "އާނ" && ( <> )}

{ ހިތްހަމަޖެހުން >= 4 && ( <ޓެކްސްޓްއޭރިއާ {...ރެޖިސްޓަރ("ޕޮޒިޓިވްފީޑްބެކް")} /> )}

{ ހިތްހަމަޖެހުން <= 2 && (