模板搜索和分页

dev/chat
Lei OT 2 years ago
parent e80d491c58
commit ff15ef9e2d

@ -29,9 +29,17 @@ const InputTemplate = ({ disabled = false, invokeSendMessage }) => {
const valueMapped = { ...cloneDeep(currentConversation), ...objectMapper(loginUser, { username: [{ key: 'agent_name' }, { key: 'your_name' }] }) }; const valueMapped = { ...cloneDeep(currentConversation), ...objectMapper(loginUser, { username: [{ key: 'agent_name' }, { key: 'your_name' }] }) };
const [openTemplates, setOpenTemplates] = useState(false); const [openTemplates, setOpenTemplates] = useState(false);
const handleOpenChange = (newOpen) => { const [dataSource, setDataSource] = useState(templates);
setOpenTemplates(newOpen); const [searchContent, setSearchContent] = useState('');
const handleSearchTemplates = (val) => {
if (val.toLowerCase().trim() !== '') {
const res = templates.filter((item) => item.name.includes(val.toLowerCase().trim()) || item.components_origin.some((itemc) => itemc.text.toLowerCase().includes(val.toLowerCase().trim())));
setDataSource(res);
return false;
}
setDataSource(templates);
}; };
const handleSendTemplate = (fromTemplate) => { const handleSendTemplate = (fromTemplate) => {
const mergeInput = { ...cloneDeep(valueMapped), ...activeInput[fromTemplate.name] }; const mergeInput = { ...cloneDeep(valueMapped), ...activeInput[fromTemplate.name] };
let valid = true; let valid = true;
@ -51,7 +59,7 @@ const InputTemplate = ({ disabled = false, invokeSendMessage }) => {
const params = keys.map((v) => ({ type: 'text', text: getNestedValue(mergeInput, [v]) })); const params = keys.map((v) => ({ type: 'text', text: getNestedValue(mergeInput, [v]) }));
const paramText = params.map((p) => p.text); const paramText = params.map((p) => p.text);
const fillTemplate = paramText.length ? replaceTemplateString(citem?.text || '', paramText) : citem?.text || ''; const fillTemplate = paramText.length ? replaceTemplateString(citem?.text || '', paramText) : citem?.text || '';
valid = keys.length !== (paramText).filter(s => s).length ? false : valid; valid = keys.length !== paramText.filter((s) => s).length ? false : valid;
return { return {
type: citem.type.toLowerCase(), type: citem.type.toLowerCase(),
parameters: params, parameters: params,
@ -110,46 +118,58 @@ const InputTemplate = ({ disabled = false, invokeSendMessage }) => {
<> <>
<Popover <Popover
content={ content={
<List <>
className='w-96 h-4/6 overflow-y-auto text-slate-900' <Input.Search
itemLayout='horizontal' onSearch={handleSearchTemplates}
dataSource={templates} allowClear
rowKey={'name'} value={searchContent}
pagination={templates.length < 6 ? false : { position: 'bottom', pageSize: 4, align: 'start', size: 'small' }} onChange={(e) => {
renderItem={(item, index) => ( setSearchContent(e.target.value);
<List.Item> handleSearchTemplates(e.target.value);
<List.Item.Meta }}
className=' ' placeholder='搜索名称'
title={ />
<Flex justify={'space-between'}> <List
<>{item.components.header?.[0]?.text || item.name}</> className='w-96 h-4/6 overflow-y-auto text-slate-900'
<Button onClick={() => handleSendTemplate(item)} size={'small'} type='link' key={'send'} icon={<SendOutlined />}> itemLayout='horizontal'
Send dataSource={dataSource}
</Button> rowKey={'name'}
</Flex> pagination={dataSource.length < 6 ? false : { position: 'bottom', pageSize: 5, align: 'start', size: 'small' }}
} renderItem={(item, index) => (
description={ <List.Item>
<> <List.Item.Meta
<div className='divide-dashed divide-x-0 divide-y divide-gray-300'> className=' '
<div className='text-slate-500'>{renderForm(item)}</div> title={
{item.components?.footer?.[0] ? <div className=''>{item.components.footer[0].text || ''}</div> : null} <Flex justify={'space-between'}>
</div> <>{item.components.header?.[0]?.text || item.name}</>
{/* <div className='text-right px-2'> <Button onClick={() => handleSendTemplate(item)} size={'small'} type='link' key={'send'} icon={<SendOutlined />}>
Send
</Button>
</Flex>
}
description={
<>
<div className='divide-dashed divide-x-0 divide-y divide-gray-300'>
<div className='text-slate-500'>{renderForm(item)}</div>
{item.components?.footer?.[0] ? <div className=''>{item.components.footer[0].text || ''}</div> : null}
</div>
{/* <div className='text-right px-2'>
<Button onClick={() => handleSendTemplate(item)} size={'small'} type='link' key={'send'} icon={<SendOutlined />}> <Button onClick={() => handleSendTemplate(item)} size={'small'} type='link' key={'send'} icon={<SendOutlined />}>
Send Send
</Button> </Button>
</div> */} </div> */}
</> </>
} }
/> />
</List.Item> </List.Item>
)} )}
/> />
</>
} }
title='🙋打招呼' title='🙋打招呼'
trigger='click' trigger='click'
open={openTemplates} open={openTemplates}
onOpenChange={handleOpenChange}> onOpenChange={setOpenTemplates}>
<Button type='primary' shape='circle' icon={<MessageOutlined />} size={'large'} disabled={disabled} /> <Button type='primary' shape='circle' icon={<MessageOutlined />} size={'large'} disabled={disabled} />
</Popover> </Popover>
</> </>

Loading…
Cancel
Save