@xyo-network/react-payload-table 2.40.0 → 2.40.2

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 (98) hide show
  1. package/dist/cjs/components/Table/PayloadTableColumnConfig.d.ts +6 -6
  2. package/dist/cjs/components/Table/PayloadTableColumnConfig.d.ts.map +1 -1
  3. package/dist/cjs/components/Table/Table.d.ts +7 -3
  4. package/dist/cjs/components/Table/Table.d.ts.map +1 -1
  5. package/dist/cjs/components/Table/Table.js +10 -33
  6. package/dist/cjs/components/Table/Table.js.map +1 -1
  7. package/dist/cjs/components/Table/TableBody.d.ts +4 -0
  8. package/dist/cjs/components/Table/TableBody.d.ts.map +1 -0
  9. package/dist/cjs/components/Table/TableBody.js +22 -0
  10. package/dist/cjs/components/Table/TableBody.js.map +1 -0
  11. package/dist/cjs/components/Table/TableFooter.d.ts +4 -0
  12. package/dist/cjs/components/Table/TableFooter.d.ts.map +1 -0
  13. package/dist/cjs/components/Table/TableFooter.js +22 -0
  14. package/dist/cjs/components/Table/TableFooter.js.map +1 -0
  15. package/dist/cjs/components/Table/TableHead.d.ts +4 -0
  16. package/dist/cjs/components/Table/TableHead.d.ts.map +1 -0
  17. package/dist/cjs/components/Table/TableHead.js +20 -0
  18. package/dist/cjs/components/Table/TableHead.js.map +1 -0
  19. package/dist/cjs/components/Table/TableRowNoData.d.ts +7 -0
  20. package/dist/cjs/components/Table/TableRowNoData.d.ts.map +1 -0
  21. package/dist/cjs/components/Table/TableRowNoData.js +12 -0
  22. package/dist/cjs/components/Table/TableRowNoData.js.map +1 -0
  23. package/dist/cjs/components/Table/index.d.ts +1 -0
  24. package/dist/cjs/components/Table/index.d.ts.map +1 -1
  25. package/dist/cjs/components/Table/index.js +1 -0
  26. package/dist/cjs/components/Table/index.js.map +1 -1
  27. package/dist/cjs/components/Table/types/PayloadTableBodyProps.d.ts +15 -0
  28. package/dist/cjs/components/Table/types/PayloadTableBodyProps.d.ts.map +1 -0
  29. package/dist/cjs/components/Table/types/PayloadTableBodyProps.js +3 -0
  30. package/dist/cjs/components/Table/types/PayloadTableBodyProps.js.map +1 -0
  31. package/dist/cjs/components/Table/types/PayloadTableFooterProps.d.ts +13 -0
  32. package/dist/cjs/components/Table/types/PayloadTableFooterProps.d.ts.map +1 -0
  33. package/dist/cjs/components/Table/types/PayloadTableFooterProps.js +3 -0
  34. package/dist/cjs/components/Table/types/PayloadTableFooterProps.js.map +1 -0
  35. package/dist/cjs/components/Table/types/PayloadTableHeadProps.d.ts +6 -0
  36. package/dist/cjs/components/Table/types/PayloadTableHeadProps.d.ts.map +1 -0
  37. package/dist/cjs/components/Table/types/PayloadTableHeadProps.js +3 -0
  38. package/dist/cjs/components/Table/types/PayloadTableHeadProps.js.map +1 -0
  39. package/dist/cjs/components/Table/types/index.d.ts +3 -0
  40. package/dist/cjs/components/Table/types/index.d.ts.map +1 -1
  41. package/dist/cjs/components/Table/types/index.js +3 -0
  42. package/dist/cjs/components/Table/types/index.js.map +1 -1
  43. package/dist/docs.json +1276 -197
  44. package/dist/esm/components/Table/PayloadTableColumnConfig.d.ts +6 -6
  45. package/dist/esm/components/Table/PayloadTableColumnConfig.d.ts.map +1 -1
  46. package/dist/esm/components/Table/Table.d.ts +7 -3
  47. package/dist/esm/components/Table/Table.d.ts.map +1 -1
  48. package/dist/esm/components/Table/Table.js +12 -34
  49. package/dist/esm/components/Table/Table.js.map +1 -1
  50. package/dist/esm/components/Table/TableBody.d.ts +4 -0
  51. package/dist/esm/components/Table/TableBody.d.ts.map +1 -0
  52. package/dist/esm/components/Table/TableBody.js +16 -0
  53. package/dist/esm/components/Table/TableBody.js.map +1 -0
  54. package/dist/esm/components/Table/TableFooter.d.ts +4 -0
  55. package/dist/esm/components/Table/TableFooter.d.ts.map +1 -0
  56. package/dist/esm/components/Table/TableFooter.js +18 -0
  57. package/dist/esm/components/Table/TableFooter.js.map +1 -0
  58. package/dist/esm/components/Table/TableHead.d.ts +4 -0
  59. package/dist/esm/components/Table/TableHead.d.ts.map +1 -0
  60. package/dist/esm/components/Table/TableHead.js +13 -0
  61. package/dist/esm/components/Table/TableHead.js.map +1 -0
  62. package/dist/esm/components/Table/TableRowNoData.d.ts +7 -0
  63. package/dist/esm/components/Table/TableRowNoData.d.ts.map +1 -0
  64. package/dist/esm/components/Table/TableRowNoData.js +6 -0
  65. package/dist/esm/components/Table/TableRowNoData.js.map +1 -0
  66. package/dist/esm/components/Table/index.d.ts +1 -0
  67. package/dist/esm/components/Table/index.d.ts.map +1 -1
  68. package/dist/esm/components/Table/index.js +1 -0
  69. package/dist/esm/components/Table/index.js.map +1 -1
  70. package/dist/esm/components/Table/types/PayloadTableBodyProps.d.ts +15 -0
  71. package/dist/esm/components/Table/types/PayloadTableBodyProps.d.ts.map +1 -0
  72. package/dist/esm/components/Table/types/PayloadTableBodyProps.js +2 -0
  73. package/dist/esm/components/Table/types/PayloadTableBodyProps.js.map +1 -0
  74. package/dist/esm/components/Table/types/PayloadTableFooterProps.d.ts +13 -0
  75. package/dist/esm/components/Table/types/PayloadTableFooterProps.d.ts.map +1 -0
  76. package/dist/esm/components/Table/types/PayloadTableFooterProps.js +2 -0
  77. package/dist/esm/components/Table/types/PayloadTableFooterProps.js.map +1 -0
  78. package/dist/esm/components/Table/types/PayloadTableHeadProps.d.ts +6 -0
  79. package/dist/esm/components/Table/types/PayloadTableHeadProps.d.ts.map +1 -0
  80. package/dist/esm/components/Table/types/PayloadTableHeadProps.js +2 -0
  81. package/dist/esm/components/Table/types/PayloadTableHeadProps.js.map +1 -0
  82. package/dist/esm/components/Table/types/index.d.ts +3 -0
  83. package/dist/esm/components/Table/types/index.d.ts.map +1 -1
  84. package/dist/esm/components/Table/types/index.js +3 -0
  85. package/dist/esm/components/Table/types/index.js.map +1 -1
  86. package/package.json +7 -7
  87. package/src/components/Table/PayloadTableColumnConfig.ts +6 -6
  88. package/src/components/Table/Table.stories.tsx +24 -9
  89. package/src/components/Table/Table.tsx +43 -86
  90. package/src/components/Table/TableBody.tsx +54 -0
  91. package/src/components/Table/TableFooter.tsx +44 -0
  92. package/src/components/Table/TableHead.tsx +26 -0
  93. package/src/components/Table/TableRowNoData.tsx +17 -0
  94. package/src/components/Table/index.ts +1 -0
  95. package/src/components/Table/types/PayloadTableBodyProps.ts +15 -0
  96. package/src/components/Table/types/PayloadTableFooterProps.ts +13 -0
  97. package/src/components/Table/types/PayloadTableHeadProps.ts +7 -0
  98. package/src/components/Table/types/index.ts +3 -0
