document-list.tsx 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. 'use client'
  2. import type { FC } from 'react'
  3. import React, { useCallback } from 'react'
  4. import FileIcon from '../document-file-icon'
  5. import cn from '@/utils/classnames'
  6. import type { DocumentItem } from '@/models/datasets'
  7. type Props = {
  8. className?: string
  9. list: DocumentItem[]
  10. onChange: (value: DocumentItem) => void
  11. }
  12. const DocumentList: FC<Props> = ({
  13. className,
  14. list,
  15. onChange,
  16. }) => {
  17. const handleChange = useCallback((item: DocumentItem) => {
  18. return () => onChange(item)
  19. }, [onChange])
  20. return (
  21. <div className={cn(className)}>
  22. {list.map((item) => {
  23. const { id, name, extension } = item
  24. return (
  25. <div
  26. key={id}
  27. className='flex items-center h-8 px-2 hover:bg-state-base-hover rounded-lg space-x-2 cursor-pointer'
  28. onClick={handleChange(item)}
  29. >
  30. <FileIcon name={item.name} extension={extension} size='md' />
  31. <div className='truncate text-text-secondary text-sm'>{name}</div>
  32. </div>
  33. )
  34. })}
  35. </div>
  36. )
  37. }
  38. export default React.memo(DocumentList)