diff --git a/frontend/src/Components/RejectionMail/RejectionMail.stories.tsx b/frontend/src/Components/RejectionMail/RejectionMail.stories.tsx deleted file mode 100644 index d8bdda98a..000000000 --- a/frontend/src/Components/RejectionMail/RejectionMail.stories.tsx +++ /dev/null @@ -1,11 +0,0 @@ -import type { ComponentMeta, ComponentStory } from '@storybook/react'; -import { RejectionMail } from './RejectionMail'; - -export default { - title: 'Components/RejectionMail', - component: RejectionMail, -} as ComponentMeta; - -const Template: ComponentStory = () => ; - -export const Basic = Template.bind({}); diff --git a/frontend/src/Components/RejectionMail/RejectionMail.tsx b/frontend/src/Components/RejectionMail/RejectionMail.tsx deleted file mode 100644 index b57b96b36..000000000 --- a/frontend/src/Components/RejectionMail/RejectionMail.tsx +++ /dev/null @@ -1,37 +0,0 @@ -import { t } from 'i18next'; -import { useState } from 'react'; -import { useParams } from 'react-router'; -import { toast } from 'react-toastify'; -//import { postRejectionMail } from '~/api'; -import { KEY } from '~/i18n/constants'; -import { Button } from '../Button'; -import { InputField } from '../InputField'; -import { TextAreaField } from '../TextAreaField'; - -export function RejectionMail() { - const [text, setText] = useState(''); - const [subject, setSubject] = useState(''); - const recruitmentId = useParams().recruitmentId; - - function handleSubmit() { - if (recruitmentId) { - //postRejectionMail(recruitmentId, { subject, text }); - toast.success(t(KEY.common_save_successful)); - } else { - toast.error(t(KEY.common_something_went_wrong)); - console.error('Recruitment id cannot be null'); - } - } - - return ( - <> - - - - - - - ); -} diff --git a/frontend/src/Components/RejectionMail/index.ts b/frontend/src/Components/RejectionMail/index.ts deleted file mode 100644 index 145523fe1..000000000 --- a/frontend/src/Components/RejectionMail/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { RejectionMail } from './RejectionMail'; diff --git a/frontend/src/PagesAdmin/RecruitmentGangOverviewPage/components/AppletContainer/AppletContainer.tsx b/frontend/src/PagesAdmin/RecruitmentGangOverviewPage/components/AppletContainer/AppletContainer.tsx index 8eea77d3d..5a55d6116 100644 --- a/frontend/src/PagesAdmin/RecruitmentGangOverviewPage/components/AppletContainer/AppletContainer.tsx +++ b/frontend/src/PagesAdmin/RecruitmentGangOverviewPage/components/AppletContainer/AppletContainer.tsx @@ -75,8 +75,10 @@ export function AppletContainer({ recruitmentId }: Props) { ), diff --git a/frontend/src/PagesAdmin/RecruitmentRejectionMailPage/RecruitmentRejectionMailPage.module.scss b/frontend/src/PagesAdmin/RecruitmentRejectionMailPage/RecruitmentRejectionMailPage.module.scss new file mode 100644 index 000000000..e40ca61f6 --- /dev/null +++ b/frontend/src/PagesAdmin/RecruitmentRejectionMailPage/RecruitmentRejectionMailPage.module.scss @@ -0,0 +1,28 @@ +.subheader { + padding: 0.2em; + font-size: 1.5em; + font-weight: 700; +} + +.subject { + font-size: 1.2em; + font-weight: 700; +} + +.preview { + padding-top: 1em; +} + +.textarea { + min-height: 14rem; +} + +.flex_row { + display: flex; + flex-direction: row; + gap: 1rem; +} + +.flex_item { + flex-basis: 50%; +} diff --git a/frontend/src/PagesAdmin/RecruitmentRejectionMailPage/RecruitmentRejectionMailPage.tsx b/frontend/src/PagesAdmin/RecruitmentRejectionMailPage/RecruitmentRejectionMailPage.tsx new file mode 100644 index 000000000..676505138 --- /dev/null +++ b/frontend/src/PagesAdmin/RecruitmentRejectionMailPage/RecruitmentRejectionMailPage.tsx @@ -0,0 +1,115 @@ +import { zodResolver } from '@hookform/resolvers/zod'; +import classNames from 'classnames'; +import { useForm } from 'react-hook-form'; +import { useTranslation } from 'react-i18next'; +import { z } from 'zod'; +import { Button, Form, FormField, FormItem, FormLabel, Input, Textarea } from '~/Components'; +import { FormControl, FormMessage } from '~/Components/Forms/Form'; +import { useTitle } from '~/hooks'; +import { KEY } from '~/i18n/constants'; +import { NON_EMPTY_STRING } from '~/schema/strings'; +import { lowerCapitalize } from '~/utils'; +import { AdminPageLayout } from '../AdminPageLayout/AdminPageLayout'; +import styles from './RecruitmentRejectionMailPage.module.scss'; + +export function RecruitmentRejectionMailPage() { + const { t } = useTranslation(); + const title = lowerCapitalize(t(KEY.recruitment_rejection_email)); + useTitle(title); + + const recjectionMailSchema = z.object({ + subject: NON_EMPTY_STRING, + textBeforeName: NON_EMPTY_STRING, + content: NON_EMPTY_STRING, + }); + + const form = useForm>({ + resolver: zodResolver(recjectionMailSchema), + defaultValues: { + subject: '', + textBeforeName: '', + content: '', + }, + }); + + function onSubmit(values: z.infer) { + // ISSUE #1727 - TODO: + // Connect backend rejection mail "SendRejectionMailView" and create a page with overview of the recipients + } + + return ( + +
+
+

+ {t(KEY.common_create)} {t(KEY.common_email).toLowerCase()} +

+
+
+
+

{t(KEY.recruitment_preview)}

+
+
+
+
+ +
+
+ ( + + {`${t(KEY.common_email_subject)}`} + + + + + + )} + /> + ( + + {`${t(KEY.recruitment_text_before_name)}`} + + + + + + )} + /> + ( + + {`${t(KEY.common_content)}`} + +