@xyo-network/react-payload-table 2.64.0 → 2.64.1

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.
Files changed (34) hide show
  1. package/dist/browser/components/DynamicTable/DynamicTableRow.js +41 -5
  2. package/dist/browser/components/DynamicTable/DynamicTableRow.js.map +1 -1
  3. package/dist/browser/components/DynamicTable/PayloadDynamicTableColumnConfig.js +2 -1
  4. package/dist/browser/components/DynamicTable/PayloadDynamicTableColumnConfig.js.map +1 -1
  5. package/dist/browser/components/DynamicTable/Table.js +129 -20
  6. package/dist/browser/components/DynamicTable/Table.js.map +1 -1
  7. package/dist/browser/components/DynamicTable/index.js +236 -3
  8. package/dist/browser/components/DynamicTable/index.js.map +1 -1
  9. package/dist/browser/components/Table/PayloadTableColumnConfig.js +3 -2
  10. package/dist/browser/components/Table/PayloadTableColumnConfig.js.map +1 -1
  11. package/dist/browser/components/Table/Table.js +259 -11
  12. package/dist/browser/components/Table/Table.js.map +1 -1
  13. package/dist/browser/components/Table/TableBody.js +93 -11
  14. package/dist/browser/components/Table/TableBody.js.map +1 -1
  15. package/dist/browser/components/Table/TableFooter.js +52 -6
  16. package/dist/browser/components/Table/TableFooter.js.map +1 -1
  17. package/dist/browser/components/Table/TableHead.js +20 -3
  18. package/dist/browser/components/Table/TableHead.js.map +1 -1
  19. package/dist/browser/components/Table/TablePagination.js +2 -1
  20. package/dist/browser/components/Table/TablePagination.js.map +1 -1
  21. package/dist/browser/components/Table/TableRow.js +15 -3
  22. package/dist/browser/components/Table/TableRow.js.map +1 -1
  23. package/dist/browser/components/Table/TableRowNoData.js +4 -3
  24. package/dist/browser/components/Table/TableRowNoData.js.map +1 -1
  25. package/dist/browser/components/Table/index.js +351 -6
  26. package/dist/browser/components/Table/index.js.map +1 -1
  27. package/dist/browser/components/Table/types/index.js +0 -4
  28. package/dist/browser/components/Table/types/index.js.map +1 -1
  29. package/dist/browser/components/index.js +586 -2
  30. package/dist/browser/components/index.js.map +1 -1
  31. package/dist/browser/index.js +586 -1
  32. package/dist/browser/index.js.map +1 -1
  33. package/dist/docs.json +116 -116
  34. package/package.json +18 -18
