You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

dataset-card.tsx 2.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. import { MoreButton } from '@/components/more-button';
  2. import { RAGFlowAvatar } from '@/components/ragflow-avatar';
  3. import { Badge } from '@/components/ui/badge';
  4. import { Card, CardContent } from '@/components/ui/card';
  5. import { useNavigatePage } from '@/hooks/logic-hooks/navigate-hooks';
  6. import { IKnowledge } from '@/interfaces/database/knowledge';
  7. import { formatDate } from '@/utils/date';
  8. import { ChevronRight } from 'lucide-react';
  9. import { DatasetDropdown } from './dataset-dropdown';
  10. import { useDisplayOwnerName } from './use-display-owner';
  11. import { useRenameDataset } from './use-rename-dataset';
  12. export type DatasetCardProps = {
  13. dataset: IKnowledge;
  14. } & Pick<ReturnType<typeof useRenameDataset>, 'showDatasetRenameModal'>;
  15. export function DatasetCard({
  16. dataset,
  17. showDatasetRenameModal,
  18. }: DatasetCardProps) {
  19. const { navigateToDataset } = useNavigatePage();
  20. const displayOwnerName = useDisplayOwnerName();
  21. const owner = displayOwnerName(dataset.tenant_id, dataset.nickname);
  22. return (
  23. <Card
  24. key={dataset.id}
  25. className="w-40"
  26. onClick={navigateToDataset(dataset.id)}
  27. >
  28. <CardContent className="p-2.5 pt-2 group">
  29. <section className="flex justify-between mb-2">
  30. <div className="flex gap-2 items-center">
  31. <RAGFlowAvatar
  32. className="size-6 rounded-lg"
  33. avatar={dataset.avatar}
  34. name={dataset.name || 'CN'}
  35. ></RAGFlowAvatar>
  36. {owner && (
  37. <Badge className="h-5 rounded-sm px-1 bg-background-badge text-text-badge">
  38. {owner}
  39. </Badge>
  40. )}
  41. </div>
  42. <DatasetDropdown
  43. showDatasetRenameModal={showDatasetRenameModal}
  44. dataset={dataset}
  45. >
  46. <MoreButton></MoreButton>
  47. </DatasetDropdown>
  48. </section>
  49. <div className="flex justify-between items-end">
  50. <div className="w-full">
  51. <h3 className="text-lg font-semibold mb-2 line-clamp-1">
  52. {dataset.name}
  53. </h3>
  54. <p className="text-xs text-text-sub-title">
  55. {dataset.doc_num} files
  56. </p>
  57. <p className="text-xs text-text-sub-title">
  58. {formatDate(dataset.update_time)}
  59. </p>
  60. </div>
  61. </div>
  62. </CardContent>
  63. </Card>
  64. );
  65. }
  66. export function SeeAllCard() {
  67. const { navigateToDatasetList } = useNavigatePage();
  68. return (
  69. <Card
  70. className="bg-colors-background-inverse-weak w-40"
  71. onClick={navigateToDatasetList}
  72. >
  73. <CardContent className="p-2.5 pt-1 w-full h-full flex items-center justify-center gap-1.5 text-text-sub-title">
  74. See All <ChevronRight className="size-4" />
  75. </CardContent>
  76. </Card>
  77. );
  78. }