Mobile App design
This commit is contained in:
@@ -0,0 +1,41 @@
|
||||
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 };
|
||||
}
|
||||
Reference in New Issue
Block a user