'use client' import { useEffect, useState, } from 'react' import { useTranslation } from 'react-i18next' import { PlusIcon, XMarkIcon } from '@heroicons/react/20/solid' import useSWR, { useSWRConfig } from 'swr' import SecretKeyGenerateModal from './secret-key-generate' import s from './style.module.css' import Modal from '@/app/components/base/modal' import Button from '@/app/components/base/button' import { createApikey, delApikey, fetchApiKeysList } from '@/service/apps' import type { CreateApiKeyResponse } from '@/models/app' import Tooltip from '@/app/components/base/tooltip' import Loading from '@/app/components/base/loading' import Confirm from '@/app/components/base/confirm' import useCopyToClipboard from '@/hooks/use-copy-to-clipboard' import { useContext } from 'use-context-selector' import I18n from '@/context/i18n' type ISecretKeyModalProps = { isShow: boolean appId: string onClose: () => void } const SecretKeyModal = ({ isShow = false, appId, onClose, }: ISecretKeyModalProps) => { const { t } = useTranslation() const [showConfirmDelete, setShowConfirmDelete] = useState(false) const [isVisible, setVisible] = useState(false) const [newKey, setNewKey] = useState(undefined) const { mutate } = useSWRConfig() const commonParams = { url: `/apps/${appId}/api-keys`, params: {} } const { data: apiKeysList } = useSWR(commonParams, fetchApiKeysList) const [delKeyID, setDelKeyId] = useState('') const [_, copy] = useCopyToClipboard() const { locale } = useContext(I18n) // const [isCopied, setIsCopied] = useState(false) const [copyValue, setCopyValue] = useState('') useEffect(() => { if (copyValue) { const timeout = setTimeout(() => { setCopyValue('') }, 1000) return () => { clearTimeout(timeout) } } }, [copyValue]) const onDel = async () => { setShowConfirmDelete(false) if (!delKeyID) { return } await delApikey({ url: `/apps/${appId}/api-keys/${delKeyID}`, params: {} }) mutate(commonParams) } const onCreate = async () => { const res = await createApikey({ url: `/apps/${appId}/api-keys`, body: {} }) setVisible(true) setNewKey(res) mutate(commonParams) } const generateToken = (token: string) => { return `${token.slice(0, 3)}...${token.slice(-20)}` } const formatDate = (timestamp: any) => { if (locale === 'en') { return new Intl.DateTimeFormat('en-US', { year: 'numeric', month: 'long', day: 'numeric' }).format((+timestamp) * 1000) } else { return new Intl.DateTimeFormat('fr-CA', { year: 'numeric', month: '2-digit', day: '2-digit' }).format((+timestamp) * 1000) } } return (

{t('appApi.apiKeyModal.apiSecretKeyTips')}

{!apiKeysList &&
} { !!apiKeysList?.data?.length && (
{t('appApi.apiKeyModal.secretKey')}
{t('appApi.apiKeyModal.created')}
{t('appApi.apiKeyModal.lastUsed')}
{apiKeysList.data.map(api => (
{generateToken(api.token)}
{formatDate(api.created_at)}
{/*
{dayjs((+api.created_at) * 1000).format('MMM D, YYYY')}
*/} {/*
{api.last_used_at ? dayjs((+api.last_used_at) * 1000).format('MMM D, YYYY') : 'Never'}
*/}
{api.last_used_at ? formatDate(api.last_used_at) : t('appApi.never')}
{ // setIsCopied(true) copy(api.token) setCopyValue(api.token) }}>
{ setDelKeyId(api.id) setShowConfirmDelete(true) }}>
))}
) }
setVisible(false)} newKey={newKey} /> {showConfirmDelete && ( { setDelKeyId('') setShowConfirmDelete(false) }} onConfirm={onDel} onCancel={() => { setDelKeyId('') setShowConfirmDelete(false) }} /> )}
) } export default SecretKeyModal