Add bilingual changelog page and file-based release notes
- Create CHANGELOG.fr.md with full French translation of all versions - Add ChangelogPage (/changelog) accessible from Settings - Replace hardcoded i18n release notes with file-based approach: loads CHANGELOG.md or CHANGELOG.fr.md based on user language - CI copies changelogs to public/ during release build - Update CLAUDE.md with bilingual changelog deployment process (fixes #10) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
820360df5b
commit
d23fcd6bdb
11 changed files with 810 additions and 24 deletions
|
|
@ -67,6 +67,11 @@ jobs:
|
|||
cp src-tauri/target/x86_64-pc-windows-msvc/release/bundle/nsis/*.exe.sig release-assets/ 2>/dev/null || true
|
||||
ls -la release-assets/
|
||||
|
||||
- name: Copy changelogs to public
|
||||
run: |
|
||||
cp CHANGELOG.md public/CHANGELOG.md
|
||||
cp CHANGELOG.fr.md public/CHANGELOG.fr.md
|
||||
|
||||
- name: Extract changelog
|
||||
id: changelog
|
||||
run: |
|
||||
|
|
|
|||
205
CHANGELOG.fr.md
Normal file
205
CHANGELOG.fr.md
Normal file
|
|
@ -0,0 +1,205 @@
|
|||
# Journal des modifications
|
||||
|
||||
## [Non publié]
|
||||
|
||||
### Ajouté
|
||||
- Page historique des versions : historique complet accessible depuis les Paramètres à tout moment
|
||||
- Changelog bilingue : les notes de version s'affichent dans la langue choisie par l'utilisateur (FR/EN)
|
||||
|
||||
### Corrigé
|
||||
- Visibilité des labels de graphiques : les montants sur les barres empilées utilisent maintenant du texte noir avec contour blanc pour un meilleur contraste (#8)
|
||||
- Tableau de budget : les cellules éditables affichent maintenant un fond au survol, un curseur pointeur et une info-bulle pour clarifier l'interaction (#9)
|
||||
|
||||
## [0.6.0]
|
||||
|
||||
### Ajouté
|
||||
- Rapports : bascule entre vue tableau et graphique pour les onglets Tendances, Par catégorie et Évolution
|
||||
- Rapports : option « Afficher les montants » pour afficher les valeurs directement sur les barres et courbes
|
||||
- Rapports : panneau de filtres avec cases à cocher par catégorie (recherche, tout sélectionner/désélectionner) et filtre par source
|
||||
- Rapports : le filtre source s'applique au niveau SQL pour des totaux filtrés précis
|
||||
- Rapports : en-têtes de tableau fixes sur tous les tableaux de rapports (Rapport dynamique, Budget vs Réel)
|
||||
- Rapports : survol interactif — barres non survolées estompées, info-bulle filtrée sur la catégorie survolée
|
||||
- Rapports : le survol de la légende met en évidence la catégorie sur tous les mois (graphique Évolution)
|
||||
|
||||
### Corrigé
|
||||
- Tableau des transactions : l'icône de commentaire devient orange (comme l'icône de ventilation) quand une note est présente (#7)
|
||||
|
||||
## [0.5.0]
|
||||
|
||||
### Ajouté
|
||||
- Gestion d'erreurs : intercepte les plantages React et affiche une page d'erreur au lieu d'un écran blanc
|
||||
- Délai de démarrage (10 s) sur la connexion à la base de données — affiche une page d'erreur au lieu d'un indicateur de chargement infini
|
||||
- Page d'erreur avec « Rafraîchir », « Vérifier les mises à jour » et liens de contact
|
||||
- Visionneuse de journaux dans les paramètres — capture la sortie console, filtrable par niveau, copiable, persiste entre les rafraîchissements
|
||||
- Licence GPL-3.0 — le projet est maintenant open source
|
||||
|
||||
### Modifié
|
||||
- Modale détail de rapport : colonnes triables — cliquez sur les en-têtes pour trier par date, description ou montant (#1)
|
||||
- Modale détail de rapport : bascule pour afficher/masquer la colonne des montants (#3)
|
||||
- Tableau de budget : les en-têtes de colonnes restent fixes lors du défilement vertical (#2)
|
||||
|
||||
### Corrigé
|
||||
- Mise à jour automatique sur Linux : le champ version de `latest.json` n'a plus le préfixe `v`, téléversement au registre de paquets plus robuste
|
||||
- Nouvelle tentative au démarrage : la connexion BD réessaie jusqu'à 3 fois avant d'afficher la page d'erreur (corrige l'échec au premier lancement sur Windows)
|
||||
- Somme de contrôle de migration : répare automatiquement la somme de contrôle obsolète de la migration 1 au démarrage
|
||||
|
||||
## [0.4.4]
|
||||
|
||||
### Corrigé
|
||||
- Le binaire Linux est maintenant compatible avec glibc 2.35+ (Ubuntu 22.04 / Pop!_OS) — le CI compile dans un conteneur Ubuntu 22.04
|
||||
|
||||
## [0.4.3]
|
||||
|
||||
### Corrigé
|
||||
- Le point de terminaison de mise à jour automatique utilise maintenant le registre de paquets Forgejo pour une URL stable
|
||||
- Les signatures Linux (.AppImage.sig) sont maintenant correctement collectées dans le CI
|
||||
- Toutes les signatures de plateforme (.deb.sig, .rpm.sig) sont maintenant incluses dans les assets de la release
|
||||
|
||||
## [0.4.2]
|
||||
|
||||
### Modifié
|
||||
- La mise à jour automatique pointe maintenant vers l'instance Forgejo auto-hébergée
|
||||
- Les builds Windows sont maintenant compilés en croisé via cargo-xwin
|
||||
|
||||
## [0.4.1]
|
||||
|
||||
### Corrigé
|
||||
- Application bloquée sur un indicateur de chargement infini après mise à jour depuis v0.3.x (somme de contrôle de migration incompatible sur seed_categories.sql)
|
||||
- Les erreurs de connexion BD sont maintenant journalisées dans la console au lieu d'échouer silencieusement
|
||||
|
||||
## [0.4.0]
|
||||
|
||||
### Ajouté
|
||||
- Catégories : support de 3 niveaux de hiérarchie (ex : Dépenses récurrentes → Assurances → Assurance-auto)
|
||||
- Rapport dynamique : nouveau champ « Catégorie (Niveau 3) »
|
||||
- Budget : sous-totaux intermédiaires et indentation 3 niveaux pour les catégories imbriquées
|
||||
- Catégories : gestion automatique de `is_inputable` à la création/suppression de sous-catégories
|
||||
- Catégories : la validation de profondeur empêche la création d'un 4e niveau
|
||||
- Données initiales : Assurances divisées en Assurance-auto, Assurance-habitation, Assurance-vie
|
||||
|
||||
### Corrigé
|
||||
- Auto-catégorisation : les mots-clés commençant/finissant par des caractères spéciaux (`[`, `]`, `(`, `)`, `-`, etc.) sont maintenant reconnus
|
||||
- Auto-catégorisation : pré-compilation des regex pour de meilleures performances en lot
|
||||
|
||||
## [0.3.11]
|
||||
|
||||
### Ajouté
|
||||
- Rapport dynamique : support de plusieurs dimensions en colonnes (clés composites)
|
||||
|
||||
### Corrigé
|
||||
- Rapport dynamique : n'est plus affecté par les filtres de date globaux — utilise uniquement ses propres filtres du panneau
|
||||
|
||||
## [0.3.10]
|
||||
|
||||
### Ajouté
|
||||
- Rapport dynamique : les champs peuvent maintenant être utilisés dans plusieurs zones simultanément (lignes + filtres, colonnes + filtres)
|
||||
- Rapport dynamique : clic-droit sur une valeur de filtre pour l'exclure (affiché barré en rouge)
|
||||
- Option de période « Cette année » dans les rapports et le tableau de bord (du 1er janvier à aujourd'hui)
|
||||
|
||||
## [0.3.9]
|
||||
|
||||
### Ajouté
|
||||
- Rapport dynamique (tableau croisé) : composez des rapports personnalisés en assignant des dimensions aux lignes, colonnes, filtres et mesures aux valeurs
|
||||
- Suppression de mots-clés depuis la vue « Tous les mots-clés »
|
||||
|
||||
## [0.3.8]
|
||||
|
||||
### Ajouté
|
||||
- Sélecteur de plage de dates personnalisée pour les rapports et le tableau de bord
|
||||
- Bascule pour positionner les sous-totaux au-dessus ou en dessous des lignes de détail
|
||||
- Affichage des notes de version du CHANGELOG dans les releases et le système de mise à jour
|
||||
|
||||
## [0.3.7]
|
||||
|
||||
### Corrigé
|
||||
- Suppression du bundle MSI pour éviter le conflit de chemin d'installation du système de mise à jour
|
||||
- Changement du mode d'installation Windows à basicUi
|
||||
- Amélioration de la visibilité de l'indicateur de ventilation et de la mise en page des ajustements
|
||||
|
||||
## 0.3.2
|
||||
|
||||
### Nouvelles fonctionnalités
|
||||
- **Support Linux** : ajout des builds Linux (`.deb`, `.rpm`, `.AppImage`) au workflow de release
|
||||
- **Ventilations sur la page Ajustements** : visualisez les ajustements de ventilation des transactions dans une section dédiée
|
||||
|
||||
### Corrigé
|
||||
- Correction de cas limites de détection automatique CSV
|
||||
- Suppression de l'accent dans productName pour la compatibilité `.deb` Linux
|
||||
|
||||
## 0.3.1
|
||||
|
||||
### Corrigé
|
||||
- Toujours afficher le sélecteur de profil dans la barre latérale (#2)
|
||||
|
||||
## 0.3.0
|
||||
|
||||
### Nouvelles fonctionnalités
|
||||
- **Profils multiples** : créez plusieurs profils avec des bases de données séparées, des noms et couleurs personnalisés
|
||||
- **Protection par NIP** : protégez les profils avec un NIP numérique optionnel
|
||||
- **Sélecteur de profil** : changement rapide de profil depuis la barre latérale
|
||||
- **Glisser-déposer les catégories** : réordonnez les catégories ou changez le parent par glisser-déposer dans l'arborescence
|
||||
- **Ventilation des transactions** : ventilez une transaction sur plusieurs catégories avec des montants ajustables
|
||||
|
||||
## 0.2.10
|
||||
|
||||
### Nouvelles fonctionnalités
|
||||
- **Sélection rapide de période** : boutons de filtre rapide (Ce mois, Mois dernier, etc.) sur la page Transactions
|
||||
- **Rapport Budget vs Réel** : tableau comparatif mensuel et cumulatif annuel dans les Rapports
|
||||
- **Sous-totaux de catégories parentes** : la page Budget affiche les sous-totaux agrégés pour les catégories parentes
|
||||
- **Guide utilisateur** : documentation complète accessible depuis les Paramètres, imprimable en PDF
|
||||
|
||||
### Améliorations
|
||||
- Persistance de la sélection de modèle et ajout du bouton Mettre à jour le modèle
|
||||
- Ne plus pré-sélectionner les fichiers déjà importés à l'entrée de la configuration source
|
||||
- Rendre les imports de données de paramètres visibles dans l'historique d'import
|
||||
- Remplacer les boutons de suppression par modèle par un seul bouton sur la sélection
|
||||
- Remplacer l'icône de rafraîchissement par une icône de sauvegarde sur le bouton de mise à jour du modèle
|
||||
- Ajout de la convention de signe à la page budget
|
||||
|
||||
## 0.2.9
|
||||
|
||||
### Corrigé
|
||||
- Permettre les fichiers à contenu identique avec des noms différents (#1)
|
||||
|
||||
## 0.2.8
|
||||
|
||||
### Nouvelles fonctionnalités
|
||||
- **Export/import de données** : exportez et importez vos données (transactions, catégories, ou les deux) avec chiffrement AES-256-GCM optionnel (#3)
|
||||
|
||||
### Corrigé
|
||||
- Détection de doublons inter-fichiers et suivi d'import par fichier
|
||||
|
||||
## 0.2.5
|
||||
|
||||
### Nouvelles fonctionnalités
|
||||
- **Modèles de configuration d'import** : sauvegardez et chargez les configurations de source d'import comme modèles réutilisables
|
||||
- **Grille de budget 12 mois** : vue budgétaire annuelle complète avec cellules mensuelles et totaux annuels
|
||||
|
||||
### Corrigé
|
||||
- Corrections du budget et des catégories
|
||||
- Problème de somme de contrôle de migration (schema.sql ne doit pas être modifié après la release initiale)
|
||||
|
||||
## 0.2.3
|
||||
|
||||
### Nouvelles fonctionnalités
|
||||
- **Motifs de graphiques** : ajout de motifs de remplissage SVG (lignes diagonales, points, hachures, etc.) pour différencier les catégories dans les graphiques au-delà de la couleur
|
||||
- **Menu contextuel des graphiques** : clic-droit sur une catégorie dans un graphique pour la masquer ou voir ses transactions dans une fenêtre de détail
|
||||
- **Catégories masquées** : les catégories masquées apparaissent comme des puces au-dessus des graphiques avec un bouton « Tout afficher »
|
||||
- **Modale de détail des transactions** : visualisez toutes les transactions composant le total d'une catégorie directement depuis n'importe quel graphique
|
||||
- **Aperçu d'import en popup** : l'aperçu des données est maintenant une modale popup au lieu d'une étape séparée de l'assistant
|
||||
- **Vérification directe des doublons** : nouveau bouton « Vérifier les doublons » sur la page de configuration d'import
|
||||
|
||||
### Améliorations
|
||||
- Flux de l'assistant d'import simplifié : configuration source → vérification des doublons (l'aperçu est optionnel via popup)
|
||||
- Le bouton retour de la vérification des doublons retourne maintenant à la configuration source
|
||||
|
||||
## 0.2.2
|
||||
|
||||
- Mise à jour de version
|
||||
|
||||
## 0.2.1
|
||||
|
||||
- Ajout de la vue « Tous les mots-clés » sur la page Catégories
|
||||
- Ajout du mode sombre avec palette de gris chauds
|
||||
- Correction des catégories orphelines, persistance de has_header pour les imports, ajout de la réinitialisation
|
||||
- Ajout des pages Budget et Ajustements
|
||||
|
|
@ -2,6 +2,14 @@
|
|||
|
||||
## [Unreleased]
|
||||
|
||||
### Added
|
||||
- Changelog page: full version history accessible from Settings at any time
|
||||
- Bilingual changelog: release notes displayed in the user's selected language (EN/FR)
|
||||
|
||||
### Fixed
|
||||
- Chart label visibility: amount labels on stacked bar charts now use black text with white outline for better contrast (#8)
|
||||
- Budget table: editable cells now show hover background, pointer cursor, and tooltip hint for clearer affordance (#9)
|
||||
|
||||
## [0.6.0]
|
||||
|
||||
### Added
|
||||
|
|
|
|||
|
|
@ -135,9 +135,12 @@ La documentation technique est centralisée dans `docs/` :
|
|||
- Décision technique structurante (choix de librairie, pattern architectural, changement de stratégie) → créer un nouvel ADR dans `docs/adr/`
|
||||
- Changement affectant l'utilisation de l'app → mettre à jour `docs/guide-utilisateur.md` et les traductions i18n correspondantes (`src/i18n/locales/fr.json`, `src/i18n/locales/en.json`, clés sous `docs.*`)
|
||||
|
||||
**Règle CHANGELOG :** tout changement affectant le comportement utilisateur → ajouter une entrée sous `## [Unreleased]` dans `CHANGELOG.md`
|
||||
- Catégories : Added, Changed, Fixed, Removed
|
||||
- Format [Keep a Changelog](https://keepachangelog.com/). Le contenu est extrait automatiquement par le CI pour les release notes GitHub et affiché dans l'app.
|
||||
**Règle CHANGELOG :** tout changement affectant le comportement utilisateur → ajouter une entrée sous `## [Unreleased]` dans **les deux fichiers** :
|
||||
- `CHANGELOG.md` (anglais) — source principale
|
||||
- `CHANGELOG.fr.md` (français) — traduction
|
||||
- Catégories : Added/Ajouté, Changed/Modifié, Fixed/Corrigé, Removed/Supprimé
|
||||
- Format [Keep a Changelog](https://keepachangelog.com/). Le contenu est extrait automatiquement par le CI pour les release notes et affiché dans l'app selon la langue de l'utilisateur.
|
||||
- Les deux fichiers sont copiés dans `public/` par le CI (`release.yml`). En dev, synchroniser manuellement : `cp CHANGELOG*.md public/`
|
||||
|
||||
---
|
||||
|
||||
|
|
|
|||
205
public/CHANGELOG.fr.md
Normal file
205
public/CHANGELOG.fr.md
Normal file
|
|
@ -0,0 +1,205 @@
|
|||
# Journal des modifications
|
||||
|
||||
## [Non publié]
|
||||
|
||||
### Ajouté
|
||||
- Page historique des versions : historique complet accessible depuis les Paramètres à tout moment
|
||||
- Changelog bilingue : les notes de version s'affichent dans la langue choisie par l'utilisateur (FR/EN)
|
||||
|
||||
### Corrigé
|
||||
- Visibilité des labels de graphiques : les montants sur les barres empilées utilisent maintenant du texte noir avec contour blanc pour un meilleur contraste (#8)
|
||||
- Tableau de budget : les cellules éditables affichent maintenant un fond au survol, un curseur pointeur et une info-bulle pour clarifier l'interaction (#9)
|
||||
|
||||
## [0.6.0]
|
||||
|
||||
### Ajouté
|
||||
- Rapports : bascule entre vue tableau et graphique pour les onglets Tendances, Par catégorie et Évolution
|
||||
- Rapports : option « Afficher les montants » pour afficher les valeurs directement sur les barres et courbes
|
||||
- Rapports : panneau de filtres avec cases à cocher par catégorie (recherche, tout sélectionner/désélectionner) et filtre par source
|
||||
- Rapports : le filtre source s'applique au niveau SQL pour des totaux filtrés précis
|
||||
- Rapports : en-têtes de tableau fixes sur tous les tableaux de rapports (Rapport dynamique, Budget vs Réel)
|
||||
- Rapports : survol interactif — barres non survolées estompées, info-bulle filtrée sur la catégorie survolée
|
||||
- Rapports : le survol de la légende met en évidence la catégorie sur tous les mois (graphique Évolution)
|
||||
|
||||
### Corrigé
|
||||
- Tableau des transactions : l'icône de commentaire devient orange (comme l'icône de ventilation) quand une note est présente (#7)
|
||||
|
||||
## [0.5.0]
|
||||
|
||||
### Ajouté
|
||||
- Gestion d'erreurs : intercepte les plantages React et affiche une page d'erreur au lieu d'un écran blanc
|
||||
- Délai de démarrage (10 s) sur la connexion à la base de données — affiche une page d'erreur au lieu d'un indicateur de chargement infini
|
||||
- Page d'erreur avec « Rafraîchir », « Vérifier les mises à jour » et liens de contact
|
||||
- Visionneuse de journaux dans les paramètres — capture la sortie console, filtrable par niveau, copiable, persiste entre les rafraîchissements
|
||||
- Licence GPL-3.0 — le projet est maintenant open source
|
||||
|
||||
### Modifié
|
||||
- Modale détail de rapport : colonnes triables — cliquez sur les en-têtes pour trier par date, description ou montant (#1)
|
||||
- Modale détail de rapport : bascule pour afficher/masquer la colonne des montants (#3)
|
||||
- Tableau de budget : les en-têtes de colonnes restent fixes lors du défilement vertical (#2)
|
||||
|
||||
### Corrigé
|
||||
- Mise à jour automatique sur Linux : le champ version de `latest.json` n'a plus le préfixe `v`, téléversement au registre de paquets plus robuste
|
||||
- Nouvelle tentative au démarrage : la connexion BD réessaie jusqu'à 3 fois avant d'afficher la page d'erreur (corrige l'échec au premier lancement sur Windows)
|
||||
- Somme de contrôle de migration : répare automatiquement la somme de contrôle obsolète de la migration 1 au démarrage
|
||||
|
||||
## [0.4.4]
|
||||
|
||||
### Corrigé
|
||||
- Le binaire Linux est maintenant compatible avec glibc 2.35+ (Ubuntu 22.04 / Pop!_OS) — le CI compile dans un conteneur Ubuntu 22.04
|
||||
|
||||
## [0.4.3]
|
||||
|
||||
### Corrigé
|
||||
- Le point de terminaison de mise à jour automatique utilise maintenant le registre de paquets Forgejo pour une URL stable
|
||||
- Les signatures Linux (.AppImage.sig) sont maintenant correctement collectées dans le CI
|
||||
- Toutes les signatures de plateforme (.deb.sig, .rpm.sig) sont maintenant incluses dans les assets de la release
|
||||
|
||||
## [0.4.2]
|
||||
|
||||
### Modifié
|
||||
- La mise à jour automatique pointe maintenant vers l'instance Forgejo auto-hébergée
|
||||
- Les builds Windows sont maintenant compilés en croisé via cargo-xwin
|
||||
|
||||
## [0.4.1]
|
||||
|
||||
### Corrigé
|
||||
- Application bloquée sur un indicateur de chargement infini après mise à jour depuis v0.3.x (somme de contrôle de migration incompatible sur seed_categories.sql)
|
||||
- Les erreurs de connexion BD sont maintenant journalisées dans la console au lieu d'échouer silencieusement
|
||||
|
||||
## [0.4.0]
|
||||
|
||||
### Ajouté
|
||||
- Catégories : support de 3 niveaux de hiérarchie (ex : Dépenses récurrentes → Assurances → Assurance-auto)
|
||||
- Rapport dynamique : nouveau champ « Catégorie (Niveau 3) »
|
||||
- Budget : sous-totaux intermédiaires et indentation 3 niveaux pour les catégories imbriquées
|
||||
- Catégories : gestion automatique de `is_inputable` à la création/suppression de sous-catégories
|
||||
- Catégories : la validation de profondeur empêche la création d'un 4e niveau
|
||||
- Données initiales : Assurances divisées en Assurance-auto, Assurance-habitation, Assurance-vie
|
||||
|
||||
### Corrigé
|
||||
- Auto-catégorisation : les mots-clés commençant/finissant par des caractères spéciaux (`[`, `]`, `(`, `)`, `-`, etc.) sont maintenant reconnus
|
||||
- Auto-catégorisation : pré-compilation des regex pour de meilleures performances en lot
|
||||
|
||||
## [0.3.11]
|
||||
|
||||
### Ajouté
|
||||
- Rapport dynamique : support de plusieurs dimensions en colonnes (clés composites)
|
||||
|
||||
### Corrigé
|
||||
- Rapport dynamique : n'est plus affecté par les filtres de date globaux — utilise uniquement ses propres filtres du panneau
|
||||
|
||||
## [0.3.10]
|
||||
|
||||
### Ajouté
|
||||
- Rapport dynamique : les champs peuvent maintenant être utilisés dans plusieurs zones simultanément (lignes + filtres, colonnes + filtres)
|
||||
- Rapport dynamique : clic-droit sur une valeur de filtre pour l'exclure (affiché barré en rouge)
|
||||
- Option de période « Cette année » dans les rapports et le tableau de bord (du 1er janvier à aujourd'hui)
|
||||
|
||||
## [0.3.9]
|
||||
|
||||
### Ajouté
|
||||
- Rapport dynamique (tableau croisé) : composez des rapports personnalisés en assignant des dimensions aux lignes, colonnes, filtres et mesures aux valeurs
|
||||
- Suppression de mots-clés depuis la vue « Tous les mots-clés »
|
||||
|
||||
## [0.3.8]
|
||||
|
||||
### Ajouté
|
||||
- Sélecteur de plage de dates personnalisée pour les rapports et le tableau de bord
|
||||
- Bascule pour positionner les sous-totaux au-dessus ou en dessous des lignes de détail
|
||||
- Affichage des notes de version du CHANGELOG dans les releases et le système de mise à jour
|
||||
|
||||
## [0.3.7]
|
||||
|
||||
### Corrigé
|
||||
- Suppression du bundle MSI pour éviter le conflit de chemin d'installation du système de mise à jour
|
||||
- Changement du mode d'installation Windows à basicUi
|
||||
- Amélioration de la visibilité de l'indicateur de ventilation et de la mise en page des ajustements
|
||||
|
||||
## 0.3.2
|
||||
|
||||
### Nouvelles fonctionnalités
|
||||
- **Support Linux** : ajout des builds Linux (`.deb`, `.rpm`, `.AppImage`) au workflow de release
|
||||
- **Ventilations sur la page Ajustements** : visualisez les ajustements de ventilation des transactions dans une section dédiée
|
||||
|
||||
### Corrigé
|
||||
- Correction de cas limites de détection automatique CSV
|
||||
- Suppression de l'accent dans productName pour la compatibilité `.deb` Linux
|
||||
|
||||
## 0.3.1
|
||||
|
||||
### Corrigé
|
||||
- Toujours afficher le sélecteur de profil dans la barre latérale (#2)
|
||||
|
||||
## 0.3.0
|
||||
|
||||
### Nouvelles fonctionnalités
|
||||
- **Profils multiples** : créez plusieurs profils avec des bases de données séparées, des noms et couleurs personnalisés
|
||||
- **Protection par NIP** : protégez les profils avec un NIP numérique optionnel
|
||||
- **Sélecteur de profil** : changement rapide de profil depuis la barre latérale
|
||||
- **Glisser-déposer les catégories** : réordonnez les catégories ou changez le parent par glisser-déposer dans l'arborescence
|
||||
- **Ventilation des transactions** : ventilez une transaction sur plusieurs catégories avec des montants ajustables
|
||||
|
||||
## 0.2.10
|
||||
|
||||
### Nouvelles fonctionnalités
|
||||
- **Sélection rapide de période** : boutons de filtre rapide (Ce mois, Mois dernier, etc.) sur la page Transactions
|
||||
- **Rapport Budget vs Réel** : tableau comparatif mensuel et cumulatif annuel dans les Rapports
|
||||
- **Sous-totaux de catégories parentes** : la page Budget affiche les sous-totaux agrégés pour les catégories parentes
|
||||
- **Guide utilisateur** : documentation complète accessible depuis les Paramètres, imprimable en PDF
|
||||
|
||||
### Améliorations
|
||||
- Persistance de la sélection de modèle et ajout du bouton Mettre à jour le modèle
|
||||
- Ne plus pré-sélectionner les fichiers déjà importés à l'entrée de la configuration source
|
||||
- Rendre les imports de données de paramètres visibles dans l'historique d'import
|
||||
- Remplacer les boutons de suppression par modèle par un seul bouton sur la sélection
|
||||
- Remplacer l'icône de rafraîchissement par une icône de sauvegarde sur le bouton de mise à jour du modèle
|
||||
- Ajout de la convention de signe à la page budget
|
||||
|
||||
## 0.2.9
|
||||
|
||||
### Corrigé
|
||||
- Permettre les fichiers à contenu identique avec des noms différents (#1)
|
||||
|
||||
## 0.2.8
|
||||
|
||||
### Nouvelles fonctionnalités
|
||||
- **Export/import de données** : exportez et importez vos données (transactions, catégories, ou les deux) avec chiffrement AES-256-GCM optionnel (#3)
|
||||
|
||||
### Corrigé
|
||||
- Détection de doublons inter-fichiers et suivi d'import par fichier
|
||||
|
||||
## 0.2.5
|
||||
|
||||
### Nouvelles fonctionnalités
|
||||
- **Modèles de configuration d'import** : sauvegardez et chargez les configurations de source d'import comme modèles réutilisables
|
||||
- **Grille de budget 12 mois** : vue budgétaire annuelle complète avec cellules mensuelles et totaux annuels
|
||||
|
||||
### Corrigé
|
||||
- Corrections du budget et des catégories
|
||||
- Problème de somme de contrôle de migration (schema.sql ne doit pas être modifié après la release initiale)
|
||||
|
||||
## 0.2.3
|
||||
|
||||
### Nouvelles fonctionnalités
|
||||
- **Motifs de graphiques** : ajout de motifs de remplissage SVG (lignes diagonales, points, hachures, etc.) pour différencier les catégories dans les graphiques au-delà de la couleur
|
||||
- **Menu contextuel des graphiques** : clic-droit sur une catégorie dans un graphique pour la masquer ou voir ses transactions dans une fenêtre de détail
|
||||
- **Catégories masquées** : les catégories masquées apparaissent comme des puces au-dessus des graphiques avec un bouton « Tout afficher »
|
||||
- **Modale de détail des transactions** : visualisez toutes les transactions composant le total d'une catégorie directement depuis n'importe quel graphique
|
||||
- **Aperçu d'import en popup** : l'aperçu des données est maintenant une modale popup au lieu d'une étape séparée de l'assistant
|
||||
- **Vérification directe des doublons** : nouveau bouton « Vérifier les doublons » sur la page de configuration d'import
|
||||
|
||||
### Améliorations
|
||||
- Flux de l'assistant d'import simplifié : configuration source → vérification des doublons (l'aperçu est optionnel via popup)
|
||||
- Le bouton retour de la vérification des doublons retourne maintenant à la configuration source
|
||||
|
||||
## 0.2.2
|
||||
|
||||
- Mise à jour de version
|
||||
|
||||
## 0.2.1
|
||||
|
||||
- Ajout de la vue « Tous les mots-clés » sur la page Catégories
|
||||
- Ajout du mode sombre avec palette de gris chauds
|
||||
- Correction des catégories orphelines, persistance de has_header pour les imports, ajout de la réinitialisation
|
||||
- Ajout des pages Budget et Ajustements
|
||||
206
public/CHANGELOG.md
Normal file
206
public/CHANGELOG.md
Normal file
|
|
@ -0,0 +1,206 @@
|
|||
# Changelog
|
||||
|
||||
## [Unreleased]
|
||||
|
||||
### Added
|
||||
- Changelog page: full version history accessible from Settings at any time
|
||||
- Bilingual changelog: release notes displayed in the user's selected language (EN/FR)
|
||||
|
||||
### Fixed
|
||||
- Chart label visibility: amount labels on stacked bar charts now use black text with white outline for better contrast (#8)
|
||||
- Budget table: editable cells now show hover background, pointer cursor, and tooltip hint for clearer affordance (#9)
|
||||
|
||||
## [0.6.0]
|
||||
|
||||
### Added
|
||||
- Reports: toggle between table and chart view for Trends, By Category, and Over Time tabs
|
||||
- Reports: "Show amounts" toggle displays values directly on chart bars and area curves
|
||||
- Reports: filter panel with category checkboxes (search, select all/none) and source dropdown
|
||||
- Reports: source filter applies at SQL level for accurate filtered totals
|
||||
- Reports: sticky table headers on all report tables (Dynamic Report, Budget vs Actual)
|
||||
- Reports: interactive hover — dimmed non-hovered bars, tooltip filtered to hovered category
|
||||
- Reports: legend hover highlights category across all months (Over Time chart)
|
||||
|
||||
### Fixed
|
||||
- Transaction table: comment icon now turns orange (like split icon) when a note is present (#7)
|
||||
|
||||
## [0.5.0]
|
||||
|
||||
### Added
|
||||
- Error boundary catches React crashes and displays an error page instead of a white screen
|
||||
- Startup timeout (10s) on database connection — shows error page instead of infinite spinner
|
||||
- Error page with "Refresh", "Check for updates", and contact/issue links
|
||||
- Log viewer in settings page — captures console output, filterable by level, copyable, persists across refresh
|
||||
- GPL-3.0 license — project is now open source
|
||||
|
||||
### Changed
|
||||
- Report detail modal: sortable columns — click headers to sort by date, description, or amount (#1)
|
||||
- Report detail modal: toggle to show/hide amounts column (#3)
|
||||
- Budget table: column headers stay fixed when scrolling vertically (#2)
|
||||
|
||||
### Fixed
|
||||
- Auto-updater on Linux: `latest.json` version field no longer has `v` prefix, package registry upload is more robust
|
||||
- Startup retry: DB connection retries up to 3 times before showing error page (fixes first-launch failure on Windows)
|
||||
- Migration checksum mismatch: automatically repairs stale migration 1 checksum on startup
|
||||
|
||||
## [0.4.4]
|
||||
|
||||
### Fixed
|
||||
- Linux binary now compatible with glibc 2.35+ (Ubuntu 22.04 / Pop!_OS) — CI builds in Ubuntu 22.04 container
|
||||
|
||||
## [0.4.3]
|
||||
|
||||
### Fixed
|
||||
- Auto-updater endpoint now uses Forgejo package registry for stable URL
|
||||
- Linux updater signatures (.AppImage.sig) now correctly collected in CI
|
||||
- All platform signatures (.deb.sig, .rpm.sig) now included in release assets
|
||||
|
||||
## [0.4.2]
|
||||
|
||||
### Changed
|
||||
- Auto-updater now points to self-hosted Forgejo instance
|
||||
- Windows builds now cross-compiled via cargo-xwin
|
||||
|
||||
## [0.4.1]
|
||||
|
||||
### Fixed
|
||||
- App stuck on infinite spinner after updating from v0.3.x (migration checksum mismatch on seed_categories.sql)
|
||||
- DB connection errors now logged to console instead of silently failing
|
||||
|
||||
## [0.4.0]
|
||||
|
||||
### Added
|
||||
- Categories: support for 3 levels of hierarchy (e.g., Dépenses récurrentes → Assurances → Assurance-auto)
|
||||
- Dynamic Report: new "Category (Level 3)" pivot field
|
||||
- Budget: intermediate subtotals and 3-level indentation for nested categories
|
||||
- Categories: automatic `is_inputable` management when creating/deleting subcategories
|
||||
- Categories: depth validation prevents creating a 4th level
|
||||
- Seed data: Assurances split into Assurance-auto, Assurance-habitation, Assurance-vie
|
||||
|
||||
### Fixed
|
||||
- Auto-categorization: keywords starting/ending with special characters (`[`, `]`, `(`, `)`, `-`, etc.) now match correctly
|
||||
- Auto-categorization: pre-compile regex patterns for better batch performance
|
||||
|
||||
## [0.3.11]
|
||||
|
||||
### Added
|
||||
- Dynamic Report: support multiple column dimensions (composite column keys)
|
||||
|
||||
### Fixed
|
||||
- Dynamic Report: no longer affected by global page date filters — uses only its own panel filters
|
||||
|
||||
## [0.3.10]
|
||||
|
||||
### Added
|
||||
- Dynamic Report: fields can now be used in multiple zones simultaneously (rows + filters, columns + filters)
|
||||
- Dynamic Report: right-click on a filter value to exclude it (shown with strikethrough in red)
|
||||
- "This year" period option in reports and dashboard (Jan 1 to today)
|
||||
|
||||
## [0.3.9]
|
||||
|
||||
### Added
|
||||
- Dynamic Report (pivot table): compose custom reports by assigning dimensions to rows, columns, filters and measures to values
|
||||
- Delete keywords from the "All Keywords" view
|
||||
|
||||
## [0.3.8]
|
||||
|
||||
### Added
|
||||
- Custom date range picker for reports and dashboard
|
||||
- Toggle to position subtotals above or below detail rows
|
||||
- Display release notes from CHANGELOG in GitHub releases and in-app updater
|
||||
|
||||
## [0.3.7]
|
||||
|
||||
### Fixes
|
||||
- Remove MSI bundle to prevent updater install path conflict
|
||||
- Change Windows updater installMode to basicUi
|
||||
- Improve split indicator visibility and adjustments layout
|
||||
|
||||
## 0.3.2
|
||||
|
||||
### New Features
|
||||
- **Linux support**: Add Linux build (`.deb`, `.rpm`, `.AppImage`) to release workflow
|
||||
- **Transaction splits on Adjustments page**: View transaction split adjustments in a dedicated section on the Adjustments page
|
||||
|
||||
### Fixes
|
||||
- Fix CSV auto-detect edge cases
|
||||
- Remove accent from productName for Linux `.deb` compatibility
|
||||
|
||||
## 0.3.1
|
||||
|
||||
### Fixes
|
||||
- Always show profile switcher in sidebar (#2)
|
||||
|
||||
## 0.3.0
|
||||
|
||||
### New Features
|
||||
- **Multiple profiles**: Create multiple profiles with separate databases, custom names, and colors
|
||||
- **PIN protection**: Protect profiles with an optional numeric PIN
|
||||
- **Profile switcher**: Quick profile switching from the sidebar
|
||||
- **Drag-and-drop categories**: Reorder categories or change parent via drag-and-drop in the category tree
|
||||
- **Transaction splits**: Split a transaction across multiple categories with adjustable amounts
|
||||
|
||||
## 0.2.10
|
||||
|
||||
### New Features
|
||||
- **Period quick-select**: Add quick period filter buttons (This month, Last month, etc.) on the Transactions page
|
||||
- **Budget vs Actual report**: Monthly and year-to-date comparison table in Reports
|
||||
- **Parent category subtotals**: Budget page shows aggregated subtotals for parent categories
|
||||
- **User guide**: Complete documentation page accessible from Settings, printable to PDF
|
||||
|
||||
### Improvements
|
||||
- Persist template selection and add Update template button
|
||||
- Don't pre-select already-imported files when entering source config
|
||||
- Make settings data imports visible in Import History
|
||||
- Replace per-template delete buttons with single delete on selection
|
||||
- Replace refresh icon with save icon on update template button
|
||||
- Add sign convention to budget page
|
||||
|
||||
## 0.2.9
|
||||
|
||||
### Fixes
|
||||
- Allow duplicate-content files with different names (#1)
|
||||
|
||||
## 0.2.8
|
||||
|
||||
### New Features
|
||||
- **Data export/import**: Export and import your data (transactions, categories, or both) with optional AES-256-GCM encryption (#3)
|
||||
|
||||
### Fixes
|
||||
- Cross-file duplicate detection and per-file import tracking
|
||||
|
||||
## 0.2.5
|
||||
|
||||
### New Features
|
||||
- **Import config templates**: Save and load import source configurations as reusable templates
|
||||
- **12-month budget grid**: Full year budget view with monthly cells and annual totals
|
||||
|
||||
### Fixes
|
||||
- Budget and category fixes
|
||||
- Migration checksum issue (schema.sql must not be modified after initial release)
|
||||
|
||||
## 0.2.3
|
||||
|
||||
### New Features
|
||||
- **Chart patterns**: Added SVG fill patterns (diagonal lines, dots, crosshatch, etc.) to differentiate categories in bar charts, pie chart, and stacked bar charts beyond just color
|
||||
- **Chart context menu**: Right-click any category in a chart to hide it or view its transactions in a detail popup
|
||||
- **Hidden categories**: Hidden categories appear as dismissible chips above charts with a "Show all" button to restore them
|
||||
- **Transaction detail modal**: View all transactions composing a category's total directly from any chart
|
||||
- **Import preview popup**: The data preview is now a popup modal instead of a separate wizard step, allowing quick inspection without leaving the configuration page
|
||||
- **Direct duplicate check**: New "Check Duplicates" button on the import configuration page skips directly to duplicate validation without requiring a preview first
|
||||
|
||||
### Improvements
|
||||
- Import wizard flow simplified: source-config → duplicate-check (preview is optional via popup)
|
||||
- Duplicate-check back button now returns to source configuration instead of the removed preview step
|
||||
- Added `categoryIds` map to `CategoryOverTimeData` for proper category resolution in the over-time chart
|
||||
|
||||
## 0.2.2
|
||||
|
||||
- Bump version
|
||||
|
||||
## 0.2.1
|
||||
|
||||
- Add "All Keywords" view on Categories page
|
||||
- Add dark mode with warm gray palette
|
||||
- Fix orphan categories, persist has_header for imports, add re-initialize
|
||||
- Add Budget and Adjustments pages
|
||||
|
|
@ -12,6 +12,7 @@ import BudgetPage from "./pages/BudgetPage";
|
|||
import ReportsPage from "./pages/ReportsPage";
|
||||
import SettingsPage from "./pages/SettingsPage";
|
||||
import DocsPage from "./pages/DocsPage";
|
||||
import ChangelogPage from "./pages/ChangelogPage";
|
||||
import ProfileSelectionPage from "./pages/ProfileSelectionPage";
|
||||
import ErrorPage from "./components/shared/ErrorPage";
|
||||
|
||||
|
|
@ -102,6 +103,7 @@ export default function App() {
|
|||
<Route path="/reports" element={<ReportsPage />} />
|
||||
<Route path="/settings" element={<SettingsPage />} />
|
||||
<Route path="/docs" element={<DocsPage />} />
|
||||
<Route path="/changelog" element={<ChangelogPage />} />
|
||||
</Route>
|
||||
</Routes>
|
||||
</BrowserRouter>
|
||||
|
|
|
|||
|
|
@ -2,6 +2,11 @@
|
|||
"app": {
|
||||
"name": "Simpl'Result"
|
||||
},
|
||||
"changelog": {
|
||||
"title": "Version History",
|
||||
"description": "View what's new and fixed in each version",
|
||||
"empty": "No entries available"
|
||||
},
|
||||
"nav": {
|
||||
"dashboard": "Dashboard",
|
||||
"import": "Import",
|
||||
|
|
@ -423,14 +428,7 @@
|
|||
"installing": "Installing...",
|
||||
"error": "Update failed",
|
||||
"retryButton": "Retry",
|
||||
"releaseNotes": "What's New",
|
||||
"notes": {
|
||||
"0.4.0": "### Added\n- Categories: support for 3 levels of hierarchy (e.g., Recurring Expenses → Insurance → Car Insurance)\n- Dynamic Report: new \"Category (Level 3)\" pivot field\n- Budget: intermediate subtotals and 3-level indentation for nested categories\n- Categories: automatic `is_inputable` management when creating/deleting subcategories\n- Categories: depth validation prevents creating a 4th level\n\n### Fixed\n- Auto-categorization: keywords starting/ending with special characters (`[`, `]`, `(`, `)`, `-`, etc.) now match correctly\n- Auto-categorization: pre-compile regex patterns for better batch performance",
|
||||
"0.3.11": "### Added\n- Dynamic Report: support multiple column dimensions (composite column keys)\n\n### Fixed\n- Dynamic Report: no longer affected by global page date filters — uses only its own panel filters",
|
||||
"0.3.10": "### Added\n- Dynamic Report: fields can now be used in multiple zones simultaneously (rows + filters, columns + filters)\n- Dynamic Report: right-click on a filter value to exclude it (shown with strikethrough in red)\n- \"This year\" period option in reports and dashboard (Jan 1 to today)",
|
||||
"0.3.9": "### Added\n- Dynamic Report (pivot table): compose custom reports by assigning dimensions to rows, columns, filters and measures to values\n- Delete keywords from the \"All Keywords\" view",
|
||||
"0.3.8": "### Added\n- Custom date range picker for reports and dashboard\n- Toggle to position subtotals above or below detail rows\n- Display release notes from CHANGELOG in GitHub releases and in-app updater"
|
||||
}
|
||||
"releaseNotes": "What's New"
|
||||
},
|
||||
"dataManagement": {
|
||||
"title": "Data Management",
|
||||
|
|
|
|||
|
|
@ -2,6 +2,11 @@
|
|||
"app": {
|
||||
"name": "Simpl'Résultat"
|
||||
},
|
||||
"changelog": {
|
||||
"title": "Historique des versions",
|
||||
"description": "Consultez les nouveautés et corrections de chaque version",
|
||||
"empty": "Aucune entrée disponible"
|
||||
},
|
||||
"nav": {
|
||||
"dashboard": "Tableau de bord",
|
||||
"import": "Importer",
|
||||
|
|
@ -423,14 +428,7 @@
|
|||
"installing": "Installation en cours...",
|
||||
"error": "Erreur lors de la mise à jour",
|
||||
"retryButton": "Réessayer",
|
||||
"releaseNotes": "Nouveautés",
|
||||
"notes": {
|
||||
"0.4.0": "### Ajouté\n- Catégories : support de 3 niveaux de hiérarchie (ex : Dépenses récurrentes → Assurances → Assurance-auto)\n- Rapport dynamique : nouveau champ « Catégorie (Niveau 3) »\n- Budget : sous-totaux intermédiaires et indentation 3 niveaux\n- Catégories : gestion automatique de `is_inputable` à la création/suppression de sous-catégories\n- Catégories : validation de profondeur empêche la création d'un 4e niveau\n\n### Corrigé\n- Auto-catégorisation : les mots-clés commençant/finissant par des caractères spéciaux (`[`, `]`, `(`, `)`, `-`, etc.) sont maintenant reconnus\n- Auto-catégorisation : pré-compilation des regex pour de meilleures performances en lot",
|
||||
"0.3.11": "### Ajouté\n- Rapport dynamique : support de plusieurs dimensions en colonnes (clés composites)\n\n### Corrigé\n- Rapport dynamique : n'est plus affecté par les filtres de date globaux — utilise uniquement ses propres filtres du panneau",
|
||||
"0.3.10": "### Ajouté\n- Rapport dynamique : les champs peuvent maintenant être utilisés dans plusieurs zones simultanément (lignes + filtres, colonnes + filtres)\n- Rapport dynamique : clic-droit sur une valeur de filtre pour l'exclure (affiché barré en rouge)\n- Option de période « Cette année » dans les rapports et le tableau de bord (du 1er janvier à aujourd'hui)",
|
||||
"0.3.9": "### Ajouté\n- Rapport dynamique (tableau croisé) : composez des rapports personnalisés en assignant des dimensions aux lignes, colonnes, filtres et mesures aux valeurs\n- Suppression de mots-clés depuis la vue « Tous les mots-clés »",
|
||||
"0.3.8": "### Ajouté\n- Sélecteur de plage de dates personnalisée pour les rapports et le tableau de bord\n- Bascule pour positionner les sous-totaux au-dessus ou en dessous des lignes de détail\n- Affichage des notes de version du CHANGELOG dans les releases GitHub et le système de mise à jour"
|
||||
}
|
||||
"releaseNotes": "Nouveautés"
|
||||
},
|
||||
"dataManagement": {
|
||||
"title": "Gestion des données",
|
||||
|
|
|
|||
107
src/pages/ChangelogPage.tsx
Normal file
107
src/pages/ChangelogPage.tsx
Normal file
|
|
@ -0,0 +1,107 @@
|
|||
import { useEffect, useState } from "react";
|
||||
import { useTranslation } from "react-i18next";
|
||||
import { Link } from "react-router-dom";
|
||||
import { ArrowLeft } from "lucide-react";
|
||||
|
||||
interface ChangelogEntry {
|
||||
version: string;
|
||||
sections: { heading: string; items: string[] }[];
|
||||
}
|
||||
|
||||
function parseChangelog(markdown: string): ChangelogEntry[] {
|
||||
const entries: ChangelogEntry[] = [];
|
||||
let current: ChangelogEntry | null = null;
|
||||
let currentSection: { heading: string; items: string[] } | null = null;
|
||||
|
||||
for (const line of markdown.split("\n")) {
|
||||
const trimmed = line.trim();
|
||||
|
||||
// Version heading: ## [0.6.0] or ## 0.6.0
|
||||
const versionMatch = trimmed.match(/^## \[?([^\]]+)\]?/);
|
||||
if (versionMatch) {
|
||||
if (currentSection && current) current.sections.push(currentSection);
|
||||
if (current) entries.push(current);
|
||||
current = { version: versionMatch[1], sections: [] };
|
||||
currentSection = null;
|
||||
continue;
|
||||
}
|
||||
|
||||
// Section heading: ### Added, ### Corrigé, etc.
|
||||
const sectionMatch = trimmed.match(/^### (.+)/);
|
||||
if (sectionMatch && current) {
|
||||
if (currentSection) current.sections.push(currentSection);
|
||||
currentSection = { heading: sectionMatch[1], items: [] };
|
||||
continue;
|
||||
}
|
||||
|
||||
// List item
|
||||
if (trimmed.startsWith("- ") && currentSection) {
|
||||
currentSection.items.push(trimmed.slice(2));
|
||||
}
|
||||
}
|
||||
|
||||
if (currentSection && current) current.sections.push(currentSection);
|
||||
if (current) entries.push(current);
|
||||
|
||||
return entries;
|
||||
}
|
||||
|
||||
export default function ChangelogPage() {
|
||||
const { t, i18n } = useTranslation();
|
||||
const [entries, setEntries] = useState<ChangelogEntry[]>([]);
|
||||
|
||||
useEffect(() => {
|
||||
const file = i18n.language === "fr" ? "/CHANGELOG.fr.md" : "/CHANGELOG.md";
|
||||
fetch(file)
|
||||
.then((r) => r.text())
|
||||
.then((text) => setEntries(parseChangelog(text)))
|
||||
.catch(() => setEntries([]));
|
||||
}, [i18n.language]);
|
||||
|
||||
return (
|
||||
<div className="p-6 max-w-2xl mx-auto space-y-6">
|
||||
<div className="flex items-center gap-3">
|
||||
<Link
|
||||
to="/settings"
|
||||
className="p-1.5 rounded-lg hover:bg-[var(--muted)] transition-colors"
|
||||
>
|
||||
<ArrowLeft size={18} />
|
||||
</Link>
|
||||
<h1 className="text-2xl font-bold">{t("changelog.title")}</h1>
|
||||
</div>
|
||||
|
||||
{entries.length === 0 ? (
|
||||
<p className="text-[var(--muted-foreground)]">{t("changelog.empty")}</p>
|
||||
) : (
|
||||
<div className="space-y-6">
|
||||
{entries.map((entry) => (
|
||||
<div
|
||||
key={entry.version}
|
||||
className="bg-[var(--card)] border border-[var(--border)] rounded-xl p-6 space-y-3"
|
||||
>
|
||||
<h2 className="text-lg font-semibold">{entry.version}</h2>
|
||||
{entry.sections.map((section, si) => (
|
||||
<div key={si} className="space-y-1.5">
|
||||
<h3 className="text-sm font-semibold text-[var(--primary)]">
|
||||
{section.heading}
|
||||
</h3>
|
||||
<ul className="space-y-1">
|
||||
{section.items.map((item, ii) => (
|
||||
<li
|
||||
key={ii}
|
||||
className="text-sm text-[var(--muted-foreground)] pl-3"
|
||||
>
|
||||
{"\u2022 "}
|
||||
{item.replace(/\*\*(.+?)\*\*/g, "$1")}
|
||||
</li>
|
||||
))}
|
||||
</ul>
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
import { useEffect, useState } from "react";
|
||||
import { useEffect, useState, useCallback } from "react";
|
||||
import { useTranslation } from "react-i18next";
|
||||
import {
|
||||
Info,
|
||||
|
|
@ -11,6 +11,7 @@ import {
|
|||
ShieldCheck,
|
||||
BookOpen,
|
||||
ChevronRight,
|
||||
FileText,
|
||||
} from "lucide-react";
|
||||
import { getVersion } from "@tauri-apps/api/app";
|
||||
import { useUpdater } from "../hooks/useUpdater";
|
||||
|
|
@ -21,15 +22,44 @@ import DataManagementCard from "../components/settings/DataManagementCard";
|
|||
import LogViewerCard from "../components/settings/LogViewerCard";
|
||||
|
||||
export default function SettingsPage() {
|
||||
const { t } = useTranslation();
|
||||
const { t, i18n } = useTranslation();
|
||||
const { state, checkForUpdate, downloadAndInstall, installAndRestart } =
|
||||
useUpdater();
|
||||
const [version, setVersion] = useState("");
|
||||
const [releaseNotes, setReleaseNotes] = useState<string | null>(null);
|
||||
|
||||
const fetchReleaseNotes = useCallback(
|
||||
(targetVersion: string) => {
|
||||
const file =
|
||||
i18n.language === "fr" ? "/CHANGELOG.fr.md" : "/CHANGELOG.md";
|
||||
fetch(file)
|
||||
.then((r) => r.text())
|
||||
.then((text) => {
|
||||
const escaped = targetVersion.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
||||
const re = new RegExp(
|
||||
`^## \\[?${escaped}\\]?.*$\\n([\\s\\S]*?)(?=^## |$(?!\\n))`,
|
||||
"m",
|
||||
);
|
||||
const match = text.match(re);
|
||||
setReleaseNotes(
|
||||
match ? match[1].trim() : null,
|
||||
);
|
||||
})
|
||||
.catch(() => setReleaseNotes(null));
|
||||
},
|
||||
[i18n.language],
|
||||
);
|
||||
|
||||
useEffect(() => {
|
||||
getVersion().then(setVersion);
|
||||
}, []);
|
||||
|
||||
useEffect(() => {
|
||||
if (state.status === "available" && state.version) {
|
||||
fetchReleaseNotes(state.version);
|
||||
}
|
||||
}, [state.status, state.version, fetchReleaseNotes]);
|
||||
|
||||
const progressPercent =
|
||||
state.contentLength && state.contentLength > 0
|
||||
? Math.round((state.progress / state.contentLength) * 100)
|
||||
|
|
@ -78,6 +108,27 @@ export default function SettingsPage() {
|
|||
</div>
|
||||
</Link>
|
||||
|
||||
{/* Changelog card */}
|
||||
<Link
|
||||
to="/changelog"
|
||||
className="block bg-[var(--card)] border border-[var(--border)] rounded-xl p-6 hover:border-[var(--primary)] transition-colors group"
|
||||
>
|
||||
<div className="flex items-center justify-between">
|
||||
<div className="flex items-center gap-4">
|
||||
<div className="w-12 h-12 rounded-xl bg-[var(--primary)]/10 flex items-center justify-center text-[var(--primary)]">
|
||||
<FileText size={22} />
|
||||
</div>
|
||||
<div>
|
||||
<h2 className="text-lg font-semibold">{t("changelog.title")}</h2>
|
||||
<p className="text-sm text-[var(--muted-foreground)]">
|
||||
{t("changelog.description")}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<ChevronRight size={18} className="text-[var(--muted-foreground)] group-hover:text-[var(--primary)] transition-colors" />
|
||||
</div>
|
||||
</Link>
|
||||
|
||||
{/* Update card */}
|
||||
<div className="bg-[var(--card)] border border-[var(--border)] rounded-xl p-6 space-y-4">
|
||||
<h2 className="text-lg font-semibold flex items-center gap-2">
|
||||
|
|
@ -127,9 +178,7 @@ export default function SettingsPage() {
|
|||
{t("settings.updates.available", { version: state.version })}
|
||||
</p>
|
||||
{(() => {
|
||||
const notesKey = `settings.updates.notes.${state.version}`;
|
||||
const i18nNotes = t(notesKey, { defaultValue: "" });
|
||||
const notes = i18nNotes || state.body;
|
||||
const notes = releaseNotes || state.body;
|
||||
if (!notes) return null;
|
||||
return (
|
||||
<div className="space-y-2">
|
||||
|
|
|
|||
Loading…
Reference in a new issue