mirror of https://github.com/boxyhq/jackson.git
95 lines
2.6 KiB
TypeScript
95 lines
2.6 KiB
TypeScript
import { useState } from 'react';
|
|
import classNames from 'classnames';
|
|
import { useRouter } from 'next/router';
|
|
import { successToast, errorToast } from '@components/Toaster';
|
|
import { LinkBack } from '@components/LinkBack';
|
|
import { useTranslation } from 'next-i18next';
|
|
|
|
const AddProject = () => {
|
|
const router = useRouter();
|
|
const { t } = useTranslation('common');
|
|
|
|
const [loading, setLoading] = useState(false);
|
|
const [project, setProject] = useState({
|
|
name: '',
|
|
});
|
|
|
|
const onChange = (event: React.ChangeEvent<HTMLInputElement | HTMLSelectElement>) => {
|
|
const target = event.target as HTMLInputElement;
|
|
|
|
setProject({
|
|
...project,
|
|
[target.id]: target.value,
|
|
});
|
|
};
|
|
|
|
const createProject = async (event: React.FormEvent) => {
|
|
event.preventDefault();
|
|
|
|
setLoading(true);
|
|
|
|
const response = await fetch('/api/admin/retraced/projects', {
|
|
method: 'POST',
|
|
headers: {
|
|
'Content-Type': 'application/json',
|
|
},
|
|
body: JSON.stringify(project),
|
|
});
|
|
|
|
setLoading(false);
|
|
|
|
if (!response.ok) {
|
|
errorToast('ERROR');
|
|
return;
|
|
}
|
|
|
|
const { data, error } = await response.json();
|
|
|
|
if (error) {
|
|
errorToast('ERROR');
|
|
return;
|
|
}
|
|
|
|
if (data && data.project) {
|
|
successToast(t('retraced_project_created'));
|
|
router.replace(`/admin/retraced/projects/${data.project.id}`);
|
|
}
|
|
};
|
|
|
|
return (
|
|
<>
|
|
<LinkBack href='/admin/retraced/projects' />
|
|
<div className='mt-5'>
|
|
<h2 className='mb-5 mt-5 font-bold text-gray-700 dark:text-white md:text-xl'>
|
|
{t('create_project')}
|
|
</h2>
|
|
<div className='min-w-[28rem] rounded border border-gray-200 bg-white p-3 dark:border-gray-700 dark:bg-gray-800 md:w-3/4 md:max-w-lg'>
|
|
<form onSubmit={createProject}>
|
|
<div className='flex flex-col space-y-3'>
|
|
<div className='form-control w-full'>
|
|
<label className='label'>
|
|
<span className='label-text'>{t('project_name')}</span>
|
|
</label>
|
|
<input
|
|
type='text'
|
|
id='name'
|
|
className='input-bordered input w-full'
|
|
required
|
|
onChange={onChange}
|
|
/>
|
|
</div>
|
|
<div>
|
|
<button className={classNames('btn-primary btn', loading ? 'loading' : '')}>
|
|
{t('create_project')}
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
</>
|
|
);
|
|
};
|
|
|
|
export default AddProject;
|