CI / Build & Quality Checks (push) Skipped
CI / Secret scan (gitleaks) (push) Skipped
CI / Playwright smoke (e2e) (push) Skipped
CI / Build & Quality Checks (pull_request) Successful in 3m44s
CI / Trigger Desktop Build (pull_request) Skipped
CI / Docker image build & smoke test (pull_request) Skipped
CI / Secret scan (gitleaks) (pull_request) Successful in 16s
CI / Playwright smoke (e2e) (pull_request) Failing after 23m12s
A search box at the top of the settings sidebar (Ctrl/Cmd+F while settings are open). Results replace the page list while typing, showing the page and section; picking one (or Enter for the top result) opens that page, scrolls to the setting and briefly outlines it. Esc clears. The index is built from the settings source itself (SettingTile titles and descriptions, section headers), loaded as raw text in a lazy chunk on first search, so options added later are found without a hand-kept list. Desktop-only options only show in the desktop app. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017PCb59uY3UKqDqt7B6hzd5
21 lines
777 B
TypeScript
21 lines
777 B
TypeScript
import { parseSettingsSource, SettingsEntry } from './settingsIndex';
|
|
|
|
// [Gitea #463] The settings source, as text, in its own lazily loaded chunk:
|
|
// fetched the first time someone searches, never at startup.
|
|
const sources = import.meta.glob(['../**/*.tsx', '!../**/*.test.tsx'], {
|
|
query: '?raw',
|
|
import: 'default',
|
|
}) as Record<string, () => Promise<string>>;
|
|
|
|
let index: Promise<SettingsEntry[]> | undefined;
|
|
|
|
export const loadSettingsIndex = (): Promise<SettingsEntry[]> => {
|
|
index ??= Promise.all(
|
|
Object.entries(sources).map(async ([path, load]) =>
|
|
// '../general/General.tsx' -> '/general/General.tsx' (what the parser matches)
|
|
parseSettingsSource(path.replace(/^\.\./, ''), await load()),
|
|
),
|
|
).then((all) => all.flat());
|
|
return index;
|
|
};
|