@@ -1,13 +1,13 @@
1
- import { Alert, styled, TableBody, TableCell, TableHead, TablePagination, TableRow, Typography } from '@mui/material'
2
- import { useBreakpoint } from '@xylabs/react-shared'
3
- import { PayloadWrapper, XyoPayload } from '@xyo-network/payload'
4
- import { XyoThrownErrorBoundary } from '@xyo-network/react-error'
5
- import { TableEx, TableExProps, TableFooterEx } from '@xyo-network/react-table'
6
- import { forwardRef, useEffect, useState } from 'react'
1
+ import { XyoPayload } from '@xyo-network/payload'
2
+ import { TableEx, TableExProps } from '@xyo-network/react-table'
3
+ import { ComponentType, forwardRef, useEffect, useMemo, useState } from 'react'
7
4
 
8
- import { payloadColumnNames, PayloadTableColumnConfig, payloadTableColumnConfigDefaults } from './PayloadTableColumnConfig'
9
- import { TablePaginationActions } from './TablePagination'
10
- import { PayloadTableRow } from './TableRow'
5
+ import { PayloadTableColumnConfig } from './PayloadTableColumnConfig'
6
+ import { PayloadTableBody } from './TableBody'
7
+ import { PayloadTableFooter } from './TableFooter'
8
+ import { PayloadTableHead } from './TableHead'
9
+ import { TableRowNoData } from './TableRowNoData'
10
+ import { PayloadTableBodyProps, PayloadTableFooterProps, PayloadTableHeadProps } from './types'
11
11
 
