diff --git a/lib/components/farcaster-data-handler.react.js b/lib/components/farcaster-data-handler.react.js --- a/lib/components/farcaster-data-handler.react.js +++ b/lib/components/farcaster-data-handler.react.js @@ -19,6 +19,7 @@ useSetLocalFID, useSetLocalCurrentUserSupportsDCs, useCurrentUserSupportsDCs, + useFarcasterDCsLoaded, } from '../utils/farcaster-utils.js'; import { useDispatchActionPromise } from '../utils/redux-promise-utils.js'; import { useSelector, useDispatch } from '../utils/redux-utils.js'; @@ -241,8 +242,9 @@ const syncFarcasterConversations = useFarcasterConversationsSync(); const currentUserSupportsDCs = useCurrentUserSupportsDCs(); + const farcasterDCsLoaded = useFarcasterDCsLoaded(); const [syncType, setSyncType] = React.useState<'none' | 'partial' | 'full'>( - 'partial', + farcasterDCsLoaded ? 'partial' : 'full', ); const tunnelbroker = useTunnelbroker(); diff --git a/lib/shared/farcaster/farcaster-hooks.js b/lib/shared/farcaster/farcaster-hooks.js --- a/lib/shared/farcaster/farcaster-hooks.js +++ b/lib/shared/farcaster/farcaster-hooks.js @@ -16,6 +16,7 @@ import { convertFarcasterMessageToCommMessages, createFarcasterRawThreadInfo, + useSetFarcasterDCsLoaded, } from '../../utils/farcaster-utils.js'; import { useDispatch } from '../../utils/redux-utils.js'; import { useSendDMOperationUtils } from '../dm-ops/dm-op-utils.js'; @@ -79,6 +80,7 @@ ); const [inProgress, setInProgress] = React.useState(false); + const setFarcasterDCsLoaded = useSetFarcasterDCsLoaded(); React.useEffect(() => { if (!fullInbox || conversations.length === 0 || inProgress) { return; @@ -203,6 +205,7 @@ setConversations([]); setInProgress(false); + setFarcasterDCsLoaded(true); })(); }, [ conversations, @@ -214,6 +217,7 @@ messagesNumberLimit, sendFarcasterTextMessage, utils, + setFarcasterDCsLoaded, ]); return React.useCallback( diff --git a/lib/types/synced-metadata-types.js b/lib/types/synced-metadata-types.js --- a/lib/types/synced-metadata-types.js +++ b/lib/types/synced-metadata-types.js @@ -9,6 +9,7 @@ const syncedMetadataNames = Object.freeze({ CURRENT_USER_FID: 'current_user_fid', CURRENT_USER_SUPPORTS_DCS: 'current_user_supports_dcs', + FARCASTER_DCS_LOADED: 'farcaster_dcs_loaded', STORE_VERSION: 'store_version', ENABLED_APPS: 'enabled_apps', GLOBAL_THEME_INFO: 'global_theme_info', diff --git a/lib/utils/farcaster-utils.js b/lib/utils/farcaster-utils.js --- a/lib/utils/farcaster-utils.js +++ b/lib/utils/farcaster-utils.js @@ -87,6 +87,17 @@ return currentUserFIDDCs === 'true'; } +function useFarcasterDCsLoaded(): boolean { + const farcasterDCsLoaded = useSelector( + state => + state.syncedMetadataStore.syncedMetadata[ + syncedMetadataNames.FARCASTER_DCS_LOADED + ] ?? 'false', + ); + + return farcasterDCsLoaded === 'true'; +} + function useSetLocalFID(): (fid: ?string) => void { const dispatch = useDispatch(); const { invalidateCacheForUser } = useUserIdentityCache(); @@ -136,6 +147,22 @@ ); } +function useSetFarcasterDCsLoaded(): (loaded: boolean) => void { + const dispatch = useDispatch(); + return React.useCallback( + (loaded: boolean) => { + dispatch({ + type: setSyncedMetadataEntryActionType, + payload: { + name: syncedMetadataNames.FARCASTER_DCS_LOADED, + data: String(loaded), + }, + }); + }, + [dispatch], + ); +} + function useLinkFID(): (fid: string) => Promise { const identityClientContext = React.useContext(IdentityClientContext); invariant(identityClientContext, 'identityClientContext should be set'); @@ -160,7 +187,9 @@ function useClearFarcasterThreads(): () => void { const threads = useSelector(state => state.threadStore.threadInfos); const dispatch = useDispatch(); + const setFarcasterDCsLoaded = useSetFarcasterDCsLoaded(); return React.useCallback(() => { + setFarcasterDCsLoaded(false); const farcasterThreadIDs = Object.values(threads) .filter(thread => thread.farcaster) .map(thread => thread.id); @@ -178,7 +207,7 @@ updateInfos: updates, }, }); - }, [dispatch, threads]); + }, [dispatch, setFarcasterDCsLoaded, threads]); } function useUnlinkFID(): () => void { @@ -518,8 +547,10 @@ NO_DCS_SUPPORT_METADATA, useCurrentUserFID, useCurrentUserSupportsDCs, + useFarcasterDCsLoaded, useSetLocalFID, useSetLocalCurrentUserSupportsDCs, + useSetFarcasterDCsLoaded, useLinkFID, useUnlinkFID, useLinkFarcasterDCs,