@dxos/react-client 0.6.14-main.7bd9c89 → 0.6.14-staging.934c9de
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/lib/browser/{chunk-GSDDO2LE.mjs → chunk-U6WOCCWH.mjs} +9 -9
- package/dist/lib/browser/{chunk-GSDDO2LE.mjs.map → chunk-U6WOCCWH.mjs.map} +2 -2
- package/dist/lib/browser/devtools/index.mjs +1 -1
- package/dist/lib/browser/echo/index.mjs +1 -1
- package/dist/lib/browser/halo/index.mjs +1 -1
- package/dist/lib/browser/index.mjs +1 -1
- package/dist/lib/browser/mesh/index.mjs +1 -1
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/testing/index.mjs +62 -12
- package/dist/lib/browser/testing/index.mjs.map +3 -3
- package/dist/lib/node/{chunk-WR4BVOQQ.cjs → chunk-BYDG3FH4.cjs} +12 -12
- package/dist/lib/node/{chunk-WR4BVOQQ.cjs.map → chunk-BYDG3FH4.cjs.map} +2 -2
- package/dist/lib/node/devtools/index.cjs +2 -2
- package/dist/lib/node/echo/index.cjs +3 -3
- package/dist/lib/node/halo/index.cjs +5 -5
- package/dist/lib/node/index.cjs +12 -12
- package/dist/lib/node/mesh/index.cjs +2 -2
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node/testing/index.cjs +63 -12
- package/dist/lib/node/testing/index.cjs.map +3 -3
- package/dist/lib/node-esm/{chunk-LPOLSASZ.mjs → chunk-E5UAY5Z4.mjs} +9 -9
- package/dist/lib/node-esm/{chunk-LPOLSASZ.mjs.map → chunk-E5UAY5Z4.mjs.map} +2 -2
- package/dist/lib/node-esm/devtools/index.mjs +1 -1
- package/dist/lib/node-esm/echo/index.mjs +1 -1
- package/dist/lib/node-esm/halo/index.mjs +1 -1
- package/dist/lib/node-esm/index.mjs +1 -1
- package/dist/lib/node-esm/mesh/index.mjs +1 -1
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/testing/index.mjs +62 -12
- package/dist/lib/node-esm/testing/index.mjs.map +3 -3
- package/dist/types/src/client/ClientProvider.d.ts +0 -4
- package/dist/types/src/client/ClientProvider.d.ts.map +1 -1
- package/dist/types/src/testing/withClientProvider.d.ts +3 -0
- package/dist/types/src/testing/withClientProvider.d.ts.map +1 -1
- package/package.json +40 -63
- package/src/client/ClientProvider.tsx +1 -3
- package/src/playwright/smoke.spec.ts +1 -1
- package/src/testing/withClientProvider.tsx +37 -10
- package/tsconfig.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClientProvider.d.ts","sourceRoot":"","sources":["../../../../src/client/ClientProvider.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"ClientProvider.d.ts","sourceRoot":"","sources":["../../../../src/client/ClientProvider.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,EAEZ,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EAIvB,MAAM,OAAO,CAAC;AAEf,OAAO,EAAE,MAAM,EAAE,KAAK,aAAa,EAAE,KAAK,sBAAsB,EAAgB,MAAM,cAAc,CAAC;AACrG,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,cAAc,CAAC;AAI3C,OAAO,EAAyB,KAAK,YAAY,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,CAAC;AAErF,OAAO,EAAiB,KAAK,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAGnE;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG,IAAI,CAAC,aAAa,EAAE,QAAQ,GAAG,UAAU,CAAC,GAC1E,IAAI,CAAC,kBAAkB,EAAE,QAAQ,CAAC,GAClC,iBAAiB,CAAC;IAChB;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IAE5C;;;;OAIG;IAEH,MAAM,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IAE5C;;;;OAIG;IAEH,QAAQ,CAAC,EAAE,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,KAAK,YAAY,CAAC,sBAAsB,CAAC,CAAC,CAAC;IAEhG;;OAEG;IACH,QAAQ,CAAC,EAAE,iBAAiB,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAE1D;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB;;OAEG;IACH,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,YAAY,CAAC,IAAI,CAAC,CAAC;CACxD,CAAC,CAAC;AAEL;;;GAGG;AACH,eAAO,MAAM,cAAc;IAjDvB;;;;OAIG;aACM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAE3C;;;;OAIG;aAEM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAE3C;;;;OAIG;eAEQ,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,KAAK,YAAY,CAAC,sBAAsB,CAAC,CAAC;IAE/F;;OAEG;eACQ,iBAAiB,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAEzD;;;OAGG;qBACc,OAAO;IAExB;;OAEG;eACQ,OAAO;IAElB;;OAEG;oBACa,CAAC,MAAM,EAAE,MAAM,KAAK,YAAY,CAAC,IAAI,CAAC;;;4CA4GzD,CAAC"}
|
|
@@ -19,6 +19,9 @@ export declare const withClientProvider: ({ createIdentity, createSpace, onSpace
|
|
|
19
19
|
export type WithMultiClientProviderProps = InitializeProps & ClientProviderProps & {
|
|
20
20
|
numClients?: number;
|
|
21
21
|
};
|
|
22
|
+
export declare const useMultiClient: () => {
|
|
23
|
+
id: number;
|
|
24
|
+
};
|
|
22
25
|
/**
|
|
23
26
|
* Decorator that creates a scaffold for multiple clients.
|
|
24
27
|
* Orchestrates invitations between a randomly selected host and the remaining clients.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"withClientProvider.d.ts","sourceRoot":"","sources":["../../../../src/testing/withClientProvider.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAKlD,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"withClientProvider.d.ts","sourceRoot":"","sources":["../../../../src/testing/withClientProvider.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAKlD,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAG/C,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,OAAO,EAAkB,KAAK,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAErE,KAAK,eAAe,GAAG;IACrB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,KAAK,CAAA;KAAE,KAAK,YAAY,CAAC,IAAI,CAAC,CAAC;CAClF,CAAC;AA8BF,MAAM,MAAM,uBAAuB,GAAG,eAAe,GAAG,mBAAmB,CAAC;AAE5E;;GAEG;AACH,eAAO,MAAM,kBAAkB,8EAM5B,uBAAuB,KAAQ,SAcjC,CAAC;AAKF,MAAM,MAAM,4BAA4B,GAAG,eAAe,GAAG,mBAAmB,GAAG;IAAE,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAI3G,eAAO,MAAM,cAAc;QAFoB,MAAM;CAEa,CAAC;AAEnE;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,yFAOjC,4BAA4B,KAAG,SA2CjC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,75 +1,52 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dxos/react-client",
|
|
3
|
-
"version": "0.6.14-
|
|
3
|
+
"version": "0.6.14-staging.934c9de",
|
|
4
4
|
"description": "React client API",
|
|
5
5
|
"homepage": "https://dxos.org",
|
|
6
6
|
"bugs": "https://github.com/dxos/dxos/issues",
|
|
7
7
|
"license": "MIT",
|
|
8
8
|
"author": "DXOS.org",
|
|
9
|
+
"sideEffects": true,
|
|
9
10
|
"exports": {
|
|
10
11
|
"./devtools": {
|
|
12
|
+
"types": "./dist/types/src/devtools/index.d.ts",
|
|
11
13
|
"browser": "./dist/lib/browser/devtools/index.mjs",
|
|
12
|
-
"node":
|
|
13
|
-
"require": "./dist/lib/node/devtools/index.cjs",
|
|
14
|
-
"default": "./dist/lib/node-esm/devtools/index.mjs"
|
|
15
|
-
},
|
|
16
|
-
"types": "./dist/types/src/devtools/index.d.ts"
|
|
14
|
+
"node": "./dist/lib/node-esm/devtools/index.mjs"
|
|
17
15
|
},
|
|
18
16
|
"./echo": {
|
|
17
|
+
"types": "./dist/types/src/echo/index.d.ts",
|
|
19
18
|
"browser": "./dist/lib/browser/echo/index.mjs",
|
|
20
|
-
"node":
|
|
21
|
-
"require": "./dist/lib/node/echo/index.cjs",
|
|
22
|
-
"default": "./dist/lib/node-esm/echo/index.mjs"
|
|
23
|
-
},
|
|
24
|
-
"types": "./dist/types/src/echo/index.d.ts"
|
|
19
|
+
"node": "./dist/lib/node-esm/echo/index.mjs"
|
|
25
20
|
},
|
|
26
21
|
"./halo": {
|
|
22
|
+
"types": "./dist/types/src/halo/index.d.ts",
|
|
27
23
|
"browser": "./dist/lib/browser/halo/index.mjs",
|
|
28
|
-
"node":
|
|
29
|
-
"require": "./dist/lib/node/halo/index.cjs",
|
|
30
|
-
"default": "./dist/lib/node-esm/halo/index.mjs"
|
|
31
|
-
},
|
|
32
|
-
"types": "./dist/types/src/halo/index.d.ts"
|
|
24
|
+
"node": "./dist/lib/node-esm/halo/index.mjs"
|
|
33
25
|
},
|
|
34
26
|
".": {
|
|
27
|
+
"types": "./dist/types/src/index.d.ts",
|
|
35
28
|
"browser": "./dist/lib/browser/index.mjs",
|
|
36
|
-
"node":
|
|
37
|
-
"require": "./dist/lib/node/index.cjs",
|
|
38
|
-
"default": "./dist/lib/node-esm/index.mjs"
|
|
39
|
-
},
|
|
40
|
-
"types": "./dist/types/src/index.d.ts"
|
|
29
|
+
"node": "./dist/lib/node-esm/index.mjs"
|
|
41
30
|
},
|
|
42
31
|
"./invitations": {
|
|
32
|
+
"types": "./dist/types/src/invitations/index.d.ts",
|
|
43
33
|
"browser": "./dist/lib/browser/invitations/index.mjs",
|
|
44
|
-
"node":
|
|
45
|
-
"require": "./dist/lib/node/invitations/index.cjs",
|
|
46
|
-
"default": "./dist/lib/node-esm/invitations/index.mjs"
|
|
47
|
-
},
|
|
48
|
-
"types": "./dist/types/src/invitations/index.d.ts"
|
|
34
|
+
"node": "./dist/lib/node-esm/invitations/index.mjs"
|
|
49
35
|
},
|
|
50
36
|
"./mesh": {
|
|
37
|
+
"types": "./dist/types/src/mesh/index.d.ts",
|
|
51
38
|
"browser": "./dist/lib/browser/mesh/index.mjs",
|
|
52
|
-
"node":
|
|
53
|
-
"require": "./dist/lib/node/mesh/index.cjs",
|
|
54
|
-
"default": "./dist/lib/node-esm/mesh/index.mjs"
|
|
55
|
-
},
|
|
56
|
-
"types": "./dist/types/src/mesh/index.d.ts"
|
|
39
|
+
"node": "./dist/lib/node-esm/mesh/index.mjs"
|
|
57
40
|
},
|
|
58
41
|
"./testing": {
|
|
42
|
+
"types": "./dist/types/src/testing/index.d.ts",
|
|
59
43
|
"browser": "./dist/lib/browser/testing/index.mjs",
|
|
60
|
-
"node":
|
|
61
|
-
"require": "./dist/lib/node/testing/index.cjs",
|
|
62
|
-
"default": "./dist/lib/node-esm/testing/index.mjs"
|
|
63
|
-
},
|
|
64
|
-
"types": "./dist/types/src/testing/index.d.ts"
|
|
44
|
+
"node": "./dist/lib/node-esm/testing/index.mjs"
|
|
65
45
|
},
|
|
66
46
|
"./worker": {
|
|
47
|
+
"types": "./dist/types/src/worker.d.ts",
|
|
67
48
|
"browser": "./dist/lib/browser/worker.mjs",
|
|
68
|
-
"node":
|
|
69
|
-
"require": "./dist/lib/node/worker.cjs",
|
|
70
|
-
"default": "./dist/lib/node-esm/worker.mjs"
|
|
71
|
-
},
|
|
72
|
-
"types": "./dist/types/src/worker.d.ts"
|
|
49
|
+
"node": "./dist/lib/node-esm/worker.mjs"
|
|
73
50
|
}
|
|
74
51
|
},
|
|
75
52
|
"types": "dist/types/src/index.d.ts",
|
|
@@ -100,40 +77,40 @@
|
|
|
100
77
|
},
|
|
101
78
|
"dependencies": {
|
|
102
79
|
"react-error-boundary": "^4.0.13",
|
|
103
|
-
"@dxos/
|
|
104
|
-
"@dxos/
|
|
105
|
-
"@dxos/codec-protobuf": "0.6.14-
|
|
106
|
-
"@dxos/
|
|
107
|
-
"@dxos/
|
|
108
|
-
"@dxos/echo-
|
|
109
|
-
"@dxos/
|
|
110
|
-
"@dxos/
|
|
111
|
-
"@dxos/log": "0.6.14-
|
|
112
|
-
"@dxos/
|
|
113
|
-
"@dxos/
|
|
114
|
-
"@dxos/react-hooks": "0.6.14-
|
|
115
|
-
"@dxos/util": "0.6.14-
|
|
80
|
+
"@dxos/async": "0.6.14-staging.934c9de",
|
|
81
|
+
"@dxos/client": "0.6.14-staging.934c9de",
|
|
82
|
+
"@dxos/codec-protobuf": "0.6.14-staging.934c9de",
|
|
83
|
+
"@dxos/config": "0.6.14-staging.934c9de",
|
|
84
|
+
"@dxos/debug": "0.6.14-staging.934c9de",
|
|
85
|
+
"@dxos/echo-schema": "0.6.14-staging.934c9de",
|
|
86
|
+
"@dxos/echo-signals": "0.6.14-staging.934c9de",
|
|
87
|
+
"@dxos/invariant": "0.6.14-staging.934c9de",
|
|
88
|
+
"@dxos/log": "0.6.14-staging.934c9de",
|
|
89
|
+
"@dxos/protocols": "0.6.14-staging.934c9de",
|
|
90
|
+
"@dxos/node-std": "0.6.14-staging.934c9de",
|
|
91
|
+
"@dxos/react-hooks": "0.6.14-staging.934c9de",
|
|
92
|
+
"@dxos/util": "0.6.14-staging.934c9de"
|
|
116
93
|
},
|
|
117
94
|
"devDependencies": {
|
|
118
95
|
"@types/react": "~18.2.0",
|
|
119
96
|
"@types/react-dom": "~18.2.0",
|
|
120
97
|
"react": "~18.2.0",
|
|
121
98
|
"react-dom": "~18.2.0",
|
|
122
|
-
"@dxos/
|
|
123
|
-
"@dxos/react-ui": "0.6.14-
|
|
124
|
-
"@dxos/
|
|
125
|
-
"@dxos/react-ui-theme": "0.6.14-
|
|
126
|
-
"@dxos/
|
|
127
|
-
"@dxos/
|
|
99
|
+
"@dxos/react-ui": "0.6.14-staging.934c9de",
|
|
100
|
+
"@dxos/react-ui-syntax-highlighter": "0.6.14-staging.934c9de",
|
|
101
|
+
"@dxos/random": "0.6.14-staging.934c9de",
|
|
102
|
+
"@dxos/react-ui-theme": "0.6.14-staging.934c9de",
|
|
103
|
+
"@dxos/storybook-utils": "0.6.14-staging.934c9de",
|
|
104
|
+
"@dxos/test-utils": "0.6.14-staging.934c9de"
|
|
128
105
|
},
|
|
129
106
|
"peerDependencies": {
|
|
130
107
|
"react": "~18.2.0",
|
|
131
108
|
"react-dom": "~18.2.0",
|
|
132
|
-
"@dxos/react-ui": "0.6.14-
|
|
133
|
-
"@dxos/react-ui-theme": "0.6.14-
|
|
109
|
+
"@dxos/react-ui": "0.6.14-staging.934c9de",
|
|
110
|
+
"@dxos/react-ui-theme": "0.6.14-staging.934c9de"
|
|
134
111
|
},
|
|
135
112
|
"optionalDependencies": {
|
|
136
|
-
"@dxos/random": "0.6.14-
|
|
113
|
+
"@dxos/random": "0.6.14-staging.934c9de"
|
|
137
114
|
},
|
|
138
115
|
"publishConfig": {
|
|
139
116
|
"access": "public"
|
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
//
|
|
4
4
|
|
|
5
5
|
import React, {
|
|
6
|
+
forwardRef,
|
|
6
7
|
type FunctionComponent,
|
|
7
8
|
type PropsWithChildren,
|
|
8
|
-
forwardRef,
|
|
9
9
|
useEffect,
|
|
10
10
|
useImperativeHandle,
|
|
11
11
|
useState,
|
|
@@ -68,8 +68,6 @@ export type ClientProviderProps = Omit<ClientOptions, 'config' | 'services'> &
|
|
|
68
68
|
|
|
69
69
|
/**
|
|
70
70
|
* Post initialization hook to enable to caller to do custom initialization.
|
|
71
|
-
*
|
|
72
|
-
* @param Client
|
|
73
71
|
*/
|
|
74
72
|
onInitialized?: (client: Client) => MaybePromise<void>;
|
|
75
73
|
}>;
|
|
@@ -14,7 +14,7 @@ test.describe('Smoke test', () => {
|
|
|
14
14
|
let page: Page;
|
|
15
15
|
|
|
16
16
|
test.beforeAll(async ({ browser }) => {
|
|
17
|
-
const result = await setupPage(browser, { url: storybookUrl('react-client-withclientprovider--default') });
|
|
17
|
+
const result = await setupPage(browser, { url: storybookUrl('sdk-react-client-withclientprovider--default') });
|
|
18
18
|
page = result.page;
|
|
19
19
|
await page.locator(':text("initialized")').waitFor({ state: 'visible' });
|
|
20
20
|
});
|
|
@@ -3,13 +3,14 @@
|
|
|
3
3
|
//
|
|
4
4
|
|
|
5
5
|
import { type Decorator } from '@storybook/react';
|
|
6
|
-
import React, { useRef } from 'react';
|
|
7
|
-
import { type FallbackProps, ErrorBoundary } from 'react-error-boundary';
|
|
6
|
+
import React, { createContext, type PropsWithChildren, useContext, useEffect, useRef, useState } from 'react';
|
|
7
|
+
import { type FallbackProps, ErrorBoundary as NativeErrorBoundary } from 'react-error-boundary';
|
|
8
8
|
|
|
9
9
|
import { Trigger } from '@dxos/async';
|
|
10
10
|
import { type Client } from '@dxos/client';
|
|
11
11
|
import { type Space } from '@dxos/client/echo';
|
|
12
12
|
import { performInvitation, TestBuilder } from '@dxos/client/testing';
|
|
13
|
+
import { log } from '@dxos/log';
|
|
13
14
|
import { type MaybePromise } from '@dxos/util';
|
|
14
15
|
|
|
15
16
|
import { ClientProvider, type ClientProviderProps } from '../client';
|
|
@@ -66,7 +67,7 @@ export const withClientProvider = ({
|
|
|
66
67
|
};
|
|
67
68
|
|
|
68
69
|
return (
|
|
69
|
-
<ErrorBoundary
|
|
70
|
+
<ErrorBoundary>
|
|
70
71
|
<ClientProvider onInitialized={handleInitialized} {...props}>
|
|
71
72
|
<Story />
|
|
72
73
|
</ClientProvider>
|
|
@@ -80,6 +81,10 @@ export const withClientProvider = ({
|
|
|
80
81
|
// TODO(burdon): Delay/jitter for creation of other clients.
|
|
81
82
|
export type WithMultiClientProviderProps = InitializeProps & ClientProviderProps & { numClients?: number };
|
|
82
83
|
|
|
84
|
+
const MultiClientContext = createContext<{ id: number }>({ id: 0 });
|
|
85
|
+
|
|
86
|
+
export const useMultiClient = () => useContext(MultiClientContext);
|
|
87
|
+
|
|
83
88
|
/**
|
|
84
89
|
* Decorator that creates a scaffold for multiple clients.
|
|
85
90
|
* Orchestrates invitations between a randomly selected host and the remaining clients.
|
|
@@ -99,16 +104,20 @@ export const withMultiClientProvider = ({
|
|
|
99
104
|
const spaceReady = useRef(new Trigger<Space | undefined>());
|
|
100
105
|
|
|
101
106
|
// Handle invitations.
|
|
102
|
-
|
|
107
|
+
// NOTE: The zeroth client isn't necessarily the first to be initialized.
|
|
108
|
+
const handleInitialized = async (client: Client, index: number) => {
|
|
109
|
+
log.info('initialized', { index });
|
|
103
110
|
if (createSpace) {
|
|
104
111
|
if (!hostRef.current) {
|
|
105
112
|
hostRef.current = client;
|
|
106
113
|
const space = await initializeClient(client, { createIdentity, createSpace, onSpaceCreated, onInitialized });
|
|
107
114
|
spaceReady.current.wake(space);
|
|
115
|
+
log.info('inviting', { index });
|
|
108
116
|
} else {
|
|
109
117
|
await initializeClient(client, { createIdentity, onInitialized });
|
|
110
118
|
const space = await spaceReady.current.wait();
|
|
111
119
|
if (space) {
|
|
120
|
+
log.info('joining', { index });
|
|
112
121
|
await Promise.all(performInvitation({ host: space, guest: client.spaces }));
|
|
113
122
|
}
|
|
114
123
|
}
|
|
@@ -116,28 +125,46 @@ export const withMultiClientProvider = ({
|
|
|
116
125
|
};
|
|
117
126
|
|
|
118
127
|
return (
|
|
119
|
-
|
|
128
|
+
<ErrorBoundary>
|
|
120
129
|
{Array.from({ length: numClients }).map((_, index) => (
|
|
121
|
-
<
|
|
130
|
+
<MultiClientContext.Provider key={index} value={{ id: index }}>
|
|
122
131
|
<ClientProvider
|
|
123
132
|
services={builder.current.createLocalClientServices()}
|
|
124
|
-
onInitialized={handleInitialized}
|
|
133
|
+
onInitialized={(client) => handleInitialized(client, index)}
|
|
125
134
|
{...props}
|
|
126
135
|
>
|
|
127
136
|
<Story />
|
|
128
137
|
</ClientProvider>
|
|
129
|
-
</
|
|
138
|
+
</MultiClientContext.Provider>
|
|
130
139
|
))}
|
|
131
|
-
|
|
140
|
+
</ErrorBoundary>
|
|
132
141
|
);
|
|
133
142
|
};
|
|
134
143
|
};
|
|
135
144
|
|
|
145
|
+
const ErrorBoundary = ({ children }: PropsWithChildren) => {
|
|
146
|
+
const [error, setError] = useState<Error>();
|
|
147
|
+
useEffect(() => {
|
|
148
|
+
const handleError = (event: PromiseRejectionEvent) => {
|
|
149
|
+
setError(event.reason);
|
|
150
|
+
};
|
|
151
|
+
|
|
152
|
+
window.addEventListener('unhandledrejection', handleError);
|
|
153
|
+
return () => window.removeEventListener('unhandledrejection', handleError);
|
|
154
|
+
}, []);
|
|
155
|
+
|
|
156
|
+
if (error) {
|
|
157
|
+
return <ErrorFallback error={error} resetErrorBoundary={() => setError(undefined)} />;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
return <NativeErrorBoundary FallbackComponent={ErrorFallback}>{children}</NativeErrorBoundary>;
|
|
161
|
+
};
|
|
162
|
+
|
|
136
163
|
const ErrorFallback = ({ error }: FallbackProps) => {
|
|
137
164
|
const { name, message, stack } =
|
|
138
165
|
error instanceof Error ? error : { name: 'Error', message: String(error), stack: undefined };
|
|
139
166
|
return (
|
|
140
|
-
<div role='alert' className='flex flex-col
|
|
167
|
+
<div role='alert' className='flex flex-col p-4 gap-4 overflow-auto'>
|
|
141
168
|
<h1 className='text-xl text-red-500'>{name}</h1>
|
|
142
169
|
<div className='text-lg'>{message}</div>
|
|
143
170
|
{stack && <pre className='whitespace-pre-wrap text-sm text-subdued'>{stack}</pre>}
|
package/tsconfig.json
CHANGED