diff --git a/lib/actions/holder-actions.js b/lib/actions/holder-actions.js --- a/lib/actions/holder-actions.js +++ b/lib/actions/holder-actions.js @@ -122,6 +122,35 @@ return { added, notAdded, removed, notRemoved }; } +function useClearAllHolders(): () => Promise { + const dispatchActionPromise = useDispatchActionPromise(); + const identityContext = React.useContext(IdentityClientContext); + const getAuthMetadata = identityContext?.getAuthMetadata; + + const holdersToRemove = useSelector(state => + Object.entries(state.holderStore.storedHolders) + .filter(([, holderInfo]) => holderInfo.status !== 'PENDING_REMOVAL') + .map(([blobHash, { holder }]) => ({ blobHash, holder })), + ); + + return React.useCallback(async () => { + invariant(getAuthMetadata, 'Identity context not set'); + const authMetadata = await getAuthMetadata(); + const input = { + holdersToRemove, + holdersToAdd: [], + }; + void processHoldersAction(input, authMetadata); + const promise = processHoldersAction(input, authMetadata); + void dispatchActionPromise( + processHoldersActionTypes, + promise, + undefined, + input, + ); + }, [dispatchActionPromise, getAuthMetadata, holdersToRemove]); +} + function useProcessBlobHolders(): ( blobOperations: $ReadOnlyArray, ) => Promise { @@ -184,4 +213,4 @@ ); } -export { useProcessBlobHolders }; +export { useClearAllHolders, useProcessBlobHolders }; diff --git a/lib/actions/user-actions.js b/lib/actions/user-actions.js --- a/lib/actions/user-actions.js +++ b/lib/actions/user-actions.js @@ -3,6 +3,7 @@ import invariant from 'invariant'; import * as React from 'react'; +import { useClearAllHolders } from './holder-actions.js'; import { useUserIdentityCache } from '../components/user-identity-cache.react.js'; import { useBroadcastDeviceListUpdates, @@ -154,6 +155,8 @@ const preRequestUserState = usePreRequestUserState(); const callKeyserverLogOut = useKeyserverCall(keyserverLogOut); + const removeAllHolders = useClearAllHolders(); + const commServicesAccessToken = useSelector( state => state.commServicesAccessToken, ); @@ -204,6 +207,7 @@ keyserverIDs, }), identityPromise, + removeAllHolders(), ]); return { ...result, @@ -219,6 +223,7 @@ identityClient, logOutType, preRequestUserState, + removeAllHolders, skipIdentityLogOut, ], );