diff --git a/web/src/components/OnboardingWizard.jsx b/web/src/components/OnboardingWizard.jsx index c60822b..ef9d74e 100644 --- a/web/src/components/OnboardingWizard.jsx +++ b/web/src/components/OnboardingWizard.jsx @@ -1,5 +1,5 @@ -import { useState } from 'react' -import { Sparkles, ArrowRight } from 'lucide-react' +import { useState, useEffect } from 'react' +import { Sparkles, ArrowRight, ArrowLeft } from 'lucide-react' import { useI18n, LANGUAGES } from '../i18n' import { getLayoutList } from '../i18n/keyboards' @@ -24,6 +24,7 @@ export default function OnboardingWizard({ api, onComplete }) { editor: '', }) const [saving, setSaving] = useState(false) + const [error, setError] = useState(null) const current = STEPS[step] const layouts = getLayoutList() @@ -32,8 +33,28 @@ export default function OnboardingWizard({ api, onComplete }) { if (step < STEPS.length - 1) setStep(step + 1) } + const goPrev = () => { + if (step > 0) setStep(step - 1) + } + + useEffect(() => { + const handler = (e) => { + if (e.key === 'Escape') { goPrev(); return } + if (e.key === 'Enter' && current.key !== 'done') { e.preventDefault(); goNext() } + } + window.addEventListener('keydown', handler) + return () => window.removeEventListener('keydown', handler) + }, [step, current]) + + useEffect(() => { + if (current.key === 'done' && !saving) { + handleSave() + } + }, [step]) + const handleSave = async () => { setSaving(true) + setError(null) try { await api.saveProfile({ name: answers.name, @@ -46,9 +67,9 @@ export default function OnboardingWizard({ api, onComplete }) { }) onComplete() } catch (err) { - console.error(err) + setError(err.message || 'Erreur lors de la sauvegarde') + setSaving(false) } - setSaving(false) } return ( @@ -149,20 +170,37 @@ export default function OnboardingWizard({ api, onComplete }) { {current.key === 'done' && (
-
C'est parti ! 🚀
-
- Votre profil est configur\u00e9. Vous pouvez toujours ajuster les param\u00e8tres dans l'onglet Configuration. -
+ {saving ? ( + <> +
Configuration en cours...
+
Sauvegarde de vos préférences.
+ + ) : error ? ( + <> +
Erreur
+
{error}
+ + + ) : ( + <> +
C'est parti ! 🚀
+
+ Votre profil est configuré. Vous pouvez toujours ajuster les paramètres dans l'onglet Configuration. +
+ + )}
)}
- {current.key === 'done' ? ( - - ) : ( + )} +
+ {step < STEPS.length - 1 && (