import { useSelector } from "react-redux";
import { AppState } from "@/state/reducer";
import { getSubmissionStatus, SubmissionState, SubmissionStatus } from "@/state/reducer/submission";
import { useTranslation } from "react-i18next";
import { Box, Button, ButtonProps, Dialog, DialogContent, DialogProps, DialogTitle, StepProps, Typography } from "@material-ui/core";
import { FileFind, FileUploadOutline } from "mdi-material-ui/index";
import { route } from "@/routing";
import { Link as RouterLink } from "react-router-dom";
import { Actions, Step } from "@/components";
import React, { HTMLProps, useState } from "react";
import { Alert, AlertTitle } from "@material-ui/lab";
import { ContactButton, Status } from "@/pages/steps/common";
import { useCurrentEdition, useDeadlines } from "@/hooks";
import { useSpacing } from "@/styles";
import { MultiChoiceValue, Report, ReportSchema, SingleChoiceValue, TextFieldValue } from "@/data/report";
import { createPortal } from "react-dom";
import { getInternshipReport } from "@/state/reducer/report";
import { Edition } from "@/data/edition";
import { FileInfo } from "@/components/fileinfo";
import { InternshipDocument } from "@/api/dto/internship-registration";
export type ReportPreviewProps = {
schema: ReportSchema,
report: Report,
}
export const ReportPreview = ({ schema, report }: ReportPreviewProps) => {
return <>{ schema.map(field => {
const value = report.fields[`field_${ field.id }`];
const { t } = useTranslation();
const Value = () => {
switch (field.type) {
case "checkbox":
return
{ ((value as MultiChoiceValue).map(selection => - { selection.pl }
)) }
case "radio":
case "select":
return { (value as SingleChoiceValue).pl }
case "long-text":
case "short-text":
return { value as TextFieldValue }
}
}
return <>
{ field.label.pl }
{ value ? : t("no-value") }
>
}) }>
}
export type ReportPreviewDialogProps = {
report: Report;
} & DialogProps;
export const ReportPreviewDialog = ({ report, ...props }: ReportPreviewDialogProps) => {
const edition = useCurrentEdition() as Edition;
const schema = edition.schema || [];
const { t } = useTranslation();
return
}
const ReportActions = () => {
const status = useSelector(state => getSubmissionStatus(state.report));
const { t } = useTranslation();
const FormAction = ({ children = t('steps.report.submit'), ...props }: ButtonProps) =>
} { ...props as any }>
{ children }
const ReviewAction = (props: ButtonProps) => {
const [open, setOpen,] = useState(false);
const report = useSelector(state => getInternshipReport(state.report) as Report);
return <>
}
onClick={ () => setOpen(true) }
{ ...props as any }>
{ t('review') }
{ createPortal(
setOpen(false) }/>,
document.getElementById("modals") as Element,
) }
>
}
switch (status) {
case "awaiting":
return
{ t('send-again') }
case "accepted":
return
{ t('send-again') }
case "declined":
return
{ t('send-again') }
case "draft":
return
default:
return
}
}
export const ReportComment = (props: HTMLProps) => {
const { comment, declined } = useSelector(state => state.report);
const { t } = useTranslation();
return comment ?
{ t('comments') }
: null
}
export const ReportStep = (props: StepProps) => {
const { t } = useTranslation();
const submission = useSelector(state => state.report);
const evaluation = useSelector(state => state.report.evaluation);
const spacing = useSpacing(2);
const edition = useCurrentEdition();
const status = getSubmissionStatus(submission);
const deadlines = useDeadlines();
const { sent, declined, comment } = submission;
return }>
{ t(`steps.report.info.${ status }`) }
{ evaluation &&
}
;
}