diff options
| author | Furkan Sahin <furkan-dev@proton.me> | 2021-04-29 15:47:20 -0500 |
|---|---|---|
| committer | Furkan Sahin <furkan-dev@proton.me> | 2021-04-29 15:47:20 -0500 |
| commit | 29351b07af05efc496214fcaf8312afc376be9cb (patch) | |
| tree | 5e83bc3b0fc9efc420f92b70fd1c9b58b8cec035 /src/features | |
| parent | 72e980b857ffac4c362d3d4b6689d251fac6a750 (diff) | |
Make all components use typescript
Diffstat (limited to 'src/features')
| -rw-r--r-- | src/features/parser.ts | 186 |
1 files changed, 89 insertions, 97 deletions
diff --git a/src/features/parser.ts b/src/features/parser.ts index 7839564..f1164d8 100644 --- a/src/features/parser.ts +++ b/src/features/parser.ts @@ -2,7 +2,7 @@ import Lab from '@/models/Lab'; import PeerTeacher from '@/models/PeerTeacher'; import EventInfo from '../models/EventInfo'; -export function parseLabFile(file: File): Promise<Lab[]> { +export async function parseLabFile(file: File): Promise<Lab[]> { const validCourses = [ '110', '111', @@ -15,115 +15,107 @@ export function parseLabFile(file: File): Promise<Lab[]> { // '314', '315', ]; - - return new Promise((resolve, reject) => { - const result: Lab[] = []; - - file.text().then((text) => { - let jsonData; - try { - jsonData = JSON.parse(text); - } catch (e) { - reject(new Error(e)); - } - const labs = jsonData.data; - - labs.forEach((lab: any) => { - if (validCourses.includes(lab.courseNumber)) { - const newLab = new Lab(lab.courseNumber, lab.sequenceNumber); - - if (lab.instructionalMethod !== 'Web Based') { - lab.meetingsFaculty.every((meeting: any) => { - const { meetingTime } = meeting; - - if (meetingTime.meetingType === 'LAB') { - let days = ''; - days += meetingTime.monday ? 'M' : ''; - days += meetingTime.tuesday ? 'T' : ''; - days += meetingTime.wednesday ? 'W' : ''; - days += meetingTime.thursday ? 'R' : ''; - days += meetingTime.friday ? 'F' : ''; - - newLab.event.days = days; - newLab.event.start = parseInt(meetingTime.beginTime, 10); - newLab.event.end = parseInt(meetingTime.endTime, 10); - - return false; - } - - return true; - }); + const result: Lab[] = []; + + const text = await file.text(); + let jsonData; + try { + jsonData = JSON.parse(text); + } catch (e) { + throw new Error(e); + } + const labs = jsonData.data; + + labs.forEach((lab: any) => { + if (validCourses.includes(lab.courseNumber)) { + const newLab = new Lab(lab.courseNumber, lab.sequenceNumber); + + if (lab.instructionalMethod !== 'Web Based') { + lab.meetingsFaculty.every((meeting: any) => { + const { meetingTime } = meeting; + + if (meetingTime.meetingType === 'LAB') { + let days = ''; + days += meetingTime.monday ? 'M' : ''; + days += meetingTime.tuesday ? 'T' : ''; + days += meetingTime.wednesday ? 'W' : ''; + days += meetingTime.thursday ? 'R' : ''; + days += meetingTime.friday ? 'F' : ''; + + newLab.event.days = days; + newLab.event.start = parseInt(meetingTime.beginTime, 10); + newLab.event.end = parseInt(meetingTime.endTime, 10); + + return false; } - result.push(newLab); - } - }); + return true; + }); + } - resolve(result); - }); + result.push(newLab); + } }); + + return result; } -export function parsePtSchedule(file: File): Promise<PeerTeacher> { - return new Promise((resolve) => { - file.text().then((text) => { - const peerTeacher = new PeerTeacher(); - const namePattern = /^(.*)\s(.*)\s(\d{9})/; - const eventPattern = /^(M?T?W?R?F?)\s(\d{1,2}:\d{2})\s?-\s?(\d{1,2}:\d{2})/; - const lines = text.split('\n').filter((line) => line.trim()); - - lines.forEach((line) => { - const ptName = line.match(namePattern); - if (ptName) { - [, peerTeacher.firstname, peerTeacher.lastname] = ptName; - peerTeacher.uin = parseInt(ptName[3], 10); - } - - const eventMatch = line.match(eventPattern); - if (eventMatch) { - const newEvent = new EventInfo(eventMatch[1]); - newEvent.start = parseInt(eventMatch[2].replace(':', ''), 10); - newEvent.end = parseInt(eventMatch[3].replace(':', ''), 10); - peerTeacher.events.push(newEvent); - } - }); - - resolve(peerTeacher); - }); +export async function parsePtSchedule(file: File): Promise<PeerTeacher> { + const text = await file.text(); + const peerTeacher = new PeerTeacher(); + // namePatter: <firstname> <lastname> <uin> + const namePattern = /^(.*)\s(.*)\s(\d{9})/; + // eventPattern (24hr time): MTWRF hh:mm - hh:mm + const eventPattern = /^(M?T?W?R?F?)\s(\d{1,2}:\d{2})\s?-\s?(\d{1,2}:\d{2})/; + const lines = text.split('\n').filter((line) => line.trim()); + + lines.forEach((line) => { + const ptName = line.match(namePattern); + if (ptName) { + [, peerTeacher.firstname, peerTeacher.lastname] = ptName; + peerTeacher.uin = parseInt(ptName[3], 10); + } + + const eventMatch = line.match(eventPattern); + if (eventMatch) { + const newEvent = new EventInfo(eventMatch[1]); + newEvent.start = parseInt(eventMatch[2].replace(':', ''), 10); + newEvent.end = parseInt(eventMatch[3].replace(':', ''), 10); + peerTeacher.events.push(newEvent); + } }); + + return peerTeacher; } -export function parsePtDatabase(file: File): Promise<{ +export async function parsePtDatabase(file: File): Promise<{ labs: Map<string, Lab>, peerTeachers: Map<number, PeerTeacher> }> { - return new Promise((resolve) => { - file.text().then((text) => { - const jsonObj = JSON.parse(text); - const result = { - labs: new Map(), - peerTeachers: new Map(), - }; - - Object.keys(jsonObj.labs).forEach((key) => { - const lab = jsonObj.labs[key]; - result.labs.set(key, new Lab(lab.course, - lab.section, new EventInfo(lab.event.days, lab.event.start, lab.event.end))); - }); - - Object.keys(jsonObj.peerTeachers).forEach((key) => { - const pt = jsonObj.peerTeachers[key]; - const ptObj = new PeerTeacher(pt.firstname, pt.lastname, pt.uin); - ptObj.events = pt.events.map((eventObj: any) => new EventInfo(eventObj.days, - eventObj.start, eventObj.end)); - ptObj.assignedLabs = new Set(); - pt.assignedLabs.forEach((labId: string) => { - ptObj.assignedLabs.add(labId); - }); - result.peerTeachers.set(key, ptObj); - }); + const text = await file.text(); + const jsonObj = JSON.parse(text); + const result = { + labs: new Map(), + peerTeachers: new Map(), + }; + + Object.keys(jsonObj.labs).forEach((key) => { + const { course, section, event: { days, start, end } } = jsonObj.labs[key]; + result.labs.set(key, new Lab(course, + section, new EventInfo(days, start, end))); + }); - resolve(result); + Object.keys(jsonObj.peerTeachers).forEach((key) => { + const pt = jsonObj.peerTeachers[key]; + const ptObj = new PeerTeacher(pt.firstname, pt.lastname, pt.uin); + ptObj.events = pt.events.map((eventObj: any) => new EventInfo(eventObj.days, + eventObj.start, eventObj.end)); + ptObj.assignedLabs = new Set(); + pt.assignedLabs.forEach((labId: string) => { + ptObj.assignedLabs.add(labId); }); + result.peerTeachers.set(key, ptObj); }); + + return result; } |
