{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/assets/osp.png","webpack:///./src/views/SystemSettings.vue?4c75","webpack:///./src/views/SignedOut.vue?b158","webpack:///./src/components/Navigation.vue?61e4","webpack:///./src/App.vue?7fbe","webpack:///./src/components/AppointmentSlotSelection.vue?7c1f","webpack:///./src/Layout.vue","webpack:///./src/Layout.vue?24e6","webpack:///./src/store/store.ts","webpack:///./src/common/sessionService.ts","webpack:///./src/common/httpClient.ts","webpack:///./src/views/Home.vue","webpack:///./src/views/Home.vue?d5e7","webpack:///./src/views/Home.vue?ab8c","webpack:///./src/views/Login.vue","webpack:///./src/views/Login.vue?e144","webpack:///./src/views/Login.vue?e63b","webpack:///./src/views/Calendar.vue","webpack:///./src/common/appointmentService.ts","webpack:///./src/components/AppointmentScheduler.vue","webpack:///./src/common/appointmentTypeService.ts","webpack:///./src/common/timeService.ts","webpack:///./src/components/AppointmentSlotSelection.vue","webpack:///./src/components/AppointmentSlotSelection.vue?990e","webpack:///./src/components/AppointmentSlotSelection.vue?5114","webpack:///./src/common/sponsorService.ts","webpack:///./src/components/IntakeForm.vue","webpack:///./src/components/DynamicField.vue","webpack:///./src/components/DynamicField.vue?2c0c","webpack:///./src/components/DynamicField.vue?d72f","webpack:///./src/components/IntakeForm.vue?b59e","webpack:///./src/components/IntakeForm.vue?6ffb","webpack:///./src/components/AppointmentScheduler.vue?f731","webpack:///./src/components/AppointmentScheduler.vue?42f6","webpack:///./src/common/userService.ts","webpack:///./src/components/AppointmentModal.vue","webpack:///./src/components/AppointmentModal.vue?04f5","webpack:///./src/components/AppointmentModal.vue?a53b","webpack:///./src/views/Calendar.vue?79e7","webpack:///./src/views/Calendar.vue?bfc3","webpack:///./src/views/Schedule.vue","webpack:///./src/views/Schedule.vue?6a78","webpack:///./src/views/Schedule.vue?de3d","webpack:///./src/App.vue","webpack:///./src/components/Navigation.vue","webpack:///./src/components/Navigation.vue?e903","webpack:///./src/App.vue?3acc","webpack:///./src/App.vue?dfb6","webpack:///./src/views/AppointmentTypes.vue","webpack:///./src/components/AppointmentTypeForm.vue","webpack:///./src/components/AppointmentTypeForm.vue?ce76","webpack:///./src/components/AppointmentTypeForm.vue?301f","webpack:///./src/views/AppointmentTypes.vue?d93a","webpack:///./src/views/AppointmentTypes.vue?89c9","webpack:///./src/views/AppointmentType.vue","webpack:///./src/components/IntakeFormEditor.vue","webpack:///./src/components/IntakeFormEditor.vue?64e0","webpack:///./src/components/IntakeFormEditor.vue?6e79","webpack:///./src/common/quill.ts","webpack:///./src/views/AppointmentType.vue?2907","webpack:///./src/views/AppointmentType.vue?c30b","webpack:///./src/views/Availability.vue","webpack:///./src/components/AvailabilityForm.vue","webpack:///./src/components/AvailabilityForm.vue?27fc","webpack:///./src/components/AvailabilityForm.vue?95c7","webpack:///./src/views/Availability.vue?3778","webpack:///./src/views/Availability.vue?5c8c","webpack:///./src/views/Users.vue","webpack:///./src/views/Users.vue?050e","webpack:///./src/views/Users.vue?b2ef","webpack:///./src/views/User.vue","webpack:///./src/views/User.vue?2474","webpack:///./src/views/User.vue?a29a","webpack:///./src/views/Profile.vue","webpack:///./src/views/Profile.vue?765e","webpack:///./src/views/Profile.vue?5937","webpack:///./src/views/SystemSettings.vue","webpack:///./src/views/SystemSettings.vue?250a","webpack:///./src/views/SystemSettings.vue?9274","webpack:///./src/views/SignedOut.vue","webpack:///./src/views/SignedOut.vue?066d","webpack:///./src/views/Sponsors.vue","webpack:///./src/views/Sponsors.vue?a94f","webpack:///./src/views/Sponsors.vue?2c9d","webpack:///./src/views/ManageAppointment.vue","webpack:///./src/views/ManageAppointment.vue?c64a","webpack:///./src/views/ManageAppointment.vue?30c1","webpack:///./src/router/loginGuard.ts","webpack:///./src/common/authService.ts","webpack:///./src/router/authGuard.ts","webpack:///./src/models/permissions.ts","webpack:///./src/router/homeGuard.ts","webpack:///./src/views/Reporting.vue","webpack:///./src/common/reportingService.ts","webpack:///./src/views/Reporting.vue?6019","webpack:///./src/views/Reporting.vue?a6cf","webpack:///./src/router/router.ts","webpack:///./src/directives/auth-directives.ts","webpack:///./src/main.ts","webpack:///./src/components/AppointmentScheduler.vue?926d"],"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","render","state","userId","firstName","lastName","sessionExpiration","accessExpiration","isAdmin","permissions","outlookUserId","getters","fullName","userIdPlus","permissionValue","map","pv","reduce","outlookEnabled","isReadOnly","findIndex","code","isReviewer","mutations","initializeState","newState","assign","actions","initializeSession","commit","exp","Number","Promise","resolve","parseInt","Date","getSeconds","then","res","console","log","id","getRefreshTokenExpiration","getAccessTokenExpiration","isOspStaff","store","dispatch","catch","err","response","status","delete","location","href","redirectUrl","httpClient","a","baseURL","interceptors","request","use","config","url","method","accessExp","timeToExpiration","now","reject","error","class","forecaste","getStuff","methods","this","$axios","src","width","beforeRouteEnter","to","from","next","mounted","authCode","$route","query","post","setTimeout","path","sessionStorage","getItem","removeItem","$router","style","shouldShowFilters","shouldShowScheduleForm","viewMode","prev","calendarHeader","showReviewerFilters","reviewers","reviewer","reviewerFilters","showAppointmentTypeFilters","appointmentTypes","appointmentType","color","appointmentTypeFilters","showOutlookEvents","shouldShowTasks","visible","handleScheduled","internalScheduling","appointment","selectedAppoiontment","shouldShowAppointment","removeAppointment","$event","handleReassign","handleReschedule","handleUpdated","put","start","end","params","toISOString","onlyFuture","appointmentId","reviewerId","date","form","scheduledByOsp","offeringId","dateTime","type","proposalNumberType","proposalNumber","step","scheduleForm","sponsorId","loadingSponsors","sponsorsSearchKey","placeholder","filteredSponsors","sponsor","selectSponsor","selectedSponsor","sponsorAppointmentType","selectAppointmentType","formatMinutes","duration","description","taskAppointmentTypes","showSponsors","selectedAppointmentType","back","cancel","reviewDeadline","formatTime","hasReviewDeadlinePassed","isReviewDeadlineSameDay","isTask","startTime","appointmentTypeId","forReschedule","currentReviewerId","maxDate","selectSlot","isSixMonthsOut","availableReviewerExists","selectReviewer","sortedAvailableReviewers","workloadInHours","workload","hasExternalConflicts","availableForSlot","backToTime","intakeForm","currentForm","formResponse","goToConfirm","disabled","isValid","endTime","defaultResponses","additionalContacts","contact","phone","email","intakeFormResponses","label","scheduling","schedule","disable","isActive","loading","timeNotAvailable","canCloseSelf","errorScheduling","time","hour","allInclusive","includeUnavailable","String","message","appointmenTypeId","offering","minutes","hours","Math","floor","leftoverMinutes","hourString","minuteString","timeString","minute","regex","RegExp","match","test","split","substr","mer","toLowerCase","num","timeNum","minString","canGoBack","previousWeek","displayStartDay","displayEndDay","canGoForward","nextWeek","loadingSlots","weekDays","day","slotsForDay","slot","anyReviewerAvailable","isSelectedSlot","rescheduleForOtherReviewer","slotsForWeek","availabilitySlots","props","required","default","Boolean","dateRange","startOfWeek","endOfWeek","emits","computed","isAfter","isBefore","startOfDay","addMinutes","addDays","filter","x","getAvailability","watch","handler","immediate","formatString","reviewerIsRescheduling","forEach","addWeeks","currentTime","isSameHour","$emit","getDay","sort","b","__scopeId","includeAppointmentType","inputDefinition","defaultResponse","updateDefaultValid","valid","removeContact","addContact","isEditingCayuse","inputs","inputDef","intakeFormResponse","updateValid","showError","passThrough","dirty","setValid","options","option","errorMessage","modelValue","localValue","set","val","validity","validate","validateRequired","validateEmail","validatePhone","validateCayuse","currentResponse","propType","resetIntakeFormResponse","deep","formatResponse","responses","values","previous","current","join","contacts","ind","ac","defaultFormResponse","defaultFields","gf","ptCode","input","components","DynamicField","availableReviewers","appointmentTypeOfferingId","sponsorName","sponsors","getAll","toTop","removed","getPublic","find","at","some","u","isSameDay","addMonths","showDeadlineCalendar","showReviewDateCalendar","minutesToHoursFormatted","el","document","querySelector","scrollTop","projectUserId","globalResponses","gr","scheduleAppointment","bad","appointmentTypeOffering","reviewerAvailability","picker","element","inlineMode","singleMode","onSelect","handleDeadlineSelection","show","handleReviewDateSelection","disableWeekends","minDate","endOfDay","reviewerAvailabilityForDate","IntakeForm","AppointmentSlotSelection","blockedTime","body","title","netid","username","availability","args","close","isBeingRescheduled","isBeingReassigned","isEditingAppointmentForm","piFirstName","piLastName","piEmail","piPhone","proposalNumberDisplay","scheduledOn","beginEditingIntakeForm","beginReassign","formattedIntakeFormResponse","newIntakeFormResponse","saveIntakeForm","reassignUser","resetReassign","reassign","rescheduleForm","endOfDayDeadline","handleSlotSelection","selectReschedulerReviewer","additionalFields","resetReschedule","isRescheduleFormValid","reschedule","selectLeastBusyReviewer","intakeFormDifferences","app","pIFirstName","pILastName","pIEmail","pIPhone","formatProposalNumber","updateIntakeForm","getIntakeForm","allFields","newFields","rescheduleAppointment","constructNewIntakeForm","diff","appointentType","confirm","cancelAppointment","calendarInitialized","events","calendar","currentDate","showOutlookEventFilters","getReviewers","getAppointmentTypes","initializeCalendar","handleMiniCalSelection","rerender","changeView","event","getEventById","remove","getOspStaff","gotoDate","st","currentData","viewApi","activeStart","et","activeEnd","fetchEvents","batchRendering","removeAllEvents","e","filterEvents","addEvent","setExtendedProp","extendedProps","ospEvent","user","constructEvent","arg","createElement","classList","add","background","borderColor","nameEl","innerHTML","appendChild","cayuse","reviewerEl","domNodes","busy","titleEl","calendarElement","allDayText","height","weekends","allDaySlot","editable","headerToolbar","plugins","slotDuration","slotMinTime","slotMaxTime","slotEventOverlap","eventClick","handleEventClick","datesSet","getDate","eventContent","dates","fcEvent","toFcEvent","eventInfo","allDay","externalAppointment","viewRendered","what","AppointmentScheduler","AppointmentInfoModal","shouldShowScheduler","appointments","formatProposalType","target","shouldShowRescheduler","selectedAppointment","getAppointments","sortedAppointments","getForProjectUser","proposalType","appointemntId","appt","toLocaleString","alert","Component","showExpirationWarning","timeToSessionExpiration","logOut","refreshSession","active-class","signOut","gracePeriod","warningTimer","finalTimer","startSessionTimer","beginFinalTimer","setInterval","round","clearTimers","clearInterval","clearTimeout","timetoExpiration","navHeader","showAppointmentForm","showRestoreAppointmentForm","appointmentTypesActive","public","removeType","shouldShowAppointmentForm","handleAppointmentTypeCreated","shouldRestoreType","items","appointmentTypesRemoved","displayKey","valueKey","selected","restoreAppointmentType","editing","editForm","editAppointmentType","createAppointmentType","isEditing","resetForm","colorPicker","ColorPicker","on","setColor","update","hexString","appointmentForm","restoreType","AppointmentTypeForm","formatDuration","shouldShowEditForm","handleAppointmentTypeUpdate","offerings","formatOffering","removeOffering","shouldShowTimeForm","field","shouldShowIntakeFormEditor","emailConfirmationMessage","shouldShowConfirmationMessageForm","saveConfirmationMessage","editedtime","addOffering","reset","showClose","editingField","addingNewField","workingDescription","previewing","sortedWorkingForm","fieldToEdit","onDragOver","endDrag","startDrag","field-id","allowDrag","typeIcon","beginEditingField","usersToEmail","getUserFromId","removeUserFromEmail","staff","tempUser","addEmailToCheckboxField","editField","fieldTypes","newFieldForm","addField","beginAddingField","previewForm","showPreview","save","dragging","emailSupervisorIfChecked","workingForm","newForm","order","list","newField","random","toString","substring","fieldEl","parentElement","setAttribute","modalContent","$el","scrollHeight","currentField","reorder","preventDefault","container","draggableElements","querySelectorAll","afterElement","closest","child","box","getBoundingClientRect","offset","clientY","top","NEGATIVE_INFINITY","draggable","insertBefore","index","f","listings","place","listingEl","fieldId","getAttribute","formCopy","w","tagName","register","confirmationMessage","quill","route","toolbar","theme","root","isValidTime","isValidTimeString","convertTimeFromString","createOffering","format","convertTimeToString","convertDurationToString","updateConfirmationMessage","IntakeFormEditor","users","updateUser","userAvailability","beginEditingAvailability","av","parseTime","days","includes","editedAvailability","saveAvailability","updateAvailability","newUser","AvailabilityForm","shouldShowNewUserForm","permissionString","removeUser","resetNewUserForm","newUserUsername","userResult","searchingForUser","addOspStaff","debouncedSearch","search","createOspStaff","removeOspStaff","searchUser","permission","showPermissionForm","shouldShowPermissionForm","visilbilityPermission","editVisilbilityPermission","editedPermissions","syncing","updatePermissions","sortedAvailability","blockedTimes","formatTimeString","removeBlockedTime","showBlockedTimeForm","shouldShowBlockTimeform","newBlockedTime","createBlockedTime","getUser","ua","permissionId","dateString","handleDateSelectionn","bt","numberOfMonths","numberOfColumns","newAvailability","permissionList","up","updateUserPermissions","outlookIntegration","button","text","isOutlookSyncing","outlookSyncing","windowRef","getWindowRef","checkFn","URL","indexOf","token","parseUrl","isSuccess","disableOutlookIntegration","$store","finally","enableOutlookIntegration","open","replace","regexS","results","exec","filterKey","showCreateForm","showUpdateForm","removeSponsor","shouldShowSponsorForm","sponsorForm","updateSponsor","createSponsor","getSponsors","getAllDetailed","cancelled","passed","whitelist","Login","NotFound","setItem","redirectToLoginProvider","userValue","requiredValue","pow","hasPermission","authorize","meta","requiredPermission","canViewCalendar","canManageCalendar","canManageSystem","download","dateRangeType","reportSpec","reviewerIds","appointmentTypeIds","sponsorSearchKey","sponsorSearchPos","bottom","left","addSponsor","selectedSponsors","includeCancelled","includeRescheduled","resultsView","dynamicColumns","dc","ProposalNumber","Start","End","AppointmentType","ProposalNumberType","PIFirstName","PILastName","PIEmail","PIPhone","AdditionalContacts","Sponsor","ReviewerFirstName","ReviewerLastName","ReviewDeadline","Cancelled","Rescheduled","ScheduledOn","selectedCounts","count","spec","sponsorIds","countByReviewers","countByAppointmentType","countBySponsor","reportUrl","startPicker","endPicker","showSponsorSelection","reviewerCounts","sponsorCounts","appointmentTypeCounts","setDate","searchbar","innerHeight","generateReport","setupTimePickers","downloadReport","routes","component","App","beforeEnter","loginGuard","children","Home","homeGuard","Calendar","authGuard","AppointmentTypes","Availability","Users","User","SystemSettings","Profile","Reporting","Sponsors","SignedOut","Schedule","ManageAppointment","router","history","hasPermissionDirective","bindings","removeProperty","display","isAdminDirective","Layout","globalProperties","$permissions","directive","mount"],"mappings":"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","file":"js/app.96b4826f.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\"app\": 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","module.exports = __webpack_public_path__ + \"img/osp.5741133a.png\";","export { default } 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-v16/dist/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-v16/dist/index.js??ref--0-1!./SystemSettings.vue?vue&type=style&index=0&id=43f7fd4d&scoped=true&lang=scss\"; 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-v16/dist/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-v16/dist/index.js??ref--0-1!./SystemSettings.vue?vue&type=style&index=0&id=43f7fd4d&scoped=true&lang=scss\"","export { default } 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-v16/dist/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-v16/dist/index.js??ref--0-1!./SignedOut.vue?vue&type=style&index=0&id=01599924&lang=scss&scoped=true\"; 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-v16/dist/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-v16/dist/index.js??ref--0-1!./SignedOut.vue?vue&type=style&index=0&id=01599924&lang=scss&scoped=true\"","export { default } 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-v16/dist/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-v16/dist/index.js??ref--0-1!./Navigation.vue?vue&type=style&index=0&id=f2440baa&scoped=true&lang=css\"; 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-v16/dist/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-v16/dist/index.js??ref--0-1!./Navigation.vue?vue&type=style&index=0&id=f2440baa&scoped=true&lang=css\"","export { default } 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-v16/dist/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-v16/dist/index.js??ref--0-1!./App.vue?vue&type=style&index=0&lang=scss\"; 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-v16/dist/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-v16/dist/index.js??ref--0-1!./App.vue?vue&type=style&index=0&lang=scss\"","export { default } 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-v16/dist/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-v16/dist/index.js??ref--0-1!./AppointmentSlotSelection.vue?vue&type=style&index=0&id=131842d6&scoped=true&lang=css\"; 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-v16/dist/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-v16/dist/index.js??ref--0-1!./AppointmentSlotSelection.vue?vue&type=style&index=0&id=131842d6&scoped=true&lang=css\"","\n\n\n\n\n\n","import { render } from \"./Layout.vue?vue&type=template&id=954d8b4a&bindings={}\"\nimport script from \"./Layout.vue?vue&type=script&lang=js\"\nexport * from \"./Layout.vue?vue&type=script&lang=js\"\nscript.render = render\n\nexport default script","// Institute of Design and Innovation (email idi@unm.edu). //\n\nimport Permission from '@/models/permission'\nimport { createStore } from 'vuex'\nimport State from './state'\n\n/**\n * Create storage for state values\n */\nexport default createStore({\n state: {\n userId: null as unknown as number,\n firstName: '',\n lastName: '',\n sessionExpiration: null as unknown as number,\n accessExpiration: null as unknown as number,\n isAdmin: false,\n permissions: [] as Array,\n outlookUserId: ''\n },\n\n getters: {\n userId: state => state.userId,\n firstName: state => state.firstName,\n lastName: state => state.lastName,\n fullName: state => `${state.firstName} ${state.lastName}`,\n userIdPlus: state => state.userId + ' plus',\n sessionExpiration: state => state.sessionExpiration,\n accessExpiration: state => state.accessExpiration,\n permissionValue: state => state.permissions.map(pv => pv.permissionValue).reduce((pv, c) => pv | c),\n outlookUserId: state => state.outlookUserId,\n outlookEnabled: state => state.outlookUserId !== '' && state.outlookUserId != null,\n isReadOnly: state => state.permissions.findIndex(p => p.code === 'VIEW') !== -1,\n isReviewer: state => state.permissions.findIndex(p => p.code === 'REVU') !== -1,\n isAdmin: state => state.permissions.findIndex(p => p.code === 'ADMN') !== -1\n },\n\n mutations: {\n /** Mutation to initialize a user state on login */\n initializeState (state, newState: State) {\n Object.assign(state, newState)\n }\n },\n\n actions: {\n /** initialize session */\n initializeSession ({ commit }, state: State) {\n commit('initializeState', state)\n }\n }\n})\n","// Institute of Design and Innovation (email idi@unm.edu). //\n\nimport cookie from 'js-cookie'\nimport httpClient from '@/common/httpClient'\nimport { AxiosError, AxiosResponse } from 'axios'\nimport store from '@/store/store'\nimport State from '@/store/state'\nimport User from '@/models/user'\n\n/**\n * Class with static methods to initialize and destroy session\n */\nexport default class SessionService {\n /**\n * Returns the current access token's expiration as a Date\n */\n static getAccessTokenExpiration (): number {\n const exp = cookie.get('access_exp')\n return Number(exp)\n }\n\n /**\n * Returns the current refresh token's expiration as a Date\n */\n static getRefreshTokenExpiration (): number {\n const exp = cookie.get('refresh_exp')\n return Number(exp)\n }\n\n /**\n * Initializes or refreshes a session\n */\n static initializeSession (): Promise {\n return new Promise((resolve) => {\n // Attempt to get session expiration cookie\n const exp = cookie.get('refresh_exp')\n\n // If it exists and has not expired\n if (exp && (parseInt(exp) * 1000) > new Date().getSeconds()) {\n httpClient.get('authentication/refresh').then((res: AxiosResponse) => {\n console.log(res.data.id)\n const state = {\n userId: res.data.id,\n firstName: res.data.firstName,\n lastName: res.data.lastName,\n sessionExpiration: this.getRefreshTokenExpiration(),\n accessExpiration: this.getAccessTokenExpiration(),\n permissions: res.data.permissions,\n isAdmin: res.data.isOspStaff,\n outlookUserId: res.data.outlookUserId\n } as State\n\n store.dispatch('initializeSession', state)\n resolve(true)\n }).catch((err: AxiosError) => {\n if (err.response?.status === 401) {\n resolve(false)\n }\n })\n } else {\n resolve(false)\n }\n })\n }\n\n /**\n * Request that cookies are removed and redirects to home\n */\n static logOut () {\n httpClient.delete('authentication').then(() => {\n // window.location.href = '/signed-out'\n window.location.href = 'https://login.microsoftonline.com/common/oauth2/logout'\n })\n }\n\n /**\n * Redirects the user the login screen of the auth provider\n */\n static redirectToLoginProvider () {\n const redirectUrl = `https://login.microsoftonline.com/${process.env.VUE_APP_AZURE_AD_TENANT_ID}/oauth2/v2.0/authorize` +\n '?response_type=code' +\n `&client_id=${process.env.VUE_APP_AZURE_AD_CLIENT_ID}` +\n `&redirect_uri=${process.env.VUE_APP_AZURE_AD_REDIRECT}` +\n '&scope=User.Read'\n\n window.location.href = redirectUrl\n }\n}\n","// Institute of Design and Innovation (email idi@unm.edu). //\n\nimport axios, { AxiosRequestConfig } from 'axios'\nimport cookie from 'js-cookie'\nimport SessionService from '@/common/sessionService'\n\n/**\n * The Axios Client to be configured\n */\nconst httpClient = axios.create({\n baseURL: '/api/'\n})\n\n/**\n * Interceptor to ensure a valid token is sent with the request\n */\nhttpClient.interceptors.request.use((config: AxiosRequestConfig) => {\n // Ignores the refresh route\n if (config.url === 'authentication/refresh' && config.method === 'get') {\n return config\n }\n\n const accessExp = cookie.get('access_exp')\n const timeToExpiration = accessExp ? parseInt(accessExp) : 0\n\n if (timeToExpiration <= Date.now()) {\n // If expired, refresh tokens before making a request\n return new Promise((resolve, reject) => {\n SessionService.initializeSession().then(() => {\n resolve(config)\n }, err => {\n reject(err)\n })\n })\n } else {\n return config\n }\n}, (error) => {\n return Promise.reject(error)\n})\n\nexport default httpClient\n","\n\n\n\n\n\n","\nimport { defineComponent } from 'vue'\n\nexport default defineComponent({\n name: 'Home',\n\n data () {\n return {\n forecaste: []\n }\n },\n\n methods: {\n getStuff () {\n this.$axios.get('weatherforecast').then(res => {\n this.forecaste = res.data\n })\n }\n }\n})\n","import { render } from \"./Home.vue?vue&type=template&id=04b70458&bindings={}\"\nimport script from \"./Home.vue?vue&type=script&lang=ts\"\nexport * from \"./Home.vue?vue&type=script&lang=ts\"\nscript.render = render\n\nexport default script","\n\n\n\n\n\n","\nimport { defineComponent } from 'vue'\nimport SessionService from '../common/sessionService'\n\nexport default defineComponent({\n name: 'Login',\n\n beforeRouteEnter (to, from, next) {\n next()\n },\n\n mounted () {\n const authCode = this.$route.query.code\n\n if (authCode) {\n this.$axios.post('authentication', { code: authCode }).then(() => {\n SessionService.initializeSession().then(() => {\n setTimeout(() => {\n const path = sessionStorage.getItem('reload_path')\n sessionStorage.removeItem('reload_path')\n if (path && path !== '') {\n this.$router.push(path)\n } else {\n this.$router.push('/')\n }\n }, 600)\n })\n }).catch(res => {\n console.log(res)\n })\n }\n }\n})\n","import { render } from \"./Login.vue?vue&type=template&id=32d78252&bindings={}\"\nimport script from \"./Login.vue?vue&type=script&lang=ts\"\nexport * from \"./Login.vue?vue&type=script&lang=ts\"\nscript.render = render\n\nexport default script","\n\n\n\n\n\n","// Institute of Design and Innovation (email idi@unm.edu). //\n\nimport Appointment from '@/models/appointment'\nimport { AppointmentTypeDetail } from '@/models/appointmentType'\nimport User from '@/models/user'\nimport UserReassign from '@/models/userReassign'\nimport { AxiosResponse } from 'axios'\nimport httpClient from './httpClient'\n\n/**\n * Class containing routes for AppointmentService API\n */\nexport default class AppointmentService {\n static cancelAppointment (id: number): Promise> {\n return httpClient.put(`appointment/${id}/cancel`)\n }\n\n /**\n * Get all appointments for range\n * @param start start date and time\n * @param end end date and time\n */\n static getAll (start?: Date, end?: Date): Promise>> {\n const params = {} as any\n\n if (start) {\n params.start = start.toISOString()\n }\n\n if (end) {\n params.end = end.toISOString()\n }\n\n return httpClient.get('appointment', { params: params })\n }\n\n /**\n * Get the appointment\n * @param id the appointment Id\n */\n static get (id: number): Promise> {\n return httpClient.get(`appointment/${id}`)\n }\n\n /**\n * Get appointments for project user\n * @param userId the user Id\n * @param onlyFuture optional flag if only want future appoitnments\n */\n static getForProjectUser (userId: number, onlyFuture = true): Promise>> {\n return httpClient.get(`appointment/forProjectUser/${userId}`, { params: { onlyFuture: onlyFuture } })\n }\n\n /**\n * Reassign the appointment for the reviewer\n * @param appointmentId the appointment Id\n * @param reviewerId the reviewer user Id\n */\n static reassign (appointmentId: number, reviewerId: number): Promise> {\n return httpClient.put(`appointment/${appointmentId}/reassign/${reviewerId}`)\n }\n\n /**\n * Get available reviewers for the date\n * @param date the date\n */\n static reviewerAvailabilityForDate (date: Date): Promise>> {\n return httpClient.get('appointment/reviewerAvailabilityForDate', { params: { date: date.toISOString() } })\n }\n\n /**\n * Post the appointment\n * @param form the appointment form\n */\n static scheduleAppointment (form: object): Promise> {\n return httpClient.post('appointment', form)\n }\n\n /**\n * Put a reschedule appointment\n * @param id the appointment Id\n * @param form the new appointment form\n */\n static rescheduleAppointment (id: number, form: object, scheduledByOsp = true): Promise> {\n return httpClient.put(`appointment/${id}/reschedule`, form, { params: { scheduledByOsp: scheduledByOsp } })\n }\n\n static getIntakeForm (id: number): Promise> {\n return httpClient.get(`appointment/${id}/intakeForm`)\n }\n\n static updateIntakeForm (id: number, form: object): Promise> {\n return httpClient.put(`appointment/${id}/intakeForm`, form)\n }\n\n static reviewerAvailability (offeringId: number, dateTime: Date): Promise>> {\n return httpClient.get(`appointment/reviewerAvailability/${offeringId}/${dateTime.toISOString()}`)\n }\n\n /**\n * The display value for the proposal number formatted to include the\n * proposal number type\n */\n static formatProposalNumber (appointment: Appointment): string {\n let type: string\n switch (appointment.proposalNumberType) {\n case 'ProposalDevelopment': type = 'Proposal Development'; break\n case 'QuickProposal': type = 'Quick Proposal'; break\n default: type = 'Cayuse'\n }\n\n return `${type}: ${appointment.proposalNumber}`\n }\n}\n","\n\n\n\n\n\n\n\n","// Institute of Design and Innovation (email idi@unm.edu). //\n\nimport { AppointmentType, AppointmentTypeDetail } from '@/models/appointmentType'\nimport AppointmentTypeOffering from '@/models/appointmentTypeOffering'\nimport AvailabilitySlot from '@/models/availabilitySlot'\nimport IntakeForm from '@/models/intakeForm'\nimport { AxiosResponse } from 'axios'\nimport httpClient from './httpClient'\n\n/**\n * Class containing routes for AppointmentType API\n */\nexport default class AppointmentTypeService {\n /**\n * Creates a new AppointmentType\n * @param AppointmentType The AppointmentType to be created\n */\n static create (form: AppointmentType): Promise> {\n return httpClient.post('/appointmentType', form)\n }\n\n /**\n * Creates a new Offering for the given AppointmentType\n * @param appointmentTypeId The Id of the AppoointmentType to create the Offering for\n * @param time The time of the appointment represented by the number of minutes since the start of day\n */\n static createOffering (appointmentTypeId: number, time: number) {\n return httpClient.post(`/appointmentType/${appointmentTypeId}/offering`, { hour: time })\n }\n\n /**\n * Returns the specified AppointmentType\n * @param id The Id of the AppointmentType\n */\n static get (id: number): Promise> {\n return httpClient.get(`/appointmentType/${id}`)\n }\n\n /**\n * Returns all appointmentTypes\n */\n static getAll (): Promise>> {\n const params = {\n allInclusive: true\n }\n return httpClient.get('/appointmentType', { params: params })\n }\n\n /**\n * Returns all public appointmentTypes that are not tasks\n */\n static getPublic (): Promise>> {\n return httpClient.get('/appointmentType/public')\n }\n\n /**\n * Gets all available time slots for the given AppointmentType between the given dates\n * @param id The Id of the AppointmentType\n * @param start Lower Date Bound\n * @param end Upper Date Bound\n */\n static getAvailability (id: number, start: Date, end: Date, reviewerId = 0, includeUnavailable = false): Promise>> {\n const params = {\n start: start.toISOString(),\n end: end.toISOString(),\n reviewerId: reviewerId,\n includeUnavailable: String(includeUnavailable)\n }\n return httpClient.get(`/appointmentType/${id}/groupedAvailability`, { params: params })\n }\n\n /**\n * Removes the given AppointmentTypeOffering\n * @param id The Id of the AppoointmentTypeOffering to remove\n */\n static removeOffering (id: number): Promise> {\n return httpClient.delete(`/appointmentType/offering/${id}`)\n }\n\n /**\n * Updates the given AppointmentType\n * @param form The AppointmentType to update\n */\n static update (form: AppointmentType): Promise> {\n return httpClient.put(`/appointmentType/${form.id}`, form)\n }\n\n /**\n * Updates the given AppointmentType's confirmation message\n * @param id The id of the appointment type\n * @param message The new message\n */\n static updateConfirmationMessage (id: number, message: string): Promise {\n return httpClient.put(`/appointmentType/${id}/confirmationMessage`, { message: message })\n }\n\n /**\n * Updates an AppointmentType's IntakeForm\n * @param id The Id of the AppointmentType\n * @param form The IntakeForm to update\n */\n static updateIntakeForm (id: number, form: IntakeForm): Promise> {\n return httpClient.put(`/appointmentType/${id}/intakeForm`, form)\n }\n\n /**\n * Remove an AppointmentType, its offerings and any sponsors and user availabilities\n * @param id\n */\n static removeType (id: number): Promise> {\n return httpClient.put(`/appointmentType/remove/${id}`)\n }\n\n /**\n * Restore an AppointmentType and its offerings\n * @param id\n */\n static restoreType (id: number): Promise> {\n return httpClient.put(`/appointmentType/restore/${id}`)\n }\n\n /**\n * Updates the given offering\n * @param appointmenTypeId The If of the AppointmentType the offering belongs to\n * @param offering The offering to update\n */\n static updateOffering (appointmenTypeId: number, offering: AppointmentTypeOffering): Promise> {\n return httpClient.post(`/appointmentType/${appointmenTypeId}/offering`, offering)\n }\n}\n","// Institute of Design and Innovation (email idi@unm.edu). //\n\nexport default class TimeService {\n /**\n * Returns a string representation of the given number of minutes in hours and minutes\n * ex. 90 -> 1 hour 30 minutes\n * @param minutes Number of minutes\n */\n static minutesToHoursFormatted (minutes: number): string {\n const hours = Math.floor(minutes / 60)\n const leftoverMinutes = minutes - (hours * 60)\n const hourString = `${hours} hour${hours > 1 ? 's' : ''}`\n\n if (leftoverMinutes > 0) {\n const minuteString = `${leftoverMinutes} minute${leftoverMinutes > 1 ? 's' : ''}`\n return hourString + ' ' + minuteString\n } else {\n return hourString\n }\n }\n\n /**\n * Converts a time represented as a string into the number of minutes since the start of day\n * @param timeString The time represented as a string\n */\n static convertTimeFromString (timeString: string): number | null {\n const regex = new RegExp(/((\\d{1})|(\\d{1,2}:\\d{2}))(am|pm)/i)\n const match = regex.test(timeString)\n if (!match) {\n return null\n }\n\n let hour, minute\n\n const split = timeString.split(':')\n if (split.length === 1 && timeString.length === 4) {\n hour = Number(split[0].substr(0, 2))\n minute = 0\n } else if (split.length === 1) {\n hour = Number(split[0][0])\n minute = 0\n } else {\n hour = Number(split[0])\n minute = (Number(split[1].substr(0, 2)))\n }\n\n const mer = timeString.substr(timeString.length - 2, 2).toLowerCase()\n\n if (hour === 12 && mer === 'am') {\n hour = 0\n }\n\n let num = minute + 60 * hour\n if (mer === 'pm') {\n if (hour !== 12) {\n num += 60 * 12\n }\n }\n\n return num\n }\n\n /**\n * Converts a time represented as a number to a string\n * @param timeNum Time represented as the number of minutes since the start of day\n */\n static convertTimeToString (timeNum: number): string | null {\n let hour = Math.floor(timeNum / 60)\n const minute = timeNum - hour * 60\n let mer = 'am'\n\n if (hour > 12) {\n mer = 'pm'\n hour -= 12\n } else if (hour === 12) {\n mer = 'pm'\n hour = 12\n }\n\n if (hour === 0) {\n mer = 'am'\n hour = 12\n }\n\n const hourString = String(hour)\n const minuteString = minute >= 10 ? String(minute) : `0${minute}`\n\n return `${hourString}:${minuteString}${mer}`\n }\n\n static convertDurationToString (timeNum: number): string {\n const hour = Math.floor(timeNum / 60)\n const minute = timeNum - hour * 60\n const hourString = String(hour)\n const minString = String(minute)\n\n let duration = `${hourString} hrs`\n if (minute > 0) {\n duration = duration + ` ${minString} mins`\n }\n return duration\n }\n\n /**\n * Determins whether the given time string represents a valid time\n * @param timeString Time represtned as a string\n */\n static isValidTimeString (timeString: string): boolean {\n const regex = new RegExp(/((\\d{1})|(\\d{1,2}:\\d{2}))(am|pm)/i)\n const match = regex.test(timeString)\n if (!match) {\n return false\n }\n\n let hour, minute\n\n const split = timeString.split(':')\n if (split.length === 1 && timeString.length === 4) {\n hour = Number(split[0].substr(0, 2))\n minute = 0\n } else if (split.length === 1) {\n hour = Number(split[0][0])\n minute = 0\n } else {\n hour = Number(split[0])\n minute = (Number(split[1].substr(0, 2)))\n }\n\n return (hour > 0 && hour <= 12 && minute < 60)\n }\n}\n","\n\n\n\n\n\n\n\n","\nimport User from '../models/user'\nimport { addDays, addMinutes, addWeeks, endOfWeek, format, isAfter, isBefore, startOfDay, startOfWeek, isSameHour } from 'date-fns'\nimport { defineComponent, PropType } from 'vue'\nimport { mapGetters } from 'vuex'\nimport AppointmentTypeService from '../common/appointmentTypeService'\nimport AvailabilitySlot from '../models/availabilitySlot'\nexport default defineComponent({\n name: 'AppointmentSlotSelection',\n\n props: {\n appointmentTypeId: {\n type: Number,\n required: true\n },\n currentReviewerId: {\n type: Number,\n default: 0,\n required: false\n },\n forReschedule: {\n type: Boolean,\n default: false\n },\n internalScheduling: {\n type: Boolean,\n default: false\n },\n maxDate: {\n type: Object as PropType,\n required: true\n },\n startTime: {\n type: Object as PropType,\n default: Date(),\n required: false\n }\n },\n\n data () {\n return {\n loadingSlots: false,\n /** list of available slots */\n availabilitySlots: [] as Array,\n /** date range */\n dateRange: {\n startTime: startOfWeek(new Date()),\n endTime: endOfWeek(new Date())\n },\n rescheduleForOtherReviewer: false\n }\n },\n\n emits: ['slot-selected'],\n\n computed: {\n /** Returns true if the date range is after the current date */\n canGoBack (): boolean {\n return isAfter(this.dateRange.startTime, new Date())\n },\n\n /** Returns true if the date range is before the deadline */\n canGoForward (): boolean {\n return isBefore(startOfDay(addMinutes(this.dateRange.endTime, 1)), this.maxDate)\n },\n\n /** returns start day */\n displayStartDay (): Date {\n return addDays(this.dateRange.startTime, 1)\n },\n\n /** returns end day */\n displayEndDay (): Date {\n return addDays(this.dateRange.endTime, -1)\n },\n\n /** The slots that fall within the current time range */\n slotsForWeek (): Array {\n return this.availabilitySlots.filter(slot => {\n return isAfter(slot.start, this.dateRange.startTime) && isBefore(slot.start, this.dateRange.endTime)\n })\n },\n\n /** Dates for the current week */\n weekDays (): Array {\n return [1, 2, 3, 4, 5].map(x => {\n return addDays(this.dateRange.startTime, x)\n })\n },\n\n ...mapGetters(['isAdmin', 'userId', 'firstName', 'lastName'])\n },\n\n mounted () {\n this.getAvailability()\n },\n\n watch: {\n appointmentTypeId: {\n handler: function () {\n this.dateRange.startTime = startOfWeek(new Date())\n this.dateRange.endTime = endOfWeek(new Date())\n this.getAvailability()\n },\n immediate: true\n }\n },\n\n methods: {\n /**\n * Formats the given date in the specified format\n */\n formatTime (date: Date, formatString: string): string {\n return format(date, formatString)\n },\n\n /**\n * Fetches availability for the selected appointment type\n * and date range\n */\n getAvailability () {\n this.loadingSlots = true\n this.rescheduleForOtherReviewer = false\n const start = new Date()\n const end = this.maxDate\n\n const reviewerIsRescheduling = this.forReschedule && this.internalScheduling && !this.isAdmin\n\n let reviewerId = 0\n if (reviewerIsRescheduling) {\n reviewerId = this.currentReviewerId\n }\n\n const includeUnavailable = this.internalScheduling && this.isAdmin\n\n // AppointmentTypeService.getAvailability(this.appointmentTypeId, start, end, this.internalScheduling || this.forReschedule).then(res => {\n AppointmentTypeService.getAvailability(this.appointmentTypeId, start, end, reviewerId, includeUnavailable).then(res => {\n res.data.forEach(d => {\n d.start = new Date(d.start)\n d.end = new Date(d.end)\n })\n\n if (res.data.length > 0) {\n this.dateRange.startTime = startOfWeek(res.data[0].start)\n this.dateRange.endTime = endOfWeek(this.dateRange.startTime)\n }\n\n // Rescheduling by reviewer and no availability for themselves\n if (reviewerIsRescheduling && res.data.length === 0) {\n // Fetch all availability\n AppointmentTypeService.getAvailability(this.appointmentTypeId, start, end, 0, false).then(res => {\n res.data.forEach(d => {\n d.start = new Date(d.start)\n d.end = new Date(d.end)\n })\n\n if (res.data.length > 0) {\n this.dateRange.startTime = startOfWeek(res.data[0].start)\n this.dateRange.endTime = endOfWeek(this.dateRange.startTime)\n }\n\n this.rescheduleForOtherReviewer = true\n this.availabilitySlots = res.data\n this.loadingSlots = false\n })\n } else {\n this.availabilitySlots = res.data\n this.loadingSlots = false\n }\n })\n },\n\n /**\n * Moves the date range forward one week\n */\n nextWeek () {\n this.dateRange.startTime = addWeeks(this.dateRange.startTime, 1)\n this.dateRange.endTime = addWeeks(this.dateRange.endTime, 1)\n },\n\n /**\n * Moves the date range back one week\n */\n previousWeek () {\n this.dateRange.startTime = addWeeks(this.dateRange.startTime, -1)\n this.dateRange.endTime = addWeeks(this.dateRange.endTime, -1)\n },\n\n isSelectedSlot (currentTime: Date): boolean {\n return isSameHour(currentTime, this.startTime)\n },\n\n /**\n * Emits an event when a slot is selected including the selected slot\n * @param slot: AvailabilitySlot\n */\n selectSlot (slot: AvailabilitySlot) {\n if (this.forReschedule && !this.rescheduleForOtherReviewer && !this.isAdmin && this.internalScheduling) {\n slot.reviewer = { id: this.userId, firstName: this.firstName, lastName: this.lastName } as User\n }\n this.$emit('slot-selected', slot)\n },\n\n /**\n * Returns the slots available on the given day\n * @param day: The day in the form of a Date object\n */\n slotsForDay (day: Date): Array {\n return this.slotsForWeek.filter(slot => {\n return slot.start.getDay() === day.getDay()\n }).sort((a: AvailabilitySlot, b: AvailabilitySlot) => {\n if (isBefore(a.start, b.start)) {\n return -1\n } else if (isBefore(b.start, a.start)) {\n return 1\n } else {\n return 0\n }\n })\n }\n }\n})\n","import { render } from \"./AppointmentSlotSelection.vue?vue&type=template&id=131842d6&scoped=true&bindings={}\"\nimport script from \"./AppointmentSlotSelection.vue?vue&type=script&lang=ts\"\nexport * from \"./AppointmentSlotSelection.vue?vue&type=script&lang=ts\"\n\nimport \"./AppointmentSlotSelection.vue?vue&type=style&index=0&id=131842d6&scoped=true&lang=css\"\nscript.render = render\nscript.__scopeId = \"data-v-131842d6\"\n\nexport default script","// Institute of Design and Innovation (email idi@unm.edu). //\n\nimport { Sponsor, SponsorDetail } from '@/models/sponsor'\nimport { AxiosResponse } from 'axios'\nimport httpClient from './httpClient'\n\n/**\n * Class contain routes for the SponsorService API\n */\nexport default class SponsorService {\n /**\n * Get all sponsors\n */\n public static getAll (): Promise>> {\n return httpClient.get('sponsor')\n }\n\n /**\n * Get all sponsors with details included\n */\n public static getAllDetailed (): Promise>> {\n return httpClient.get('sponsor', { params: { includeAppointmentType: 'true' } })\n }\n\n /**\n * Create sponsor\n * @param sponsor the sponsor data to create\n */\n public static create (sponsor: Sponsor): Promise> {\n return httpClient.post('sponsor', sponsor)\n }\n\n /**\n * Update sponsor\n * @param id the Id of the sponsor\n * @param sponsor the sponsor data to update\n */\n public static update (id: number, sponsor: Sponsor): Promise> {\n return httpClient.put(`sponsor/${id}`, sponsor)\n }\n\n /**\n * Remove sponsor\n * @param id the Id of the sponsor\n */\n public static remove (id: number): Promise> {\n return httpClient.put(`sponsor/remove/${id}`)\n }\n}\n","\n\n\n","\n\n\n\n\n\n","\nimport { defineComponent, PropType } from 'vue'\nimport { DynamicInput } from '../models/dynamicInput'\n\nexport default defineComponent({\n name: 'DynamicField',\n\n props: {\n /** The DynamicInput object that defines the type of input to render */\n inputDefinition: {\n type: Object as PropType,\n required: true\n },\n\n /** The model value */\n modelValue: {\n default: ''\n }\n },\n\n data () {\n return {\n /** Indicates that the input has been touched */\n dirty: false,\n\n /** Indicates if the user's input is valid */\n isValid: true,\n\n /** A local copy of the modelValue */\n localValue: null as unknown as any\n }\n },\n\n mounted () {\n this.localValue = this.modelValue\n this.setValid()\n },\n\n emits: ['update:modelValue', 'update-validity'],\n\n computed: {\n /** The error message to be displayed if there is an error */\n errorMessage: function (): string {\n if (this.isValid) {\n return ''\n }\n\n if (this.inputDefinition.required && (this.localValue === '' || this.localValue === null)) {\n return 'This field is required.'\n }\n\n switch (this.inputDefinition.type) {\n case 'phone': return 'Please enter a valid 10 digit phone number.'\n case 'email': return 'Please enter a valid email address.'\n case 'cayuse': return 'Please enter a valid Proposal Record ID.'\n default: return ''\n }\n },\n\n /** The current model */\n passThrough: {\n get (): string { return this.modelValue },\n set (val) {\n this.localValue = val\n this.setValid()\n this.$emit('update:modelValue', val)\n }\n },\n\n showError (): boolean {\n return this.dirty && !this.isValid\n }\n },\n\n methods: {\n /**\n * Updates the validity flag\n */\n setValid () {\n const validity = this.validate()\n this.$emit('update-validity', validity)\n this.isValid = validity\n },\n\n /**\n * Returns true if the input is valid\n */\n validate (): boolean {\n switch (this.inputDefinition.type) {\n case 'email': return this.validateRequired() && this.validateEmail()\n case 'phone': return this.validateRequired() && this.validatePhone()\n case 'cayuse': return this.validateRequired() && this.validateCayuse()\n case 'checkbox group': return true\n case 'checkbox': return true\n default: return this.validateRequired()\n }\n },\n\n /**\n * validate Cayuse number\n */\n validateCayuse () {\n return this.localValue.length >= 1\n },\n\n /**\n * Returns true if the input passes the required validation\n */\n validateRequired (): boolean {\n if (this.inputDefinition.required) {\n return this.localValue !== '' && this.localValue !== null\n } else {\n return true\n }\n },\n\n /**\n * Returns true if the input is a valid email\n */\n validateEmail (): boolean {\n return /^\\w+([-+.']\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$/.test(this.localValue) || this.localValue === ''\n },\n\n /**\n * Returns true if the input is a valid phone number\n */\n validatePhone (): boolean {\n return /^\\s*(?:\\+?(\\d{1,3}))?[-. (]*(\\d{3})[-. )]*(\\d{3})[-. ]*(\\d{4})(?: *x(\\d+))?\\s*$/.test(this.localValue) || this.localValue === ''\n }\n }\n})\n","import { render } from \"./DynamicField.vue?vue&type=template&id=7adeff36&bindings={}\"\nimport script from \"./DynamicField.vue?vue&type=script&lang=ts\"\nexport * from \"./DynamicField.vue?vue&type=script&lang=ts\"\nscript.render = render\n\nexport default script","\nimport { ProposalNumberType } from '../models/proposalType'\nimport { cloneDeep, isNumber } from 'lodash'\nimport { defineComponent, PropType } from 'vue'\nimport { AppointmentTypeDetail } from '../models/appointmentType'\nimport { Contact, ContactIntput } from '../models/contact'\nimport { DynamicInput, WorkingDynamicInput } from '../models/dynamicInput'\nimport FormattedIntakeFormResponse from '../models/formattedIntakeFormResponse'\nimport IntakeForm from '../models/intakeForm'\nimport IntakeFormResponse from '../models/intakeFormResponse'\nimport DynamicField from './DynamicField.vue'\n\nexport default defineComponent({\n name: 'IntakeForm',\n\n props: {\n /** The intake form definition */\n intakeForm: {\n type: Object,\n required: true\n },\n\n currentResponse: {\n type: Object as PropType | null,\n required: false,\n default: null\n }\n },\n\n emits: ['form-updated'],\n\n data () {\n return {\n proposalNumberType: '' as unknown as ProposalNumberType,\n defaultResponse: {},\n intakeFormResponse: {},\n additionalContacts: [] as Array\n }\n },\n\n computed: {\n isEditingCayuse (): boolean {\n if (this.currentResponse) {\n const propType = (this.currentResponse.defaultResponses as any).proposalNumberType.value\n if (propType === 'Cayuse') {\n return true\n } else {\n return false\n }\n }\n return false\n }\n },\n\n watch: {\n appointmentType: {\n handler () {\n this.resetIntakeFormResponse()\n },\n deep: true,\n immediate: true\n },\n\n defaultResponse: {\n handler () {\n this.$emit('form-updated', this.formatResponse())\n },\n deep: true,\n immediate: true\n },\n\n intakeFormResponse: {\n handler () {\n this.$emit('form-updated', this.formatResponse())\n },\n deep: true,\n immediate: true\n },\n\n additionalContacts: {\n handler () {\n this.$emit('form-updated', this.formatResponse())\n },\n deep: true,\n immediate: true\n }\n },\n\n methods: {\n /**\n * Adds a contact to the form\n */\n addContact () {\n this.additionalContacts.push(\n {\n name: { type: 'text', label: 'Name', required: false, valid: false, value: '' },\n phone: { type: 'phone', label: 'Phone', required: false, valid: false, value: '' },\n email: { type: 'email', label: 'Email', required: false, valid: false, value: '' }\n }\n )\n },\n\n /**\n * Indicates if all form inputs are valid\n */\n isValid (): boolean {\n const responses = Object.values(this.intakeFormResponse)\n const defaultResponses = Object.values(this.defaultResponse)\n\n return responses.reduce((previous: boolean, current: any) => {\n return previous && current.valid\n }, true) && defaultResponses.reduce((previous: boolean, current: any) => {\n return previous && current.valid\n }, true) && this.additionalContacts.reduce((previous: boolean, current: any) => {\n return previous && current.name.valid && current.email.valid && current.phone.valid\n }, true)\n },\n\n /**\n * Formats the current response and emits an event\n */\n formatResponse (): FormattedIntakeFormResponse {\n const responses = cloneDeep(Object.values(this.intakeFormResponse)) as Array\n responses.forEach(r => {\n if (r.type === 'checkbox group') {\n r.value = r.value.join(', ')\n }\n\n if (r.type === 'checkbox') {\n r.value = String(r.value)\n }\n })\n\n const contacts = [] as Array\n this.additionalContacts.forEach((c: ContactIntput) => {\n if (c.name.value + c.email.value + c.phone.value === '') {\n return\n }\n\n const contact = {\n name: c.name.value,\n email: c.email.value,\n phone: c.phone.value\n }\n\n contacts.push(contact)\n })\n\n return {\n defaultResponses: this.defaultResponse,\n additionalContacts: contacts,\n intakeFormResponses: responses,\n isValid: this.isValid()\n }\n },\n\n /**\n * Removes the given contact\n * @param ind: The index of the contact to remove\n */\n removeContact (ind: number) {\n this.additionalContacts.splice(ind, 1)\n },\n\n /**\n * Resets the responses of the intake form\n */\n resetIntakeFormResponse () {\n if (this.currentResponse == null) {\n this.additionalContacts = []\n this.addContact()\n } else {\n this.additionalContacts = this.currentResponse.additionalContacts.map(ac => {\n return {\n name: { type: 'text', label: 'Name', required: false, valid: false, value: ac.name },\n phone: { type: 'phone', label: 'Phone', required: false, valid: false, value: ac.phone },\n email: { type: 'email', label: 'Email', required: false, valid: false, value: ac.email }\n }\n })\n }\n\n const defaultFormResponse = {}\n\n const defaultFields = [\n { id: 'pIFirstName', label: 'P.I. First Name', type: 'text' },\n { id: 'pILastName', label: 'P.I. Last Name', type: 'text' },\n { id: 'pIEmail', label: 'P.I. Email', type: 'email' },\n { id: 'pIPhone', label: 'P.I. Phone #', type: 'phone' },\n { id: 'proposalNumberType', label: 'Proposal Type', type: 'radio', options: ['QuickProposal', 'ProposalDevelopment'] },\n { id: 'proposalNumber', label: 'Proposal Record Number (This will be the PD or QP number found on the respective Streamlyne record)', type: this.isEditingCayuse ? 'cayuse' : 'proposalNumber' }\n ]\n\n defaultFields.forEach(gf => {\n defaultFormResponse[gf.id] = {\n id: gf.id,\n valid: false,\n value: this.currentResponse ? this.currentResponse.defaultResponses[gf.id].value : '',\n label: gf.label,\n required: true,\n type: gf.type\n }\n\n if (gf.type === 'radio') {\n defaultFormResponse[gf.id].options = gf.options\n }\n\n if (gf.id === 'proposalNumberType' && !this.isEditingCayuse) {\n if (this.currentResponse) {\n const ptCode: ProposalNumberType = (this.currentResponse.defaultResponses as any).proposalNumberType.value as ProposalNumberType\n if (ptCode === 'QuickProposal') {\n defaultFormResponse[gf.id].value = 'QuickProposal'\n } else {\n defaultFormResponse[gf.id].value = 'ProposalDevelopment'\n }\n defaultFormResponse[gf.id].valid = true\n }\n } else if (gf.id === 'proposalNumberType') {\n defaultFormResponse[gf.id].required = false\n defaultFormResponse[gf.id].valid = true\n }\n })\n\n this.defaultResponse = defaultFormResponse\n\n const intakeFormResponse = {}\n\n this.intakeForm.inputs.forEach((input: DynamicInput) => {\n intakeFormResponse[input.id] = {\n id: input.id,\n type: input.type,\n label: input.label,\n value: input.type === 'checkbox' ? false : '',\n required: input.required,\n valid: false\n }\n\n if (input.type === 'radio' && !this.currentResponse) {\n intakeFormResponse[input.id].value = input.options[0]\n }\n\n if (input.type === 'checkbox group' && !this.currentResponse) {\n intakeFormResponse[input.id].value = []\n }\n })\n\n if (this.currentResponse) {\n this.currentResponse.intakeFormResponses.forEach(res => {\n if (res.type === 'checkbox') {\n intakeFormResponse[res.id].value = res.value === 'true'\n } else {\n intakeFormResponse[res.id].value = res.value\n }\n })\n }\n\n this.intakeFormResponse = intakeFormResponse\n },\n\n /**\n * Update valid property on global intake form\n */\n updateDefaultValid (val, id) {\n this.defaultResponse[id].valid = val\n },\n\n /**\n * Update valid property on intake form\n */\n updateValid (val, id) {\n this.intakeFormResponse[id].valid = val\n }\n },\n\n components: {\n DynamicField\n }\n})\n","import { render } from \"./IntakeForm.vue?vue&type=template&id=8b2902da&bindings={}\"\nimport script from \"./IntakeForm.vue?vue&type=script&lang=ts\"\nexport * from \"./IntakeForm.vue?vue&type=script&lang=ts\"\nscript.render = render\n\nexport default script","\nimport { addDays, addMinutes, addMonths, addWeeks, differenceInMilliseconds, endOfDay, endOfMinute, endOfWeek, format, isAfter, isBefore, isSameDay, startOfDay, startOfWeek } from 'date-fns'\nimport Litepicker from 'litepicker'\nimport { defineComponent } from 'vue'\nimport AppointmentTypeService from '../common/appointmentTypeService'\nimport AppointmentService from '../common/appointmentService'\nimport TimeService from '../common/timeService'\nimport { AppointmentType, AppointmentTypeDetail } from '../models/appointmentType'\nimport AvailabilitySlot from '../models/availabilitySlot'\nimport { DynamicInput } from '../models/dynamicInput'\nimport DynamicField from '../components/DynamicField.vue'\nimport { cloneDeep } from 'lodash'\nimport AppointmentSlotSelection from './AppointmentSlotSelection.vue'\nimport SponsorService from '../common/sponsorService'\nimport { Sponsor } from '../models/sponsor'\nimport User from '../models/user'\nimport UserReassign from '../models/userReassign'\nimport { mapGetters, mapState } from 'vuex'\nimport { AxiosError } from 'axios'\nimport IntakeForm from './IntakeForm.vue'\nimport FormattedIntakeFormResponse from '../models/formattedIntakeFormResponse'\n\nexport default defineComponent({\n name: 'AppointmentScheduler',\n\n props: {\n /** Indicates that a reviewing is scheduling an appointment */\n internalScheduling: {\n type: Boolean,\n default: false\n }\n },\n\n emits: ['scheduled', 'cancel'],\n\n data () {\n return {\n isActive: true,\n\n errorScheduling: false,\n\n timeNotAvailable: false,\n\n loadingSponsors: false,\n\n /** List of available appointment types */\n appointmentTypes: [] as Array,\n\n /** List of available times for the selected appointment type */\n // availabilitySlots: [] as Array,\n\n /** List of reviewers for a given time slot */\n availableReviewers: [] as Array,\n\n /** Date range to pull availability */\n dateRange: {\n endTime: endOfWeek(new Date()),\n startTime: startOfWeek(new Date())\n },\n\n /** Information collected to schedule the appointment */\n scheduleForm: {\n appointmentTypeId: 0,\n appointmentTypeOfferingId: 0,\n sponsorId: 0,\n sponsorName: '',\n endTime: null as unknown as Date,\n formResponse: {} as FormattedIntakeFormResponse,\n startTime: null as unknown as Date,\n reviewDeadline: null as unknown as Date,\n reviewerId: null as unknown as number | null\n },\n\n /** Indicates that the appointment is being scheduled */\n scheduling: false,\n\n /** Indicates that appointment type will be selected through sponsor */\n showSponsors: true,\n\n /** List of sponsors */\n sponsors: [] as Array,\n\n /** String to search sponsors ons */\n sponsorsSearchKey: '',\n\n /** The current step of the schedule process */\n step: 1\n }\n },\n\n mounted () {\n // Get sponsors\n this.loadingSponsors = true\n SponsorService.getAll().then(res => {\n this.sponsors = res.data.sort((a, b) => {\n if (a.toTop > b.toTop) {\n return -1\n } else if (a.toTop < b.toTop) {\n return 1\n } else {\n return 0\n }\n })\n\n this.loadingSponsors = false\n })\n\n // Get all appointment types\n if (this.internalScheduling) {\n AppointmentTypeService.getAll().then(res => {\n this.appointmentTypes = res.data.filter(r => !r.removed)\n })\n } else {\n AppointmentTypeService.getPublic().then(res => {\n this.appointmentTypes = res.data\n })\n }\n },\n\n computed: {\n /** get appointment type for selected sponsor */\n sponsorAppointmentType (): AppointmentTypeDetail {\n return this.appointmentTypes.find(at => at.id === this.selectedSponsor.appointmentTypeId) as AppointmentTypeDetail\n },\n\n /** returns true if appointment type is a task */\n taskAppointmentTypes (): Array {\n return this.appointmentTypes.filter(at => at.isTask)\n },\n\n /** sort available reviewers by workload */\n sortedAvailableReviewers (): Array {\n const reviewers = cloneDeep(this.availableReviewers)\n .sort((a, b) => {\n if (a.workload > b.workload) {\n return 1\n } else if (a.workload < b.workload) {\n return -1\n } else {\n return 0\n }\n })\n\n if (this.isAdmin) {\n return reviewers\n } else {\n return reviewers.filter(r => !r.hasExternalConflicts && r.availableForSlot)\n }\n },\n\n /** Available Reviewer */\n availableReviewerExists (): boolean {\n if (!this.availableReviewers) {\n return false\n }\n\n return this.availableReviewers.some(u => !u.hasExternalConflicts && u.availableForSlot)\n },\n\n ...mapState(['userId']),\n\n ...mapGetters(['isAdmin']),\n\n /** filter sponsor listed down to characters typed */\n filteredSponsors (): Array {\n if (this.sponsorsSearchKey !== '') {\n return this.sponsors.filter(s => RegExp(this.sponsorsSearchKey, 'i').test(s.name))\n } else {\n return this.sponsors\n }\n },\n\n /** Returns true if the deadline has already passed */\n hasReviewDeadlinePassed (): boolean {\n return isBefore(this.scheduleForm.reviewDeadline, new Date())\n },\n\n /** returns true if review deadline is today */\n isReviewDeadlineSameDay (): boolean {\n return isSameDay(new Date(), this.scheduleForm.reviewDeadline)\n },\n\n /** The selected appointment type */\n selectedAppointmentType (): AppointmentTypeDetail {\n return this.appointmentTypes.find(at => at.id === this.scheduleForm.appointmentTypeId) as AppointmentTypeDetail\n },\n\n /** The selected sponsor */\n selectedSponsor (): Sponsor {\n return this.sponsors.find(s => s.id === this.scheduleForm.sponsorId) as Sponsor\n },\n\n /** The slots that fall within the current time range */\n // slotsForWeek (): Array {\n // return this.availabilitySlots.filter(slot => {\n // return isAfter(slot.start, this.dateRange.startTime) && isBefore(slot.start, this.dateRange.endTime)\n // })\n // },\n\n /** Dates for the current week */\n weekDays (): Array {\n return [1, 2, 3, 4, 5].map(x => {\n return addDays(this.dateRange.startTime, x)\n })\n }\n },\n\n methods: {\n /** cancel action */\n cancel () {\n this.$emit('cancel')\n },\n\n /** returns true if given date is six months or more out */\n isSixMonthsOut (date: Date) {\n return isAfter(date, addMonths(new Date(), 6))\n },\n\n /** sets reviewer chosen */\n selectReviewer (userId: number | null) {\n this.scheduleForm.reviewerId = userId\n this.step = 4\n },\n\n /**\n * workload in hours conversion\n */\n workloadInHours (workload: number): string {\n const hours = Math.floor(workload / 60)\n const minutes = workload - (hours * 60)\n return `${hours > 0 ? hours : '0'}${hours === 1 ? 'hr' : 'hrs'} ${minutes}min`\n },\n\n /**\n * Moves the form back one step\n */\n back () {\n if (this.step === 1) {\n this.step += 1\n this.scheduleForm.sponsorId = 0\n } else if (this.step === 2) {\n if (this.internalScheduling) {\n this.scheduleForm.appointmentTypeId = 0\n } else {\n this.scheduleForm.appointmentTypeId = 0\n this.scheduleForm.sponsorId = 0\n }\n } else if (this.step === 3) {\n this.showDeadlineCalendar()\n this.scheduleForm.reviewDeadline = null as unknown as Date\n // this.availabilitySlots = []\n } else if (this.step === 4) {\n this.scheduleForm.appointmentTypeOfferingId = 0\n this.scheduleForm.startTime = null as unknown as Date\n this.scheduleForm.endTime = null as unknown as Date\n if (this.selectedAppointmentType.isTask) {\n this.showReviewDateCalendar()\n }\n }\n\n this.step -= 1\n },\n\n backToTime () {\n this.scheduleForm.startTime = null as unknown as Date\n this.scheduleForm.endTime = null as unknown as Date\n this.availableReviewers = []\n },\n\n /**\n * Formates the given number of minutes into a human readable time\n */\n formatMinutes (minutes: number): string {\n return TimeService.minutesToHoursFormatted(minutes)\n },\n\n /**\n * Formats the given date in the specified format\n */\n formatTime (date: Date, formatString: string): string {\n return format(date, formatString)\n },\n\n /**\n * Fetches availability for the selected appointment type\n * and date range\n */\n // getAvailability () {\n // const start = new Date()\n // const end = this.scheduleForm.reviewDeadline\n // AppointmentTypeService.getAvailability(this.scheduleForm.appointmentTypeId, start, end, false).then(res => {\n // res.data.forEach(d => {\n // d.start = new Date(d.start)\n // d.end = new Date(d.end)\n // })\n\n // this.dateRange.startTime = startOfWeek(res.data[0].start)\n // this.dateRange.endTime = endOfWeek(this.dateRange.startTime)\n\n // this.availabilitySlots = res.data\n // })\n // },\n\n /**\n * returns true if user can go to confirmation page\n */\n goToConfirm () {\n const el = document.querySelector('.system-settings.page')\n if (el) {\n el.scrollTop = 0\n }\n\n this.step = 5\n },\n\n /**\n * Moves the date range forward one week\n */\n nextWeek () {\n this.dateRange.startTime = addWeeks(this.dateRange.startTime, 1)\n this.dateRange.endTime = addWeeks(this.dateRange.endTime, 1)\n },\n\n /**\n * Moves the date range back one week\n */\n previousWeek () {\n this.dateRange.startTime = addWeeks(this.dateRange.startTime, -1)\n this.dateRange.endTime = addWeeks(this.dateRange.endTime, -1)\n },\n\n /**\n * Schedules the appointment with the given information\n */\n schedule () {\n this.scheduling = true\n this.isActive = false\n\n const params = {\n appointmentTypeId: this.scheduleForm.appointmentTypeId,\n appointmentTypeOfferingId: this.scheduleForm.appointmentTypeOfferingId,\n startTime: this.scheduleForm.startTime.toISOString(),\n intakeFormResponse: this.scheduleForm.formResponse.intakeFormResponses,\n reviewDeadline: this.scheduleForm.reviewDeadline.toISOString(),\n reviewerId: this.scheduleForm.reviewerId,\n sponsorId: this.scheduleForm.sponsorId,\n projectUserId: this.userId,\n additionalContacts: this.scheduleForm.formResponse.additionalContacts\n }\n\n const globalResponses = cloneDeep(Object.values(this.scheduleForm.formResponse.defaultResponses))\n globalResponses.forEach(gr => {\n params[gr.id] = gr.value\n })\n\n AppointmentService.scheduleAppointment(params).then(res => {\n this.step = 6\n this.$emit('scheduled')\n this.scheduling = false\n }).catch((err: AxiosError) => {\n (window as any).bad = err\n if (err.response?.status === 409) {\n // this.getAvailability()\n this.scheduling = false\n this.timeNotAvailable = true\n } else {\n this.errorScheduling = true\n }\n })\n this.isActive = true\n },\n\n /**\n * Handles the selection of an appointment type\n * @param appointmentType: The selected appointment type\n */\n selectAppointmentType (appointmentTypeId: number) {\n this.scheduleForm.appointmentTypeId = appointmentTypeId\n this.showDeadlineCalendar()\n // this.resetIntakeFormResponse()\n this.step = 2\n },\n\n /**\n * Handles the selection of a time slot\n * @param slot: The time slot\n */\n selectSlot (slot: AvailabilitySlot) {\n this.scheduleForm.appointmentTypeOfferingId = slot.appointmentTypeOffering.id\n this.scheduleForm.startTime = slot.start\n this.scheduleForm.endTime = addMinutes(slot.start, this.selectedAppointmentType.duration)\n if (this.internalScheduling) {\n AppointmentService.reviewerAvailability(slot.appointmentTypeOffering.id, slot.start).then(res => {\n this.availableReviewers = res.data\n })\n // this.scheduleForm.reviewerId = slot.reviewer.id\n } else {\n this.step = 4\n }\n },\n\n /**\n * Selects the sponsor and sets the appointment\n * @params sponsor: The given sponsor\n */\n selectSponsor (sponsor: Sponsor) {\n this.scheduleForm.sponsorId = sponsor.id\n if (!this.internalScheduling) {\n this.selectAppointmentType(sponsor.appointmentTypeId)\n }\n },\n\n // /**\n // * Returns the slots available on the given day\n // * @param day: The day in the form of a Date object\n // */\n // slotsForDay (day: Date): Array {\n // return this.slotsForWeek.filter(slot => {\n // return slot.start.getDay() === day.getDay()\n // })\n // },\n\n /** shows calendar to pick deadline date */\n showDeadlineCalendar () {\n setTimeout(() => {\n const picker = new Litepicker({ element: document.querySelector('.deadline-picker'), inlineMode: true, singleMode: true, onSelect: this.handleDeadlineSelection })\n picker.show()\n }, 0)\n },\n\n /** shows calendar for review date selection */\n showReviewDateCalendar () {\n setTimeout(() => {\n const picker = new Litepicker({ element: document.querySelector('.review-date-picker'), inlineMode: true, singleMode: true, onSelect: this.handleReviewDateSelection, disableWeekends: true, minDate: startOfDay(new Date()), maxDate: endOfDay(this.scheduleForm.reviewDeadline) })\n picker.show()\n }, 0)\n },\n\n /** handle reviewers available for date */\n handleReviewDateSelection (date: Date) {\n this.scheduleForm.startTime = startOfDay(date)\n this.scheduleForm.endTime = endOfDay(date)\n\n if (!this.internalScheduling) {\n this.step = 4\n } else {\n AppointmentService.reviewerAvailabilityForDate(date).then(res => {\n this.availableReviewers = res.data\n })\n }\n },\n\n /** handle date selection and deadline date */\n handleDeadlineSelection (date: Date) {\n this.scheduleForm.reviewDeadline = date\n if (!this.selectedAppointmentType.isTask) {\n // this.getAvailability()\n } else {\n this.showReviewDateCalendar()\n }\n this.step = 3\n }\n },\n\n components: {\n // DynamicField,\n IntakeForm,\n AppointmentSlotSelection\n }\n})\n","import { render } from \"./AppointmentScheduler.vue?vue&type=template&id=d5e8f4cc&bindings={}\"\nimport script from \"./AppointmentScheduler.vue?vue&type=script&lang=ts\"\nexport * from \"./AppointmentScheduler.vue?vue&type=script&lang=ts\"\n\nimport \"./AppointmentScheduler.vue?vue&type=style&index=0&lang=css\"\nscript.render = render\n\nexport default script","// Institute of Design and Innovation (email idi@unm.edu). //\n\nimport { AxiosResponse } from 'axios'\nimport httpClient from './httpClient'\nimport User from '../models/user'\nimport UserAvailability from '@/models/userAvailability'\nimport Permission from '@/models/permission'\nimport BlockedTime from '@/models/blockedTime'\nimport OutlookIntegration from '@/models/outlookIntegration'\n\n/**\n * Service containing all User API requests\n */\nexport default class UserService {\n /**\n * Creates a new blocked time\n * @param userId The id of the user\n * @param blockedTime The blocked time to create\n */\n static createBlockedTime (userId: number, blockedTime: BlockedTime): Promise> {\n const body = {\n startTime: blockedTime.startTime.toISOString(),\n endTime: blockedTime.endTime.toISOString(),\n title: blockedTime.title\n }\n return httpClient.post(`userBlockedTime/createForUser/${userId}`, body)\n }\n\n /**\n * Marks the given user an OSP Staff member\n * @param netid The netid of the User\n */\n static createOspStaff (netid: string): Promise> {\n return httpClient.post(`/user/createUser/${netid}`)\n }\n\n /**\n * Returns the availability of the given User\n * @param id The Id of the User\n */\n static getAvailability (id: number): Promise> {\n return httpClient.get(`/user/${id}/availability`)\n }\n\n /**\n * Returns all OSP Staff memebers\n */\n static getOspStaff (): Promise>> {\n return httpClient.get('/user/ospstaff')\n }\n\n /**\n * Returns the given User\n * @param id The Id of the User\n */\n static getUser (id: number): Promise> {\n return httpClient.get(`/user/${id}`)\n }\n\n /**\n * Searches users using their username\n * @param username The username to search for\n */\n static searchUser (username: string): Promise> {\n return httpClient.get(`/user/${username}/getUserFromOds`)\n }\n\n /**\n * Updates a user's availability\n * @param id The Id of the User\n * @param availability The updated Availability\n */\n static updateAvailability (id: number, availability: Array): Promise> {\n return httpClient.put(`/user/${id}/availability`, availability)\n }\n\n /**\n * Updates the given User's permissions\n * @param userId The Id of the User\n * @param permissions the set of permissions\n */\n static updateUserPermissions (userId: number, permissions: Array): Promise> {\n return httpClient.put(`/user/${userId}/setPermissions`, permissions)\n }\n\n /**\n * Removes OSP Staff status from the given user\n * @param userId The Id of the User\n */\n static removeOspStaff (userId: number): Promise> {\n return httpClient.put(`/user/${userId}/removeOspStaff`)\n }\n\n /**\n * Enable Outlook integration for given user\n * @param id The Id of the User\n * @param authCode The authentication code for the User\n */\n static enableOutlookIntegration (args: OutlookIntegration): Promise> {\n return httpClient.put(`/user/${args.id}/enableOutlook`, args)\n }\n\n /**\n * Disable Outlook integration for given user\n * @param id The Id of the User\n * @param authCode The authentication code for the User\n */\n static disableOutlookIntegration (args: OutlookIntegration): Promise> {\n return httpClient.put(`/user/${args.id}/disableOutlook`, args)\n }\n\n /**\n * Check Outlook Syncing in progress\n * @param userId The Id of the User\n * @returns value of outlook syncing field in user table\n */\n static isOutlookSyncing (userId: number): Promise> {\n return httpClient.get(`/user/${userId}/outlookSyncing`)\n }\n}\n","\n\n\n\n\n\n","\nimport { endOfDay, format, startOfDay } from 'date-fns'\nimport Litepicker from 'litepicker'\nimport { defineComponent, PropType } from 'vue'\nimport { mapGetters, mapState } from 'vuex'\nimport AppointmentService from '../common/appointmentService'\nimport AppointmentTypeService from '../common/appointmentTypeService'\nimport TimeService from '../common/timeService'\nimport Appointment from '../models/appointment'\nimport { AppointmentType, AppointmentTypeDetail } from '../models/appointmentType'\nimport AvailabilitySlot from '../models/availabilitySlot'\nimport { DynamicInput } from '../models/dynamicInput'\nimport DynamicField from '../components/DynamicField.vue'\nimport User from '../models/user'\nimport UserReassign from '../models/userReassign'\nimport AppointmentSlotSelection from './AppointmentSlotSelection.vue'\nimport { cloneDeep } from 'lodash'\nimport IntakeForm from './IntakeForm.vue'\nimport FormattedIntakeFormResponse from '../models/formattedIntakeFormResponse'\nimport addDays from 'date-fns/addDays'\nimport { propsToAttrMap } from '@vue/shared'\n\nexport default defineComponent({\n name: 'AppointmentInfoModal',\n\n props: {\n appointment: {\n type: Object as PropType,\n required: true\n },\n visible: {\n type: Boolean,\n required: true,\n default: false\n }\n },\n\n data () {\n return {\n isActive: true,\n\n // list of available reviewers\n availableReviewers: [] as Array,\n // List of appointment types\n appointmentTypes: [] as Array,\n isBeingReassigned: false,\n isBeingRescheduled: false,\n // reassign user\n reassignUser: null as unknown as User,\n // rescheduling form\n rescheduleForm: {\n step: 1,\n appointmentType: null as any,\n appointmentTypeOfferingId: 0,\n start: null as unknown as Date,\n reviewer: null as unknown as User,\n selectLeastBusyReviewer: false,\n additionalFields: [] as Array,\n intakeFormResponses: {},\n intakeFormDifferences: false,\n isActive: true\n },\n intakeForm: null as any,\n newIntakeFormResponse: { isValid: true } as unknown as FormattedIntakeFormResponse,\n isEditingAppointmentForm: false\n }\n },\n\n mounted () {\n /**\n * get all appointment types\n */\n AppointmentTypeService.getAll().then(res => {\n this.appointmentTypes = res.data.filter(at => at.isTask)\n })\n },\n\n emits: ['close', 'appointment-cancelled', 'appointment-reassigned', 'appointment-rescheduled', 'appointment-updated'],\n\n watch: {\n visible: {\n handler (app) {\n this.resetReassign()\n this.resetReschedule()\n this.availableReviewers = []\n\n if (app) {\n // this.getAvailableReviewers()\n }\n },\n immediate: true\n }\n },\n\n computed: {\n endOfDayDeadline (): Date {\n return addDays(this.appointment.reviewDeadline, 1)\n },\n\n /**\n * Sorts available reviewers by workload\n */\n sortedAvailableReviewers (): Array {\n const reviewers = cloneDeep(this.availableReviewers)\n .sort((a, b) => {\n if (a.workload > b.workload) {\n return 1\n } else if (a.workload < b.workload) {\n return -1\n } else {\n return 0\n }\n })\n\n if (this.isAdmin) {\n return reviewers\n } else {\n return reviewers.filter(r => !r.hasExternalConflicts && r.availableForSlot)\n }\n },\n\n /**\n * determines if reschedule form is valid\n */\n isRescheduleFormValid (): boolean {\n const responses = Object.values(this.rescheduleForm.intakeFormResponses)\n return responses.reduce((previous: boolean, current: any) => {\n return previous && current.valid\n }, true) as boolean\n },\n\n formattedIntakeFormResponse (): FormattedIntakeFormResponse {\n const defaultResponses = {\n pIFirstName: { value: this.appointment.piFirstName },\n pILastName: { value: this.appointment.piLastName },\n pIEmail: { value: this.appointment.piEmail },\n pIPhone: { value: this.appointment.piPhone },\n proposalNumberType: { value: this.appointment.proposalNumberType },\n proposalNumber: { value: this.appointment.proposalNumber }\n }\n\n return {\n defaultResponses: defaultResponses,\n intakeFormResponses: this.appointment.intakeFormResponse,\n additionalContacts: this.appointment.additionalContacts,\n isValid: true\n }\n },\n\n /**\n * The display value for the proposal number formatted to include the\n * proposal number type\n */\n proposalNumberDisplay (): string {\n return AppointmentService.formatProposalNumber(this.appointment)\n },\n\n ...mapState(['userId']),\n ...mapGetters(['isAdmin', 'isReviewer'])\n },\n\n methods: {\n saveIntakeForm () {\n const params = {\n intakeFormResponse: this.newIntakeFormResponse.intakeFormResponses,\n additionalContacts: this.newIntakeFormResponse.additionalContacts\n }\n\n const globalResponses = cloneDeep(Object.values(this.newIntakeFormResponse.defaultResponses))\n globalResponses.forEach(gr => {\n params[gr.id] = gr.value\n })\n\n AppointmentService.updateIntakeForm(this.appointment.id, params).then(res => {\n this.$emit('appointment-updated', res.data)\n this.isEditingAppointmentForm = false\n })\n },\n\n /**\n * Prepares the appointment intake form for editing\n */\n beginEditingIntakeForm () {\n AppointmentService.getIntakeForm(this.appointment.id).then(res => {\n this.intakeForm = res.data\n this.isEditingAppointmentForm = true\n })\n },\n\n /**\n * workload in hours conversion\n */\n workloadInHours (workload: number): string {\n const hours = Math.floor(workload / 60)\n const minutes = workload - (hours * 60)\n return `${hours > 0 ? hours : '0'}${hours === 1 ? 'hr' : 'hrs'} ${minutes}min`\n },\n\n /**\n * reschedule appointment\n */\n reschedule () {\n this.isActive = false\n const params = {} as any\n params.startTime = this.rescheduleForm.start\n\n params.reviewerId = this.rescheduleForm.reviewer.id\n params.appointmentTypeId = this.rescheduleForm.appointmentType.id\n if (this.rescheduleForm.appointmentTypeOfferingId !== 0) {\n params.appointmentTypeOfferingId = this.rescheduleForm.appointmentTypeOfferingId\n }\n\n const allFields = cloneDeep(this.appointment.intakeFormResponse)\n const newFields = cloneDeep(Object.values(this.rescheduleForm.intakeFormResponses))\n newFields.forEach((r: any) => {\n if (r.type === 'checkbox group') {\n r.value = r.value.join(', ')\n }\n allFields.push(r)\n })\n params.intakeFormResponse = allFields\n\n AppointmentService.rescheduleAppointment(this.appointment.id, params).then(res => {\n this.resetReschedule()\n this.isBeingRescheduled = false\n res.data.start = new Date(res.data.start)\n res.data.end = new Date(res.data.end)\n res.data.scheduledOn = new Date(res.data.scheduledOn)\n res.data.reviewDeadline = new Date(res.data.reviewDeadline)\n this.$emit('appointment-rescheduled', res.data)\n this.isActive = true\n })\n },\n\n /**\n * validates intake form\n */\n updateValid (val, id) {\n this.rescheduleForm.intakeFormResponses[id].valid = val\n },\n\n /**\n * build new intake form\n */\n constructNewIntakeForm (appointmentType: AppointmentTypeDetail) {\n const diff = appointmentType.currentForm.inputs.filter(input => {\n return this.appointment.intakeFormResponse.find(r => r.label === input.label) == null\n })\n\n if (diff.length === 0) {\n } else {\n this.rescheduleForm.additionalFields = diff\n const intakeFormResponse = {}\n diff.forEach((input: DynamicInput) => {\n intakeFormResponse[input.id] = {\n id: input.id,\n type: input.type,\n label: input.label,\n value: '',\n required: input.required,\n valid: false\n }\n\n if (input.type === 'radio') {\n intakeFormResponse[input.id].value = input.options[0]\n }\n\n if (input.type === 'checkbox group') {\n intakeFormResponse[input.id].value = []\n }\n })\n this.rescheduleForm.intakeFormResponses = intakeFormResponse\n this.rescheduleForm.intakeFormDifferences = true\n }\n },\n\n /**\n * selects a reviewer for rescheduled appointment\n */\n selectReschedulerReviewer (reviewer: User) {\n this.rescheduleForm.reviewer = reviewer\n\n if (this.rescheduleForm.appointmentType.isTask) {\n if (this.rescheduleForm.additionalFields.length === 0) {\n this.rescheduleForm.step = 5\n } else {\n this.rescheduleForm.step = 4\n }\n } else {\n this.rescheduleForm.step = 5\n }\n },\n\n /**\n * handle slot selection\n */\n handleSlotSelection (slot: AvailabilitySlot) {\n this.rescheduleForm.start = slot.start\n this.rescheduleForm.appointmentTypeOfferingId = slot.appointmentTypeOffering.id\n\n // REFACTOR HERE\n if (!slot.reviewer) {\n AppointmentService.reviewerAvailability(slot.appointmentTypeOffering.id, slot.start).then(res => {\n this.availableReviewers = res.data\n this.rescheduleForm.step = 3\n })\n } else {\n this.rescheduleForm.reviewer = slot.reviewer\n this.rescheduleForm.step = 5\n }\n },\n\n /**\n * reset reschedule form\n */\n resetReschedule () {\n this.rescheduleForm = {\n step: 1,\n appointmentType: null as any,\n appointmentTypeOfferingId: 0,\n start: null as unknown as Date,\n reviewer: null as unknown as User,\n additionalFields: [],\n selectLeastBusyReviewer: !this.isAdmin,\n intakeFormResponses: {} as object,\n intakeFormDifferences: false,\n isActive: true\n }\n\n this.isBeingRescheduled = false\n },\n\n /**\n * select appointment type\n */\n selectAppointmentType (appointentType: AppointmentTypeDetail) {\n this.rescheduleForm.appointmentType = appointentType\n\n if (this.appointment.appointmentType.id !== appointentType.id) {\n this.constructNewIntakeForm(appointentType)\n }\n\n if (this.rescheduleForm.appointmentType.isTask) {\n setTimeout(() => {\n const picker = new Litepicker({ element: document.querySelector('.review-date-picker'), inlineMode: true, singleMode: true, onSelect: this.handleReviewDateSelection, disableWeekends: true })\n picker.show()\n }, 0)\n }\n\n this.rescheduleForm.step = 2\n },\n\n /**\n * handle review date selection\n */\n handleReviewDateSelection (date: Date) {\n this.rescheduleForm.start = date\n if (this.isAdmin) {\n AppointmentService.reviewerAvailabilityForDate(date).then(res => {\n this.availableReviewers = res.data\n this.rescheduleForm.step = 3\n })\n } else {\n this.rescheduleForm.reviewer = this.appointment.reviewer\n this.rescheduleForm.step = 5\n }\n },\n\n /**\n * begin reassign process\n */\n beginReassign () {\n this.isBeingReassigned = true\n if (this.appointment.appointmentType.isTask) {\n AppointmentService.reviewerAvailabilityForDate(startOfDay(this.appointment.start)).then(res => {\n this.availableReviewers = res.data\n })\n } else {\n AppointmentService.reviewerAvailability(this.appointment.appointmentTypeOffering.id, this.appointment.start).then(res => {\n this.availableReviewers = res.data\n })\n // this.getAvailableReviewers =\n }\n // AppointmentService.reviewerAvailabilityForDate(this.appointment.start)\n },\n\n /**\n * cancel appointment\n */\n cancel () {\n if (window.confirm('Are you sure?')) {\n AppointmentService.cancelAppointment(this.appointment.id).then(res => {\n this.$emit('close')\n this.$emit('appointment-cancelled', this.appointment.id)\n })\n }\n },\n\n /**\n * close form\n */\n close () {\n this.isEditingAppointmentForm = false\n this.$emit('close')\n },\n\n /**\n * Formates the given number of minutes into a human readable time\n */\n formatMinutes (minutes: number): string {\n return TimeService.minutesToHoursFormatted(minutes)\n },\n\n /**\n * takes a date returns a string based on given format\n */\n formatTime (date: Date, formatString: string): string {\n return format(date, formatString)\n },\n\n /**\n * reset reassign process\n */\n resetReassign () {\n this.isBeingReassigned = false\n this.reassignUser = null as unknown as User\n },\n\n /**\n * reassign appointment\n */\n reassign () {\n this.isActive = false\n AppointmentService.reassign(this.appointment.id, this.reassignUser.id).then(res => {\n this.$emit('appointment-reassigned', res.data)\n this.isActive = true\n })\n }\n },\n\n components: {\n IntakeForm,\n DynamicField,\n AppointmentSlotSelection\n }\n})\n","import { render } from \"./AppointmentModal.vue?vue&type=template&id=7ac865c2&bindings={}\"\nimport script from \"./AppointmentModal.vue?vue&type=script&lang=ts\"\nexport * from \"./AppointmentModal.vue?vue&type=script&lang=ts\"\nscript.render = render\n\nexport default script","\nimport { Calendar, EventClickArg } from '@fullcalendar/core'\nimport dayGridPlugin from '@fullcalendar/daygrid'\nimport timeGridPlugin from '@fullcalendar/timegrid'\nimport interactionPlugin from '@fullcalendar/interaction'\nimport { defineComponent } from 'vue'\nimport AppointmentService from '../common/appointmentService'\nimport { endOfWeek, format, startOfWeek } from 'date-fns'\nimport AppointmentScheduler from '../components/AppointmentScheduler.vue'\nimport Appointment from '../models/appointment'\nimport { AppointmentType } from '../models/appointmentType'\nimport User from '../models/user'\nimport Litepicker from 'litepicker'\nimport UserService from '../common/userService'\nimport AppointmentTypeService from '../common/appointmentTypeService'\nimport AppointmentInfoModal from '../components/AppointmentModal.vue'\nimport { mapGetters, mapState } from 'vuex'\n\nexport default defineComponent({\n name: 'Calendar',\n\n data () {\n return {\n /** AppointmentType Filters */\n appointmentTypeFilters: {} as { [id: string]: boolean },\n\n /** List of appointment types */\n appointmentTypes: [] as Array,\n\n calendarInitialized: false,\n\n events: [] as Array,\n\n /** The fullcalendar object */\n calendar: null as unknown as Calendar,\n\n /** The current date of the calendar */\n currentDate: new Date(),\n\n /** Reviewer filters */\n reviewerFilters: {} as { [id: string]: boolean },\n\n /** List of users who are reviewers */\n reviewers: [] as Array,\n\n /** The appointment to show info for */\n selectedAppoiontment: null as unknown as Appointment,\n\n /** Shows or hides the appointment info modal */\n shouldShowAppointment: false,\n\n /** Shows or hides the filters pane */\n shouldShowFilters: false,\n\n /** Shows or hides the schedule form */\n shouldShowScheduleForm: false,\n\n /** Shows or hides the task pane */\n shouldShowTasks: false,\n\n /** Shows or hides the reviewer filters */\n showReviewerFilters: true,\n\n /** Shows or hides the appointment type filters */\n showAppointmentTypeFilters: true,\n\n showOutlookEvents: true,\n\n /** Shows or hides the appointment type filters */\n showOutlookEventFilters: true,\n\n /** The view mode of the calendar */\n viewMode: 'timeGridWeek'\n }\n },\n\n computed: {\n /**\n * Format calendar header based on selection month, week, or day\n */\n calendarHeader (): string {\n switch (this.viewMode) {\n case 'timeGridDay': return format(this.currentDate, 'MMM do yyyy')\n case 'timeGridWeek': return `${format(startOfWeek(this.currentDate), 'MMM do')} - ${format(endOfWeek(this.currentDate), 'MMM do')}`\n default: return format(this.currentDate, 'MMMM yyyy')\n }\n },\n\n ...mapState(['userId']),\n ...mapGetters(['isAdmin', 'isReviewer', 'isReadOnly'])\n },\n\n mounted () {\n // get reviewers and thier appoitnment type lists\n this.getReviewers().then(() => {\n this.getAppointmentTypes().then(() => {\n this.initializeCalendar()\n })\n })\n\n // calendare setup\n setTimeout(() => {\n const picker = new Litepicker({ element: document.querySelector('.mini-cal'), inlineMode: true, singleMode: true, onSelect: this.handleMiniCalSelection, disableWeekends: true })\n picker.show()\n }, 0)\n },\n\n watch: {\n appointmentTypeFilters: {\n handler () {\n this.rerender()\n },\n deep: true\n },\n\n /**\n * show Outlook events\n */\n showOutlookEvents: function () {\n this.rerender()\n },\n\n reviewerFilters: {\n handler () {\n this.rerender()\n },\n deep: true\n },\n\n /**\n * show or hide filters\n */\n shouldShowFilters: function () {\n this.calendar.render()\n },\n\n /**\n * show or hide tasks\n */\n shouldShowTasks: function () {\n this.calendar.render()\n },\n\n /**\n * calendar view mode\n */\n viewMode: function (val) {\n this.calendar.changeView(val)\n }\n },\n\n methods: {\n /**\n * remove appointment\n */\n removeAppointment (id) {\n const event = this.calendar.getEventById(String(id))\n if (event) {\n event.remove()\n }\n },\n\n /**\n * Get reviewers\n */\n getReviewers (): Promise {\n return new Promise(resolve => {\n UserService.getOspStaff().then(res => {\n this.reviewers = res.data.filter(u => u.permissions.find(p => p.code === 'REVU') != null)\n\n this.reviewers.forEach(r => {\n this.reviewerFilters[r.id] = (!(this.isAdmin || this.isReadOnly) && this.isReviewer) ? r.id === this.userId : true\n })\n\n resolve(true)\n })\n })\n },\n\n /**\n * Get appointment types\n */\n getAppointmentTypes (): Promise {\n return new Promise(resolve => {\n AppointmentTypeService.getAll().then(res => {\n this.appointmentTypes = res.data\n this.appointmentTypes.forEach(at => {\n this.appointmentTypeFilters[at.id] = true\n })\n resolve(true)\n })\n })\n },\n\n /**\n * handle changing start for calendar\n */\n handleMiniCalSelection (start) {\n this.calendar.gotoDate(start)\n },\n\n /**\n * handle rescheduling appointment\n */\n handleReschedule (appointment: Appointment) {\n const st = this.calendar.currentData.viewApi.activeStart\n const et = this.calendar.currentData.viewApi.activeEnd\n this.fetchEvents({ start: st, end: et })\n // const event = this.calendar.getEventById(String(appointment.id))\n // if (event) {\n // event.remove()\n // const calEvent = {\n // start: appointment.start,\n // end: appointment.end,\n // appointment: appointment,\n // type: 'Osp',\n // allDay: appointment.appointmentType.isTask\n // }\n\n // const fcEvent = this.toFcEvent(calEvent)\n // this.calendar.addEvent(fcEvent)\n // }\n\n this.selectedAppoiontment = appointment\n },\n\n /**\n * rebuild calendar view\n */\n rerender () {\n if (!this.calendarInitialized) {\n return\n }\n this.calendar.batchRendering(() => {\n this.calendar.removeAllEvents()\n })\n this.calendar.batchRendering(() => {\n this.events.forEach(e => {\n if (this.filterEvents(e)) {\n this.calendar.addEvent(e)\n }\n })\n })\n },\n\n handleUpdated (appointment: Appointment) {\n const event = this.calendar.getEventById(String(appointment.id))\n if (event) {\n event.setExtendedProp('proposalNumber', appointment.proposalNumber)\n event.setExtendedProp('piFirstName', appointment.piFirstName)\n event.setExtendedProp('piLastName', appointment.piLastName)\n event.setExtendedProp('piPhone', appointment.piPhone)\n event.setExtendedProp('piEmail', appointment.piEmail)\n event.setExtendedProp('additionalContacts', appointment.additionalContacts)\n event.setExtendedProp('intakeFormResponse', appointment.intakeFormResponse)\n event.setExtendedProp('proposalNumberType', appointment.proposalNumberType)\n\n this.selectedAppoiontment = event.extendedProps as Appointment\n }\n },\n\n /**\n * handle reassigning appointment\n */\n handleReassign (appointment: Appointment) {\n const event = this.calendar.getEventById(String(appointment.id))\n if (event) {\n event.setExtendedProp('reviewer', appointment.reviewer)\n }\n\n this.shouldShowAppointment = false\n },\n\n /**\n * handle scheduling an appointment\n */\n handleScheduled () {\n setTimeout(() => {\n this.shouldShowScheduleForm = false\n const st = this.calendar.currentData.viewApi.activeStart\n const et = this.calendar.currentData.viewApi.activeEnd\n this.fetchEvents({ start: st, end: et })\n }, 1000)\n },\n\n /**\n * filter view\n */\n filterEvents (event): boolean {\n if (event.extendedProps.type === 'Osp') {\n const ospEvent = event.extendedProps as Appointment\n\n if (this.reviewerFilters[ospEvent.reviewer.id] === false) {\n return false\n }\n\n if (this.appointmentTypeFilters[ospEvent.appointmentType.id] === false) {\n return false\n }\n } else if (event.extendedProps.type === 'External') {\n if (!this.showOutlookEvents) {\n return false\n }\n\n if (this.reviewerFilters[event.extendedProps.reviewer.id] === false) {\n return false\n }\n } else if (event.extendedProps.type === 'BlockedTime') {\n if (this.reviewerFilters[event.extendedProps.user.id] === false) {\n return false\n }\n }\n\n return true\n },\n\n /**\n * Construct an event\n */\n constructEvent (arg) {\n if (arg.event.extendedProps.type === 'Osp') {\n const ospEvent = arg.event.extendedProps as Appointment\n\n const el = document.createElement('div')\n el.classList.add('osp-event')\n el.style.background = ospEvent.appointmentType.color + '33'\n el.style.color = ospEvent.appointmentType.color\n el.style.borderColor = ospEvent.appointmentType.color\n\n const nameEl = document.createElement('div')\n nameEl.classList.add('pi-name')\n nameEl.innerHTML = `${ospEvent.piFirstName} ${ospEvent.piLastName}`\n el.appendChild(nameEl)\n\n const cayuse = document.createElement('div')\n cayuse.classList.add('cayuse-num')\n\n let type: string\n switch (ospEvent.proposalNumberType) {\n case 'ProposalDevelopment': type = 'PD'; break\n case 'QuickProposal': type = 'QP'; break\n default: type = 'Cayuse'\n }\n\n cayuse.innerHTML = `${type}: ${ospEvent.proposalNumber}`\n el.appendChild(cayuse)\n\n if (this.isAdmin) {\n const reviewerEl = document.createElement('div')\n reviewerEl.classList.add('reviewer-info')\n reviewerEl.innerHTML = `Reviewer: ${ospEvent.reviewer.firstName} ${ospEvent.reviewer.lastName}`\n el.appendChild(reviewerEl)\n }\n\n return { domNodes: [el] }\n } else if (arg.event.extendedProps.type === 'External') {\n const el = document.createElement('div')\n el.classList.add('external-event')\n if (arg.event.extendedProps.busy) {\n el.classList.add('busy')\n }\n\n const titleEl = document.createElement('div')\n titleEl.classList.add('title')\n titleEl.innerHTML = arg.event.extendedProps.title ? arg.event.extendedProps.title : 'External Event'\n el.appendChild(titleEl)\n\n const reviewerEl = document.createElement('div')\n reviewerEl.classList.add('reviewer-name')\n reviewerEl.innerHTML = `${arg.event.extendedProps.reviewer.firstName} ${arg.event.extendedProps.reviewer.lastName}`\n el.appendChild(reviewerEl)\n\n return { domNodes: [el] }\n } else if (arg.event.extendedProps.type === 'BlockedTime') {\n const el = document.createElement('div')\n el.classList.add('blocked-time')\n el.innerHTML = `Blocked Time for ${arg.event.extendedProps.user.firstName} ${arg.event.extendedProps.user.lastName} : ${arg.event.extendedProps.title}`\n\n return { domNodes: [el] }\n }\n },\n\n /**\n * Creates the fullcalendar object and renders the calendar\n */\n initializeCalendar () {\n const calendarElement = document.querySelector('.fullcalendar') as HTMLElement\n this.calendar = new Calendar(calendarElement, {\n allDayText: 'All Day',\n height: '100%',\n weekends: false,\n allDaySlot: true,\n editable: false,\n headerToolbar: false,\n plugins: [dayGridPlugin, timeGridPlugin, interactionPlugin],\n slotDuration: '00:30:00',\n slotMinTime: '06:00:00',\n slotMaxTime: '18:00:00',\n slotEventOverlap: false,\n eventClick: this.handleEventClick,\n datesSet: (arg) => {\n this.fetchEvents(arg)\n this.currentDate = this.calendar.getDate()\n },\n eventContent: this.constructEvent\n })\n\n // if (this.isAdmin) {\n // this.viewMode = 'timeGridWeek'\n // }\n\n this.calendar.changeView(this.viewMode)\n\n this.calendar.render()\n },\n\n /**\n * Get events for given date range\n */\n fetchEvents (dates) {\n AppointmentService.getAll(dates.start, dates.end).then(res => {\n const events = [] as Array\n this.events = []\n res.data.forEach((event: any) => {\n const fcEvent = this.toFcEvent(event)\n\n this.events.push(fcEvent)\n\n if (this.filterEvents(fcEvent)) {\n events.push(fcEvent)\n }\n })\n this.calendarInitialized = true\n this.rerender()\n })\n },\n\n /**\n * format date time\n */\n formatTime (date: Date, formatString: string): string {\n return format(date, formatString)\n },\n\n /**\n * handle the click event\n */\n handleEventClick (eventInfo: EventClickArg) {\n if (eventInfo.event.extendedProps.type !== 'Osp') {\n return\n }\n\n this.selectedAppoiontment = eventInfo.event.extendedProps as Appointment\n this.shouldShowAppointment = true\n },\n\n /**\n * To FC event\n */\n toFcEvent (app: any): object {\n const fcEvent = {\n start: new Date(app.start),\n end: new Date(app.end),\n allDay: app.allDay\n } as any\n\n if (app.type === 'Osp') {\n app.appointment.start = new Date(app.appointment.start)\n app.appointment.end = new Date(app.appointment.end)\n app.appointment.reviewDeadline = new Date(app.appointment.reviewDeadline)\n app.appointment.scheduledOn = new Date(app.appointment.scheduledOn)\n fcEvent.extendedProps = app.appointment\n fcEvent.extendedProps.type = 'Osp'\n fcEvent.id = app.appointment.id\n } else if (app.type === 'External') {\n app.externalAppointment.start = new Date(app.externalAppointment.start)\n app.externalAppointment.end = new Date(app.externalAppointment.end)\n fcEvent.extendedProps = app.externalAppointment\n fcEvent.extendedProps.type = 'External'\n } else if (app.type === 'BlockedTime') {\n app.blockedTime.startTime = new Date(app.blockedTime.startTime)\n app.blockedTime.endTime = new Date(app.blockedTime.endTime)\n fcEvent.extendedProps = app.blockedTime\n fcEvent.extendedProps.type = 'BlockedTime'\n }\n\n return fcEvent\n },\n\n viewRendered (what) {\n console.log('what')\n },\n\n /**\n * get next calendar period\n */\n next () {\n this.calendar.next()\n },\n\n /**\n * get previous calendar period\n */\n prev () {\n this.calendar.prev()\n }\n },\n\n components: {\n AppointmentScheduler,\n AppointmentInfoModal\n }\n})\n","import { render } from \"./Calendar.vue?vue&type=template&id=f3341dba&bindings={}\"\nimport script from \"./Calendar.vue?vue&type=script&lang=ts\"\nexport * from \"./Calendar.vue?vue&type=script&lang=ts\"\nscript.render = render\n\nexport default script","\n\n\n\n\n\n","\nimport { format } from 'date-fns'\nimport { defineComponent, PropType } from 'vue'\nimport { mapState } from 'vuex'\nimport AppointmentService from '../common/appointmentService'\nimport AppointmentScheduler from '../components/AppointmentScheduler.vue'\nimport Appointment from '../models/appointment'\n\nimport addDays from 'date-fns/addDays'\nimport AvailabilitySlot from '../models/availabilitySlot'\nimport AppointmentSlotSelection from '../components/AppointmentSlotSelection.vue'\nimport { cloneDeep } from 'lodash'\nimport UserReassign from '../models/userReassign'\nimport { AxiosError } from 'axios'\nimport { ProposalNumberType } from '../models/proposalType'\n\nexport default defineComponent({\n name: 'Schedule',\n\n props: {\n appointment: {\n type: Object as PropType,\n required: true\n },\n visible: {\n type: Boolean,\n required: true,\n default: false\n }\n },\n\n data () {\n return {\n isActive: true,\n\n /** List of scheduled appointments for the current user */\n appointments: [] as Array,\n selectedAppointment: null as unknown as Appointment,\n reviewDeadline: null as unknown as Date,\n shouldShowRescheduler: false,\n\n availableReviewers: [] as Array,\n /** Indicates if the scheduler interface should be shown */\n shouldShowScheduler: false\n }\n },\n\n computed: {\n ...mapState(['userId']),\n\n /**\n * Sorts available reviewers by workload\n */\n sortedAvailableReviewers (): Array {\n const reviewers = cloneDeep(this.availableReviewers)\n .sort((a, b) => {\n if (a.workload > b.workload) {\n return 1\n } else if (a.workload < b.workload) {\n return -1\n } else {\n return 0\n }\n })\n\n return reviewers.filter(r => !r.hasExternalConflicts && r.availableForSlot)\n }\n },\n\n watch: {\n userId: {\n handler () {\n this.getAppointments()\n },\n immediate: true\n }\n },\n\n methods: {\n /**\n * The display value for the proposal number formatted to include the\n * proposal number type\n */\n proposalNumberDisplay (appointment: Appointment): string {\n return AppointmentService.formatProposalNumber(appointment)\n },\n\n /**\n * Sorts the current list of appointments\n */\n sortedAppointments (): Array {\n const appointments = cloneDeep(this.appointments)\n .sort((a, b) => {\n if (a.start > b.start) {\n return 1\n } else if (a.start < b.start) {\n return -1\n } else {\n return 0\n }\n })\n\n return appointments\n },\n\n /**\n * Add one to the date, without time it will change it to midnight of the review deadline\n */\n endOfDayDeadline (): Date {\n this.reviewDeadline = addDays(new Date(this.selectedAppointment.reviewDeadline), 1)\n return this.reviewDeadline\n },\n\n /**\n * Handles an appointment being scheduled\n */\n handleScheduled () {\n setTimeout(() => {\n this.shouldShowScheduler = false\n this.getAppointments()\n }, 3000)\n },\n\n /**\n * get appointments for the date range\n */\n getAppointments () {\n AppointmentService.getForProjectUser(this.userId, true).then(res => {\n res.data.forEach(app => {\n app.start = new Date(app.start)\n app.end = new Date(app.end)\n })\n this.appointments = res.data\n })\n },\n\n /**\n * Formats the given date in the specified format\n */\n formatTime (date: Date, formatString: string): string {\n return format(date, formatString)\n },\n\n formatProposalType (proposalType: ProposalNumberType): string {\n return proposalType === 'QuickProposal' ? 'QP-' : 'PD-'\n },\n\n /**\n * Cancel selected appointment\n * @param appointemntId\n */\n cancelAppointment (appointemntId: number) {\n if (confirm('Are you sure you want to cancel this appointment?')) {\n AppointmentService.cancelAppointment(appointemntId).then(() => {\n const ind = this.appointments.findIndex(app => app.id === appointemntId)\n this.appointments.splice(ind, 1)\n })\n }\n },\n\n /**\n * Reschedule selected appointment to another slot\n * @param appointmentId\n */\n rescheduleAppointment (appointmentId: number) {\n const appt = this.appointments.find(app => app.id === appointmentId)\n this.selectedAppointment = appt as Appointment\n this.shouldShowRescheduler = true\n },\n\n /**\n * reset reschedule form\n */\n resetReschedule () {\n this.shouldShowRescheduler = false\n },\n\n /**\n * Once a new slot is selected for rescheduling, this will be executed\n * @param slot\n */\n handleSlotSelection (slot: AvailabilitySlot) {\n if (confirm('Are you sure you want to reschedule this appointment until ' + slot.start.toLocaleString() + '?')) {\n const params = {} as any\n // const reviewers = this.getReviewerForReschedule(slot)\n // if (reviewers.length > 0) {\n // params.reviewerId = reviewers[0].id\n // } else {\n // params.reviewerId = 0\n // }\n\n params.startTime = slot.start\n params.appointmentTypeId = slot.appointmentType.id\n\n if (this.selectedAppointment.appointmentTypeOffering.id !== 0) {\n params.appointmentTypeOfferingId = this.selectedAppointment.appointmentTypeOffering.id\n }\n const allFields = cloneDeep(this.selectedAppointment.intakeFormResponse)\n params.intakeFormResponse = allFields\n\n AppointmentService.rescheduleAppointment(this.selectedAppointment.id, params, false).then(res => {\n this.resetReschedule()\n this.shouldShowRescheduler = false\n res.data.start = new Date(res.data.start)\n res.data.end = new Date(res.data.end)\n res.data.scheduledOn = new Date(res.data.scheduledOn)\n res.data.reviewDeadline = new Date(res.data.reviewDeadline)\n const ind = this.appointments.findIndex(app => app.id === this.selectedAppointment.id)\n this.appointments.splice(ind, 1, res.data)\n this.isActive = true\n }).catch((err: AxiosError) => {\n if (err.response?.status === 409) {\n alert('No longer available.')\n }\n })\n }\n this.appointments = this.sortedAppointments()\n }\n\n // getReviewerForReschedule (slot: AvailabilitySlot): Array {\n // AppointmentService.reviewerAvailability(slot.appointmentTypeOffering.id, slot.start).then(rev => {\n // this.availableReviewers = rev.data\n // })\n\n // this.availableReviewers.forEach(rev => {\n // if (rev.hasExternalConflicts || !rev.availableForSlot) {\n // const ind = this.availableReviewers.findIndex(ar => ar.id === rev.id)\n // this.availableReviewers.splice(ind, 1)\n // }\n // })\n\n // return this.sortedAvailableReviewers\n // }\n },\n\n components: {\n AppointmentScheduler,\n AppointmentSlotSelection\n }\n})\n","import { render } from \"./Schedule.vue?vue&type=template&id=ac4ca758&bindings={}\"\nimport script from \"./Schedule.vue?vue&type=script&lang=ts\"\nexport * from \"./Schedule.vue?vue&type=script&lang=ts\"\nscript.render = render\n\nexport default script","\n\n\n\n\n\n\n\n","\n\n\n\n\n\n\n\n","import { render } from \"./Navigation.vue?vue&type=template&id=f2440baa&scoped=true&bindings={}\"\nimport script from \"./Navigation.vue?vue&type=script&lang=js\"\nexport * from \"./Navigation.vue?vue&type=script&lang=js\"\n\nimport \"./Navigation.vue?vue&type=style&index=0&id=f2440baa&scoped=true&lang=css\"\nscript.render = render\nscript.__scopeId = \"data-v-f2440baa\"\n\nexport default script","\nimport { defineComponent } from 'vue'\nimport { mapGetters } from 'vuex'\nimport SessionService from './common/sessionService'\nimport Header from './components/Navigation.vue'\nconst gracePeriod = 60000\n\nexport default defineComponent({\n name: 'App',\n\n data () {\n return {\n warningTimer: null as unknown as number,\n finalTimer: null as unknown as number,\n showExpirationWarning: false,\n timeToSessionExpiration: 0\n }\n },\n\n computed: {\n ...mapGetters(['sessionExpiration'])\n },\n\n watch: {\n /**\n * Update the timer whenever the session expiration changes\n */\n sessionExpiration: {\n handler: function (val) {\n if (val) {\n this.startSessionTimer()\n }\n },\n immediate: true\n }\n },\n\n methods: {\n /**\n * Shows a window to the user with a chance to stay logged in, or logs them out automatically\n * if they do not respond\n */\n beginFinalTimer (sessionExpiration: number) {\n this.showExpirationWarning = true\n\n this.finalTimer = setInterval(() => {\n this.timeToSessionExpiration = Math.round((sessionExpiration - Date.now()) / 1000)\n if (this.timeToSessionExpiration <= 0) {\n this.clearTimers()\n SessionService.logOut()\n }\n }, 500)\n },\n\n /**\n * Clears any current timers\n */\n clearTimers () {\n this.showExpirationWarning = false\n clearInterval(this.finalTimer)\n clearTimeout(this.warningTimer)\n this.finalTimer = 0\n this.warningTimer = 0\n },\n\n /**\n * Logs the user out\n */\n logOut () {\n SessionService.logOut()\n },\n\n /**\n * Keeps the user logged in\n */\n refreshSession () {\n SessionService.initializeSession()\n },\n\n /**\n * Begins a timer to show the user a warning before they are automatically logged out\n */\n startSessionTimer () {\n this.clearTimers()\n\n const timetoExpiration = this.sessionExpiration - Date.now()\n\n if (timetoExpiration >= gracePeriod) {\n this.warningTimer = setTimeout(() => {\n this.beginFinalTimer(this.sessionExpiration)\n }, timetoExpiration - gracePeriod)\n } else {\n this.beginFinalTimer(this.sessionExpiration)\n }\n }\n },\n\n components: {\n navHeader: Header\n }\n})\n","import { render } from \"./App.vue?vue&type=template&id=03a2eb2c&bindings={}\"\nimport script from \"./App.vue?vue&type=script&lang=ts\"\nexport * from \"./App.vue?vue&type=script&lang=ts\"\n\nimport \"./App.vue?vue&type=style&index=0&lang=scss\"\nscript.render = render\n\nexport default script","\n\n\n\n\n\n","\n\n\n\n\n\n","\nimport iro from '@jaames/iro'\nimport { defineComponent, PropType } from 'vue'\nimport AppointmentTypeService from '../common/appointmentTypeService'\nimport { AppointmentType } from '../models/appointmentType'\n\nexport default defineComponent({\n name: 'AppointmentTypeForm',\n\n props: {\n /** The appointment type to edit */\n appointmentType: {\n type: Object as PropType,\n required: false\n },\n\n /** is appointment type being edited */\n editing: {\n type: Boolean,\n default: false,\n required: false\n },\n\n /** Indicates if the modal is visible or not */\n visible: {\n type: Boolean,\n required: true,\n default: false\n }\n },\n\n data () {\n return {\n /** The working copy of the appointment type to edit/create */\n editForm: {} as AppointmentType\n }\n },\n\n computed: {\n /** Indicaves if a type is being edited or created */\n isEditing (): boolean {\n return this.appointmentType !== null\n },\n\n /** indicates if appointment type is valid */\n isValid (): boolean {\n if (!this.visible) {\n return false\n }\n\n if (this.editForm.name === '' || this.editForm.description === '' || this.editForm.duration === 0 || (this.editForm.duration as any) === '') {\n return false\n }\n\n return true\n }\n },\n\n watch: {\n visible: {\n handler (val) {\n if (!val) {\n return\n }\n\n this.resetForm()\n\n setTimeout(() => {\n const colorPicker = iro.ColorPicker('#color-picker', {\n width: 120,\n color: this.appointmentType ? this.appointmentType.color : '#CCC'\n })\n\n colorPicker.on(['color:init', 'color:change'], this.setColor)\n }, 0)\n }\n }\n },\n\n emits: ['close', 'updated'],\n\n methods: {\n /**\n * Emits an event to close the modal\n */\n close () {\n this.$emit('close')\n },\n\n /**\n * Creates a new AppoiontmentType\n */\n createAppointmentType () {\n AppointmentTypeService.create(this.editForm).then(res => {\n this.$emit('updated', res.data)\n })\n },\n\n /**\n * Updates the appointment types's general info\n */\n editAppointmentType () {\n AppointmentTypeService.update(this.editForm).then(res => {\n this.$emit('updated', res.data)\n })\n },\n\n /**\n * Resets the edit form to default values\n */\n resetForm () {\n this.editForm = {\n id: this.appointmentType ? this.appointmentType.id : 0,\n name: this.appointmentType ? this.appointmentType.name : '',\n description: this.appointmentType ? this.appointmentType.description : '',\n duration: this.appointmentType ? this.appointmentType.duration : 60,\n public: this.appointmentType ? this.appointmentType.public : false,\n isTask: this.appointmentType ? this.appointmentType.isTask : false,\n removed: this.appointmentType ? this.appointmentType.removed : false,\n color: this.appointmentType ? this.appointmentType.color : ''\n }\n },\n\n /**\n * Sets the edif form's color field with the given color\n * @param color: The color object from iro picker\n */\n setColor (color) {\n this.editForm.color = color.hexString\n }\n }\n})\n","import { render } from \"./AppointmentTypeForm.vue?vue&type=template&id=6c6e90d7&bindings={}\"\nimport script from \"./AppointmentTypeForm.vue?vue&type=script&lang=ts\"\nexport * from \"./AppointmentTypeForm.vue?vue&type=script&lang=ts\"\nscript.render = render\n\nexport default script","\nimport { defineComponent } from 'vue'\nimport appointmentTypeService from '../common/appointmentTypeService'\nimport TimeService from '../common/timeService'\nimport { AppointmentType } from '../models/appointmentType'\nimport AppointmentTypeForm from '../components/AppointmentTypeForm.vue'\n\nexport default defineComponent({\n name: 'AppointmentTypesList',\n\n data () {\n return {\n /** AppointmentType Form Info */\n appointmentForm: null as unknown as AppointmentType,\n\n /** List of AppoointmentTypes */\n appointmentTypes: [] as Array,\n\n /** Indicator to show the appointment form */\n shouldShowAppointmentForm: false,\n\n shouldRestoreType: false\n }\n },\n\n mounted () {\n // Fetch appointment types\n appointmentTypeService.getAll().then(res => {\n this.appointmentTypes = res.data\n })\n },\n\n computed: {\n // returns list of appointment types removed\n appointmentTypesRemoved: function (): Array {\n return this.appointmentTypes.filter(type => type.removed)\n },\n\n // returns list of appointment types still active\n appointmentTypesActive: function (): Array {\n return this.appointmentTypes.filter(type => !type.removed)\n }\n },\n\n methods: {\n /**\n * Creates a new AppoiontmentType\n */\n handleAppointmentTypeCreated (appointmentType: AppointmentType) {\n this.appointmentTypes.push(appointmentType)\n this.shouldShowAppointmentForm = false\n appointmentType.removed = false\n this.$router.push(`/appointment-types/${appointmentType.id}`)\n },\n\n /**\n * Returns the given duration of time in hours\n * @params minutes: Number of minutes\n */\n formatMinutes (minutes: number): string {\n return TimeService.minutesToHoursFormatted(minutes)\n },\n\n /**\n * Resets the new AppointmentType form data and shows the form\n */\n showAppointmentForm () {\n this.appointmentForm = {\n id: 0,\n name: '',\n description: '',\n duration: 60,\n public: true,\n isTask: false,\n removed: false,\n color: '#CCCCCC'\n }\n\n this.shouldShowAppointmentForm = true\n },\n\n /**\n * Show dropdown list of removed appointments\n */\n showRestoreAppointmentForm () {\n this.shouldRestoreType = true\n },\n\n /**\n * Restore appointment type that was removed\n */\n restoreAppointmentType (id: number) {\n if (window.confirm('Are you sure you want to Restore?')) {\n appointmentTypeService.restoreType(id).then(res => {\n this.appointmentTypes.push(res.data)\n })\n }\n this.shouldRestoreType = false\n },\n\n /**\n * Removes the given appointment type\n * @param: The offering\n */\n removeType (id: number) {\n if (window.confirm('Are you sure you want to Remove?')) {\n appointmentTypeService.removeType(id).then(res => {\n const ind = this.appointmentTypes.findIndex(at => at.id === id)\n if (ind !== -1) {\n this.appointmentTypes.splice(ind, 1)\n }\n })\n }\n }\n },\n\n components: {\n AppointmentTypeForm\n }\n})\n","import { render } from \"./AppointmentTypes.vue?vue&type=template&id=0e2240e0&bindings={}\"\nimport script from \"./AppointmentTypes.vue?vue&type=script&lang=ts\"\nexport * from \"./AppointmentTypes.vue?vue&type=script&lang=ts\"\nscript.render = render\n\nexport default script","\n\n\n\n\n\n","\n\n\n\n\n\n","\nimport { cloneDeep } from 'lodash'\nimport { defineComponent, PropType } from 'vue'\nimport appointmentTypeService from '../common/appointmentTypeService'\nimport { DynamicInput } from '../models/dynamicInput'\nimport DynamicField from '../components/DynamicField.vue'\nimport IntakeForm from '../models/intakeForm'\nimport UserService from '../common/userService'\nimport User from '../models/user'\n\nexport default defineComponent({\n name: 'IntakeFormEditor',\n\n props: {\n /** The id of the AppointmentType the form belongs to */\n appointmentTypeId: {\n type: Number,\n required: true\n },\n\n /** The inputs of the intake form */\n intakeForm: {\n type: Object as PropType,\n required: true\n },\n\n /** Indicator to show or hide the editor */\n visible: {\n type: Boolean,\n required: true,\n default: false\n }\n },\n\n emits: ['close', 'form-updated'],\n\n data () {\n return {\n isActive: true,\n\n /** Indicator to show form to add new field */\n addingNewField: false,\n\n /** Indicates that a field is being dragged */\n dragging: false,\n\n /** Indicator to show field editor */\n editingField: false,\n\n /** The field to edit */\n fieldToEdit: null as unknown as DynamicInput,\n\n /** Types of input */\n fieldTypes: ['text', 'email', 'phone', 'radio', 'checkbox', 'checkbox group', 'textbox'],\n\n /** The new field to be added */\n newFieldForm: { label: '', type: '', options: '', description: '', required: true, emailSupervisorIfChecked: false, usersToEmail: [] as Array },\n\n /** Indicator to show preview */\n previewing: false,\n\n /** Object to contain preview responses */\n previewForm: {},\n\n /** List of OSP Staff */\n staff: [] as Array,\n\n tempUser: null as null | number,\n\n /** Copy of the description */\n workingDescription: '',\n\n /** The copy of the inputs to edit */\n workingForm: [] as Array\n }\n },\n\n watch: {\n // When the inputs change, update the copy to edit\n intakeForm: {\n handler (newForm: IntakeForm) {\n this.workingForm = cloneDeep(newForm.inputs)\n this.workingDescription = newForm.description\n },\n deep: true,\n immediate: true\n }\n },\n\n computed: {\n /** returns sorted working form */\n sortedWorkingForm (): Array {\n return cloneDeep(this.workingForm).sort((a, b) => {\n return a.order > b.order ? 1 : -1\n })\n }\n },\n\n mounted () {\n UserService.getOspStaff().then(res => {\n this.staff = res.data\n })\n },\n\n methods: {\n /**\n * remove user from email\n */\n removeUserFromEmail (list: Array, id: number) {\n const ind = list.findIndex(x => x === id)\n list.splice(ind, 1)\n },\n\n /**\n * Adds a new field to the list of inputs\n */\n addField () {\n this.isActive = false\n const newField = {\n id: 'a' + Math.random().toString().substring(2, 7),\n label: this.newFieldForm.label,\n type: this.newFieldForm.type,\n required: this.newFieldForm.required,\n description: this.newFieldForm.description,\n order: this.workingForm.length,\n options: [],\n emailSupervisorIfChecked: this.newFieldForm.emailSupervisorIfChecked,\n usersToEmail: this.newFieldForm.usersToEmail\n } as DynamicInput\n if (this.newFieldForm.type === 'radio' || this.newFieldForm.type === 'checkbox group') {\n newField.options = this.newFieldForm.options.split(/\\s*(,|;)\\s*/).filter(x => x !== ',')\n }\n\n this.workingForm.push(newField)\n this.addingNewField = false\n this.isActive = true\n },\n\n /**\n * add email to checkbox\n */\n addEmailToCheckboxField (field, id: number) {\n field.usersToEmail.push(id)\n this.tempUser = id\n setTimeout(() => {\n this.tempUser = null\n }, 0)\n },\n\n /**\n * Allows a field to be dragged\n */\n allowDrag (event: MouseEvent) {\n const target = event.target as HTMLElement\n const fieldEl = target.parentElement?.parentElement\n if (fieldEl) {\n fieldEl.setAttribute('draggable', 'true')\n }\n },\n\n /**\n * Resets the data for a new input and displays the form to define a new input\n */\n beginAddingField () {\n this.newFieldForm = {\n label: '',\n type: 'text',\n options: '',\n description: '',\n required: true,\n emailSupervisorIfChecked: false,\n usersToEmail: []\n }\n\n this.addingNewField = true\n\n const modalContent = (this.$el as HTMLElement).querySelector('.field-list')\n setTimeout(() => {\n if (modalContent) {\n modalContent.scrollTop = modalContent.scrollHeight\n }\n }, 0)\n },\n\n /**\n * Resets the edited field and shows the editor\n */\n beginEditingField (field: DynamicInput) {\n this.fieldToEdit = cloneDeep(field)\n this.editingField = true\n },\n\n /**\n * Saves the edit of a field\n */\n editField () {\n const currentField = this.workingForm.find(i => i.id === this.fieldToEdit.id)\n this.isActive = false\n if (currentField) {\n Object.assign(currentField, this.fieldToEdit)\n }\n this.editingField = false\n this.isActive = true\n },\n\n /**\n * Handles the end of a field being dragged\n */\n endDrag (event: MouseEvent, field: DynamicInput) {\n const target = event.target as HTMLElement\n target.classList.remove('dragging')\n\n // Perform reorder here somehow\n this.reorder()\n\n this.dragging = false\n },\n\n /**\n * Get staff from list given an id\n * @param id: The id of the staff\n */\n getUserFromId (id: number): User {\n return this.staff.find(u => u.id === id) as User\n },\n\n /**\n * Handles a field being dragged over\n */\n onDragOver (event: MouseEvent) {\n event.preventDefault()\n const container = document.querySelector('.field-list') as HTMLElement\n\n const draggableElements = [...document.querySelectorAll('.field-listing:not(.dragging)')]\n\n const afterElement = draggableElements.reduce((closest: any, child: any) => {\n const box = child.getBoundingClientRect()\n const offset = event.clientY - box.top - box.height / 2\n if (offset < 0 && offset > closest.offset) {\n return { offset: offset, element: child }\n } else {\n return closest\n }\n }, { offset: Number.NEGATIVE_INFINITY, element: null }).element\n\n const draggable = document.querySelector('.dragging') as HTMLElement\n\n if (afterElement == null) {\n container.appendChild(draggable)\n } else {\n container.insertBefore(draggable, afterElement)\n }\n },\n\n /**\n * Handes the start of a field being dragged\n */\n startDrag (event: MouseEvent) {\n const target = event.target as HTMLElement\n target.classList.add('dragging')\n this.dragging = true\n },\n\n /**\n * Returns an icon to represent the given input type\n * @param type: The input's type\n */\n typeIcon (type: string) {\n switch (type) {\n case 'text': return 'fal fa-text'\n case 'email': return 'fal fa-envelope'\n case 'phone': return 'fal fa-phone'\n case 'radio': return 'fal fa-circle'\n case 'checkbox': return 'fal fa-check-square'\n case 'checkbox group': return 'fal fa-check-double'\n case 'textbox': return 'fal fa-comment-alt'\n }\n },\n\n /**\n * Removes the given input\n * @param: The id of the input to remove\n */\n remove (id: string) {\n if (window.confirm('Are you sure?')) {\n const index = this.workingForm.findIndex(f => f.id === id)\n this.workingForm.splice(index, 1)\n }\n },\n\n /**\n * Sets the order of the fields based on current placement\n */\n reorder () {\n const listings = document.querySelectorAll('.field-listing')\n let place = 0\n listings.forEach(listingEl => {\n const fieldId = listingEl.getAttribute('field-id')\n const field = this.workingForm.find(f => f.id === fieldId)\n if (field) {\n field.order = place\n }\n place += 1\n })\n },\n\n /**\n * Resets the edited copy to be the current copy and emits event to close\n * the form\n */\n reset () {\n this.workingForm = cloneDeep(this.intakeForm.inputs)\n this.$emit('close')\n },\n\n /**\n * Makes a request to save the current copy and emits an event that the inputs\n * have been updated\n */\n save () {\n // Ensure correct order\n this.reorder()\n\n const formCopy = cloneDeep(this.intakeForm)\n formCopy.description = this.workingDescription\n formCopy.inputs = this.workingForm\n\n appointmentTypeService.updateIntakeForm(this.appointmentTypeId, formCopy).then(res => {\n this.$emit('form-updated', res.data)\n })\n },\n\n /**\n * Shows a preview of the current form\n */\n showPreview () {\n const previewForm = {}\n this.workingForm.forEach(w => {\n if (w.type === 'checkbox group') {\n previewForm[w.label] = []\n } else {\n previewForm[w.label] = ''\n }\n })\n this.previewForm = previewForm\n this.previewing = true\n }\n },\n\n components: {\n DynamicField\n }\n})\n","import { render } from \"./IntakeFormEditor.vue?vue&type=template&id=50ec9dcc&bindings={}\"\nimport script from \"./IntakeFormEditor.vue?vue&type=script&lang=ts\"\nexport * from \"./IntakeFormEditor.vue?vue&type=script&lang=ts\"\nscript.render = render\n\nexport default script","// Institute of Design and Innovation (email idi@unm.edu). //\n\nimport Quill from 'quill/core'\n\nimport Toolbar from 'quill/modules/toolbar'\nimport Snow from 'quill/themes/snow'\n\nimport Bold from 'quill/formats/bold'\nimport Italic from 'quill/formats/italic'\nimport List, { ListItem } from 'quill/formats/list'\nimport Underline from 'quill/formats/underline'\nimport BlockBlot from 'quill/blots/block'\nimport Link from 'quill/formats/link'\nBlockBlot.tagName = 'DIV'\n\n/**\n * Register Quill object\n */\nQuill.register({\n 'modules/toolbar': Toolbar,\n 'themes/snow': Snow,\n 'formats/bold': Bold,\n 'formats/italic': Italic,\n 'formats/list': List,\n 'formats/list-item': ListItem,\n 'formats/underline': Underline,\n 'formats/link': Link,\n 'blots/block': BlockBlot\n})\n\nexport default Quill\n","\nimport { defineComponent } from 'vue'\nimport { format } from 'date-fns'\nimport timeService from '../common/timeService'\nimport AppointmentTypeService from '../common/appointmentTypeService'\nimport AppointmentTypeOffering from '../models/appointmentTypeOffering'\nimport { AppointmentType, AppointmentTypeDetail } from '../models/appointmentType'\nimport IntakeFormEditor from '../components/IntakeFormEditor.vue'\nimport AppointmentTypeForm from '../components/AppointmentTypeForm.vue'\nimport Quill from '../common/quill'\n// import Quill from 'quill/core'\n\nexport default defineComponent({\n name: 'AppointmentType',\n\n data () {\n return {\n /** The AppointmentType to view and edit */\n appointmentType: null as unknown as AppointmentTypeDetail,\n\n /** New offering time */\n editedtime: '',\n\n /** Form containing edited general informaiton */\n editForm: null as unknown as AppointmentType,\n\n /** The Appointment type's confirmation message */\n confirmationMessage: '',\n\n quill: null as any,\n\n /** Indicator for showing confirmation message form */\n shouldShowConfirmationMessageForm: false,\n\n /** Indicator to show form for general info */\n shouldShowEditForm: false,\n\n /** Indicator to show the intake form editor */\n shouldShowIntakeFormEditor: false,\n\n /** Indicator to show offering form */\n shouldShowTimeForm: false\n }\n },\n\n watch: {\n $route: {\n handler (route) {\n AppointmentTypeService.get(route.params.id).then(res => {\n this.appointmentType = res.data\n })\n },\n immediate: true\n },\n\n /** Indicate if should show Confirmation Message Form */\n shouldShowConfirmationMessageForm (val) {\n if (val) {\n setTimeout(() => {\n this.quill = new Quill('#editor', {\n modules: {\n toolbar: [\n ['bold', 'italic', 'underline'],\n [{ list: 'ordered' }, { list: 'bullet' }],\n ['link']\n ]\n },\n theme: 'snow'\n }) as Quill\n\n this.quill.root.innerHTML = this.appointmentType.emailConfirmationMessage\n }, 0)\n }\n }\n },\n\n computed: {\n /** Determines if the new time is valid */\n isValidTime (): boolean {\n return timeService.isValidTimeString(this.editedtime)\n }\n },\n\n methods: {\n /**\n * Adds a new offering\n */\n addOffering () {\n const time = timeService.convertTimeFromString(this.editedtime)\n if (time == null) {\n return\n }\n\n AppointmentTypeService.createOffering(this.appointmentType.id, time).then(res => {\n this.appointmentType.offerings.push(res.data)\n this.editedtime = ''\n this.shouldShowTimeForm = false\n })\n },\n\n /**\n * Updates the appointment types's general info\n */\n handleAppointmentTypeUpdate (appointmentType: AppointmentType) {\n Object.assign(this.appointmentType, appointmentType)\n this.shouldShowEditForm = false\n },\n\n /**\n * Formats a date time as a string\n */\n format (date: Date): string {\n return format(date, 'MMM do hh:mma (zzz)')\n },\n\n /**\n * Formats a time represented as a number as a string\n * @param timeNum: The time represented as the number of minutes since the start of day\n */\n formatOffering (timeNum: number): string | null {\n return timeService.convertTimeToString(timeNum)\n },\n\n formatDuration (timeNum: number): string {\n return timeService.convertDurationToString(timeNum)\n },\n\n /**\n * Removes the given offering\n * @param: The offering\n */\n removeOffering (offering: AppointmentTypeOffering) {\n if (window.confirm('Are you sure?')) {\n AppointmentTypeService.removeOffering(offering.id).then(() => {\n const ind = this.appointmentType.offerings.findIndex(at => at.id === offering.id)\n this.appointmentType.offerings.splice(ind, 1)\n })\n }\n },\n\n /**\n * save confirmation message\n */\n saveConfirmationMessage () {\n const message = this.quill.root.innerHTML\n AppointmentTypeService.updateConfirmationMessage(this.appointmentType.id, message).then(res => {\n this.appointmentType.emailConfirmationMessage = message\n this.shouldShowConfirmationMessageForm = false\n })\n },\n\n /**\n * Updates the intake form\n * @param newForm: The updated intake form\n */\n updateIntakeForm (newForm) {\n this.appointmentType.currentForm = newForm\n this.shouldShowIntakeFormEditor = false\n }\n },\n\n components: {\n IntakeFormEditor,\n AppointmentTypeForm\n }\n})\n","import { render } from \"./AppointmentType.vue?vue&type=template&id=6fdbfa76&bindings={}\"\nimport script from \"./AppointmentType.vue?vue&type=script&lang=ts\"\nexport * from \"./AppointmentType.vue?vue&type=script&lang=ts\"\nscript.render = render\n\nexport default script","\n\n\n\n\n\n","\n\n\n\n\n\n","\nimport { cloneDeep } from 'lodash'\nimport { defineComponent, PropType } from 'vue'\nimport TimeService from '../common/timeService'\nimport UserService from '../common/userService'\nimport UserAvailabilityByType from '../models/userAvailabilityByType'\n\nexport default defineComponent({\n name: 'AvailabilityForm',\n\n props: {\n /** The availability to view and edit */\n userAvailability: {\n type: Object as PropType,\n required: true\n },\n\n /** The Id of the user who owns the availability */\n userId: {\n type: Number,\n required: true\n }\n },\n\n emits: ['update-availability'],\n\n data () {\n return {\n /** Day enum values */\n // days: [1, 2, 4, 8, 16],\n days: ['M', 'T', 'W', 'TH', 'F'],\n\n /** Indicates that availability is being edited */\n editing: false,\n\n /** An copy of the availability to edit */\n editedAvailability: null as unknown as UserAvailabilityByType\n }\n },\n\n methods: {\n /**\n * Resets the edited availability and shows the form.\n */\n beginEditingAvailability () {\n console.log(this.userAvailability.availability)\n this.editedAvailability = cloneDeep(this.userAvailability)\n this.editing = true\n },\n\n /**\n * Returns a string for the given time represented as the number of minutes past the start of day\n * @param timeNumb: Number of minutes past the start of day\n */\n parseTime (timeNum: number): string | null {\n return TimeService.convertTimeToString(timeNum)\n },\n\n /**\n * Updates the edited availability\n */\n saveAvailability () {\n UserService.updateAvailability(this.userId, this.editedAvailability.availability).then(res => {\n this.$emit('update-availability', res.data.availability)\n this.editing = false\n })\n }\n }\n})\n","import { render } from \"./AvailabilityForm.vue?vue&type=template&id=6a9f6234&bindings={}\"\nimport script from \"./AvailabilityForm.vue?vue&type=script&lang=ts\"\nexport * from \"./AvailabilityForm.vue?vue&type=script&lang=ts\"\nscript.render = render\n\nexport default script","\nimport { defineComponent } from 'vue'\nimport appointmentTypeService from '../common/appointmentTypeService'\nimport userService from '../common/userService'\nimport { AppointmentTypeDetail } from '../models/appointmentType'\nimport User from '../models/user'\nimport AvailabilityForm from '../components/AvailabilityForm.vue'\n\nexport default defineComponent({\n name: 'Availability',\n\n data () {\n return {\n users: [] as Array,\n appointmentTypes: [] as Array\n }\n },\n\n mounted () {\n // get all appointment types\n appointmentTypeService.getAll().then(res => {\n this.appointmentTypes = res.data\n })\n\n // get OSP staff user records\n userService.getOspStaff().then(res => {\n this.users = res.data\n })\n },\n\n methods: {\n // update availability for user\n updateUser (user, newUser) {\n user.availability = newUser.availability\n }\n },\n\n components: {\n AvailabilityForm\n }\n})\n","import { render } from \"./Availability.vue?vue&type=template&id=26a36224&bindings={}\"\nimport script from \"./Availability.vue?vue&type=script&lang=ts\"\nexport * from \"./Availability.vue?vue&type=script&lang=ts\"\nscript.render = render\n\nexport default script","\n\n\n\n\n\n","\nimport { defineComponent } from 'vue'\nimport UserService from '../common/userService'\nimport User from '../models/user'\nimport { debounce } from 'lodash'\n\nexport default defineComponent({\n name: 'Users',\n\n data () {\n return {\n /** The username to search on */\n newUserUsername: '',\n\n /** Indicates that a user search is in process */\n searchingForUser: false,\n\n /** Indicator to show or hide the new user form */\n shouldShowNewUserForm: false,\n\n /** The result of the user search */\n userResult: null as unknown as User | null,\n\n /** The list of users */\n users: [] as Array\n }\n },\n\n mounted () {\n // Load the current users\n UserService.getOspStaff().then(res => {\n this.users = res.data\n })\n },\n\n watch: {\n // Perform a debounced search when the username input chagnes\n newUserUsername: function (username: string) {\n this.userResult = null\n\n if (username !== '') {\n this.searchingForUser = true\n this.debouncedSearch(username)\n } else {\n this.searchingForUser = false\n }\n }\n },\n\n methods: {\n /**\n * Performs a debounced search for a user\n * @param username: The username to search on\n */\n debouncedSearch: debounce(function (this: { search }, username: string) {\n this.search(username)\n }, 1000),\n\n /**\n * Adds the user found via search as an OSP staff member\n */\n addOspStaff () {\n if (this.userResult) {\n UserService.createOspStaff(this.userResult.username).then(res => {\n this.users.push(res.data)\n this.resetNewUserForm()\n })\n }\n },\n\n /**\n * Returns's a comma separated list of a user's permissions\n * @param user: Tthe user\n */\n permissionString (user: User) {\n return user.permissions.map(p => p.name).join(', ')\n },\n\n /**\n * Removes OSP Staff status from the given user\n * @param user: The user to remove\n */\n removeUser (user: User) {\n if (window.confirm('Are you sure?')) {\n UserService.removeOspStaff(user.id).then(() => {\n const ind = this.users.findIndex(u => u.id === user.id)\n this.users.splice(ind, 1)\n })\n }\n },\n\n /**\n * Resets the new user form\n */\n resetNewUserForm () {\n this.newUserUsername = ''\n this.shouldShowNewUserForm = false\n },\n\n /**\n * Performs a search for a user given a username\n * @param username: The username to search on\n */\n search (username: string) {\n UserService.searchUser(username).then(res => {\n this.userResult = res.data\n this.searchingForUser = false\n }).catch(() => {\n this.userResult = null\n this.searchingForUser = false\n })\n }\n }\n})\n","import { render } from \"./Users.vue?vue&type=template&id=9792fa74&bindings={}\"\nimport script from \"./Users.vue?vue&type=script&lang=ts\"\nexport * from \"./Users.vue?vue&type=script&lang=ts\"\nscript.render = render\n\nexport default script","\n\n\n\n\n\n","\nimport { defineComponent } from 'vue'\nimport User from '../models/user'\nimport AvailabilityForm from '../components/AvailabilityForm.vue'\nimport Litepicker from 'litepicker'\nimport { format } from 'date-fns'\nimport BlockedTime from '../models/blockedTime'\nimport UserService from '../common/userService'\nimport UserAvailabilityByType from '../models/userAvailabilityByType'\nimport { cloneDeep } from 'lodash'\nimport UserAvailability from '../models/userAvailability'\nimport endOfDay from 'date-fns/fp/endOfDay/index.js'\n\nexport default defineComponent({\n name: 'User',\n\n data () {\n return {\n isActive: true,\n syncing: false,\n appointmentTypes: [] as Array,\n\n /** Edited list of permissions to save */\n editedPermissions: [] as Array,\n\n /** Information for new blocked time */\n newBlockedTime: {\n title: '',\n startTime: null as unknown as Date,\n endTime: null as unknown as Date\n } as BlockedTime,\n\n /** Indicator to show or hide the Blocked Time form */\n shouldShowBlockTimeform: false,\n\n /** Indicator to show or hide the permission form */\n shouldShowPermissionForm: false,\n\n /** The user to be edited */\n user: null as unknown as User,\n\n /** List of permissions */\n permissions: [\n {\n id: 0,\n code: 'VIEW',\n description: 'Allow viewing calendar entries',\n name: 'View Calendar',\n permissionValue: 1\n },\n {\n id: 1,\n code: 'REVU',\n description: 'Allow changing own calendar entries',\n name: 'Review',\n permissionValue: 2\n },\n {\n id: 2,\n code: 'ADMN',\n description: 'Allow managing users and system',\n name: 'Manage System',\n permissionValue: 4\n },\n {\n id: 3,\n code: 'SUPR',\n description: 'Supervisor',\n name: 'Supervisor',\n permissionValue: 8\n }\n ]\n }\n },\n\n watch: {\n // Fetch the user when the id param changes\n $route: {\n handler (route) {\n this.getUser(route.params.id)\n },\n immediate: true\n }\n },\n\n computed: {\n /** Determines if the user is a reviewer */\n isReviewer (): boolean {\n return this.user.permissions.findIndex(p => p.id === 1) !== -1\n },\n\n /** The user's availability sorted by appointment type */\n sortedAvailability (): Array {\n const availability = {} as { [id: number]: UserAvailabilityByType }\n\n this.user.availability.forEach(ua => {\n const av = cloneDeep(ua)\n delete av.appointmentTypeOffering.appointmentType\n const appointmentTypeId = ua.appointmentTypeOffering?.appointmentType?.id as number\n if (availability[appointmentTypeId]) {\n availability[appointmentTypeId].availability.push(av)\n } else {\n availability[appointmentTypeId] = ua.appointmentTypeOffering.appointmentType as UserAvailabilityByType\n availability[appointmentTypeId].availability = [av]\n }\n })\n\n return Object.values(availability)\n },\n\n /** The user's visibility permission */\n visilbilityPermission (): number {\n return this.editedPermissions.findIndex(p => p === 0) !== -1 ? 0 : 1\n }\n },\n\n methods: {\n /**\n * Creates a new blocked time\n */\n createBlockedTime () {\n this.isActive = false\n this.newBlockedTime.endTime = endOfDay(this.newBlockedTime.endTime)\n UserService.createBlockedTime(this.user.id, this.newBlockedTime).then(res => {\n this.user.blockedTimes.push(res.data)\n this.shouldShowBlockTimeform = false\n this.isActive = true\n })\n },\n\n // Edits the user's visibility permission\n editVisilbilityPermission (permissionId: number) {\n let ind\n if (permissionId === 0) {\n ind = this.editedPermissions.findIndex(p => p === 1)\n } else {\n ind = this.editedPermissions.findIndex(p => p === 0)\n }\n\n this.editedPermissions.splice(ind, 1)\n this.editedPermissions.push(permissionId)\n },\n\n /**\n * Formats a string represented a time in time format specified\n * @param dateString: The string representing a date\n * @param form: The output format\n */\n formatTimeString (dateString: string, form: string): string {\n const date = new Date(dateString)\n return format(date, form)\n },\n\n /**\n * Fetches the given user\n * @param id: The Id of the user\n */\n getUser (id: number) {\n UserService.getUser(id).then(res => {\n this.user = res.data\n })\n },\n\n /**\n * Handles a date range being selected setting the new block form object\n * with their values\n * @param start: The start date\n * @param end: The end date\n */\n handleDateSelectionn (start: Date, end: Date) {\n this.newBlockedTime.startTime = start\n this.newBlockedTime.endTime = end\n },\n\n /**\n * Removes the given blocked time\n * @parma blockedTime: The blocked time to remove\n */\n removeBlockedTime (id: number) {\n if (window.confirm('Are you sure?')) {\n this.$axios.put(`userBlockedTime/remove/${id}`).then(() => {\n const ind = this.user.blockedTimes.findIndex(bt => bt.id === id)\n this.user.blockedTimes.splice(ind, 1)\n })\n }\n },\n\n /**\n * Initializes a new blocked time and displays the form\n */\n showBlockedTimeForm () {\n this.newBlockedTime = {\n id: 0,\n title: '',\n startTime: null as unknown as Date,\n endTime: null as unknown as Date\n }\n\n this.shouldShowBlockTimeform = true\n\n // Show the datepicker\n setTimeout(() => {\n const picker = new Litepicker({ element: document.querySelector('.datepicker'), inlineMode: true, singleMode: false, numberOfMonths: 2, numberOfColumns: 2, onSelect: this.handleDateSelectionn })\n picker.show()\n }, 0)\n },\n\n /**\n * Resets the edited permission list and shows the permission form\n */\n showPermissionForm () {\n this.syncing = false\n this.editedPermissions = this.user.permissions.map(p => p.id)\n this.shouldShowPermissionForm = true\n },\n\n /**\n * Updates the user's availability\n * @param newAvailability: Updated availability\n */\n updateAvailability (newAvailability: Array) {\n this.user.availability = newAvailability\n },\n\n /**\n * Updates the user's permissions\n */\n updatePermissions () {\n this.syncing = true\n const permissionList = this.editedPermissions.map(up => this.permissions.find(p => p.id === up))\n UserService.updateUserPermissions(this.user.id, permissionList).then(res => {\n this.user.permissions = res.data.permissions\n this.shouldShowPermissionForm = false\n })\n }\n },\n\n components: {\n AvailabilityForm\n }\n})\n","import { render } from \"./User.vue?vue&type=template&id=e354664e&bindings={}\"\nimport script from \"./User.vue?vue&type=script&lang=ts\"\nexport * from \"./User.vue?vue&type=script&lang=ts\"\nscript.render = render\n\nexport default script","\n\n\n\n\n\n","\nimport { defineComponent } from 'vue'\nimport { mapGetters, mapState } from 'vuex'\nimport UserService from '../common/userService'\nimport User from '../models/user'\nimport OutlookIntegration from '../models/outlookIntegration'\nimport State from '../store/state'\n\nexport default defineComponent({\n name: 'Profile',\n\n data () {\n return {\n code: '',\n syncing: false,\n user: null as unknown as User,\n args: null as unknown as OutlookIntegration,\n button: {\n text: 'Enable'\n }\n // outlookEnabled: false\n }\n },\n\n /**\n * sets whether Outlook is enabled/disabled\n */\n mounted () {\n if (this.outlookUserId === '' || this.outlookUserId === null) {\n this.outlookEnabled = false\n this.button.text = 'Enable'\n } else {\n this.outlookEnabled = true\n this.button.text = 'Disable'\n }\n\n this.isOutlookSyncing()\n },\n\n computed: {\n ...mapState(['firstName']),\n ...mapState(['lastName']),\n ...mapState(['userId']),\n ...mapState(['outlookUserId']),\n ...mapState(['outlookSyncing']),\n ...mapGetters(['outlookSyncing']),\n ...mapGetters(['outlookEnabled'])\n },\n\n watch: {\n button: {\n handler () {\n if (this.outlookUserId !== null) {\n this.outlookEnabled = true\n } else {\n this.outlookEnabled = false\n }\n }\n }\n },\n\n methods: {\n isOutlookSyncing () {\n UserService.isOutlookSyncing(this.userId)\n .then(res => {\n this.syncing = res.data.outlookSyncing\n if (this.syncing) {\n setTimeout(this.isOutlookSyncing, 5000)\n }\n })\n },\n\n /**\n * Outlook integraion either enabling or disabling determined by previous state\n */\n outlookIntegration () {\n if (this.syncing) { return }\n this.syncing = true\n\n // Open window to log in\n const windowRef = this.getWindowRef() as Window\n\n // Start checking for response from AZURE AD with code\n const checkFn = window.setInterval(() => {\n try {\n if (windowRef.document.URL.indexOf(process.env.VUE_APP_AZURE_AD_REDIRECT) !== -1) {\n window.clearInterval(checkFn)\n const url = windowRef.document.URL\n const token = this.parseUrl(url, 'code')\n let isSuccess = false\n this.code = token\n this.args = {\n id: this.userId,\n authCode: this.code\n }\n\n if (this.outlookEnabled) {\n UserService.disableOutlookIntegration(this.args)\n .then(res => {\n isSuccess = true\n const state = {\n outlookUserId: ''\n } as State\n this.$store.dispatch('initializeSession', state)\n this.syncing = false\n })\n .catch(function (error) {\n alert('There was a problem disabling Outlook Integration! \\n ' + error.message)\n console.log(error)\n })\n .finally(() => {\n this.syncing = false\n })\n\n if (isSuccess) {\n this.outlookEnabled = false\n this.button.text = 'Enable'\n }\n } else {\n UserService.enableOutlookIntegration(this.args)\n .then(res => {\n isSuccess = false\n const state = {\n outlookUserId: res.data.outlookUserId\n } as State\n this.$store.dispatch('initializeSession', state)\n this.syncing = false\n })\n .catch(function (error) {\n alert('There was a problem enabling Outlook Integration! \\n ' + error.message)\n console.log(error)\n })\n .finally(() => {\n this.syncing = false\n })\n\n if (isSuccess) {\n this.outlookEnabled = true\n this.button.text = 'Disable'\n }\n }\n\n windowRef.close()\n }\n } catch (e) {\n // intentionally blank to prevent spam from XSS warning\n }\n }, 100)\n },\n\n /**\n * Get window reference\n */\n getWindowRef () {\n return window.open(`https://login.microsoftonline.com/${process.env.VUE_APP_AZURE_AD_TENANT_ID}/oauth2/v2.0/authorize` +\n `?client_id=${process.env.VUE_APP_AZURE_AD_CLIENT_ID}` +\n `&redirect_uri=${process.env.VUE_APP_AZURE_AD_REDIRECT}` +\n `&scope=${process.env.VUE_APP_AZURE_AD_SCOPE}` +\n '&response_type=code' +\n '&response_mode=query' +\n '&state=1234', '_blank', 'width=800, height=600')\n },\n\n /**\n * Parse URL for code\n */\n parseUrl (url, name): string {\n name = name.replace(/[[]/, '[').replace(/[[]/, ']')\n const regexS = '[?&]' + name + '=([^&#]*)'\n const regex = new RegExp(regexS)\n const results = regex.exec(url)\n if (results == null) {\n return ''\n } else {\n return results[1]\n }\n }\n }\n})\n","import { render } from \"./Profile.vue?vue&type=template&id=208c38c9&bindings={}\"\nimport script from \"./Profile.vue?vue&type=script&lang=ts\"\nexport * from \"./Profile.vue?vue&type=script&lang=ts\"\nscript.render = render\n\nexport default script","\n\n\n\n\n\n\n\n","\nimport { defineComponent } from 'vue'\nimport AppointmentScheduler from '../components/AppointmentScheduler.vue'\n\nexport default defineComponent({\n name: 'System Settings',\n\n components: {\n AppointmentScheduler\n }\n})\n","import { render } from \"./SystemSettings.vue?vue&type=template&id=43f7fd4d&scoped=true&bindings={}\"\nimport script from \"./SystemSettings.vue?vue&type=script&lang=ts\"\nexport * from \"./SystemSettings.vue?vue&type=script&lang=ts\"\n\nimport \"./SystemSettings.vue?vue&type=style&index=0&id=43f7fd4d&scoped=true&lang=scss\"\nscript.render = render\nscript.__scopeId = \"data-v-43f7fd4d\"\n\nexport default script","\n\n\n\n\n\n\n\n","import { render } from \"./SignedOut.vue?vue&type=template&id=01599924&scoped=true&bindings={}\"\nimport script from \"./SignedOut.vue?vue&type=script&lang=js\"\nexport * from \"./SignedOut.vue?vue&type=script&lang=js\"\n\nimport \"./SignedOut.vue?vue&type=style&index=0&id=01599924&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-01599924\"\n\nexport default script","\n\n\n\n\n\n","\nimport { defineComponent } from 'vue'\nimport AppointmentTypeService from '../common/appointmentTypeService'\nimport SponsorService from '../common/sponsorService'\nimport { AppointmentType } from '../models/appointmentType'\nimport { Sponsor, SponsorDetail } from '../models/sponsor'\n\nexport default defineComponent({\n name: 'Sponsors',\n\n data () {\n return {\n isActive: true,\n\n /** list of appointment types */\n appointmentTypes: [] as Array,\n\n /** indicates if should show sponsor form */\n shouldShowSponsorForm: false,\n\n /** list of sponsors */\n sponsors: [] as Array,\n\n /** sponsor form */\n sponsorForm: null as unknown as Sponsor,\n\n /** filter key */\n filterKey: ''\n }\n },\n\n computed: {\n /** Is Editing sponsor form */\n isEditing: function (): boolean {\n return this.sponsorForm && (this.sponsorForm.id !== 0)\n },\n\n /** Is Valid sponsor form */\n isValid: function (): boolean {\n return this.sponsorForm.name !== null && this.sponsorForm.appointmentTypeId !== null\n },\n\n /** Filtered Sponsors list */\n filteredSponsors (): Array {\n if (this.filterKey !== '') {\n return this.sponsors.filter(s => RegExp(this.filterKey, 'i').test(s.name))\n } else {\n return this.sponsors\n }\n }\n },\n\n mounted () {\n // load sponsors and appoitnment types\n this.getSponsors()\n this.getAppointmentTypes()\n },\n\n methods: {\n /**\n * Get Appointment Types\n */\n getAppointmentTypes () {\n AppointmentTypeService.getPublic().then(res => {\n this.appointmentTypes = res.data\n })\n },\n\n /**\n * Show Create Form\n */\n showCreateForm () {\n this.sponsorForm = {\n id: 0,\n name: '',\n appointmentTypeId: null as unknown as number,\n toTop: false\n } as Sponsor\n\n this.shouldShowSponsorForm = true\n },\n\n /**\n * Show Update Form\n */\n showUpdateForm (sponsor: SponsorDetail) {\n if (sponsor.appointmentType != null) {\n this.sponsorForm = {\n id: sponsor.id,\n name: sponsor.name,\n appointmentTypeId: sponsor.appointmentType.id,\n toTop: sponsor.toTop\n }\n } else {\n this.sponsorForm = {\n id: sponsor.id,\n name: sponsor.name,\n appointmentTypeId: null,\n toTop: sponsor.toTop\n }\n }\n\n this.shouldShowSponsorForm = true\n },\n\n /**\n * Get Sponsors\n */\n getSponsors () {\n SponsorService.getAllDetailed().then(res => {\n this.sponsors = res.data.sort((a, b) => {\n if (a.toTop > b.toTop) {\n return -1\n } else if (a.toTop < b.toTop) {\n return 1\n } else {\n return 0\n }\n })\n })\n },\n\n /**\n * Create Sponsor\n */\n createSponsor () {\n this.isActive = false\n SponsorService.create(this.sponsorForm).then(res => {\n this.sponsors.push(res.data)\n this.shouldShowSponsorForm = false\n this.isActive = true\n })\n },\n\n /**\n * Update Sponsor\n */\n updateSponsor () {\n this.isActive = false\n SponsorService.update(this.sponsorForm.id, this.sponsorForm).then(res => {\n const sponsor = this.sponsors.find(s => s.id === this.sponsorForm.id)\n if (sponsor) {\n sponsor.name = res.data.name\n sponsor.appointmentType = res.data.appointmentType\n }\n this.shouldShowSponsorForm = false\n this.isActive = true\n })\n },\n\n /**\n * Remove Sponsor\n */\n removeSponsor (id: number) {\n if (window.confirm('Are you sure you want to Remove?')) {\n SponsorService.remove(id).then(res => {\n const ind = this.sponsors.findIndex(s => s.id === id)\n if (ind !== -1) {\n this.sponsors.splice(ind, 1)\n }\n })\n }\n }\n }\n})\n","import { render } from \"./Sponsors.vue?vue&type=template&id=55ca2f3a&bindings={}\"\nimport script from \"./Sponsors.vue?vue&type=script&lang=ts\"\nexport * from \"./Sponsors.vue?vue&type=script&lang=ts\"\nscript.render = render\n\nexport default script","\n\n\n\n\n\n","\nimport { format, isBefore } from 'date-fns'\nimport { defineComponent } from 'vue'\nimport { mapGetters } from 'vuex'\nimport AppointmentService from '../common/appointmentService'\nimport Appointment from '../models/appointment'\nexport default defineComponent({\n name: 'ManageAppointment',\n\n data () {\n return {\n appointment: null as unknown as Appointment,\n cancelled: false\n }\n },\n\n watch: {\n $route: {\n handler (route) {\n AppointmentService.get(route.params.id).then(res => {\n res.data.start = new Date(res.data.start)\n res.data.end = new Date(res.data.end)\n this.appointment = res.data\n })\n },\n immediate: true\n }\n },\n\n computed: {\n passed (): boolean {\n return isBefore(this.appointment.start, new Date())\n }\n },\n\n methods: {\n /**\n * Cancel appointment\n */\n cancelAppointment (appointemntId: number) {\n if (confirm('Are you sure you want to cancel this appointment?')) {\n AppointmentService.cancelAppointment(appointemntId).then(res => {\n this.cancelled = true\n })\n }\n },\n\n /**\n * Formats the given date in the specified format\n */\n formatTime (date: Date, formatString: string): string {\n return format(date, formatString)\n }\n }\n})\n","import { render } from \"./ManageAppointment.vue?vue&type=template&id=553a6b5d&bindings={}\"\nimport script from \"./ManageAppointment.vue?vue&type=script&lang=ts\"\nexport * from \"./ManageAppointment.vue?vue&type=script&lang=ts\"\nscript.render = render\n\nexport default script","// Institute of Design and Innovation (email idi@unm.edu). //\n\nimport store from '../store/store'\nimport SessionService from '@/common/sessionService'\nimport { RouteLocation } from 'vue-router'\n\n/** Path names that do not require login */\nconst whitelist = { Login: true, NotFound: true }\n\n/**\n * Navigation guard that requires the user to be logged in\n */\nexport default async function (to: RouteLocation, from: RouteLocation, next) {\n sessionStorage.setItem('reload_path', to.path)\n\n if (!store.state.userId && !whitelist[to.name as string]) {\n SessionService.redirectToLoginProvider()\n // const loggedIn = await SessionService.initializeSession()\n // if (loggedIn) {\n // next()\n // } else {\n // SessionService.redirectToLoginProvider()\n // }\n } else {\n next()\n }\n}\n","// Institute of Design and Innovation (email idi@unm.edu). //\n\nexport default class AuthService {\n /**\n * Determines if the user has a given permissions\n * @param userValue The user's permission value\n * @param requiredValue The id of the required permissionos\n */\n static authorize (userValue: number, permissionId: number): boolean {\n const requiredValue = Math.pow(2, permissionId)\n return userValue >= requiredValue\n }\n}\n","// Institute of Design and Innovation (email idi@unm.edu). //\n\nimport store from '../store/store'\nimport AuthService from '@/common/authService'\nimport { RouteLocation } from 'vue-router'\n\n/**\n * Navigation guard that requires the user to be logged in\n */\nexport default async function (to: RouteLocation, from, next) {\n const hasPermission = AuthService.authorize(store.getters.permissionValue, to.meta.requiredPermission)\n if (hasPermission) {\n next()\n } else {\n next(false)\n }\n}\n","// Institute of Design and Innovation (email idi@unm.edu). //\n\n/**\n * Individual Permission Values\n */\nexport default {\n canViewCalendar: 0,\n canManageCalendar: 1,\n canManageSystem: 2\n}\n","// Institute of Design and Innovation (email idi@unm.edu). //\n\nimport { RouteLocation } from 'vue-router'\nimport store from '../store/store'\n\n/**\n * Navigation guard that requires the user to be logged in\n */\nexport default async function (to: RouteLocation, from: RouteLocation, next) {\n if (store.state.isAdmin) {\n next('/calendar')\n } else {\n next('/schedule')\n }\n}\n","\n\n\n\n\n\n","// Institute of Design and Innovation (email idi@unm.edu). //\n\nimport { ReportAppointment, ReportResult } from '@/models/reportResult'\nimport { AxiosResponse } from 'axios'\nimport httpClient from './httpClient'\n\nexport default class ReportingService {\n /**\n * Genereate report\n * @param spec report specifics\n */\n public static generateReport (spec: object): Promise> {\n return httpClient.post('reporting', spec)\n }\n\n /**\n * Download report\n * @param spec report specifics\n */\n public static downloadReport (spec: object): Promise> {\n return httpClient.post('reporting/download', spec)\n }\n}\n","\nimport { AxiosResponse } from 'axios'\nimport { endOfDay, endOfWeek, format, startOfDay, startOfWeek } from 'date-fns'\nimport Litepicker from 'litepicker'\nimport { defineComponent } from 'vue'\nimport AppointmentTypeService from '../common/appointmentTypeService'\nimport ReportingService from '../common/reportingService'\nimport SponsorService from '../common/sponsorService'\nimport UserService from '../common/userService'\nimport Appointment from '../models/appointment'\nimport { AppointmentType } from '../models/appointmentType'\nimport { ReportAppointment, ReportCount, ReportResult } from '../models/reportResult'\nimport { Sponsor } from '../models/sponsor'\nimport User from '../models/user'\n\ntype DateRangeType = 'range' | 'past' | 'future'\n\nexport default defineComponent({\n name: 'Reporting',\n\n data () {\n return {\n dateRangeType: 'range' as DateRangeType,\n /** report specification form */\n reportSpec: {\n start: startOfWeek(new Date()) as Date | null,\n end: endOfWeek(new Date()) as Date | null,\n sponsorIds: [] as Array,\n appointmentTypeIds: [] as Array,\n reviewerIds: [] as Array,\n includeCancelled: true,\n includeRescheduled: true\n },\n results: null as unknown as ReportResult,\n countByReviewers: [],\n countByAppointmentType: [],\n countBySponsor: [],\n reportUrl: '',\n reviewers: null as unknown as Array,\n sponsors: [] as Array,\n appointmentTypes: null as unknown as Array,\n startPicker: null as unknown as Litepicker,\n endPicker: null as unknown as Litepicker,\n sponsorSearchKey: '',\n sponsorSearchPos: { bottom: 0, left: 0 },\n showSponsorSelection: false,\n resultsView: 'appointments'\n }\n },\n\n computed: {\n /** list of filtered sponsors */\n filteredSponsors (): Array {\n if (this.sponsorSearchKey !== '') {\n return this.sponsors.filter(s => RegExp(this.sponsorSearchKey, 'i').test(s.name))\n } else {\n return this.sponsors\n }\n },\n\n /** list of selected sponsors */\n selectedSponsors (): Array {\n return this.sponsors.filter(s => this.reportSpec.sponsorIds.findIndex(id => s.id === id) !== -1)\n },\n\n /** list of report counts */\n selectedCounts (): Array {\n if (this.resultsView === 'reviewer') {\n return this.results.reviewerCounts\n } else if (this.resultsView === 'sponsor') {\n return this.results.sponsorCounts\n } else {\n return this.results.appointmentTypeCounts\n }\n }\n },\n\n watch: {\n /**\n * Sets date range types; range, past, future\n */\n dateRangeType () {\n if (this.dateRangeType === 'range') {\n this.reportSpec.start = startOfWeek(new Date())\n this.reportSpec.end = endOfWeek(new Date())\n } else if (this.dateRangeType === 'past') {\n this.reportSpec.start = null\n this.reportSpec.end = endOfDay(new Date())\n } else if (this.dateRangeType === 'future') {\n this.reportSpec.start = startOfDay(new Date())\n this.reportSpec.end = null\n }\n\n if (this.reportSpec.start) {\n console.log('s')\n this.startPicker.setDate(this.reportSpec.start)\n }\n\n if (this.reportSpec.end) {\n console.log('e')\n this.endPicker.setDate(this.reportSpec.end)\n }\n },\n\n /**\n * Sponsor search\n */\n sponsorSearchKey () {\n const searchbar = document.querySelector('.sponsor-search')?.getBoundingClientRect()\n if (searchbar) {\n this.sponsorSearchPos.left = 10\n this.sponsorSearchPos.bottom = window.innerHeight - searchbar.top + 10\n }\n },\n\n reportSpec: {\n // genereate report\n handler () {\n this.generateReport()\n },\n deep: true,\n immediate: true\n }\n },\n\n mounted () {\n // load appointment types\n AppointmentTypeService.getAll().then(res => {\n this.appointmentTypes = res.data\n this.appointmentTypes.forEach(at => this.reportSpec.appointmentTypeIds.push(at.id))\n })\n\n // load sponsors\n SponsorService.getAll().then(res => {\n this.sponsors = res.data\n })\n\n // load OSP staffers that are reviewers\n UserService.getOspStaff().then(res => {\n this.reviewers = res.data.filter(u => u.permissions.findIndex(p => p.code === 'REVU') !== -1)\n this.reviewers.forEach(r => this.reportSpec.reviewerIds.push(r.id))\n })\n\n this.setupTimePickers()\n },\n\n methods: {\n /**\n * add sponsor to report spec\n */\n addSponsor (sponsorId: number) {\n this.reportSpec.sponsorIds.push(sponsorId)\n this.sponsorSearchKey = ''\n },\n\n /**\n * download datafrom report spec\n */\n download () {\n ReportingService.downloadReport(this.reportSpec).then(res => {\n this.reportUrl = res.data\n window.location = this.reportUrl as any\n })\n },\n\n /**\n * Formats the given date in the specified format\n */\n formatTime (date: Date, formatString: string): string {\n return format(date, formatString)\n },\n\n /**\n * remove sponsor from report spec\n */\n removeSponsor (sponsorId: number) {\n const ind = this.reportSpec.sponsorIds.findIndex(x => x === sponsorId)\n this.reportSpec.sponsorIds.splice(ind, 1)\n },\n\n /**\n * sets start and end time from picker calendar\n */\n setupTimePickers () {\n this.startPicker = new Litepicker({ element: document.querySelector('.start-time'), singleMode: true, onSelect: (date) => { console.log('setting start'); this.reportSpec.start = date } })\n this.startPicker.setDate(this.reportSpec.start)\n\n this.endPicker = new Litepicker({ element: document.querySelector('.end-time'), singleMode: true, onSelect: (date) => { console.log('setting end'); this.reportSpec.end = date } })\n this.endPicker.setDate(this.reportSpec.end)\n },\n\n /**\n * generate report from spec\n */\n generateReport () {\n ReportingService.generateReport(this.reportSpec).then((res: AxiosResponse) => {\n res.data.appointments.forEach((r: ReportAppointment) => {\n r.Start = new Date(r.Start)\n r.End = new Date(r.End)\n r.ScheduledOn = new Date(r.ScheduledOn)\n r.ReviewDeadline = new Date(r.ReviewDeadline)\n })\n this.results = res.data\n })\n }\n }\n})\n","import { render } from \"./Reporting.vue?vue&type=template&id=5f25bfcf&bindings={}\"\nimport script from \"./Reporting.vue?vue&type=script&lang=ts\"\nexport * from \"./Reporting.vue?vue&type=script&lang=ts\"\nscript.render = render\n\nexport default script","// Institute of Design and Innovation (email idi@unm.edu). //\n\nimport { createRouter, createWebHistory, RouteRecordRaw } from 'vue-router'\nimport Home from '../views/Home.vue'\nimport Login from '../views/Login.vue'\nimport Calendar from '../views/Calendar.vue'\nimport Schedule from '../views/Schedule.vue'\nimport App from '../App.vue'\nimport AppointmentTypes from '../views/AppointmentTypes.vue'\nimport AppointmentType from '../views/AppointmentType.vue'\nimport Availability from '../views/Availability.vue'\nimport Users from '../views/Users.vue'\nimport User from '../views/User.vue'\nimport Profile from '../views/Profile.vue'\nimport SystemSettings from '../views/SystemSettings.vue'\nimport SignedOut from '../views/SignedOut.vue'\nimport Sponsors from '../views/Sponsors.vue'\nimport ManageAppointment from '../views/ManageAppointment.vue'\nimport loginGuard from './loginGuard'\nimport authGuard from './authGuard'\nimport OspPermissionValues from '@/models/permissions'\nimport homeGuard from './homeGuard'\nimport Reporting from '../views/Reporting.vue'\n\n/**\n * Routes and names\n */\nconst routes: Array = [\n {\n path: '/',\n name: 'App',\n component: App,\n beforeEnter: loginGuard,\n children: [\n {\n path: '/',\n name: 'Home',\n component: Home,\n beforeEnter: homeGuard\n },\n {\n path: '/calendar',\n name: 'Calendar',\n component: Calendar,\n beforeEnter: authGuard,\n meta: { requiredPermission: OspPermissionValues.canViewCalendar }\n },\n {\n path: '/appointment-types',\n name: 'AppointmentTypes',\n component: AppointmentTypes\n },\n {\n path: '/appointment-types/:id',\n name: 'AppointmentType',\n component: AppointmentType\n },\n {\n path: '/appointment-types/remove/:id',\n name: 'AppointmentType/remove',\n component: AppointmentType\n },\n {\n path: '/appointment-types/restore/:id',\n name: 'AppointmentType/remove',\n component: AppointmentType\n },\n {\n path: '/availability',\n name: 'Availability',\n component: Availability\n },\n {\n path: '/users',\n name: 'Users',\n component: Users\n },\n {\n path: '/users/:id',\n name: 'User',\n component: User\n },\n {\n path: '/system',\n name: 'system',\n component: SystemSettings\n },\n {\n path: '/profile',\n name: 'Profile',\n component: Profile\n },\n {\n path: '/reporting',\n name: 'reporting',\n component: Reporting\n },\n {\n path: '/sponsors',\n name: 'Sponsors',\n component: Sponsors\n }\n ]\n },\n {\n path: '/login',\n name: 'Login',\n component: Login\n },\n {\n path: '/signed-out',\n name: 'SignedOut',\n component: SignedOut\n },\n {\n path: '/schedule',\n name: 'Schedule',\n component: Schedule,\n beforeEnter: loginGuard\n },\n {\n path: '/manage/:id',\n name: 'Manage',\n component: ManageAppointment\n }\n]\n\nconst router = createRouter({\n history: createWebHistory(process.env.BASE_URL),\n routes\n})\n\nexport default router\n","// Institute of Design and Innovation (email idi@unm.edu). //\n\nimport authService from '@/common/authService'\nimport permissions from '@/models/permissions'\nimport store from '../store/store'\n\n/**\n * Directive to hide/show an element based on a user's permissions\n * @param el The element that the directive is bound to\n * @param bindings Arguments\n */\nexport function hasPermissionDirective (el: HTMLElement, bindings) {\n const requiredPermission = bindings.value\n const hasPermission = authService.authorize(store.getters.permissionValue, requiredPermission)\n\n if (!hasPermission) {\n el.style.display = 'none'\n } else {\n el.style.removeProperty('display')\n }\n}\n\n/**\n * Directive to hide/show an element if user is admin\n * @param el the html element that the directive is bound to\n */\nexport function isAdminDirective (el: HTMLElement) {\n const hasPermission = authService.authorize(store.getters.permissionValue, permissions.canManageSystem)\n\n if (!hasPermission) {\n el.style.display = 'none'\n } else {\n el.style.removeProperty('display')\n }\n}\n","// Institute of Design and Innovation (email idi@unm.edu). //\n\nimport { createApp } from 'vue'\nimport Layout from './Layout.vue'\nimport httpClient from './common/httpClient'\nimport router from './router/router'\nimport store from './store/store'\nimport avComps from '@aetherial/aetherial-vue/avComponents.umd.js'\nimport { hasPermissionDirective, isAdminDirective } from '@/directives/auth-directives'\nimport OspPermissionValues from './models/permissions'\nimport Maska from 'maska'\n\n// Styles\nrequire('@/styles/application.scss')\n\nconst app = createApp(Layout)\napp.config.globalProperties.$axios = httpClient\napp.config.globalProperties.$permissions = OspPermissionValues\napp.use(avComps)\napp.directive('has-permission', hasPermissionDirective)\napp.directive('is-admin', isAdminDirective)\napp.use(Maska)\n\n/**\n * sets up main page\n */\nsetTimeout(() => {\n app.use(store).use(router).mount('body')\n}, 0)\n","export { default } 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-v16/dist/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-v16/dist/index.js??ref--0-1!./AppointmentScheduler.vue?vue&type=style&index=0&lang=css\"; 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-v16/dist/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-v16/dist/index.js??ref--0-1!./AppointmentScheduler.vue?vue&type=style&index=0&lang=css\""],"sourceRoot":""}