Files
astuto/app/javascript/components/Post/PostEditForm.tsx

109 lines
2.6 KiB
TypeScript
Raw Normal View History

import * as React from 'react';
import I18n from 'i18n-js';
import PostBoardSelect from './PostBoardSelect';
import PostStatusSelect from './PostStatusSelect';
import IPostStatus from '../../interfaces/IPostStatus';
import IBoard from '../../interfaces/IBoard';
import Button from '../common/Button';
import Spinner from '../common/Spinner';
2022-08-22 10:38:03 +02:00
import ActionLink from '../common/ActionLink';
import { CancelIcon } from '../common/Icons';
interface Props {
title: string;
description?: string;
boardId: number;
postStatusId?: number;
isUpdating: boolean;
error: string;
handleChangeTitle(title: string): void;
handleChangeDescription(description: string): void;
handleChangeBoard(boardId: number): void;
handleChangePostStatus(postStatusId: number): void;
isPowerUser: boolean;
boards: Array<IBoard>;
postStatuses: Array<IPostStatus>;
toggleEditMode(): void;
handleUpdatePost(
title: string,
description: string,
boardId: number,
postStatusId: number,
): void;
}
const PostEditForm = ({
title,
description,
boardId,
postStatusId,
isUpdating,
error,
handleChangeTitle,
handleChangeDescription,
handleChangeBoard,
handleChangePostStatus,
isPowerUser,
boards,
postStatuses,
toggleEditMode,
handleUpdatePost,
}: Props) => (
<div className="postEditForm">
<div className="postHeader">
<input
type="text"
value={title}
onChange={e => handleChangeTitle(e.target.value)}
className="postTitle form-control"
/>
</div>
{
isPowerUser ?
<div className="postSettings">
<PostBoardSelect
boards={boards}
selectedBoardId={boardId}
handleChange={newBoardId => handleChangeBoard(newBoardId)}
/>
<PostStatusSelect
postStatuses={postStatuses}
selectedPostStatusId={postStatusId}
handleChange={newPostStatusId => handleChangePostStatus(newPostStatusId)}
/>
</div>
:
null
}
<textarea
value={description}
onChange={e => handleChangeDescription(e.target.value)}
rows={5}
className="postDescription form-control"
/>
<div className="postEditFormButtons">
2022-08-22 10:38:03 +02:00
<ActionLink onClick={toggleEditMode} icon={<CancelIcon />}>
{I18n.t('common.buttons.cancel')}
</ActionLink>
&nbsp;
<Button onClick={() => handleUpdatePost(title, description, boardId, postStatusId)}>
{ isUpdating ? <Spinner /> : I18n.t('common.buttons.update') }
</Button>
</div>
</div>
);
export default PostEditForm;