diff --git a/src/components/Announcement/helper.ts b/src/components/Announcement/helper.ts index 1dd590f0cb..bf3aa0f8cd 100644 --- a/src/components/Announcement/helper.ts +++ b/src/components/Announcement/helper.ts @@ -1,13 +1,11 @@ import { ChainId } from '@kyberswap/ks-sdk-core' import { useCallback } from 'react' import { useNavigate } from 'react-router-dom' -import AnnouncementApi from 'services/announcement' import { AnnouncementTemplatePopup, PopupContentAnnouncement, PopupItemType } from 'components/Announcement/type' import { TIMES_IN_SECS } from 'constants/index' import { useActiveWeb3React } from 'hooks' import { useChangeNetwork } from 'hooks/web3/useChangeNetwork' -import { useAppDispatch } from 'state/hooks' const LsKey = 'ack-announcements' export const getAnnouncementsAckMap = () => JSON.parse(localStorage[LsKey] || '{}') @@ -86,20 +84,3 @@ export const useNavigateToUrl = () => { [changeNetwork, currentChain, redirect], ) } - -export const useInvalidateTags = (reducerPath: string) => { - const dispatch = useAppDispatch() - return useCallback( - (tag: string | string[]) => { - dispatch({ - type: `${reducerPath}/invalidateTags`, - payload: Array.isArray(tag) ? tag : [tag], - }) - }, - [dispatch, reducerPath], - ) -} - -export const useInvalidateTagAnnouncement = () => { - return useInvalidateTags(AnnouncementApi.reducerPath) -} diff --git a/src/components/Announcement/index.tsx b/src/components/Announcement/index.tsx index 3abf63be97..dd56ff5b27 100644 --- a/src/components/Announcement/index.tsx +++ b/src/components/Announcement/index.tsx @@ -10,13 +10,14 @@ import styled, { css } from 'styled-components' import AnnouncementView, { Tab } from 'components/Announcement/AnnoucementView' import DetailAnnouncementPopup from 'components/Announcement/Popups/DetailAnnouncementPopup' -import { formatNumberOfUnread, useInvalidateTagAnnouncement } from 'components/Announcement/helper' +import { formatNumberOfUnread } from 'components/Announcement/helper' import { Announcement, PrivateAnnouncement } from 'components/Announcement/type' import NotificationIcon from 'components/Icons/NotificationIcon' import MenuFlyout from 'components/MenuFlyout' import Modal from 'components/Modal' import { RTK_QUERY_TAGS } from 'constants/index' import useInterval from 'hooks/useInterval' +import { useInvalidateTagAnnouncement } from 'hooks/useInvalidateTags' import useMixpanel, { MIXPANEL_TYPE } from 'hooks/useMixpanel' import { ApplicationModal } from 'state/application/actions' import { useDetailAnnouncement, useModalOpen, useToggleNotificationCenter } from 'state/application/hooks' diff --git a/src/components/ProtectedRoute.tsx b/src/components/ProtectedRoute.tsx index ff131bba05..326c38c5ed 100644 --- a/src/components/ProtectedRoute.tsx +++ b/src/components/ProtectedRoute.tsx @@ -3,9 +3,8 @@ import { Navigate } from 'react-router-dom' import LocalLoader from 'components/LocalLoader' import { RTK_QUERY_TAGS } from 'constants/index' -import kyberAIapi from 'pages/TrueSightV2/hooks/useKyberAIData' +import { useInvalidateTagKyberAi } from 'hooks/useInvalidateTags' import { useSessionInfo } from 'state/authen/hooks' -import { useAppDispatch } from 'state/hooks' import { useIsWhiteListKyberAI } from 'state/user/hooks' type Props = { @@ -33,20 +32,15 @@ export const ProtectedRouteKyberAI = ({ const { userInfo } = useSessionInfo() const loadedPage = useRef(false) const canAccessPage = isWhiteList || waitUtilAuthenEndOnly - const dispatch = useAppDispatch() + const invalidateTags = useInvalidateTagKyberAi() useEffect(() => { // change account sign in => refresh participant info try { refetch() - dispatch( - kyberAIapi.util.invalidateTags([ - RTK_QUERY_TAGS.GET_WATCHLIST_TOKENS_KYBER_AI, - RTK_QUERY_TAGS.GET_WATCHLIST_INFO_KYBER_AI, - ]), - ) + invalidateTags([RTK_QUERY_TAGS.GET_WATCHLIST_TOKENS_KYBER_AI, RTK_QUERY_TAGS.GET_WATCHLIST_INFO_KYBER_AI]) } catch (error) {} - }, [userInfo?.identityId, refetch, dispatch]) + }, [userInfo?.identityId, refetch, invalidateTags]) if (loading && !loadedPage.current) return if (!canAccessPage) return diff --git a/src/constants/index.ts b/src/constants/index.ts index 23d11e15db..74b85ba4cc 100644 --- a/src/constants/index.ts +++ b/src/constants/index.ts @@ -306,6 +306,9 @@ export const RTK_QUERY_TAGS = { GET_WATCHLIST_INFO_KYBER_AI: 'GET_WATCHLIST_INFO_KYBER_AI', GET_TOKEN_OVERVIEW_KYBER_AI: 'GET_TOKEN_OVERVIEW_KYBER_AI', GET_TOKEN_LIST_KYBER_AI: 'GET_TOKEN_LIST_KYBER_AI', + + // campaign + GET_LEADER_BOARD_CAMPAIGN: 'GET_TOKEN_LEADERBOARD_CAMPAIGN', } export const TRANSACTION_STATE_DEFAULT: TransactionFlowState = { diff --git a/src/hooks/useInvalidateTags.ts b/src/hooks/useInvalidateTags.ts new file mode 100644 index 0000000000..4b9d99bdf8 --- /dev/null +++ b/src/hooks/useInvalidateTags.ts @@ -0,0 +1,28 @@ +import { useCallback } from 'react' +import announcementApi from 'services/announcement' +import campaignApi from 'services/campaign' + +import kyberAIApi from 'pages/TrueSightV2/hooks/useKyberAIData' +import { useAppDispatch } from 'state/hooks' + +const useInvalidateTags = (api: any) => { + const dispatch = useAppDispatch() + return useCallback( + (tag: string | string[]) => { + dispatch(api.util.invalidateTags(Array.isArray(tag) ? tag : [tag])) + }, + [dispatch, api], + ) +} + +export const useInvalidateTagAnnouncement = () => { + return useInvalidateTags(announcementApi) +} + +export const useInvalidateTagCampaign = () => { + return useInvalidateTags(campaignApi) +} + +export const useInvalidateTagKyberAi = () => { + return useInvalidateTags(kyberAIApi) +} diff --git a/src/pages/Campaign/CampaignContent.tsx b/src/pages/Campaign/CampaignContent.tsx index 01fc4db294..74484ed396 100644 --- a/src/pages/Campaign/CampaignContent.tsx +++ b/src/pages/Campaign/CampaignContent.tsx @@ -17,8 +17,10 @@ import ProgressBar from 'components/ProgressBar' import ShareModal from 'components/ShareModal' import { MouseoverTooltip, TextDashed } from 'components/Tooltip' import YourCampaignTransactionsModal from 'components/YourCampaignTransactionsModal' +import { RTK_QUERY_TAGS } from 'constants/index' import { useActiveWeb3React, useWeb3React } from 'hooks' import useInterval from 'hooks/useInterval' +import { useInvalidateTagCampaign } from 'hooks/useInvalidateTags' import useMixpanel, { MIXPANEL_TYPE } from 'hooks/useMixpanel' import useTheme from 'hooks/useTheme' import CampaignActions from 'pages/Campaign/CampaignActions' @@ -370,18 +372,12 @@ export default function Campaign({ refreshListCampaign, ...props }: CampaignProp true, ) + const invalidateTags = useInvalidateTagCampaign() useEffect(() => { if (campaignsRefreshIn === 0 && selectedCampaign) { - // todo - // mutate([ - // selectedCampaign, - // SWR_KEYS.getLeaderboard(selectedCampaign.id), - // selectedCampaignLeaderboardPageNumber, - // selectedCampaignLeaderboardLookupAddress, - // account, - // ]) + invalidateTags(RTK_QUERY_TAGS.GET_LEADER_BOARD_CAMPAIGN) } - }, [campaignsRefreshIn, selectedCampaign]) + }, [campaignsRefreshIn, selectedCampaign, invalidateTags]) if (campaigns.length === 0 && loadingCampaignData) { return diff --git a/src/pages/NotificationCenter/PrivateAnnouncement.tsx b/src/pages/NotificationCenter/PrivateAnnouncement.tsx index 92e0f9c352..3fab236c2e 100644 --- a/src/pages/NotificationCenter/PrivateAnnouncement.tsx +++ b/src/pages/NotificationCenter/PrivateAnnouncement.tsx @@ -11,10 +11,10 @@ import styled from 'styled-components' import { PRIVATE_ANN_TITLE } from 'components/Announcement/PrivateAnnoucement' import InboxItemNotificationCenter from 'components/Announcement/PrivateAnnoucement/NotificationCenter' -import { useInvalidateTagAnnouncement } from 'components/Announcement/helper' import { PrivateAnnouncement, PrivateAnnouncementType } from 'components/Announcement/type' import { getAnnouncementsTemplateIds } from 'constants/env' import { useActiveWeb3React } from 'hooks' +import { useInvalidateTagAnnouncement } from 'hooks/useInvalidateTags' import DeleteAllAlertsButton from 'pages/NotificationCenter/DeleteAllAlertsButton' import NoData from 'pages/NotificationCenter/NoData' import CommonPagination from 'pages/NotificationCenter/PriceAlerts/CommonPagination' diff --git a/src/services/campaign.ts b/src/services/campaign.ts index 5329927895..673f60dbeb 100644 --- a/src/services/campaign.ts +++ b/src/services/campaign.ts @@ -5,7 +5,7 @@ import { parseUnits } from 'ethers/lib/utils' import JSBI from 'jsbi' import { CAMPAIGN_BASE_URL } from 'constants/env' -import { RESERVE_USD_DECIMALS } from 'constants/index' +import { RESERVE_USD_DECIMALS, RTK_QUERY_TAGS } from 'constants/index' import { CampaignData, CampaignLeaderboard, @@ -201,6 +201,7 @@ const formatTxs = (data: any[]) => { const campaignApi = createApi({ reducerPath: 'campaignApi', baseQuery: fetchBaseQuery({ baseUrl: `${CAMPAIGN_BASE_URL}/api/v1/campaigns` }), + tagTypes: [RTK_QUERY_TAGS.GET_LEADER_BOARD_CAMPAIGN], endpoints: builder => ({ getCampaigns: builder.query({ query: params => ({ @@ -218,6 +219,7 @@ const campaignApi = createApi({ url: `/${campaignId}/leaderboard`, }), transformResponse: (data: any) => formatLeaderboardData(data?.data), + providesTags: [RTK_QUERY_TAGS.GET_LEADER_BOARD_CAMPAIGN], }), getLuckyWinners: builder.query< any,