fix(server): regenerate Server Agent ID and Token after each agent creation without page refresh

- Previously, the Add Server Monitoring Agent dialog required a manual page refresh to show the new Server Agent ID and Server Token. This update automatically  generates and displays new credentials after each agent creation.
This commit is contained in:
Tola Leng
2025-10-13 14:57:51 +07:00
parent d408658b69
commit 17e0d0a794
@@ -35,10 +35,7 @@ export const AddServerAgentDialog: React.FC<AddServerAgentDialogProps> = ({
const [isSubmitting, setIsSubmitting] = useState(false); const [isSubmitting, setIsSubmitting] = useState(false);
const [activeTab, setActiveTab] = useState("configure"); const [activeTab, setActiveTab] = useState("configure");
// Get current PocketBase URL
const currentPocketBaseUrl = getCurrentEndpoint(); const currentPocketBaseUrl = getCurrentEndpoint();
// Form state
const [formData, setFormData] = useState({ const [formData, setFormData] = useState({
serverName: "", serverName: "",
description: "", description: "",
@@ -49,12 +46,16 @@ export const AddServerAgentDialog: React.FC<AddServerAgentDialogProps> = ({
notificationEnabled: true, notificationEnabled: true,
}); });
// Generated server token and agent ID const generateNewCredentials = () => ({
const [serverToken] = useState(() => serverToken: `srv_${Math.random().toString(36).substring(2, 15)}${Math.random().toString(36).substring(2, 15)}`,
serverId: `agent_${Math.random().toString(36).substring(2, 15)}${Math.random().toString(36).substring(2, 15)}`
});
const [serverToken, setServerToken] = useState(() =>
`srv_${Math.random().toString(36).substring(2, 15)}${Math.random().toString(36).substring(2, 15)}` `srv_${Math.random().toString(36).substring(2, 15)}${Math.random().toString(36).substring(2, 15)}`
); );
const [serverId] = useState(() => const [serverId, setServerId] = useState(() =>
`agent_${Math.random().toString(36).substring(2, 15)}${Math.random().toString(36).substring(2, 15)}` `agent_${Math.random().toString(36).substring(2, 15)}${Math.random().toString(36).substring(2, 15)}`
); );
@@ -74,8 +75,6 @@ export const AddServerAgentDialog: React.FC<AddServerAgentDialogProps> = ({
setIsSubmitting(true); setIsSubmitting(true);
try { try {
// Here you would typically create the server monitoring configuration
// For now, we'll simulate the process
await new Promise(resolve => setTimeout(resolve, 1500)); await new Promise(resolve => setTimeout(resolve, 1500));
toast({ toast({
@@ -83,7 +82,9 @@ export const AddServerAgentDialog: React.FC<AddServerAgentDialogProps> = ({
description: t('serverAgentCreatedDesc').replace('{name}', formData.serverName), description: t('serverAgentCreatedDesc').replace('{name}', formData.serverName),
}); });
// Switch to one-click install tab after successful creation const newCredentials = generateNewCredentials();
setServerToken(newCredentials.serverToken);
setServerId(newCredentials.serverId);
setActiveTab("one-click"); setActiveTab("one-click");
onAgentAdded(); onAgentAdded();
} catch (error) { } catch (error) {
@@ -98,7 +99,6 @@ export const AddServerAgentDialog: React.FC<AddServerAgentDialogProps> = ({
}; };
const handleDialogClose = () => { const handleDialogClose = () => {
// Reset form and tab when dialog closes
setActiveTab("configure"); setActiveTab("configure");
setFormData({ setFormData({
serverName: "", serverName: "",
@@ -109,6 +109,11 @@ export const AddServerAgentDialog: React.FC<AddServerAgentDialogProps> = ({
dockerEnabled: false, dockerEnabled: false,
notificationEnabled: true, notificationEnabled: true,
}); });
const newCredentials = generateNewCredentials();
setServerToken(newCredentials.serverToken);
setServerId(newCredentials.serverId);
onOpenChange(false); onOpenChange(false);
}; };
@@ -121,7 +126,7 @@ export const AddServerAgentDialog: React.FC<AddServerAgentDialogProps> = ({
{t('addServerMonitoringAgent')} {t('addServerMonitoringAgent')}
</DialogTitle> </DialogTitle>
<DialogDescription> <DialogDescription>
{t('configureAgentDesc')} {t('configureAgentDesc')}
</DialogDescription> </DialogDescription>
</DialogHeader> </DialogHeader>
@@ -154,7 +159,7 @@ export const AddServerAgentDialog: React.FC<AddServerAgentDialogProps> = ({
onDialogClose={handleDialogClose} onDialogClose={handleDialogClose}
/> />
</TabsContent> </TabsContent>
<TabsContent value="docker-one-click" className="space-y-6"> <TabsContent value="docker-one-click" className="space-y-6">
<DockerOneClickTab <DockerOneClickTab
serverToken={serverToken} serverToken={serverToken}