mirror of
https://github.com/pacnpal/thrilltrack-explorer.git
synced 2025-12-23 17:11:12 -05:00
Fix critical bugs and improve application reliability
Resolve infinite loops, hook order violations, race conditions, and enhance validation stability across various hooks and edge functions. Replit-Commit-Author: Agent Replit-Commit-Session-Id: 39bb006b-d046-477f-a1f9-b7821836f3a1 Replit-Commit-Checkpoint-Type: full_checkpoint
This commit is contained in:
@@ -27,6 +27,13 @@ const DEFAULT_MIN_QUERY = 2;
|
||||
const DEFAULT_DEBOUNCE_MS = 300;
|
||||
|
||||
export function useSearch(options: UseSearchOptions = {}) {
|
||||
// State declarations MUST come first to maintain hook order
|
||||
const [query, setQuery] = useState('');
|
||||
const [results, setResults] = useState<SearchResult[]>([]);
|
||||
const [loading, setLoading] = useState(false);
|
||||
const [recentSearches, setRecentSearches] = useState<string[]>([]);
|
||||
const [debouncedQuery, setDebouncedQuery] = useState('');
|
||||
|
||||
// Stabilize options using JSON stringify to prevent infinite loops from array recreation
|
||||
const optionsKey = JSON.stringify({
|
||||
types: options.types || DEFAULT_TYPES,
|
||||
@@ -38,14 +45,6 @@ export function useSearch(options: UseSearchOptions = {}) {
|
||||
const stableOptions = useMemo(() => JSON.parse(optionsKey), [optionsKey]);
|
||||
const { types, limit, minQuery, debounceMs } = stableOptions;
|
||||
|
||||
const [query, setQuery] = useState('');
|
||||
const [results, setResults] = useState<SearchResult[]>([]);
|
||||
const [loading, setLoading] = useState(false);
|
||||
const [recentSearches, setRecentSearches] = useState<string[]>([]);
|
||||
|
||||
// Debounced query
|
||||
const [debouncedQuery, setDebouncedQuery] = useState('');
|
||||
|
||||
useEffect(() => {
|
||||
const timer = setTimeout(() => {
|
||||
setDebouncedQuery(query);
|
||||
|
||||
Reference in New Issue
Block a user