1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
| import * as React from "react";
| import { useCallback } from "react";
| import DownloadIcon from "@mui/icons-material/GetApp";
| import {
| Button,
| useDataProvider,
| useNotify,
| useListContext,
| useUnselectAll,
| } from "react-admin";
|
| const MyExportButton = (props) => {
| const {
| maxResults = 1000,
| onClick,
| ids,
| label = "ra.action.export",
| icon = defaultIcon,
| exporter: customExporter,
| meta,
| ...rest
| } = props;
|
| const { filter, selectedIds, filterValues, resource, sort, total } = useListContext();
| const unSelect = useUnselectAll(resource);
| console.log(selectedIds);
| const dataProvider = useDataProvider();
| const notify = useNotify();
| const handleClick =
| // useCallback(
| (event) => {
| dataProvider
| .export(resource, {
| sort,
| ids: selectedIds,
| filter: filter ? { ...filterValues, ...filter } : filterValues,
| pagination: { page: 1, perPage: maxResults },
| meta,
| })
| .then((res) => {
| const url = window.URL.createObjectURL(
| new Blob([res.data], { type: res.headers["content-type"] }),
| );
| const link = document.createElement("a");
| link.href = url;
| link.setAttribute("download", `${resource}.xlsx`);
| document.body.appendChild(link);
| link.click();
| link.remove();
| unSelect();
| })
| .catch((error) => {
| console.error(error);
| notify("ra.notification.http_error", { type: "error" });
| });
| if (typeof onClick === "function") {
| onClick(event);
| }
| }
| // [
| // dataProvider,
| // filter,
| // filterValues,
| // maxResults,
| // notify,
| // onClick,
| // resource,
| // sort,
| // meta,
| // ],
| // );
|
| return (
| <Button
| onClick={handleClick}
| label={label}
| disabled={total === 0}
| {...sanitizeRestProps(rest)}
| >
| {icon}
| </Button>
| );
| };
|
| const defaultIcon = <DownloadIcon />;
|
| const sanitizeRestProps = ({ resource, ...rest }) => rest;
|
| export default MyExportButton;
|
|