@xyo-network/react-api 2.32.0-rc.8 → 2.32.1

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 (85) hide show
  1. package/dist/cjs/hooks/ResolvePayloadArgs.d.ts +5 -0
  2. package/dist/cjs/hooks/ResolvePayloadArgs.d.ts.map +1 -0
  3. package/dist/cjs/hooks/ResolvePayloadArgs.js +3 -0
  4. package/dist/cjs/hooks/ResolvePayloadArgs.js.map +1 -0
  5. package/dist/cjs/hooks/index.d.ts +6 -0
  6. package/dist/cjs/hooks/index.d.ts.map +1 -0
  7. package/dist/cjs/hooks/index.js +9 -0
  8. package/dist/cjs/hooks/index.js.map +1 -0
  9. package/dist/cjs/hooks/lib/FetchHuriHashOptions.d.ts +4 -0
  10. package/dist/cjs/hooks/lib/FetchHuriHashOptions.d.ts.map +1 -0
  11. package/dist/cjs/hooks/lib/FetchHuriHashOptions.js +3 -0
  12. package/dist/cjs/hooks/lib/FetchHuriHashOptions.js.map +1 -0
  13. package/dist/cjs/hooks/lib/findHuriNetwork.d.ts +4 -0
  14. package/dist/cjs/hooks/lib/findHuriNetwork.d.ts.map +1 -0
  15. package/dist/cjs/hooks/lib/findHuriNetwork.js +14 -0
  16. package/dist/cjs/hooks/lib/findHuriNetwork.js.map +1 -0
  17. package/dist/cjs/hooks/lib/index.d.ts +3 -0
  18. package/dist/cjs/hooks/lib/index.d.ts.map +1 -0
  19. package/dist/cjs/hooks/lib/index.js +6 -0
  20. package/dist/cjs/hooks/lib/index.js.map +1 -0
  21. package/dist/cjs/hooks/useHuriHash.d.ts +13 -0
  22. package/dist/cjs/hooks/useHuriHash.d.ts.map +1 -0
  23. package/dist/cjs/hooks/useHuriHash.js +33 -0
  24. package/dist/cjs/hooks/useHuriHash.js.map +1 -0
  25. package/dist/cjs/hooks/useLoadPayload.d.ts +3 -0
  26. package/dist/cjs/hooks/useLoadPayload.d.ts.map +1 -0
  27. package/dist/cjs/hooks/useLoadPayload.js +57 -0
  28. package/dist/cjs/hooks/useLoadPayload.js.map +1 -0
  29. package/dist/cjs/hooks/useResolveHuri.d.ts +10 -0
  30. package/dist/cjs/hooks/useResolveHuri.d.ts.map +1 -0
  31. package/dist/cjs/hooks/useResolveHuri.js +68 -0
  32. package/dist/cjs/hooks/useResolveHuri.js.map +1 -0
  33. package/dist/cjs/index.d.ts +1 -0
  34. package/dist/cjs/index.d.ts.map +1 -1
  35. package/dist/cjs/index.js +1 -0
  36. package/dist/cjs/index.js.map +1 -1
  37. package/dist/docs.json +577 -18
  38. package/dist/esm/hooks/ResolvePayloadArgs.d.ts +5 -0
  39. package/dist/esm/hooks/ResolvePayloadArgs.d.ts.map +1 -0
  40. package/dist/esm/hooks/ResolvePayloadArgs.js +2 -0
  41. package/dist/esm/hooks/ResolvePayloadArgs.js.map +1 -0
  42. package/dist/esm/hooks/index.d.ts +6 -0
  43. package/dist/esm/hooks/index.d.ts.map +1 -0
  44. package/dist/esm/hooks/index.js +6 -0
  45. package/dist/esm/hooks/index.js.map +1 -0
  46. package/dist/esm/hooks/lib/FetchHuriHashOptions.d.ts +4 -0
  47. package/dist/esm/hooks/lib/FetchHuriHashOptions.d.ts.map +1 -0
  48. package/dist/esm/hooks/lib/FetchHuriHashOptions.js +2 -0
  49. package/dist/esm/hooks/lib/FetchHuriHashOptions.js.map +1 -0
  50. package/dist/esm/hooks/lib/findHuriNetwork.d.ts +4 -0
  51. package/dist/esm/hooks/lib/findHuriNetwork.d.ts.map +1 -0
  52. package/dist/esm/hooks/lib/findHuriNetwork.js +9 -0
  53. package/dist/esm/hooks/lib/findHuriNetwork.js.map +1 -0
  54. package/dist/esm/hooks/lib/index.d.ts +3 -0
  55. package/dist/esm/hooks/lib/index.d.ts.map +1 -0
  56. package/dist/esm/hooks/lib/index.js +3 -0
  57. package/dist/esm/hooks/lib/index.js.map +1 -0
  58. package/dist/esm/hooks/useHuriHash.d.ts +13 -0
  59. package/dist/esm/hooks/useHuriHash.d.ts.map +1 -0
  60. package/dist/esm/hooks/useHuriHash.js +30 -0
  61. package/dist/esm/hooks/useHuriHash.js.map +1 -0
  62. package/dist/esm/hooks/useLoadPayload.d.ts +3 -0
  63. package/dist/esm/hooks/useLoadPayload.d.ts.map +1 -0
  64. package/dist/esm/hooks/useLoadPayload.js +52 -0
  65. package/dist/esm/hooks/useLoadPayload.js.map +1 -0
  66. package/dist/esm/hooks/useResolveHuri.d.ts +10 -0
  67. package/dist/esm/hooks/useResolveHuri.d.ts.map +1 -0
  68. package/dist/esm/hooks/useResolveHuri.js +64 -0
  69. package/dist/esm/hooks/useResolveHuri.js.map +1 -0
  70. package/dist/esm/index.d.ts +1 -0
  71. package/dist/esm/index.d.ts.map +1 -1
  72. package/dist/esm/index.js +1 -0
  73. package/dist/esm/index.js.map +1 -1
  74. package/package.json +19 -15
  75. package/src/hooks/ResolvePayloadArgs.ts +6 -0
  76. package/src/hooks/index.ts +5 -0
  77. package/src/hooks/lib/FetchHuriHashOptions.ts +3 -0
  78. package/src/hooks/lib/findHuriNetwork.ts +13 -0
  79. package/src/hooks/lib/index.ts +2 -0
  80. package/src/hooks/useHuriHash.stories.tsx +108 -0
  81. package/src/hooks/useHuriHash.tsx +40 -0
  82. package/src/hooks/useLoadPayload.stories.tsx +69 -0
  83. package/src/hooks/useLoadPayload.tsx +59 -0
  84. package/src/hooks/useResolveHuri.tsx +75 -0
  85. package/src/index.ts +1 -0
