diff options
| author | Armand Philippot <git@armandphilippot.com> | 2022-05-15 17:45:41 +0200 |
|---|---|---|
| committer | Armand Philippot <git@armandphilippot.com> | 2022-05-15 19:06:42 +0200 |
| commit | c95cce04393080a52a54191cff7be8fec68af4b0 (patch) | |
| tree | 1022bc574c8fc8e657be922b26c1cf16cbfd9071 /src/components/organisms/forms | |
| parent | 235fe67d770f83131c9ec10b99012319440db690 (diff) | |
chore: add Article pages
Diffstat (limited to 'src/components/organisms/forms')
| -rw-r--r-- | src/components/organisms/forms/comment-form.stories.tsx | 30 | ||||
| -rw-r--r-- | src/components/organisms/forms/comment-form.test.tsx | 7 | ||||
| -rw-r--r-- | src/components/organisms/forms/comment-form.tsx | 19 |
3 files changed, 39 insertions, 17 deletions
diff --git a/src/components/organisms/forms/comment-form.stories.tsx b/src/components/organisms/forms/comment-form.stories.tsx index f66d35c..8b11df7 100644 --- a/src/components/organisms/forms/comment-form.stories.tsx +++ b/src/components/organisms/forms/comment-form.stories.tsx @@ -1,13 +1,19 @@ import { ComponentMeta, ComponentStory } from '@storybook/react'; -import { IntlProvider } from 'react-intl'; import CommentForm from './comment-form'; +const saveComment = async () => { + /** Do nothing. */ +}; + /** * CommentForm - Storybook Meta */ export default { title: 'Organisms/Forms', component: CommentForm, + args: { + saveComment, + }, argTypes: { className: { control: { @@ -35,6 +41,16 @@ export default { required: false, }, }, + parentId: { + control: { + type: null, + }, + description: 'The parent id if it is a reply.', + type: { + name: 'number', + required: false, + }, + }, saveComment: { control: { type: null, @@ -74,13 +90,6 @@ export default { }, }, }, - decorators: [ - (Story) => ( - <IntlProvider locale="en"> - <Story /> - </IntlProvider> - ), - ], } as ComponentMeta<typeof CommentForm>; const Template: ComponentStory<typeof CommentForm> = (args) => ( @@ -91,8 +100,3 @@ const Template: ComponentStory<typeof CommentForm> = (args) => ( * Forms Stories - Comment */ export const Comment = Template.bind({}); -Comment.args = { - saveComment: (reset: () => void) => { - reset(); - }, -}; diff --git a/src/components/organisms/forms/comment-form.test.tsx b/src/components/organisms/forms/comment-form.test.tsx index 0d387b5..c67ad6b 100644 --- a/src/components/organisms/forms/comment-form.test.tsx +++ b/src/components/organisms/forms/comment-form.test.tsx @@ -1,17 +1,20 @@ import { render, screen } from '@test-utils'; import CommentForm from './comment-form'; +const saveComment = async () => { + /** Do nothing. */ +}; const title = 'Cum voluptas voluptatibus'; describe('CommentForm', () => { it('renders a form', () => { - render(<CommentForm saveComment={() => null} />); + render(<CommentForm saveComment={saveComment} />); expect(screen.getByRole('form')).toBeInTheDocument(); }); it('renders an optional title', () => { render( - <CommentForm saveComment={() => null} title={title} titleLevel={2} /> + <CommentForm saveComment={saveComment} title={title} titleLevel={2} /> ); expect( screen.getByRole('heading', { level: 2, name: title }) diff --git a/src/components/organisms/forms/comment-form.tsx b/src/components/organisms/forms/comment-form.tsx index d7cb0f5..9e0abdf 100644 --- a/src/components/organisms/forms/comment-form.tsx +++ b/src/components/organisms/forms/comment-form.tsx @@ -7,6 +7,14 @@ import { FC, ReactNode, useState } from 'react'; import { useIntl } from 'react-intl'; import styles from './comment-form.module.scss'; +export type CommentFormData = { + comment: string; + email: string; + name: string; + parentId?: number; + website?: string; +}; + export type CommentFormProps = { /** * Set additional classnames to the form wrapper. @@ -17,10 +25,14 @@ export type CommentFormProps = { */ Notice?: ReactNode; /** + * The comment parent id. + */ + parentId?: number; + /** * A callback function to save comment. It takes a function as parameter to * reset the form. */ - saveComment: (reset: () => void) => void; + saveComment: (data: CommentFormData, reset: () => void) => Promise<void>; /** * The form title. */ @@ -34,6 +46,7 @@ export type CommentFormProps = { const CommentForm: FC<CommentFormProps> = ({ className = '', Notice, + parentId, saveComment, title, titleLevel = 2, @@ -95,7 +108,9 @@ const CommentForm: FC<CommentFormProps> = ({ */ const submitHandler = () => { setIsSubmitting(true); - saveComment(resetForm); + saveComment({ comment, email, name, parentId, website }, resetForm).then( + () => setIsSubmitting(false) + ); }; return ( |
