import React from "react"; import { ScrollView, StyleSheet, Text, View } from "react-native"; import { useSafeAreaInsets } from "react-native-safe-area-context"; import { text } from "../theme/tokens"; import { useTheme } from "../theme/useTheme"; import { Chip } from "../components/Chip"; import { Mono, SectionLabel } from "../components/primitives"; import { TabBar } from "../components/TabBar"; import { useAppState } from "../state/AppState"; import { clockTime, statusColor } from "../api/format"; export function LogScreen() { const { colors } = useTheme(); const insets = useSafeAreaInsets(); const { logFilter, setLogFilter, globalLog, projects } = useAppState(); const filters: { key: string; label: string }[] = [ { key: "all", label: "All" }, ...projects.map((p) => ({ key: p.id, label: p.id })), { key: "errors", label: "Errors" }, ]; const entries = globalLog.filter((e) => logFilter === "all" ? true : logFilter === "errors" ? e.err : e.project === logFilter, ); return ( Log {filters.map((f) => ( setLogFilter(f.key)} /> ))} Activity {entries.length === 0 ? ( No activity yet. ) : ( entries.map((e) => ( {clockTime(e.createdAt)} {e.name} {e.msg} )) )} ); } const styles = StyleSheet.create({ page: { flex: 1 }, header: { paddingHorizontal: 20, paddingTop: 20, paddingBottom: 16 }, filters: { flexDirection: "row", gap: 8, marginTop: 14, paddingRight: 20 }, todayLabel: { paddingHorizontal: 20, paddingBottom: 8 }, feed: { borderTopWidth: 1, paddingHorizontal: 20, paddingVertical: 16, flexGrow: 1, }, logRow: { flexDirection: "row", gap: 10 }, mono: { fontSize: 12.5, lineHeight: 26 }, idCol: { width: 86 }, });