From 281d0eb7dea4ee6c16daab37cf59e4a04fb5ea9a Mon Sep 17 00:00:00 2001 From: Reed <3893871+dharit-tan@users.noreply.github.com> Date: Wed, 17 Aug 2022 13:12:40 -0400 Subject: [PATCH 1/5] Fix become first supporter bug --- .../tip-artist-screen/SendTipScreen.tsx | 15 +++++++- .../web/src/common/store/tipping/selectors.ts | 2 +- .../src/hooks/useGetFirstOrTopSupporter.ts | 38 +++++++++++++++++-- 3 files changed, 49 insertions(+), 6 deletions(-) diff --git a/packages/mobile/src/screens/tip-artist-screen/SendTipScreen.tsx b/packages/mobile/src/screens/tip-artist-screen/SendTipScreen.tsx index 9ea8d7f8e4..9fa83d702c 100644 --- a/packages/mobile/src/screens/tip-artist-screen/SendTipScreen.tsx +++ b/packages/mobile/src/screens/tip-artist-screen/SendTipScreen.tsx @@ -10,7 +10,8 @@ import { } from 'audius-client/src/common/store/tipping/selectors' import { sendTip, - fetchUserSupporter + fetchUserSupporter, + refreshSupport } from 'audius-client/src/common/store/tipping/slice' import { getAccountBalance } from 'audius-client/src/common/store/wallet/selectors' import { getBalance } from 'audius-client/src/common/store/wallet/slice' @@ -66,6 +67,7 @@ export const SendTipScreen = () => { const { amountToTipToBecomeTopSupporter, shouldFetchUserSupporter, + shouldFetchSupportersForReceiver, isFirstSupporter, tipAmountWei, hasInsufficientBalance @@ -90,6 +92,17 @@ export const SendTipScreen = () => { } }, [shouldFetchUserSupporter, account, receiver, dispatchWeb]) + useEffect(() => { + if (shouldFetchSupportersForReceiver && account && receiver) { + dispatchWeb( + refreshSupport({ + senderUserId: account.user_id, + receiverUserId: receiver.user_id + }) + ) + } + }, [shouldFetchSupportersForReceiver, account, receiver, dispatchWeb]) + const handleBack = useCallback(() => { navigation.goBack() }, [navigation]) diff --git a/packages/web/src/common/store/tipping/selectors.ts b/packages/web/src/common/store/tipping/selectors.ts index 23803fa806..8ce49452aa 100644 --- a/packages/web/src/common/store/tipping/selectors.ts +++ b/packages/web/src/common/store/tipping/selectors.ts @@ -53,7 +53,7 @@ const mergeMaps = < // in the overrides but not in the default, // OR // if the existing value in the default map has a smaller amount - // than that in the override, the update default value with the + // than that in the override, then update default value with the // override value const supportIds = Object.keys(mapOverrides[userId]) as unknown as ID[] for (const supportId of supportIds) { diff --git a/packages/web/src/hooks/useGetFirstOrTopSupporter.ts b/packages/web/src/hooks/useGetFirstOrTopSupporter.ts index 5ef4284434..8b235c145b 100644 --- a/packages/web/src/hooks/useGetFirstOrTopSupporter.ts +++ b/packages/web/src/hooks/useGetFirstOrTopSupporter.ts @@ -12,7 +12,12 @@ import { import { SupportersMap, SupportingMap } from 'common/store/tipping/types' import { parseWeiNumber } from 'common/utils/formatUtil' -import { parseAudioInputToWei, stringWeiToBN } from 'common/utils/wallet' +import { + parseAudioInputToWei, + stringWeiToBN +} from 'common/utils/wallet' +// import { useDispatch } from 'react-redux' +// import { refreshSupport } from 'common/store/tipping/slice' const zeroWei = stringWeiToBN('0' as StringWei) @@ -38,12 +43,17 @@ export const useGetFirstOrTopSupporter = ({ supportingMap, supportersMap }: UseGetSupportProps) => { + // const dispatch = useDispatch() const [amountToTipToBecomeTopSupporter, setAmountToTipToBecomeTopSupporter] = useState>(null) const [supportingAmount, setSupportingAmount] = useState>(null) const [shouldFetchUserSupporter, setShouldFetchUserSupporter] = useState(false) + const [ + shouldFetchSupportersForReceiver, + setShouldFetchSupportersForReceiver + ] = useState(false) const [topSupporter, setTopSupporter] = useState>(null) const [isFirstSupporter, setIsFirstSupporter] = useState(false) const tipAmountWei = parseToBNWei(tipAmount) @@ -73,9 +83,27 @@ export const useGetFirstOrTopSupporter = ({ * not the same as the current user */ useEffect(() => { - if (!receiver) return + if (!account || !receiver) return + + const supportersForReceiver = supportersMap[receiver.user_id] + + // It's possible that the receiver's supporters have not yet + // been fetched, in this case we fetch that data. + // E.g. for a user whose top supporter changed, clicking on + // the dethroned notification will go to the send tip modal/drawer + // but that user's supporters may not have been fetched yet. + if (!supportersForReceiver) { + setShouldFetchSupportersForReceiver(true) + // dispatch(fetchSupportingForUser({ userId: account.user_id })) + // dispatch( + // refreshSupport({ + // senderUserId: account.user_id, + // receiverUserId: receiver.user_id + // }) + // ) + return + } - const supportersForReceiver = supportersMap[receiver.user_id] ?? {} const rankedSupportersList = ( Object.keys(supportersForReceiver) as unknown as ID[] ) @@ -93,7 +121,8 @@ export const useGetFirstOrTopSupporter = ({ } else { setIsFirstSupporter(true) } - }, [receiver, supportersMap]) + }, [account, receiver, supportersMap]) + // }, [dispatch, account, receiver, supportersMap]) /** * Check whether or not to display prompt to become top or first supporter @@ -131,6 +160,7 @@ export const useGetFirstOrTopSupporter = ({ return { amountToTipToBecomeTopSupporter, shouldFetchUserSupporter, + shouldFetchSupportersForReceiver, isFirstSupporter, tipAmountWei, hasInsufficientBalance From df1b7085a7289bd4623bc004124121dfdbd9f3e4 Mon Sep 17 00:00:00 2001 From: Saliou Diallo Date: Wed, 17 Aug 2022 19:08:01 -0400 Subject: [PATCH 2/5] Remove comments --- packages/web/src/hooks/useGetFirstOrTopSupporter.ts | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/packages/web/src/hooks/useGetFirstOrTopSupporter.ts b/packages/web/src/hooks/useGetFirstOrTopSupporter.ts index 8b235c145b..1945e4d11d 100644 --- a/packages/web/src/hooks/useGetFirstOrTopSupporter.ts +++ b/packages/web/src/hooks/useGetFirstOrTopSupporter.ts @@ -16,8 +16,6 @@ import { parseAudioInputToWei, stringWeiToBN } from 'common/utils/wallet' -// import { useDispatch } from 'react-redux' -// import { refreshSupport } from 'common/store/tipping/slice' const zeroWei = stringWeiToBN('0' as StringWei) @@ -43,7 +41,6 @@ export const useGetFirstOrTopSupporter = ({ supportingMap, supportersMap }: UseGetSupportProps) => { - // const dispatch = useDispatch() const [amountToTipToBecomeTopSupporter, setAmountToTipToBecomeTopSupporter] = useState>(null) const [supportingAmount, setSupportingAmount] = @@ -94,13 +91,6 @@ export const useGetFirstOrTopSupporter = ({ // but that user's supporters may not have been fetched yet. if (!supportersForReceiver) { setShouldFetchSupportersForReceiver(true) - // dispatch(fetchSupportingForUser({ userId: account.user_id })) - // dispatch( - // refreshSupport({ - // senderUserId: account.user_id, - // receiverUserId: receiver.user_id - // }) - // ) return } @@ -122,7 +112,6 @@ export const useGetFirstOrTopSupporter = ({ setIsFirstSupporter(true) } }, [account, receiver, supportersMap]) - // }, [dispatch, account, receiver, supportersMap]) /** * Check whether or not to display prompt to become top or first supporter From 4cae032e05800c107f2777cd03c7b9968a876a39 Mon Sep 17 00:00:00 2001 From: Saliou Diallo Date: Wed, 17 Aug 2022 19:11:22 -0400 Subject: [PATCH 3/5] Fix lint from root --- packages/web/src/hooks/useGetFirstOrTopSupporter.ts | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/packages/web/src/hooks/useGetFirstOrTopSupporter.ts b/packages/web/src/hooks/useGetFirstOrTopSupporter.ts index 1945e4d11d..761ff95ecf 100644 --- a/packages/web/src/hooks/useGetFirstOrTopSupporter.ts +++ b/packages/web/src/hooks/useGetFirstOrTopSupporter.ts @@ -12,10 +12,7 @@ import { import { SupportersMap, SupportingMap } from 'common/store/tipping/types' import { parseWeiNumber } from 'common/utils/formatUtil' -import { - parseAudioInputToWei, - stringWeiToBN -} from 'common/utils/wallet' +import { parseAudioInputToWei, stringWeiToBN } from 'common/utils/wallet' const zeroWei = stringWeiToBN('0' as StringWei) From 3189a2e76fdd255742708b48be944e31b6f99173 Mon Sep 17 00:00:00 2001 From: Saliou Diallo Date: Wed, 17 Aug 2022 19:23:08 -0400 Subject: [PATCH 4/5] Remove unnecessary account var --- packages/web/src/hooks/useGetFirstOrTopSupporter.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/web/src/hooks/useGetFirstOrTopSupporter.ts b/packages/web/src/hooks/useGetFirstOrTopSupporter.ts index 761ff95ecf..c19ab3ad23 100644 --- a/packages/web/src/hooks/useGetFirstOrTopSupporter.ts +++ b/packages/web/src/hooks/useGetFirstOrTopSupporter.ts @@ -77,7 +77,7 @@ export const useGetFirstOrTopSupporter = ({ * not the same as the current user */ useEffect(() => { - if (!account || !receiver) return + if (!receiver) return const supportersForReceiver = supportersMap[receiver.user_id] @@ -108,7 +108,7 @@ export const useGetFirstOrTopSupporter = ({ } else { setIsFirstSupporter(true) } - }, [account, receiver, supportersMap]) + }, [receiver, supportersMap]) /** * Check whether or not to display prompt to become top or first supporter From 469941541701a49dc67203dfd5e987b7132840f8 Mon Sep 17 00:00:00 2001 From: Saliou Diallo Date: Wed, 17 Aug 2022 19:31:19 -0400 Subject: [PATCH 5/5] Update comment --- packages/web/src/hooks/useGetFirstOrTopSupporter.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/web/src/hooks/useGetFirstOrTopSupporter.ts b/packages/web/src/hooks/useGetFirstOrTopSupporter.ts index c19ab3ad23..9d1a98302b 100644 --- a/packages/web/src/hooks/useGetFirstOrTopSupporter.ts +++ b/packages/web/src/hooks/useGetFirstOrTopSupporter.ts @@ -82,7 +82,7 @@ export const useGetFirstOrTopSupporter = ({ const supportersForReceiver = supportersMap[receiver.user_id] // It's possible that the receiver's supporters have not yet - // been fetched, in this case we fetch that data. + // been fetched, in this case we prompt to fetch that data. // E.g. for a user whose top supporter changed, clicking on // the dethroned notification will go to the send tip modal/drawer // but that user's supporters may not have been fetched yet.