@xyo-network/react-archivist 2.38.0-rc.6 → 2.38.0-rc.8

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.
@@ -1,5 +1,10 @@
1
1
  import { XyoPayload, XyoPayloadFindFilter } from '@xyo-network/payload';
2
+ declare type RefreshCallback = () => void;
2
3
  export declare const useArchivist: (required?: boolean) => Omit<import("./State").ArchivistState & import("@xyo-network/react-shared").ContextExState, "provided">;
3
- export declare const useArchivistGet: (ids?: string[], required?: boolean) => [(XyoPayload | null)[]?, Error?];
4
- export declare const useArchivistFind: <TFilter extends XyoPayloadFindFilter>(filter: TFilter, required?: boolean) => [(XyoPayload | null)[]?, Error?];
4
+ export declare const useArchivistGet: (ids?: string[], required?: boolean) => [(XyoPayload | null)[]?, Error?, RefreshCallback?];
5
+ export declare const useArchivistFind: <TFilter extends XyoPayloadFindFilter>(filter: TFilter, required?: boolean) => [XyoPayload[]?, Error?, RefreshCallback?];
6
+ export declare const useArchivistInsert: (payloads: XyoPayload[], required?: boolean) => [(XyoPayload | null)[]?, Error?];
7
+ export declare const useArchivistAll: (required?: boolean) => [(XyoPayload | null)[]?, Error?];
8
+ export declare const useArchivistClear: (required?: boolean) => [(XyoPayload | null)[]?, Error?];
9
+ export {};
5
10
  //# sourceMappingURL=use.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"use.d.ts","sourceRoot":"","sources":["../../../src/contexts/use.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAe,MAAM,sBAAsB,CAAA;AAMpF,eAAO,MAAM,YAAY,iIAExB,CAAA;AAED,eAAO,MAAM,eAAe,SAAU,MAAM,EAAE,yBAAqB,CAAC,CAAC,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAqBjG,CAAA;AAED,eAAO,MAAM,gBAAgB,iFAA8E,CAAC,CAAC,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAqBzI,CAAA"}
