Add instance nav prefs, env config UI, and PM2 restart.
P1-P4: configurable nav/section visibility in system settings, full .env editor with restart badges, password change, runtime hot overrides, and single-instance pm2 restart. Works in hub embed iframe. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -12,6 +12,7 @@
|
||||
records: "/records",
|
||||
stats: "/stats",
|
||||
risk_policy: "/risk_policy",
|
||||
env_config: "/env_config",
|
||||
settings: "/settings",
|
||||
};
|
||||
|
||||
@@ -52,6 +53,13 @@
|
||||
});
|
||||
}
|
||||
|
||||
function pageNavAllowed(tab) {
|
||||
if (global.InstanceSettingsPrefs && typeof global.InstanceSettingsPrefs.pageNavAllowed === "function") {
|
||||
return global.InstanceSettingsPrefs.pageNavAllowed(tab);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
function syncUrl(tab, replace) {
|
||||
const q = new URLSearchParams(location.search);
|
||||
q.set("tab", tab);
|
||||
@@ -99,6 +107,16 @@
|
||||
if (!revisit && tab === "stats") {
|
||||
if (typeof global.initStatsSegmentFromUrl === "function") global.initStatsSegmentFromUrl();
|
||||
}
|
||||
if (!revisit && (tab === "settings" || tab === "env_config")) {
|
||||
if (global.InstanceSettingsPrefs) {
|
||||
if (tab === "settings" && typeof global.InstanceSettingsPrefs.loadDisplayPrefsForm === "function") {
|
||||
global.InstanceSettingsPrefs.loadDisplayPrefsForm();
|
||||
}
|
||||
if (tab === "env_config" && typeof global.InstanceSettingsPrefs.loadEnvConfig === "function") {
|
||||
global.InstanceSettingsPrefs.loadEnvConfig();
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!revisit) {
|
||||
if (typeof global.refreshAccountSnapshot === "function") {
|
||||
global.refreshAccountSnapshot({ silent: true });
|
||||
@@ -243,7 +261,7 @@
|
||||
}
|
||||
|
||||
function syncShellChrome(tab) {
|
||||
const hideTopBar = tab === "settings" || tab === "risk_policy";
|
||||
const hideTopBar = tab === "settings" || tab === "risk_policy" || tab === "env_config";
|
||||
document.querySelectorAll(".instance-top-bar").forEach((el) => {
|
||||
el.hidden = hideTopBar;
|
||||
});
|
||||
@@ -286,6 +304,10 @@
|
||||
async function loadTab(tab, opts) {
|
||||
const options = opts || {};
|
||||
if (!tab) return;
|
||||
if (!pageNavAllowed(tab)) {
|
||||
void loadTab("trade", { replace: true });
|
||||
return;
|
||||
}
|
||||
|
||||
if (tabPanes.has(tab) && !options.force) {
|
||||
activateTab(tab, Object.assign({}, options, { revisit: true }));
|
||||
@@ -434,7 +456,12 @@
|
||||
patchApplyListWindow();
|
||||
patchHardNavigations();
|
||||
initBootPane();
|
||||
if (getTab() === "settings") {
|
||||
const bootTab = getTab();
|
||||
if (!pageNavAllowed(bootTab)) {
|
||||
void loadTab("trade", { replace: true });
|
||||
return;
|
||||
}
|
||||
if (bootTab === "settings") {
|
||||
initPaneThemeToggle("settings");
|
||||
}
|
||||
bindNav();
|
||||
|
||||
Reference in New Issue
Block a user