Files
astuto/app/javascript/components/SiteSettings/PostStatuses/PostStatusForm.tsx

100 lines
2.0 KiB
TypeScript
Raw Normal View History

2022-05-01 18:00:38 +02:00
import * as React from 'react';
2022-07-22 16:50:36 +02:00
import { useForm, SubmitHandler } from 'react-hook-form';
import I18n from 'i18n-js';
2022-05-01 18:00:38 +02:00
import Button from '../../common/Button';
2022-05-01 18:00:38 +02:00
2022-05-07 10:57:27 +02:00
import padStart from '../../../helpers/padStart';
2022-05-01 18:00:38 +02:00
interface Props {
mode: 'create' | 'update';
id?: number;
name?: string;
color?: string;
2022-07-22 16:50:36 +02:00
handleCreate?(
2022-05-01 18:00:38 +02:00
name: string,
color: string,
onSuccess: Function,
): void;
handleUpdate?(
id: number,
name: string,
color: string,
): void;
}
2022-07-22 16:50:36 +02:00
interface IPostStatusForm {
2022-05-01 18:00:38 +02:00
name: string;
color: string;
}
2022-07-22 16:50:36 +02:00
const PostStatusForm = ({
mode,
id,
name,
color,
handleCreate,
handleUpdate,
}: Props) => {
const getRandomColor = () =>
'#' + padStart((Math.random() * 0xFFFFFF << 0).toString(16), 6, '0');
const {
register,
handleSubmit,
reset,
formState: { isValid },
} = useForm<IPostStatusForm>({
mode: 'onChange',
defaultValues: {
name: name || '',
color: color || getRandomColor(),
},
});
const onSubmit: SubmitHandler<IPostStatusForm> = data => {
if (mode === 'create') {
handleCreate(
data.name,
data.color,
() => reset({ name: '', color: getRandomColor() })
2022-05-01 18:00:38 +02:00
);
} else {
2022-07-22 16:50:36 +02:00
handleUpdate(id, data.name, data.color);
2022-05-01 18:00:38 +02:00
}
}
2022-07-22 16:50:36 +02:00
return (
<form onSubmit={handleSubmit(onSubmit)} className="postStatusForm">
<input
{...register('name', { required: true })}
placeholder={I18n.t('site_settings.post_statuses.form.name')}
autoFocus={mode === 'update'}
2022-07-22 16:50:36 +02:00
className="formControl"
/>
<input
{...register('color', { required: true })}
type="color"
className="formControl postStatusColorInput"
/>
<Button
onClick={() => null}
className="newPostStatusButton"
disabled={!isValid}
>
{
mode === 'create' ?
I18n.t('common.buttons.create')
:
I18n.t('common.buttons.update')
}
</Button>
</form>
);
2022-05-01 18:00:38 +02:00
}
export default PostStatusForm;