@peers-app/peers-ui 0.9.1 → 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.
- package/dist/screens/settings/settings-page.js +11 -0
- package/dist/screens/setup-user.js +3 -4
- package/dist/tabs-layout/tabs-layout.js +10 -3
- package/dist/tabs-layout/tabs-state.js +7 -5
- package/package.json +3 -3
- package/src/screens/settings/settings-page.tsx +24 -1
- package/src/screens/setup-user.tsx +3 -4
- package/src/tabs-layout/tabs-layout.tsx +8 -4
- package/src/tabs-layout/tabs-state.ts +7 -7
|
@@ -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
|
|
61
|
-
peers_sdk_1.rpcServerCalls.addOrUpdatePackage(peers_sdk_1.peersCorePackageId, { dataContextId: _userId }).catch((err) => {
|
|
62
|
-
console.error('Error auto-installing peers-core
|
|
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
|
-
|
|
161
|
-
|
|
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
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
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)(
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
|
34
|
-
rpcServerCalls.addOrUpdatePackage(peersCorePackageId, { dataContextId: _userId }).catch((err: any) => {
|
|
35
|
-
console.error('Error auto-installing peers-core
|
|
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
|
-
|
|
171
|
-
|
|
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
|
-
|
|
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
|
|