@peers-app/peers-ui 0.9.2 → 0.9.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.
@@ -79,6 +79,7 @@ const AdvancedSettingsTab = () => {
79
79
  react_1.default.createElement("h5", { className: "mb-3" }, "Advanced Settings"),
80
80
  react_1.default.createElement(PackagesRootDirectory, null),
81
81
  react_1.default.createElement(ReloadPackagesOnPageRefresh, null),
82
+ react_1.default.createElement(AutoUpdatePeersCore, null),
82
83
  react_1.default.createElement(ResetDeviceSyncInfos, null),
83
84
  react_1.default.createElement(DeleteLocalDatabase, null)));
84
85
  };
@@ -194,6 +195,16 @@ const ReloadPackagesOnPageRefresh = () => {
194
195
  } }),
195
196
  react_1.default.createElement(tooltip_1.Tooltip, { markdownContent: `Checking this will reload all packages very time the page is loaded. Particularly useful while developing packages.` })));
196
197
  };
198
+ const AutoUpdatePeersCore = () => {
199
+ (0, hooks_1.useObservable)(peers_sdk_1.autoUpdatePeersCore);
200
+ return (react_1.default.createElement("div", null,
201
+ react_1.default.createElement("label", { htmlFor: "autoUpdatePeersCore", className: "form-label small mt-2 me-2" }, "Auto-update peers-core on startup:"),
202
+ react_1.default.createElement("input", { type: "checkbox", checked: (0, peers_sdk_1.autoUpdatePeersCore)(), onChange: (e) => {
203
+ const checked = e.target.checked;
204
+ (0, peers_sdk_1.autoUpdatePeersCore)(checked);
205
+ } }),
206
+ react_1.default.createElement(tooltip_1.Tooltip, { markdownContent: `When enabled, the peers-core system package is automatically updated from the bundled version on every app startup. Disable this if you want to manage peers-core manually.` })));
207
+ };
197
208
  const ResetDeviceSyncInfos = () => {
198
209
  return (react_1.default.createElement("div", { className: 'mt-3' },
199
210
  react_1.default.createElement("button", { className: 'btn btn-secondary btn-sm ms-2', onClick: async () => {
@@ -57,11 +57,10 @@ const SetupUser = () => {
57
57
  const _userId = (0, peers_sdk_1.newid)();
58
58
  // Call setUserIdAndSecretKey
59
59
  await peers_sdk_1.rpcServerCalls.setUserIdAndSecretKey(_userId, keys.secretKey);
60
- // Auto-install peers-core for the new user - waits for user creation to finish
61
- peers_sdk_1.rpcServerCalls.addOrUpdatePackage(peers_sdk_1.peersCorePackageId, { dataContextId: _userId }).catch((err) => {
62
- console.error('Error auto-installing peers-core for group:', err);
60
+ // Auto-install peers-core for the new user
61
+ await peers_sdk_1.rpcServerCalls.addOrUpdatePackage(peers_sdk_1.peersCorePackageId, { dataContextId: _userId }).catch((err) => {
62
+ console.error('Error auto-installing peers-core:', err);
63
63
  });
64
- await (0, peers_sdk_1.sleep)(200); // give time for call to get to server before reloading
65
64
  // Success - reload the app
66
65
  window.location.reload();
67
66
  }
@@ -152,13 +152,20 @@ function TabsLayoutInternal() {
152
152
  const tabToClose = currentTabs.find(t => t.tabId === tabId);
153
153
  if (!tabToClose || tabToClose.tabId === "launcher")
154
154
  return;
155
+ const closedIndex = currentTabs.findIndex(t => t.tabId === tabId);
155
156
  const newTabs = currentTabs.filter(t => t.tabId !== tabId);
156
157
  (0, tabs_state_1.activeTabs)(newTabs);
157
158
  tabs_state_1.initializedTabs.delete(tabId);
158
- // If closing active tab, switch to previous tab
159
159
  if (activeTab === tabId) {
160
- const newActiveTab = newTabs.length > 0 ? newTabs[newTabs.length - 1].tabId : 'launcher';
161
- (0, tabs_state_1.activeTabId)(newActiveTab);
160
+ if (newTabs.length === 0) {
161
+ (0, tabs_state_1.activeTabId)('launcher');
162
+ }
163
+ else if (closedIndex < newTabs.length) {
164
+ (0, tabs_state_1.activeTabId)(newTabs[closedIndex].tabId);
165
+ }
166
+ else {
167
+ (0, tabs_state_1.activeTabId)(newTabs[newTabs.length - 1].tabId);
168
+ }
162
169
  }
163
170
  };
164
171
  const switchTab = (tabId) => {
@@ -223,16 +223,18 @@ const closeCurrentTab = () => {
223
223
  const tabToClose = currentTabs.find(t => t.tabId === _activeTabId);
224
224
  if (!tabToClose || tabToClose.tabId === "launcher")
225
225
  return;
226
+ const closedIndex = currentTabs.findIndex(t => t.tabId === _activeTabId);
226
227
  const newTabs = currentTabs.filter(t => t.tabId !== _activeTabId);
227
228
  (0, exports.activeTabs)(newTabs);
228
229
  exports.initializedTabs.delete(_activeTabId);
229
- // If closing active tab, switch to previous tab
230
- if (newTabs.length > 0) {
231
- const newActiveTab = newTabs[newTabs.length - 1].tabId;
232
- (0, exports.activeTabId)(newActiveTab);
230
+ if (newTabs.length === 0) {
231
+ (0, exports.activeTabId)('launcher');
232
+ }
233
+ else if (closedIndex < newTabs.length) {
234
+ (0, exports.activeTabId)(newTabs[closedIndex].tabId);
233
235
  }
234
236
  else {
235
- (0, exports.activeTabId)('launcher');
237
+ (0, exports.activeTabId)(newTabs[newTabs.length - 1].tabId);
236
238
  }
237
239
  };
238
240
  exports.closeCurrentTab = closeCurrentTab;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@peers-app/peers-ui",
3
- "version": "0.9.2",
3
+ "version": "0.9.3",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/peers-app/peers-ui.git"
@@ -26,7 +26,7 @@
26
26
  "test:coverage": "jest --coverage"
27
27
  },
28
28
  "peerDependencies": {
29
- "@peers-app/peers-sdk": "^0.9.2",
29
+ "@peers-app/peers-sdk": "^0.9.3",
30
30
  "bootstrap": "^5.3.3",
31
31
  "react": "^18.0.0",
32
32
  "react-dom": "^18.0.0"
@@ -37,7 +37,7 @@
37
37
  "@babel/preset-react": "^7.24.1",
38
38
  "@babel/preset-typescript": "^7.27.1",
39
39
  "@electron/rebuild": "^3.6.0",
40
- "@peers-app/peers-sdk": "0.9.2",
40
+ "@peers-app/peers-sdk": "0.9.3",
41
41
  "@testing-library/dom": "^10.4.0",
42
42
  "@testing-library/jest-dom": "^6.6.3",
43
43
  "@testing-library/react": "^16.3.0",
@@ -1,4 +1,4 @@
1
- import { Devices, getUserContext, IDevice, packagesRootDir, reloadPackagesOnPageRefresh, rpcServerCalls, thisDeviceId, TrustLevel, Users } from "@peers-app/peers-sdk";
1
+ import { autoUpdatePeersCore, Devices, getUserContext, IDevice, packagesRootDir, reloadPackagesOnPageRefresh, rpcServerCalls, thisDeviceId, TrustLevel, Users } from "@peers-app/peers-sdk";
2
2
  import React, { useEffect } from 'react';
3
3
  import { Input } from '../../components/input';
4
4
  import { Tooltip } from '../../components/tooltip';
@@ -55,6 +55,7 @@ const AdvancedSettingsTab: React.FC = () => {
55
55
  <h5 className="mb-3">Advanced Settings</h5>
56
56
  <PackagesRootDirectory />
57
57
  <ReloadPackagesOnPageRefresh />
58
+ <AutoUpdatePeersCore />
58
59
  <ResetDeviceSyncInfos />
59
60
  <DeleteLocalDatabase />
60
61
  </>
@@ -252,6 +253,28 @@ const ReloadPackagesOnPageRefresh: React.FC = () => {
252
253
  );
253
254
  }
254
255
 
256
+ const AutoUpdatePeersCore: React.FC = () => {
257
+ useObservable(autoUpdatePeersCore);
258
+ return (
259
+ <div>
260
+ <label htmlFor="autoUpdatePeersCore" className="form-label small mt-2 me-2">
261
+ Auto-update peers-core on startup:
262
+ </label>
263
+ <input
264
+ type="checkbox"
265
+ checked={autoUpdatePeersCore()}
266
+ onChange={(e) => {
267
+ const checked = (e.target as HTMLInputElement).checked;
268
+ autoUpdatePeersCore(checked);
269
+ }}
270
+ />
271
+ <Tooltip
272
+ markdownContent={`When enabled, the peers-core system package is automatically updated from the bundled version on every app startup. Disable this if you want to manage peers-core manually.`}
273
+ />
274
+ </div>
275
+ );
276
+ }
277
+
255
278
  const ResetDeviceSyncInfos: React.FC = () => {
256
279
  return (
257
280
  <div className='mt-3'>
@@ -30,11 +30,10 @@ export const SetupUser = () => {
30
30
  // Call setUserIdAndSecretKey
31
31
  await rpcServerCalls.setUserIdAndSecretKey(_userId, keys.secretKey);
32
32
 
33
- // Auto-install peers-core for the new user - waits for user creation to finish
34
- rpcServerCalls.addOrUpdatePackage(peersCorePackageId, { dataContextId: _userId }).catch((err: any) => {
35
- console.error('Error auto-installing peers-core for group:', err);
33
+ // Auto-install peers-core for the new user
34
+ await rpcServerCalls.addOrUpdatePackage(peersCorePackageId, { dataContextId: _userId }).catch((err: any) => {
35
+ console.error('Error auto-installing peers-core:', err);
36
36
  });
37
- await sleep(200); // give time for call to get to server before reloading
38
37
 
39
38
  // Success - reload the app
40
39
  window.location.reload();
@@ -160,15 +160,19 @@ function TabsLayoutInternal() {
160
160
 
161
161
  if (!tabToClose || tabToClose.tabId === "launcher") return;
162
162
 
163
+ const closedIndex = currentTabs.findIndex(t => t.tabId === tabId);
163
164
  const newTabs = currentTabs.filter(t => t.tabId !== tabId);
164
165
  activeTabs(newTabs);
165
-
166
166
  initializedTabs.delete(tabId);
167
167
 
168
- // If closing active tab, switch to previous tab
169
168
  if (activeTab === tabId) {
170
- const newActiveTab = newTabs.length > 0 ? newTabs[newTabs.length - 1].tabId : 'launcher';
171
- activeTabId(newActiveTab);
169
+ if (newTabs.length === 0) {
170
+ activeTabId('launcher');
171
+ } else if (closedIndex < newTabs.length) {
172
+ activeTabId(newTabs[closedIndex].tabId);
173
+ } else {
174
+ activeTabId(newTabs[newTabs.length - 1].tabId);
175
+ }
172
176
  }
173
177
  };
174
178
 
@@ -260,17 +260,17 @@ export const closeCurrentTab = () => {
260
260
 
261
261
  if (!tabToClose || tabToClose.tabId === "launcher") return;
262
262
 
263
+ const closedIndex = currentTabs.findIndex(t => t.tabId === _activeTabId);
263
264
  const newTabs = currentTabs.filter(t => t.tabId !== _activeTabId);
264
265
  activeTabs(newTabs);
265
-
266
266
  initializedTabs.delete(_activeTabId);
267
-
268
- // If closing active tab, switch to previous tab
269
- if (newTabs.length > 0) {
270
- const newActiveTab = newTabs[newTabs.length - 1].tabId;
271
- activeTabId(newActiveTab);
272
- } else {
267
+
268
+ if (newTabs.length === 0) {
273
269
  activeTabId('launcher');
270
+ } else if (closedIndex < newTabs.length) {
271
+ activeTabId(newTabs[closedIndex].tabId);
272
+ } else {
273
+ activeTabId(newTabs[newTabs.length - 1].tabId);
274
274
  }
275
275
  };
276
276