Skip to content

Commit f0ca636

Browse files
committed
feat(quick-replies): use item.code as the key for items
1 parent 5de57ca commit f0ca636

File tree

3 files changed

+37
-3
lines changed

3 files changed

+37
-3
lines changed

src/components/QuickReplies/QuickReplies.tsx

+1
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ const QuickReplies = (props: QuickRepliesProps) => {
3030
<ScrollView
3131
className="QuickReplies"
3232
data={items}
33+
itemKey="code"
3334
ref={scroller}
3435
data-visible={visible}
3536
fullWidth

src/components/QuickReplies/QuickReply.tsx

+8-1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { Icon } from '../Icon';
44

55
export interface QuickReplyItemProps {
66
name: string;
7+
code?: string;
78
icon?: string;
89
img?: string;
910
isNew?: boolean;
@@ -18,15 +19,21 @@ export interface QuickReplyProps {
1819

1920
export const QuickReply = (props: QuickReplyProps) => {
2021
const { item, index, onClick } = props;
22+
23+
function handleClick() {
24+
onClick(item, index);
25+
}
26+
2127
return (
2228
<button
2329
className={clsx('QuickReply', {
2430
new: item.isNew,
2531
highlight: item.isHighlight,
2632
})}
2733
type="button"
28-
onClick={() => onClick(item, index)}
34+
data-code={item.code}
2935
aria-label={`快捷短语: ${item.name},双击发送`}
36+
onClick={handleClick}
3037
>
3138
<div className="QuickReply-inner">
3239
{item.icon && <Icon type={item.icon} />}

storybook/stories/Chat.stories.tsx

+28-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,14 @@
11
import React from 'react';
22
import { Meta } from '@storybook/react/types-6-0';
33

4-
import Chat, { Bubble, MessageProps, ChatProps, useMessages, QuickReplyItemProps } from '../../src';
4+
import Chat, {
5+
Bubble,
6+
MessageProps,
7+
ChatProps,
8+
useMessages,
9+
QuickReplyItemProps,
10+
useQuickReplies,
11+
} from '../../src';
512
import '../../src/styles/index.less';
613

714
export default {
@@ -42,25 +49,30 @@ const defaultQuickReplies = [
4249
{
4350
icon: 'message',
4451
name: '联系人工服务',
52+
code: 'q1',
4553
isNew: true,
4654
isHighlight: true,
4755
},
4856
{
4957
name: '短语1',
58+
code: 'q2',
5059
isNew: true,
5160
},
5261
{
5362
name: '短语2',
63+
code: 'q3',
5464
isHighlight: true,
5565
},
5666
{
5767
name: '短语3',
68+
code: 'q4',
5869
},
5970
];
6071

6172
export const Default = (args: ChatProps) => {
6273
// 消息列表
6374
const { messages, appendMsg, setTyping } = useMessages(initialMessages);
75+
const { quickReplies, replace } = useQuickReplies(defaultQuickReplies);
6476

6577
// 发送回调
6678
function handleSend(type: string, val: string) {
@@ -87,6 +99,20 @@ export const Default = (args: ChatProps) => {
8799
// 快捷短语回调,可根据 item 数据做出不同的操作,这里以发送文本消息为例
88100
function handleQuickReplyClick(item: QuickReplyItemProps) {
89101
handleSend('text', item.name);
102+
103+
if (item.code === 'q1') {
104+
replace([
105+
{
106+
name: '短语a',
107+
code: 'qa',
108+
isHighlight: true,
109+
},
110+
{
111+
name: '短语b',
112+
code: 'qb',
113+
},
114+
]);
115+
}
90116
}
91117

92118
function renderMessageContent(msg: MessageProps) {
@@ -120,7 +146,7 @@ export const Default = (args: ChatProps) => {
120146
]}
121147
messages={messages}
122148
renderMessageContent={renderMessageContent}
123-
quickReplies={defaultQuickReplies}
149+
quickReplies={quickReplies}
124150
onQuickReplyClick={handleQuickReplyClick}
125151
onSend={handleSend}
126152
/>

0 commit comments

Comments
 (0)