@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.
- package/dist/cjs/hooks/ResolvePayloadArgs.d.ts +5 -0
- package/dist/cjs/hooks/ResolvePayloadArgs.d.ts.map +1 -0
- package/dist/cjs/hooks/ResolvePayloadArgs.js +3 -0
- package/dist/cjs/hooks/ResolvePayloadArgs.js.map +1 -0
- package/dist/cjs/hooks/index.d.ts +6 -0
- package/dist/cjs/hooks/index.d.ts.map +1 -0
- package/dist/cjs/hooks/index.js +9 -0
- package/dist/cjs/hooks/index.js.map +1 -0
- package/dist/cjs/hooks/lib/FetchHuriHashOptions.d.ts +4 -0
- package/dist/cjs/hooks/lib/FetchHuriHashOptions.d.ts.map +1 -0
- package/dist/cjs/hooks/lib/FetchHuriHashOptions.js +3 -0
- package/dist/cjs/hooks/lib/FetchHuriHashOptions.js.map +1 -0
- package/dist/cjs/hooks/lib/findHuriNetwork.d.ts +4 -0
- package/dist/cjs/hooks/lib/findHuriNetwork.d.ts.map +1 -0
- package/dist/cjs/hooks/lib/findHuriNetwork.js +14 -0
- package/dist/cjs/hooks/lib/findHuriNetwork.js.map +1 -0
- package/dist/cjs/hooks/lib/index.d.ts +3 -0
- package/dist/cjs/hooks/lib/index.d.ts.map +1 -0
- package/dist/cjs/hooks/lib/index.js +6 -0
- package/dist/cjs/hooks/lib/index.js.map +1 -0
- package/dist/cjs/hooks/useHuriHash.d.ts +13 -0
- package/dist/cjs/hooks/useHuriHash.d.ts.map +1 -0
- package/dist/cjs/hooks/useHuriHash.js +33 -0
- package/dist/cjs/hooks/useHuriHash.js.map +1 -0
- package/dist/cjs/hooks/useLoadPayload.d.ts +3 -0
- package/dist/cjs/hooks/useLoadPayload.d.ts.map +1 -0
- package/dist/cjs/hooks/useLoadPayload.js +57 -0
- package/dist/cjs/hooks/useLoadPayload.js.map +1 -0
- package/dist/cjs/hooks/useResolveHuri.d.ts +10 -0
- package/dist/cjs/hooks/useResolveHuri.d.ts.map +1 -0
- package/dist/cjs/hooks/useResolveHuri.js +68 -0
- package/dist/cjs/hooks/useResolveHuri.js.map +1 -0
- package/dist/cjs/index.d.ts +1 -0
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +1 -0
- package/dist/cjs/index.js.map +1 -1
- package/dist/docs.json +577 -18
- package/dist/esm/hooks/ResolvePayloadArgs.d.ts +5 -0
- package/dist/esm/hooks/ResolvePayloadArgs.d.ts.map +1 -0
- package/dist/esm/hooks/ResolvePayloadArgs.js +2 -0
- package/dist/esm/hooks/ResolvePayloadArgs.js.map +1 -0
- package/dist/esm/hooks/index.d.ts +6 -0
- package/dist/esm/hooks/index.d.ts.map +1 -0
- package/dist/esm/hooks/index.js +6 -0
- package/dist/esm/hooks/index.js.map +1 -0
- package/dist/esm/hooks/lib/FetchHuriHashOptions.d.ts +4 -0
- package/dist/esm/hooks/lib/FetchHuriHashOptions.d.ts.map +1 -0
- package/dist/esm/hooks/lib/FetchHuriHashOptions.js +2 -0
- package/dist/esm/hooks/lib/FetchHuriHashOptions.js.map +1 -0
- package/dist/esm/hooks/lib/findHuriNetwork.d.ts +4 -0
- package/dist/esm/hooks/lib/findHuriNetwork.d.ts.map +1 -0
- package/dist/esm/hooks/lib/findHuriNetwork.js +9 -0
- package/dist/esm/hooks/lib/findHuriNetwork.js.map +1 -0
- package/dist/esm/hooks/lib/index.d.ts +3 -0
- package/dist/esm/hooks/lib/index.d.ts.map +1 -0
- package/dist/esm/hooks/lib/index.js +3 -0
- package/dist/esm/hooks/lib/index.js.map +1 -0
- package/dist/esm/hooks/useHuriHash.d.ts +13 -0
- package/dist/esm/hooks/useHuriHash.d.ts.map +1 -0
- package/dist/esm/hooks/useHuriHash.js +30 -0
- package/dist/esm/hooks/useHuriHash.js.map +1 -0
- package/dist/esm/hooks/useLoadPayload.d.ts +3 -0
- package/dist/esm/hooks/useLoadPayload.d.ts.map +1 -0
- package/dist/esm/hooks/useLoadPayload.js +52 -0
- package/dist/esm/hooks/useLoadPayload.js.map +1 -0
- package/dist/esm/hooks/useResolveHuri.d.ts +10 -0
- package/dist/esm/hooks/useResolveHuri.d.ts.map +1 -0
- package/dist/esm/hooks/useResolveHuri.js +64 -0
- package/dist/esm/hooks/useResolveHuri.js.map +1 -0
- package/dist/esm/index.d.ts +1 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +1 -0
- package/dist/esm/index.js.map +1 -1
- package/package.json +19 -15
- package/src/hooks/ResolvePayloadArgs.ts +6 -0
- package/src/hooks/index.ts +5 -0
- package/src/hooks/lib/FetchHuriHashOptions.ts +3 -0
- package/src/hooks/lib/findHuriNetwork.ts +13 -0
- package/src/hooks/lib/index.ts +2 -0
- package/src/hooks/useHuriHash.stories.tsx +108 -0
- package/src/hooks/useHuriHash.tsx +40 -0
- package/src/hooks/useLoadPayload.stories.tsx +69 -0
- package/src/hooks/useLoadPayload.tsx +59 -0
- package/src/hooks/useResolveHuri.tsx +75 -0
- 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