Skip to content

Commit b633d74

Browse files
committed
improved clickable fields behavior
1 parent dd59470 commit b633d74

File tree

4 files changed

+66
-29
lines changed

4 files changed

+66
-29
lines changed

packages/plugins/packages/boundwitness/src/components/_shared/Payloads/PayloadsTable.tsx

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import type { BoundWitness } from '@xyo-network/boundwitness-model'
22
import { BoundWitnessSchema } from '@xyo-network/boundwitness-model'
3+
import type { ExtendEventNoun } from '@xyo-network/react-event'
34
import type { PayloadTableProps } from '@xyo-network/react-payload-table'
4-
import { usePayloadHash } from '@xyo-network/react-shared'
55
import { TableEx } from '@xyo-network/react-table'
66
import type { PropsWithChildren } from 'react'
77
import React from 'react'
@@ -10,14 +10,18 @@ import { BoundWitnessFilteredPayloadTableBody, BoundWitnessPayloadTableHead } fr
1010

1111
export interface BoundWitnessPayloadTableProps extends PayloadTableProps {
1212
boundwitness?: BoundWitness
13+
clickableFields?: ExtendEventNoun[]
14+
eventNoun?: ExtendEventNoun
1315
}
1416

15-
export const BoundWitnessPayloadsTable: React.FC<BoundWitnessPayloadTableProps> = ({ boundwitness, ...props }) => {
16-
const hash = usePayloadHash(boundwitness)
17+
export const BoundWitnessPayloadsTable: React.FC<BoundWitnessPayloadTableProps> = ({
18+
boundwitness, clickableFields, eventNoun = 'payload', ...props
19+
}) => {
1720
return (
1821
<BoundWitnessPayloadsTableInner {...props}>
1922
<BoundWitnessFilteredPayloadTableBody
20-
eventNoun="payload"
23+
clickableFields={clickableFields}
24+
eventNoun={eventNoun}
2125
schemaFilter={BoundWitnessSchema}
2226
bwFilterType="notEqual"
2327
noResults={boundwitness?.payload_hashes.length === 0}
@@ -28,11 +32,14 @@ export const BoundWitnessPayloadsTable: React.FC<BoundWitnessPayloadTableProps>
2832
)
2933
}
3034

31-
export const BoundWitnessPayloadsTableForBWs: React.FC<BoundWitnessPayloadTableProps> = ({ boundwitness, ...props }) => {
35+
export const BoundWitnessPayloadsTableForBWs: React.FC<BoundWitnessPayloadTableProps> = ({
36+
boundwitness, clickableFields, eventNoun = 'boundwitness', ...props
37+
}) => {
3238
return (
3339
<BoundWitnessPayloadsTableInner {...props}>
3440
<BoundWitnessFilteredPayloadTableBody
35-
eventNoun="boundwitness"
41+
clickableFields={clickableFields}
42+
eventNoun={eventNoun}
3643
schemaFilter={BoundWitnessSchema}
3744
noResults={boundwitness?.payload_hashes.length === 0}
3845
payloadHashes={boundwitness?.payload_hashes}

packages/plugins/packages/boundwitness/src/components/_shared/Payloads/payloads-table/TableBody.stories.tsx

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,13 @@ export default {
2525
component: BoundWitnessPayloadTableBody,
2626
} as Meta
2727

28-
const Template: StoryFn<typeof BoundWitnessPayloadTableBody<EventNoun>> = args => <BoundWitnessPayloadTableBody {...args} />
28+
const Template: StoryFn<typeof BoundWitnessPayloadTableBody<EventNoun>> = (args) => {
29+
const [ref] = useEvent<HTMLTableSectionElement>((noun, verb, data) => {
30+
alert(`${noun}|${verb}|${data}`)
31+
})
32+
return <BoundWitnessPayloadTableBody ref={ref} {...args} />
33+
}
34+
2935
const TemplateWithCustomNouns: StoryFn<typeof BoundWitnessPayloadTableBody<CustomNoun>>
3036
= (args) => {
3137
const [ref] = useEvent<HTMLTableSectionElement>((noun, verb, data) => {
@@ -38,13 +44,16 @@ const Default = Template.bind({})
3844
Default.args = {}
3945

4046
const WithData = Template.bind({})
41-
WithData.args = { ...data, clickableFields: ['payload'] }
47+
WithData.args = { ...data }
48+
49+
const WithClickableFields = Template.bind({})
50+
WithClickableFields.args = { ...data, clickableFields: ['schema'] }
4251

4352
const WithCustomNouns = TemplateWithCustomNouns.bind({})
4453
WithCustomNouns.args = {
45-
...data, eventNoun: 'customNoun', clickableFields: ['customNoun'],
54+
...data, eventNoun: 'customNoun', clickableFields: ['hash'],
4655
}
4756

4857
export {
49-
Default, WithCustomNouns, WithData,
58+
Default, WithClickableFields, WithCustomNouns, WithData,
5059
}

packages/plugins/packages/boundwitness/src/components/_shared/Payloads/payloads-table/TableBody.tsx

Lines changed: 29 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -11,16 +11,22 @@ import { useTableHeight } from '@xyo-network/react-table'
1111
import type { RefObject } from 'react'
1212
import React, { useLayoutEffect } from 'react'
1313

14-
export interface BoundWitnessPayloadTableBodyProps<TNoun extends ExtendEventNoun<string> = EventNoun> extends PayloadTableBodyProps {
15-
clickableFields?: TNoun[]
14+
type ClickableFields = 'hash' | 'schema'
15+
16+
export interface BoundWitnessPayloadTableBodyProps<
17+
TNoun extends ExtendEventNoun<string> = EventNoun,
18+
> extends PayloadTableBodyProps {
19+
clickableFields?: ClickableFields[]
1620
eventNoun?: TNoun
1721
payloadHashes?: string[]
1822
payloadSchemas?: string[]
1923
}
2024

21-
export const BoundWitnessPayloadTableBody = <TNoun extends ExtendEventNoun<string> = EventNoun>({
25+
export const BoundWitnessPayloadTableBody = <
26+
TNoun extends ExtendEventNoun<string> = EventNoun,
27+
>({
2228
clickableFields,
23-
eventNoun = 'payload' as TNoun,
29+
eventNoun: eventNounOverride,
2430
payloadHashes,
2531
payloadSchemas,
2632
ref,
@@ -40,6 +46,21 @@ export const BoundWitnessPayloadTableBody = <TNoun extends ExtendEventNoun<strin
4046
}
4147
})
4248

49+
const RenderedCell: React.FC<{ field: ClickableFields; value: string }> = ({ field, value }) => {
50+
return clickableFields?.includes(field)
51+
? (
52+
<Link
53+
sx={{ cursor: 'pointer' }}
54+
onClick={() => {
55+
dispatch (eventNounOverride ?? field as TNoun, 'click', value)
56+
}}
57+
>
58+
{value}
59+
</Link>
60+
)
61+
: value
62+
}
63+
4364
return (
4465
<TableBody {...tableProps}>
4566
{noResults && NoResultRowComponent
@@ -49,20 +70,11 @@ export const BoundWitnessPayloadTableBody = <TNoun extends ExtendEventNoun<strin
4970
? payloadHashes.map((hash, index) => {
5071
return (
5172
<TableRow ref={tableRowRef} key={hash}>
52-
<TableCell title={payloadSchemas[index]}>{payloadSchemas[index]}</TableCell>
73+
<TableCell title={payloadSchemas[index]}>
74+
<RenderedCell field="schema" value={payloadSchemas[index]} />
75+
</TableCell>
5376
<HashTableCell title={hash} value={hash}>
54-
{clickableFields?.includes(eventNoun)
55-
? (
56-
<Link
57-
sx={{ cursor: 'pointer' }}
58-
onClick={() => {
59-
dispatch(eventNoun, 'click', hash)
60-
}}
61-
>
62-
{hash}
63-
</Link>
64-
)
65-
: hash}
77+
<RenderedCell field="hash" value={hash} />
6678
</HashTableCell>
6779
</TableRow>
6880
)

packages/plugins/packages/boundwitness/src/components/_shared/Payloads/payloads-table/TableBodyFiltered.tsx

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@ export interface BoundWitnessFilteredPayloadTableBodyProps extends BoundWitnessP
1010

1111
export const BoundWitnessFilteredPayloadTableBody: React.FC<BoundWitnessFilteredPayloadTableBodyProps> = ({
1212
bwFilterType = 'equal',
13-
eventNoun = 'payload',
13+
clickableFields,
14+
eventNoun,
1415
payloadHashes,
1516
payloadSchemas,
1617
schemaFilter,
@@ -48,5 +49,13 @@ export const BoundWitnessFilteredPayloadTableBody: React.FC<BoundWitnessFiltered
4849
setBWPayloadHashes(filteredHashes)
4950
}
5051
}, [bwFilterType, payloadHashes, payloadSchemas, schemaFilter])
51-
return <BoundWitnessPayloadTableBody payloadHashes={bwPayloadHashes} payloadSchemas={bwPayloadSchemas} eventNoun={eventNoun} {...props} />
52+
return (
53+
<BoundWitnessPayloadTableBody
54+
payloadHashes={bwPayloadHashes}
55+
payloadSchemas={bwPayloadSchemas}
56+
clickableFields={clickableFields}
57+
eventNoun={eventNoun}
58+
{...props}
59+
/>
60+
)
5261
}

0 commit comments

Comments
 (0)