import React from "react";
import { Pressable, ScrollView, StyleSheet, Text, View } from "react-native";
import { useSafeAreaInsets } from "react-native-safe-area-context";
import { fonts, text } from "../theme/tokens";
import { useTheme } from "../theme/useTheme";
import { Button } from "../components/Button";
import { Icon } from "../components/Icon";
import {
Card,
Divider,
Mono,
SectionLabel,
StatusDot,
} from "../components/primitives";
import { TabBar } from "../components/TabBar";
import { useAppState } from "../state/AppState";
import {
recentCheckmarks,
waitingAgents,
type Checkmark,
type WaitingAgent,
} from "../data/mock";
export function FleetScreen() {
const { colors } = useTheme();
const insets = useSafeAreaInsets();
const { go, notAnswered } = useAppState();
const waiting = waitingAgents.filter((a) => !(a.clearsOnAnswer && !notAnswered));
const stats = [
{ label: "Running", value: "6", tint: colors.textHeading },
{ label: "Waiting", value: "3", tint: colors.warning },
{ label: "Done", value: "42", tint: colors.textHeading },
];
return (
Fleet
12 agents ยท 3 waiting on you
{stats.map((s) => (
{s.label}
{s.value}
))}
Waiting on you
{waiting.map((a, i) => (
{i > 0 && }
go("answer")} />
))}
Recent checkmarks
{recentCheckmarks.map((c, i) => (
{i > 0 && }
go("detail")} />
))}
);
}
function WaitingRow({
agent,
onAnswer,
}: {
agent: WaitingAgent;
onAnswer: () => void;
}) {
const { colors } = useTheme();
return (
{agent.id}
{agent.title}
{agent.question}
);
}
function CheckmarkRow({
checkmark,
onPress,
}: {
checkmark: Checkmark;
onPress: () => void;
}) {
const { colors } = useTheme();
const dot = checkmark.status === "positive" ? colors.positive : colors.danger;
return (
[
styles.checkmarkRow,
pressed && { backgroundColor: colors.surfaceSunken },
]}
>
{checkmark.title}
{checkmark.meta}
);
}
const styles = StyleSheet.create({
page: { flex: 1 },
content: { paddingTop: 8, paddingHorizontal: 20, paddingBottom: 20 },
headerRow: {
flexDirection: "row",
alignItems: "center",
gap: 12,
marginTop: 12,
marginBottom: 20,
},
statsRow: { flexDirection: "row", gap: 12, marginBottom: 20 },
statCard: { flex: 1, paddingVertical: 14, paddingHorizontal: 16 },
statValue: {
fontFamily: fonts.monoSemiBold,
fontSize: 24,
lineHeight: 28,
marginTop: 4,
},
overline: { marginBottom: 10 },
section: { marginBottom: 20 },
rowPad: { paddingVertical: 14, paddingHorizontal: 16 },
waitingTop: { flexDirection: "row", alignItems: "center", gap: 8 },
waitingBottom: {
flexDirection: "row",
alignItems: "center",
gap: 10,
marginTop: 8,
},
rowTitle: {
fontFamily: fonts.bodySemiBold,
fontSize: 13,
lineHeight: 16,
},
checkmarkRow: {
flexDirection: "row",
alignItems: "center",
gap: 12,
paddingVertical: 14,
paddingHorizontal: 16,
minHeight: 44,
},
});