diff --git a/web/src/pages/api-tokens/index.tsx b/web/src/pages/api-tokens/index.tsx index cfc47da..ae6a139 100644 --- a/web/src/pages/api-tokens/index.tsx +++ b/web/src/pages/api-tokens/index.tsx @@ -1,4 +1,4 @@ -import { useState } from 'react'; +import { useId, useState } from 'react'; import { useTranslation } from 'react-i18next'; import { Button, @@ -73,12 +73,14 @@ export function APITokensPage() { name: string; } | null>(null); const [copied, setCopied] = useState(false); + const devModeSwitchId = useId(); // Form state const [name, setName] = useState(''); const [description, setDescription] = useState(''); const [projectID, setProjectID] = useState('0'); const [expiresAt, setExpiresAt] = useState(''); + const [devMode, setDevMode] = useState(false); const [showProjectPicker, setShowProjectPicker] = useState(false); const resetForm = () => { @@ -86,9 +88,15 @@ export function APITokensPage() { setDescription(''); setProjectID('0'); setExpiresAt(''); + setDevMode(false); setShowProjectPicker(false); }; + const closeEditDialog = () => { + setEditingToken(null); + resetForm(); + }; + const handleSubmit = (e: React.FormEvent) => { e.preventDefault(); createToken.mutate( @@ -121,13 +129,11 @@ export function APITokensPage() { description, projectID: parseInt(projectID) || 0, expiresAt: expiresAt ? new Date(expiresAt).toISOString() : undefined, + devMode, }, }, { - onSuccess: () => { - setEditingToken(null); - resetForm(); - }, + onSuccess: () => closeEditDialog(), }, ); }; @@ -139,13 +145,6 @@ export function APITokensPage() { }); }; - const handleToggleDevMode = (token: APIToken) => { - updateToken.mutate({ - id: token.id, - data: { devMode: !token.devMode }, - }); - }; - const handleDelete = () => { if (!deletingToken) return; deleteToken.mutate(deletingToken.id, { @@ -159,6 +158,7 @@ export function APITokensPage() { setDescription(token.description); setProjectID(token.projectID.toString()); setExpiresAt(token.expiresAt ? token.expiresAt.split('T')[0] : ''); + setDevMode(!!token.devMode); }; const handleCopyToken = async () => { @@ -268,7 +268,6 @@ export function APITokensPage() { {t('apiTokens.tokenPrefix')} {t('apiTokens.project')} {t('common.status')} - {t('apiTokens.devMode')} {t('apiTokens.usage')} {t('apiTokens.lastUsed')} {t('common.actions')} @@ -332,27 +331,6 @@ export function APITokensPage() { )} - -
- handleToggleDevMode(token)} - disabled={updateToken.isPending} - /> - {token.devMode ? ( - - {t('apiTokens.devModeEnabled')} - - ) : ( - - {t('apiTokens.devModeDisabled')} - - )} -
-
@@ -503,7 +481,11 @@ export function APITokensPage() { {/* Edit Dialog */} !open && setEditingToken(null)} + onOpenChange={(open: boolean) => { + if (!open) { + closeEditDialog(); + } + }} > @@ -567,8 +549,31 @@ export function APITokensPage() { min={new Date().toISOString().split('T')[0]} />
+
+ +
+ + + {devMode ? t('apiTokens.devModeEnabled') : t('apiTokens.devModeDisabled')} + +
+
-