@xyo-network/react-payload-table 2.28.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 (96) hide show
  1. package/LICENSE +165 -0
  2. package/README.md +70 -0
  3. package/dist/cjs/components/DynamicTable/DynamicTableRow.d.ts +13 -0
  4. package/dist/cjs/components/DynamicTable/DynamicTableRow.d.ts.map +1 -0
  5. package/dist/cjs/components/DynamicTable/DynamicTableRow.js +49 -0
  6. package/dist/cjs/components/DynamicTable/DynamicTableRow.js.map +1 -0
  7. package/dist/cjs/components/DynamicTable/PayloadDynamicTableColumnConfig.d.ts +11 -0
  8. package/dist/cjs/components/DynamicTable/PayloadDynamicTableColumnConfig.d.ts.map +1 -0
  9. package/dist/cjs/components/DynamicTable/PayloadDynamicTableColumnConfig.js +21 -0
  10. package/dist/cjs/components/DynamicTable/PayloadDynamicTableColumnConfig.js.map +1 -0
  11. package/dist/cjs/components/DynamicTable/Table.d.ts +13 -0
  12. package/dist/cjs/components/DynamicTable/Table.d.ts.map +1 -0
  13. package/dist/cjs/components/DynamicTable/Table.js +28 -0
  14. package/dist/cjs/components/DynamicTable/Table.js.map +1 -0
  15. package/dist/cjs/components/DynamicTable/index.d.ts +4 -0
  16. package/dist/cjs/components/DynamicTable/index.d.ts.map +1 -0
  17. package/dist/cjs/components/DynamicTable/index.js +7 -0
  18. package/dist/cjs/components/DynamicTable/index.js.map +1 -0
  19. package/dist/cjs/components/Table/PayloadTableColumnConfig.d.ts +11 -0
  20. package/dist/cjs/components/Table/PayloadTableColumnConfig.d.ts.map +1 -0
  21. package/dist/cjs/components/Table/PayloadTableColumnConfig.js +18 -0
  22. package/dist/cjs/components/Table/PayloadTableColumnConfig.js.map +1 -0
  23. package/dist/cjs/components/Table/Table.d.ts +13 -0
  24. package/dist/cjs/components/Table/Table.d.ts.map +1 -0
  25. package/dist/cjs/components/Table/Table.js +28 -0
  26. package/dist/cjs/components/Table/Table.js.map +1 -0
  27. package/dist/cjs/components/Table/TableRow.d.ts +13 -0
  28. package/dist/cjs/components/Table/TableRow.d.ts.map +1 -0
  29. package/dist/cjs/components/Table/TableRow.js +33 -0
  30. package/dist/cjs/components/Table/TableRow.js.map +1 -0
  31. package/dist/cjs/components/Table/index.d.ts +4 -0
  32. package/dist/cjs/components/Table/index.d.ts.map +1 -0
  33. package/dist/cjs/components/Table/index.js +7 -0
  34. package/dist/cjs/components/Table/index.js.map +1 -0
  35. package/dist/cjs/components/index.d.ts +2 -0
  36. package/dist/cjs/components/index.d.ts.map +1 -0
  37. package/dist/cjs/components/index.js +5 -0
  38. package/dist/cjs/components/index.js.map +1 -0
  39. package/dist/cjs/index.d.ts +2 -0
  40. package/dist/cjs/index.d.ts.map +1 -0
  41. package/dist/cjs/index.js +5 -0
  42. package/dist/cjs/index.js.map +1 -0
  43. package/dist/docs.json +851 -0
  44. package/dist/esm/components/DynamicTable/DynamicTableRow.d.ts +13 -0
  45. package/dist/esm/components/DynamicTable/DynamicTableRow.d.ts.map +1 -0
  46. package/dist/esm/components/DynamicTable/DynamicTableRow.js +41 -0
  47. package/dist/esm/components/DynamicTable/DynamicTableRow.js.map +1 -0
  48. package/dist/esm/components/DynamicTable/PayloadDynamicTableColumnConfig.d.ts +11 -0
  49. package/dist/esm/components/DynamicTable/PayloadDynamicTableColumnConfig.d.ts.map +1 -0
  50. package/dist/esm/components/DynamicTable/PayloadDynamicTableColumnConfig.js +17 -0
  51. package/dist/esm/components/DynamicTable/PayloadDynamicTableColumnConfig.js.map +1 -0
  52. package/dist/esm/components/DynamicTable/Table.d.ts +13 -0
  53. package/dist/esm/components/DynamicTable/Table.d.ts.map +1 -0
  54. package/dist/esm/components/DynamicTable/Table.js +21 -0
  55. package/dist/esm/components/DynamicTable/Table.js.map +1 -0
  56. package/dist/esm/components/DynamicTable/index.d.ts +4 -0
  57. package/dist/esm/components/DynamicTable/index.d.ts.map +1 -0
  58. package/dist/esm/components/DynamicTable/index.js +4 -0
  59. package/dist/esm/components/DynamicTable/index.js.map +1 -0
  60. package/dist/esm/components/Table/PayloadTableColumnConfig.d.ts +11 -0
  61. package/dist/esm/components/Table/PayloadTableColumnConfig.d.ts.map +1 -0
  62. package/dist/esm/components/Table/PayloadTableColumnConfig.js +14 -0
  63. package/dist/esm/components/Table/PayloadTableColumnConfig.js.map +1 -0
  64. package/dist/esm/components/Table/Table.d.ts +13 -0
  65. package/dist/esm/components/Table/Table.d.ts.map +1 -0
  66. package/dist/esm/components/Table/Table.js +21 -0
  67. package/dist/esm/components/Table/Table.js.map +1 -0
  68. package/dist/esm/components/Table/TableRow.d.ts +13 -0
  69. package/dist/esm/components/Table/TableRow.d.ts.map +1 -0
  70. package/dist/esm/components/Table/TableRow.js +26 -0
  71. package/dist/esm/components/Table/TableRow.js.map +1 -0
  72. package/dist/esm/components/Table/index.d.ts +4 -0
  73. package/dist/esm/components/Table/index.d.ts.map +1 -0
  74. package/dist/esm/components/Table/index.js +4 -0
  75. package/dist/esm/components/Table/index.js.map +1 -0
  76. package/dist/esm/components/index.d.ts +2 -0
  77. package/dist/esm/components/index.d.ts.map +1 -0
  78. package/dist/esm/components/index.js +2 -0
  79. package/dist/esm/components/index.js.map +1 -0
  80. package/dist/esm/index.d.ts +2 -0
  81. package/dist/esm/index.d.ts.map +1 -0
  82. package/dist/esm/index.js +2 -0
  83. package/dist/esm/index.js.map +1 -0
  84. package/package.json +79 -0
  85. package/src/components/DynamicTable/DynamicTable.stories.tsx +49 -0
  86. package/src/components/DynamicTable/DynamicTableRow.tsx +118 -0
  87. package/src/components/DynamicTable/PayloadDynamicTableColumnConfig.ts +27 -0
  88. package/src/components/DynamicTable/Table.tsx +73 -0
  89. package/src/components/DynamicTable/index.ts +3 -0
  90. package/src/components/Table/PayloadTableColumnConfig.ts +25 -0
  91. package/src/components/Table/Table.stories.tsx +47 -0
  92. package/src/components/Table/Table.tsx +73 -0
  93. package/src/components/Table/TableRow.tsx +80 -0
  94. package/src/components/Table/index.ts +3 -0
  95. package/src/components/index.ts +1 -0
  96. package/src/index.ts +1 -0
