| 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
 | | import * as React from "react"; |  | import { useCallback } from "react"; |  | import DownloadIcon from "@mui/icons-material/GetApp"; |  | import { |  |   Button, |  |   useDataProvider, |  |   useNotify, |  |   useListContext, |  | } from "react-admin"; |  |   |  | const MyExportButton = (props) => { |  |   const { |  |     maxResults = 1000, |  |     onClick, |  |     label = "ra.action.export", |  |     icon = defaultIcon, |  |     exporter: customExporter, |  |     meta, |  |     ...rest |  |   } = props; |  |   |  |   const { filter, filterValues, resource, sort, total } = useListContext(); |  |   |  |   const dataProvider = useDataProvider(); |  |   const notify = useNotify(); |  |   |  |   const handleClick = useCallback( |  |     (event) => { |  |       dataProvider |  |         .export(resource, { |  |           sort, |  |           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(); |  |         }) |  |         .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; | 
 |