From 751124caac3815c20366b89198c3808dfd304c0a Mon Sep 17 00:00:00 2001 From: hamid zarghami Date: Tue, 17 Feb 2026 12:02:27 +0330 Subject: [PATCH] export and paginations --- src/langs/fa.json | 3 +- src/pages/company/List.tsx | 41 +++++++++++++++++++-- src/pages/company/hooks/useCompanyData.ts | 6 +++ src/pages/company/service/CompanyService.ts | 7 ++++ 4 files changed, 52 insertions(+), 5 deletions(-) diff --git a/src/langs/fa.json b/src/langs/fa.json index 2fca96f..977784c 100644 --- a/src/langs/fa.json +++ b/src/langs/fa.json @@ -859,7 +859,8 @@ "invoice_count": "تعداد صورتحساب", "select_company": "انتخاب شرکت", "register_date": "تاریخ ثبت نام", - "company": "شرکت" + "company": "شرکت", + "export": "خروجی اکسل" }, "bill": { "list": "لیست قبض‌ها", diff --git a/src/pages/company/List.tsx b/src/pages/company/List.tsx index c662f98..3850ba7 100644 --- a/src/pages/company/List.tsx +++ b/src/pages/company/List.tsx @@ -1,23 +1,51 @@ -import { FC } from 'react' -import { useGetCompanies } from './hooks/useCompanyData' +import { FC, useState } from 'react' +import { useExportCompanies, useGetCompanies } from './hooks/useCompanyData' import Td from '../../components/Td' import PageLoading from '../../components/PageLoading' import { useTranslation } from 'react-i18next' import { CompanyItemType } from './types/CompanyTypes' import moment from 'moment-jalaali' -import { Edit } from 'iconsax-react' +import { DocumentDownload, Edit } from 'iconsax-react' import DeleteCompany from './components/DeleteCompany' import { Link } from 'react-router-dom' import { Pages } from '../../config/Pages' import ToggleStatusCompany from './components/ToggleStatus' +import Button from '../../components/Button' +import Pagination from '../../components/Pagination' const CompanyList: FC = () => { const { t } = useTranslation('global') - const { data, isLoading, refetch } = useGetCompanies(1) + const [page, setPage] = useState(1) + const { data, isLoading, refetch } = useGetCompanies(page) + const exportMutation = useExportCompanies() + + const handleExport = async () => { + const blob = await exportMutation.mutateAsync() + const url = window.URL.createObjectURL(blob) + const link = document.createElement('a') + link.href = url + link.download = `companies-export-${new Date().toISOString().slice(0, 10)}.xlsx` + link.click() + window.URL.revokeObjectURL(url) + + } return (
+
+ +
{ isLoading ? @@ -63,6 +91,11 @@ const CompanyList: FC = () => { } +
} diff --git a/src/pages/company/hooks/useCompanyData.ts b/src/pages/company/hooks/useCompanyData.ts index 26eca50..5dec290 100644 --- a/src/pages/company/hooks/useCompanyData.ts +++ b/src/pages/company/hooks/useCompanyData.ts @@ -90,3 +90,9 @@ export const useToggleStatusCompany = () => { mutationFn: (id: string) => api.toggleStatusCompany(id), }); }; + +export const useExportCompanies = () => { + return useMutation({ + mutationFn: api.exportCompanies, + }); +}; diff --git a/src/pages/company/service/CompanyService.ts b/src/pages/company/service/CompanyService.ts index 9e87fbc..f3275a4 100644 --- a/src/pages/company/service/CompanyService.ts +++ b/src/pages/company/service/CompanyService.ts @@ -78,3 +78,10 @@ export const toggleStatusCompany = async (id: string) => { const { data } = await axios.patch(`/companies/${id}/toggle-status`); return data; }; + +export const exportCompanies = async () => { + const { data } = await axios.get(`/companies/list/all/export`, { + responseType: "blob", + }); + return data; +};