@@ -1,2 +1,587 @@
1
- export * from "./components";
1
+ // src/components/DynamicTable/DynamicTableRow.tsx
2
+ import {
3
+ CheckCircleOutlineRounded as CheckCircleOutlineRoundedIcon,
4
+ ErrorOutlineRounded as ErrorOutlineRoundedIcon,
5
+ WarningAmberRounded as WarningAmberRoundedIcon
6
+ } from "@mui/icons-material";
7
+ import { TableCell, TableRow, Typography } from "@mui/material";
8
+ import { usePromise } from "@xylabs/react-promise";
9
+ import { useBreakpoint } from "@xylabs/react-shared";
10
+ import { PayloadHasher } from "@xyo-network/hash";
11
+ import { PayloadValidator } from "@xyo-network/payload-validator";
12
+ import { useNetwork } from "@xyo-network/react-network";
13
+ import { usePayloadRenderPluginResolver } from "@xyo-network/react-payload-plugin-resolver";
14
+ import { HashTableCell, usePayloadHash } from "@xyo-network/react-shared";
15
+
16
+ // src/components/DynamicTable/PayloadDynamicTableColumnConfig.ts
17
+ var payloadDynamicTableColumnConfigDefaults = () => {
18
+ const xs = [
19
+ { alignment: "left", name: "Hash", slug: "hash", width: "100%" },
20
+ { alignment: "left", name: "Schema", slug: "schema", width: "50px" },
21
+ { alignment: "left", name: "Valid", slug: "valid", width: "50px" }
22
+ ];
23
+ const sm = [
24
+ { alignment: "left", name: "Icon", slug: "icon", width: "50px" },
25
+ { alignment: "left", name: "Hash", slug: "hash", width: "100%" },
26
+ { alignment: "left", name: "Schema", slug: "schema", width: "50px" },
27
+ { alignment: "left", name: "Valid", slug: "valid", width: "50px" }
28
+ ];
29
+ const md = [
30
+ { alignment: "left", name: "Icon", slug: "icon", width: "50px" },
31
+ { alignment: "left", name: "Hash", slug: "hash", width: "100%" },
32
+ { alignment: "left", name: "Schema", slug: "schema", width: "50px" },
33
+ { alignment: "left", name: "Valid", slug: "valid", width: "50px" }
34
+ ];
35
+ const lg = [
36
+ { alignment: "left", name: "Icon", slug: "icon", width: "50px" },
37
+ { alignment: "left", name: "Hash", slug: "hash", width: "100%" },
38
+ { alignment: "left", name: "Schema", slug: "schema", width: "50px" },
39
+ { alignment: "left", name: "Render", slug: "render", width: "50px" },
40
+ { alignment: "left", name: "Valid", slug: "valid", width: "50px" }
41
+ ];
42
+ const xl = [
43
+ { alignment: "left", name: "Icon", slug: "icon", width: "50px" },
44
+ { alignment: "left", name: "Hash", slug: "hash", width: "100%" },
45
+ { alignment: "left", name: "Schema", slug: "schema", width: "50px" },
46
+ { alignment: "left", name: "Render", slug: "render", width: "50px" },
47
+ { alignment: "left", name: "Valid", slug: "valid", width: "50px" }
48
+ ];
49
+ return { lg, md, sm, xl, xs };
50
+ };
51
+
52
+ // src/components/DynamicTable/DynamicTableRow.tsx
53
+ import { jsx } from "react/jsx-runtime";
54
+ var PayloadDynamicTableRow = ({
55
+ archive,
56
+ columns = payloadDynamicTableColumnConfigDefaults(),
57
+ exploreDomain,
58
+ network: networkProp,
59
+ payload,
60
+ ...props
61
+ }) => {
62
+ const breakPoint = useBreakpoint();
63
+ const payloadHash = usePayloadHash(payload);
64
+ const { network } = useNetwork();
65
+ const { resolver } = usePayloadRenderPluginResolver();
66
+ const [validationErrors = []] = usePromise(async () => payload ? await new PayloadValidator(payload).validate() : void 0, [payload]);
67
+ const isValid = validationErrors.length === 0;
68
+ const payloadFieldCount = payload ? Object.keys(PayloadHasher.hashFields(payload)).length : 0;
69
+ const hash = (props2) => /* @__PURE__ */ jsx(
70
+ HashTableCell,
71
+ {
72
+ align: "left",
73
+ archive,
74
+ value: payloadHash,
75
+ dataType: "payload",
76
+ exploreDomain,
77
+ network: networkProp ?? network?.slug,
78
+ ...props2
79
+ },
80
+ "hash"
81
+ );
82
+ const schema = (props2) => /* @__PURE__ */ jsx(TableCell, { align: "left", ...props2, children: /* @__PURE__ */ jsx(Typography, { fontFamily: "monospace", variant: "body2", noWrap: true, children: payload?.schema }) }, "payloads");
83
+ const details = (props2) => /* @__PURE__ */ jsx(TableCell, { align: "left", ...props2, children: /* @__PURE__ */ jsx(Typography, { fontFamily: "monospace", variant: "body2", noWrap: true, children: payloadFieldCount }) }, "payloads");
84
+ const render = (props2) => {
85
+ const Render = payload ? resolver?.resolve(payload)?.components.table.cell : void 0;
86
+ return Render ? /* @__PURE__ */ jsx(Render, { payload, ...props2 }) : /* @__PURE__ */ jsx(TableCell, { align: "left", ...props2 }, "payloads");
87
+ };
88
+ const icon = (props2) => {
89
+ const Avatar = payload ? resolver?.resolve(payload)?.components.avatar.image : void 0;
90
+ return /* @__PURE__ */ jsx(TableCell, { align: "left", ...props2, children: Avatar ? /* @__PURE__ */ jsx(Avatar, { payload }) : null }, "payloads");
91
+ };
92
+ const valid = (props2) => /* @__PURE__ */ jsx(TableCell, { align: "center", ...props2, children: isValid === void 0 && payload != void 0 ? /* @__PURE__ */ jsx(WarningAmberRoundedIcon, { fontSize: "small", color: "warning" }) : isValid === true ? /* @__PURE__ */ jsx(CheckCircleOutlineRoundedIcon, { fontSize: "small", color: "success" }) : isValid === false ? /* @__PURE__ */ jsx(ErrorOutlineRoundedIcon, { color: "error", fontSize: "small" }) : (
93
+ //nbsp to keep row height consistent even when no data is provided for the row
94
+ /* @__PURE__ */ jsx(Typography, { children: " \xA0" })
95
+ ) }, "valid");
96
+ const tableCells = {
97
+ details,
98
+ hash,
99
+ icon,
100
+ render,
101
+ schema,
102
+ valid
103
+ };
104
+ return breakPoint ? /* @__PURE__ */ jsx(TableRow, { style: { maxWidth: "100vw" }, ...props, children: columns[breakPoint]?.map((column) => {
105
+ return column.slug ? tableCells[column.slug]({}) : null;
106
+ }) }) : null;
107
+ };
108
+
109
+ // src/components/DynamicTable/Table.tsx
110
+ import { FirstPage as FirstPageIcon, KeyboardArrowLeft, KeyboardArrowRight, LastPage as LastPageIcon } from "@mui/icons-material";
111
+ import {
112
+ Alert,
113
+ Box,
114
+ IconButton,
115
+ Table,
116
+ TableBody,
117
+ TableCell as TableCell2,
118
+ TableFooter,
119
+ TableHead,
120
+ TablePagination,
121
+ TableRow as TableRow2,
122
+ Typography as Typography2,
123
+ useTheme
124
+ } from "@mui/material";
125
+ import { useBreakpoint as useBreakpoint2 } from "@xylabs/react-shared";
126
+ import { ThrownErrorBoundary } from "@xyo-network/react-error";
127
+ import { usePayloadHashes } from "@xyo-network/react-shared";
128
+ import { useEffect, useMemo, useState } from "react";
129
+ import { jsx as jsx2, jsxs } from "react/jsx-runtime";
130
+ function TablePaginationActions(props) {
131
+ const theme = useTheme();
132
+ const { count, page, rowsPerPage, onPageChange } = props;
133
+ const handleFirstPageButtonClick = (event) => {
134
+ onPageChange(event, 0);
135
+ };
136
+ const handleBackButtonClick = (event) => {
137
+ onPageChange(event, page - 1);
138
+ };
139
+ const handleNextButtonClick = (event) => {
140
+ onPageChange(event, page + 1);
141
+ };
142
+ const handleLastPageButtonClick = (event) => {
143
+ onPageChange(event, Math.max(0, Math.ceil(count / rowsPerPage) - 1));
144
+ };
145
+ return /* @__PURE__ */ jsxs(Box, { sx: { flexShrink: 0, ml: 2.5 }, children: [
146
+ /* @__PURE__ */ jsx2(IconButton, { onClick: handleFirstPageButtonClick, disabled: page === 0, "aria-label": "first page", children: theme.direction === "rtl" ? /* @__PURE__ */ jsx2(LastPageIcon, {}) : /* @__PURE__ */ jsx2(FirstPageIcon, {}) }),
147
+ /* @__PURE__ */ jsx2(IconButton, { onClick: handleBackButtonClick, disabled: page === 0, "aria-label": "previous page", children: theme.direction === "rtl" ? /* @__PURE__ */ jsx2(KeyboardArrowRight, {}) : /* @__PURE__ */ jsx2(KeyboardArrowLeft, {}) }),
148
+ /* @__PURE__ */ jsx2(IconButton, { onClick: handleNextButtonClick, disabled: page >= Math.ceil(count / rowsPerPage) - 1, "aria-label": "next page", children: theme.direction === "rtl" ? /* @__PURE__ */ jsx2(KeyboardArrowLeft, {}) : /* @__PURE__ */ jsx2(KeyboardArrowRight, {}) }),
149
+ /* @__PURE__ */ jsx2(IconButton, { onClick: handleLastPageButtonClick, disabled: page >= Math.ceil(count / rowsPerPage) - 1, "aria-label": "last page", children: theme.direction === "rtl" ? /* @__PURE__ */ jsx2(FirstPageIcon, {}) : /* @__PURE__ */ jsx2(LastPageIcon, {}) })
150
+ ] });
151
+ }
152
+ var PayloadDynamicTable = ({
153
+ archive,
154
+ children,
155
+ columns = payloadDynamicTableColumnConfigDefaults(),
156
+ exploreDomain,
157
+ onRowClick,
158
+ rowsPerPage: rowsPerPageProp = 10,
159
+ payloads,
160
+ ...props
161
+ }) => {
162
+ const breakPoint = useBreakpoint2();
163
+ const [page, setPage] = useState(0);
164
+ const [rowsPerPage, setRowsPerPage] = useState(rowsPerPageProp);
165
+ const payloadCount = payloads ? payloads.length : 0;
166
+ const emptyRows = page > 0 ? Math.max(0, (1 + page) * rowsPerPage - payloadCount) : 0;
167
+ const pagedPayloads = useMemo(() => payloads?.slice(page * rowsPerPage, page * rowsPerPage + rowsPerPage), [payloads, page, rowsPerPage]);
168
+ const payloadPairs = usePayloadHashes(pagedPayloads);
169
+ useEffect(() => {
170
+ setRowsPerPage(rowsPerPageProp);
171
+ }, [rowsPerPageProp]);
172
+ const handleChangePage = (event, newPage) => {
173
+ setPage(newPage);
174
+ };
175
+ const handleChangeRowsPerPage = (event) => {
176
+ setRowsPerPage(parseInt(event.target.value, 10));
177
+ setPage(0);
178
+ };
179
+ return breakPoint ? /* @__PURE__ */ jsxs(Table, { stickyHeader: true, ...props, children: [
180
+ /* @__PURE__ */ jsx2(TableHead, { children: /* @__PURE__ */ jsx2(TableRow2, { children: columns[breakPoint]?.map((column, index) => {
181
+ return /* @__PURE__ */ jsx2(TableCell2, { align: column.alignment ?? "left", width: column.width, children: /* @__PURE__ */ jsx2(Typography2, { variant: "body2", noWrap: true, children: column.name }) }, index);
182
+ }) }) }),
183
+ /* @__PURE__ */ jsxs(TableBody, { sx: { overflowY: "scroll " }, children: [
184
+ payloadPairs?.map(([payload, hash], index) => {
185
+ return /* @__PURE__ */ jsx2(
186
+ ThrownErrorBoundary,
187
+ {
188
+ boundaryName: "PayloadTableBody",
189
+ errorComponent: (e) => /* @__PURE__ */ jsxs(Alert, { severity: "error", children: [
190
+ "Error Loading Payload: ",
191
+ /* @__PURE__ */ jsx2(Typography2, { fontWeight: "bold", children: e.message })
192
+ ] }),
193
+ children: /* @__PURE__ */ jsx2(
194
+ PayloadDynamicTableRow,
195
+ {
196
+ archive,
197
+ onClick: onRowClick ? () => {
198
+ onRowClick(payload);
199
+ } : void 0,
200
+ exploreDomain,
201
+ payload
202
+ }
203
+ )
204
+ },
205
+ `${hash}-${index}`
206
+ );
207
+ }),
208
+ children,
209
+ emptyRows > 0 && Array(emptyRows).fill(/* @__PURE__ */ jsx2(PayloadDynamicTableRow, {}))
210
+ ] }),
211
+ /* @__PURE__ */ jsx2(TableFooter, { children: /* @__PURE__ */ jsx2(TableRow2, { children: /* @__PURE__ */ jsx2(
212
+ TablePagination,
213
+ {
214
+ rowsPerPageOptions: [5, 10, 25, { label: "All", value: -1 }],
215
+ colSpan: 5,
216
+ count: payloadCount,
217
+ rowsPerPage,
218
+ page,
219
+ SelectProps: {
220
+ inputProps: {
221
+ "aria-label": "rows per page"
222
+ },
223
+ native: true
224
+ },
225
+ onPageChange: handleChangePage,
226
+ onRowsPerPageChange: handleChangeRowsPerPage,
227
+ ActionsComponent: TablePaginationActions
228
+ }
229
+ ) }) })
230
+ ] }) : null;
231
+ };
232
+
233
+ // src/components/Table/PayloadTableColumnConfig.ts
234
+ var payloadColumnNames = {
235
+ hash: "Hash",
236
+ schema: "Schema",
237
+ valid: "Valid"
238
+ };
239
+ var payloadTableColumnConfigDefaults = () => {
240
+ const xs = ["hash", "schema", "valid"];
241
+ const sm = ["hash", "schema", "valid"];
242
+ const md = ["hash", "schema", "valid"];
243
+ const lg = ["hash", "schema", "valid"];
244
+ const xl = ["hash", "schema", "valid"];
245
+ return { lg, md, sm, xl, xs };
246
+ };
247
+
248
+ // src/components/Table/Table.tsx
249
+ import { TableEx } from "@xyo-network/react-table";
250
+ import { forwardRef, useEffect as useEffect2, useMemo as useMemo2, useState as useState2 } from "react";
251
+
252
+ // src/components/Table/TableBody.tsx
253
+ import { Alert as Alert2, TableBody as TableBody2, Typography as Typography4 } from "@mui/material";
254
+ import { ThrownErrorBoundary as ThrownErrorBoundary2 } from "@xyo-network/react-error";
255
+ import { usePayloadHashes as usePayloadHashes2 } from "@xyo-network/react-shared";
256
+
257
+ // src/components/Table/TableRow.tsx
258
+ import {
259
+ CheckCircleOutlineRounded as CheckCircleOutlineRoundedIcon2,
260
+ ErrorOutlineRounded as ErrorOutlineRoundedIcon2,
261
+ WarningAmberRounded as WarningAmberRoundedIcon2
262
+ } from "@mui/icons-material";
263
+ import { alpha, TableCell as TableCell3, TableRow as TableRow3, Typography as Typography3 } from "@mui/material";
264
+ import { usePromise as usePromise2 } from "@xylabs/react-promise";
265
+ import { useBreakpoint as useBreakpoint3 } from "@xylabs/react-shared";
266
+ import { PayloadValidator as PayloadValidator2 } from "@xyo-network/payload-validator";
267
+ import { useNetwork as useNetwork2 } from "@xyo-network/react-network";
268
+ import { HashTableCell as HashTableCell2, usePayloadHash as usePayloadHash2 } from "@xyo-network/react-shared";
269
+ import { Fragment, jsx as jsx3, jsxs as jsxs2 } from "react/jsx-runtime";
270
+ var PayloadTableRow = ({
271
+ archive,
272
+ columns = payloadTableColumnConfigDefaults(),
273
+ exploreDomain,
274
+ maxSchemaDepth,
275
+ network: networkProp,
276
+ payload,
277
+ ...props
278
+ }) => {
279
+ const breakPoint = useBreakpoint3();
280
+ const payloadHash = usePayloadHash2(payload);
281
+ const { network } = useNetwork2();
282
+ const [errors = []] = usePromise2(async () => payload ? await new PayloadValidator2(payload).validate() : void 0, [payload]);
283
+ const isValid = errors.length === 0;
284
+ const hash = (props2) => /* @__PURE__ */ jsx3(
285
+ HashTableCell2,
286
+ {
287
+ archive,
288
+ width: "100%",
289
+ value: payloadHash,
290
+ dataType: "payload",
291
+ exploreDomain,
292
+ network: networkProp ?? network?.slug,
293
+ ...props2
294
+ },
295
+ "hash"
296
+ );
297
+ const reduceSchemaDepth = (schema2, maxSchemaDepth2) => {
298
+ if (maxSchemaDepth2) {
299
+ const parts = schema2?.split(".") ?? [];
300
+ const partsToRemove = parts.length - maxSchemaDepth2 > 0 ? parts.length - maxSchemaDepth2 : 0;
301
+ if (partsToRemove > 0) {
302
+ return /* @__PURE__ */ jsxs2(Fragment, { children: [
303
+ /* @__PURE__ */ jsx3(Fragment, { children: "\u2026" }),
304
+ `${parts.slice(partsToRemove).reduce((previousValue, part) => `${previousValue}.${part}`)}`
305
+ ] });
306
+ }
307
+ }
308
+ return schema2;
309
+ };
310
+ const schema = (props2) => /* @__PURE__ */ jsx3(TableCell3, { title: payload?.schema, align: "center", ...props2, children: /* @__PURE__ */ jsx3(Typography3, { fontFamily: "monospace", variant: "body2", noWrap: true, children: reduceSchemaDepth(payload?.schema, maxSchemaDepth) }) }, "payloads");
311
+ const valid = (props2) => /* @__PURE__ */ jsx3(TableCell3, { align: "center", ...props2, children: isValid === void 0 && payload != void 0 ? /* @__PURE__ */ jsx3(WarningAmberRoundedIcon2, { fontSize: "small", color: "warning" }) : isValid === true ? /* @__PURE__ */ jsx3(CheckCircleOutlineRoundedIcon2, { fontSize: "small", color: "success" }) : isValid === false ? /* @__PURE__ */ jsx3(ErrorOutlineRoundedIcon2, { color: "error", fontSize: "small" }) : (
312
+ //to keep row height consistent when no data provided, may need fix later
313
+ /* @__PURE__ */ jsx3(ErrorOutlineRoundedIcon2, { sx: { color: alpha("#fff", 0) }, fontSize: "small" })
314
+ ) }, "valid");
315
+ const tableCells = {
316
+ hash,
317
+ schema,
318
+ valid
319
+ };
320
+ return breakPoint ? /* @__PURE__ */ jsx3(TableRow3, { style: { maxWidth: "100vw" }, ...props, children: columns[breakPoint]?.map((column) => {
321
+ return tableCells[column]({});
322
+ }) }) : null;
323
+ };
324
+
325
+ // src/components/Table/TableBody.tsx
326
+ import { jsx as jsx4, jsxs as jsxs3 } from "react/jsx-runtime";
327
+ var PayloadTableBody = ({
328
+ children,
329
+ exploreDomain,
330
+ payloads,
331
+ archive,
332
+ maxSchemaDepth,
333
+ onRowClick,
334
+ emptyRows,
335
+ noResults,
336
+ NoResultRowComponent,
337
+ ...props
338
+ }) => {
339
+ const payloadPairs = usePayloadHashes2(payloads);
340
+ return /* @__PURE__ */ jsxs3(TableBody2, { ...props, children: [
341
+ noResults && NoResultRowComponent ? /* @__PURE__ */ jsx4(NoResultRowComponent, {}) : null,
342
+ payloadPairs?.map(([payload, hash], index) => {
343
+ return /* @__PURE__ */ jsx4(
344
+ ThrownErrorBoundary2,
345
+ {
346
+ boundaryName: "PayloadTableBody",
347
+ errorComponent: (e) => /* @__PURE__ */ jsxs3(Alert2, { severity: "error", children: [
348
+ "Error Loading Payload: ",
349
+ /* @__PURE__ */ jsx4(Typography4, { fontWeight: "bold", children: e.message })
350
+ ] }),
351
+ children: /* @__PURE__ */ jsx4(
352
+ PayloadTableRow,
353
+ {
354
+ maxSchemaDepth,
355
+ archive,
356
+ onClick: onRowClick ? () => {
357
+ onRowClick(payload);
358
+ } : void 0,
359
+ exploreDomain,
360
+ payload
361
+ }
362
+ )
363
+ },
364
+ `${hash}-${index}`
365
+ );
366
+ }),
367
+ children,
368
+ (emptyRows ?? 0) > 0 && Array(emptyRows).fill(/* @__PURE__ */ jsx4(PayloadTableRow, {}))
369
+ ] });
370
+ };
371
+
372
+ // src/components/Table/TableFooter.tsx
373
+ import { styled, TablePagination as TablePagination2, TableRow as TableRow4 } from "@mui/material";
374
+ import { TableFooterEx } from "@xyo-network/react-table";
375
+
376
+ // src/components/Table/TablePagination.tsx
377
+ import { FirstPage as FirstPageIcon2, KeyboardArrowLeft as KeyboardArrowLeft2, KeyboardArrowRight as KeyboardArrowRight2, LastPage as LastPageIcon2 } from "@mui/icons-material";
378
+ import { Box as Box2, CircularProgress, IconButton as IconButton2, useTheme as useTheme2 } from "@mui/material";
379
+ import { useEvent } from "@xyo-network/react-event";
380
+ import { Fragment as Fragment2, jsx as jsx5, jsxs as jsxs4 } from "react/jsx-runtime";
381
+ function TablePaginationActions2({ count, enableNextPage, loading, onPageChange, page, rowsPerPage }) {
382
+ const theme = useTheme2();
383
+ const [paginationRef, paginationDispatch] = useEvent();
384
+ const handleFirstPageButtonClick = (event) => {
385
+ paginationDispatch("firstPage", "click", "true");
386
+ onPageChange(event, 0);
387
+ };
388
+ const handleBackButtonClick = (event) => {
389
+ paginationDispatch("previousPage", "click", (page - 1)?.toString());
390
+ onPageChange(event, page - 1);
391
+ };
392
+ const handleNextButtonClick = (event) => {
393
+ paginationDispatch("nextPage", "click", (page + 1)?.toString());
394
+ onPageChange(event, page + 1);
395
+ };
396
+ const handleLastPageButtonClick = (event) => {
397
+ paginationDispatch("lastPage", "click", "true");
398
+ onPageChange(event, Math.max(0, Math.ceil(count / rowsPerPage) - 1));
399
+ };
400
+ return /* @__PURE__ */ jsxs4(Fragment2, { children: [
401
+ loading ? /* @__PURE__ */ jsx5(CircularProgress, { size: "small", sx: { height: theme.spacing(2), position: "absolute", width: theme.spacing(2) } }) : null,
402
+ /* @__PURE__ */ jsxs4(Box2, { sx: { flexShrink: 0, ml: 2.5 }, children: [
403
+ /* @__PURE__ */ jsx5(IconButton2, { onClick: handleFirstPageButtonClick, disabled: page === 0, "aria-label": "first page", children: theme.direction === "rtl" ? /* @__PURE__ */ jsx5(LastPageIcon2, {}) : /* @__PURE__ */ jsx5(FirstPageIcon2, {}) }),
404
+ /* @__PURE__ */ jsx5(IconButton2, { ref: paginationRef, onClick: handleBackButtonClick, disabled: page === 0, "aria-label": "previous page", children: theme.direction === "rtl" ? /* @__PURE__ */ jsx5(KeyboardArrowRight2, {}) : /* @__PURE__ */ jsx5(KeyboardArrowLeft2, {}) }),
405
+ /* @__PURE__ */ jsx5(
406
+ IconButton2,
407
+ {
408
+ ref: paginationRef,
409
+ onClick: handleNextButtonClick,
410
+ disabled: !enableNextPage && page >= Math.ceil(count / rowsPerPage) - 1,
411
+ "aria-label": "next page",
412
+ children: theme.direction === "rtl" ? /* @__PURE__ */ jsx5(KeyboardArrowLeft2, {}) : /* @__PURE__ */ jsx5(KeyboardArrowRight2, {})
413
+ }
414
+ ),
415
+ /* @__PURE__ */ jsx5(IconButton2, { onClick: handleLastPageButtonClick, disabled: page >= Math.ceil(count / rowsPerPage) - 1, "aria-label": "last page", children: theme.direction === "rtl" ? /* @__PURE__ */ jsx5(FirstPageIcon2, {}) : /* @__PURE__ */ jsx5(LastPageIcon2, {}) })
416
+ ] })
417
+ ] });
418
+ }
419
+
420
+ // src/components/Table/TableFooter.tsx
421
+ import { jsx as jsx6 } from "react/jsx-runtime";
422
+ var PayloadTableFooter = ({
423
+ count,
424
+ variant,
425
+ page,
426
+ rowsPerPage,
427
+ handleChangePage = () => void 0,
428
+ handleChangeRowsPerPage = () => void 0,
429
+ fetchMorePayloads,
430
+ loading
431
+ }) => /* @__PURE__ */ jsx6(TableFooterEx, { variant, children: /* @__PURE__ */ jsx6(TableRow4, { children: /* @__PURE__ */ jsx6(
432
+ StyledTablePagination,
433
+ {
434
+ rowsPerPageOptions: [5, 10, 25, { label: "All", value: -1 }],
435
+ count: count ?? 0,
436
+ rowsPerPage: rowsPerPage ?? 10,
437
+ page: page ?? 0,
438
+ SelectProps: {
439
+ inputProps: {
440
+ "aria-label": "rows per page"
441
+ },
442
+ native: true
443
+ },
444
+ onPageChange: handleChangePage,
445
+ onRowsPerPageChange: handleChangeRowsPerPage,
446
+ ActionsComponent: (props) => /* @__PURE__ */ jsx6(TablePaginationActions2, { enableNextPage: !!fetchMorePayloads, loading, ...props })
447
+ }
448
+ ) }) });
449
+ var StyledTablePagination = styled(TablePagination2)(({ theme }) => ({
450
+ "& > .MuiToolbar-root": {
451
+ paddingLeft: theme.spacing(1)
452
+ },
453
+ borderTop: "1px solid",
454
+ borderTopColor: theme.palette.divider
455
+ }));
456
+
457
+ // src/components/Table/TableHead.tsx
458
+ import { TableCell as TableCell4, TableHead as TableHead2, TableRow as TableRow5, Typography as Typography5 } from "@mui/material";
459
+ import { useBreakpoint as useBreakpoint4 } from "@xylabs/react-shared";
460
+ import { jsx as jsx7 } from "react/jsx-runtime";
461
+ var PayloadTableHead = ({ columns = payloadTableColumnConfigDefaults(), ...props }) => {
462
+ const breakPoint = useBreakpoint4();
463
+ return /* @__PURE__ */ jsx7(TableHead2, { ...props, children: /* @__PURE__ */ jsx7(TableRow5, { children: breakPoint && columns ? columns[breakPoint]?.map((column, index) => {
464
+ return /* @__PURE__ */ jsx7(TableCell4, { width: index === 0 ? "100%" : void 0, align: index === 0 ? "left" : "center", children: /* @__PURE__ */ jsx7(Typography5, { variant: "body2", noWrap: true, children: payloadColumnNames[column] }) }, index);
465
+ }) : null }) });
466
+ };
467
+
468
+ // src/components/Table/TableRowNoData.tsx
469
+ import { styled as styled2, TableCell as TableCell5, TableRow as TableRow6, Typography as Typography6 } from "@mui/material";
470
+ import { jsx as jsx8, jsxs as jsxs5 } from "react/jsx-runtime";
471
+ var TableRowNoData = ({ additionalCells, hideBorder = false, typographyProps, ...props }) => {
472
+ return /* @__PURE__ */ jsxs5(TableRow6, { ...props, children: [
473
+ /* @__PURE__ */ jsx8(StyledTableCell, { hideBorder, children: /* @__PURE__ */ jsx8(Typography6, { variant: "body2", ...typographyProps, children: "No Data To Display..." }) }),
474
+ additionalCells ? Array(additionalCells).fill(void 0).map((_fill, index) => /* @__PURE__ */ jsx8(StyledTableCell, { hideBorder }, index)) : null
475
+ ] });
476
+ };
477
+ var StyledTableCell = styled2(TableCell5, {
478
+ name: "StyledTableCell",
479
+ shouldForwardProp: (prop) => prop !== "hideBorder"
480
+ })(({ hideBorder }) => ({
481
+ ...hideBorder && { border: "none" }
482
+ }));
483
+
484
+ // src/components/Table/Table.tsx
485
+ import { jsx as jsx9, jsxs as jsxs6 } from "react/jsx-runtime";
486
+ var PayloadTableWithRef = forwardRef(
487
+ ({
488
+ exploreDomain,
489
+ archive,
490
+ onRowClick,
491
+ fetchMorePayloads,
492
+ rowsPerPage: rowsPerPageProp = 25,
493
+ payloads,
494
+ columns,
495
+ PayloadTableHeadComponent = PayloadTableHead,
496
+ PayloadTableBodyComponent = PayloadTableBody,
497
+ PayloadTableFooterComponent = PayloadTableFooter,
498
+ maxSchemaDepth,
499
+ count = 0,
500
+ loading = false,
501
+ variant = "scrollable",
502
+ ...props
503
+ }, ref) => {
504
+ const [page, setPage] = useState2(0);
505
+ const [rowsPerPage, setRowsPerPage] = useState2(rowsPerPageProp);
506
+ const [visiblePayloads, setVisiblePayloads] = useState2([]);
507
+ const emptyRows = page > 0 ? Math.max(0, (1 + page) * rowsPerPage - count || 0) : 0;
508
+ useEffect2(() => {
509
+ setRowsPerPage(rowsPerPageProp);
510
+ }, [rowsPerPageProp]);
511
+ useEffect2(() => {
512
+ if (payloads) {
513
+ setVisiblePayloads(payloads.slice(page * rowsPerPage, page * rowsPerPage + rowsPerPage));
514
+ }
515
+ }, [count, page, payloads, rowsPerPage]);
516
+ useEffect2(() => {
517
+ setPage(0);
518
+ }, [payloads]);
519
+ const handleAdditionalPayloads = () => {
520
+ if (fetchMorePayloads && payloads) {
521
+ const buffer = rowsPerPage * 2;
522
+ const lastVisiblePayload = visiblePayloads?.at(-1);
523
+ if (lastVisiblePayload) {
524
+ const lastVisibleIndex = payloads?.indexOf(lastVisiblePayload);
525
+ if (lastVisibleIndex !== void 0 && payloads.length - (lastVisibleIndex + 1) <= buffer) {
526
+ fetchMorePayloads();
527
+ }
528
+ }
529
+ }
530
+ };
531
+ const handleChangePage = (_event, newPage) => {
532
+ handleAdditionalPayloads();
533
+ setPage(newPage);
534
+ };
535
+ const handleChangeRowsPerPage = (event) => {
536
+ setRowsPerPage(parseInt(event.target.value, 10));
537
+ setPage(0);
538
+ };
539
+ const noResults = useMemo2(() => {
540
+ return !loading && (!visiblePayloads || visiblePayloads.length === 0);
541
+ }, [loading, visiblePayloads]);
542
+ return /* @__PURE__ */ jsxs6(TableEx, { variant, ref, ...props, children: [
543
+ /* @__PURE__ */ jsx9(PayloadTableHeadComponent, { columns }),
544
+ /* @__PURE__ */ jsx9(
545
+ PayloadTableBodyComponent,
546
+ {
547
+ payloads: visiblePayloads,
548
+ exploreDomain,
549
+ archive,
550
+ maxSchemaDepth,
551
+ onRowClick,
552
+ emptyRows,
553
+ noResults,
554
+ NoResultRowComponent: TableRowNoData
555
+ }
556
+ ),
557
+ /* @__PURE__ */ jsx9(
558
+ PayloadTableFooterComponent,
559
+ {
560
+ count,
561
+ variant,
562
+ rowsPerPage,
563
+ handleChangePage,
564
+ handleChangeRowsPerPage,
565
+ fetchMorePayloads,
566
+ loading,
567
+ page
568
+ }
569
+ )
570
+ ] });
571
+ }
572
+ );
573
+ PayloadTableWithRef.displayName = "PayloadTable";
574
+ var PayloadTable = PayloadTableWithRef;
575
+ export {
576
+ PayloadDynamicTable,
577
+ PayloadDynamicTableRow,
578
+ PayloadTable,
579
+ PayloadTableRow,
580
+ PayloadTableWithRef,
581
+ TablePaginationActions2 as TablePaginationActions,
582
+ TableRowNoData,
583
+ payloadColumnNames,
584
+ payloadDynamicTableColumnConfigDefaults,
585
+ payloadTableColumnConfigDefaults
586
+ };
2
587
  //# sourceMappingURL=index.js.map