feat: let the list ignore, submit and undo events from Nextcloud

Each row now shows its shared status and carries the matching gesture. Nothing
is displayed before Nextcloud confirms it: on failure the status stays put and
the reason is spelled out. Ignored events are greyed and pushed to the end,
never hidden.
This commit is contained in:
Pierre Martin
2026-08-13 16:50:16 +02:00
parent 058229dce3
commit 69c10abbd7
4 changed files with 265 additions and 14 deletions
+43
View File
@@ -4,6 +4,8 @@ import {
LIEU_PAR_DEFAUT,
formaterDate,
formaterLieu,
formaterStatut,
repousserIgnores,
trierParDebut,
} from "./extension/presentation.js";
@@ -213,3 +215,44 @@ describe("formaterLieu", () => {
expect(formaterLieu(evenement({ lieu: " " }))).toBe(LIEU_PAR_DEFAUT);
});
});
describe("formaterStatut", () => {
test("soumis avec date → « Soumis le JJ/MM »", () => {
expect(formaterStatut({ type: "soumis", jour: "2026-08-13" })).toBe("Soumis le 13/08");
});
test("soumis sans date exploitable → « Soumis »", () => {
expect(formaterStatut({ type: "soumis", jour: null })).toBe("Soumis");
});
test("ignoré → « Ignoré » ; aucun → rien à afficher", () => {
expect(formaterStatut({ type: "ignoré" })).toBe("Ignoré");
expect(formaterStatut({ type: "aucun" })).toBe("");
});
});
describe("repousserIgnores", () => {
test("les ignorés passent en fin, l'ordre relatif est conservé", () => {
const evenements = [
evenement({ uid: "a" }),
evenement({ uid: "ignore-1", categories: ["mairie:ignoré"] }),
evenement({ uid: "b", categories: ["Concert"] }),
evenement({ uid: "ignore-2", categories: ["Concert", "mairie:ignoré"] }),
evenement({ uid: "c", categories: ["mairie:soumis:2026-08-13"] }),
];
expect(repousserIgnores(evenements).map((e) => e.uid)).toEqual([
"a",
"b",
"c",
"ignore-1",
"ignore-2",
]);
});
test("liste sans ignoré → inchangée, sans mutation de l'entrée", () => {
const evenements = [evenement({ uid: "a" }), evenement({ uid: "b" })];
expect(repousserIgnores(evenements).map((e) => e.uid)).toEqual(["a", "b"]);
expect(evenements.map((e) => e.uid)).toEqual(["a", "b"]);
});
});