@peers-app/peers-ui 0.7.2 → 0.7.3

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.
@@ -170,14 +170,13 @@ function CreateGroupModal({ colorMode, userContext, onClose, onGroupCreated }) {
170
170
  isSecret: true,
171
171
  value: { value: groupKeys.secretKey },
172
172
  });
173
- // Add current user to the group's users table as trusted
174
- await (0, peers_sdk_1.Users)(groupDataContext).save({
175
- ...me,
176
- trustLevel: peers_sdk_1.TrustLevel.Trusted
177
- });
173
+ // Add current user to the group's users table
174
+ await (0, peers_sdk_1.Users)(groupDataContext).save(me);
175
+ // Set trust level for current user in the group context
176
+ await (0, peers_sdk_1.setUserTrustLevel)(me.userId, peers_sdk_1.TrustLevel.Trusted, groupDataContext);
178
177
  // Create group in both user's and group's context
179
178
  const groupsTable = (0, peers_sdk_1.Groups)(userContext.userDataContext);
180
- const newGroup = await groupsTable.save({
179
+ const newGroup = await groupsTable.signAndSave({
181
180
  groupId,
182
181
  name: trimmedName,
183
182
  description: description.trim(),
@@ -186,9 +185,9 @@ function CreateGroupModal({ colorMode, userContext, onClose, onGroupCreated }) {
186
185
  disabled: false,
187
186
  publicKey: groupKeys.publicKey,
188
187
  publicBoxKey: groupKeys.publicBoxKey,
189
- signature: '', // Will be signed by save()
188
+ signature: '', // Will be set by signAndSave()
190
189
  });
191
- await (0, peers_sdk_1.Groups)(groupDataContext).save(newGroup);
190
+ await (0, peers_sdk_1.Groups)(groupDataContext).signAndSave(newGroup);
192
191
  // Auto-install peers-core for the new group
193
192
  await peers_sdk_1.rpcServerCalls.addOrUpdatePackage(peers_sdk_1.peersCorePackageId, { dataContextId: groupId }).catch((err) => {
194
193
  console.error('Error auto-installing peers-core for group:', err);
package/dist/globals.d.ts CHANGED
@@ -16,9 +16,9 @@ export declare const groups: import("@peers-app/peers-sdk").Observable<{
16
16
  description: string;
17
17
  signature: string;
18
18
  publicKey: string;
19
+ publicBoxKey: string;
19
20
  groupId: string;
20
21
  founderUserId: string;
21
- publicBoxKey: string;
22
22
  disabled?: boolean | undefined;
23
23
  iconClassName?: string | undefined;
24
24
  publicRole?: import("@peers-app/peers-sdk").GroupMemberRole | undefined;
@@ -66,6 +66,22 @@ const ContactInfo = (props) => {
66
66
  };
67
67
  const TrustLevelSelector = (props) => {
68
68
  const { contact } = props;
69
+ const [trustLevel, setTrustLevelState] = react_1.default.useState(peers_sdk_1.TrustLevel.Unknown);
70
+ const [loading, setLoading] = react_1.default.useState(true);
71
+ react_1.default.useEffect(() => {
72
+ async function loadTrustLevel() {
73
+ const userContext = await (0, peers_sdk_1.getUserContext)();
74
+ const level = await (0, peers_sdk_1.getUserTrustLevel)(userContext.userDataContext, contact.userId);
75
+ setTrustLevelState(level);
76
+ setLoading(false);
77
+ }
78
+ loadTrustLevel();
79
+ }, [contact.userId]);
80
+ async function handleTrustLevelChange(newLevel) {
81
+ const userContext = await (0, peers_sdk_1.getUserContext)();
82
+ await (0, peers_sdk_1.setUserTrustLevel)(contact.userId, newLevel, userContext.userDataContext);
83
+ setTrustLevelState(newLevel);
84
+ }
69
85
  const trustLevels = [
70
86
  { value: peers_sdk_1.TrustLevel.Self, label: 'Self', color: 'success' },
71
87
  { value: peers_sdk_1.TrustLevel.Trusted, label: 'Trusted', color: 'success' },
@@ -76,9 +92,12 @@ const TrustLevelSelector = (props) => {
76
92
  { value: peers_sdk_1.TrustLevel.Untrusted, label: 'Untrusted', color: 'danger' },
77
93
  { value: peers_sdk_1.TrustLevel.Malicious, label: 'Malicious', color: 'danger' },
78
94
  ];
79
- return (react_1.default.createElement("div", { className: "d-flex flex-wrap gap-2" }, trustLevels.map(level => (react_1.default.createElement("button", { key: level.value, className: `btn btn-sm ${contact.trustLevel === level.value
95
+ if (loading) {
96
+ return react_1.default.createElement(loading_indicator_1.LoadingIndicator, null);
97
+ }
98
+ return (react_1.default.createElement("div", { className: "d-flex flex-wrap gap-2" }, trustLevels.map(level => (react_1.default.createElement("button", { key: level.value, className: `btn btn-sm ${trustLevel === level.value
80
99
  ? `btn-${level.color}`
81
- : `btn-outline-${level.color}`}`, onClick: () => contact.trustLevel = level.value }, level.label)))));
100
+ : `btn-outline-${level.color}`}`, onClick: () => handleTrustLevelChange(level.value) }, level.label)))));
82
101
  };
83
102
  (0, ui_loader_1.registerInternalPeersUI)({
84
103
  peersUIId: '00contact00details00component',
@@ -87,9 +87,10 @@ function ContactList() {
87
87
  name: 'New User',
88
88
  publicKey: '',
89
89
  publicBoxKey: '',
90
- trustLevel: peers_sdk_1.TrustLevel.NewUser
91
90
  });
92
91
  await usersTable.save(newContact);
92
+ // Set initial trust level
93
+ await (0, peers_sdk_1.setUserTrustLevel)(userId.trim(), peers_sdk_1.TrustLevel.NewUser, userContext.userDataContext);
93
94
  // Navigate to the details screen for the new contact
94
95
  (0, globals_1.mainContentPath)(`contacts/${userId.trim()}`);
95
96
  }
@@ -56,14 +56,14 @@ const GroupDetails = (props) => {
56
56
  }
57
57
  (0, tabs_state_1.updateActiveTabTitle)(group.name || "Group");
58
58
  const groupDoc = userGroupTable.initDoc(group);
59
- // Bit of a hack - saves go to both the group and user db
60
- const originalSave = groupDoc.save;
59
+ // saves go to both the group and user db
61
60
  groupDoc.save = async () => {
62
- const saveResult = await originalSave();
63
61
  const groupDataContext = userContext.getDataContext(group.groupId);
64
62
  const groupGroupTable = (0, peers_sdk_1.Groups)(groupDataContext);
65
- await groupGroupTable.save(saveResult.toJS());
66
- return saveResult;
63
+ const groupData = groupDoc.toJS();
64
+ await groupGroupTable.signAndSave(groupData);
65
+ await userGroupTable.signAndSave(groupData);
66
+ return groupDoc.load();
67
67
  };
68
68
  const originalDelete = groupDoc.delete;
69
69
  groupDoc.delete = async () => {
@@ -127,12 +127,11 @@ function GroupList() {
127
127
  });
128
128
  // add me to the group's users table
129
129
  const me = await (0, peers_sdk_1.getMe)();
130
- await (0, peers_sdk_1.Users)(groupDataContext).save({
131
- ...me,
132
- trustLevel: peers_sdk_1.TrustLevel.Trusted
133
- });
130
+ await (0, peers_sdk_1.Users)(groupDataContext).save(me);
131
+ // Set trust level for current user in the group context
132
+ await (0, peers_sdk_1.setUserTrustLevel)(me.userId, peers_sdk_1.TrustLevel.Trusted, groupDataContext);
134
133
  // create group in both the user's and group's context
135
- const group = await (0, peers_sdk_1.Groups)(userContext.userDataContext).save({
134
+ const group = await (0, peers_sdk_1.Groups)(userContext.userDataContext).signAndSave({
136
135
  groupId,
137
136
  name: groupName,
138
137
  description: '',
@@ -141,9 +140,9 @@ function GroupList() {
141
140
  disabled: false,
142
141
  publicKey: groupKeys.publicKey,
143
142
  publicBoxKey: groupKeys.publicBoxKey,
144
- signature: '', // calling save will sign
143
+ signature: '', // will be set via signAndSave
145
144
  });
146
- await (0, peers_sdk_1.Groups)(groupDataContext).save(group);
145
+ await (0, peers_sdk_1.Groups)(groupDataContext).signAndSave(group);
147
146
  // Auto-install peers-core for the new group
148
147
  await peers_sdk_1.rpcServerCalls.addOrUpdatePackage(peers_sdk_1.peersCorePackageId, { dataContextId: groupId }).catch((err) => {
149
148
  console.error('Error auto-installing peers-core for group:', err);
@@ -28,14 +28,12 @@ const GroupMembersUI = (props) => {
28
28
  // If user found from external source, save to current group
29
29
  if (user && user.source !== 'currentDataContext') {
30
30
  try {
31
- const newGroupUser = await groupUsersTable.initRecord({
32
- userId: user.userId,
33
- name: user.name,
34
- publicKey: user.publicKey || '',
35
- publicBoxKey: user.publicBoxKey || '',
36
- trustLevel: peers_sdk_1.TrustLevel.NewUser
37
- });
31
+ const newGroupUser = { ...user };
32
+ delete newGroupUser.source;
33
+ delete newGroupUser.trustLevel;
38
34
  await groupUsersTable.save(newGroupUser);
35
+ // Set trust level for this user in the group context
36
+ await (0, peers_sdk_1.setUserTrustLevel)(user.userId, peers_sdk_1.TrustLevel.NewUser, groupDataContext);
39
37
  // Update user reference to reflect it's now in current group
40
38
  user.trustLevel = peers_sdk_1.TrustLevel.NewUser;
41
39
  user.source = 'currentDataContext';
@@ -153,7 +151,7 @@ const GroupMembersUI = (props) => {
153
151
  role: newMemberRole
154
152
  });
155
153
  }
156
- await groupMembersTable.save(member);
154
+ await groupMembersTable.signAndSave(member);
157
155
  }
158
156
  // Reset form
159
157
  setSelectedContacts([]);
@@ -176,7 +174,7 @@ const GroupMembersUI = (props) => {
176
174
  const member = await groupMembersTable.get(memberId);
177
175
  if (member) {
178
176
  member.role = newRole;
179
- await groupMembersTable.save(member);
177
+ await groupMembersTable.signAndSave(member);
180
178
  setRefreshKey(prev => prev + 1);
181
179
  }
182
180
  }
@@ -46,6 +46,7 @@ const SetupUser = () => {
46
46
  const [secretKey, setSecretKey] = (0, react_1.useState)('');
47
47
  const [error, setError] = (0, react_1.useState)('');
48
48
  const [isValidating, setIsValidating] = (0, react_1.useState)(false);
49
+ document.getElementById('appLoadingDiv')?.remove();
49
50
  const isDark = _colorMode === 'dark';
50
51
  const handleNewUser = async () => {
51
52
  setError('');
@@ -57,7 +57,6 @@ function TabsLayoutApp() {
57
57
  if (userId === undefined) {
58
58
  return;
59
59
  }
60
- document.getElementById('appLoadingDiv')?.remove();
61
60
  if (!userId) {
62
61
  return react_1.default.createElement(setup_user_1.SetupUser, null);
63
62
  }
@@ -84,9 +83,7 @@ function TabsLayout(props) {
84
83
  });
85
84
  if (!loaded)
86
85
  return false;
87
- if (globals_1.me.name === globals_1.me.userId) {
88
- return react_1.default.createElement(setup_user_1.SetupUser, null);
89
- }
86
+ document.getElementById('appLoadingDiv')?.remove();
90
87
  return (react_1.default.createElement(react_1.default.Fragment, null,
91
88
  react_1.default.createElement(TabsLayoutInternal, null),
92
89
  react_1.default.createElement(command_palette_ui_1.CommandPaletteOverlay, null)));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@peers-app/peers-ui",
3
- "version": "0.7.2",
3
+ "version": "0.7.3",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/peers-app/peers-ui.git"
@@ -27,7 +27,7 @@
27
27
  },
28
28
  "peerDependencies": {
29
29
  "bootstrap": "^5.3.3",
30
- "@peers-app/peers-sdk": "^0.7.2",
30
+ "@peers-app/peers-sdk": "^0.7.3",
31
31
  "react": "^18.0.0",
32
32
  "react-dom": "^18.0.0"
33
33
  },
@@ -57,7 +57,7 @@
57
57
  "jest": "^29.7.0",
58
58
  "jest-environment-jsdom": "^30.0.5",
59
59
  "path-browserify": "^1.0.1",
60
- "@peers-app/peers-sdk": "0.7.2",
60
+ "@peers-app/peers-sdk": "0.7.3",
61
61
  "react": "^18.0.0",
62
62
  "react-dom": "^18.0.0",
63
63
  "string-width": "^7.1.0",
@@ -1,4 +1,4 @@
1
- import { getMe, getUserContext, Groups, IGroup, newid, newKeys, peersCorePackageId, rpcServerCalls, TrustLevel, UserContext, Users } from "@peers-app/peers-sdk";
1
+ import { getMe, getUserContext, Groups, IGroup, newid, newKeys, peersCorePackageId, rpcServerCalls, setUserTrustLevel, TrustLevel, UserContext, Users } from "@peers-app/peers-sdk";
2
2
  import React, { useEffect, useState } from 'react';
3
3
  import { usePromise } from '../hooks';
4
4
 
@@ -229,15 +229,15 @@ function CreateGroupModal({ colorMode, userContext, onClose, onGroupCreated }: C
229
229
  value: { value: groupKeys.secretKey },
230
230
  });
231
231
 
232
- // Add current user to the group's users table as trusted
233
- await Users(groupDataContext).save({
234
- ...me,
235
- trustLevel: TrustLevel.Trusted
236
- });
232
+ // Add current user to the group's users table
233
+ await Users(groupDataContext).save(me);
234
+
235
+ // Set trust level for current user in the group context
236
+ await setUserTrustLevel(me.userId, TrustLevel.Trusted, groupDataContext);
237
237
 
238
238
  // Create group in both user's and group's context
239
239
  const groupsTable = Groups(userContext.userDataContext);
240
- const newGroup = await groupsTable.save({
240
+ const newGroup = await groupsTable.signAndSave({
241
241
  groupId,
242
242
  name: trimmedName,
243
243
  description: description.trim(),
@@ -246,10 +246,10 @@ function CreateGroupModal({ colorMode, userContext, onClose, onGroupCreated }: C
246
246
  disabled: false,
247
247
  publicKey: groupKeys.publicKey,
248
248
  publicBoxKey: groupKeys.publicBoxKey,
249
- signature: '', // Will be signed by save()
249
+ signature: '', // Will be set by signAndSave()
250
250
  });
251
251
 
252
- await Groups(groupDataContext).save(newGroup);
252
+ await Groups(groupDataContext).signAndSave(newGroup);
253
253
 
254
254
  // Auto-install peers-core for the new group
255
255
  await rpcServerCalls.addOrUpdatePackage(peersCorePackageId, { dataContextId: groupId }).catch((err: any) => {
@@ -1,4 +1,4 @@
1
- import { getUserContext, IDoc, IUser, TrustLevel, Users } from "@peers-app/peers-sdk";
1
+ import { getUserContext, getUserTrustLevel, IDoc, IUser, setUserTrustLevel, TrustLevel, Users } from "@peers-app/peers-sdk";
2
2
  import React from "react";
3
3
  import { Input } from "../../components/input";
4
4
  import { LoadingIndicator } from "../../components/loading-indicator";
@@ -124,6 +124,24 @@ const ContactInfo = (props: { contact: IDoc<IUser> }) => {
124
124
 
125
125
  const TrustLevelSelector = (props: { contact: IDoc<IUser> }) => {
126
126
  const { contact } = props;
127
+ const [trustLevel, setTrustLevelState] = React.useState<TrustLevel>(TrustLevel.Unknown);
128
+ const [loading, setLoading] = React.useState(true);
129
+
130
+ React.useEffect(() => {
131
+ async function loadTrustLevel() {
132
+ const userContext = await getUserContext();
133
+ const level = await getUserTrustLevel(userContext.userDataContext, contact.userId);
134
+ setTrustLevelState(level);
135
+ setLoading(false);
136
+ }
137
+ loadTrustLevel();
138
+ }, [contact.userId]);
139
+
140
+ async function handleTrustLevelChange(newLevel: TrustLevel) {
141
+ const userContext = await getUserContext();
142
+ await setUserTrustLevel(contact.userId, newLevel, userContext.userDataContext);
143
+ setTrustLevelState(newLevel);
144
+ }
127
145
 
128
146
  const trustLevels = [
129
147
  { value: TrustLevel.Self, label: 'Self', color: 'success' },
@@ -136,17 +154,21 @@ const TrustLevelSelector = (props: { contact: IDoc<IUser> }) => {
136
154
  { value: TrustLevel.Malicious, label: 'Malicious', color: 'danger' },
137
155
  ];
138
156
 
157
+ if (loading) {
158
+ return <LoadingIndicator />;
159
+ }
160
+
139
161
  return (
140
162
  <div className="d-flex flex-wrap gap-2">
141
163
  {trustLevels.map(level => (
142
164
  <button
143
165
  key={level.value}
144
166
  className={`btn btn-sm ${
145
- contact.trustLevel === level.value
146
- ? `btn-${level.color}`
167
+ trustLevel === level.value
168
+ ? `btn-${level.color}`
147
169
  : `btn-outline-${level.color}`
148
170
  }`}
149
- onClick={() => contact.trustLevel = level.value}
171
+ onClick={() => handleTrustLevelChange(level.value)}
150
172
  >
151
173
  {level.label}
152
174
  </button>
@@ -1,4 +1,4 @@
1
- import { getUserContext, ICursorIterable, IUserWithSource, observable, TrustLevel, Users, usersCursor } from "@peers-app/peers-sdk";
1
+ import { getUserContext, ICursorIterable, IUserWithSource, observable, setUserTrustLevel, TrustLevel, Users, usersCursor } from "@peers-app/peers-sdk";
2
2
  import React, { useEffect, useState } from 'react';
3
3
  import { Input } from '../../components/input';
4
4
  import { LazyList } from '../../components/lazy-list';
@@ -49,17 +49,19 @@ export function ContactList() {
49
49
  try {
50
50
  const userContext = await getUserContext();
51
51
  const usersTable = Users(userContext.userDataContext);
52
-
52
+
53
53
  const newContact = await usersTable.initRecord({
54
54
  userId: userId.trim(),
55
55
  name: 'New User',
56
56
  publicKey: '',
57
57
  publicBoxKey: '',
58
- trustLevel: TrustLevel.NewUser
59
58
  });
60
-
59
+
61
60
  await usersTable.save(newContact);
62
-
61
+
62
+ // Set initial trust level
63
+ await setUserTrustLevel(userId.trim(), TrustLevel.NewUser, userContext.userDataContext);
64
+
63
65
  // Navigate to the details screen for the new contact
64
66
  mainContentPath(`contacts/${userId.trim()}`);
65
67
  } catch (error) {
@@ -26,14 +26,14 @@ export const GroupDetails = (props: IProps) => {
26
26
  }
27
27
  updateActiveTabTitle(group.name || "Group");
28
28
  const groupDoc = userGroupTable.initDoc(group);
29
- // Bit of a hack - saves go to both the group and user db
30
- const originalSave = groupDoc.save;
29
+ // saves go to both the group and user db
31
30
  groupDoc.save = async () => {
32
- const saveResult = await originalSave();
33
31
  const groupDataContext = userContext.getDataContext(group.groupId);
34
32
  const groupGroupTable = Groups(groupDataContext);
35
- await groupGroupTable.save(saveResult.toJS());
36
- return saveResult;
33
+ const groupData = groupDoc.toJS();
34
+ await groupGroupTable.signAndSave(groupData);
35
+ await userGroupTable.signAndSave(groupData);
36
+ return groupDoc.load();
37
37
  }
38
38
  const originalDelete = groupDoc.delete;
39
39
  groupDoc.delete = async () => {
@@ -1,4 +1,4 @@
1
- import { getMe, getUserContext, Groups, ICursorIterable, IGroup, newid, newKeys, observable, peersCorePackageId, rpcServerCalls, TrustLevel, Users } from "@peers-app/peers-sdk";
1
+ import { getMe, getUserContext, Groups, ICursorIterable, IGroup, newid, newKeys, observable, peersCorePackageId, rpcServerCalls, setUserTrustLevel, TrustLevel, Users } from "@peers-app/peers-sdk";
2
2
  import React, { useEffect, useState } from 'react';
3
3
  import { Input } from '../../components/input';
4
4
  import { LazyList } from '../../components/lazy-list';
@@ -98,13 +98,13 @@ export function GroupList() {
98
98
 
99
99
  // add me to the group's users table
100
100
  const me = await getMe();
101
- await Users(groupDataContext).save({
102
- ...me,
103
- trustLevel: TrustLevel.Trusted
104
- });
101
+ await Users(groupDataContext).save(me);
102
+
103
+ // Set trust level for current user in the group context
104
+ await setUserTrustLevel(me.userId, TrustLevel.Trusted, groupDataContext);
105
105
 
106
106
  // create group in both the user's and group's context
107
- const group = await Groups(userContext.userDataContext).save({
107
+ const group = await Groups(userContext.userDataContext).signAndSave({
108
108
  groupId,
109
109
  name: groupName,
110
110
  description: '',
@@ -113,9 +113,9 @@ export function GroupList() {
113
113
  disabled: false,
114
114
  publicKey: groupKeys.publicKey,
115
115
  publicBoxKey: groupKeys.publicBoxKey,
116
- signature: '', // calling save will sign
116
+ signature: '', // will be set via signAndSave
117
117
  });
118
- await Groups(groupDataContext).save(group);
118
+ await Groups(groupDataContext).signAndSave(group);
119
119
 
120
120
  // Auto-install peers-core for the new group
121
121
  await rpcServerCalls.addOrUpdatePackage(peersCorePackageId, { dataContextId: groupId }).catch((err: any) => {
@@ -1,4 +1,4 @@
1
- import { GroupMembers, getUserContext, IUserWithSource, usersCursor, getUserById, Users, TrustLevel, GroupMemberRole, getUserRole, getRoleLabel, Groups, UserContext } from "@peers-app/peers-sdk";
1
+ import { GroupMembers, getUserContext, IUserWithSource, usersCursor, getUserById, Users, TrustLevel, GroupMemberRole, getUserRole, getRoleLabel, Groups, UserContext, setUserTrustLevel, IUser } from "@peers-app/peers-sdk";
2
2
  import React from "react";
3
3
  import { LoadingIndicator } from "../../components/loading-indicator";
4
4
  import { Typeahead, TypeaheadItem } from "../../components/typeahead";
@@ -34,16 +34,14 @@ export const GroupMembersUI = (props: GroupMembersUIProps) => {
34
34
  // If user found from external source, save to current group
35
35
  if (user && user.source !== 'currentDataContext') {
36
36
  try {
37
- const newGroupUser = await groupUsersTable.initRecord({
38
- userId: user.userId,
39
- name: user.name,
40
- publicKey: user.publicKey || '',
41
- publicBoxKey: user.publicBoxKey || '',
42
- trustLevel: TrustLevel.NewUser
43
- });
44
-
37
+ const newGroupUser: IUser = { ...user };
38
+ delete (newGroupUser as any).source;
39
+ delete (newGroupUser as any).trustLevel;
45
40
  await groupUsersTable.save(newGroupUser);
46
-
41
+
42
+ // Set trust level for this user in the group context
43
+ await setUserTrustLevel(user.userId, TrustLevel.NewUser, groupDataContext);
44
+
47
45
  // Update user reference to reflect it's now in current group
48
46
  user.trustLevel = TrustLevel.NewUser;
49
47
  user.source = 'currentDataContext';
@@ -183,7 +181,7 @@ export const GroupMembersUI = (props: GroupMembersUIProps) => {
183
181
  role: newMemberRole
184
182
  });
185
183
  }
186
- await groupMembersTable.save(member);
184
+ await groupMembersTable.signAndSave(member);
187
185
  }
188
186
 
189
187
  // Reset form
@@ -210,7 +208,7 @@ export const GroupMembersUI = (props: GroupMembersUIProps) => {
210
208
  const member = await groupMembersTable.get(memberId);
211
209
  if (member) {
212
210
  member.role = newRole;
213
- await groupMembersTable.save(member);
211
+ await groupMembersTable.signAndSave(member);
214
212
  setRefreshKey(prev => prev + 1);
215
213
  }
216
214
  } catch (err) {
@@ -14,6 +14,8 @@ export const SetupUser = () => {
14
14
  const [error, setError] = useState('');
15
15
  const [isValidating, setIsValidating] = useState(false);
16
16
 
17
+ document.getElementById('appLoadingDiv')?.remove();
18
+
17
19
  const isDark = _colorMode === 'dark';
18
20
 
19
21
  const handleNewUser = async () => {
@@ -23,8 +23,6 @@ export function TabsLayoutApp() {
23
23
  return;
24
24
  }
25
25
 
26
- document.getElementById('appLoadingDiv')?.remove();
27
-
28
26
  if (!userId) {
29
27
  return <SetupUser />;
30
28
  } else {
@@ -53,9 +51,7 @@ export function TabsLayout(props: { userId: string }) {
53
51
 
54
52
  if (!loaded) return false;
55
53
 
56
- if (me.name === me.userId) {
57
- return <SetupUser />
58
- }
54
+ document.getElementById('appLoadingDiv')?.remove();
59
55
 
60
56
  return (
61
57
  <>