@noya-app/noya-multiplayer-react 0.1.70 → 0.1.71

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@noya-app/noya-multiplayer-react",
3
- "version": "0.1.70",
3
+ "version": "0.1.71",
4
4
  "main": "./dist/index.js",
5
5
  "module": "./dist/index.mjs",
6
6
  "types": "./dist/index.d.ts",
@@ -12,7 +12,7 @@
12
12
  "dev": "npm run build -- --watch"
13
13
  },
14
14
  "dependencies": {
15
- "@noya-app/state-manager": "0.1.56",
15
+ "@noya-app/state-manager": "0.1.57",
16
16
  "@noya-app/emitter": "0.1.0",
17
17
  "@noya-app/observable": "0.1.12",
18
18
  "@noya-app/task-runner": "0.1.6",
@@ -327,20 +327,20 @@ export function usePipelineManager() {
327
327
  return noyaManager.pipelineManager;
328
328
  }
329
329
 
330
- export function useConnectedUsersManager() {
330
+ export function useUserManager() {
331
331
  const { noyaManager } = useAnyNoyaStateContext();
332
- return noyaManager.connectedUsersManager;
332
+ return noyaManager.userManager;
333
333
  }
334
334
 
335
335
  export function useConnectedUsers() {
336
- const connectedUsersManager = useConnectedUsersManager();
337
- return useObservable(connectedUsersManager?.connectedUsers$);
336
+ const userManager = useUserManager();
337
+ return useObservable(userManager?.connectedUsers$);
338
338
  }
339
339
 
340
340
  export function useConnectedUser(userId?: string | null) {
341
- const connectedUsersManager = useConnectedUsersManager();
341
+ const userManager = useUserManager();
342
342
  return useObservable(
343
- connectedUsersManager?.connectedUsers$,
343
+ userManager?.connectedUsers$,
344
344
  useCallback(
345
345
  (users) => {
346
346
  return users.find((user) => {
@@ -359,8 +359,8 @@ export function useAnyEphemeralUserData() {
359
359
  }
360
360
 
361
361
  export function useCurrentUserId() {
362
- const connectedUsersManager = useConnectedUsersManager();
363
- return useObservable(connectedUsersManager?.currentUserId$);
362
+ const userManager = useUserManager();
363
+ return useObservable(userManager?.currentUserId$);
364
364
  }
365
365
 
366
366
  export function useIsProcessing() {
@@ -13,6 +13,7 @@ it("gets AppData with no data", () => {
13
13
  viewType: "editable",
14
14
  initialState,
15
15
  inspector: false,
16
+ isDemo: false,
16
17
  });
17
18
  });
18
19
 
@@ -37,6 +38,7 @@ it("gets AppData with data param", () => {
37
38
  viewType: "editable",
38
39
  initialState: { foo: "bar" },
39
40
  inspector: false,
41
+ isDemo: false,
40
42
  });
41
43
  });
42
44
 
@@ -50,6 +52,7 @@ it("uses initial state if data doesn't parse", () => {
50
52
  viewType: "editable",
51
53
  initialState: { foo: "bar" },
52
54
  inspector: false,
55
+ isDemo: false,
53
56
  });
54
57
  });
55
58
 
@@ -67,9 +70,32 @@ it("gets AppData with schema", () => {
67
70
  viewType: "editable",
68
71
  initialState: { foo: "bar" },
69
72
  inspector: false,
73
+ isDemo: false,
70
74
  });
71
75
  });
72
76
 
77
+ it("preserves userId from data param", () => {
78
+ const existing = {
79
+ theme: "light",
80
+ viewType: "editable",
81
+ initialState: { foo: "bar" },
82
+ inspector: false,
83
+ userId: "user-123",
84
+ isDemo: true,
85
+ };
86
+
87
+ const data = getAppData(null as unknown, undefined, {
88
+ window: {
89
+ location: {
90
+ hash: `#data=${encodeURIComponent(JSON.stringify(existing))}`,
91
+ },
92
+ },
93
+ });
94
+
95
+ expect(data.userId).toBe("user-123");
96
+ expect(data.isDemo).toBe(true);
97
+ });
98
+
73
99
  // it("enforces schema on data param", () => {
74
100
  // const schema = Type.Object({
75
101
  // foo: Type.String({ default: "bar" }),
@@ -103,6 +129,7 @@ it("gets AppData with function initial state", () => {
103
129
  viewType: "editable",
104
130
  initialState: { foo: "bar" },
105
131
  inspector: false,
132
+ isDemo: false,
106
133
  });
107
134
  });
