@itaptec/datagrid 0.0.1-beta.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +29 -0
- package/dist/index.d.mts +104 -0
- package/dist/index.d.ts +104 -0
- package/dist/index.js +507 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +501 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +74 -0
package/dist/index.js
ADDED
|
@@ -0,0 +1,507 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __defProps = Object.defineProperties;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
6
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
7
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
8
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
9
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
10
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
11
|
+
var __spreadValues = (a, b) => {
|
|
12
|
+
for (var prop in b || (b = {}))
|
|
13
|
+
if (__hasOwnProp.call(b, prop))
|
|
14
|
+
__defNormalProp(a, prop, b[prop]);
|
|
15
|
+
if (__getOwnPropSymbols)
|
|
16
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
17
|
+
if (__propIsEnum.call(b, prop))
|
|
18
|
+
__defNormalProp(a, prop, b[prop]);
|
|
19
|
+
}
|
|
20
|
+
return a;
|
|
21
|
+
};
|
|
22
|
+
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
23
|
+
var __objRest = (source, exclude) => {
|
|
24
|
+
var target = {};
|
|
25
|
+
for (var prop in source)
|
|
26
|
+
if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
|
|
27
|
+
target[prop] = source[prop];
|
|
28
|
+
if (source != null && __getOwnPropSymbols)
|
|
29
|
+
for (var prop of __getOwnPropSymbols(source)) {
|
|
30
|
+
if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
|
|
31
|
+
target[prop] = source[prop];
|
|
32
|
+
}
|
|
33
|
+
return target;
|
|
34
|
+
};
|
|
35
|
+
var __export = (target, all) => {
|
|
36
|
+
for (var name in all)
|
|
37
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
38
|
+
};
|
|
39
|
+
var __copyProps = (to, from, except, desc) => {
|
|
40
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
41
|
+
for (let key of __getOwnPropNames(from))
|
|
42
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
43
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
44
|
+
}
|
|
45
|
+
return to;
|
|
46
|
+
};
|
|
47
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
48
|
+
|
|
49
|
+
// src/index.ts
|
|
50
|
+
var index_exports = {};
|
|
51
|
+
__export(index_exports, {
|
|
52
|
+
ItecDataGrid: () => ItecDataGrid,
|
|
53
|
+
useItecDataGrid: () => useItecDataGrid_default
|
|
54
|
+
});
|
|
55
|
+
module.exports = __toCommonJS(index_exports);
|
|
56
|
+
|
|
57
|
+
// src/base/datagrid.tsx
|
|
58
|
+
var import_x_data_grid = require("@mui/x-data-grid");
|
|
59
|
+
var import_react_query = require("@tanstack/react-query");
|
|
60
|
+
var import_icons_material2 = require("@mui/icons-material");
|
|
61
|
+
var import_material2 = require("@mui/material");
|
|
62
|
+
|
|
63
|
+
// src/common/useFilter.tsx
|
|
64
|
+
var import_react_hook_form = require("react-hook-form");
|
|
65
|
+
var import_react = require("react");
|
|
66
|
+
function useFilter(props) {
|
|
67
|
+
const { filters } = props;
|
|
68
|
+
const [filter, setFilter] = (0, import_react.useState)();
|
|
69
|
+
const form = (0, import_react_hook_form.useForm)({
|
|
70
|
+
mode: "onChange"
|
|
71
|
+
});
|
|
72
|
+
if (!filters) {
|
|
73
|
+
return void 0;
|
|
74
|
+
}
|
|
75
|
+
return {
|
|
76
|
+
// columnMenuComponent: (props) => {
|
|
77
|
+
// const {
|
|
78
|
+
// colDef: { field },
|
|
79
|
+
// } = props;
|
|
80
|
+
// // TODO: make field of type union of possible fields
|
|
81
|
+
// const menuParams = filters?.[field];
|
|
82
|
+
// if (!menuParams) return undefined;
|
|
83
|
+
// return (
|
|
84
|
+
// <Stack
|
|
85
|
+
// minWidth={300}
|
|
86
|
+
// p={2}
|
|
87
|
+
// spacing={2}
|
|
88
|
+
// direction="row"
|
|
89
|
+
// display="flex"
|
|
90
|
+
// justifyContent="space-between"
|
|
91
|
+
// alignItems="center"
|
|
92
|
+
// >
|
|
93
|
+
// <Box sx={{ width: "100%" }}>
|
|
94
|
+
// {menuParams.type === "select" && (
|
|
95
|
+
// <Select
|
|
96
|
+
// name={menuParams.name}
|
|
97
|
+
// control={control}
|
|
98
|
+
// getOptions={menuParams.getOptions}
|
|
99
|
+
// size="small"
|
|
100
|
+
// fullWidth
|
|
101
|
+
// />
|
|
102
|
+
// )}
|
|
103
|
+
// </Box>
|
|
104
|
+
// <Box display="flex">
|
|
105
|
+
// <Tooltip title="Limpiar filtro">
|
|
106
|
+
// <IconButton
|
|
107
|
+
// onClick={() => {
|
|
108
|
+
// resetField(menuParams.name);
|
|
109
|
+
// // onFilterChange(); // search on filter reset
|
|
110
|
+
// }}
|
|
111
|
+
// >
|
|
112
|
+
// <FilterAltOff />
|
|
113
|
+
// </IconButton>
|
|
114
|
+
// </Tooltip>
|
|
115
|
+
// <Tooltip title="Cerrar filtro">
|
|
116
|
+
// <IconButton>
|
|
117
|
+
// <Close />
|
|
118
|
+
// </IconButton>
|
|
119
|
+
// </Tooltip>
|
|
120
|
+
// </Box>
|
|
121
|
+
// </Stack>
|
|
122
|
+
// );
|
|
123
|
+
// },
|
|
124
|
+
form,
|
|
125
|
+
filter
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
{
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
// src/common/useCheckboxSelection.ts
|
|
132
|
+
var import_react2 = require("react");
|
|
133
|
+
function useCheckboxSelection(data, getRowId, apiRef) {
|
|
134
|
+
if (Array.isArray(data)) {
|
|
135
|
+
return useCheckboxSelectionBasic(data, getRowId, apiRef);
|
|
136
|
+
}
|
|
137
|
+
return useCheckboxSelectionPaginated(data, getRowId, apiRef);
|
|
138
|
+
}
|
|
139
|
+
function useCheckboxSelectionPaginated(data, getRowId, apiRef) {
|
|
140
|
+
const [selectedRows, setSelectedRows] = (0, import_react2.useState)([]);
|
|
141
|
+
(0, import_react2.useEffect)(() => {
|
|
142
|
+
const handleRowClick = ({
|
|
143
|
+
id,
|
|
144
|
+
value
|
|
145
|
+
}) => {
|
|
146
|
+
if (!data) return;
|
|
147
|
+
if (value) {
|
|
148
|
+
const newValue = data.lista.find((x) => getRowId(x) === id);
|
|
149
|
+
newValue && setSelectedRows((prev) => [...prev, newValue]);
|
|
150
|
+
} else {
|
|
151
|
+
setSelectedRows((prev) => [...prev.filter((x) => getRowId(x) !== id)]);
|
|
152
|
+
}
|
|
153
|
+
};
|
|
154
|
+
return apiRef.current.subscribeEvent(
|
|
155
|
+
"rowSelectionCheckboxChange",
|
|
156
|
+
handleRowClick
|
|
157
|
+
);
|
|
158
|
+
}, [apiRef, data]);
|
|
159
|
+
return {
|
|
160
|
+
selectedRows
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
function useCheckboxSelectionBasic(data, getRowId, apiRef) {
|
|
164
|
+
const [selectedRows, setSelectedRows] = (0, import_react2.useState)([]);
|
|
165
|
+
(0, import_react2.useEffect)(() => {
|
|
166
|
+
const handleRowClick = ({
|
|
167
|
+
id,
|
|
168
|
+
value
|
|
169
|
+
}) => {
|
|
170
|
+
if (!data) return;
|
|
171
|
+
if (value) {
|
|
172
|
+
const newValue = data.find((x) => getRowId(x) === id);
|
|
173
|
+
newValue && setSelectedRows((prev) => [...prev, newValue]);
|
|
174
|
+
} else {
|
|
175
|
+
setSelectedRows((prev) => [...prev.filter((x) => getRowId(x) !== id)]);
|
|
176
|
+
}
|
|
177
|
+
};
|
|
178
|
+
return apiRef.current.subscribeEvent(
|
|
179
|
+
"rowSelectionCheckboxChange",
|
|
180
|
+
handleRowClick
|
|
181
|
+
);
|
|
182
|
+
}, [apiRef, data]);
|
|
183
|
+
return {
|
|
184
|
+
selectedRows
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
// src/Filter.tsx
|
|
189
|
+
var import_icons_material = require("@mui/icons-material");
|
|
190
|
+
var import_material = require("@mui/material");
|
|
191
|
+
var import_form_components = require("@itaptec/form_components");
|
|
192
|
+
var import_jsx_runtime = require("react/jsx-runtime");
|
|
193
|
+
function Filter(props) {
|
|
194
|
+
const {
|
|
195
|
+
close,
|
|
196
|
+
menuParams,
|
|
197
|
+
formMethods: { control, resetField }
|
|
198
|
+
} = props;
|
|
199
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
200
|
+
import_material.Stack,
|
|
201
|
+
{
|
|
202
|
+
minWidth: 300,
|
|
203
|
+
px: 1,
|
|
204
|
+
spacing: 2,
|
|
205
|
+
direction: "row",
|
|
206
|
+
display: "flex",
|
|
207
|
+
justifyContent: "space-between",
|
|
208
|
+
alignItems: "center",
|
|
209
|
+
children: [
|
|
210
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_material.Box, { sx: { width: "100%" }, children: [
|
|
211
|
+
menuParams.type === "select" && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
212
|
+
import_form_components.Select,
|
|
213
|
+
__spreadValues({
|
|
214
|
+
name: menuParams.name,
|
|
215
|
+
control
|
|
216
|
+
}, menuParams.props)
|
|
217
|
+
),
|
|
218
|
+
menuParams.type === "multiselect" && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
219
|
+
import_form_components.Multiselect,
|
|
220
|
+
__spreadValues({
|
|
221
|
+
name: menuParams.name,
|
|
222
|
+
control
|
|
223
|
+
}, menuParams.props)
|
|
224
|
+
),
|
|
225
|
+
menuParams.type === "date-range" && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
226
|
+
import_form_components.ControlledDateRangePicker,
|
|
227
|
+
__spreadValues({
|
|
228
|
+
label: "Fecha",
|
|
229
|
+
control
|
|
230
|
+
}, menuParams.props)
|
|
231
|
+
),
|
|
232
|
+
menuParams.type === "text" && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
233
|
+
import_form_components.TextField,
|
|
234
|
+
__spreadValues({
|
|
235
|
+
name: menuParams.name,
|
|
236
|
+
control,
|
|
237
|
+
InputProps: {
|
|
238
|
+
startAdornment: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_material.InputAdornment, { position: "start", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_icons_material.Search, {}) })
|
|
239
|
+
},
|
|
240
|
+
debounceTime: 500
|
|
241
|
+
}, menuParams.props)
|
|
242
|
+
),
|
|
243
|
+
menuParams.type === "button-group" && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
244
|
+
import_form_components.ToggleButtonGroup,
|
|
245
|
+
__spreadValues({
|
|
246
|
+
name: menuParams.name,
|
|
247
|
+
control
|
|
248
|
+
}, menuParams.props)
|
|
249
|
+
),
|
|
250
|
+
menuParams.type === "multiple-button-group" && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
251
|
+
import_form_components.ToggleButtonGroupMultiple,
|
|
252
|
+
__spreadValues({
|
|
253
|
+
name: menuParams.name,
|
|
254
|
+
control
|
|
255
|
+
}, menuParams.props)
|
|
256
|
+
)
|
|
257
|
+
] }),
|
|
258
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_material.Box, { display: "flex", children: [
|
|
259
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_material.Tooltip, { title: "Limpiar filtro", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
260
|
+
import_material.IconButton,
|
|
261
|
+
{
|
|
262
|
+
onClick: () => {
|
|
263
|
+
resetField(menuParams.name);
|
|
264
|
+
close();
|
|
265
|
+
},
|
|
266
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_icons_material.FilterAltOff, {})
|
|
267
|
+
}
|
|
268
|
+
) }),
|
|
269
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_material.Tooltip, { title: "Cerrar filtro", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_material.IconButton, { onClick: close, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_icons_material.Close, {}) }) })
|
|
270
|
+
] })
|
|
271
|
+
]
|
|
272
|
+
}
|
|
273
|
+
);
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
// src/base/datagrid.tsx
|
|
277
|
+
var import_jsx_runtime2 = require("react/jsx-runtime");
|
|
278
|
+
function dataGridBase(props) {
|
|
279
|
+
const filter = useFilter({ filters: props.filters });
|
|
280
|
+
const query = (0, import_react_query.useQuery)({
|
|
281
|
+
queryKey: ["query", filter == null ? void 0 : filter.form.watch()],
|
|
282
|
+
queryFn: () => props.getEntities(filter == null ? void 0 : filter.form.watch())
|
|
283
|
+
});
|
|
284
|
+
const { data, refetch, isFetching, isError } = query;
|
|
285
|
+
const apiRef = (0, import_x_data_grid.useGridApiRef)();
|
|
286
|
+
const { selectedRows } = useCheckboxSelection(
|
|
287
|
+
data,
|
|
288
|
+
props.getRowId || (() => 0),
|
|
289
|
+
apiRef
|
|
290
|
+
);
|
|
291
|
+
return {
|
|
292
|
+
datagridProps: {
|
|
293
|
+
apiRef,
|
|
294
|
+
hideFooterPagination: true,
|
|
295
|
+
columns: props.columns.map((col) => {
|
|
296
|
+
var _a;
|
|
297
|
+
return __spreadProps(__spreadValues({}, col), {
|
|
298
|
+
sortable: false,
|
|
299
|
+
disableColumnMenu: !((_a = props.filters) == null ? void 0 : _a[col.field]),
|
|
300
|
+
renderHeader: (params) => {
|
|
301
|
+
var _a2;
|
|
302
|
+
return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_material2.Box, { sx: { ":hover > *": { visibility: "visible" } }, children: [
|
|
303
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)("strong", { style: { marginRight: 10 }, children: params.colDef.headerName }),
|
|
304
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_jsx_runtime2.Fragment, { children: ((_a2 = props.filters) == null ? void 0 : _a2[col.field]) && /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
|
|
305
|
+
import_material2.IconButton,
|
|
306
|
+
{
|
|
307
|
+
onClick: () => {
|
|
308
|
+
apiRef.current.showColumnMenu(params.colDef.field);
|
|
309
|
+
},
|
|
310
|
+
sx: {
|
|
311
|
+
visibility: !!(filter == null ? void 0 : filter.form.getValues(
|
|
312
|
+
props.filters[col.field].name
|
|
313
|
+
)) ? "visible" : "hidden"
|
|
314
|
+
},
|
|
315
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_icons_material2.FilterAlt, { fontSize: "small" })
|
|
316
|
+
}
|
|
317
|
+
) })
|
|
318
|
+
] });
|
|
319
|
+
}
|
|
320
|
+
});
|
|
321
|
+
}),
|
|
322
|
+
loading: isFetching,
|
|
323
|
+
rows: data || [],
|
|
324
|
+
slots: {
|
|
325
|
+
columnMenu: (params) => {
|
|
326
|
+
return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
|
|
327
|
+
import_x_data_grid.GridColumnMenu,
|
|
328
|
+
__spreadProps(__spreadValues({}, params), {
|
|
329
|
+
slots: {
|
|
330
|
+
columnMenuUserItem: (params2) => {
|
|
331
|
+
if (!props.filters || !filter) return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_jsx_runtime2.Fragment, {});
|
|
332
|
+
const {
|
|
333
|
+
colDef: { field }
|
|
334
|
+
} = params2;
|
|
335
|
+
const menuParams = props.filters[field];
|
|
336
|
+
if (!menuParams) return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_jsx_runtime2.Fragment, {});
|
|
337
|
+
return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
|
|
338
|
+
Filter,
|
|
339
|
+
{
|
|
340
|
+
close: () => {
|
|
341
|
+
apiRef.current.hideColumnMenu();
|
|
342
|
+
},
|
|
343
|
+
formMethods: filter.form,
|
|
344
|
+
menuParams
|
|
345
|
+
}
|
|
346
|
+
);
|
|
347
|
+
},
|
|
348
|
+
columnMenuSortItem: null,
|
|
349
|
+
columnMenuFilterItem: null,
|
|
350
|
+
columnMenuColumnsItem: null
|
|
351
|
+
}
|
|
352
|
+
})
|
|
353
|
+
);
|
|
354
|
+
}
|
|
355
|
+
},
|
|
356
|
+
checkboxSelection: props.checkboxSelection,
|
|
357
|
+
rowSelectionModel: props.checkboxSelection ? selectedRows.map((row) => props.getRowId(row)) : void 0,
|
|
358
|
+
getRowId: props.getRowId
|
|
359
|
+
},
|
|
360
|
+
control: {
|
|
361
|
+
query,
|
|
362
|
+
form: props.filters ? filter == null ? void 0 : filter.form : void 0,
|
|
363
|
+
selectedRows
|
|
364
|
+
}
|
|
365
|
+
};
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
// src/paginated/datagrid-paginated.tsx
|
|
369
|
+
var import_x_data_grid2 = require("@mui/x-data-grid");
|
|
370
|
+
var import_react3 = require("react");
|
|
371
|
+
var import_react_query2 = require("@tanstack/react-query");
|
|
372
|
+
var import_icons_material3 = require("@mui/icons-material");
|
|
373
|
+
var import_material3 = require("@mui/material");
|
|
374
|
+
var import_jsx_runtime3 = require("react/jsx-runtime");
|
|
375
|
+
var defaultPagination = {
|
|
376
|
+
actualPage: 1,
|
|
377
|
+
pageSize: 24
|
|
378
|
+
};
|
|
379
|
+
function dataGridPaginated(props) {
|
|
380
|
+
var _a;
|
|
381
|
+
const [paramsPaginacion, setParamsPaginacion] = (0, import_react3.useState)(defaultPagination);
|
|
382
|
+
const filter = useFilter({ filters: props.filters });
|
|
383
|
+
const query = (0, import_react_query2.useQuery)({
|
|
384
|
+
queryKey: ["query", paramsPaginacion, filter == null ? void 0 : filter.form.watch()],
|
|
385
|
+
queryFn: () => props.getEntitiesPaginated(paramsPaginacion, filter == null ? void 0 : filter.form.watch()).then((res) => res)
|
|
386
|
+
});
|
|
387
|
+
const { data, refetch, isFetching, isError } = query;
|
|
388
|
+
const apiRef = (0, import_x_data_grid2.useGridApiRef)();
|
|
389
|
+
const { selectedRows } = useCheckboxSelection(
|
|
390
|
+
data,
|
|
391
|
+
props.getRowId || (() => 0),
|
|
392
|
+
apiRef
|
|
393
|
+
);
|
|
394
|
+
return {
|
|
395
|
+
datagridProps: {
|
|
396
|
+
apiRef,
|
|
397
|
+
paginationModel: {
|
|
398
|
+
pageSize: (data == null ? void 0 : data.paginacion.pageSize) || 0,
|
|
399
|
+
page: (data == null ? void 0 : data.paginacion.actualPage) ? data.paginacion.actualPage - 1 : 0
|
|
400
|
+
},
|
|
401
|
+
rowCount: (_a = query.data) == null ? void 0 : _a.paginacion.cantRecords,
|
|
402
|
+
columns: props.columns.map((col) => {
|
|
403
|
+
var _a2;
|
|
404
|
+
return __spreadProps(__spreadValues({}, col), {
|
|
405
|
+
sortable: false,
|
|
406
|
+
disableColumnMenu: !((_a2 = props.filters) == null ? void 0 : _a2[col.field]),
|
|
407
|
+
renderHeader: (params) => {
|
|
408
|
+
var _a3;
|
|
409
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(import_material3.Box, { sx: { ":hover > *": { visibility: "visible" } }, children: [
|
|
410
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)("strong", { style: { marginRight: 10 }, children: params.colDef.headerName }),
|
|
411
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_jsx_runtime3.Fragment, { children: ((_a3 = props.filters) == null ? void 0 : _a3[col.field]) && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
412
|
+
import_material3.IconButton,
|
|
413
|
+
{
|
|
414
|
+
onClick: () => {
|
|
415
|
+
apiRef.current.showColumnMenu(params.colDef.field);
|
|
416
|
+
},
|
|
417
|
+
sx: {
|
|
418
|
+
visibility: !!(filter == null ? void 0 : filter.form.getValues(
|
|
419
|
+
props.filters[col.field].name
|
|
420
|
+
)) ? "visible" : "hidden"
|
|
421
|
+
},
|
|
422
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_icons_material3.FilterAlt, { fontSize: "small" })
|
|
423
|
+
}
|
|
424
|
+
) })
|
|
425
|
+
] });
|
|
426
|
+
}
|
|
427
|
+
});
|
|
428
|
+
}),
|
|
429
|
+
rows: (data == null ? void 0 : data.lista) || [],
|
|
430
|
+
onPaginationModelChange: ({ page, pageSize }) => setParamsPaginacion({ actualPage: page + 1, pageSize }),
|
|
431
|
+
loading: isFetching,
|
|
432
|
+
slots: {
|
|
433
|
+
columnMenu: (params) => {
|
|
434
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
435
|
+
import_x_data_grid2.GridColumnMenu,
|
|
436
|
+
__spreadProps(__spreadValues({}, params), {
|
|
437
|
+
slots: {
|
|
438
|
+
columnMenuUserItem: (params2) => {
|
|
439
|
+
if (!props.filters || !filter) return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_jsx_runtime3.Fragment, {});
|
|
440
|
+
const {
|
|
441
|
+
colDef: { field }
|
|
442
|
+
} = params2;
|
|
443
|
+
const menuParams = props.filters[field];
|
|
444
|
+
if (!menuParams) return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_jsx_runtime3.Fragment, {});
|
|
445
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
446
|
+
Filter,
|
|
447
|
+
{
|
|
448
|
+
close: () => {
|
|
449
|
+
apiRef.current.hideColumnMenu();
|
|
450
|
+
},
|
|
451
|
+
formMethods: filter.form,
|
|
452
|
+
menuParams
|
|
453
|
+
}
|
|
454
|
+
);
|
|
455
|
+
},
|
|
456
|
+
columnMenuSortItem: null,
|
|
457
|
+
columnMenuFilterItem: null,
|
|
458
|
+
columnMenuColumnsItem: null
|
|
459
|
+
}
|
|
460
|
+
})
|
|
461
|
+
);
|
|
462
|
+
}
|
|
463
|
+
},
|
|
464
|
+
checkboxSelection: props.checkboxSelection,
|
|
465
|
+
rowSelectionModel: props.checkboxSelection ? selectedRows.map((row) => props.getRowId(row)) : void 0,
|
|
466
|
+
getRowId: props.getRowId
|
|
467
|
+
},
|
|
468
|
+
control: {
|
|
469
|
+
query,
|
|
470
|
+
form: props.filters ? filter == null ? void 0 : filter.form : void 0,
|
|
471
|
+
selectedRows
|
|
472
|
+
}
|
|
473
|
+
};
|
|
474
|
+
}
|
|
475
|
+
|
|
476
|
+
// src/useItecDataGrid.ts
|
|
477
|
+
function useItecDataGrid(props) {
|
|
478
|
+
if (props.pagination) {
|
|
479
|
+
return dataGridPaginated(props);
|
|
480
|
+
}
|
|
481
|
+
return dataGridBase(props);
|
|
482
|
+
}
|
|
483
|
+
var useItecDataGrid_default = useItecDataGrid;
|
|
484
|
+
|
|
485
|
+
// src/ItecDataGrid.tsx
|
|
486
|
+
var import_x_data_grid3 = require("@mui/x-data-grid");
|
|
487
|
+
var import_jsx_runtime4 = require("react/jsx-runtime");
|
|
488
|
+
function ItecDataGrid(props) {
|
|
489
|
+
const _a = props, { slots } = _a, rest = __objRest(_a, ["slots"]);
|
|
490
|
+
return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
|
491
|
+
import_x_data_grid3.DataGrid,
|
|
492
|
+
__spreadValues({
|
|
493
|
+
paginationMode: "server",
|
|
494
|
+
filterMode: "server",
|
|
495
|
+
slots: __spreadValues({
|
|
496
|
+
columnMenuIcon: () => /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_jsx_runtime4.Fragment, {})
|
|
497
|
+
}, slots),
|
|
498
|
+
autoHeight: true
|
|
499
|
+
}, rest)
|
|
500
|
+
);
|
|
501
|
+
}
|
|
502
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
503
|
+
0 && (module.exports = {
|
|
504
|
+
ItecDataGrid,
|
|
505
|
+
useItecDataGrid
|
|
506
|
+
});
|
|
507
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/base/datagrid.tsx","../src/common/useFilter.tsx","../src/common/useCheckboxSelection.ts","../src/Filter.tsx","../src/paginated/datagrid-paginated.tsx","../src/useItecDataGrid.ts","../src/ItecDataGrid.tsx"],"sourcesContent":["export { default as useItecDataGrid } from \"./useItecDataGrid\";\r\nexport * from \"./types\";\r\nexport * from \"./paginated/types\";\r\nexport * from \"./base/types\";\r\nexport * from \"./ItecDataGrid\";\r\n","import {\r\n GridColumnMenu,\r\n GridValidRowModel,\r\n useGridApiRef,\r\n} from \"@mui/x-data-grid\";\r\nimport { useQuery } from \"@tanstack/react-query\";\r\nimport { FieldValues } from \"react-hook-form\";\r\nimport { UseItecDataGridProps, UseItecDataGrid } from \"./types\";\r\nimport { FilterAlt } from \"@mui/icons-material\";\r\nimport { Box, IconButton } from \"@mui/material\";\r\nimport { useFilter, useCheckboxSelection } from \"../common\";\r\nimport { Filter } from \"../Filter\";\r\n\r\nexport function dataGridBase<\r\n TEntity extends GridValidRowModel,\r\n TFilter extends FieldValues = {}\r\n>(\r\n props: UseItecDataGridProps<TEntity, TFilter>\r\n): UseItecDataGrid<TEntity, TFilter> {\r\n const filter = useFilter<TFilter>({ filters: props.filters });\r\n\r\n const query = useQuery({\r\n queryKey: [\"query\", filter?.form.watch()],\r\n queryFn: () => props.getEntities(filter?.form.watch()),\r\n });\r\n\r\n const { data, refetch, isFetching, isError } = query;\r\n\r\n const apiRef = useGridApiRef();\r\n\r\n const { selectedRows } = useCheckboxSelection<TEntity>(\r\n data,\r\n props.getRowId || (() => 0),\r\n apiRef\r\n );\r\n // TODO: habría que mejorar la estructura del código para que cuando no se requiere\r\n // checkbox selection, no sea necesario el hook.\r\n\r\n return {\r\n datagridProps: {\r\n apiRef: apiRef,\r\n hideFooterPagination: true,\r\n columns: props.columns.map((col) => ({\r\n ...col,\r\n sortable: false,\r\n disableColumnMenu: !props.filters?.[col.field],\r\n renderHeader: (params) => {\r\n return (\r\n <Box sx={{ \":hover > *\": { visibility: \"visible\" } }}>\r\n <strong style={{ marginRight: 10 }}>\r\n {params.colDef.headerName}\r\n </strong>\r\n <>\r\n {props.filters?.[col.field] && (\r\n <IconButton\r\n onClick={() => {\r\n apiRef.current.showColumnMenu(params.colDef.field);\r\n // apiRef.current.showFilterPanel(params.colDef.field);\r\n }}\r\n sx={{\r\n visibility: !!filter?.form.getValues(\r\n props.filters[col.field].name\r\n )\r\n ? \"visible\"\r\n : \"hidden\",\r\n }}\r\n >\r\n <FilterAlt fontSize=\"small\" />\r\n </IconButton>\r\n )}\r\n </>\r\n </Box>\r\n );\r\n },\r\n })),\r\n loading: isFetching,\r\n rows: data || [],\r\n slots: {\r\n columnMenu: (params) => {\r\n return (\r\n <GridColumnMenu\r\n {...params}\r\n slots={{\r\n columnMenuUserItem: (params) => {\r\n if (!props.filters || !filter) return <></>;\r\n const {\r\n colDef: { field },\r\n } = params;\r\n // TODO: make field of type union of possible fields\r\n const menuParams = props.filters[field];\r\n if (!menuParams) return <></>;\r\n return (\r\n <Filter\r\n close={() => {\r\n apiRef.current.hideColumnMenu();\r\n }}\r\n formMethods={filter.form}\r\n menuParams={menuParams}\r\n />\r\n );\r\n },\r\n columnMenuSortItem: null,\r\n columnMenuFilterItem: null,\r\n columnMenuColumnsItem: null,\r\n }}\r\n />\r\n );\r\n },\r\n },\r\n checkboxSelection: props.checkboxSelection,\r\n rowSelectionModel: props.checkboxSelection\r\n ? selectedRows.map((row) => props.getRowId(row))\r\n : undefined,\r\n getRowId: props.getRowId,\r\n },\r\n control: {\r\n query: query,\r\n form: props.filters ? filter?.form : undefined,\r\n selectedRows,\r\n },\r\n };\r\n}\r\n","import { GridColumnMenuProps } from \"@mui/x-data-grid\";\r\nimport { FieldValues, useForm } from \"react-hook-form\";\r\nimport { ItecColFilters } from \"../types\";\r\nimport { Box, Button, IconButton, Stack, Tooltip } from \"@mui/material\";\r\nimport { FilterAltOff, Close, Search } from \"@mui/icons-material\";\r\nimport { useState } from \"react\";\r\nimport { Select } from \"@itaptec/form_components\";\r\n\r\ntype UseFilterProps<TFilter extends FieldValues> = {\r\n filters: ItecColFilters<TFilter> | undefined;\r\n};\r\n\r\nexport type UseFilter<TFilter extends FieldValues> = {\r\n columnMenuComponent: React.JSXElementConstructor<GridColumnMenuProps>;\r\n filter: TFilter | undefined;\r\n};\r\n\r\nexport function useFilter<TFilter extends FieldValues>(\r\n props: UseFilterProps<TFilter>\r\n) {\r\n const { filters } = props;\r\n\r\n const [filter, setFilter] = useState<TFilter>();\r\n\r\n const form = useForm<TFilter>({\r\n mode: \"onChange\",\r\n });\r\n\r\n if (!filters) {\r\n return undefined;\r\n }\r\n\r\n // const onFilterChange = () => {\r\n // handleSubmit(setFilter)();\r\n // };\r\n\r\n return {\r\n // columnMenuComponent: (props) => {\r\n // const {\r\n // colDef: { field },\r\n // } = props;\r\n\r\n // // TODO: make field of type union of possible fields\r\n\r\n // const menuParams = filters?.[field];\r\n\r\n // if (!menuParams) return undefined;\r\n\r\n // return (\r\n // <Stack\r\n // minWidth={300}\r\n // p={2}\r\n // spacing={2}\r\n // direction=\"row\"\r\n // display=\"flex\"\r\n // justifyContent=\"space-between\"\r\n // alignItems=\"center\"\r\n // >\r\n // <Box sx={{ width: \"100%\" }}>\r\n // {menuParams.type === \"select\" && (\r\n // <Select\r\n // name={menuParams.name}\r\n // control={control}\r\n // getOptions={menuParams.getOptions}\r\n // size=\"small\"\r\n // fullWidth\r\n // />\r\n // )}\r\n // </Box>\r\n // <Box display=\"flex\">\r\n // <Tooltip title=\"Limpiar filtro\">\r\n // <IconButton\r\n // onClick={() => {\r\n // resetField(menuParams.name);\r\n // // onFilterChange(); // search on filter reset\r\n // }}\r\n // >\r\n // <FilterAltOff />\r\n // </IconButton>\r\n // </Tooltip>\r\n // <Tooltip title=\"Cerrar filtro\">\r\n // <IconButton>\r\n // <Close />\r\n // </IconButton>\r\n // </Tooltip>\r\n // </Box>\r\n // </Stack>\r\n // );\r\n // },\r\n form,\r\n filter,\r\n };\r\n}\r\n\r\n{\r\n /* <Button\r\n type=\"submit\"\r\n onClick={onFilterChange}\r\n startIcon={<Search />}\r\n >\r\n Buscar\r\n </Button> */\r\n}\r\n","import { EntityListWithPagination } from \"@itaptec/http_client\";\r\nimport {\r\n GridEventListener,\r\n GridRowIdGetter,\r\n GridRowSelectionModel,\r\n GridValidRowModel,\r\n useGridApiRef,\r\n} from \"@mui/x-data-grid\";\r\nimport { useEffect, useState } from \"react\";\r\n\r\n/**\r\n * Return type of the `useCheckboxSelection` hook.\r\n */\r\nexport type UseCheckboxSelection<TEntity extends GridValidRowModel> = {\r\n selectedRows: TEntity[];\r\n};\r\n\r\n// Overloads para el hook, con y sin paginación.\r\n\r\nexport function useCheckboxSelection<TEntity extends GridValidRowModel>(\r\n data: TEntity[] | undefined,\r\n getRowId: GridRowIdGetter<TEntity>,\r\n apiRef: ReturnType<typeof useGridApiRef>\r\n): UseCheckboxSelection<TEntity>;\r\n\r\nexport function useCheckboxSelection<TEntity extends GridValidRowModel>(\r\n data: EntityListWithPagination<TEntity> | undefined,\r\n getRowId: GridRowIdGetter<TEntity>,\r\n apiRef: ReturnType<typeof useGridApiRef>\r\n): UseCheckboxSelection<TEntity>;\r\n\r\n/**\r\n *\r\n * @param data The data currently displayed in the Data Grid.\r\n * @param getRowId Function to get the id of a given row.\r\n */\r\nexport function useCheckboxSelection<TEntity extends GridValidRowModel>(\r\n data: TEntity[] | EntityListWithPagination<TEntity> | undefined,\r\n getRowId: GridRowIdGetter<TEntity>,\r\n apiRef: ReturnType<typeof useGridApiRef>\r\n) {\r\n if (Array.isArray(data)) {\r\n return useCheckboxSelectionBasic(data, getRowId, apiRef);\r\n }\r\n\r\n return useCheckboxSelectionPaginated(data, getRowId, apiRef);\r\n}\r\n\r\n// Implementaciones del overload con y sin paginación.\r\n\r\nfunction useCheckboxSelectionPaginated<TEntity extends GridValidRowModel>(\r\n data: EntityListWithPagination<TEntity> | undefined,\r\n getRowId: GridRowIdGetter<TEntity>,\r\n apiRef: ReturnType<typeof useGridApiRef>\r\n) {\r\n const [selectedRows, setSelectedRows] = useState<TEntity[]>([]);\r\n\r\n useEffect(() => {\r\n const handleRowClick: GridEventListener<\"rowSelectionCheckboxChange\"> = ({\r\n id,\r\n value,\r\n }) => {\r\n if (!data) return;\r\n\r\n if (value) {\r\n const newValue = data.lista.find((x) => getRowId(x) === id);\r\n newValue && setSelectedRows((prev) => [...prev, newValue]);\r\n } else {\r\n setSelectedRows((prev) => [...prev.filter((x) => getRowId(x) !== id)]);\r\n }\r\n };\r\n\r\n // The `subscribeEvent` method will automatically unsubscribe in the cleanup function of the `useEffect`.\r\n return apiRef.current.subscribeEvent(\r\n \"rowSelectionCheckboxChange\",\r\n handleRowClick\r\n );\r\n }, [apiRef, data]);\r\n\r\n return {\r\n selectedRows,\r\n };\r\n}\r\n\r\nfunction useCheckboxSelectionBasic<TEntity extends GridValidRowModel>(\r\n data: TEntity[] | undefined,\r\n getRowId: GridRowIdGetter<TEntity>,\r\n apiRef: ReturnType<typeof useGridApiRef>\r\n) {\r\n const [selectedRows, setSelectedRows] = useState<TEntity[]>([]);\r\n\r\n useEffect(() => {\r\n const handleRowClick: GridEventListener<\"rowSelectionCheckboxChange\"> = ({\r\n id,\r\n value,\r\n }) => {\r\n if (!data) return;\r\n\r\n if (value) {\r\n const newValue = data.find((x) => getRowId(x) === id);\r\n newValue && setSelectedRows((prev) => [...prev, newValue]);\r\n } else {\r\n setSelectedRows((prev) => [...prev.filter((x) => getRowId(x) !== id)]);\r\n }\r\n };\r\n\r\n // The `subscribeEvent` method will automatically unsubscribe in the cleanup function of the `useEffect`.\r\n return apiRef.current.subscribeEvent(\r\n \"rowSelectionCheckboxChange\",\r\n handleRowClick\r\n );\r\n }, [apiRef, data]);\r\n\r\n return {\r\n selectedRows,\r\n };\r\n}\r\n","import { FilterAltOff, Close, Search } from \"@mui/icons-material\";\r\nimport {\r\n Stack,\r\n Box,\r\n Tooltip,\r\n IconButton,\r\n Divider,\r\n Typography,\r\n InputAdornment,\r\n} from \"@mui/material\";\r\nimport { Control, FieldValues, UseFormReturn } from \"react-hook-form\";\r\nimport { ItecColFilterParams } from \"./types\";\r\nimport {\r\n Multiselect,\r\n Select,\r\n TextField,\r\n ControlledDateRangePicker,\r\n ToggleButtonGroup,\r\n ToggleButtonGroupMultiple,\r\n} from \"@itaptec/form_components\";\r\n\r\nexport type FilterProps<TFilter extends FieldValues> = {\r\n close: () => void;\r\n menuParams: ItecColFilterParams<TFilter>;\r\n // control: Control<TFilter>;\r\n formMethods: UseFormReturn<TFilter>;\r\n};\r\n\r\nexport function Filter<TFilter extends FieldValues = FieldValues>(\r\n props: FilterProps<TFilter>\r\n) {\r\n const {\r\n close,\r\n menuParams,\r\n formMethods: { control, resetField },\r\n } = props;\r\n\r\n // TODO: autofocus fields on mount\r\n return (\r\n <Stack\r\n minWidth={300}\r\n px={1}\r\n spacing={2}\r\n direction=\"row\"\r\n display=\"flex\"\r\n justifyContent=\"space-between\"\r\n alignItems=\"center\"\r\n >\r\n <Box sx={{ width: \"100%\" }}>\r\n {menuParams.type === \"select\" && (\r\n <Select\r\n name={menuParams.name}\r\n control={control}\r\n {...menuParams.props}\r\n />\r\n )}\r\n {menuParams.type === \"multiselect\" && (\r\n <Multiselect\r\n name={menuParams.name}\r\n control={control}\r\n {...menuParams.props}\r\n />\r\n )}\r\n {menuParams.type === \"date-range\" && (\r\n <ControlledDateRangePicker\r\n label={\"Fecha\"}\r\n control={control}\r\n {...menuParams.props}\r\n />\r\n )}\r\n {menuParams.type === \"text\" && (\r\n <TextField\r\n name={menuParams.name}\r\n control={control}\r\n InputProps={{\r\n startAdornment: (\r\n <InputAdornment position=\"start\">\r\n <Search />\r\n </InputAdornment>\r\n ),\r\n }}\r\n debounceTime={500}\r\n {...menuParams.props}\r\n />\r\n )}\r\n {menuParams.type === \"button-group\" && (\r\n <ToggleButtonGroup\r\n name={menuParams.name}\r\n control={control}\r\n {...menuParams.props}\r\n />\r\n )}\r\n {menuParams.type === \"multiple-button-group\" && (\r\n <ToggleButtonGroupMultiple\r\n name={menuParams.name}\r\n control={control}\r\n {...menuParams.props}\r\n />\r\n )}\r\n </Box>\r\n <Box display=\"flex\">\r\n <Tooltip title=\"Limpiar filtro\">\r\n <IconButton\r\n onClick={() => {\r\n resetField(menuParams.name);\r\n close();\r\n // onFilterChange(); // search on filter reset\r\n }}\r\n >\r\n <FilterAltOff />\r\n </IconButton>\r\n </Tooltip>\r\n <Tooltip title=\"Cerrar filtro\">\r\n <IconButton onClick={close}>\r\n <Close />\r\n </IconButton>\r\n </Tooltip>\r\n </Box>\r\n </Stack>\r\n );\r\n}\r\n","import { PaginationRequest } from \"@itaptec/http_client\";\r\nimport {\r\n GridColumnMenu,\r\n GridValidRowModel,\r\n useGridApiRef,\r\n} from \"@mui/x-data-grid\";\r\nimport { useState } from \"react\";\r\nimport { FieldValues } from \"react-hook-form\";\r\nimport {\r\n UseItecDataGridPaginated,\r\n UseItecDataGridPaginatedProps,\r\n} from \"./types\";\r\nimport { useQuery } from \"@tanstack/react-query\";\r\nimport { useFilter, useCheckboxSelection } from \"../common\";\r\nimport { FilterAlt } from \"@mui/icons-material\";\r\nimport { Filter } from \"../Filter\";\r\nimport { Box, IconButton } from \"@mui/material\";\r\n\r\nconst defaultPagination: PaginationRequest = {\r\n actualPage: 1,\r\n pageSize: 24,\r\n};\r\n\r\nexport function dataGridPaginated<\r\n TEntity extends GridValidRowModel,\r\n TFilter extends FieldValues = {}\r\n>(\r\n props: UseItecDataGridPaginatedProps<TEntity, TFilter>\r\n): UseItecDataGridPaginated<TEntity, TFilter> {\r\n const [paramsPaginacion, setParamsPaginacion] =\r\n useState<PaginationRequest>(defaultPagination);\r\n\r\n const filter = useFilter<TFilter>({ filters: props.filters });\r\n\r\n const query = useQuery({\r\n queryKey: [\"query\", paramsPaginacion, filter?.form.watch()],\r\n queryFn: () =>\r\n props\r\n .getEntitiesPaginated(paramsPaginacion, filter?.form.watch())\r\n .then((res) => res),\r\n });\r\n\r\n const { data, refetch, isFetching, isError } = query;\r\n\r\n const apiRef = useGridApiRef();\r\n\r\n const { selectedRows } = useCheckboxSelection<TEntity>(\r\n data,\r\n props.getRowId || (() => 0),\r\n apiRef\r\n );\r\n // TODO: habría que mejorar la estructura del código para que cuando no se requiere\r\n // checkbox selection, no sea necesario el hook.\r\n\r\n return {\r\n datagridProps: {\r\n apiRef: apiRef,\r\n paginationModel: {\r\n pageSize: data?.paginacion.pageSize || 0,\r\n page: data?.paginacion.actualPage ? data.paginacion.actualPage - 1 : 0,\r\n },\r\n rowCount: query.data?.paginacion.cantRecords,\r\n columns: props.columns.map((col) => ({\r\n ...col,\r\n sortable: false,\r\n disableColumnMenu: !props.filters?.[col.field],\r\n renderHeader: (params) => {\r\n return (\r\n <Box sx={{ \":hover > *\": { visibility: \"visible\" } }}>\r\n <strong style={{ marginRight: 10 }}>\r\n {params.colDef.headerName}\r\n </strong>\r\n <>\r\n {props.filters?.[col.field] && (\r\n <IconButton\r\n onClick={() => {\r\n apiRef.current.showColumnMenu(params.colDef.field);\r\n // apiRef.current.showFilterPanel(params.colDef.field);\r\n }}\r\n sx={{\r\n visibility: !!filter?.form.getValues(\r\n props.filters[col.field].name\r\n )\r\n ? \"visible\"\r\n : \"hidden\",\r\n }}\r\n >\r\n <FilterAlt fontSize=\"small\" />\r\n </IconButton>\r\n )}\r\n </>\r\n </Box>\r\n );\r\n },\r\n })),\r\n rows: data?.lista || [],\r\n onPaginationModelChange: ({ page, pageSize }) =>\r\n setParamsPaginacion({ actualPage: page + 1, pageSize: pageSize }),\r\n loading: isFetching,\r\n slots: {\r\n columnMenu: (params) => {\r\n return (\r\n <GridColumnMenu\r\n {...params}\r\n slots={{\r\n columnMenuUserItem: (params) => {\r\n if (!props.filters || !filter) return <></>;\r\n const {\r\n colDef: { field },\r\n } = params;\r\n // TODO: make field of type union of possible fields\r\n const menuParams = props.filters[field];\r\n if (!menuParams) return <></>;\r\n return (\r\n <Filter\r\n close={() => {\r\n apiRef.current.hideColumnMenu();\r\n }}\r\n formMethods={filter.form}\r\n menuParams={menuParams}\r\n />\r\n );\r\n },\r\n columnMenuSortItem: null,\r\n columnMenuFilterItem: null,\r\n columnMenuColumnsItem: null,\r\n }}\r\n />\r\n );\r\n },\r\n },\r\n checkboxSelection: props.checkboxSelection,\r\n rowSelectionModel: props.checkboxSelection\r\n ? selectedRows.map((row) => props.getRowId(row))\r\n : undefined,\r\n getRowId: props.getRowId,\r\n },\r\n control: {\r\n query: query,\r\n form: props.filters ? filter?.form : undefined,\r\n selectedRows,\r\n },\r\n };\r\n}\r\n","import { GridValidRowModel } from \"@mui/x-data-grid\";\r\nimport { FieldValues } from \"react-hook-form\";\r\nimport { UseItecDataGrid, UseItecDataGridProps, dataGridBase } from \"./base\";\r\nimport {\r\n UseItecDataGridPaginatedProps,\r\n UseItecDataGridPaginated,\r\n dataGridPaginated,\r\n} from \"./paginated\";\r\n\r\n// function useItecDataGrid<\r\n// Paginated extends boolean = false,\r\n// Filterable extends boolean = false,\r\n// Sortable extends boolean = false,\r\n// Selectable extends boolean = false,\r\n// TEntity extends GridValidRowModel,\r\n// TFilter extends FieldValues = {}\r\n// >(\r\n// props: UseItecDataGridPaginatedProps<TEntity, TFilter>\r\n// ): UseItecDataGrid<TEntity>;\r\n\r\nfunction useItecDataGrid<\r\n TEntity extends GridValidRowModel,\r\n TFilter extends FieldValues = {}\r\n>(\r\n props: UseItecDataGridPaginatedProps<TEntity, TFilter>\r\n): UseItecDataGrid<TEntity, TFilter>;\r\n\r\nfunction useItecDataGrid<\r\n TEntity extends GridValidRowModel,\r\n TFilter extends FieldValues = {}\r\n>(\r\n props: UseItecDataGridProps<TEntity, TFilter>\r\n): UseItecDataGridPaginated<TEntity, TFilter>;\r\n\r\nfunction useItecDataGrid<\r\n TEntity extends GridValidRowModel,\r\n TFilter extends FieldValues = {}\r\n>(\r\n props:\r\n | UseItecDataGridProps<TEntity, TFilter>\r\n | UseItecDataGridPaginatedProps<TEntity, TFilter>\r\n):\r\n | UseItecDataGrid<TEntity, TFilter>\r\n | UseItecDataGridPaginated<TEntity, TFilter> {\r\n if (props.pagination) {\r\n return dataGridPaginated<TEntity, TFilter>(props);\r\n }\r\n\r\n return dataGridBase<TEntity, TFilter>(props);\r\n}\r\n\r\nexport default useItecDataGrid;\r\n","import { DataGrid, DataGridProps, GridValidRowModel } from \"@mui/x-data-grid\";\r\n\r\nexport type ItecDataGridProps<TEntity extends GridValidRowModel> = Omit<\r\n DataGridProps<TEntity>,\r\n \"paginationMode\" | \"filterMode\"\r\n>;\r\n\r\nexport function ItecDataGrid<TEntity extends GridValidRowModel>(\r\n props: ItecDataGridProps<TEntity>\r\n) {\r\n const { slots, ...rest } = props;\r\n\r\n return (\r\n <DataGrid\r\n paginationMode=\"server\"\r\n filterMode=\"server\"\r\n slots={{\r\n columnMenuIcon: () => <></>,\r\n ...slots,\r\n }}\r\n autoHeight={true}\r\n {...rest}\r\n />\r\n );\r\n}\r\n"],"mappings":"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","names":["import_icons_material","import_material","import_react","import_jsx_runtime","_a","params","import_x_data_grid","import_react","import_react_query","import_icons_material","import_material","import_jsx_runtime","_a","params","import_x_data_grid","import_jsx_runtime"]}
|