-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathcourseDetails.js
More file actions
94 lines (80 loc) · 3.84 KB
/
Copy pathcourseDetails.js
File metadata and controls
94 lines (80 loc) · 3.84 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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
import { sequencePatterns, alphaSequencePatterns, numericSequencePatterns } from 'course/constants';
let courseDetails = function (CourseActionCreators, SectionService) {
return {
restrict: 'E',
template: require('./courseDetails.html'),
replace: true,
link: function (scope) {
scope.originalSequencePattern = angular.copy(scope.view.selectedEntity.sequencePattern); // eslint-disable-line no-undef
scope.sequenceNumberPlaceholder = "Example: '001' or 'A'";
scope.courseDetails = {
sequencePatternTooltipMessage: null
};
/**
* Filters out sequencePatterns based on the current course.
* It also filters out patterns that are already used for
* other courses of the same subjectCode and courseNumber
*/
scope.sequencePatternsScopedByCurrentType = function () {
var course = scope.view.state.courses.list[scope.view.selectedEntity.id];
var occupiedSequencePatterns = scope.view.state.courses.ids
.filter(function (courseId) {
return scope.view.state.courses.list[courseId].id != course.id &&
scope.view.state.courses.list[courseId].subjectCode == course.subjectCode &&
scope.view.state.courses.list[courseId].courseNumber == course.courseNumber;
}).map(function (courseId) {
return scope.view.state.courses.list[courseId].sequencePattern;
});
if (course.sequencePattern) {
if (course.isSeries()) {
return alphaSequencePatterns.filter(function (pattern) {
return occupiedSequencePatterns.indexOf(pattern) < 0;
});
} else {
return numericSequencePatterns.filter(function (pattern) {
return occupiedSequencePatterns.indexOf(pattern) < 0;
});
}
} else {
return sequencePatterns.filter(function (pattern) {
return occupiedSequencePatterns.indexOf(pattern) < 0;
});
}
};
scope.updateSequencePattern = function () {
let sequencePattern = scope.view.selectedEntity.sequencePattern;
// Do nothing if sequencePattern is unchanged
if (sequencePattern == scope.originalSequencePattern) {
scope.courseDetails.sequencePatternTooltipMessage = null;
return true;
}
if (SectionService.isSequencePatternValid(sequencePattern.toUpperCase()) == false) {
scope.courseDetails.sequencePatternTooltipMessage = "Sequence pattern format is incorrect. Valid formats are '3 numbers' (ex: '002') or '1 letter' (ex: 'A').";
return;
}
if (scope.isSequencePatternUnique(sequencePattern) == false) {
scope.courseDetails.sequencePatternTooltipMessage = "Sequence pattern already in use.";
return;
}
scope.courseDetails.sequencePatternTooltipMessage = null;
scope.view.selectedEntity.sequencePattern = sequencePattern;
scope.originalSequencePattern = sequencePattern.toUpperCase();
scope.view.selectedEntity.sequencePattern = scope.view.selectedEntity.sequencePattern.toUpperCase();
CourseActionCreators.updateCourse(scope.view.selectedEntity);
};
scope.isSequencePatternUnique = function (sequencePattern) {
let courseDescription = scope.view.selectedEntity.subjectCode + "-" + scope.view.selectedEntity.courseNumber + "-" + sequencePattern;
let isUnique = true;
scope.view.state.courses.ids.forEach(function(courseId) {
let course = scope.view.state.courses.list[courseId];
let slotCourseDescription = course.subjectCode + "-" + course.courseNumber + "-" + course.sequencePattern;
if (courseDescription == slotCourseDescription) {
isUnique = false;
}
});
return isUnique;
};
}
};
};
export default courseDetails;