1
+ {"version":3,"file":"use.d.ts","sourceRoot":"","sources":["../../../src/contexts/use.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAe,MAAM,sBAAsB,CAAA;AAMpF,aAAK,eAAe,GAAG,MAAM,IAAI,CAAA;AAEjC,eAAO,MAAM,YAAY,iIAExB,CAAA;AAaD,eAAO,MAAM,eAAe,SAAU,MAAM,EAAE,yBAAqB,CAAC,CAAC,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,eAAe,CAAC,CA0BnH,CAAA;AAED,eAAO,MAAM,gBAAgB,iFAG1B,CAAC,UAAU,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,eAAe,CAAC,CA0B1C,CAAA;AAED,eAAO,MAAM,kBAAkB,aAAc,UAAU,EAAE,yBAAqB,CAAC,CAAC,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAkC5G,CAAA;AAED,eAAO,MAAM,eAAe,0BAAuB,CAAC,CAAC,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAqBjF,CAAA;AAED,eAAO,MAAM,iBAAiB,0BAAuB,CAAC,CAAC,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAqBnF,CAAA"}
@@ -1,12 +1,97 @@
1
1
  import { useAsyncEffect } from '@xylabs/react-shared';
2
2
  import { XyoArchivistWrapper } from '@xyo-network/archivist';
3
- import { useContextEx } from '@xyo-network/react-shared';
4
- import { useState } from 'react';
3
+ import { useContextEx, useDataState } from '@xyo-network/react-shared';
4
+ import { useRef, useState } from 'react';
5
5
  import { ArchivistContext } from './Context';
6
6
  export const useArchivist = (required = false) => {
7
7
  return useContextEx(ArchivistContext, 'Archivist', required);
8
8
  };
9
+ const useSharedUseArchivistState = (required) => {
10
+ const [payloads, setPayloads] = useState();
11
+ const { archivist } = useArchivist(required);
12
+ const [error, setError] = useState();
13
+ const [refresh, setRefresh] = useState(1);
14
+ const loadingRef = useRef(false);
15
+ const refreshPayloads = () => setRefresh((previous) => previous + 1);
16
+ return { archivist, error, loadingRef, payloads, refresh, refreshPayloads, setError, setPayloads };
17
+ };
9
18
  export const useArchivistGet = (ids, required = false) => {
19
+ const [savedIds] = useDataState(ids);
20
+ const { archivist, error, loadingRef, payloads, refresh, setError, setPayloads, refreshPayloads } = useSharedUseArchivistState(required);
21
+ useAsyncEffect(
22
+ // eslint-disable-next-line react-hooks/exhaustive-deps
23
+ async (mounted) => {
24
+ try {
25
+ if (archivist && savedIds && !loadingRef.current) {
26
+ const wrapper = new XyoArchivistWrapper(archivist);
27
+ loadingRef.current = true;
28
+ const result = (await wrapper?.get(savedIds ?? [])) ?? [];
29
+ loadingRef.current = false;
30
+ if (mounted()) {
31
+ setError(undefined);
32
+ setPayloads(result);
33
+ }
34
+ }
35
+ }
36
+ catch (ex) {
37
+ loadingRef.current = false;
38
+ setError(ex);
39
+ }
40
+ }, [archivist, savedIds, refresh, setError, setPayloads, loadingRef]);
41
+ return [payloads, error, refreshPayloads];
42
+ };
43
+ export const useArchivistFind = (filter, required = false) => {
44
+ const [savedFilter] = useDataState(filter);
45
+ const [payloads, setPayloads] = useState();
46
+ const { archivist, error, loadingRef, refresh, setError, refreshPayloads } = useSharedUseArchivistState(required);
47
+ useAsyncEffect(
48
+ // eslint-disable-next-line react-hooks/exhaustive-deps
49
+ async (mounted) => {
50
+ try {
51
+ if (archivist && savedFilter && !loadingRef.current) {
52
+ const wrapper = new XyoArchivistWrapper(archivist);
53
+ loadingRef.current = true;
54
+ const result = await wrapper?.find(savedFilter);
55
+ loadingRef.current = false;
56
+ if (mounted()) {
57
+ setError(undefined);
58
+ setPayloads(result);
59
+ }
60
+ }
61
+ }
62
+ catch (ex) {
63
+ setError(ex);
64
+ loadingRef.current = false;
65
+ }
66
+ }, [archivist, loadingRef, refresh, savedFilter, setError, setPayloads]);
67
+ return [payloads, error, refreshPayloads];
68
+ };
69
+ export const useArchivistInsert = (payloads, required = false) => {
70
+ const [savedPayloads] = useDataState(payloads);
71
+ const { archivist, error, loadingRef, payloads: resultPayloads, refresh, setError, setPayloads: setResultPayloads, } = useSharedUseArchivistState(required);
72
+ useAsyncEffect(
73
+ // eslint-disable-next-line react-hooks/exhaustive-deps
74
+ async (mounted) => {
75
+ try {
76
+ if (archivist && savedPayloads && !loadingRef.current) {
77
+ const wrapper = new XyoArchivistWrapper(archivist);
78
+ loadingRef.current = true;
79
+ const result = await wrapper.insert(savedPayloads);
80
+ loadingRef.current = false;
81
+ if (mounted()) {
82
+ setError(undefined);
83
+ setResultPayloads(result);
84
+ }
85
+ }
86
+ }
87
+ catch (ex) {
88
+ loadingRef.current = false;
89
+ setError(ex);
90
+ }
91
+ }, [archivist, loadingRef, refresh, savedPayloads, setError, setResultPayloads]);
92
+ return [resultPayloads, error];
93
+ };
94
+ export const useArchivistAll = (required = false) => {
10
95
  const { archivist } = useArchivist(required);
11
96
  const [payloads, setPayloads] = useState();
12
97
  const [error, setError] = useState();
@@ -15,7 +100,7 @@ export const useArchivistGet = (ids, required = false) => {
15
100
  async (mounted) => {
16
101
  try {
17
102
  const wrapper = archivist ? new XyoArchivistWrapper(archivist) : undefined;
18
- const result = (await wrapper?.get(ids ?? [])) ?? [];
103
+ const result = await wrapper?.all();
19
104
  if (mounted()) {
20
105
  setError(undefined);
21
106
  setPayloads(result);
@@ -24,10 +109,10 @@ export const useArchivistGet = (ids, required = false) => {
24
109
  catch (ex) {
25
110
  setError(ex);
26
111
  }
27
- }, [archivist, ids]);
112
+ }, [archivist]);
28
113
  return [payloads, error];
29
114
  };
30
- export const useArchivistFind = (filter, required = false) => {
115
+ export const useArchivistClear = (required = false) => {
31
116
  const { archivist } = useArchivist(required);
32
117
  const [payloads, setPayloads] = useState();
33
118
  const [error, setError] = useState();
@@ -36,16 +121,16 @@ export const useArchivistFind = (filter, required = false) => {
36
121
  async (mounted) => {
37
122
  try {
38
123
  const wrapper = archivist ? new XyoArchivistWrapper(archivist) : undefined;
39
- const result = await wrapper?.find(filter);
124
+ await wrapper?.clear();
40
125
  if (mounted()) {
41
126
  setError(undefined);
42
- setPayloads(result);
127
+ setPayloads([]);
43
128
  }
44
129
  }
45
130
  catch (ex) {
46
131
  setError(ex);
47
132
  }
48
- }, [archivist, filter]);
133
+ }, [archivist]);
49
134
  return [payloads, error];
50
135
  };
51
136
  //# sourceMappingURL=use.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"use.js","sourceRoot":"","sources":["../../../src/contexts/use.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AAE5D,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAEhC,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAA;AAE5C,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,QAAQ,GAAG,KAAK,EAAE,EAAE;IAC/C,OAAO,YAAY,CAAC,gBAAgB,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAA;AAC9D,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,GAAc,EAAE,QAAQ,GAAG,KAAK,EAAoC,EAAE;IACpG,MAAM,EAAE,SAAS,EAAE,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAA;IAC5C,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,EAAe,CAAA;IACvD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,EAAS,CAAA;IAC3C,cAAc;IACZ,uDAAuD;IACvD,KAAK,EAAE,OAAO,EAAE,EAAE;QAChB,IAAI;YACF,MAAM,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,mBAAmB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;YAC1E,MAAM,MAAM,GAAG,CAAC,MAAM,OAAO,EAAE,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;YACpD,IAAI,OAAO,EAAE,EAAE;gBACb,QAAQ,CAAC,SAAS,CAAC,CAAA;gBACnB,WAAW,CAAC,MAAM,CAAC,CAAA;aACpB;SACF;QAAC,OAAO,EAAE,EAAE;YACX,QAAQ,CAAC,EAAW,CAAC,CAAA;SACtB;IACH,CAAC,EACD,CAAC,SAAS,EAAE,GAAG,CAAC,CACjB,CAAA;IACD,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAA;AAC1B,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAuC,MAAe,EAAE,QAAQ,GAAG,KAAK,EAAoC,EAAE;IAC5I,MAAM,EAAE,SAAS,EAAE,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAA;IAC5C,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,EAAe,CAAA;IACvD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,EAAS,CAAA;IAC3C,cAAc;IACZ,uDAAuD;IACvD,KAAK,EAAE,OAAO,EAAE,EAAE;QAChB,IAAI;YACF,MAAM,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,mBAAmB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;YAC1E,MAAM,MAAM,GAAG,MAAM,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;YAC1C,IAAI,OAAO,EAAE,EAAE;gBACb,QAAQ,CAAC,SAAS,CAAC,CAAA;gBACnB,WAAW,CAAC,MAAM,CAAC,CAAA;aACpB;SACF;QAAC,OAAO,EAAE,EAAE;YACX,QAAQ,CAAC,EAAW,CAAC,CAAA;SACtB;IACH,CAAC,EACD,CAAC,SAAS,EAAE,MAAM,CAAC,CACpB,CAAA;IACD,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAA;AAC1B,CAAC,CAAA"}
1
+ {"version":3,"file":"use.js","sourceRoot":"","sources":["../../../src/contexts/use.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -13,8 +13,8 @@
13
13
  "@xylabs/react-button": "^2.15.1",
14
14
  "@xylabs/react-flexbox": "^2.15.1",
15
15
  "@xylabs/react-shared": "^2.15.1",
16
- "@xyo-network/module": "^2.38.0-rc.10",
17
- "@xyo-network/react-shared": "^2.38.0-rc.6",
16
+ "@xyo-network/module": "^2.38.0-rc.12",
17
+ "@xyo-network/react-shared": "^2.38.0-rc.8",
18
18
  "lodash": "^4.17.21",
19
19
  "tslib": "^2.4.0"
20
20
  },
@@ -29,9 +29,10 @@
29
29
  "description": "Common React library for all XYO projects that use React",
30
30
  "devDependencies": {
31
31
  "@types/lodash": "^4.14.186",
32
- "@xyo-network/api": "^2.38.0-rc.10",
33
- "@xyo-network/archivist": "^2.38.0-rc.10",
34
- "@xyo-network/payload": "^2.38.0-rc.10"
32
+ "@xyo-network/api": "^2.38.0-rc.12",
33
+ "@xyo-network/archivist": "^2.38.0-rc.12",
34
+ "@xyo-network/payload": "^2.38.0-rc.12",
35
+ "@xyo-network/react-archivist-api": "^2.38.0-rc.8"
35
36
  },
36
37
  "browser": "dist/esm/index.js",
37
38
  "docs": "dist/docs.json",
@@ -75,6 +76,6 @@
75
76
  },
76
77
  "sideEffects": false,
77
78
  "types": "dist/esm/index.d.ts",
78
- "version": "2.38.0-rc.6",
79
+ "version": "2.38.0-rc.8",
79
80
  "stableVersion": "2.37.29"
80
81
  }
