@noya-app/noya-multiplayer-react 0.1.48 → 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 +9 -0
- package/dist/index.bundle.js +7 -7
- package/dist/index.d.mts +20 -4
- package/dist/index.d.ts +20 -4
- package/dist/index.js +109 -45
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +105 -45
- package/dist/index.mjs.map +1 -1
- package/package.json +3 -3
- package/src/NoyaStateContext.tsx +133 -47
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);
|
|
@@ -1400,69 +1404,81 @@ function useAnyNoyaStateContext() {
|
|
|
1400
1404
|
}
|
|
1401
1405
|
return value;
|
|
1402
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
|
+
}
|
|
1403
1419
|
function useAssets() {
|
|
1404
|
-
const {
|
|
1405
|
-
return useObservable(assetManager.assets$);
|
|
1420
|
+
const { noyaManager } = useAnyNoyaStateContext();
|
|
1421
|
+
return useObservable(noyaManager.assetManager.assets$);
|
|
1406
1422
|
}
|
|
1407
1423
|
function useAsset(id) {
|
|
1408
|
-
const {
|
|
1424
|
+
const { noyaManager } = useAnyNoyaStateContext();
|
|
1409
1425
|
const observable = (0, import_react8.useMemo)(
|
|
1410
|
-
() => assetManager.assets$.map(
|
|
1411
|
-
|
|
1426
|
+
() => noyaManager.assetManager.assets$.map(
|
|
1427
|
+
(assets) => assets.find((a) => a.id === id)
|
|
1428
|
+
),
|
|
1429
|
+
[noyaManager, id]
|
|
1412
1430
|
);
|
|
1413
1431
|
return useObservable(observable);
|
|
1414
1432
|
}
|
|
1415
1433
|
function useAssetManager() {
|
|
1416
|
-
const {
|
|
1434
|
+
const { noyaManager } = useAnyNoyaStateContext();
|
|
1435
|
+
const isInitialized = useObservable(noyaManager.assetManager.isInitialized$);
|
|
1417
1436
|
return (0, import_react8.useMemo)(
|
|
1418
1437
|
() => ({
|
|
1419
|
-
create: assetManager.create,
|
|
1420
|
-
delete: assetManager.delete
|
|
1438
|
+
create: noyaManager.assetManager.create,
|
|
1439
|
+
delete: noyaManager.assetManager.delete,
|
|
1440
|
+
isInitialized
|
|
1421
1441
|
}),
|
|
1422
|
-
[
|
|
1442
|
+
[noyaManager, isInitialized]
|
|
1423
1443
|
);
|
|
1424
1444
|
}
|
|
1425
1445
|
function useAIManager() {
|
|
1426
|
-
const {
|
|
1427
|
-
return aiManager;
|
|
1446
|
+
const { noyaManager } = useAnyNoyaStateContext();
|
|
1447
|
+
return noyaManager.aiManager;
|
|
1428
1448
|
}
|
|
1429
1449
|
function useSecretManager() {
|
|
1430
|
-
const {
|
|
1431
|
-
return secretManager;
|
|
1450
|
+
const { noyaManager } = useAnyNoyaStateContext();
|
|
1451
|
+
return noyaManager.secretManager;
|
|
1432
1452
|
}
|
|
1433
1453
|
function useSecrets() {
|
|
1434
|
-
const {
|
|
1435
|
-
return useObservable(secretManager.secrets$);
|
|
1454
|
+
const { noyaManager } = useAnyNoyaStateContext();
|
|
1455
|
+
return useObservable(noyaManager.secretManager.secrets$);
|
|
1436
1456
|
}
|
|
1437
1457
|
function useSecret(name) {
|
|
1438
|
-
const {
|
|
1458
|
+
const { noyaManager } = useAnyNoyaStateContext();
|
|
1439
1459
|
return useObservable(
|
|
1440
|
-
secretManager.secrets$,
|
|
1460
|
+
noyaManager.secretManager.secrets$,
|
|
1441
1461
|
(0, import_react8.useCallback)((secrets) => secrets.find((s) => s.name === name), [name])
|
|
1442
1462
|
);
|
|
1443
1463
|
}
|
|
1444
1464
|
function useIsInitialized() {
|
|
1445
|
-
const {
|
|
1446
|
-
multiplayerStateManager: ms,
|
|
1447
|
-
secretManager,
|
|
1448
|
-
assetManager
|
|
1449
|
-
} = useAnyNoyaStateContext();
|
|
1465
|
+
const { noyaManager, viewType } = useAnyNoyaStateContext();
|
|
1450
1466
|
const isInitializedObservable = (0, import_react8.useMemo)(
|
|
1451
1467
|
() => import_observable.Observable.combine(
|
|
1452
1468
|
[
|
|
1453
|
-
|
|
1454
|
-
secretManager.isInitialized$,
|
|
1455
|
-
assetManager.isInitialized$
|
|
1469
|
+
...viewType === "preview" ? [] : [noyaManager.multiplayerStateManager.isInitialized$],
|
|
1470
|
+
noyaManager.secretManager.isInitialized$,
|
|
1471
|
+
noyaManager.assetManager.isInitialized$
|
|
1456
1472
|
],
|
|
1457
1473
|
(values) => values.every((v) => v)
|
|
1458
1474
|
),
|
|
1459
|
-
[
|
|
1475
|
+
[noyaManager, viewType]
|
|
1460
1476
|
);
|
|
1461
1477
|
return useObservable(isInitializedObservable);
|
|
1462
1478
|
}
|
|
1463
1479
|
function useWorkflowManager() {
|
|
1464
|
-
const {
|
|
1465
|
-
return workflowManager;
|
|
1480
|
+
const { noyaManager } = useAnyNoyaStateContext();
|
|
1481
|
+
return noyaManager.workflowManager;
|
|
1466
1482
|
}
|
|
1467
1483
|
var ConnectedUsersContext = (0, import_react8.createContext)(void 0);
|
|
1468
1484
|
function useConnectedUsersManager() {
|
|
@@ -1494,12 +1510,23 @@ function createNoyaContext({
|
|
|
1494
1510
|
initialState,
|
|
1495
1511
|
...options
|
|
1496
1512
|
}) {
|
|
1497
|
-
const [, , { noyaManager }] = useNoyaState(
|
|
1498
|
-
|
|
1499
|
-
|
|
1500
|
-
|
|
1501
|
-
|
|
1502
|
-
|
|
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(
|
|
1503
1530
|
ConnectedUsersContext.Provider,
|
|
1504
1531
|
{
|
|
1505
1532
|
value: noyaManager.connectedUsersManager
|
|
@@ -1514,25 +1541,31 @@ function createNoyaContext({
|
|
|
1514
1541
|
));
|
|
1515
1542
|
}
|
|
1516
1543
|
function useValue(path, options) {
|
|
1517
|
-
const {
|
|
1544
|
+
const { noyaManager } = useAnyNoyaStateContext();
|
|
1518
1545
|
let actualPath = typeof path === "function" || !path ? "" : path;
|
|
1519
1546
|
const mappedObservable = (0, import_react8.useMemo)(() => {
|
|
1520
1547
|
if (typeof path === "function") {
|
|
1521
|
-
return
|
|
1548
|
+
return noyaManager.multiplayerStateManager.optimisticState$.map(path, {
|
|
1549
|
+
isEqual: options?.isEqual
|
|
1550
|
+
});
|
|
1522
1551
|
}
|
|
1523
|
-
return
|
|
1524
|
-
}, [
|
|
1552
|
+
return noyaManager.multiplayerStateManager.optimisticState$;
|
|
1553
|
+
}, [noyaManager, path, options?.isEqual]);
|
|
1525
1554
|
const value = useObservable(mappedObservable, actualPath);
|
|
1526
1555
|
return value;
|
|
1527
1556
|
}
|
|
1528
1557
|
function useSetValue(path) {
|
|
1529
|
-
const {
|
|
1558
|
+
const { noyaManager } = useAnyNoyaStateContext();
|
|
1530
1559
|
const setValue = (0, import_react8.useCallback)(
|
|
1531
1560
|
(...args) => {
|
|
1532
1561
|
const [metadata, value] = args.length === 2 ? args : [{}, args[0]];
|
|
1533
|
-
|
|
1562
|
+
noyaManager.multiplayerStateManager.setStateAtPath(
|
|
1563
|
+
metadata,
|
|
1564
|
+
path ?? "",
|
|
1565
|
+
value
|
|
1566
|
+
);
|
|
1534
1567
|
},
|
|
1535
|
-
[
|
|
1568
|
+
[noyaManager, path]
|
|
1536
1569
|
);
|
|
1537
1570
|
return setValue;
|
|
1538
1571
|
}
|
|
@@ -1543,8 +1576,8 @@ function createNoyaContext({
|
|
|
1543
1576
|
return [value, setValue];
|
|
1544
1577
|
}
|
|
1545
1578
|
function useStateManager() {
|
|
1546
|
-
const {
|
|
1547
|
-
return
|
|
1579
|
+
const { noyaManager } = useAnyNoyaStateContext();
|
|
1580
|
+
return noyaManager.multiplayerStateManager;
|
|
1548
1581
|
}
|
|
1549
1582
|
function useEphemeralUserDataManager() {
|
|
1550
1583
|
const ephemeralUserData = (0, import_react8.useContext)(EphemeralUserDataManagerContext);
|
|
@@ -1556,16 +1589,32 @@ function createNoyaContext({
|
|
|
1556
1589
|
return ephemeralUserData;
|
|
1557
1590
|
}
|
|
1558
1591
|
function useNoyaManager() {
|
|
1559
|
-
return useAnyNoyaStateContext();
|
|
1592
|
+
return useAnyNoyaStateContext().noyaManager;
|
|
1560
1593
|
}
|
|
1561
1594
|
function useLeftMenuItems() {
|
|
1562
1595
|
const { menuManager } = useNoyaManager();
|
|
1563
1596
|
return useObservable(menuManager.leftMenuItems$);
|
|
1564
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
|
+
}
|
|
1565
1606
|
function useRightMenuItems() {
|
|
1566
1607
|
const { menuManager } = useNoyaManager();
|
|
1567
1608
|
return useObservable(menuManager.rightMenuItems$);
|
|
1568
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
|
+
}
|
|
1569
1618
|
function useHandleMenuItem(callback) {
|
|
1570
1619
|
const { menuManager } = useNoyaManager();
|
|
1571
1620
|
(0, import_react8.useEffect)(() => {
|
|
@@ -1576,6 +1625,14 @@ function createNoyaContext({
|
|
|
1576
1625
|
const { menuManager } = useNoyaManager();
|
|
1577
1626
|
return (0, import_react8.useCallback)((type) => menuManager.emit(type), [menuManager]);
|
|
1578
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
|
+
}
|
|
1579
1636
|
return {
|
|
1580
1637
|
Context: NoyaStateContext,
|
|
1581
1638
|
Provider: NoyaStateProvider,
|
|
@@ -1585,10 +1642,13 @@ function createNoyaContext({
|
|
|
1585
1642
|
useStateManager,
|
|
1586
1643
|
useEphemeralUserDataManager,
|
|
1587
1644
|
useLeftMenuItems,
|
|
1645
|
+
useSetLeftMenuItems,
|
|
1588
1646
|
useRightMenuItems,
|
|
1647
|
+
useSetRightMenuItems,
|
|
1589
1648
|
useHandleMenuItem,
|
|
1590
1649
|
useOnSelectMenuItemCallback,
|
|
1591
|
-
useNoyaManager
|
|
1650
|
+
useNoyaManager,
|
|
1651
|
+
useMenu
|
|
1592
1652
|
};
|
|
1593
1653
|
}
|
|
1594
1654
|
|
|
@@ -1702,9 +1762,12 @@ var WebSocketConnection = class {
|
|
|
1702
1762
|
parseAppDataParameter,
|
|
1703
1763
|
useAIManager,
|
|
1704
1764
|
useAnyEphemeralUserData,
|
|
1765
|
+
useAnyNoyaManager,
|
|
1766
|
+
useAnyNoyaStateContext,
|
|
1705
1767
|
useAsset,
|
|
1706
1768
|
useAssetManager,
|
|
1707
1769
|
useAssets,
|
|
1770
|
+
useColorScheme,
|
|
1708
1771
|
useConnectedUsersManager,
|
|
1709
1772
|
useCurrentUserId,
|
|
1710
1773
|
useIsInitialized,
|
|
@@ -1717,6 +1780,7 @@ var WebSocketConnection = class {
|
|
|
1717
1780
|
useSecretManager,
|
|
1718
1781
|
useSecrets,
|
|
1719
1782
|
useSyncStateManager,
|
|
1783
|
+
useViewType,
|
|
1720
1784
|
useWorkflowManager,
|
|
1721
1785
|
...require("@noya-app/state-manager")
|
|
1722
1786
|
});
|