@@ -0,0 +1,27 @@
1
+ export type PayloadDynamicTableColumnSlug = 'hash' | 'schema' | 'valid' | 'details' | 'render' | 'icon'
2
+
3
+ export interface PayloadDynamicTableColumnConfig {
4
+ xs?: PayloadDynamicTableColumnSlug[]
5
+ sm?: PayloadDynamicTableColumnSlug[]
6
+ md?: PayloadDynamicTableColumnSlug[]
7
+ lg?: PayloadDynamicTableColumnSlug[]
8
+ xl?: PayloadDynamicTableColumnSlug[]
9
+ }
10
+
11
+ export const payloadColumnNames: Record<PayloadDynamicTableColumnSlug, string> = {
12
+ details: 'Details',
13
+ hash: 'Hash',
14
+ icon: 'Icon',
15
+ render: 'Render',
16
+ schema: 'Schema',
17
+ valid: 'Valid',
18
+ }
19
+
20
+ export const payloadDynamicTableColumnConfigDefaults = (): PayloadDynamicTableColumnConfig => {
21
+ const xs: PayloadDynamicTableColumnSlug[] = ['icon', 'hash', 'schema', 'render', 'valid']
22
+ const sm: PayloadDynamicTableColumnSlug[] = ['icon', 'hash', 'schema', 'render', 'valid']
23
+ const md: PayloadDynamicTableColumnSlug[] = ['icon', 'hash', 'schema', 'render', 'valid']
24
+ const lg: PayloadDynamicTableColumnSlug[] = ['icon', 'hash', 'schema', 'render', 'valid']
25
+ const xl: PayloadDynamicTableColumnSlug[] = ['icon', 'hash', 'schema', 'render', 'valid']
26
+ return { lg, md, sm, xl, xs }
27
+ }
@@ -0,0 +1,73 @@
1
+ import { Alert, Table, TableBody, TableCell, TableHead, TableProps, TableRow, Typography } from '@mui/material'
2
+ import { useBreakpoint } from '@xylabs/react-shared'
3
+ import { XyoPayload, XyoPayloadWrapper } from '@xyo-network/payload'
4
+ import { XyoApiThrownErrorBoundary } from '@xyo-network/react-auth-service'
5
+
6
+ import { PayloadDynamicTableRow } from './DynamicTableRow'
7
+ import { payloadColumnNames, PayloadDynamicTableColumnConfig, payloadDynamicTableColumnConfigDefaults } from './PayloadDynamicTableColumnConfig'
8
+
9
+ export interface PayloadDynamicTableProps extends TableProps {
10
+ exploreDomain?: string
11
+ archive?: string
12
+ onRowClick?: (value: XyoPayload) => void
13
+ payloads?: XyoPayload[] | null
14
+ columns?: PayloadDynamicTableColumnConfig
15
+ }
16
+
17
+ export const PayloadDynamicTable: React.FC<PayloadDynamicTableProps> = ({
18
+ exploreDomain,
19
+ archive,
20
+ onRowClick,
21
+ payloads,
22
+ children,
23
+ columns = payloadDynamicTableColumnConfigDefaults(),
24
+ ...props
25
+ }) => {
26
+ const breakPoint = useBreakpoint()
27
+ return breakPoint ? (
28
+ <Table {...props}>
29
+ <TableHead>
30
+ <TableRow>
31
+ {columns[breakPoint]?.map((column, index) => {
32
+ return (
33
+ <TableCell key={index} width={undefined} align="left">
34
+ <Typography variant="caption" noWrap>
35
+ <strong>{payloadColumnNames[column]}</strong>
36
+ </Typography>
37
+ </TableCell>
38
+ )
39
+ })}
40
+ </TableRow>
41
+ </TableHead>
42
+ <TableBody>
43
+ {payloads?.map((payload, index) => {
44
+ const wrapper = new XyoPayloadWrapper(payload)
45
+ return (
46
+ <XyoApiThrownErrorBoundary
47
+ key={`${wrapper.hash}-${index}`}
48
+ errorComponent={(e) => (
49
+ <Alert severity="error">
50
+ Error Loading Payload: <Typography fontWeight="bold">{e.message}</Typography>
51
+ </Alert>
52
+ )}
53
+ >
54
+ <PayloadDynamicTableRow
55
+ archive={archive}
56
+ onClick={
57
+ onRowClick
58
+ ? () => {
59
+ onRowClick(payload)
60
+ }
61
+ : undefined
62
+ }
63
+ exploreDomain={exploreDomain}
64
+ payload={payload}
65
+ />
66
+ </XyoApiThrownErrorBoundary>
67
+ )
68
+ })}
69
+ {children}
70
+ </TableBody>
71
+ </Table>
72
+ ) : null
73
+ }
@@ -0,0 +1,3 @@
1
+ export * from './DynamicTableRow'
2
+ export * from './PayloadDynamicTableColumnConfig'
3
+ export * from './Table'
@@ -0,0 +1,25 @@
1
+ export type PayloadTableColumnSlug = 'hash' | 'schema' | 'valid'
2
+
3
+ export interface PayloadTableColumnConfig {
4
+ xs?: PayloadTableColumnSlug[]
5
+ sm?: PayloadTableColumnSlug[]
6
+ md?: PayloadTableColumnSlug[]
7
+ lg?: PayloadTableColumnSlug[]
8
+ xl?: PayloadTableColumnSlug[]
9
+ }
10
+
11
+ export const payloadColumnNames: Record<PayloadTableColumnSlug, string> = {
12
+ hash: 'Hash',
13
+ schema: 'Schema',
14
+
15
+ valid: 'Valid',
16
+ }
17
+
18
+ export const payloadTableColumnConfigDefaults = (): PayloadTableColumnConfig => {
19
+ const xs: PayloadTableColumnSlug[] = ['hash', 'schema', 'valid']
20
+ const sm: PayloadTableColumnSlug[] = ['hash', 'schema', 'valid']
21
+ const md: PayloadTableColumnSlug[] = ['hash', 'schema', 'valid']
22
+ const lg: PayloadTableColumnSlug[] = ['hash', 'schema', 'valid']
23
+ const xl: PayloadTableColumnSlug[] = ['hash', 'schema', 'valid']
24
+ return { lg, md, sm, xl, xs }
25
+ }
@@ -0,0 +1,47 @@
1
+ import { ComponentMeta, ComponentStory } from '@storybook/react'
2
+ import { samplePayload, useAppThemeDecorator } from '@xyo-network/react-storybook'
3
+ import { BrowserRouter } from 'react-router-dom'
4
+
5
+ import { PayloadTable } from './Table'
6
+
7
+ const StorybookEntry = {
8
+ argTypes: {},
9
+ component: PayloadTable,
10
+ parameters: {
11
+ docs: {
12
+ page: null,
13
+ },
14
+ },
15
+ title: 'payload/Table',
16
+ } as ComponentMeta<typeof PayloadTable>
17
+
18
+ const Template: ComponentStory<typeof PayloadTable> = (args) => (
19
+ <BrowserRouter>
20
+ <PayloadTable {...args}></PayloadTable>
21
+ </BrowserRouter>
22
+ )
23
+
24
+ const Default = Template.bind({})
25
+ Default.args = {}
26
+ Default.decorators = [useAppThemeDecorator]
27
+
28
+ const WithData = Template.bind({})
29
+ WithData.args = { payloads: [samplePayload, samplePayload] }
30
+ WithData.decorators = [useAppThemeDecorator]
31
+
32
+ const WithDynamicDataRow = Template.bind({})
33
+ WithData.args = { payloads: [samplePayload, samplePayload] }
34
+ WithData.decorators = [useAppThemeDecorator]
35
+
36
+ const WithError = Template.bind({})
37
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
38
+ const { _hash, ...badPayload } = samplePayload
39
+
40
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
41
+ //@ts-ignore
42
+ WithError.args = { payloads: [samplePayload, badPayload] }
43
+
44
+ export { Default, WithData, WithDynamicDataRow, WithError }
45
+
46
+ // eslint-disable-next-line import/no-default-export
47
+ export default StorybookEntry
@@ -0,0 +1,73 @@
1
+ import { Alert, Table, TableBody, TableCell, TableHead, TableProps, TableRow, Typography } from '@mui/material'
2
+ import { useBreakpoint } from '@xylabs/react-shared'
3
+ import { XyoPayload, XyoPayloadWrapper } from '@xyo-network/payload'
4
+ import { XyoApiThrownErrorBoundary } from '@xyo-network/react-auth-service'
5
+
6
+ import { payloadColumnNames, PayloadTableColumnConfig, payloadTableColumnConfigDefaults } from './PayloadTableColumnConfig'
7
+ import { PayloadTableRow } from './TableRow'
8
+
9
+ export interface PayloadTableProps extends TableProps {
10
+ exploreDomain?: string
11
+ archive?: string
12
+ onRowClick?: (value: XyoPayload) => void
13
+ payloads?: XyoPayload[] | null
14
+ columns?: PayloadTableColumnConfig
15
+ }
16
+
17
+ export const PayloadTable: React.FC<PayloadTableProps> = ({
18
+ exploreDomain,
19
+ archive,
20
+ onRowClick,
21
+ payloads,
22
+ children,
23
+ columns = payloadTableColumnConfigDefaults(),
24
+ ...props
25
+ }) => {
26
+ const breakPoint = useBreakpoint()
27
+ return breakPoint ? (
28
+ <Table {...props}>
29
+ <TableHead>
30
+ <TableRow>
31
+ {columns[breakPoint]?.map((column, index) => {
32
+ return (
33
+ <TableCell key={index} width={index === 0 ? '100%' : undefined} align={index === 0 ? 'left' : 'center'}>
34
+ <Typography variant="caption" noWrap>
35
+ <strong>{payloadColumnNames[column]}</strong>
36
+ </Typography>
37
+ </TableCell>
38
+ )
39
+ })}
40
+ </TableRow>
41
+ </TableHead>
42
+ <TableBody>
43
+ {payloads?.map((payload, index) => {
44
+ const wrapper = new XyoPayloadWrapper(payload)
45
+ return (
46
+ <XyoApiThrownErrorBoundary
47
+ key={`${wrapper.hash}-${index}`}
48
+ errorComponent={(e) => (
49
+ <Alert severity="error">
50
+ Error Loading Payload: <Typography fontWeight="bold">{e.message}</Typography>
51
+ </Alert>
52
+ )}
53
+ >
54
+ <PayloadTableRow
55
+ archive={archive}
56
+ onClick={
57
+ onRowClick
58
+ ? () => {
59
+ onRowClick(payload)
60
+ }
61
+ : undefined
62
+ }
63
+ exploreDomain={exploreDomain}
64
+ payload={payload}
65
+ />
66
+ </XyoApiThrownErrorBoundary>
67
+ )
68
+ })}
69
+ {children}
70
+ </TableBody>
71
+ </Table>
72
+ ) : null
73
+ }
@@ -0,0 +1,80 @@
1
+ import { TableCell, TableCellProps, TableRow, TableRowProps, Typography } from '@mui/material'
2
+ import { useBreakpoint } from '@xylabs/react-shared'
3
+ import { XyoPayload, XyoPayloadValidator, XyoPayloadWrapper } from '@xyo-network/payload'
4
+ import { useNetwork } from '@xyo-network/react-network'
5
+ import { HashTableCell } from '@xyo-network/react-shared'
6
+ import { MdClear, MdDone } from 'react-icons/md'
7
+
8
+ import { PayloadTableColumnConfig, payloadTableColumnConfigDefaults, PayloadTableColumnSlug } from './PayloadTableColumnConfig'
9
+
10
+ export interface PayloadTableRowProps extends TableRowProps {
11
+ payload?: XyoPayload
12
+ archive?: string
13
+ exploreDomain?: string
14
+ columns?: PayloadTableColumnConfig
15
+ network?: string
16
+ }
17
+
18
+ export const PayloadTableRow: React.FC<PayloadTableRowProps> = ({
19
+ exploreDomain,
20
+ network: networkProp,
21
+ payload,
22
+ archive,
23
+ columns = payloadTableColumnConfigDefaults(),
24
+ ...props
25
+ }) => {
26
+ const breakPoint = useBreakpoint()
27
+ const wrapper = payload ? new XyoPayloadWrapper(payload) : undefined
28
+ const { network } = useNetwork()
29
+
30
+ const hash: React.FC<TableCellProps> = (props) => (
31
+ <HashTableCell
32
+ key="hash"
33
+ archive={archive}
34
+ width="100%"
35
+ value={wrapper?.hash}
36
+ dataType="payload"
37
+ exploreDomain={exploreDomain}
38
+ network={networkProp ?? network?.slug}
39
+ {...props}
40
+ />
41
+ )
42
+
43
+ const schema: React.FC<TableCellProps> = (props) => (
44
+ <TableCell key="payloads" align="center" {...props}>
45
+ <Typography fontFamily="monospace" variant="body2" noWrap>
46
+ {payload?.schema}
47
+ </Typography>
48
+ </TableCell>
49
+ )
50
+
51
+ const isValid = wrapper ? new XyoPayloadValidator(wrapper.body).validate().length === 0 : undefined
52
+
53
+ const valid: React.FC<TableCellProps> = (props) => (
54
+ <TableCell key="valid" align="center" {...props}>
55
+ <Typography fontFamily="monospace" variant="body2" noWrap>
56
+ {isValid === undefined ? (
57
+ <MdDone fontSize={18} color="yellow" />
58
+ ) : isValid ? (
59
+ <MdDone fontSize={18} color="green" />
60
+ ) : (
61
+ <MdClear color="red" fontSize={18} />
62
+ )}
63
+ </Typography>
64
+ </TableCell>
65
+ )
66
+
67
+ const tableCells: Record<PayloadTableColumnSlug, React.FC<TableCellProps>> = {
68
+ hash,
69
+ schema,
70
+ valid,
71
+ }
72
+
73
+ return breakPoint ? (
74
+ <TableRow style={{ maxWidth: '100vw' }} {...props}>
75
+ {columns[breakPoint]?.map((column) => {
76
+ return tableCells[column]({})
77
+ })}
78
+ </TableRow>
79
+ ) : null
80
+ }
@@ -0,0 +1,3 @@
1
+ export * from './PayloadTableColumnConfig'
2
+ export * from './Table'
3
+ export * from './TableRow'
@@ -0,0 +1 @@
1
+ export * from './Table'
package/src/index.ts ADDED
@@ -0,0 +1 @@
1
+ export * from './components'