@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/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
+ }