import { CopyAll } from '@mui/icons-material' import { Box, Button, Card, Chip, Divider, IconButton, Input, Typography, } from '@mui/joy' import moment from 'moment' import { useEffect, useState } from 'react' import { useTranslation } from 'react-i18next' import { useLocalization } from '../../contexts/LocalizationContext' import { useUserProfile } from '../../queries/UserQueries' import { useNotification } from '../../service/NotificationProvider' import { CreateLongLiveToken, DeleteLongLiveToken, GetLongLiveTokens, } from '../../utils/Fetcher' import { isPlusAccount } from '../../utils/Helpers' import ConfirmationModal from '../Modals/Inputs/ConfirmationModal' import TextModal from '../Modals/Inputs/TextModal' import SettingsLayout from './SettingsLayout' const APITokenSettings = () => { const { t } = useTranslation('settings') const { data: userProfile } = useUserProfile() const { showNotification } = useNotification() const { fmt } = useLocalization() const [tokens, setTokens] = useState([]) const [isGetTokenNameModalOpen, setIsGetTokenNameModalOpen] = useState(false) const [showTokenId, setShowTokenId] = useState(null) const [confirmModalConfig, setConfirmModalConfig] = useState({}) const showConfirmation = ( message, title, onConfirm, confirmText = t('common.confirm'), cancelText = t('common.cancel'), color = 'primary', ) => { setConfirmModalConfig({ isOpen: true, message, title, confirmText, cancelText, color, onClose: isConfirmed => { if (isConfirmed) { onConfirm() } setConfirmModalConfig({}) }, }) } useEffect(() => { GetLongLiveTokens().then(resp => { resp.json().then(data => { setTokens(data.res) }) }) }, []) const handleSaveToken = name => { CreateLongLiveToken(name).then(resp => { if (resp.ok) { resp.json().then(data => { // add the token to the list: console.log(data) const newTokens = [...tokens] newTokens.push(data.res) setTokens(newTokens) }) } }) } return (
{t('apiTokens.accessToken')} {t('apiTokens.description')} {!isPlusAccount(userProfile) && ( <> {t('common.plusFeature')} {t('apiTokens.plusNotice')} )} {tokens.map(token => ( {token.name} {moment(token.createdAt).fromNow()}( {fmt.dateTime(token.createdAt)}) {showTokenId === token?.id && ( { navigator.clipboard.writeText(token.token) showNotification({ type: 'success', message: t('apiTokens.tokenCopied'), }) setShowTokenId(null) }} > } /> )} ))} { setIsGetTokenNameModalOpen(false) }} okText={t('apiTokens.generateToken')} onSave={handleSaveToken} /> {/* Modals */} {confirmModalConfig?.isOpen && ( )}
) } export default APITokenSettings