108
135
 
@@ -130,6 +157,7 @@ it("even if initial state does not match schema, make sure we use multiplayer ur
130
157
  initialState: { foo: "" },
131
158
  inspector: false,
132
159
  multiplayerUrl: "https://example.com",
160
+ isDemo: false,
133
161
  });
134
162
  });
135
163
 
@@ -3,9 +3,9 @@
3
3
  import { Observable } from "@noya-app/observable";
4
4
  import { memoGeneric } from "@noya-app/react-utils";
5
5
  import {
6
- ConnectedUsersManager,
7
6
  EphemeralUserDataManager,
8
7
  MultiplayerUser,
8
+ UserManager,
9
9
  } from "@noya-app/state-manager";
10
10
  import React, { useEffect, useMemo, useState } from "react";
11
11
  import { useObservable } from "../useObservable";
@@ -83,19 +83,19 @@ const UserPointerInternal = memoGeneric(function UserPointerInternal<
83
83
  });
84
84
 
85
85
  export type UserPointersOverlayProps<E extends UserPointerData> = {
86
- connectedUsersManager: ConnectedUsersManager;
86
+ userManager: UserManager;
87
87
  ephemeralUserDataManager: EphemeralUserDataManager<E>;
88
88
  } & RenderUserPointer;
89
89
 
90
90
  export const UserPointersOverlay = memoGeneric(function UserPointers<
91
91
  E extends UserPointerData,
92
92
  >({
93
- connectedUsersManager,
93
+ userManager,
94
94
  ephemeralUserDataManager,
95
95
  renderUserPointer,
96
96
  }: UserPointersOverlayProps<E>) {
97
97
  const currentUserId = useObservable(ephemeralUserDataManager.currentUserId$);
98
- const connectedUsers = useObservable(connectedUsersManager.connectedUsers$);
98
+ const connectedUsers = useObservable(userManager.connectedUsers$);
99
99
 
100
100
  return (
101
101
  <>
package/src/hooks.ts CHANGED
@@ -135,7 +135,7 @@ export function useBindNoyaManager<
135
135
  noyaManager: typeof noyaManager;
136
136
  taskManager: typeof noyaManager.taskManager;
137
137
  connectionEventManager: typeof noyaManager.connectionEventManager;
138
- connectedUsersManager: typeof noyaManager.connectedUsersManager;
138
+ userManager: typeof noyaManager.userManager;
139
139
  ephemeralUserDataManager: typeof noyaManager.ephemeralUserDataManager;
140
140
  multiplayerStateManager: typeof noyaManager.multiplayerStateManager;
141
141
  assetManager: typeof noyaManager.assetManager;
@@ -154,7 +154,7 @@ export function useBindNoyaManager<
154
154
  noyaManager,
155
155
  taskManager: noyaManager.taskManager,
156
156
  connectionEventManager: noyaManager.connectionEventManager,
157
- connectedUsersManager: noyaManager.connectedUsersManager,
157
+ userManager: noyaManager.userManager,
158
158
  ephemeralUserDataManager: noyaManager.ephemeralUserDataManager,
159
159
  multiplayerStateManager: noyaManager.multiplayerStateManager,
160
160
  assetManager: noyaManager.assetManager,
@@ -182,6 +182,7 @@ export function useBindNoyaManager<
182
182
  useStateInspector<S, M, E, MenuT>({
183
183
  noyaManager,
184
184
  disabled: !options?.inspector,
185
+ advanced: true,
185
186
  ...(typeof options?.inspector === "object" && options?.inspector),
186
187
  });
187
188