eed063c657
feat: add related subjects (symmetric links) with tabbed edit page and improved subject detail layout
...
Related subjects: migration with CHECK(id1 < id2) for uniqueness, repository with dual-query (no string interpolation), link/unlink use cases with 8 tests.
Edit page: Radix Tabs (Contenu / Classification), themes extracted as immediate-save SubjectThemes component, related subjects with chip+remove UI and Combobox search.
Subject detail: themes and related subjects displayed in header metadata area, 'Voir aussi' links inline.
Also extracts mapRowToEntity from subject repo for reuse, removes themes from SubjectForm (now independent).
2026-04-05 01:51:14 +02:00
a2670ffe31
feat: add themes taxonomy for subjects (N-to-N) with CRUD, assignment UI, and Radix ToggleGroup selector
...
Domain: Theme entity (Effect Schema), createTheme/deleteTheme/setSubjectThemes use cases with 21 tests.
Infra: themes + subject_themes tables, ThemeRepository with Supabase implementation.
UI: /themes management page, ThemeSelector (Radix ToggleGroup) in subject form, ThemeBadge on subject detail.
Permissions: assign_theme (Éloquent), add/edit/delete_theme (Idéaliste).
Also adds radix-ui as dependency for accessible UI primitives.
2026-04-02 19:04:05 +02:00
9043fcc79d
fix: only close menu and refresh on actual sign-in/sign-out, not token refresh
2026-04-01 08:57:20 +02:00
41957b389a
feat: navigate drafts by subject instead of loading all at once
2026-04-01 00:52:02 +02:00
c507648f14
fix: refresh server components and close burger menu on login/logout
2026-04-01 00:00:04 +02:00
da87899c1f
fix: close mobile burger menu on navigation via usePathname
2026-03-31 17:26:05 +02:00
d36aaa790e
fix: AdminMenu dropdown auto-aligns when button is near screen edge (mobile)
2026-03-31 16:40:05 +02:00
e1e3424bdc
fix: return 404 instead of 500 when updating a non-existent draft (Fixes DEBATS-7)
2026-03-31 15:07:56 +02:00
9074610ab0
feat: clickable position title in sidebar statements, linking to figure/subject page
2026-03-31 00:32:55 +02:00
5034b1fcd7
fix: validate slugifiable fields on draft creation and update (Fixes DEBATS-G)
2026-03-31 00:26:33 +02:00
b764bedb27
feat: figure links on position page point to figure/subject page
2026-03-30 17:12:30 +02:00
93a747ea6d
feat: clickable position titles on figure/subject page, extract LinkedTitle component
2026-03-30 17:05:16 +02:00
654436c905
fix: use admin client for sidebar and homepage queries, fix excludeId limit
...
last-statements.tsx was the only read component still using the SSR (anon) client after RLS public policies were removed, causing the sidebar to silently return empty results. Also fix fetchSummaries to request limit+1 when excluding an ID so the caller always gets the expected number of results.
2026-03-30 17:01:27 +02:00
1049b6006c
feat: clickable +N overflow badge linking to subject page
2026-03-30 16:47:42 +02:00
609f402815
feat: avatar links to figure/subject page, simplify subject counters to positions only
2026-03-30 16:30:58 +02:00
4d102038f6
fix: remove dead 'Voir les arguments' link on subject detail page
2026-03-30 15:35:25 +02:00
7558182049
fix: missing space after Débats em tag on about page
2026-03-30 13:49:02 +02:00
61104822d4
feat: redesign footer with GitHub/X icons and horizontal layout
2026-03-30 12:34:27 +02:00
527cdd9314
fix: align share button left of burger menu in mobile header
2026-03-30 11:41:21 +02:00
be86f79892
feat: add share button (Web Share API + clipboard fallback)
...
ShareButton component with iconOnly variant, ShareButtonContext to coordinate header/page visibility, HeaderActions layout component to deduplicate CSS across detail pages.
2026-03-29 23:25:30 +02:00
1e4ac44ffa
feat: add subject filter on draft validation page
...
Extract DraftList client component with a select to filter pending drafts by subject title. Shows draft count per subject. Filter hidden when only one subject exists.
2026-03-29 12:48:08 +02:00
c80703b9a9
fix: supprimer l'ancien dossier [positionId] — conflit de routes ambiguës avec [positionSlug]
2026-03-29 12:47:25 +02:00
2e47df0949
feat: slug sur les positions (étape 2) — NOT NULL + unique par sujet, routes /s/[slug]/position/[positionSlug], fonction SQL mise à jour
2026-03-29 12:39:17 +02:00
186ce0a0f2
feat: slug sur les positions (étape 1) — colonne nullable, script backfill, entité/repo mis à jour, slugify partagé entre les 3 entités
2026-03-29 12:25:08 +02:00
71f74fd2af
feat: display and amend notoriety sources in draft validation page
...
Show Wikipedia URL and notoriety sources in the CreationPreview for public figures. Add editable notoriety source fields in the amendment form, hidden when a Wikipedia URL is provided. Filter empty sources before diffing.
2026-03-29 12:22:37 +02:00
b598b8a05f
fix: renommer la migration RLS write pour respecter l'ordre chronologique en production
2026-03-28 10:38:34 +01:00
27943d33dd
security: suppression des politiques RLS de lecture — toutes les requêtes passent par le client admin
2026-03-28 10:32:26 +01:00
8db07494ce
refactor: extraction du composant SectionTitle dans le design system, suppression du CSS dupliqué entre DailySubject et SubjectSection
2026-03-28 01:59:51 +01:00
8e390bf8e9
security: toutes les mutations passent par le client admin Supabase — les politiques RLS d'écriture ont été supprimées
2026-03-28 01:50:33 +01:00
e2d55493f2
refactor: un seul error.tsx générique à la racine, suppression des 12 error.tsx dupliqués, pas de fuite de message technique
2026-03-28 01:42:46 +01:00
59242bcc81
fix: suppression import inutilisé DailySubject, correction loadingPositions au mount avec initialSubject
2026-03-28 01:35:14 +01:00
374867942d
fix: déplacement des setState synchrones hors des useEffect dans les formulaires de positions
2026-03-27 18:07:41 +01:00
50da23ecd4
fix: remplacement des <img> par next/image pour les previews photo, alt vide (image décorative)
2026-03-27 17:56:48 +01:00
aca86a9039
fix: ajout de alt vide sur les img décoratives dans les OG images
2026-03-27 17:49:14 +01:00
1a264ec3e9
refactor: suppression des try/catch JSX — extraction de composants et error boundaries Next.js
...
Remplace le pattern try/catch englobant le JSX dans tous les server components par :
- Des composants autonomes responsables de leur propre data-fetching (HomePage)
- Des error.tsx colocalisés pour chaque route (error boundary Next.js)
- Un composant ActionLink dans le design system
Élimine 140 warnings ESLint react-hooks/error-boundaries.
2026-03-27 17:47:48 +01:00
b9402532e5
fix: renommer migration soft-delete pour éviter le conflit de timestamp avec add_subject_positions_summary_function (20260326120000 → 20260326130000)
2026-03-27 17:17:26 +01:00
b3b6712b86
fix: formatage Prettier sur subject-repository-supabase
2026-03-27 16:52:08 +01:00
841f377a6c
feat: soft-delete — les suppressions marquent deleted_at au lieu de supprimer physiquement les données
...
Entités concernées : subjects, public_figures, positions, statements.
Cascade atomique via fonctions SQL (soft_delete_subject, soft_delete_public_figure, soft_delete_position).
Toutes les requêtes de lecture filtrent deleted_at IS NULL.
Vues SQL recréées pour exclure les lignes soft-deleted.
merge_positions corrigé pour soft-deleter la position source.
2026-03-27 16:13:24 +01:00
b2ef53cdf7
feat: setup Storybook 10 avec @storybook/nextjs-vite, addon a11y/docs, stories Button/TextField/AdminMenu, moduleResolution bundler pour compatibilité ESM
2026-03-27 15:55:08 +01:00
8f65e66ffc
fix: recherche multi-mots sur les sujets — chaque mot doit être présent dans le titre, pas nécessairement contigus
2026-03-27 00:32:37 +01:00
3a6bf83c34
feat: recherche de sujets sur /s — composant SearchField générique dans le design system, refactorisation de PersonalitySearch pour le réutiliser
2026-03-27 00:27:03 +01:00
f2b4c4b68d
fix: avatar placeholder avec initiales quand la photo de la personnalité n'existe pas
2026-03-27 00:16:07 +01:00
d04ff82ee3
feat: refonte page d'accueil — sujet du jour (seed déterministe par date), sections les plus actifs et derniers ajoutés, grille de cartes compactes, findSummaryById et findAllIds
2026-03-27 00:11:01 +01:00
12a3604db5
feat: composant FigureAvatarRow avec badge +N, read model SQL get_subject_positions_summary (CQRS), suppression du CSS mort des avatars inline
2026-03-26 23:25:36 +01:00
3c88550027
feat: AdminMenu sur les pages sujet et personnalité, composant ConfirmAction dans le design system, suppression de SubjectActions devenu obsolète
2026-03-26 10:12:41 +01:00
c090d079cd
feat: suppression individuelle des brouillons — DELETE /api/drafts/:id, server action deleteDraftAction, bouton Supprimer dans la DraftCard
2026-03-26 01:36:40 +01:00
50c92a5675
chore: Next.js 16.2.0 stable — sortie du canary, suppression du .npmrc legacy-peer-deps
2026-03-26 01:04:52 +01:00
c4fb7fc342
feat: composant AdminMenu (⚙ Gérer) avec actions contextuelles, fusion dans le menu de la page position, suppression du EditLink sur la page sujet, redirect serveur après fusion, TODO.md retiré du repo
2026-03-26 00:39:55 +01:00
20aa53bb85
feat: page détail position et fusion de positions — page /s/[slug]/position/[positionId] avec prises de position, fusion transactionnelle via rpc SQL merge_positions, méthode findByPositionIdWithFigures, lien cliquable sur les titres de position
2026-03-25 22:37:43 +01:00
1032806685
feat: lien Brouillons dans le footer pour les administrateurs
2026-03-25 02:29:08 +01:00