import type { Space } from "@rakazo/contracts"; import { Stack, useRouter } from "expo-router"; import { useState } from "react"; import { Alert, Pressable, ScrollView, Text, TextInput } from "react-native"; import { rpc, selectSpace } from "../lib/api"; import { useI18n } from "../lib/i18n"; import { useMobileTokens } from "../lib/native"; export default function NewSpace() { const { t } = useI18n(); const tokens = useMobileTokens(); const router = useRouter(); const [name, setName] = useState(""); const [pending, setPending] = useState(false); const [error, setError] = useState(null); async function create() { const trimmed = name.trim(); if (!trimmed || pending) return; setPending(true); setError(null); try { const space = await rpc("spaces/create", { name: trimmed }); if (!(await selectSpace(space.id))) { Alert.alert(t("Space created"), t("It could not be opened. Try again from the sidebar.")); router.dismissAll(); router.replace("/"); return; } router.dismissAll(); // A new project opens in the conversation with its own main agent. const main = space.groups.find((group) => group.kind === "main"); router.replace( main ? { pathname: "/group-thread", params: { groupId: main.id, name: main.name } } : "/", ); } catch (reason) { setError(reason instanceof Error ? reason.message : t("Could not create space")); setPending(false); } } return ( <> ( router.back()} hitSlop={8} style={{ paddingEnd: 20, paddingVertical: 8 }} accessibilityRole="button" accessibilityLabel={t("Cancel")} > {t("Cancel")} ), }} /> {t("Name")} void create()} placeholder={t("Customer support")} placeholderTextColor={tokens.mutedForeground} returnKeyType="done" style={{ marginTop: 8, backgroundColor: tokens.muted, borderRadius: 11, padding: 14, color: tokens.foreground, fontSize: 16, }} /> {error ? {error} : null} void create()} disabled={!name.trim() || pending} style={{ marginTop: 20, backgroundColor: tokens.primary, borderRadius: 11, padding: 14, alignItems: "center", opacity: !name.trim() || pending ? 0.4 : 1, }} > {pending ? t("Creating…") : t("Create space")} ); }