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.
31 lines
934 B
TypeScript
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);
|
|
}
|