@noya-app/noya-multiplayer-react 0.1.47 → 0.1.49
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/.turbo/turbo-build.log +11 -11
- package/CHANGELOG.md +18 -0
- package/dist/index.bundle.js +8 -8
- package/dist/index.d.mts +20 -4
- package/dist/index.d.ts +20 -4
- package/dist/index.js +113 -46
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +109 -46
- package/dist/index.mjs.map +1 -1
- package/package.json +4 -4
- package/src/NoyaStateContext.tsx +133 -47
- package/src/noyaApp.ts +4 -1
package/dist/index.d.mts
CHANGED
|
@@ -3,7 +3,7 @@ import { ConnectedUsersManager, EphemeralUserDataManager, NoyaManager, StateMana
|
|
|
3
3
|
export * from '@noya-app/state-manager';
|
|
4
4
|
import React, { SetStateAction } from 'react';
|
|
5
5
|
import { GetAtPath, ObservableOptions, PathKey, Observable } from '@noya-app/observable';
|
|
6
|
-
import
|
|
6
|
+
import { MenuItem } from '@noya-app/noya-designsystem';
|
|
7
7
|
|
|
8
8
|
type Point = {
|
|
9
9
|
x: number;
|
|
@@ -116,11 +116,20 @@ interface NoyaStateProviderProps<S, M extends object, E extends object, MenuT ex
|
|
|
116
116
|
initialState?: S;
|
|
117
117
|
fallback?: React.ReactNode;
|
|
118
118
|
}
|
|
119
|
+
declare function useAnyNoyaStateContext(): {
|
|
120
|
+
noyaManager: NoyaManager<any, any, any, any>;
|
|
121
|
+
theme: AppTheme;
|
|
122
|
+
viewType: AppViewType;
|
|
123
|
+
};
|
|
124
|
+
declare function useAnyNoyaManager(): NoyaManager<any, any, any, any>;
|
|
125
|
+
declare function useColorScheme(): AppTheme;
|
|
126
|
+
declare function useViewType(): AppViewType;
|
|
119
127
|
declare function useAssets(): _noya_app_state_manager.Asset[];
|
|
120
128
|
declare function useAsset(id: string | undefined): _noya_app_state_manager.Asset | undefined;
|
|
121
129
|
declare function useAssetManager(): {
|
|
122
130
|
create: (options: _noya_app_state_manager.CreateAssetOptions | Uint8Array | File | Blob) => Promise<_noya_app_state_manager.Asset>;
|
|
123
131
|
delete: (id: string) => Promise<void>;
|
|
132
|
+
isInitialized: boolean;
|
|
124
133
|
};
|
|
125
134
|
declare function useAIManager(): _noya_app_state_manager.AIManager;
|
|
126
135
|
declare function useSecretManager(): _noya_app_state_manager.SecretManager;
|
|
@@ -159,11 +168,18 @@ declare function createNoyaContext<Schema extends TSchema, M extends object = ob
|
|
|
159
168
|
};
|
|
160
169
|
useStateManager: () => MultiplayerStateManager<Static<Schema>, M>;
|
|
161
170
|
useEphemeralUserDataManager: () => EphemeralUserDataManager<E>;
|
|
162
|
-
useLeftMenuItems: () =>
|
|
163
|
-
|
|
171
|
+
useLeftMenuItems: () => MenuItem<MenuT>[];
|
|
172
|
+
useSetLeftMenuItems: (leftMenuItems?: MenuItem<MenuT>[]) => void;
|
|
173
|
+
useRightMenuItems: () => MenuItem<MenuT>[];
|
|
174
|
+
useSetRightMenuItems: (rightMenuItems?: MenuItem<MenuT>[]) => void;
|
|
164
175
|
useHandleMenuItem: (callback: (type: MenuT) => void) => void;
|
|
165
176
|
useOnSelectMenuItemCallback: () => (type: MenuT) => void;
|
|
166
177
|
useNoyaManager: () => NoyaManager<Static<Schema>, M, E, MenuT>;
|
|
178
|
+
useMenu: (options: {
|
|
179
|
+
leftMenuItems?: MenuItem<MenuT>[];
|
|
180
|
+
rightMenuItems?: MenuItem<MenuT>[];
|
|
181
|
+
onSelectMenuItem?: (type: MenuT) => void;
|
|
182
|
+
}) => void;
|
|
167
183
|
};
|
|
168
184
|
|
|
169
185
|
declare function useObservable<T>(observable: Observable<T>): T;
|
|
@@ -208,4 +224,4 @@ declare class WebSocketConnection<State> {
|
|
|
208
224
|
removeListener(listener: (state: ReconnectingWebSocketState) => void): void;
|
|
209
225
|
}
|
|
210
226
|
|
|
211
|
-
export { AnyEphemeralUserDataManagerContext, type AppData, type AppTheme, type AppViewType, ConnectedUsersContext, type ConnectionEvent, type ConnectionOptions, FallbackUntilInitialized, type GetAppDataOptions, type RenderUserPointer, type RenderUserPointerProps, StateInspector, type StateInspectorAnchor, type StateInspectorOptions, type UseMultiplayerStateOptions, type UseNoyaStateOptions, type UseNoyaStateResult, type UserPointerData, UserPointersOverlay, type UserPointersOverlayProps, WebSocketConnection, createDefaultAppData, createNoyaContext, enforceSchema, getAppData, parseAppDataParameter, useAIManager, useAnyEphemeralUserData, useAsset, useAssetManager, useAssets, useConnectedUsersManager, useCurrentUserId, useIsInitialized, useManagedHistory, useManagedState, useMultiplayerState, useNoyaState, useObservable, useSecret, useSecretManager, useSecrets, useSyncStateManager, useWorkflowManager };
|
|
227
|
+
export { AnyEphemeralUserDataManagerContext, type AppData, type AppTheme, type AppViewType, ConnectedUsersContext, type ConnectionEvent, type ConnectionOptions, FallbackUntilInitialized, type GetAppDataOptions, type RenderUserPointer, type RenderUserPointerProps, StateInspector, type StateInspectorAnchor, type StateInspectorOptions, type UseMultiplayerStateOptions, type UseNoyaStateOptions, type UseNoyaStateResult, type UserPointerData, UserPointersOverlay, type UserPointersOverlayProps, WebSocketConnection, createDefaultAppData, createNoyaContext, enforceSchema, getAppData, parseAppDataParameter, useAIManager, useAnyEphemeralUserData, useAnyNoyaManager, useAnyNoyaStateContext, useAsset, useAssetManager, useAssets, useColorScheme, useConnectedUsersManager, useCurrentUserId, useIsInitialized, useManagedHistory, useManagedState, useMultiplayerState, useNoyaState, useObservable, useSecret, useSecretManager, useSecrets, useSyncStateManager, useViewType, useWorkflowManager };
|
package/dist/index.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ import { ConnectedUsersManager, EphemeralUserDataManager, NoyaManager, StateMana
|
|
|
3
3
|
export * from '@noya-app/state-manager';
|
|
4
4
|
import React, { SetStateAction } from 'react';
|
|
5
5
|
import { GetAtPath, ObservableOptions, PathKey, Observable } from '@noya-app/observable';
|
|
6
|
-
import
|
|
6
|
+
import { MenuItem } from '@noya-app/noya-designsystem';
|
|
7
7
|
|
|
8
8
|
type Point = {
|
|
9
9
|
x: number;
|
|
@@ -116,11 +116,20 @@ interface NoyaStateProviderProps<S, M extends object, E extends object, MenuT ex
|
|
|
116
116
|
initialState?: S;
|
|
117
117
|
fallback?: React.ReactNode;
|
|
118
118
|
}
|
|
119
|
+
declare function useAnyNoyaStateContext(): {
|
|
120
|
+
noyaManager: NoyaManager<any, any, any, any>;
|
|
121
|
+
theme: AppTheme;
|
|
122
|
+
viewType: AppViewType;
|
|
123
|
+
};
|
|
124
|
+
declare function useAnyNoyaManager(): NoyaManager<any, any, any, any>;
|
|
125
|
+
declare function useColorScheme(): AppTheme;
|
|
126
|
+
declare function useViewType(): AppViewType;
|
|
119
127
|
declare function useAssets(): _noya_app_state_manager.Asset[];
|
|
120
128
|
declare function useAsset(id: string | undefined): _noya_app_state_manager.Asset | undefined;
|
|
121
129
|
declare function useAssetManager(): {
|
|
122
130
|
create: (options: _noya_app_state_manager.CreateAssetOptions | Uint8Array | File | Blob) => Promise<_noya_app_state_manager.Asset>;
|
|
123
131
|
delete: (id: string) => Promise<void>;
|
|
132
|
+
isInitialized: boolean;
|
|
124
133
|
};
|
|
125
134
|
declare function useAIManager(): _noya_app_state_manager.AIManager;
|
|
126
135
|
declare function useSecretManager(): _noya_app_state_manager.SecretManager;
|
|
@@ -159,11 +168,18 @@ declare function createNoyaContext<Schema extends TSchema, M extends object = ob
|
|
|
159
168
|
};
|
|
160
169
|
useStateManager: () => MultiplayerStateManager<Static<Schema>, M>;
|
|
161
170
|
useEphemeralUserDataManager: () => EphemeralUserDataManager<E>;
|
|
162
|
-
useLeftMenuItems: () =>
|
|
163
|
-
|
|
171
|
+
useLeftMenuItems: () => MenuItem<MenuT>[];
|
|
172
|
+
useSetLeftMenuItems: (leftMenuItems?: MenuItem<MenuT>[]) => void;
|
|
173
|
+
useRightMenuItems: () => MenuItem<MenuT>[];
|
|
174
|
+
useSetRightMenuItems: (rightMenuItems?: MenuItem<MenuT>[]) => void;
|
|
164
175
|
useHandleMenuItem: (callback: (type: MenuT) => void) => void;
|
|
165
176
|
useOnSelectMenuItemCallback: () => (type: MenuT) => void;
|
|
166
177
|
useNoyaManager: () => NoyaManager<Static<Schema>, M, E, MenuT>;
|
|
178
|
+
useMenu: (options: {
|
|
179
|
+
leftMenuItems?: MenuItem<MenuT>[];
|
|
180
|
+
rightMenuItems?: MenuItem<MenuT>[];
|
|
181
|
+
onSelectMenuItem?: (type: MenuT) => void;
|
|
182
|
+
}) => void;
|
|
167
183
|
};
|
|
168
184
|
|
|
169
185
|
declare function useObservable<T>(observable: Observable<T>): T;
|
|
@@ -208,4 +224,4 @@ declare class WebSocketConnection<State> {
|
|
|
208
224
|
removeListener(listener: (state: ReconnectingWebSocketState) => void): void;
|
|
209
225
|
}
|
|
210
226
|
|
|
211
|
-
export { AnyEphemeralUserDataManagerContext, type AppData, type AppTheme, type AppViewType, ConnectedUsersContext, type ConnectionEvent, type ConnectionOptions, FallbackUntilInitialized, type GetAppDataOptions, type RenderUserPointer, type RenderUserPointerProps, StateInspector, type StateInspectorAnchor, type StateInspectorOptions, type UseMultiplayerStateOptions, type UseNoyaStateOptions, type UseNoyaStateResult, type UserPointerData, UserPointersOverlay, type UserPointersOverlayProps, WebSocketConnection, createDefaultAppData, createNoyaContext, enforceSchema, getAppData, parseAppDataParameter, useAIManager, useAnyEphemeralUserData, useAsset, useAssetManager, useAssets, useConnectedUsersManager, useCurrentUserId, useIsInitialized, useManagedHistory, useManagedState, useMultiplayerState, useNoyaState, useObservable, useSecret, useSecretManager, useSecrets, useSyncStateManager, useWorkflowManager };
|
|
227
|
+
export { AnyEphemeralUserDataManagerContext, type AppData, type AppTheme, type AppViewType, ConnectedUsersContext, type ConnectionEvent, type ConnectionOptions, FallbackUntilInitialized, type GetAppDataOptions, type RenderUserPointer, type RenderUserPointerProps, StateInspector, type StateInspectorAnchor, type StateInspectorOptions, type UseMultiplayerStateOptions, type UseNoyaStateOptions, type UseNoyaStateResult, type UserPointerData, UserPointersOverlay, type UserPointersOverlayProps, WebSocketConnection, createDefaultAppData, createNoyaContext, enforceSchema, getAppData, parseAppDataParameter, useAIManager, useAnyEphemeralUserData, useAnyNoyaManager, useAnyNoyaStateContext, useAsset, useAssetManager, useAssets, useColorScheme, useConnectedUsersManager, useCurrentUserId, useIsInitialized, useManagedHistory, useManagedState, useMultiplayerState, useNoyaState, useObservable, useSecret, useSecretManager, useSecrets, useSyncStateManager, useViewType, useWorkflowManager };
|
package/dist/index.js
CHANGED
|
@@ -44,9 +44,12 @@ __export(src_exports, {
|
|
|
44
44
|
parseAppDataParameter: () => parseAppDataParameter,
|
|
45
45
|
useAIManager: () => useAIManager,
|
|
46
46
|
useAnyEphemeralUserData: () => useAnyEphemeralUserData,
|
|
47
|
+
useAnyNoyaManager: () => useAnyNoyaManager,
|
|
48
|
+
useAnyNoyaStateContext: () => useAnyNoyaStateContext,
|
|
47
49
|
useAsset: () => useAsset,
|
|
48
50
|
useAssetManager: () => useAssetManager,
|
|
49
51
|
useAssets: () => useAssets,
|
|
52
|
+
useColorScheme: () => useColorScheme,
|
|
50
53
|
useConnectedUsersManager: () => useConnectedUsersManager,
|
|
51
54
|
useCurrentUserId: () => useCurrentUserId,
|
|
52
55
|
useIsInitialized: () => useIsInitialized,
|
|
@@ -59,6 +62,7 @@ __export(src_exports, {
|
|
|
59
62
|
useSecretManager: () => useSecretManager,
|
|
60
63
|
useSecrets: () => useSecrets,
|
|
61
64
|
useSyncStateManager: () => useSyncStateManager,
|
|
65
|
+
useViewType: () => useViewType,
|
|
62
66
|
useWorkflowManager: () => useWorkflowManager
|
|
63
67
|
});
|
|
64
68
|
module.exports = __toCommonJS(src_exports);
|
|
@@ -1370,7 +1374,10 @@ function useNoyaState(...args) {
|
|
|
1370
1374
|
});
|
|
1371
1375
|
});
|
|
1372
1376
|
const sync = (0, import_react7.useMemo)(() => {
|
|
1373
|
-
return (0, import_state_manager2.isEmbeddedApp)() ? (0, import_state_manager2.parentFrameSync)({ debug: options?.debug }) : multiplayerUrl ? (0, import_state_manager2.webSocketSync)(
|
|
1377
|
+
return (0, import_state_manager2.isEmbeddedApp)() ? (0, import_state_manager2.parentFrameSync)({ debug: options?.debug }) : multiplayerUrl ? (0, import_state_manager2.webSocketSync)({
|
|
1378
|
+
url: multiplayerUrl,
|
|
1379
|
+
debug: options?.debug
|
|
1380
|
+
}) : options?.offlineStorageKey ? (0, import_state_manager2.localStorageSync)({ key: options.offlineStorageKey }) : (0, import_state_manager2.stubSync)();
|
|
1374
1381
|
}, [multiplayerUrl, options?.offlineStorageKey, options?.debug]);
|
|
1375
1382
|
const result = useMultiplayerState(noyaAppInitialState, {
|
|
1376
1383
|
...options,
|
|
@@ -1397,69 +1404,81 @@ function useAnyNoyaStateContext() {
|
|
|
1397
1404
|
}
|
|
1398
1405
|
return value;
|
|
1399
1406
|
}
|
|
1407
|
+
function useAnyNoyaManager() {
|
|
1408
|
+
const { noyaManager } = useAnyNoyaStateContext();
|
|
1409
|
+
return noyaManager;
|
|
1410
|
+
}
|
|
1411
|
+
function useColorScheme() {
|
|
1412
|
+
const { theme } = useAnyNoyaStateContext();
|
|
1413
|
+
return theme;
|
|
1414
|
+
}
|
|
1415
|
+
function useViewType() {
|
|
1416
|
+
const { viewType } = useAnyNoyaStateContext();
|
|
1417
|
+
return viewType;
|
|
1418
|
+
}
|
|
1400
1419
|
function useAssets() {
|
|
1401
|
-
const {
|
|
1402
|
-
return useObservable(assetManager.assets$);
|
|
1420
|
+
const { noyaManager } = useAnyNoyaStateContext();
|
|
1421
|
+
return useObservable(noyaManager.assetManager.assets$);
|
|
1403
1422
|
}
|
|
1404
1423
|
function useAsset(id) {
|
|
1405
|
-
const {
|
|
1424
|
+
const { noyaManager } = useAnyNoyaStateContext();
|
|
1406
1425
|
const observable = (0, import_react8.useMemo)(
|
|
1407
|
-
() => assetManager.assets$.map(
|
|
1408
|
-
|
|
1426
|
+
() => noyaManager.assetManager.assets$.map(
|
|
1427
|
+
(assets) => assets.find((a) => a.id === id)
|
|
1428
|
+
),
|
|
1429
|
+
[noyaManager, id]
|
|
1409
1430
|
);
|
|
1410
1431
|
return useObservable(observable);
|
|
1411
1432
|
}
|
|
1412
1433
|
function useAssetManager() {
|
|
1413
|
-
const {
|
|
1434
|
+
const { noyaManager } = useAnyNoyaStateContext();
|
|
1435
|
+
const isInitialized = useObservable(noyaManager.assetManager.isInitialized$);
|
|
1414
1436
|
return (0, import_react8.useMemo)(
|
|
1415
1437
|
() => ({
|
|
1416
|
-
create: assetManager.create,
|
|
1417
|
-
delete: assetManager.delete
|
|
1438
|
+
create: noyaManager.assetManager.create,
|
|
1439
|
+
delete: noyaManager.assetManager.delete,
|
|
1440
|
+
isInitialized
|
|
1418
1441
|
}),
|
|
1419
|
-
[
|
|
1442
|
+
[noyaManager, isInitialized]
|
|
1420
1443
|
);
|
|
1421
1444
|
}
|
|
1422
1445
|
function useAIManager() {
|
|
1423
|
-
const {
|
|
1424
|
-
return aiManager;
|
|
1446
|
+
const { noyaManager } = useAnyNoyaStateContext();
|
|
1447
|
+
return noyaManager.aiManager;
|
|
1425
1448
|
}
|
|
1426
1449
|
function useSecretManager() {
|
|
1427
|
-
const {
|
|
1428
|
-
return secretManager;
|
|
1450
|
+
const { noyaManager } = useAnyNoyaStateContext();
|
|
1451
|
+
return noyaManager.secretManager;
|
|
1429
1452
|
}
|
|
1430
1453
|
function useSecrets() {
|
|
1431
|
-
const {
|
|
1432
|
-
return useObservable(secretManager.secrets$);
|
|
1454
|
+
const { noyaManager } = useAnyNoyaStateContext();
|
|
1455
|
+
return useObservable(noyaManager.secretManager.secrets$);
|
|
1433
1456
|
}
|
|
1434
1457
|
function useSecret(name) {
|
|
1435
|
-
const {
|
|
1458
|
+
const { noyaManager } = useAnyNoyaStateContext();
|
|
1436
1459
|
return useObservable(
|
|
1437
|
-
secretManager.secrets$,
|
|
1460
|
+
noyaManager.secretManager.secrets$,
|
|
1438
1461
|
(0, import_react8.useCallback)((secrets) => secrets.find((s) => s.name === name), [name])
|
|
1439
1462
|
);
|
|
1440
1463
|
}
|
|
1441
1464
|
function useIsInitialized() {
|
|
1442
|
-
const {
|
|
1443
|
-
multiplayerStateManager: ms,
|
|
1444
|
-
secretManager,
|
|
1445
|
-
assetManager
|
|
1446
|
-
} = useAnyNoyaStateContext();
|
|
1465
|
+
const { noyaManager, viewType } = useAnyNoyaStateContext();
|
|
1447
1466
|
const isInitializedObservable = (0, import_react8.useMemo)(
|
|
1448
1467
|
() => import_observable.Observable.combine(
|
|
1449
1468
|
[
|
|
1450
|
-
|
|
1451
|
-
secretManager.isInitialized$,
|
|
1452
|
-
assetManager.isInitialized$
|
|
1469
|
+
...viewType === "preview" ? [] : [noyaManager.multiplayerStateManager.isInitialized$],
|
|
1470
|
+
noyaManager.secretManager.isInitialized$,
|
|
1471
|
+
noyaManager.assetManager.isInitialized$
|
|
1453
1472
|
],
|
|
1454
1473
|
(values) => values.every((v) => v)
|
|
1455
1474
|
),
|
|
1456
|
-
[
|
|
1475
|
+
[noyaManager, viewType]
|
|
1457
1476
|
);
|
|
1458
1477
|
return useObservable(isInitializedObservable);
|
|
1459
1478
|
}
|
|
1460
1479
|
function useWorkflowManager() {
|
|
1461
|
-
const {
|
|
1462
|
-
return workflowManager;
|
|
1480
|
+
const { noyaManager } = useAnyNoyaStateContext();
|
|
1481
|
+
return noyaManager.workflowManager;
|
|
1463
1482
|
}
|
|
1464
1483
|
var ConnectedUsersContext = (0, import_react8.createContext)(void 0);
|
|
1465
1484
|
function useConnectedUsersManager() {
|
|
@@ -1491,12 +1510,23 @@ function createNoyaContext({
|
|
|
1491
1510
|
initialState,
|
|
1492
1511
|
...options
|
|
1493
1512
|
}) {
|
|
1494
|
-
const [, , { noyaManager }] = useNoyaState(
|
|
1495
|
-
|
|
1496
|
-
|
|
1497
|
-
|
|
1498
|
-
|
|
1499
|
-
|
|
1513
|
+
const [, , { noyaManager, theme, viewType }] = useNoyaState(
|
|
1514
|
+
initialState,
|
|
1515
|
+
{
|
|
1516
|
+
...options,
|
|
1517
|
+
schema,
|
|
1518
|
+
mergeHistoryEntries
|
|
1519
|
+
}
|
|
1520
|
+
);
|
|
1521
|
+
const contextValue = (0, import_react8.useMemo)(
|
|
1522
|
+
() => ({
|
|
1523
|
+
noyaManager,
|
|
1524
|
+
theme,
|
|
1525
|
+
viewType
|
|
1526
|
+
}),
|
|
1527
|
+
[noyaManager, theme, viewType]
|
|
1528
|
+
);
|
|
1529
|
+
return /* @__PURE__ */ import_react8.default.createElement(AnyNoyaStateContext.Provider, { value: contextValue }, /* @__PURE__ */ import_react8.default.createElement(
|
|
1500
1530
|
ConnectedUsersContext.Provider,
|
|
1501
1531
|
{
|
|
1502
1532
|
value: noyaManager.connectedUsersManager
|
|
@@ -1511,25 +1541,31 @@ function createNoyaContext({
|
|
|
1511
1541
|
));
|
|
1512
1542
|
}
|
|
1513
1543
|
function useValue(path, options) {
|
|
1514
|
-
const {
|
|
1544
|
+
const { noyaManager } = useAnyNoyaStateContext();
|
|
1515
1545
|
let actualPath = typeof path === "function" || !path ? "" : path;
|
|
1516
1546
|
const mappedObservable = (0, import_react8.useMemo)(() => {
|
|
1517
1547
|
if (typeof path === "function") {
|
|
1518
|
-
return
|
|
1548
|
+
return noyaManager.multiplayerStateManager.optimisticState$.map(path, {
|
|
1549
|
+
isEqual: options?.isEqual
|
|
1550
|
+
});
|
|
1519
1551
|
}
|
|
1520
|
-
return
|
|
1521
|
-
}, [
|
|
1552
|
+
return noyaManager.multiplayerStateManager.optimisticState$;
|
|
1553
|
+
}, [noyaManager, path, options?.isEqual]);
|
|
1522
1554
|
const value = useObservable(mappedObservable, actualPath);
|
|
1523
1555
|
return value;
|
|
1524
1556
|
}
|
|
1525
1557
|
function useSetValue(path) {
|
|
1526
|
-
const {
|
|
1558
|
+
const { noyaManager } = useAnyNoyaStateContext();
|
|
1527
1559
|
const setValue = (0, import_react8.useCallback)(
|
|
1528
1560
|
(...args) => {
|
|
1529
1561
|
const [metadata, value] = args.length === 2 ? args : [{}, args[0]];
|
|
1530
|
-
|
|
1562
|
+
noyaManager.multiplayerStateManager.setStateAtPath(
|
|
1563
|
+
metadata,
|
|
1564
|
+
path ?? "",
|
|
1565
|
+
value
|
|
1566
|
+
);
|
|
1531
1567
|
},
|
|
1532
|
-
[
|
|
1568
|
+
[noyaManager, path]
|
|
1533
1569
|
);
|
|
1534
1570
|
return setValue;
|
|
1535
1571
|
}
|
|
@@ -1540,8 +1576,8 @@ function createNoyaContext({
|
|
|
1540
1576
|
return [value, setValue];
|
|
1541
1577
|
}
|
|
1542
1578
|
function useStateManager() {
|
|
1543
|
-
const {
|
|
1544
|
-
return
|
|
1579
|
+
const { noyaManager } = useAnyNoyaStateContext();
|
|
1580
|
+
return noyaManager.multiplayerStateManager;
|
|
1545
1581
|
}
|
|
1546
1582
|
function useEphemeralUserDataManager() {
|
|
1547
1583
|
const ephemeralUserData = (0, import_react8.useContext)(EphemeralUserDataManagerContext);
|
|
@@ -1553,16 +1589,32 @@ function createNoyaContext({
|
|
|
1553
1589
|
return ephemeralUserData;
|
|
1554
1590
|
}
|
|
1555
1591
|
function useNoyaManager() {
|
|
1556
|
-
return useAnyNoyaStateContext();
|
|
1592
|
+
return useAnyNoyaStateContext().noyaManager;
|
|
1557
1593
|
}
|
|
1558
1594
|
function useLeftMenuItems() {
|
|
1559
1595
|
const { menuManager } = useNoyaManager();
|
|
1560
1596
|
return useObservable(menuManager.leftMenuItems$);
|
|
1561
1597
|
}
|
|
1598
|
+
function useSetLeftMenuItems(leftMenuItems) {
|
|
1599
|
+
const { menuManager } = useNoyaManager();
|
|
1600
|
+
(0, import_react8.useEffect)(() => {
|
|
1601
|
+
if (leftMenuItems) {
|
|
1602
|
+
menuManager.setLeftMenuItems(leftMenuItems);
|
|
1603
|
+
}
|
|
1604
|
+
}, [menuManager, leftMenuItems]);
|
|
1605
|
+
}
|
|
1562
1606
|
function useRightMenuItems() {
|
|
1563
1607
|
const { menuManager } = useNoyaManager();
|
|
1564
1608
|
return useObservable(menuManager.rightMenuItems$);
|
|
1565
1609
|
}
|
|
1610
|
+
function useSetRightMenuItems(rightMenuItems) {
|
|
1611
|
+
const { menuManager } = useNoyaManager();
|
|
1612
|
+
(0, import_react8.useEffect)(() => {
|
|
1613
|
+
if (rightMenuItems) {
|
|
1614
|
+
menuManager.setRightMenuItems(rightMenuItems);
|
|
1615
|
+
}
|
|
1616
|
+
}, [menuManager, rightMenuItems]);
|
|
1617
|
+
}
|
|
1566
1618
|
function useHandleMenuItem(callback) {
|
|
1567
1619
|
const { menuManager } = useNoyaManager();
|
|
1568
1620
|
(0, import_react8.useEffect)(() => {
|
|
@@ -1573,6 +1625,14 @@ function createNoyaContext({
|
|
|
1573
1625
|
const { menuManager } = useNoyaManager();
|
|
1574
1626
|
return (0, import_react8.useCallback)((type) => menuManager.emit(type), [menuManager]);
|
|
1575
1627
|
}
|
|
1628
|
+
function useMenu(options) {
|
|
1629
|
+
const { leftMenuItems, rightMenuItems, onSelectMenuItem } = options;
|
|
1630
|
+
useSetLeftMenuItems(leftMenuItems);
|
|
1631
|
+
useSetRightMenuItems(rightMenuItems);
|
|
1632
|
+
const noop = (0, import_react8.useCallback)(() => {
|
|
1633
|
+
}, []);
|
|
1634
|
+
useHandleMenuItem(onSelectMenuItem ?? noop);
|
|
1635
|
+
}
|
|
1576
1636
|
return {
|
|
1577
1637
|
Context: NoyaStateContext,
|
|
1578
1638
|
Provider: NoyaStateProvider,
|
|
@@ -1582,10 +1642,13 @@ function createNoyaContext({
|
|
|
1582
1642
|
useStateManager,
|
|
1583
1643
|
useEphemeralUserDataManager,
|
|
1584
1644
|
useLeftMenuItems,
|
|
1645
|
+
useSetLeftMenuItems,
|
|
1585
1646
|
useRightMenuItems,
|
|
1647
|
+
useSetRightMenuItems,
|
|
1586
1648
|
useHandleMenuItem,
|
|
1587
1649
|
useOnSelectMenuItemCallback,
|
|
1588
|
-
useNoyaManager
|
|
1650
|
+
useNoyaManager,
|
|
1651
|
+
useMenu
|
|
1589
1652
|
};
|
|
1590
1653
|
}
|
|
1591
1654
|
|
|
@@ -1699,9 +1762,12 @@ var WebSocketConnection = class {
|
|
|
1699
1762
|
parseAppDataParameter,
|
|
1700
1763
|
useAIManager,
|
|
1701
1764
|
useAnyEphemeralUserData,
|
|
1765
|
+
useAnyNoyaManager,
|
|
1766
|
+
useAnyNoyaStateContext,
|
|
1702
1767
|
useAsset,
|
|
1703
1768
|
useAssetManager,
|
|
1704
1769
|
useAssets,
|
|
1770
|
+
useColorScheme,
|
|
1705
1771
|
useConnectedUsersManager,
|
|
1706
1772
|
useCurrentUserId,
|
|
1707
1773
|
useIsInitialized,
|
|
@@ -1714,6 +1780,7 @@ var WebSocketConnection = class {
|
|
|
1714
1780
|
useSecretManager,
|
|
1715
1781
|
useSecrets,
|
|
1716
1782
|
useSyncStateManager,
|
|
1783
|
+
useViewType,
|
|
1717
1784
|
useWorkflowManager,
|
|
1718
1785
|
...require("@noya-app/state-manager")
|
|
1719
1786
|
});
|