@xyo-network/react-embed 2.27.28 → 2.27.31

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 (141) hide show
  1. package/dist/cjs/components/XyoEmbedPlugin.d.ts +1 -1
  2. package/dist/cjs/components/XyoEmbedPlugin.d.ts.map +1 -1
  3. package/dist/cjs/components/XyoEmbedPlugin.js +2 -2
  4. package/dist/cjs/components/XyoEmbedPlugin.js.map +1 -1
  5. package/dist/cjs/components/XyoEmbedPluginProps.d.ts +9 -0
  6. package/dist/cjs/components/XyoEmbedPluginProps.d.ts.map +1 -1
  7. package/dist/cjs/components/embed-card/EmbedCardHeader.d.ts +4 -0
  8. package/dist/cjs/components/embed-card/EmbedCardHeader.d.ts.map +1 -0
  9. package/dist/cjs/components/embed-card/EmbedCardHeader.js +19 -0
  10. package/dist/cjs/components/embed-card/EmbedCardHeader.js.map +1 -0
  11. package/dist/cjs/components/embed-card/EmbedPluginContainer.d.ts +1 -4
  12. package/dist/cjs/components/embed-card/EmbedPluginContainer.d.ts.map +1 -1
  13. package/dist/cjs/components/embed-card/EmbedPluginContainer.js +8 -9
  14. package/dist/cjs/components/embed-card/EmbedPluginContainer.js.map +1 -1
  15. package/dist/cjs/components/embed-card/ValidatePlugins.d.ts.map +1 -1
  16. package/dist/cjs/components/embed-card/ValidatePlugins.js +2 -1
  17. package/dist/cjs/components/embed-card/ValidatePlugins.js.map +1 -1
  18. package/dist/cjs/components/embed-card/menu/JsonMenuItem.js +1 -1
  19. package/dist/cjs/components/embed-card/menu/JsonMenuItem.js.map +1 -1
  20. package/dist/cjs/contexts/ResolvePayloadContext/Context.d.ts +4 -0
  21. package/dist/cjs/contexts/ResolvePayloadContext/Context.d.ts.map +1 -0
  22. package/dist/cjs/contexts/ResolvePayloadContext/Context.js +6 -0
  23. package/dist/cjs/contexts/ResolvePayloadContext/Context.js.map +1 -0
  24. package/dist/cjs/contexts/ResolvePayloadContext/Provider.d.ts +7 -0
  25. package/dist/cjs/contexts/ResolvePayloadContext/Provider.d.ts.map +1 -0
  26. package/dist/cjs/contexts/ResolvePayloadContext/Provider.js +56 -0
  27. package/dist/cjs/contexts/ResolvePayloadContext/Provider.js.map +1 -0
  28. package/dist/cjs/contexts/ResolvePayloadContext/State.d.ts +15 -0
  29. package/dist/cjs/contexts/ResolvePayloadContext/State.d.ts.map +1 -0
  30. package/dist/cjs/contexts/ResolvePayloadContext/State.js +3 -0
  31. package/dist/cjs/contexts/ResolvePayloadContext/State.js.map +1 -0
  32. package/dist/cjs/contexts/ResolvePayloadContext/index.d.ts +4 -0
  33. package/dist/cjs/contexts/ResolvePayloadContext/index.d.ts.map +1 -0
  34. package/dist/cjs/contexts/ResolvePayloadContext/index.js +7 -0
  35. package/dist/cjs/contexts/ResolvePayloadContext/index.js.map +1 -0
  36. package/dist/cjs/contexts/ResolvePayloadContext/use.d.ts +2 -0
  37. package/dist/cjs/contexts/ResolvePayloadContext/use.d.ts.map +1 -0
  38. package/dist/cjs/contexts/ResolvePayloadContext/use.js +8 -0
  39. package/dist/cjs/contexts/ResolvePayloadContext/use.js.map +1 -0
  40. package/dist/cjs/contexts/ValidatePayloadContext/Provider.js +2 -2
  41. package/dist/cjs/contexts/ValidatePayloadContext/Provider.js.map +1 -1
  42. package/dist/cjs/contexts/XyoEmbedPluginContext/Provider.d.ts +6 -7
  43. package/dist/cjs/contexts/XyoEmbedPluginContext/Provider.d.ts.map +1 -1
  44. package/dist/cjs/contexts/XyoEmbedPluginContext/Provider.js +11 -37
  45. package/dist/cjs/contexts/XyoEmbedPluginContext/Provider.js.map +1 -1
  46. package/dist/cjs/contexts/XyoEmbedPluginContext/State.d.ts +24 -7
  47. package/dist/cjs/contexts/XyoEmbedPluginContext/State.d.ts.map +1 -1
  48. package/dist/cjs/contexts/index.d.ts +1 -0
  49. package/dist/cjs/contexts/index.d.ts.map +1 -1
  50. package/dist/cjs/contexts/index.js +1 -0
  51. package/dist/cjs/contexts/index.js.map +1 -1
  52. package/dist/cjs/types/XyoEmbedPluginProps.d.ts +10 -0
  53. package/dist/cjs/types/XyoEmbedPluginProps.d.ts.map +1 -0
  54. package/dist/cjs/types/XyoEmbedPluginProps.js +3 -0
  55. package/dist/cjs/types/XyoEmbedPluginProps.js.map +1 -0
  56. package/dist/cjs/types/index.d.ts +2 -0
  57. package/dist/cjs/types/index.d.ts.map +1 -0
  58. package/dist/cjs/types/index.js +5 -0
  59. package/dist/cjs/types/index.js.map +1 -0
  60. package/dist/docs.json +2 -2
  61. package/dist/esm/components/XyoEmbedPlugin.d.ts +1 -1
  62. package/dist/esm/components/XyoEmbedPlugin.d.ts.map +1 -1
  63. package/dist/esm/components/XyoEmbedPlugin.js +3 -3
  64. package/dist/esm/components/XyoEmbedPlugin.js.map +1 -1
  65. package/dist/esm/components/XyoEmbedPluginProps.d.ts +9 -0
  66. package/dist/esm/components/XyoEmbedPluginProps.d.ts.map +1 -1
  67. package/dist/esm/components/embed-card/EmbedCardHeader.d.ts +4 -0
  68. package/dist/esm/components/embed-card/EmbedCardHeader.d.ts.map +1 -0
  69. package/dist/esm/components/embed-card/EmbedCardHeader.js +13 -0
  70. package/dist/esm/components/embed-card/EmbedCardHeader.js.map +1 -0
  71. package/dist/esm/components/embed-card/EmbedPluginContainer.d.ts +1 -4
  72. package/dist/esm/components/embed-card/EmbedPluginContainer.d.ts.map +1 -1
  73. package/dist/esm/components/embed-card/EmbedPluginContainer.js +10 -9
  74. package/dist/esm/components/embed-card/EmbedPluginContainer.js.map +1 -1
  75. package/dist/esm/components/embed-card/ValidatePlugins.d.ts.map +1 -1
  76. package/dist/esm/components/embed-card/ValidatePlugins.js +3 -2
  77. package/dist/esm/components/embed-card/ValidatePlugins.js.map +1 -1
  78. package/dist/esm/components/embed-card/menu/JsonMenuItem.js +2 -2
  79. package/dist/esm/components/embed-card/menu/JsonMenuItem.js.map +1 -1
  80. package/dist/esm/contexts/ResolvePayloadContext/Context.d.ts +4 -0
  81. package/dist/esm/contexts/ResolvePayloadContext/Context.d.ts.map +1 -0
  82. package/dist/esm/contexts/ResolvePayloadContext/Context.js +3 -0
  83. package/dist/esm/contexts/ResolvePayloadContext/Context.js.map +1 -0
  84. package/dist/esm/contexts/ResolvePayloadContext/Provider.d.ts +7 -0
  85. package/dist/esm/contexts/ResolvePayloadContext/Provider.d.ts.map +1 -0
  86. package/dist/esm/contexts/ResolvePayloadContext/Provider.js +50 -0
  87. package/dist/esm/contexts/ResolvePayloadContext/Provider.js.map +1 -0
  88. package/dist/esm/contexts/ResolvePayloadContext/State.d.ts +15 -0
  89. package/dist/esm/contexts/ResolvePayloadContext/State.d.ts.map +1 -0
  90. package/dist/esm/contexts/ResolvePayloadContext/State.js +2 -0
  91. package/dist/esm/contexts/ResolvePayloadContext/State.js.map +1 -0
  92. package/dist/esm/contexts/ResolvePayloadContext/index.d.ts +4 -0
  93. package/dist/esm/contexts/ResolvePayloadContext/index.d.ts.map +1 -0
  94. package/dist/esm/contexts/ResolvePayloadContext/index.js +4 -0
  95. package/dist/esm/contexts/ResolvePayloadContext/index.js.map +1 -0
  96. package/dist/esm/contexts/ResolvePayloadContext/use.d.ts +2 -0
  97. package/dist/esm/contexts/ResolvePayloadContext/use.d.ts.map +1 -0
  98. package/dist/esm/contexts/ResolvePayloadContext/use.js +4 -0
  99. package/dist/esm/contexts/ResolvePayloadContext/use.js.map +1 -0
  100. package/dist/esm/contexts/ValidatePayloadContext/Provider.js +2 -2
  101. package/dist/esm/contexts/ValidatePayloadContext/Provider.js.map +1 -1
  102. package/dist/esm/contexts/XyoEmbedPluginContext/Provider.d.ts +6 -7
  103. package/dist/esm/contexts/XyoEmbedPluginContext/Provider.d.ts.map +1 -1
  104. package/dist/esm/contexts/XyoEmbedPluginContext/Provider.js +11 -35
  105. package/dist/esm/contexts/XyoEmbedPluginContext/Provider.js.map +1 -1
  106. package/dist/esm/contexts/XyoEmbedPluginContext/State.d.ts +24 -7
  107. package/dist/esm/contexts/XyoEmbedPluginContext/State.d.ts.map +1 -1
  108. package/dist/esm/contexts/index.d.ts +1 -0
  109. package/dist/esm/contexts/index.d.ts.map +1 -1
  110. package/dist/esm/contexts/index.js +1 -0
  111. package/dist/esm/contexts/index.js.map +1 -1
  112. package/dist/esm/types/XyoEmbedPluginProps.d.ts +10 -0
  113. package/dist/esm/types/XyoEmbedPluginProps.d.ts.map +1 -0
  114. package/dist/esm/types/XyoEmbedPluginProps.js +2 -0
  115. package/dist/esm/types/XyoEmbedPluginProps.js.map +1 -0
  116. package/dist/esm/types/index.d.ts +2 -0
  117. package/dist/esm/types/index.d.ts.map +1 -0
  118. package/dist/esm/types/index.js +2 -0
  119. package/dist/esm/types/index.js.map +1 -0
  120. package/package.json +9 -9
  121. package/src/components/XyoEmbedPlugin.stories.tsx +31 -5
  122. package/src/components/XyoEmbedPlugin.tsx +24 -14
  123. package/src/components/embed-card/EmbedCardHeader.tsx +45 -0
  124. package/src/components/embed-card/EmbedPluginContainer.tsx +12 -37
  125. package/src/components/embed-card/ValidatePlugins.tsx +3 -2
  126. package/src/components/embed-card/menu/JsonMenuItem.tsx +2 -2
  127. package/src/components/payload.stories.ts +21 -0
  128. package/src/contexts/ResolvePayloadContext/Context.ts +5 -0
  129. package/src/contexts/ResolvePayloadContext/Provider.tsx +71 -0
  130. package/src/contexts/ResolvePayloadContext/State.ts +15 -0
  131. package/src/contexts/ResolvePayloadContext/index.ts +3 -0
  132. package/src/contexts/ResolvePayloadContext/use.tsx +5 -0
  133. package/src/contexts/ValidatePayloadContext/Provider.stories.tsx +19 -7
  134. package/src/contexts/ValidatePayloadContext/Provider.tsx +2 -2
  135. package/src/contexts/XyoEmbedPluginContext/Provider.tsx +19 -53
  136. package/src/contexts/XyoEmbedPluginContext/State.ts +27 -7
  137. package/src/contexts/index.ts +1 -0
  138. package/src/types/XyoEmbedPluginProps.ts +11 -0
  139. package/src/types/index.ts +1 -0
  140. package/src/components/RenderComponent.tsx +0 -13
  141. package/src/components/XyoEmbedPluginProps.ts +0 -10