@@ -0,0 +1,44 @@
1
+ import { ComponentMeta, ComponentStory } from '@storybook/react'
2
+
3
+ import { useArchivistFind, useArchivistGet } from '../use'
4
+ import { ArchivistPayloads } from './ArchivistPayloads.stories'
5
+ import { WithArchivistProviders } from './WithArchivistProviders.stories'
6
+
7
+ const StorybookEntry = {
8
+ argTypes: {},
9
+ component: ArchivistPayloads,
10
+ decorators: [WithArchivistProviders],
11
+ parameters: {
12
+ docs: {
13
+ page: null,
14
+ },
15
+ },
16
+ title: 'archivist/Hooks',
17
+ } as ComponentMeta<typeof ArchivistPayloads>
18
+
19
+ const ArchivistGetPayloadsTemplate: ComponentStory<typeof ArchivistPayloads> = (args) => {
20
+ const [payloads, error, refresh] = useArchivistGet([
21
+ '3da33603417622f4cdad2becbca8c7889623d9045d0e8923e1702a99d2f3e47c',
22
+ '3da33603417622f4cdad2becbca8c7889623d9045d0e8923e1702a99d2f3e47d',
23
+ ])
24
+ return <ArchivistPayloads payloads={payloads} error={error} refresh={refresh} {...args}></ArchivistPayloads>
25
+ }
26
+
27
+ const ArchivistFindPayloadsTemplate: ComponentStory<typeof ArchivistPayloads> = (args) => {
28
+ const [payloads, error, refresh] = useArchivistFind({
29
+ limit: 5,
30
+ schema: 'network.xyo.payload',
31
+ })
32
+ return <ArchivistPayloads payloads={payloads} error={error} refresh={refresh} {...args}></ArchivistPayloads>
33
+ }
34
+
35
+ const Get = ArchivistGetPayloadsTemplate.bind({})
36
+ Get.args = {}
37
+
38
+ const Find = ArchivistFindPayloadsTemplate.bind({})
39
+ Find.args = {}
40
+
41
+ export { Find, Get }
42
+
43
+ // eslint-disable-next-line import/no-default-export
44
+ export default StorybookEntry
@@ -0,0 +1,31 @@
1
+ import { Button, Card, CardContent, CardHeader } from '@mui/material'
2
+ import { FlexCol } from '@xylabs/react-flexbox'
3
+ import { XyoPayload } from '@xyo-network/payload'
4
+
5
+ export interface ArchivistPayloadsProps {
6
+ refresh?: () => void
7
+ payloads?: (XyoPayload | null)[]
8
+ error?: Error
9
+ }
10
+
11
+ export const ArchivistPayloads: React.FC<ArchivistPayloadsProps> = ({ refresh, payloads, error }) => {
12
+ return (
13
+ <FlexCol rowGap={2}>
14
+ <Button variant="contained" onClick={() => refresh?.()}>
15
+ Refresh
16
+ </Button>
17
+ <Card>
18
+ <CardHeader title="Payloads" />
19
+ <CardContent>
20
+ <pre style={{ whiteSpace: 'pre-wrap', wordBreak: 'break-all' }}>{payloads ? JSON.stringify(payloads, null, 2) : null}</pre>
21
+ </CardContent>
22
+ </Card>
23
+ <Card>
24
+ <CardHeader title="Errors" />
25
+ <CardContent>
26
+ <pre style={{ whiteSpace: 'pre-wrap', wordBreak: 'break-all' }}>{error ? JSON.stringify(error, null, 2) : null}</pre>
27
+ </CardContent>
28
+ </Card>
29
+ </FlexCol>
30
+ )
31
+ }
@@ -0,0 +1,28 @@
1
+ import { DecoratorFn } from '@storybook/react'
2
+ import { WithChildren } from '@xylabs/react-shared'
3
+ import { ArchivistApiProvider, useArchivistApi } from '@xyo-network/react-archivist-api'
4
+
5
+ import { RemoteArchivistProvider } from '../Provider'
6
+
7
+ const WithArchivist: React.FC<WithChildren> = ({ children }) => {
8
+ return <ArchivistApiProvider apiDomain="https://beta.api.archivist.xyo.network">{children}</ArchivistApiProvider>
9
+ }
10
+
11
+ const WithRemoteArchivist: React.FC<WithChildren> = ({ children }) => {
12
+ const { api } = useArchivistApi()
13
+ return (
14
+ <RemoteArchivistProvider config={{ api: api, archive: 'temp', schema: 'network.xyo.archivist.remote.config' }}>
15
+ {children}
16
+ </RemoteArchivistProvider>
17
+ )
18
+ }
19
+
20
+ export const WithArchivistProviders: DecoratorFn = (Story, args) => {
21
+ return (
22
+ <WithArchivist>
23
+ <WithRemoteArchivist>
24
+ <Story {...args} />
25
+ </WithRemoteArchivist>
26
+ </WithArchivist>
27
+ )
28
+ }
@@ -1,16 +1,124 @@
1
1
  import { useAsyncEffect } from '@xylabs/react-shared'