@@ -0,0 +1,69 @@
1
+ /* eslint-disable import/no-internal-modules */
2
+ import { ComponentStory, Meta } from '@storybook/react'
3
+ import { ButtonEx } from '@xylabs/react-button'
4
+ import { FlexCol } from '@xylabs/react-flexbox'
5
+ import { ArchivistApiProvider, useArchivistApi } from '@xyo-network/react-archivist-api'
6
+ import { lazy, Suspense, useState } from 'react'
7
+
8
+ import { useLoadPayload } from './useLoadPayload'
9
+
10
+ const JsonView = lazy(() => import(/* webpackChunkName: "jsonView" */ 'react-json-view'))
11
+
12
+ const apiDomain = 'https://beta.api.archivist.xyo.network'
13
+ const hash = '5605fabad11b10bb5fb86b309ca0970894eda8f22362dda1a489817723bca992'
14
+
15
+ const Wrapper: React.FC<{ hash?: string }> = ({ hash }) => (
16
+ <ArchivistApiProvider apiDomain={apiDomain}>
17
+ <UsePayloadComponent hash={hash} />
18
+ </ArchivistApiProvider>
19
+ )
20
+
21
+ const UsePayloadComponent: React.FC<{ hash?: string }> = ({ hash }) => {
22
+ const { api } = useArchivistApi()
23
+ const [trigger, setTrigger] = useState<string>()
24
+ const [payload, notFound] = useLoadPayload(trigger)
25
+
26
+ return (
27
+ <>
28
+ {api ? (
29
+ <>
30
+ <ButtonEx variant="contained" marginBottom={2} onClick={() => setTrigger(hash)}>
31
+ Fetch Payload
32
+ </ButtonEx>
33
+ <ButtonEx variant="contained" onClick={() => setTrigger('foo')}>
34
+ Fetch Not Found
35
+ </ButtonEx>
36
+ </>
37
+ ) : null}
38
+ <FlexCol my={3}>
39
+ <Suspense fallback={<FlexCol busy />}>
40
+ {notFound ? 'Not Found' : null}
41
+ <JsonView src={payload || {}} />
42
+ </Suspense>
43
+ </FlexCol>
44
+ </>
45
+ )
46
+ }
47
+
48
+ const StorybookEntry: Meta = {
49
+ argTypes: {},
50
+ component: UsePayloadComponent,
51
+ parameters: {
52
+ docs: {
53
+ page: null,
54
+ },
55
+ },
56
+ title: 'payload/usePayload',
57
+ }
58
+
59
+ const Template: ComponentStory<typeof UsePayloadComponent> = (props) => {
60
+ return <Wrapper {...props} />
61
+ }
62
+
63
+ const Default = Template.bind({})
64
+ Default.args = { hash }
65
+
66
+ export { Default }
67
+
68
+ // eslint-disable-next-line import/no-default-export
69
+ export default StorybookEntry
@@ -0,0 +1,59 @@
1
+ import { useAsyncEffect } from '@xylabs/react-shared'
2
+ import { XyoApiError } from '@xyo-network/api'
3
+ import { XyoPayload } from '@xyo-network/payload'
4
+ import { useArchive } from '@xyo-network/react-archive'
5
+ import { useArchivistApi } from '@xyo-network/react-archivist-api'
6
+ import { useEffect, useState } from 'react'
7
+
8
+ import { UsePayload } from './ResolvePayloadArgs'
9
+
10
+ export const useLoadPayload = (hash?: string): UsePayload => {
11
+ const { api } = useArchivistApi()
12
+ const { archive } = useArchive()
13
+ const [localHash, setLocalHash] = useState<string>()
14
+ const [notFound, setNotFound] = useState<boolean>()
15
+ const [apiError, setApiError] = useState<XyoApiError>()
16
+ const [payload, setPayload] = useState<XyoPayload>()
17
+
18
+ const reset = () => {
19
+ setPayload(undefined)
20
+ setApiError(undefined)
21
+ setNotFound(undefined)
22
+ }
23
+
24
+ // allow for hash changes to retrigger the api call
25
+ useEffect(() => {
26
+ if (hash !== localHash) {
27
+ setLocalHash(hash)
28
+ reset()
29
+ }
30
+ }, [hash, localHash])
31
+
32
+ useAsyncEffect(
33
+ // eslint-disable-next-line react-hooks/exhaustive-deps
34
+ async (mounted) => {
35
+ if (api && localHash && localHash.length > 0 && notFound === undefined) {
36
+ reset()
37
+ try {
38
+ const result = await api?.archive(archive).payload.hash(localHash).get()
39
+ if (mounted()) {
40
+ if (result?.length) {
41
+ setPayload(result[0])
42
+ setNotFound(false)
43
+ } else if (result?.length === 0) {
44
+ setNotFound(true)
45
+ setPayload(undefined)
46
+ }
47
+ }
48
+ } catch (e) {
49
+ reset()
50
+ setNotFound(false)
51
+ setApiError(e as XyoApiError)
52
+ console.error(e)
53
+ }
54
+ }
55
+ },
56
+ [hash, api, archive, payload, notFound, localHash],
57
+ )
58
+ return [payload, notFound, apiError]
59
+ }
@@ -0,0 +1,75 @@
1
+ import { useAsyncEffect } from '@xylabs/react-shared'
2
+ import { XyoApiError } from '@xyo-network/api'
3
+ import { Huri, XyoPayload } from '@xyo-network/payload'
4
+ import { useNetwork } from '@xyo-network/react-network'
5
+ import { useEffect, useState } from 'react'
6
+
7
+ import { FetchHuriHashOptions, findHuriNetwork } from './lib'
8
+ import { UseHuriOrHash } from './ResolvePayloadArgs'
9
+
10
+ const useResolveHuri = (huriUri?: string, dependentNotFound?: boolean, options?: FetchHuriHashOptions): UseHuriOrHash => {
11
+ const { network, networks, setNetwork } = useNetwork()
12
+ const [huriPayload, setHuriPayload] = useState<XyoPayload>()
13
+ const [huriPayloadNotFound, setHuriPayloadNotFound] = useState<boolean>()
14
+ const [huriNetworkNotFound, setHuriNetworkNotFound] = useState<boolean>()
15
+ const [huriApiError, setHuriApiError] = useState<XyoApiError>()
16
+
17
+ const { changeActiveNetwork } = options ?? {}
18
+
19
+ //AT: TODO -> Talk about this pattern
20
+ const reset = () => {
21
+ setHuriPayload(undefined)
22
+ setHuriPayloadNotFound(undefined)
23
+ setHuriApiError(undefined)
24
+ }
25
+
26
+ useEffect(() => {
27
+ // Initially, sync local not found with dependent's status
28
+ setHuriPayloadNotFound(dependentNotFound)
29
+ }, [dependentNotFound])
30
+
31
+ useAsyncEffect(
32
+ // eslint-disable-next-line react-hooks/exhaustive-deps
33
+ async (mounted) => {
34
+ // if dependent value is resolved, don't do anything, if not resolved, try to resolve huriUri
35
+ if (dependentNotFound && huriUri) {
36
+ reset()
37
+ const huriInstance = new Huri(huriUri)
38
+
39
+ const foundHuriNetwork = findHuriNetwork(huriInstance, networks)
40
+
41
+ if (foundHuriNetwork && mounted()) {
42
+ if (network !== foundHuriNetwork && changeActiveNetwork) {
43
+ setNetwork?.(foundHuriNetwork)
44
+ return
45
+ }
46
+
47
+ try {
48
+ const huriPayload = await huriInstance.fetch()
49
+ if (mounted()) {
50
+ if (huriPayload) {
51
+ setHuriPayload(huriPayload)
52
+ setHuriPayloadNotFound(false)
53
+ } else {
54
+ setHuriPayloadNotFound(true)
55
+ }
56
+ }
57
+ } catch (e) {
58
+ if (mounted()) {
59
+ setHuriPayloadNotFound(false)
60
+ setHuriPayload(undefined)
61
+ setHuriApiError(e as XyoApiError)
62
+ }
63
+ }
64
+ } else {
65
+ setHuriNetworkNotFound(true)
66
+ }
67
+ }
68
+ },
69
+ [huriUri, network, networks, dependentNotFound, setNetwork, changeActiveNetwork],
70
+ )
71
+
72
+ return [huriPayload, huriPayloadNotFound, huriApiError, huriNetworkNotFound]
73
+ }
74
+
75
+ export { useResolveHuri }
package/src/index.ts CHANGED
@@ -1 +1,2 @@
1
1
  export * from './components'
2
+ export * from './hooks'