@xyo-network/react-archivist 2.38.0-rc.5 → 2.38.0-rc.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/contexts/use.d.ts +7 -2
- package/dist/cjs/contexts/use.d.ts.map +1 -1
- package/dist/cjs/contexts/use.js +96 -10
- package/dist/cjs/contexts/use.js.map +1 -1
- package/dist/docs.json +405 -41
- package/dist/esm/contexts/use.d.ts +7 -2
- package/dist/esm/contexts/use.d.ts.map +1 -1
- package/dist/esm/contexts/use.js +90 -7
- package/dist/esm/contexts/use.js.map +1 -1
- package/package.json +7 -6
- package/src/contexts/story/ArchivistHooks.stories.tsx +44 -0
- package/src/contexts/story/ArchivistPayloads.stories.tsx +31 -0
- package/src/contexts/story/WithArchivistProviders.stories.tsx +28 -0
- package/src/contexts/use.ts +115 -8
|
@@ -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 | null)[]?, 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;
|
|
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,CAAC,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,eAAe,CAAC,CAyBnD,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"}
|
package/dist/esm/contexts/use.js
CHANGED
|
@@ -1,12 +1,95 @@
|
|
|
1
1
|
import { useAsyncEffect } from '@xylabs/react-shared';
|
|
2
2
|
import { XyoArchivistWrapper } from '@xyo-network/archivist';
|
|
3
|
-
import { useContextEx } from '@xyo-network/react-shared';
|
|
3
|
+
import { useContextEx, useDataState } from '@xyo-network/react-shared';
|
|
4
4
|
import { 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 [inFlight, setInFlight] = useState(false);
|
|
15
|
+
const refreshPayloads = () => setRefresh((previous) => previous + 1);
|
|
16
|
+
return { archivist, error, inFlight, payloads, refresh, refreshPayloads, setError, setInFlight, setPayloads };
|
|
17
|
+
};
|
|
9
18
|
export const useArchivistGet = (ids, required = false) => {
|
|
19
|
+
const [savedIds] = useDataState(ids);
|
|
20
|
+
const { archivist, error, inFlight, payloads, refresh, setError, setInFlight, setPayloads, refreshPayloads } = useSharedUseArchivistState(required);
|
|
21
|
+
useAsyncEffect(
|
|
22
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
23
|
+
async (mounted) => {
|
|
24
|
+
try {
|
|
25
|
+
if (archivist && !inFlight && savedIds) {
|
|
26
|
+
const wrapper = new XyoArchivistWrapper(archivist);
|
|
27
|
+
const result = (await wrapper?.get(savedIds ?? [])) ?? [];
|
|
28
|
+
setInFlight(true);
|
|
29
|
+
if (mounted()) {
|
|
30
|
+
setError(undefined);
|
|
31
|
+
setPayloads(result);
|
|
32
|
+
setInFlight(false);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
catch (ex) {
|
|
37
|
+
setError(ex);
|
|
38
|
+
setInFlight(false);
|
|
39
|
+
}
|
|
40
|
+
}, [archivist, savedIds, refresh, inFlight, setInFlight, setError, setPayloads]);
|
|
41
|
+
return [payloads, error, refreshPayloads];
|
|
42
|
+
};
|
|
43
|
+
export const useArchivistFind = (filter, required = false) => {
|
|
44
|
+
const [savedFilter] = useDataState(filter);
|
|
45
|
+
const { archivist, error, inFlight, payloads, refresh, setError, setInFlight, setPayloads, refreshPayloads } = useSharedUseArchivistState(required);
|
|
46
|
+
useAsyncEffect(
|
|
47
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
48
|
+
async (mounted) => {
|
|
49
|
+
try {
|
|
50
|
+
if (archivist && !inFlight && savedFilter) {
|
|
51
|
+
const wrapper = new XyoArchivistWrapper(archivist);
|
|
52
|
+
const result = await wrapper?.find(savedFilter);
|
|
53
|
+
setInFlight(true);
|
|
54
|
+
if (mounted()) {
|
|
55
|
+
setError(undefined);
|
|
56
|
+
setPayloads(result);
|
|
57
|
+
setInFlight(false);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
catch (ex) {
|
|
62
|
+
setError(ex);
|
|
63
|
+
setInFlight(false);
|
|
64
|
+
}
|
|
65
|
+
}, [archivist, inFlight, refresh, savedFilter, setError, setInFlight, setPayloads]);
|
|
66
|
+
return [payloads, error, refreshPayloads];
|
|
67
|
+
};
|
|
68
|
+
export const useArchivistInsert = (payloads, required = false) => {
|
|
69
|
+
const [savedPayloads] = useDataState(payloads);
|
|
70
|
+
const { archivist, error, inFlight, payloads: resultPayloads, refresh, setError, setInFlight, setPayloads: setResultPayloads, } = useSharedUseArchivistState(required);
|
|
71
|
+
useAsyncEffect(
|
|
72
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
73
|
+
async (mounted) => {
|
|
74
|
+
try {
|
|
75
|
+
if (archivist && !inFlight && savedPayloads) {
|
|
76
|
+
const wrapper = new XyoArchivistWrapper(archivist);
|
|
77
|
+
const result = await wrapper.insert(savedPayloads);
|
|
78
|
+
setInFlight(true);
|
|
79
|
+
if (mounted()) {
|
|
80
|
+
setError(undefined);
|
|
81
|
+
setResultPayloads(result);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
catch (ex) {
|
|
86
|
+
setError(ex);
|
|
87
|
+
setInFlight(true);
|
|
88
|
+
}
|
|
89
|
+
}, [archivist, inFlight, refresh, savedPayloads, setError, setInFlight, setResultPayloads]);
|
|
90
|
+
return [resultPayloads, error];
|
|
91
|
+
};
|
|
92
|
+
export const useArchivistAll = (required = false) => {
|
|
10
93
|
const { archivist } = useArchivist(required);
|
|
11
94
|
const [payloads, setPayloads] = useState();
|
|
12
95
|
const [error, setError] = useState();
|
|
@@ -15,7 +98,7 @@ export const useArchivistGet = (ids, required = false) => {
|
|
|
15
98
|
async (mounted) => {
|
|
16
99
|
try {
|
|
17
100
|
const wrapper = archivist ? new XyoArchivistWrapper(archivist) : undefined;
|
|
18
|
-
const result =
|
|
101
|
+
const result = await wrapper?.all();
|
|
19
102
|
if (mounted()) {
|
|
20
103
|
setError(undefined);
|
|
21
104
|
setPayloads(result);
|
|
@@ -24,10 +107,10 @@ export const useArchivistGet = (ids, required = false) => {
|
|
|
24
107
|
catch (ex) {
|
|
25
108
|
setError(ex);
|
|
26
109
|
}
|
|
27
|
-
}, [archivist
|
|
110
|
+
}, [archivist]);
|
|
28
111
|
return [payloads, error];
|
|
29
112
|
};
|
|
30
|
-
export const
|
|
113
|
+
export const useArchivistClear = (required = false) => {
|
|
31
114
|
const { archivist } = useArchivist(required);
|
|
32
115
|
const [payloads, setPayloads] = useState();
|
|
33
116
|
const [error, setError] = useState();
|
|
@@ -36,16 +119,16 @@ export const useArchivistFind = (filter, required = false) => {
|
|
|
36
119
|
async (mounted) => {
|
|
37
120
|
try {
|
|
38
121
|
const wrapper = archivist ? new XyoArchivistWrapper(archivist) : undefined;
|
|
39
|
-
|
|
122
|
+
await wrapper?.clear();
|
|
40
123
|
if (mounted()) {
|
|
41
124
|
setError(undefined);
|
|
42
|
-
setPayloads(
|
|
125
|
+
setPayloads([]);
|
|
43
126
|
}
|
|
44
127
|
}
|
|
45
128
|
catch (ex) {
|
|
46
129
|
setError(ex);
|
|
47
130
|
}
|
|
48
|
-
}, [archivist
|
|
131
|
+
}, [archivist]);
|
|
49
132
|
return [payloads, error];
|
|
50
133
|
};
|
|
51
134
|
//# 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;
|
|
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.
|
|
17
|
-
"@xyo-network/react-shared": "^2.38.0-rc.
|
|
16
|
+
"@xyo-network/module": "^2.38.0-rc.12",
|
|
17
|
+
"@xyo-network/react-shared": "^2.38.0-rc.7",
|
|
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.
|
|
33
|
-
"@xyo-network/archivist": "^2.38.0-rc.
|
|
34
|
-
"@xyo-network/payload": "^2.38.0-rc.
|
|
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.7"
|
|
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.
|
|
79
|
+
"version": "2.38.0-rc.7",
|
|
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
|
+
}
|
package/src/contexts/use.ts
CHANGED
|
@@ -1,16 +1,123 @@
|
|
|
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'
|
|
4
|
+
import { useContextEx, useDataState } from '@xyo-network/react-shared'
|
|
5
5
|
import { 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
|
-
|
|
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 [inFlight, setInFlight] = useState(false)
|
|
21
|
+
const refreshPayloads = () => setRefresh((previous) => previous + 1)
|
|
22
|
+
|
|
23
|
+
return { archivist, error, inFlight, payloads, refresh, refreshPayloads, setError, setInFlight, setPayloads }
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export const useArchivistGet = (ids?: string[], required = false): [(XyoPayload | null)[]?, Error?, RefreshCallback?] => {
|
|
27
|
+
const [savedIds] = useDataState(ids)
|
|
28
|
+
const { archivist, error, inFlight, payloads, refresh, setError, setInFlight, setPayloads, refreshPayloads } = useSharedUseArchivistState(required)
|
|
29
|
+
|
|
30
|
+
useAsyncEffect(
|
|
31
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
32
|
+
async (mounted) => {
|
|
33
|
+
try {
|
|
34
|
+
if (archivist && !inFlight && savedIds) {
|
|
35
|
+
const wrapper = new XyoArchivistWrapper(archivist)
|
|
36
|
+
const result = (await wrapper?.get(savedIds ?? [])) ?? []
|
|
37
|
+
setInFlight(true)
|
|
38
|
+
if (mounted()) {
|
|
39
|
+
setError(undefined)
|
|
40
|
+
setPayloads(result)
|
|
41
|
+
setInFlight(false)
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
} catch (ex) {
|
|
45
|
+
setError(ex as Error)
|
|
46
|
+
setInFlight(false)
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
[archivist, savedIds, refresh, inFlight, setInFlight, setError, setPayloads],
|
|
50
|
+
)
|
|
51
|
+
return [payloads, error, refreshPayloads]
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export const useArchivistFind = <TFilter extends XyoPayloadFindFilter>(
|
|
55
|
+
filter: TFilter,
|
|
56
|
+
required = false,
|
|
57
|
+
): [(XyoPayload | null)[]?, Error?, RefreshCallback?] => {
|
|
58
|
+
const [savedFilter] = useDataState(filter)
|
|
59
|
+
const { archivist, error, inFlight, payloads, refresh, setError, setInFlight, setPayloads, refreshPayloads } = useSharedUseArchivistState(required)
|
|
60
|
+
useAsyncEffect(
|
|
61
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
62
|
+
async (mounted) => {
|
|
63
|
+
try {
|
|
64
|
+
if (archivist && !inFlight && savedFilter) {
|
|
65
|
+
const wrapper = new XyoArchivistWrapper(archivist)
|
|
66
|
+
const result = await wrapper?.find(savedFilter)
|
|
67
|
+
setInFlight(true)
|
|
68
|
+
if (mounted()) {
|
|
69
|
+
setError(undefined)
|
|
70
|
+
setPayloads(result)
|
|
71
|
+
setInFlight(false)
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
} catch (ex) {
|
|
75
|
+
setError(ex as Error)
|
|
76
|
+
setInFlight(false)
|
|
77
|
+
}
|
|
78
|
+
},
|
|
79
|
+
[archivist, inFlight, refresh, savedFilter, setError, setInFlight, setPayloads],
|
|
80
|
+
)
|
|
81
|
+
return [payloads, error, refreshPayloads]
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
export const useArchivistInsert = (payloads: XyoPayload[], required = false): [(XyoPayload | null)[]?, Error?] => {
|
|
85
|
+
const [savedPayloads] = useDataState(payloads)
|
|
86
|
+
const {
|
|
87
|
+
archivist,
|
|
88
|
+
error,
|
|
89
|
+
inFlight,
|
|
90
|
+
payloads: resultPayloads,
|
|
91
|
+
refresh,
|
|
92
|
+
setError,
|
|
93
|
+
setInFlight,
|
|
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 && !inFlight && savedPayloads) {
|
|
102
|
+
const wrapper = new XyoArchivistWrapper(archivist)
|
|
103
|
+
const result = await wrapper.insert(savedPayloads)
|
|
104
|
+
setInFlight(true)
|
|
105
|
+
if (mounted()) {
|
|
106
|
+
setError(undefined)
|
|
107
|
+
setResultPayloads(result)
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
} catch (ex) {
|
|
111
|
+
setError(ex as Error)
|
|
112
|
+
setInFlight(true)
|
|
113
|
+
}
|
|
114
|
+
},
|
|
115
|
+
[archivist, inFlight, refresh, savedPayloads, setError, setInFlight, setResultPayloads],
|
|
116
|
+
)
|
|
117
|
+
return [resultPayloads, error]
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
export const useArchivistAll = (required = false): [(XyoPayload | null)[]?, Error?] => {
|
|
14
121
|
const { archivist } = useArchivist(required)
|
|
15
122
|
const [payloads, setPayloads] = useState<XyoPayloads>()
|
|
16
123
|
const [error, setError] = useState<Error>()
|
|
@@ -19,7 +126,7 @@ export const useArchivistGet = (ids?: string[], required = false): [(XyoPayload
|
|
|
19
126
|
async (mounted) => {
|
|
20
127
|
try {
|
|
21
128
|
const wrapper = archivist ? new XyoArchivistWrapper(archivist) : undefined
|
|
22
|
-
const result =
|
|
129
|
+
const result = await wrapper?.all()
|
|
23
130
|
if (mounted()) {
|
|
24
131
|
setError(undefined)
|
|
25
132
|
setPayloads(result)
|
|
@@ -28,12 +135,12 @@ export const useArchivistGet = (ids?: string[], required = false): [(XyoPayload
|
|
|
28
135
|
setError(ex as Error)
|
|
29
136
|
}
|
|
30
137
|
},
|
|
31
|
-
[archivist
|
|
138
|
+
[archivist],
|
|
32
139
|
)
|
|
33
140
|
return [payloads, error]
|
|
34
141
|
}
|
|
35
142
|
|
|
36
|
-
export const
|
|
143
|
+
export const useArchivistClear = (required = false): [(XyoPayload | null)[]?, Error?] => {
|
|
37
144
|
const { archivist } = useArchivist(required)
|
|
38
145
|
const [payloads, setPayloads] = useState<XyoPayloads>()
|
|
39
146
|
const [error, setError] = useState<Error>()
|
|
@@ -42,16 +149,16 @@ export const useArchivistFind = <TFilter extends XyoPayloadFindFilter>(filter: T
|
|
|
42
149
|
async (mounted) => {
|
|
43
150
|
try {
|
|
44
151
|
const wrapper = archivist ? new XyoArchivistWrapper(archivist) : undefined
|
|
45
|
-
|
|
152
|
+
await wrapper?.clear()
|
|
46
153
|
if (mounted()) {
|
|
47
154
|
setError(undefined)
|
|
48
|
-
setPayloads(
|
|
155
|
+
setPayloads([])
|
|
49
156
|
}
|
|
50
157
|
} catch (ex) {
|
|
51
158
|
setError(ex as Error)
|
|
52
159
|
}
|
|
53
160
|
},
|
|
54
|
-
[archivist
|
|
161
|
+
[archivist],
|
|
55
162
|
)
|
|
56
163
|
return [payloads, error]
|
|
57
164
|
}
|