feat(inquiries): Add status change functionality to inquiries

- Add useChangeInquiryStatus hook for managing inquiry status mutations
- Add STATUS endpoint to inquiries API endpoints configuration
- Add changeInquiryStatus method to inquiries service with error handling
- Add TChangeInquiryStatusCredentials type with validation schema
- Include description, reason, and status fields in status change credentials
- Invalidate inquiries query cache on successful status update
- Display success toast notification after status change completes
This commit is contained in:
AmirReza Jamali
2025-11-25 14:11:00 +03:30
parent 8b795bb428
commit 6da653cb15
4 changed files with 53 additions and 5 deletions
+3 -2
View File
@@ -66,6 +66,7 @@ export const API_ENDPOINTS = {
},
INQUIRIES: {
BASE: (id?: string) => (id ? `inquiries/${id}` : "inquiries"),
}
BASE: (id?: string) => (id ? `inquiries/${id}` : "inquiries"),
STATUS: (id: string) => `inquiries/${id}/status`,
},
} as const;
+23 -2
View File
@@ -1,6 +1,6 @@
import api from "../axios";
import { API_ENDPOINTS } from "../endpoints";
import { TInquiriesResponse } from "../types";
import { TChangeInquiryStatusCredentials, TInquiriesResponse } from "../types";
export const inquiriesService = {
getInquiries: async (
@@ -17,7 +17,28 @@ export const inquiriesService = {
try {
return (await api.delete(API_ENDPOINTS.INQUIRIES.BASE(id))).data;
} catch (error) {
console.error("ERROR caught in inquiries service => deleteInquiry", error);
console.error(
"ERROR caught in inquiries service => deleteInquiry",
error,
);
throw error;
}
},
changeInquiryStatus: async ({
credentials,
id,
}: {
credentials: TChangeInquiryStatusCredentials;
id: string;
}) => {
try {
return (await api.put(API_ENDPOINTS.INQUIRIES.STATUS(id), credentials))
.data;
} catch (error) {
console.error(
"ERROR caught in inquiries service => changeInquiryStatus",
error,
);
throw error;
}
},
+9 -1
View File
@@ -1,6 +1,11 @@
import { INQUIRY_STATUS } from "@/constants/enums";
import { z } from "zod";
import { createApiResponseSchema } from "./Factory";
const changeInquiryStatusCredentials = z.object({
description: z.string(),
reason: z.string(),
status: z.enum(INQUIRY_STATUS),
});
const inquiriesSchema = z.object({
company_name: z.string(),
created_at: z.number(),
@@ -22,5 +27,8 @@ const inquiriesSchema = z.object({
export const inquiriesListResponse = createApiResponseSchema(
z.object({ inquiries: z.array(inquiriesSchema) }),
);
export type TChangeInquiryStatusCredentials = z.infer<
typeof changeInquiryStatusCredentials
>;
export type TInquiries = z.infer<typeof inquiriesSchema>;
export type TInquiriesResponse = z.infer<typeof inquiriesListResponse>;