import { ActivityIndicator, Text } from "react-native"; import { useFeedbackBody } from "../../../shared/context/FeedbackBodyProvider.js"; import { useFeedbackUi } from "../../../shared/context/FeedbackProvider.js"; import { allowAuthenticatedAction, createEntryLabel, } from "../../../shared/helpers.js"; import type { FeedbackScreenListProps } from "../../../shared/types/index.js"; import { Button } from "./Button.js"; import { EntryCard } from "./EntryCard.js"; import { EntryDetail } from "./EntryDetail.js"; import { FeedbackBoard } from "./primitives.js"; export function FeedbackScreenList({ hideBackButton = false, showSelectedEntry = true, hideEditButton = false, onEntryOpen, onCreateEntry, }: FeedbackScreenListProps) { const { hooks, entrySort, enabledKinds, statusFilter, selectedEntryId, query, debouncedQuery, setSelectedEntryId, setShowForm, emptyState, loading: loadingIndicator, isAuthenticated, onUnauthenticated, } = useFeedbackBody(); const { messages, theme } = useFeedbackUi(); const list = hooks.useEntries({ sort: entrySort, kinds: enabledKinds, statusFilter, }); const search = hooks.useSearchEntries({ searchQuery: debouncedQuery, kinds: enabledKinds, statusFilter, }); const normalizedQuery = query.trim(); const normalizedDebouncedQuery = debouncedQuery.trim(); const searching = normalizedQuery.length > 0; const entries = searching ? search : list.results; const createEntry = () => { if (allowAuthenticatedAction(isAuthenticated, onUnauthenticated)) { (onCreateEntry ?? (() => setShowForm(true)))(); } }; const loading = searching ? normalizedQuery !== normalizedDebouncedQuery || search === undefined : list.status === "LoadingFirstPage"; return ( <> {showSelectedEntry && selectedEntryId ? ( setSelectedEntryId(null)} /> ) : loading ? ( {loadingIndicator ?? ( )} ) : entries !== undefined && entries.length === 0 ? ( {emptyState} {searching ? messages.board.noSearchResults : messages.board.noEntries}