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:
@@ -31,3 +31,21 @@ export const useDeleteInquiry = (successCallback?: () => void) => {
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
export const useChangeInquiryStatus = (successCallback?: () => void) => {
|
||||||
|
const queryClient = useQueryClient();
|
||||||
|
const mutationKey = useMemo(
|
||||||
|
() => [API_ENDPOINTS.INQUIRIES.BASE(), "UPDATE INQUIRY STATUS"],
|
||||||
|
[],
|
||||||
|
);
|
||||||
|
return useMutation({
|
||||||
|
mutationKey,
|
||||||
|
mutationFn: inquiriesService.changeInquiryStatus,
|
||||||
|
onSuccess: (response) => {
|
||||||
|
toast.success(response.message);
|
||||||
|
successCallback?.()
|
||||||
|
queryClient.invalidateQueries({
|
||||||
|
queryKey: [API_ENDPOINTS.INQUIRIES.BASE()],
|
||||||
|
});
|
||||||
|
},
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|||||||
@@ -67,5 +67,6 @@ export const API_ENDPOINTS = {
|
|||||||
|
|
||||||
INQUIRIES: {
|
INQUIRIES: {
|
||||||
BASE: (id?: string) => (id ? `inquiries/${id}` : "inquiries"),
|
BASE: (id?: string) => (id ? `inquiries/${id}` : "inquiries"),
|
||||||
}
|
STATUS: (id: string) => `inquiries/${id}/status`,
|
||||||
|
},
|
||||||
} as const;
|
} as const;
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import api from "../axios";
|
import api from "../axios";
|
||||||
import { API_ENDPOINTS } from "../endpoints";
|
import { API_ENDPOINTS } from "../endpoints";
|
||||||
import { TInquiriesResponse } from "../types";
|
import { TChangeInquiryStatusCredentials, TInquiriesResponse } from "../types";
|
||||||
|
|
||||||
export const inquiriesService = {
|
export const inquiriesService = {
|
||||||
getInquiries: async (
|
getInquiries: async (
|
||||||
@@ -17,7 +17,28 @@ export const inquiriesService = {
|
|||||||
try {
|
try {
|
||||||
return (await api.delete(API_ENDPOINTS.INQUIRIES.BASE(id))).data;
|
return (await api.delete(API_ENDPOINTS.INQUIRIES.BASE(id))).data;
|
||||||
} catch (error) {
|
} 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;
|
throw error;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -1,6 +1,11 @@
|
|||||||
|
import { INQUIRY_STATUS } from "@/constants/enums";
|
||||||
import { z } from "zod";
|
import { z } from "zod";
|
||||||
import { createApiResponseSchema } from "./Factory";
|
import { createApiResponseSchema } from "./Factory";
|
||||||
|
const changeInquiryStatusCredentials = z.object({
|
||||||
|
description: z.string(),
|
||||||
|
reason: z.string(),
|
||||||
|
status: z.enum(INQUIRY_STATUS),
|
||||||
|
});
|
||||||
const inquiriesSchema = z.object({
|
const inquiriesSchema = z.object({
|
||||||
company_name: z.string(),
|
company_name: z.string(),
|
||||||
created_at: z.number(),
|
created_at: z.number(),
|
||||||
@@ -22,5 +27,8 @@ const inquiriesSchema = z.object({
|
|||||||
export const inquiriesListResponse = createApiResponseSchema(
|
export const inquiriesListResponse = createApiResponseSchema(
|
||||||
z.object({ inquiries: z.array(inquiriesSchema) }),
|
z.object({ inquiries: z.array(inquiriesSchema) }),
|
||||||
);
|
);
|
||||||
|
export type TChangeInquiryStatusCredentials = z.infer<
|
||||||
|
typeof changeInquiryStatusCredentials
|
||||||
|
>;
|
||||||
export type TInquiries = z.infer<typeof inquiriesSchema>;
|
export type TInquiries = z.infer<typeof inquiriesSchema>;
|
||||||
export type TInquiriesResponse = z.infer<typeof inquiriesListResponse>;
|
export type TInquiriesResponse = z.infer<typeof inquiriesListResponse>;
|
||||||
|
|||||||
Reference in New Issue
Block a user