/** * SearchPage component - Main search interface for PodTUI */ import { createSignal, createEffect, Show } from "solid-js"; import { useKeyboard } from "@opentui/solid"; import { useSearchStore } from "@/stores/search"; import { SearchResults } from "./SearchResults"; import { SearchHistory } from "./SearchHistory"; import type { SearchResult } from "@/types/source"; import { MyShowsPage } from "../MyShows/MyShowsPage"; import { useTheme } from "@/context/ThemeContext"; import { useNavigation } from "@/context/NavigationContext"; enum SearchPaneType { INPUT = 1, RESULTS = 2, HISTORY = 3, } export const SearchPaneCount = 3; export function SearchPage() { const searchStore = useSearchStore(); const [inputValue, setInputValue] = createSignal(""); const [resultIndex, setResultIndex] = createSignal(0); const [historyIndex, setHistoryIndex] = createSignal(0); const { theme } = useTheme(); const nav = useNavigation(); const handleSearch = async () => { const query = inputValue().trim(); if (query) { await searchStore.search(query); if (searchStore.results().length > 0) { //setFocusArea("results"); //TODO: move level setResultIndex(0); } } }; const handleHistorySelect = async (query: string) => { setInputValue(query); await searchStore.search(query); if (searchStore.results().length > 0) { //setFocusArea("results"); //TODO: move level setResultIndex(0); } }; const handleResultSelect = (result: SearchResult) => { //props.onSubscribe?.(result); searchStore.markSubscribed(result.podcast.id); }; return ( {/* Search Header */} Search Podcasts {/* Search Input */} Search: { setInputValue(value); }} placeholder="Enter podcast name, topic, or author..." focused={nav.activeDepth === SearchPaneType.INPUT} width={50} /> [Enter] Search {/* Status */} Searching... {searchStore.error()} {/* Main Content - Results or History */} {/* Results Panel */} Results ({searchStore.results().length}) 0} fallback={ {searchStore.query() ? "No results found" : "Enter a search term to find podcasts"} } > {/* History Sidebar */} History ); }