The single 12-card SettingsPage is replaced by a hub at /settings linking
to three thematic sub-pages mounted via a shared SettingsLayout (Outlet):
/settings SettingsHomePage (3 cards-cluster + PageHelp)
/settings/users UsersSettingsPage (Account, License, DocsContent)
/settings/data DataSettingsPage (Categories, DataManagement,
PriceFetchConsentToggle)
/settings/systems SystemsSettingsPage (Version, UpdateCard,
ChangelogContent, LogViewer)
DocsPage and ChangelogPage are extracted into reusable DocsContent /
ChangelogContent components and the standalone /docs and /changelog
routes become Navigate redirects to preserve external bookmarks and
release-note links. UpdateCard is extracted from the inline updater
block for symmetry and testability.
TokenStoreFallbackBanner is mounted once in SettingsLayout, surfacing
the OS-keychain-fallback warning across the four main routes only.
The two existing /settings/categories/{standard,migrate} sub-routes
stay flat (siblings of SettingsLayout) to keep their focused flows
free of the banner — their internal back-links now point to
/settings/data.
i18n FR/EN gain settings.{home, users, data, systems, backToHome};
docs/architecture.md and CHANGELOG{,.fr}.md updated. Pure refactor of
presentation: no new business logic, no Tauri commands, no SQL
migrations.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
45 lines
1.5 KiB
TypeScript
45 lines
1.5 KiB
TypeScript
import { useTranslation } from "react-i18next";
|
|
import { Link } from "react-router-dom";
|
|
import { ArrowLeft } from "lucide-react";
|
|
import AccountCard from "../../components/settings/AccountCard";
|
|
import LicenseCard from "../../components/settings/LicenseCard";
|
|
import DocsContent from "../../components/settings/DocsContent";
|
|
|
|
export default function UsersSettingsPage() {
|
|
const { t } = useTranslation();
|
|
|
|
return (
|
|
<div className="space-y-6">
|
|
<Link
|
|
to="/settings"
|
|
className="inline-flex items-center gap-2 text-sm text-[var(--muted-foreground)] hover:text-[var(--foreground)] transition-colors"
|
|
>
|
|
<ArrowLeft size={16} />
|
|
{t("settings.backToHome")}
|
|
</Link>
|
|
|
|
<h1 className="text-2xl font-bold">{t("settings.users.title")}</h1>
|
|
|
|
<section className="space-y-3">
|
|
<h2 className="text-sm font-semibold uppercase tracking-wider text-[var(--muted-foreground)]">
|
|
{t("settings.users.sections.accounts")}
|
|
</h2>
|
|
<AccountCard />
|
|
</section>
|
|
|
|
<section className="space-y-3">
|
|
<h2 className="text-sm font-semibold uppercase tracking-wider text-[var(--muted-foreground)]">
|
|
{t("settings.users.sections.licenses")}
|
|
</h2>
|
|
<LicenseCard />
|
|
</section>
|
|
|
|
<section className="space-y-3">
|
|
<h2 className="text-sm font-semibold uppercase tracking-wider text-[var(--muted-foreground)]">
|
|
{t("settings.users.sections.userGuide")}
|
|
</h2>
|
|
<DocsContent />
|
|
</section>
|
|
</div>
|
|
);
|
|
}
|