diff --git a/datahub-web-react/src/app/settings/CreateTokenModal.tsx b/datahub-web-react/src/app/settings/CreateTokenModal.tsx index e58cf6affa142..6038a86e23303 100644 --- a/datahub-web-react/src/app/settings/CreateTokenModal.tsx +++ b/datahub-web-react/src/app/settings/CreateTokenModal.tsx @@ -17,6 +17,12 @@ type Props = { onCreateToken: () => void; }; +type FormProps = { + name: string; + description?: string; + duration: AccessTokenDuration; +}; + const ExpirationSelectContainer = styled.div` padding: 1px; `; @@ -34,16 +40,14 @@ const OptionText = styled.span<{ isRed: boolean }>` `; export default function CreateTokenModal({ currentUserUrn, visible, onClose, onCreateToken }: Props) { - const [tokenName, setTokenName] = useState(''); - const [tokenDescription, setTokenDescription] = useState(''); - const [selectedTokenDuration, setSelectedTokenDuration] = useState(ACCESS_TOKEN_DURATIONS[2].duration); + const [selectedTokenDuration, setSelectedTokenDuration] = useState(null); const [showModal, setShowModal] = useState(false); const [createButtonEnabled, setCreateButtonEnabled] = useState(true); const [createAccessToken, { data }] = useCreateAccessTokenMutation(); - const [form] = Form.useForm(); + const [form] = Form.useForm(); // Check and show the modal once the data for createAccessToken will generate useEffect(() => { @@ -54,34 +58,34 @@ export default function CreateTokenModal({ currentUserUrn, visible, onClose, onC // Function to handle the close or cross button of Access Token Modal const onDetailModalClose = () => { + setSelectedTokenDuration(null); setShowModal(false); onClose(); }; // Function to handle the close or cross button of Create Token Modal const onModalClose = () => { - setTokenName(''); - setTokenDescription(''); - setSelectedTokenDuration(ACCESS_TOKEN_DURATIONS[2].duration); form.resetFields(); onClose(); }; const onCreateNewToken = () => { + const { duration, name, description } = form.getFieldsValue(); const input: CreateAccessTokenInput = { actorUrn: currentUserUrn, type: AccessTokenType.Personal, - duration: selectedTokenDuration, - name: tokenName, - description: tokenDescription, + duration, + name, + description, }; createAccessToken({ variables: { input } }) .then(({ errors }) => { if (!errors) { + setSelectedTokenDuration(duration); analytics.event({ type: EventType.CreateAccessTokenEvent, accessTokenType: AccessTokenType.Personal, - duration: selectedTokenDuration, + duration, }); } }) @@ -96,12 +100,7 @@ export default function CreateTokenModal({ currentUserUrn, visible, onClose, onC }; const accessToken = data && data.createAccessToken?.accessToken; - const selectedExpiresInText = getTokenExpireDate(selectedTokenDuration); - - // Function to handle the selection of Token Duration - const onSelectTokenDurationHandler = (duration: AccessTokenDuration) => { - setSelectedTokenDuration(duration); - }; + const selectedExpiresInText = selectedTokenDuration && getTokenExpireDate(selectedTokenDuration); // Handle the Enter press useEnterKeyListener({ @@ -129,7 +128,7 @@ export default function CreateTokenModal({ currentUserUrn, visible, onClose, onC >
setCreateButtonEnabled(form.getFieldsError().some((field) => field.errors.length > 0)) @@ -149,40 +148,38 @@ export default function CreateTokenModal({ currentUserUrn, visible, onClose, onC ]} hasFeedback > - setTokenName(event.target.value)} - /> + Description}> An optional description for your new token. - setTokenDescription(event.target.value)} - /> + Expires in - onSelectTokenDurationHandler(duration as AccessTokenDuration)} - > - {ACCESS_TOKEN_DURATIONS.map((duration) => ( - - - {duration.text} - - - ))} - - - {getTokenExpireDate(selectedTokenDuration)} - + + + {ACCESS_TOKEN_DURATIONS.map((duration) => ( + + + {duration.text} + + + ))} + + + prev.duration !== cur.duration} noStyle> + {({ getFieldValue }) => ( + + {getFieldValue('duration') && getTokenExpireDate(getFieldValue('duration'))} + + )} +