From 2cda3e418121e4042e68d1c766c52ba330ae68e0 Mon Sep 17 00:00:00 2001 From: Stephen Zhou <38493346+hyoban@users.noreply.github.com> Date: Thu, 7 May 2026 21:51:45 +0800 Subject: [PATCH] tweaks --- .../components/create-instance-modal.tsx | 41 ++--- .../deployments/detail/settings-tab.tsx | 150 +++++++++++------- .../deployments/detail/versions-tab.tsx | 37 +++-- 3 files changed, 130 insertions(+), 98 deletions(-) diff --git a/web/features/deployments/components/create-instance-modal.tsx b/web/features/deployments/components/create-instance-modal.tsx index 8966f025ab..8e0853bd52 100644 --- a/web/features/deployments/components/create-instance-modal.tsx +++ b/web/features/deployments/components/create-instance-modal.tsx @@ -6,7 +6,7 @@ import { Dialog, DialogCloseButton, DialogContent, DialogDescription, DialogTitl import { Popover, PopoverContent, PopoverTrigger } from '@langgenius/dify-ui/popover' import { toast } from '@langgenius/dify-ui/toast' import { useMutation, useQuery } from '@tanstack/react-query' -import { useRef, useState } from 'react' +import { useState } from 'react' import { useTranslation } from 'react-i18next' import { AppTypeIcon } from '@/app/components/app/type-selector' import AppIcon from '@/app/components/base/app-icon' @@ -53,8 +53,6 @@ function AppPicker({ apps, isLoading, value, onChange }: AppPickerProps) { const { t } = useTranslation('deployments') const [open, setOpen] = useState(false) const [keywords, setKeywords] = useState('') - const triggerRef = useRef(null) - const [triggerWidth, setTriggerWidth] = useState(undefined) const q = keywords.trim().toLowerCase() const filtered = q @@ -62,8 +60,6 @@ function AppPicker({ apps, isLoading, value, onChange }: AppPickerProps) { : apps const handleOpenChange = (next: boolean) => { - if (next && triggerRef.current) - setTriggerWidth(triggerRef.current.offsetWidth) if (!next) setKeywords('') setOpen(next) @@ -96,7 +92,6 @@ function AppPicker({ apps, isLoading, value, onChange }: AppPickerProps) { -
+
('') - const [name, setName] = useState('') - const [description, setDescription] = useState('') const selectedApp = apps.find(a => a.id === appId) - const canCreate = Boolean(appId && name.trim() && !createInstance.isPending) + const canCreate = Boolean(appId && !createInstance.isPending) - const handleCreate = async () => { + const handleCreate = async (form: HTMLFormElement) => { if (!canCreate) return + const formData = new FormData(form) + const name = String(formData.get('name') ?? '').trim() + const description = String(formData.get('description') ?? '').trim() + if (!name) + return + try { const result = await createInstance.mutateAsync({ body: { @@ -259,7 +259,13 @@ function CreateInstanceForm({ onClose }: { } return ( -
+
{ + event.preventDefault() + void handleCreate(event.currentTarget) + }} + >
{t('createModal.title')} @@ -285,10 +291,10 @@ function CreateInstanceForm({ onClose }: { setName(e.target.value)} + required className="flex h-8 items-center rounded-lg border-[0.5px] border-components-input-border-active bg-components-input-bg-normal px-3 text-[13px] font-medium text-text-secondary outline-hidden placeholder:text-text-quaternary" />
@@ -299,9 +305,8 @@ function CreateInstanceForm({ onClose }: {