Passed
Push — task/manager-application-revie... ( e0bd5c )
by Yonathan
08:18
created

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

Complexity

Total Complexity 3
Complexity/F 0

Size

Lines of Code 157
Function Count 0

Duplication

Duplicated Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
wmc 3
eloc 123
c 0
b 0
f 0
dl 0
loc 157
rs 10
mnd 3
bc 3
fnc 0
bpm 0
cpm 0
noi 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 { getLocale } from "../../helpers/localize";
8
import { useFetchSkills } from "../../hooks/applicationHooks";
9
import { Portal } from "../../models/app";
10
import {
11
  Application,
12
  Criteria,
13
  Experience,
14
  ExperienceSkill,
15
  Job,
16
  JobApplicationAnswer,
17
  JobPosterQuestion,
18
  ReviewStatus,
19
  User,
20
} from "../../models/types";
21
import Review from "../Application/Review/Review";
22
import RootContainer from "../RootContainer";
23
import ApplicationReviewNav from "./ApplicationReviewRoot";
24
25
interface ApplicationTimelineReviewRootProps {
26
  applicantUserData: User;
27
  application: Application;
28
  criteria: Criteria[];
29
  experiences: Experience[];
30
  experienceSkills: ExperienceSkill[];
31
  job: Job;
32
  jobApplicationAnswers: JobApplicationAnswer[];
33
  jobQuestions: JobPosterQuestion[];
34
  reviewStatuses: ReviewStatus[];
35
  portal: Portal;
36
}
37
38
const ApplicationTimelineRootReview: React.FunctionComponent<ApplicationTimelineReviewRootProps> = ({
39
  applicantUserData,
40
  application,
41
  criteria,
42
  experiences,
43
  experienceSkills,
44
  job,
45
  jobApplicationAnswers,
46
  jobQuestions,
47
  portal,
48
  reviewStatuses,
49
}) => {
50
  const intl = useIntl();
51
  const locale = getLocale(intl.locale);
52
  const dispatch = useDispatch<DispatchType>();
53
  const skills = useFetchSkills(dispatch);
54
  const managerView = portal === "manager" || portal === "hr";
55
56
  return (
57
    <div data-clone>
58
      {application !== null && job !== null && applicantUserData !== null && (
59
        <>
60
          <ApplicationReviewNav
61
            initApplication={application}
62
            portal={portal}
63
            reviewStatuses={reviewStatuses}
64
          />
65
          <Review
66
            application={application}
67
            criteria={criteria}
68
            experiences={experiences}
69
            experienceSkills={experienceSkills}
70
            experienceViewState="education"
71
            experienceViewButtonOrder={["education", "skills", "experience"]}
72
            handleContinue={() => {}}
73
            handleQuit={() => {}}
74
            handleReturn={() => {}}
75
            job={job}
76
            jobApplicationAnswers={jobApplicationAnswers}
77
            jobQuestions={jobQuestions}
78
            skills={skills}
79
            user={applicantUserData}
80
            managerView={managerView}
81
          />
82
        </>
83
      )}
84
    </div>
85
  );
86
};
87
88
const renderApplicationReviewRoot = (
89
  container: HTMLElement,
90
  portal: Portal,
91
): void => {
92
  if (
93
    container.hasAttribute("data-application") &&
94
    container.hasAttribute("data-job") &&
95
    container.hasAttribute("data-review-statuses")
96
  ) {
97
    const applicantUserData = JSON.parse(
98
      container.getAttribute("data-applicant-user") as string,
99
    );
100
    const application = JSON.parse(
101
      container.getAttribute("data-application") as string,
102
    );
103
    const criteria = JSON.parse(
104
      container.getAttribute("data-criteria") as string,
105
    );
106
    const experiences = JSON.parse(
107
      container.getAttribute("data-experiences") as string,
108
    );
109
    const experienceSkills = JSON.parse(
110
      container.getAttribute("data-experience-skills") as string,
111
    );
112
    const job = JSON.parse(container.getAttribute("data-job") as string);
113
    const jobApplicationAnswers = JSON.parse(
114
      container.getAttribute("data-job-application-answers") as string,
115
    );
116
    const jobQuestions = JSON.parse(
117
      container.getAttribute("data-job-questions") as string,
118
    );
119
    const reviewStatuses = JSON.parse(
120
      container.getAttribute("data-review-statuses") as string,
121
    );
122
    ReactDOM.render(
123
      <RootContainer>
124
        <ApplicationTimelineRootReview
125
          applicantUserData={applicantUserData}
126
          application={application}
127
          criteria={criteria}
128
          experiences={experiences}
129
          experienceSkills={experienceSkills}
130
          job={job}
131
          jobApplicationAnswers={jobApplicationAnswers}
132
          jobQuestions={jobQuestions}
133
          portal={portal}
134
          reviewStatuses={reviewStatuses}
135
        />
136
      </RootContainer>,
137
      container,
138
    );
139
  }
140
};
141
142
const managerContainer = document.getElementById(
143
  "application-timeline-review-container",
144
);
145
if (managerContainer !== null) {
146
  renderApplicationReviewRoot(managerContainer, "manager");
147
}
148
149
const hrContainer = document.getElementById(
150
  "application-timeline-review-container-hr",
151
);
152
if (hrContainer !== null) {
153
  renderApplicationReviewRoot(hrContainer, "hr");
154
}
155
156
export default ApplicationTimelineRootReview;
157