„Einrichten" zeigt jetzt, was fehlt — und Env-Werte gelten als gesetzt
Deploy / check (push) Has been cancelled
Deploy / deploy (push) Has been cancelled

Zwei Fehler, die zusammen für Ratlosigkeit gesorgt haben.

In der Liste stand „Fehlermeldungen — Gitea-Token", obwohl das Token über
GITEA_API_TOKEN längst gesetzt war und /bug lief. Grund: die
Voraussetzungs-Prüfung las die Einstellung roh statt den wirksamen Wert,
sah also nur in die Datenbank und nicht in die Umgebung. Betraf außerdem
Devlog-Kanal, Commit-Kanal und Guild-ID. runtime-settings hat dafür jetzt
effectiveSetting(), das beides zusammenführt.

Und wer dann auf „Einrichten" drückte, landete im System-Bereich — dort
gibt es gar kein Token-Feld, das steht bei Brand. Das Modul zeigte auf den
falschen Bereich.

Jetzt springt „Einrichten" auf das konkrete Feld und hebt es kurz hervor,
statt nur den Bereich zu wechseln. Der Bereich kommt dabei aus dem
Einstellungs-Register, das ohnehin weiß, wo jedes Feld liegt — damit kann
die Zuordnung am Modul nicht mehr auseinanderlaufen. Dieselbe Logik hängt
an „Einstellungen →" auf den Modul-Karten.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-31 21:43:34 +02:00
co-authored by Claude Fable 5
parent 01fadadcd8
commit bea35234c6
4 changed files with 56 additions and 10 deletions
+25 -8
View File
@@ -9,7 +9,7 @@ import {
IconSearch, IconSystem as IconTune,
} from '../icons.jsx';
import { moduleIcon } from '../module-icons.jsx';
import { findSettings } from '../setting-index.js';
import { findSettings, SETTING_INDEX } from '../setting-index.js';
import { Markdown } from '../markdown.jsx';
const API_SCOPES = [
@@ -348,6 +348,16 @@ export default function Settings({ me }) {
// … und zusätzlich auf einzelne Einstellungen, mit Sprung aufs Feld
const foundSettings = query ? findSettings(query, canTab) : [];
/**
* Zum Feld einer Einstellung springen — der Bereich kommt aus dem Register,
* damit „Einrichten" nicht im falschen Tab landet (das Gitea-Token steht
* z. B. bei Brand, nicht bei System).
*/
function jumpToMissing(fehlt, fallbackTab) {
const bekannt = SETTING_INDEX.find((s) => s.id === fehlt.setting);
jumpToSetting(bekannt ?? { id: fehlt.setting, tab: fallbackTab });
}
/** Bereich wechseln, zum Feld scrollen und es kurz hervorheben */
function jumpToSetting(entry) {
setTab(entry.tab);
@@ -1155,11 +1165,13 @@ export default function Settings({ me }) {
: `${x.create.rolle ? 'Rolle' : 'Kanal'} anlegen`}
</button>
))}
{m.tab && (
<button className="btn-mini" onClick={() => setTab(m.tab)}>
Einrichten
</button>
)}
<button
className="btn-mini"
title={`Zum Feld „${m.missing[0].label}" springen`}
onClick={() => jumpToMissing(m.missing[0], m.tab)}
>
Einrichten
</button>
</div>
))}
</div>
@@ -1244,7 +1256,7 @@ export default function Settings({ me }) {
<label>Guild-ID <span className="field-hint">für sofortige Slash-Commands; greift beim nächsten Neustart</span></label>
<input type="text" placeholder="Server-ID" value={form.discord_guild_id} onChange={(e) => setForm({ ...form, discord_guild_id: e.target.value })} />
</div>
<div className="field">
<div className="field" data-setting="gitea_api_token">
<label>Gitea-API-Token <span className="field-hint">{form.gitea_api_token_set ? '✓ gesetzt — neuen Wert eingeben zum Ersetzen' : 'für /bug; wird nie wieder angezeigt'}</span></label>
<input type="password" placeholder="Token (write-only)" value={giteaToken} onChange={(e) => setGiteaToken(e.target.value)} />
</div>
@@ -2400,7 +2412,12 @@ export default function Settings({ me }) {
)}
{!m.enabled && <span className="mod-off">Ausgeschaltet</span>}
{m.tab && (
<button className="mod-link" onClick={() => setTab(m.tab)}>
<button
className="mod-link"
onClick={() => (m.missing.length > 0
? jumpToMissing(m.missing[0], m.tab)
: setTab(m.tab))}
>
Einstellungen
</button>
)}
+1
View File
@@ -83,6 +83,7 @@ export const SETTING_INDEX = [
{ id: 'cookie_domain', tab: 'system', label: 'Cookie-Domain', find: 'login beide domains' },
{ id: 'gitea_url', tab: 'system', label: 'Gitea-Adresse', find: 'git server url' },
{ id: 'discord_guild_id', tab: 'brand', label: 'Server-ID', find: 'guild id discord' },
{ id: 'gitea_api_token', tab: 'brand', label: 'Gitea-API-Token', find: 'token bug issue schluessel' },
{ id: 'legal_name', tab: 'system', label: 'Impressum: Name', find: 'betreiber rechtstext' },
{ id: 'legal_address', tab: 'system', label: 'Impressum: Anschrift', find: 'adresse rechtstext' },
{ id: 'legal_email', tab: 'system', label: 'Impressum: E-Mail', find: 'kontakt rechtstext' },