@@ -1,3 +1,4 @@
1
+ export * from './ResolvePayloadContext';
1
2
  export * from './ValidatePayloadContext';
2
3
  export * from './XyoEmbedPluginContext';
3
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/contexts/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAA;AACxC,cAAc,yBAAyB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/contexts/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAA;AACvC,cAAc,0BAA0B,CAAA;AACxC,cAAc,yBAAyB,CAAA"}
@@ -1,3 +1,4 @@
1
+ export * from './ResolvePayloadContext';
1
2
  export * from './ValidatePayloadContext';
2
3
  export * from './XyoEmbedPluginContext';
3
4
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/contexts/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAA;AACxC,cAAc,yBAAyB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/contexts/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAA;AACvC,cAAc,0BAA0B,CAAA;AACxC,cAAc,yBAAyB,CAAA"}
@@ -0,0 +1,10 @@
1
+ import { CardProps } from '@mui/material';
2
+ import { XyoPayload } from '@xyo-network/payload';
3
+ import { EmbedPluginVisibilityConfig, XyoEmbedPluginBase } from '../contexts';
4
+ export interface XyoEmbedPluginProps extends XyoEmbedPluginBase, CardProps {
5
+ /** string for huri to resolve and payload for bypassing huri resolution */
6
+ huriPayload?: string | XyoPayload;
7
+ validateSchema?: boolean;
8
+ hideElementsConfig?: EmbedPluginVisibilityConfig;
9
+ }
10
+ //# sourceMappingURL=XyoEmbedPluginProps.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"XyoEmbedPluginProps.d.ts","sourceRoot":"","sources":["../../../src/types/XyoEmbedPluginProps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAEjD,OAAO,EAAE,2BAA2B,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAE7E,MAAM,WAAW,mBAAoB,SAAQ,kBAAkB,EAAE,SAAS;IACxE,2EAA2E;IAC3E,WAAW,CAAC,EAAE,MAAM,GAAG,UAAU,CAAA;IACjC,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,kBAAkB,CAAC,EAAE,2BAA2B,CAAA;CACjD"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=XyoEmbedPluginProps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"XyoEmbedPluginProps.js","sourceRoot":"","sources":["../../../src/types/XyoEmbedPluginProps.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export * from './XyoEmbedPluginProps';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAA"}
@@ -0,0 +1,2 @@
1
+ export * from './XyoEmbedPluginProps';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAA"}
package/package.json CHANGED
@@ -16,13 +16,13 @@
16
16
  "@mui/material": "^5.10.0",
