Skip to content

Commit 800886a

Browse files
committed
Wrap up cis4 revocation
1 parent 1fa1545 commit 800886a

File tree

6 files changed

+40
-19
lines changed

6 files changed

+40
-19
lines changed

packages/browser-wallet/src/popup/popupX/pages/SendFunds/Confirm.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ import { logError } from '@shared/utils/log-helpers';
3434
import { submittedTransactionRoute } from '@popup/popupX/constants/routes';
3535

3636
import { CIS2_TRANSFER_NRG_OFFSET, showToken, useTokenMetadata } from './util';
37-
import { UpdateContractSubmittedLocationState } from '../SubmittedTransaction/SubmittedTransaction';
37+
import { CIS2TransferSubmittedLocationState } from '../SubmittedTransaction/SubmittedTransaction';
3838

3939
type Props = {
4040
sender: AccountAddress.Type;
@@ -108,7 +108,7 @@ export default function SendFundsConfirm({ values, fee, sender }: Props) {
108108
}
109109

110110
const tx = await submitTransaction(payload, fee);
111-
const state: UpdateContractSubmittedLocationState = { type: 'cis2.transfer', amount: values.amount, tokenName };
111+
const state: CIS2TransferSubmittedLocationState = { type: 'cis2.transfer', amount: values.amount, tokenName };
112112
nav(submittedTransactionRoute(TransactionHash.fromHexString(tx)), {
113113
state,
114114
});

packages/browser-wallet/src/popup/popupX/pages/SubmittedTransaction/SubmittedTransaction.tsx

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,12 +104,18 @@ function TransferBody({ transfer }: TransferBodyProps) {
104104
);
105105
}
106106

