feat: Journal before the version history in Settings → System, history folded by version (#372) #470

Open
maximus wants to merge 3 commits from issue-372-systems-journal-first into issue-449-cargo-locked
3 changed files with 16 additions and 3 deletions
Showing only changes of commit 5decb985f1 - Show all commits

View file

@ -580,7 +580,7 @@ Les modules payants sont enveloppés dans des **layout-routes pathless `RequireF
| `/settings` | `SettingsLayout` (layout) + `SettingsHomePage` (index) | Hub des paramètres : 3 cards-cluster vers les sous-pages. Le layout monte `TokenStoreFallbackBanner` une seule fois, partagé par les 4 routes principales | | `/settings` | `SettingsLayout` (layout) + `SettingsHomePage` (index) | Hub des paramètres : 3 cards-cluster vers les sous-pages. Le layout monte `TokenStoreFallbackBanner` une seule fois, partagé par les 4 routes principales |
| `/settings/users` | `UsersSettingsPage` | Comptes (Maximus), licences et guide d'utilisation (rendu inline depuis `DocsContent`) | | `/settings/users` | `UsersSettingsPage` | Comptes (Maximus), licences et guide d'utilisation (rendu inline depuis `DocsContent`) |
| `/settings/data` | `DataSettingsPage` | Catégories (avec liens vers `/settings/categories/standard` et `/settings/categories/migrate`), backup chiffré et confidentialité de la récupération de prix | | `/settings/data` | `DataSettingsPage` | Catégories (avec liens vers `/settings/categories/standard` et `/settings/categories/migrate`), backup chiffré et confidentialité de la récupération de prix |
| `/settings/systems` | `SystemsSettingsPage` | Version, mise à jour (`UpdateCard`), journaux + commentaires (`LogViewerCard`), puis historique des versions (`ChangelogContent`), dans cet ordre : le Journal ne descend plus sous l'historique, qui s'allonge à chaque release (#372). `ChangelogContent` n'est monté qu'une fois `getVersion()` résolu (ou en échec : version inconnue, écrite au Journal) ; il ouvre les notes de la version installée et replie les autres, chaque titre de version étant un bouton (`aria-expanded`, chevron), avec un bouton « Tout déplier / Tout replier » ; un « Unreleased » vide est masqué | | `/settings/systems` | `SystemsSettingsPage` | Version, mise à jour (`UpdateCard`), journaux + commentaires (`LogViewerCard`), puis historique des versions (`ChangelogContent`), dans cet ordre : le Journal ne descend plus sous l'historique, qui s'allonge à chaque release (#372). `ChangelogContent` n'est monté qu'une fois `getVersion()` résolu (ou en échec : version inconnue, écrite au Journal) ; il ouvre les notes de la version installée et replie les autres, chaque titre de version étant un bouton (`aria-expanded`, chevron), avec un bouton « Tout déplier / Tout replier » ; l'en-tête non publié (« Unreleased », « Non publié ») est masqué quand il est vide. La carte Système de `SettingsHomePage` liste ces sections dans le même ordre |
| `/settings/categories/standard` | `CategoriesStandardGuidePage` | Guide imprimable de la structure de catégories standard (route flat, hors `SettingsLayout`) | | `/settings/categories/standard` | `CategoriesStandardGuidePage` | Guide imprimable de la structure de catégories standard (route flat, hors `SettingsLayout`) |
| `/settings/categories/migrate` | `CategoriesMigrationPage` | Flux de migration v1→v2 (route flat, hors `SettingsLayout`) | | `/settings/categories/migrate` | `CategoriesMigrationPage` | Flux de migration v1→v2 (route flat, hors `SettingsLayout`) |
| `/docs` | `DocsPage` | Redirige vers `/settings/users` (rétrocompatibilité bookmarks) | | `/docs` | `DocsPage` | Redirige vers `/settings/users` (rétrocompatibilité bookmarks) |

View file

@ -11,7 +11,8 @@ interface SectionCard {
itemKeys: string[]; itemKeys: string[];
} }
const SECTIONS: SectionCard[] = [ /** The three cards of the hub; each lists its page's sections, in the page's order. */
export const SECTIONS: SectionCard[] = [
{ {
to: "/settings/users", to: "/settings/users",
titleKey: "settings.users.title", titleKey: "settings.users.title",
@ -42,8 +43,8 @@ const SECTIONS: SectionCard[] = [
itemKeys: [ itemKeys: [
"settings.systems.sections.version", "settings.systems.sections.version",
"settings.systems.sections.update", "settings.systems.sections.update",
"settings.systems.sections.changelog",
"settings.systems.sections.logs", "settings.systems.sections.logs",
"settings.systems.sections.changelog",
], ],
}, },
]; ];

View file

@ -29,6 +29,7 @@ import { hookHarness } from "../../test/hookHarness";
import { logWarn } from "../../services/logService"; import { logWarn } from "../../services/logService";
import ChangelogContent from "../../components/settings/ChangelogContent"; import ChangelogContent from "../../components/settings/ChangelogContent";
import SystemsSettingsPage from "./SystemsSettingsPage"; import SystemsSettingsPage from "./SystemsSettingsPage";
import { SECTIONS } from "./SettingsHomePage";
const harness = hookHarness(); const harness = hookHarness();
@ -77,6 +78,17 @@ describe("SystemsSettingsPage — order of the sections (#372)", () => {
]; ];
expect(order).toEqual([...order].sort((a, b) => a - b)); expect(order).toEqual([...order].sort((a, b) => a - b));
}); });
it("lists, on the System card of the Settings home, the page's sections in the page's order", () => {
harness.slots[0] = "0.17.2";
const html = renderToStaticMarkup(render());
const headings = [...html.matchAll(/<h2[^>]*>t\((settings\.systems\.sections\.[a-zA-Z]+)\)<\/h2>/g)].map(
(match) => match[1],
);
expect(headings).toHaveLength(4);
const card = SECTIONS.find((section) => section.to === "/settings/systems");
expect(card?.itemKeys).toEqual(headings);
});
}); });
describe("SystemsSettingsPage — the version history waits for the version (#372)", () => { describe("SystemsSettingsPage — the version history waits for the version (#372)", () => {