doc-list.tsx 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. import { IDocument } from '@/types/knowledge';
  2. import { Button, Tooltip } from 'antd';
  3. import { useRouter } from 'next/router';
  4. import FileStatusIcon from '../common/FileStatusIcon';
  5. interface IProps {
  6. documents: IDocument[];
  7. dbParam?: string;
  8. }
  9. export default function DocList(props: IProps) {
  10. const { documents, dbParam } = props;
  11. const router = useRouter();
  12. const handleClick = (id: number) => {
  13. router.push(`/knowledge/chunk/?spaceName=${dbParam}&id=${id}`);
  14. };
  15. if (!documents?.length) return null;
  16. return (
  17. <div className='absolute flex overflow-scroll h-12 top-[-35px] w-full z-10'>
  18. {documents.map(doc => {
  19. let color;
  20. switch (doc.status) {
  21. case 'RUNNING':
  22. color = '#2db7f5';
  23. break;
  24. case 'FINISHED':
  25. color = '#87d068';
  26. break;
  27. case 'FAILED':
  28. color = '#f50';
  29. break;
  30. default:
  31. color = '#87d068';
  32. break;
  33. }
  34. return (
  35. <Tooltip key={doc.id} title={doc.result}>
  36. <Button
  37. style={{ color }}
  38. onClick={() => {
  39. handleClick(doc.id);
  40. }}
  41. className='shrink flex items-center mr-3'
  42. >
  43. <FileStatusIcon document={doc} />
  44. {doc.doc_name}
  45. </Button>
  46. </Tooltip>
  47. );
  48. })}
  49. </div>
  50. );
  51. }