@@ -23,15 +23,15 @@ import { Media } from 'src/ui/ui-kit/Media';
2323import VerifiedIcon from 'jsx:src/ui/assets/verified.svg' ;
2424import { HStack } from 'src/ui/ui-kit/HStack/HStack' ;
2525import { walletPort } from 'src/ui/shared/channels' ;
26- import { usePreferences } from 'src/ui/features/preferences' ;
2726import { UnstyledButton } from 'src/ui/ui-kit/UnstyledButton' ;
2827import CloseIcon from 'jsx:src/ui/assets/close.svg' ;
2928import { useAssetFullInfo } from 'src/modules/zerion-api/hooks/useAssetFullInfo' ;
3029import { useHttpClientSource } from 'src/modules/zerion-api/hooks/useHttpClientSource' ;
3130import { invariant } from 'src/shared/invariant' ;
3231import { Button } from 'src/ui/ui-kit/Button' ;
3332import { useEvent } from 'src/ui/shared/useEvent' ;
34- import { updateRecentSearch } from './updateRecentSearch' ;
33+ import { useMutation , useQuery } from '@tanstack/react-query' ;
34+ import { queryClient } from 'src/ui/shared/requests/queryClient' ;
3535import { useSearchQuery } from './useSearchQuery' ;
3636
3737const FungibleView = React . forwardRef <
@@ -125,7 +125,6 @@ const RecentItem = React.forwardRef<
125125 }
126126> ( ( { fungibleId, index, highlighted, onClick } , ref ) => {
127127 const { currency } = useCurrency ( ) ;
128- const { preferences, setPreferences } = usePreferences ( ) ;
129128
130129 const { data, isLoading } = useAssetFullInfo (
131130 { fungibleId, currency } ,
@@ -134,15 +133,12 @@ const RecentItem = React.forwardRef<
134133
135134 const fungible = data ?. data . fungible ;
136135
137- const handleRemoveItemClick = useCallback ( ( ) => {
138- if ( preferences ) {
139- setPreferences ( {
140- recentSearch : preferences . recentSearch . filter (
141- ( id ) => id !== fungibleId
142- ) ,
143- } ) ;
144- }
145- } , [ fungibleId , preferences , setPreferences ] ) ;
136+ const removeRecentSearchMutation = useMutation ( {
137+ mutationFn : ( ) => walletPort . request ( 'removeRecentSearch' , { fungibleId } ) ,
138+ onSuccess : ( ) => {
139+ queryClient . refetchQueries ( [ 'wallet/getSearchHistory' ] ) ;
140+ } ,
141+ } ) ;
146142
147143 if ( ! isLoading && ! fungible ) {
148144 return null ;
@@ -173,7 +169,8 @@ const RecentItem = React.forwardRef<
173169 style = { { display : 'flex' } }
174170 size = { 28 }
175171 aria-label = "Remove item from recent"
176- onClick = { handleRemoveItemClick }
172+ onClick = { ( ) => removeRecentSearchMutation . mutate ( ) }
173+ disabled = { removeRecentSearchMutation . isLoading }
177174 >
178175 < CloseIcon
179176 style = { { width : 20 , height : 20 , color : 'var(--neutral-500)' } }
@@ -202,21 +199,26 @@ export function Search() {
202199 500
203200 ) ;
204201 const normalizedQuery = urlQuery . trim ( ) ;
202+ const { data : searchHistory } = useQuery ( {
203+ queryKey : [ 'wallet/getSearchHistory' ] ,
204+ queryFn : ( ) => walletPort . request ( 'getSearchHistory' ) ,
205+ suspense : false ,
206+ keepPreviousData : true ,
207+ } ) ;
205208
206- const { preferences, setPreferences } = usePreferences ( ) ;
207209 const { data : searchResults , isLoading } = useSearchQuery ( {
208210 query : normalizedQuery ,
209211 currency,
210212 } ) ;
211213
212214 const recentItems = useMemo < SearchPageItem [ ] > ( ( ) => {
213215 return (
214- preferences ?. recentSearch . map ( ( id ) => ( {
216+ searchHistory ? .map ( ( id ) => ( {
215217 kind : 'recent' ,
216218 fungibleId : id ,
217219 } ) ) || [ ]
218220 ) ;
219- } , [ preferences ] ) ;
221+ } , [ searchHistory ] ) ;
220222
221223 const searchItems = useMemo < SearchPageItem [ ] > ( ( ) => {
222224 return (
@@ -238,21 +240,14 @@ export function Search() {
238240 */
239241 const handleFungibleClick = useCallback (
240242 ( fungibleId : string ) => {
241- if ( preferences ) {
242- setPreferences ( {
243- recentSearch : updateRecentSearch (
244- fungibleId ,
245- preferences . recentSearch
246- ) ,
247- } ) ;
248- }
243+ walletPort . request ( 'addRecentSearch' , { fungibleId } ) ;
249244 walletPort . request ( 'assetClicked' , {
250245 assetId : fungibleId ,
251246 pathname,
252247 section : 'Search' ,
253248 } ) ;
254249 } ,
255- [ pathname , preferences , setPreferences ]
250+ [ pathname ]
256251 ) ;
257252
258253 const { getItemProps, getInputProps, getMenuProps, highlightedIndex } =
@@ -331,9 +326,12 @@ export function Search() {
331326 } ) ;
332327 } , [ items , getItemProps , highlightedIndex , handleFungibleClick ] ) ;
333328
334- const handleClearRecentClick = useCallback ( ( ) => {
335- setPreferences ( { recentSearch : [ ] } ) ;
336- } , [ setPreferences ] ) ;
329+ const clearSearchHistoryMutation = useMutation ( {
330+ mutationFn : ( ) => walletPort . request ( 'clearSearchHistory' ) ,
331+ onSuccess : ( ) => {
332+ queryClient . refetchQueries ( [ 'wallet/getSearchHistory' ] ) ;
333+ } ,
334+ } ) ;
337335
338336 return (
339337 < >
@@ -362,7 +360,7 @@ export function Search() {
362360 < UIText kind = "body/accent" style = { { paddingInline : 8 } } >
363361 Results
364362 </ UIText >
365- ) : preferences ?. recentSearch . length ? (
363+ ) : searchHistory ? .length ? (
366364 < HStack gap = { 4 } justifyContent = "space-between" alignItems = "center" >
367365 < UIText kind = "body/accent" style = { { paddingInline : 8 } } >
368366 Recent
@@ -371,7 +369,8 @@ export function Search() {
371369 < UnstyledButton
372370 className = "hover:underline"
373371 aria-label = "Clear recent search"
374- onClick = { handleClearRecentClick }
372+ onClick = { ( ) => clearSearchHistoryMutation . mutate ( ) }
373+ disabled = { clearSearchHistoryMutation . isLoading }
375374 >
376375 Clear
377376 </ UnstyledButton >
0 commit comments