da82399d07
- Add EmptyListWrapper to various tables (Admins, Companies, Customers, Feedback, Notification History, Tenders) to provide a consistent empty state message when no data is available. - Update phone number and status display logic in the Profile page to handle null values gracefully. - Introduce worktree setup configuration in worktrees.json for easier project setup.
147 lines
3.8 KiB
TypeScript
147 lines
3.8 KiB
TypeScript
"use client";
|
|
|
|
import {
|
|
useInfiniteQuery,
|
|
useMutation,
|
|
useQuery,
|
|
useQueryClient,
|
|
} from "@tanstack/react-query";
|
|
import { useMemo } from "react";
|
|
import { useRouter } from "next/navigation";
|
|
import { toast } from "react-toastify";
|
|
import { API_ENDPOINTS } from "@/lib/api";
|
|
import { customersService } from "@/lib/api/services/customers-service";
|
|
|
|
export const useCustomersInfiniteQuery = (params?: Record<string, any>) => {
|
|
const queryKey = useMemo(
|
|
() => [API_ENDPOINTS.CUSTOMERS.READ_ALL, params],
|
|
[params],
|
|
);
|
|
|
|
return useInfiniteQuery({
|
|
queryKey,
|
|
|
|
queryFn: ({ pageParam = 0 }) =>
|
|
customersService.getCustomers({ ...params, offset: pageParam }),
|
|
|
|
initialPageParam: 0,
|
|
|
|
getNextPageParam: (lastPage) => {
|
|
if (!lastPage.meta) return;
|
|
const { offset, limit, total } = lastPage.meta;
|
|
|
|
const nextOffset = offset + limit;
|
|
|
|
return nextOffset < total ? nextOffset : undefined;
|
|
},
|
|
});
|
|
};
|
|
|
|
export const useCustomersQuery = (params?: Record<string, any>) => {
|
|
const queryKey = useMemo(
|
|
() => [API_ENDPOINTS.CUSTOMERS.READ_ALL, params],
|
|
[params],
|
|
);
|
|
|
|
return useQuery({
|
|
queryKey,
|
|
queryFn: () => customersService.getCustomers(params),
|
|
});
|
|
};
|
|
export const useGetAllCustomers = () => {
|
|
const queryKey = useMemo(() => ["GET ALL CUSTOMERS"], []);
|
|
return useQuery({
|
|
queryKey,
|
|
queryFn: () => customersService.getCustomers(),
|
|
});
|
|
};
|
|
export const useGetCustomersDetails = (id: string) => {
|
|
const queryKey = useMemo(() => ["GET ALL CUSTOMERS", id], [id]);
|
|
return useQuery({
|
|
queryKey,
|
|
queryFn: () => customersService.customerDetails(id),
|
|
});
|
|
};
|
|
export const useAssignCompany = (id: string, successCallback?: () => void) => {
|
|
const queryClient = useQueryClient();
|
|
const mutationKey = useMemo(
|
|
() => [API_ENDPOINTS.CUSTOMERS.ASSIGN_COMPANY_TO_CUSTOMER(id)],
|
|
[id],
|
|
);
|
|
return useMutation({
|
|
mutationKey,
|
|
mutationFn: customersService.assignCompanyToCustomer,
|
|
|
|
onSuccess: () => {
|
|
toast.success("Selected Companies were assigned");
|
|
queryClient.invalidateQueries({
|
|
queryKey: [API_ENDPOINTS.CUSTOMERS.READ_ALL],
|
|
});
|
|
|
|
if (successCallback) {
|
|
successCallback();
|
|
}
|
|
},
|
|
});
|
|
};
|
|
export const useCreateCustomer = () => {
|
|
const queryClient = useQueryClient();
|
|
const router = useRouter();
|
|
const mutationKey = useMemo(
|
|
() => [API_ENDPOINTS.CUSTOMERS.CREATE, "create"],
|
|
[],
|
|
);
|
|
return useMutation({
|
|
mutationKey,
|
|
mutationFn: customersService.createCustomer,
|
|
onSuccess: () => {
|
|
toast.success("Customer created successfully");
|
|
queryClient.invalidateQueries({
|
|
queryKey: [API_ENDPOINTS.CUSTOMERS.READ_ALL],
|
|
});
|
|
router.push("/customers");
|
|
},
|
|
});
|
|
};
|
|
|
|
export const useUpdateCustomer = (id: string) => {
|
|
const queryClient = useQueryClient();
|
|
const router = useRouter();
|
|
const mutationKey = useMemo(
|
|
() => [API_ENDPOINTS.CUSTOMERS.UPDATE(id), "update"],
|
|
[id],
|
|
);
|
|
return useMutation({
|
|
mutationKey,
|
|
mutationFn: customersService.updateCustomer,
|
|
onSuccess: (response) => {
|
|
toast.success("Customer updated successfully");
|
|
queryClient.invalidateQueries({
|
|
queryKey: [API_ENDPOINTS.CUSTOMERS.READ_ALL],
|
|
});
|
|
router.push("/customers");
|
|
},
|
|
});
|
|
};
|
|
|
|
export const useDeleteCustomerQuery = (successCallback?: () => void) => {
|
|
const queryClient = useQueryClient();
|
|
const mutationKey = useMemo(
|
|
() => [API_ENDPOINTS.CUSTOMERS.DELETE, "delete-customer"],
|
|
[],
|
|
);
|
|
return useMutation({
|
|
mutationKey,
|
|
mutationFn: customersService.deleteCustomer,
|
|
onSuccess: (response) => {
|
|
toast.success(response.data.message);
|
|
if (successCallback) {
|
|
successCallback();
|
|
}
|
|
queryClient.invalidateQueries({
|
|
queryKey: [API_ENDPOINTS.CUSTOMERS.READ_ALL],
|
|
});
|
|
},
|
|
});
|
|
};
|