-
Notifications
You must be signed in to change notification settings - Fork 4
/
student-explorer-add-review-widget.js
92 lines (87 loc) · 3.15 KB
/
student-explorer-add-review-widget.js
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
import { Template } from 'meteor/templating';
import { _ } from 'meteor/erasaur:meteor-lodash';
import { SimpleSchema } from 'meteor/aldeed:simple-schema';
import { CourseInstances } from '../../../api/course/CourseInstanceCollection.js';
import { Feeds } from '../../../api/feed/FeedCollection.js';
import { OpportunityInstances } from '../../../api/opportunity/OpportunityInstanceCollection.js';
import { Semesters } from '../../../api/semester/SemesterCollection.js';
import { Reviews } from '../../../api/review/ReviewCollection.js';
import { getUserIdFromRoute } from '../shared/get-user-id-from-route';
import { getRouteUserName } from '../shared/route-user-name';
import { reviewRatingsObjects } from '../shared/review-ratings';
import * as FormUtils from '../admin/form-fields/form-field-utilities.js';
const addSchema = new SimpleSchema({
semester: { type: String, optional: false },
rating: { type: Number, optional: true },
comments: { type: String, optional: false },
});
Template.Student_Explorer_Add_Review_Widget.onCreated(function onCreated() {
FormUtils.setupFormWidget(this, addSchema);
});
Template.Student_Explorer_Add_Review_Widget.helpers({
ratings() {
return reviewRatingsObjects;
},
semesters() {
const semesters = [];
let instances;
if (this.reviewType === 'course') {
const course = this.event;
instances = CourseInstances.find({
studentID: getUserIdFromRoute(),
courseID: course._id,
}).fetch();
} else {
const opportunity = this.event;
instances = OpportunityInstances.find({
studentID: getUserIdFromRoute(),
opportunityID: opportunity._id,
}).fetch();
}
_.map(instances, (instance) => {
const semester = Semesters.findDoc(instance.semesterID);
if (semester.sortBy < Semesters.getCurrentSemesterDoc().sortBy) {
semesters.push(Semesters.findDoc(instance.semesterID));
}
});
return semesters;
},
});
Template.Student_Explorer_Add_Review_Widget.events({
submit(event, instance) {
event.preventDefault();
const newData = FormUtils.getSchemaDataFromEvent(addSchema, event);
instance.context.resetValidation();
addSchema.clean(newData);
instance.context.validate(newData);
if (instance.context.isValid()) {
newData.student = getRouteUserName();
newData.reviewType = this.reviewType;
newData.reviewee = this.event._id;
Reviews.define(newData);
FormUtils.indicateSuccess(instance, event);
let feedDefinition;
if (this.reviewType === 'course') {
feedDefinition = {
user: [newData.student],
course: newData.reviewee,
feedType: 'new-course-review',
timestamp: Date.now(),
};
} else {
feedDefinition = {
user: [newData.student],
opportunity: newData.reviewee,
feedType: 'new-opportunity-review',
timestamp: Date.now(),
};
}
Feeds.define(feedDefinition);
} else {
FormUtils.indicateError(instance);
}
},
});
Template.Student_Explorer_Add_Review_Widget.onRendered(function studentExplorerAddReviewWidget() {
this.$('.ui.accordion').accordion();
});