@xyo-network/react-payload 2.26.12 → 2.26.15
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/esm/hooks/ResolvePayloadArgs.d.ts +2 -2
- package/dist/esm/hooks/useHuriHash.js +5 -3
- package/dist/esm/hooks/useHuriHash.js.map +1 -1
- package/dist/esm/hooks/usePayload.d.ts +2 -2
- package/dist/esm/hooks/usePayload.js +16 -6
- package/dist/esm/hooks/usePayload.js.map +1 -1
- package/dist/esm/hooks/useResolveHuri.js +9 -1
- package/dist/esm/hooks/useResolveHuri.js.map +1 -1
- package/package.json +18 -18
- package/src/hooks/ResolvePayloadArgs.ts +2 -2
- package/src/hooks/useHuriHash.stories.tsx +1 -0
- package/src/hooks/useHuriHash.tsx +9 -6
- package/src/hooks/usePayload.tsx +19 -8
- package/src/hooks/useResolveHuri.tsx +12 -3
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { XyoApiError } from '@xyo-network/api';
|
|
2
2
|
import { XyoPayload } from '@xyo-network/payload';
|
|
3
|
-
export declare type
|
|
4
|
-
export declare type
|
|
3
|
+
export declare type UsePayload = [XyoPayload?, boolean?, XyoApiError?];
|
|
4
|
+
export declare type UseHuriOrHash = [...UsePayload, boolean?];
|
|
@@ -16,11 +16,13 @@ const useHuriHash = (huriOrHash, huriUri, options) => {
|
|
|
16
16
|
}
|
|
17
17
|
}
|
|
18
18
|
}, []);
|
|
19
|
-
const
|
|
19
|
+
const providedHash = hash(huriOrHash);
|
|
20
20
|
// Optimistically try to grab the has from the current network and archive
|
|
21
|
-
const [payload, notFound, apiError] = usePayload(
|
|
21
|
+
const [payload, notFound, apiError] = usePayload(providedHash);
|
|
22
|
+
// if a huriUri was passed, we can safely override the notFound from the hash only query
|
|
23
|
+
const notFoundOverride = huriUri ? true : notFound;
|
|
22
24
|
// If payload isn't found, fallback to the huriUri
|
|
23
|
-
const [huriPayload, huriPayloadNotFound, huriApiError, networkNotFound] = useResolveHuri(huriUri,
|
|
25
|
+
const [huriPayload, huriPayloadNotFound, huriApiError, networkNotFound] = useResolveHuri(huriUri, notFoundOverride, options);
|
|
24
26
|
return [payload ?? huriPayload, huriPayloadNotFound, apiError ?? huriApiError, networkNotFound];
|
|
25
27
|
};
|
|
26
28
|
export { useHuriHash };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useHuriHash.js","sourceRoot":"","sources":["../../../src/hooks/useHuriHash.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAA;AAC3C,OAAO,EAAE,WAAW,
|
|
1
|
+
{"version":3,"file":"useHuriHash.js","sourceRoot":"","sources":["../../../src/hooks/useHuriHash.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAA;AAC3C,OAAO,EAAE,WAAW,EAAa,MAAM,OAAO,CAAA;AAI9C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAEjD;;GAEG;AACH,MAAM,WAAW,GAAG,CAAC,UAA0B,EAAE,OAAgB,EAAE,OAA8B,EAAiB,EAAE;IAClH,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,UAA0B,EAAE,EAAE;QACtD,IAAI,UAAU,EAAE;YACd,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE;gBAClC,OAAO,UAAU,CAAA;aAClB;YACD,IAAI,UAAU,YAAY,IAAI,EAAE;gBAC9B,OAAO,UAAU,CAAC,IAAI,CAAA;aACvB;SACF;IACH,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,CAAA;IAErC,0EAA0E;IAC1E,MAAM,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,GAAG,UAAU,CAAC,YAAY,CAAC,CAAA;IAE9D,wFAAwF;IACxF,MAAM,gBAAgB,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAA;IAElD,kDAAkD;IAClD,MAAM,CAAC,WAAW,EAAE,mBAAmB,EAAE,YAAY,EAAE,eAAe,CAAC,GAAG,cAAc,CAAC,OAAO,EAAE,gBAAgB,EAAE,OAAO,CAAC,CAAA;IAE5H,OAAO,CAAC,OAAO,IAAI,WAAW,EAAE,mBAAmB,EAAE,QAAQ,IAAI,YAAY,EAAE,eAAe,CAAC,CAAA;AACjG,CAAC,CAAA;AAED,OAAO,EAAE,WAAW,EAAE,CAAA"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export declare const usePayload: (hash?: string) =>
|
|
1
|
+
import { UsePayload } from './ResolvePayloadArgs';
|
|
2
|
+
export declare const usePayload: (hash?: string) => UsePayload;
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { useAsyncEffect } from '@xylabs/react-shared';
|
|
2
2
|
import { useArchive } from '@xyo-network/react-archive';
|
|
3
3
|
import { useArchivistApi } from '@xyo-network/react-archivist-api';
|
|
4
|
-
import { useState } from 'react';
|
|
4
|
+
import { useEffect, useState } from 'react';
|
|
5
5
|
export const usePayload = (hash) => {
|
|
6
6
|
const { api } = useArchivistApi();
|
|
7
7
|
const { archive } = useArchive();
|
|
8
|
+
const [localHash, setLocalHash] = useState();
|
|
8
9
|
const [notFound, setNotFound] = useState();
|
|
9
10
|
const [apiError, setApiError] = useState();
|
|
10
11
|
const [payload, setPayload] = useState();
|
|
@@ -13,18 +14,26 @@ export const usePayload = (hash) => {
|
|
|
13
14
|
setApiError(undefined);
|
|
14
15
|
setNotFound(undefined);
|
|
15
16
|
};
|
|
17
|
+
// allow for hash changes to retrigger the api call
|
|
18
|
+
useEffect(() => {
|
|
19
|
+
if (hash !== localHash) {
|
|
20
|
+
setLocalHash(hash);
|
|
21
|
+
reset();
|
|
22
|
+
}
|
|
23
|
+
}, [hash, localHash]);
|
|
16
24
|
useAsyncEffect(
|
|
17
25
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
18
26
|
async (mounted) => {
|
|
19
|
-
if (api &&
|
|
27
|
+
if (api && localHash && localHash.length > 0 && notFound === undefined) {
|
|
28
|
+
reset();
|
|
20
29
|
try {
|
|
21
|
-
|
|
22
|
-
const result = await api?.archive(archive).payload.hash(hash).get();
|
|
30
|
+
const result = await api?.archive(archive).payload.hash(localHash).get();
|
|
23
31
|
if (mounted()) {
|
|
24
32
|
if (result?.length) {
|
|
25
33
|
setPayload(result[0]);
|
|
34
|
+
setNotFound(false);
|
|
26
35
|
}
|
|
27
|
-
else if (result) {
|
|
36
|
+
else if (result?.length === 0) {
|
|
28
37
|
setNotFound(true);
|
|
29
38
|
setPayload(undefined);
|
|
30
39
|
}
|
|
@@ -32,11 +41,12 @@ export const usePayload = (hash) => {
|
|
|
32
41
|
}
|
|
33
42
|
catch (e) {
|
|
34
43
|
reset();
|
|
44
|
+
setNotFound(false);
|
|
35
45
|
setApiError(e);
|
|
36
46
|
console.error(e);
|
|
37
47
|
}
|
|
38
48
|
}
|
|
39
|
-
}, [hash, api, archive]);
|
|
49
|
+
}, [hash, api, archive, payload, notFound, localHash]);
|
|
40
50
|
return [payload, notFound, apiError];
|
|
41
51
|
};
|
|
42
52
|
//# sourceMappingURL=usePayload.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usePayload.js","sourceRoot":"","sources":["../../../src/hooks/usePayload.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAGrD,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAA;AAClE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"usePayload.js","sourceRoot":"","sources":["../../../src/hooks/usePayload.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAGrD,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAA;AAClE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAI3C,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,IAAa,EAAc,EAAE;IACtD,MAAM,EAAE,GAAG,EAAE,GAAG,eAAe,EAAE,CAAA;IACjC,MAAM,EAAE,OAAO,EAAE,GAAG,UAAU,EAAE,CAAA;IAChC,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,EAAU,CAAA;IACpD,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,EAAW,CAAA;IACnD,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,EAAe,CAAA;IACvD,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,EAAc,CAAA;IAEpD,MAAM,KAAK,GAAG,GAAG,EAAE;QACjB,UAAU,CAAC,SAAS,CAAC,CAAA;QACrB,WAAW,CAAC,SAAS,CAAC,CAAA;QACtB,WAAW,CAAC,SAAS,CAAC,CAAA;IACxB,CAAC,CAAA;IAED,mDAAmD;IACnD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,IAAI,KAAK,SAAS,EAAE;YACtB,YAAY,CAAC,IAAI,CAAC,CAAA;YAClB,KAAK,EAAE,CAAA;SACR;IACH,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAA;IAErB,cAAc;IACZ,uDAAuD;IACvD,KAAK,EAAE,OAAO,EAAE,EAAE;QAChB,IAAI,GAAG,IAAI,SAAS,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,KAAK,SAAS,EAAE;YACtE,KAAK,EAAE,CAAA;YACP,IAAI;gBACF,MAAM,MAAM,GAAG,MAAM,GAAG,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,CAAA;gBACxE,IAAI,OAAO,EAAE,EAAE;oBACb,IAAI,MAAM,EAAE,MAAM,EAAE;wBAClB,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;wBACrB,WAAW,CAAC,KAAK,CAAC,CAAA;qBACnB;yBAAM,IAAI,MAAM,EAAE,MAAM,KAAK,CAAC,EAAE;wBAC/B,WAAW,CAAC,IAAI,CAAC,CAAA;wBACjB,UAAU,CAAC,SAAS,CAAC,CAAA;qBACtB;iBACF;aACF;YAAC,OAAO,CAAC,EAAE;gBACV,KAAK,EAAE,CAAA;gBACP,WAAW,CAAC,KAAK,CAAC,CAAA;gBAClB,WAAW,CAAC,CAAgB,CAAC,CAAA;gBAC7B,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;aACjB;SACF;IACH,CAAC,EACD,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,CACnD,CAAA;IACD,OAAO,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAA;AACtC,CAAC,CAAA"}
|
|
@@ -10,6 +10,11 @@ const useResolveHuri = (huriUri, dependentNotFound, options) => {
|
|
|
10
10
|
const [huriNetworkNotFound, setHuriNetworkNotFound] = useState();
|
|
11
11
|
const [huriApiError, setHuriApiError] = useState();
|
|
12
12
|
const { changeActiveNetwork } = options ?? {};
|
|
13
|
+
const reset = () => {
|
|
14
|
+
setHuriPayload(undefined);
|
|
15
|
+
setHuriPayloadNotFound(undefined);
|
|
16
|
+
setHuriApiError(undefined);
|
|
17
|
+
};
|
|
13
18
|
useEffect(() => {
|
|
14
19
|
// Initially, sync local not found with dependent's status
|
|
15
20
|
setHuriPayloadNotFound(dependentNotFound);
|
|
@@ -18,7 +23,8 @@ const useResolveHuri = (huriUri, dependentNotFound, options) => {
|
|
|
18
23
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
19
24
|
async (mounted) => {
|
|
20
25
|
// if dependent value is resolved, don't do anything, if not resolved, try to resolve huriUri
|
|
21
|
-
if (
|
|
26
|
+
if (dependentNotFound && huriUri) {
|
|
27
|
+
reset();
|
|
22
28
|
const huriInstance = new Huri(huriUri);
|
|
23
29
|
const foundHuriNetwork = findHuriNetwork(huriInstance, networks);
|
|
24
30
|
if (foundHuriNetwork && mounted()) {
|
|
@@ -40,6 +46,8 @@ const useResolveHuri = (huriUri, dependentNotFound, options) => {
|
|
|
40
46
|
}
|
|
41
47
|
catch (e) {
|
|
42
48
|
if (mounted()) {
|
|
49
|
+
setHuriPayloadNotFound(false);
|
|
50
|
+
setHuriPayload(undefined);
|
|
43
51
|
setHuriApiError(e);
|
|
44
52
|
}
|
|
45
53
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useResolveHuri.js","sourceRoot":"","sources":["../../../src/hooks/useResolveHuri.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAErD,OAAO,EAAE,IAAI,EAAc,MAAM,sBAAsB,CAAA;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AACvD,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAE3C,OAAO,EAAwB,eAAe,EAAE,MAAM,OAAO,CAAA;AAG7D,MAAM,cAAc,GAAG,CAAC,OAAgB,EAAE,iBAA2B,EAAE,OAA8B,
|
|
1
|
+
{"version":3,"file":"useResolveHuri.js","sourceRoot":"","sources":["../../../src/hooks/useResolveHuri.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAErD,OAAO,EAAE,IAAI,EAAc,MAAM,sBAAsB,CAAA;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AACvD,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAE3C,OAAO,EAAwB,eAAe,EAAE,MAAM,OAAO,CAAA;AAG7D,MAAM,cAAc,GAAG,CAAC,OAAgB,EAAE,iBAA2B,EAAE,OAA8B,EAAiB,EAAE;IACtH,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,UAAU,EAAE,CAAA;IACtD,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,EAAc,CAAA;IAC5D,MAAM,CAAC,mBAAmB,EAAE,sBAAsB,CAAC,GAAG,QAAQ,EAAW,CAAA;IACzE,MAAM,CAAC,mBAAmB,EAAE,sBAAsB,CAAC,GAAG,QAAQ,EAAW,CAAA;IACzE,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,EAAe,CAAA;IAE/D,MAAM,EAAE,mBAAmB,EAAE,GAAG,OAAO,IAAI,EAAE,CAAA;IAE7C,MAAM,KAAK,GAAG,GAAG,EAAE;QACjB,cAAc,CAAC,SAAS,CAAC,CAAA;QACzB,sBAAsB,CAAC,SAAS,CAAC,CAAA;QACjC,eAAe,CAAC,SAAS,CAAC,CAAA;IAC5B,CAAC,CAAA;IAED,SAAS,CAAC,GAAG,EAAE;QACb,0DAA0D;QAC1D,sBAAsB,CAAC,iBAAiB,CAAC,CAAA;IAC3C,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAA;IAEvB,cAAc;IACZ,uDAAuD;IACvD,KAAK,EAAE,OAAO,EAAE,EAAE;QAChB,6FAA6F;QAC7F,IAAI,iBAAiB,IAAI,OAAO,EAAE;YAChC,KAAK,EAAE,CAAA;YACP,MAAM,YAAY,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,CAAA;YAEtC,MAAM,gBAAgB,GAAG,eAAe,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAA;YAEhE,IAAI,gBAAgB,IAAI,OAAO,EAAE,EAAE;gBACjC,IAAI,OAAO,KAAK,gBAAgB,IAAI,mBAAmB,EAAE;oBACvD,UAAU,EAAE,CAAC,gBAAgB,CAAC,CAAA;oBAC9B,OAAM;iBACP;gBAED,IAAI;oBACF,MAAM,WAAW,GAAG,MAAM,YAAY,CAAC,KAAK,EAAE,CAAA;oBAC9C,IAAI,OAAO,EAAE,EAAE;wBACb,IAAI,WAAW,EAAE;4BACf,cAAc,CAAC,WAAW,CAAC,CAAA;4BAC3B,sBAAsB,CAAC,KAAK,CAAC,CAAA;yBAC9B;6BAAM;4BACL,sBAAsB,CAAC,IAAI,CAAC,CAAA;yBAC7B;qBACF;iBACF;gBAAC,OAAO,CAAC,EAAE;oBACV,IAAI,OAAO,EAAE,EAAE;wBACb,sBAAsB,CAAC,KAAK,CAAC,CAAA;wBAC7B,cAAc,CAAC,SAAS,CAAC,CAAA;wBACzB,eAAe,CAAC,CAAgB,CAAC,CAAA;qBAClC;iBACF;aACF;iBAAM;gBACL,sBAAsB,CAAC,IAAI,CAAC,CAAA;aAC7B;SACF;IACH,CAAC,EACD,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,UAAU,EAAE,mBAAmB,CAAC,CACjF,CAAA;IAED,OAAO,CAAC,WAAW,EAAE,mBAAmB,EAAE,YAAY,EAAE,mBAAmB,CAAC,CAAA;AAC9E,CAAC,CAAA;AAED,OAAO,EAAE,cAAc,EAAE,CAAA"}
|
package/package.json
CHANGED
|
@@ -13,23 +13,23 @@
|
|
|
13
13
|
"@emotion/react": "^11.9.3",
|
|
14
14
|
"@emotion/styled": "^11.9.3",
|
|
15
15
|
"@mui/icons-material": "^5.8.4",
|
|
16
|
-
"@mui/material": "^5.
|
|
17
|
-
"@xylabs/react-button": "^2.14.
|
|
18
|
-
"@xylabs/react-flexbox": "^2.14.
|
|
19
|
-
"@xylabs/react-quick-tip-button": "^2.14.
|
|
20
|
-
"@xylabs/react-shared": "^2.14.
|
|
21
|
-
"@xyo-network/api": "^2.21.
|
|
22
|
-
"@xyo-network/network": "^2.21.
|
|
23
|
-
"@xyo-network/payload": "^2.21.
|
|
24
|
-
"@xyo-network/react-archive": "^2.26.
|
|
25
|
-
"@xyo-network/react-archivist-api": "^2.26.
|
|
26
|
-
"@xyo-network/react-auth-service": "^2.26.
|
|
27
|
-
"@xyo-network/react-network": "^2.26.
|
|
28
|
-
"@xyo-network/react-property": "^2.26.
|
|
29
|
-
"@xyo-network/react-schema": "^2.26.
|
|
30
|
-
"@xyo-network/react-shared": "^2.26.
|
|
31
|
-
"@xyo-network/utils": "^2.21.
|
|
32
|
-
"luxon": "^
|
|
16
|
+
"@mui/material": "^5.9.0",
|
|
17
|
+
"@xylabs/react-button": "^2.14.6",
|
|
18
|
+
"@xylabs/react-flexbox": "^2.14.6",
|
|
19
|
+
"@xylabs/react-quick-tip-button": "^2.14.6",
|
|
20
|
+
"@xylabs/react-shared": "^2.14.6",
|
|
21
|
+
"@xyo-network/api": "^2.21.16",
|
|
22
|
+
"@xyo-network/network": "^2.21.16",
|
|
23
|
+
"@xyo-network/payload": "^2.21.16",
|
|
24
|
+
"@xyo-network/react-archive": "^2.26.15",
|
|
25
|
+
"@xyo-network/react-archivist-api": "^2.26.15",
|
|
26
|
+
"@xyo-network/react-auth-service": "^2.26.15",
|
|
27
|
+
"@xyo-network/react-network": "^2.26.15",
|
|
28
|
+
"@xyo-network/react-property": "^2.26.15",
|
|
29
|
+
"@xyo-network/react-schema": "^2.26.15",
|
|
30
|
+
"@xyo-network/react-shared": "^2.26.15",
|
|
31
|
+
"@xyo-network/utils": "^2.21.16",
|
|
32
|
+
"luxon": "^3.0.1",
|
|
33
33
|
"react": "^18.2.0",
|
|
34
34
|
"react-dom": "^18.2.0",
|
|
35
35
|
"react-icons": "^4.4.0",
|
|
@@ -94,6 +94,6 @@
|
|
|
94
94
|
},
|
|
95
95
|
"sideEffects": false,
|
|
96
96
|
"types": "dist/esm/index.d.ts",
|
|
97
|
-
"version": "2.26.
|
|
97
|
+
"version": "2.26.15",
|
|
98
98
|
"packageManager": "yarn@3.1.1"
|
|
99
99
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { XyoApiError } from '@xyo-network/api'
|
|
2
2
|
import { XyoPayload } from '@xyo-network/payload'
|
|
3
3
|
|
|
4
|
-
export type
|
|
4
|
+
export type UsePayload = [XyoPayload?, boolean?, XyoApiError?]
|
|
5
5
|
|
|
6
|
-
export type
|
|
6
|
+
export type UseHuriOrHash = [...UsePayload, boolean?]
|
|
@@ -56,6 +56,7 @@ const UseHuriHashComponent: React.FC<UseHuriHashComponentProps> = ({ huriOrHash,
|
|
|
56
56
|
</FlexRow>
|
|
57
57
|
) : null}
|
|
58
58
|
<FlexCol my={3}>
|
|
59
|
+
{notFound === undefined && networkNotFound === undefined ? 'Loading...' : null}
|
|
59
60
|
{notFound ? <Alert severity="warning">Not Found</Alert> : null}
|
|
60
61
|
{networkNotFound ? <Alert severity="warning">Network Not Found</Alert> : null}
|
|
61
62
|
<Suspense fallback={<FlexCol busy />}>
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import { Huri } from '@xyo-network/payload'
|
|
2
|
-
import { useCallback } from 'react'
|
|
2
|
+
import { useCallback, useEffect } from 'react'
|
|
3
3
|
|
|
4
4
|
import { FetchHuriHashOptions } from './lib'
|
|
5
|
-
import {
|
|
5
|
+
import { UseHuriOrHash } from './ResolvePayloadArgs'
|
|
6
6
|
import { usePayload } from './usePayload'
|
|
7
7
|
import { useResolveHuri } from './useResolveHuri'
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
10
|
* Resolve a hash or a huri regardless of network
|
|
11
11
|
*/
|
|
12
|
-
const useHuriHash = (huriOrHash?: string | Huri, huriUri?: string, options?: FetchHuriHashOptions):
|
|
12
|
+
const useHuriHash = (huriOrHash?: string | Huri, huriUri?: string, options?: FetchHuriHashOptions): UseHuriOrHash => {
|
|
13
13
|
const hash = useCallback((huriOrHash?: string | Huri) => {
|
|
14
14
|
if (huriOrHash) {
|
|
15
15
|
if (typeof huriOrHash === 'string') {
|
|
@@ -21,13 +21,16 @@ const useHuriHash = (huriOrHash?: string | Huri, huriUri?: string, options?: Fet
|
|
|
21
21
|
}
|
|
22
22
|
}, [])
|
|
23
23
|
|
|
24
|
-
const
|
|
24
|
+
const providedHash = hash(huriOrHash)
|
|
25
25
|
|
|
26
26
|
// Optimistically try to grab the has from the current network and archive
|
|
27
|
-
const [payload, notFound, apiError] = usePayload(
|
|
27
|
+
const [payload, notFound, apiError] = usePayload(providedHash)
|
|
28
|
+
|
|
29
|
+
// if a huriUri was passed, we can safely override the notFound from the hash only query
|
|
30
|
+
const notFoundOverride = huriUri ? true : notFound
|
|
28
31
|
|
|
29
32
|
// If payload isn't found, fallback to the huriUri
|
|
30
|
-
const [huriPayload, huriPayloadNotFound, huriApiError, networkNotFound] = useResolveHuri(huriUri,
|
|
33
|
+
const [huriPayload, huriPayloadNotFound, huriApiError, networkNotFound] = useResolveHuri(huriUri, notFoundOverride, options)
|
|
31
34
|
|
|
32
35
|
return [payload ?? huriPayload, huriPayloadNotFound, apiError ?? huriApiError, networkNotFound]
|
|
33
36
|
}
|
package/src/hooks/usePayload.tsx
CHANGED
|
@@ -3,13 +3,14 @@ import { XyoApiError } from '@xyo-network/api'
|
|
|
3
3
|
import { XyoPayload } from '@xyo-network/payload'
|
|
4
4
|
import { useArchive } from '@xyo-network/react-archive'
|
|
5
5
|
import { useArchivistApi } from '@xyo-network/react-archivist-api'
|
|
6
|
-
import { useState } from 'react'
|
|
6
|
+
import { useEffect, useState } from 'react'
|
|
7
7
|
|
|
8
|
-
import {
|
|
8
|
+
import { UsePayload } from './ResolvePayloadArgs'
|
|
9
9
|
|
|
10
|
-
export const usePayload = (hash?: string):
|
|
10
|
+
export const usePayload = (hash?: string): UsePayload => {
|
|
11
11
|
const { api } = useArchivistApi()
|
|
12
12
|
const { archive } = useArchive()
|
|
13
|
+
const [localHash, setLocalHash] = useState<string>()
|
|
13
14
|
const [notFound, setNotFound] = useState<boolean>()
|
|
14
15
|
const [apiError, setApiError] = useState<XyoApiError>()
|
|
15
16
|
const [payload, setPayload] = useState<XyoPayload>()
|
|
@@ -20,29 +21,39 @@ export const usePayload = (hash?: string): UsePayloadArgs => {
|
|
|
20
21
|
setNotFound(undefined)
|
|
21
22
|
}
|
|
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
|
+
|
|
23
32
|
useAsyncEffect(
|
|
24
33
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
25
34
|
async (mounted) => {
|
|
26
|
-
if (api &&
|
|
35
|
+
if (api && localHash && localHash.length > 0 && notFound === undefined) {
|
|
36
|
+
reset()
|
|
27
37
|
try {
|
|
28
|
-
|
|
29
|
-
const result = await api?.archive(archive).payload.hash(hash).get()
|
|
38
|
+
const result = await api?.archive(archive).payload.hash(localHash).get()
|
|
30
39
|
if (mounted()) {
|
|
31
40
|
if (result?.length) {
|
|
32
41
|
setPayload(result[0])
|
|
33
|
-
|
|
42
|
+
setNotFound(false)
|
|
43
|
+
} else if (result?.length === 0) {
|
|
34
44
|
setNotFound(true)
|
|
35
45
|
setPayload(undefined)
|
|
36
46
|
}
|
|
37
47
|
}
|
|
38
48
|
} catch (e) {
|
|
39
49
|
reset()
|
|
50
|
+
setNotFound(false)
|
|
40
51
|
setApiError(e as XyoApiError)
|
|
41
52
|
console.error(e)
|
|
42
53
|
}
|
|
43
54
|
}
|
|
44
55
|
},
|
|
45
|
-
[hash, api, archive]
|
|
56
|
+
[hash, api, archive, payload, notFound, localHash]
|
|
46
57
|
)
|
|
47
58
|
return [payload, notFound, apiError]
|
|
48
59
|
}
|
|
@@ -5,9 +5,9 @@ import { useNetwork } from '@xyo-network/react-network'
|
|
|
5
5
|
import { useEffect, useState } from 'react'
|
|
6
6
|
|
|
7
7
|
import { FetchHuriHashOptions, findHuriNetwork } from './lib'
|
|
8
|
-
import {
|
|
8
|
+
import { UseHuriOrHash } from './ResolvePayloadArgs'
|
|
9
9
|
|
|
10
|
-
const useResolveHuri = (huriUri?: string, dependentNotFound?: boolean, options?: FetchHuriHashOptions):
|
|
10
|
+
const useResolveHuri = (huriUri?: string, dependentNotFound?: boolean, options?: FetchHuriHashOptions): UseHuriOrHash => {
|
|
11
11
|
const { network, networks, setNetwork } = useNetwork()
|
|
12
12
|
const [huriPayload, setHuriPayload] = useState<XyoPayload>()
|
|
13
13
|
const [huriPayloadNotFound, setHuriPayloadNotFound] = useState<boolean>()
|
|
@@ -16,6 +16,12 @@ const useResolveHuri = (huriUri?: string, dependentNotFound?: boolean, options?:
|
|
|
16
16
|
|
|
17
17
|
const { changeActiveNetwork } = options ?? {}
|
|
18
18
|
|
|
19
|
+
const reset = () => {
|
|
20
|
+
setHuriPayload(undefined)
|
|
21
|
+
setHuriPayloadNotFound(undefined)
|
|
22
|
+
setHuriApiError(undefined)
|
|
23
|
+
}
|
|
24
|
+
|
|
19
25
|
useEffect(() => {
|
|
20
26
|
// Initially, sync local not found with dependent's status
|
|
21
27
|
setHuriPayloadNotFound(dependentNotFound)
|
|
@@ -25,7 +31,8 @@ const useResolveHuri = (huriUri?: string, dependentNotFound?: boolean, options?:
|
|
|
25
31
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
26
32
|
async (mounted) => {
|
|
27
33
|
// if dependent value is resolved, don't do anything, if not resolved, try to resolve huriUri
|
|
28
|
-
if (
|
|
34
|
+
if (dependentNotFound && huriUri) {
|
|
35
|
+
reset()
|
|
29
36
|
const huriInstance = new Huri(huriUri)
|
|
30
37
|
|
|
31
38
|
const foundHuriNetwork = findHuriNetwork(huriInstance, networks)
|
|
@@ -48,6 +55,8 @@ const useResolveHuri = (huriUri?: string, dependentNotFound?: boolean, options?:
|
|
|
48
55
|
}
|
|
49
56
|
} catch (e) {
|
|
50
57
|
if (mounted()) {
|
|
58
|
+
setHuriPayloadNotFound(false)
|
|
59
|
+
setHuriPayload(undefined)
|
|
51
60
|
setHuriApiError(e as XyoApiError)
|
|
52
61
|
}
|
|
53
62
|
}
|