@xyo-network/react-panel 2.23.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.
Files changed (47) hide show
  1. package/LICENSE +165 -0
  2. package/README.md +69 -0
  3. package/babel.config.json +5 -0
  4. package/dist/cjs/contexts/Context.d.ts +3 -0
  5. package/dist/cjs/contexts/Context.js +6 -0
  6. package/dist/cjs/contexts/Context.js.map +1 -0
  7. package/dist/cjs/contexts/Provider.d.ts +12 -0
  8. package/dist/cjs/contexts/Provider.js +131 -0
  9. package/dist/cjs/contexts/Provider.js.map +1 -0
  10. package/dist/cjs/contexts/State.d.ts +29 -0
  11. package/dist/cjs/contexts/State.js +12 -0
  12. package/dist/cjs/contexts/State.js.map +1 -0
  13. package/dist/cjs/contexts/index.d.ts +4 -0
  14. package/dist/cjs/contexts/index.js +8 -0
  15. package/dist/cjs/contexts/index.js.map +1 -0
  16. package/dist/cjs/contexts/use.d.ts +7 -0
  17. package/dist/cjs/contexts/use.js +11 -0
  18. package/dist/cjs/contexts/use.js.map +1 -0
  19. package/dist/cjs/index.d.ts +1 -0
  20. package/dist/cjs/index.js +5 -0
  21. package/dist/cjs/index.js.map +1 -0
  22. package/dist/docs.json +943 -0
  23. package/dist/esm/contexts/Context.d.ts +3 -0
  24. package/dist/esm/contexts/Context.js +3 -0
  25. package/dist/esm/contexts/Context.js.map +1 -0
  26. package/dist/esm/contexts/Provider.d.ts +12 -0
  27. package/dist/esm/contexts/Provider.js +122 -0
  28. package/dist/esm/contexts/Provider.js.map +1 -0
  29. package/dist/esm/contexts/State.d.ts +29 -0
  30. package/dist/esm/contexts/State.js +9 -0
  31. package/dist/esm/contexts/State.js.map +1 -0
  32. package/dist/esm/contexts/index.d.ts +4 -0
  33. package/dist/esm/contexts/index.js +5 -0
  34. package/dist/esm/contexts/index.js.map +1 -0
  35. package/dist/esm/contexts/use.d.ts +7 -0
  36. package/dist/esm/contexts/use.js +7 -0
  37. package/dist/esm/contexts/use.js.map +1 -0
  38. package/dist/esm/index.d.ts +1 -0
  39. package/dist/esm/index.js +2 -0
  40. package/dist/esm/index.js.map +1 -0
  41. package/package.json +138 -0
  42. package/src/contexts/Context.ts +5 -0
  43. package/src/contexts/Provider.tsx +148 -0
  44. package/src/contexts/State.ts +34 -0
  45. package/src/contexts/index.ts +4 -0
  46. package/src/contexts/use.ts +8 -0
  47. package/src/index.ts +1 -0
