e6493f5d83
This commit introduces a loading state for form submissions and replaces the custom switch component with a third-party library for improved user experience and maintainability. - Adds `react-switch` as a dependency to replace the custom-built switch component, providing a more robust and feature-rich solution. - Implements a loading indicator on form submission buttons and in the confirmation modal by utilizing the `useIsMutating` hook from TanStack Query. This provides clear visual feedback to the user during asynchronous operations. - Creates a reusable `FormFooter` component to encapsulate the submit and cancel buttons, centralizing the form submission logic and loading state. - Refactors the company create/edit forms to use the new `FormFooter` and `react-switch` components. - Moves the `BreadcrumbItem` type to a shared types file for better code organization.
145 lines
3.6 KiB
TypeScript
145 lines
3.6 KiB
TypeScript
import api from "../axios";
|
|
import { API_ENDPOINTS } from "../endpoints";
|
|
import {
|
|
ApiResponse,
|
|
CompaniesListResponseSchema,
|
|
TCompaniesResponse,
|
|
TCompanyCategoryApiResponse,
|
|
TCreateCompanyCategoryCredentials,
|
|
} from "../types";
|
|
|
|
import { ICreateCompanyCredentials } from "../types";
|
|
|
|
export const companiesService = {
|
|
getCompanies: async (
|
|
params?: Record<string, any>,
|
|
): Promise<ApiResponse<TCompaniesResponse>> => {
|
|
try {
|
|
const response = await api.get(API_ENDPOINTS.COMPANIES.READ_ALL, {
|
|
params,
|
|
});
|
|
|
|
return CompaniesListResponseSchema.parse(response.data);
|
|
} catch (error) {
|
|
console.error("ERROR caught in Companies Services Read all:", error);
|
|
throw error;
|
|
}
|
|
},
|
|
|
|
createCompany: async (credentials: ICreateCompanyCredentials) => {
|
|
const response = await api.post(
|
|
API_ENDPOINTS.COMPANIES.CREATE,
|
|
credentials,
|
|
);
|
|
return response.data;
|
|
},
|
|
updateCompany: async ({
|
|
id,
|
|
credentials,
|
|
}: {
|
|
id: string;
|
|
credentials: ICreateCompanyCredentials;
|
|
}) => {
|
|
const response = await api.put(
|
|
API_ENDPOINTS.COMPANIES.UPDATE(id),
|
|
credentials,
|
|
);
|
|
return response.data;
|
|
},
|
|
|
|
companyDetails: async (id: string) => {
|
|
const response = await api.get(API_ENDPOINTS.COMPANIES.DETAILS(id));
|
|
return response.data;
|
|
},
|
|
deleteCompany: async (id: string) => {
|
|
try {
|
|
return (await api.delete(API_ENDPOINTS.COMPANIES.DELETE(id))).data;
|
|
} catch (error) {
|
|
console.error("ERROR caught in Companies Services Delete:", error);
|
|
throw error;
|
|
}
|
|
},
|
|
};
|
|
export const companyCategoriesService = {
|
|
getCategories: async (
|
|
params?: Record<string, any>,
|
|
): Promise<TCompanyCategoryApiResponse> => {
|
|
try {
|
|
const response = await api.get(
|
|
API_ENDPOINTS.COMPANIES.CATEGORIES.READ_ALL,
|
|
{
|
|
params,
|
|
},
|
|
);
|
|
|
|
return response.data;
|
|
} catch (error) {
|
|
console.error("ERROR Caught in company categories service: ", error);
|
|
throw error;
|
|
}
|
|
},
|
|
|
|
getSingleCategory: async (id: string) => {
|
|
try {
|
|
return (await api.get(API_ENDPOINTS.COMPANIES.CATEGORIES.DETAILS(id)))
|
|
.data;
|
|
} catch (error) {
|
|
console.error(
|
|
"ERROR caught in Company categories service, Get single category",
|
|
error,
|
|
);
|
|
throw error;
|
|
}
|
|
},
|
|
createCategory: async (credentials: TCreateCompanyCategoryCredentials) => {
|
|
try {
|
|
const response = await api.post(
|
|
API_ENDPOINTS.COMPANIES.CATEGORIES.CREATE,
|
|
credentials,
|
|
);
|
|
return response.data;
|
|
} catch (error) {
|
|
console.error("ERROR Caught in company categories service: ", error);
|
|
throw error;
|
|
}
|
|
},
|
|
deleteCategory: async (id: string) => {
|
|
try {
|
|
return (await api.delete(API_ENDPOINTS.COMPANIES.CATEGORIES.DELETE(id)))
|
|
.data;
|
|
} catch (error) {
|
|
console.error(
|
|
"ERROR caught in Company Categories Services Delete:",
|
|
error,
|
|
);
|
|
throw error;
|
|
}
|
|
},
|
|
togglePublished: async (id: string) => {
|
|
try {
|
|
return (
|
|
await api.patch(API_ENDPOINTS.COMPANIES.CATEGORIES.TOGGLE_PUBLISHED(id))
|
|
).data;
|
|
} catch (error) {
|
|
console.error(
|
|
"ERROR caught in Company Categories Services Toggle Published:",
|
|
error,
|
|
);
|
|
throw error;
|
|
}
|
|
},
|
|
updateCategories: async ({
|
|
id,
|
|
credentials,
|
|
}: {
|
|
id: string;
|
|
credentials: TCreateCompanyCategoryCredentials;
|
|
}) => {
|
|
const response = await api.put(
|
|
API_ENDPOINTS.COMPANIES.CATEGORIES.UPDATE(id),
|
|
credentials,
|
|
);
|
|
return response.data;
|
|
},
|
|
};
|