Split Web App Settings into tabs; allow unset plugin Control mode

Web App: Settings is now two tabs — Personal settings (account,
appearance, profile, privacy, advanced/danger) and Integrations
(Toyota, Anker Solix). Panels use v-show so loaded state and in-flight
edits survive a tab switch. Adds settings.tabs.* labels (en/pl/da).

API Server panel: non-required select config fields now render a
leading "Not set" option, so a superadmin can leave the Anker Solix
Control mode (and Toyota Brand) unset at the global layer. Previously
every option was a real value, forcing a pick that won the cascade and
locked organizations and users out of choosing their own mode. The
server side already treated an empty value as "abstain"; this closes
the UI gap. Adds plugins.notSet label (en/pl/da) and rebuilds the
embedded panel dist.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
tajniak81
2026-07-19 00:02:37 +02:00
co-authored by Claude Opus 4.8
parent 318e9c1670
commit 8656aaaee3
10 changed files with 50 additions and 3 deletions
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -6,7 +6,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="theme-color" content="#2563eb" />
<title>DriverVault · API Server</title>
<script type="module" crossorigin src="/assets/index-frPmZHwa.js"></script>
<script type="module" crossorigin src="/assets/index-D-rTgBao.js"></script>
<link rel="stylesheet" crossorigin href="/assets/index-D3MeNcl7.css">
</head>
<body>
@@ -187,6 +187,9 @@ const healthClass = (s) =>
{{ f.label || f.key }}<span v-if="f.required" class="text-danger"> *</span>
</label>
<select v-if="f.type === 'select'" v-model="drafts[p.name][f.key]" class="dh-select">
<!-- A non-required select can be left unset (empty), so the global
layer abstains and lower layers (org / user) may choose. -->
<option v-if="!f.required" value="">{{ t("plugins.notSet") }}</option>
<option v-for="o in f.options || []" :key="o.value" :value="o.value">
{{ o.label || o.value }}
</option>
+1
View File
@@ -133,6 +133,7 @@
"configure": "Konfigurer",
"close": "Luk",
"noConfig": "Dette plugin kræver ingen konfiguration.",
"notSet": "Ikke angivet — lad organisationer og brugere vælge",
"capabilities": "Funktioner",
"saved": "Gemt.",
"checking": "Tjekker…",
+1
View File
@@ -133,6 +133,7 @@
"configure": "Configure",
"close": "Close",
"noConfig": "This plugin takes no configuration.",
"notSet": "Not set — let organizations and users choose",
"capabilities": "Capabilities",
"saved": "Saved.",
"checking": "Checking…",
+1
View File
@@ -133,6 +133,7 @@
"configure": "Konfiguruj",
"close": "Zamknij",
"noConfig": "Ta wtyczka nie wymaga konfiguracji.",
"notSet": "Nie ustawiono — pozwól organizacjom i użytkownikom wybrać",
"capabilities": "Możliwości",
"saved": "Zapisano.",
"checking": "Sprawdzanie…",