import React, { useEffect, useState } from "react"; import { View, ScrollView, Pressable, TextInput, ActivityIndicator, useColorScheme, } from "react-native"; import { useSirouRouter } from "@sirou/react-native"; import { AppRoutes } from "@/lib/routes"; import { Text } from "@/components/ui/text"; import { Button } from "@/components/ui/button"; import { ScreenWrapper } from "@/components/ScreenWrapper"; import { FormFlow } from "@/components/FormFlow"; import { api } from "@/lib/api"; import { toast } from "@/lib/toast-store"; import { getPlaceholderColor } from "@/lib/colors"; const STEPS = [ { key: "basic", label: "Basic Info" }, { key: "contact", label: "Contact" }, { key: "address", label: "Address" }, ]; export default function EditCompanyScreen() { const nav = useSirouRouter(); const isDark = useColorScheme() === "dark"; const [step, setStep] = useState(0); const [loading, setLoading] = useState(false); const [saving, setSaving] = useState(false); const [form, setForm] = useState({ name: "", tin: "", address: "", city: "", state: "", zipCode: "", country: "", phone: "", email: "", website: "", }); useEffect(() => { const load = async () => { setLoading(true); try { const res = await api.company.get(); const data = res?.data ?? res; if (data) { setForm({ name: data.name ?? "", tin: data.tin ?? "", address: data.address ?? "", city: data.city ?? "", state: data.state ?? "", zipCode: data.zipCode ?? "", country: data.country ?? "", phone: data.phone ?? "", email: data.email ?? "", website: data.website ?? "", }); } } finally { setLoading(false); } }; load(); }, []); const updateField = (key: keyof typeof form, value: string) => { setForm((prev) => ({ ...prev, [key]: value })); }; const handleNext = () => { if (step === 0 && !form.name.trim()) { toast.error("Required", "Company name is required"); return; } setStep(step + 1); }; const handleSave = async () => { if (!form.name.trim()) { toast.error("Required", "Company name is required"); return; } setSaving(true); try { await api.company.update({ body: form }); toast.success("Saved", "Company information updated"); nav.back(); } catch (e: any) { toast.error("Error", e?.message || "Failed to update company"); } finally { setSaving(false); } }; if (loading) { return ( ); } return ( setStep(step - 1)} onComplete={handleSave} loading={saving} completeLabel="Update Company" > {step === 0 && ( Basic Information updateField("name", v)} /> updateField("tin", v)} /> )} {step === 1 && ( Contact Information updateField("phone", v)} keyboardType="phone-pad" /> updateField("email", v)} keyboardType="email-address" /> updateField("website", v)} /> )} {step === 2 && ( Address updateField("address", v)} /> updateField("city", v)} /> updateField("state", v)} /> updateField("zipCode", v)} keyboardType="number-pad" /> updateField("country", v)} /> )} ); } function Field({ label, required, value, placeholder, onChangeText, keyboardType, }: { label: string; required?: boolean; value: string; placeholder: string; onChangeText: (v: string) => void; keyboardType?: "default" | "email-address" | "phone-pad" | "number-pad"; }) { const isDark = useColorScheme() === "dark"; return ( {label} {required && *} ); }