import type { Space } from "@rakazo/contracts"; import { Stack, useRouter } from "expo-router"; import { useState } from "react"; import { Alert, Pressable, ScrollView, Text, TextInput, View } from "react-native"; import { rpc, selectSpace } from "../lib/api"; export default function NewSpace() { 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("Space created", "It could not be opened. Try again from the sidebar."); router.dismissAll(); router.replace("/"); return; } router.dismissAll(); router.replace("/"); } catch (reason) { setError(reason instanceof Error ? reason.message : "Could not create space"); setPending(false); } } return ( <> ( router.back()} hitSlop={12} accessibilityRole="button" accessibilityLabel="Cancel" > Cancel ), }} /> Space Name void create()} placeholder="Customer support" placeholderTextColor="#6C6C70" returnKeyType="done" style={{ marginTop: 8, backgroundColor: "#101012", borderRadius: 11, padding: 14, color: "#ECECEE", fontSize: 16, }} /> {error ? {error} : null} void create()} disabled={!name.trim() || pending} style={{ marginTop: 20, backgroundColor: "#8B5CF6", borderRadius: 999, padding: 14, alignItems: "center", opacity: !name.trim() || pending ? 0.4 : 1, }} > {pending ? "Creating…" : "Create space"} ); }