Files
discord-decomp/modules/safety_flows/native/SafetyFlowsModal.tsx
T
2026-11-01 12:12:55 +02:00

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>;
};