keywords.tsx 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. import React, { type FC } from 'react'
  2. import { useTranslation } from 'react-i18next'
  3. import classNames from '@/utils/classnames'
  4. import type { SegmentDetailModel } from '@/models/datasets'
  5. import TagInput from '@/app/components/base/tag-input'
  6. type IKeywordsProps = {
  7. segInfo?: Partial<SegmentDetailModel> & { id: string }
  8. className?: string
  9. keywords: string[]
  10. onKeywordsChange: (keywords: string[]) => void
  11. isEditMode?: boolean
  12. actionType?: 'edit' | 'add' | 'view'
  13. }
  14. const Keywords: FC<IKeywordsProps> = ({
  15. segInfo,
  16. className,
  17. keywords,
  18. onKeywordsChange,
  19. isEditMode,
  20. actionType = 'view',
  21. }) => {
  22. const { t } = useTranslation()
  23. return (
  24. <div className={classNames('flex flex-col', className)}>
  25. <div className='text-text-tertiary system-xs-medium-uppercase'>{t('datasetDocuments.segment.keywords')}</div>
  26. <div className='text-text-tertiary w-full max-h-[200px] overflow-auto flex flex-wrap gap-1'>
  27. {(!segInfo?.keywords?.length && actionType === 'view')
  28. ? '-'
  29. : (
  30. <TagInput
  31. items={keywords}
  32. onChange={newKeywords => onKeywordsChange(newKeywords)}
  33. disableAdd={!isEditMode}
  34. disableRemove={!isEditMode || (keywords.length === 1)}
  35. />
  36. )
  37. }
  38. </div>
  39. </div>
  40. )
  41. }
  42. Keywords.displayName = 'Keywords'
  43. export default React.memo(Keywords)