Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
71 changes: 48 additions & 23 deletions frontend/src/components/console/task/create-default-task-dialog.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -153,7 +153,12 @@ export default function CreateDefaultTaskDialog({
? storedParams.imageId
: selectImage(images, true)

setSelectedImageId(nextImageId)
setSelectedImageId((currentImageId) => {
if (currentImageId && images.some((image) => image.id === currentImageId)) {
return currentImageId
}
return nextImageId
})

if (user.role === ConstsUserRole.UserRoleSubAccount) {
const nextHostId = hosts.some((host) => host.id === storedParams.hostId && host.status === ConstsHostStatus.HostStatusOnline)
Expand All @@ -162,37 +167,51 @@ export default function CreateDefaultTaskDialog({
? (hosts.find((host) => host.id && host.status === ConstsHostStatus.HostStatusOnline)?.id || "")
: selectHost(hosts, true)

setSelectedHostId(nextHostId)
setSelectedHostId((currentHostId) => {
const currentHostIsValid = currentHostId === "public_host"
|| hosts.some((host) => host.id === currentHostId && host.status === ConstsHostStatus.HostStatusOnline)
return currentHostIsValid ? currentHostId : nextHostId
})
return
}

setSelectedHostId(selectHost(hosts, false))
const nextHostId = selectHost(hosts, false)
setSelectedHostId((currentHostId) => {
const currentHostIsValid = currentHostId === "public_host"
|| hosts.some((host) => host.id === currentHostId && host.status === ConstsHostStatus.HostStatusOnline)
return currentHostIsValid ? currentHostId : nextHostId
})
}, [hosts, images, user.role])

const resetDraft = () => {
modelTouchedRef.current = false
setContent("")
setCodeDropdownOpen(false)
setSkillPopoverOpen(false)
setSearchInput("")
setSelectedRepo("")
setSelectedRepoDisplayName("")
setSelectedRepoFromMyRepos(false)
setSelectedZipFile(null)
setSelectedSkill(
skillList.length > 0
? filterSelectableSkillIds(defaultSkills, skillList)
: defaultSkills
)
setActiveSkillTag(ALL_SKILLS_TAG)
setAdvancedOptionsOpen(false)
setSelectedModelId("")
setSelectedHostId("")
setSelectedImageId("")
setSelectedIdentityId("")
setBranch("")
}

useEffect(() => {
if (!open) {

modelTouchedRef.current = false
setContent("")
setCodeDropdownOpen(false)
setSkillPopoverOpen(false)
setSearchInput("")
setSelectedRepo("")
setSelectedRepoDisplayName("")
setSelectedRepoFromMyRepos(false)
setSelectedZipFile(null)
setSelectedSkill(
skillList.length > 0
? filterSelectableSkillIds(defaultSkills, skillList)
: defaultSkills
)
setActiveSkillTag(ALL_SKILLS_TAG)
setAdvancedOptionsOpen(false)
setSelectedModelId("")
setSelectedHostId("")
setSelectedImageId("")
setSelectedIdentityId("")
setBranch("")
return
}

Expand Down Expand Up @@ -408,6 +427,7 @@ export default function CreateDefaultTaskDialog({
toast.success(t("taskWorkflow.toast.taskStarted"))
reloadProjects()
reloadUnlinkedTasks()
resetDraft()
onOpenChange(false)
navigate(`/console/task/${resp.data?.id}`)
} else if (resp.code === 10811) {
Expand All @@ -420,6 +440,11 @@ export default function CreateDefaultTaskDialog({
setCreatingTask(false)
}

const handleCancel = () => {
resetDraft()
onOpenChange(false)
}

const handleZipFileSelect = (e: ChangeEvent<HTMLInputElement>) => {
const file = e.target.files?.[0]
if (!file) {
Expand Down Expand Up @@ -767,7 +792,7 @@ export default function CreateDefaultTaskDialog({
</div>

<DialogFooter className="shrink-0 border-t pt-4">
<Button variant="outline" onClick={() => onOpenChange(false)}>
<Button variant="outline" onClick={handleCancel}>
{t("taskWorkflow.dialog.params.cancel")}
</Button>
<Button onClick={handleConfirmExecute} disabled={!content.trim() || creatingTask || contentTooLong}>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -80,11 +80,15 @@ test("模型列表暂不可用或用户尚未完成选择时保持空值", () =>
}), "")
})

test("侧边栏启动任务弹窗关闭时重置模型操作状态", () => {
test("侧边栏启动任务弹窗关闭时保留草稿并关闭临时控件", () => {
assert.match(
dialogSource,
/if \(!open\) \{[\s\S]*?modelTouchedRef\.current = false[\s\S]*?setSelectedModelId\(""\)/,
/if \(!open\) \{[\s\S]*?setCodeDropdownOpen\(false\)[\s\S]*?setSkillPopoverOpen\(false\)[\s\S]*?setSearchInput\(""\)/,
)
assert.doesNotMatch(dialogSource, /if \(!open\) \{[\s\S]*?setContent\(""\)/)
assert.match(dialogSource, /const resetDraft = \(\) => \{[\s\S]*?setContent\(""\)/)
assert.match(dialogSource, /const handleCancel = \(\) => \{[\s\S]*?resetDraft\(\)[\s\S]*?onOpenChange\(false\)/)
assert.match(dialogSource, /resetDraft\(\)[\s\S]*?onOpenChange\(false\)[\s\S]*?navigate\(`\/console\/task/)
})

test("侧边栏启动任务弹窗提交用户最后选择的模型", () => {
Expand Down
Loading