12
12
  export interface PayloadTableProps extends TableExProps {
13
13
  exploreDomain?: string
@@ -17,6 +17,9 @@ export interface PayloadTableProps extends TableExProps {
17
17
  payloads?: XyoPayload[] | null
18
18
  loading?: boolean
19
19
  columns?: PayloadTableColumnConfig
20
+ PayloadTableHeadComponent?: ComponentType<PayloadTableHeadProps>
21
+ PayloadTableBodyComponent?: ComponentType<PayloadTableBodyProps>
22
+ PayloadTableFooterComponent?: ComponentType<PayloadTableFooterProps>
20
23
  /** External trigger to fetch more payloads */
21
24
  fetchMorePayloads?: () => void
22
25
  /** set number of schema parts to display starting from the end */
@@ -34,8 +37,10 @@ export const PayloadTableWithRef = forwardRef<HTMLTableElement, PayloadTableProp
34
37
  fetchMorePayloads,
35
38
  rowsPerPage: rowsPerPageProp = 25,
36
39
  payloads,
37
- children,
38
- columns = payloadTableColumnConfigDefaults(),
40
+ columns,
41
+ PayloadTableHeadComponent = PayloadTableHead,
42
+ PayloadTableBodyComponent = PayloadTableBody,
43
+ PayloadTableFooterComponent = PayloadTableFooter,
39
44
  maxSchemaDepth,
40
45
  count = 0,
41
46
  loading = false,
@@ -44,7 +49,6 @@ export const PayloadTableWithRef = forwardRef<HTMLTableElement, PayloadTableProp
44
49
  },
45
50
  ref,
46
51
  ) => {
47
- const breakPoint = useBreakpoint()
48
52
  const [page, setPage] = useState(0)
49
53
  const [rowsPerPage, setRowsPerPage] = useState(rowsPerPageProp)
50
54
  const [visiblePayloads, setVisiblePayloads] = useState<XyoPayload[]>([])
@@ -82,7 +86,7 @@ export const PayloadTableWithRef = forwardRef<HTMLTableElement, PayloadTableProp
82
86
  }
83
87
  }
84
88
 
85
- const handleChangePage = (event: React.MouseEvent<HTMLButtonElement> | null, newPage: number) => {
89
+ const handleChangePage = (_event: React.MouseEvent<HTMLButtonElement> | null, newPage: number) => {
86
90
  handleAdditionalPayloads()
87
91
  setPage(newPage)
88
92
  }
@@ -92,84 +96,37 @@ export const PayloadTableWithRef = forwardRef<HTMLTableElement, PayloadTableProp
92
96
  setPage(0)
93
97
  }
