chahinebrini 312c668ae9 feat(onboarding): back-button between steps + language switcher on welcome
Back-Button:
- OnboardingNavContext liefert der Shell einen optionalen goBack-Handler
  (kein prop-drilling durch 8 Slides).
- OnboardingShell: chevron-back links neben der Progress-Bar wenn goBack
  gesetzt ist.
- Controller: goToLinearPrevious() + BACK_ALLOWED-Liste. Back nur auf
  privacy/nickname/diga_choice/plan/payment — NICHT welcome (erste),
  done (final), diga_code (eigener onBack), protection (Backend-Step +
  Permission-Flow).

Language-Switcher:
- WelcomeSlide: 4 Sprach-Pills (DE/EN/FR/AR) oben rechts. User kommt
  während Onboarding nicht zu Settings — sonst kein Weg die Sprache
  zu wechseln. setLanguage persistiert + flippt RTL für AR.
2026-05-20 04:20:22 +02:00

31 lines
934 B
TypeScript

import { createContext, useContext, type ReactNode } from 'react';
/**
* Stellt der OnboardingShell einen optionalen Back-Handler bereit, ohne
* `onBack` durch alle 8 Slide-Komponenten prop-drillen zu müssen.
*
* Controller (app/onboarding/index.tsx) entscheidet pro Slide ob ein Back
* möglich ist (welcome = erste Slide, done = final → kein Back) und liefert
* entsprechend `goBack` oder `null`.
*/
const OnboardingBackContext = createContext<(() => void) | null>(null);
export function OnboardingNavProvider({
goBack,
children,
}: {
goBack: (() => void) | null;
children: ReactNode;
}) {
return (
<OnboardingBackContext.Provider value={goBack}>
{children}
</OnboardingBackContext.Provider>
);
}
/** Gibt den Back-Handler zurück, oder null wenn die aktuelle Slide kein Back erlaubt. */
export function useOnboardingBack(): (() => void) | null {
return useContext(OnboardingBackContext);
}