options.tsx 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  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. <CheckboxWithLabel
  38. label={t(`${I18N_PREFIX}.useSitemap`)}
  39. isChecked={payload.use_sitemap}
  40. onChange={handleChange('use_sitemap')}
  41. tooltip={t(`${I18N_PREFIX}.useSitemapTooltip`) as string}
  42. labelClassName='text-[13px] leading-[16px] font-medium text-text-secondary'
  43. />
  44. <div className='flex justify-between space-x-4'>
  45. <Field
  46. className='grow shrink-0'
  47. label={t(`${I18N_PREFIX}.limit`)}
  48. value={payload.limit}
  49. onChange={handleChange('limit')}
  50. isNumber
  51. isRequired
  52. />
  53. </div>
  54. </div>
  55. )
  56. }
  57. export default React.memo(Options)