Passed
Push — feature/azure-webapp-pipeline-... ( ed5482...50ec4b )
by Grant
08:00 queued 16s
created

resources/assets/js/components/ApplicationReview/ApplicationTimelineReviewRoot.tsx   A

Complexity

Total Complexity 2
Complexity/F 0

Size

Lines of Code 146
Function Count 0

Duplication

Duplicated Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
wmc 2
eloc 121
mnd 2
bc 2
fnc 0
dl 0
loc 146
rs 10
bpm 0
cpm 0
noi 0
c 0
b 0
f 0
1
/* eslint-disable camelcase */
2
import * as React from "react";
3
import ReactDOM from "react-dom";
4
import { useIntl } from "react-intl";
5
import { useDispatch } from "react-redux";
6
import { DispatchType } from "../../configureStore";
7
import {
8
  useApplicationUser,
9
  useCriteria,
10
  useExperiences,
11
  useExperienceSkills,
12
  useFetchReviewApplicationData,
13
  useJob,
14
  useJobApplicationAnswers,
15
  useJobPosterQuestions,
16
  useReviewedApplication,
17
  useSkills,
18
} from "../../hooks/applicationHooks";
19
import { Portal } from "../../models/app";
20
import { ApplicationReview } from "../../models/types";
21
import { loadingMessages } from "../Application/applicationMessages";
22
import ApplicationPreview from "../Application/Review/ApplicationPreview";
23
import RootContainer from "../RootContainer";
24
import ApplicationReviewWithNav from "./ApplicationReviewWithNav";
25
import { updateApplicationReview } from "../../store/Application/applicationActions";
26
27
interface ApplicationTimelineReviewRootProps {
28
  applicationId: number;
29
  applicantUserId: number;
30
  jobId: number;
31
  portal: Portal;
32
}
33
34
const ApplicationTimelineReviewRoot: React.FunctionComponent<ApplicationTimelineReviewRootProps> = ({
35
  applicationId,
36
  applicantUserId,
37
  jobId,
38
  portal,
39
}) => {
40
  const intl = useIntl();
41
  const dispatch = useDispatch<DispatchType>();
42
43
  const {
44
    experiencesLoaded,
45
    experienceConstantsLoaded,
46
    skillsLoaded,
47
  } = useFetchReviewApplicationData(
48
    applicantUserId,
49
    applicationId,
50
    jobId,
51
    dispatch,
52
  );
53
54
  const application = useReviewedApplication(applicationId);
55
  const applicantUser = useApplicationUser(applicationId);
56
  const job = useJob(jobId);
57
  const criteria = useCriteria(jobId);
58
  const experiences = useExperiences(applicationId, application);
59
  const experienceSkills = useExperienceSkills(applicationId, application);
60
  const skills = useSkills();
61
  const jobQuestions = useJobPosterQuestions(jobId);
62
  const jobApplicationAnswers = useJobApplicationAnswers(applicationId);
63
  const handleUpdateApplicationReview = async (
64
    editedApplicationReview: ApplicationReview,
65
  ): Promise<void> => {
66
    await dispatch(updateApplicationReview(editedApplicationReview));
67
  };
68
  const showLoadingState =
69
    application === null ||
70
    job === null ||
71
    !experiencesLoaded ||
72
    !experienceConstantsLoaded ||
73
    !skillsLoaded;
74
75
  return (
76
    <div data-clone>
77
      {showLoadingState && (
78
        <h2
79
          data-c-heading="h2"
80
          data-c-align="center"
81
          data-c-padding="top(2) bottom(2)"
82
        >
83
          {intl.formatMessage(loadingMessages.loading)}
84
        </h2>
85
      )}
86
      {!showLoadingState &&
87
        application !== null &&
88
        job !== null &&
89
        applicantUser !== null && (
90
          <div className="applicant-review container--layout-xl">
91
            <ApplicationReviewWithNav
92
              application={application}
93
              handleUpdateApplicationReview={handleUpdateApplicationReview}
94
              portal={portal}
95
            />
96
            <ApplicationPreview
97
              application={application}
98
              criteria={criteria}
99
              experiences={experiences}
100
              experienceSkills={experienceSkills}
101
              experienceViewState="education"
102
              experienceViewButtonOrder={["education", "skills", "experience"]}
103
              job={job}
104
              jobApplicationAnswers={jobApplicationAnswers}
105
              jobQuestions={jobQuestions}
106
              skills={skills}
107
              user={applicantUser}
108
              isSubmitted
109
            />
110
          </div>
111
        )}
112
    </div>
113
  );
114
};
115
116
export default ApplicationTimelineReviewRoot;
117
118
const container = document.getElementById(
119
  "application-timeline-review-container",
120
);
121
if (container !== null) {
122
  if (
123
    "applicationId" in container.dataset &&
124
    "applicantUserId" in container.dataset &&
125
    "portal" in container.dataset &&
126
    "jobId" in container.dataset
127
  ) {
128
    const applicationId = Number(container.dataset.applicationId as string);
129
    const applicantUserId = Number(container.dataset.applicantUserId as string);
130
    const jobId = Number(container.dataset.jobId as string);
131
    const portal = container.dataset.portal as Portal;
132
133
    ReactDOM.render(
134
      <RootContainer>
135
        <ApplicationTimelineReviewRoot
136
          applicationId={applicationId}
137
          applicantUserId={applicantUserId}
138
          jobId={jobId}
139
          portal={portal}
140
        />
141
      </RootContainer>,
142
      container,
143
    );
144
  }
145
}
146