UNPKG

@redocly/theme

Version:

Shared UI components lib

51 lines (33 loc) 1.35 kB
import { useCallback, useState } from 'react'; import { isBrowser } from '@redocly/theme/core/utils'; const RECENT_SEARCHES_KEY = 'recentSearches'; const RECENT_SEARCHES_LIMIT = 5; function getRecentSearches() { if (!isBrowser()) return []; const recentSearchesStr = window.localStorage.getItem(RECENT_SEARCHES_KEY); if (!recentSearchesStr) return []; return JSON.parse(recentSearchesStr) as string[]; } function updateRecentSearches(value: string, isAdd: boolean) { if (!isBrowser()) return []; const recentSearches = getRecentSearches(); if (value === '') return recentSearches; const valueIndex = recentSearches.indexOf(value); if (valueIndex !== -1) recentSearches.splice(valueIndex, 1); if (isAdd) recentSearches.unshift(value); localStorage?.setItem( RECENT_SEARCHES_KEY, JSON.stringify(recentSearches.slice(0, RECENT_SEARCHES_LIMIT)), ); return recentSearches; } export const useRecentSearches = () => { const [items, setItems] = useState<string[]>(getRecentSearches()); const addSearchHistoryItem = useCallback((value: string) => { setItems(updateRecentSearches(value, true)); }, []); const removeSearchHistoryItem = useCallback((value: string) => { setItems(updateRecentSearches(value, false)); }, []); return { items, addSearchHistoryItem, removeSearchHistoryItem }; };