From 0f51ae4b827e01c6c7bd98643df10b9ea08e3b1a Mon Sep 17 00:00:00 2001 From: John Knox Date: Thu, 26 Nov 2020 04:33:43 -0800 Subject: [PATCH] Fix ITSR repeated requests bug Summary: I converted the rating button to a functional component, and mistakenly moved the effect in the constructor into the render function. This puts it into an effect with no dependencies so it should only happen once, instead of every render. Reviewed By: mweststrate Differential Revision: D25185514 fbshipit-source-id: 48203b01bbd85f3b9ed4dbbb416768c0d5524f70 --- desktop/app/src/chrome/RatingButton.tsx | 27 ++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/desktop/app/src/chrome/RatingButton.tsx b/desktop/app/src/chrome/RatingButton.tsx index 2249d5ce9..66d893e65 100644 --- a/desktop/app/src/chrome/RatingButton.tsx +++ b/desktop/app/src/chrome/RatingButton.tsx @@ -7,7 +7,14 @@ * @format */ -import React, {Component, ReactElement, RefObject, useState} from 'react'; +import React, { + Component, + ReactElement, + RefObject, + useCallback, + useEffect, + useState, +} from 'react'; import { Glyph, FlexColumn, @@ -373,19 +380,21 @@ export function SandyRatingButton() { const [hasTriggered, setHasTriggered] = useState(false); const sessionId = useStore((store) => store.application.sessionId); - const triggerPopover = () => { + const triggerPopover = useCallback(() => { if (!hasTriggered) { setIsShown(true); setHasTriggered(true); } - }; + }, [hasTriggered]); - if (GK.get('flipper_enable_star_ratiings')) { - UserFeedback.getPrompt().then((prompt) => { - setPromptData(prompt); - setTimeout(triggerPopover, 30000); - }); - } + useEffect(() => { + if (GK.get('flipper_enable_star_ratiings') && !hasTriggered) { + UserFeedback.getPrompt().then((prompt) => { + setPromptData(prompt); + setTimeout(triggerPopover, 30000); + }); + } + }, [triggerPopover, hasTriggered]); const onClick = () => { const willBeShown = !isShown;