您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. import { useState } from 'react'
  2. import { useTranslation } from 'react-i18next'
  3. import { XMarkIcon } from '@heroicons/react/24/outline'
  4. import NotionPageSelector from '../base'
  5. import s from './index.module.css'
  6. import type { NotionPage } from '@/models/common'
  7. import cn from '@/utils/classnames'
  8. import Modal from '@/app/components/base/modal'
  9. import { noop } from 'lodash-es'
  10. type NotionPageSelectorModalProps = {
  11. isShow: boolean
  12. onClose: () => void
  13. onSave: (selectedPages: NotionPage[]) => void
  14. datasetId: string
  15. }
  16. const NotionPageSelectorModal = ({
  17. isShow,
  18. onClose,
  19. onSave,
  20. datasetId,
  21. }: NotionPageSelectorModalProps) => {
  22. const { t } = useTranslation()
  23. const [selectedPages, setSelectedPages] = useState<NotionPage[]>([])
  24. const handleClose = () => {
  25. onClose()
  26. }
  27. const handleSelectPage = (newSelectedPages: NotionPage[]) => {
  28. setSelectedPages(newSelectedPages)
  29. }
  30. const handleSave = () => {
  31. onSave(selectedPages)
  32. }
  33. return (
  34. <Modal
  35. className={s.modal}
  36. isShow={isShow}
  37. onClose={noop}
  38. >
  39. <div className='mb-6 flex h-8 items-center justify-between'>
  40. <div className='text-xl font-semibold text-gray-900'>{t('common.dataSource.notion.selector.addPages')}</div>
  41. <div
  42. className='-mr-2 flex h-8 w-8 cursor-pointer items-center justify-center'
  43. onClick={handleClose}>
  44. <XMarkIcon className='h-4 w-4' />
  45. </div>
  46. </div>
  47. <NotionPageSelector
  48. onSelect={handleSelectPage}
  49. canPreview={false}
  50. datasetId={datasetId}
  51. />
  52. <div className='mt-8 flex justify-end'>
  53. <div className={s.operate} onClick={handleClose}>{t('common.operation.cancel')}</div>
  54. <div className={cn(s.operate, s['operate-save'])} onClick={handleSave}>{t('common.operation.save')}</div>
  55. </div>
  56. </Modal>
  57. )
  58. }
  59. export default NotionPageSelectorModal