107-
export type UpdateContractSubmittedLocationState = {
107+
export type CIS2TransferSubmittedLocationState = {
108108
type: 'cis2.transfer';
109109
/** formatted amount */
110110
amount: string;
111111
tokenName: string;
112112
};
113+
114+
export type CIS4RevokeSubmittedLocationState = {
115+
type: 'cis4.revoke';
116+
};
117+
118+
type UpdateContractSubmittedLocationState = CIS2TransferSubmittedLocationState | CIS4RevokeSubmittedLocationState;
113119
function UpdateContractBody() {
114120
const { t } = useTranslation('x', { keyPrefix: 'submittedTransaction.success' });
115121
const { state } = useLocation() as Location & { state: UpdateContractSubmittedLocationState };
@@ -122,6 +128,8 @@ function UpdateContractBody() {
122128
<Text.Capture>{state.tokenName}</Text.Capture>
123129
</>
124130
);
131+
case 'cis4.revoke':
132+
return <Text.Capture>{t('web3Revoke')}</Text.Capture>;
125133
default:
126134
throw new Error('Unsupported');
127135
}

packages/browser-wallet/src/popup/popupX/pages/SubmittedTransaction/i18n/en.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,14 @@ const t = {
66
updated: "You've updated your delegation settings",
77
},
88
configureValidator: {
9-
changeStake: "You've validating with",
10-
removed: "You've stopped validating",
11-
updated: "You've updated your delegation settings",
9+
changeStake: "You're validating with",
10+
removed: "You've removed your validation stake",
11+
updated: "You've updated your validation settings",
1212
},
1313
transfer: {
1414
label: "You've sent",
1515
},
16+
web3Revoke: 'Your credential has been successfully revoked',
1617
},
1718
pending: {
1819
label: 'Transaction in progress',

packages/browser-wallet/src/popup/popupX/pages/Web3Id/Web3IdDetails.tsx

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,17 @@ import {
2727
import Button from '@popup/popupX/shared/Button';
2828
import Stop from '@assets/svgX/stop.svg';
2929
import Info from '@assets/svgX/info.svg';
30-
import { useCredentialEntry } from '@popup/popupX/shared/utils/verifiable-credentials';
30+
import { useCredentialEntry, useCredentialStatus } from '@popup/popupX/shared/utils/verifiable-credentials';
3131
import FullscreenNotice, { FullscreenNoticeProps } from '@popup/popupX/shared/FullscreenNotice';
3232
import { displayNameOrSplitAddress, useHdWallet, useSelectedCredential } from '@popup/shared/utils/account-helpers';
3333
import { fetchContractName } from '@shared/utils/token-helpers';
3434
import Text from '@popup/popupX/shared/Text';
35-
import { ConfirmedCredential, CreationStatus, VerifiableCredential } from '@shared/storage/types';
35+
import {
36+
ConfirmedCredential,
37+
CreationStatus,
38+
VerifiableCredential,
39+
VerifiableCredentialStatus,
40+
} from '@shared/storage/types';
3641
import { displayAsCcd, noOp, useAsyncMemo } from 'wallet-common-helpers';
3742
import {
3843
TransactionSubmitError,
@@ -41,6 +46,7 @@ import {
4146
useTransactionSubmit,
4247
} from '@popup/shared/utils/transaction-helpers';
4348
import ErrorMessage from '@popup/popupX/shared/Form/ErrorMessage';
49+
import { CIS4RevokeSubmittedLocationState } from '../SubmittedTransaction/SubmittedTransaction';
4450

4551
type ConfirmRevocationProps = FullscreenNoticeProps & {
4652
credential: VerifiableCredential;
@@ -104,7 +110,8 @@ function ConfirmRevocation({ credential, entry, walletCred, ...props }: ConfirmR
104110
}
105111
try {
106112
const tx = await submitTransaction(payload, fee);
107-
nav(submittedTransactionRoute(TransactionHash.fromHexString(tx)));
113+
const submittedState: CIS4RevokeSubmittedLocationState = { type: 'cis4.revoke' };
114+
nav(submittedTransactionRoute(TransactionHash.fromHexString(tx)), { state: submittedState });
108115
} catch (e) {
109116
if (e instanceof Error) {
110117
setError(e);
@@ -158,13 +165,20 @@ function Web3IdDetailsParsed({ id, contract }: Props) {
158165
const [showConfirm, setShowConfirm] = useState(false);
159166
const credentialEntry = useCredentialEntry(credential);
160167
const walletCredential = useSelectedCredential();
168+
const status = useCredentialStatus(credential);
161169

162170
if (verifiableCredentials.loading) return null;
163171
if (credential === undefined) throw new Error('Expected to find credential');
164172

173+
const canRevoke =
174+
walletCredential?.status === CreationStatus.Confirmed &&
175+
credentialEntry?.credentialInfo.holderRevocable &&
176+
status !== undefined &&
177+
[VerifiableCredentialStatus.Active, VerifiableCredentialStatus.NotActivated].includes(status);
178+
165179
return (
166180
<>
167-
{walletCredential?.status === CreationStatus.Confirmed && (
181+
{canRevoke && (
168182
<ConfirmRevocation
169183
open={showConfirm}
170184
onClose={() => setShowConfirm(false)}
@@ -175,11 +189,7 @@ function Web3IdDetailsParsed({ id, contract }: Props) {
175189
)}
176190
<Page>
177191
<Page.Top heading={t('title')}>
178-
{walletCredential?.status === CreationStatus.Confirmed &&
179-
credentialEntry?.credentialInfo.holderRevocable &&
180-
credentialEntry !== undefined && (
181-
<Button.Icon icon={<Stop />} onClick={() => setShowConfirm(true)} />
182-
)}
192+
{canRevoke && <Button.Icon icon={<Stop />} onClick={() => setShowConfirm(true)} />}
183193
<Button.Icon
184194
className="web3-id-details-x__info"
185195
icon={<Info />}

packages/browser-wallet/src/popup/popupX/shared/Web3IdCard/Web3IdCard.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React, { useMemo } from 'react';
1+
import React from 'react';
22
import { ClassName, TimeStampUnit, dateFromTimestamp } from 'wallet-common-helpers';
33
import { AttributeType } from '@concordium/web-sdk';
44
import clsx from 'clsx';
@@ -16,6 +16,7 @@ import {
1616
import { parseCredentialDID } from '@shared/utils/verifiable-credential-helpers';
1717
import Img from '@popup/shared/Img';
1818

19+
import { withDateAndTime } from '@shared/utils/time-helpers';
1920
import {
2021
defaultFormatAttribute,
2122
useCredentialEntry,
@@ -24,7 +25,6 @@ import {
2425
useCredentialSchema,
2526
useCredentialStatus,
2627
} from '../utils/verifiable-credentials';
27-
import { withDateAndTime } from '@shared/utils/time-helpers';
2828

2929
/**
3030
* Component for displaying the status of a verifiable credential.

packages/browser-wallet/src/popup/popupX/shared/utils/verifiable-credentials.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,18 +31,20 @@ import { withDateAndTime } from '@shared/utils/time-helpers';
3131
* @param credential the verifiable credential to lookup the status for
3232
* @returns the status for the given credential
3333
*/
34-
export function useCredentialStatus(credential: VerifiableCredential) {
34+
export function useCredentialStatus(credential: VerifiableCredential | undefined) {
3535
const [status, setStatus] = useState<VerifiableCredentialStatus>();
3636
const client = useAtomValue(grpcClientAtom);
3737

3838
useEffect(() => {
39+
if (credential === undefined) return;
40+
3941
getVerifiableCredentialStatus(client, credential.id)
4042
.then(setStatus)
4143
.catch((e) => {
4244
setStatus(VerifiableCredentialStatus.Pending);
4345
logError(e);
4446
});
45-
}, [credential.id, client]);
47+
}, [credential?.id, client]);
4648

4749
return status;
4850
}

0 commit comments

Comments
 (0)