diff --git a/src/components/proposalPreview.tsx b/src/components/proposalPreview.tsx
new file mode 100644
index 0000000..96a5d9b
--- /dev/null
+++ b/src/components/proposalPreview.tsx
@@ -0,0 +1,75 @@
+import { Internship } from "@/data";
+import React from "react";
+import { Paper, PaperProps, Typography, TypographyProps } from "@material-ui/core";
+import { useTranslation } from "react-i18next";
+import { createStyles, makeStyles } from "@material-ui/core/styles";
+import classNames from "classnames";
+
+export type ProposalPreviewProps = {
+ proposal: Internship;
+}
+
+const Label = ({ children }: TypographyProps) => {
+ return { children }
+}
+
+const useSectionStyles = makeStyles(theme => createStyles({
+ root: {
+ padding: theme.spacing(2),
+ marginTop: theme.spacing(3)
+ }
+}))
+
+const Section = ({ children, ...props }: PaperProps) => {
+ const classes = useSectionStyles();
+
+ return
+ { children }
+
+}
+
+export const ProposalPreview = ({ proposal }: ProposalPreviewProps) => {
+ const { t } = useTranslation();
+
+ return
+ { proposal.intern.name } { proposal.intern.surname }
+
+ { t('internship.intern.semester', { semester: proposal.intern.semester }) }
+ { ", " }
+ { t('internship.intern.album', { album: proposal.intern.albumNumber }) }
+
+
+
+
+ { proposal.type }
+
+
+
+
+
+ { t('internship.date-range', { start: proposal.startDate, end: proposal.endDate }) }
+
+
+ { t('internship.duration', { duration: 0 })}
+ { ", " }
+ { t('internship.hours', { hours: proposal.hours })}
+
+
+
+
+
+
+ { proposal.company.name }
+
+
+ NIP: { proposal.company.nip }
+
+
+
+
+
+ { t('internship.address.city', proposal.office.address) }
+ { t('internship.address.street', proposal.office.address) }
+
+
+}
diff --git a/src/forms/internship.tsx b/src/forms/internship.tsx
index 752bf28..fb5b9ca 100644
--- a/src/forms/internship.tsx
+++ b/src/forms/internship.tsx
@@ -182,13 +182,13 @@ export const InternshipForm: React.FunctionComponent = prop
return (
-
Dane osoby odbywającej praktykę
+
{ t('internship.intern-info') }
-
Rodzaj i program praktyki
+
{ t('internship.kind' )}
-
Czas trwania praktyki
+
{ t('internship.duration') }
-
Miejsce odbywania praktyki
+
{ t('internship.place') }
diff --git a/src/forms/plan.tsx b/src/forms/plan.tsx
index 24a8fa7..0c96203 100644
--- a/src/forms/plan.tsx
+++ b/src/forms/plan.tsx
@@ -32,7 +32,7 @@ export const PlanForm = () => {
-
+
{ t('forms.plan.dropzone-help') }
diff --git a/src/i18n.ts b/src/i18n.ts
index eb71721..c01bc57 100644
--- a/src/i18n.ts
+++ b/src/i18n.ts
@@ -5,6 +5,7 @@ import I18nextBrowserLanguageDetector from "i18next-browser-languagedetector";
import "moment/locale/pl"
import "moment/locale/en-gb"
import moment, { isDuration, isMoment } from "moment";
+import { convertToRoman } from "@/utils/numbers";
const resources = {
en: {
@@ -24,6 +25,10 @@ i18n
interpolation: {
escapeValue: false,
format: (value, format, lng) => {
+ if (typeof value === "number" && format == "roman") {
+ return convertToRoman(value);
+ }
+
if (isMoment(value)) {
return value.locale(lng || "pl").format(format || "DD MMM YYYY");
}
diff --git a/src/pages/index.ts b/src/pages/index.ts
index bb1a4b5..c5f71a3 100644
--- a/src/pages/index.ts
+++ b/src/pages/index.ts
@@ -1,7 +1,3 @@
export * from "./internship/proposal";
export * from "./errors/not-found"
export * from "./main"
-export { ProposalStep } from "@/pages/steps/proposal";
-export { ProposalComment } from "@/pages/steps/proposal";
-export { ProposalActions } from "@/pages/steps/proposal";
-export { ProposalStatus } from "@/pages/steps/proposal";
diff --git a/src/pages/internship/proposal.tsx b/src/pages/internship/proposal.tsx
index e45b4cb..09b8ca8 100644
--- a/src/pages/internship/proposal.tsx
+++ b/src/pages/internship/proposal.tsx
@@ -4,9 +4,15 @@ import { Link as RouterLink } from "react-router-dom";
import { route } from "@/routing";
import { InternshipForm } from "@/forms/internship";
import React from "react";
-import { ProposalComment } from "@/pages";
+import { ProposalComment } from "@/pages/steps/proposal";
+import { useTranslation } from "react-i18next";
+import { ProposalPreview } from "@/components/proposalPreview";
+import { useSelector } from "react-redux";
+import { Internship } from "@/data";
+import { AppState } from "@/state/reducer";
+import { internshipSerializationTransformer } from "@/serialization";
-export const InternshipProposalPage = () => {
+export const InternshipProposalFormPage = () => {
return
@@ -22,4 +28,23 @@ export const InternshipProposalPage = () => {
}
-export default InternshipProposalPage;
+export const InternshipProposalPreviewPage = () => {
+ const { t } = useTranslation();
+ const proposal = useSelector(state => state.proposal.proposal && internshipSerializationTransformer.reverseTransform(state.proposal.proposal));
+
+ return
+
+
+ Moja praktyka
+ Podgląd zgłoszenia
+
+ Moje zgłoszenie
+
+
+
+ { proposal && }
+
+
+}
+
+export default InternshipProposalFormPage;
diff --git a/src/pages/steps/proposal.tsx b/src/pages/steps/proposal.tsx
index b6f6cd1..f7646d9 100644
--- a/src/pages/steps/proposal.tsx
+++ b/src/pages/steps/proposal.tsx
@@ -18,7 +18,11 @@ const ProposalActions = () => {
const { t } = useTranslation();
const ReviewAction = (props: ButtonProps) =>
- } { ...props }>{ t('review') }
+ }
+ component={ RouterLink } to={ route("internship_proposal_preview") }
+ { ...props as any }>
+ { t('review') }
+
const FormAction = ({ children = t('steps.internship-proposal.form'), ...props }: ButtonProps) =>