'use client' import { Button } from '@langgenius/dify-ui/button' import { Dialog, DialogCloseButton, DialogContent, DialogTitle } from '@langgenius/dify-ui/dialog' import { Field, FieldControl, FieldError, FieldLabel } 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'])}