@xyo-network/react-payload 2.26.11 → 2.26.14

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.
@@ -0,0 +1,4 @@
1
+ import { XyoApiError } from '@xyo-network/api';
2
+ import { XyoPayload } from '@xyo-network/payload';
3
+ export declare type UsePayload = [XyoPayload?, boolean?, XyoApiError?];
4
+ export declare type UseHuriOrHash = [...UsePayload, boolean?];
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ResolvePayloadArgs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ResolvePayloadArgs.js","sourceRoot":"","sources":["../../../src/hooks/ResolvePayloadArgs.ts"],"names":[],"mappings":""}
@@ -1,4 +1,5 @@
1
1
  export * from './lib';
2
+ export * from './ResolvePayloadArgs';
2
3
  export * from './useGetSchema';
3
4
  export * from './useHuriHash';
4
5
  export * from './usePayload';
@@ -1,4 +1,5 @@
1
1
  export * from './lib';
2
+ export * from './ResolvePayloadArgs';
2
3
  export * from './useGetSchema';
3
4
  export * from './useHuriHash';
4
5
  export * from './usePayload';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,cAAc,OAAO,CAAA;AACrB,cAAc,gBAAgB,CAAA;AAC9B,cAAc,eAAe,CAAA;AAC7B,cAAc,cAAc,CAAA;AAC5B,cAAc,kBAAkB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,cAAc,OAAO,CAAA;AACrB,cAAc,sBAAsB,CAAA;AACpC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,eAAe,CAAA;AAC7B,cAAc,cAAc,CAAA;AAC5B,cAAc,kBAAkB,CAAA"}
@@ -1,8 +1,7 @@
1
- import { XyoApiError } from '@xyo-network/api';
2
- import { Huri, XyoPayload } from '@xyo-network/payload';
1
+ import { Huri } from '@xyo-network/payload';
3
2
  import { FetchHuriHashOptions } from './lib';
4
3
  /**
5
4
  * Resolve a hash or a huri regardless of network
6
5
  */
7
- declare const useHuriHash: (huriOrHash?: string | Huri, huriUri?: string, options?: FetchHuriHashOptions) => [XyoPayload | undefined, boolean | undefined, XyoApiError | undefined, boolean | undefined];
6
+ declare const useHuriHash: (huriOrHash?: string | Huri, huriUri?: string, options?: FetchHuriHashOptions) => [(import("@xyo-network/payload").XyoPayload<object> | undefined)?, (boolean | undefined)?, (import("@xyo-network/api").XyoApiError<any, any> | undefined)?, (boolean | undefined)?];
8
7
  export { useHuriHash };
@@ -16,11 +16,13 @@ const useHuriHash = (huriOrHash, huriUri, options) => {
16
16
  }
17
17
  }
18
18
  }, []);
