| 'use client' |
| import type { FC } from 'react' |
| import React, { useCallback } from 'react' |
| import { useTranslation } from 'react-i18next' |
| import CheckboxWithLabel from '../base/checkbox-with-label' |
| import Field from '../base/field' |
| import cn from '@/utils/classnames' |
| import type { CrawlOptions } from '@/models/datasets' |
|
|
| const I18N_PREFIX = 'datasetCreation.stepOne.website' |
|
|
| type Props = { |
| className?: string |
| payload: CrawlOptions |
| onChange: (payload: CrawlOptions) => void |
| } |
|
|
| const Options: FC<Props> = ({ |
| className = '', |
| payload, |
| onChange, |
| }) => { |
| const { t } = useTranslation() |
|
|
| const handleChange = useCallback((key: keyof CrawlOptions) => { |
| return (value: any) => { |
| onChange({ |
| ...payload, |
| [key]: value, |
| }) |
| } |
| }, [payload, onChange]) |
| return ( |
| <div className={cn(className, ' space-y-2')}> |
| <CheckboxWithLabel |
| label={t(`${I18N_PREFIX}.crawlSubPage`)} |
| isChecked={payload.crawl_sub_pages} |
| onChange={handleChange('crawl_sub_pages')} |
| /> |
| <div className='flex justify-between space-x-4'> |
| <Field |
| className='grow shrink-0' |
| label={t(`${I18N_PREFIX}.limit`)} |
| value={payload.limit} |
| onChange={handleChange('limit')} |
| isNumber |
| isRequired |
| /> |
| <Field |
| className='grow shrink-0' |
| label={t(`${I18N_PREFIX}.maxDepth`)} |
| value={payload.max_depth} |
| onChange={handleChange('max_depth')} |
| isNumber |
| tooltip={t(`${I18N_PREFIX}.maxDepthTooltip`)!} |
| /> |
| </div> |
| |
| <div className='flex justify-between space-x-4'> |
| <Field |
| className='grow shrink-0' |
| label={t(`${I18N_PREFIX}.excludePaths`)} |
| value={payload.excludes} |
| onChange={handleChange('excludes')} |
| placeholder='blog/*, /about/*' |
| /> |
| <Field |
| className='grow shrink-0' |
| label={t(`${I18N_PREFIX}.includeOnlyPaths`)} |
| value={payload.includes} |
| onChange={handleChange('includes')} |
| placeholder='articles/*' |
| /> |
| </div> |
| <CheckboxWithLabel |
| label={t(`${I18N_PREFIX}.extractOnlyMainContent`)} |
| isChecked={payload.only_main_content} |
| onChange={handleChange('only_main_content')} |
| /> |
| </div> |
| ) |
| } |
| export default React.memo(Options) |
|
|