17
17
  "@xylabs/react-flexbox": "^2.14.13",
18
18
  "@xylabs/react-shared": "^2.14.13",
19
- "@xylabs/sdk-js": "^2.6.5",
19
+ "@xylabs/sdk-js": "^2.6.6",
20
20
  "@xyo-network/api": "^2.25.2",
21
21
  "@xyo-network/payload": "^2.25.2",
22
- "@xyo-network/react-auth-service": "^2.27.30",
23
- "@xyo-network/react-payload-plugin": "^2.27.30",
24
- "@xyo-network/react-shared": "^2.27.30",
25
- "@xyo-network/react-webapp": "^2.27.30",
22
+ "@xyo-network/react-auth-service": "^2.27.33",
23
+ "@xyo-network/react-payload-plugin": "^2.27.33",
24
+ "@xyo-network/react-shared": "^2.27.33",
25
+ "@xyo-network/react-webapp": "^2.27.33",
26
26
  "@xyo-network/utils": "^2.25.2",
27
27
  "react": "^18.2.0",
28
28
  "react-dom": "^18.2.0",
@@ -31,9 +31,9 @@
31
31
  "description": "Common React library for all XYO projects that use React",
32
32
  "devDependencies": {
33
33
  "@storybook/react": "^6.5.10",
34
- "@xylabs/tsconfig-dom": "^2.5.97",
35
- "@xyo-network/react-aggregate-price-plugin": "^2.27.29",
36
- "@xyo-network/react-crypto-market-uniswap-payload-plugin": "^2.27.30",
34
+ "@xylabs/tsconfig-dom": "^2.5.99",
35
+ "@xyo-network/react-aggregate-price-plugin": "^2.27.32",
36
+ "@xyo-network/react-crypto-market-uniswap-payload-plugin": "^2.27.33",
37
37
  "react-router-dom": "^6.3.0"
38
38
  },
