options.tsx 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. 'use client'
  2. import type { FC } from 'react'
  3. import React, { useCallback } from 'react'
  4. import { useTranslation } from 'react-i18next'
  5. import CheckboxWithLabel from '../base/checkbox-with-label'
  6. import Field from '../base/field'
  7. import cn from '@/utils/classnames'
  8. import type { CrawlOptions } from '@/models/datasets'
  9. const I18N_PREFIX = 'datasetCreation.stepOne.website'
  10. type Props = {
  11. className?: string
  12. payload: CrawlOptions
  13. onChange: (payload: CrawlOptions) => void
  14. }
  15. const Options: FC<Props> = ({
  16. className = '',
  17. payload,
  18. onChange,
  19. }) => {
  20. const { t } = useTranslation()
  21. const handleChange = useCallback((key: keyof CrawlOptions) => {
  22. return (value: any) => {
  23. onChange({
  24. ...payload,
  25. [key]: value,
  26. })
  27. }
  28. }, [payload, onChange])
  29. return (
  30. <div className={cn(className, ' space-y-2')}>
  31. <CheckboxWithLabel
  32. label={t(`${I18N_PREFIX}.crawlSubPage`)}
  33. isChecked={payload.crawl_sub_pages}
  34. onChange={handleChange('crawl_sub_pages')}
  35. labelClassName='text-[13px] leading-[16px] font-medium text-text-secondary'
  36. />
  37. <div className='flex justify-between space-x-4'>
  38. <Field
  39. className='grow shrink-0'
  40. label={t(`${I18N_PREFIX}.limit`)}
  41. value={payload.limit}
  42. onChange={handleChange('limit')}
  43. isNumber
  44. isRequired
  45. />
  46. <Field
  47. className='grow shrink-0'
  48. label={t(`${I18N_PREFIX}.maxDepth`)}
  49. value={payload.max_depth}
  50. onChange={handleChange('max_depth')}
  51. isNumber
  52. tooltip={t(`${I18N_PREFIX}.maxDepthTooltip`)!}
  53. />
  54. </div>
  55. <div className='flex justify-between space-x-4'>
  56. <Field
  57. className='grow shrink-0'
  58. label={t(`${I18N_PREFIX}.excludePaths`)}
  59. value={payload.excludes}
  60. onChange={handleChange('excludes')}
  61. placeholder='blog/*, /about/*'
  62. />
  63. <Field
  64. className='grow shrink-0'
  65. label={t(`${I18N_PREFIX}.includeOnlyPaths`)}
  66. value={payload.includes}
  67. onChange={handleChange('includes')}
  68. placeholder='articles/*'
  69. />
  70. </div>
  71. <CheckboxWithLabel
  72. label={t(`${I18N_PREFIX}.extractOnlyMainContent`)}
  73. isChecked={payload.only_main_content}
  74. onChange={handleChange('only_main_content')}
  75. labelClassName='text-[13px] leading-[16px] font-medium text-text-secondary'
  76. />
  77. </div>
  78. )
  79. }
  80. export default React.memo(Options)