From 5d456899ea444301870e1d3c721d139c9251c531 Mon Sep 17 00:00:00 2001 From: Akshay Nair Date: Fri, 27 Sep 2024 23:58:15 +0530 Subject: Fix too many updates issue with useFavorites + ui changes --- src/hooks/useFavorites.ts | 35 +++++++++++++++-------------------- 1 file changed, 15 insertions(+), 20 deletions(-) (limited to 'src/hooks/useFavorites.ts') diff --git a/src/hooks/useFavorites.ts b/src/hooks/useFavorites.ts index 54d77fd..619817c 100644 --- a/src/hooks/useFavorites.ts +++ b/src/hooks/useFavorites.ts @@ -1,11 +1,12 @@ -import {useCallback, useEffect, useState} from 'react'; +import {useEffect, useState} from 'react'; import {useAsyncStorage} from '@react-native-async-storage/async-storage'; +import {useStableCallback} from './useStableCallback'; export const useFavorites = () => { const favoritesStorage = useAsyncStorage('favorites'); const [favoriteAppNames, setFavoriteAppNames] = useState([]); - const getFavoriteAppNames = useCallback(async (): Promise => { + const getFavoriteAppNames = useStableCallback(async (): Promise => { try { const result = await favoritesStorage.getItem(); const apps = result ? JSON.parse(result) : []; @@ -15,28 +16,22 @@ export const useFavorites = () => { console.error(err); return []; } - }, [favoritesStorage]); + }); - const refreshFavorites = useCallback(async () => { + const refreshFavorites = useStableCallback(async () => { getFavoriteAppNames().then(setFavoriteAppNames); - }, [getFavoriteAppNames]); + }); - const setFavorites = useCallback( - async (names: string[]) => { - const newNames = [...new Set(names)]; - setFavoriteAppNames(newNames); - await favoritesStorage.setItem(JSON.stringify(newNames)); - }, - [favoritesStorage], - ); + const setFavorites = useStableCallback(async (names: string[]) => { + const newNames = [...new Set(names)]; + setFavoriteAppNames(newNames); + await favoritesStorage.setItem(JSON.stringify(newNames)); + }); - const addToFavorites = useCallback( - async (packageName: string) => { - const names = await getFavoriteAppNames(); - setFavorites([...names, packageName]); - }, - [getFavoriteAppNames, setFavorites], - ); + const addToFavorites = useStableCallback(async (packageName: string) => { + const names = await getFavoriteAppNames(); + setFavorites([...names, packageName]); + }); useEffect(() => { refreshFavorites(); -- cgit v1.3.1