Skip to content

Commit a36ca7c

Browse files
committed
feat: add context menu into message item
1 parent 5c259d7 commit a36ca7c

File tree

1 file changed

+53
-46
lines changed
  • client/web/src/components/ChatBox/ChatMessageList

1 file changed

+53
-46
lines changed

client/web/src/components/ChatBox/ChatMessageList/Item.tsx

Lines changed: 53 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -120,60 +120,67 @@ export const NormalMessage: React.FC<ChatMessageItemProps> = React.memo(
120120
</div>
121121

122122
{/* 主体 */}
123-
<div
124-
className="flex flex-col flex-1 overflow-auto group"
125-
onContextMenu={stopPropagation}
123+
<Dropdown
124+
menu={moreActions}
125+
placement="bottomLeft"
126+
trigger={['contextMenu']}
127+
onOpenChange={setIsActionBtnActive}
126128
>
127-
{showAvatar && (
128-
<div className="flex items-center">
129-
<div className="font-bold">
130-
{userInfo.nickname ?? <span>&nbsp;</span>}
131-
</div>
132-
<div className="hidden group-hover:block opacity-40 ml-1 text-sm">
133-
{formatShortTime(payload.createdAt)}
129+
<div
130+
className="flex flex-col flex-1 overflow-auto group"
131+
onContextMenu={stopPropagation}
132+
>
133+
{showAvatar && (
134+
<div className="flex items-center">
135+
<div className="font-bold">
136+
{userInfo.nickname ?? <span>&nbsp;</span>}
137+
</div>
138+
<div className="hidden group-hover:block opacity-40 ml-1 text-sm">
139+
{formatShortTime(payload.createdAt)}
140+
</div>
134141
</div>
135-
</div>
136-
)}
142+
)}
137143

138-
{/* 消息内容 */}
139-
<AutoFolder
140-
maxHeight={340}
141-
backgroundColor="var(--tc-content-background-color)"
142-
showFullText={
143-
<div className="inline-block rounded-full bg-white dark:bg-black opacity-80 py-2 px-3 hover:opacity-100">
144-
{t('点击展开更多')}
145-
</div>
146-
}
147-
>
148-
<div className="chat-message-item_body leading-6 break-words">
149-
<MessageQuote payload={payload} />
144+
{/* 消息内容 */}
145+
<AutoFolder
146+
maxHeight={340}
147+
backgroundColor="var(--tc-content-background-color)"
148+
showFullText={
149+
<div className="inline-block rounded-full bg-white dark:bg-black opacity-80 py-2 px-3 hover:opacity-100">
150+
{t('点击展开更多')}
151+
</div>
152+
}
153+
>
154+
<div className="chat-message-item_body leading-6 break-words">
155+
<MessageQuote payload={payload} />
150156

151-
<span>{getMessageRender(payload.content)}</span>
157+
<span>{getMessageRender(payload.content)}</span>
152158

153-
{payload.sendFailed === true && (
154-
<Icon
155-
className="inline-block ml-1"
156-
icon="emojione:cross-mark-button"
157-
/>
158-
)}
159+
{payload.sendFailed === true && (
160+
<Icon
161+
className="inline-block ml-1"
162+
icon="emojione:cross-mark-button"
163+
/>
164+
)}
165+
166+
{/* 解释器按钮 */}
167+
{useRenderPluginMessageInterpreter(payload.content)}
168+
</div>
169+
</AutoFolder>
159170

160-
{/* 解释器按钮 */}
161-
{useRenderPluginMessageInterpreter(payload.content)}
171+
{/* 额外渲染 */}
172+
<div>
173+
{pluginMessageExtraParsers.map((parser) => (
174+
<React.Fragment key={parser.name}>
175+
{parser.render(payload)}
176+
</React.Fragment>
177+
))}
162178
</div>
163-
</AutoFolder>
164179

165-
{/* 额外渲染 */}
166-
<div>
167-
{pluginMessageExtraParsers.map((parser) => (
168-
<React.Fragment key={parser.name}>
169-
{parser.render(payload)}
170-
</React.Fragment>
171-
))}
180+
{/* 消息反应 */}
181+
{reactions}
172182
</div>
173-
174-
{/* 消息反应 */}
175-
{reactions}
176-
</div>
183+
</Dropdown>
177184

178185
{/* 操作 */}
179186
{!disableOperate && (
@@ -201,7 +208,7 @@ export const NormalMessage: React.FC<ChatMessageItemProps> = React.memo(
201208

202209
<Dropdown
203210
menu={moreActions}
204-
placement="bottomLeft"
211+
placement="bottomRight"
205212
trigger={['click']}
206213
onOpenChange={setIsActionBtnActive}
207214
>

0 commit comments

Comments
 (0)