@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.mjs
ADDED
|
@@ -0,0 +1,501 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __defProps = Object.defineProperties;
|
|
3
|
+
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
4
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
7
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
8
|
+
var __spreadValues = (a, b) => {
|
|
9
|
+
for (var prop in b || (b = {}))
|
|
10
|
+
if (__hasOwnProp.call(b, prop))
|
|
11
|
+
__defNormalProp(a, prop, b[prop]);
|
|
12
|
+
if (__getOwnPropSymbols)
|
|
13
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
14
|
+
if (__propIsEnum.call(b, prop))
|
|
15
|
+
__defNormalProp(a, prop, b[prop]);
|
|
16
|
+
}
|
|
17
|
+
return a;
|
|
18
|
+
};
|
|
19
|
+
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
20
|
+
var __objRest = (source, exclude) => {
|
|
21
|
+
var target = {};
|
|
22
|
+
for (var prop in source)
|
|
23
|
+
if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
|
|
24
|
+
target[prop] = source[prop];
|
|
25
|
+
if (source != null && __getOwnPropSymbols)
|
|
26
|
+
for (var prop of __getOwnPropSymbols(source)) {
|
|
27
|
+
if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
|
|
28
|
+
target[prop] = source[prop];
|
|
29
|
+
}
|
|
30
|
+
return target;
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
// src/base/datagrid.tsx
|
|
34
|
+
import {
|
|
35
|
+
GridColumnMenu,
|
|
36
|
+
useGridApiRef
|
|
37
|
+
} from "@mui/x-data-grid";
|
|
38
|
+
import { useQuery } from "@tanstack/react-query";
|
|
39
|
+
import { FilterAlt } from "@mui/icons-material";
|
|
40
|
+
import { Box as Box2, IconButton as IconButton2 } from "@mui/material";
|
|
41
|
+
|
|
42
|
+
// src/common/useFilter.tsx
|
|
43
|
+
import { useForm } from "react-hook-form";
|
|
44
|
+
import { useState } from "react";
|
|
45
|
+
function useFilter(props) {
|
|
46
|
+
const { filters } = props;
|
|
47
|
+
const [filter, setFilter] = useState();
|
|
48
|
+
const form = useForm({
|
|
49
|
+
mode: "onChange"
|
|
50
|
+
});
|
|
51
|
+
if (!filters) {
|
|
52
|
+
return void 0;
|
|
53
|
+
}
|
|
54
|
+
return {
|
|
55
|
+
// columnMenuComponent: (props) => {
|
|
56
|
+
// const {
|
|
57
|
+
// colDef: { field },
|
|
58
|
+
// } = props;
|
|
59
|
+
// // TODO: make field of type union of possible fields
|
|
60
|
+
// const menuParams = filters?.[field];
|
|
61
|
+
// if (!menuParams) return undefined;
|
|
62
|
+
// return (
|
|
63
|
+
// <Stack
|
|
64
|
+
// minWidth={300}
|
|
65
|
+
// p={2}
|
|
66
|
+
// spacing={2}
|
|
67
|
+
// direction="row"
|
|
68
|
+
// display="flex"
|
|
69
|
+
// justifyContent="space-between"
|
|
70
|
+
// alignItems="center"
|
|
71
|
+
// >
|
|
72
|
+
// <Box sx={{ width: "100%" }}>
|
|
73
|
+
// {menuParams.type === "select" && (
|
|
74
|
+
// <Select
|
|
75
|
+
// name={menuParams.name}
|
|
76
|
+
// control={control}
|
|
77
|
+
// getOptions={menuParams.getOptions}
|
|
78
|
+
// size="small"
|
|
79
|
+
// fullWidth
|
|
80
|
+
// />
|
|
81
|
+
// )}
|
|
82
|
+
// </Box>
|
|
83
|
+
// <Box display="flex">
|
|
84
|
+
// <Tooltip title="Limpiar filtro">
|
|
85
|
+
// <IconButton
|
|
86
|
+
// onClick={() => {
|
|
87
|
+
// resetField(menuParams.name);
|
|
88
|
+
// // onFilterChange(); // search on filter reset
|
|
89
|
+
// }}
|
|
90
|
+
// >
|
|
91
|
+
// <FilterAltOff />
|
|
92
|
+
// </IconButton>
|
|
93
|
+
// </Tooltip>
|
|
94
|
+
// <Tooltip title="Cerrar filtro">
|
|
95
|
+
// <IconButton>
|
|
96
|
+
// <Close />
|
|
97
|
+
// </IconButton>
|
|
98
|
+
// </Tooltip>
|
|
99
|
+
// </Box>
|
|
100
|
+
// </Stack>
|
|
101
|
+
// );
|
|
102
|
+
// },
|
|
103
|
+
form,
|
|
104
|
+
filter
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
{
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
// src/common/useCheckboxSelection.ts
|
|
111
|
+
import { useEffect, useState as useState2 } from "react";
|
|
112
|
+
function useCheckboxSelection(data, getRowId, apiRef) {
|
|
113
|
+
if (Array.isArray(data)) {
|
|
114
|
+
return useCheckboxSelectionBasic(data, getRowId, apiRef);
|
|
115
|
+
}
|
|
116
|
+
return useCheckboxSelectionPaginated(data, getRowId, apiRef);
|
|
117
|
+
}
|
|
118
|
+
function useCheckboxSelectionPaginated(data, getRowId, apiRef) {
|
|
119
|
+
const [selectedRows, setSelectedRows] = useState2([]);
|
|
120
|
+
useEffect(() => {
|
|
121
|
+
const handleRowClick = ({
|
|
122
|
+
id,
|
|
123
|
+
value
|
|
124
|
+
}) => {
|
|
125
|
+
if (!data) return;
|
|
126
|
+
if (value) {
|
|
127
|
+
const newValue = data.lista.find((x) => getRowId(x) === id);
|
|
128
|
+
newValue && setSelectedRows((prev) => [...prev, newValue]);
|
|
129
|
+
} else {
|
|
130
|
+
setSelectedRows((prev) => [...prev.filter((x) => getRowId(x) !== id)]);
|
|
131
|
+
}
|
|
132
|
+
};
|
|
133
|
+
return apiRef.current.subscribeEvent(
|
|
134
|
+
"rowSelectionCheckboxChange",
|
|
135
|
+
handleRowClick
|
|
136
|
+
);
|
|
137
|
+
}, [apiRef, data]);
|
|
138
|
+
return {
|
|
139
|
+
selectedRows
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
function useCheckboxSelectionBasic(data, getRowId, apiRef) {
|
|
143
|
+
const [selectedRows, setSelectedRows] = useState2([]);
|
|
144
|
+
useEffect(() => {
|
|
145
|
+
const handleRowClick = ({
|
|
146
|
+
id,
|
|
147
|
+
value
|
|
148
|
+
}) => {
|
|
149
|
+
if (!data) return;
|
|
150
|
+
if (value) {
|
|
151
|
+
const newValue = data.find((x) => getRowId(x) === id);
|
|
152
|
+
newValue && setSelectedRows((prev) => [...prev, newValue]);
|
|
153
|
+
} else {
|
|
154
|
+
setSelectedRows((prev) => [...prev.filter((x) => getRowId(x) !== id)]);
|
|
155
|
+
}
|
|
156
|
+
};
|
|
157
|
+
return apiRef.current.subscribeEvent(
|
|
158
|
+
"rowSelectionCheckboxChange",
|
|
159
|
+
handleRowClick
|
|
160
|
+
);
|
|
161
|
+
}, [apiRef, data]);
|
|
162
|
+
return {
|
|
163
|
+
selectedRows
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
// src/Filter.tsx
|
|
168
|
+
import { FilterAltOff, Close, Search } from "@mui/icons-material";
|
|
169
|
+
import {
|
|
170
|
+
Stack,
|
|
171
|
+
Box,
|
|
172
|
+
Tooltip,
|
|
173
|
+
IconButton,
|
|
174
|
+
InputAdornment
|
|
175
|
+
} from "@mui/material";
|
|
176
|
+
import {
|
|
177
|
+
Multiselect,
|
|
178
|
+
Select,
|
|
179
|
+
TextField,
|
|
180
|
+
ControlledDateRangePicker,
|
|
181
|
+
ToggleButtonGroup,
|
|
182
|
+
ToggleButtonGroupMultiple
|
|
183
|
+
} from "@itaptec/form_components";
|
|
184
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
185
|
+
function Filter(props) {
|
|
186
|
+
const {
|
|
187
|
+
close,
|
|
188
|
+
menuParams,
|
|
189
|
+
formMethods: { control, resetField }
|
|
190
|
+
} = props;
|
|
191
|
+
return /* @__PURE__ */ jsxs(
|
|
192
|
+
Stack,
|
|
193
|
+
{
|
|
194
|
+
minWidth: 300,
|
|
195
|
+
px: 1,
|
|
196
|
+
spacing: 2,
|
|
197
|
+
direction: "row",
|
|
198
|
+
display: "flex",
|
|
199
|
+
justifyContent: "space-between",
|
|
200
|
+
alignItems: "center",
|
|
201
|
+
children: [
|
|
202
|
+
/* @__PURE__ */ jsxs(Box, { sx: { width: "100%" }, children: [
|
|
203
|
+
menuParams.type === "select" && /* @__PURE__ */ jsx(
|
|
204
|
+
Select,
|
|
205
|
+
__spreadValues({
|
|
206
|
+
name: menuParams.name,
|
|
207
|
+
control
|
|
208
|
+
}, menuParams.props)
|
|
209
|
+
),
|
|
210
|
+
menuParams.type === "multiselect" && /* @__PURE__ */ jsx(
|
|
211
|
+
Multiselect,
|
|
212
|
+
__spreadValues({
|
|
213
|
+
name: menuParams.name,
|
|
214
|
+
control
|
|
215
|
+
}, menuParams.props)
|
|
216
|
+
),
|
|
217
|
+
menuParams.type === "date-range" && /* @__PURE__ */ jsx(
|
|
218
|
+
ControlledDateRangePicker,
|
|
219
|
+
__spreadValues({
|
|
220
|
+
label: "Fecha",
|
|
221
|
+
control
|
|
222
|
+
}, menuParams.props)
|
|
223
|
+
),
|
|
224
|
+
menuParams.type === "text" && /* @__PURE__ */ jsx(
|
|
225
|
+
TextField,
|
|
226
|
+
__spreadValues({
|
|
227
|
+
name: menuParams.name,
|
|
228
|
+
control,
|
|
229
|
+
InputProps: {
|
|
230
|
+
startAdornment: /* @__PURE__ */ jsx(InputAdornment, { position: "start", children: /* @__PURE__ */ jsx(Search, {}) })
|
|
231
|
+
},
|
|
232
|
+
debounceTime: 500
|
|
233
|
+
}, menuParams.props)
|
|
234
|
+
),
|
|
235
|
+
menuParams.type === "button-group" && /* @__PURE__ */ jsx(
|
|
236
|
+
ToggleButtonGroup,
|
|
237
|
+
__spreadValues({
|
|
238
|
+
name: menuParams.name,
|
|
239
|
+
control
|
|
240
|
+
}, menuParams.props)
|
|
241
|
+
),
|
|
242
|
+
menuParams.type === "multiple-button-group" && /* @__PURE__ */ jsx(
|
|
243
|
+
ToggleButtonGroupMultiple,
|
|
244
|
+
__spreadValues({
|
|
245
|
+
name: menuParams.name,
|
|
246
|
+
control
|
|
247
|
+
}, menuParams.props)
|
|
248
|
+
)
|
|
249
|
+
] }),
|
|
250
|
+
/* @__PURE__ */ jsxs(Box, { display: "flex", children: [
|
|
251
|
+
/* @__PURE__ */ jsx(Tooltip, { title: "Limpiar filtro", children: /* @__PURE__ */ jsx(
|
|
252
|
+
IconButton,
|
|
253
|
+
{
|
|
254
|
+
onClick: () => {
|
|
255
|
+
resetField(menuParams.name);
|
|
256
|
+
close();
|
|
257
|
+
},
|
|
258
|
+
children: /* @__PURE__ */ jsx(FilterAltOff, {})
|
|
259
|
+
}
|
|
260
|
+
) }),
|
|
261
|
+
/* @__PURE__ */ jsx(Tooltip, { title: "Cerrar filtro", children: /* @__PURE__ */ jsx(IconButton, { onClick: close, children: /* @__PURE__ */ jsx(Close, {}) }) })
|
|
262
|
+
] })
|
|
263
|
+
]
|
|
264
|
+
}
|
|
265
|
+
);
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
// src/base/datagrid.tsx
|
|
269
|
+
import { Fragment, jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
270
|
+
function dataGridBase(props) {
|
|
271
|
+
const filter = useFilter({ filters: props.filters });
|
|
272
|
+
const query = useQuery({
|
|
273
|
+
queryKey: ["query", filter == null ? void 0 : filter.form.watch()],
|
|
274
|
+
queryFn: () => props.getEntities(filter == null ? void 0 : filter.form.watch())
|
|
275
|
+
});
|
|
276
|
+
const { data, refetch, isFetching, isError } = query;
|
|
277
|
+
const apiRef = useGridApiRef();
|
|
278
|
+
const { selectedRows } = useCheckboxSelection(
|
|
279
|
+
data,
|
|
280
|
+
props.getRowId || (() => 0),
|
|
281
|
+
apiRef
|
|
282
|
+
);
|
|
283
|
+
return {
|
|
284
|
+
datagridProps: {
|
|
285
|
+
apiRef,
|
|
286
|
+
hideFooterPagination: true,
|
|
287
|
+
columns: props.columns.map((col) => {
|
|
288
|
+
var _a;
|
|
289
|
+
return __spreadProps(__spreadValues({}, col), {
|
|
290
|
+
sortable: false,
|
|
291
|
+
disableColumnMenu: !((_a = props.filters) == null ? void 0 : _a[col.field]),
|
|
292
|
+
renderHeader: (params) => {
|
|
293
|
+
var _a2;
|
|
294
|
+
return /* @__PURE__ */ jsxs2(Box2, { sx: { ":hover > *": { visibility: "visible" } }, children: [
|
|
295
|
+
/* @__PURE__ */ jsx2("strong", { style: { marginRight: 10 }, children: params.colDef.headerName }),
|
|
296
|
+
/* @__PURE__ */ jsx2(Fragment, { children: ((_a2 = props.filters) == null ? void 0 : _a2[col.field]) && /* @__PURE__ */ jsx2(
|
|
297
|
+
IconButton2,
|
|
298
|
+
{
|
|
299
|
+
onClick: () => {
|
|
300
|
+
apiRef.current.showColumnMenu(params.colDef.field);
|
|
301
|
+
},
|
|
302
|
+
sx: {
|
|
303
|
+
visibility: !!(filter == null ? void 0 : filter.form.getValues(
|
|
304
|
+
props.filters[col.field].name
|
|
305
|
+
)) ? "visible" : "hidden"
|
|
306
|
+
},
|
|
307
|
+
children: /* @__PURE__ */ jsx2(FilterAlt, { fontSize: "small" })
|
|
308
|
+
}
|
|
309
|
+
) })
|
|
310
|
+
] });
|
|
311
|
+
}
|
|
312
|
+
});
|
|
313
|
+
}),
|
|
314
|
+
loading: isFetching,
|
|
315
|
+
rows: data || [],
|
|
316
|
+
slots: {
|
|
317
|
+
columnMenu: (params) => {
|
|
318
|
+
return /* @__PURE__ */ jsx2(
|
|
319
|
+
GridColumnMenu,
|
|
320
|
+
__spreadProps(__spreadValues({}, params), {
|
|
321
|
+
slots: {
|
|
322
|
+
columnMenuUserItem: (params2) => {
|
|
323
|
+
if (!props.filters || !filter) return /* @__PURE__ */ jsx2(Fragment, {});
|
|
324
|
+
const {
|
|
325
|
+
colDef: { field }
|
|
326
|
+
} = params2;
|
|
327
|
+
const menuParams = props.filters[field];
|
|
328
|
+
if (!menuParams) return /* @__PURE__ */ jsx2(Fragment, {});
|
|
329
|
+
return /* @__PURE__ */ jsx2(
|
|
330
|
+
Filter,
|
|
331
|
+
{
|
|
332
|
+
close: () => {
|
|
333
|
+
apiRef.current.hideColumnMenu();
|
|
334
|
+
},
|
|
335
|
+
formMethods: filter.form,
|
|
336
|
+
menuParams
|
|
337
|
+
}
|
|
338
|
+
);
|
|
339
|
+
},
|
|
340
|
+
columnMenuSortItem: null,
|
|
341
|
+
columnMenuFilterItem: null,
|
|
342
|
+
columnMenuColumnsItem: null
|
|
343
|
+
}
|
|
344
|
+
})
|
|
345
|
+
);
|
|
346
|
+
}
|
|
347
|
+
},
|
|
348
|
+
checkboxSelection: props.checkboxSelection,
|
|
349
|
+
rowSelectionModel: props.checkboxSelection ? selectedRows.map((row) => props.getRowId(row)) : void 0,
|
|
350
|
+
getRowId: props.getRowId
|
|
351
|
+
},
|
|
352
|
+
control: {
|
|
353
|
+
query,
|
|
354
|
+
form: props.filters ? filter == null ? void 0 : filter.form : void 0,
|
|
355
|
+
selectedRows
|
|
356
|
+
}
|
|
357
|
+
};
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
// src/paginated/datagrid-paginated.tsx
|
|
361
|
+
import {
|
|
362
|
+
GridColumnMenu as GridColumnMenu2,
|
|
363
|
+
useGridApiRef as useGridApiRef2
|
|
364
|
+
} from "@mui/x-data-grid";
|
|
365
|
+
import { useState as useState3 } from "react";
|
|
366
|
+
import { useQuery as useQuery2 } from "@tanstack/react-query";
|
|
367
|
+
import { FilterAlt as FilterAlt2 } from "@mui/icons-material";
|
|
368
|
+
import { Box as Box3, IconButton as IconButton3 } from "@mui/material";
|
|
369
|
+
import { Fragment as Fragment2, jsx as jsx3, jsxs as jsxs3 } from "react/jsx-runtime";
|
|
370
|
+
var defaultPagination = {
|
|
371
|
+
actualPage: 1,
|
|
372
|
+
pageSize: 24
|
|
373
|
+
};
|
|
374
|
+
function dataGridPaginated(props) {
|
|
375
|
+
var _a;
|
|
376
|
+
const [paramsPaginacion, setParamsPaginacion] = useState3(defaultPagination);
|
|
377
|
+
const filter = useFilter({ filters: props.filters });
|
|
378
|
+
const query = useQuery2({
|
|
379
|
+
queryKey: ["query", paramsPaginacion, filter == null ? void 0 : filter.form.watch()],
|
|
380
|
+
queryFn: () => props.getEntitiesPaginated(paramsPaginacion, filter == null ? void 0 : filter.form.watch()).then((res) => res)
|
|
381
|
+
});
|
|
382
|
+
const { data, refetch, isFetching, isError } = query;
|
|
383
|
+
const apiRef = useGridApiRef2();
|
|
384
|
+
const { selectedRows } = useCheckboxSelection(
|
|
385
|
+
data,
|
|
386
|
+
props.getRowId || (() => 0),
|
|
387
|
+
apiRef
|
|
388
|
+
);
|
|
389
|
+
return {
|
|
390
|
+
datagridProps: {
|
|
391
|
+
apiRef,
|
|
392
|
+
paginationModel: {
|
|
393
|
+
pageSize: (data == null ? void 0 : data.paginacion.pageSize) || 0,
|
|
394
|
+
page: (data == null ? void 0 : data.paginacion.actualPage) ? data.paginacion.actualPage - 1 : 0
|
|
395
|
+
},
|
|
396
|
+
rowCount: (_a = query.data) == null ? void 0 : _a.paginacion.cantRecords,
|
|
397
|
+
columns: props.columns.map((col) => {
|
|
398
|
+
var _a2;
|
|
399
|
+
return __spreadProps(__spreadValues({}, col), {
|
|
400
|
+
sortable: false,
|
|
401
|
+
disableColumnMenu: !((_a2 = props.filters) == null ? void 0 : _a2[col.field]),
|
|
402
|
+
renderHeader: (params) => {
|
|
403
|
+
var _a3;
|
|
404
|
+
return /* @__PURE__ */ jsxs3(Box3, { sx: { ":hover > *": { visibility: "visible" } }, children: [
|
|
405
|
+
/* @__PURE__ */ jsx3("strong", { style: { marginRight: 10 }, children: params.colDef.headerName }),
|
|
406
|
+
/* @__PURE__ */ jsx3(Fragment2, { children: ((_a3 = props.filters) == null ? void 0 : _a3[col.field]) && /* @__PURE__ */ jsx3(
|
|
407
|
+
IconButton3,
|
|
408
|
+
{
|
|
409
|
+
onClick: () => {
|
|
410
|
+
apiRef.current.showColumnMenu(params.colDef.field);
|
|
411
|
+
},
|
|
412
|
+
sx: {
|
|
413
|
+
visibility: !!(filter == null ? void 0 : filter.form.getValues(
|
|
414
|
+
props.filters[col.field].name
|
|
415
|
+
)) ? "visible" : "hidden"
|
|
416
|
+
},
|
|
417
|
+
children: /* @__PURE__ */ jsx3(FilterAlt2, { fontSize: "small" })
|
|
418
|
+
}
|
|
419
|
+
) })
|
|
420
|
+
] });
|
|
421
|
+
}
|
|
422
|
+
});
|
|
423
|
+
}),
|
|
424
|
+
rows: (data == null ? void 0 : data.lista) || [],
|
|
425
|
+
onPaginationModelChange: ({ page, pageSize }) => setParamsPaginacion({ actualPage: page + 1, pageSize }),
|
|
426
|
+
loading: isFetching,
|
|
427
|
+
slots: {
|
|
428
|
+
columnMenu: (params) => {
|
|
429
|
+
return /* @__PURE__ */ jsx3(
|
|
430
|
+
GridColumnMenu2,
|
|
431
|
+
__spreadProps(__spreadValues({}, params), {
|
|
432
|
+
slots: {
|
|
433
|
+
columnMenuUserItem: (params2) => {
|
|
434
|
+
if (!props.filters || !filter) return /* @__PURE__ */ jsx3(Fragment2, {});
|
|
435
|
+
const {
|
|
436
|
+
colDef: { field }
|
|
437
|
+
} = params2;
|
|
438
|
+
const menuParams = props.filters[field];
|
|
439
|
+
if (!menuParams) return /* @__PURE__ */ jsx3(Fragment2, {});
|
|
440
|
+
return /* @__PURE__ */ jsx3(
|
|
441
|
+
Filter,
|
|
442
|
+
{
|
|
443
|
+
close: () => {
|
|
444
|
+
apiRef.current.hideColumnMenu();
|
|
445
|
+
},
|
|
446
|
+
formMethods: filter.form,
|
|
447
|
+
menuParams
|
|
448
|
+
}
|
|
449
|
+
);
|
|
450
|
+
},
|
|
451
|
+
columnMenuSortItem: null,
|
|
452
|
+
columnMenuFilterItem: null,
|
|
453
|
+
columnMenuColumnsItem: null
|
|
454
|
+
}
|
|
455
|
+
})
|
|
456
|
+
);
|
|
457
|
+
}
|
|
458
|
+
},
|
|
459
|
+
checkboxSelection: props.checkboxSelection,
|
|
460
|
+
rowSelectionModel: props.checkboxSelection ? selectedRows.map((row) => props.getRowId(row)) : void 0,
|
|
461
|
+
getRowId: props.getRowId
|
|
462
|
+
},
|
|
463
|
+
control: {
|
|
464
|
+
query,
|
|
465
|
+
form: props.filters ? filter == null ? void 0 : filter.form : void 0,
|
|
466
|
+
selectedRows
|
|
467
|
+
}
|
|
468
|
+
};
|
|
469
|
+
}
|
|
470
|
+
|
|
471
|
+
// src/useItecDataGrid.ts
|
|
472
|
+
function useItecDataGrid(props) {
|
|
473
|
+
if (props.pagination) {
|
|
474
|
+
return dataGridPaginated(props);
|
|
475
|
+
}
|
|
476
|
+
return dataGridBase(props);
|
|
477
|
+
}
|
|
478
|
+
var useItecDataGrid_default = useItecDataGrid;
|
|
479
|
+
|
|
480
|
+
// src/ItecDataGrid.tsx
|
|
481
|
+
import { DataGrid } from "@mui/x-data-grid";
|
|
482
|
+
import { Fragment as Fragment3, jsx as jsx4 } from "react/jsx-runtime";
|
|
483
|
+
function ItecDataGrid(props) {
|
|
484
|
+
const _a = props, { slots } = _a, rest = __objRest(_a, ["slots"]);
|
|
485
|
+
return /* @__PURE__ */ jsx4(
|
|
486
|
+
DataGrid,
|
|
487
|
+
__spreadValues({
|
|
488
|
+
paginationMode: "server",
|
|
489
|
+
filterMode: "server",
|
|
490
|
+
slots: __spreadValues({
|
|
491
|
+
columnMenuIcon: () => /* @__PURE__ */ jsx4(Fragment3, {})
|
|
492
|
+
}, slots),
|
|
493
|
+
autoHeight: true
|
|
494
|
+
}, rest)
|
|
495
|
+
);
|
|
496
|
+
}
|
|
497
|
+
export {
|
|
498
|
+
ItecDataGrid,
|
|
499
|
+
useItecDataGrid_default as useItecDataGrid
|
|
500
|
+
};
|
|
501
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../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":["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":["Box","IconButton","useState","jsx","jsxs","_a","Box","IconButton","params","GridColumnMenu","useGridApiRef","useState","useQuery","FilterAlt","Box","IconButton","Fragment","jsx","jsxs","useState","useQuery","useGridApiRef","_a","Box","IconButton","FilterAlt","GridColumnMenu","params","Fragment","jsx"]}
|
package/package.json
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@itaptec/datagrid",
|
|
3
|
+
"version": "0.0.1-beta.8",
|
|
4
|
+
"description": "This README would normally document whatever steps are necessary to get your application up and running.",
|
|
5
|
+
"main": "./dist/index.js",
|
|
6
|
+
"module": "./dist/index.mjs",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"files": [
|
|
9
|
+
"dist",
|
|
10
|
+
"README.md"
|
|
11
|
+
],
|
|
12
|
+
"scripts": {
|
|
13
|
+
"build": "tsup",
|
|
14
|
+
"test": "echo \"Error: no test specified\" && exit 1",
|
|
15
|
+
"storybook": "storybook dev -p 6006",
|
|
16
|
+
"build-storybook": "storybook build"
|
|
17
|
+
},
|
|
18
|
+
"repository": {
|
|
19
|
+
"type": "git",
|
|
20
|
+
"url": "git+ssh://git@bitbucket.org/itaptecteam/packagesfrontend_itec-datagrid.git"
|
|
21
|
+
},
|
|
22
|
+
"author": "",
|
|
23
|
+
"license": "ISC",
|
|
24
|
+
"bugs": {
|
|
25
|
+
"url": "https://bitbucket.org/itaptecteam/packagesfrontend_itec-datagrid/issues"
|
|
26
|
+
},
|
|
27
|
+
"homepage": "https://bitbucket.org/itaptecteam/packagesfrontend_itec-datagrid#readme",
|
|
28
|
+
"devDependencies": {
|
|
29
|
+
"@emotion/react": "^11.11.3",
|
|
30
|
+
"@emotion/styled": "^11.11.0",
|
|
31
|
+
"@faker-js/faker": "^8.4.1",
|
|
32
|
+
"@fontsource/material-icons": "^5.0.13",
|
|
33
|
+
"@fontsource/roboto": "^5.0.8",
|
|
34
|
+
"@itaptec/form_components": "0.0.1-beta.31",
|
|
35
|
+
"@itaptec/http_client": "0.0.1-beta.10",
|
|
36
|
+
"@mui/icons-material": "^5.15.10",
|
|
37
|
+
"@mui/material": "^5.15.10",
|
|
38
|
+
"@mui/x-data-grid": "^6.19.4",
|
|
39
|
+
"@storybook/addon-essentials": "^7.6.17",
|
|
40
|
+
"@storybook/addon-interactions": "^7.6.17",
|
|
41
|
+
"@storybook/addon-links": "^7.6.17",
|
|
42
|
+
"@storybook/addon-onboarding": "1.0.11",
|
|
43
|
+
"@storybook/addon-themes": "^7.6.17",
|
|
44
|
+
"@storybook/blocks": "^7.6.17",
|
|
45
|
+
"@storybook/manager-api": "^7.6.17",
|
|
46
|
+
"@storybook/react": "^7.6.17",
|
|
47
|
+
"@storybook/react-vite": "^7.6.17",
|
|
48
|
+
"@storybook/test": "^7.6.17",
|
|
49
|
+
"@storybook/theming": "^7.6.17",
|
|
50
|
+
"@tanstack/eslint-plugin-query": "^5.20.1",
|
|
51
|
+
"@tanstack/react-query": "^5.24.1",
|
|
52
|
+
"@types/react": "^18.2.57",
|
|
53
|
+
"react": "^18.2.0",
|
|
54
|
+
"react-dom": "18.2.0",
|
|
55
|
+
"react-hook-form": "^7.50.1",
|
|
56
|
+
"storybook": "^7.6.17",
|
|
57
|
+
"ts-node": "^10.9.2",
|
|
58
|
+
"tslib": "^2.6.2",
|
|
59
|
+
"tsup": "^8.0.2",
|
|
60
|
+
"typescript": "^5.3.3"
|
|
61
|
+
},
|
|
62
|
+
"peerDependencies": {
|
|
63
|
+
"@emotion/react": "^11.11.3",
|
|
64
|
+
"@emotion/styled": "^11.11.0",
|
|
65
|
+
"@itaptec/form_components": "0.0.1-beta.31",
|
|
66
|
+
"@itaptec/http_client": "0.0.1-beta.10",
|
|
67
|
+
"@mui/icons-material": "^5.15.10",
|
|
68
|
+
"@mui/material": "^5.15.10",
|
|
69
|
+
"@mui/x-data-grid": "^6.19.4",
|
|
70
|
+
"@tanstack/react-query": "^5.24.1",
|
|
71
|
+
"react": "^18.2.0",
|
|
72
|
+
"react-hook-form": "^7.50.1"
|
|
73
|
+
}
|
|
74
|
+
}
|