import { useState } from "react"; import { Text, TextInput, TouchableOpacity, View } from "react-native"; import ReactNativeModal from "react-native-modal"; import { CustomButton } from "@/components/custom-button"; import { useT } from "@/lib/i18n"; import { useTheme } from "@/lib/theme"; // The driver's half of the pickup handshake: they ask the rider for the code // on the rider's screen and type it here to start the trip. The code is never // sent to the driver's device, so a wrong entry is a real mismatch — either // the wrong passenger got in, or the driver is at the wrong car. type Props = { visible: boolean; submitting?: boolean; /** Set when the server rejected the last attempt. */ error?: string | null; onCancel: () => void; onSubmit: (code: string) => void; }; export const PickupCodeSheet = ({ visible, submitting, error, onCancel, onSubmit, }: Props) => { const t = useT(); const { isDark } = useTheme(); const [code, setCode] = useState(""); return ( {t("pickupCode.title")} {t("pickupCode.subtitle")} setCode(v.replace(/\D/g, "").slice(0, 4))} keyboardType="number-pad" maxLength={4} autoFocus placeholder="0000" placeholderTextColor={isDark ? "#525252" : "#d4d4d4"} className="bg-neutral-100 dark:bg-neutral-800 text-black dark:text-white rounded-2xl py-4 my-5 text-center text-3xl font-JakartaExtraBold tracking-[10px]" /> {error ? ( {error} ) : null} onSubmit(code)} disabled={code.length < 4 || submitting} className={code.length < 4 ? "opacity-50" : ""} /> {t("common.cancel")} ); };