2
2
  import { XyoArchivistWrapper } from '@xyo-network/archivist'
3
3
  import { XyoPayload, XyoPayloadFindFilter, XyoPayloads } from '@xyo-network/payload'
4
- import { useContextEx } from '@xyo-network/react-shared'
5
- import { useState } from 'react'
4
+ import { useContextEx, useDataState } from '@xyo-network/react-shared'
5
+ import { useRef, useState } from 'react'
6
6
 
7
7
  import { ArchivistContext } from './Context'
8
8
 
9
+ type RefreshCallback = () => void
10
+
9
11
  export const useArchivist = (required = false) => {
10
12
  return useContextEx(ArchivistContext, 'Archivist', required)
11
13
  }
12
14
 
13
- export const useArchivistGet = (ids?: string[], required = false): [(XyoPayload | null)[]?, Error?] => {
15
+ const useSharedUseArchivistState = (required: boolean) => {
16
+ const [payloads, setPayloads] = useState<XyoPayloads>()
17
+ const { archivist } = useArchivist(required)
18
+ const [error, setError] = useState<Error>()
19
+ const [refresh, setRefresh] = useState(1)
20
+ const loadingRef = useRef<boolean>(false)
21
+ const refreshPayloads = () => setRefresh((previous) => previous + 1)
22
+
23
+ return { archivist, error, loadingRef, payloads, refresh, refreshPayloads, setError, setPayloads }
24
+ }
25
+
26
+ export const useArchivistGet = (ids?: string[], required = false): [(XyoPayload | null)[]?, Error?, RefreshCallback?] => {
27
+ const [savedIds] = useDataState(ids)
28
+ const { archivist, error, loadingRef, payloads, refresh, setError, setPayloads, refreshPayloads } = useSharedUseArchivistState(required)
29
+
30
+ useAsyncEffect(
31
+ // eslint-disable-next-line react-hooks/exhaustive-deps
32
+ async (mounted) => {
33
+ try {
34
+ if (archivist && savedIds && !loadingRef.current) {
35
+ const wrapper = new XyoArchivistWrapper(archivist)
36
+ loadingRef.current = true
37
+ const result = (await wrapper?.get(savedIds ?? [])) ?? []
38
+ loadingRef.current = false
39
+ if (mounted()) {
40
+ setError(undefined)
41
+ setPayloads(result)
42
+ }
43
+ }
44
+ } catch (ex) {
45
+ loadingRef.current = false
46
+ setError(ex as Error)
47
+ }
48
+ },
49
+ [archivist, savedIds, refresh, setError, setPayloads, loadingRef],
50
+ )
51
+ return [payloads, error, refreshPayloads]
52
+ }
53
+
54
+ export const useArchivistFind = <TFilter extends XyoPayloadFindFilter>(
55
+ filter: TFilter,
56
+ required = false,
57
+ ): [XyoPayload[]?, Error?, RefreshCallback?] => {
58
+ const [savedFilter] = useDataState(filter)
59
+ const [payloads, setPayloads] = useState<XyoPayload[]>()
60
+ const { archivist, error, loadingRef, refresh, setError, refreshPayloads } = useSharedUseArchivistState(required)
61
+ useAsyncEffect(
62
+ // eslint-disable-next-line react-hooks/exhaustive-deps
63
+ async (mounted) => {
64
+ try {
65
+ if (archivist && savedFilter && !loadingRef.current) {
66
+ const wrapper = new XyoArchivistWrapper(archivist)
67
+ loadingRef.current = true
68
+ const result = await wrapper?.find(savedFilter)
69
+ loadingRef.current = false
70
+ if (mounted()) {
71
+ setError(undefined)
72
+ setPayloads(result)
73
+ }
74
+ }
75
+ } catch (ex) {
76
+ setError(ex as Error)
77
+ loadingRef.current = false
78
+ }
79
+ },
80
+ [archivist, loadingRef, refresh, savedFilter, setError, setPayloads],
81
+ )
82
+ return [payloads, error, refreshPayloads]
83
+ }
84
+
85
+ export const useArchivistInsert = (payloads: XyoPayload[], required = false): [(XyoPayload | null)[]?, Error?] => {
86
+ const [savedPayloads] = useDataState(payloads)
87
+ const {
88
+ archivist,
89
+ error,
90
+ loadingRef,
91
+ payloads: resultPayloads,
92
+ refresh,
93
+ setError,
94
+ setPayloads: setResultPayloads,
95
+ } = useSharedUseArchivistState(required)
96
+
97
+ useAsyncEffect(
98
+ // eslint-disable-next-line react-hooks/exhaustive-deps
99
+ async (mounted) => {
100
+ try {
101
+ if (archivist && savedPayloads && !loadingRef.current) {
102
+ const wrapper = new XyoArchivistWrapper(archivist)
103
+ loadingRef.current = true
104
+ const result = await wrapper.insert(savedPayloads)
105
+ loadingRef.current = false
106
+ if (mounted()) {
107
+ setError(undefined)
108
+ setResultPayloads(result)
109
+ }
110
+ }
111
+ } catch (ex) {
112
+ loadingRef.current = false
113
+ setError(ex as Error)
114
+ }
115
+ },
116
+ [archivist, loadingRef, refresh, savedPayloads, setError, setResultPayloads],
117
+ )
118
+ return [resultPayloads, error]
119
+ }
120
+
121
+ export const useArchivistAll = (required = false): [(XyoPayload | null)[]?, Error?] => {
14
122
  const { archivist } = useArchivist(required)
15
123
  const [payloads, setPayloads] = useState<XyoPayloads>()
16
124
  const [error, setError] = useState<Error>()
@@ -19,7 +127,7 @@ export const useArchivistGet = (ids?: string[], required = false): [(XyoPayload
19
127
  async (mounted) => {
20
128
  try {
21
129
  const wrapper = archivist ? new XyoArchivistWrapper(archivist) : undefined
22
- const result = (await wrapper?.get(ids ?? [])) ?? []
130
+ const result = await wrapper?.all()
23
131
  if (mounted()) {
24
132
  setError(undefined)
25
133
  setPayloads(result)
@@ -28,12 +136,12 @@ export const useArchivistGet = (ids?: string[], required = false): [(XyoPayload
28
136
  setError(ex as Error)
29
137
  }
30
138
  },
31
- [archivist, ids],
139
+ [archivist],
32
140
  )
33
141
  return [payloads, error]
34
142
  }
35
143
 
36
- export const useArchivistFind = <TFilter extends XyoPayloadFindFilter>(filter: TFilter, required = false): [(XyoPayload | null)[]?, Error?] => {
144
+ export const useArchivistClear = (required = false): [(XyoPayload | null)[]?, Error?] => {
37
145
  const { archivist } = useArchivist(required)
38
146
  const [payloads, setPayloads] = useState<XyoPayloads>()
39
147
  const [error, setError] = useState<Error>()
@@ -42,16 +150,16 @@ export const useArchivistFind = <TFilter extends XyoPayloadFindFilter>(filter: T
42
150
  async (mounted) => {
43
151
  try {
44
152
  const wrapper = archivist ? new XyoArchivistWrapper(archivist) : undefined
45
- const result = await wrapper?.find(filter)
153
+ await wrapper?.clear()
46
154
  if (mounted()) {
47
155
  setError(undefined)
48
- setPayloads(result)
156
+ setPayloads([])
49
157
  }
50
158
  } catch (ex) {
51
159
  setError(ex as Error)
52
160
  }
53
161
  },
54
- [archivist, filter],
162
+ [archivist],
55
163
  )
56
164
  return [payloads, error]
57
165
  }