42 lines
1.2 KiB
TypeScript
42 lines
1.2 KiB
TypeScript
import { useState, useEffect, useCallback } from 'react';
|
|
import AsyncStorage from '@react-native-async-storage/async-storage';
|
|
|
|
const STORAGE_KEY = 'recent_medicine_searches';
|
|
const MAX_ITEMS = 5;
|
|
|
|
export function useRecentSearches() {
|
|
const [recentSearches, setRecentSearches] = useState<string[]>([]);
|
|
|
|
useEffect(() => {
|
|
AsyncStorage.getItem(STORAGE_KEY).then((data) => {
|
|
if (data) setRecentSearches(JSON.parse(data));
|
|
});
|
|
}, []);
|
|
|
|
const addSearch = useCallback(async (query: string) => {
|
|
const trimmed = query.trim();
|
|
if (!trimmed) return;
|
|
setRecentSearches((prev) => {
|
|
const filtered = prev.filter((s) => s !== trimmed);
|
|
const next = [trimmed, ...filtered].slice(0, MAX_ITEMS);
|
|
AsyncStorage.setItem(STORAGE_KEY, JSON.stringify(next));
|
|
return next;
|
|
});
|
|
}, []);
|
|
|
|
const removeSearch = useCallback(async (query: string) => {
|
|
setRecentSearches((prev) => {
|
|
const next = prev.filter((s) => s !== query);
|
|
AsyncStorage.setItem(STORAGE_KEY, JSON.stringify(next));
|
|
return next;
|
|
});
|
|
}, []);
|
|
|
|
const clearAll = useCallback(async () => {
|
|
setRecentSearches([]);
|
|
AsyncStorage.removeItem(STORAGE_KEY);
|
|
}, []);
|
|
|
|
return { recentSearches, addSearch, removeSearch, clearAll };
|
|
}
|