feat: Add confirmation dialog for topic deletion

This commit is contained in:
ousugo 2025-02-20 04:04:46 +08:00 committed by 亢奋猫
parent 81a35d129d
commit 3a936e0f26
6 changed files with 32 additions and 11 deletions

View File

@ -139,6 +139,7 @@
"topics.pinned": "Pinned Topics",
"topics.title": "Topics",
"topics.unpinned": "Unpinned Topics",
"topics.delete.title": "Are you sure you want to delete this topic? This action cannot be undone",
"translate": "Translate",
"topics.prompt": "Topic Prompts",
"topics.prompt.tips": "Topic Prompts: Additional supplementary prompts provided for the current topic",

View File

@ -139,6 +139,7 @@
"topics.pinned": "トピックを固定",
"topics.title": "トピック",
"topics.unpinned": "固定解除",
"topics.delete.title": "このトピックを削除してもよろしいですか?この操作は元に戻せません",
"translate": "翻訳",
"topics.prompt": "トピック提示語",
"topics.prompt.tips": "トピック提示語:現在のトピックに対して追加の補足提示語を提供",

View File

@ -139,6 +139,7 @@
"topics.pinned": "Закрепленные темы",
"topics.title": "Топики",
"topics.unpinned": "Открепленные темы",
"topics.delete.title": "Вы уверены, что хотите удалить этот топик? Это действие нельзя отменить",
"translate": "Перевести",
"topics.prompt": "Тематические подсказки",
"topics.prompt.tips": "Тематические подсказки: Дополнительные подсказки, предоставленные для текущей темы",

View File

@ -141,6 +141,7 @@
"topics.pinned": "固定话题",
"topics.title": "话题",
"topics.unpinned": "取消固定",
"topics.delete.title": "确定要删除此话题吗?此操作无法撤销",
"translate": "翻译",
"topics.prompt": "话题提示词",
"topics.prompt.tips": "话题提示词: 针对当前话题提供额外的补充提示词",

View File

@ -139,6 +139,7 @@
"topics.pinned": "固定話題",
"topics.title": "話題",
"topics.unpinned": "取消固定",
"topics.delete.title": "確定要刪除此話題嗎?此操作無法撤銷",
"translate": "翻譯",
"topics.prompt": "話題提示詞",
"topics.prompt.tips": "話題提示詞:針對目前話題提供額外的補充提示詞",

View File

@ -21,7 +21,7 @@ import store from '@renderer/store'
import { setGenerating } from '@renderer/store/runtime'
import { Assistant, Topic } from '@renderer/types'
import { exportTopicAsMarkdown, exportTopicToNotion, topicToMarkdown } from '@renderer/utils/export'
import { Dropdown, MenuProps, Tooltip } from 'antd'
import { Dropdown, MenuProps, Popconfirm, Tooltip } from 'antd'
import dayjs from 'dayjs'
import { findIndex } from 'lodash'
import { FC, useCallback } from 'react'
@ -54,7 +54,7 @@ const Topics: FC<Props> = ({ assistant: _assistant, activeTopic, setActiveTopic
async (topic: Topic) => {
await modelGenerating()
const index = findIndex(assistant.topics, (t) => t.id === topic.id)
setActiveTopic(assistant.topics[index + 1 === assistant.topics.length ? 0 : index + 1])
setActiveTopic(assistant.topics[index + 1 === assistant.topics.length ? index - 1 : index + 1])
removeTopic(topic)
},
[assistant.topics, removeTopic, setActiveTopic]
@ -219,7 +219,7 @@ const Topics: FC<Props> = ({ assistant: _assistant, activeTopic, setActiveTopic
return menus
},
[assistant, assistants, onClearMessages, onPinTopic, onDeleteTopic, onMoveTopic, t, updateTopic]
[assistant, assistants, onClearMessages, onDeleteTopic, onPinTopic, onMoveTopic, t, updateTopic]
)
return (
@ -244,17 +244,33 @@ const Topics: FC<Props> = ({ assistant: _assistant, activeTopic, setActiveTopic
)}
<MenuButton className="pin">{topic.pinned && <PushpinOutlined />}</MenuButton>
{isActive && !topic.pinned && (
<MenuButton
className="menu"
onClick={(e) => {
e.stopPropagation()
<Popconfirm
title={t('chat.topics.delete.title')}
placement="top"
okButtonProps={{ danger: true }}
okText={t('common.delete')}
onConfirm={async (e) => {
e?.stopPropagation()
if (assistant.topics.length === 1) {
return onClearMessages()
}
onDeleteTopic(topic)
}}>
<CloseOutlined />
</MenuButton>
await modelGenerating()
const index = findIndex(assistant.topics, (t) => t.id === topic.id)
setActiveTopic(assistant.topics[index + 1 === assistant.topics.length ? index - 1 : index + 1])
removeTopic(topic)
}}
onCancel={(e) => e?.stopPropagation()}>
<MenuButton
className="menu"
onClick={(e) => {
e.stopPropagation()
if (assistant.topics.length === 1) {
return onClearMessages()
}
}}>
<CloseOutlined />
</MenuButton>
</Popconfirm>
)}
</TopicListItem>
</Dropdown>