ih-black-lion
Version:
State handler for Arus projects
111 lines (93 loc) • 3.73 kB
JavaScript
import { isArrayLike as isArray, mapObj, mapObjIndexed } from 'ramda';
import moment from 'moment';
const formatDays = (wkDays) => {
let days = '';
if (wkDays.mon === 'Y') days += 'M';
if (wkDays.tues === 'Y') days += 'T';
if (wkDays.wed === 'Y') days += 'W';
if (wkDays.thurs === 'Y') days += 'R';
if (wkDays.fri === 'Y') days += 'F';
if (wkDays.sat === 'Y') days += 'S';
if (wkDays.sun === 'Y') days += 'U';
if (days === '') return 'TBD';
return `${days}`;
};
const formatTimes = (wkDays) => {
const start = moment(wkDays.meetingTimeStart, 'hh:mm:ss.SSS').isValid() ?
moment(wkDays.meetingTimeStart, 'hh:mm:ss.SSS').format('hh:mma') : 'TBD';
const end = moment(wkDays.meetingTimeEnd, 'hh:mm:ss.SSS').isValid() ?
moment(wkDays.meetingTimeEnd, 'hh:mm:ss.SSS').format('hh:mma') : 'TBD';
return `${start} - ${end}`;
};
export class Session {
constructor(obj, offerNumber) {
const classOfferNumber = offerNumber;
const meeting = obj.classMeetingPatterns.classMeetingPattern;
this.classNumber = obj.classNbr;
this.classSection = obj.classSection;
this.component = obj.ssrComponentLovdescr;
this.days = formatDays(meeting);
this.times = formatTimes(meeting);
this.room = meeting.ssrMtgLocLong;
this.instructor = meeting.ssrInstrLong;
this.startDate = moment(obj.startDt, 'YYYY-MM-DD').format('MM/DD/YYYY');
this.endDate = moment(obj.endDt, 'YYYY-MM-DD').format('MM/DD/YYYY');
this.bookLink = `https://www.bkstr.com/webapp/wcs/stores/servlet/booklookServlet?bookstore_id-1=0${classOfferNumber}&term_id-1=${obj.strm}&crn-1=${obj.classNbr}`;
}
}
export class Course {
constructor(obj, mode) {
mode = parseInt(mode);
this.desc = obj.courseTitleLong;
this.status = obj.enrollStatusDescr;
this.units = obj.untTaken;
this.gradeDesc = obj.gradeBasisDescrformal;
this.grade = obj.crseGradeOff;
this.course = `${obj.subject} ${obj.catalogNbr}`;
let sessions = [];
if(obj.enrlClassSections.enrlClassSection){
if (isArray(obj.enrlClassSections.enrlClassSection)) {
sessions = obj.enrlClassSections.enrlClassSection.map((item) => new Session(item, obj.crseOfferNbr));
} else {
sessions['0'] = new Session(obj.enrlClassSections.enrlClassSection, mode);
}
}
this.sessions = sessions;
}
}
export class Term {
constructor(obj, mode) {
mode = parseInt(mode);
this.acadCareerDesc = obj.acadCareerLovdescr;
this.curGpa = obj.curGpa;
this.cumGpa = obj.cumGpa;
this.termName = obj.strmLovdescr;
this.institution = obj.institutionLovdescr;
this.termBeginDate = obj.termBeginDt;
this.termEndDate = obj.termEndDt;
let termCourses = [];
if (obj.enrollmentDetails.enrollmentDetail) {
if (Array.isArray(obj.enrollmentDetails.enrollmentDetail)) {
termCourses = obj.enrollmentDetails.enrollmentDetail.map((item) => new Course(item));
} else {
termCourses['0'] = new Course(obj.enrollmentDetails.enrollmentDetail);
}
}
this.courses = termCourses;
}
}
export default class Schedule {
constructor(obj, mode) {
mode = parseInt(mode);
let terms = {};
if (obj.ssrGetEnrollmentResp.ssrEnrlStudylist.ssMessageLong !== 'You are not registered for classes in this term.') {
if (isArray(obj.ssrGetEnrollmentResp.ssrEnrlStudylist.ssrEnrlTerms.ssrEnrlTerm)) {
terms = mapObj((term) => new Term(term, mode), obj.ssrGetEnrollmentResp.ssrEnrlStudylist.ssrEnrlTerms.ssrEnrlTerm);
} else {
terms['0'] = new Term(obj.ssrGetEnrollmentResp.ssrEnrlStudylist.ssrEnrlTerms.ssrEnrlTerm, mode);
}
}
const schedule = { terms };
this.terms = schedule.terms;
}
}