Page MenuHomePhorge

D13416.1765034888.diff
No OneTemporary

Size
2 KB
Referenced Files
None
Subscribers
None

D13416.1765034888.diff

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
@@ -132,6 +132,34 @@
return { added, notAdded, removed, notRemoved };
}
+function useClearAllHolders(): () => Promise<void> {
+ 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: [],
+ };
+ const promise = processHoldersAction(input, authMetadata);
+ void dispatchActionPromise(
+ processHoldersActionTypes,
+ promise,
+ undefined,
+ input,
+ );
+ }, [dispatchActionPromise, getAuthMetadata, holdersToRemove]);
+}
+
function useProcessBlobHolders(): (
blobOperations: $ReadOnlyArray<BlobOperation>,
) => Promise<void> {
@@ -197,4 +225,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,
);
@@ -161,6 +164,12 @@
const { logOutType, skipIdentityLogOut } = options;
return React.useCallback(
async (keyserverIDs?: $ReadOnlyArray<string>) => {
+ const holdersPromise = (async () => {
+ try {
+ await removeAllHolders();
+ } catch {}
+ })();
+
const identityPromise = (async () => {
if (
skipIdentityLogOut ||
@@ -203,6 +212,7 @@
preRequestUserState,
keyserverIDs,
}),
+ holdersPromise,
identityPromise,
]);
return {
@@ -219,6 +229,7 @@
identityClient,
logOutType,
preRequestUserState,
+ removeAllHolders,
skipIdentityLogOut,
],
);

File Metadata

Mime Type
text/plain
Expires
Sat, Dec 6, 3:28 PM (22 h, 39 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
5838595
Default Alt Text
D13416.1765034888.diff (2 KB)

Event Timeline