{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/views/Queue.vue?6f1e","webpack:///./node_modules/moment/locale sync ^\\.\\/.*$","webpack:///./src/components/ordered/QueueEntry.vue?c4a6","webpack:///./src/components/appointments/AppointmentsColumn.vue?d783","webpack:///./src/App.vue?c650","webpack:///./src/components/appointments/AppointmentsSchedule.vue?1a75","webpack:///./src/components/appointments/AppointmentsQueue.vue?009a","webpack:///./src/components/appointments/AppointmentsDisplay.vue?d60c","webpack:///./src/components/admin/QueueManage.vue?f758","webpack:///./src/App.vue?f1ff","webpack:///./src/components/appointments/AppointmentCell.vue?20f8","webpack:///./src/components/AnnouncementDisplay.vue?b517","webpack:///./src/components/ordered/OrderedSchedule.vue?e168","webpack:///./src/components/ordered/OrderedQueue.vue?1991","webpack:///./src/components/appointments/AppointmentsSignUp.vue?2af6","webpack:///./src/App.vue?587f","webpack:///./src/types/Announcement.ts","webpack:///./src/util/Notification.ts","webpack:///./src/util/Sanitization.ts","webpack:///./src/types/Queue.ts","webpack:///./src/types/QueueEntry.ts","webpack:///./src/types/OrderedQueue.ts","webpack:///./src/types/Appointment.ts","webpack:///./src/types/AppointmentsQueue.ts","webpack:///./src/types/Course.ts","webpack:///./src/App.vue","webpack:///./src/App.vue?0ab4","webpack:///./src/App.vue?bff9","webpack:///./src/views/Home.vue?7f27","webpack:///./src/views/Home.vue","webpack:///./src/views/Home.vue?2d60","webpack:///./src/views/Home.vue?c853","webpack:///./src/views/Queue.vue?3e01","webpack:///./src/components/AnnouncementDisplay.vue?2eac","webpack:///./src/util/ErrorDialog.ts","webpack:///./src/components/AnnouncementDisplay.vue","webpack:///./src/components/AnnouncementDisplay.vue?7819","webpack:///./src/components/AnnouncementDisplay.vue?b1d0","webpack:///./src/components/ordered/OrderedQueue.vue?377c","webpack:///./src/components/ordered/QueueEntry.vue?7742","webpack:///./src/components/ordered/QueueEntry.vue","webpack:///./src/components/ordered/QueueEntry.vue?6bd7","webpack:///./src/components/ordered/QueueEntry.vue?02b3","webpack:///./src/components/ordered/QueueSignup.vue?a45e","webpack:///./src/components/ordered/QueueSignup.vue","webpack:///./src/components/ordered/QueueSignup.vue?f8f3","webpack:///./src/components/ordered/QueueSignup.vue?1e0b","webpack:///./src/components/ordered/OrderedSchedule.vue?467b","webpack:///./src/components/ordered/OrderedSchedule.vue","webpack:///./src/components/ordered/OrderedSchedule.vue?16a6","webpack:///./src/components/ordered/OrderedSchedule.vue?1eed","webpack:///./src/components/ordered/OrderedQueue.vue","webpack:///./src/components/ordered/OrderedQueue.vue?4cee","webpack:///./src/components/ordered/OrderedQueue.vue?67df","webpack:///./src/components/appointments/AppointmentsQueue.vue?7b2f","webpack:///./src/components/appointments/AppointmentsAdminSelector.vue?58af","webpack:///./src/components/appointments/AppointmentsDisplay.vue?65be","webpack:///./src/components/appointments/AppointmentsColumn.vue?9f0e","webpack:///./src/components/appointments/AppointmentCell.vue?bb37","webpack:///./src/components/appointments/AppointmentCell.vue","webpack:///./src/components/appointments/AppointmentCell.vue?e03f","webpack:///./src/components/appointments/AppointmentCell.vue?2f11","webpack:///./src/components/appointments/AppointmentsColumn.vue","webpack:///./src/components/appointments/AppointmentsColumn.vue?d080","webpack:///./src/components/appointments/AppointmentsColumn.vue?9514","webpack:///./src/components/appointments/AppointmentsDisplay.vue","webpack:///./src/components/appointments/AppointmentsDisplay.vue?5bea","webpack:///./src/components/appointments/AppointmentsDisplay.vue?70e5","webpack:///./src/components/appointments/AppointmentsSchedule.vue?92d9","webpack:///./src/components/appointments/AppointmentsSchedule.vue","webpack:///./src/components/appointments/AppointmentsSchedule.vue?d6a6","webpack:///./src/components/appointments/AppointmentsSchedule.vue?c38a","webpack:///./src/components/appointments/AppointmentsAdminSelector.vue","webpack:///./src/components/appointments/AppointmentsAdminSelector.vue?28dd","webpack:///./src/components/appointments/AppointmentsAdminSelector.vue?ed00","webpack:///./src/components/appointments/AppointmentsSignUp.vue?aee7","webpack:///./src/components/appointments/AppointmentsSignUp.vue","webpack:///./src/components/appointments/AppointmentsSignUp.vue?2fa1","webpack:///./src/components/appointments/AppointmentsSignUp.vue?7df9","webpack:///./src/components/appointments/AppointmentsQueue.vue","webpack:///./src/components/appointments/AppointmentsQueue.vue?cb26","webpack:///./src/components/appointments/AppointmentsQueue.vue?1846","webpack:///./src/components/admin/QueueManage.vue?f9c5","webpack:///./src/components/admin/QueueManage.vue","webpack:///./src/components/admin/QueueManage.vue?7c0f","webpack:///./src/components/admin/QueueManage.vue?2d8f","webpack:///./src/views/Queue.vue","webpack:///./src/views/Queue.vue?7f3c","webpack:///./src/views/Queue.vue?b881","webpack:///./src/views/Admin.vue?32a0","webpack:///./src/components/admin/CourseEdit.vue?88d9","webpack:///./src/components/admin/CourseEdit.vue","webpack:///./src/components/admin/CourseEdit.vue?6aa6","webpack:///./src/components/admin/CourseEdit.vue?9cab","webpack:///./src/components/admin/QueueAdd.vue?c019","webpack:///./src/components/admin/QueueAdd.vue","webpack:///./src/components/admin/QueueAdd.vue?1205","webpack:///./src/components/admin/QueueAdd.vue?e0b5","webpack:///./src/views/Admin.vue","webpack:///./src/views/Admin.vue?4513","webpack:///./src/views/Admin.vue?52f7","webpack:///./src/router/index.ts","webpack:///./src/main.ts","webpack:///./src/components/appointments/AppointmentsAdminSelector.vue?d898"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","exports","module","l","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","jsonpArray","window","oldJsonpFunction","slice","map","webpackContext","req","id","webpackContextResolve","e","Error","code","keys","resolve","_vm","this","_h","$createElement","_c","_self","staticClass","attrs","on","$event","preventDefault","$root","$data","showCourses","$router","_v","setStudentView","_e","userInfoLoaded","loggedIn","logoutUrl","loginUrl","staticStyle","_l","course","queues","some","q","$route","path","includes","goToQueue","scopedSlots","_u","fn","_s","shortName","class","favorite","toggleFavorite","proxy","queue","fullPath","studentView","restart","staticRenderFns","content","checkNotificationPromise","Notification","requestPermission","then","SendNotification","title","body","EscapeHTML","unsafe","replace","charCodeAt","virtual","confirmSignupMessage","enableLocationField","preventGroups","preventGroupsBoost","preventUnregistered","prioritizeNew","scheduled","announcements","websocketConnections","type","location","online","Set","config","time","fetch","res","json","a","undefined","ws","send","JSON","stringify","broadcast","receiver","alert","message","hasIcon","icon","filter","delay","Math","random","duration","humanize","setTimeout","reload","timestamp","local","email","description","priority","pinned","helping","helped","from","format","removedAt","removedBy","entry","RemovedQueueEntry","id_timestamp","removed_at","removed_by","entries","stack","open","personallyRemovedEntries","sortEntries","schedule","forEach","setDocumentTitle","pos","entryIndex","userInfo","document","nowOpen","has","existing","findIndex","admin","addEntry","removeEntry","addStackEntry","update","stackIndex","removeStackEntry","removed","fromEntry","unshift","sortStack","status","add","delete","sort","b","clone","diff","entryId","floor","tz","hour","minute","halfHour","startOf","charAt","scheduledOpen","getOpenHalfHours","getHalfHour","restOfDay","indexOf","admin_courses","timeslot","scheduledTime","studentEmail","staffEmail","day","startOfDay","total","slots","Array","fill","appointment","toAddIndex","filled","toRemoveIndex","padding","timeslots","split","v","parseInt","set","updated","updateAppointment","addAppointment","values","slot","removeAppointment","appointments","index","slotIndex","Promise","all","fullName","fetchedCourses","resp","localStorage","getItem","courses","reject","catch","original","removeItem","setItem","site_admin","component","windowWidth","innerWidth","addEventListener","openManageDialog","announcement","loaded","removeAnnouncement","domProps","linkifiedContent","ErrorDialog","$buefy","dialog","confirm","onConfirm","method","defaultProtocol","required","first_name","closesAt","opensAt","editSchedule","setOpen","randomizeQueue","clearQueue","_m","downloadStackAsCSV","anonymous","tooltipTimestamp","humanizedTimestamp","helpingRequestRunning","setHelping","removeRequestRunning","pinEntryRequestRunning","pinEntry","notHelpedRequestRunning","setNotHelped","messageUser","style","color","toast","prompt","inputAttrs","placeholder","trapFocus","directives","rawName","expression","target","composing","myEntry","canSignUp","signUp","updateRequest","myEntryIndex","newEntry","signUpRequest","isOpen","trim","$emit","base","classes","changeSlot","painting","defaultSchedule","nextState","mappings","modal","parent","props","events","confirmed","hasModalCard","err","csv","URLSearchParams","toString","halfHourToTime","getNextCloseTime","getNextOpenHalfHour","components","QueueSignup","QueueEntryDisplay","OrderedSchedule","numSlots","selectedAppointment","appointmentSelected","past","selectedAppointmentInPast","selectedAppointmentLocation","claimTimeslot","unclaimAppointment","group","pair","indexInTimeslot","minutes","hovering","selected","h","cellWidth","cellHeight","appointmentSlot","filledByStudent","takenByStudent","takenByStaff","filledByStaff","takenByMe","myAppointment","AppointmentCell","substr","firstOpenTimeslot","scrollToTimeslot","newSlot","oldSlot","smooth","timeslotElement","getElementById","appointmentsDisplayElement","delta","getBoundingClientRect","left","scroll","scrollLeft","behavior","find","subtract","groups","lastSeen","running","AppointmentsColumn","getColorForAvailability","selectedNumAppointments","schedules","model","temporaryDurations","callback","$$v","$set","durations","setDuration","defaultSchedules","defaultDurations","newSchedule","numAvailable","brightness","hueStart","hueMax","hueRange","maxAvailable","hue","selectedTimeslot","selectedIndex","saved","scheduleStr","join","appointmentSlots","AppointmentsDisplay","studentAppointments","signUpRequstRunning","updateAppointmentRequestRunning","cancelAppointmentRequestRunning","cancelAppointment","newAppointment","oldAppointment","startTime","endTime","link","URL","searchParams","append","toISOString","replaceAll","confirmText","cancelText","immediate","AppointmentsSignUp","AppointmentsAdminSelector","addAnnouncement","configuration","groupsPlaceholder","groupsInput","addGroups","setGroups","removeGroup","removeMember","defaultConfiguration","defaultGroups","obj","currentGroups","isArray","emailsSeen","g","parse","validateGroupsArray","found","timeUpdater","setInterval","lastMessage","url","href","protocol","WebSocket","onopen","pullQueueInfo","onclose","console","log","onmessage","msg","handleWSMessage","close","clearInterval","configurationSaved","newConfiguration","groupsSaved","newGroups","announcementAdded","params","qid","AnnouncementDisplay","OrderedQueueDisplay","AppointmentsQueueDisplay","addCourse","addQueue","editCourse","deleteCourse","deleteQueue","adminsText","saveCourse","defaultShortName","defaultFullName","defaultAdmins","admins","allAdmins","saveQueue","CourseEdit","short","full","short_name","full_name","courseUpdate","adminsUpdate","loc","use","routes","Home","meta","Admin","router","beforeEach","to","_","next","defaultIconComponent","defaultIconPack","productionTip","relativeTimeThreshold","render","$mount"],"mappings":"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","file":"js/index.308be1fd.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t\"index\": 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([0,\"chunk-vendors\"]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Queue.vue?vue&type=style&index=0&id=2c36f39c&scoped=true&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Queue.vue?vue&type=style&index=0&id=2c36f39c&scoped=true&lang=css&\"","var map = {\n\t\"./af\": \"2bfb\",\n\t\"./af.js\": \"2bfb\",\n\t\"./ar\": \"8e73\",\n\t\"./ar-dz\": \"a356\",\n\t\"./ar-dz.js\": \"a356\",\n\t\"./ar-kw\": \"423e\",\n\t\"./ar-kw.js\": \"423e\",\n\t\"./ar-ly\": \"1cfd\",\n\t\"./ar-ly.js\": \"1cfd\",\n\t\"./ar-ma\": \"0a84\",\n\t\"./ar-ma.js\": \"0a84\",\n\t\"./ar-sa\": \"8230\",\n\t\"./ar-sa.js\": \"8230\",\n\t\"./ar-tn\": \"6d83\",\n\t\"./ar-tn.js\": \"6d83\",\n\t\"./ar.js\": \"8e73\",\n\t\"./az\": \"485c\",\n\t\"./az.js\": \"485c\",\n\t\"./be\": \"1fc1\",\n\t\"./be.js\": \"1fc1\",\n\t\"./bg\": \"84aa\",\n\t\"./bg.js\": \"84aa\",\n\t\"./bm\": \"a7fa\",\n\t\"./bm.js\": \"a7fa\",\n\t\"./bn\": \"9043\",\n\t\"./bn-bd\": \"9686\",\n\t\"./bn-bd.js\": \"9686\",\n\t\"./bn.js\": \"9043\",\n\t\"./bo\": \"d26a\",\n\t\"./bo.js\": \"d26a\",\n\t\"./br\": \"6887\",\n\t\"./br.js\": \"6887\",\n\t\"./bs\": \"2554\",\n\t\"./bs.js\": \"2554\",\n\t\"./ca\": \"d716\",\n\t\"./ca.js\": \"d716\",\n\t\"./cs\": \"3c0d\",\n\t\"./cs.js\": \"3c0d\",\n\t\"./cv\": \"03ec\",\n\t\"./cv.js\": \"03ec\",\n\t\"./cy\": \"9797\",\n\t\"./cy.js\": \"9797\",\n\t\"./da\": \"0f14\",\n\t\"./da.js\": \"0f14\",\n\t\"./de\": \"b469\",\n\t\"./de-at\": \"b3eb\",\n\t\"./de-at.js\": \"b3eb\",\n\t\"./de-ch\": \"bb71\",\n\t\"./de-ch.js\": \"bb71\",\n\t\"./de.js\": \"b469\",\n\t\"./dv\": \"598a\",\n\t\"./dv.js\": \"598a\",\n\t\"./el\": \"8d47\",\n\t\"./el.js\": \"8d47\",\n\t\"./en-au\": \"0e6b\",\n\t\"./en-au.js\": \"0e6b\",\n\t\"./en-ca\": \"3886\",\n\t\"./en-ca.js\": \"3886\",\n\t\"./en-gb\": \"39a6\",\n\t\"./en-gb.js\": \"39a6\",\n\t\"./en-ie\": \"e1d3\",\n\t\"./en-ie.js\": \"e1d3\",\n\t\"./en-il\": \"7333\",\n\t\"./en-il.js\": \"7333\",\n\t\"./en-in\": \"ec2e\",\n\t\"./en-in.js\": \"ec2e\",\n\t\"./en-nz\": \"6f50\",\n\t\"./en-nz.js\": \"6f50\",\n\t\"./en-sg\": \"b7e9\",\n\t\"./en-sg.js\": \"b7e9\",\n\t\"./eo\": \"65db\",\n\t\"./eo.js\": \"65db\",\n\t\"./es\": \"898b\",\n\t\"./es-do\": \"0a3c\",\n\t\"./es-do.js\": \"0a3c\",\n\t\"./es-mx\": \"b5b7\",\n\t\"./es-mx.js\": \"b5b7\",\n\t\"./es-us\": \"55c9\",\n\t\"./es-us.js\": \"55c9\",\n\t\"./es.js\": \"898b\",\n\t\"./et\": \"ec18\",\n\t\"./et.js\": \"ec18\",\n\t\"./eu\": \"0ff2\",\n\t\"./eu.js\": \"0ff2\",\n\t\"./fa\": \"8df4\",\n\t\"./fa.js\": \"8df4\",\n\t\"./fi\": \"81e9\",\n\t\"./fi.js\": \"81e9\",\n\t\"./fil\": \"d69a\",\n\t\"./fil.js\": \"d69a\",\n\t\"./fo\": \"0721\",\n\t\"./fo.js\": \"0721\",\n\t\"./fr\": \"9f26\",\n\t\"./fr-ca\": \"d9f8\",\n\t\"./fr-ca.js\": \"d9f8\",\n\t\"./fr-ch\": \"0e49\",\n\t\"./fr-ch.js\": \"0e49\",\n\t\"./fr.js\": \"9f26\",\n\t\"./fy\": \"7118\",\n\t\"./fy.js\": \"7118\",\n\t\"./ga\": \"5120\",\n\t\"./ga.js\": \"5120\",\n\t\"./gd\": \"f6b4\",\n\t\"./gd.js\": \"f6b4\",\n\t\"./gl\": \"8840\",\n\t\"./gl.js\": \"8840\",\n\t\"./gom-deva\": \"aaf2\",\n\t\"./gom-deva.js\": \"aaf2\",\n\t\"./gom-latn\": \"0caa\",\n\t\"./gom-latn.js\": \"0caa\",\n\t\"./gu\": \"e0c5\",\n\t\"./gu.js\": \"e0c5\",\n\t\"./he\": \"c7aa\",\n\t\"./he.js\": \"c7aa\",\n\t\"./hi\": \"dc4d\",\n\t\"./hi.js\": \"dc4d\",\n\t\"./hr\": \"4ba9\",\n\t\"./hr.js\": \"4ba9\",\n\t\"./hu\": \"5b14\",\n\t\"./hu.js\": \"5b14\",\n\t\"./hy-am\": \"d6b6\",\n\t\"./hy-am.js\": \"d6b6\",\n\t\"./id\": \"5038\",\n\t\"./id.js\": \"5038\",\n\t\"./is\": \"0558\",\n\t\"./is.js\": \"0558\",\n\t\"./it\": \"6e98\",\n\t\"./it-ch\": \"6f12\",\n\t\"./it-ch.js\": \"6f12\",\n\t\"./it.js\": \"6e98\",\n\t\"./ja\": \"079e\",\n\t\"./ja.js\": \"079e\",\n\t\"./jv\": \"b540\",\n\t\"./jv.js\": \"b540\",\n\t\"./ka\": \"201b\",\n\t\"./ka.js\": \"201b\",\n\t\"./kk\": \"6d79\",\n\t\"./kk.js\": \"6d79\",\n\t\"./km\": \"e81d\",\n\t\"./km.js\": \"e81d\",\n\t\"./kn\": \"3e92\",\n\t\"./kn.js\": \"3e92\",\n\t\"./ko\": \"22f8\",\n\t\"./ko.js\": \"22f8\",\n\t\"./ku\": \"2421\",\n\t\"./ku.js\": \"2421\",\n\t\"./ky\": \"9609\",\n\t\"./ky.js\": \"9609\",\n\t\"./lb\": \"440c\",\n\t\"./lb.js\": \"440c\",\n\t\"./lo\": \"b29d\",\n\t\"./lo.js\": \"b29d\",\n\t\"./lt\": \"26f9\",\n\t\"./lt.js\": \"26f9\",\n\t\"./lv\": \"b97c\",\n\t\"./lv.js\": \"b97c\",\n\t\"./me\": \"293c\",\n\t\"./me.js\": \"293c\",\n\t\"./mi\": \"688b\",\n\t\"./mi.js\": \"688b\",\n\t\"./mk\": \"6909\",\n\t\"./mk.js\": \"6909\",\n\t\"./ml\": \"02fb\",\n\t\"./ml.js\": \"02fb\",\n\t\"./mn\": \"958b\",\n\t\"./mn.js\": \"958b\",\n\t\"./mr\": \"39bd\",\n\t\"./mr.js\": \"39bd\",\n\t\"./ms\": \"ebe4\",\n\t\"./ms-my\": \"6403\",\n\t\"./ms-my.js\": \"6403\",\n\t\"./ms.js\": \"ebe4\",\n\t\"./mt\": \"1b45\",\n\t\"./mt.js\": \"1b45\",\n\t\"./my\": \"8689\",\n\t\"./my.js\": \"8689\",\n\t\"./nb\": \"6ce3\",\n\t\"./nb.js\": \"6ce3\",\n\t\"./ne\": \"3a39\",\n\t\"./ne.js\": \"3a39\",\n\t\"./nl\": \"facd\",\n\t\"./nl-be\": \"db29\",\n\t\"./nl-be.js\": \"db29\",\n\t\"./nl.js\": \"facd\",\n\t\"./nn\": \"b84c\",\n\t\"./nn.js\": \"b84c\",\n\t\"./oc-lnc\": \"167b\",\n\t\"./oc-lnc.js\": \"167b\",\n\t\"./pa-in\": \"f3ff\",\n\t\"./pa-in.js\": \"f3ff\",\n\t\"./pl\": \"8d57\",\n\t\"./pl.js\": \"8d57\",\n\t\"./pt\": \"f260\",\n\t\"./pt-br\": \"d2d4\",\n\t\"./pt-br.js\": \"d2d4\",\n\t\"./pt.js\": \"f260\",\n\t\"./ro\": \"972c\",\n\t\"./ro.js\": \"972c\",\n\t\"./ru\": \"957c\",\n\t\"./ru.js\": \"957c\",\n\t\"./sd\": \"6784\",\n\t\"./sd.js\": \"6784\",\n\t\"./se\": \"ffff\",\n\t\"./se.js\": \"ffff\",\n\t\"./si\": \"eda5\",\n\t\"./si.js\": \"eda5\",\n\t\"./sk\": \"7be6\",\n\t\"./sk.js\": \"7be6\",\n\t\"./sl\": \"8155\",\n\t\"./sl.js\": \"8155\",\n\t\"./sq\": \"c8f3\",\n\t\"./sq.js\": \"c8f3\",\n\t\"./sr\": \"cf1e\",\n\t\"./sr-cyrl\": \"13e9\",\n\t\"./sr-cyrl.js\": \"13e9\",\n\t\"./sr.js\": \"cf1e\",\n\t\"./ss\": \"52bd\",\n\t\"./ss.js\": \"52bd\",\n\t\"./sv\": \"5fbd\",\n\t\"./sv.js\": \"5fbd\",\n\t\"./sw\": \"74dc\",\n\t\"./sw.js\": \"74dc\",\n\t\"./ta\": \"3de5\",\n\t\"./ta.js\": \"3de5\",\n\t\"./te\": \"5cbb\",\n\t\"./te.js\": \"5cbb\",\n\t\"./tet\": \"576c\",\n\t\"./tet.js\": \"576c\",\n\t\"./tg\": \"3b1b\",\n\t\"./tg.js\": \"3b1b\",\n\t\"./th\": \"10e8\",\n\t\"./th.js\": \"10e8\",\n\t\"./tk\": \"5aff\",\n\t\"./tk.js\": \"5aff\",\n\t\"./tl-ph\": \"0f38\",\n\t\"./tl-ph.js\": \"0f38\",\n\t\"./tlh\": \"cf75\",\n\t\"./tlh.js\": \"cf75\",\n\t\"./tr\": \"0e81\",\n\t\"./tr.js\": \"0e81\",\n\t\"./tzl\": \"cf51\",\n\t\"./tzl.js\": \"cf51\",\n\t\"./tzm\": \"c109\",\n\t\"./tzm-latn\": \"b53d\",\n\t\"./tzm-latn.js\": \"b53d\",\n\t\"./tzm.js\": \"c109\",\n\t\"./ug-cn\": \"6117\",\n\t\"./ug-cn.js\": \"6117\",\n\t\"./uk\": \"ada2\",\n\t\"./uk.js\": \"ada2\",\n\t\"./ur\": \"5294\",\n\t\"./ur.js\": \"5294\",\n\t\"./uz\": \"2e8c\",\n\t\"./uz-latn\": \"010e\",\n\t\"./uz-latn.js\": \"010e\",\n\t\"./uz.js\": \"2e8c\",\n\t\"./vi\": \"2921\",\n\t\"./vi.js\": \"2921\",\n\t\"./x-pseudo\": \"fd7e\",\n\t\"./x-pseudo.js\": \"fd7e\",\n\t\"./yo\": \"7f33\",\n\t\"./yo.js\": \"7f33\",\n\t\"./zh-cn\": \"5c3a\",\n\t\"./zh-cn.js\": \"5c3a\",\n\t\"./zh-hk\": \"49ab\",\n\t\"./zh-hk.js\": \"49ab\",\n\t\"./zh-mo\": \"3a6c\",\n\t\"./zh-mo.js\": \"3a6c\",\n\t\"./zh-tw\": \"90ea\",\n\t\"./zh-tw.js\": \"90ea\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"4678\";","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./QueueEntry.vue?vue&type=style&index=0&id=6f3e096e&scoped=true&lang=css&\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./QueueEntry.vue?vue&type=style&index=0&id=6f3e096e&scoped=true&lang=css&\"","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppointmentsColumn.vue?vue&type=style&index=0&id=8891e01c&scoped=true&lang=css&\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppointmentsColumn.vue?vue&type=style&index=0&id=8891e01c&scoped=true&lang=css&\"","import mod from \"-!../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=style&index=0&lang=scss&\"; export default mod; export * from \"-!../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=style&index=0&lang=scss&\"","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppointmentsSchedule.vue?vue&type=style&index=0&id=7f0e5280&scoped=true&lang=css&\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppointmentsSchedule.vue?vue&type=style&index=0&id=7f0e5280&scoped=true&lang=css&\"","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppointmentsQueue.vue?vue&type=style&index=0&id=2ffa2bb7&scoped=true&lang=css&\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppointmentsQueue.vue?vue&type=style&index=0&id=2ffa2bb7&scoped=true&lang=css&\"","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppointmentsDisplay.vue?vue&type=style&index=0&id=8d9be358&scoped=true&lang=css&\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppointmentsDisplay.vue?vue&type=style&index=0&id=8d9be358&scoped=true&lang=css&\"","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./QueueManage.vue?vue&type=style&index=0&id=7554ba43&scoped=true&lang=css&\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./QueueManage.vue?vue&type=style&index=0&id=7554ba43&scoped=true&lang=css&\"","import mod from \"-!../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=style&index=1&id=aed6b61a&scoped=true&lang=css&\"; export default mod; export * from \"-!../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=style&index=1&id=aed6b61a&scoped=true&lang=css&\"","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppointmentCell.vue?vue&type=style&index=0&id=2555b74f&scoped=true&lang=css&\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppointmentCell.vue?vue&type=style&index=0&id=2555b74f&scoped=true&lang=css&\"","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AnnouncementDisplay.vue?vue&type=style&index=0&id=5c16d93c&scoped=true&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AnnouncementDisplay.vue?vue&type=style&index=0&id=5c16d93c&scoped=true&lang=css&\"","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./OrderedSchedule.vue?vue&type=style&index=0&id=8547e726&scoped=true&lang=css&\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./OrderedSchedule.vue?vue&type=style&index=0&id=8547e726&scoped=true&lang=css&\"","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./OrderedQueue.vue?vue&type=style&index=0&id=fa86afb8&scoped=true&lang=css&\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./OrderedQueue.vue?vue&type=style&index=0&id=fa86afb8&scoped=true&lang=css&\"","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppointmentsSignUp.vue?vue&type=style&index=0&id=27c802fc&scoped=true&lang=css&\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppointmentsSignUp.vue?vue&type=style&index=0&id=27c802fc&scoped=true&lang=css&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('nav',{staticClass:\"navbar has-shadow is-spaced\"},[_c('div',{staticClass:\"container\"},[_c('div',{staticClass:\"navbar-brand\"},[_c('div',{staticClass:\"navbar-item\"},[_c('h1',{staticClass:\"title\"},[_c('a',{staticClass:\"no-link-color\",attrs:{\"href\":\"/\"},on:{\"click\":function($event){$event.preventDefault();return (function () {\n\t\t\t\t\t\t\t\t\t_vm.$root.$data.showCourses = true;\n\t\t\t\t\t\t\t\t\t_vm.$router.push('/');\n\t\t\t\t\t\t\t\t})($event)}}},[_vm._v(\"EECS Office Hours\")])])])]),_c('div',{staticClass:\"navbar-end\"},[_c('div',{staticClass:\"level is-mobile\"},[_c('div',{staticClass:\"level-left\"},[_c('div',{staticClass:\"level-item\"},[(_vm.admin)?_c('div',{staticClass:\"navbar-item\"},[_c('b-tooltip',{staticClass:\"is-left\",attrs:{\"label\":\"Student View\"}},[_c('font-awesome-icon',{staticClass:\"clickable-icon\",attrs:{\"icon\":\"user-graduate\",\"size\":\"2x\"},on:{\"click\":function($event){return _vm.setStudentView(true)}}})],1)],1):_vm._e(),(_vm.studentView)?_c('div',{staticClass:\"navbar-item\"},[_c('b-tooltip',{staticClass:\"is-left\",attrs:{\"label\":\"Exit Student View\"}},[_c('font-awesome-icon',{staticClass:\"clickable-icon\",attrs:{\"icon\":\"user-shield\",\"size\":\"2x\"},on:{\"click\":function($event){return _vm.setStudentView(false)}}})],1)],1):_vm._e(),(_vm.admin)?_c('div',{staticClass:\"navbar-item\"},[_c('router-link',{staticClass:\"no-link-color\",attrs:{\"to\":\"/admin\"}},[_c('font-awesome-icon',{attrs:{\"icon\":\"user-shield\",\"size\":\"2x\"}})],1)],1):_vm._e(),_c('div',{staticClass:\"navbar-item\"},[_c('a',{staticClass:\"no-link-color\",attrs:{\"href\":\"https://github.com/CarsonHoffman/office-hours-queue\",\"target\":\"_blank\"}},[_c('font-awesome-icon',{attrs:{\"icon\":['fab', 'github'],\"size\":\"2x\"}})],1)])])]),_c('div',{staticClass:\"level-right\"},[_c('div',{staticClass:\"level-item\"},[_c('div',{staticClass:\"navbar-item\"},[(!_vm.$root.$data.userInfoLoaded)?_c('button',{staticClass:\"button is-info is-loading\"},[_c('span',{staticClass:\"icon\"},[_c('font-awesome-icon',{attrs:{\"icon\":\"sign-in-alt\"}})],1),_c('span',[_vm._v(\"Log in\")])]):(!_vm.$root.$data.loggedIn)?_c('a',{attrs:{\"href\":_vm.loginUrl}},[_c('button',{staticClass:\"button is-info\"},[_c('span',{staticClass:\"icon\"},[_c('font-awesome-icon',{attrs:{\"icon\":\"sign-in-alt\"}})],1),_c('span',[_vm._v(\"Log in\")])])]):_c('a',{attrs:{\"href\":_vm.logoutUrl}},[_c('button',{staticClass:\"button is-danger\"},[_c('span',{staticClass:\"icon\"},[_c('font-awesome-icon',{attrs:{\"icon\":\"sign-out-alt\"}})],1),_c('span',[_vm._v(\"Log out\")])])])])])])])])])]),_c('section',{staticClass:\"section main-section\"},[_c('div',{staticClass:\"container\"},[(_vm.fetchedCourses)?_c('div',{staticClass:\"columns\"},[_c('transition',{attrs:{\"name\":\"fade\",\"mode\":\"out-in\"}},[(!_vm.$root.$data.showCourses)?_c('div',{key:\"hidden\",staticClass:\"column is-narrow\"},[_c('div',{staticClass:\"courses-spacer\"},[_c('button',{staticClass:\"button is-small is-white collapse\",on:{\"click\":function($event){_vm.$root.$data.showCourses = true}}},[_c('font-awesome-icon',{attrs:{\"icon\":\"angle-right\"}})],1)])]):_c('div',{key:\"shown\",staticClass:\"column is-narrow\"},[_c('div',{staticStyle:{\"position\":\"relative\"}},[_c('button',{staticClass:\"button is-small is-white collapse\",on:{\"click\":function($event){_vm.$root.$data.showCourses = false}}},[_c('font-awesome-icon',{attrs:{\"icon\":\"angle-left\"}})],1),_c('b-menu',{staticClass:\"sticky\",attrs:{\"activable\":false}},[_c('b-menu-list',{attrs:{\"label\":\"Courses\"}},_vm._l((_vm.courses),function(course){return _c('div',{key:course.id,staticClass:\"course\"},[_c('b-menu-item',{staticClass:\"course-item\",attrs:{\"active\":course.queues.some(function (q) { return _vm.$route.path.includes(q.id); }),\"expanded\":course.queues.length > 1 &&\n\t\t\t\t\t\t\t\t\t\t\t\t\tcourse.queues.some(function (q) { return _vm.$route.path.includes(q.id); }\n\t\t\t\t\t\t\t\t\t\t\t\t\t),\"href\":'/queues/' + course.queues[0].id},on:{\"click\":function($event){$event.preventDefault();return (function () {\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (course.queues.length === 1) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t_vm.goToQueue(course.queues[0]);\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t})($event)}},scopedSlots:_vm._u([{key:\"label\",fn:function(){return [_c('div',{staticClass:\"level is-mobile\"},[_c('div',{staticClass:\"level-left\"},[_c('div',{staticClass:\"level-item\"},[_vm._v(\" \"+_vm._s(course.shortName)+\" \")])]),_c('div',{staticClass:\"level-right\"},[_c('font-awesome-icon',{staticClass:\"clickable-icon course-favorite\",class:{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'white-icon': course.queues.some(function (q) { return _vm.$route.path.includes(q.id); }\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},attrs:{\"icon\":[\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcourse.favorite ? 'fas' : 'far',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'star' ]},on:{\"click\":function($event){return _vm.toggleFavorite(course)}}})],1)])]},proxy:true}],null,true)},_vm._l((course.queues),function(queue){return _c('b-menu-item',{key:queue.id,staticClass:\"course-item\",attrs:{\"label\":queue.name,\"active\":_vm.$route.path.includes(queue.id),\"href\":'/queues/' + queue.id},on:{\"click\":function($event){$event.preventDefault();return _vm.goToQueue(queue)}}})}),1)],1)}),0)],1)],1)])]),_c('div',{staticClass:\"column\"},[_c('transition',{attrs:{\"name\":\"fade\",\"mode\":\"out-in\"}},[_c('router-view',{key:_vm.$route.fullPath,attrs:{\"studentView\":_vm.studentView},on:{\"disconnected\":_vm.restart}})],1)],1)],1):_c('b-loading',{attrs:{\"active\":true}})],1)])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export default class Announcement {\n\tpublic readonly id!: string;\n\tpublic readonly queue!: string;\n\tpublic readonly content!: string;\n\n\tconstructor(data: { [index: string]: any }) {\n\t\tthis.id = data['id'];\n\t\tthis.queue = data['queue'];\n\t\tthis.content = data['content'];\n\t}\n}\n","function checkNotificationPromise() {\n\ttry {\n\t\tNotification.requestPermission().then();\n\t} catch (e) {\n\t\treturn false;\n\t}\n\n\treturn true;\n}\n\nexport default function SendNotification(title: string, body: string) {\n\tif ('Notification' in window) {\n\t\tif (checkNotificationPromise()) {\n\t\t\tNotification.requestPermission().then((p) => {\n\t\t\t\tif (p === 'granted') {\n\t\t\t\t\tnew Notification(title, { body: body });\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tNotification.requestPermission((p) => {\n\t\t\t\tif (p === 'granted') {\n\t\t\t\t\tnew Notification(title, { body: body });\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n}\n","export default function EscapeHTML(unsafe: string): string {\n\treturn unsafe.replace(\n\t\t/[\\u0000-\\u002F\\u003A-\\u0040\\u005B-\\u0060\\u007B-\\u00FF]/g,\n\t\t(c) => '&#' + ('000' + c.charCodeAt(0)).slice(-4) + ';'\n\t);\n}\n","import Announcement from './Announcement';\nimport Course from './Course';\nimport SendNotification from '../util/Notification';\nimport EscapeHTML from '../util/Sanitization';\nimport { DialogProgrammatic as Dialog } from 'buefy';\nimport moment, { Moment } from 'moment-timezone';\n\nexport class QueueConfiguration {\n\tpublic virtual: boolean | undefined;\n\tpublic confirmSignupMessage: string | undefined;\n\tpublic enableLocationField: boolean | undefined;\n\tpublic preventGroups: boolean | undefined;\n\tpublic preventGroupsBoost: boolean | undefined;\n\tpublic preventUnregistered: boolean | undefined;\n\tpublic prioritizeNew: boolean | undefined;\n\tpublic scheduled: boolean | undefined;\n\n\tconstructor(data: { [index: string]: any }) {\n\t\tthis.virtual = data['virtual'];\n\t\tthis.confirmSignupMessage = data['confirm_signup_message'];\n\t\tthis.enableLocationField = data['enable_location_field'];\n\t\tthis.preventGroups = data['prevent_groups'];\n\t\tthis.preventGroupsBoost = data['prevent_groups_boost'];\n\t\tthis.preventUnregistered = data['prevent_unregistered'];\n\t\tthis.prioritizeNew = data['prioritize_new'];\n\t\tthis.scheduled = data['scheduled'];\n\t}\n}\n\nexport default class Queue {\n\tpublic readonly id!: string;\n\tpublic readonly type!: 'ordered' | 'appointments';\n\tpublic readonly name!: string;\n\tpublic readonly location!: string;\n\tpublic readonly map!: string;\n\tpublic announcements: Announcement[] = [];\n\n\tpublic config: QueueConfiguration | null;\n\n\tpublic course!: Course;\n\n\tpublic websocketConnections = 0;\n\tpublic online: Set;\n\n\tconstructor(data: { [index: string]: any }, course: Course) {\n\t\tthis.id = data['id'];\n\t\tthis.type = data['type'];\n\t\tthis.name = data['name'];\n\t\tthis.location = data['location'];\n\t\tthis.map = data['map'];\n\n\t\tthis.course = course;\n\t\tthis.online = new Set();\n\t\tthis.config = null;\n\t}\n\n\tpublic async pullQueueInfo(time: Moment) {\n\t\treturn fetch(process.env.BASE_URL + `api/queues/${this.id}`)\n\t\t\t.then((res) => res.json())\n\t\t\t.then((data) => {\n\t\t\t\tthis.announcements = data['announcements'].map(\n\t\t\t\t\t(a: any) => new Announcement(a)\n\t\t\t\t);\n\t\t\t\tthis.config = new QueueConfiguration(data['config']);\n\t\t\t\tif (data.online !== undefined) {\n\t\t\t\t\tthis.online = new Set(data.online);\n\t\t\t\t}\n\n\t\t\t\treturn data;\n\t\t\t});\n\t}\n\n\tpublic handleWSMessage(type: string, data: any, ws: WebSocket) {\n\t\tswitch (type) {\n\t\t\tcase 'PING': {\n\t\t\t\tws.send(JSON.stringify({ e: 'PONG' }));\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'MESSAGE_CREATE': {\n\t\t\t\tconst broadcast = data.receiver === '';\n\t\t\t\tconst title = `Message from ${this.course.shortName} Staff`;\n\t\t\t\tSendNotification(title, data.content);\n\t\t\t\tDialog.alert({\n\t\t\t\t\ttitle: title,\n\t\t\t\t\tmessage: EscapeHTML(data.content),\n\t\t\t\t\ttype: 'is-warning',\n\t\t\t\t\thasIcon: true,\n\t\t\t\t\ticon: broadcast ? 'bullhorn' : 'envelope-open-text',\n\t\t\t\t});\n\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'ANNOUNCEMENT_CREATE': {\n\t\t\t\tthis.announcements.push(new Announcement(data));\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'ANNOUNCEMENT_DELETE': {\n\t\t\t\tthis.announcements = this.announcements.filter((a) => a.id !== data);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'REFRESH': {\n\t\t\t\t// Pick random delay to help mitigate thundering herd on server\n\t\t\t\tconst delay = Math.random() * 30000;\n\t\t\t\tDialog.alert({\n\t\t\t\t\ttitle: 'Refreshing Shortly',\n\t\t\t\t\tmessage: `The server told me that we need to refresh the page to get new information. Refreshing in ${EscapeHTML(\n\t\t\t\t\t\tmoment.duration(delay).humanize()\n\t\t\t\t\t)}…`,\n\t\t\t\t\ttype: 'is-warning',\n\t\t\t\t\thasIcon: true,\n\t\t\t\t});\n\t\t\t\tsetTimeout(() => location.reload(), delay);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'QUEUE_RANDOMIZE': {\n\t\t\t\tDialog.alert({\n\t\t\t\t\ttitle: 'Queue Randomized',\n\t\t\t\t\tmessage:\n\t\t\t\t\t\t'The order of the queue was just randomized. The priorities on the queue now correspond to that randomization.',\n\t\t\t\t\ttype: 'is-warning',\n\t\t\t\t\thasIcon: true,\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'QUEUE_CONNECTIONS_UPDATE': {\n\t\t\t\tthis.websocketConnections = data;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n}\n","import moment, { Moment } from 'moment';\n\nexport class QueueEntry {\n\tpublic readonly id!: string;\n\tpublic readonly timestamp!: Moment;\n\tpublic name: string | undefined;\n\tpublic email: string | undefined;\n\tpublic description: string | undefined;\n\tpublic location: string | undefined;\n\tpublic priority!: number;\n\tpublic pinned!: boolean;\n\tpublic helping!: boolean;\n\tpublic helped!: boolean;\n\tpublic online!: boolean;\n\n\tconstructor(data: { [index: string]: any }) {\n\t\tthis.id = data['id'];\n\t\tthis.timestamp = moment(data['id_timestamp']).local();\n\t\tthis.name = data['name'];\n\t\tthis.email = data['email'];\n\t\tthis.description = data['description'];\n\t\tthis.location = data['location'];\n\t\tthis.priority = data['priority'] || 0;\n\t\tthis.pinned = data['pinned'] || false;\n\t\tthis.helping = data['helping'] || false;\n\t\tthis.helped = data['helped'] || false;\n\t\tthis.online = data['online'] || false;\n\t}\n\n\tpublic update(data: { [index: string]: any }) {\n\t\tthis.name = data['name'] || this.name;\n\t\tthis.email = data['email'] || this.email;\n\t\tthis.description = data['description'] || this.description;\n\t\tthis.location = data['location'] || this.location;\n\t\tthis.priority = data['priority'] || this.priority;\n\t\tthis.pinned = data['pinned'] || this.pinned;\n\t\tthis.helping = data['helping'];\n\t\tthis.helped = data['helped'] || this.helped;\n\t\tthis.online = data['online'] || this.online;\n\t}\n\n\t// Get the humanized timestamp in relation to time.\n\t// We pass in a parameter here instead of using moment()\n\t// to overcome reactivity issues between Vue and moment.\n\tpublic humanizedTimestamp(time: Moment): string {\n\t\treturn this.timestamp.from(time);\n\t}\n\n\tget tooltipTimestamp(): string {\n\t\treturn this.timestamp.format('YYYY-MM-DD h:mm:ss a');\n\t}\n}\n\nexport class RemovedQueueEntry extends QueueEntry {\n\tpublic readonly removedAt!: Moment;\n\tpublic readonly removedBy!: string;\n\n\tconstructor(data: { [index: string]: any }) {\n\t\tsuper(data);\n\t\tthis.removedAt = moment(data['removed_at']).local();\n\t\tthis.removedBy = data['removed_by'];\n\t}\n\n\thumanizedTimestamp(time: Moment): string {\n\t\treturn this.removedAt.from(time);\n\t}\n\n\tget tooltipTimestamp() {\n\t\treturn this.removedAt.format('YYYY-MM-DD h:mm:ss a');\n\t}\n\n\tstatic fromEntry(\n\t\tentry: QueueEntry,\n\t\tremovedAt: Moment,\n\t\tremovedBy: string\n\t): RemovedQueueEntry {\n\t\t// This isn't pretty with having to re-parse the timestamp,\n\t\t// but it works!\n\t\treturn new RemovedQueueEntry({\n\t\t\t...entry,\n\t\t\tpinned: false,\n\t\t\tid_timestamp: entry.timestamp.format(),\n\t\t\tremoved_at: removedAt,\n\t\t\tremoved_by: removedBy,\n\t\t});\n\t}\n}\n","import Queue from './Queue';\nimport { QueueEntry, RemovedQueueEntry } from './QueueEntry';\nimport SendNotification from '../util/Notification';\nimport {\n\tDialogProgrammatic as Dialog,\n\tToastProgrammatic as Toast,\n} from 'buefy';\nimport moment, { Moment } from 'moment-timezone';\nimport linkifyStr from 'linkifyjs/string';\nimport g from '../main';\nimport ErrorDialog from '@/util/ErrorDialog';\nimport EscapeHTML from '@/util/Sanitization';\n\nexport default class OrderedQueue extends Queue {\n\tpublic entries: QueueEntry[] = [];\n\tpublic stack: RemovedQueueEntry[] = [];\n\tpublic open = false;\n\tpublic schedule?: string;\n\n\tpublic personallyRemovedEntries = new Set();\n\n\tpublic async pullQueueInfo(time: Moment) {\n\t\treturn super.pullQueueInfo(time).then((data) => {\n\t\t\tthis.entries = data['queue'].map((e: any) => new QueueEntry(e));\n\t\t\tthis.sortEntries();\n\t\t\tthis.stack = (data['stack'] || []).map(\n\t\t\t\t(e: any) => new RemovedQueueEntry(e)\n\t\t\t);\n\t\t\tthis.open = data['open'];\n\t\t\tthis.schedule = data['schedule'];\n\t\t\tthis.online.forEach((email: string) => {\n\t\t\t\tthis.entries\n\t\t\t\t\t.filter((e: QueueEntry) => e.email === email)\n\t\t\t\t\t.forEach((e: QueueEntry) => {\n\t\t\t\t\t\te.online = true;\n\t\t\t\t\t});\n\t\t\t\tthis.stack\n\t\t\t\t\t.filter((e: QueueEntry) => e.email === email)\n\t\t\t\t\t.forEach((e: QueueEntry) => {\n\t\t\t\t\t\te.online = true;\n\t\t\t\t\t});\n\t\t\t});\n\t\t\tthis.setDocumentTitle();\n\t\t});\n\t}\n\n\tpublic setDocumentTitle() {\n\t\tlet title = '';\n\t\tif (this.entries.length > 0) {\n\t\t\ttitle += '(';\n\t\t\tconst pos = this.entryIndex(g.$data.userInfo.email);\n\t\t\tif (pos !== -1) {\n\t\t\t\ttitle += `#${pos + 1} of `;\n\t\t\t}\n\t\t\ttitle += `${this.entries.length}) `;\n\t\t}\n\t\ttitle += `${this.course.shortName} Office Hours`;\n\t\tdocument.title = title;\n\t}\n\n\tget admin(): boolean {\n\t\treturn (\n\t\t\t!g.studentView &&\n\t\t\tg.$data.userInfo.admin_courses !== undefined &&\n\t\t\tg.$data.userInfo.admin_courses.includes(this.course.id)\n\t\t);\n\t}\n\n\tpublic handleWSMessage(type: string, data: any, ws: WebSocket) {\n\t\tsuper.handleWSMessage(type, data, ws);\n\n\t\tswitch (type) {\n\t\t\tcase 'QUEUE_OPEN': {\n\t\t\t\tconst nowOpen = data;\n\t\t\t\tthis.open = nowOpen;\n\t\t\t\tToast.open({\n\t\t\t\t\tduration: 10000,\n\t\t\t\t\tmessage: `The queue is now ${nowOpen ? 'open!' : 'closed.'}`,\n\t\t\t\t\ttype: nowOpen ? 'is-success' : 'is-danger',\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'ENTRY_CREATE': {\n\t\t\t\tif (data.email !== undefined) {\n\t\t\t\t\tdata.online = this.online.has(data.email);\n\t\t\t\t}\n\t\t\t\tconst existing = this.entries.findIndex((e) => e.id === data.id);\n\t\t\t\tif (existing !== -1) {\n\t\t\t\t\tthis.entries.splice(existing, 1, new QueueEntry(data));\n\t\t\t\t\tthis.sortEntries();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (this.admin) {\n\t\t\t\t\tToast.open({\n\t\t\t\t\t\tduration: 2000,\n\t\t\t\t\t\tmessage: `${EscapeHTML(data.email)} joined the queue!`,\n\t\t\t\t\t\ttype: 'is-primary',\n\t\t\t\t\t});\n\n\t\t\t\t\tif (this.entries.length === 0) {\n\t\t\t\t\t\tSendNotification(\n\t\t\t\t\t\t\t'A new student joined the queue!',\n\t\t\t\t\t\t\t`A wild ${data.email} has appeared!`\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tthis.addEntry(new QueueEntry(data));\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'ENTRY_REMOVE': {\n\t\t\t\tthis.removeEntry(data.id);\n\t\t\t\tif (data.email !== undefined) {\n\t\t\t\t\tdata.online = this.online.has(data.email);\n\t\t\t\t}\n\t\t\t\tthis.addStackEntry(new RemovedQueueEntry(data));\n\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'ENTRY_UPDATE': {\n\t\t\t\tif (data.email !== undefined) {\n\t\t\t\t\tdata.online = this.online.has(data.email);\n\t\t\t\t}\n\t\t\t\tconst i = this.entries.findIndex((e) => e.id === data.id);\n\t\t\t\tif (i !== -1) {\n\t\t\t\t\tthis.entries[i].update(data);\n\t\t\t\t\tthis.sortEntries();\n\t\t\t\t} else {\n\t\t\t\t\tconst stackIndex = this.stack.findIndex((e) => e.id === data.id);\n\t\t\t\t\tif (stackIndex !== -1) {\n\t\t\t\t\t\tthis.stack.splice(stackIndex, 1, new RemovedQueueEntry(data));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'ENTRY_PINNED': {\n\t\t\t\tSendNotification(\n\t\t\t\t\t'You were pinned!',\n\t\t\t\t\t'Another staff member will be joining shortly!'\n\t\t\t\t);\n\t\t\t\tDialog.alert({\n\t\t\t\t\ttitle: 'Pinned!',\n\t\t\t\t\tmessage:\n\t\t\t\t\t\t`You were pinned on the queue! More help is on the way. ` +\n\t\t\t\t\t\t`You'll get a notification when you've been popped again.`,\n\t\t\t\t\ttype: 'is-info',\n\t\t\t\t\thasIcon: true,\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'ENTRY_HELPING': {\n\t\t\t\tif (data.helping) {\n\t\t\t\t\tSendNotification(\n\t\t\t\t\t\t'You are being helped!',\n\t\t\t\t\t\t`Please be ready for a staff member to join you!`\n\t\t\t\t\t);\n\t\t\t\t\tDialog.alert({\n\t\t\t\t\t\ttitle: `You're up!`,\n\t\t\t\t\t\tmessage: `A staff member is now coming to help you. Please be ready for them to join!`,\n\t\t\t\t\t\ttype: 'is-success',\n\t\t\t\t\t\thasIcon: true,\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tSendNotification(\n\t\t\t\t\t\t'You are no longer being helped.',\n\t\t\t\t\t\t`A staff member indicated that they're no longer helping you.`\n\t\t\t\t\t);\n\t\t\t\t\tDialog.alert({\n\t\t\t\t\t\ttitle: 'No longer helping.',\n\t\t\t\t\t\tmessage: `A staff member indicated that they're no longer helping you. If you're not expecting this, make sure you're available for them!`,\n\t\t\t\t\t\ttype: 'is-warning',\n\t\t\t\t\t\thasIcon: true,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'STACK_REMOVE': {\n\t\t\t\tthis.removeStackEntry(data.id);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'QUEUE_CLEAR': {\n\t\t\t\t// Estimate what the stack will look like based on\n\t\t\t\t// the information received from the event. The removed\n\t\t\t\t// time might differ by a second or so versus when the\n\t\t\t\t// user refreshes, but this should work fine.\n\t\t\t\tconst removed = this.entries.map((e) =>\n\t\t\t\t\tRemovedQueueEntry.fromEntry(e, moment(), data)\n\t\t\t\t);\n\t\t\t\tthis.entries = [];\n\t\t\t\tthis.stack.unshift(...removed);\n\t\t\t\tthis.sortStack();\n\t\t\t\tif (this.admin && data !== null) {\n\t\t\t\t\tToast.open({\n\t\t\t\t\t\tduration: 60000,\n\t\t\t\t\t\tmessage: `${EscapeHTML(data)} cleared the queue!`,\n\t\t\t\t\t\ttype: 'is-danger',\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tToast.open({\n\t\t\t\t\t\tduration: 60000,\n\t\t\t\t\t\tmessage: 'The queue has been cleared for this session.',\n\t\t\t\t\t\ttype: 'is-danger',\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'NOT_HELPED': {\n\t\t\t\tDialog.alert({\n\t\t\t\t\ttitle: `We Couldn't Find You!`,\n\t\t\t\t\tmessage:\n\t\t\t\t\t\t`A staff member attempted to help you, but they let us know that they weren't able to make contact with you. Please make sure your location is descriptive or your meeting link is still valid!` +\n\t\t\t\t\t\t(this.config?.prioritizeNew\n\t\t\t\t\t\t\t? `

This didn't count as your first meeting of the day.`\n\t\t\t\t\t\t\t: ''),\n\t\t\t\t\thasIcon: true,\n\t\t\t\t\ttype: 'is-danger',\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'USER_STATUS_UPDATE': {\n\t\t\t\tconst email = data.email;\n\t\t\t\tconst online = data.status === 'online';\n\t\t\t\tif (online) {\n\t\t\t\t\tthis.online.add(email);\n\t\t\t\t} else {\n\t\t\t\t\tthis.online.delete(email);\n\t\t\t\t}\n\t\t\t\tthis.entries\n\t\t\t\t\t.filter((e: QueueEntry) => e.email === email)\n\t\t\t\t\t.forEach((e: QueueEntry) => {\n\t\t\t\t\t\te.online = online;\n\t\t\t\t\t});\n\t\t\t\tthis.stack\n\t\t\t\t\t.filter((e: QueueEntry) => e.email === email)\n\t\t\t\t\t.forEach((e: QueueEntry) => {\n\t\t\t\t\t\te.online = online;\n\t\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tthis.setDocumentTitle();\n\t}\n\n\tpublic addEntry(entry: QueueEntry) {\n\t\tthis.entries.push(entry);\n\t\tthis.sortEntries();\n\t}\n\n\tpublic sortEntries() {\n\t\tthis.entries.sort((a, b) => {\n\t\t\tif (a.pinned != b.pinned) {\n\t\t\t\treturn a.pinned ? -1 : 1;\n\t\t\t}\n\n\t\t\tif (a.helping != b.helping) {\n\t\t\t\treturn a.helping ? -1 : 1;\n\t\t\t}\n\n\t\t\tif (a.priority != b.priority) {\n\t\t\t\t// If a's priority is higher, it should come first.\n\t\t\t\treturn b.priority - a.priority;\n\t\t\t}\n\n\t\t\treturn a.id < b.id ? -1 : a.id > b.id ? 1 : 0;\n\t\t});\n\t}\n\n\tpublic sortStack() {\n\t\tthis.stack.sort((a, b) => {\n\t\t\tif (a.removedAt != b.removedAt) {\n\t\t\t\treturn b.removedAt.clone().diff(a.removedAt);\n\t\t\t}\n\t\t\treturn a.id > b.id ? -1 : a.id < b.id ? 1 : 0;\n\t\t});\n\t}\n\n\tpublic removeEntry(entryId: string) {\n\t\tthis.entries = this.entries.filter((e) => e.id !== entryId);\n\t}\n\n\tpublic addStackEntry(entry: RemovedQueueEntry) {\n\t\tthis.stack.unshift(entry);\n\t\tthis.stack.sort((a, b) => {\n\t\t\treturn b.removedAt.diff(a.removedAt);\n\t\t});\n\t}\n\n\tpublic removeStackEntry(entryId: string) {\n\t\tthis.stack = this.stack.filter((e) => e.id !== entryId);\n\t}\n\n\tpublic getHalfHour(time: Moment): number {\n\t\t// This represents the half hour with regard to the normal\n\t\t// 48-half-hour schedule, not necessarily the index in the day\n\t\t// (looking at you, daylight savings)\n\t\treturn Math.floor(\n\t\t\t(time\n\t\t\t\t.clone()\n\t\t\t\t.tz('America/New_York')\n\t\t\t\t.hour() *\n\t\t\t\t60 +\n\t\t\t\ttime\n\t\t\t\t\t.clone()\n\t\t\t\t\t.tz('America/New_York')\n\t\t\t\t\t.minute()) /\n\t\t\t\t30\n\t\t);\n\t}\n\n\tpublic halfHourToTime(halfHour: number): Moment {\n\t\t// We need to calculate the hour manually instead of just using minutes\n\t\t// for daylight savings purposes (if the half hour was usually at 10 AM,\n\t\t// we do not want it to occur at 9 AM or 11 AM)\n\t\treturn moment()\n\t\t\t.tz('America/New_York')\n\t\t\t.startOf('day')\n\t\t\t.hour(Math.floor(halfHour / 2))\n\t\t\t.minute((halfHour % 2) * 30)\n\t\t\t.local();\n\t}\n\n\tpublic getOpenHalfHours(): number[] {\n\t\tif (this.schedule === undefined) {\n\t\t\treturn [];\n\t\t}\n\n\t\tconst open: number[] = [];\n\n\t\tfor (let i = 0; i < this.schedule.length; i++) {\n\t\t\tif (this.schedule.charAt(i) !== 'c') {\n\t\t\t\topen.push(i);\n\t\t\t}\n\t\t}\n\n\t\treturn open;\n\t}\n\n\tpublic isOpen(time: Moment): boolean {\n\t\treturn this.config?.scheduled ? this.scheduledOpen(time) : this.open;\n\t}\n\n\tpublic scheduledOpen(time: Moment): boolean {\n\t\treturn this.getOpenHalfHours().includes(this.getHalfHour(time));\n\t}\n\n\tpublic getNextOpenHalfHour(halfHour: number): number {\n\t\tconst open = this.getOpenHalfHours();\n\t\tfor (let i = 0; i < open.length; i++) {\n\t\t\tif (open[i] > halfHour) {\n\t\t\t\treturn open[i];\n\t\t\t}\n\t\t}\n\n\t\treturn -1;\n\t}\n\n\tpublic getNextCloseTime(halfHour: number): number {\n\t\tconst open = this.getOpenHalfHours();\n\t\tconst restOfDay = open.slice(open.indexOf(halfHour));\n\n\t\tfor (let i = 1; i < restOfDay.length; i++) {\n\t\t\tif (restOfDay[i] - 1 > restOfDay[i - 1]) {\n\t\t\t\treturn restOfDay[i - 1] + 1;\n\t\t\t}\n\t\t}\n\n\t\treturn restOfDay[restOfDay.length - 1] + 1;\n\t}\n\n\tpublic entryIndex(email: string | undefined): number {\n\t\tif (email === undefined) {\n\t\t\treturn -1;\n\t\t}\n\n\t\treturn this.entries.findIndex((e) => e.email === email);\n\t}\n\n\tpublic entry(email: string | undefined): QueueEntry | null {\n\t\tconst i = this.entryIndex(email);\n\t\treturn i !== -1 ? this.entries[i] : null;\n\t}\n}\n","import moment, { Moment } from 'moment-timezone';\n\nexport class AppointmentSlot {\n\tpublic readonly scheduledTime!: Moment;\n\tpublic readonly timeslot!: number;\n\tpublic readonly duration!: number;\n\n\tconstructor(time: Moment, timeslot: number, duration: number) {\n\t\tthis.scheduledTime = time;\n\t\tthis.timeslot = timeslot;\n\t\tthis.duration = duration;\n\t}\n\n\tget filled() {\n\t\treturn false;\n\t}\n\n\tget filledByStudent() {\n\t\treturn false;\n\t}\n\n\tget filledByStaff() {\n\t\treturn false;\n\t}\n\n\tpast(time: Moment) {\n\t\treturn this.scheduledTime < time;\n\t}\n}\n\nexport class Appointment extends AppointmentSlot {\n\tpublic readonly id!: string;\n\tpublic readonly timestamp!: Moment;\n\tpublic readonly name: string | undefined;\n\tpublic readonly studentEmail: string | undefined;\n\tpublic readonly staffEmail: string | undefined;\n\tpublic readonly description: string | undefined;\n\tpublic readonly location: string | undefined;\n\n\tconstructor(data: { [index: string]: any }) {\n\t\tsuper(\n\t\t\tmoment(data['scheduled_time']).local(),\n\t\t\tdata['timeslot'],\n\t\t\tdata['duration']\n\t\t);\n\n\t\tthis.id = data['id'];\n\t\tthis.timestamp = moment(data['id_timestamp']).local();\n\t\tthis.name = data['name'];\n\t\tthis.studentEmail = data['student_email'];\n\t\tthis.staffEmail = data['staff_email'];\n\t\tthis.description = data['description'];\n\t\tthis.location = data['location'];\n\t}\n\n\tget filled() {\n\t\treturn true;\n\t}\n\n\tget filledByStudent() {\n\t\t// If this appointment exists and both the staff and student emails are\n\t\t// undefined, it must be filled by a student (and we don't have permission\n\t\t// to know who).\n\t\treturn this.studentEmail !== undefined || this.staffEmail === undefined;\n\t}\n\n\tget filledByStaff() {\n\t\t// This isn't relevant for non-admins.\n\t\treturn this.staffEmail !== undefined;\n\t}\n}\n","import Queue from './Queue';\nimport { Appointment, AppointmentSlot } from './Appointment';\nimport Vue from 'vue';\nimport moment, { Moment } from 'moment-timezone';\n\n// A specific slot of time that can contain any number of\n// concurrent appointments.\nexport class AppointmentsTimeslot {\n\tpublic readonly timeslot!: number;\n\tpublic readonly time!: Moment;\n\tpublic readonly duration!: number;\n\tpublic slots: AppointmentSlot[] = [];\n\n\tconstructor(\n\t\tday: number,\n\t\tstartOfDay: Moment,\n\t\ttimeslot: number,\n\t\tduration: number,\n\t\ttotal: number\n\t) {\n\t\tthis.timeslot = timeslot;\n\t\tthis.duration = duration;\n\t\t// We need to calculate the hour manually instead of just using minutes\n\t\t// for daylight savings purposes (if the appointment was usually at 10 AM,\n\t\t// we do not want it to occur at 9 AM or 11 AM)\n\t\tthis.time = startOfDay\n\t\t\t.clone()\n\t\t\t.hour(Math.floor((timeslot * duration) / 60))\n\t\t\t.minute((timeslot * duration) % 60);\n\t\tthis.slots = new Array(total);\n\t\tthis.slots.fill(new AppointmentSlot(this.time, timeslot, duration));\n\t}\n\n\tpast(time: Moment) {\n\t\treturn this.time.clone().diff(time) < 0;\n\t}\n\n\taddAppointment(appointment: Appointment) {\n\t\tconst toAddIndex = this.slots.findIndex((s) => !s.filled);\n\t\tif (toAddIndex !== -1) {\n\t\t\tthis.slots.splice(toAddIndex, 1, appointment);\n\t\t} else {\n\t\t\tthis.slots.push(appointment);\n\t\t}\n\t}\n\n\tremoveAppointment(id: string) {\n\t\tconst toRemoveIndex = this.slots.findIndex(\n\t\t\t(s) => s.filled && (s as Appointment).id === id\n\t\t);\n\t\tif (toRemoveIndex !== -1) {\n\t\t\tthis.slots.splice(\n\t\t\t\ttoRemoveIndex,\n\t\t\t\t1,\n\t\t\t\tnew AppointmentSlot(this.time, this.timeslot, this.duration)\n\t\t\t);\n\t\t\treturn id;\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tupdateAppointment(appointment: Appointment) {\n\t\tconst i = this.slots.findIndex(\n\t\t\t(s) => s.filled && (s as Appointment).id === appointment.id\n\t\t);\n\t\tif (i !== -1) {\n\t\t\tthis.slots.splice(i, 1, appointment);\n\t\t\treturn appointment;\n\t\t}\n\t\treturn undefined;\n\t}\n}\n\nexport class AppointmentsSchedule {\n\tpublic readonly day!: number;\n\tpublic readonly duration!: number;\n\tpublic readonly padding!: number;\n\tpublic readonly timeslots: { [index: number]: AppointmentsTimeslot } = {};\n\n\tconstructor(\n\t\tday: number,\n\t\tstartOfDay: Moment,\n\t\tduration: number,\n\t\tpadding: number,\n\t\tschedule: string\n\t) {\n\t\tthis.day = day;\n\t\tthis.duration = duration;\n\t\tthis.padding = padding;\n\t\tschedule.split('').forEach((v, i) => {\n\t\t\tconst total = parseInt(v);\n\t\t\tif (total > 0) {\n\t\t\t\tVue.set(\n\t\t\t\t\tthis.timeslots,\n\t\t\t\t\ti,\n\t\t\t\t\tnew AppointmentsTimeslot(day, startOfDay, i, this.duration, total)\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\t}\n\n\tget numSlots() {\n\t\treturn Object.keys(this.timeslots).length;\n\t}\n\n\t// Returns a map of timeslots to appointments.\n\t// Would really like to do this more functionally but the object\n\t// seems to make things hard :(\n\tget appointmentSlots(): { [index: number]: AppointmentSlot[] } {\n\t\tconst appointments: { [index: number]: AppointmentSlot[] } = {};\n\t\tfor (const [index, slot] of Object.entries(this.timeslots)) {\n\t\t\tconst slotIndex = parseInt(index);\n\t\t\tappointments[slotIndex] = slot.slots;\n\t\t}\n\n\t\treturn appointments;\n\t}\n\n\taddAppointment(appointment: Appointment) {\n\t\t// First look for appointment to update, if we already know about it\n\t\tconst updated = this.timeslots[appointment.timeslot].updateAppointment(\n\t\t\tappointment\n\t\t);\n\n\t\tif (updated === undefined) {\n\t\t\tthis.timeslots[appointment.timeslot].addAppointment(appointment);\n\t\t}\n\t}\n\n\t// Yes, this is slow. At least it's rare. :)\n\tremoveAppointment(id: string) {\n\t\tObject.values(this.timeslots).forEach((slot) => {\n\t\t\tconst removed = slot.removeAppointment(id);\n\t\t\tif (removed !== undefined) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t});\n\t}\n\n\tupdateAppointment(appointment: Appointment) {\n\t\tthis.timeslots[appointment.timeslot].updateAppointment(appointment);\n\t}\n}\n\nexport class AppointmentsQueue extends Queue {\n\tpublic schedule: AppointmentsSchedule | undefined;\n\n\tpublic handleWSMessage(type: string, data: any, ws: WebSocket) {\n\t\tsuper.handleWSMessage(type, data, ws);\n\n\t\tswitch (type) {\n\t\t\tcase 'APPOINTMENT_CREATE': {\n\t\t\t\tif (this.schedule !== undefined) {\n\t\t\t\t\tthis.schedule.addAppointment(new Appointment(data));\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'APPOINTMENT_REMOVE': {\n\t\t\t\tif (this.schedule !== undefined) {\n\t\t\t\t\tthis.schedule.removeAppointment(data['id']);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'APPOINTMENT_UPDATE': {\n\t\t\t\tif (this.schedule !== undefined) {\n\t\t\t\t\tthis.schedule.updateAppointment(new Appointment(data));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tpullQueueInfo(time: Moment) {\n\t\treturn Promise.all([\n\t\t\tsuper.pullQueueInfo(time),\n\t\t\tfetch(\n\t\t\t\tprocess.env.BASE_URL +\n\t\t\t\t\t`api/queues/${this.id}/appointments/schedule/${this.day(time)}`\n\t\t\t),\n\t\t\tfetch(\n\t\t\t\tprocess.env.BASE_URL +\n\t\t\t\t\t`api/queues/${this.id}/appointments/${this.day(time)}`\n\t\t\t),\n\t\t])\n\t\t\t.then(([_, schedule, appointments]) =>\n\t\t\t\tPromise.all([schedule.json(), appointments.json()])\n\t\t\t)\n\t\t\t.then(([schedule, appointments]) => {\n\t\t\t\tVue.set(\n\t\t\t\t\tthis,\n\t\t\t\t\t'schedule',\n\t\t\t\t\tnew AppointmentsSchedule(\n\t\t\t\t\t\tthis.day(time),\n\t\t\t\t\t\ttime\n\t\t\t\t\t\t\t.clone()\n\t\t\t\t\t\t\t.tz('America/New_York')\n\t\t\t\t\t\t\t.startOf('day'),\n\t\t\t\t\t\tschedule['duration'],\n\t\t\t\t\t\tschedule['padding'],\n\t\t\t\t\t\tschedule['schedule']\n\t\t\t\t\t)\n\t\t\t\t);\n\n\t\t\t\tappointments.forEach((v: any) => {\n\t\t\t\t\tthis.schedule?.addAppointment(new Appointment(v));\n\t\t\t\t});\n\t\t\t});\n\t}\n\n\tday(time: Moment) {\n\t\treturn time\n\t\t\t.clone()\n\t\t\t.tz('America/New_York')\n\t\t\t.day();\n\t}\n}\n","import Queue from './Queue';\nimport OrderedQueue from './OrderedQueue';\nimport { AppointmentsQueue } from './AppointmentsQueue';\n\nexport default class Course {\n\tpublic readonly id: string;\n\tpublic readonly shortName: string;\n\tpublic readonly fullName: string;\n\n\tpublic readonly queues: Queue[] = [];\n\n\tpublic favorite = false;\n\n\tconstructor(data: { [index: string]: any }) {\n\t\tthis.id = data['id'];\n\t\tthis.shortName = data['short_name'];\n\t\tthis.fullName = data['full_name'];\n\t\tthis.queues = data['queues'].map((q: any) => {\n\t\t\tswitch (q.type) {\n\t\t\t\tcase 'ordered': {\n\t\t\t\t\treturn new OrderedQueue(q, this);\n\t\t\t\t}\n\t\t\t\tcase 'appointments': {\n\t\t\t\t\treturn new AppointmentsQueue(q, this);\n\t\t\t\t}\n\t\t\t\tdefault: {\n\t\t\t\t\treturn undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n}\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport { Component, Prop, Vue } from 'vue-property-decorator';\nimport Course from './types/Course';\nimport Queue from './types/Queue';\n\nimport { library } from '@fortawesome/fontawesome-svg-core';\nimport {\n\tfaSignInAlt,\n\tfaSignOutAlt,\n\tfaUserShield,\n\tfaStar as solidStar,\n\tfaUserGraduate,\n\tfaAngleLeft,\n\tfaAngleRight,\n} from '@fortawesome/free-solid-svg-icons';\nimport { faStar as regularStar } from '@fortawesome/free-regular-svg-icons';\nimport { faGithub } from '@fortawesome/free-brands-svg-icons';\n\nlibrary.add(\n\tfaSignInAlt,\n\tfaSignOutAlt,\n\tfaUserShield,\n\tfaGithub,\n\tsolidStar,\n\tregularStar,\n\tfaUserGraduate,\n\tfaAngleLeft,\n\tfaAngleRight\n);\n\n@Component\nexport default class App extends Vue {\n\tfetchedCourses = false;\n\tstudentView = false;\n\n\tcreated() {\n\t\tif ('Notification' in window) {\n\t\t\tNotification.requestPermission();\n\t\t}\n\n\t\t// Stop jitter on page load\n\t\tthis.$root.$data.showCourses = !this.$route.path.includes('/queues/');\n\n\t\tthis.restart();\n\t}\n\n\tget loginUrl() {\n\t\treturn process.env.BASE_URL + 'api/oauth2login';\n\t}\n\n\tget logoutUrl() {\n\t\treturn process.env.BASE_URL + 'api/logout';\n\t}\n\n\tget courses() {\n\t\treturn Object.values(this.$root.$data.courses)\n\t\t\t.filter((c: Course) => c.queues.length > 0)\n\t\t\t.sort((a: Course, b: Course) => {\n\t\t\t\tif (a.favorite !== b.favorite) {\n\t\t\t\t\treturn a.favorite ? -1 : 1;\n\t\t\t\t}\n\t\t\t\treturn a.shortName < b.shortName ? -1 : 1;\n\t\t\t});\n\t}\n\n\tget admin() {\n\t\treturn (\n\t\t\t!this.studentView &&\n\t\t\tthis.$root.$data.loggedIn &&\n\t\t\t(this.$root.$data.userInfo.site_admin ||\n\t\t\t\tthis.$root.$data.userInfo.admin_courses.length > 0)\n\t\t);\n\t}\n\n\tgoToQueue(q: Queue) {\n\t\tthis.$root.$data.showCourses = false;\n\t\tthis.$router.push('/queues/' + q.id);\n\t}\n\n\tsetStudentView(studentView: boolean) {\n\t\tthis.studentView = studentView;\n\t\tthis.$root.$data.studentView = studentView;\n\t}\n\n\t// Drop all courses and authorization information and re-start\n\t// the loading process. This is essentially a complete refresh\n\t// without actually refreshing the page.\n\trestart() {\n\t\tthis.fetchedCourses = false;\n\t\tVue.set(this.$root.$data, 'courses', {});\n\t\tVue.set(this.$root.$data, 'queues', {});\n\n\t\tVue.set(this.$root.$data, 'userInfoLoaded', false);\n\t\tVue.set(this.$root.$data, 'loggedIn', false);\n\t\tVue.set(this.$root.$data, 'userInfo', {});\n\n\t\tfetch(process.env.BASE_URL + 'api/courses')\n\t\t\t.then((resp) => resp.json())\n\t\t\t.then((data) => {\n\t\t\t\tdata.map((c: any) => {\n\t\t\t\t\tconst course = new Course(c);\n\t\t\t\t\tcourse.favorite =\n\t\t\t\t\t\tlocalStorage.getItem('favoriteCourses-' + course.id) !== null;\n\t\t\t\t\tVue.set(this.$root.$data.courses, c.id, course);\n\t\t\t\t\tfor (const q of course.queues) {\n\t\t\t\t\t\tVue.set(this.$root.$data.queues, q.id, q);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tthis.fetchedCourses = true;\n\t\t\t});\n\n\t\tfetch(process.env.BASE_URL + 'api/users/@me')\n\t\t\t.then((resp) => {\n\t\t\t\tif (resp.status !== 200) {\n\t\t\t\t\treturn Promise.reject('not logged in');\n\t\t\t\t}\n\t\t\t\treturn resp.json();\n\t\t\t})\n\t\t\t.then((data) => {\n\t\t\t\tVue.set(this.$root.$data, 'userInfoLoaded', true);\n\t\t\t\tVue.set(this.$root.$data, 'loggedIn', true);\n\t\t\t\tVue.set(this.$root.$data, 'userInfo', data);\n\t\t\t})\n\t\t\t.catch((p) => (this.$root.$data.userInfoLoaded = true));\n\t}\n\n\ttoggleFavorite(c: Course) {\n\t\tconst original = c.favorite;\n\t\tif (original) {\n\t\t\tlocalStorage.removeItem('favoriteCourses-' + c.id);\n\t\t} else {\n\t\t\tlocalStorage.setItem('favoriteCourses-' + c.id, 'favorite');\n\t\t}\n\t\tc.favorite = !original;\n\t}\n}\n","import mod from \"-!../node_modules/cache-loader/dist/cjs.js??ref--14-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/ts-loader/index.js??ref--14-3!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../node_modules/cache-loader/dist/cjs.js??ref--14-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/ts-loader/index.js??ref--14-3!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=aed6b61a&scoped=true&\"\nimport script from \"./App.vue?vue&type=script&lang=ts&\"\nexport * from \"./App.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./App.vue?vue&type=style&index=0&lang=scss&\"\nimport style1 from \"./App.vue?vue&type=style&index=1&id=aed6b61a&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"aed6b61a\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"hero is-primary\"},[_c('div',{staticClass:\"hero-body\"},[(_vm.mobile)?_c('font-awesome-icon',{staticClass:\"block\",attrs:{\"icon\":\"hand-point-up\",\"size\":\"10x\"}}):_c('font-awesome-icon',{staticClass:\"block\",attrs:{\"icon\":\"hand-point-left\",\"size\":\"10x\"}}),_c('h1',{staticClass:\"title block\"},[_vm._v(\"Welcome to EECS Office Hours!\")]),(_vm.mobile)?_c('h2',{staticClass:\"subtitle\"},[_vm._v(\"Select a course above to begin.\")]):_c('h2',{staticClass:\"subtitle\"},[_vm._v(\"Select a course on the left to begin.\")])],1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Vue from 'vue';\nimport { Component, Prop } from 'vue-property-decorator';\n\nimport { library } from '@fortawesome/fontawesome-svg-core';\nimport {\n\tfaHandPointUp,\n\tfaHandPointLeft,\n} from '@fortawesome/free-solid-svg-icons';\n\nlibrary.add(faHandPointUp, faHandPointLeft);\n\n@Component\nexport default class HomePage extends Vue {\n\twindowWidth = window.innerWidth;\n\n\tcreated() {\n\t\tthis.$root.$data.showCourses = true;\n\t}\n\n\tmounted() {\n\t\twindow.addEventListener('resize', () => {\n\t\t\tthis.windowWidth = window.innerWidth;\n\t\t});\n\t}\n\n\tget mobile() {\n\t\treturn this.windowWidth <= 768;\n\t}\n}\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--14-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Home.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--14-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Home.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./Home.vue?vue&type=template&id=32edf83a&\"\nimport script from \"./Home.vue?vue&type=script&lang=ts&\"\nexport * from \"./Home.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.found)?_c('div',{staticClass:\"box\"},[_c('div',{staticStyle:{\"position\":\"relative\"}},[(_vm.admin)?_c('div',{staticClass:\"buttons top-right\"},[_c('b-tooltip',{attrs:{\"label\":\"Number of active connections to this queue\"}},[(_vm.queue !== null)?_c('button',{staticClass:\"button is-white no-hover\"},[_c('span',{staticClass:\"icon\"},[_c('font-awesome-icon',{attrs:{\"icon\":\"ethernet\"}})],1),_c('span',[_c('b',[_vm._v(_vm._s(_vm.queue.websocketConnections))])])]):_vm._e()]),_c('button',{staticClass:\"button is-light\",on:{\"click\":_vm.openManageDialog}},[_c('span',{staticClass:\"icon\"},[_c('font-awesome-icon',{attrs:{\"icon\":\"cog\"}})],1),_c('span',[_vm._v(\"Manage Queue\")])])],1):_vm._e(),(_vm.queue !== null && _vm.queue.announcements.length > 0)?_c('section',{staticClass:\"section\"},[_c('h1',{staticClass:\"title\"},[_vm._v(\"Announcements\")]),_vm._l((_vm.queue.announcements),function(announcement){return _c('div',{key:announcement.id,staticClass:\"block\"},[_c('announcement-display',{attrs:{\"announcement\":announcement,\"queue\":_vm.queue,\"admin\":_vm.admin}})],1)})],2):_vm._e(),(_vm.queue.type === 'ordered')?_c('section',{staticClass:\"section\"},[_c('ordered-queue-display',{attrs:{\"queue\":_vm.queue,\"loaded\":_vm.loaded,\"ws\":_vm.ws,\"admin\":_vm.admin,\"time\":_vm.time}})],1):(_vm.queue.type === 'appointments')?_c('section',{staticClass:\"section\"},[_c('appointments-queue-display',{attrs:{\"queue\":_vm.queue,\"loaded\":_vm.loaded,\"ws\":_vm.ws,\"admin\":_vm.admin,\"time\":_vm.time}})],1):_vm._e()])]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"notification is-warning\"},[(_vm.admin)?_c('button',{staticClass:\"delete\",on:{\"click\":_vm.removeAnnouncement}}):_vm._e(),_c('p',{staticClass:\"announcement\",domProps:{\"innerHTML\":_vm._s(_vm.linkifiedContent)}})])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { DialogProgrammatic as Dialog } from 'buefy';\nimport EscapeHTML from '@/util/Sanitization';\n\nexport default async function ErrorDialog(res: Response): Promise {\n\treturn res.json().then((data) => {\n\t\tDialog.alert({\n\t\t\ttitle: 'Request Failed',\n\t\t\tmessage: EscapeHTML(data.message),\n\t\t\ttype: 'is-danger',\n\t\t\thasIcon: true,\n\t\t});\n\t});\n}\n","\n\n\n\n\n\n\n\nimport Vue from 'vue';\nimport { Component, Prop } from 'vue-property-decorator';\nimport linkifyStr from 'linkifyjs/string';\n\nimport Announcement from '../types/Announcement';\nimport Queue from '../types/Queue';\nimport ErrorDialog from '../util/ErrorDialog';\n\n@Component\nexport default class AnnouncementDisplay extends Vue {\n\t@Prop({ required: true }) readonly announcement!: Announcement;\n\t@Prop({ required: true }) readonly queue!: Queue;\n\t@Prop({ required: true }) admin!: boolean;\n\n\tget linkifiedContent() {\n\t\treturn linkifyStr(this.announcement.content, {\n\t\t\tdefaultProtocol: 'https',\n\t\t});\n\t}\n\n\tremoveAnnouncement() {\n\t\tthis.$buefy.dialog.confirm({\n\t\t\ttitle: 'Delete Announcement',\n\t\t\tmessage: `Are you sure you want to delete this announcement? There's no undo; this will remove this announcement for everyone.`,\n\t\t\ttype: 'is-danger',\n\t\t\thasIcon: true,\n\t\t\tonConfirm: () => {\n\t\t\t\tfetch(\n\t\t\t\t\tprocess.env.BASE_URL +\n\t\t\t\t\t\t`api/queues/${this.queue.id}/announcements/${this.announcement.id}`,\n\t\t\t\t\t{\n\t\t\t\t\t\tmethod: 'DELETE',\n\t\t\t\t\t}\n\t\t\t\t).then((res) => {\n\t\t\t\t\tif (res.status !== 204) {\n\t\t\t\t\t\treturn ErrorDialog(res);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t},\n\t\t});\n\t}\n}\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--14-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AnnouncementDisplay.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--14-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AnnouncementDisplay.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./AnnouncementDisplay.vue?vue&type=template&id=5c16d93c&scoped=true&\"\nimport script from \"./AnnouncementDisplay.vue?vue&type=script&lang=ts&\"\nexport * from \"./AnnouncementDisplay.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./AnnouncementDisplay.vue?vue&type=style&index=0&id=5c16d93c&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"5c16d93c\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"columns\"},[_c('div',{staticClass:\"column is-6\"},[_c('div',{staticClass:\"entries\"},[_c('h1',{staticClass:\"title\"},[_vm._v(\"Queue\")]),_c('transition',{attrs:{\"name\":\"fade\",\"mode\":\"out-in\"}},[(_vm.loaded)?_c('div',{key:\"queue-column-loaded\"},[_c('transition',{attrs:{\"name\":\"fade\",\"mode\":\"out-in\"}},[(_vm.queue.entries.length > 0)?_c('transition-group',{attrs:{\"name\":\"entries-group\",\"tag\":\"div\"}},_vm._l((_vm.queue.entries),function(entry){return _c('div',{key:entry.id,staticClass:\"block entries-group-item\"},[_c('queue-entry-display',{attrs:{\"entry\":entry,\"stack\":false,\"queue\":_vm.queue,\"admin\":_vm.admin,\"time\":_vm.time}})],1)}),0):_c('div',{staticClass:\"hero is-primary\"},[_c('div',{staticClass:\"hero-body\"},[(!_vm.open)?_c('span',[_c('font-awesome-icon',{staticClass:\"block\",attrs:{\"icon\":\"store-alt-slash\",\"size\":\"10x\"}}),_c('h1',{staticClass:\"title block\"},[_vm._v(\"The queue is closed.\")]),_c('h2',{staticClass:\"subtitle block\"},[_vm._v(\" See you next time\"+_vm._s(_vm.$root.$data.loggedIn ? ', ' + _vm.$root.$data.userInfo.first_name : '')+\"! \")])],1):(_vm.admin)?_c('span',[_c('font-awesome-icon',{staticClass:\"block\",attrs:{\"icon\":\"grin-hearts\",\"size\":\"10x\"}}),_c('h1',{staticClass:\"title block\"},[_vm._v(\"The queue is empty.\")]),_c('h2',{staticClass:\"subtitle block\"},[_vm._v(\" Good job, \"+_vm._s(_vm.$root.$data.userInfo.first_name)+\"! \")])],1):_c('span',[_c('font-awesome-icon',{staticClass:\"block\",attrs:{\"icon\":\"heart-broken\",\"size\":\"10x\"}}),_c('h1',{staticClass:\"title block\"},[_vm._v(\"The queue is empty.\")]),_c('h2',{staticClass:\"subtitle block\"},[_vm._v(\" We're lonely over here\"+_vm._s(_vm.$root.$data.loggedIn ? ', ' + _vm.$root.$data.userInfo.first_name : '')+\"! \")])],1)])])],1)],1):_c('div',_vm._l((10),function(i){return _c('div',{key:i,staticClass:\"block\"},[_c('div',{staticClass:\"box\"},[_c('article',{staticClass:\"media\"},[_c('div',{staticClass:\"media-content\"},[_c('div',{staticClass:\"content\"},[_c('b-skeleton'),_c('b-skeleton')],1)])])])])}),0)])],1)]),_c('div',{staticClass:\"column is-5 is-offset-1\"},[_c('div',{staticClass:\"entries\"},[(_vm.loaded)?_c('div',{staticClass:\"level level-is-shrinkable\"},[_c('div',{staticClass:\"level-left level-is-shrinkable\"},[_c('p',{staticClass:\"level-item level-is-shrinkable\"},[_c('font-awesome-icon',{staticClass:\"mr-1\",attrs:{\"icon\":\"user-graduate\",\"fixed-size\":\"\"}}),_c('strong',[_vm._v(_vm._s(_vm.queue.entries.length))])],1),(_vm.scheduledOpen)?_c('div',{staticClass:\"level-item level-is-shrinkable\"},[_c('p',[_vm._v(\"The queue is open until \"+_vm._s(_vm.closesAt)+\".\")])]):_c('p',{staticClass:\"level-item level-is-shrinkable\"},[_vm._v(\" The queue \"+_vm._s(_vm.opensAt)+\". \")])])]):_c('div',{staticClass:\"block\"},[_c('div',{staticStyle:{\"margin-bottom\":\"0.5em\"}},[_c('b-skeleton')],1)]),(_vm.admin)?_c('div',{staticClass:\"buttons block\"},[(_vm.queue.config !== null && _vm.queue.config.scheduled)?_c('button',{staticClass:\"button is-primary is-responsive\",on:{\"click\":_vm.editSchedule}},[_c('span',{staticClass:\"icon\"},[_c('font-awesome-icon',{attrs:{\"icon\":\"calendar-alt\"}})],1),_c('span',[_vm._v(\"Edit Schedule\")])]):(_vm.queue.open)?_c('button',{staticClass:\"button is-warning is-responsive\",on:{\"click\":function($event){return _vm.setOpen(false)}}},[_c('span',{staticClass:\"icon\"},[_c('font-awesome-icon',{attrs:{\"icon\":\"lock\"}})],1),_c('span',[_vm._v(\"Close Queue\")])]):_c('button',{staticClass:\"button is-success is-responsive\",on:{\"click\":function($event){return _vm.setOpen(true)}}},[_c('span',{staticClass:\"icon\"},[_c('font-awesome-icon',{attrs:{\"icon\":\"lock-open\"}})],1),_c('span',[_vm._v(\"Open Queue\")])]),_c('button',{staticClass:\"button is-black is-responsive\",on:{\"click\":_vm.randomizeQueue}},[_c('span',{staticClass:\"icon\"},[_c('font-awesome-icon',{attrs:{\"icon\":\"dice\"}})],1),_c('span',[_vm._v(\"Randomize Queue\")])]),_c('button',{staticClass:\"button is-danger is-responsive\",on:{\"click\":_vm.clearQueue}},[_c('span',{staticClass:\"icon\"},[_c('font-awesome-icon',{attrs:{\"icon\":\"eraser\"}})],1),_c('span',[_vm._v(\"Clear Queue\")])]),_c('button',{staticClass:\"button is-light is-responsive\",on:{\"click\":_vm.broadcast}},[_c('span',{staticClass:\"icon\"},[_c('font-awesome-icon',{attrs:{\"icon\":\"bullhorn\"}})],1),_c('span',[_vm._v(\"Broadcast to Queue\")])])]):_vm._e(),_c('div',{staticClass:\"block\"},[_c('h1',{staticClass:\"title\"},[_vm._v(\"Sign Up\")]),_c('queue-signup',{attrs:{\"queue\":_vm.queue,\"time\":_vm.time}})],1),(_vm.admin && _vm.queue.stack.length > 0)?_c('div',{staticClass:\"block\"},[_c('div',{staticClass:\"level is-mobile\"},[_vm._m(0),_c('div',{staticClass:\"level-right\"},[_c('div',{staticClass:\"level-item\"},[_c('button',{staticClass:\"button is-small is-primary\",on:{\"click\":_vm.downloadStackAsCSV}},[_c('span',{staticClass:\"icon\"},[_c('font-awesome-icon',{attrs:{\"icon\":\"download\"}})],1),_c('span',[_vm._v(\"Download\")])])])])]),(_vm.queue.stack.length > 0)?_c('transition-group',{attrs:{\"name\":\"entries-group\",\"tag\":\"div\"}},_vm._l((_vm.queue.stack),function(entry){return _c('div',{key:entry.id,staticClass:\"block entries-group-item\"},[_c('queue-entry-display',{attrs:{\"entry\":entry,\"stack\":true,\"queue\":_vm.queue,\"admin\":_vm.admin,\"time\":_vm.time}})],1)}),0):_vm._e()],1):_vm._e()])])])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"level-left\"},[_c('div',{staticClass:\"level-item\"},[_c('p',{staticClass:\"title\"},[_vm._v(\"Stack\")])])])}]\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"box entry\"},[_c('article',{staticClass:\"media\"},[_c('div',{staticClass:\"media-content\"},[_c('div',{staticClass:\"content\"},[_c('div',{staticClass:\"level icon-row is-mobile\"},[_c('div',{staticClass:\"level-left\"},[_c('font-awesome-icon',{staticClass:\"mr-2 level-item\",attrs:{\"icon\":\"user\",\"fixed-width\":\"\"}}),_c('span',{staticClass:\"level-item stay-in-container\"},[_c('strong',[_vm._v(_vm._s(_vm.name))])])],1)]),(!_vm.anonymous)?_c('span',[_c('div',{staticClass:\"level icon-row is-mobile\"},[_c('div',{staticClass:\"level-left\"},[_c('font-awesome-icon',{staticClass:\"mr-2 level-item\",attrs:{\"icon\":\"at\",\"fixed-width\":\"\"}}),_c('span',{staticClass:\"level-item stay-in-container\"},[_vm._v(_vm._s(_vm.entry.email))])],1)]),_c('div',{staticClass:\"level icon-row is-mobile\"},[_c('div',{staticClass:\"level-left\"},[_c('font-awesome-icon',{staticClass:\"mr-2 level-item\",attrs:{\"icon\":\"question\",\"fixed-width\":\"\"}}),_c('span',{staticClass:\"level-item stay-in-container\"},[_vm._v(_vm._s(_vm.entry.description))])],1)]),_c('div',{staticClass:\"level icon-row is-mobile\"},[_c('div',{staticClass:\"level-left\"},[_c('font-awesome-icon',{staticClass:\"mr-2 level-item\",attrs:{\"icon\":_vm.queue.config.virtual ? 'link' : 'map-marker',\"fixed-width\":\"\"}}),_c('p',{staticClass:\"level-item\",class:_vm.queue.config.virtual\n\t\t\t\t\t\t\t\t\t\t? 'link-in-container'\n\t\t\t\t\t\t\t\t\t\t: 'stay-in-container',domProps:{\"innerHTML\":_vm._s(_vm.location)}})],1)])]):_vm._e(),_c('div',{staticClass:\"level icon-row is-mobile\"},[_c('div',{staticClass:\"level-left\"},[_c('font-awesome-icon',{staticClass:\"mr-2 level-item\",attrs:{\"icon\":\"clock\",\"fixed-width\":\"\"}}),_c('b-tooltip',{attrs:{\"label\":_vm.entry.tooltipTimestamp}},[_c('span',{staticClass:\"level-item stay-in-container\"},[_vm._v(_vm._s(_vm.humanizedTimestamp))])])],1)]),(_vm.entry.priority !== 0)?_c('div',{staticClass:\"level icon-row is-mobile\"},[_c('div',{staticClass:\"level-left\"},[(_vm.entry.priority > 0)?_c('font-awesome-icon',{staticClass:\"mr-2 level-item\",attrs:{\"icon\":\"sort-numeric-up\",\"fixed-width\":\"\"}}):_c('font-awesome-icon',{staticClass:\"mr-2 level-item\",attrs:{\"icon\":\"sort-numeric-down\",\"fixed-width\":\"\"}}),_c('span',{staticClass:\"level-item stay-in-container\"},[_vm._v(\"Priority: \"+_vm._s((_vm.entry.priority > 0 ? '+' : '') + _vm.entry.priority))])],1)]):_vm._e(),(_vm.stack)?_c('div',{staticClass:\"level icon-row is-mobile\"},[_c('div',{staticClass:\"level-left\"},[_c('font-awesome-icon',{staticClass:\"mr-2 level-item\",attrs:{\"icon\":\"times\",\"fixed-width\":\"\"}}),_c('span',{staticClass:\"level-item stay-in-container\"},[_vm._v(_vm._s(_vm.entry.removedBy))])],1)]):_vm._e(),(!_vm.anonymous)?_c('div',[_c('br'),_c('div',{staticClass:\"buttons is-fullwidth\"},[(!_vm.stack)?[(_vm.admin && !_vm.entry.helping)?_c('button',{staticClass:\"button is-success\",class:{ 'is-loading': _vm.helpingRequestRunning },on:{\"click\":function($event){return _vm.setHelping(true)}}},[_c('span',{staticClass:\"icon\"},[_c('font-awesome-icon',{attrs:{\"icon\":\"hands-helping\"}})],1),_c('span',[_vm._v(\"Help\")])]):(_vm.admin)?[_c('button',{staticClass:\"button is-success\",class:{ 'is-loading': _vm.removeRequestRunning },on:{\"click\":_vm.removeEntry}},[_c('span',{staticClass:\"icon\"},[_c('font-awesome-icon',{attrs:{\"icon\":\"check\"}})],1),_c('span',[_vm._v(\"Done\")])]),_c('button',{staticClass:\"button is-danger\",class:{ 'is-loading': _vm.helpingRequestRunning },on:{\"click\":function($event){return _vm.setHelping(false)}}},[_c('span',{staticClass:\"icon\"},[_c('font-awesome-icon',{attrs:{\"icon\":\"undo\"}})],1),_c('span',[_vm._v(\"Undo\")])])]:(!_vm.entry.helping)?_c('button',{staticClass:\"button is-danger\",class:{ 'is-loading': _vm.removeRequestRunning },on:{\"click\":_vm.removeEntry}},[_c('span',{staticClass:\"icon\"},[_c('font-awesome-icon',{attrs:{\"icon\":\"times\"}})],1),_c('span',[_vm._v(\"Cancel\")])]):_vm._e()]:_vm._e(),(!_vm.entry.pinned && _vm.admin)?[_c('button',{staticClass:\"button is-primary\",class:{ 'is-loading': _vm.pinEntryRequestRunning },on:{\"click\":_vm.pinEntry}},[_c('span',{staticClass:\"icon\"},[_c('font-awesome-icon',{attrs:{\"icon\":\"thumbtack\"}})],1),_c('span',[_vm._v(\"Pin\")])])]:_vm._e(),(_vm.stack && _vm.entry.helped)?[_c('button',{staticClass:\"button is-danger\",class:{ 'is-loading': _vm.notHelpedRequestRunning },on:{\"click\":_vm.setNotHelped}},[_c('span',{staticClass:\"icon\"},[_c('font-awesome-icon',{attrs:{\"icon\":\"frown-open\"}})],1),_c('span',[_vm._v(\"Not helped\")])])]:_vm._e(),(_vm.admin)?[_c('button',{staticClass:\"button is-warning\",on:{\"click\":_vm.messageUser}},[_c('span',{staticClass:\"icon\"},[_c('font-awesome-icon',{attrs:{\"icon\":\"envelope\"}})],1),_c('span',[_vm._v(\"Message\")])])]:_vm._e()],2)]):_vm._e()])]),_c('figure',{staticClass:\"media-right\",staticStyle:{\"padding\":\"0\"}},[_c('transition-group',{attrs:{\"name\":\"slide-fade\",\"mode\":\"out-in\"}},[(_vm.admin)?_c('div',{key:\"online\",staticClass:\"is-pulled-right\"},[_c('b-tooltip',{class:{\n\t\t\t\t\t\t\t'is-success': _vm.entry.online,\n\t\t\t\t\t\t\t'is-danger': !_vm.entry.online,\n\t\t\t\t\t\t},attrs:{\"label\":'This student is currently ' +\n\t\t\t\t\t\t\t\t(_vm.entry.online ? 'online' : 'offline') +\n\t\t\t\t\t\t\t\t'.',\"position\":\"is-left\"}},[_c('font-awesome-icon',{staticClass:\"is-size-6 ml-3\",style:({\n\t\t\t\t\t\t\t\tcolor: _vm.entry.online\n\t\t\t\t\t\t\t\t\t? 'hsl(141, 53%, 53%)'\n\t\t\t\t\t\t\t\t\t: 'hsl(348, 100%, 61%)',\n\t\t\t\t\t\t\t}),attrs:{\"icon\":\"circle\",\"fixed-width\":\"\"}})],1)],1):_vm._e(),(_vm.entry.pinned)?_c('div',{key:\"pinned\",staticClass:\"is-pulled-right\"},[_c('b-tooltip',{attrs:{\"label\":\"This student is pinned to the top of the queue.\",\"position\":\"is-left\"}},[_c('font-awesome-icon',{staticClass:\"is-size-1 is-size-6-touch\",attrs:{\"icon\":\"thumbtack\",\"fixed-width\":\"\"}})],1)],1):_vm._e(),(_vm.entry.helping)?_c('div',{key:\"helping\",staticClass:\"is-pulled-right\"},[_c('b-tooltip',{attrs:{\"label\":\"This student is currently being helped.\",\"position\":\"is-left\"}},[_c('font-awesome-icon',{staticClass:\"is-size-1 is-size-6-touch\",attrs:{\"icon\":\"chalkboard-teacher\",\"fixed-width\":\"\"}})],1)],1):_vm._e(),(_vm.stack && !_vm.entry.helped)?_c('div',{key:\"not-helped\",staticClass:\"is-pulled-right\"},[_c('b-tooltip',{attrs:{\"label\":\"This student wasn't able to be helped.\",\"position\":\"is-left\"}},[_c('font-awesome-icon',{staticClass:\"is-size-1 is-size-6-touch\",attrs:{\"icon\":\"frown-open\",\"fixed-width\":\"\"}})],1)],1):_vm._e()])],1)])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport { Component, Vue, Prop } from 'vue-property-decorator';\nimport moment, { Moment } from 'moment-timezone';\nimport linkifyStr from 'linkifyjs/string';\nimport OrderedQueue from '@/types/OrderedQueue';\nimport { QueueEntry } from '@/types/QueueEntry';\nimport ErrorDialog from '@/util/ErrorDialog';\nimport EscapeHTML from '@/util/Sanitization';\n\nimport { library } from '@fortawesome/fontawesome-svg-core';\nimport {\n\tfaUser,\n\tfaAt,\n\tfaQuestion,\n\tfaLink,\n\tfaClock,\n\tfaCheck,\n\tfaSortNumericUp,\n\tfaSortNumericDown,\n\tfaTimes,\n\tfaThumbtack,\n\tfaEnvelope,\n\tfaHandsHelping,\n\tfaFrownOpen,\n\tfaMapMarker,\n\tfaCircle,\n\tfaChalkboardTeacher,\n\tfaUndo,\n} from '@fortawesome/free-solid-svg-icons';\n\nlibrary.add(\n\tfaUser,\n\tfaAt,\n\tfaQuestion,\n\tfaLink,\n\tfaClock,\n\tfaCheck,\n\tfaSortNumericUp,\n\tfaSortNumericDown,\n\tfaTimes,\n\tfaThumbtack,\n\tfaEnvelope,\n\tfaHandsHelping,\n\tfaFrownOpen,\n\tfaMapMarker,\n\tfaCircle,\n\tfaChalkboardTeacher,\n\tfaUndo\n);\n\n@Component\nexport default class QueueEntryDisplay extends Vue {\n\t@Prop({ required: true }) entry!: QueueEntry;\n\t@Prop({ required: true }) stack!: boolean;\n\t@Prop({ required: true }) queue!: OrderedQueue;\n\t@Prop({ required: true }) admin!: boolean;\n\t@Prop({ required: true }) time!: Moment;\n\n\tget anonymous() {\n\t\treturn !(\n\t\t\tthis.admin ||\n\t\t\t(this.$root.$data.userInfo.email !== undefined &&\n\t\t\t\tthis.entry.email === this.$root.$data.userInfo.email)\n\t\t);\n\t}\n\n\tget name() {\n\t\treturn this.anonymous ? 'Anonymous Student' : this.entry.name;\n\t}\n\n\tget location() {\n\t\treturn linkifyStr(this.entry.location || '', {\n\t\t\tdefaultProtocol: 'https',\n\t\t});\n\t}\n\n\tget humanizedTimestamp() {\n\t\t// HACK: fix time update lag issues in the beginning\n\t\t// by saying the time is 5 seconds ahead of what it really is.\n\t\t// Since we only display \"a few seconds ago\" this shouldn't have\n\t\t// any noticeable impact.\n\t\treturn this.entry.humanizedTimestamp(this.time.clone().add(5, 'second'));\n\t}\n\n\tremoveRequestRunning = false;\n\tremoveEntry() {\n\t\tthis.queue.personallyRemovedEntries.add(this.entry.id);\n\t\tthis.removeRequestRunning = true;\n\t\tfetch(\n\t\t\tprocess.env.BASE_URL +\n\t\t\t\t`api/queues/${this.queue.id}/entries/${this.entry.id}`,\n\t\t\t{\n\t\t\t\tmethod: 'DELETE',\n\t\t\t}\n\t\t).then((res) => {\n\t\t\tthis.removeRequestRunning = false;\n\t\t\tif (res.status !== 204) {\n\t\t\t\treturn ErrorDialog(res);\n\t\t\t}\n\t\t});\n\t}\n\n\tpinEntryRequestRunning = false;\n\tpinEntry() {\n\t\tthis.pinEntryRequestRunning = true;\n\t\tfetch(\n\t\t\tprocess.env.BASE_URL +\n\t\t\t\t`api/queues/${this.queue.id}/entries/${this.entry.id}/pin`,\n\t\t\t{\n\t\t\t\tmethod: 'POST',\n\t\t\t}\n\t\t).then((res) => {\n\t\t\tthis.pinEntryRequestRunning = false;\n\t\t\tif (res.status !== 204) {\n\t\t\t\treturn ErrorDialog(res);\n\t\t\t}\n\n\t\t\tthis.$buefy.toast.open({\n\t\t\t\tduration: 5000,\n\t\t\t\tmessage: `Pinned ${EscapeHTML(this.entry.email!)}!`,\n\t\t\t\ttype: 'is-success',\n\t\t\t});\n\t\t});\n\t}\n\n\thelpingRequestRunning = false;\n\tsetHelping(helping: boolean) {\n\t\tthis.helpingRequestRunning = true;\n\t\tfetch(\n\t\t\tprocess.env.BASE_URL +\n\t\t\t\t`api/queues/${this.queue.id}/entries/${this.entry.id}/helping?helping=${helping}`,\n\t\t\t{\n\t\t\t\tmethod: 'PUT',\n\t\t\t}\n\t\t).then((res) => {\n\t\t\tthis.helpingRequestRunning = false;\n\t\t\tif (res.status !== 204) {\n\t\t\t\treturn ErrorDialog(res);\n\t\t\t}\n\t\t});\n\t}\n\n\tnotHelpedRequestRunning = false;\n\tsetNotHelped() {\n\t\tthis.notHelpedRequestRunning = true;\n\t\tfetch(\n\t\t\tprocess.env.BASE_URL +\n\t\t\t\t`api/queues/${this.queue.id}/entries/${this.entry.id}/helped`,\n\t\t\t{\n\t\t\t\tmethod: 'DELETE',\n\t\t\t}\n\t\t).then((res) => {\n\t\t\tthis.notHelpedRequestRunning = false;\n\t\t\tif (res.status !== 204) {\n\t\t\t\treturn ErrorDialog(res);\n\t\t\t}\n\t\t});\n\t}\n\n\tmessageUser() {\n\t\tthis.$buefy.dialog.prompt({\n\t\t\tmessage: `Send message to ${EscapeHTML(this.entry.email!)}:`,\n\t\t\tinputAttrs: {\n\t\t\t\tplaceholder: 'Your meeting is empty, please come back!',\n\t\t\t},\n\t\t\ttrapFocus: true,\n\t\t\tonConfirm: (message) => {\n\t\t\t\tfetch(process.env.BASE_URL + `api/queues/${this.queue.id}/messages`, {\n\t\t\t\t\tmethod: 'POST',\n\t\t\t\t\tbody: JSON.stringify({\n\t\t\t\t\t\treceiver: this.entry.email,\n\t\t\t\t\t\tcontent: message,\n\t\t\t\t\t}),\n\t\t\t\t}).then((res) => {\n\t\t\t\t\tif (res.status !== 201) {\n\t\t\t\t\t\treturn ErrorDialog(res);\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.$buefy.toast.open({\n\t\t\t\t\t\tduration: 5000,\n\t\t\t\t\t\tmessage: `Sent message to ${EscapeHTML(this.entry.email!)}`,\n\t\t\t\t\t\ttype: 'is-success',\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t},\n\t\t});\n\t}\n}\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--14-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./QueueEntry.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--14-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./QueueEntry.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./QueueEntry.vue?vue&type=template&id=6f3e096e&scoped=true&\"\nimport script from \"./QueueEntry.vue?vue&type=script&lang=ts&\"\nexport * from \"./QueueEntry.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./QueueEntry.vue?vue&type=style&index=0&id=6f3e096e&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"6f3e096e\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('div',{staticClass:\"field\"},[_c('label',{staticClass:\"label\"},[_vm._v(\"Description\")]),_c('div',{staticClass:\"control has-icons-left\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.description),expression:\"description\"}],staticClass:\"input\",attrs:{\"type\":\"text\",\"placeholder\":\"Help us help you—please be descriptive!\"},domProps:{\"value\":(_vm.description)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.description=$event.target.value}}}),_c('span',{staticClass:\"icon is-small is-left\"},[_c('font-awesome-icon',{attrs:{\"icon\":\"question\"}})],1)])]),(_vm.queue.config === null || _vm.queue.config.enableLocationField)?_c('div',{staticClass:\"field\"},[(_vm.queue.config === null)?_c('label',{staticClass:\"label\"},[_c('b-skeleton',{attrs:{\"width\":\"7em\"}})],1):(!_vm.queue.config.virtual)?_c('label',{staticClass:\"label\"},[_vm._v(\"Location\")]):_c('label',{staticClass:\"label\"},[_vm._v(\"Meeting Link\")]),_c('div',{staticClass:\"control has-icons-left\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.location),expression:\"location\"}],staticClass:\"input\",attrs:{\"type\":\"text\"},domProps:{\"value\":(_vm.location)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.location=$event.target.value}}}),_c('span',{staticClass:\"icon is-small is-left\"},[(_vm.queue.config === null)?_c('b-skeleton',{attrs:{\"position\":\"is-centered\",\"width\":\"1em\"}}):(!_vm.queue.config.virtual)?_c('font-awesome-icon',{attrs:{\"icon\":\"map-marker\"}}):_c('font-awesome-icon',{attrs:{\"icon\":\"link\"}})],1)])]):_vm._e(),_c('div',{staticClass:\"field\"},[_c('div',{staticClass:\"control level-left\"},[(_vm.myEntry === null)?_c('button',{staticClass:\"button is-success level-item\",attrs:{\"disabled\":!_vm.canSignUp},on:{\"click\":_vm.signUp}},[_c('span',{staticClass:\"icon\"},[_c('font-awesome-icon',{attrs:{\"icon\":\"user-plus\"}})],1),_c('span',[_vm._v(\"Sign Up\")])]):(_vm.myEntryModified)?_c('button',{staticClass:\"button is-warning level-item\",on:{\"click\":_vm.updateRequest}},[_c('span',{staticClass:\"icon\"},[_c('font-awesome-icon',{attrs:{\"icon\":\"edit\"}})],1),_c('span',[_vm._v(\"Update Request\")])]):_c('button',{staticClass:\"button is-success level-item\",attrs:{\"disabled\":\"true\"}},[_c('span',{staticClass:\"icon\"},[_c('font-awesome-icon',{attrs:{\"icon\":\"check\"}})],1),_c('span',[_vm._v(\"On queue at position #\"+_vm._s(this.myEntryIndex + 1))])]),(!_vm.$root.$data.loggedIn)?_c('p',{staticClass:\"level-item\"},[_vm._v(\" Log in to sign up! \")]):_vm._e()])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Vue from 'vue';\nimport { Moment } from 'moment';\nimport { Component, Prop, Watch } from 'vue-property-decorator';\nimport OrderedQueue from '@/types/OrderedQueue';\nimport { QueueEntry } from '@/types/QueueEntry';\nimport ErrorDialog from '@/util/ErrorDialog';\nimport EscapeHTML from '@/util/Sanitization';\n\nimport { library } from '@fortawesome/fontawesome-svg-core';\nimport {\n\tfaUser,\n\tfaQuestion,\n\tfaLink,\n\tfaUserPlus,\n\tfaCheck,\n\tfaEdit,\n\tfaMapMarker,\n} from '@fortawesome/free-solid-svg-icons';\n\nlibrary.add(\n\tfaUser,\n\tfaQuestion,\n\tfaLink,\n\tfaUserPlus,\n\tfaCheck,\n\tfaEdit,\n\tfaMapMarker\n);\n\n@Component\nexport default class QueueSignup extends Vue {\n\tdescription = '';\n\tlocation = '';\n\n\t@Prop({ required: true }) queue!: OrderedQueue;\n\t@Prop({ required: true }) time!: Moment;\n\n\t@Watch('myEntry')\n\tmyEntryUpdated(newEntry: QueueEntry | null) {\n\t\tif (newEntry !== null) {\n\t\t\tthis.description = newEntry.description || '';\n\t\t\tthis.location = newEntry.location || '';\n\t\t}\n\t}\n\n\tget canSignUp(): boolean {\n\t\t// Do not change the order of the expressions in this boolean\n\t\t// expression. Because myEntry is a computed property, it seems\n\t\t// that it has to be calculated at least once in order to be\n\t\t// reactive, which means that putting it at the end of the\n\t\t// expression means it isn't calculated until all of the previous\n\t\t// parts of the expression are true, which is only calculated when\n\t\t// deemed necessary based on reactivity. Thus, if one of the previous\n\t\t// parts of the expression return false on the first calculation,\n\t\t// we aren't reactive on myEntry until one of the previous\n\t\t// parts had a reactive update. This took way too long to figure out :(\n\t\treturn (\n\t\t\tthis.myEntry === null &&\n\t\t\tthis.$root.$data.loggedIn &&\n\t\t\tthis.queue.isOpen(this.time) &&\n\t\t\tthis.description.trim() !== '' &&\n\t\t\t(this.location.trim() !== '' || !this.queue.config?.enableLocationField)\n\t\t);\n\t}\n\n\tget myEntryIndex(): number {\n\t\treturn this.queue.entryIndex(this.$root.$data.userInfo.email);\n\t}\n\n\tget myEntry(): QueueEntry | null {\n\t\treturn this.queue.entry(this.$root.$data.userInfo.email);\n\t}\n\n\tget myEntryModified() {\n\t\tconst e = this.myEntry;\n\t\treturn (\n\t\t\te !== null &&\n\t\t\t(e.description !== this.description || e.location !== this.location)\n\t\t);\n\t}\n\n\tsignUp() {\n\t\tif (this.queue.config?.confirmSignupMessage !== undefined) {\n\t\t\treturn this.$buefy.dialog.confirm({\n\t\t\t\ttitle: 'Sign Up',\n\t\t\t\tmessage: EscapeHTML(this.queue.config!.confirmSignupMessage),\n\t\t\t\ttype: 'is-warning',\n\t\t\t\thasIcon: true,\n\t\t\t\tonConfirm: this.signUpRequest,\n\t\t\t});\n\t\t}\n\n\t\tthis.signUpRequest();\n\t}\n\n\tsignUpRequest() {\n\t\t// No, this doesn't prevent students from manually hitting the API to specify\n\t\t// a location. l33t h4x!\n\t\tconst location = this.queue.config?.enableLocationField\n\t\t\t? this.location\n\t\t\t: '(disabled)';\n\t\tfetch(process.env.BASE_URL + `api/queues/${this.queue.id}/entries`, {\n\t\t\tmethod: 'POST',\n\t\t\tbody: JSON.stringify({\n\t\t\t\tdescription: this.description,\n\t\t\t\tlocation,\n\t\t\t}),\n\t\t}).then((res) => {\n\t\t\tif (res.status !== 201) {\n\t\t\t\treturn ErrorDialog(res);\n\t\t\t}\n\n\t\t\tthis.$buefy.toast.open({\n\t\t\t\tduration: 5000,\n\t\t\t\tmessage: `You're on the queue, ${EscapeHTML(\n\t\t\t\t\tthis.$root.$data.userInfo.first_name\n\t\t\t\t)}!`,\n\t\t\t\ttype: 'is-success',\n\t\t\t});\n\t\t});\n\t}\n\n\tupdateRequest() {\n\t\tif (this.myEntry !== null) {\n\t\t\tfetch(\n\t\t\t\tprocess.env.BASE_URL +\n\t\t\t\t\t`api/queues/${this.queue.id}/entries/${this.myEntry.id}`,\n\t\t\t\t{\n\t\t\t\t\tmethod: 'PUT',\n\t\t\t\t\tbody: JSON.stringify({\n\t\t\t\t\t\tdescription: this.description,\n\t\t\t\t\t\tlocation: this.location,\n\t\t\t\t\t}),\n\t\t\t\t}\n\t\t\t).then((res) => {\n\t\t\t\tif (res.status !== 204) {\n\t\t\t\t\treturn ErrorDialog(res);\n\t\t\t\t}\n\n\t\t\t\tthis.$buefy.toast.open({\n\t\t\t\t\tduration: 5000,\n\t\t\t\t\tmessage: 'Your request has been updated!',\n\t\t\t\t\ttype: 'is-success',\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t}\n}\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--14-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./QueueSignup.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--14-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./QueueSignup.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./QueueSignup.vue?vue&type=template&id=12cbfadc&\"\nimport script from \"./QueueSignup.vue?vue&type=script&lang=ts&\"\nexport * from \"./QueueSignup.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"modal-card\",staticStyle:{\"width\":\"auto\"}},[_c('header',{staticClass:\"modal-card-head\"},[_c('p',{staticClass:\"modal-card-title\"},[_vm._v(\"Edit Schedule\")]),_c('button',{staticClass:\"delete\",attrs:{\"type\":\"button\"},on:{\"click\":function($event){return _vm.$emit('close')}}})]),_c('section',{staticClass:\"modal-card-body\"},[_vm._m(0),(_vm.schedule !== undefined)?_c('div',{staticClass:\"block\"},_vm._l((['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']),function(day,i){return _c('div',{key:i,staticStyle:{\"display\":\"block\"}},[_c('div',{staticClass:\"level\"},[_c('div',{staticClass:\"level-left\"},[_c('div',{staticClass:\"level-item\"},[_c('p',[_vm._v(_vm._s(day))])])]),_c('div',{staticClass:\"level-right\"},[_c('div',{staticClass:\"level-item schedule-row\"},_vm._l((48),function(j){return _c('b-tooltip',{key:j,attrs:{\"label\":_vm.base\n\t\t\t\t\t\t\t\t\t\t.clone()\n\t\t\t\t\t\t\t\t\t\t.add((j - 1) * 30, 'minutes')\n\t\t\t\t\t\t\t\t\t\t.format('LT'),\"type\":_vm.classes[i][j - 1],\"always\":i == 0 && (j - 1) % 8 == 0}},[_c('button',{staticClass:\"button timeslot-cell\",class:_vm.classes[i][j - 1],on:{\"mousedown\":function () {\n\t\t\t\t\t\t\t\t\t\t\t_vm.changeSlot(i, j - 1);\n\t\t\t\t\t\t\t\t\t\t\t_vm.painting = true;\n\t\t\t\t\t\t\t\t\t\t},\"mouseup\":function () { return (_vm.painting = false); },\"mouseover\":function () { return _vm.painting && _vm.changeSlot(i, j - 1); }}})])}),1)])])])}),0):_vm._e()]),_c('footer',{staticClass:\"modal-card-foot\"},[_c('button',{staticClass:\"button\",attrs:{\"type\":\"button\"},on:{\"click\":function($event){return _vm.$emit('close')}}},[_vm._v(\" Close \")]),_c('button',{staticClass:\"button is-primary\",on:{\"click\":function($event){return _vm.$emit('confirmed', _vm.schedule)}}},[_vm._v(\" Save \")])])])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"block\",staticStyle:{\"padding-bottom\":\"2em\"}},[_c('button',{staticClass:\"button timeslot-cell is-danger\"}),_vm._v(\" Closed \"),_c('button',{staticClass:\"button timeslot-cell is-primary\"}),_vm._v(\" Early Sign Up \"),_c('button',{staticClass:\"button timeslot-cell is-success\"}),_vm._v(\" Open \")])}]\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport { Component, Prop, Vue } from 'vue-property-decorator';\nimport moment, { Moment } from 'moment-timezone';\n\n@Component({})\nexport default class OrderedSchedule extends Vue {\n\t@Prop({ required: true })\n\tdefaultSchedule!: string[];\n\n\tschedule = this.defaultSchedule;\n\n\tpainting = false;\n\n\tbase: Moment = moment()\n\t\t.tz('America/New_York')\n\t\t.startOf('day');\n\n\tstatic mappings: { [key: string]: string } = {\n\t\tc: 'is-danger',\n\t\tp: 'is-primary',\n\t\to: 'is-success',\n\t};\n\n\tstatic nextState: { [key: string]: string } = {\n\t\tc: 'p',\n\t\tp: 'o',\n\t\to: 'c',\n\t};\n\n\tget classes() {\n\t\treturn this.schedule.map((day) =>\n\t\t\tday.split('').map((slot) => OrderedSchedule.mappings[slot])\n\t\t);\n\t}\n\n\tchangeSlot(i: number, j: number) {\n\t\tVue.set(\n\t\t\tthis.schedule,\n\t\t\ti,\n\t\t\tthis.schedule[i].slice(0, j) +\n\t\t\t\tOrderedSchedule.nextState[this.schedule[i][j]] +\n\t\t\t\tthis.schedule[i].slice(j + 1)\n\t\t);\n\t}\n}\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--14-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./OrderedSchedule.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--14-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./OrderedSchedule.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./OrderedSchedule.vue?vue&type=template&id=8547e726&scoped=true&\"\nimport script from \"./OrderedSchedule.vue?vue&type=script&lang=ts&\"\nexport * from \"./OrderedSchedule.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./OrderedSchedule.vue?vue&type=style&index=0&id=8547e726&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"8547e726\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport { Component, Prop, Vue } from 'vue-property-decorator';\nimport moment, { Moment } from 'moment-timezone';\nimport { json2csv } from 'json-2-csv';\nimport fileDownload from 'js-file-download';\nimport OrderedQueue from '@/types/OrderedQueue';\nimport { QueueEntry, RemovedQueueEntry } from '@/types/QueueEntry';\nimport QueueEntryDisplay from '@/components/ordered/QueueEntry.vue';\nimport QueueSignup from '@/components/ordered/QueueSignup.vue';\nimport ErrorDialog from '@/util/ErrorDialog';\n\nimport { library } from '@fortawesome/fontawesome-svg-core';\nimport {\n\tfaStoreAltSlash,\n\tfaGrinHearts,\n\tfaHeartBroken,\n\tfaUserGraduate,\n\tfaEraser,\n\tfaCalendarAlt,\n\tfaDownload,\n\tfaDice,\n\tfaLock,\n\tfaLockOpen,\n} from '@fortawesome/free-solid-svg-icons';\nimport OrderedSchedule from './OrderedSchedule.vue';\n\nlibrary.add(\n\tfaStoreAltSlash,\n\tfaGrinHearts,\n\tfaHeartBroken,\n\tfaUserGraduate,\n\tfaEraser,\n\tfaCalendarAlt,\n\tfaDownload,\n\tfaDice,\n\tfaLock,\n\tfaLockOpen\n);\n\n@Component({\n\tcomponents: {\n\t\tQueueSignup,\n\t\tQueueEntryDisplay,\n\t\tOrderedSchedule,\n\t},\n})\nexport default class OrderedQueueDisplay extends Vue {\n\t@Prop({ required: true }) queue!: OrderedQueue;\n\t@Prop({ required: true }) loaded!: boolean;\n\t@Prop({ required: true }) ws!: WebSocket;\n\t@Prop({ required: true }) admin!: boolean;\n\t@Prop({ required: true }) time!: Moment;\n\n\tget open() {\n\t\treturn this.queue.config?.scheduled ? this.scheduledOpen : this.queue.open;\n\t}\n\n\tget scheduledOpen() {\n\t\treturn this.queue.scheduledOpen(this.time);\n\t}\n\n\tget closesAt() {\n\t\treturn this.queue\n\t\t\t.halfHourToTime(\n\t\t\t\tthis.queue.getNextCloseTime(this.queue.getHalfHour(this.time))\n\t\t\t)\n\t\t\t.format('LT');\n\t}\n\n\tget opensAt() {\n\t\tif (!this.queue.config?.scheduled) {\n\t\t\treturn (\n\t\t\t\t'will be ' +\n\t\t\t\t(this.queue.open ? 'closed' : 'opened') +\n\t\t\t\t' manually by staff'\n\t\t\t);\n\t\t}\n\n\t\tconst halfHour = this.queue.getNextOpenHalfHour(\n\t\t\tthis.queue.getHalfHour(this.time)\n\t\t);\n\n\t\tif (halfHour === -1) {\n\t\t\treturn 'is closed for the day';\n\t\t}\n\n\t\treturn `opens at ${this.queue.halfHourToTime(halfHour).format('LT')}`;\n\t}\n\n\tclearQueue() {\n\t\tthis.$buefy.dialog.confirm({\n\t\t\ttitle: 'Clear Queue',\n\t\t\tmessage: `Are you sure you want to clear the queue? There's no undo; please don't use this to pop individual students.`,\n\t\t\ttype: 'is-danger',\n\t\t\thasIcon: true,\n\t\t\tonConfirm: () => {\n\t\t\t\tfetch(process.env.BASE_URL + `api/queues/${this.queue.id}/entries`, {\n\t\t\t\t\tmethod: 'DELETE',\n\t\t\t\t}).then((res) => {\n\t\t\t\t\tif (res.status !== 204) {\n\t\t\t\t\t\treturn ErrorDialog(res);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t},\n\t\t});\n\t}\n\n\trandomizeQueue() {\n\t\tthis.$buefy.dialog.confirm({\n\t\t\ttitle: 'Randomize Queue',\n\t\t\tmessage: `Are you sure you want to randomize the queue? This will place everybody currently on the queue in a random position. This does not take into account the first-of-the-day status if your course uses it; consider whether this is okay. There's no undo.`,\n\t\t\ttype: 'is-danger',\n\t\t\thasIcon: true,\n\t\t\tonConfirm: () => {\n\t\t\t\tfetch(\n\t\t\t\t\tprocess.env.BASE_URL +\n\t\t\t\t\t\t`api/queues/${this.queue.id}/entries/randomize`,\n\t\t\t\t\t{\n\t\t\t\t\t\tmethod: 'POST',\n\t\t\t\t\t}\n\t\t\t\t).then((res) => {\n\t\t\t\t\tif (res.status !== 204) {\n\t\t\t\t\t\treturn ErrorDialog(res);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t},\n\t\t});\n\t}\n\n\teditSchedule() {\n\t\tfetch(process.env.BASE_URL + `api/queues/${this.queue.id}/schedule`)\n\t\t\t.then((res) => res.json())\n\t\t\t.then((schedule) => {\n\t\t\t\tthis.$buefy.modal.open({\n\t\t\t\t\tparent: this,\n\t\t\t\t\tcomponent: OrderedSchedule,\n\t\t\t\t\tprops: { defaultSchedule: schedule },\n\t\t\t\t\tevents: {\n\t\t\t\t\t\tconfirmed: (schedule: string[]) => {\n\t\t\t\t\t\t\tfetch(\n\t\t\t\t\t\t\t\tprocess.env.BASE_URL + `api/queues/${this.queue.id}/schedule`,\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tmethod: 'PUT',\n\t\t\t\t\t\t\t\t\tbody: JSON.stringify(schedule),\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t).then((res) => {\n\t\t\t\t\t\t\t\tif (res.status !== 204) {\n\t\t\t\t\t\t\t\t\treturn ErrorDialog(res);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\thasModalCard: true,\n\t\t\t\t\ttrapFocus: true,\n\t\t\t\t});\n\t\t\t});\n\t}\n\n\tbroadcast() {\n\t\tthis.$buefy.dialog.prompt({\n\t\t\tmessage: `Broadcast message to all online users of queue`,\n\t\t\ttrapFocus: true,\n\t\t\tonConfirm: (message) => {\n\t\t\t\tfetch(process.env.BASE_URL + `api/queues/${this.queue.id}/messages`, {\n\t\t\t\t\tmethod: 'POST',\n\t\t\t\t\tbody: JSON.stringify({\n\t\t\t\t\t\treceiver: '',\n\t\t\t\t\t\tcontent: message,\n\t\t\t\t\t}),\n\t\t\t\t}).then((res) => {\n\t\t\t\t\tif (res.status !== 201) {\n\t\t\t\t\t\treturn ErrorDialog(res);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t},\n\t\t});\n\t}\n\n\tdownloadStackAsCSV() {\n\t\tfetch(process.env.BASE_URL + `api/queues/${this.queue.id}/stack`)\n\t\t\t.then((res) => res.json())\n\t\t\t.then((stack) => {\n\t\t\t\tjson2csv(stack, (err, csv) => {\n\t\t\t\t\tif (err !== null || csv === undefined) {\n\t\t\t\t\t\tthis.$buefy.dialog.alert({\n\t\t\t\t\t\t\ttitle: 'Error',\n\t\t\t\t\t\t\tmessage: `Failed to create csv: ${err}`,\n\t\t\t\t\t\t\ttype: 'is-danger',\n\t\t\t\t\t\t\thasIcon: true,\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tfileDownload(csv, 'stack.csv', 'text/csv');\n\t\t\t\t});\n\t\t\t});\n\t}\n\n\tsetOpen(open: boolean) {\n\t\tfetch(\n\t\t\tprocess.env.BASE_URL +\n\t\t\t\t`api/queues/${this.queue.id}/configuration/manual-open?` +\n\t\t\t\tnew URLSearchParams({ open: open.toString() }),\n\t\t\t{\n\t\t\t\tmethod: 'PUT',\n\t\t\t}\n\t\t).then((res) => {\n\t\t\tif (res.status !== 204) {\n\t\t\t\treturn ErrorDialog(res);\n\t\t\t}\n\t\t});\n\t}\n}\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--14-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./OrderedQueue.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--14-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./OrderedQueue.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./OrderedQueue.vue?vue&type=template&id=fa86afb8&scoped=true&\"\nimport script from \"./OrderedQueue.vue?vue&type=script&lang=ts&\"\nexport * from \"./OrderedQueue.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./OrderedQueue.vue?vue&type=style&index=0&id=fa86afb8&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"fa86afb8\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[(_vm.admin)?_c('div',{staticClass:\"block\"},[_c('p',{staticClass:\"title block\"},[_vm._v(\"Admin Controls\")]),_c('appointments-admin-selector',{attrs:{\"queue\":_vm.queue,\"loaded\":_vm.loaded,\"time\":_vm.time}})],1):_vm._e(),_c('transition',{attrs:{\"name\":\"fade\",\"mode\":\"out-in\"}},[(_vm.loaded && _vm.queue.schedule.numSlots === 0)?_c('div',{key:\"unavailable\",staticClass:\"hero is-primary\"},[_c('div',{staticClass:\"hero-body\"},[_c('font-awesome-icon',{staticClass:\"block\",attrs:{\"icon\":\"frown-open\",\"size\":\"10x\"}}),_c('h1',{staticClass:\"title block\"},[_vm._v(\" There are no appointments available today. \")]),_c('h2',{staticClass:\"subtitle\"},[_vm._v(\" Distance makes the heart grow fonder…or something like that. \")])],1)]):_c('div',{key:\"other\",staticClass:\"columns\"},[_c('div',{staticClass:\"column is-12\"},[_c('h1',{staticClass:\"title block\"},[_vm._v(\"Sign Up\")]),_c('appointments-sign-up',{staticClass:\"block\",attrs:{\"queue\":_vm.queue,\"loaded\":_vm.loaded,\"time\":_vm.time}})],1)])])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"columns\"},[_c('div',{staticClass:\"column is-two-thirds\"},[_c('div',{staticClass:\"box\",staticStyle:{\"position\":\"relative\",\"height\":\"100%\"}},[_c('transition',{attrs:{\"name\":\"fade\",\"mode\":\"out-in\"}},[(_vm.loaded)?_c('appointments-display',{key:\"display\",staticClass:\"appointments-display\",attrs:{\"queue\":_vm.queue,\"time\":_vm.time,\"appointments\":_vm.appointments,\"selectedAppointment\":_vm.selectedAppointment,\"admin\":true},on:{\"selected\":_vm.appointmentSelected}}):_c('b-skeleton',{key:\"loading\",attrs:{\"height\":\"10em\"}})],1),_c('button',{staticClass:\"button is-white edit-schedule-button\",on:{\"click\":_vm.editSchedule}},[_c('font-awesome-icon',{attrs:{\"icon\":\"cog\"}})],1)],1)]),_c('div',{staticClass:\"column is-one-third\"},[_c('div',{staticClass:\"box\",staticStyle:{\"height\":\"100%\",\"overflow-x\":\"hidden\"}},[_c('span',{class:{ past: _vm.selectedAppointmentInPast }},[(_vm.selectedAppointment === null)?_c('p',{staticClass:\"title is-5\"},[_vm._v(\" Select an appointment! \")]):_c('div',[(_vm.selectedAppointment.filled)?_c('div',[_c('p',{staticClass:\"title is-5\"},[_vm._v(\" Appointment at \"+_vm._s(_vm.selectedAppointment.scheduledTime.format('LT'))+\" \")]),_c('div',{staticClass:\"block\"},[(_vm.selectedAppointment.studentEmail === undefined)?_c('p',[_vm._v(\" No student yet! \")]):_c('span',[_c('div',{staticClass:\"level icon-row is-mobile\"},[_c('div',{staticClass:\"level-left\"},[_c('font-awesome-icon',{staticClass:\"mr-2 level-item\",attrs:{\"icon\":\"signature\",\"fixed-width\":\"\"}}),_c('strong',{staticClass:\"level-item stay-in-container\"},[_vm._v(_vm._s(_vm.selectedAppointment.name))])],1)]),_c('div',{staticClass:\"level icon-row is-mobile\"},[_c('div',{staticClass:\"level-left\"},[_c('font-awesome-icon',{staticClass:\"mr-2 level-item\",attrs:{\"icon\":\"at\",\"fixed-width\":\"\"}}),_c('span',{staticClass:\"level-item stay-in-container\"},[_vm._v(_vm._s(_vm.selectedAppointment.studentEmail))])],1)]),_c('div',{staticClass:\"level icon-row is-mobile\"},[_c('div',{staticClass:\"level-left\"},[_c('font-awesome-icon',{staticClass:\"mr-2 level-item\",attrs:{\"icon\":\"question\",\"fixed-width\":\"\"}}),_c('span',{staticClass:\"level-item stay-in-container\"},[_vm._v(_vm._s(_vm.selectedAppointment.description))])],1)]),_c('div',{staticClass:\"level icon-row is-mobile\"},[_c('div',{staticClass:\"level-left\"},[_c('font-awesome-icon',{staticClass:\"mr-2 level-item\",attrs:{\"icon\":\"map-marker\",\"fixed-width\":\"\"}}),_c('p',{staticClass:\"level-item link-in-container\",domProps:{\"innerHTML\":_vm._s(_vm.selectedAppointmentLocation)}})],1)])]),_c('div',{staticClass:\"level icon-row is-mobile\"},[_c('div',{staticClass:\"level-left\"},[_c('font-awesome-icon',{staticClass:\"mr-2 level-item\",attrs:{\"icon\":\"chalkboard-teacher\",\"fixed-width\":\"\"}}),_c('strong',{staticClass:\"level-item stay-in-container\"},[_vm._v(_vm._s(_vm.selectedAppointment.staffEmail || '(unclaimed)'))])],1)])]),(!_vm.selectedAppointmentInPast)?_c('span',[(_vm.selectedAppointment.staffEmail === undefined)?_c('button',{staticClass:\"button is-success\",on:{\"click\":_vm.claimTimeslot}},[_c('span',{staticClass:\"icon\"},[_c('font-awesome-icon',{attrs:{\"icon\":\"hand-paper\"}})],1),_c('span',[_vm._v(\"Claim\")])]):(\n\t\t\t\t\t\t\t\t\t_vm.selectedAppointment.staffEmail ===\n\t\t\t\t\t\t\t\t\t\t_vm.$root.$data.userInfo.email\n\t\t\t\t\t\t\t\t)?_c('button',{staticClass:\"button is-danger\",on:{\"click\":_vm.unclaimAppointment}},[_c('span',{staticClass:\"icon\"},[_c('font-awesome-icon',{attrs:{\"icon\":\"calendar-times\"}})],1),_c('span',[_vm._v(\"Unclaim\")])]):_vm._e()]):_vm._e()]):_c('div',[_c('p',{staticClass:\"title is-5\"},[_vm._v(\" Empty slot at \"+_vm._s(_vm.selectedAppointment.scheduledTime.format('LT'))+\" \")]),(!_vm.selectedAppointmentInPast)?_c('button',{staticClass:\"button is-success\",on:{\"click\":_vm.claimTimeslot}},[_c('span',{staticClass:\"icon\"},[_c('font-awesome-icon',{attrs:{\"icon\":\"hand-paper\"}})],1),_c('span',[_vm._v(\"Claim\")])]):_vm._e()])])])])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":'student-appointments-display-' + _vm.id}},_vm._l((_vm.consecutiveTimeslots),function(group,i){return _c('div',{key:'group-' + i,staticClass:\"appointment-slots-group\"},_vm._l((group),function(pair,j){return _c('appointments-column',{key:'group-' + i + '-timeslot-' + j,staticClass:\"appointment-column\",attrs:{\"id\":'student-appointment-timeslot-' + pair[0].timeslot + '-' + _vm.id,\"admin\":_vm.admin,\"appointments\":pair[1],\"timeslot\":pair[0],\"index\":j,\"time\":_vm.time,\"selected\":_vm.selectedAppointment !== null &&\n\t\t\t\t\t_vm.selectedAppointment.timeslot === pair[0].timeslot},on:{\"selected\":function (indexInTimeslot) { return _vm.$emit('selected', pair[0].timeslot, indexInTimeslot); }}})}),1)}),0)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{style:('width: ' + _vm.admin ? '6' : '1.5' + 'em')},[_c('div',{staticClass:\"time-area\"},[(\n\t\t\t\t_vm.admin ||\n\t\t\t\t\t_vm.index === 0 ||\n\t\t\t\t\t_vm.timeslot.time.clone().minutes() === 0 ||\n\t\t\t\t\t_vm.hovering ||\n\t\t\t\t\t_vm.selected\n\t\t\t)?_c('div',{staticClass:\"time-container\"},[_c('p',{staticClass:\"time-text\",class:{ 'time-highlight': _vm.hovering, 'time-selected': _vm.selected }},[_vm._v(\" \"+_vm._s(_vm.timeslot.time.format('LT'))+\" \")])]):_vm._e()]),_vm._l((_vm.appointments),function(s,i){return _c('appointment-cell',{key:i,attrs:{\"admin\":_vm.admin,\"time\":_vm.time,\"appointmentSlot\":s},on:{\"selected\":function($event){return _vm.$emit('selected', i)},\"hover\":function (h) { return (_vm.hovering = h); }}})})],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('button',{staticClass:\"button appointment-cell\",class:_vm.classes,style:('width: ' + _vm.cellWidth + 'em; height: ' + _vm.cellHeight + 'em'),attrs:{\"disabled\":!_vm.admin &&\n\t\t\t(_vm.appointmentSlot.scheduledTime.clone() < _vm.time ||\n\t\t\t\t(_vm.appointmentSlot.filledByStudent &&\n\t\t\t\t\t!(\n\t\t\t\t\t\t_vm.$root.$data.userInfo.email !== undefined &&\n\t\t\t\t\t\t_vm.appointmentSlot.studentEmail === _vm.$root.$data.userInfo.email\n\t\t\t\t\t)))},on:{\"mouseover\":function($event){return _vm.$emit('hover', true)},\"mouseleave\":function($event){return _vm.$emit('hover', false)},\"click\":function($event){return _vm.$emit('selected')}}},[(_vm.admin)?_c('div',[_c('div',{staticClass:\"level icon-row is-mobile\"},[_c('font-awesome-icon',{staticClass:\"mr-2 level-item\",attrs:{\"icon\":\"user\",\"fixed-width\":\"\"}}),_c('span',{staticClass:\"level-item\"},[_vm._v(\" \"+_vm._s(_vm.appointmentSlot.studentEmail !== undefined ? _vm.appointmentSlot.studentEmail.split('@')[0] : '(none)')+\" \")])],1),_c('div',{staticClass:\"level icon-row is-mobile\"},[_c('font-awesome-icon',{staticClass:\"mr-2 level-item\",attrs:{\"icon\":\"chalkboard-teacher\",\"fixed-width\":\"\"}}),_c('span',{staticClass:\"level-item\"},[_vm._v(\" \"+_vm._s(_vm.appointmentSlot.staffEmail !== undefined ? _vm.appointmentSlot.staffEmail.split('@')[0] : '(none)')+\" \")])],1)]):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport { Component, Prop, Vue, Watch } from 'vue-property-decorator';\nimport moment, { Moment } from 'moment-timezone';\nimport { AppointmentSlot, Appointment } from '@/types/Appointment';\nimport { AppointmentsTimeslot } from '@/types/AppointmentsQueue';\n\nimport { library } from '@fortawesome/fontawesome-svg-core';\nimport { faUser, faChalkboardTeacher } from '@fortawesome/free-solid-svg-icons';\n\nlibrary.add(faUser, faChalkboardTeacher);\n\n@Component\nexport default class AppointmentCell extends Vue {\n\t@Prop({ required: true }) admin!: boolean;\n\t@Prop({ required: true }) time!: Moment;\n\t@Prop({ required: true }) appointmentSlot!: AppointmentSlot;\n\n\tget classes() {\n\t\tif (this.admin) {\n\t\t\tconst takenByStudent = this.appointmentSlot.filledByStudent;\n\t\t\tconst takenByStaff = this.appointmentSlot.filledByStaff;\n\t\t\tconst takenByMe =\n\t\t\t\ttakenByStaff &&\n\t\t\t\t(this.appointmentSlot as Appointment).staffEmail ===\n\t\t\t\t\tthis.$root.$data.userInfo.email;\n\t\t\treturn {\n\t\t\t\t'is-danger': takenByStudent && !takenByStaff,\n\t\t\t\t'is-warning': takenByStudent && takenByStaff && !takenByMe,\n\t\t\t\t'is-success': !takenByStudent && takenByMe,\n\t\t\t\t'is-primary': takenByStudent && takenByMe,\n\t\t\t\tpast:\n\t\t\t\t\tthis.appointmentSlot.scheduledTime\n\t\t\t\t\t\t.clone()\n\t\t\t\t\t\t.add(this.appointmentSlot.duration, 'minutes') < this.time,\n\t\t\t};\n\t\t}\n\t\tconst filled = this.appointmentSlot.filledByStudent;\n\t\tconst myAppointment =\n\t\t\tfilled &&\n\t\t\tthis.$root.$data.userInfo.email !== undefined &&\n\t\t\t(this.appointmentSlot as Appointment).studentEmail ===\n\t\t\t\tthis.$root.$data.userInfo.email;\n\t\treturn {\n\t\t\t'is-success': !filled,\n\t\t\t'is-danger': filled && !myAppointment,\n\t\t\t'is-primary': myAppointment,\n\t\t\t'is-light': this.appointmentSlot.scheduledTime < this.time,\n\t\t};\n\t}\n\n\tget cellWidth() {\n\t\treturn this.admin ? 6 : 1.5;\n\t}\n\n\tget cellHeight() {\n\t\treturn this.admin ? 4 : 1.5;\n\t}\n}\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--14-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppointmentCell.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--14-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppointmentCell.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./AppointmentCell.vue?vue&type=template&id=2555b74f&scoped=true&\"\nimport script from \"./AppointmentCell.vue?vue&type=script&lang=ts&\"\nexport * from \"./AppointmentCell.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./AppointmentCell.vue?vue&type=style&index=0&id=2555b74f&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"2555b74f\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport { Component, Prop, Vue } from 'vue-property-decorator';\nimport moment, { Moment } from 'moment-timezone';\nimport { AppointmentsTimeslot } from '@/types/AppointmentsQueue';\nimport { AppointmentSlot } from '@/types/Appointment';\nimport AppointmentCell from '@/components/appointments/AppointmentCell.vue';\n\n@Component({\n\tcomponents: {\n\t\tAppointmentCell,\n\t},\n})\nexport default class AppointmentsColumn extends Vue {\n\t@Prop({ required: true }) appointments!: AppointmentSlot[];\n\t@Prop({ required: true }) index!: number;\n\t@Prop({ required: true }) time!: Moment;\n\t@Prop({ required: true }) timeslot!: AppointmentsTimeslot;\n\t@Prop({ required: true }) selected!: boolean;\n\t@Prop({ required: true }) admin!: boolean;\n\n\thovering = false;\n}\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--14-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppointmentsColumn.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--14-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppointmentsColumn.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./AppointmentsColumn.vue?vue&type=template&id=8891e01c&scoped=true&\"\nimport script from \"./AppointmentsColumn.vue?vue&type=script&lang=ts&\"\nexport * from \"./AppointmentsColumn.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./AppointmentsColumn.vue?vue&type=style&index=0&id=8891e01c&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"8891e01c\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport { Component, Prop, Watch, Vue } from 'vue-property-decorator';\nimport moment, { Moment } from 'moment-timezone';\nimport {\n\tAppointmentsQueue,\n\tAppointmentsTimeslot,\n} from '@/types/AppointmentsQueue';\nimport AppointmentsColumn from '@/components/appointments/AppointmentsColumn.vue';\nimport { Appointment, AppointmentSlot } from '@/types/Appointment';\n\n@Component({\n\tcomponents: {\n\t\tAppointmentsColumn,\n\t},\n})\nexport default class AppointmentsDisplay extends Vue {\n\t@Prop({ required: true }) queue!: AppointmentsQueue;\n\t@Prop({ required: true }) time!: Moment;\n\t@Prop({ required: true }) admin!: boolean;\n\n\t@Prop({ required: true }) appointments!: {\n\t\t[index: number]: AppointmentSlot[];\n\t};\n\n\t@Prop({ required: true }) selectedAppointment!: AppointmentSlot | null;\n\n\tid: string;\n\n\tconstructor() {\n\t\tsuper();\n\t\tthis.id = Math.random()\n\t\t\t.toString(36)\n\t\t\t.substr(2);\n\t}\n\n\tget firstOpenTimeslot(): number | undefined {\n\t\tif (this.queue.schedule === undefined) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst s = Object.entries(this.queue.schedule.timeslots).find(\n\t\t\t(t: [string, AppointmentsTimeslot]) =>\n\t\t\t\t!t[1].past(\n\t\t\t\t\tthis.time\n\t\t\t\t\t\t.clone()\n\t\t\t\t\t\t.subtract(this.admin ? this.queue.schedule?.duration : 0, 'minutes')\n\t\t\t\t)\n\t\t);\n\n\t\treturn s !== undefined ? parseInt(s[0]) : undefined;\n\t}\n\n\tmounted() {\n\t\tif (this.firstOpenTimeslot !== undefined) {\n\t\t\tthis.scrollToTimeslot(this.firstOpenTimeslot, false);\n\t\t}\n\t}\n\n\t@Watch('firstOpenTimeslot')\n\tonTimeUpdated(newSlot: number | undefined, oldSlot: number | undefined) {\n\t\tif (newSlot !== undefined && newSlot !== oldSlot) {\n\t\t\tthis.scrollToTimeslot(newSlot, true);\n\t\t}\n\t}\n\n\tscrollToTimeslot(timeslot: number, smooth: boolean) {\n\t\t// Find DOM element corresponding to column of timeslot\n\t\tconst timeslotElement = document.getElementById(\n\t\t\t'student-appointment-timeslot-' + timeslot + '-' + this.id\n\t\t);\n\t\tconst appointmentsDisplayElement = document.getElementById(\n\t\t\t'student-appointments-display-' + this.id\n\t\t);\n\t\tif (timeslotElement === null || appointmentsDisplayElement === null) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Scroll appointments display to area of first open timeslot\n\t\tconst delta =\n\t\t\ttimeslotElement.getBoundingClientRect().left -\n\t\t\tappointmentsDisplayElement.getBoundingClientRect().left;\n\t\tappointmentsDisplayElement.scroll({\n\t\t\tleft: appointmentsDisplayElement.scrollLeft + delta - 50,\n\t\t\tbehavior: smooth ? 'smooth' : 'auto',\n\t\t});\n\t}\n\n\tget consecutiveTimeslots(): [AppointmentsTimeslot, AppointmentSlot[]][][] {\n\t\tconst groups: [AppointmentsTimeslot, AppointmentSlot[]][][] = [];\n\t\tconst slots = Object.keys(this.appointments).map((n) => parseInt(n));\n\n\t\tif (slots.length === 0 || this.queue.schedule === undefined) {\n\t\t\treturn [];\n\t\t}\n\n\t\tlet lastSeen: number = slots[0];\n\t\tlet running: [AppointmentsTimeslot, AppointmentSlot[]][] = [\n\t\t\t[this.queue.schedule.timeslots[lastSeen], this.appointments[lastSeen]],\n\t\t];\n\t\tfor (let i = 1; i < slots.length; i++) {\n\t\t\tif (slots[i] !== lastSeen + 1) {\n\t\t\t\tgroups.push(running);\n\t\t\t\trunning = [];\n\t\t\t}\n\n\t\t\trunning.push([\n\t\t\t\tthis.queue.schedule.timeslots[slots[i]],\n\t\t\t\tthis.appointments[slots[i]],\n\t\t\t]);\n\t\t\tlastSeen = slots[i];\n\t\t}\n\n\t\tgroups.push(running);\n\t\treturn groups;\n\t}\n}\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--14-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppointmentsDisplay.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--14-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppointmentsDisplay.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./AppointmentsDisplay.vue?vue&type=template&id=8d9be358&scoped=true&\"\nimport script from \"./AppointmentsDisplay.vue?vue&type=script&lang=ts&\"\nexport * from \"./AppointmentsDisplay.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./AppointmentsDisplay.vue?vue&type=style&index=0&id=8d9be358&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"8d9be358\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"modal-card\",staticStyle:{\"width\":\"auto\"}},[_c('header',{staticClass:\"modal-card-head\"},[_c('p',{staticClass:\"modal-card-title\"},[_vm._v(\"Edit Appointments Schedule\")]),_c('button',{staticClass:\"delete\",attrs:{\"type\":\"button\"},on:{\"click\":function($event){return _vm.$emit('close')}}})]),_c('section',{staticClass:\"modal-card-body\"},[_c('div',{staticClass:\"buttons has-addons\"},_vm._l((10),function(i){return _c('b-button',{key:i,style:('background-color: ' + _vm.getColorForAvailability(i - 1)),attrs:{\"active\":_vm.selectedNumAppointments == i - 1},on:{\"click\":function($event){_vm.selectedNumAppointments = i - 1}}},[_vm._v(\" \"+_vm._s(i - 1)+\" \")])}),1),(_vm.schedules !== undefined)?_c('div',{staticClass:\"block\"},_vm._l(([\n\t\t\t\t\t'Sunday',\n\t\t\t\t\t'Monday',\n\t\t\t\t\t'Tuesday',\n\t\t\t\t\t'Wednesday',\n\t\t\t\t\t'Thursday',\n\t\t\t\t\t'Friday',\n\t\t\t\t\t'Saturday' ]),function(day,i){return _c('div',{key:i,staticClass:\"block\",staticStyle:{\"display\":\"block\"}},[_c('p',{staticClass:\"title is-4\"},[_vm._v(_vm._s(day))]),_c('b-field',[_c('b-numberinput',{attrs:{\"min\":\"5\",\"controls-position\":\"compact\"},model:{value:(_vm.temporaryDurations[i]),callback:function ($$v) {_vm.$set(_vm.temporaryDurations, i, $$v)},expression:\"temporaryDurations[i]\"}}),_c('p',{staticClass:\"control\"},[_c('button',{staticClass:\"button is-warning\",attrs:{\"disabled\":_vm.temporaryDurations[i] === _vm.durations[i]},on:{\"click\":function($event){return _vm.setDuration(i)}}},[_vm._v(\" Change Duration \")]),_c('button',{staticClass:\"button is-success\",attrs:{\"disabled\":_vm.schedules[i].toString() === _vm.defaultSchedules[i].toString()},on:{\"click\":function($event){return _vm.$emit('saved', i, _vm.durations[i], _vm.schedules[i])}}},[_vm._v(\" Save Schedule \")])])],1),_c('div',{staticClass:\"schedule-row\"},_vm._l((Math.floor((60 * 24) / _vm.durations[i])),function(j){return _c('b-tooltip',{key:j,attrs:{\"label\":_vm.base\n\t\t\t\t\t\t\t\t.clone()\n\t\t\t\t\t\t\t\t.add((j - 1) * _vm.durations[i], 'minutes')\n\t\t\t\t\t\t\t\t.format('LT'),\"always\":(j - 1) % 8 == 0}},[_c('button',{staticClass:\"button timeslot-cell\",style:('background-color: ' +\n\t\t\t\t\t\t\t\t\t_vm.getColorForAvailability(_vm.schedules[i][j - 1])),on:{\"mousedown\":function () {\n\t\t\t\t\t\t\t\t\t_vm.changeSlot(i, j - 1);\n\t\t\t\t\t\t\t\t\t_vm.painting = true;\n\t\t\t\t\t\t\t\t},\"mouseup\":function () { return (_vm.painting = false); },\"mouseover\":function () { return _vm.painting && _vm.changeSlot(i, j - 1); }}},[_vm._v(\" \"+_vm._s(_vm.schedules[i][j - 1])+\" \")])])}),1)],1)}),0):_vm._e()]),_c('footer',{staticClass:\"modal-card-foot\"},[_c('button',{staticClass:\"button\",attrs:{\"type\":\"button\"},on:{\"click\":function($event){return _vm.$emit('close')}}},[_vm._v(\" Close \")])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport { Component, Prop, Vue } from 'vue-property-decorator';\nimport moment, { Moment } from 'moment-timezone';\n\nimport { library } from '@fortawesome/fontawesome-svg-core';\nimport { faMinus, faPlus } from '@fortawesome/free-solid-svg-icons';\n\nlibrary.add(faMinus, faPlus);\n\n// I don't like this component. :)\n@Component({})\nexport default class AppointmentsSchedule extends Vue {\n\t@Prop({ required: true })\n\tdefaultSchedules!: number[][];\n\n\t@Prop({ required: true })\n\tdefaultDurations!: number[];\n\n\tschedules: number[][] = [];\n\tdurations: number[] = [];\n\n\t// Where durations are stored before they are confirmed.\n\ttemporaryDurations!: number[];\n\n\tselectedNumAppointments = 0;\n\tpainting = false;\n\n\t// This choice of date is completely arbitrary; I just needed\n\t// a base time of midnight off which we can add 30-minute intervals.\n\tbase: Moment = moment('2020-01-01T00:00:00-05:00');\n\n\tconstructor() {\n\t\tsuper();\n\t\tfor (let i = 0; i < this.defaultSchedules.length; i++) {\n\t\t\tthis.schedules.push([...this.defaultSchedules[i]]);\n\t\t}\n\t\tthis.durations = [...this.defaultDurations];\n\t\tthis.temporaryDurations = [...this.defaultDurations];\n\t}\n\n\tchangeSlot(i: number, j: number) {\n\t\tVue.set(this.schedules[i], j, this.selectedNumAppointments);\n\t}\n\n\tsetDuration(i: number) {\n\t\tconst newSchedule = new Array(\n\t\t\tMath.floor((60 * 24) / this.temporaryDurations[i])\n\t\t);\n\t\tnewSchedule.fill(0);\n\t\tthis.schedules.splice(i, 1, newSchedule);\n\t\tthis.durations.splice(i, 1, this.temporaryDurations[i]);\n\t}\n\n\tgetColorForAvailability(numAvailable: number, brightness = 1) {\n\t\tconst hueStart = 120;\n\t\tconst hueMax = 0;\n\t\tconst hueRange = hueMax - hueStart;\n\t\tconst maxAvailable = 9;\n\t\tif (numAvailable === 0) {\n\t\t\treturn '#777';\n\t\t}\n\n\t\tconst hue = Math.floor(\n\t\t\thueStart + ((numAvailable - 1) * hueRange) / (maxAvailable - 1)\n\t\t);\n\t\treturn `hsl(${hue}, 39%, ${Math.floor(54 * brightness)}%)`;\n\t}\n}\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--14-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppointmentsSchedule.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--14-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppointmentsSchedule.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./AppointmentsSchedule.vue?vue&type=template&id=7f0e5280&scoped=true&\"\nimport script from \"./AppointmentsSchedule.vue?vue&type=script&lang=ts&\"\nexport * from \"./AppointmentsSchedule.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./AppointmentsSchedule.vue?vue&type=style&index=0&id=7f0e5280&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"7f0e5280\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Vue from 'vue';\nimport { Moment } from 'moment';\nimport { Component, Prop, Watch } from 'vue-property-decorator';\nimport linkifyStr from 'linkifyjs/string';\nimport { AppointmentsQueue } from '@/types/AppointmentsQueue';\nimport AppointmentsDisplay from '@/components/appointments/AppointmentsDisplay.vue';\nimport AppointmentsSchedule from '@/components/appointments/AppointmentsSchedule.vue';\nimport { Appointment, AppointmentSlot } from '@/types/Appointment';\nimport ErrorDialog from '@/util/ErrorDialog';\n\nimport { library } from '@fortawesome/fontawesome-svg-core';\nimport {\n\tfaSignature,\n\tfaAt,\n\tfaQuestion,\n\tfaLink,\n\tfaChalkboardTeacher,\n\tfaHandPaper,\n\tfaCalendarTimes,\n\tfaCog,\n\tfaMapMarker,\n} from '@fortawesome/free-solid-svg-icons';\n\nlibrary.add(\n\tfaSignature,\n\tfaAt,\n\tfaQuestion,\n\tfaLink,\n\tfaChalkboardTeacher,\n\tfaHandPaper,\n\tfaCalendarTimes,\n\tfaCog,\n\tfaMapMarker\n);\n\n@Component({\n\tcomponents: { AppointmentsDisplay },\n})\nexport default class AppointmentsAdminSelector extends Vue {\n\tname = '';\n\tdescription = '';\n\tlocation = '';\n\n\t@Prop({ required: true }) queue!: AppointmentsQueue;\n\t@Prop({ required: true }) time!: Moment;\n\t@Prop({ required: true }) loaded!: boolean;\n\n\tget appointments() {\n\t\tif (this.queue.schedule === undefined) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\treturn this.queue.schedule.appointmentSlots;\n\t}\n\n\tappointmentSelected(timeslot: number | null, index: number | null) {\n\t\tthis.selectedTimeslot = timeslot;\n\t\tthis.selectedIndex = index;\n\t}\n\n\tselectedTimeslot: number | null = null;\n\tselectedIndex: number | null = null;\n\n\tget selectedAppointment(): AppointmentSlot | null {\n\t\tif (\n\t\t\tthis.selectedTimeslot === null ||\n\t\t\tthis.selectedIndex === null ||\n\t\t\tthis.queue.schedule === undefined\n\t\t) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn this.queue.schedule.timeslots[this.selectedTimeslot]!.slots[\n\t\t\tthis.selectedIndex\n\t\t]!;\n\t}\n\n\tget selectedAppointmentInPast(): boolean {\n\t\treturn (\n\t\t\tthis.selectedAppointment !== null &&\n\t\t\tthis.selectedAppointment.scheduledTime\n\t\t\t\t.clone()\n\t\t\t\t.add(this.selectedAppointment.duration, 'minutes') < this.time\n\t\t);\n\t}\n\n\tget selectedAppointmentLocation(): string {\n\t\tif (\n\t\t\tthis.selectedAppointment === null ||\n\t\t\t!this.selectedAppointment.filled ||\n\t\t\t(this.selectedAppointment as Appointment).location === undefined\n\t\t) {\n\t\t\treturn '';\n\t\t}\n\n\t\treturn linkifyStr((this.selectedAppointment as Appointment).location!, {\n\t\t\tdefaultProtocol: 'https',\n\t\t});\n\t}\n\n\tclaimTimeslot() {\n\t\tfetch(\n\t\t\tprocess.env.BASE_URL +\n\t\t\t\t`api/queues/${this.queue.id}/appointments/${this.queue.schedule?.day}/claims/${this.selectedTimeslot}`,\n\t\t\t{\n\t\t\t\tmethod: 'PUT',\n\t\t\t}\n\t\t).then((res) => {\n\t\t\tif (res.status !== 201) {\n\t\t\t\treturn ErrorDialog(res);\n\t\t\t}\n\t\t});\n\t}\n\n\tunclaimAppointment() {\n\t\tfetch(\n\t\t\tprocess.env.BASE_URL +\n\t\t\t\t`api/queues/${this.queue.id}/appointments/claims/${\n\t\t\t\t\t(this.selectedAppointment as Appointment).id\n\t\t\t\t}`,\n\t\t\t{\n\t\t\t\tmethod: 'DELETE',\n\t\t\t}\n\t\t).then((res) => {\n\t\t\tif (res.status !== 201) {\n\t\t\t\treturn ErrorDialog(res);\n\t\t\t}\n\t\t});\n\t}\n\n\teditSchedule() {\n\t\tfetch(\n\t\t\tprocess.env.BASE_URL + `api/queues/${this.queue.id}/appointments/schedule`\n\t\t)\n\t\t\t.then((res) => res.json())\n\t\t\t.then((schedule: [{ [index: string]: any }]) => {\n\t\t\t\tschedule.sort(\n\t\t\t\t\t(a: { [index: string]: any }, b: { [index: string]: any }) =>\n\t\t\t\t\t\ta['day'] - b['day']\n\t\t\t\t);\n\t\t\t\tconst schedules = schedule.map((s: { [index: string]: any }) =>\n\t\t\t\t\ts['schedule'].split('').map((i: string) => parseInt(i))\n\t\t\t\t);\n\t\t\t\tconst durations = schedule.map(\n\t\t\t\t\t(s: { [index: string]: any }) => s['duration']\n\t\t\t\t);\n\t\t\t\tthis.$buefy.modal.open({\n\t\t\t\t\tparent: this,\n\t\t\t\t\tcomponent: AppointmentsSchedule,\n\t\t\t\t\tprops: { defaultSchedules: schedules, defaultDurations: durations },\n\t\t\t\t\tevents: {\n\t\t\t\t\t\tsaved: (day: number, duration: number, schedule: number[]) => {\n\t\t\t\t\t\t\tconst scheduleStr = schedule\n\t\t\t\t\t\t\t\t.map((slot: number) => slot.toString())\n\t\t\t\t\t\t\t\t.join('');\n\t\t\t\t\t\t\tfetch(\n\t\t\t\t\t\t\t\tprocess.env.BASE_URL +\n\t\t\t\t\t\t\t\t\t`api/queues/${this.queue.id}/appointments/schedule/${day}`,\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tmethod: 'PUT',\n\t\t\t\t\t\t\t\t\tbody: JSON.stringify({\n\t\t\t\t\t\t\t\t\t\tduration: duration,\n\t\t\t\t\t\t\t\t\t\tpadding: 2,\n\t\t\t\t\t\t\t\t\t\tschedule: scheduleStr,\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t).then((res) => {\n\t\t\t\t\t\t\t\tif (res.status !== 204) {\n\t\t\t\t\t\t\t\t\treturn ErrorDialog(res);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\thasModalCard: true,\n\t\t\t\t\ttrapFocus: true,\n\t\t\t\t});\n\t\t\t});\n\t}\n}\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--14-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppointmentsAdminSelector.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--14-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppointmentsAdminSelector.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./AppointmentsAdminSelector.vue?vue&type=template&id=1b0a6df4&scoped=true&\"\nimport script from \"./AppointmentsAdminSelector.vue?vue&type=script&lang=ts&\"\nexport * from \"./AppointmentsAdminSelector.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./AppointmentsAdminSelector.vue?vue&type=style&index=0&id=1b0a6df4&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1b0a6df4\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('div',{staticClass:\"field is-horizontal\"},[_vm._m(0),_c('div',{staticClass:\"field-body\"},[_c('div',{staticClass:\"field\"},[_c('div',{staticClass:\"control has-icons-left\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.description),expression:\"description\"}],staticClass:\"input\",attrs:{\"type\":\"text\",\"placeholder\":\"Help us help you—please be descriptive!\"},domProps:{\"value\":(_vm.description)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.description=$event.target.value}}}),_c('span',{staticClass:\"icon is-small is-left\"},[_c('font-awesome-icon',{attrs:{\"icon\":\"question\"}})],1)])])])]),_c('div',{staticClass:\"field is-horizontal\"},[_vm._m(1),_c('div',{staticClass:\"field-body\"},[_c('div',{staticClass:\"field\"},[_c('div',{staticClass:\"control has-icons-left\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.location),expression:\"location\"}],staticClass:\"input\",attrs:{\"type\":\"text\"},domProps:{\"value\":(_vm.location)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.location=$event.target.value}}}),_c('span',{staticClass:\"icon is-small is-left\"},[_c('font-awesome-icon',{attrs:{\"icon\":\"map-marker\"}})],1)])])])]),_c('div',{staticClass:\"field is-horizontal\"},[_vm._m(2),_c('div',{staticClass:\"field-body\",staticStyle:{\"min-width\":\"0\"}},[_c('div',{staticClass:\"field\",staticStyle:{\"width\":\"100%\"}},[_c('div',{staticClass:\"box\"},[_c('transition',{attrs:{\"name\":\"fade\",\"mode\":\"out-in\"}},[(_vm.loaded)?_c('appointments-display',{key:\"display\",staticClass:\"appointments-display\",attrs:{\"queue\":_vm.queue,\"time\":_vm.time,\"appointments\":_vm.studentAppointments,\"selectedAppointment\":_vm.selectedAppointment,\"admin\":false},on:{\"selected\":_vm.appointmentSelected}}):_c('b-skeleton',{key:\"loading\",attrs:{\"height\":\"10em\"}})],1)],1)])])]),_c('div',{staticClass:\"field is-horizontal\"},[_c('div',{staticClass:\"field-label\"}),_c('div',{staticClass:\"field-body\"},[_c('div',{staticClass:\"field\"},[_c('div',{staticClass:\"control level-left\"},[(_vm.selectedAppointment === null)?_c('button',{staticClass:\"button is-success level-item\",attrs:{\"disabled\":\"\"}},[_c('span',{staticClass:\"icon\"},[_c('font-awesome-icon',{attrs:{\"icon\":\"user-clock\"}})],1),_c('span',[_vm._v(\"Select a time slot!\")])]):(_vm.myAppointment === null)?_c('button',{staticClass:\"button is-success level-item\",class:{ 'is-loading': _vm.signUpRequstRunning },attrs:{\"disabled\":!_vm.canSignUp},on:{\"click\":_vm.signUp}},[_c('span',{staticClass:\"icon\"},[_c('font-awesome-icon',{attrs:{\"icon\":\"calendar-check\"}})],1),_c('span',[_vm._v(\"Schedule appointment at \"+_vm._s(_vm.selectedAppointment.scheduledTime.format('LT')))])]):(_vm.myAppointmentModified)?_c('button',{staticClass:\"button is-warning level-item\",class:{ 'is-loading': _vm.updateAppointmentRequestRunning },on:{\"click\":_vm.updateAppointment}},[_c('span',{staticClass:\"icon\"},[_c('font-awesome-icon',{attrs:{\"icon\":\"edit\"}})],1),_c('span',[_vm._v(\"Update Appointment\")])]):_c('button',{staticClass:\"button is-success level-item\",attrs:{\"disabled\":\"true\"}},[_c('span',{staticClass:\"icon\"},[_c('font-awesome-icon',{attrs:{\"icon\":\"check\"}})],1),_c('span',[_vm._v(\"Scheduled for \"+_vm._s(_vm.myAppointment.scheduledTime.format('LT')))])]),(_vm.myAppointment !== null)?_c('button',{staticClass:\"button is-danger level-item\",class:{ 'is-loading': _vm.cancelAppointmentRequestRunning },on:{\"click\":_vm.cancelAppointment}},[_c('span',{staticClass:\"icon\"},[_c('font-awesome-icon',{attrs:{\"icon\":\"calendar-times\"}})],1),_c('span',[_vm._v(\"Cancel Appointment\")])]):_vm._e(),(!_vm.$root.$data.loggedIn)?_c('p',{staticClass:\"level-item\"},[_vm._v(\" Log in to sign up! \")]):_vm._e()])])])])])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"field-label\"},[_c('label',{staticClass:\"label\"},[_vm._v(\"Description\")])])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"field-label\"},[_c('label',{staticClass:\"label\"},[_vm._v(\"Location/Meeting Link\")])])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"field-label\"},[_c('label',{staticClass:\"label\"},[_vm._v(\"Appointments\")])])}]\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Vue from 'vue';\nimport { Moment } from 'moment';\nimport { Component, Prop, Watch } from 'vue-property-decorator';\nimport { AppointmentsQueue } from '@/types/AppointmentsQueue';\nimport AppointmentsDisplay from '@/components/appointments/AppointmentsDisplay.vue';\nimport { Appointment, AppointmentSlot } from '@/types/Appointment';\nimport ErrorDialog from '@/util/ErrorDialog';\nimport EscapeHTML from '@/util/Sanitization';\n\nimport { library } from '@fortawesome/fontawesome-svg-core';\nimport {\n\tfaUser,\n\tfaQuestion,\n\tfaLink,\n\tfaCalendarCheck,\n\tfaCalendarTimes,\n\tfaCheck,\n\tfaUserClock,\n\tfaEdit,\n\tfaMapMarker,\n} from '@fortawesome/free-solid-svg-icons';\n\nlibrary.add(\n\tfaUser,\n\tfaQuestion,\n\tfaLink,\n\tfaCalendarCheck,\n\tfaCalendarTimes,\n\tfaCheck,\n\tfaUserClock,\n\tfaEdit,\n\tfaMapMarker\n);\n\n@Component({\n\tcomponents: { AppointmentsDisplay },\n})\nexport default class AppointmentsSignUp extends Vue {\n\tdescription = '';\n\tlocation = '';\n\n\t@Prop({ required: true }) queue!: AppointmentsQueue;\n\t@Prop({ required: true }) time!: Moment;\n\t@Prop({ required: true }) loaded!: boolean;\n\n\tget studentAppointments() {\n\t\tif (this.queue.schedule === undefined) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\treturn this.queue.schedule.appointmentSlots;\n\t}\n\n\tappointmentSelected(timeslot: number | null, index: number | null) {\n\t\tthis.selectedTimeslot = timeslot;\n\t\tthis.selectedIndex = index;\n\t}\n\n\tselectedTimeslot: number | null = null;\n\tselectedIndex: number | null = null;\n\n\tget selectedAppointment(): AppointmentSlot | null {\n\t\tif (\n\t\t\tthis.selectedTimeslot === null ||\n\t\t\tthis.selectedIndex === null ||\n\t\t\tthis.queue.schedule === undefined\n\t\t) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn this.queue.schedule.timeslots[this.selectedTimeslot]!.slots[\n\t\t\tthis.selectedIndex\n\t\t]!;\n\t}\n\n\t@Watch('time')\n\tonTimeUpdated() {\n\t\tif (\n\t\t\tthis.selectedAppointment !== null &&\n\t\t\tthis.queue.schedule !== undefined &&\n\t\t\t!(\n\t\t\t\tthis.myAppointment !== null &&\n\t\t\t\tthis.myAppointment.timeslot === this.selectedAppointment.timeslot\n\t\t\t) &&\n\t\t\tthis.queue.schedule.timeslots[this.selectedAppointment.timeslot].past(\n\t\t\t\tthis.time\n\t\t\t)\n\t\t) {\n\t\t\tthis.appointmentSelected(null, null);\n\t\t}\n\t}\n\n\t@Watch('myAppointment', { immediate: true })\n\tmyAppointmentUpdated(\n\t\tnewAppointment: Appointment | null,\n\t\toldAppointment: Appointment | null\n\t) {\n\t\tif (newAppointment !== oldAppointment && newAppointment !== null) {\n\t\t\tthis.description = newAppointment.description || '';\n\t\t\tthis.location = newAppointment.location || '';\n\t\t\tthis.appointmentSelected(\n\t\t\t\tnewAppointment.timeslot,\n\t\t\t\tthis.queue.schedule?.timeslots[newAppointment.timeslot]?.slots.indexOf(\n\t\t\t\t\tnewAppointment\n\t\t\t\t)!\n\t\t\t);\n\t\t}\n\t}\n\n\tget myAppointment(): Appointment | null {\n\t\tif (\n\t\t\tthis.$root.$data.userInfo.email === undefined ||\n\t\t\tthis.queue.schedule === undefined\n\t\t) {\n\t\t\treturn null;\n\t\t}\n\n\t\tfor (const timeslot of Object.values(this.queue.schedule.timeslots)) {\n\t\t\tfor (const slot of timeslot.slots) {\n\t\t\t\tif (\n\t\t\t\t\tslot.filled &&\n\t\t\t\t\t(slot as Appointment).studentEmail ===\n\t\t\t\t\t\tthis.$root.$data.userInfo.email &&\n\t\t\t\t\tslot.scheduledTime\n\t\t\t\t\t\t.clone()\n\t\t\t\t\t\t.add(this.queue.schedule.duration, 'minutes')\n\t\t\t\t\t\t.diff(this.time) > 0\n\t\t\t\t) {\n\t\t\t\t\treturn slot as Appointment;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tget myAppointmentModified() {\n\t\tconst a = this.myAppointment;\n\t\treturn (\n\t\t\ta !== null &&\n\t\t\t(a.description !== this.description ||\n\t\t\t\ta.location !== this.location ||\n\t\t\t\t(this.selectedAppointment !== null &&\n\t\t\t\t\ta.timeslot !== this.selectedAppointment.timeslot))\n\t\t);\n\t}\n\n\tget canSignUp() {\n\t\treturn (\n\t\t\tthis.$root.$data.loggedIn &&\n\t\t\tthis.description !== undefined &&\n\t\t\tthis.location !== undefined &&\n\t\t\tthis.description.trim() !== '' &&\n\t\t\tthis.location.trim() !== ''\n\t\t);\n\t}\n\n\tsignUp() {\n\t\tif (this.queue.config?.confirmSignupMessage !== undefined) {\n\t\t\treturn this.$buefy.dialog.confirm({\n\t\t\t\ttitle: 'Sign Up',\n\t\t\t\tmessage: EscapeHTML(this.queue.config!.confirmSignupMessage),\n\t\t\t\ttype: 'is-warning',\n\t\t\t\thasIcon: true,\n\t\t\t\tonConfirm: this.signUpRequest,\n\t\t\t});\n\t\t}\n\n\t\tthis.signUpRequest();\n\t}\n\n\tsignUpRequstRunning = false;\n\tsignUpRequest() {\n\t\tthis.signUpRequstRunning = true;\n\t\tfetch(\n\t\t\tprocess.env.BASE_URL +\n\t\t\t\t`api/queues/${this.queue.id}/appointments/${this.queue.schedule?.day}/${this.selectedAppointment?.timeslot}`,\n\t\t\t{\n\t\t\t\tmethod: 'POST',\n\t\t\t\tbody: JSON.stringify({\n\t\t\t\t\tdescription: this.description,\n\t\t\t\t\tlocation: this.location,\n\t\t\t\t}),\n\t\t\t}\n\t\t).then((res) => {\n\t\t\tthis.signUpRequstRunning = false;\n\t\t\tif (res.status !== 201) {\n\t\t\t\treturn ErrorDialog(res);\n\t\t\t}\n\n\t\t\tconst startTime: Moment = this.selectedAppointment?.scheduledTime!;\n\t\t\tconst endTime: Moment = startTime\n\t\t\t\t.clone()\n\t\t\t\t.add(this.selectedAppointment?.duration, 'minutes');\n\t\t\tconst link = new URL('http://www.google.com/calendar/event');\n\t\t\tlink.searchParams.append('action', 'TEMPLATE');\n\t\t\tlink.searchParams.append(\n\t\t\t\t'dates',\n\t\t\t\tstartTime.toISOString().replaceAll(/[-:\\\\.]/g, '') +\n\t\t\t\t\t'/' +\n\t\t\t\t\tendTime.toISOString().replaceAll(/[-:\\\\.]/g, '')\n\t\t\t);\n\t\t\tlink.searchParams.append(\n\t\t\t\t'text',\n\t\t\t\tthis.queue.course.shortName + ' Office Hours Appointment'\n\t\t\t);\n\t\t\tlink.searchParams.append('location', this.location);\n\n\t\t\tthis.$buefy.dialog.alert({\n\t\t\t\ttitle: 'Appointment Scheduled',\n\t\t\t\tmessage: `Success, ${EscapeHTML(\n\t\t\t\t\tthis.$root.$data.userInfo.first_name\n\t\t\t\t)}—your appointment has been scheduled. Make sure to be ready at ${this.selectedAppointment?.scheduledTime.format(\n\t\t\t\t\t'LT'\n\t\t\t\t)}! Add this appointment to your Google calendar.`,\n\t\t\t\ttype: 'is-success',\n\t\t\t\thasIcon: true,\n\t\t\t});\n\t\t});\n\t}\n\n\tupdateAppointmentRequestRunning = false;\n\tupdateAppointment() {\n\t\tif (\n\t\t\tthis.myAppointment !== null &&\n\t\t\tthis.selectedAppointment?.timeslot !== this.myAppointment.timeslot &&\n\t\t\tthis.myAppointment.scheduledTime.diff(this.time) < 0\n\t\t) {\n\t\t\treturn this.$buefy.dialog.alert({\n\t\t\t\ttitle: 'Slow Down!',\n\t\t\t\tmessage: `An appointment's time can't be changed while it's happening!`,\n\t\t\t\ttype: 'is-danger',\n\t\t\t\thasIcon: true,\n\t\t\t});\n\t\t}\n\n\t\tthis.updateAppointmentRequestRunning = true;\n\t\tfetch(\n\t\t\tprocess.env.BASE_URL +\n\t\t\t\t`api/queues/${this.queue.id}/appointments/${this.myAppointment?.id}`,\n\t\t\t{\n\t\t\t\tmethod: 'PUT',\n\t\t\t\tbody: JSON.stringify({\n\t\t\t\t\tdescription: this.description,\n\t\t\t\t\tlocation: this.location,\n\t\t\t\t\ttimeslot: this.selectedAppointment?.timeslot,\n\t\t\t\t}),\n\t\t\t}\n\t\t).then((res) => {\n\t\t\tthis.updateAppointmentRequestRunning = false;\n\t\t\tif (res.status !== 201) {\n\t\t\t\treturn ErrorDialog(res);\n\t\t\t}\n\n\t\t\tthis.$buefy.dialog.alert({\n\t\t\t\ttitle: 'Appointment Updated',\n\t\t\t\tmessage: `Your appointment has been updated. Make sure to be ready at ${EscapeHTML(\n\t\t\t\t\tthis.selectedAppointment?.scheduledTime.format('LT')!\n\t\t\t\t)}!`,\n\t\t\t\ttype: 'is-success',\n\t\t\t\thasIcon: true,\n\t\t\t});\n\t\t});\n\t}\n\n\tcancelAppointmentRequestRunning = false;\n\tcancelAppointment() {\n\t\tthis.$buefy.dialog.confirm({\n\t\t\ttitle: 'Cancel Appointment',\n\t\t\tmessage: `Are you sure you want to cancel your ${EscapeHTML(\n\t\t\t\tthis.myAppointment?.scheduledTime.format('LT')!\n\t\t\t)} appointment?`,\n\t\t\ttype: 'is-danger',\n\t\t\thasIcon: true,\n\t\t\tconfirmText: 'Cancel Appointment',\n\t\t\tcancelText: 'Close',\n\t\t\tonConfirm: () => {\n\t\t\t\tthis.cancelAppointmentRequestRunning = true;\n\t\t\t\tfetch(\n\t\t\t\t\tprocess.env.BASE_URL +\n\t\t\t\t\t\t`api/queues/${this.queue.id}/appointments/${this.myAppointment?.id}`,\n\t\t\t\t\t{\n\t\t\t\t\t\tmethod: 'DELETE',\n\t\t\t\t\t}\n\t\t\t\t).then((res) => {\n\t\t\t\t\tthis.cancelAppointmentRequestRunning = false;\n\t\t\t\t\tif (res.status !== 204) {\n\t\t\t\t\t\treturn ErrorDialog(res);\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.$buefy.dialog.alert({\n\t\t\t\t\t\ttitle: 'Appointment Canceled',\n\t\t\t\t\t\tmessage: `Your appointment has been canceled.`,\n\t\t\t\t\t\ttype: 'is-success',\n\t\t\t\t\t\thasIcon: true,\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t},\n\t\t});\n\t}\n}\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--14-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppointmentsSignUp.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--14-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppointmentsSignUp.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./AppointmentsSignUp.vue?vue&type=template&id=27c802fc&scoped=true&\"\nimport script from \"./AppointmentsSignUp.vue?vue&type=script&lang=ts&\"\nexport * from \"./AppointmentsSignUp.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./AppointmentsSignUp.vue?vue&type=style&index=0&id=27c802fc&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"27c802fc\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport { Component, Prop, Vue } from 'vue-property-decorator';\nimport moment, { Moment } from 'moment-timezone';\nimport ErrorDialog from '@/util/ErrorDialog';\nimport { AppointmentsQueue } from '@/types/AppointmentsQueue';\nimport AppointmentsAdminSelector from '@/components/appointments/AppointmentsAdminSelector.vue';\nimport AppointmentsSignUp from '@/components/appointments/AppointmentsSignUp.vue';\n\nimport { library } from '@fortawesome/fontawesome-svg-core';\nimport { faFrownOpen } from '@fortawesome/free-solid-svg-icons';\n\nlibrary.add(faFrownOpen);\n\n@Component({\n\tcomponents: {\n\t\tAppointmentsSignUp,\n\t\tAppointmentsAdminSelector,\n\t},\n})\nexport default class AppointmentsQueueDisplay extends Vue {\n\t@Prop({ required: true }) queue!: AppointmentsQueue;\n\t@Prop({ required: true }) loaded!: boolean;\n\t@Prop({ required: true }) ws!: WebSocket;\n\t@Prop({ required: true }) admin!: boolean;\n\t@Prop({ required: true }) time!: Moment;\n}\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--14-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppointmentsQueue.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--14-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppointmentsQueue.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./AppointmentsQueue.vue?vue&type=template&id=2ffa2bb7&scoped=true&\"\nimport script from \"./AppointmentsQueue.vue?vue&type=script&lang=ts&\"\nexport * from \"./AppointmentsQueue.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./AppointmentsQueue.vue?vue&type=style&index=0&id=2ffa2bb7&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"2ffa2bb7\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"modal-card\",staticStyle:{\"width\":\"auto\"}},[_c('header',{staticClass:\"modal-card-head\"},[_c('p',{staticClass:\"modal-card-title\"},[_vm._v(\"Manage Queue\")]),_c('button',{staticClass:\"delete\",attrs:{\"type\":\"button\"},on:{\"click\":function($event){return _vm.$emit('close')}}})]),_c('section',{staticClass:\"modal-card-body\"},[_c('div',{staticClass:\"block\"},[_c('button',{staticClass:\"button is-primary\",on:{\"click\":_vm.addAnnouncement}},[_vm._v(\" Add Announcement \")])]),_c('div',{staticClass:\"block\"},[_c('p',{staticClass:\"title\"},[_vm._v(\"Queue Settings\")]),_c('div',{staticClass:\"field\"},[_c('b-checkbox',{model:{value:(_vm.configuration['virtual']),callback:function ($$v) {_vm.$set(_vm.configuration, 'virtual', $$v)},expression:\"configuration['virtual']\"}},[_vm._v(\"This queue is virtual (only changes UI)\")])],1),(_vm.type === 'ordered')?_c('div',{staticClass:\"field\"},[_c('b-checkbox',{model:{value:(_vm.configuration['scheduled']),callback:function ($$v) {_vm.$set(_vm.configuration, 'scheduled', $$v)},expression:\"configuration['scheduled']\"}},[_vm._v(\"Open and close queue according to schedule\")])],1):_vm._e(),_c('div',{staticClass:\"field\"},[_c('b-checkbox',{model:{value:(_vm.configuration['enable_location_field']),callback:function ($$v) {_vm.$set(_vm.configuration, 'enable_location_field', $$v)},expression:\"configuration['enable_location_field']\"}},[_vm._v(\"Allow students to specify location or meeting link\")])],1),_c('div',{staticClass:\"field\"},[_c('b-checkbox',{model:{value:(_vm.configuration['prevent_unregistered']),callback:function ($$v) {_vm.$set(_vm.configuration, 'prevent_unregistered', $$v)},expression:\"configuration['prevent_unregistered']\"}},[_vm._v(\"Prevent students not registered in any group from signing up at all\")])],1),_c('div',{staticClass:\"field\"},[_c('b-checkbox',{model:{value:(_vm.configuration['prevent_groups']),callback:function ($$v) {_vm.$set(_vm.configuration, 'prevent_groups', $$v)},expression:\"configuration['prevent_groups']\"}},[_vm._v(\"Prevent multiple students in a group from signing up at the same time\")])],1),(_vm.type === 'ordered')?_c('div',{staticClass:\"field\"},[_c('b-checkbox',{model:{value:(_vm.configuration['prioritize_new']),callback:function ($$v) {_vm.$set(_vm.configuration, 'prioritize_new', $$v)},expression:\"configuration['prioritize_new']\"}},[_vm._v(\"Prioritize students who signed up for the first time this day\")])],1):_vm._e(),(_vm.type === 'ordered')?_c('div',{staticClass:\"field\"},[_c('b-checkbox',{model:{value:(_vm.configuration['prevent_groups_boost']),callback:function ($$v) {_vm.$set(_vm.configuration, 'prevent_groups_boost', $$v)},expression:\"configuration['prevent_groups_boost']\"}},[_vm._v(\"Prevent multiple students in a group from receiving the boost for first question per day\")])],1):_vm._e(),(_vm.type === 'ordered')?_c('b-field',{attrs:{\"label\":\"Student signup cooldown after being helped in seconds\"}},[_c('b-numberinput',{model:{value:(_vm.configuration['cooldown']),callback:function ($$v) {_vm.$set(_vm.configuration, 'cooldown', $$v)},expression:\"configuration['cooldown']\"}})],1):_vm._e(),_c('button',{staticClass:\"button is-primary\",on:{\"click\":function($event){return _vm.$emit('configurationSaved', _vm.configuration)}}},[_vm._v(\" Save Queue Settings \")])],1),_c('div',{staticClass:\"block\"},[_c('p',{staticClass:\"title\"},[_vm._v(\"Queue Groups\")]),_c('b-field',{attrs:{\"label\":\"Groups input (JSON; array of groups, each group is array of emails of members)\"}},[_c('b-input',{attrs:{\"type\":\"textarea\",\"placeholder\":JSON.stringify(_vm.groupsPlaceholder, null, 4),\"rows\":\"14\"},model:{value:(_vm.groupsInput),callback:function ($$v) {_vm.groupsInput=$$v},expression:\"groupsInput\"}})],1),_c('div',{staticClass:\"level\"},[_c('div',{staticClass:\"level-left\"},[_c('div',{staticClass:\"buttons level-item\"},[_c('button',{staticClass:\"button is-primary\",on:{\"click\":_vm.addGroups}},[_vm._v(\" Add Groups \")]),_c('button',{staticClass:\"button is-warning\",on:{\"click\":_vm.setGroups}},[_vm._v(\" Overwrite Groups \")])])]),_c('div',{staticClass:\"level-right\"},[_c('button',{staticClass:\"button is-success level-item\",on:{\"click\":function($event){return _vm.$emit('groupsSaved', _vm.groups)}}},[_vm._v(\" Upload Groups \")])])]),_c('nav',{staticClass:\"panel\"},[_c('p',{staticClass:\"panel-heading\"},[_vm._v(\"Groups\")]),_vm._l((_vm.groups),function(group,i){return _c('div',{key:i,staticClass:\"panel-block\"},[_c('b-tooltip',{attrs:{\"label\":\"Delete Group\"}},[_c('button',{staticClass:\"button is-text\",on:{\"click\":function($event){return _vm.removeGroup(i)}}},[_c('font-awesome-icon',{attrs:{\"icon\":\"times\"}})],1)]),_vm._l((group),function(email,j){return _c('p',{key:email,staticStyle:{\"padding-right\":\"0.25em\"}},[_c('b-tooltip',{attrs:{\"label\":'Click to remove from group'}},[_c('a',{on:{\"click\":function($event){return _vm.removeMember(i, email)}}},[_vm._v(\" \"+_vm._s(email + (j !== group.length - 1 ? ',' : '')))])])],1)})],2)})],2)],1)]),_c('footer',{staticClass:\"modal-card-foot\"},[_c('button',{staticClass:\"button\",attrs:{\"type\":\"button\"},on:{\"click\":function($event){return _vm.$emit('close')}}},[_vm._v(\" Close \")])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport { Component, Prop, Vue } from 'vue-property-decorator';\nimport moment, { Moment } from 'moment-timezone';\nimport Queue from '@/types/Queue';\nimport EscapeHTML from '@/util/Sanitization';\n\nimport { library } from '@fortawesome/fontawesome-svg-core';\nimport { faTimes } from '@fortawesome/free-solid-svg-icons';\n\nlibrary.add(faTimes);\n\n@Component({})\nexport default class QueueManage extends Vue {\n\t@Prop({ required: true })\n\ttype!: 'ordered' | 'appointments';\n\n\t@Prop({ required: true })\n\tdefaultConfiguration!: { [index: string]: any };\n\n\tconfiguration: { [index: string]: any } = {};\n\n\t@Prop({ required: true })\n\tdefaultGroups!: string[][];\n\n\tgroups: string[][] = [];\n\n\tgroupsInput = '';\n\n\tconstructor() {\n\t\tsuper();\n\t\tthis.configuration = { ...this.defaultConfiguration };\n\t\tfor (let i = 0; i < this.defaultGroups.length; i++) {\n\t\t\tthis.groups.push([...this.defaultGroups[i]]);\n\t\t}\n\t}\n\n\taddAnnouncement() {\n\t\tthis.$buefy.dialog.prompt({\n\t\t\tmessage: 'Announcement content:',\n\t\t\tconfirmText: 'Add Announcement',\n\t\t\tonConfirm: (content) => this.$emit('announcementAdded', content),\n\t\t});\n\t}\n\n\tgroupsPlaceholder = [\n\t\t['member 1 of group 1', 'member 2 of group 1'],\n\t\t['member 1 of group 2', 'member 2 of group 2', 'member 3 of group 2'],\n\t\t['only member of group 3'],\n\t];\n\n\tvalidateGroupsArray(obj: any, currentGroups: string[][]): boolean {\n\t\tif (!Array.isArray(obj)) {\n\t\t\tthis.$buefy.dialog.alert({\n\t\t\t\tmessage: 'Input does not contain array of arrays of strings.',\n\t\t\t\ttype: 'is-danger',\n\t\t\t});\n\t\t\treturn false;\n\t\t}\n\t\tconst emailsSeen = new Set();\n\t\tfor (const g of currentGroups) {\n\t\t\tfor (const e of g) {\n\t\t\t\temailsSeen.add(e);\n\t\t\t}\n\t\t}\n\t\tfor (const g of obj) {\n\t\t\tif (!Array.isArray(g)) {\n\t\t\t\tthis.$buefy.dialog.alert({\n\t\t\t\t\tmessage: 'Input does not contain array of arrays of strings.',\n\t\t\t\t\ttype: 'is-danger',\n\t\t\t\t});\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tfor (const e of g) {\n\t\t\t\tif (typeof e !== 'string') {\n\t\t\t\t\tthis.$buefy.dialog.alert({\n\t\t\t\t\t\tmessage: 'Input contains a non-string email.',\n\t\t\t\t\t\ttype: 'is-danger',\n\t\t\t\t\t});\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tif (emailsSeen.has(e)) {\n\t\t\t\t\tthis.$buefy.dialog.alert({\n\t\t\t\t\t\tmessage: `Email ${EscapeHTML(e)} appears in more than one group!`,\n\t\t\t\t\t\ttype: 'is-danger',\n\t\t\t\t\t});\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\temailsSeen.add(e);\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t}\n\n\taddGroups() {\n\t\ttry {\n\t\t\tconst groups = JSON.parse(this.groupsInput);\n\t\t\tif (!this.validateGroupsArray(groups, this.groups)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tfor (const g of groups) {\n\t\t\t\tthis.groups.push([...g]);\n\t\t\t}\n\t\t} catch {\n\t\t\tthis.$buefy.dialog.alert({\n\t\t\t\tmessage: 'Input is not valid JSON.',\n\t\t\t\ttype: 'is-danger',\n\t\t\t});\n\t\t}\n\t}\n\n\tsetGroups() {\n\t\ttry {\n\t\t\tconst groups = JSON.parse(this.groupsInput);\n\t\t\tif (!this.validateGroupsArray(groups, [])) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.groups = [];\n\t\t\tfor (const g of groups) {\n\t\t\t\tthis.groups.push([...g]);\n\t\t\t}\n\t\t} catch {\n\t\t\tthis.$buefy.dialog.alert({\n\t\t\t\tmessage: 'Input is not valid JSON.',\n\t\t\t\ttype: 'is-danger',\n\t\t\t});\n\t\t}\n\t}\n\n\tremoveGroup(i: number) {\n\t\tthis.groups.splice(i, 1);\n\t}\n\n\tremoveMember(i: number, email: string) {\n\t\tthis.groups.splice(\n\t\t\ti,\n\t\t\t1,\n\t\t\tthis.groups[i].filter((e) => e !== email)\n\t\t);\n\n\t\tif (this.groups[i].length === 0) {\n\t\t\tthis.removeGroup(i);\n\t\t}\n\t}\n}\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--14-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./QueueManage.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--14-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./QueueManage.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./QueueManage.vue?vue&type=template&id=7554ba43&scoped=true&\"\nimport script from \"./QueueManage.vue?vue&type=script&lang=ts&\"\nexport * from \"./QueueManage.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./QueueManage.vue?vue&type=style&index=0&id=7554ba43&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"7554ba43\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Vue from 'vue';\nimport { Component, Prop } from 'vue-property-decorator';\nimport moment, { Moment } from 'moment-timezone';\nimport Queue from '@/types/Queue';\nimport OrderedQueue from '@/types/OrderedQueue';\nimport Announcement from '@/types/Announcement';\nimport AnnouncementDisplay from '@/components/AnnouncementDisplay.vue';\nimport OrderedQueueDisplay from '@/components/ordered/OrderedQueue.vue';\nimport AppointmentsQueueDisplay from '@/components/appointments/AppointmentsQueue.vue';\nimport QueueManage from '@/components/admin/QueueManage.vue';\nimport ErrorDialog from '@/util/ErrorDialog';\n\nimport { library } from '@fortawesome/fontawesome-svg-core';\nimport { faCog, faEthernet } from '@fortawesome/free-solid-svg-icons';\n\nlibrary.add(faCog, faEthernet);\n\n@Component({\n\tcomponents: {\n\t\tAnnouncementDisplay,\n\t\tOrderedQueueDisplay,\n\t\tAppointmentsQueueDisplay,\n\t},\n})\nexport default class QueuePage extends Vue {\n\t@Prop({ required: true }) studentView!: boolean;\n\n\tfound = false;\n\tloaded = false;\n\tws!: WebSocket;\n\tlastMessage: Moment | undefined;\n\ttime = moment();\n\ttimeUpdater!: number;\n\n\tcreated() {\n\t\tthis.$root.$data.showCourses = false;\n\n\t\tif (this.queue === undefined) {\n\t\t\tthis.$buefy.toast.open({\n\t\t\t\tduration: 5000,\n\t\t\t\tmessage: `I couldn't find that queue! Bringing you back home…`,\n\t\t\t\ttype: 'is-danger',\n\t\t\t});\n\n\t\t\tthis.$router.push('/');\n\t\t\treturn;\n\t\t}\n\n\t\tthis.found = true;\n\n\t\t// We need to manually refresh the time every so often\n\t\t// as Vue isn't reactive to moment changes. I don't\n\t\t// like doing this either.\n\t\tthis.timeUpdater = window.setInterval(() => {\n\t\t\tthis.time = moment();\n\t\t\tif (\n\t\t\t\tthis.lastMessage !== undefined &&\n\t\t\t\tthis.time.diff(this.lastMessage, 'seconds') > 10 + 2\n\t\t\t) {\n\t\t\t\tlocation.reload();\n\t\t\t}\n\t\t}, 5 * 1000);\n\n\t\tdocument.title = this.queue.course.shortName + ' Office Hours';\n\n\t\t// Block on WS open so we are connected to receive events\n\t\t// *before* getting latest data\n\t\tconst url = new URL(\n\t\t\tprocess.env.BASE_URL + `api/queues/${this.queue.id}/ws`,\n\t\t\twindow.location.href\n\t\t);\n\t\turl.protocol = url.protocol.replace('http', 'ws');\n\t\tthis.ws = new WebSocket(url.href);\n\n\t\tthis.ws.onopen = () => {\n\t\t\tthis.queue.pullQueueInfo(this.time).then(() => (this.loaded = true));\n\t\t\t/* this.queue */\n\t\t\t/* .pullQueueInfo() */\n\t\t\t/* .then(() => setTimeout(() => (this.loaded = true), 5000)); */\n\t\t};\n\n\t\tthis.ws.onclose = (c) => {\n\t\t\tif (c.code !== 1005) {\n\t\t\t\tconsole.log('disconnected:');\n\t\t\t\tconsole.log(c);\n\t\t\t\tthis.$buefy.toast.open({\n\t\t\t\t\tduration: 5000,\n\t\t\t\t\tmessage:\n\t\t\t\t\t\t'It looks like you got disconnected from the server. Refreshing…',\n\t\t\t\t\ttype: 'is-danger',\n\t\t\t\t});\n\t\t\t\tthis.$emit('disconnected');\n\t\t\t}\n\t\t};\n\n\t\tthis.ws.onmessage = (e) => {\n\t\t\tthis.lastMessage = moment();\n\n\t\t\tconst msg = JSON.parse(e.data);\n\t\t\tconst type = msg.e;\n\t\t\tconst data = msg.d;\n\n\t\t\tthis.queue.handleWSMessage(type, data, this.ws);\n\t\t};\n\t}\n\n\tdestroyed() {\n\t\tif (this.ws !== undefined) {\n\t\t\tthis.ws.close();\n\t\t}\n\n\t\tclearInterval(this.timeUpdater);\n\t}\n\n\tget queue() {\n\t\treturn this.$root.$data.queues[this.$route.params.qid] || null;\n\t}\n\n\tget admin() {\n\t\treturn (\n\t\t\t!this.studentView &&\n\t\t\tthis.$root.$data.userInfo !== undefined &&\n\t\t\tthis.$root.$data.userInfo.admin_courses !== undefined &&\n\t\t\tthis.$root.$data.userInfo.admin_courses.includes(this.queue.course.id)\n\t\t);\n\t}\n\n\topenManageDialog() {\n\t\tPromise.all([\n\t\t\tfetch(process.env.BASE_URL + `api/queues/${this.queue.id}/configuration`),\n\t\t\tfetch(process.env.BASE_URL + `api/queues/${this.queue.id}/groups`),\n\t\t])\n\t\t\t.then(([config, groups]) => Promise.all([config.json(), groups.json()]))\n\t\t\t.then(([configuration, groups]) => {\n\t\t\t\tthis.$buefy.modal.open({\n\t\t\t\t\tparent: this,\n\t\t\t\t\tcomponent: QueueManage,\n\t\t\t\t\tprops: {\n\t\t\t\t\t\tdefaultConfiguration: configuration,\n\t\t\t\t\t\tdefaultGroups: groups,\n\t\t\t\t\t\ttype: this.queue.type,\n\t\t\t\t\t},\n\t\t\t\t\tevents: {\n\t\t\t\t\t\tconfigurationSaved: (newConfiguration: {\n\t\t\t\t\t\t\t[index: string]: any;\n\t\t\t\t\t\t}) => {\n\t\t\t\t\t\t\tfetch(\n\t\t\t\t\t\t\t\tprocess.env.BASE_URL +\n\t\t\t\t\t\t\t\t\t`api/queues/${this.queue.id}/configuration`,\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tmethod: 'PUT',\n\t\t\t\t\t\t\t\t\tbody: JSON.stringify(newConfiguration),\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t).then((res) => {\n\t\t\t\t\t\t\t\tif (res.status !== 204) {\n\t\t\t\t\t\t\t\t\treturn ErrorDialog(res);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tthis.$buefy.toast.open({\n\t\t\t\t\t\t\t\t\tduration: 5000,\n\t\t\t\t\t\t\t\t\tmessage: 'Queue settings saved!',\n\t\t\t\t\t\t\t\t\ttype: 'is-success',\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t},\n\t\t\t\t\t\tgroupsSaved: (newGroups: string[][]) => {\n\t\t\t\t\t\t\tfetch(\n\t\t\t\t\t\t\t\tprocess.env.BASE_URL + `api/queues/${this.queue.id}/groups`,\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tmethod: 'PUT',\n\t\t\t\t\t\t\t\t\tbody: JSON.stringify(newGroups),\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t).then((res) => {\n\t\t\t\t\t\t\t\tif (res.status !== 204) {\n\t\t\t\t\t\t\t\t\treturn ErrorDialog(res);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tthis.$buefy.toast.open({\n\t\t\t\t\t\t\t\t\tduration: 5000,\n\t\t\t\t\t\t\t\t\tmessage: 'Queue groups saved!',\n\t\t\t\t\t\t\t\t\ttype: 'is-success',\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t},\n\t\t\t\t\t\tannouncementAdded: (content: string) => {\n\t\t\t\t\t\t\tfetch(\n\t\t\t\t\t\t\t\tprocess.env.BASE_URL +\n\t\t\t\t\t\t\t\t\t`api/queues/${this.queue.id}/announcements`,\n\t\t\t\t\t\t\t\t{ method: 'POST', body: JSON.stringify({ content: content }) }\n\t\t\t\t\t\t\t).then((res) => {\n\t\t\t\t\t\t\t\tif (res.status !== 201) {\n\t\t\t\t\t\t\t\t\treturn ErrorDialog(res);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tthis.$buefy.toast.open({\n\t\t\t\t\t\t\t\t\tduration: 5000,\n\t\t\t\t\t\t\t\t\tmessage: 'Announcement added!',\n\t\t\t\t\t\t\t\t\ttype: 'is-success',\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\thasModalCard: true,\n\t\t\t\t\ttrapFocus: true,\n\t\t\t\t});\n\t\t\t});\n\t}\n}\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--14-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Queue.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--14-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Queue.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./Queue.vue?vue&type=template&id=2c36f39c&scoped=true&\"\nimport script from \"./Queue.vue?vue&type=script&lang=ts&\"\nexport * from \"./Queue.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./Queue.vue?vue&type=style&index=0&id=2c36f39c&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"2c36f39c\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.$root.$data.loggedIn)?_c('div',[_c('p',{staticClass:\"title\"},[_vm._v(\"Courses\")]),(_vm.$root.$data.userInfo.site_admin)?_c('button',{staticClass:\"button is-primary is-fullwidth block\",on:{\"click\":_vm.addCourse}},[_vm._v(\" Add Course \")]):_vm._e(),_vm._l((_vm.courses),function(course,i){return _c('nav',{key:i,staticClass:\"panel\"},[_c('div',{staticClass:\"panel-heading\"},[_c('div',{staticClass:\"level\"},[_c('div',{staticClass:\"level-left\"},[_c('div',{staticClass:\"level-item\"},[_vm._v(\" \"+_vm._s(course.shortName)+\" \")]),_c('div',{staticClass:\"level-item\"},[_vm._v(\" \"+_vm._s(course.fullName)+\" \")])]),_c('div',{staticClass:\"level-right\"},[_c('div',{staticClass:\"level-item\"},[_c('b-tooltip',{attrs:{\"label\":\"Add Queue\"}},[_c('button',{staticClass:\"button is-text\",on:{\"click\":function($event){return _vm.addQueue(i)}}},[_c('span',{staticClass:\"icon\"},[_c('font-awesome-icon',{attrs:{\"icon\":\"plus\"}})],1)])])],1),_c('div',{staticClass:\"level-item\"},[_c('b-tooltip',{attrs:{\"label\":\"Edit Course\"}},[_c('button',{staticClass:\"button is-text\",on:{\"click\":function($event){return _vm.editCourse(i)}}},[_c('span',{staticClass:\"icon\"},[_c('font-awesome-icon',{attrs:{\"icon\":\"edit\"}})],1)])])],1),_c('div',{staticClass:\"level-item\"},[_c('b-tooltip',{attrs:{\"label\":\"Delete Course\"}},[_c('button',{staticClass:\"button is-text\",on:{\"click\":function($event){return _vm.deleteCourse(i)}}},[_c('span',{staticClass:\"icon\"},[_c('font-awesome-icon',{attrs:{\"icon\":\"trash-alt\"}})],1)])])],1)])])]),_vm._l((course.queues),function(queue){return _c('div',{key:queue.id,staticClass:\"panel-block\"},[_c('button',{staticClass:\"button is-text\",on:{\"click\":function($event){return _vm.deleteQueue(queue)}}},[_c('font-awesome-icon',{attrs:{\"icon\":\"trash-alt\"}})],1),_c('span',{staticClass:\"panel-icon\"},[(queue.type === 'ordered')?_c('font-awesome-icon',{attrs:{\"icon\":\"hand-paper\"}}):(queue.type === 'appointments')?_c('font-awesome-icon',{attrs:{\"icon\":\"calendar-alt\"}}):_vm._e()],1),_c('router-link',{attrs:{\"to\":'/queues/' + queue.id}},[_vm._v(\" \"+_vm._s(queue.name)+\" \")])],1)})],2)})],2):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"modal-card\",staticStyle:{\"width\":\"auto\"}},[_c('header',{staticClass:\"modal-card-head\"},[_c('p',{staticClass:\"modal-card-title\"},[_vm._v(\"Course Info\")]),_c('button',{staticClass:\"delete\",attrs:{\"type\":\"button\"},on:{\"click\":function($event){return _vm.$emit('close')}}})]),_c('section',{staticClass:\"modal-card-body\"},[_c('div',{staticClass:\"block\"},[_c('b-field',{attrs:{\"label\":\"Short Name\"}},[_c('b-input',{model:{value:(_vm.shortName),callback:function ($$v) {_vm.shortName=$$v},expression:\"shortName\"}})],1),_c('b-field',{attrs:{\"label\":\"Full Name\"}},[_c('b-input',{model:{value:(_vm.fullName),callback:function ($$v) {_vm.fullName=$$v},expression:\"fullName\"}})],1),_c('b-field',{attrs:{\"label\":\"Course Admins\"}},[_c('b-input',{attrs:{\"type\":\"textarea\"},model:{value:(_vm.adminsText),callback:function ($$v) {_vm.adminsText=$$v},expression:\"adminsText\"}})],1)],1)]),_c('footer',{staticClass:\"modal-card-foot\"},[_c('button',{staticClass:\"button\",attrs:{\"type\":\"button\"},on:{\"click\":function($event){return _vm.$emit('close')}}},[_vm._v(\" Close \")]),_c('button',{staticClass:\"button is-success\",attrs:{\"type\":\"button\"},on:{\"click\":_vm.saveCourse}},[_vm._v(\" Save \")])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport { Component, Prop, Vue } from 'vue-property-decorator';\nimport moment, { Moment } from 'moment-timezone';\nimport Queue from '@/types/Queue';\nimport EscapeHTML from '@/util/Sanitization';\n\nimport { library } from '@fortawesome/fontawesome-svg-core';\nimport { faTimes } from '@fortawesome/free-solid-svg-icons';\n\nlibrary.add(faTimes);\n\n@Component({})\nexport default class QueueManage extends Vue {\n\t@Prop({ required: true }) defaultShortName!: string;\n\t@Prop({ required: true }) defaultFullName!: string;\n\t@Prop({ required: true }) defaultAdmins!: string[];\n\n\tshortName = '';\n\tfullName = '';\n\tadminsText = '';\n\n\tcreated() {\n\t\tthis.shortName = this.defaultShortName;\n\t\tthis.fullName = this.defaultFullName;\n\t\tthis.adminsText = JSON.stringify(this.defaultAdmins, null, 4);\n\t}\n\n\tsaveCourse() {\n\t\ttry {\n\t\t\tconst admins: string[] = JSON.parse(this.adminsText);\n\t\t\tif (!Array.isArray(admins) || admins.some((a) => typeof a !== 'string')) {\n\t\t\t\tthis.$buefy.dialog.alert({\n\t\t\t\t\tmessage: 'Admins input is not array of strings',\n\t\t\t\t\ttype: 'is-danger',\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst allAdmins = new Set();\n\t\t\tfor (const a of admins) {\n\t\t\t\tif (allAdmins.has(a)) {\n\t\t\t\t\tthis.$buefy.dialog.alert({\n\t\t\t\t\t\tmessage: `User ${EscapeHTML(\n\t\t\t\t\t\t\ta\n\t\t\t\t\t\t)} appears in the admins array more than once.`,\n\t\t\t\t\t\ttype: 'is-danger',\n\t\t\t\t\t});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tallAdmins.add(a);\n\t\t\t}\n\n\t\t\tthis.$emit('saved', this.shortName, this.fullName, admins);\n\t\t} catch {\n\t\t\tthis.$buefy.dialog.alert({\n\t\t\t\tmessage: 'Admins input is not valid JSON.',\n\t\t\t\ttype: 'is-danger',\n\t\t\t});\n\t\t}\n\t}\n}\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--14-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CourseEdit.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--14-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CourseEdit.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./CourseEdit.vue?vue&type=template&id=3b818093&\"\nimport script from \"./CourseEdit.vue?vue&type=script&lang=ts&\"\nexport * from \"./CourseEdit.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"modal-card\",staticStyle:{\"width\":\"auto\"}},[_c('header',{staticClass:\"modal-card-head\"},[_c('p',{staticClass:\"modal-card-title\"},[_vm._v(\"Add Queue\")]),_c('button',{staticClass:\"delete\",attrs:{\"type\":\"button\"},on:{\"click\":function($event){return _vm.$emit('close')}}})]),_c('section',{staticClass:\"modal-card-body\"},[_c('b-field',{attrs:{\"label\":\"Name\"}},[_c('b-input',{model:{value:(_vm.name),callback:function ($$v) {_vm.name=$$v},expression:\"name\"}})],1),_c('b-field',{attrs:{\"label\":\"Location\"}},[_c('b-input',{model:{value:(_vm.location),callback:function ($$v) {_vm.location=$$v},expression:\"location\"}})],1),_c('b-field',{attrs:{\"label\":\"Type (cannot be changed later!)\"}},[_c('b-select',{attrs:{\"required\":\"\"},model:{value:(_vm.type),callback:function ($$v) {_vm.type=$$v},expression:\"type\"}},[_c('option',[_vm._v(\"ordered\")]),_c('option',[_vm._v(\"appointments\")])])],1)],1),_c('footer',{staticClass:\"modal-card-foot\"},[_c('button',{staticClass:\"button\",attrs:{\"type\":\"button\"},on:{\"click\":function($event){return _vm.$emit('close')}}},[_vm._v(\" Close \")]),_c('button',{staticClass:\"button is-success\",attrs:{\"type\":\"button\"},on:{\"click\":_vm.saveQueue}},[_vm._v(\" Save \")])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport { Component, Vue } from 'vue-property-decorator';\n\n@Component({})\nexport default class QueueAdd extends Vue {\n\tname = '';\n\tlocation = '';\n\ttype = '';\n\n\tsaveQueue() {\n\t\tif (this.type === '') {\n\t\t\tthis.$buefy.dialog.alert({\n\t\t\t\tmessage: 'Please select a queue type.',\n\t\t\t\ttype: 'is-danger',\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tthis.$emit('saved', this.name, this.location, this.type);\n\t}\n}\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--14-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./QueueAdd.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--14-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./QueueAdd.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./QueueAdd.vue?vue&type=template&id=2095a4c6&\"\nimport script from \"./QueueAdd.vue?vue&type=script&lang=ts&\"\nexport * from \"./QueueAdd.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport { Vue, Component } from 'vue-property-decorator';\nimport { library } from '@fortawesome/fontawesome-svg-core';\nimport {\n\tfaEdit,\n\tfaPlus,\n\tfaHandPaper,\n\tfaCalendarAlt,\n\tfaTrashAlt,\n} from '@fortawesome/free-solid-svg-icons';\nimport Course from '@/types/Course';\nimport Queue from '@/types/Queue';\nimport CourseEdit from '@/components/admin/CourseEdit.vue';\nimport QueueAdd from '@/components/admin/QueueAdd.vue';\nimport ErrorDialog from '@/util/ErrorDialog';\nimport EscapeHTML from '@/util/Sanitization';\n\nlibrary.add(faEdit, faPlus, faHandPaper, faCalendarAlt, faTrashAlt);\n\n@Component\nexport default class AdminPage extends Vue {\n\tget courses(): Course[] {\n\t\treturn Object.values(\n\t\t\tthis.$root.$data.courses as Course[]\n\t\t).filter((c: Course) =>\n\t\t\tthis.$root.$data.userInfo.admin_courses.includes(c.id)\n\t\t);\n\t}\n\n\taddCourse() {\n\t\tthis.$buefy.modal.open({\n\t\t\tparent: this,\n\t\t\tcomponent: CourseEdit,\n\t\t\tprops: { defaultShortName: '', defaultFullName: '', defaultAdmins: [] },\n\t\t\tevents: {\n\t\t\t\tsaved: (short: string, full: string, admins: string[]) => {\n\t\t\t\t\tfetch(process.env.BASE_URL + `api/courses`, {\n\t\t\t\t\t\tmethod: 'POST',\n\t\t\t\t\t\tbody: JSON.stringify({ short_name: short, full_name: full }),\n\t\t\t\t\t}).then((res) => {\n\t\t\t\t\t\tif (res.status !== 201) {\n\t\t\t\t\t\t\treturn ErrorDialog(res);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (admins.length > 0) {\n\t\t\t\t\t\t\tres.json().then((body: { [index: string]: unknown }) => {\n\t\t\t\t\t\t\t\tfetch(\n\t\t\t\t\t\t\t\t\tprocess.env.BASE_URL + `api/courses/${body['id']}/admins`,\n\t\t\t\t\t\t\t\t\t{ method: 'PUT', body: JSON.stringify(admins) }\n\t\t\t\t\t\t\t\t).then((res) => {\n\t\t\t\t\t\t\t\t\tif (res.status !== 204) {\n\t\t\t\t\t\t\t\t\t\treturn ErrorDialog(res);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tlocation.reload();\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tlocation.reload();\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t},\n\t\t\thasModalCard: true,\n\t\t\ttrapFocus: true,\n\t\t});\n\t}\n\n\teditCourse(index: number) {\n\t\tconst course = this.courses[index];\n\t\tfetch(process.env.BASE_URL + `api/courses/${course.id}/admins`)\n\t\t\t.then((res) => res.json())\n\t\t\t.then((admins) => {\n\t\t\t\tthis.$buefy.modal.open({\n\t\t\t\t\tparent: this,\n\t\t\t\t\tcomponent: CourseEdit,\n\t\t\t\t\tprops: {\n\t\t\t\t\t\tdefaultShortName: this.courses[index].shortName,\n\t\t\t\t\t\tdefaultFullName: this.courses[index].fullName,\n\t\t\t\t\t\tdefaultAdmins: admins,\n\t\t\t\t\t},\n\t\t\t\t\tevents: {\n\t\t\t\t\t\tsaved: (short: string, full: string, admins: string[]) => {\n\t\t\t\t\t\t\tPromise.all([\n\t\t\t\t\t\t\t\tfetch(process.env.BASE_URL + `api/courses/${course.id}`, {\n\t\t\t\t\t\t\t\t\tmethod: 'PUT',\n\t\t\t\t\t\t\t\t\tbody: JSON.stringify({ short_name: short, full_name: full }),\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\tfetch(\n\t\t\t\t\t\t\t\t\tprocess.env.BASE_URL + `api/courses/${course.id}/admins`,\n\t\t\t\t\t\t\t\t\t{ method: 'PUT', body: JSON.stringify(admins) }\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t]).then(([courseUpdate, adminsUpdate]) => {\n\t\t\t\t\t\t\t\tif (courseUpdate.status !== 204) {\n\t\t\t\t\t\t\t\t\treturn ErrorDialog(courseUpdate);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (adminsUpdate.status !== 204) {\n\t\t\t\t\t\t\t\t\treturn ErrorDialog(adminsUpdate);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tlocation.reload();\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\thasModalCard: true,\n\t\t\t\t\ttrapFocus: true,\n\t\t\t\t});\n\t\t\t});\n\t}\n\n\tdeleteCourse(index: number) {\n\t\tconst course = this.courses[index];\n\t\tthis.$buefy.dialog.confirm({\n\t\t\ttype: 'is-danger',\n\t\t\ttitle: `Delete Course`,\n\t\t\tmessage: `Are you sure you want to delete ${EscapeHTML(\n\t\t\t\tcourse.shortName\n\t\t\t)}? This will also delete all associated queues. There is no undo.`,\n\t\t\tonConfirm: () => {\n\t\t\t\tfetch(process.env.BASE_URL + `api/courses/${course.id}`, {\n\t\t\t\t\tmethod: 'DELETE',\n\t\t\t\t}).then((res) => {\n\t\t\t\t\tif (res.status !== 204) {\n\t\t\t\t\t\treturn ErrorDialog(res);\n\t\t\t\t\t}\n\t\t\t\t\tlocation.reload();\n\t\t\t\t});\n\t\t\t},\n\t\t});\n\t}\n\n\taddQueue(index: number) {\n\t\tconst course = this.courses[index];\n\t\tthis.$buefy.modal.open({\n\t\t\tparent: this,\n\t\t\tcomponent: QueueAdd,\n\t\t\tevents: {\n\t\t\t\tsaved: (name: string, loc: string, type: string) => {\n\t\t\t\t\tfetch(process.env.BASE_URL + `api/courses/${course.id}/queues`, {\n\t\t\t\t\t\tmethod: 'POST',\n\t\t\t\t\t\tbody: JSON.stringify({\n\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\tlocation: loc,\n\t\t\t\t\t\t\ttype,\n\t\t\t\t\t\t}),\n\t\t\t\t\t}).then((res) => {\n\t\t\t\t\t\tif (res.status !== 201) {\n\t\t\t\t\t\t\treturn ErrorDialog(res);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlocation.reload();\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t},\n\t\t\thasModalCard: true,\n\t\t\ttrapFocus: true,\n\t\t});\n\t}\n\n\tdeleteQueue(queue: Queue) {\n\t\tthis.$buefy.dialog.confirm({\n\t\t\ttitle: 'Delete Queue',\n\t\t\tmessage: `Are you sure you want to delete ${EscapeHTML(\n\t\t\t\tqueue.name\n\t\t\t)}? There is no undo.`,\n\t\t\ttype: 'is-danger',\n\t\t\thasIcon: true,\n\t\t\tonConfirm: () => {\n\t\t\t\tfetch(process.env.BASE_URL + `api/queues/${queue.id}`, {\n\t\t\t\t\tmethod: 'DELETE',\n\t\t\t\t}).then((res) => {\n\t\t\t\t\tif (res.status !== 204) {\n\t\t\t\t\t\treturn ErrorDialog(res);\n\t\t\t\t\t}\n\t\t\t\t\tlocation.reload();\n\t\t\t\t});\n\t\t\t},\n\t\t});\n\t}\n}\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--14-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Admin.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--14-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Admin.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./Admin.vue?vue&type=template&id=99d8873c&\"\nimport script from \"./Admin.vue?vue&type=script&lang=ts&\"\nexport * from \"./Admin.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import Vue from 'vue';\nimport VueRouter, { RouteConfig } from 'vue-router';\nimport Home from '../views/Home.vue';\nimport Queue from '../views/Queue.vue';\nimport AdminPage from '@/views/Admin.vue';\n\nVue.use(VueRouter);\n\nconst routes: Array = [\n\t{\n\t\tpath: '/',\n\t\tname: 'Home',\n\t\tcomponent: Home,\n\t\tmeta: {\n\t\t\ttitle: 'EECS Office Hours',\n\t\t},\n\t},\n\t{\n\t\tpath: '/queues/:qid',\n\t\tname: 'Queue',\n\t\tcomponent: Queue,\n\t},\n\t{\n\t\tpath: '/admin',\n\t\tname: 'Admin',\n\t\tcomponent: AdminPage,\n\t\tmeta: {\n\t\t\ttitle: 'Course Admin Controls',\n\t\t},\n\t},\n];\n\nconst router = new VueRouter({\n\tmode: 'history',\n\tbase: process.env.BASE_URL,\n\troutes,\n});\n\nrouter.beforeEach((to, _, next) => {\n\tif (to.meta !== undefined && to.meta.title !== undefined) {\n\t\tdocument.title = to.meta.title;\n\t}\n\n\tnext();\n});\n\nexport default router;\n","import Vue from 'vue';\nimport App from './App.vue';\nimport router from './router';\nimport Buefy from 'buefy';\nimport '@creativebulma/bulma-tooltip/dist/bulma-tooltip.min.css';\nimport { FontAwesomeIcon } from '@fortawesome/vue-fontawesome';\nimport Course from './types/Course';\nimport Queue from './types/Queue';\nimport moment from 'moment-timezone';\n\nVue.component('font-awesome-icon', FontAwesomeIcon);\n\nimport { library } from '@fortawesome/fontawesome-svg-core';\nimport {\n\tfaCheck,\n\tfaCheckCircle,\n\tfaInfoCircle,\n\tfaExclamationTriangle,\n\tfaExclamationCircle,\n\tfaArrowUp,\n\tfaAngleRight,\n\tfaAngleLeft,\n\tfaAngleDown,\n\tfaEye,\n\tfaEyeSlash,\n\tfaCaretDown,\n\tfaCaretUp,\n\tfaUpload,\n\tfaEnvelopeOpenText,\n\tfaBullhorn,\n} from '@fortawesome/free-solid-svg-icons';\n\nlibrary.add(\n\tfaCheck,\n\tfaCheckCircle,\n\tfaInfoCircle,\n\tfaExclamationTriangle,\n\tfaExclamationCircle,\n\tfaArrowUp,\n\tfaAngleRight,\n\tfaAngleLeft,\n\tfaAngleDown,\n\tfaEye,\n\tfaEyeSlash,\n\tfaCaretDown,\n\tfaCaretUp,\n\tfaUpload,\n\tfaEnvelopeOpenText,\n\tfaBullhorn\n);\n\nVue.use(Buefy, {\n\tdefaultIconComponent: 'font-awesome-icon',\n\tdefaultIconPack: 'fas',\n});\n\nVue.config.productionTip = false;\n\nmoment.relativeTimeThreshold('m', 60);\nmoment.relativeTimeThreshold('d', 24);\n\nexport default new Vue({\n\trouter,\n\trender: (h) => h(App),\n\tdata: {\n\t\tcourses: {} as { [index: string]: Course },\n\t\tshowCourses: false,\n\t\tqueues: {} as { [index: string]: Queue },\n\t\tuserInfoLoaded: false,\n\t\tloggedIn: false,\n\t\tuserInfo: {},\n\t\tstudentView: false,\n\t},\n}).$mount('#app');\n","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppointmentsAdminSelector.vue?vue&type=style&index=0&id=1b0a6df4&scoped=true&lang=css&\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppointmentsAdminSelector.vue?vue&type=style&index=0&id=1b0a6df4&scoped=true&lang=css&\""],"sourceRoot":""}