94
98
 
95
- return breakPoint ? (
99
+ const noResults = useMemo(() => {
100
+ return !loading && (!payloads || payloads.length === 0)
101
+ }, [loading, payloads])
102
+
103
+ return (
96
104
  <TableEx variant={variant} ref={ref} {...props}>
97
- <TableHead>
98
- <TableRow>
99
- {columns[breakPoint]?.map((column, index) => {
100
- return (
101
- <TableCell key={index} width={index === 0 ? '100%' : undefined} align={index === 0 ? 'left' : 'center'}>
102
- <Typography variant="body2" noWrap>
103
- {payloadColumnNames[column]}
104
- </Typography>
105
- </TableCell>
106
- )
107
- })}
108
- </TableRow>
109
- </TableHead>
110
- <TableBody>
111
- {visiblePayloads?.map((payload, index) => {
112
- const wrapper = new PayloadWrapper(payload)
113
- return (
114
- <XyoThrownErrorBoundary
115
- key={`${wrapper.hash}-${index}`}
116
- errorComponent={(e: Error) => (
117
- <Alert severity="error">
118
- Error Loading Payload: <Typography fontWeight="bold">{e.message}</Typography>
119
- </Alert>
120
- )}
121
- >
122
- <PayloadTableRow
123
- maxSchemaDepth={maxSchemaDepth}
124
- archive={archive}
125
- onClick={
126
- onRowClick
127
- ? () => {
128
- onRowClick(payload)
129
- }
130
- : undefined
131
- }
132
- exploreDomain={exploreDomain}
133
- payload={payload}
134
- />
135
- </XyoThrownErrorBoundary>
136
- )
137
- })}
138
- {children}
139
- {emptyRows > 0 && Array(emptyRows).fill(<PayloadTableRow />)}
140
- </TableBody>
141
- <TableFooterEx variant={variant}>
142
- <TableRow>
143
- <StyledTablePagination
144
- rowsPerPageOptions={[5, 10, 25, { label: 'All', value: -1 }]}
145
- count={count ?? 0}
146
- rowsPerPage={rowsPerPage}
147
- page={page}
148
- SelectProps={{
149
- inputProps: {
150
- 'aria-label': 'rows per page',
151
- },
152
- native: true,
153
- }}
154
- onPageChange={handleChangePage}
155
- onRowsPerPageChange={handleChangeRowsPerPage}
156
- ActionsComponent={(props) => <TablePaginationActions enableNextPage={!!fetchMorePayloads} loading={loading} {...props} />}
157
- />
158
- </TableRow>
159
- </TableFooterEx>
105
+ <PayloadTableHeadComponent columns={columns} />
106
+ <PayloadTableBodyComponent
107
+ payloads={visiblePayloads}
108
+ exploreDomain={exploreDomain}
109
+ archive={archive}
110
+ maxSchemaDepth={maxSchemaDepth}
111
+ onRowClick={onRowClick}
112
+ emptyRows={emptyRows}
113
+ noResults={noResults}
114
+ NoResultRowComponent={TableRowNoData}
115
+ />
116
+ <PayloadTableFooterComponent
117
+ count={count}
118
+ variant={variant}
119
+ rowsPerPage={rowsPerPage}
120
+ handleChangePage={handleChangePage}
121
+ handleChangeRowsPerPage={handleChangeRowsPerPage}
122
+ fetchMorePayloads={fetchMorePayloads}
123
+ loading={loading}
124
+ />
160
125
  </TableEx>
161
- ) : null
126
+ )
162
127
  },
163
128
  )
164
129
 
165
130
  PayloadTableWithRef.displayName = 'PayloadTable'
166
131
 
167
132
  export const PayloadTable = PayloadTableWithRef
