|
'use client' |
|
import React, { useState } from 'react' |
|
import { useRouter } from 'next/navigation' |
|
import { useTranslation } from 'react-i18next' |
|
import { useContext } from 'use-context-selector' |
|
import s from './index.module.css' |
|
import cn from '@/utils/classnames' |
|
import Modal from '@/app/components/base/modal' |
|
import Input from '@/app/components/base/input' |
|
import Button from '@/app/components/base/button' |
|
|
|
import { ToastContext } from '@/app/components/base/toast' |
|
import { createEmptyDataset } from '@/service/datasets' |
|
|
|
type IProps = { |
|
show: boolean |
|
onHide: () => void |
|
} |
|
|
|
const EmptyDatasetCreationModal = ({ |
|
show = false, |
|
onHide, |
|
}: IProps) => { |
|
const [inputValue, setInputValue] = useState('') |
|
const { t } = useTranslation() |
|
const { notify } = useContext(ToastContext) |
|
const router = useRouter() |
|
|
|
const submit = async () => { |
|
if (!inputValue) { |
|
notify({ type: 'error', message: t('datasetCreation.stepOne.modal.nameNotEmpty') }) |
|
return |
|
} |
|
if (inputValue.length > 40) { |
|
notify({ type: 'error', message: t('datasetCreation.stepOne.modal.nameLengthInvalid') }) |
|
return |
|
} |
|
try { |
|
const dataset = await createEmptyDataset({ name: inputValue }) |
|
onHide() |
|
router.push(`/datasets/${dataset.id}/documents`) |
|
} |
|
catch (err) { |
|
notify({ type: 'error', message: t('datasetCreation.stepOne.modal.failed') }) |
|
} |
|
} |
|
|
|
return ( |
|
<Modal |
|
isShow={show} |
|
onClose={onHide} |
|
className={cn(s.modal, '!max-w-[520px]', 'px-8')} |
|
> |
|
<div className={s.modalHeader}> |
|
<div className={s.title}>{t('datasetCreation.stepOne.modal.title')}</div> |
|
<span className={s.close} onClick={onHide} /> |
|
</div> |
|
<div className={s.tip}>{t('datasetCreation.stepOne.modal.tip')}</div> |
|
<div className={s.form}> |
|
<div className={s.label}>{t('datasetCreation.stepOne.modal.input')}</div> |
|
<Input value={inputValue} placeholder={t('datasetCreation.stepOne.modal.placeholder') || ''} onChange={e => setInputValue(e.target.value)} /> |
|
</div> |
|
<div className='flex flex-row-reverse'> |
|
<Button className='w-24 ml-2' variant='primary' onClick={submit}>{t('datasetCreation.stepOne.modal.confirmButton')}</Button> |
|
<Button className='w-24' onClick={onHide}>{t('datasetCreation.stepOne.modal.cancelButton')}</Button> |
|
</div> |
|
</Modal> |
|
) |
|
} |
|
|
|
export default EmptyDatasetCreationModal |
|
|