| '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 | |