feat(documents): implement document upload functionality for companies

- Added DocumentItem component to display uploaded documents in CompanyDetailsPage.
- Introduced useUploadCompanyDocuments hook for handling document uploads.
- Updated CreateCompany form to include document upload capabilities and validation for file types and sizes.
- Enhanced API services to support batch document uploads and retrieval of document information.
- Improved response handling in the file service for better error management and user feedback.
This commit is contained in:
AmirReza Jamali
2026-06-06 17:18:02 +03:30
parent 88f223bf08
commit da1e2f89e7
19 changed files with 1038 additions and 429 deletions
+1
View File
@@ -16,3 +16,4 @@ export * from "./useUsersQueries";
export * from "./useAdminListQuery";
export * from "./useSelectSearchQuery";
export * from "./useDashboardQueries";
export * from "./useFilesQueries";
+18
View File
@@ -64,6 +64,24 @@ export const useCompanyDetails = (id: string) => {
queryFn: () => companiesService.companyDetails(id),
});
};
export const useUploadCompanyDocuments = (id: string) => {
const queryClient = useQueryClient();
const mutationKey = useMemo(
() => [API_ENDPOINTS.COMPANIES.DOCUMENTS(id), "upload-documents"],
[id],
);
return useMutation({
mutationKey,
mutationFn: (files: File[]) =>
companiesService.uploadDocuments({ id, files }),
onSuccess: () => {
queryClient.invalidateQueries({
queryKey: [API_ENDPOINTS.COMPANIES.READ_ALL, id, "details"],
});
},
});
};
export const useDeleteCompanyQuery = (successCallback?: () => void) => {
const queryClient = useQueryClient();
const mutationKey = useMemo(
+14
View File
@@ -0,0 +1,14 @@
import { API_ENDPOINTS, fileService } from "@/lib/api";
import { useQuery } from "@tanstack/react-query";
import { useMemo } from "react";
/** Fetches (and caches) metadata for a single stored file. */
export const useFileInfo = (fileId: string, options?: { enabled?: boolean }) => {
const queryKey = useMemo(() => [API_ENDPOINTS.FILES.INFO(fileId)], [fileId]);
return useQuery({
queryKey,
queryFn: () => fileService.getFileInfo(fileId),
enabled: (options?.enabled ?? true) && Boolean(fileId),
staleTime: 5 * 60 * 1000,
});
};