import { FC, useCallback, useState, useEffect } from 'react'; import { Dialog, DialogTitle, DialogContent, DialogActions, Box, LinearProgress, Typography, TextField, Button } from '@mui/material'; import CloseIcon from '@mui/icons-material/Close'; import { extractErrorMessage } from '../../utils'; import { useSnackbar } from 'notistack'; import { MessageBox } from '../../components'; import * as SecurityApi from '../../api/security'; import { Token } from '../../types'; import { useI18nContext } from '../../i18n/i18n-react'; interface GenerateTokenProps { username?: string; onClose: () => void; } const GenerateToken: FC = ({ username, onClose }) => { const [token, setToken] = useState(); const open = !!username; const { LL } = useI18nContext(); const { enqueueSnackbar } = useSnackbar(); const getToken = useCallback(async () => { try { setToken((await SecurityApi.generateToken(username)).data); } catch (error) { enqueueSnackbar(extractErrorMessage(error, LL.PROBLEM_UPDATING()), { variant: 'error' }); } }, [username, enqueueSnackbar, LL]); useEffect(() => { if (open) { getToken(); } }, [open, getToken]); return ( {LL.ACCESS_TOKEN_FOR() + ' ' + username} {token ? ( <> ) : ( {LL.GENERATING_TOKEN()}… )} ); }; export default GenerateToken;