Passed
Push — task/experience-skills-batch-r... ( 5d0b10...34611b )
by Yonathan
07:53 queued 01:59
created

resources/assets/js/components/Application/ApplicationPreviewRoot.tsx   A

Complexity

Total Complexity 2
Complexity/F 0

Size

Lines of Code 131
Function Count 0

Duplication

Duplicated Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
wmc 2
eloc 108
c 0
b 0
f 0
dl 0
loc 131
rs 10
mnd 2
bc 2
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 {
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 { loadingMessages } from "./applicationMessages";
20
import ApplicationPreview from "./Review/ApplicationPreview";
21
import RootContainer from "../RootContainer";
22
23
interface ApplicationPreviewRootProps {
24
  applicationId: number;
25
  applicantUserId: number;
26
  jobId: number;
27
}
28
29
const ApplicationPreviewRoot: React.FunctionComponent<ApplicationPreviewRootProps> = ({
30
  applicationId,
31
  applicantUserId,
32
  jobId,
33
}) => {
34
  const intl = useIntl();
35
  const dispatch = useDispatch<DispatchType>();
36
37
  const {
38
    experiencesLoaded,
39
    experienceConstantsLoaded,
40
    skillsLoaded,
41
  } = useFetchReviewApplicationData(
42
    applicantUserId,
43
    applicationId,
44
    jobId,
45
    dispatch,
46
  );
47
48
  const application = useReviewedApplication(applicationId);
49
  const applicantUser = useApplicationUser(applicationId);
50
  const job = useJob(jobId);
51
  const criteria = useCriteria(jobId);
52
  const experiences = useExperiences(applicationId, application);
53
  const experienceSkills = useExperienceSkills(applicationId, application);
54
  const skills = useSkills();
55
  const jobQuestions = useJobPosterQuestions(jobId);
56
  const jobApplicationAnswers = useJobApplicationAnswers(applicationId);
57
  const showLoadingState =
58
    application === null ||
59
    job === null ||
60
    !experiencesLoaded ||
61
    !experienceConstantsLoaded ||
62
    !skillsLoaded;
63
64
  return (
65
    <div data-clone>
66
      {showLoadingState && (
67
        <h2
68
          data-c-heading="h2"
69
          data-c-align="center"
70
          data-c-padding="top(2) bottom(2)"
71
        >
72
          {intl.formatMessage(loadingMessages.loading)}
73
        </h2>
74
      )}
75
      {!showLoadingState &&
76
        application !== null &&
77
        job !== null &&
78
        applicantUser !== null && (
79
          <>
80
            <ApplicationPreview
81
              application={application}
82
              criteria={criteria}
83
              experiences={experiences}
84
              experienceSkills={experienceSkills}
85
              experienceViewState="education"
86
              experienceViewButtonOrder={["education", "skills", "experience"]}
87
              job={job}
88
              jobApplicationAnswers={jobApplicationAnswers}
89
              jobQuestions={jobQuestions}
90
              skills={skills}
91
              user={applicantUser}
92
              isSubmitted
93
            />
94
          </>
95
        )}
96
    </div>
97
  );
98
};
99
100
if (document.getElementById("application-timeline-preview-container")) {
101
  const container = document.getElementById(
102
    "application-timeline-preview-container",
103
  );
104
  if (
105
    container != null &&
106
    container.hasAttribute("data-applicant-user-id") &&
107
    container.hasAttribute("data-application-id") &&
108
    container.hasAttribute("data-job-id")
109
  ) {
110
    const applicantUserId = JSON.parse(
111
      container.getAttribute("data-applicant-user-id") as string,
112
    );
113
    const applicationId = JSON.parse(
114
      container.getAttribute("data-application-id") as string,
115
    );
116
    const jobId = JSON.parse(container.getAttribute("data-job-id") as string);
117
    ReactDOM.render(
118
      <RootContainer>
119
        <ApplicationPreviewRoot
120
          applicationId={applicationId}
121
          applicantUserId={applicantUserId}
122
          jobId={jobId}
123
        />
124
      </RootContainer>,
125
      container,
126
    );
127
  }
128
}
129
130
export default ApplicationPreviewRoot;
131