From 2ec752df0cc2f5c35b9f3af5a0a55a8be04fb6a1 Mon Sep 17 00:00:00 2001 From: AmirReza Jamali Date: Tue, 25 Nov 2025 14:53:16 +0330 Subject: [PATCH] feat(inquiries): Add change status functionality to inquiries - Create ChangeStatusForm component with status, reason, and description fields - Add change status modal to inquiries table with form integration - Implement useChangeInquiryStatus hook integration in presenter - Add edit icon button to trigger status change modal for each inquiry - Update Status component to accept status prop for proper styling - Update FormFooter component to support form submission handling - Add isChangeStatusModalOpen state management to presenter - Update TInquiries type definitions to include change status credentials - Enhance inquiries list with status change workflow alongside existing delete functionality --- .../Tables/inquiries/ChangeStatusForm.tsx | 76 +++++++++++++++++++ src/components/Tables/inquiries/index.tsx | 57 +++++++++++++- .../inquiries/useInquiriesListPresenter.ts | 16 ++++ src/components/ui/FormFooter.tsx | 8 +- src/components/ui/Status.tsx | 2 +- src/lib/api/types/TInquiries.ts | 2 +- 6 files changed, 154 insertions(+), 7 deletions(-) create mode 100644 src/components/Tables/inquiries/ChangeStatusForm.tsx diff --git a/src/components/Tables/inquiries/ChangeStatusForm.tsx b/src/components/Tables/inquiries/ChangeStatusForm.tsx new file mode 100644 index 0000000..d5d6c50 --- /dev/null +++ b/src/components/Tables/inquiries/ChangeStatusForm.tsx @@ -0,0 +1,76 @@ +"use client"; +import InputGroup from "@/components/FormElements/InputGroup"; +import { TextAreaGroup } from "@/components/FormElements/InputGroup/text-area"; +import { Select } from "@/components/FormElements/select"; +import FormFooter from "@/components/ui/FormFooter"; +import { INQUIRY_STATUS } from "@/constants/enums"; +import { TChangeInquiryStatusCredentials } from "@/lib/api"; +import { useForm } from "react-hook-form"; + +interface ChangeStatusFormProps { + onSubmit: (data: TChangeInquiryStatusCredentials) => void; + onCancel: () => void; + currentStatus: string; + isSubmitting?: boolean; +} + +const ChangeStatusForm = ({ + onSubmit, + onCancel, + currentStatus, + isSubmitting, +}: ChangeStatusFormProps) => { + const { + register, + handleSubmit, + formState: { errors }, + } = useForm({ + defaultValues: { + status: currentStatus as any, + reason: "", + description: "", + }, + }); + + const statusOptions = Object.values(INQUIRY_STATUS).map((status) => ({ + label: status.charAt(0).toUpperCase() + status.slice(1), + value: status, + })); + + return ( +
+