Skip to content

Commit 90e32b8

Browse files
committed
chore(meister): API연결완료
1 parent 4efceb4 commit 90e32b8

14 files changed

+715
-345
lines changed

src/page/meister/chart/MeisterChart.tsx

Lines changed: 46 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,57 +1,66 @@
11
import React from "react";
22
import * as d3 from "d3";
33
import { color } from "@/styles";
4-
5-
type YearType = "2021" | "2022" | "2023";
4+
import { IMeister } from "@/interfaces";
5+
import { useDidMountEffect } from "@/hooks/useDidMountEffect";
66

77
interface MeisterChartData {
8-
group: string;
9-
year: YearType;
10-
points: number;
8+
group:
9+
| "basicJobSkills"
10+
| "professionalTech"
11+
| "workEthic"
12+
| "humanities"
13+
| "foreignScore";
14+
scoreType: "avg" | "meister" | "max";
1115
}
1216

1317
const graphColor = {
14-
"2021": color.primary_yellow,
15-
"2022": color.primary_blue,
16-
"2023": color.primary_red,
18+
avg: color.primary_yellow,
19+
meister: color.primary_blue,
20+
max: color.primary_red,
1721
};
1822

1923
const groups = [
20-
"외국어 능력",
21-
"인성 직업 의식",
24+
"직업 기초 능력",
2225
"전문 기술 역량",
26+
"인성 직업 의식",
2327
"인문학적 소양",
24-
"직업 기초 능력",
28+
"외국어 능력",
2529
];
2630

2731
const data: MeisterChartData[] = [
28-
{ group: "외국어 능력", year: "2021", points: 32 },
29-
{ group: "외국어 능력", year: "2022", points: 43 },
30-
{ group: "외국어 능력", year: "2023", points: 44 },
32+
{ group: "basicJobSkills", scoreType: "avg" },
33+
{ group: "basicJobSkills", scoreType: "meister" },
34+
{ group: "basicJobSkills", scoreType: "max" },
3135

32-
{ group: "인성 직업 의식", year: "2021", points: 40 },
33-
{ group: "인성 직업 의식", year: "2022", points: 36 },
34-
{ group: "인성 직업 의식", year: "2023", points: 31 },
36+
{ group: "professionalTech", scoreType: "avg" },
37+
{ group: "professionalTech", scoreType: "meister" },
38+
{ group: "professionalTech", scoreType: "max" },
3539

36-
{ group: "전문 기술 역량", year: "2021", points: 37 },
37-
{ group: "전문 기술 역량", year: "2022", points: 10 },
38-
{ group: "전문 기술 역량", year: "2023", points: 17 },
40+
{ group: "workEthic", scoreType: "avg" },
41+
{ group: "workEthic", scoreType: "meister" },
42+
{ group: "workEthic", scoreType: "max" },
3943

40-
{ group: "인문학적 소양", year: "2021", points: 10 },
41-
{ group: "인문학적 소양", year: "2022", points: 23 },
42-
{ group: "인문학적 소양", year: "2023", points: 4 },
44+
{ group: "humanities", scoreType: "avg" },
45+
{ group: "humanities", scoreType: "meister" },
46+
{ group: "humanities", scoreType: "max" },
4347

44-
{ group: "직업 기초 능력", year: "2021", points: 38 },
45-
{ group: "직업 기초 능력", year: "2022", points: 2 },
46-
{ group: "직업 기초 능력", year: "2023", points: 25 },
48+
{ group: "foreignScore", scoreType: "avg" },
49+
{ group: "foreignScore", scoreType: "meister" },
50+
{ group: "foreignScore", scoreType: "max" },
4751
];
4852

4953
const meisterSeparation = [0, 30, 60];
5054

