refactor: Update event handling in Checkbox and Radio components; optimize Online Drive file filtering

feat/rag-2
twwu 11 months ago
parent 2ecbcd6a7f
commit 9ce0c69687

@ -5,19 +5,19 @@ import IndeterminateIcon from './assets/indeterminate-icon'
type CheckboxProps = { type CheckboxProps = {
id?: string id?: string
checked?: boolean checked?: boolean
onCheck?: () => void onCheck?: (event: React.MouseEvent<HTMLDivElement>) => void
className?: string className?: string
disabled?: boolean disabled?: boolean
indeterminate?: boolean indeterminate?: boolean
} }
const Checkbox = ({ const Checkbox = ({
id, id,
checked, checked,
onCheck, onCheck,
className, className,
disabled, disabled,
indeterminate, indeterminate,
}: CheckboxProps) => { }: CheckboxProps) => {
const checkClassName = (checked || indeterminate) const checkClassName = (checked || indeterminate)
? 'bg-components-checkbox-bg text-components-checkbox-icon hover:bg-components-checkbox-bg-hover' ? 'bg-components-checkbox-bg text-components-checkbox-icon hover:bg-components-checkbox-bg-hover'
@ -35,10 +35,10 @@ const Checkbox = ({
disabled && disabledClassName, disabled && disabledClassName,
className, className,
)} )}
onClick={() => { onClick={(event) => {
if (disabled) if (disabled)
return return
onCheck?.() onCheck?.(event)
}} }}
data-testid={`checkbox-${id}`} data-testid={`checkbox-${id}`}
> >

@ -6,7 +6,7 @@ import cn from '@/utils/classnames'
type Props = { type Props = {
isChecked: boolean isChecked: boolean
disabled?: boolean disabled?: boolean
onCheck?: () => void onCheck?: (event: React.MouseEvent<HTMLDivElement>) => void
className?: string className?: string
} }
@ -27,9 +27,9 @@ const RadioUI: FC<Props> = ({
!disabled && 'bg-components-radio-bg shadow-xs shadow-shadow-shadow-3 hover:bg-components-radio-bg-hover', !disabled && 'bg-components-radio-bg shadow-xs shadow-shadow-shadow-3 hover:bg-components-radio-bg-hover',
className, className,
)} )}
onClick={() => { onClick={(event) => {
if (disabled) return if (disabled) return
onCheck?.() onCheck?.(event)
}} }}
/> />
) )

@ -31,7 +31,8 @@ const Item = ({
const Wrapper = disabled ? Tooltip : React.Fragment const Wrapper = disabled ? Tooltip : React.Fragment
const handleSelect = useCallback(() => { const handleSelect = useCallback((e: React.MouseEvent<HTMLDivElement>) => {
e.stopPropagation()
onSelect(file) onSelect(file)
}, [file, onSelect]) }, [file, onSelect])

@ -1,6 +1,6 @@
import type { DataSourceNodeType } from '@/app/components/workflow/nodes/data-source/types' import type { DataSourceNodeType } from '@/app/components/workflow/nodes/data-source/types'
import Header from './header' import Header from './header'
import { useCallback, useEffect, useState } from 'react' import { useCallback, useEffect, useMemo, useState } from 'react'
import FileList from './file-list' import FileList from './file-list'
import type { OnlineDriveFile } from '@/models/pipeline' import type { OnlineDriveFile } from '@/models/pipeline'
import { DatasourceType, OnlineDriveFileType } from '@/models/pipeline' import { DatasourceType, OnlineDriveFileType } from '@/models/pipeline'
@ -79,6 +79,12 @@ const OnlineDrive = ({
// eslint-disable-next-line react-hooks/exhaustive-deps // eslint-disable-next-line react-hooks/exhaustive-deps
}, [bucket, prefix, startAfter]) }, [bucket, prefix, startAfter])
const onlineDriveFileList = useMemo(() => {
if (keywords)
return fileList.filter(file => file.key.toLowerCase().includes(keywords.toLowerCase()))
return fileList
}, [fileList, keywords])
const updateKeywords = useCallback((keywords: string) => { const updateKeywords = useCallback((keywords: string) => {
setKeywords(keywords) setKeywords(keywords)
}, [setKeywords]) }, [setKeywords])
@ -123,14 +129,14 @@ const OnlineDrive = ({
docLink='https://docs.dify.ai/' docLink='https://docs.dify.ai/'
/> />
<FileList <FileList
fileList={fileList} fileList={onlineDriveFileList}
selectedFileList={selectedFileList} selectedFileList={selectedFileList}
prefix={prefix} prefix={prefix}
keywords={keywords} keywords={keywords}
bucket={bucket} bucket={bucket}
resetKeywords={resetPrefix} resetKeywords={resetPrefix}
updateKeywords={updateKeywords} updateKeywords={updateKeywords}
searchResultsLength={fileList.length} searchResultsLength={onlineDriveFileList.length}
handleSelectFile={handleSelectFile} handleSelectFile={handleSelectFile}
handleOpenFolder={handleOpenFolder} handleOpenFolder={handleOpenFolder}
isInPipeline={isInPipeline} isInPipeline={isInPipeline}

Loading…
Cancel
Save