Skip to content

Commit 518932e

Browse files
Add
1 parent d7abee2 commit 518932e

File tree

2 files changed

+129
-2
lines changed

2 files changed

+129
-2
lines changed

src/utils/lectureUtils.js

Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
import i18n from 'i18next';
2+
3+
import { LectureFocusFrom } from '../reducers/timetable/lectureFocus';
4+
5+
import { getStr as getStrOfExamtime } from './examtimeUtils';
6+
7+
export const isSpecialLecture = (lecture) => {
8+
const isNormalLecture =
9+
lecture.class_title === lecture.class_no || (lecture.class_title === 'A' && !lecture.class_no);
10+
return !isNormalLecture;
11+
};
12+
13+
export const inTimetable = (lecture, timetable) =>
14+
timetable && timetable.lectures.some((l) => l.id === lecture.id);
15+
16+
export const inCart = (lecture, cart) =>
17+
cart.lectureGroups !== null &&
18+
cart.lectureGroups.some((lg) => lg.some((l) => l.id === lecture.id));
19+
20+
export const isListClicked = (lecture, lectureFocus) =>
21+
lectureFocus.from === LectureFocusFrom.LIST &&
22+
lectureFocus.clicked === true &&
23+
lectureFocus.lecture.id === lecture.id;
24+
25+
export const isListFocused = (lecture, lectureFocus) =>
26+
lectureFocus.from === LectureFocusFrom.LIST && lectureFocus.lecture.id === lecture.id;
27+
28+
export const isTableClicked = (lecture, lectureFocus) =>
29+
lectureFocus.from === LectureFocusFrom.TABLE &&
30+
lectureFocus.clicked === true &&
31+
lectureFocus.lecture.id === lecture.id;
32+
33+
export const isTableFocused = (lecture, lectureFocus) =>
34+
lectureFocus.from === LectureFocusFrom.TABLE && lectureFocus.lecture.id === lecture.id;
35+
36+
export const isSingleFocused = (lecture, lectureFocus) =>
37+
lectureFocus.lecture !== null && lectureFocus.lecture.id === lecture.id;
38+
39+
export const isMultipleFocused = (lecture, lectureFocus) =>
40+
lectureFocus.from === LectureFocusFrom.MULTIPLE &&
41+
lectureFocus.multipleDetails.some((d) => d.lecture.id === lecture.id);
42+
43+
export const isDimmedTableLecture = (lecture, lectureFocus) =>
44+
lectureFocus.clicked === true && lectureFocus.lecture.id !== lecture.id;
45+
46+
export const isDimmedListLectureGroup = (lectureGroup, lectureFocus) =>
47+
lectureFocus.clicked === true &&
48+
(lectureGroup.every((l) => lectureFocus.lecture.id !== l.id) ||
49+
lectureFocus.from !== LectureFocusFrom.LIST);
50+
51+
export const isFocused = (lecture, lectureFocus) =>
52+
isSingleFocused(lecture, lectureFocus) || isMultipleFocused(lecture, lectureFocus);
53+
54+
export const getOverallLectures = (selectedTimetable, lectureFocus) => {
55+
const timetableLectures = selectedTimetable ? selectedTimetable.lectures : [];
56+
const hasSingleFocusedLectureOutsideTable =
57+
lectureFocus.lecture && !inTimetable(lectureFocus.lecture, selectedTimetable);
58+
59+
return timetableLectures.concat(
60+
hasSingleFocusedLectureOutsideTable ? [lectureFocus.lecture] : [],
61+
);
62+
};
63+
64+
// SYNC: Keep synchronized with Django apps/subject/models.py Lecture.get_professors_short_str()
65+
export const getProfessorsShortStr = (lecture) => {
66+
const professors = lecture.professors.slice().sort((a, b) => (a.name < b.name ? -1 : 1));
67+
const professorNames = professors.map((p) => p[i18n.t('js.property.name')]);
68+
if (professorNames.length <= 2) {
69+
return professorNames.join(', ');
70+
}
71+
return i18n.t('ui.others.sthAndNumOtherPeople', {
72+
something: professorNames[0],
73+
count: professorNames.length - 1,
74+
});
75+
};
76+
77+
export const getProfessorsFullStr = (lecture) => {
78+
const professors = lecture.professors.slice().sort((a, b) => (a.name < b.name ? -1 : 1));
79+
const professorNames = professors.map((p) => p[i18n.t('js.property.name')]);
80+
return professorNames.join(', ');
81+
};
82+
83+
export const getBuildingStr = (lecture) => {
84+
const { classtimes } = lecture;
85+
if (classtimes.length === 0) {
86+
return i18n.t('ui.placeholder.unknown');
87+
}
88+
return classtimes[0].building_code;
89+
};
90+
91+
export const getClassroomStr = (lecture) => {
92+
const { classtimes } = lecture;
93+
if (classtimes.length === 0) {
94+
return i18n.t('ui.placeholder.unknown');
95+
}
96+
return classtimes[0][i18n.t('js.property.classroom')];
97+
};
98+
99+
export const getRoomStr = (lecture) => {
100+
const { classtimes } = lecture;
101+
if (classtimes.length === 0) {
102+
return i18n.t('ui.placeholder.unknown');
103+
}
104+
return classtimes[0][i18n.t('js.property.room_name')];
105+
};
106+
107+
export const getExamFullStr = (lecture) => {
108+
const { examtimes } = lecture;
109+
const examStrings = examtimes.map((e) => getStrOfExamtime(e));
110+
if (examStrings.length === 0) {
111+
return i18n.t('ui.placeholder.unknown');
112+
}
113+
return examStrings.join(', ');
114+
};
115+
116+
export const getColorNumber = (lecture) => (lecture.course % 16) + 1;
117+
118+
export const getSyllabusUrl = (lecture) => {
119+
const payload = {
120+
syy: String(lecture.year),
121+
smtDivCd: String(lecture.semester),
122+
subjtCd: lecture.old_code,
123+
syllabusOpenYn: '0',
124+
};
125+
const encodedLecture = btoa(JSON.stringify(payload));
126+
return `https://erp.kaist.ac.kr/com/lgin/SsoCtr/initExtPageWork.do?link=estblSubjt&params=${encodedLecture}`;
127+
};

src/utils/lectureUtils.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -128,8 +128,8 @@ export const getSyllabusUrl = (lecture: Lecture) => {
128128
const payload = {
129129
syy: String(lecture.year),
130130
smtDivCd: String(lecture.semester),
131-
subjtCd: lecture.code,
132-
syllabusOpenYn: '1',
131+
subjtCd: lecture.old_code,
132+
syllabusOpenYn: '0',
133133
};
134134
const encodedLecture = btoa(JSON.stringify(payload));
135135
return `https://erp.kaist.ac.kr/com/lgin/SsoCtr/initExtPageWork.do?link=estblSubjt&params=${encodedLecture}`;

0 commit comments

Comments
 (0)