51-
const MeisterChart = () => {
55+
interface IMeisterChartProps {
56+
meisterData: IMeister;
57+
}
58+
59+
const MeisterChart = ({ meisterData }: IMeisterChartProps) => {
5260
const canvasRef = React.useRef(null);
5361

54-
React.useEffect(() => {
62+
useDidMountEffect(() => {
63+
if (meisterData.avg.basicJobSkills === 0) return;
5564
const canvas = d3.select(canvasRef.current);
5665
const svg = canvas
5766
.append("svg")
@@ -74,11 +83,14 @@ const MeisterChart = () => {
7483
.attr("height", "0%")
7584
.attr("y", "100%")
7685
.attr("width", 15)
77-
.attr("fill", graphColor[item.year])
86+
.attr("fill", graphColor[item.scoreType])
7887
.transition()
7988
.duration(1000)
80-
.attr("height", `${(item.points / data.length) * 100}%`)
81-
.attr("y", `${100 - item.points}%`);
89+
.attr(
90+
"height",
91+
`${(meisterData[item.scoreType][item.group] / data.length) * 120}%`,
92+
)
93+
.attr("y", `${110 - meisterData[item.scoreType][item.group]}%`);
8294

8395
svg
8496
.append("text")
@@ -89,8 +101,8 @@ const MeisterChart = () => {
89101
.style("font-size", "10px")
90102
.transition()
91103
.duration(1000)
92-
.attr("y", `${98 - item.points}%`)
93-
.text(item.points)
104+
.attr("y", `${108 - meisterData[item.scoreType][item.group]}%`)
105+
.text(Math.round(meisterData[item.scoreType][item.group]))
94106
.style("fill", color.gray);
95107
});
96108

@@ -125,7 +137,7 @@ const MeisterChart = () => {
125137
.style("font-weight", "600")
126138
.style("font-size", "12px");
127139
});
128-
}, []);
140+
}, [meisterData]);
129141

130142
return <div ref={canvasRef} />;
131143
};

src/page/meister/chart/RadarChart.tsx

Lines changed: 37 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { IMeister } from "@/interfaces";
12
import React, { useState } from "react";
23
import Radar from "react-d3-radar";
34

@@ -21,41 +22,45 @@ interface ChartData {
2122
sets: DataSet[];
2223
}
2324

24-
const chartData: ChartData = {
25-
variables: [
26-
{ key: "anxiety", label: "직업기초능력" },
27-
{ key: "illness", label: "전문기술역량" },
28-
{ key: "sucidal", label: "인성/직업의식" },
29-
{ key: "distress", label: "인문학적 소양" },
30-
{ key: "depression", label: "외국어 능력" },
31-
],
32-
sets: [
33-
{
34-
key: "served",
35-
label: "학년 평균",
36-
values: {
37-
anxiety: 20,
38-
illness: 30,
39-
sucidal: 26,
40-
distress: 31,
41-
openness: 8,
25+
interface IRadarChartProps {
26+
meisterData: IMeister;
27+
}
28+
29+
const RadarChart = ({ meisterData }: IRadarChartProps) => {
30+
const chartData: ChartData = {
31+
variables: [
32+
{ key: "a", label: "직업기초능력" },
33+
{ key: "b", label: "전문기술역량" },
34+
{ key: "c", label: "인성/직업의식" },
35+
{ key: "d", label: "인문학적 소양" },
36+
{ key: "e", label: "외국어 능력" },
37+
],
38+
sets: [
39+
{
40+
key: "avg",
41+
label: "학년 평균",
42+
values: {
43+
a: meisterData.avg.basicJobSkills,
44+
b: meisterData.avg.professionalTech,
45+
c: meisterData.avg.workEthic,
46+
d: meisterData.avg.humanities,
47+
e: meisterData.avg.foreignScore,
48+
},
4249
},
43-
},
44-
{
45-
key: "civilians",
46-
label: "Civilians",
47-
values: {
48-
anxiety: 20,
49-
illness: 52,
50-
sucidal: 20,
51-
distress: 10,
52-
openness: 24,
50+
{
51+
key: "my",
52+
label: "내 점수",
53+
values: {
54+
a: meisterData.meister.basicJobSkills,
55+
b: meisterData.meister.professionalTech,
56+
c: meisterData.meister.workEthic,
57+
d: meisterData.meister.humanities,
58+
e: meisterData.meister.foreignScore,
59+
},
5360
},
54-
},
55-
],
56-
};
61+
],
62+
};
5763

58-
const RadarChart = () => {
5964
const [highlighted, setHighlighted] = useState<Variable | null>(null);
6065

6166
const onHover = (hovered: Variable | null) => {

0 commit comments

Comments
 (0)