Passed
Push — dev ( 14987c...ef9e3b )
by
unknown
04:52
created

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

Complexity

Total Complexity 5
Complexity/F 0

Size

Lines of Code 94
Function Count 0

Duplication

Duplicated Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
wmc 5
eloc 77
mnd 5
bc 5
fnc 0
dl 0
loc 94
bpm 0
cpm 0
noi 0
c 0
b 0
f 0
rs 10
1
/* eslint camelcase: "off" */
2
import 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
  useFetchApplicationsByJob,
9
  useFetchJob,
10
} from "../../hooks/applicationHooks";
11
import { loadingMessages } from "../Application/applicationMessages";
12
import { ApplicationReview, Classification } from "../../models/types";
13
import ReviewApplications from "./ReviewApplications";
14
import RootContainer from "../RootContainer";
15
import { Portal } from "../../models/app";
16
import {
17
  updateApplicationReview,
18
  batchUpdateApplicationReviews,
19
} from "../../store/Application/applicationActions";
20
import { useLoadClassifications } from "../../hooks/classificationHooks";
21
22
interface ReviewApplicationsRootProps {
23
  jobId: number;
24
  portal: Portal;
25
}
26
27
const ReviewApplicationsRoot: React.FC<ReviewApplicationsRootProps> = ({
28
  jobId,
29
  portal,
30
}): React.ReactElement => {
31
  const intl = useIntl();
32
  const dispatch = useDispatch<DispatchType>();
33
34
  const { classifications } = useLoadClassifications(dispatch);
35
  const applications = useFetchApplicationsByJob(jobId, dispatch);
36
  const job = useFetchJob(jobId, dispatch);
37
  const classificationKey: string =
38
    classifications.find(
39
      (item: Classification) => item.id === job?.classification_id,
40
    )?.key || "";
41
  const handleUpdateApplicationReview = async (
42
    editedApplicationReview: ApplicationReview,
43
  ): Promise<void> => {
44
    await dispatch(updateApplicationReview(editedApplicationReview));
45
  };
46
  const handleBatchUpdateApplicationReviews = async (
47
    editedApplicationReviews: ApplicationReview[],
48
  ): Promise<void> => {
49
    await dispatch(batchUpdateApplicationReviews(editedApplicationReviews));
50
  };
51
52
  return (
53
    <div data-clone>
54
      {job === null || applications === null ? (
55
        <h2
56
          data-c-heading="h2"
57
          data-c-align="center"
58
          data-c-padding="top(2) bottom(2)"
59
        >
60
          {intl.formatMessage(loadingMessages.loading)}
61
        </h2>
62
      ) : (
63
        <ReviewApplications
64
          portal={portal}
65
          job={job}
66
          classificationKey={classificationKey}
67
          applications={applications}
68
          handleUpdateReview={handleUpdateApplicationReview}
69
          handleBatchUpdateApplicationReviews={
70
            handleBatchUpdateApplicationReviews
71
          }
72
        />
73
      )}
74
    </div>
75
  );
76
};
77
78
export default ReviewApplicationsRoot;
79
80
const container = document.getElementById("review-applications-container");
81
if (container !== null) {
82
  if ("jobId" in container.dataset && "portal" in container.dataset) {
83
    const jobId = Number(container.dataset.jobId as string);
84
    const portal = container.dataset.portal as Portal;
85
86
    ReactDOM.render(
87
      <RootContainer>
88
        <ReviewApplicationsRoot jobId={jobId} portal={portal} />
89
      </RootContainer>,
90
      container,
91
    );
92
  }
93
}
94