39
39
  "browser": "dist/esm/index.js",
@@ -78,5 +78,5 @@
78
78
  },
79
79
  "sideEffects": false,
80
80
  "types": "dist/esm/index.d.ts",
81
- "version": "2.27.28"
81
+ "version": "2.27.31"
82
82
  }
@@ -4,9 +4,10 @@ import { UniswapPairsRenderPlugin } from '@xyo-network/react-crypto-market-unisw
4
4
  import { createPayloadRenderPlugin } from '@xyo-network/react-payload-plugin'
5
5
  import { BrowserRouter } from 'react-router-dom'
6
6
 
7
+ import { payloadData } from './payload.stories'
7
8
  import { XyoEmbedPlugin } from './XyoEmbedPlugin'
8
9
 
9
- const AggregatePricePointer = 'https://api.archivist.xyo.network/9663b2f80395a9e7e95948fdd5988b778a4dcc047202bf67e855ff6cd459b8c0'
10
+ const AggregatePricePointer = 'https://api.archivist.xyo.network/1948bf4eedf90ee2b8a1f63216b7c6b3b18d7bc2834330d85bcd6ab3d6428a20'
10
11
  const UniswapPairPointer = 'https://beta.api.archivist.xyo.network/e36602006239d86b6e08412f7879372b2c622d74f4d6bc508a08a46fa8ad6523'
11
12
 
12
13
  // eslint-disable-next-line import/no-default-export
