'use client' import { Button } from '@langgenius/dify-ui/button' import { Dialog, DialogCloseButton, DialogContent, DialogTitle, } from '@langgenius/dify-ui/dialog' import { FieldControl, FieldError, FieldLabel, FieldRoot } from '@langgenius/dify-ui/field' import { Form } from '@langgenius/dify-ui/form' import { Textarea } from '@langgenius/dify-ui/textarea' import { toast } from '@langgenius/dify-ui/toast' import { useMutation } from '@tanstack/react-query' import { useAtom, useAtomValue, useSetAtom } from 'jotai' import { useTranslation } from 'react-i18next' import { consoleQuery } from '@/service/client' import { deploymentActionAppInstanceAtom, editDeploymentDialogOpenAtom, } from './state' type EditDeploymentFormValues = { name: string description: string } function normalizedEditDeploymentFormValues(value: EditDeploymentFormValues) { return { name: value.name.trim(), description: value.description.trim(), } } function canSubmitEditDeploymentForm(initialValues: EditDeploymentFormValues, value: EditDeploymentFormValues) { const normalizedValues = normalizedEditDeploymentFormValues(value) return Boolean( normalizedValues.name && ( normalizedValues.name !== initialValues.name || normalizedValues.description !== initialValues.description ), ) } function EditDeploymentForm() { const { t } = useTranslation('deployments') const nameLabel = t('settings.name') const appInstance = useAtomValue(deploymentActionAppInstanceAtom) const appInstanceId = appInstance.id const initialValues = { name: appInstance.displayName, description: appInstance.description, } const setOpen = useSetAtom(editDeploymentDialogOpenAtom) const updateInstance = useMutation(consoleQuery.enterprise.appInstanceService.updateAppInstance.mutationOptions()) function handleClose() { if (updateInstance.isPending) return setOpen(false) } function handleSubmit(values: EditDeploymentFormValues) { if (!canSubmitEditDeploymentForm(initialValues, values)) return const normalizedValues = normalizedEditDeploymentFormValues(values) updateInstance.mutate( { params: { appInstanceId, }, body: { appInstanceId, displayName: normalizedValues.name, description: normalizedValues.description, }, }, { onSuccess: () => { toast.success(t('settings.updated')) setOpen(false) }, onError: () => { toast.error(t('settings.updateFailed')) }, }, ) } return ( <> className="flex flex-col gap-4" onFormSubmit={handleSubmit}> {nameLabel} {t('errorMsg.fieldRequired', { ns: 'common', field: nameLabel })} {t('settings.description')}