@@ -0,0 +1,3 @@
1
+ /// <reference types="react" />
2
+ import { XyoPanelContextState } from './State';
3
+ export declare const XyoPanelContext: import("react").Context<XyoPanelContextState & import("@xyo-network/react-shared").ContextExState>;
@@ -0,0 +1,3 @@
1
+ import { createContextEx } from '@xyo-network/react-shared';
2
+ export const XyoPanelContext = createContextEx();
3
+ //# sourceMappingURL=Context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Context.js","sourceRoot":"","sources":["../../../src/contexts/Context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAI3D,MAAM,CAAC,MAAM,eAAe,GAAG,eAAe,EAAwB,CAAA"}
@@ -0,0 +1,12 @@
1
+ /// <reference types="react" />
2
+ import { WithChildren } from '@xylabs/sdk-react';
3
+ import { XyoArchivistApi } from '@xyo-network/api';
4
+ import { XyoPayload, XyoWitness } from '@xyo-network/core';
5
+ export interface XyoPanelProviderProps {
6
+ archivists?: XyoArchivistApi[];
7
+ inlinePayloads?: boolean;
8
+ witnesses?: XyoWitness<XyoPayload>[];
9
+ required?: boolean;
10
+ archive?: string;
11
+ }
12
+ export declare const XyoPanelProvider: React.FC<WithChildren<XyoPanelProviderProps>>;
@@ -0,0 +1,122 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { assertEx, delay } from '@xylabs/sdk-js';
3
+ import { useAsyncEffect } from '@xylabs/sdk-react';
4
+ import { XyoArchivistApi } from '@xyo-network/api';
5
+ import { XyoPanel } from '@xyo-network/panel';
6
+ import { useArchive } from '@xyo-network/react-archive';
7
+ import { useAccount } from '@xyo-network/react-wallet';
8
+ import { XyoSystemInfoWitness } from '@xyo-network/systeminfo-witness';
9
+ import { useEffect, useState } from 'react';
10
+ import { XyoPanelContext } from './Context';
11
+ import { XyoReportStatus } from './State';
12
+ const getDefaultArchivists = () => {
13
+ const archivistConfigs = [
14
+ {
15
+ apiDomain: process.env.API_DOMAIN || 'https://api.archivist.xyo.network',
16
+ },
17
+ ];
18
+ return archivistConfigs.map((config) => {
19
+ return new XyoArchivistApi(config);
20
+ });
21
+ };
22
+ export const XyoPanelProvider = ({ inlinePayloads = false, required = false, archivists = getDefaultArchivists(), witnesses = [new XyoSystemInfoWitness()], children, }) => {
23
+ const { archive } = useArchive();
24
+ const [panel, setPanel] = useState();
25
+ const [history, setHistory] = useState();
26
+ const [progress, setProgress] = useState({});
27
+ const [status, setStatus] = useState(XyoReportStatus.Idle);
28
+ const [reportingErrors, setReportingErrors] = useState();
29
+ const { account } = useAccount();
30
+ useAsyncEffect(
31
+ // eslint-disable-next-line react-hooks/exhaustive-deps
32
+ async (mounted) => {
33
+ const panel = new XyoPanel({
34
+ account,
35
+ archive,
36
+ archivists,
37
+ inlinePayloads,
38
+ onArchivistSendEnd: (archivist, error) => {
39
+ const archivists = progress.archivists ?? {};
40
+ archivists[archivist.config.apiDomain] = {
41
+ archivist,
42
+ status: error ? XyoReportStatus.Failed : XyoReportStatus.Succeeded,
43
+ };
44
+ if (mounted()) {
45
+ setProgress({ archivists, witnesses: progress.witnesses });
46
+ }
47
+ },
48
+ onArchivistSendStart: (archivist) => {
49
+ const archivists = progress.archivists ?? {};
50
+ archivists[archivist.config.apiDomain] = {
51
+ archivist,
52
+ status: XyoReportStatus.Started,
53
+ };
54
+ if (mounted()) {
55
+ setProgress({ archivists, witnesses: progress.witnesses });
56
+ }
57
+ },
58
+ onHistoryAdd: () => {
59
+ if (mounted()) {
60
+ setHistory(assertEx(panel).history.map((item) => item));
61
+ }
62
+ },
63
+ onHistoryRemove: () => {
64
+ if (mounted()) {
65
+ setHistory(assertEx(panel).history.map((item) => item));
66
+ }
67
+ },
68
+ onReportEnd: (_, errors) => {
69
+ if (mounted()) {
70
+ setProgress({
71
+ archivists: progress.archivists,
72
+ witnesses: progress.witnesses,
73
+ });
74
+ setStatus(errors ? XyoReportStatus.Failed : XyoReportStatus.Succeeded);
75
+ setReportingErrors(errors);
76
+ }
77
+ },
78
+ onReportStart: () => {
79
+ if (mounted()) {
80
+ setProgress({ archivists: {}, witnesses: {} });
81
+ setStatus(XyoReportStatus.Started);
82
+ }
83
+ },
84
+ onWitnessReportEnd: (witness, error) => {
85
+ const witnesses = progress.witnesses ?? {};
86
+ witnesses[witness.config.schema] = {
87
+ status: error ? XyoReportStatus.Failed : XyoReportStatus.Succeeded,
88
+ witness,
89
+ };
90
+ if (mounted()) {
91
+ setProgress({
92
+ archivists: progress.archivists,
93
+ witnesses,
94
+ });
95
+ }
96
+ },
97
+ onWitnessReportStart: (witness) => {
98
+ const witnesses = progress.witnesses ?? {};
99
+ witnesses[witness.config.schema] = {
100
+ status: XyoReportStatus.Started,
101
+ witness,
102
+ };
103
+ if (mounted()) {
104
+ setProgress({
105
+ archivists: progress.archivists,
106
+ witnesses,
107
+ });
108
+ }
109
+ },
110
+ witnesses: witnesses.filter((witness) => !!witness),
111
+ });
112
+ setPanel(panel);
113
+ await delay(0);
114
+ },
115
+ // eslint-disable-next-line react-hooks/exhaustive-deps
116
+ [account, archive, archivists, witnesses]);
117
+ useEffect(() => {
118
+ setHistory(panel?.history);
119
+ }, [panel]);
120
+ return (_jsx(XyoPanelContext.Provider, { value: { history, panel, progress, provided: true, reportingErrors, status }, children: panel ? children : required ? null : children }));
121
+ };
122
+ //# sourceMappingURL=Provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Provider.js","sourceRoot":"","sources":["../../../src/contexts/Provider.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import { XyoArchivistApi } from '@xyo-network/api';
2
+ import { XyoBoundWitness, XyoWitness } from '@xyo-network/core';
3
+ import { XyoPanel } from '@xyo-network/panel';
4
+ export declare enum XyoReportStatus {
5
+ Idle = "idle",
6
+ Queued = "queued",
7
+ Started = "started",
8
+ Succeeded = "succeeded",
9
+ Failed = "failed"
10
+ }
11
+ export interface XyoWitnessReportProgress {
12
+ witness: XyoWitness;
13
+ status: XyoReportStatus;
14
+ }
15
+ export interface XyoArchivistApiReportProgress {
16
+ archivist: XyoArchivistApi;
17
+ status: XyoReportStatus;
18
+ }
19
+ export interface XyoPanelReportProgress {
20
+ witnesses?: Record<string, XyoWitnessReportProgress>;
21
+ archivists?: Record<string, XyoArchivistApiReportProgress>;
22
+ }
23
+ export interface XyoPanelContextState {
24
+ panel?: XyoPanel;
25
+ history?: XyoBoundWitness[];
26
+ progress?: XyoPanelReportProgress;
27
+ status?: XyoReportStatus;
28
+ reportingErrors?: Error[];
29
+ }
@@ -0,0 +1,9 @@
1
+ export var XyoReportStatus;
2
+ (function (XyoReportStatus) {
3
+ XyoReportStatus["Idle"] = "idle";
4
+ XyoReportStatus["Queued"] = "queued";
5
+ XyoReportStatus["Started"] = "started";
6
+ XyoReportStatus["Succeeded"] = "succeeded";
7
+ XyoReportStatus["Failed"] = "failed";
8
+ })(XyoReportStatus || (XyoReportStatus = {}));
9
+ //# sourceMappingURL=State.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"State.js","sourceRoot":"","sources":["../../../src/contexts/State.ts"],"names":[],"mappings":"AAIA,MAAM,CAAN,IAAY,eAMX;AAND,WAAY,eAAe;IACzB,gCAAa,CAAA;IACb,oCAAiB,CAAA;IACjB,sCAAmB,CAAA;IACnB,0CAAuB,CAAA;IACvB,oCAAiB,CAAA;AACnB,CAAC,EANW,eAAe,KAAf,eAAe,QAM1B"}
@@ -0,0 +1,4 @@
1
+ export * from './Context';
2
+ export * from './Provider';
3
+ export * from './State';
4
+ export * from './use';
@@ -0,0 +1,5 @@
1
+ export * from './Context';
2
+ export * from './Provider';
3
+ export * from './State';
4
+ export * from './use';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/contexts/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAA;AACzB,cAAc,YAAY,CAAA;AAC1B,cAAc,SAAS,CAAA;AACvB,cAAc,OAAO,CAAA"}
@@ -0,0 +1,7 @@
1
+ export declare const useXyoPanel: () => {
2
+ history: import("@xyo-network/core/dist/esm/BoundWitness/models/XyoBoundWitness").XyoBoundWitness[] | undefined;
3
+ panel: import("@xyo-network/panel").XyoPanel | undefined;
4
+ progress: import("./State").XyoPanelReportProgress | undefined;
5
+ reportingErrors: Error[] | undefined;
6
+ status: import("./State").XyoReportStatus | undefined;
7
+ };
@@ -0,0 +1,7 @@
1
+ import { useContextEx } from '@xyo-network/react-shared';
2
+ import { XyoPanelContext } from './Context';
3
+ export const useXyoPanel = () => {
4
+ const { panel, history, progress, reportingErrors, status } = useContextEx(XyoPanelContext, 'XyoPanel');
5
+ return { history, panel, progress, reportingErrors, status };
6
+ };
7
+ //# sourceMappingURL=use.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use.js","sourceRoot":"","sources":["../../../src/contexts/use.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAExD,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAE3C,MAAM,CAAC,MAAM,WAAW,GAAG,GAAG,EAAE;IAC9B,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,eAAe,EAAE,UAAU,CAAC,CAAA;IACvG,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,EAAE,CAAA;AAC9D,CAAC,CAAA"}
@@ -0,0 +1 @@
1
+ export * from './contexts';
@@ -0,0 +1,2 @@
1
+ export * from './contexts';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA"}
package/package.json ADDED
@@ -0,0 +1,138 @@
1
+ {
2
+ "name": "@xyo-network/react-panel",
3
+ "author": {
4
+ "email": "support@xyo.network",
5
+ "name": "XYO Development Team",
6
+ "url": "https://xyo.network"
7
+ },
8
+ "bugs": {
9
+ "email": "support@xyo.network",
10
+ "url": "https://github.com/XYOracleNetwork/sdk-xyo-react-js/issues"
11
+ },
12
+ "workspaces": [
13
+ "packages/*"
14
+ ],
15
+ "dependencies": {
16
+ "@emotion/react": "^11.9.0",
17
+ "@emotion/styled": "^11.8.1",
18
+ "@mui/icons-material": "^5.8.0",
19
+ "@mui/lab": "^5.0.0-alpha.83",
20
+ "@mui/material": "^5.8.1",
21
+ "@xylabs/pixel": "^1.3.7",
22
+ "@xylabs/sdk-js": "^2.5.5",
23
+ "@xylabs/sdk-react": "^2.12.7",
24
+ "@xyo-network/api": "^2.20.33",
25
+ "@xyo-network/core": "^2.20.33",
26
+ "@xyo-network/network": "^2.20.33",
27
+ "@xyo-network/panel": "^2.20.33",
28
+ "@xyo-network/react-archive": "^2.23.7",
29
+ "@xyo-network/react-shared": "^2.23.7",
30
+ "@xyo-network/react-wallet": "^2.23.7",
31
+ "@xyo-network/systeminfo-witness": "^2.20.33",
32
+ "@xyo-network/utils": "^2.20.33",
33
+ "lodash": "^4.17.21",
34
+ "luxon": "^2.4.0",
35
+ "react": "^18.1.0",
36
+ "react-dom": "^18.1.0",
37
+ "react-icons": "^4.3.1",
38
+ "react-json-view": "^1.21.3",
39
+ "react-router-dom": "^6.3.0",
40
+ "rollbar": "^2.25.0",
41
+ "typedoc": "^0.22.15"
42
+ },
43
+ "description": "Common React library for all XYO projects that use React",
44
+ "devDependencies": {
45
+ "@babel/core": "^7.18.0",
46
+ "@babel/preset-env": "^7.18.0",
47
+ "@storybook/addon-actions": "^6.5.4",
48
+ "@storybook/addon-docs": "^6.5.4",
49
+ "@storybook/addon-essentials": "^6.5.4",
50
+ "@storybook/addon-interactions": "^6.5.4",
51
+ "@storybook/addon-links": "^6.5.4",
52
+ "@storybook/addons": "^6.5.4",
53
+ "@storybook/api": "^6.5.4",
54
+ "@storybook/builder-webpack5": "^6.5.4",
55
+ "@storybook/components": "^6.5.4",
56
+ "@storybook/core-events": "^6.5.4",
57
+ "@storybook/manager-webpack5": "^6.5.4",
58
+ "@storybook/react": "^6.5.4",
59
+ "@storybook/testing-library": "^0.0.11",
60
+ "@storybook/theming": "^6.5.4",
61
+ "@types/lodash": "^4.14.182",
62
+ "@types/luxon": "^2.3.2",
63
+ "@xylabs/eslint-config-react": "^2.1.5",
64
+ "@xylabs/pixel": "^1.3.7",
65
+ "@xylabs/rollup-config": "^1.1.17",
66
+ "@xylabs/sdk-js": "^2.5.5",
67
+ "@xylabs/sdk-react": "^2.12.7",
68
+ "@xylabs/ts-scripts": "^1.0.66",
69
+ "@xylabs/tsconfig": "^1.0.13",
70
+ "assert": "^2.0.0",
71
+ "axios": "^0.27.2",
72
+ "storybook-dark-mode": "^1.1.0",
73
+ "typescript": "^4.6.4"
74
+ },
75
+ "browser": "dist/esm/index.js",
76
+ "docs": "dist/docs.json",
77
+ "exports": {
78
+ ".": {
79
+ "node": {
80
+ "import": "./dist/esm/index.js",
81
+ "require": "./dist/cjs/index.js"
82
+ },
83
+ "browser": {
84
+ "import": "./dist/esm/index.js",
85
+ "require": "./dist/cjs/index.js"
86
+ },
87
+ "default": "./dist/esm/index.js"
88
+ },
89
+ "./dist/docs.json": {
90
+ "default": "./dist/docs.json"
91
+ },
92
+ "./package.json": "./package.json"
93
+ },
94
+ "main": "dist/cjs/index.js",
95
+ "module": "dist/esm/index.js",
96
+ "homepage": "https://xyo.network",
97
+ "keywords": [
98
+ "xyo",
99
+ "utility",
100
+ "typescript",
101
+ "react"
102
+ ],
103
+ "license": "LGPL-3.0",
104
+ "peerDependencies": {
105
+ "axios": ">0.26",
106
+ "typedoc": "^0.22.13"
107
+ },
108
+ "peerDependenciesMeta": {
109
+ "typedoc": {
110
+ "optional": true
111
+ }
112
+ },
113
+ "resolutions": {
114
+ "@storybook/react/webpack": "^5",
115
+ "bn.js": "^5.2.0",
116
+ "react": "^18.1.0",
117
+ "react-dom": "^18.1.0",
118
+ "webpack": "^5"
119
+ },
120
+ "publishConfig": {
121
+ "access": "public"
122
+ },
123
+ "repository": {
124
+ "type": "git",
125
+ "url": "https://github.com/XYOracleNetwork/sdk-xyo-react-js.git"
126
+ },
127
+ "scripts": {
128
+ "deploy": "yarn deploy3",
129
+ "lint-pkg": "npmPkgJsonLint .",
130
+ "build": "yarn clean && tsc -p tsconfig.build.cjs.json && tsc -p tsconfig.build.esm.json && yarn gen:docs",
131
+ "gen:docs": "typedoc ./src/index.ts --json ./dist/docs.json --tsconfig ./tsconfig.json",
132
+ "license": "yarn license-checker --exclude \"MIT, ISC, Apache-2.0, BSD, BSD-2-Clause, CC-BY-4.0, Unlicense, CC-BY-3.0, CC0-1.0\""
133
+ },
134
+ "sideEffects": false,
135
+ "types": "dist/esm/index.d.ts",
136
+ "version": "2.23.7",
137
+ "packageManager": "yarn@3.1.1"
138
+ }
@@ -0,0 +1,5 @@
1
+ import { createContextEx } from '@xyo-network/react-shared'
2
+
3
+ import { XyoPanelContextState } from './State'
4
+
5
+ export const XyoPanelContext = createContextEx<XyoPanelContextState>()
@@ -0,0 +1,148 @@
1
+ import { assertEx, delay } from '@xylabs/sdk-js'
2
+ import { useAsyncEffect, WithChildren } from '@xylabs/sdk-react'
3
+ import { XyoApiConfig, XyoArchivistApi } from '@xyo-network/api'
4
+ import { XyoBoundWitness, XyoPayload, XyoWitness } from '@xyo-network/core'
5
+ import { XyoPanel } from '@xyo-network/panel'
6
+ import { useArchive } from '@xyo-network/react-archive'
7
+ import { useAccount } from '@xyo-network/react-wallet'
8
+ import { XyoSystemInfoWitness } from '@xyo-network/systeminfo-witness'
9
+ import { useEffect, useState } from 'react'
10
+
11
+ import { XyoPanelContext } from './Context'
12
+ import { XyoPanelReportProgress, XyoReportStatus } from './State'
13
+
14
+ export interface XyoPanelProviderProps {
15
+ archivists?: XyoArchivistApi[]
16
+ inlinePayloads?: boolean
17
+ witnesses?: XyoWitness<XyoPayload>[]
18
+ required?: boolean
19
+ archive?: string
20
+ }
21
+
22
+ const getDefaultArchivists = () => {
23
+ const archivistConfigs: XyoApiConfig[] = [
24
+ {
25
+ apiDomain: process.env.API_DOMAIN || 'https://api.archivist.xyo.network',
26
+ },
27
+ ]
28
+
29
+ return archivistConfigs.map((config) => {
30
+ return new XyoArchivistApi(config)
31
+ })
32
+ }
33
+
34
+ export const XyoPanelProvider: React.FC<WithChildren<XyoPanelProviderProps>> = ({
35
+ inlinePayloads = false,
36
+ required = false,
37
+ archivists = getDefaultArchivists(),
38
+ witnesses = [new XyoSystemInfoWitness()],
39
+ children,
40
+ }) => {
41
+ const { archive } = useArchive()
42
+ const [panel, setPanel] = useState<XyoPanel>()
43
+ const [history, setHistory] = useState<XyoBoundWitness[]>()
44
+ const [progress, setProgress] = useState<XyoPanelReportProgress>({})
45
+ const [status, setStatus] = useState(XyoReportStatus.Idle)
46
+ const [reportingErrors, setReportingErrors] = useState<Error[]>()
47
+
48
+ const { account } = useAccount()
49
+
50
+ useAsyncEffect(
51
+ // eslint-disable-next-line react-hooks/exhaustive-deps
52
+ async (mounted) => {
53
+ const panel = new XyoPanel({
54
+ account,
55
+ archive,
56
+ archivists,
57
+ inlinePayloads,
58
+ onArchivistSendEnd: (archivist: XyoArchivistApi, error?: Error) => {
59
+ const archivists = progress.archivists ?? {}
60
+ archivists[archivist.config.apiDomain] = {
61
+ archivist,
62
+ status: error ? XyoReportStatus.Failed : XyoReportStatus.Succeeded,
63
+ }
64
+ if (mounted()) {
65
+ setProgress({ archivists, witnesses: progress.witnesses })
66
+ }
67
+ },
68
+ onArchivistSendStart: (archivist: XyoArchivistApi) => {
69
+ const archivists = progress.archivists ?? {}
70
+ archivists[archivist.config.apiDomain] = {
71
+ archivist,
72
+ status: XyoReportStatus.Started,
73
+ }
74
+ if (mounted()) {
75
+ setProgress({ archivists, witnesses: progress.witnesses })
76
+ }
77
+ },
78
+ onHistoryAdd: () => {
79
+ if (mounted()) {
80
+ setHistory(assertEx(panel).history.map((item) => item))
81
+ }
82
+ },
83
+ onHistoryRemove: () => {
84
+ if (mounted()) {
85
+ setHistory(assertEx(panel).history.map((item) => item))
86
+ }
87
+ },
88
+ onReportEnd: (_, errors?: Error[]) => {
89
+ if (mounted()) {
90
+ setProgress({
91
+ archivists: progress.archivists,
92
+ witnesses: progress.witnesses,
93
+ })
94
+ setStatus(errors ? XyoReportStatus.Failed : XyoReportStatus.Succeeded)
95
+ setReportingErrors(errors)
96
+ }
97
+ },
98
+ onReportStart: () => {
99
+ if (mounted()) {
100
+ setProgress({ archivists: {}, witnesses: {} })
101
+ setStatus(XyoReportStatus.Started)
102
+ }
103
+ },
104
+ onWitnessReportEnd: (witness: XyoWitness, error?: Error) => {
105
+ const witnesses = progress.witnesses ?? {}
106
+ witnesses[witness.config.schema] = {
107
+ status: error ? XyoReportStatus.Failed : XyoReportStatus.Succeeded,
108
+ witness,
109
+ }
110
+ if (mounted()) {
111
+ setProgress({
112
+ archivists: progress.archivists,
113
+ witnesses,
114
+ })
115
+ }
116
+ },
117
+ onWitnessReportStart: (witness: XyoWitness) => {
118
+ const witnesses = progress.witnesses ?? {}
119
+ witnesses[witness.config.schema] = {
120
+ status: XyoReportStatus.Started,
121
+ witness,
122
+ }
123
+ if (mounted()) {
124
+ setProgress({
125
+ archivists: progress.archivists,
126
+ witnesses,
127
+ })
128
+ }
129
+ },
130
+ witnesses: witnesses.filter((witness) => !!witness),
131
+ })
132
+ setPanel(panel)
133
+ await delay(0)
134
+ },
135
+ // eslint-disable-next-line react-hooks/exhaustive-deps
136
+ [account, archive, archivists, witnesses]
137
+ )
138
+
139
+ useEffect(() => {
140
+ setHistory(panel?.history)
141
+ }, [panel])
142
+
143
+ return (
144
+ <XyoPanelContext.Provider value={{ history, panel, progress, provided: true, reportingErrors, status }}>
145
+ {panel ? children : required ? null : children}
146
+ </XyoPanelContext.Provider>
147
+ )
148
+ }
@@ -0,0 +1,34 @@
1
+ import { XyoArchivistApi } from '@xyo-network/api'
2
+ import { XyoBoundWitness, XyoWitness } from '@xyo-network/core'
3
+ import { XyoPanel } from '@xyo-network/panel'
4
+
5
+ export enum XyoReportStatus {
6
+ Idle = 'idle',
7
+ Queued = 'queued',
8
+ Started = 'started',
9
+ Succeeded = 'succeeded',
10
+ Failed = 'failed',
11
+ }
12
+
13
+ export interface XyoWitnessReportProgress {
14
+ witness: XyoWitness
15
+ status: XyoReportStatus
16
+ }
17
+
18
+ export interface XyoArchivistApiReportProgress {
19
+ archivist: XyoArchivistApi
20
+ status: XyoReportStatus
21
+ }
22
+
23
+ export interface XyoPanelReportProgress {
24
+ witnesses?: Record<string, XyoWitnessReportProgress>
25
+ archivists?: Record<string, XyoArchivistApiReportProgress>
26
+ }
27
+
28
+ export interface XyoPanelContextState {
29
+ panel?: XyoPanel
30
+ history?: XyoBoundWitness[]
31
+ progress?: XyoPanelReportProgress
32
+ status?: XyoReportStatus
33
+ reportingErrors?: Error[]
34
+ }
@@ -0,0 +1,4 @@
1
+ export * from './Context'
2
+ export * from './Provider'
3
+ export * from './State'
4
+ export * from './use'
@@ -0,0 +1,8 @@
1
+ import { useContextEx } from '@xyo-network/react-shared'
2
+
3
+ import { XyoPanelContext } from './Context'
4
+
5
+ export const useXyoPanel = () => {
6
+ const { panel, history, progress, reportingErrors, status } = useContextEx(XyoPanelContext, 'XyoPanel')
7
+ return { history, panel, progress, reportingErrors, status }
8
+ }
package/src/index.ts ADDED
@@ -0,0 +1 @@
1
+ export * from './contexts'