@@ -47,23 +48,48 @@ Default.args = {
47
48
 
48
49
  const AggregatePriceExample = Template.bind({})
49
50
  AggregatePriceExample.args = {
50
- huri: AggregatePricePointer,
51
+ huriPayload: AggregatePricePointer,
51
52
  plugins: [CryptoAssetRenderPlugin],
52
53
  timestampLabel: 'Last Updated - ',
53
54
  }
54
55
 
55
56
  const UniswapPairsExample = Template.bind({})
56
57
  UniswapPairsExample.args = {
57
- huri: UniswapPairPointer,
58
+ huriPayload: UniswapPairPointer,
58
59
  plugins: [UniswapPairsRenderPlugin],
59
60
  timestampLabel: 'Last Updated - ',
60
61
  }
61
62
 
62
63
  const Error = Template.bind({})
63
64
  Error.args = {
64
- huri: 'https://api.archivist.xyo.network/9663b2f80395a9e7e95948fdd5988b778a4dcc047202bf67e855ff6cd459b8c',
65
+ huriPayload: 'https://api.archivist.xyo.network/9663b2f80395a9e7e95948fdd5988b778a4dcc047202bf67e855ff6cd459b8c',
65
66
  plugins: [UniswapPairsRenderPlugin],
66
67
  timestampLabel: 'Last Updated - ',
67
68
  }
68
69
 
69
- export { AggregatePriceExample, Default, Error, UniswapPairsExample }
70
+ const HiddenElements = Template.bind({})
71
+ HiddenElements.args = {
72
+ hideElementsConfig: {
73
+ hideAvatar: true,
74
+ hideCardActions: true,
75
+ hideCardHeader: true,
76
+ hideRefreshButton: true,
77
+ hideTimestamp: true,
78
+ hideTitle: true,
79
+ },
80
+ huriPayload: AggregatePricePointer,
81
+ plugins: [CryptoAssetRenderPlugin],
82
+ timestampLabel: 'Last Updated - ',
83
+ }
84
+
85
+ const WithPassedPayload = Template.bind({})
86
+ WithPassedPayload.args = {
87
+ hideElementsConfig: {
88
+ hideRefreshButton: true,
89
+ },
90
+ huriPayload: payloadData,
91
+ plugins: [CryptoAssetRenderPlugin],
92
+ timestampLabel: 'Last Updated - ',
93
+ }
94
+
95
+ export { AggregatePriceExample, Default, Error, HiddenElements, UniswapPairsExample, WithPassedPayload }
@@ -1,28 +1,38 @@
1
1
  import { ListModeProvider } from '@xyo-network/react-shared'
2
2
 
3
- import { ValidatePayloadProvider, XyoEmbedPluginProvider } from '../contexts'
3
+ import { ResolvePayloadProvider, ValidatePayloadProvider, XyoEmbedPluginProvider } from '../contexts'
4
+ import { XyoEmbedPluginProps } from '../types'
4
5
  import { EmbedPluginContainer, ValidatePayload, ValidatePlugins } from './embed-card'
5
- import { XyoEmbedPluginProps } from './XyoEmbedPluginProps'
6
6
 
7
7
  export const XyoEmbedPlugin: React.FC<XyoEmbedPluginProps> = ({
8
8
  validateSchema,
9
9
  plugins = [],
10
- huri,
10
+ huriPayload,
11
11
  refreshTitle = '',
12
12
  timestampLabel = 'Data From',
13
+ hideElementsConfig,
14
+ embedPluginConfig,
13
15
  ...props
14
16
  }) => {
15
17
  return (
16
- <XyoEmbedPluginProvider refreshTitle={refreshTitle} timestampLabel={timestampLabel} plugins={plugins} huri={huri}>
17
- <ValidatePayloadProvider enabled={validateSchema}>
18
- <ListModeProvider>
19
- <ValidatePlugins>
20
- <ValidatePayload>
21
- <EmbedPluginContainer {...props} />
22
- </ValidatePayload>
23
- </ValidatePlugins>
24
- </ListModeProvider>
25
- </ValidatePayloadProvider>
26
- </XyoEmbedPluginProvider>
18
+ <ResolvePayloadProvider huriPayload={huriPayload} {...props}>
19
+ <XyoEmbedPluginProvider
20
+ refreshTitle={refreshTitle}
21
+ timestampLabel={timestampLabel}
22
+ hideElementsConfig={hideElementsConfig}
23
+ plugins={plugins}
24
+ embedPluginConfig={embedPluginConfig}
25
+ >
26
+ <ValidatePayloadProvider enabled={validateSchema}>
27
+ <ListModeProvider defaultListMode={embedPluginConfig?.listMode}>
28
+ <ValidatePlugins>
29
+ <ValidatePayload>
30
+ <EmbedPluginContainer {...props} />
31
+ </ValidatePayload>
32
+ </ValidatePlugins>
33
+ </ListModeProvider>
34
+ </ValidatePayloadProvider>
35
+ </XyoEmbedPluginProvider>
36
+ </ResolvePayloadProvider>
27
37
  )
28
38
  }
@@ -0,0 +1,45 @@
1
+ import RefreshIcon from '@mui/icons-material/Refresh'
2
+ import { Avatar, CardHeader, CardHeaderProps, Chip, Theme } from '@mui/material'
3
+ import { FlexRow } from '@xylabs/react-flexbox'
4
+
5
+ import { useResolvePayload, useXyoEmbedPluginState } from '../../contexts'
6
+ import { EmbedMenu } from './menu'
7
+
8
+ export const EmbedCardHeader: React.FC<CardHeaderProps> = () => {
9
+ const { payload, refreshHuri, huri } = useResolvePayload()
10
+ const { activePlugin, timestampLabel, hideElementsConfig } = useXyoEmbedPluginState()
11
+ const { hideAvatar, hideTitle, hideRefreshButton, hideTimestamp, hideCardActions } = hideElementsConfig ?? {}
12
+ return (
13
+ <CardHeader
14
+ sx={{ flexWrap: 'wrap', rowGap: 1 }}
15
+ avatar={
16
+ hideAvatar ? (
17
+ <></>
18
+ ) : (
19
+ <Avatar sx={{ bgcolor: (theme: Theme) => theme.palette.primary.main }} aria-label={activePlugin?.name}>
20
+ {activePlugin?.name?.charAt(0)}
21
+ </Avatar>
22
+ )
23
+ }
24
+ action={
25
+ <FlexRow>
26
+ {payload?.timestamp ? (
27
+ hideTimestamp && hideRefreshButton ? (
28
+ ''
29
+ ) : (
30
+ <Chip
31
+ avatar={hideRefreshButton ? <></> : <RefreshIcon />}
32
+ clickable={!!huri}
33
+ onClick={refreshHuri}
34
+ label={hideTimestamp ? '' : `${timestampLabel} ${new Date(payload.timestamp).toLocaleString()}`}
35
+ />
36
+ )
37
+ ) : null}
38
+ {/* Huri case is valid as long as the only menu item is JSON */}
39
+ {hideCardActions || huri === undefined ? null : <EmbedMenu />}
40
+ </FlexRow>
41
+ }
42
+ title={hideTitle ? '' : activePlugin?.name}
43
+ />
44
+ )
45
+ }
@@ -1,49 +1,24 @@
1
- import RefreshIcon from '@mui/icons-material/Refresh'
2
- import { Avatar, Card, CardContent, CardHeader, CardProps, Chip, Theme } from '@mui/material'
3
- import { FlexGrowRow, FlexRow } from '@xylabs/react-flexbox'
1
+ import { Card, CardContent, CardProps } from '@mui/material'
2
+ import { FlexGrowRow } from '@xylabs/react-flexbox'
3
+ import { useListMode } from '@xyo-network/react-shared'
4
4
 
5
- import { useXyoEmbedPluginState } from '../../contexts'
5
+ import { useResolvePayload, useXyoEmbedPluginState } from '../../contexts'
6
6
  import { EmbedRenderSelect, ListModeSelectFormControl } from '../controls'
7
- import { RenderComponent } from '../RenderComponent'
8
- import { EmbedMenu } from './menu'
7
+ import { EmbedCardHeader } from './EmbedCardHeader'
9
8
 
10
- export interface EmbedPluginContainerProps extends CardProps {
11
- hideEmbedMenu?: boolean
12
- }
9
+ export const EmbedPluginContainer: React.FC<CardProps> = (props) => {
10
+ const { payload } = useResolvePayload()
11
+ const { activePlugin: ActivePlugin, plugins, hideElementsConfig } = useXyoEmbedPluginState()
12
+ const { listMode } = useListMode()
13
13
 
14
- export const EmbedPluginContainer: React.FC<EmbedPluginContainerProps> = ({ hideEmbedMenu, ...props }) => {
15
- const { activePlugin, payload, timestampLabel, refreshHuri, plugins } = useXyoEmbedPluginState()
16
14
  return (
17
15
  <Card elevation={3} variant="elevation" {...props}>
18
- <CardHeader
19
- sx={{ flexWrap: 'wrap', rowGap: 1 }}
20
- avatar={
21
- <Avatar sx={{ bgcolor: (theme: Theme) => theme.palette.primary.main }} aria-label={activePlugin?.name}>
22
- {activePlugin?.name?.charAt(0)}
23
- </Avatar>
24
- }
25
- action={
26
- <FlexRow>
27
- {payload?.timestamp ? (
28
- <Chip
29
- avatar={<RefreshIcon />}
30
- clickable
31
- onClick={refreshHuri}
32
- label={`${timestampLabel} ${new Date(payload.timestamp).toLocaleString()}`}
33
- />
34
- ) : null}
35
- {hideEmbedMenu ? null : <EmbedMenu />}
36
- </FlexRow>
37
- }
38
- title={activePlugin?.name}
39
- />
16
+ {hideElementsConfig?.hideCardHeader ? null : <EmbedCardHeader />}
40
17
  <FlexGrowRow columnGap={2} rowGap={2} flexWrap="wrap" justifyContent="center" pb={1}>
41
18
  {plugins && plugins.length > 1 ? <EmbedRenderSelect /> : null}
42
- {(activePlugin?.components?.box?.listModes?.length ?? 0) > 1 ? <ListModeSelectFormControl /> : null}
19
+ {(ActivePlugin?.components?.box?.listModes?.length ?? 0) > 1 ? <ListModeSelectFormControl /> : null}
43
20
  </FlexGrowRow>
44
- <CardContent>
45
- <RenderComponent payload={payload} ActivePlugin={activePlugin} />
46
- </CardContent>
21
+ <CardContent>{ActivePlugin ? <ActivePlugin.components.box.details payload={payload} listMode={listMode} /> : null}</CardContent>
47
22
  </Card>
48
23
  )
49
24
  }
@@ -1,10 +1,11 @@
1
1
  import { Alert, AlertTitle } from '@mui/material'
2
2
  import { WithChildren } from '@xylabs/react-shared'
3
3
 
4
- import { useXyoEmbedPluginState } from '../../contexts'
4
+ import { useResolvePayload, useXyoEmbedPluginState } from '../../contexts'
5
5
 
6
6
  export const ValidatePlugins: React.FC<WithChildren> = ({ children }) => {
7
- const { payload, plugins } = useXyoEmbedPluginState()
7
+ const { payload } = useResolvePayload()
8
+ const { plugins } = useXyoEmbedPluginState()
8
9
 
9
10
  if (payload && plugins?.length === 0) {
10
11
  return (
@@ -1,10 +1,10 @@
1
1
  import OpenInNewIcon from '@mui/icons-material/OpenInNew'
2
2
  import { ListItemIcon, ListItemText, MenuItem, MenuItemProps } from '@mui/material'
3
3
 
4
- import { useXyoEmbedPluginState } from '../../../contexts'
4
+ import { useResolvePayload } from '../../../contexts'
5
5
 
6
6
  export const JsonMenuItem: React.FC<MenuItemProps> = (props) => {
7
- const { huri } = useXyoEmbedPluginState()
7
+ const { huri } = useResolvePayload()
8
8
 
9
9
  return (
10
10
  <>
@@ -0,0 +1,21 @@
1
+ export const payloadData = {
2
+ assets: {
3
+ ada: { value: { btc: '0.00002192', eth: '0.00031141', eur: '0.491867', usd: '0.502045' } },
4
+ btc: { value: { btc: '1', eth: '14.213346', eur: '22450', usd: '22914' } },
5
+ busd: { value: { btc: '0.00004369', eth: '0.00062074', eur: '0.980451', usd: '1.001' } },
6
+ dai: { value: { usdc: '1.00004', xyo: '114.394' } },
7
+ doge: { value: { btc: '0.00000293', eth: '0.00004157', eur: '0.065655', usd: '0.067013' } },
8
+ dot: { value: { btc: '0.00035508', eth: '0.00504454', eur: '7.97', usd: '8.13' } },
9
+ eth: { value: { btc: '0.0703878', eth: '1', eur: '1579.47', usd: '1612.16' } },
10
+ frax: { value: { usdc: '0.999738' } },
11
+ link: { value: { xyo: '837.731' } },
12
+ sol: { value: { btc: '0.00169369', eth: '0.02406215', eur: '38.01', usd: '38.79' } },
13
+ usdc: { value: { btc: '0.0000436965', dai: '0.999963', eth: '0.0006204464999999999', eur: '0.979419', frax: '1.00026', usd: '0.999732' } },
14
+ usdt: { value: { btc: '0.00004367', eth: '0.0006204', eur: '0.979881', usd: '1.001', usdc: '1.00022', xyo: '113.28' } },
15
+ wbtc: { value: { btc: '0.99903669', eth: '14.2015745', eur: '22418', usd: '22882', usdc: '22860.8', xyo: '2617950' } },
16
+ weth: { value: { btc: '0.0703735', usdc: '1610.82', xyo: '186652' } },
17
+ xyo: { value: { btc: '3.79226e-7', dai: '0.00874169', eth: '0.000005353785', eur: '0.00844792', link: '0.0011937', usd: '0.00872519' } },
18
+ },
19
+ schema: 'network.xyo.crypto.asset',
20
+ timestamp: 1659625815232,
21
+ }
@@ -0,0 +1,5 @@
1
+ import { createContextEx } from '@xyo-network/react-shared'
2
+
3
+ import { ResolvePayloadState } from './State'
4
+
5
+ export const ResolvePayloadContext = createContextEx<ResolvePayloadState>()
@@ -0,0 +1,71 @@
1
+ import { FlexBoxProps, FlexCol } from '@xylabs/react-flexbox'
2
+ import { useAsyncEffect, WithChildren } from '@xylabs/react-shared'
3
+ import { delay } from '@xylabs/sdk-js'
4
+ import { XyoApiError } from '@xyo-network/api'
5
+ import { Huri, XyoPayload } from '@xyo-network/payload'
6
+ import { XyoApiErrorRender } from '@xyo-network/react-auth-service'
7
+ import { ResultLoader } from '@xyo-network/react-webapp'
8
+ import { useEffect, useState } from 'react'
9
+
10
+ import { ResolvePayloadContext } from './Context'
11
+ import { ResolvePayloadState } from './State'
12
+
13
+ export type ResolvePayloadProviderProps = Omit<ResolvePayloadState, 'provided' & FlexBoxProps>
14
+
15
+ export const ResolvePayloadProvider: React.FC<WithChildren<ResolvePayloadProviderProps>> = ({ children, huriPayload, ...props }) => {
16
+ const [payload, setPayload] = useState<XyoPayload>()
17
+ const [huri, setHuri] = useState<string>()
18
+
19
+ useEffect(() => {
20
+ typeof huriPayload === 'string' ? setHuri(huriPayload) : undefined
21
+ if (typeof huriPayload === 'object') {
22
+ setPayload(huriPayload)
23
+ setRefreshPayload(1)
24
+ }
25
+ }, [huriPayload])
26
+
27
+ const [notFound, setNotFound] = useState<boolean>()
28
+ const [huriApiError, setHuriApiError] = useState<XyoApiError>()
29
+ const [refreshPayload, setRefreshPayload] = useState(0)
30
+
31
+ useAsyncEffect(
32
+ // eslint-disable-next-line react-hooks/exhaustive-deps
33
+ async (mounted) => {
34
+ if (huri && !refreshPayload) {
35
+ try {
36
+ const huriInstance = new Huri(huri)
37
+ const result = await huriInstance.fetch()
38
+ // ensure the busy state can stay for a moment to avoid flashing too quickly
39
+ await delay(500)
40
+
41
+ if (mounted()) {
42
+ setNotFound(result === null)
43
+ setPayload(result)
44
+ setRefreshPayload(1)
45
+ }
46
+ } catch (e) {
47
+ setHuriApiError(e as XyoApiError)
48
+ }
49
+ }
50
+ },
51
+ [huri, payload, refreshPayload],
52
+ )
53
+
54
+ const refreshHuri = () => {
55
+ if (huri) {
56
+ setRefreshPayload(0)
57
+ }
58
+ }
59
+
60
+ return (
61
+ <ResolvePayloadContext.Provider value={{ huri, huriApiError, notFound, payload, provided: true, refreshHuri, refreshPayload, setPayload }}>
62
+ <ResultLoader searchResult={payload} notFound={!!notFound} apiError={huriApiError}>
63
+ <XyoApiErrorRender apiError={huriApiError}>
64
+ <FlexCol busy={Boolean(!refreshPayload && payload)} {...props}>
65
+ {children}
66
+ </FlexCol>
67
+ </XyoApiErrorRender>
68
+ </ResultLoader>
69
+ </ResolvePayloadContext.Provider>
70
+ )
71
+ }
@@ -0,0 +1,15 @@
1
+ import { XyoApiError } from '@xyo-network/api'
2
+ import { XyoPayload } from '@xyo-network/payload'
3
+ import { ContextExState } from '@xyo-network/react-shared'
4
+ import { Dispatch, SetStateAction } from 'react'
5
+
6
+ export interface ResolvePayloadState extends ContextExState {
7
+ huri?: string
8
+ huriApiError?: XyoApiError
9
+ huriPayload?: string | XyoPayload
10
+ notFound?: boolean
11
+ payload?: XyoPayload
12
+ refreshHuri?: () => void
13
+ refreshPayload?: number
14
+ setPayload?: Dispatch<SetStateAction<XyoPayload | undefined>>
15
+ }
@@ -0,0 +1,3 @@
1
+ export * from './Provider'
2
+ export * from './State'
3
+ export * from './use'
@@ -0,0 +1,5 @@
1
+ import { useContextEx } from '@xyo-network/react-shared'
2
+
3
+ import { ResolvePayloadContext } from './Context'
4
+
5
+ export const useResolvePayload = () => useContextEx(ResolvePayloadContext, 'ResolvePayload', true)
@@ -1,6 +1,7 @@
1
1
  import { Typography } from '@mui/material'
2
2
  import { ComponentStory, DecoratorFn, Meta } from '@storybook/react'
3
3
 
4
+ import { ResolvePayloadProvider, ResolvePayloadState } from '../ResolvePayloadContext'
4
5
  import { XyoEmbedPluginContext, XyoEmbedPluginState } from '../XyoEmbedPluginContext'
5
6
  import { ValidatePayloadProvider, ValidatePayloadProviderProps } from './Provider'
6
7
  import { useValidatePayload } from './use'
@@ -8,9 +9,11 @@ import { useValidatePayload } from './use'
8
9
  const EmbedDecorator: DecoratorFn = (Story, { args }) => {
9
10
  const { xyoEmbedPluginContext, ...props } = args
10
11
  return (
11
- <XyoEmbedPluginContext.Provider value={xyoEmbedPluginContext}>
12
- <Story {...props} />
13
- </XyoEmbedPluginContext.Provider>
12
+ <ResolvePayloadProvider>
13
+ <XyoEmbedPluginContext.Provider value={xyoEmbedPluginContext}>
14
+ <Story {...props} />
15
+ </XyoEmbedPluginContext.Provider>
16
+ </ResolvePayloadProvider>
14
17
  )
15
18
  }
16
19
 
@@ -27,6 +30,7 @@ const ValidatePayloadState = () => {
27
30
 
28
31
  interface ValidatePayloadProviderPropsEx extends ValidatePayloadProviderProps {
29
32
  xyoEmbedPluginContext: XyoEmbedPluginState
33
+ resolvePayloadContext: ResolvePayloadState
30
34
  }
31
35
 
32
36
  const Template: ComponentStory<React.FC<ValidatePayloadProviderPropsEx>> = (props) => {
@@ -41,16 +45,24 @@ const Template: ComponentStory<React.FC<ValidatePayloadProviderPropsEx>> = (prop
41
45
 
42
46
  const InvalidPayload = { schema: 'network.xyo.schema' }
43
47
  const ValidPayload = { definition: { $id: 'test.schema' }, schema: 'network.xyo.schema' }
44
- const XyoEmbedPluginProviderDefaultValue = { provided: true }
48
+ const stubProviderDefaultValue = { provided: true }
45
49
 
46
50
  const Default = Template.bind({})
47
- Default.args = { xyoEmbedPluginContext: XyoEmbedPluginProviderDefaultValue }
51
+ Default.args = { xyoEmbedPluginContext: stubProviderDefaultValue }
48
52
 
49
53
  const ValidationSucceeded = Template.bind({})
50
- ValidationSucceeded.args = { enabled: true, xyoEmbedPluginContext: { payload: ValidPayload, ...XyoEmbedPluginProviderDefaultValue } }
54
+ ValidationSucceeded.args = {
55
+ enabled: true,
56
+ resolvePayloadContext: { payload: ValidPayload, ...stubProviderDefaultValue },
57
+ xyoEmbedPluginContext: stubProviderDefaultValue,
58
+ }
51
59
 
52
60
  const ValidationFailed = Template.bind({})
53
- ValidationFailed.args = { enabled: true, xyoEmbedPluginContext: { payload: InvalidPayload, ...XyoEmbedPluginProviderDefaultValue } }
61
+ ValidationFailed.args = {
62
+ enabled: true,
63
+ resolvePayloadContext: { payload: InvalidPayload, ...stubProviderDefaultValue },
64
+ xyoEmbedPluginContext: stubProviderDefaultValue,
65
+ }
54
66
 
55
67
  export { Default, ValidationFailed, ValidationSucceeded }
56
68
 
@@ -3,7 +3,7 @@ import { useAsyncEffect, WithChildren } from '@xylabs/react-shared'
3
3
  import { XyoSchemaCache, XyoSchemaNameToValidatorMap } from '@xyo-network/utils'
4
4
  import { useState } from 'react'
5
5
 
6
- import { useXyoEmbedPluginState } from '../XyoEmbedPluginContext'
6
+ import { useResolvePayload } from '../ResolvePayloadContext'
7
7
  import { ValidatePayloadContext } from './Context'
8
8
 
9
9
  export interface ValidatePayloadProviderProps {
@@ -12,7 +12,7 @@ export interface ValidatePayloadProviderProps {
12
12
  }
13
13
 
14
14
  export const ValidatePayloadProvider: React.FC<WithChildren<ValidatePayloadProviderProps>> = ({ children, enabled = false }) => {
15
- const { payload } = useXyoEmbedPluginState()
15
+ const { payload } = useResolvePayload()
16
16
  const [initialized, setInitialized] = useState(false)
17
17
  const [valid, setValid] = useState<boolean>()
18
18