19
- const foundHash = hash(huriOrHash);
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(foundHash);
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, notFound, options);
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":"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,EAC+D,EAAE;IAC/F,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
+ {"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,3 +1,2 @@
1
- import { XyoApiError } from '@xyo-network/api';
2
- import { XyoPayload } from '@xyo-network/payload';
3
- export declare const usePayload: (hash?: string) => [XyoPayload | undefined, boolean | undefined, XyoApiError | undefined];
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 && hash && hash.length > 0) {
27
+ if (api && localHash && localHash.length > 0 && notFound === undefined) {
28
+ reset();
20
29
  try {
21
- reset();
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;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
+ {"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"}
@@ -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 | undefined, XyoApiError | undefined, boolean | undefined];
4
+ declare const useResolveHuri: (huriUri?: string, dependentNotFound?: boolean, options?: FetchHuriHashOptions) => [(XyoPayload<object> | undefined)?, (boolean | undefined)?, (XyoApiError<any, any> | undefined)?, (boolean | undefined)?];
5
5
  export { useResolveHuri };
@@ -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 ((dependentNotFound === undefined || dependentNotFound) && huriUri) {
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;AAE7D,MAAM,cAAc,GAAG,CACrB,OAAgB,EAChB,iBAA2B,EAC3B,OAA8B,EAC+D,EAAE;IAC/F,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,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,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;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"}
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.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.11",
25
- "@xyo-network/react-archivist-api": "^2.26.11",
26
- "@xyo-network/react-auth-service": "^2.26.11",
27
- "@xyo-network/react-network": "^2.26.11",
28
- "@xyo-network/react-property": "^2.26.11",
29
- "@xyo-network/react-schema": "^2.26.11",
30
- "@xyo-network/react-shared": "^2.26.11",
31
- "@xyo-network/utils": "^2.21.14",
32
- "luxon": "^2.4.0",
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.14",
25
+ "@xyo-network/react-archivist-api": "^2.26.14",
26
+ "@xyo-network/react-auth-service": "^2.26.14",
27
+ "@xyo-network/react-network": "^2.26.14",
28
+ "@xyo-network/react-property": "^2.26.14",
29
+ "@xyo-network/react-schema": "^2.26.14",
30
+ "@xyo-network/react-shared": "^2.26.14",
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.11",
97
+ "version": "2.26.14",
98
98
  "packageManager": "yarn@3.1.1"
99
99
  }
@@ -0,0 +1,6 @@
1
+ import { XyoApiError } from '@xyo-network/api'
2
+ import { XyoPayload } from '@xyo-network/payload'
3
+
4
+ export type UsePayload = [XyoPayload?, boolean?, XyoApiError?]
5
+
6
+ export type UseHuriOrHash = [...UsePayload, boolean?]
@@ -1,4 +1,5 @@
1
1
  export * from './lib'
2
+ export * from './ResolvePayloadArgs'
2
3
  export * from './useGetSchema'
3
4
  export * from './useHuriHash'
4
5
  export * from './usePayload'
@@ -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,19 +1,15 @@
1
- import { XyoApiError } from '@xyo-network/api'
2
- import { Huri, XyoPayload } from '@xyo-network/payload'
3
- import { useCallback } from 'react'
1
+ import { Huri } from '@xyo-network/payload'
2
+ import { useCallback, useEffect } from 'react'
4
3
 
5
4
  import { FetchHuriHashOptions } from './lib'
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 = (
13
- huriOrHash?: string | Huri,
14
- huriUri?: string,
15
- options?: FetchHuriHashOptions
16
- ): [XyoPayload | undefined, boolean | undefined, XyoApiError | undefined, boolean | undefined] => {
12
+ const useHuriHash = (huriOrHash?: string | Huri, huriUri?: string, options?: FetchHuriHashOptions): UseHuriOrHash => {
17
13
  const hash = useCallback((huriOrHash?: string | Huri) => {
18
14
  if (huriOrHash) {
19
15
  if (typeof huriOrHash === 'string') {
@@ -25,13 +21,16 @@ const useHuriHash = (
25
21
  }
26
22
  }, [])
27
23
 
28
- const foundHash = hash(huriOrHash)
24
+ const providedHash = hash(huriOrHash)
29
25
 
30
26
  // Optimistically try to grab the has from the current network and archive
31
- const [payload, notFound, apiError] = usePayload(foundHash)
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
32
31
 
33
32
  // If payload isn't found, fallback to the huriUri
34
- const [huriPayload, huriPayloadNotFound, huriApiError, networkNotFound] = useResolveHuri(huriUri, notFound, options)
33
+ const [huriPayload, huriPayloadNotFound, huriApiError, networkNotFound] = useResolveHuri(huriUri, notFoundOverride, options)
35
34
 
36
35
  return [payload ?? huriPayload, huriPayloadNotFound, apiError ?? huriApiError, networkNotFound]
37
36
  }
@@ -3,11 +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
- export const usePayload = (hash?: string): [XyoPayload | undefined, boolean | undefined, XyoApiError | undefined] => {
8
+ import { UsePayload } from './ResolvePayloadArgs'
9
+
10
+ export const usePayload = (hash?: string): UsePayload => {
9
11
  const { api } = useArchivistApi()
10
12
  const { archive } = useArchive()
13
+ const [localHash, setLocalHash] = useState<string>()
11
14
  const [notFound, setNotFound] = useState<boolean>()
12
15
  const [apiError, setApiError] = useState<XyoApiError>()
13
16
  const [payload, setPayload] = useState<XyoPayload>()
@@ -18,29 +21,39 @@ export const usePayload = (hash?: string): [XyoPayload | undefined, boolean | un
18
21
  setNotFound(undefined)
19
22
  }
20
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
+
21
32
  useAsyncEffect(
22
33
  // eslint-disable-next-line react-hooks/exhaustive-deps
23
34
  async (mounted) => {
24
- if (api && hash && hash.length > 0) {
35
+ if (api && localHash && localHash.length > 0 && notFound === undefined) {
36
+ reset()
25
37
  try {
26
- reset()
27
- const result = await api?.archive(archive).payload.hash(hash).get()
38
+ const result = await api?.archive(archive).payload.hash(localHash).get()
28
39
  if (mounted()) {
29
40
  if (result?.length) {
30
41
  setPayload(result[0])
31
- } else if (result) {
42
+ setNotFound(false)
43
+ } else if (result?.length === 0) {
32
44
  setNotFound(true)
33
45
  setPayload(undefined)
34
46
  }
35
47
  }
36
48
  } catch (e) {
37
49
  reset()
50
+ setNotFound(false)
38
51
  setApiError(e as XyoApiError)
39
52
  console.error(e)
40
53
  }
41
54
  }
42
55
  },
43
- [hash, api, archive]
56
+ [hash, api, archive, payload, notFound, localHash]
44
57
  )
45
58
  return [payload, notFound, apiError]
46
59
  }
@@ -5,12 +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 { UseHuriOrHash } from './ResolvePayloadArgs'
8
9
 
9
- const useResolveHuri = (
10
- huriUri?: string,
11
- dependentNotFound?: boolean,
12
- options?: FetchHuriHashOptions
13
- ): [XyoPayload | undefined, boolean | undefined, XyoApiError | undefined, boolean | undefined] => {
10
+ const useResolveHuri = (huriUri?: string, dependentNotFound?: boolean, options?: FetchHuriHashOptions): UseHuriOrHash => {
14
11
  const { network, networks, setNetwork } = useNetwork()
15
12
  const [huriPayload, setHuriPayload] = useState<XyoPayload>()
16
13
  const [huriPayloadNotFound, setHuriPayloadNotFound] = useState<boolean>()
@@ -19,6 +16,12 @@ const useResolveHuri = (
19
16
 
20
17
  const { changeActiveNetwork } = options ?? {}
21
18
 
19
+ const reset = () => {
20
+ setHuriPayload(undefined)
21
+ setHuriPayloadNotFound(undefined)
22
+ setHuriApiError(undefined)
23
+ }
24
+
22
25
  useEffect(() => {
23
26
  // Initially, sync local not found with dependent's status
24
27
  setHuriPayloadNotFound(dependentNotFound)
@@ -28,7 +31,8 @@ const useResolveHuri = (
28
31
  // eslint-disable-next-line react-hooks/exhaustive-deps
29
32
  async (mounted) => {
30
33
  // if dependent value is resolved, don't do anything, if not resolved, try to resolve huriUri
31
- if ((dependentNotFound === undefined || dependentNotFound) && huriUri) {
34
+ if (dependentNotFound && huriUri) {
35
+ reset()
32
36
  const huriInstance = new Huri(huriUri)
33
37
 
34
38
  const foundHuriNetwork = findHuriNetwork(huriInstance, networks)
@@ -51,6 +55,8 @@ const useResolveHuri = (
51
55
  }
52
56
  } catch (e) {
53
57
  if (mounted()) {
58
+ setHuriPayloadNotFound(false)
59
+ setHuriPayload(undefined)
54
60
  setHuriApiError(e as XyoApiError)
55
61
  }
56
62
  }