73 lines
2.9 KiB
TypeScript
73 lines
2.9 KiB
TypeScript
// Metro module 16706 (f16707).
|
|
import { useState, useMemo } from "react";
|
|
import { useNavigatorScreens } from "../../../design/components/Navigator/native/Navigator.native";
|
|
import { SafetyFlowScreens, TaskType } from "../types";
|
|
import OverviewScreen from "./OverviewScreen";
|
|
import EnterEmailScreen from "./tasks/EnterEmailScreen";
|
|
import { getHeaderBackButton } from "../../../design/components/Navigator/native/NavigatorHeader.native";
|
|
import VerifyEmailScreen from "./tasks/VerifyEmailScreen";
|
|
import UpdateAppScreen from "./UpdateAppScreen";
|
|
import AgeVerificationScreen from "./tasks/AgeVerificationScreen";
|
|
import { ParentalConsentConnectionNavbar } from "./tasks/ParentalConsentConnectionHeader";
|
|
import ParentalConsentConnectionScreen from "./tasks/ParentalConsentConnectionScreen";
|
|
import ErrorScreen from "./ErrorScreen";
|
|
import { getScreensForTaskType } from "./SafetyFlowsUtils";
|
|
import { SafetyFlowTaskContext } from "../SafetyFlowsTaskContext";
|
|
import { StepModal } from "../../../design/components/Modal/native/StepModal.native";
|
|
export default function SafetyFlowsModal(props) {
|
|
const { task, initialScreen } = props;
|
|
const [state, setState] = useState(task);
|
|
const navigatorScreens = useNavigatorScreens(() => {
|
|
const r1 = {};
|
|
r1[SafetyFlowScreens.OVERVIEW] = {
|
|
headerLeft: () => null,
|
|
headerShown: false,
|
|
render: () => <OverviewScreen />
|
|
};
|
|
r1[SafetyFlowScreens.ENTER_EMAIL] = {
|
|
headerLeft: () => null,
|
|
headerTitle: () => null,
|
|
render: () => <EnterEmailScreen />
|
|
};
|
|
r1[SafetyFlowScreens.VERIFY_EMAIL] = {
|
|
headerLeft: getHeaderBackButton(),
|
|
headerTitle: () => null,
|
|
render: () => <VerifyEmailScreen />
|
|
};
|
|
r1[SafetyFlowScreens.UPDATE_APP] = {
|
|
headerLeft: () => null,
|
|
headerTitle: () => null,
|
|
render: () => <UpdateAppScreen />
|
|
};
|
|
r1[SafetyFlowScreens.AGE_VERIFICATION] = {
|
|
headerLeft: () => null,
|
|
headerTitle: () => null,
|
|
render: () => <AgeVerificationScreen />
|
|
};
|
|
r1[SafetyFlowScreens.PARENTAL_CONSENT_CONNECTION] = {
|
|
headerShown: false,
|
|
customNavbar: () => <ParentalConsentConnectionNavbar />,
|
|
render: () => <ParentalConsentConnectionScreen />
|
|
};
|
|
r1[SafetyFlowScreens.ERROR] = {
|
|
headerLeft: () => null,
|
|
headerTitle: () => null,
|
|
render: () => <ErrorScreen />
|
|
};
|
|
return r1;
|
|
}, []);
|
|
const memo = useMemo(() => {
|
|
if (state?.flow_context == null) {
|
|
return [];
|
|
}
|
|
const tasks = state.flow_context.tasks;
|
|
return tasks.length === 1 && tasks[0].task_type === TaskType.PARENTAL_CONSENT_CONNECTION ? [] : state.flow_context.tasks.map((task) => getScreensForTaskType(task.task_type)).filter((item) => item != null).flat();
|
|
}, [state]);
|
|
return <SafetyFlowTaskContext.Provider value={useMemo(() => ({
|
|
task: state,
|
|
setTask: setState
|
|
}), [state])}>
|
|
<StepModal initialRouteName={initialScreen} screens={navigatorScreens} steps={memo} />
|
|
</SafetyFlowTaskContext.Provider>;
|
|
};
|