feat: Enhance assistant emoji and popup UI interactions

This commit is contained in:
kangfenmao 2025-02-23 06:34:50 +08:00
parent 3874a1ee5d
commit 8f4868af01
2 changed files with 39 additions and 2 deletions

View File

@ -123,6 +123,7 @@ const PopupContainer: React.FC<Props> = ({ resolve }) => {
maskClosable={false} maskClosable={false}
afterClose={onClose} afterClose={onClose}
okText={t('agents.add.title')} okText={t('agents.add.title')}
width={800}
centered> centered>
<Form <Form
ref={formRef} ref={formRef}

View File

@ -1,5 +1,6 @@
import 'emoji-picker-element' import 'emoji-picker-element'
import { CloseCircleFilled } from '@ant-design/icons'
import EmojiPicker from '@renderer/components/EmojiPicker' import EmojiPicker from '@renderer/components/EmojiPicker'
import { Box, HStack } from '@renderer/components/Layout' import { Box, HStack } from '@renderer/components/Layout'
import { Assistant, AssistantSettings } from '@renderer/types' import { Assistant, AssistantSettings } from '@renderer/types'
@ -18,7 +19,7 @@ interface Props {
} }
const AssistantPromptSettings: React.FC<Props> = ({ assistant, updateAssistant, onOk }) => { const AssistantPromptSettings: React.FC<Props> = ({ assistant, updateAssistant, onOk }) => {
const [emoji, setEmoji] = useState(getLeadingEmoji(assistant.name) || '⭐️') const [emoji, setEmoji] = useState(getLeadingEmoji(assistant.name) || assistant.emoji)
const [name, setName] = useState(assistant.name.replace(getLeadingEmoji(assistant.name) || '', '').trim()) const [name, setName] = useState(assistant.name.replace(getLeadingEmoji(assistant.name) || '', '').trim())
const [prompt, setPrompt] = useState(assistant.prompt) const [prompt, setPrompt] = useState(assistant.prompt)
const { t } = useTranslation() const { t } = useTranslation()
@ -34,6 +35,12 @@ const AssistantPromptSettings: React.FC<Props> = ({ assistant, updateAssistant,
updateAssistant(_assistant) updateAssistant(_assistant)
} }
const handleEmojiDelete = () => {
setEmoji('')
const _assistant = { ...assistant, name: name.trim(), prompt, emoji: undefined }
updateAssistant(_assistant)
}
return ( return (
<Container> <Container>
<Box mb={8} style={{ fontWeight: 'bold' }}> <Box mb={8} style={{ fontWeight: 'bold' }}>
@ -41,7 +48,27 @@ const AssistantPromptSettings: React.FC<Props> = ({ assistant, updateAssistant,
</Box> </Box>
<HStack gap={8} alignItems="center"> <HStack gap={8} alignItems="center">
<Popover content={<EmojiPicker onEmojiClick={handleEmojiSelect} />} arrow> <Popover content={<EmojiPicker onEmojiClick={handleEmojiSelect} />} arrow>
<Button style={{ fontSize: 20, padding: '4px 8px', minWidth: '42px', height: '32px' }}>{emoji}</Button> <EmojiButtonWrapper>
<Button style={{ fontSize: 20, padding: '4px', minWidth: '32px', height: '32px' }}>{emoji}</Button>
{emoji && (
<CloseCircleFilled
className="delete-icon"
onClick={(e) => {
e.stopPropagation()
handleEmojiDelete()
}}
style={{
display: 'none',
position: 'absolute',
top: '-8px',
right: '-8px',
fontSize: '16px',
color: '#ff4d4f',
cursor: 'pointer'
}}
/>
)}
</EmojiButtonWrapper>
</Popover> </Popover>
<Input <Input
placeholder={t('common.assistant') + t('common.name')} placeholder={t('common.assistant') + t('common.name')}
@ -80,4 +107,13 @@ const Container = styled.div`
padding: 5px; padding: 5px;
` `
const EmojiButtonWrapper = styled.div`
position: relative;
display: inline-block;
&:hover .delete-icon {
display: block !important;
}
`
export default AssistantPromptSettings export default AssistantPromptSettings