import { BOT_DESCRIPTION_MAX_LENGTH, BOT_NAME_MAX_LENGTH, BOT_TITLE_MAX_LENGTH, type ComputerMode, normalizeCreateBotProfile, } from "@rakazo/contracts"; import { Stack, useRouter } from "expo-router"; import { useState } from "react"; import { Pressable, ScrollView, Text, TextInput } from "react-native"; import { ComputerModePicker } from "../components/computer-mode-picker"; import { type MobileBot, rpc } from "../lib/api"; export default function NewBot() { const router = useRouter(); const [name, setName] = useState(""); const [title, setTitle] = useState(""); const [description, setDescription] = useState(""); const [computerMode, setComputerMode] = useState("team"); const [error, setError] = useState(null); const [pending, setPending] = useState(false); function close() { if (router.canDismiss()) { router.dismiss(); return; } if (router.canGoBack()) { router.back(); return; } router.replace("/"); } async function create() { if (!name.trim() || pending) return; setPending(true); setError(null); try { const bot = await rpc("bots/create", { ...normalizeCreateBotProfile({ name, title, description }), notifyOnFinish: true, computerMode, }); router.replace({ pathname: "/thread", params: { botId: bot.id, name: bot.name } }); } catch (err) { setError(err instanceof Error ? err.message : "Could not create bot"); } finally { setPending(false); } } return ( <> ( Cancel ), }} /> Name Title Description {error ? {error} : null} void create()} disabled={!name.trim() || pending} style={{ marginTop: 24, backgroundColor: "#F1F1EF", borderRadius: 11, padding: 16, alignItems: "center", opacity: !name.trim() || pending ? 0.4 : 1, }} > {pending ? "Creating…" : "Create"} ); }