-
Notifications
You must be signed in to change notification settings - Fork 445
Expand file tree
/
Copy pathRevokeAPIKeyConfirmationModal.tsx
More file actions
106 lines (95 loc) · 3.08 KB
/
RevokeAPIKeyConfirmationModal.tsx
File metadata and controls
106 lines (95 loc) · 3.08 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
import { useClerk } from '@clerk/shared/react';
import { descriptors } from '@/ui/customizables';
import { Card } from '@/ui/elements/Card';
import { Form } from '@/ui/elements/Form';
import { FormButtons } from '@/ui/elements/FormButtons';
import { FormContainer } from '@/ui/elements/FormContainer';
import { localizationKeys, useLocalizations } from '@/ui/localization';
import { useFormControl } from '@/ui/utils/useFormControl';
import { APIKeyModal } from './APIKeyModal';
type RevokeAPIKeyConfirmationModalProps = {
isOpen: boolean;
onOpen: () => void;
onClose: () => void;
apiKeyID?: string;
apiKeyName: string;
onRevokeSuccess?: () => void;
modalRoot?: React.MutableRefObject<HTMLElement | null>;
};
export const RevokeAPIKeyConfirmationModal = ({
isOpen,
onOpen,
onClose,
apiKeyID,
apiKeyName,
onRevokeSuccess,
modalRoot,
}: RevokeAPIKeyConfirmationModalProps) => {
const clerk = useClerk();
const { t } = useLocalizations();
const revokeField = useFormControl('apiKeyRevokeConfirmation', '', {
type: 'text',
label: localizationKeys('apiKeys.revokeConfirmation.inputLabel'),
placeholder: localizationKeys('apiKeys.revokeConfirmation.confirmationText'),
isRequired: true,
});
const canSubmit =
revokeField.value === (t(localizationKeys('apiKeys.revokeConfirmation.confirmationText')) || 'Revoke');
const handleClose = () => {
onClose();
revokeField.setValue('');
};
const handleSubmit = async (e: React.FormEvent) => {
e.preventDefault();
if (!apiKeyID || !canSubmit) {
return;
}
await clerk.apiKeys.revoke({ apiKeyID: apiKeyID });
onRevokeSuccess?.();
handleClose();
};
if (!isOpen) {
return null;
}
return (
<APIKeyModal
handleOpen={onOpen}
handleClose={handleClose}
canCloseModal={false}
modalRoot={modalRoot}
>
<Card.Root
role='alertdialog'
elementDescriptor={descriptors.apiKeysRevokeModal}
>
<Card.Content
sx={t => ({
textAlign: 'start',
padding: `${t.sizes.$4} ${t.sizes.$5} ${t.sizes.$4} ${t.sizes.$6}`,
})}
>
<FormContainer
headerTitle={localizationKeys('apiKeys.revokeConfirmation.formTitle', { apiKeyName })}
headerSubtitle={localizationKeys('apiKeys.revokeConfirmation.formHint')}
>
<Form.Root onSubmit={handleSubmit}>
<Form.ControlRow
elementId={revokeField.id}
elementDescriptor={descriptors.apiKeysRevokeModalInput}
>
<Form.PlainInput {...revokeField.props} />
</Form.ControlRow>
<FormButtons
submitLabel={localizationKeys('apiKeys.revokeConfirmation.formButtonPrimary__revoke')}
colorScheme='danger'
isDisabled={!canSubmit}
onReset={handleClose}
elementDescriptor={descriptors.apiKeysRevokeModalSubmitButton}
/>
</Form.Root>
</FormContainer>
</Card.Content>
</Card.Root>
</APIKeyModal>
);
};