diff --git a/web/grpc/identity-service-client-wrapper.js b/web/grpc/identity-service-client-wrapper.js --- a/web/grpc/identity-service-client-wrapper.js +++ b/web/grpc/identity-service-client-wrapper.js @@ -74,11 +74,15 @@ ); } - async deleteUser( + deleteUser: ( userID: string, deviceID: string, accessToken: string, - ): Promise { + ) => Promise = async ( + userID: string, + deviceID: string, + accessToken: string, + ): Promise => { if (!this.authClient) { const authLayer: IdentityServiceAuthLayer = { userID, @@ -93,7 +97,7 @@ } else { throw new Error('Identity service client is not initialized'); } - } + }; } export { IdentityServiceClientWrapper }; diff --git a/web/settings/account-delete-modal.react.js b/web/settings/account-delete-modal.react.js --- a/web/settings/account-delete-modal.react.js +++ b/web/settings/account-delete-modal.react.js @@ -5,15 +5,19 @@ import { useDeleteKeyserverAccount, deleteKeyserverAccountActionTypes, + useDeleteIdentityAccount, + deleteIdentityAccountActionTypes, } from 'lib/actions/user-actions.js'; import { useModalContext } from 'lib/components/modal-provider.react.js'; import SWMansionIcon from 'lib/components/SWMansionIcon.react.js'; import { preRequestUserStateSelector } from 'lib/selectors/account-selectors.js'; import { createLoadingStatusSelector } from 'lib/selectors/loading-selectors.js'; import { useDispatchActionPromise } from 'lib/utils/action-utils.js'; +import { usingCommServicesAccessToken } from 'lib/utils/services-utils.js'; import css from './account-delete-modal.css'; import Button, { buttonThemes } from '../components/button.react.js'; +import { IdentityServiceClientWrapper } from '../grpc/identity-service-client-wrapper.js'; import Modal from '../modals/modal.react.js'; import { useSelector } from '../redux/redux-utils.js'; @@ -27,7 +31,15 @@ const inputDisabled = useSelector( state => deleteAccountLoadingStatusSelector(state) === 'loading', ); - const callDeleteAccount = useDeleteKeyserverAccount(); + const deviceID = useSelector( + state => state.cryptoStore?.primaryIdentityKeys.ed25519, + ); + const identityServiceClientWrapper = new IdentityServiceClientWrapper(); + const callDeleteKeyserverAccount = useDeleteKeyserverAccount(); + const callDeleteIdentityAccount = useDeleteIdentityAccount( + identityServiceClientWrapper, + deviceID, + ); const dispatchActionPromise = useDispatchActionPromise(); const { popModal } = useModalContext(); @@ -39,27 +51,45 @@ errorMsg =
{errorMessage}
; } - const deleteAction = React.useCallback(async () => { + const deleteKeyserverAction = React.useCallback(async () => { + try { + setErrorMessage(''); + const response = await callDeleteKeyserverAccount(preRequestUserState); + popModal(); + return response; + } catch (e) { + setErrorMessage('unknown error'); + throw e; + } + }, [callDeleteKeyserverAccount, preRequestUserState, popModal]); + + const deleteIdentityAction = React.useCallback(async () => { try { setErrorMessage(''); - const response = await callDeleteAccount(preRequestUserState); + const response = await callDeleteIdentityAccount(); popModal(); return response; } catch (e) { setErrorMessage('unknown error'); throw e; } - }, [callDeleteAccount, preRequestUserState, popModal]); + }, [callDeleteIdentityAccount, popModal]); const onDelete = React.useCallback( (event: SyntheticEvent) => { event.preventDefault(); void dispatchActionPromise( deleteKeyserverAccountActionTypes, - deleteAction(), + deleteKeyserverAction(), ); + if (usingCommServicesAccessToken) { + void dispatchActionPromise( + deleteIdentityAccountActionTypes, + deleteIdentityAction(), + ); + } }, - [dispatchActionPromise, deleteAction], + [dispatchActionPromise, deleteKeyserverAction, deleteIdentityAction], ); return (