From 155ad9f305ddf099ddc79d079d59c962327b1122 Mon Sep 17 00:00:00 2001 From: Marin Atanasov <8436925+tyxla@users.noreply.github.com> Date: Fri, 31 Jan 2025 17:12:22 +0200 Subject: [PATCH] Stats: Memoize gated intervals selector --- client/my-sites/stats/hooks/use-intervals.tsx | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/client/my-sites/stats/hooks/use-intervals.tsx b/client/my-sites/stats/hooks/use-intervals.tsx index 78adfc4e1cd60..64262392afa8e 100644 --- a/client/my-sites/stats/hooks/use-intervals.tsx +++ b/client/my-sites/stats/hooks/use-intervals.tsx @@ -1,3 +1,4 @@ +import { createSelector } from '@automattic/state-utils'; import { translate } from 'i18n-calypso'; import { STATS_FEATURE_INTERVAL_DROPDOWN_DAY, @@ -43,8 +44,8 @@ const intervals = { }, }; -function useIntervals( siteId: number | null ): IntervalsType { - const gatedIntervals = useSelector( ( state ) => { +const getGatedIntervals = createSelector( + ( state, siteId ) => { return Object.keys( intervals ).reduce( ( acc, key ) => { const interval = intervals[ key ]; @@ -56,9 +57,16 @@ function useIntervals( siteId: number | null ): IntervalsType { }, }; }, {} ); - } ); + }, + Object.values( intervals ).map( + ( { statType } ) => + ( state: object, siteId ) => + shouldGateStats( state, siteId, statType ) + ) +); - return gatedIntervals; +function useIntervals( siteId: number | null ): IntervalsType { + return useSelector( ( state ) => getGatedIntervals( state, siteId ) ); } export default useIntervals;