mirror of
https://git.mirrors.martin98.com/https://github.com/langgenius/dify.git
synced 2025-05-16 05:18:18 +08:00
61 lines
1.3 KiB
TypeScript
61 lines
1.3 KiB
TypeScript
import { memo } from 'react'
|
|
|
|
type VariableMenuItemProps = {
|
|
title: string
|
|
icon?: JSX.Element
|
|
extraElement?: JSX.Element
|
|
isSelected: boolean
|
|
queryString: string | null
|
|
onClick: () => void
|
|
onMouseEnter: () => void
|
|
setRefElement?: (element: HTMLDivElement) => void
|
|
}
|
|
export const VariableMenuItem = memo(({
|
|
title,
|
|
icon,
|
|
extraElement,
|
|
isSelected,
|
|
queryString,
|
|
onClick,
|
|
onMouseEnter,
|
|
setRefElement,
|
|
}: VariableMenuItemProps) => {
|
|
let before = title
|
|
let middle = ''
|
|
let after = ''
|
|
|
|
if (queryString) {
|
|
const regex = new RegExp(queryString, 'i')
|
|
const match = regex.exec(title)
|
|
|
|
if (match) {
|
|
before = title.substring(0, match.index)
|
|
middle = match[0]
|
|
after = title.substring(match.index + match[0].length)
|
|
}
|
|
}
|
|
|
|
return (
|
|
<div
|
|
className={`
|
|
flex items-center px-3 h-6 rounded-md hover:bg-primary-50 cursor-pointer
|
|
${isSelected && 'bg-primary-50'}
|
|
`}
|
|
tabIndex={-1}
|
|
ref={setRefElement}
|
|
onMouseEnter={onMouseEnter}
|
|
onClick={onClick}>
|
|
<div className='mr-2'>
|
|
{icon}
|
|
</div>
|
|
<div className='grow text-[13px] text-gray-900 truncate' title={title}>
|
|
{before}
|
|
<span className='text-[#2970FF]'>{middle}</span>
|
|
{after}
|
|
</div>
|
|
{extraElement}
|
|
</div>
|
|
)
|
|
})
|
|
VariableMenuItem.displayName = 'VariableMenuItem'
|