@xyo-network/react-payload 2.26.7 → 2.26.10
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/components/Details/HashSourceDetails.js +1 -1
- package/dist/esm/components/Details/HashSourceDetails.js.map +1 -1
- package/dist/esm/hooks/useHuriHash.d.ts +4 -1
- package/dist/esm/hooks/useHuriHash.js +9 -3
- package/dist/esm/hooks/useHuriHash.js.map +1 -1
- package/dist/esm/hooks/usePayload.d.ts +1 -1
- package/dist/esm/hooks/usePayload.js +9 -4
- package/dist/esm/hooks/usePayload.js.map +1 -1
- package/dist/esm/hooks/useResolveHuri.d.ts +1 -1
- package/dist/esm/hooks/useResolveHuri.js +14 -7
- package/dist/esm/hooks/useResolveHuri.js.map +1 -1
- package/package.json +19 -20
- package/src/components/Details/HashSourceDetails.tsx +1 -1
- package/src/hooks/useHuriHash.stories.tsx +36 -11
- package/src/hooks/useHuriHash.tsx +16 -4
- package/src/hooks/usePayload.stories.tsx +69 -0
- package/src/hooks/usePayload.tsx +12 -5
- package/src/hooks/useResolveHuri.tsx +17 -9
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import ContentCopyIcon from '@mui/icons-material/ContentCopy';
|
|
3
3
|
import { IconButton, Typography, useTheme } from '@mui/material';
|
|
4
|
-
import { QuickTipButton } from '@xylabs/react-common';
|
|
5
4
|
import { FlexCol, FlexGrowRow, FlexRow } from '@xylabs/react-flexbox';
|
|
5
|
+
import { QuickTipButton } from '@xylabs/react-quick-tip-button';
|
|
6
6
|
import { XyoPayloadWrapper } from '@xyo-network/payload';
|
|
7
7
|
export const PayloadHashSourceDetails = ({ noTitle = false, payload, ...props }) => {
|
|
8
8
|
const theme = useTheme();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HashSourceDetails.js","sourceRoot":"","sources":["../../../../src/components/Details/HashSourceDetails.tsx"],"names":[],"mappings":";AAAA,OAAO,eAAe,MAAM,iCAAiC,CAAA;AAC7D,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAChE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"HashSourceDetails.js","sourceRoot":"","sources":["../../../../src/components/Details/HashSourceDetails.tsx"],"names":[],"mappings":";AAAA,OAAO,eAAe,MAAM,iCAAiC,CAAA;AAC7D,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAChE,OAAO,EAAgB,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAA;AACnF,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAA;AAC/D,OAAO,EAAc,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAOpE,MAAM,CAAC,MAAM,wBAAwB,GAA4C,CAAC,EAAE,OAAO,GAAG,KAAK,EAAE,OAAO,EAAE,GAAG,KAAK,EAAE,EAAE,EAAE;IAC1H,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAA;IACxB,MAAM,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IAEtE,OAAO,CACL,MAAC,OAAO,IAAC,UAAU,EAAC,SAAS,KAAK,KAAK,aACpC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAChB,MAAC,OAAO,IAAC,MAAM,EAAE,CAAC,EAAE,cAAc,EAAC,YAAY,aAC7C,KAAC,UAAU,8BAAyB,EACpC,KAAC,cAAc,IAAC,KAAK,EAAC,aAAa,qEAAsE,IACjG,CACX,EACD,MAAC,OAAO,eACN,KAAC,WAAW,IAAC,UAAU,QAAC,MAAM,EAAE,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,cAAc,EAAC,OAAO,YAC3F,KAAC,UAAU,IAAC,OAAO,EAAE,CAAC,EAAE,UAAU,EAAC,WAAW,EAAC,OAAO,EAAC,OAAO,EAAC,EAAE,EAAE,EAAE,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,YACtH,cAAc,EAAE,WAAW,IAAI,EAAE,GACvB,GACD,EACd,KAAC,UAAU,cACT,KAAC,eAAe,KAAG,GACR,IACL,EACT,OAAO,CAAC,CAAC,CAAC,CACT,KAAC,OAAO,IAAC,MAAM,EAAE,CAAC,EAAE,cAAc,EAAC,YAAY,YAC7C,KAAC,UAAU,IAAC,OAAO,EAAC,OAAO,sHAAmH,GACtI,CACX,CAAC,CAAC,CAAC,IAAI,IACA,CACX,CAAA;AACH,CAAC,CAAA"}
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import { XyoApiError } from '@xyo-network/api';
|
|
2
2
|
import { Huri, XyoPayload } from '@xyo-network/payload';
|
|
3
3
|
import { FetchHuriHashOptions } from './lib';
|
|
4
|
-
|
|
4
|
+
/**
|
|
5
|
+
* Resolve a hash or a huri regardless of network
|
|
6
|
+
*/
|
|
7
|
+
declare const useHuriHash: (huriOrHash?: string | Huri, huriUri?: string, options?: FetchHuriHashOptions) => [XyoPayload | undefined, boolean, XyoApiError | undefined, boolean | undefined];
|
|
5
8
|
export { useHuriHash };
|
|
@@ -2,6 +2,9 @@ import { Huri } from '@xyo-network/payload';
|
|
|
2
2
|
import { useCallback } from 'react';
|
|
3
3
|
import { usePayload } from './usePayload';
|
|
4
4
|
import { useResolveHuri } from './useResolveHuri';
|
|
5
|
+
/**
|
|
6
|
+
* Resolve a hash or a huri regardless of network
|
|
7
|
+
*/
|
|
5
8
|
const useHuriHash = (huriOrHash, huriUri, options) => {
|
|
6
9
|
const hash = useCallback((huriOrHash) => {
|
|
7
10
|
if (huriOrHash) {
|
|
@@ -13,9 +16,12 @@ const useHuriHash = (huriOrHash, huriUri, options) => {
|
|
|
13
16
|
}
|
|
14
17
|
}
|
|
15
18
|
}, []);
|
|
16
|
-
const
|
|
17
|
-
|
|
18
|
-
|
|
19
|
+
const foundHash = hash(huriOrHash);
|
|
20
|
+
// Optimistically try to grab the has from the current network and archive
|
|
21
|
+
const [payload, notFound, apiError] = usePayload(foundHash);
|
|
22
|
+
// If payload isn't found, fallback to the huriUri
|
|
23
|
+
const [huriPayload, huriPayloadNotFound, huriApiError, networkNotFound] = useResolveHuri(huriUri, notFound, options);
|
|
24
|
+
return [payload ?? huriPayload, huriPayloadNotFound, apiError ?? huriApiError, networkNotFound];
|
|
19
25
|
};
|
|
20
26
|
export { useHuriHash };
|
|
21
27
|
//# sourceMappingURL=useHuriHash.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useHuriHash.js","sourceRoot":"","sources":["../../../src/hooks/useHuriHash.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAc,MAAM,sBAAsB,CAAA;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAA;AAGnC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAEjD,MAAM,WAAW,GAAG,
|
|
1
|
+
{"version":3,"file":"useHuriHash.js","sourceRoot":"","sources":["../../../src/hooks/useHuriHash.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAc,MAAM,sBAAsB,CAAA;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAA;AAGnC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAEjD;;GAEG;AACH,MAAM,WAAW,GAAG,CAClB,UAA0B,EAC1B,OAAgB,EAChB,OAA8B,EACmD,EAAE;IACnF,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,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,CAAA;IAElC,0EAA0E;IAC1E,MAAM,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,GAAG,UAAU,CAAC,SAAS,CAAC,CAAA;IAE3D,kDAAkD;IAClD,MAAM,CAAC,WAAW,EAAE,mBAAmB,EAAE,YAAY,EAAE,eAAe,CAAC,GAAG,cAAc,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAA;IAEpH,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,3 +1,3 @@
|
|
|
1
1
|
import { XyoApiError } from '@xyo-network/api';
|
|
2
2
|
import { XyoPayload } from '@xyo-network/payload';
|
|
3
|
-
export declare const usePayload: (hash?: string) => [XyoPayload | undefined, boolean, XyoApiError | undefined];
|
|
3
|
+
export declare const usePayload: (hash?: string) => [XyoPayload | undefined, boolean | undefined, XyoApiError | undefined];
|
|
@@ -5,17 +5,22 @@ import { useState } from 'react';
|
|
|
5
5
|
export const usePayload = (hash) => {
|
|
6
6
|
const { api } = useArchivistApi();
|
|
7
7
|
const { archive } = useArchive();
|
|
8
|
-
const [notFound, setNotFound] = useState(
|
|
8
|
+
const [notFound, setNotFound] = useState();
|
|
9
9
|
const [apiError, setApiError] = useState();
|
|
10
10
|
const [payload, setPayload] = useState();
|
|
11
|
+
const reset = () => {
|
|
12
|
+
setPayload(undefined);
|
|
13
|
+
setApiError(undefined);
|
|
14
|
+
setNotFound(undefined);
|
|
15
|
+
};
|
|
11
16
|
useAsyncEffect(
|
|
12
17
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
13
18
|
async (mounted) => {
|
|
14
|
-
if (hash && hash.length > 0) {
|
|
19
|
+
if (api && hash && hash.length > 0) {
|
|
15
20
|
try {
|
|
21
|
+
reset();
|
|
16
22
|
const result = await api?.archive(archive).payload.hash(hash).get();
|
|
17
23
|
if (mounted()) {
|
|
18
|
-
setApiError(undefined);
|
|
19
24
|
if (result?.length) {
|
|
20
25
|
setPayload(result[0]);
|
|
21
26
|
}
|
|
@@ -26,8 +31,8 @@ export const usePayload = (hash) => {
|
|
|
26
31
|
}
|
|
27
32
|
}
|
|
28
33
|
catch (e) {
|
|
34
|
+
reset();
|
|
29
35
|
setApiError(e);
|
|
30
|
-
setPayload(undefined);
|
|
31
36
|
console.error(e);
|
|
32
37
|
}
|
|
33
38
|
}
|
|
@@ -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;AAEhC,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,IAAa,
|
|
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;AAEhC,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,IAAa,EAA0E,EAAE;IAClH,MAAM,EAAE,GAAG,EAAE,GAAG,eAAe,EAAE,CAAA;IACjC,MAAM,EAAE,OAAO,EAAE,GAAG,UAAU,EAAE,CAAA;IAChC,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,cAAc;IACZ,uDAAuD;IACvD,KAAK,EAAE,OAAO,EAAE,EAAE;QAChB,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;YAClC,IAAI;gBACF,KAAK,EAAE,CAAA;gBACP,MAAM,MAAM,GAAG,MAAM,GAAG,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAA;gBACnE,IAAI,OAAO,EAAE,EAAE;oBACb,IAAI,MAAM,EAAE,MAAM,EAAE;wBAClB,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;qBACtB;yBAAM,IAAI,MAAM,EAAE;wBACjB,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,CAAgB,CAAC,CAAA;gBAC7B,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;aACjB;SACF;IACH,CAAC,EACD,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,CACrB,CAAA;IACD,OAAO,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAA;AACtC,CAAC,CAAA"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { XyoApiError } from '@xyo-network/api';
|
|
2
2
|
import { XyoPayload } from '@xyo-network/payload';
|
|
3
3
|
import { FetchHuriHashOptions } from './lib';
|
|
4
|
-
declare const useResolveHuri: (huriUri?: string, dependentNotFound?: boolean, options?: FetchHuriHashOptions) => [XyoPayload | undefined, boolean, XyoApiError | undefined];
|
|
4
|
+
declare const useResolveHuri: (huriUri?: string, dependentNotFound?: boolean, options?: FetchHuriHashOptions) => [XyoPayload | undefined, boolean, XyoApiError | undefined, boolean | undefined];
|
|
5
5
|
export { useResolveHuri };
|
|
@@ -5,30 +5,28 @@ import { useState } from 'react';
|
|
|
5
5
|
import { findHuriNetwork } from './lib';
|
|
6
6
|
const useResolveHuri = (huriUri, dependentNotFound, options) => {
|
|
7
7
|
const { network, networks, setNetwork } = useNetwork();
|
|
8
|
-
const [huriNetwork, setHuriNetwork] = useState();
|
|
9
8
|
const [huriPayload, setHuriPayload] = useState();
|
|
10
9
|
const [huriPayloadNotFound, setHuriPayloadNotFound] = useState(false);
|
|
10
|
+
const [huriNetworkNotFound, setHuriNetworkNotFound] = useState();
|
|
11
11
|
const [huriApiError, setHuriApiError] = useState();
|
|
12
12
|
const { changeActiveNetwork } = options ?? {};
|
|
13
13
|
useAsyncEffect(
|
|
14
14
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
15
15
|
async (mounted) => {
|
|
16
|
-
if ((dependentNotFound === undefined || dependentNotFound) && huriUri
|
|
16
|
+
if ((dependentNotFound === undefined || dependentNotFound) && huriUri) {
|
|
17
17
|
const huriInstance = new Huri(huriUri);
|
|
18
18
|
const foundHuriNetwork = findHuriNetwork(huriInstance, networks);
|
|
19
|
-
// Update when we found a huri network and it doesn't match the current one
|
|
20
19
|
if (foundHuriNetwork && mounted()) {
|
|
21
|
-
setHuriNetwork(huriNetwork);
|
|
22
20
|
if (network !== foundHuriNetwork && changeActiveNetwork) {
|
|
23
21
|
setNetwork?.(foundHuriNetwork);
|
|
24
22
|
return;
|
|
25
23
|
}
|
|
26
|
-
// If no matching network try to resolve the huri itself
|
|
27
24
|
try {
|
|
28
25
|
const huriPayload = await huriInstance.fetch();
|
|
29
26
|
if (mounted()) {
|
|
30
27
|
if (huriPayload) {
|
|
31
28
|
setHuriPayload(huriPayload);
|
|
29
|
+
setHuriPayloadNotFound(false);
|
|
32
30
|
}
|
|
33
31
|
else {
|
|
34
32
|
setHuriPayloadNotFound(true);
|
|
@@ -41,9 +39,18 @@ const useResolveHuri = (huriUri, dependentNotFound, options) => {
|
|
|
41
39
|
}
|
|
42
40
|
}
|
|
43
41
|
}
|
|
42
|
+
else {
|
|
43
|
+
setHuriNetworkNotFound(true);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
// If the dependent is not found, then assume not found till proven otherwise
|
|
48
|
+
if (dependentNotFound) {
|
|
49
|
+
setHuriPayloadNotFound(true);
|
|
50
|
+
}
|
|
44
51
|
}
|
|
45
|
-
}, [
|
|
46
|
-
return [huriPayload, huriPayloadNotFound, huriApiError];
|
|
52
|
+
}, [huriUri, network, networks, dependentNotFound, setNetwork, changeActiveNetwork]);
|
|
53
|
+
return [huriPayload, huriPayloadNotFound, huriApiError, huriNetworkNotFound];
|
|
47
54
|
};
|
|
48
55
|
export { useResolveHuri };
|
|
49
56
|
//# sourceMappingURL=useResolveHuri.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useResolveHuri.js","sourceRoot":"","sources":["../../../src/hooks/useResolveHuri.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;
|
|
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,QAAQ,EAAE,MAAM,OAAO,CAAA;AAEhC,OAAO,EAAwB,eAAe,EAAE,MAAM,OAAO,CAAA;AAE7D,MAAM,cAAc,GAAG,CACrB,OAAgB,EAChB,iBAA2B,EAC3B,OAA8B,EACmD,EAAE;IACnF,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,CAAC,KAAK,CAAC,CAAA;IACrE,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,cAAc;IACZ,uDAAuD;IACvD,KAAK,EAAE,OAAO,EAAE,EAAE;QAChB,IAAI,CAAC,iBAAiB,KAAK,SAAS,IAAI,iBAAiB,CAAC,IAAI,OAAO,EAAE;YACrE,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,eAAe,CAAC,CAAgB,CAAC,CAAA;qBAClC;iBACF;aACF;iBAAM;gBACL,sBAAsB,CAAC,IAAI,CAAC,CAAA;aAC7B;SACF;aAAM;YACL,6EAA6E;YAC7E,IAAI,iBAAiB,EAAE;gBACrB,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,22 @@
|
|
|
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.8.
|
|
17
|
-
"@xylabs/react-button": "^2.14.
|
|
18
|
-
"@xylabs/react-
|
|
19
|
-
"@xylabs/react-
|
|
20
|
-
"@xylabs/react-shared": "^2.14.
|
|
21
|
-
"@xyo-network/api": "^2.21.
|
|
22
|
-
"@xyo-network/
|
|
23
|
-
"@xyo-network/
|
|
24
|
-
"@xyo-network/
|
|
25
|
-
"@xyo-network/react-
|
|
26
|
-
"@xyo-network/react-
|
|
27
|
-
"@xyo-network/react-
|
|
28
|
-
"@xyo-network/react-
|
|
29
|
-
"@xyo-network/react-
|
|
30
|
-
"@xyo-network/react-
|
|
31
|
-
"@xyo-network/
|
|
32
|
-
"@xyo-network/utils": "^2.21.13",
|
|
16
|
+
"@mui/material": "^5.8.7",
|
|
17
|
+
"@xylabs/react-button": "^2.14.5",
|
|
18
|
+
"@xylabs/react-flexbox": "^2.14.5",
|
|
19
|
+
"@xylabs/react-quick-tip-button": "^2.14.5",
|
|
20
|
+
"@xylabs/react-shared": "^2.14.5",
|
|
21
|
+
"@xyo-network/api": "^2.21.14",
|
|
22
|
+
"@xyo-network/network": "^2.21.14",
|
|
23
|
+
"@xyo-network/payload": "^2.21.14",
|
|
24
|
+
"@xyo-network/react-archive": "^2.26.10",
|
|
25
|
+
"@xyo-network/react-archivist-api": "^2.26.10",
|
|
26
|
+
"@xyo-network/react-auth-service": "^2.26.10",
|
|
27
|
+
"@xyo-network/react-network": "^2.26.10",
|
|
28
|
+
"@xyo-network/react-property": "^2.26.10",
|
|
29
|
+
"@xyo-network/react-schema": "^2.26.10",
|
|
30
|
+
"@xyo-network/react-shared": "^2.26.10",
|
|
31
|
+
"@xyo-network/utils": "^2.21.14",
|
|
33
32
|
"luxon": "^2.4.0",
|
|
34
33
|
"react": "^18.2.0",
|
|
35
34
|
"react-dom": "^18.2.0",
|
|
@@ -40,8 +39,8 @@
|
|
|
40
39
|
},
|
|
41
40
|
"description": "Common React library for all XYO projects that use React",
|
|
42
41
|
"devDependencies": {
|
|
43
|
-
"@babel/core": "^7.18.
|
|
44
|
-
"@babel/preset-env": "^7.18.
|
|
42
|
+
"@babel/core": "^7.18.6",
|
|
43
|
+
"@babel/preset-env": "^7.18.6",
|
|
45
44
|
"@storybook/react": "^6.5.9",
|
|
46
45
|
"@types/luxon": "^2.3.2",
|
|
47
46
|
"@xylabs/tsconfig": "^1.0.14"
|
|
@@ -95,6 +94,6 @@
|
|
|
95
94
|
},
|
|
96
95
|
"sideEffects": false,
|
|
97
96
|
"types": "dist/esm/index.d.ts",
|
|
98
|
-
"version": "2.26.
|
|
97
|
+
"version": "2.26.10",
|
|
99
98
|
"packageManager": "yarn@3.1.1"
|
|
100
99
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import ContentCopyIcon from '@mui/icons-material/ContentCopy'
|
|
2
2
|
import { IconButton, Typography, useTheme } from '@mui/material'
|
|
3
|
-
import { QuickTipButton } from '@xylabs/react-common'
|
|
4
3
|
import { FlexBoxProps, FlexCol, FlexGrowRow, FlexRow } from '@xylabs/react-flexbox'
|
|
4
|
+
import { QuickTipButton } from '@xylabs/react-quick-tip-button'
|
|
5
5
|
import { XyoPayload, XyoPayloadWrapper } from '@xyo-network/payload'
|
|
6
6
|
|
|
7
7
|
export interface PayloadHashSourceDetailsProps extends FlexBoxProps {
|
|
@@ -1,32 +1,41 @@
|
|
|
1
1
|
/* eslint-disable import/no-internal-modules */
|
|
2
|
-
import { Typography } from '@mui/material'
|
|
2
|
+
import { Alert, Typography } from '@mui/material'
|
|
3
3
|
import { ComponentStory, Meta } from '@storybook/react'
|
|
4
4
|
import { FlexCol } from '@xylabs/react-flexbox'
|
|
5
5
|
import { Huri } from '@xyo-network/payload'
|
|
6
|
+
import { ArchivistApiProvider } from '@xyo-network/react-archivist-api'
|
|
7
|
+
import { NetworkMemoryProvider } from '@xyo-network/react-network'
|
|
6
8
|
import { XyoSchemaCache } from '@xyo-network/utils'
|
|
7
9
|
import { lazy, Suspense } from 'react'
|
|
8
10
|
|
|
9
|
-
import {
|
|
11
|
+
import { FetchHuriHashOptions } from './lib'
|
|
10
12
|
import { useHuriHash } from './useHuriHash'
|
|
11
13
|
|
|
12
14
|
const JsonView = lazy(() => import(/* webpackChunkName: "jsonView" */ 'react-json-view'))
|
|
13
15
|
|
|
14
16
|
interface UseHuriHashComponentProps {
|
|
15
17
|
huriOrHash: string | Huri
|
|
18
|
+
huriUri?: string
|
|
19
|
+
options?: FetchHuriHashOptions
|
|
16
20
|
}
|
|
17
21
|
|
|
18
22
|
const apiDomain = 'https://beta.api.archivist.xyo.network'
|
|
19
23
|
const hash = '5605fabad11b10bb5fb86b309ca0970894eda8f22362dda1a489817723bca992'
|
|
20
24
|
XyoSchemaCache.instance.proxy = `${apiDomain}/domain`
|
|
21
25
|
|
|
22
|
-
const
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
+
const mainApiDomain = 'https://api.archivist.xyo.network'
|
|
27
|
+
const mainHash = 'd3a3936e31ba1d835c528784ab77c1eaaeedd6e16b7aad68a88241ce539853cb'
|
|
28
|
+
|
|
29
|
+
const Wrapper: React.FC<UseHuriHashComponentProps> = (props) => (
|
|
30
|
+
<NetworkMemoryProvider>
|
|
31
|
+
<ArchivistApiProvider apiDomain={apiDomain}>
|
|
32
|
+
<UseHuriHashComponent {...props} />
|
|
33
|
+
</ArchivistApiProvider>
|
|
34
|
+
</NetworkMemoryProvider>
|
|
26
35
|
)
|
|
27
36
|
|
|
28
|
-
const UseHuriHashComponent: React.FC<UseHuriHashComponentProps> = ({ huriOrHash }) => {
|
|
29
|
-
const [payload] = useHuriHash(huriOrHash)
|
|
37
|
+
const UseHuriHashComponent: React.FC<UseHuriHashComponentProps> = ({ huriOrHash, huriUri, options }) => {
|
|
38
|
+
const [payload, notFound, _, networkNotFound] = useHuriHash(huriOrHash, huriUri, options)
|
|
30
39
|
|
|
31
40
|
return (
|
|
32
41
|
<>
|
|
@@ -34,6 +43,8 @@ const UseHuriHashComponent: React.FC<UseHuriHashComponentProps> = ({ huriOrHash
|
|
|
34
43
|
Fetches the payload for a huriOrHash.
|
|
35
44
|
</Typography>
|
|
36
45
|
<FlexCol my={3}>
|
|
46
|
+
{notFound ? <Alert severity="warning">Not Found</Alert> : null}
|
|
47
|
+
{networkNotFound ? <Alert severity="warning">Network Not Found</Alert> : null}
|
|
37
48
|
<Suspense fallback={<FlexCol busy />}>
|
|
38
49
|
<JsonView src={payload || {}} />
|
|
39
50
|
</Suspense>
|
|
@@ -53,17 +64,31 @@ const StorybookEntry: Meta = {
|
|
|
53
64
|
title: 'payload/useHuriHash',
|
|
54
65
|
}
|
|
55
66
|
|
|
56
|
-
const Template: ComponentStory<typeof UseHuriHashComponent> = (
|
|
57
|
-
return <Wrapper
|
|
67
|
+
const Template: ComponentStory<typeof UseHuriHashComponent> = (props) => {
|
|
68
|
+
return <Wrapper {...props} />
|
|
58
69
|
}
|
|
59
70
|
|
|
60
71
|
const Default = Template.bind({})
|
|
61
72
|
Default.args = { huriOrHash: hash }
|
|
62
73
|
|
|
74
|
+
const NotFound = Template.bind({})
|
|
75
|
+
NotFound.args = { huriOrHash: 'foo' }
|
|
76
|
+
|
|
63
77
|
const WithHuri = Template.bind({})
|
|
64
78
|
WithHuri.args = { huriOrHash: new Huri(`${apiDomain}/${hash}`) }
|
|
65
79
|
|
|
66
|
-
|
|
80
|
+
const WithHuriUri = Template.bind({})
|
|
81
|
+
WithHuriUri.args = { huriUri: `${mainApiDomain}/${mainHash}` }
|
|
82
|
+
|
|
83
|
+
const WithHuriUriNetworkNotFound = Template.bind({})
|
|
84
|
+
WithHuriUriNetworkNotFound.args = { huriUri: `http://badarchivisturl.com/${mainHash}` }
|
|
85
|
+
|
|
86
|
+
// Note - story will work correctly once main net return 200 instead of 404 when payloads aren't found
|
|
87
|
+
// Resolve huriUri when network is different from the current network
|
|
88
|
+
const WithHuriUriNotFound = Template.bind({})
|
|
89
|
+
WithHuriUriNotFound.args = { huriUri: `${mainApiDomain}/foo` }
|
|
90
|
+
|
|
91
|
+
export { Default, NotFound, WithHuri, WithHuriUri, WithHuriUriNetworkNotFound, WithHuriUriNotFound }
|
|
67
92
|
|
|
68
93
|
// eslint-disable-next-line import/no-default-export
|
|
69
94
|
export default StorybookEntry
|
|
@@ -6,7 +6,14 @@ import { FetchHuriHashOptions } from './lib'
|
|
|
6
6
|
import { usePayload } from './usePayload'
|
|
7
7
|
import { useResolveHuri } from './useResolveHuri'
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
/**
|
|
10
|
+
* Resolve a hash or a huri regardless of network
|
|
11
|
+
*/
|
|
12
|
+
const useHuriHash = (
|
|
13
|
+
huriOrHash?: string | Huri,
|
|
14
|
+
huriUri?: string,
|
|
15
|
+
options?: FetchHuriHashOptions
|
|
16
|
+
): [XyoPayload | undefined, boolean, XyoApiError | undefined, boolean | undefined] => {
|
|
10
17
|
const hash = useCallback((huriOrHash?: string | Huri) => {
|
|
11
18
|
if (huriOrHash) {
|
|
12
19
|
if (typeof huriOrHash === 'string') {
|
|
@@ -18,10 +25,15 @@ const useHuriHash = (huriOrHash?: string | Huri, huriUri?: string, options?: Fet
|
|
|
18
25
|
}
|
|
19
26
|
}, [])
|
|
20
27
|
|
|
21
|
-
const
|
|
22
|
-
const [huriPayload, huriPayloadNotFound, huriApiError] = useResolveHuri(huriUri, notFound, options)
|
|
28
|
+
const foundHash = hash(huriOrHash)
|
|
23
29
|
|
|
24
|
-
|
|
30
|
+
// Optimistically try to grab the has from the current network and archive
|
|
31
|
+
const [payload, notFound, apiError] = usePayload(foundHash)
|
|
32
|
+
|
|
33
|
+
// If payload isn't found, fallback to the huriUri
|
|
34
|
+
const [huriPayload, huriPayloadNotFound, huriApiError, networkNotFound] = useResolveHuri(huriUri, notFound, options)
|
|
35
|
+
|
|
36
|
+
return [payload ?? huriPayload, huriPayloadNotFound, apiError ?? huriApiError, networkNotFound]
|
|
25
37
|
}
|
|
26
38
|
|
|
27
39
|
export { useHuriHash }
|
|
@@ -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 { usePayload } from './usePayload'
|
|
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] = usePayload(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
|
package/src/hooks/usePayload.tsx
CHANGED
|
@@ -5,20 +5,27 @@ import { useArchive } from '@xyo-network/react-archive'
|
|
|
5
5
|
import { useArchivistApi } from '@xyo-network/react-archivist-api'
|
|
6
6
|
import { useState } from 'react'
|
|
7
7
|
|
|
8
|
-
export const usePayload = (hash?: string): [XyoPayload | undefined, boolean, XyoApiError | undefined] => {
|
|
8
|
+
export const usePayload = (hash?: string): [XyoPayload | undefined, boolean | undefined, XyoApiError | undefined] => {
|
|
9
9
|
const { api } = useArchivistApi()
|
|
10
10
|
const { archive } = useArchive()
|
|
11
|
-
const [notFound, setNotFound] = useState(
|
|
11
|
+
const [notFound, setNotFound] = useState<boolean>()
|
|
12
12
|
const [apiError, setApiError] = useState<XyoApiError>()
|
|
13
13
|
const [payload, setPayload] = useState<XyoPayload>()
|
|
14
|
+
|
|
15
|
+
const reset = () => {
|
|
16
|
+
setPayload(undefined)
|
|
17
|
+
setApiError(undefined)
|
|
18
|
+
setNotFound(undefined)
|
|
19
|
+
}
|
|
20
|
+
|
|
14
21
|
useAsyncEffect(
|
|
15
22
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
16
23
|
async (mounted) => {
|
|
17
|
-
if (hash && hash.length > 0) {
|
|
24
|
+
if (api && hash && hash.length > 0) {
|
|
18
25
|
try {
|
|
26
|
+
reset()
|
|
19
27
|
const result = await api?.archive(archive).payload.hash(hash).get()
|
|
20
28
|
if (mounted()) {
|
|
21
|
-
setApiError(undefined)
|
|
22
29
|
if (result?.length) {
|
|
23
30
|
setPayload(result[0])
|
|
24
31
|
} else if (result) {
|
|
@@ -27,8 +34,8 @@ export const usePayload = (hash?: string): [XyoPayload | undefined, boolean, Xyo
|
|
|
27
34
|
}
|
|
28
35
|
}
|
|
29
36
|
} catch (e) {
|
|
37
|
+
reset()
|
|
30
38
|
setApiError(e as XyoApiError)
|
|
31
|
-
setPayload(undefined)
|
|
32
39
|
console.error(e)
|
|
33
40
|
}
|
|
34
41
|
}
|
|
@@ -1,17 +1,20 @@
|
|
|
1
1
|
import { useAsyncEffect } from '@xylabs/react-shared'
|
|
2
2
|
import { XyoApiError } from '@xyo-network/api'
|
|
3
|
-
import { XyoNetworkPayload } from '@xyo-network/network'
|
|
4
3
|
import { Huri, XyoPayload } from '@xyo-network/payload'
|
|
5
4
|
import { useNetwork } from '@xyo-network/react-network'
|
|
6
5
|
import { useState } from 'react'
|
|
7
6
|
|
|
8
7
|
import { FetchHuriHashOptions, findHuriNetwork } from './lib'
|
|
9
8
|
|
|
10
|
-
const useResolveHuri = (
|
|
9
|
+
const useResolveHuri = (
|
|
10
|
+
huriUri?: string,
|
|
11
|
+
dependentNotFound?: boolean,
|
|
12
|
+
options?: FetchHuriHashOptions
|
|
13
|
+
): [XyoPayload | undefined, boolean, XyoApiError | undefined, boolean | undefined] => {
|
|
11
14
|
const { network, networks, setNetwork } = useNetwork()
|
|
12
|
-
const [huriNetwork, setHuriNetwork] = useState<XyoNetworkPayload>()
|
|
13
15
|
const [huriPayload, setHuriPayload] = useState<XyoPayload>()
|
|
14
16
|
const [huriPayloadNotFound, setHuriPayloadNotFound] = useState(false)
|
|
17
|
+
const [huriNetworkNotFound, setHuriNetworkNotFound] = useState<boolean>()
|
|
15
18
|
const [huriApiError, setHuriApiError] = useState<XyoApiError>()
|
|
16
19
|
|
|
17
20
|
const { changeActiveNetwork } = options ?? {}
|
|
@@ -19,25 +22,23 @@ const useResolveHuri = (huriUri?: string, dependentNotFound?: boolean, options?:
|
|
|
19
22
|
useAsyncEffect(
|
|
20
23
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
21
24
|
async (mounted) => {
|
|
22
|
-
if ((dependentNotFound === undefined || dependentNotFound) && huriUri
|
|
25
|
+
if ((dependentNotFound === undefined || dependentNotFound) && huriUri) {
|
|
23
26
|
const huriInstance = new Huri(huriUri)
|
|
24
27
|
|
|
25
28
|
const foundHuriNetwork = findHuriNetwork(huriInstance, networks)
|
|
26
29
|
|
|
27
|
-
// Update when we found a huri network and it doesn't match the current one
|
|
28
30
|
if (foundHuriNetwork && mounted()) {
|
|
29
|
-
setHuriNetwork(huriNetwork)
|
|
30
31
|
if (network !== foundHuriNetwork && changeActiveNetwork) {
|
|
31
32
|
setNetwork?.(foundHuriNetwork)
|
|
32
33
|
return
|
|
33
34
|
}
|
|
34
35
|
|
|
35
|
-
// If no matching network try to resolve the huri itself
|
|
36
36
|
try {
|
|
37
37
|
const huriPayload = await huriInstance.fetch()
|
|
38
38
|
if (mounted()) {
|
|
39
39
|
if (huriPayload) {
|
|
40
40
|
setHuriPayload(huriPayload)
|
|
41
|
+
setHuriPayloadNotFound(false)
|
|
41
42
|
} else {
|
|
42
43
|
setHuriPayloadNotFound(true)
|
|
43
44
|
}
|
|
@@ -47,13 +48,20 @@ const useResolveHuri = (huriUri?: string, dependentNotFound?: boolean, options?:
|
|
|
47
48
|
setHuriApiError(e as XyoApiError)
|
|
48
49
|
}
|
|
49
50
|
}
|
|
51
|
+
} else {
|
|
52
|
+
setHuriNetworkNotFound(true)
|
|
53
|
+
}
|
|
54
|
+
} else {
|
|
55
|
+
// If the dependent is not found, then assume not found till proven otherwise
|
|
56
|
+
if (dependentNotFound) {
|
|
57
|
+
setHuriPayloadNotFound(true)
|
|
50
58
|
}
|
|
51
59
|
}
|
|
52
60
|
},
|
|
53
|
-
[
|
|
61
|
+
[huriUri, network, networks, dependentNotFound, setNetwork, changeActiveNetwork]
|
|
54
62
|
)
|
|
55
63
|
|
|
56
|
-
return [huriPayload, huriPayloadNotFound, huriApiError]
|
|
64
|
+
return [huriPayload, huriPayloadNotFound, huriApiError, huriNetworkNotFound]
|
|
57
65
|
}
|
|
58
66
|
|
|
59
67
|
export { useResolveHuri }
|