168
-
169
- const StyledTablePagination = styled(TablePagination)(({ theme }) => ({
170
- '& > .MuiToolbar-root': {
171
- paddingLeft: theme.spacing(1),
172
- },
173
- borderTop: '1px solid',
174
- borderTopColor: theme.palette.divider,
175
- }))
@@ -0,0 +1,54 @@
1
+ import { Alert, TableBody, Typography } from '@mui/material'
2
+ import { PayloadWrapper } from '@xyo-network/payload'
3
+ import { XyoThrownErrorBoundary } from '@xyo-network/react-error'
4
+
5
+ import { PayloadTableRow } from './TableRow'
6
+ import { PayloadTableBodyProps } from './types'
7
+
8
+ export const PayloadTableBody: React.FC<PayloadTableBodyProps> = ({
9
+ children,
10
+ exploreDomain,
11
+ payloads,
12
+ archive,
13
+ maxSchemaDepth,
14
+ onRowClick,
15
+ emptyRows,
16
+ noResults,
17
+ NoResultRowComponent,
18
+ ...props
19
+ }) => {
20
+ return (
21
+ <TableBody {...props}>
22
+ {noResults && NoResultRowComponent ? <NoResultRowComponent /> : null}
23
+ {payloads?.map((payload, index) => {
24
+ const wrapper = new PayloadWrapper(payload)
25
+ return (
26
+ <XyoThrownErrorBoundary
27
+ key={`${wrapper.hash}-${index}`}
28
+ errorComponent={(e: Error) => (
29
+ <Alert severity="error">
30
+ Error Loading Payload: <Typography fontWeight="bold">{e.message}</Typography>
31
+ </Alert>
32
+ )}
33
+ >
34
+ <PayloadTableRow
35
+ maxSchemaDepth={maxSchemaDepth}
36
+ archive={archive}
37
+ onClick={
38
+ onRowClick
39
+ ? () => {
40
+ onRowClick(payload)
41
+ }
42
+ : undefined
43
+ }
44
+ exploreDomain={exploreDomain}
45
+ payload={payload}
46
+ />
47
+ </XyoThrownErrorBoundary>
48
+ )
49
+ })}
50
+ {children}
51
+ {(emptyRows ?? 0) > 0 && Array(emptyRows).fill(<PayloadTableRow />)}
52
+ </TableBody>
53
+ )
54
+ }
@@ -0,0 +1,44 @@
1
+ import { styled, TablePagination, TableRow } from '@mui/material'
2
+ import { TableFooterEx } from '@xyo-network/react-table'
3
+
4
+ import { TablePaginationActions } from './TablePagination'
5
+ import { PayloadTableFooterProps } from './types'
6
+
7
+ export const PayloadTableFooter: React.FC<PayloadTableFooterProps> = ({
8
+ count,
9
+ variant,
10
+ page,
11
+ rowsPerPage,
12
+ handleChangePage = () => undefined,
13
+ handleChangeRowsPerPage = () => undefined,
14
+ fetchMorePayloads,
15
+ loading,
16
+ }) => (
17
+ <TableFooterEx variant={variant}>
18
+ <TableRow>
19
+ <StyledTablePagination
20
+ rowsPerPageOptions={[5, 10, 25, { label: 'All', value: -1 }]}
21
+ count={count ?? 0}
22
+ rowsPerPage={rowsPerPage ?? 10}
23
+ page={page ?? 0}
24
+ SelectProps={{
25
+ inputProps: {
26
+ 'aria-label': 'rows per page',
27
+ },
28
+ native: true,
29
+ }}
30
+ onPageChange={handleChangePage}
31
+ onRowsPerPageChange={handleChangeRowsPerPage}
32
+ ActionsComponent={(props) => <TablePaginationActions enableNextPage={!!fetchMorePayloads} loading={loading} {...props} />}
33
+ />
34
+ </TableRow>
35
+ </TableFooterEx>
36
+ )
37
+
38
+ const StyledTablePagination = styled(TablePagination)(({ theme }) => ({
39
+ '& > .MuiToolbar-root': {
40
+ paddingLeft: theme.spacing(1),
41
+ },
42
+ borderTop: '1px solid',
43
+ borderTopColor: theme.palette.divider,
44
+ }))
@@ -0,0 +1,26 @@
1
+ import { TableCell, TableHead, TableRow, Typography } from '@mui/material'
2
+ import { useBreakpoint } from '@xylabs/react-shared'
3
+
4
+ import { payloadColumnNames, payloadTableColumnConfigDefaults } from './PayloadTableColumnConfig'
5
+ import { PayloadTableHeadProps } from './types'
6
+
7
+ export const PayloadTableHead: React.FC<PayloadTableHeadProps> = ({ columns = payloadTableColumnConfigDefaults(), ...props }) => {
8
+ const breakPoint = useBreakpoint()
9
+ return (
10
+ <TableHead {...props}>
11
+ <TableRow>
12
+ {breakPoint && columns
13
+ ? columns[breakPoint]?.map((column, index) => {
14
+ return (
15
+ <TableCell key={index} width={index === 0 ? '100%' : undefined} align={index === 0 ? 'left' : 'center'}>
16
+ <Typography variant="body2" noWrap>
17
+ {payloadColumnNames[column]}
18
+ </Typography>
19
+ </TableCell>
20
+ )
21
+ })
22
+ : null}
23
+ </TableRow>
24
+ </TableHead>
25
+ )
26
+ }
@@ -0,0 +1,17 @@
1
+ import { TableCell, TableRow, TableRowProps, Typography, TypographyProps } from '@mui/material'
2
+
3
+ export interface TableRowNoDataProps extends TableRowProps {
4
+ typographyProps?: TypographyProps
5
+ }
6
+
7
+ export const TableRowNoData: React.FC<TableRowNoDataProps> = ({ typographyProps, ...props }) => {
8
+ return (
9
+ <TableRow {...props}>
10
+ <TableCell sx={{ border: 'none' }}>
11
+ <Typography variant="body2" {...typographyProps}>
12
+ No Data To Display...
13
+ </Typography>
14
+ </TableCell>
15
+ </TableRow>
16
+ )
17
+ }
@@ -2,4 +2,5 @@ export * from './PayloadTableColumnConfig'
2
2
  export * from './Table'
