Onboarding : état vide dédié de la page Import, bouton « Créer un dossier d'exemple » et liens vers le guide #356
Labels
No labels
autopilot:pending-human
source:analyste
source:defenseur
source:human
source:medic
status:approved
status:blocked
status:in-progress
status:needs-clarification
status:needs-fix
status:ready
status:review
status:triage
type:bug
type:feature
type:infra
type:refactor
type:schema
type:security
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: maximus/Simpl-Resultat#356
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Vague
planned-2026-10-03-onboarding-phase1(séance/plan-rundu 2026-10-03, spec +/review-specdu 2026-09-25, verdict APPROUVÉ après intégration). Les fichiersspec-decisions-onboarding-phase1.md/spec-plan-onboarding-phase1.mdsont ignorés par git : ce corps est auto-suffisant, ne pas chercher le spec. Analyse d'origine :docs/analyse-onboarding-2026-09.md.Règles de la vague : pile linéaire (chaque PR part de la précédente) ; ne pas toucher
CHANGELOG.md/CHANGELOG.fr.mdavant #357 qui les centralise ; FR + EN pour toute clé i18n (.claude/rules/i18n.md) ; aucune migration DB ; aucune chaîne en dur dans les composants.Objectif
La page Import sans dossier propose de le choisir ; avec un dossier vide, elle propose de créer le dossier d'exemple ; les deux états et le popover « ? » mènent au guide d'export CSV.
Tâches
src/hooks/useImportWizard.ts: exporterwizardReducer+initialWizardState(privé en:179) ; étatsampleCreated: string[] | null; actioncreateSampleFolders()=invoke<string[]>("create_sample_import_folders", { importFolder: state.importFolder, today })avectoday= date locale du webview formatéeYYYY-MM-DD, puisscanFolderInternal(folder), puisSET_SAMPLE_CREATED(names);resetetbrowseFolderremettentsampleCreatedànull; erreur →SET_ERRORexistant (message tel que renvoyé par Rust) ;logInfoavec les noms de dossiers seulement, jamais le chemin completsrc/components/import/ImportEmptyState.tsx(nouveau, pur, construit surEmptyState) : props{ hasFolder, folderName, onBrowse, onCreateSample, onRefresh, isCreatingSample }; sans dossier → « Commencez par choisir le dossier où vous déposerez vos relevés », bouton primaire « Choisir un dossier » (onBrowse), lien secondaire « Comment exporter un CSV depuis ma banque ? » →/settings/users#import-export; avec dossier → « Créez un sous-dossier par banque dans {folderName} et déposez-y vos fichiers CSV », bouton primaire « Créer un dossier d'exemple » (disabledpendantisCreatingSample), bouton secondaire « Actualiser » (onRefresh), même lien ;folderName= dernier segment du cheminImportPage.tsx: rendreImportEmptyStateà la place deSourceListquandstate.step === "source-list"etstate.scannedSources.length === 0;SourceList.tsxreste intact ; bandeau de succès refermable quandstate.sampleCreatedest non nul (même forme que le bandeau d'erreur:49-60, bordurevar(--positive)) : « Deux dossiers d'exemple ont été créés : Exemple Desjardins, Exemple Tangerine. Cliquez sur l'un d'eux pour lancer l'import. Supprimez-les quand vos vrais relevés sont en place. »ImportFolderConfig.tsx: « Parcourir » en style secondaire (bordure, comme « Actualiser ») quandfolderPathest nul, pour qu'un seul bouton primaire soit à l'écranPageHelp.tsx: prop optionnellelinkTo?: string; si présente,<Link to={linkTo}>rendu sous la listetipsavec le libellét(${helpKey}.help.linkLabel); pas de fermeture explicite au clic (la navigation démonte la page) ;ImportPagepasselinkTo="/settings/users#import-export"import.empty.noFolder.*,import.empty.noSources.*,import.empty.createSample,import.empty.refresh,import.empty.guideLink,import.empty.sampleCreated,import.help.linkLabelFichiers concernés
src/hooks/useImportWizard.ts+src/hooks/useImportWizard.test.ts(nouveau)src/components/import/ImportEmptyState.tsx(nouveau) +ImportEmptyState.test.tsx(nouveau)src/components/import/ImportFolderConfig.tsxsrc/components/shared/PageHelp.tsxsrc/pages/ImportPage.tsxsrc/i18n/locales/fr.json,src/i18n/locales/en.jsonDepends on
Critères d'acceptation
useImportWizard.test.ts:SET_SAMPLE_CREATEDpose les noms ;resetetSET_IMPORT_FOLDER(viabrowseFolder) l'effacent ; une erreur de création laissescannedSourcesinchangéImportEmptyState.test.tsx: variante sans dossier (bouton « Choisir un dossier », lien guide) ; variante avec dossier (bouton « Créer » désactivé quandisCreatingSample, « Actualiser », lien guide) ;folderNameaffiché sans le chemin completSourceListsans clic supplémentaire, bandeau de succès affiché et refermableImportEmptyStaten'est jamais renduParamètres → Systèmes → Journaux) : la création apparaît avec les noms de dossiers, sans chemin absolunpm test,npm run buildvertsReview caveats
SourceListreste une liste pure ; un seul bouton primaire par état.linkTo+${helpKey}.help.linkLabel; pas de fermeture explicite du popover.Décisions prises en planification
is_manually_categorized = 1) et non « règle créée » ni « transactions catégorisées » : le seed IPC met 180 mots-clés dans tout profil neuf et le wizard catégorise pendant l'import (useImportWizard.ts:1016).planned-2026-09-24-paiementss'exécute avant celle-ci (fichiers partagés :fr.json,en.json, CHANGELOG,architecture.md,guide-utilisateur.md) ; partir d'unmainqui contient déjà ses clés.Spec source
spec-plan-onboarding-phase1.md (local, ignoré par git)
Onboarding: Import empty states, « Create sample folder » button and deep links to the guideto Onboarding : état vide dédié de la page Import, bouton « Créer un dossier d'exemple » et liens vers le guide