From 432028ddd116da6570e3c6edba1b6be4d8921d14 Mon Sep 17 00:00:00 2001 From: Aditya Jindal Date: Tue, 25 Feb 2025 18:27:23 +0530 Subject: [PATCH] Fix: Bugs in valueset page (#10738) --- public/locale/en.json | 2 + src/components/ValueSet/ValueSetEditor.tsx | 6 +- src/components/ValueSet/ValueSetForm.tsx | 128 +++++++++++---------- src/components/ValueSet/ValueSetList.tsx | 112 ++++++++++-------- src/types/valueset/valueset.ts | 2 +- 5 files changed, 138 insertions(+), 112 deletions(-) diff --git a/public/locale/en.json b/public/locale/en.json index 4c40ac64470..bcfb9a1ac2e 100644 --- a/public/locale/en.json +++ b/public/locale/en.json @@ -2021,6 +2021,7 @@ "save_and_continue": "Save and Continue", "save_investigation": "Save Investigation", "saving": "Saving...", + "retired":"Retired", "scan_asset_qr": "Scan Asset QR!", "schedule": "Schedule", "schedule_an_appointment_or_create_a_new_encounter": "Schedule an appointment or create a new encounter", @@ -2475,6 +2476,7 @@ "valid_year_of_birth": "Please enter a valid year of birth (YYYY)", "value": "Value", "value_set": "Value Set", + "save_valueset":"Save ValueSet", "valuesets": "Valuesets", "vehicle_preference": "Vehicle preference", "vendor_name": "Vendor Name", diff --git a/src/components/ValueSet/ValueSetEditor.tsx b/src/components/ValueSet/ValueSetEditor.tsx index 23b13fb5ea6..a0d77775a97 100644 --- a/src/components/ValueSet/ValueSetEditor.tsx +++ b/src/components/ValueSet/ValueSetEditor.tsx @@ -9,7 +9,6 @@ import query from "@/Utils/request/query"; import { CreateValuesetModel, UpdateValuesetModel, - ValuesetBase, ValuesetFormType, } from "@/types/valueset/valueset"; import valuesetApi from "@/types/valueset/valuesetApi"; @@ -22,7 +21,6 @@ interface ValueSetEditorProps { export function ValueSetEditor({ slug }: ValueSetEditorProps) { const navigate = useNavigate(); - const queryClient = useQueryClient(); // Fetch existing valueset if we're editing const { data: existingValueset, isLoading } = useQuery({ @@ -36,9 +34,9 @@ export function ValueSetEditor({ slug }: ValueSetEditorProps) { // Create mutation const createMutation = useMutation({ mutationFn: mutate(valuesetApi.create), - onSuccess: (data: ValuesetBase) => { + onSuccess: () => { toast.success("ValueSet created successfully"); - navigate(`/valuesets/${data.slug}`); + navigate(`/admin/valuesets`); }, }); diff --git a/src/components/ValueSet/ValueSetForm.tsx b/src/components/ValueSet/ValueSetForm.tsx index bea305bc5f2..ee4794f48b0 100644 --- a/src/components/ValueSet/ValueSetForm.tsx +++ b/src/components/ValueSet/ValueSetForm.tsx @@ -1,7 +1,9 @@ import { zodResolver } from "@hookform/resolvers/zod"; import { PlusIcon, TrashIcon, UpdateIcon } from "@radix-ui/react-icons"; import { useMutation } from "@tanstack/react-query"; +import { t } from "i18next"; import { useFieldArray, useForm } from "react-hook-form"; +import { useTranslation } from "react-i18next"; import { toast } from "sonner"; import * as z from "zod"; @@ -34,59 +36,6 @@ import { import valuesetApi from "@/types/valueset/valuesetApi"; // Create a schema for form validation -const valuesetFormSchema = z.object({ - name: z.string().min(1, "Name is required"), - slug: z.string().min(1, "Slug is required"), - description: z.string(), - status: z.enum(["active", "inactive"]), - is_system_defined: z.boolean(), - compose: z.object({ - include: z.array( - z.object({ - system: z.string(), - concept: z - .array( - z.object({ - code: z.string(), - display: z.string(), - }), - ) - .optional(), - filter: z - .array( - z.object({ - property: z.string(), - op: z.string(), - value: z.string(), - }), - ) - .optional(), - }), - ), - exclude: z.array( - z.object({ - system: z.string(), - concept: z - .array( - z.object({ - code: z.string(), - display: z.string(), - }), - ) - .optional(), - filter: z - .array( - z.object({ - property: z.string(), - op: z.string(), - value: z.string(), - }), - ) - .optional(), - }), - ), - }), -}); interface ValueSetFormProps { initialData?: ValuesetFormType; @@ -392,11 +341,66 @@ function RuleFields({ ); } +const valuesetFormSchema = z.object({ + name: z.string().min(1, t("field_required")), + slug: z.string().min(1, t("field_required")), + description: z.string(), + status: z.enum(["active", "draft", "retired", "unknown"]), + is_system_defined: z.boolean(), + compose: z.object({ + include: z.array( + z.object({ + system: z.string(), + concept: z + .array( + z.object({ + code: z.string(), + display: z.string(), + }), + ) + .optional(), + filter: z + .array( + z.object({ + property: z.string(), + op: z.string(), + value: z.string(), + }), + ) + .optional(), + }), + ), + exclude: z.array( + z.object({ + system: z.string(), + concept: z + .array( + z.object({ + code: z.string(), + display: z.string(), + }), + ) + .optional(), + filter: z + .array( + z.object({ + property: z.string(), + op: z.string(), + value: z.string(), + }), + ) + .optional(), + }), + ), + }), +}); export function ValueSetForm({ initialData, onSubmit, isSubmitting, }: ValueSetFormProps) { + const { t } = useTranslation(); + const form = useForm({ resolver: zodResolver(valuesetFormSchema), defaultValues: { @@ -420,7 +424,7 @@ export function ValueSetForm({ name="name" render={({ field }) => ( - Name + {t("name")} @@ -434,7 +438,7 @@ export function ValueSetForm({ name="slug" render={({ field }) => ( - Slug + {t("slug")} @@ -448,7 +452,7 @@ export function ValueSetForm({ name="description" render={({ field }) => ( - Description + {t("description")}