3
3
  export * from './TablePagination'
4
4
  export * from './TableRow'
5
+ export * from './TableRowNoData'
5
6
  export * from './types'
@@ -0,0 +1,15 @@
1
+ import { TableBodyProps, TableRowProps } from '@mui/material'
2
+ import { WithChildren } from '@xylabs/react-shared'
3
+ import { XyoPayload, XyoPayloads } from '@xyo-network/payload'
4
+ import { ComponentType } from 'react'
5
+
6
+ export interface PayloadTableBodyProps extends TableBodyProps, WithChildren {
7
+ payloads?: XyoPayloads
8
+ archive?: string
9
+ maxSchemaDepth?: number
10
+ onRowClick?: (value: XyoPayload) => void
11
+ exploreDomain?: string
12
+ emptyRows?: number
13
+ noResults?: boolean
14
+ NoResultRowComponent?: ComponentType<TableRowProps>
15
+ }
@@ -0,0 +1,13 @@
1
+ import { TableExVariants } from '@xyo-network/react-table'
2
+ import { ChangeEvent, MouseEvent } from 'react'
3
+
4
+ export interface PayloadTableFooterProps {
5
+ count?: number
6
+ rowsPerPage?: number
7
+ variant?: TableExVariants
8
+ page?: number
9
+ handleChangePage?: (event: MouseEvent<HTMLButtonElement> | null, newPage: number) => void
10
+ handleChangeRowsPerPage?: (event: ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => void
11
+ fetchMorePayloads?: () => void
12
+ loading?: boolean
13
+ }
@@ -0,0 +1,7 @@
1
+ import { TableHeadProps } from '@mui/material'
2
+
3
+ import { PayloadTableColumnConfig, PayloadTableColumnSlug } from '../PayloadTableColumnConfig'
4
+
5
+ export interface PayloadTableHeadProps extends TableHeadProps {
6
+ columns?: PayloadTableColumnConfig<PayloadTableColumnSlug>
7
+ }
@@ -1 +1,4 @@
1
1
  export * from './PaginationEventNouns'
2
+ export * from './PayloadTableBodyProps'
3
+ export * from './PayloadTableFooterProps'
4
+ export * from './PayloadTableHeadProps'