Files
expert-front/src/components/dashboard/navgan/navgan-province-manager/Buttons/printExcel.jsx

70 lines
2.5 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { Button, CircularProgress } from "@mui/material";
import { useTranslations } from "next-intl";
import { useMemo, useState } from "react";
import useRequest from "@/lib/app/hooks/useRequest";
import { EXPORT_NAVGAN_PROVINCE_MANAGER } from "@/core/data/apiRoutes";
import moment from "jalali-moment";
import FileSaver from "file-saver";
import DescriptionIcon from "@mui/icons-material/Description";
const PrintExcel = ({ table }) => {
const t = useTranslations();
const [loading, setLoading] = useState(false);
const requestServer = useRequest({ auth: true, pending: false, success: { notification: { show: false } } });
const { columnFilters, columnFilterFns, sorting } = table.getState();
const columns = table.getAllColumns();
const filterParams = useMemo(() => {
const params = new URLSearchParams();
const filters = columnFilters.map((filter) => {
let datatype;
for (const i in columns) {
if (columns[i].id == filter.id) {
datatype = columns[i].columnDef.datatype;
}
}
return {
...filter,
fn: columnFilterFns[filter.id],
datatype: datatype,
};
});
params.set("start", "0");
params.set("filters", JSON.stringify(filters ?? []));
params.set("sorting", JSON.stringify(sorting ?? []));
return params;
}, [columnFilters, columnFilterFns, sorting, columns]);
const clickHandler = () => {
setLoading(true);
requestServer(`${EXPORT_NAVGAN_PROVINCE_MANAGER}?${filterParams}`, "get", {
auth: true,
requestOptions: { responseType: "blob" },
})
.then((response) => {
const filename = `خروجی کارتابل بررسی وام های تبصره 18 تاریخ_${moment().format("jYYYY_jMM_jDD")}.xlsx`;
FileSaver.saveAs(response.data, filename);
})
.catch(() => {})
.finally(() => {
setLoading(false);
});
};
return (
<Button
color="primary"
variant="contained"
size="small"
disabled={loading}
sx={{ textTransform: "unset", alignSelf: "center" }}
startIcon={loading ? <CircularProgress size={18} color="inherit" /> : <DescriptionIcon />}
onClick={clickHandler}
>
{t("NavganProvinceManager.excel_report")}
</Button>
);
};
export default PrintExcel;