diff --git a/.env.example b/.env.example
index fd33e22..8efbc8c 100644
--- a/.env.example
+++ b/.env.example
@@ -1,4 +1,4 @@
HOST="rms.witel.ir"
-NEXT_PUBLIC_VERSION="1.8.0"
+NEXT_PUBLIC_VERSION="1.8.1"
NEXT_PUBLIC_API_URL="https://rms.witel.ir"
NEXT_PUBLIC_MAPTILE_ENDPOINT="https://rmsmap.rmto.ir/141map"
\ No newline at end of file
diff --git a/src/components/dashboard/damageItems/ExcelPrint/index.jsx b/src/components/dashboard/damageItems/ExcelPrint/index.jsx
new file mode 100644
index 0000000..4c6a825
--- /dev/null
+++ b/src/components/dashboard/damageItems/ExcelPrint/index.jsx
@@ -0,0 +1,75 @@
+"use client";
+import DataTableFilterDataStructure from "@/core/utils/DataTableFilterDataStructure";
+import isArrayEmpty from "@/core/utils/isArrayEmpty";
+import { EXPORT_DAMAGES_ITEMS } from "@/core/utils/routes";
+import useRequest from "@/lib/hooks/useRequest";
+import { useTheme } from "@emotion/react";
+import DescriptionIcon from "@mui/icons-material/Description";
+import { Button, CircularProgress, IconButton, useMediaQuery } from "@mui/material";
+import FileSaver from "file-saver";
+import moment from "jalali-moment";
+import { useMemo, useState } from "react";
+
+const PrintExcel = ({ table, filterData }) => {
+ const theme = useTheme();
+ const isMobile = useMediaQuery(theme.breakpoints.down("sm"));
+ const [loading, setLoading] = useState(false);
+ const requestServer = useRequest({ notificationSuccess: true });
+ const activeFilters = Object.entries(filterData).reduce((acc, [key, filter]) => {
+ if (filter.value && (!Array.isArray(filter.value) || filter.value.some((item) => item.trim() !== ""))) {
+ acc.push({ id: key, value: filter.value });
+ }
+ return acc;
+ }, []);
+
+ const filterParams = useMemo(() => {
+ const params = new URLSearchParams();
+ if (activeFilters.length > 0) {
+ activeFilters.map((filter, index) => {
+ const filteredFilterData = DataTableFilterDataStructure(filterData, isArrayEmpty);
+ params.set("filters", JSON.stringify(filteredFilterData.length === 0 ? [] : filteredFilterData));
+ });
+ } else {
+ params.set("filters", JSON.stringify([]));
+ }
+ return params;
+ }, [activeFilters]);
+
+ const clickHandler = () => {
+ setLoading(true);
+ requestServer(`${EXPORT_DAMAGES_ITEMS}?${filterParams}`, "get", {
+ requestOptions: { responseType: "blob" },
+ })
+ .then((response) => {
+ const filename = `خروجی لیست آیتم های خسارات وارده بر ابنیه فنی تاریخ_${moment().format("jYYYY_jMM_jDD")}.xlsx`;
+ FileSaver.saveAs(response.data, filename);
+ })
+ .catch(() => {})
+ .finally(() => {
+ setLoading(false);
+ });
+ };
+
+ return (
+ <>
+ {isMobile ? (
+
+
+
+ ) : (
+ : }
+ onClick={clickHandler}
+ >
+ خروجی اکسل
+
+ )}
+ >
+ );
+};
+export default PrintExcel;
diff --git a/src/components/dashboard/damageItems/Toolbar.jsx b/src/components/dashboard/damageItems/Toolbar.jsx
index 065ecd8..ac74d58 100644
--- a/src/components/dashboard/damageItems/Toolbar.jsx
+++ b/src/components/dashboard/damageItems/Toolbar.jsx
@@ -1,10 +1,13 @@
+import { Box } from "@mui/material";
import CreateDamage from "./Actions/Create";
+import PrintExcel from "./ExcelPrint";
-const Toolbar = ({ mutate }) => {
+const Toolbar = ({ table, filterData, mutate }) => {
return (
- <>
+
+
- >
+
);
};
export default Toolbar;
diff --git a/src/components/dashboard/damages/operator/ExcelPrint/index.jsx b/src/components/dashboard/damages/operator/ExcelPrint/index.jsx
index 096389f..94e9bfa 100644
--- a/src/components/dashboard/damages/operator/ExcelPrint/index.jsx
+++ b/src/components/dashboard/damages/operator/ExcelPrint/index.jsx
@@ -53,12 +53,12 @@ const PrintExcel = ({ table, filterData }) => {
return (
<>
{isMobile ? (
-
+
) : (