UNPKG

ih-black-lion

Version:

State handler for Arus projects

111 lines (93 loc) 3.73 kB
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; } }