-
-
Notifications
You must be signed in to change notification settings - Fork 77
Expand file tree
/
Copy pathJobAnalyticsCompetitiveRolesPage.jsx
More file actions
77 lines (66 loc) · 2.07 KB
/
JobAnalyticsCompetitiveRolesPage.jsx
File metadata and controls
77 lines (66 loc) · 2.07 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
import React, { useState, useEffect, useMemo } from "react";
import axios from "axios";
import { useSelector } from "react-redux";
import { ENDPOINTS } from "../../../utils/URL";
import JobAnalyticsFilters from "./JobAnalyticsFilters";
import JobAnalyticsGraph from "./JobAnalyticsGraph";
import styles from "./JobAnalyticsPage.module.css";
const JobAnalyticsCompetitiveRolesPage = () => {
const darkMode = useSelector((state) => state.theme.darkMode);
const [filters, setFilters] = useState({
dateMode: "All",
startDate: "",
endDate: "",
roles: "All",
granularity: "totals",
});
const [data, setData] = useState([]);
const [loading, setLoading] = useState(false);
const requestUrl = useMemo(() => {
const start = filters.dateMode === "Custom" ? filters.startDate : "";
const end = filters.dateMode === "Custom" ? filters.endDate : "";
const gran =
filters.dateMode === "Custom" && filters.granularity !== "totals"
? filters.granularity
: undefined;
return ENDPOINTS.JOB_ANALYTICS_QUERY(start, end, filters.roles, gran);
}, [filters]);
useEffect(() => {
let alive = true;
(async () => {
setLoading(true);
try {
const resp = await axios.get(requestUrl);
if (alive) {
setData(Array.isArray(resp.data) ? resp.data : []);
}
} catch (e) {
// eslint-disable-next-line no-console
console.error("Error fetching job analytics:", e);
if (alive) setData([]);
} finally {
if (alive) setLoading(false);
}
})();
return () => {
alive = false;
};
}, [requestUrl]);
return (
<div
className={`${styles.jobAnalyticsPage} ${
darkMode ? styles.dark : styles.light
}`}
>
<div className={styles.jobAnalyticsFilters}>
<JobAnalyticsFilters filters={filters} setFilters={setFilters} />
</div>
{loading ? (
<p>Loading…</p>
) : (
<JobAnalyticsGraph data={data} darkMode={darkMode} />
)}
</div>
);
};
export default JobAnalyticsCompetitiveRolesPage;