@xyo-network/react-payload-table 2.75.7 → 2.76.0

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