{"version":3,"file":"js/app.da15dfcc.js","mappings":"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","sources":["webpack://ready-2-work/./lib/version.js","webpack://ready-2-work/./src/common/config.js","webpack://ready-2-work/./src/components/_globals.js","webpack://ready-2-work/./src/constants/assets/LogoForm.js","webpack://ready-2-work/./src/constants/assets/LogoShade.js","webpack://ready-2-work/./src/constants/availability/AvailabilityCalendarSelectionMode.js","webpack://ready-2-work/./src/constants/booking/BookingActionableItemType.js","webpack://ready-2-work/./src/constants/booking/BookingStatus.js","webpack://ready-2-work/./src/constants/booking/ShiftRecordBlockType.js","webpack://ready-2-work/./src/constants/booking/ShiftRecordErrorAlertType.js","webpack://ready-2-work/./src/constants/booking/ShortTermTentativeStatus.js","webpack://ready-2-work/./src/constants/booking/TentativeFillAction.js","webpack://ready-2-work/./src/constants/booking/TimesheetOperationType.js","webpack://ready-2-work/./src/constants/candidate/AvailabilityStatus.js","webpack://ready-2-work/./src/constants/candidate/OngoingAvailabilityStatus.js","webpack://ready-2-work/./src/constants/candidate/Ready2WorkStatus.js","webpack://ready-2-work/./src/constants/certifications/CustomField.js","webpack://ready-2-work/./src/constants/certifications/FieldId.js","webpack://ready-2-work/./src/constants/core/Environment.js","webpack://ready-2-work/./src/constants/core/InteractionType.js","webpack://ready-2-work/./src/models/general/mediaQueryBreakPoint.js","webpack://ready-2-work/./src/constants/core/MediaQueryBreakPoints.js","webpack://ready-2-work/./src/constants/core/VuetifyColourClass.js","webpack://ready-2-work/./src/constants/currency/CurrencyCode.js","webpack://ready-2-work/./src/constants/date/DateFormatToken.js","webpack://ready-2-work/./src/constants/date/DateStripDisplayRange.js","webpack://ready-2-work/./src/constants/date/DateTense.js","webpack://ready-2-work/./src/constants/date/DayOfWeek.js","webpack://ready-2-work/./src/constants/date/DurationUnits.js","webpack://ready-2-work/./src/constants/date/EventStatus.js","webpack://ready-2-work/./src/constants/error/ErrorResponseType.js","webpack://ready-2-work/./src/constants/error/RequestErrorSource.js","webpack://ready-2-work/./src/constants/file/UploadedFileType.js","webpack://ready-2-work/./src/constants/form/FormInputType.js","webpack://ready-2-work/./src/constants/form/ValidationRules.js","webpack://ready-2-work/./src/constants/layout/Direction.js","webpack://ready-2-work/./src/constants/registrations/ComplianceItemReferenceType.js","webpack://ready-2-work/./src/constants/registrations/ComplianceItemStatus.js","webpack://ready-2-work/./src/constants/registrations/ComplianceItemType.js","webpack://ready-2-work/./src/constants/registrations/FormProvider.js","webpack://ready-2-work/./src/constants/registrations/RegistrationStatus.js","webpack://ready-2-work/./src/constants/registrations/RegistrationStatusReason.js","webpack://ready-2-work/./src/constants/registrations/VideoType.js","webpack://ready-2-work/./src/constants/routes/routeDefinitions.js","webpack://ready-2-work/./src/constants/status/Status.js","webpack://ready-2-work/./src/constants/workExperience/WorkExperienceDotPointType.js","webpack://ready-2-work/./src/filters/truncate-text.js","webpack://ready-2-work/./src/helpers/array-helpers.js","webpack://ready-2-work/./src/services/features/bookingFeatureFactory.js","webpack://ready-2-work/./src/helpers/booking-helpers.js","webpack://ready-2-work/./src/helpers/cache-helpers.js","webpack://ready-2-work/./src/helpers/color-helpers.js","webpack://ready-2-work/./src/models/date/monthYearDifferentDTO.js","webpack://ready-2-work/./src/helpers/date-helpers.js","webpack://ready-2-work/./src/helpers/file-helpers.js","webpack://ready-2-work/./src/helpers/status-helper.js","webpack://ready-2-work/./src/helpers/url-helpers.js","webpack://ready-2-work/./src/common/configFactory.js","webpack://ready-2-work/./src/main.js","webpack://ready-2-work/./src/mixins/baseMixin.js","webpack://ready-2-work/./src/mixins/publicViewMixin.js","webpack://ready-2-work/./src/models/availability/availabilityStatusDTO.js","webpack://ready-2-work/./src/models/availability/ongoingAvailabilityViewModel.js","webpack://ready-2-work/./src/models/availability/scheduledAvailabilityViewModel.js","webpack://ready-2-work/./src/models/booking/backendBookingFeatureDecisionDTO.js","webpack://ready-2-work/./src/models/booking/bookingDetailsGuestAccessRequestDTO.js","webpack://ready-2-work/./src/models/booking/candidateBookingDetailsGuestAccessViewModel.js","webpack://ready-2-work/./src/models/booking/candidateBookingDetailsLocationAddressDTO.js","webpack://ready-2-work/./src/models/booking/candidateBookingDetailsViewModel.js","webpack://ready-2-work/./src/models/booking/candidateBookingDetailsLocationDTO.js","webpack://ready-2-work/./src/models/booking/candidateBookingNavigationItemViewModel.js","webpack://ready-2-work/./src/models/booking/candidateBookingOverviewBookingItemViewModel.js","webpack://ready-2-work/./src/models/booking/candidateBookingOverviewBookingItemWithDateViewModel.js","webpack://ready-2-work/./src/models/booking/candidateBookingOverviewViewModel.js","webpack://ready-2-work/./src/models/booking/candidateBookingSummaryLocationAddressViewModel.js","webpack://ready-2-work/./src/models/booking/candidateBookingSummaryLocationViewModel.js","webpack://ready-2-work/./src/models/booking/candidateBookingSummaryPaymentViewModel.js","webpack://ready-2-work/./src/models/booking/candidateBookingSummaryViewModel.js","webpack://ready-2-work/./src/models/booking/candidateDateSpecificBookingsSummaryViewModel.js","webpack://ready-2-work/./src/models/booking/runningLatePayload.js","webpack://ready-2-work/./src/models/booking/shiftRecord/addShiftRecordDTO.js","webpack://ready-2-work/./src/models/booking/shiftRecord/addShiftRecordPayloadDTO.js","webpack://ready-2-work/./src/models/booking/shiftRecord/shiftRecordBlock.js","webpack://ready-2-work/./src/models/booking/shiftRecord/shiftRecordBlockWithId.js","webpack://ready-2-work/./src/models/location/baseLocationAddress.js","webpack://ready-2-work/./src/models/booking/shiftRecord/shiftRecordDetailsViewModel.js","webpack://ready-2-work/./src/models/booking/shiftRecord/shiftRecordErrorDTO.js","webpack://ready-2-work/./src/models/booking/tentativeFillActionDTO.js","webpack://ready-2-work/./src/models/booking/tentativeFillRequestAnonymousDTO.js","webpack://ready-2-work/./src/models/booking/tentativeFillRequestDTO.js","webpack://ready-2-work/./src/models/candidate/candidateDocumentViewModel.js","webpack://ready-2-work/./src/models/certification/certificationCustomFieldVM.js","webpack://ready-2-work/./src/models/certification/certificationTypeVM.js","webpack://ready-2-work/./src/models/certification/certificationDetailsVM.js","webpack://ready-2-work/./src/models/certification/certificationTypeFieldMetaRuleVM.js","webpack://ready-2-work/./src/models/certification/certificationTypeFieldMetaVM.js","webpack://ready-2-work/./src/models/client/candidateClientAgreementsViewModel.js","webpack://ready-2-work/./src/models/client/grade.js","webpack://ready-2-work/./src/models/contact/consultantViewModel.js","webpack://ready-2-work/./src/models/error/errorResponseDTO.js","webpack://ready-2-work/./src/models/error/vueErrorDTO.js","webpack://ready-2-work/./src/models/error/windowErrorDTO.js","webpack://ready-2-work/./src/constants/event/EventType.js","webpack://ready-2-work/./src/constants/core/UnitOfMeasurement.js","webpack://ready-2-work/./src/models/event/eventSummaryViewModel.js","webpack://ready-2-work/./src/models/file/accessGuiFileViewModel.js","webpack://ready-2-work/./src/models/file/blobCacheDTO.js","webpack://ready-2-work/./src/models/file/downloadedFile.js","webpack://ready-2-work/./src/models/file/genericFileModel.js","webpack://ready-2-work/./src/models/general/actionButton.js","webpack://ready-2-work/./src/models/general/colorSet.js","webpack://ready-2-work/./src/models/general/dateRange.js","webpack://ready-2-work/./src/models/general/duration.js","webpack://ready-2-work/./src/models/general/emitEvent.js","webpack://ready-2-work/./src/models/general/interaction.js","webpack://ready-2-work/./src/models/location/addressViewModel.js","webpack://ready-2-work/./src/models/registration/complianceItemStatusUpdateDto.js","webpack://ready-2-work/./src/models/registration/complianceItemVideoViewModel.js","webpack://ready-2-work/./src/models/registration/complianceItemViewModel.js","webpack://ready-2-work/./src/models/registration/documentComplianceItemStatusUpdateDto.js","webpack://ready-2-work/./src/models/user/accountCreationDTO.js","webpack://ready-2-work/./src/models/workExperience/workExperienceDotPointDTO.js","webpack://ready-2-work/./src/models/workExperience/workExperienceDotPointWithIdDTO.js","webpack://ready-2-work/./src/models/workExperience/workExperienceSummaryModel.js","webpack://ready-2-work/./src/models/workExperience/workExperienceUploadFormDTO.js","webpack://ready-2-work/./src/models/error/missingConfigurationError.js","webpack://ready-2-work/./src/plugins/appinsights.js","webpack://ready-2-work/./src/plugins/exception-handler.js","webpack://ready-2-work/./src/plugins/firebase.js","webpack://ready-2-work/./src/plugins/vee-validate.js","webpack://ready-2-work/./src/helpers/language-helpers.js","webpack://ready-2-work/./src/plugins/vue-i18n.js","webpack://ready-2-work/./src/plugins/vue-mq.js","webpack://ready-2-work/./src/plugins/vue-toastification.js","webpack://ready-2-work/./src/plugins/vuetify.js","webpack://ready-2-work/./src/constants/error/ErrorPageCodes.js","webpack://ready-2-work/./src/router/routes.js","webpack://ready-2-work/./src/router/index.js","webpack://ready-2-work/./src/services/date/index.js","webpack://ready-2-work/./src/constants/features/featureToggleOptions.js","webpack://ready-2-work/./src/services/features/featureDecisions.js","webpack://ready-2-work/./src/services/file/Base64Convert.js","webpack://ready-2-work/./src/models/error/unknownAppError.js","webpack://ready-2-work/./src/models/error/nullParameterError.js","webpack://ready-2-work/./src/models/user/userIndentificationDTO.js","webpack://ready-2-work/./src/helpers/log-helper.js","webpack://ready-2-work/./src/models/error/promiseRejectionError.js","webpack://ready-2-work/./src/services/logging/AppLogger.js","webpack://ready-2-work/./src/services/toasts/index.js","webpack://ready-2-work/./src/plugins/msal.js","webpack://ready-2-work/./src/models/app/resultDTO.js","webpack://ready-2-work/./src/helpers/result-helper.js","webpack://ready-2-work/./src/constants/date/ActiveDay.js","webpack://ready-2-work/./src/models/availability/r2WAvailabilityStatusViewModel.js","webpack://ready-2-work/./src/models/registration/registrationSummaryViewModel.js","webpack://ready-2-work/./src/models/candidate/candidateUserViewModel.js","webpack://ready-2-work/./src/store/modules/auth.js","webpack://ready-2-work/./src/store/modules/file.js","webpack://ready-2-work/./src/models/registration/registrationViewModel.js","webpack://ready-2-work/./src/constants/api/HttpHeaders.js","webpack://ready-2-work/./src/models/registration/complianceItemFormViewModel.js","webpack://ready-2-work/./src/constants/api/HttpStatusCodes.js","webpack://ready-2-work/./src/store/modules/registrations.js","webpack://ready-2-work/./src/constants/api/ApiErrorCodes.js","webpack://ready-2-work/./src/services/documents/DocumentsActionErrorMessageFactory.js","webpack://ready-2-work/./src/store/modules/documents.js","webpack://ready-2-work/./src/store/modules/ready2Work.js","webpack://ready-2-work/./src/store/modules/availability.js","webpack://ready-2-work/./src/models/workExperience/workExperienceUploadDTO.js","webpack://ready-2-work/./src/models/workExperience/workExperienceDetailsVM.js","webpack://ready-2-work/./src/services/workExperience/WorkExperienceActionErrorMessageFactory.js","webpack://ready-2-work/./src/store/modules/work-experience.js","webpack://ready-2-work/./src/models/qualification/qualificationDetailsViewModel.js","webpack://ready-2-work/./src/services/qualifications/QualificationActionErrorMessageFactory.js","webpack://ready-2-work/./src/models/qualification/qualificationUploadDTO.js","webpack://ready-2-work/./src/store/modules/qualifications.js","webpack://ready-2-work/./src/models/certification/certificationListItemVM.js","webpack://ready-2-work/./src/services/certifications/CertificationActionErrorMessageFactory.js","webpack://ready-2-work/./src/store/modules/certifications.js","webpack://ready-2-work/./src/store/modules/subjects.js","webpack://ready-2-work/./src/models/error/storeResourceNotFoundError.js","webpack://ready-2-work/./src/models/booking/candidateBookingNavigationViewModel.js","webpack://ready-2-work/./src/models/booking/candidateBookingNavigationDTO.js","webpack://ready-2-work/./src/models/booking/bookingOverviewBookingIndexDTO.js","webpack://ready-2-work/./src/models/booking/CandidateBookingSummaryWrapperViewModel.js","webpack://ready-2-work/./src/services/bookings/ShiftRecordPostErrorHandler.js","webpack://ready-2-work/./src/services/bookings/ShiftRecordDidNotHappenErrorHandler.js","webpack://ready-2-work/./src/services/bookings/ShiftRecordLoadErrorHandler.js","webpack://ready-2-work/./src/store/modules/bookings.js","webpack://ready-2-work/./src/models/candidate/candidateDocumentAgreementUpdateViewModel.js","webpack://ready-2-work/./src/store/modules/clients.js","webpack://ready-2-work/./src/store/modules/agreements.js","webpack://ready-2-work/./src/helpers/http-status-helpers.js","webpack://ready-2-work/./src/store/modules/events.js","webpack://ready-2-work/./src/store/modules/downloads.js","webpack://ready-2-work/./src/store/modules/features.js","webpack://ready-2-work/./src/store/modules/index.js","webpack://ready-2-work/./src/utils/dispatch-action-for-all-modules.js","webpack://ready-2-work/./src/constants/api/HttpMethods.js","webpack://ready-2-work/./src/models/api/httpRequestUrl.js","webpack://ready-2-work/./src/constants/api/HttpResponseType.js","webpack://ready-2-work/./src/models/api/httpRequestConfig.js","webpack://ready-2-work/./src/models/api/axiosRequestConfig.js","webpack://ready-2-work/./src/services/api/BaseApiService.js","webpack://ready-2-work/./src/services/api/SignalRApiService.js","webpack://ready-2-work/./src/services/api/UserApiService.js","webpack://ready-2-work/./src/services/api/FileApiService.js","webpack://ready-2-work/./src/services/api/RegistrationsApiService.js","webpack://ready-2-work/./src/services/api/AvailabilityApiService.js","webpack://ready-2-work/./src/services/api/Ready2WorkApiService.js","webpack://ready-2-work/./src/services/api/DocumentsApiService.js","webpack://ready-2-work/./src/services/api/QualificationsApiService.js","webpack://ready-2-work/./src/services/api/WorkExperienceApiService.js","webpack://ready-2-work/./src/services/api/CertificationsApiService.js","webpack://ready-2-work/./src/services/api/SubjectsApiService.js","webpack://ready-2-work/./src/services/api/BookingsApiService.js","webpack://ready-2-work/./src/services/api/AgreementsApiService.js","webpack://ready-2-work/./src/services/api/DownloadsApiService.js","webpack://ready-2-work/./src/services/api/EventsApiService.js","webpack://ready-2-work/./src/services/api/ProfessionalDevelopmentApiService.js","webpack://ready-2-work/./src/services/api/index.js","webpack://ready-2-work/./src/plugins/api.storePlugin.js","webpack://ready-2-work/./src/plugins/i18n.storePlugin.js","webpack://ready-2-work/./src/plugins/appinsights.storePlugin.js","webpack://ready-2-work/./src/services/error/ErrorResponseFactory.js","webpack://ready-2-work/./src/store/index.js","webpack://ready-2-work/./src/utils/object-has-keys.js","webpack://ready-2-work/./src/utils/sanitize-html.js","webpack://ready-2-work/./src/app.vue?1732","webpack://ready-2-work/src/app.vue","webpack://ready-2-work/./src/app.vue?80b8","webpack://ready-2-work/./src/app.vue?6a6e","webpack://ready-2-work/./src/components/_base-button.vue?4a73","webpack://ready-2-work/src/components/_base-button.vue","webpack://ready-2-work/./src/components/_base-button.vue?22ad","webpack://ready-2-work/./src/components/_base-button.vue","webpack://ready-2-work/./src/components/_base-icon.vue?391c","webpack://ready-2-work/src/components/_base-icon.vue","webpack://ready-2-work/./src/components/_base-icon.vue?7b9c","webpack://ready-2-work/./src/components/_base-icon.vue","webpack://ready-2-work/./src/components/_base-input-select.vue?140b","webpack://ready-2-work/src/components/_base-input-select.vue","webpack://ready-2-work/./src/components/_base-input-select.vue?543f","webpack://ready-2-work/./src/components/_base-input-select.vue","webpack://ready-2-work/./src/components/_base-input-text.vue?948a","webpack://ready-2-work/src/components/_base-input-text.vue","webpack://ready-2-work/./src/components/_base-input-text.vue?fa23","webpack://ready-2-work/./src/components/_base-input-text.vue?9141","webpack://ready-2-work/./src/components/_base-input-text.vue","webpack://ready-2-work/./src/components/_base-link.vue?08ab","webpack://ready-2-work/src/components/_base-link.vue","webpack://ready-2-work/./src/components/_base-link.vue?f030","webpack://ready-2-work/./src/components/_base-link.vue","webpack://ready-2-work/./src/components/_base-list-select.vue?3a9e","webpack://ready-2-work/./src/components/skeleton/skeleton-base-list-select.vue?249a","webpack://ready-2-work/src/components/skeleton/skeleton-base-list-select.vue","webpack://ready-2-work/./src/components/skeleton/skeleton-base-list-select.vue?3104","webpack://ready-2-work/./src/components/skeleton/skeleton-base-list-select.vue","webpack://ready-2-work/src/components/_base-list-select.vue","webpack://ready-2-work/./src/components/_base-list-select.vue?c6f5","webpack://ready-2-work/./src/components/_base-list-select.vue","webpack://ready-2-work/./src/components/_base-logo.vue?1f35","webpack://ready-2-work/./src/constants/assets/LogoType.js","webpack://ready-2-work/src/components/_base-logo.vue","webpack://ready-2-work/./src/components/_base-logo.vue?20e6","webpack://ready-2-work/./src/components/_base-logo.vue","webpack://ready-2-work/./src/components/_base-page-title.vue?26a5","webpack://ready-2-work/src/components/_base-page-title.vue","webpack://ready-2-work/./src/components/_base-page-title.vue?ec0b","webpack://ready-2-work/./src/components/_base-page-title.vue","webpack://ready-2-work/./src/components/_base-status-label.vue?a779","webpack://ready-2-work/src/components/_base-status-label.vue","webpack://ready-2-work/./src/components/_base-status-label.vue?0016","webpack://ready-2-work/./src/components/_base-status-label.vue","webpack://ready-2-work/./src/components/dev/the-debug-bar-actions.vue?f6a8","webpack://ready-2-work/./src/components/dev/debug-log-dialog.vue?c35b","webpack://ready-2-work/src/components/dev/debug-log-dialog.vue","webpack://ready-2-work/./src/components/dev/debug-log-dialog.vue?b57a","webpack://ready-2-work/./src/components/dev/debug-log-dialog.vue?a497","webpack://ready-2-work/src/components/dev/the-debug-bar-actions.vue","webpack://ready-2-work/./src/components/dev/the-debug-bar-actions.vue?bfc6","webpack://ready-2-work/./src/components/dev/the-debug-bar-actions.vue","webpack://ready-2-work/./src/components/dev/the-debug-bar.vue?ed9d","webpack://ready-2-work/src/components/dev/the-debug-bar.vue","webpack://ready-2-work/./src/components/dev/the-debug-bar.vue?4f03","webpack://ready-2-work/./src/components/dev/the-debug-bar.vue","webpack://ready-2-work/./src/components/general/lottie.vue?e27e","webpack://ready-2-work/src/components/general/lottie.vue","webpack://ready-2-work/./src/components/general/lottie.vue?bbe3","webpack://ready-2-work/./src/components/general/lottie.vue","webpack://ready-2-work/./src/components/layout/the-system-bar-container.vue?93a4","webpack://ready-2-work/./src/components/impersonate/the-impersonate-bar.vue?5e23","webpack://ready-2-work/./src/mixins/impersonateMixin.js","webpack://ready-2-work/src/components/impersonate/the-impersonate-bar.vue","webpack://ready-2-work/./src/components/impersonate/the-impersonate-bar.vue?2c2d","webpack://ready-2-work/./src/components/impersonate/the-impersonate-bar.vue","webpack://ready-2-work/src/components/layout/the-system-bar-container.vue","webpack://ready-2-work/./src/components/layout/the-system-bar-container.vue?2d98","webpack://ready-2-work/./src/components/layout/the-system-bar-container.vue","webpack://ready-2-work/./src/router/layouts/public.vue?ec54","webpack://ready-2-work/src/router/layouts/public.vue","webpack://ready-2-work/./src/router/layouts/public.vue?a8f4","webpack://ready-2-work/./src/router/layouts/public.vue?0c77","webpack://ready-2-work/./src/router/views/_error.vue?b780","webpack://ready-2-work/./src/services/error/ErrorPageFactory.js","webpack://ready-2-work/src/router/views/_error.vue","webpack://ready-2-work/./src/router/views/_error.vue?fb9b","webpack://ready-2-work/./src/router/views/_error.vue?520c","webpack://ready-2-work/./src/router/views/_loading.vue?6263","webpack://ready-2-work/./src/router/layouts/loading.vue?1b52","webpack://ready-2-work/src/router/layouts/loading.vue","webpack://ready-2-work/./src/router/layouts/loading.vue?3427","webpack://ready-2-work/./src/router/layouts/loading.vue","webpack://ready-2-work/./src/components/layout/page-loader.vue?b964","webpack://ready-2-work/./src/components/layout/page-loader-quotes.vue?a50d","webpack://ready-2-work/src/components/layout/page-loader-quotes.vue","webpack://ready-2-work/./src/components/layout/page-loader-quotes.vue?2b98","webpack://ready-2-work/./src/components/layout/page-loader-quotes.vue?805d","webpack://ready-2-work/src/components/layout/page-loader.vue","webpack://ready-2-work/./src/components/layout/page-loader.vue?068c","webpack://ready-2-work/./src/components/layout/page-loader.vue","webpack://ready-2-work/src/router/views/_loading.vue","webpack://ready-2-work/./src/router/views/_loading.vue?1744","webpack://ready-2-work/./src/router/views/_loading.vue","webpack://ready-2-work/./src/router/views/_timeout.vue?3faa","webpack://ready-2-work/src/router/views/_timeout.vue","webpack://ready-2-work/./src/router/views/_timeout.vue?e19c","webpack://ready-2-work/./src/router/views/_timeout.vue?c3d2","webpack://ready-2-work/./src/router/views/_timeout.vue?304a","webpack://ready-2-work/./src/components/ sync nonrecursive _base-[\\w-]+\\.vue$","webpack://ready-2-work/webpack/bootstrap","webpack://ready-2-work/webpack/runtime/amd options","webpack://ready-2-work/webpack/runtime/chunk loaded","webpack://ready-2-work/webpack/runtime/compat get default export","webpack://ready-2-work/webpack/runtime/define property getters","webpack://ready-2-work/webpack/runtime/ensure chunk","webpack://ready-2-work/webpack/runtime/get javascript chunk filename","webpack://ready-2-work/webpack/runtime/get mini-css chunk filename","webpack://ready-2-work/webpack/runtime/global","webpack://ready-2-work/webpack/runtime/hasOwnProperty shorthand","webpack://ready-2-work/webpack/runtime/load script","webpack://ready-2-work/webpack/runtime/make namespace object","webpack://ready-2-work/webpack/runtime/node module decorator","webpack://ready-2-work/webpack/runtime/publicPath","webpack://ready-2-work/webpack/runtime/css loading","webpack://ready-2-work/webpack/runtime/jsonp chunk loading","webpack://ready-2-work/webpack/startup"],"sourcesContent":["// Generated by genversion.\nexport const version = '1.0.0';\n","import Vue from 'vue'\nimport { version } from '@root/lib/version'\nconst { get, has, set, merge } = require('lodash')\n\n// Load config based on environment\nconst env = process.env.NODE_ENV\n\n// Merge in additional config\nconst config = {\n // Props\n env,\n appVersion: version,\n ...Vue.prototype.$config,\n\n // Methods\n get(path) {\n return get(this, path)\n },\n has(path) {\n return has(this, path)\n },\n set(path, value) {\n return set(this, path, value)\n },\n load(obj) {\n merge(this, obj)\n },\n}\n\nexport default config\n","// Globally register all base components for convenience, because they\n// will be used very frequently. Components are registered using the\n// PascalCased version of their file name.\n\nimport Vue from 'vue'\n\n// https://webpack.js.org/guides/dependency-management/#require-context\nconst requireComponent = require.context(\n // Look for files in the current directory\n '.',\n // Do not look in subdirectories\n false,\n // Only include \"_base-\" prefixed .vue files\n /_base-[\\w-]+\\.vue$/\n)\n\n// For each matching file name...\nrequireComponent.keys().forEach((fileName) => {\n // Get the component config\n const componentConfig = requireComponent(fileName)\n // Get the PascalCase version of the component name\n const componentName = fileName\n // Remove the \"./_\" from the beginning\n .replace(/^\\.\\/_/, '')\n // Remove the file extension from the end\n .replace(/\\.\\w+$/, '')\n // Split up kebabs\n .split('-')\n // Upper case\n .map((kebab) => kebab.charAt(0).toUpperCase() + kebab.slice(1))\n // Concatenated\n .join('')\n\n // Globally register the component\n Vue.component(componentName, componentConfig.default || componentConfig)\n})\n","export default Object.freeze({\n FULL: 'Full',\n SHORT: 'Short',\n ICON: 'Icon',\n NONE: '',\n})\n","export default Object.freeze({\n DARK: 'Dark',\n LIGHT: 'Light',\n WHITE: 'White',\n})\n","export default Object.freeze({\n /**\n * Select multiple days one at a time.\n */\n multiselect: 'multiselect',\n /**\n * Select a start and end range\n */\n range: 'range',\n})\n","export default Object.freeze({\n /**\n * Candidate is tentatively placed in the booking\n */\n tentative: 'tentative',\n /**\n * Candidate is required to sign off on 1 or more agreements before taking the booking\n */\n agreementsPending: 'agreementsPending',\n /**\n * This booking is in the past and the candidate is required to fill in timesheeting information\n */\n confirmDetailsRequired: 'confirmDetailsRequired',\n /**\n * This booking is in the past, timesheeting is either disabled or they have confirmed the booking details, and the user can now provide feedback on the booking\n */\n feedbackRequired: 'feedbackRequired',\n /**\n * Will display a UI element that allows the candidate to notify client they will be running late\n */\n runningLate: 'runningLate',\n /**\n * Button to get directions to the location\n */\n getDirections: 'getDirections',\n /**\n * No bookings were scheduled, this will allow the user to set their availability for a future or present date\n */\n availability: 'availability',\n\n // CUSTOM - Will not be sent back by API\n\n /**\n * Custom actionable item. Used to tell UI that user has accepted tentative booking\n */\n tentativeAccepted: 'tentativeAccepted',\n /**\n * Custom actionable item. Used to tell UI that user has declined tentative booking\n */\n tentativeDeclined: 'tentativeDeclined',\n})\n","export default Object.freeze({\n /**\n * Client Concern – Agency Took too long\n */\n AGENCY_TOOK_TOO_LONG: -11,\n /**\n * Unable to Fill\n */\n UNABLE_TO_FILL: -12,\n /**\n * anzuk Error\n */\n ANZUK_ERROR: -13,\n /**\n * Candidate – Illness\n */\n CANDIDATE_ILLNESS: -14,\n /**\n * Lapsed\n */\n LAPSED: -100,\n /**\n * Deleted from Group Booking\n */\n DELETED_FROM_GROUP_BOOKING: -50,\n /**\n * Cancelled\n */\n CANCELLED: -1,\n /**\n * Finance Cancelled\n */\n FINANCE_CANCELLED: -101,\n /**\n * Refunded\n */\n REFUNDED: -1000,\n /**\n * Friday Invoice (?)\n */\n FRIDAY_INVOICE: 99,\n /**\n * ECH Invoicing Ready\n */\n ECH_INVOICING_READY: 95,\n /**\n * ECH Booking – Not Approved\n */\n ECH_NOT_APPROVED: 80,\n /**\n * School Booking – Not Approved\n */\n SCHOOL_NOT_APPROVED: 70,\n /**\n * The client has submitted their timesheet and made no changes to the times\n */\n CLIENT_SUBMITTED_TIMESHEET_NO_CHANGES: 111,\n /**\n * The client has submitted their timesheet and made changes\n */\n CLIENT_SUBMITTED_TIMESHEET_MODIFIED: 112,\n /**\n * The client has submitted their timesheet and stated the booking didn't happen\n */\n CLIENT_SUBMITTED_TIMESHEET_DID_NOT_HAPPEN: 113,\n /**\n * The candidate has submitted their timesheet and made no changes to the times\n */\n CANDIDATE_SUBMITTED_TIMESHEET_NO_CHANGES: 114,\n /**\n * The candidate has submitted their timesheet and made changes\n */\n CANDIDATE_SUBMITTED_TIMESHEET_MODIFIED: 115,\n /**\n * The candidate has submitted their timesheet and stated the booking didn't happen\n */\n CANDIDATE_SUBMITTED_TIMESHEET_DID_NOT_HAPPEN: 116,\n /**\n * Both the candidate and client have stated conflicting times for their timesheets.\n * This raises a dispute that is to be resolved by the consultant.\n */\n TIMESHEET_DISPUTE_OR_MISMATCH: 117,\n /**\n * Active, Withhold Pay\n */\n ACTIVE_WITHOLD_PAY: 14,\n /**\n * Active, Lapsed\n */\n ACTIVE_LAPSED: 13,\n /**\n * Tentative Filled\n */\n TENTATIVE_FILLED: 105,\n /**\n * Agency - Moved Client\n */\n AGENCY_MOVED_CLIENT: -15,\n /**\n * Exported to BullHorn NZ\n */\n EXPORTED_TO_BULLHORN_NZ: 175,\n /**\n * Partial Export - Review in BullHorn\n */\n PARTIAL_BULLHORN_EXPORT: -41,\n /**\n * Training\n */\n TRAINING: -16,\n /**\n * Other\n */\n OTHER: -17,\n /**\n * Cancelled by Client\n */\n CANCELLED_BY_CLIENT: -18,\n})\n","export default Object.freeze({\n /**\n * Describes the entire length of a booking/shift\n */\n bookingDuration: 'bookingDuration',\n /**\n * Typically describes a lunch break\n */\n meal: 'meal',\n /**\n * Describes any other break. For CA, this will describe rest breaks\n */\n other: 'other',\n})\n","export default Object.freeze({\n /**\n * Displays an alert at the top of the form\n */\n alert: 'alert',\n /**\n * Block that obscures the form and removes any confirmation buttons.\n * Typically reserved for errors that are unrecoverable or scenarios where\n * there are no actions required from the user.\n */\n statusBlock: 'statusBlock',\n /**\n * Displays a dialog to enter the reason a candidate's shift record details are non compliant\n */\n nonCompliant: 'nonCompliant',\n})\n","export default Object.freeze({\n /**\n * closed due to it being actioned after the fact.\n */\n CLOSED_TENTATIVE_OPEN_BUT_BOOKING_NOT_105:\n 'CLOSED_TENTATIVE_OPEN_BUT_BOOKING_NOT_105',\n CLOSED_STATUS_WRONG_CANDIDATE: 'CLOSED_STATUS_WRONG_CANDIDATE',\n CLOSED_STATUS_UNABLED_TO_LOAD: 'CLOSED_STATUS_UNABLED_TO_LOAD',\n CLOSED_STATUS_NOT_105: 'CLOSED_STATUS_NOT_105',\n REJECTED: 'REJECTED',\n OPEN: 'OPEN',\n ACCEPTED: 'ACCEPTED',\n})\n","export default Object.freeze({\n /**\n * Initial state\n */\n unset: 'unset',\n /**\n * Candidate accepts tentative placements\n */\n accept: 'accept',\n /**\n * Candidate declines invite to tentative placements\n */\n decline: 'decline',\n})\n","export const TimesheetOperationType = Object.freeze({\n /**\n * User is confirming that the booking happened\n */\n ACCEPT: 'ACCEPT',\n /**\n * The booking times have been modified and the timesheet will be sent for review\n */\n MODIFY: 'MODIFY',\n /**\n * User indicated that the booking didn't happen and the timesheet will be sent for review\n */\n CANCEL: 'CANCEL',\n})\n","export const AvailabilityStatus = Object.freeze({\n UNSET: 'unset',\n AVAILABLE: 'available',\n UNAVAILABLE: 'unavailable',\n PARTIAL: 'partial',\n})\n","export default Object.freeze({\n AVAILABLE: 'available',\n UNAVAILABLE: 'unavailable',\n})\n","export const Ready2WorkStatus = Object.freeze({\n UNSET: 'unset',\n READY: 'ready',\n NOTREADY: 'notReady',\n})\n","import FieldId from './FieldId'\n\nexport default Object.freeze({\n CUSTOM_FIELD_01: FieldId.CUSTOM_FIELD_01,\n CUSTOM_FIELD_02: FieldId.CUSTOM_FIELD_02,\n CUSTOM_FIELD_03: FieldId.CUSTOM_FIELD_03,\n})\n","export default Object.freeze({\n CERT_REF_NO: 'certRefNo',\n DATE_OBTAINED: 'dateObtained',\n DATE_EXPIRY: 'dateExpiry',\n CUSTOM_FIELD_01: 'customField01',\n CUSTOM_FIELD_02: 'customField02',\n CUSTOM_FIELD_03: 'customField03',\n NOTE: 'note',\n})\n","/**\n * Describes environment types related to process.env.NODE_ENV and some custom types\n */\nexport default Object.freeze({\n production: 'production',\n development: 'development',\n local: 'local',\n unit: 'unit',\n e2e: 'e2e',\n})\n","/**\n * Describes various types of interactions with UI elements\n */\nexport default Object.freeze({\n /**\n * Initial state\n */\n none: 'none',\n /**\n * Indicates this interaction will emit an event\n */\n emitEvent: 'emitEvent',\n /**\n * Interaction will utilise the VueRouter to redirect within the app\n */\n routerLink: 'routerLink',\n /**\n * Indicates that clicking on this UI element should open up a new tab\n */\n externalLink: 'externalLink',\n /**\n * Function to be fired on click\n */\n function: 'function',\n})\n","/**\n * Describes a media query breakpoint\n */\nexport default class MediaQueryBreakPoint {\n constructor({ code = 'md', size = 0 } = {}) {\n /**\n * Break point code 'xs'|'sm'|'md'|'lg'|'xl'\n * @type {String}\n */\n this.code = code\n\n /**\n * Size of breakpoint\n * @type {Number}\n */\n this.size = size\n }\n}\n","import MediaQueryBreakPoint from '@/models/general/mediaQueryBreakPoint'\n\n/**\n * Device pixel breakpoints to be used in conjunction with VueMQ & Vuetify components.\n * Pixel breakpoints are based on Vuetify's breakpoint values: https://vuetifyjs.com/en/features/breakpoints/\n */\nexport default Object.freeze({\n /**\n * Extra small - Small to large phone\n */\n xs: new MediaQueryBreakPoint({\n code: 'xs',\n size: 600,\n }),\n /**\n * Small - Small to medium tablet\n */\n sm: new MediaQueryBreakPoint({\n code: 'sm',\n size: 960,\n }),\n /**\n * Medium - Large tablet to laptop\n */\n md: new MediaQueryBreakPoint({\n code: 'md',\n size: 1264,\n }),\n /**\n * Large - Desktop\n */\n lg: new MediaQueryBreakPoint({\n code: 'lg',\n size: 1904,\n }),\n /**\n * Extra large - \t4k and ultra-wide\n */\n xl: new MediaQueryBreakPoint({\n code: 'xl',\n size: Infinity,\n }),\n})\n","export default Object.freeze({\n accent: 'accent',\n blue: 'blue',\n error: 'error',\n indigo: 'indigo',\n info: 'info',\n primary: 'primary',\n red: 'red',\n secondary: 'secondary',\n success: 'success',\n warning: 'warning',\n grey: 'grey',\n})\n","/**\n * Describes the currency codes\n */\nexport default Object.freeze({\n Unknown: 'Unknown',\n AUD: 'AUD',\n USD: 'USD',\n GBP: 'GBP',\n EUR: 'EUR',\n})\n","/**\n * Tokens used to format dates\n * @tutorial https://day.js.org/docs/en/display/format\n */\nexport default Object.freeze({\n // --- 01. Date --------------------------------------------------------------\n\n /**\n * Two-digit year\n * @example 18\n */\n YY: 'YY',\n /**\n * Four-digit year\n * @example 2018\n */\n YYYY: 'YYYY',\n /**\n * The month, beginning at 1\n * @example 1-12\n */\n M: 'M',\n /**\n * The month, 2-digits\n * @example 01-12\n */\n MM: 'MM',\n /**\n * The abbreviated month name\n * @example Jan-Dec\n */\n MMM: 'MMM',\n /**\n * The full month name\n * @example January-December\n */\n MMMM: 'MMMM',\n /**\n * The day of the month\n * @example 1-31\n */\n D: 'D',\n /**\n * The day of the month, 2-digits\n * @example 01-31\n */\n DD: 'DD',\n /**\n * The day of the week, with Sunday as 0\n * @example 0-6\n */\n d: 'd',\n /**\n * The min name of the day of the week\n * @example Su-Sa\n */\n dd: 'dd',\n /**\n * The short name of the day of the week\n * @example Sun-Sat\n */\n ddd: 'ddd',\n /**\n * The name of the day of the week\n * @example Sunday-Saturday\n */\n dddd: 'dddd',\n /**\n * Quarter\n * @example 1-4\n */\n Q: 'Q',\n /**\n * Day of Month with ordinal\n * @example 1st 2nd ... 31st\n */\n Do: 'Do',\n /**\n * \tUnix Timestamp in second\n * @example 1360013296\n */\n X: 'X',\n /**\n * \tUnix Timestamp in millisecond\n * @example 1360013296123\n */\n x: 'x',\n\n // --- 02. Time --------------------------------------------------------------\n\n /**\n * The hour, 24-hour clock\n * @example 0-23\n */\n H: 'H',\n /**\n * The hour, 2-digits, 24-hour clock\n * @example 00-23\n */\n HH: 'HH',\n /**\n * The hour, 12-hour clock\n * @example 1-12\n */\n h: 'h',\n /**\n * The hour, 12-hour clock, 2-digits\n * @example 01-12\n */\n hh: 'hh',\n /**\n * The minute\n * @example 0-59\n */\n m: 'm',\n /**\n * The minute, 2-digits\n * @example 00-59\n */\n mm: 'mm',\n /**\n * The second\n * @example 0-59\n */\n s: 's',\n /**\n * The second, 2-digits\n * @example 00-59\n */\n ss: 'ss',\n /**\n * The millisecond, 3-digits\n * @example 000-999\n */\n SSS: 'SSS',\n /**\n * The offset from UTC, ±HH:mm\n * @example +05:00\n */\n Z: 'Z',\n /**\n * The offset from UTC, ±HHmm\n * @example +0500\n */\n ZZ: 'ZZ',\n /**\n * Meridian, capitalised\n * @example AM/PM\n */\n A: 'A',\n /**\n * Meridian, lowercase\n * @example am/pm\n */\n a: 'a',\n\n // --- 03. Localised ---------------------------------------------------------\n\n /**\n * h:mm A\n * @example 8:02 PM\n */\n LT: 'LT',\n /**\n * h:mm:ss A\n * @example 8:02:18 PM\n */\n LTS: 'LTS',\n /**\n * MM/DD/YYYY\n * @example 08/16/2018\n */\n L: 'L',\n /**\n * MMMM D, YYYY\n * @example August 16, 2018\n */\n LL: 'LL',\n /**\n * MMMM D, YYYY h:mm A\n * @example August 16, 2018 8:02 PM\n */\n LLL: 'LLL',\n /**\n * dddd, MMMM D, YYYY h:mm A\n * @example Thursday, August 16, 2018 8:02 PM\n */\n LLLL: 'LLLL',\n /**\n * M/D/YYYY\n * @example 8/16/2018\n */\n l: 'l',\n /**\n * MMM D, YYYY\n * @example Aug 16, 2018\n */\n ll: 'll',\n /**\n * MMM D, YYYY h:mm A\n * @example Aug 16, 2018 8:02 PM\n */\n lll: 'lll',\n /**\n * ddd, MMM D, YYYY h:mm A\n * @example Thu, Aug 16, 2018 8:02 PM\n */\n llll: 'llll',\n\n // --- 04. Custom ------------------------------------------------------------\n\n /**\n * @example 12th Jan\n */\n DoMMM: 'Do MMM',\n /**\n * @example Jan 12th\n */\n MMMDo: 'MMM Do',\n /**\n * @example 12th Jan 2022\n */\n DoMMMYYYY: 'Do MMM YYYY',\n /**\n * @example Jan 12th 2022\n */\n MMMDoYYYY: 'MMM Do YYYY',\n /**\n * @example Mon 12/01/2022\n */\n dddL: 'ddd L',\n /**\n * @example Monday, January 12 2022\n */\n ddddLL: 'dddd, LL',\n /**\n * @example January 2022\n */\n MMMMYYYY: 'MMMM YYYY',\n /**\n * @example 2022-01-12\n */\n YYYYMMDD: 'YYYY-MM-DD',\n /**\n * @example 2022-01-12T00:00:00\n */\n YYYYMMDDT0: 'YYYY-MM-DDT00:00:00',\n /**\n * @example 2022-01\n */\n YYYYMM: 'YYYY-MM',\n /**\n * @example Mon, 12th Jan\n */\n dddDoMMM: 'ddd, Do MMM',\n /**\n * @example Mon, Jan 12th\n */\n dddMMMDo: 'ddd, MMM Do',\n /**\n * @example Mon 12th\n */\n dddDo: 'ddd Do',\n /**\n * 24hr time\n * @example 13:00\n */\n HHmm: 'HH:mm',\n})\n","/**\n * Sets the number of days to display in the date strip\n */\nexport default Object.freeze({\n WEEK: 'week',\n FORTNIGHT: 'fortnight',\n MONTH: 'month',\n YEAR: 'year',\n})\n","export default Object.freeze({\n /**\n * Initial state\n */\n unset: 'unset',\n /**\n * Date happened in the past\n */\n past: 'past',\n /**\n * Date is on the current day or currently happening\n */\n present: 'present',\n /**\n * Date will happen in the future\n */\n future: 'future',\n})\n","/**\n * Zero indexed week day mapping https://day.js.org/docs/en/get-set/day\n */\nexport const DayOfWeek = Object.freeze({\n SUNDAY: 0,\n MONDAY: 1,\n TUESDAY: 2,\n WEDNESDAY: 3,\n THURSDAY: 4,\n FRIDAY: 5,\n SATURDAY: 6,\n})\n","/**\n * List of units available from https://day.js.org/docs/en/display/difference\n */\nexport default Object.freeze({\n DAY: 'd',\n WEEK: 'w',\n QUARTER: 'Q',\n MONTH: 'M',\n YEAR: 'y',\n HOUR: 'h',\n MINUTE: 'm',\n SECOND: 's',\n MILLISECOND: 'ms',\n})\n","/**\n * Indicates status of event which will then influence it's styling\n */\nexport default Object.freeze({\n UNSET: 'unset',\n OK: 'ok',\n REQUIRES_ACTION: 'requires_action',\n})\n","export default Object.freeze({\n /**\n * Error is undetermined\n */\n unknown: 'unknownError',\n /**\n * An internal api error.\n */\n api: 'apiError',\n /**\n * One or more of the input parameters failed validation.\n */\n validation: 'validationError',\n /**\n * An authorisation or authentication error.\n */\n security: 'securityError',\n /**\n * Requested resource does not exist.\n */\n notFound: 'notFoundError',\n})\n","export default Object.freeze({\n /**\n * Something happened in setting up the request that triggered an Error\n */\n unknown: 'unknown',\n /**\n * The request was made and the server responded with a status code\n * that falls out of the range of 2xx\n */\n server: 'server',\n /**\n * The request was made but no response was received\n */\n request: 'request',\n /**\n * The operation failed within client-side code\n */\n clientSide: 'clientSide',\n})\n","export default Object.freeze({\n /**\n * initial state\n */\n unset: 'unset',\n /**\n * Induction document directly from the client. Aka Job Safety Analysis (JSA)\n */\n induction: 'induction',\n /**\n * Occupational Health & Safety (aka WHS) policy\n */\n ohs: 'ohs',\n /**\n * COVID 19 policy document\n */\n covid: 'covid',\n})\n","export const FormInputType = Object.freeze({\n DATE: 'date',\n TEXT: 'text',\n TEXTAREA: 'textarea',\n SELECT: 'select',\n RADIO: 'radio',\n})\n","export const ValidationRules = Object.freeze({\n /**\n * Field is required\n */\n required: 'required',\n /**\n * Value cannot have more than specified amount of characters\n */\n maxCharacterLength: 'maxCharacterLength',\n /**\n * Expiry date must be after the obtained date\n */\n afterObtainedDate: 'afterObtainedDate',\n})\n","/**\n * Used to describe the direction of an action. For example, clicking the next or previous arrows on the date strip.\n */\nexport default Object.freeze({\n previous: 'previous',\n next: 'next',\n})\n","export default Object.freeze({\n CandidatePhoto: 'CandidatePhoto',\n /**\n * Considered a document reference type\n */\n Certification: 'Certification',\n CheckBox: 'CheckBox',\n /**\n * Considered an agreement reference type\n */\n Contract: 'Contract',\n Form: 'Form',\n Identification100: 'Identification100',\n Qualification: 'Qualification',\n ReferenceCheckFormGroup: 'ReferenceCheckFormGroup',\n /**\n * Considered an agreement reference type\n */\n RegistrationDoc: 'RegistrationDoc',\n /**\n * Aka Work Experience\n */\n StatementsOfService: 'StatementsOfService',\n /**\n * Considered a document reference type\n */\n UploadedFile: 'UploadedFile',\n /**\n * Considered an agreement reference type\n */\n Video: 'Video',\n})\n","export default Object.freeze({\n /**\n * Compliance item has been completed and verified.\n */\n Complete: 'Complete',\n /**\n * The compliance item has been fullfilled by an uploaded file/cert that\n * isn't currently linked to this item and has been verified.\n */\n CompleteByUnlinked: 'CompleteByUnlinked',\n /**\n * Requires candidate action.\n */\n RequiresCandidateAction: 'RequiresCandidateAction',\n /**\n * Awaiting to be verified by a consultant.\n * No further action is required from the user.\n */\n AwaitingVerification: 'AwaitingVerification',\n /**\n * The compliance item has been fullfilled by an uploaded file/cert that\n * isn't currently linked to this item and is in the process of being verified.\n */\n AwaitingVerificationForUnlinked: 'AwaitingVerificationForUnlinked',\n})\n","export default Object.freeze({\n unset: 'unset',\n document: 'document',\n agreement: 'agreement',\n form: 'form',\n})\n","export default Object.freeze({\n /**\n * aka Forms2\n */\n internal: 'internal',\n jotForm: 'jotForm',\n})\n","export const RegistrationStatus = Object.freeze({\n ACTIVE: 'Active',\n COMPLETE: 'Complete',\n PENDING: 'Pending',\n IN_PROGRESS: 'In Progress',\n AWAITING_VERIFICATION: 'Awaiting Verification',\n DELETED: 'Deleted',\n TERMINATED: 'Terminated',\n})\n","export const RegistrationStatusReason = Object.freeze({\n // Active\n OK: 'OK',\n ITEMS_EXPIRED: 'ItemsExpired',\n ITEMS_EXPIRING: 'ItemsExpiring',\n\n // Pending\n NO_CHECKLIST: 'NoChecklist',\n AWAIT_CERT_OR_DOC: 'AwaitCertOrDoc',\n AWAITING_CANDIDATE_ACTION: 'AwaitCandidateAction',\n AWAITING_CONSULTANT_ACTION: 'AwaitConsultantAction',\n})\n","export default Object.freeze({\n /**\n * The video is hosted on Vimeo. This url should be played in a Vimeo player.\n */\n Vimeo: 'Vimeo',\n Youtube: 'Youtube',\n Bitmovin: 'Bitmovin',\n})\n","export default Object.freeze({\n home: {\n name: 'home',\n path: '/',\n },\n myAvailability: {\n name: 'myAvailability',\n path: '/availability',\n },\n myRegistrations: {\n name: 'myRegistrations',\n path: '/registrations',\n },\n registrationDetails: {\n name: 'registrationDetails',\n path: '/registrations/:registrationId',\n },\n groupBookingDetailsGuestAccess: {\n name: 'groupBookingDetailsGuestAccess',\n path: '/bookings/group/guest/:accessGuid',\n alias: '/booking/group/:accessGuid', // Actual path used as guest access link was not updated and is using the r2w 1.0 style\n },\n bookingDetailsGuestAccess: {\n name: 'bookingDetailsGuestAccess',\n path: '/bookings/:shortTermTentativeId/guest/:accessGuid',\n alias: '/booking/:shortTermTentativeId/:accessGuid', // Actual path used as guest access link was not updated and is using the r2w 1.0 style\n },\n bookingDetails: {\n name: 'bookingDetails',\n path: '/bookings/:bookingId',\n },\n myFiles: {\n name: 'myFiles',\n path: '/my-files',\n },\n profDevelopment: {\n name: 'profDevelopment',\n path: '/professional-development',\n },\n downloads: {\n name: 'downloads',\n path: '/downloads',\n },\n contact: {\n name: 'contact',\n path: '/contact',\n },\n help: {\n name: 'help',\n path: '/help',\n },\n settings: {\n name: 'settings',\n path: '/settings',\n },\n changePassword: {\n name: 'changePassword',\n path: '/settings/change-password',\n },\n login: {\n name: 'login',\n path: '/login',\n },\n accountSetup: {\n name: 'accountSetup',\n path: '/account/setup',\n },\n impersonateLogout: {\n name: 'impersonateLogout',\n path: '/user/impersonate/logout',\n },\n impersonateLogin: {\n name: 'impersonateLogin',\n path: '/user/impersonate/:candidateId',\n },\n logout: {\n name: 'logout',\n path: '/logout',\n },\n underConstruction: {\n name: 'underConstruction',\n path: '/under-construction',\n },\n notFound: {\n name: 'NotFoundPage',\n path: '/404',\n },\n error: {\n name: 'ErrorPage',\n path: '/500',\n },\n unauthorized: {\n name: 'UnauthorizedPage',\n path: '/401',\n },\n accountLoadFailure: {\n name: 'AccountLoadFailedPage',\n },\n accountSuspended: {\n name: 'AccountSuspendedPage',\n },\n})\n","export const Status = Object.freeze({\n VERIFIED: 'verified',\n UNKNOWN: 'unknown',\n UNVERIFIED: 'unverified',\n})\n","export default Object.freeze({\n general: 'general',\n keyAchievement: 'keyAchievement',\n extraCurricular: 'extraCurricular',\n rolesAndResponsibilities: 'rolesAndResponsibilities',\n})\n","/**\n * Truncates any string provided\n * @param {String} text String to be truncated\n * @param {Number} limit String length before truncating. Default: 0\n * @param {String} delimiter Defaults to '...'\n * @returns Truncated string\n */\nexport default (text, limit = 0, delimiter = '...') => {\n if (typeof text !== 'string')\n throw Error('Invalid data type for text (Expected String)')\n\n if (typeof limit !== 'number')\n throw Error('Invalid data type for limit (Expected Number)')\n\n if (typeof delimiter !== 'string')\n throw Error('Invalid data type for delimiter (Expected String)')\n\n if (limit === 0) return text\n\n if (text.length > limit) text = text.substring(0, limit) + delimiter\n\n return text\n}\n","/**\n * Checks if an array contains any items.\n * @param {Array} arr The array to check.\n * @returns {Boolean}, true if the array contains items. Otherwise, false.\n * @depreciated Use isEmptyArray instead\n */\nconst isNonEmptyArray = (arr) => {\n return arr && Array.isArray(arr) && arr.length > 0\n}\n\n/**\n * Checks if an array is empty, null or a non-array\n * @param {Array?} arr\n * @returns\n */\nconst isEmptyArray = (arr) => {\n return !arr || !Array.isArray(arr) || arr.length === 0\n}\n\nexport { isNonEmptyArray, isEmptyArray }\n","// eslint-disable-next-line no-unused-vars\nimport BackendBookingFeatureDecisions from '@/models/booking/backendBookingFeatureDecisionDTO'\n\n/**\n * Generate feature toggles object for bookings components/logic\n * @param {Object} featureDecisions Object returned from `services/features/featureDecisions.js`\n * @param {BackendBookingFeatureDecisions} backendBookingFeatureDecisions\n */\nconst bookingFeatureFactory = (\n featureDecisions,\n backendBookingFeatureDecisions\n) => {\n return {\n isRunningLateEnabled:\n featureDecisions.isRunningLateEnabled() &&\n backendBookingFeatureDecisions.isRunningLateEnabled,\n }\n}\n\nexport default bookingFeatureFactory\n","import { clone } from 'lodash'\nimport BookingActionableItemType from '@/constants/booking/BookingActionableItemType'\nimport DateTense from '@/constants/date/DateTense'\nimport DurationUnits from '@/constants/date/DurationUnits'\nimport $dayjs from '@/services/date'\nimport VuetifyColourClass from '@/constants/core/VuetifyColourClass'\nimport bookingFeatureFactory from '@/services/features/bookingFeatureFactory'\n\n/**\n * Determines if booking is about to start or is has recently started. Used to display various UI actions (e.g. running late)\n * @param {Object} booking\n * @param {DateTense} tense\n * @returns {Boolean}\n */\nconst determineIfBookingIsAboutToStart = (booking, tense) => {\n if (tense === DateTense.future || tense === DateTense.past) return false\n\n const hasBookingEndTimePassed = $dayjs().isAfter($dayjs(booking.endTimeLocal))\n if (hasBookingEndTimePassed) return false\n\n const MINUTES_BEFORE_START_TIME = 180 // 3 hours\n const MINUTES_AFTER_START_TIME = 60 // 1 hour\n\n const isBookingStartTimeApproaching = $dayjs().isBefore(\n $dayjs(booking.startTimeLocal)\n )\n\n const isBookingStartTimeWithinStartHourRangeFromNow =\n isBookingStartTimeApproaching &&\n $dayjs(booking.startTimeLocal).diff($dayjs(), DurationUnits.MINUTE) <=\n MINUTES_BEFORE_START_TIME\n\n const isAfterBookingStartTime = $dayjs().isAfter(\n $dayjs(booking.startTimeLocal)\n )\n\n const hasBookingCommencedWithinStartTimeAfterRange =\n isAfterBookingStartTime &&\n $dayjs().diff($dayjs(booking.startTimeLocal), DurationUnits.MINUTE) <=\n MINUTES_AFTER_START_TIME\n\n return (\n isBookingStartTimeWithinStartHourRangeFromNow ||\n hasBookingCommencedWithinStartTimeAfterRange\n )\n}\n\n/**\n * Compiles a list of actionable items, cloning them so the original list isn't modified.\n * If the booking is about to start, additional action items are added\n * @param {BookingActionableItemType[]} actionableItems\n * @param {DateTense} tense\n * @param {Boolean} isBookingAboutToStart Describes if the booking is within the start period time window\n * @param {Object} featureDecisions Object returned from `services/features/featureDecisions.js`\n * @param {BackendBookingFeatureDecisions} backendBookingFeatureDecisions Feature decisions coming from backend\n * @returns {BookingActionableItemType[]}\n */\nconst generateBookingActions = (\n actionableItems,\n tense,\n isBookingAboutToStart = false,\n featureDecisions,\n backendBookingFeatureDecisions\n) => {\n let processedActionableItems = clone(actionableItems)\n\n const isTentativeBooking = processedActionableItems.includes(\n BookingActionableItemType.tentative\n )\n const needsToSubmitShiftRecord = processedActionableItems.includes(\n BookingActionableItemType.confirmDetailsRequired\n )\n const hasFeedbackRequired = processedActionableItems.includes(\n BookingActionableItemType.feedbackRequired\n )\n\n if (isTentativeBooking) return [BookingActionableItemType.tentative]\n\n switch (tense) {\n case DateTense.future:\n // DateTense.future is a valid tense but does not need any\n // additional rules applied\n break\n case DateTense.present:\n if (isBookingAboutToStart) {\n const featureToggles = bookingFeatureFactory(\n featureDecisions,\n backendBookingFeatureDecisions\n )\n if (featureToggles.isRunningLateEnabled) {\n processedActionableItems.push(BookingActionableItemType.runningLate)\n }\n processedActionableItems.push(BookingActionableItemType.getDirections)\n }\n break\n case DateTense.past:\n if (needsToSubmitShiftRecord) {\n processedActionableItems = processedActionableItems.filter(\n (actionableItem) =>\n actionableItem ===\n BookingActionableItemType.confirmDetailsRequired ||\n actionableItem === BookingActionableItemType.agreementsPending\n )\n } else if (hasFeedbackRequired) {\n processedActionableItems = processedActionableItems.filter(\n (actionableItem) =>\n actionableItem === BookingActionableItemType.feedbackRequired ||\n actionableItem === BookingActionableItemType.agreementsPending\n )\n }\n\n break\n default:\n throw new TypeError(`Invalid tense provided: ${tense}`)\n }\n\n return processedActionableItems\n}\n\n/**\n * Filters out actionable items not considered urgent enough to theme various\n * booking components as 'requiring action'.\n * @param {BookingActionableItemType[]} actionableItems\n * @returns {BookingActionableItemType[]}\n */\nconst filterActionableItemsForProcessingEventColour = (\n actionableItems = []\n) => {\n if (!actionableItems && actionableItems.length === 0) return []\n\n // List of items we want to notify the user that require action\n const includeList = [\n BookingActionableItemType.tentative,\n BookingActionableItemType.agreementsPending,\n BookingActionableItemType.confirmDetailsRequired,\n ]\n\n return actionableItems.filter((actionableItem) =>\n includeList.includes(actionableItem)\n )\n}\n\n/**\n * Determines the accent colour of the booking based on if there are any actionable items\n * @param {BookingActionableItemType[]} actionableItems\n * @returns\n */\nconst determineColorByBookingActionableItems = (actionableItems = []) => {\n const filteredActionableItems =\n filterActionableItemsForProcessingEventColour(actionableItems)\n\n return filteredActionableItems.length > 0\n ? VuetifyColourClass.red\n : VuetifyColourClass.blue\n}\n\nexport {\n generateBookingActions,\n determineIfBookingIsAboutToStart,\n determineColorByBookingActionableItems,\n}\n","import { isEmpty } from 'lodash'\nimport dayjs from '@/services/date'\n// eslint-disable-next-line no-unused-vars\nimport Duration from '@/models/general/duration'\n\n/**\n * @obselete Use checkCacheFreshness instead\n */\nconst isCacheFresh = ({\n cacheDuration,\n durationUnits,\n lastUpdated,\n forceRefresh = false,\n isDirty = false,\n}) => {\n // If not being forced to refresh and it hasn't been longer than staleness threshold\n // return resource without API call\n return (\n !isEmpty(lastUpdated) &&\n dayjs(lastUpdated).isValid() &&\n !forceRefresh &&\n !isDirty &&\n dayjs().diff(lastUpdated, durationUnits) < cacheDuration\n )\n}\n\nconst isCacheNonexpired = ({ expirationDateTimeUtc, forceRefresh = false }) => {\n return (\n !isEmpty(expirationDateTimeUtc) &&\n dayjs(expirationDateTimeUtc).isValid() &&\n !forceRefresh &&\n dayjs.utc().isBefore(expirationDateTimeUtc)\n )\n}\n\n/**\n * Updated isCacheFresh function that will determine cache freshness in relation\n * to the lastUpdated date\n * @param {Duration} duration\n * @param {Date} lastUpdated\n * @param {Boolean} forceRefresh\n * @returns {Boolean} true if cache is fresh\n */\nconst checkCacheFreshness = (duration, lastUpdated, forceRefresh = false) => {\n if (forceRefresh) return false\n\n return (\n !isEmpty(lastUpdated) &&\n dayjs(lastUpdated).isValid() &&\n dayjs().diff(lastUpdated, duration.unit) < duration.value\n )\n}\n\nconst getSavedState = (key) => {\n const item = window.localStorage.getItem(key)\n return item && item !== 'undefined' ? JSON.parse(item) : null\n}\n\nconst saveState = (key, state) => {\n window.localStorage.setItem(key, JSON.stringify(state))\n}\n\nconst deleteState = (key) => {\n saveState(key, null) // extra precaution\n window.localStorage.removeItem(key)\n}\n\nexport {\n isCacheFresh,\n isCacheNonexpired,\n checkCacheFreshness,\n saveState,\n deleteState,\n getSavedState,\n}\n","import ColorSet from '@/models/general/colorSet'\n\n// Hash any string into an integer value\nexport const hashCode = (str, hash) => {\n if (hash === undefined) {\n hash = 0\n }\n for (let i = 0; i < str.length; i++) {\n hash = str.charCodeAt(i) + ((hash << 5) - hash)\n }\n return hash\n}\n\n// Convert an int to hexadecimal with a max length\n// of six characters.\nexport const intToARGB = (i) => {\n const h =\n ((i >> 24) & 0xff).toString(16) +\n ((i >> 16) & 0xff).toString(16) +\n ((i >> 8) & 0xff).toString(16) +\n (i & 0xff).toString(16)\n return h.substring(0, 6)\n}\n\nexport const hexToRgb = (hex) => {\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex)\n return result\n ? {\n r: parseInt(result[1], 16),\n g: parseInt(result[2], 16),\n b: parseInt(result[3], 16),\n }\n : null\n}\n\nconst COLOURS = {\n red: new ColorSet({ background: '#f7b4b4', foreground: '#5e0909' }),\n orange: new ColorSet({ background: '#f5c6b8', foreground: '#5c1f0c' }),\n light_orange: new ColorSet({ background: '#f8deb5', foreground: '#603e09' }),\n yellow: new ColorSet({ background: '#fbefb8', foreground: '#675505' }),\n light_green: new ColorSet({ background: '#d6e7aa', foreground: '#374413' }),\n aqua: new ColorSet({ background: '#aed0c1', foreground: '#1c3127' }),\n blue: new ColorSet({ background: '#a6e5e1', foreground: '#13413f' }),\n light_blue: new ColorSet({ background: '#cef3f1', foreground: '#175e5a' }),\n dark_blue: new ColorSet({ background: '#a2b9e8', foreground: '#102143' }),\n purple: new ColorSet({ background: '#c6c1f3', foreground: '#18115c' }),\n light_purple: new ColorSet({ background: '#d9b5e9', foreground: '#3a164a' }),\n pink: new ColorSet({ background: '#fcd4f7', foreground: '#750868' }),\n dark_pink: new ColorSet({ background: '#f8b7d8', foreground: '#610936' }),\n dark_red: new ColorSet({ background: '#fdcbcc', foreground: '#750307' }),\n ateam_purple: new ColorSet({ background: '#ede7f6', foreground: '#3d3088' }),\n anzuk_blue: new ColorSet({ background: '#ceffff', foreground: '#00acef' }),\n}\n\nconst COLOURS_LIST = Object.values(COLOURS)\n\nexport const avatarColourSets = COLOURS\nexport const stringToPredefinedColourSet = (string) => {\n if (!string || !string.trim()) return COLOURS.ateam_purple\n return COLOURS_LIST[Math.abs(hashCode(string)) % COLOURS_LIST.length]\n}\nexport const stringToPredefinedForegroundColour = (string) =>\n stringToPredefinedColourSet(string).foreground\nexport const stringToPredefinedBackgroundColour = (string) =>\n stringToPredefinedColourSet(string).background\n\nexport const returnHTMLColor = (str) => intToARGB(hashCode(str))\n","/**\n * @class\n * @public\n */\nexport default class MonthYearDifferentDTO {\n /**\n * @param {{ isMonthDifferent: Boolean, isYearDifferent: Boolean }} param0\n */\n constructor({ isMonthDifferent = false, isYearDifferent = false } = {}) {\n /**\n * @type {Boolean}\n */\n this.isMonthDifferent = isMonthDifferent\n /**\n * @type {Boolean}\n */\n this.isYearDifferent = isYearDifferent\n }\n}\n","import $dayjs from '@/services/date'\nimport DateStripDisplayRange from '@/constants/date/DateStripDisplayRange'\nimport DurationUnits from '@/constants/date/DurationUnits.js'\nimport DateRange from '@/models/general/dateRange'\n// eslint-disable-next-line no-unused-vars\nimport Duration from '@/models/general/duration'\nimport Direction from '@/constants/layout/Direction'\nimport MonthYearDifferentDTO from '@/models/date/monthYearDifferentDTO'\nimport DateFormatToken from '@/constants/date/DateFormatToken'\nimport DateTense from '@/constants/date/DateTense'\nimport { DayOfWeek } from '@/constants/date/DayOfWeek'\n\nconst FIRST_DAY_OF_WEEK_INDEX = 0\nconst DAYS_IN_A_FORTNIGHT = 14\nconst DAYS_IN_A_WEEK = 7\nconst NUMBER_OF_DAYS_UNTIL_END_OF_WEEK = 6\nconst NUMBER_OF_DAYS_UNTIL_END_OF_FORTNIGHT = 13\n\n/**\n * Calculates the last date to be displayed in the date strip\n * @param {Date} date\n * @param {DateStripDisplayRange} displayRangeType\n * @returns {Date}\n */\nconst calculateLastDateToDisplay = function (date, displayRangeType) {\n switch (displayRangeType) {\n case DateStripDisplayRange.WEEK:\n return $dayjs(date).add(\n NUMBER_OF_DAYS_UNTIL_END_OF_WEEK,\n DurationUnits.DAY\n )\n case DateStripDisplayRange.FORTNIGHT:\n return $dayjs(date).add(\n NUMBER_OF_DAYS_UNTIL_END_OF_FORTNIGHT,\n DurationUnits.DAY\n )\n }\n}\n\n/**\n * Returns the number of days based on the display range value\n * @param {DateStripDisplayRange} displayRange\n * @returns\n */\nconst calcDaysToDisplayBasedOnDisplayRange = function (displayRange) {\n switch (displayRange) {\n case DateStripDisplayRange.WEEK:\n return DAYS_IN_A_WEEK\n case DateStripDisplayRange.FORTNIGHT:\n return DAYS_IN_A_FORTNIGHT\n default:\n throw Error('Unsupported display range')\n }\n}\n\n/**\n * Calculates the shift to start date when clicking the previous or next arrows\n * on the date strip\n * @param {Direction} direction\n * @param {DateStripDisplayRange} displayRange\n * @param {Date} startDate\n * @returns {Date}\n */\nconst shiftStartDateBasedOnDisplayRangeType = function (\n direction = Direction.next,\n displayRange,\n startDate\n) {\n const daysToDisplay = calcDaysToDisplayBasedOnDisplayRange(displayRange)\n switch (direction) {\n case Direction.next:\n return startDate.add(daysToDisplay, DurationUnits.DAY)\n case Direction.previous:\n return startDate.subtract(daysToDisplay, DurationUnits.DAY)\n default:\n throw Error(`Invalid direction. Received: ${direction}`)\n }\n}\n\n/**\n * Decides which date will be the basis for calculating the date range to be called from the overview bookings API.\n *\n * If the direction is previous, we want to use the start date as the basis as it is the earliest date. We'll want to grab bookings from that earlier year\n * `E.g. 2021 <- 2022`\n *\n * If next, we want to use the end date as the direction is moving towards the future\n * `E.g. 2022 -> 2023`\n *\n * If direction is null then the user has selected a date directly, and as such that should form the basis.\n *\n * @param {Direction} direction\n * @param {Date} selectedDate Currently selected date\n * @param {DateRange} dateRange Currently viewed range on the date strip\n * @returns {Date} Dayjs date object to be consumed by `calculateLoadRangeBasedWithBuffer`\n */\nconst determineDateToBeBasisOfRangeGenerationBasedOnDirection = (\n direction,\n selectedDate,\n dateRange\n) => {\n switch (direction) {\n case Direction.next:\n return dateRange.end\n case Direction.previous:\n return dateRange.start\n default:\n return selectedDate\n }\n}\n\n/**\n * Creates an object that contains the start and end dates used to generate dates on the date strip\n * @param {DateStripDisplayRange} displayRangeType\n * @param {String} locale e.g. en-AU\n * @param {Date} targetDay\n * @returns {DateRange}\n */\nconst calculateDateStripDateRangeBasedOnDisplayType = function (\n displayRangeType,\n targetDay = $dayjs(),\n startOfWeek\n) {\n const startDate = $dayjs(targetDay).weekday(startOfWeek)\n return new DateRange({\n start: startDate,\n end: calculateLastDateToDisplay(startDate, displayRangeType),\n })\n}\n\n/**\n * @param {DateStripDisplayRange} displayRangeType\n * @param {Date} targetDay\n * @param {Duration} buffer Will add specified duration buffer to the start and end of the load range\n */\nconst calculateLoadRangeBasedWithBuffer = function (\n displayRangeType,\n targetDay = $dayjs(),\n buffer = new Duration()\n) {\n switch (displayRangeType) {\n case DateStripDisplayRange.YEAR:\n return new DateRange({\n start: $dayjs(targetDay)\n .startOf(DurationUnits.YEAR)\n .subtract(buffer.value, buffer.unit),\n end: $dayjs(targetDay)\n .endOf(DurationUnits.YEAR)\n .add(buffer.value, buffer.unit)\n .set(DurationUnits.HOUR, 0)\n .set(DurationUnits.MINUTE, 0)\n .set(DurationUnits.SECOND, 0)\n .set(DurationUnits.MILLISECOND, 0),\n })\n default:\n throw new Error(`Unsupported display range: ${displayRangeType}`)\n }\n}\n\n/**\n * Calculates the start of the week based on locale\n * @param {String} locale e.g. en-AU\n * @returns {Number} Date index (0 = Sunday, 6 = Saturday)\n */\nconst getStartOfTheWeekBasedOnLocale = function (locale) {\n return $dayjs()\n .locale(locale)\n .weekday(FIRST_DAY_OF_WEEK_INDEX)\n .get(DurationUnits.DAY)\n}\n\n/**\n * Determines if Sunday is the first day of the week\n * @param {String} locale e.g. en-AU\n * @returns {Boolean} true if Sunday is first day of week in specified locale\n */\nconst isSundayFirstDayOfWeek = function (locale) {\n const firstDayOfWeek = getStartOfTheWeekBasedOnLocale(locale)\n return firstDayOfWeek === DayOfWeek.SUNDAY\n}\n\n/**\n * Determines if the between two dates if the month and the year is different\n * @param {DateRange} dateRange\n * @returns {MonthYearDifferentDTO}\n */\nconst determineIfMonthAndYearIsDifferentInRange = (dateRange) => {\n const startMonth = $dayjs(dateRange.start).format('MMMM')\n const startYear = $dayjs(dateRange.start).format('YYYY')\n const endMonth = $dayjs(dateRange.end).format('MMMM')\n const endYear = $dayjs(dateRange.end).format('YYYY')\n\n const isMonthDifferent = startMonth !== endMonth\n const isYearDifferent = startYear !== endYear\n\n return new MonthYearDifferentDTO({\n isMonthDifferent,\n isYearDifferent,\n })\n}\n\n/**\n * Determines whether the month component of a date to be presented should\n * preceed the day component for a specified locale.\n *\n * @param locale The locale to check\n * @returns {Boolean}\n */\nconst isMonthBeforeDay = (locale) => {\n return (\n $dayjs().locale(locale.toLowerCase()).localeData().longDateFormat('L') ===\n 'MM/DD/YYYY'\n )\n}\n\n/**\n * Determines if the between two dates if the month and the year is different\n * @param {DateRange} dateRange\n * @param {String} locale e.g. en-US\n * @param {String} dayFormatString DateFormatToken\n * @param {String} monthFormatString DateFormatToken\n * @param {String} yearFormatString DateFormatToken\n * @returns\n */\nconst determineFormatStringsForDateRange = (\n dateRange,\n locale = 'en',\n dayFormatString = DateFormatToken.Do,\n monthFormatString = DateFormatToken.MMM,\n yearFormatString = DateFormatToken.YYYY\n) => {\n const monthYearDiff = determineIfMonthAndYearIsDifferentInRange(dateRange)\n const isMonthBeforeDayBool = isMonthBeforeDay(locale)\n\n // Compute the start and end month and year format string pieces based on\n // if the month/year is different\n const startMonthFormatString =\n isMonthBeforeDayBool ||\n monthYearDiff.isYearDifferent ||\n monthYearDiff.isMonthDifferent\n ? monthFormatString\n : ''\n const startYearFormatString = monthYearDiff.isYearDifferent\n ? yearFormatString\n : ''\n const endMonthFormatString =\n !isMonthBeforeDayBool ||\n monthYearDiff.isYearDifferent ||\n monthYearDiff.isMonthDifferent\n ? monthFormatString\n : ''\n const endYearFormatString = monthYearDiff.isYearDifferent\n ? yearFormatString\n : ''\n\n const startFormatStringList = []\n const endFormatStringList = []\n\n // Combine the format pieces into a complete format string with spaces\n // Dending on locale it could be: Do MMM? YYYY? or MMM? Do YYYY?\n if (isMonthBeforeDayBool) {\n startFormatStringList.push(startMonthFormatString)\n startFormatStringList.push(dayFormatString)\n endFormatStringList.push(endMonthFormatString)\n endFormatStringList.push(dayFormatString)\n } else {\n startFormatStringList.push(dayFormatString)\n startFormatStringList.push(startMonthFormatString)\n endFormatStringList.push(dayFormatString)\n endFormatStringList.push(endMonthFormatString)\n }\n\n startFormatStringList.push(startYearFormatString)\n endFormatStringList.push(endYearFormatString)\n\n const startFormatString = startFormatStringList.join(' ')\n const endFormatString = endFormatStringList.join(' ')\n\n return {\n startFormatString: startFormatString.trim(),\n endFormatString: endFormatString.trim(),\n }\n}\n\n/**\n * Determines the tense of the event but doesn't consider time.\n * Tense is used as an anchor for other computations.\n * @param {Date} targetDate\n * @returns {DateTense}\n */\nconst determineDateTense = (targetDate) => {\n const isTodayTheSameAsTargetDate = targetDate.isSame(\n $dayjs(),\n DurationUnits.DAY\n )\n const isTargetDateInThePast = targetDate.isBefore($dayjs())\n\n if (isTargetDateInThePast && !isTodayTheSameAsTargetDate)\n return DateTense.past\n else if (isTodayTheSameAsTargetDate) return DateTense.present\n else return DateTense.future\n}\n\n/**\n *\n * @param {Date} targetDate\n * @param {{ locale: String, t: Function }} i18n class containing current locale and translation function\n * @param {Date} currentDate\n * @returns {String} Formatted date string\n */\nconst formatDateTruncatedLocaleAware = (\n targetDate,\n $i18n,\n currentDate = null,\n ignoreRelative = false\n) => {\n const target = $dayjs(targetDate)\n\n // Handle relative date\n if (!ignoreRelative) {\n if (target.isYesterday()) return $i18n.t('date.yesterday')\n if (target.isToday()) return $i18n.t('date.today')\n if (target.isTomorrow()) return $i18n.t('date.tomorrow')\n }\n\n // Use date range format function to generate format string for target date\n const dateRangeFormatString = determineFormatStringsForDateRange(\n new DateRange({\n start: currentDate,\n end: target,\n }),\n $i18n.locale\n )\n\n // We switch which format string to use based on if month is displayed before date.\n // This is because with locales like the US, date ranges are written like Oct 1st - 23rd\n // whereas in locales like AUS they are written as 1st - 23rd Oct\n return target.format(\n isMonthBeforeDay($i18n.locale)\n ? dateRangeFormatString.startFormatString\n : dateRangeFormatString.endFormatString\n )\n}\n\n/**\n * Returns the dates of a specified weekday within a month\n * @param {Number} targetWeekday `DayOfWeek` value\n * @param {Date} month\n * @returns {Date[]}\n */\nconst getAllWeekdayDatesInMonth = (targetWeekday, currentMonth) => {\n const DAYS_IN_WEEK = 7\n\n const daysArr = []\n\n let weekday = $dayjs(currentMonth)\n .startOf(DurationUnits.MONTH)\n .day(targetWeekday)\n\n if (weekday.date() > DAYS_IN_WEEK)\n weekday = weekday.add(DAYS_IN_WEEK, DurationUnits.DAY)\n\n const month = weekday.month()\n\n while (month === weekday.month()) {\n daysArr.push($dayjs(weekday))\n weekday = weekday.add(DAYS_IN_WEEK, DurationUnits.DAY)\n }\n\n return daysArr\n}\n\nconst getAllWeekdaysAcrossMultipleMonths = (targetWeekday, monthsList) => {\n let weekDayArray = []\n\n for (const month of monthsList) {\n weekDayArray = [\n ...weekDayArray,\n ...getAllWeekdayDatesInMonth(targetWeekday, month),\n ]\n }\n\n return weekDayArray\n}\n\n/**\n * Generates a list of months based on the date range provided\n * @param {DateRange} dateRange\n * @returns {String[]}\n */\nconst getListOfMonthsFromDateRange = (dateRange) => {\n if (!dateRange || !dateRange?.start || !dateRange?.end) return []\n\n const startDate = $dayjs(dateRange.start)\n const endDate = $dayjs(dateRange.end)\n const monthsDifferenceBetweenRange = endDate.diff(\n startDate,\n DurationUnits.MONTH\n )\n\n if (monthsDifferenceBetweenRange === 0) {\n return [startDate.format(DateFormatToken.YYYYMM)]\n }\n\n const monthsList = []\n\n for (let i = 0; i <= monthsDifferenceBetweenRange; ++i) {\n monthsList.push(\n startDate.add(i, DurationUnits.MONTH).format(DateFormatToken.YYYYMM)\n )\n }\n\n return monthsList\n}\n\n/**\n * Generates a list of dates within a date range\n * @param {DateRange} range\n * @param {Date[]} excludedDates\n */\nconst listDatesWithinRange = (range, excludedDates = []) => {\n const start = $dayjs(range.start)\n const end = $dayjs(range.end)\n\n if (!start.isValid()) throw Error('Invalid start date')\n if (!end.isValid()) throw Error('Invalid end date')\n\n if (start.isSame(end, DurationUnits.DAY)) return [range.start]\n\n const dates = []\n\n const diff = end.diff(start, 'days')\n\n if (diff <= 0) return dates\n\n for (let i = 0; i <= diff; i++) {\n const date = end.subtract(i, DurationUnits.DAY)\n\n // Make sure to skip excluded dates\n if (\n excludedDates.length > 0 &&\n excludedDates.some((excludedDate) =>\n excludedDate.isSame(date, DurationUnits.DAY)\n )\n )\n continue\n\n dates.push(date)\n }\n\n return dates\n}\n\nconst getStartOfWeekFromLocale = (locale) => {\n const START_OF_WEEK_INDEX = 0\n\n const startOfWeek = $dayjs().locale(locale).weekday(START_OF_WEEK_INDEX)\n return startOfWeek\n}\n\n/**\n * Accepts a list of weekday indexes and will return every date within\n * a specified month for the supplied indexes.\n *\n * e.g. [DayOfWeek.MONDAY] => Returns every monday for that month\n *\n * @param {Number[]} dayNumberList List of `DayOfWeek` values\n * @param {Date} targetMonth\n * @returns {Date[]}\n */\nconst listAllDatesWithinAMonthByDayNumbers = (dayNumberList, targetMonth) => {\n if (!dayNumberList || dayNumberList.length === 0) return []\n const month = $dayjs(targetMonth)\n if (!month.isValid()) throw Error(`Invalid month supplied: ${targetMonth}`)\n\n let dates = []\n\n for (const dayNumber of dayNumberList) {\n dates = [...getAllWeekdayDatesInMonth(dayNumber, targetMonth), ...dates]\n }\n\n return dates\n}\n\n/**\n * Similar to `listAllDatesWithinAMonthByDayNumbers` except it works off of a\n * list of months and will grab dates from all the months\n * @param {Number[]} dayNumberList\n * @param {String[]} monthList\n * @returns\n */\nconst listAllDatesAcrossMultipleMonthsByDayNumbers = (\n dayNumberList,\n monthList\n) => {\n if (!dayNumberList || dayNumberList.length === 0) return []\n if (!monthList || monthList.length === 0) return []\n\n let dates = []\n\n for (const dayNumber of dayNumberList) {\n dates = [\n ...dates,\n ...getAllWeekdaysAcrossMultipleMonths(dayNumber, monthList),\n ]\n }\n\n return dates\n}\n\n/**\n * Constructs a date range from a list of dates\n * @param {Date[]} dates\n * @returns {DateRange}\n */\nconst getRangeFromListOfDates = (dates) => {\n if (!dates || dates.length === 0)\n throw new Error('A list of dates is required')\n\n const listOfTimestamps = dates\n .map((date) => $dayjs(date).format(DateFormatToken.YYYYMMDD))\n .sort()\n\n return new DateRange({\n start: listOfTimestamps[0],\n end: listOfTimestamps[listOfTimestamps.length - 1],\n })\n}\n\n/**\n * Generates a relative date string with the smallest unit it shows being\n * date\n * @param {Date} date\n * @param {*} $i18n\n * @returns {String}\n */\nconst generateRelativeTimeWithDayMinimumValue = (date, $i18n) => {\n const targetDate = $dayjs(date)\n\n if (targetDate.isYesterday()) return $i18n.t('date.yesterday')\n if (targetDate.isToday()) return $i18n.t('date.today')\n if (targetDate.isTomorrow()) return $i18n.t('date.tomorrow')\n\n return targetDate.locale($i18n.locale).fromNow()\n}\n\nexport {\n calculateDateStripDateRangeBasedOnDisplayType,\n calculateLastDateToDisplay,\n calcDaysToDisplayBasedOnDisplayRange,\n shiftStartDateBasedOnDisplayRangeType,\n getStartOfTheWeekBasedOnLocale,\n calculateLoadRangeBasedWithBuffer,\n determineDateToBeBasisOfRangeGenerationBasedOnDirection,\n determineIfMonthAndYearIsDifferentInRange,\n determineFormatStringsForDateRange,\n isMonthBeforeDay,\n determineDateTense,\n formatDateTruncatedLocaleAware,\n isSundayFirstDayOfWeek,\n getAllWeekdayDatesInMonth,\n getAllWeekdaysAcrossMultipleMonths,\n listDatesWithinRange,\n getStartOfWeekFromLocale,\n listAllDatesWithinAMonthByDayNumbers,\n listAllDatesAcrossMultipleMonthsByDayNumbers,\n getListOfMonthsFromDateRange,\n getRangeFromListOfDates,\n generateRelativeTimeWithDayMinimumValue,\n}\n","import GenericFileModel from '@/models/file/genericFileModel'\nimport { fileToBase64String } from '@/services/file/Base64Convert'\nimport { avatarColourSets } from '@/helpers/color-helpers'\n\n/**\n * Get file icon based on a file's MIME type\n * @param {string} fileType File MIME type\n */\nconst getIconByMIMEType = function (fileType) {\n if (!fileType) return 'mdi-file-question'\n\n switch (fileType) {\n case 'application/pdf':\n return 'mdi-file-document-outline'\n case 'application/msword':\n case 'application/vnd.openxmlformats-officedocument.wordprocessingml.document':\n case 'application/vnd.oasis.opendocument.text':\n return 'mdi-file-word-outline'\n case 'image/png':\n case 'image/webp':\n case 'image/jpeg':\n case 'image/gif':\n return 'mdi-file-image-outline'\n default:\n return 'mdi-file-document-outline'\n }\n}\n\n/**\n * @param {string} fileType File MIME type\n */\nconst getFileIconColourByMIMEType = function (fileType) {\n if (!fileType) return 'mdi-file-question'\n\n switch (fileType) {\n case 'application/pdf':\n case 'application/msword':\n case 'application/vnd.openxmlformats-officedocument.wordprocessingml.document':\n case 'application/vnd.oasis.opendocument.text':\n return avatarColourSets.blue\n case 'image/png':\n case 'image/webp':\n case 'image/jpeg':\n case 'image/gif':\n return avatarColourSets.ateam_purple\n default:\n return avatarColourSets.orange\n }\n}\n\n/**\n * Extracts the extension from a filename. If no extension is found, returns filename\n * @param {string} filename\n */\nconst getExtensionFromFileName = function (filename) {\n if (typeof filename !== 'string')\n throw Error('Invalid data type for filename (Expected String)')\n\n try {\n return (\n filename.substring(filename.lastIndexOf('.') + 1, filename.length) ||\n filename\n )\n } catch (e) {\n throw Error(\n `Unable to extract extension from file name provided: ${filename}`\n )\n }\n}\n\n/**\n * Returns a file size in a friendly, human readable format.\n * Adapted from: https://stackoverflow.com/a/18650828\n * @param {number} fileSizeBytes\n */\nconst getFriendlyFileSize = function (fileSizeBytes) {\n const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB']\n if (fileSizeBytes === 0) return '0 Byte'\n const i = parseInt(Math.floor(Math.log(fileSizeBytes) / Math.log(1024)))\n return Math.round(fileSizeBytes / Math.pow(1024, i), 2) + ' ' + sizes[i]\n}\n\n/**\n * Converts a file into a base64 string and returns it with the file's name\n * @param {File} file\n * @returns\n */\nconst processFile = async function (file) {\n const base64FileData = await fileToBase64String(file.file)\n\n return Promise.resolve(\n new GenericFileModel({\n base64FileData,\n fileName: file.name,\n })\n )\n}\n\n/**\n * Processes a list of files by converting them into base64 string, preparing them\n * for upload\n * @param {Array} files\n * @returns {Promise>}\n */\nconst processFilesForUpload = async function (files) {\n if (!files || files.length === 0) return Promise.resolve([])\n return Promise.all(files.map(processFile))\n}\n\nconst extractFileNameFromContentDisposition = function (contentDisposition) {\n const patternMatchString = 'filename='\n const possibleFileNames = contentDisposition\n .split(';')\n .map((string) => string.trim())\n .filter((trimmedString) => trimmedString.startsWith(patternMatchString))\n if (possibleFileNames.length > 0) {\n return possibleFileNames[0]\n .substring(patternMatchString.length)\n .replaceAll('\"', '')\n }\n return null\n}\n\nexport {\n getIconByMIMEType,\n getExtensionFromFileName,\n getFriendlyFileSize,\n processFilesForUpload,\n extractFileNameFromContentDisposition,\n getFileIconColourByMIMEType,\n}\n","import i18n from '@plugins/vue-i18n'\nimport { RegistrationStatus } from '@/constants/registrations/RegistrationStatus'\nimport { RegistrationStatusReason } from '@/constants/registrations/RegistrationStatusReason'\nimport { Status } from '@/constants/status/Status'\nimport ComplianceItemStatus from '@/constants/registrations/ComplianceItemStatus'\nimport VuetifyColourClass from '@/constants/core/VuetifyColourClass'\n\n/**\n * getStatusLabelHashMap: Returns a hash map of all the available status labels\n * @returns\n */\nconst getStatusLabelHashMap = function () {\n const map = new Map()\n\n map.set(Status.UNKNOWN, {\n title: i18n.t('status.unknown'),\n color: 'grey',\n icon: 'mdi-help-circle-outline',\n })\n map.set(RegistrationStatus.IN_PROGRESS, {\n title: i18n.t('status.inProgress'),\n color: 'primary',\n icon: 'mdi-progress-pencil',\n })\n map.set(RegistrationStatus.ACTIVE, {\n title: i18n.t('status.active'),\n color: 'success',\n icon: 'mdi-check-circle-outline',\n })\n map.set(RegistrationStatus.COMPLETE, {\n title: i18n.t('status.complete'),\n color: 'success',\n icon: 'mdi-check-circle-outline',\n })\n map.set(RegistrationStatus.PENDING, {\n title: i18n.t('status.pending'),\n color: 'primary',\n icon: 'mdi-progress-clock',\n })\n map.set(RegistrationStatus.AWAITING_VERIFICATION, {\n title: i18n.t('status.awaitingVerification'),\n color: 'warning',\n icon: 'mdi-progress-clock',\n })\n map.set(RegistrationStatus.DELETED, {\n title: i18n.t('status.deleted'),\n color: 'error',\n icon: 'mdi-close-circle-outline',\n })\n map.set(RegistrationStatus.TERMINATED, {\n title: i18n.t('status.terminated'),\n color: 'error',\n icon: 'mdi-close-circle-outline',\n })\n map.set(RegistrationStatusReason.NO_CHECKLIST, {\n title: i18n.t('status.noChecklist'),\n color: 'warning',\n icon: 'mdi-alert-circle-outline',\n })\n map.set(RegistrationStatusReason.ITEMS_EXPIRED, {\n title: i18n.t('status.itemsExpired'),\n color: 'error',\n icon: 'mdi-alert-circle-outline',\n })\n map.set(RegistrationStatusReason.ITEMS_EXPIRING, {\n title: i18n.t('status.itemsExpiring'),\n color: 'warning',\n icon: 'mdi-alert-circle-outline',\n })\n map.set(RegistrationStatusReason.AWAIT_CERT_OR_DOC, {\n title: i18n.t('status.awaitCertOrDoc'),\n color: 'warning',\n icon: 'mdi-progress-pencil',\n })\n map.set(RegistrationStatusReason.AWAITING_CANDIDATE_ACTION, {\n title: i18n.t('status.awaitCandidateAction'),\n color: 'warning',\n icon: 'mdi-progress-pencil',\n })\n map.set(RegistrationStatusReason.AWAITING_CONSULTANT_ACTION, {\n title: i18n.t('status.awaitConsultantAction'),\n color: 'blue',\n icon: 'mdi-clock-outline',\n })\n map.set(Status.UNVERIFIED, {\n title: i18n.t('status.unverified'),\n color: 'warning',\n icon: 'mdi-alert-circle-outline',\n })\n map.set(Status.VERIFIED, {\n title: i18n.t('status.verified'),\n color: 'success',\n icon: 'mdi-check-circle-outline',\n })\n\n return map\n}\n\nconst getComplianceItemStatusLabelHasMap = () => {\n const map = new Map()\n\n map.set(Status.UNKNOWN, {\n title: i18n.t('status.unknown'),\n color: VuetifyColourClass.grey,\n icon: 'mdi-help-circle-outline',\n })\n map.set(ComplianceItemStatus.RequiresCandidateAction, {\n title: i18n.t(\n 'registrationDetails.complianceItem.status.requiresCandidateAction'\n ),\n color: VuetifyColourClass.warning,\n icon: 'mdi-progress-pencil',\n })\n map.set(ComplianceItemStatus.Complete, {\n title: i18n.t('registrationDetails.complianceItem.status.complete'),\n color: VuetifyColourClass.success,\n icon: 'mdi-check-circle-outline',\n })\n map.set(ComplianceItemStatus.CompleteByUnlinked, {\n title: i18n.t('registrationDetails.complianceItem.status.completeByUnlink'),\n color: VuetifyColourClass.success,\n icon: 'mdi-check-circle-outline',\n tooltip: i18n.t(\n 'registrationDetails.complianceItem.status.completeByUnlinkTooltip'\n ),\n })\n map.set(ComplianceItemStatus.AwaitingVerification, {\n title: i18n.t(\n 'registrationDetails.complianceItem.status.awaitingVerification'\n ),\n color: VuetifyColourClass.primary,\n icon: 'mdi-progress-clock',\n })\n map.set(ComplianceItemStatus.AwaitingVerificationForUnlinked, {\n title: i18n.t(\n 'registrationDetails.complianceItem.status.awaitingVerificationForUnlinked'\n ),\n color: VuetifyColourClass.primary,\n icon: 'mdi-progress-clock',\n tooltip: i18n.t(\n 'registrationDetails.complianceItem.status.awaitingVerificationForUnlinkedTooltip'\n ),\n })\n\n return map\n}\n\nexport { getStatusLabelHashMap, getComplianceItemStatusLabelHasMap }\n","/**\n * Will attempt to map search params to a URL. This function returns a new URL object\n * @param {URL} url\n * @param {Object?} searchParams key value object { key: value, ... }\n * @returns {URL}\n */\nconst mapSearchParamsToURL = (url, searchParams) => {\n if (!searchParams) return url\n\n const urlWithParams = new URL(url)\n\n Object.keys(searchParams).forEach((key) => {\n urlWithParams.searchParams.set(key, searchParams[key])\n })\n\n return urlWithParams\n}\n\n/**\n * Constructs an api URL from the various url segements passed in\n * @param {String} basePath base path to the API including the trailing forward slash e.g. https://www.google.com/\n * @param {String|Number} apiVersion e.g. 1.0\n * @param {String?} resource e.g. bookings\n * @param {String} additionalPathSegments path segments without the leading forward slash '/'\n * @returns {URL}\n */\nconst buildAPIBasePath = (\n basePath,\n apiVersion,\n resource = '',\n additionalPathSegments = ''\n) => {\n const baseWithAPIURL = `${basePath}${apiVersion ? `v${apiVersion}/` : ''}`\n const separateResourceAndPathSegementsWithSlash =\n resource && additionalPathSegments\n const resourceWithAdditionalPathSegments = `${resource || ''}${\n separateResourceAndPathSegementsWithSlash ? '/' : ''\n }${additionalPathSegments || ''}`\n\n return new URL(resourceWithAdditionalPathSegments, baseWithAPIURL)\n}\n\n/**\n * Builds out a URL with optional search params\n * @param {String|URL} basePath Full path of the url without the search params e.g. https://www.google.com/images/search\n * @param {Object?} searchParams key value object { key: value, ... }\n * @returns {URL}\n */\nconst buildURL = (basePath, searchParams = null) => {\n const url = new URL(basePath)\n return mapSearchParamsToURL(url, searchParams)\n}\n\nexport { mapSearchParamsToURL, buildURL, buildAPIBasePath }\n","import Environment from '@/constants/core/Environment'\nimport $dayjs from '@/services/date'\n\nconst development = () =>\n fetch(`${process.env.BASE_URL}config.dev.json?t=${$dayjs().valueOf()}`).then(\n (response) => response.json()\n )\n\nconst localDev = () =>\n fetch(\n `${process.env.BASE_URL}config.local-dev.json?t=${$dayjs().valueOf()}`\n ).then((response) => response.json())\n\nconst production = () =>\n fetch(\n `${process.env.BASE_URL}config.runtime.json?t=${$dayjs().valueOf()}`\n ).then((response) => response.json())\n\nconst loadConfig = (environment) => {\n switch (environment) {\n case Environment.production:\n return production()\n case Environment.local:\n return localDev()\n case Environment.development:\n default:\n return development()\n }\n}\n\nexport default async () => await loadConfig(process.env.NODE_ENV)\n","import Vue from 'vue'\nimport { getSavedState } from '@helpers/cache-helpers.js'\nimport configFactory from './common/configFactory'\nimport Environment from '@/constants/core/Environment.js'\n\n// Don't warn about using the dev version of Vue in development.\nVue.config.productionTip = process.env.NODE_ENV === Environment.production\n\n// If running inside Cypress...\nif (process.env.VUE_APP_TEST === Environment.e2e) {\n // Ensure tests fail when Vue emits an error.\n Vue.config.errorHandler = window.Cypress.cy.onUncaughtException\n}\n\n// Prevent users from being flashbanged by white screen if using dark mode\nif (getSavedState('darkMode'))\n document.getElementById('app-body').style = 'background: #121212'\n\n// Ensure config is loaded before Vue is init\nconfigFactory().then((configResponse) => {\n // Store config as a global\n Vue.prototype.$config = configResponse\n\n const config = require('@/common/config').default\n\n // Plugins are loaded using require to ensure import occurs after config\n const router = require('@router').default\n const store = require('@/store').default\n const vuetify = require('@plugins/vuetify').default\n require('@plugins/vee-validate')\n require('@plugins/vue-mq')\n require('@plugins/vue-toastification')\n const i18n = require('@plugins/vue-i18n').default\n const firebase = require('@plugins/firebase').default\n // const signalRHub = require('@plugins/signalr-hub.js').default\n const App = require('./app.vue').default\n const { getAuth, onAuthStateChanged } = require('firebase/auth')\n const appinsights = require('@/plugins/appinsights').default\n\n const sanitizeHtml = require('@/utils/sanitize-html').default\n\n // Globally register all `_base`-prefixed components\n require('@components/_globals')\n\n // TODO: Uncomment hub when SignalR has been implemented\n // Vue.use(signalRHub)\n\n if (config.env === Environment.production)\n Vue.use(appinsights, {\n appInsightsConfig: config.appInsightsConfig,\n router,\n })\n\n require('@/plugins/exception-handler')\n\n // Filters\n const truncateText = require('@/filters/truncate-text').default\n Vue.filter('truncateText', truncateText)\n\n // Custom directives\n Vue.directive('sanitized-html', (el, binding) => {\n el.innerHTML = sanitizeHtml(binding.value)\n })\n\n let app\n\n const auth = getAuth(firebase)\n\n // Ensure firebase has loaded before app does\n onAuthStateChanged(auth, () => {\n // Init feature toggles\n store.dispatch(\n 'features/setFeatureToggles',\n config.get('app.featureToggles')\n )\n\n if (!app)\n app = new Vue({\n router,\n store,\n vuetify,\n i18n,\n render: (h) => h(App),\n }).$mount('#app')\n })\n\n // Handle auth redirect on app load\n if (store.getters['auth/hasImpersonateCandidateId'])\n store.getters['auth/msalInstance']\n .handleRedirectPromise()\n .then((response) => {\n return store.dispatch('auth/handleRedirect', response)\n })\n .catch(() => {})\n\n // If running e2e tests...\n if (process.env.VUE_APP_TEST === Environment.e2e) {\n // Attach the app to the window, which can be useful\n // for manually setting state in Cypress commands\n // such as `cy.logIn()`.\n window.__app__ = app\n }\n})\n","import { mapActions, mapGetters } from 'vuex'\nimport DOMPurify from 'dompurify'\nimport config from '@/common/config'\nimport MediaQueryBreakPoints from '@/constants/core/MediaQueryBreakPoints'\nimport Environment from '@/constants/core/Environment'\nimport routeDefinitions from '@/constants/routes/routeDefinitions'\n\nexport default {\n computed: {\n ...mapGetters({\n isDebug: 'isDebugModeActive',\n isDarkMode: 'isDarkModeActive',\n hasImpersonateCandidateId: 'auth/hasImpersonateCandidateId',\n isAuthenticated: 'auth/isUserLoggedIn',\n startOfWeek: 'startOfWeek',\n }),\n isExtraSmall() {\n return this.$mq === MediaQueryBreakPoints.xs.code\n },\n isSmall() {\n return this.$mq === MediaQueryBreakPoints.sm.code\n },\n isMedium() {\n return this.$mq === MediaQueryBreakPoints.md.code\n },\n isLarge() {\n return this.$mq === MediaQueryBreakPoints.lg.code\n },\n isExtraLarge() {\n return this.$mq === MediaQueryBreakPoints.xl.code\n },\n isSmallOrLower() {\n return this.isSmall || this.isExtraSmall\n },\n isMediumOrLower() {\n return this.isSmall || this.isExtraSmall || this.isMedium\n },\n isLargeOrLower() {\n return this.isSmall || this.isExtraSmall || this.isMedium || this.isLarge\n },\n isSmallOrHigher() {\n return this.isSmall || this.isMedium || this.isLarge || this.isExtraLarge\n },\n isMediumOrHigher() {\n return this.isMedium || this.isLarge || this.isExtraLarge\n },\n isLargeOrHigher() {\n return this.isLarge || this.isExtraLarge\n },\n isMobileViewPort() {\n return this.isExtraSmall || this.isSmall || this.isMedium\n },\n isDev() {\n return config.get('env') === Environment.development\n },\n isImpersonating() {\n return this.hasImpersonateCandidateId\n },\n heightOfDevBar() {\n return this.isDev ? 24 : 0 // in pixels\n },\n locale() {\n return this.$i18n.locale\n },\n getStartOfWeek() {\n return this.startOfWeek(this.locale)\n },\n $_routeDefinitions() {\n return routeDefinitions\n },\n },\n methods: {\n ...mapActions({\n addDebugMessage: 'addDebugMessage',\n logException: 'logException',\n }),\n logger(msg) {\n this.addDebugMessage(`${msg}`)\n },\n setTheme() {\n if (this.isDarkMode) {\n return (this.$vuetify.theme.dark = true)\n } else {\n return (this.$vuetify.theme.dark = false)\n }\n },\n /**\n * Sanitize strings containing html for use with v-html to prevent\n * XSS attacks\n * Learn more: https://v2.vuejs.org/v2/guide/security.html#Potential-Dangers\n * @param {String} stringToBeSanitized String containing html syntax\n * @returns sanitized html string\n */\n sanitize(stringToBeSanitized) {\n return DOMPurify.sanitize(stringToBeSanitized, {\n USE_PROFILES: { html: true },\n })\n },\n async scrollToFirstInputError() {\n await this.$nextTick()\n const element = document.querySelector('.v-input .error--text')\n if (element) {\n element.scrollIntoView({ behavior: 'smooth', block: 'nearest' })\n }\n },\n },\n}\n","import { mapActions } from 'vuex'\n\nexport default {\n async mounted() {\n await this.setFavicon()\n },\n methods: {\n ...mapActions({\n setFavicon: 'setFavicon',\n }),\n },\n}\n","import { AvailabilityStatus } from '@/constants/candidate/AvailabilityStatus'\n\nexport default class AvailabilityStatusDTO {\n constructor({\n status = AvailabilityStatus.UNSET,\n selectedDates = [],\n partialRanges = [],\n } = {}) {\n /**\n * @type {AvailabilityStatus}\n */\n this.status = status\n /**\n * @type {Date[]}\n */\n this.selectedDates = selectedDates\n /**\n * @type {ScheduledAvailabilityPartialRangeViewModel[]}\n */\n this.partialRanges = partialRanges\n }\n}\n","import OngoingAvailabilityStatus from '@/constants/candidate/OngoingAvailabilityStatus'\n\nexport default class OngoingAvailabilityViewModel {\n constructor({\n monday = OngoingAvailabilityStatus.AVAILABLE,\n tuesday = OngoingAvailabilityStatus.AVAILABLE,\n wednesday = OngoingAvailabilityStatus.AVAILABLE,\n thursday = OngoingAvailabilityStatus.AVAILABLE,\n friday = OngoingAvailabilityStatus.AVAILABLE,\n saturday = OngoingAvailabilityStatus.AVAILABLE,\n sunday = OngoingAvailabilityStatus.AVAILABLE,\n } = {}) {\n /**\n * @type {OngoingAvailabilityStatus}\n */\n this.monday = monday\n /**\n * @type {OngoingAvailabilityStatus}\n */\n this.tuesday = tuesday\n /**\n * @type {OngoingAvailabilityStatus}\n */\n this.wednesday = wednesday\n /**\n * @type {OngoingAvailabilityStatus}\n */\n this.thursday = thursday\n /**\n * @type {OngoingAvailabilityStatus}\n */\n this.friday = friday\n /**\n * @type {OngoingAvailabilityStatus}\n */\n this.saturday = saturday\n /**\n * @type {OngoingAvailabilityStatus}\n */\n this.sunday = sunday\n }\n}\n","import { AvailabilityStatus } from '@/constants/candidate/AvailabilityStatus'\n\nexport default class ScheduledAvailabilityViewModel {\n constructor({\n dateLocal = null,\n status = AvailabilityStatus.UNSET,\n partialRanges = [],\n } = {}) {\n /**\n * @type {Date}\n */\n this.dateLocal = dateLocal\n /**\n * @type {AvailabilityStatus}\n */\n this.status = status\n /**\n * @type {ScheduledAvailabilityPartialRangeViewModel[]}\n */\n this.partialRanges = partialRanges\n }\n}\n","/**\n * @class\n * @public\n */\nexport default class BackendBookingFeatureDecisions {\n constructor({ isRunningLateEnabled = false } = {}) {\n /**\n * @type {Boolean}\n */\n this.isRunningLateEnabled = isRunningLateEnabled\n }\n}\n","/**\n * @class\n * @public\n */\nexport default class BookingDetailsGuestAccessRequestDTO {\n constructor({ shortTermTentativeId, accessGuid } = {}) {\n /**\n * @type {Guid}\n */\n this.shortTermTentativeId = shortTermTentativeId\n /**\n * @type {Guid}\n */\n this.accessGuid = accessGuid\n }\n}\n","/* eslint-disable no-unused-vars */\nimport CandidateBookingDetailsViewModel from './candidateBookingDetailsViewModel'\nimport ShortTermTentativeStatus from '@/constants/booking/ShortTermTentativeStatus'\n\nexport default class CandidateBookingDetailsGuestAccessViewModel extends CandidateBookingDetailsViewModel {\n constructor({\n id,\n startTimeLocal,\n endTimeLocal,\n clientId,\n clientName,\n location,\n grades = [],\n primaryContact,\n payment,\n description = '',\n actionableItems = [],\n blockDetails = null,\n isRunningLate = false,\n tentativeGroupDetails = null,\n tentativeFillStatus,\n } = {}) {\n super({\n id,\n startTimeLocal,\n endTimeLocal,\n clientId,\n clientName,\n location,\n grades,\n primaryContact,\n payment,\n description,\n actionableItems,\n blockDetails,\n isRunningLate,\n tentativeGroupDetails,\n })\n\n /**\n * @type {ShortTermTentativeStatus} Status of the tentative fill\n */\n this.tentativeFillStatus = tentativeFillStatus\n }\n}\n","import CandidateBookingSummaryLocationAddressViewModel from './candidateBookingSummaryLocationAddressViewModel'\n\n/**\n * A complete view model to describe address information\n * @class\n * @public\n */\nexport default class CandidateBookingDetailsLocationAddressDTO extends CandidateBookingSummaryLocationAddressViewModel {\n /**\n * @param {{ fullAddress: String, latitude: number, longitude: number, suburb: String }} param0\n */\n constructor({\n line1,\n line2,\n suburb = '',\n state,\n postcode,\n country,\n fullAddress = '',\n latitude = 0.0,\n longitude = 0.0,\n } = {}) {\n super(fullAddress, latitude, longitude, suburb)\n /**\n * @type {String}\n */\n this.line1 = line1\n /**\n * @type {String}\n */\n this.line2 = line2\n /**\n * @type {String}\n */\n this.state = state\n /**\n * @type {String}\n */\n this.postcode = postcode\n /**\n * @type {String}\n */\n this.country = country\n }\n}\n","/* eslint-disable no-unused-vars */\nimport Grade from '../client/grade'\nimport CandidateBookingDetailsContactDTO from './candidateBookingDetailsContactDTO'\nimport CandidateBookingDetailsLocationDTO from './candidateBookingDetailsLocationDTO'\nimport CandidateBookingDetailsPaymentDTO from './candidateBookingDetailsPaymentDTO'\nimport CandidateBookingDetailsBlockDTO from './candidateBookingDetailsBlockDTO'\nimport CandidateBookingDetailsTentativeGroup from './candidateBookingDetailsTentativeGroup'\nimport BookingActionableItemType from '@/constants/booking/BookingActionableItemType'\n\nexport default class CandidateBookingDetailsViewModel {\n constructor({\n id,\n startTimeLocal,\n endTimeLocal,\n clientId,\n clientName,\n location,\n grades = [],\n primaryContact,\n payment,\n description = '',\n actionableItems = [],\n blockDetails = null,\n isRunningLate = false,\n isRunningLateEnabled = false,\n tentativeGroupDetails = null,\n isShiftRecordSubmitted = false,\n } = {}) {\n /**\n * @type {Number}\n */\n this.id = id\n /**\n * @type {Date}\n */\n this.startTimeLocal = startTimeLocal\n /**\n * @type {Date}\n */\n this.endTimeLocal = endTimeLocal\n /**\n * @type {Number}\n */\n this.clientId = clientId\n /**\n * @type {String}\n */\n this.clientName = clientName\n /**\n * @type {CandidateBookingDetailsLocationDTO}\n */\n this.location = location\n /**\n * @type {Grade[]}\n */\n this.grades = grades\n /**\n * @type {CandidateBookingDetailsContactDTO}\n */\n this.primaryContact = primaryContact\n /**\n * @type {CandidateBookingDetailsPaymentDTO}\n */\n this.payment = payment\n /**\n * @type {String}\n */\n this.description = description\n /**\n * @type {BookingActionableItemType[]}\n */\n this.actionableItems = actionableItems\n /**\n * @type {CandidateBookingDetailsBlockDTO?}\n */\n this.blockDetails = blockDetails\n /**\n * @type {Boolean}\n */\n this.isRunningLate = isRunningLate\n /**\n * @type {Boolean}\n */\n this.isRunningLateEnabled = isRunningLateEnabled\n /**\n * @type {CandidateBookingDetailsTentativeGroup}\n */\n this.tentativeGroupDetails = tentativeGroupDetails\n /**\n * Indicates if a shiftRecord has already been submit for this booking.\n * @type {Boolean}\n */\n this.isShiftRecordSubmitted = isShiftRecordSubmitted\n }\n}\n","import CandidateBookingDetailsLocationAddressDTO from './candidateBookingDetailsLocationAddressDTO'\nimport CandidateBookingSummaryLocationViewModel from './candidateBookingSummaryLocationViewModel'\n\n/**\n * A location's basic details and address information\n * @class\n * @public\n */\nexport default class CandidateBookingDetailsLocationDTO extends CandidateBookingSummaryLocationViewModel {\n /**\n * @param {{ id: number, name: string, address: CandidateBookingDetailsLocationAddressDTO }} param0\n */\n constructor({\n id = null,\n name = '',\n address = new CandidateBookingDetailsLocationAddressDTO(),\n } = {}) {\n super(id, name)\n\n /**\n * @type {CandidateBookingDetailsLocationAddressDTO}\n */\n this.address = address\n }\n}\n","/* eslint-disable no-unused-vars */\nexport default class CandidateBookingNavigationItemViewModel {\n constructor({ bookingId, startDateLocal } = {}) {\n /**\n * @type {Number}\n */\n this.bookingId = bookingId\n\n /**\n * @type {Date}\n */\n this.startDateLocal = startDateLocal\n }\n}\n","// eslint-disable-next-line no-unused-vars\nimport BookingActionableItemType from '@/constants/booking/BookingActionableItemType'\n\nexport default class CandidateBookingOverviewBookingItemViewModel {\n constructor({\n id = null,\n locationId = null,\n clientId = null,\n groupId = null,\n actionableItems = [],\n } = {}) {\n /**\n * Booking Id\n * @type {Number}\n */\n this.id = id\n /**\n * @type {Number}\n */\n this.locationId = locationId\n /**\n * @type {Number}\n */\n this.clientId = clientId\n /**\n * Id of the block booking this booking is a part of.\n * @type {Number}\n */\n this.groupId = groupId\n\n /**\n * List of actionable items for the booking\n * @type {String[]}\n * @see {BookingActionableItemType} for valid range of values\n */\n this.actionableItems = actionableItems\n }\n}\n","/* eslint-disable no-unused-vars */\nimport CandidateBookingOverviewBookingItemViewModel from './candidateBookingOverviewBookingItemViewModel'\nimport BookingActionableItemType from '@/constants/booking/BookingActionableItemType'\nimport dayjs from '@/services/date/index'\n\nexport default class CandidateBookingOverviewBookingItemWithDateViewModel extends CandidateBookingOverviewBookingItemViewModel {\n constructor({\n id = null,\n locationId = null,\n clientId = null,\n groupId = null,\n actionableItems = [],\n dateLocal,\n } = {}) {\n super({\n id,\n locationId,\n clientId,\n groupId,\n actionableItems,\n })\n\n /**\n * @type {Date}\n */\n this.dateLocal = dateLocal ? dayjs(dateLocal) : null\n }\n}\n","// eslint-disable-next-line no-unused-vars\nimport CandidateBookingOverviewBookingItemViewModel from './candidateBookingOverviewBookingItemViewModel'\nimport CandidateBookingOverviewBookingItemWithDateViewModel from './candidateBookingOverviewBookingItemWithDateViewModel'\nimport { isNonEmptyArray } from '@/helpers/array-helpers'\n\nexport default class CandidateBookingOverviewViewModel {\n constructor({ dateLocal = null, bookings = [] } = {}) {\n /**\n * @type {Date}\n */\n this.dateLocal = dateLocal\n /**\n * @type {CandidateBookingOverviewBookingItemViewModel[]}\n */\n this.bookings = isNonEmptyArray(bookings)\n ? bookings.map(\n (booking) => new CandidateBookingOverviewBookingItemViewModel(booking)\n )\n : []\n }\n\n toBookingsListWithDate() {\n if (!isNonEmptyArray(this.bookings)) return []\n\n return this.bookings.map(\n (booking) =>\n new CandidateBookingOverviewBookingItemWithDateViewModel({\n ...booking,\n ...{ dateLocal: this.dateLocal },\n })\n )\n }\n}\n","/**\n * A simplified view model to describe address information\n * @class\n * @public\n */\nexport default class CandidateBookingSummaryLocationAddressViewModel {\n /**\n * @param {{ fullAddress: string, latitude: number, longitude: number, suburb: string }} param0\n */\n constructor({\n fullAddress = '',\n latitude = 0.0,\n longitude = 0.0,\n suburb = '',\n } = {}) {\n /**\n * The location's full address string. A combination of all address segements into a single string.\n * @type {string}\n */\n this.fullAddress = fullAddress\n /**\n * @type {number}\n */\n this.latitude = latitude\n /**\n * @type {number}\n */\n this.longitude = longitude\n /**\n * @type {string}\n */\n this.suburb = suburb\n }\n}\n","import CandidateBookingSummaryLocationAddressViewModel from './candidateBookingSummaryLocationAddressViewModel'\n\n/**\n * A location's basic details and address information\n * @class\n * @public\n */\nexport default class CandidateBookingSummaryLocationViewModel {\n /**\n * @param {{ id: number, name: string, address: CandidateBookingSummaryLocationAddressViewModel }} param0\n */\n constructor({\n id = null,\n name = '',\n address = new CandidateBookingSummaryLocationAddressViewModel(),\n } = {}) {\n /**\n * Location Id\n * @type {number}\n */\n this.id = id\n /**\n * Location name\n * @type {string}\n */\n this.name = name\n /**\n * @type {CandidateBookingSummaryLocationAddressViewModel}\n */\n this.address = address\n }\n}\n","/**\n * Contains information regarding the payment details for a booking\n * @class\n * @public\n */\nexport default class CandidateBookingSummaryPaymentViewModel {\n /**\n * @param {{ payOptionType: string }} param0\n */\n constructor({ payOptionType = '' } = {}) {\n /**\n * @type {string}\n */\n this.payOptionType = payOptionType\n }\n}\n","// eslint-disable-next-line no-unused-vars\nimport Grade from '../client/grade'\nimport CandidateBookingSummaryLocationViewModel from './candidateBookingSummaryLocationViewModel'\nimport CandidateBookingSummaryPaymentViewModel from './candidateBookingSummaryPaymentViewModel'\nimport { isNonEmptyArray } from '@/helpers/array-helpers'\n// eslint-disable-next-line no-unused-vars\nimport BookingActionableItemType from '@/constants/booking/BookingActionableItemType'\n\n/**\n * @class\n * @public\n */\nexport default class CandidateBookingSummaryViewModel {\n /**\n * @param {{ id: number, location: CandidateBookingSummaryLocationViewModel, grades: Grade[], payment: CandidateBookingSummaryPaymentViewModel, startTimeLocal: Date, endTimeLocal: Date, actionableItems: BookingActionableItemType[], isRunningLate: Boolean }} param0\n */\n constructor({\n id = null,\n location = {},\n grades = [],\n payment = {},\n startTimeLocal = null,\n endTimeLocal = null,\n actionableItems = [],\n tentativeGroupBookingCount = 0,\n isRunningLate = false,\n isRunningLateEnabled = false,\n isShiftRecordSubmitted = false,\n } = {}) {\n /**\n * Booking Id\n * @type {number}\n */\n this.id = id\n /**\n * @type {CandidateBookingSummaryLocationViewModel}\n */\n this.location = new CandidateBookingSummaryLocationViewModel(location)\n /**\n * @type {Array}\n */\n this.grades = isNonEmptyArray(grades)\n ? grades.map((grade) => new Grade(grade))\n : []\n /**\n * @type {CandidateBookingSummaryPaymentViewModel}\n */\n this.payment = new CandidateBookingSummaryPaymentViewModel(payment)\n /**\n * @type {Date}\n */\n this.startTimeLocal = startTimeLocal\n /**\n * @type {Date}\n */\n this.endTimeLocal = endTimeLocal\n /**\n * @type {Array}\n * @see {BookingActionableItemType} for valid range of values\n */\n this.actionableItems = actionableItems\n /**\n * @type {Boolean}\n */\n this.isRunningLate = isRunningLate\n /**\n * @type {Boolean}\n */\n this.isRunningLateEnabled = isRunningLateEnabled\n /**\n * Indicates if a shiftRecord has already been submit for this booking.\n * @type {Boolean}\n */\n this.isShiftRecordSubmitted = isShiftRecordSubmitted\n /**\n * @type {Number}\n */\n this.tentativeGroupBookingCount = tentativeGroupBookingCount\n }\n}\n","// eslint-disable-next-line no-unused-vars\nimport CandidateBookingSummaryViewModel from './candidateBookingSummaryViewModel'\n\n/**\n * Simplified candidate specific booking data for a specified date\n * @class\n * @public\n */\nexport default class CandidateDateSpecificBookingsSummaryViewModel {\n /**\n * @param {{ bookings: CandidateBookingSummaryViewModel[] }} param0\n */\n constructor({ bookings = [] } = {}) {\n /**\n * @type {CandidateBookingSummaryViewModel[]}\n */\n this.bookings = bookings\n }\n}\n","/**\n * Payload to be sent to the server to signal that the candidate is running late to a specified booking\n */\nexport default class RunningLatePayload {\n constructor({ bookingId = null, minutesLate = 0 } = {}) {\n /**\n * @type {Number}\n */\n this.bookingId = bookingId\n\n /**\n * The value to be emitted once selected by the user\n * @type {Number}\n */\n this.minutesLate = minutesLate\n }\n}\n","/* eslint-disable no-unused-vars */\nimport ShiftRecordBlock from './shiftRecordBlock'\nimport { isNonEmptyArray } from '@/helpers/array-helpers'\n\n/**\n * Payload to add a shift record\n */\nexport default class AddShiftRecordDTO {\n constructor({\n blocks = [],\n reasonForNonCompliance = '',\n isRestBreakCompliant,\n } = {}) {\n /**\n * @type {Array}\n */\n this.blocks = isNonEmptyArray(blocks)\n ? blocks.map((block) => new ShiftRecordBlock(block))\n : []\n /**\n * A reason provided by the candidate as to why the shift record they are\n * submitting is non-compliant with regulations (typically local).\n * @type {String}\n */\n this.reasonForNonCompliance = reasonForNonCompliance\n\n /**\n * Flag for candidate to indicate if they received the appropriate amount of\n * rest breaks for their shift\n * @type {Boolean}\n */\n this.isRestBreakCompliant = isRestBreakCompliant\n }\n}\n","/* eslint-disable no-unused-vars */\nimport AddShiftRecordDTO from './addShiftRecordDTO'\n\nexport default class AddShiftRecordPayloadDTO extends AddShiftRecordDTO {\n constructor({\n bookingId,\n blocks = [],\n date = null,\n reasonForNonCompliance = '',\n isRestBreakCompliant,\n } = {}) {\n super({ blocks, reasonForNonCompliance, isRestBreakCompliant })\n\n /**\n * @type {Number}\n */\n this.bookingId = bookingId\n\n /**\n * Date the shift was held on. Used in toast notification on submit\n * @type {Date}\n */\n this.date = date\n }\n\n /**\n * Converts `AddShiftRecordPayloadDTO` into `AddShiftRecordDTO`\n * @returns {AddShiftRecordDTO}\n */\n toDto() {\n return new AddShiftRecordDTO({\n blocks: this.blocks,\n reasonForNonCompliance: this.reasonForNonCompliance,\n isRestBreakCompliant: this.isRestBreakCompliant,\n })\n }\n}\n","/* eslint-disable no-unused-vars */\nimport ShiftRecordBlockType from '@/constants/booking/ShiftRecordBlockType'\n\n/**\n * @class\n * @public\n */\nexport default class ShiftRecordBlock {\n constructor({ type, startTime, endTime } = {}) {\n /**\n * Determines if the shiftRecord has been submitted or not\n * @type {String}\n * @see {ShiftRecordBlockType} for valid range of values\n */\n this.type = type\n /**\n * Start time of block in 24 hr format\n * @type {String}\n * @example 08:30\n */\n this.startTime = startTime\n /**\n * End time of block in 24 hr format\n * @type {String}\n * @example 15:30\n */\n this.endTime = endTime\n }\n}\n","/* eslint-disable no-unused-vars */\nimport { nanoid } from '@root/node_modules/nanoid/index'\nimport ShiftRecordBlock from './shiftRecordBlock'\n\n/**\n * @class\n * @public\n */\nexport default class ShiftRecordBlockWithId extends ShiftRecordBlock {\n constructor({ type, startTime, endTime } = {}) {\n super({ type, startTime, endTime })\n\n /**\n * Client-side only value to assist with tracking shift record blocks\n * @type {String}\n */\n this.id = nanoid()\n }\n}\n","import AddressViewModel from './addressViewModel'\n\n/**\n * Some basic elements that make up an address\n */\nexport default class BaseLocationAddress {\n constructor({ address = {}, id, name } = {}) {\n /**\n * @type {Number}\n */\n this.id = id\n /**\n * Location Name\n * @type {String}\n */\n this.name = name\n /**\n * @type {AddressViewModel}\n */\n this.address = new AddressViewModel(address)\n }\n}\n","/* eslint-disable no-unused-vars */\nimport BaseLocationAddress from '../../location/baseLocationAddress'\nimport ShiftRecordBlockWithId from './shiftRecordBlockWithId'\nimport dayjs from '@/services/date/index'\nimport { isNonEmptyArray } from '@/helpers/array-helpers'\nimport BookingStatus from '@/constants/booking/BookingStatus'\n\n/**\n * @typedef {Object} ShiftRecordDetailsViewModelType\n * @property {string} bookingDate Date the shift was held on.\n * @property {boolean} isSubmitted Indicates if the candidate has submitted a shift record for this booking.\n * @property {BaseLocationAddress} location The location of the booking.\n * @property {Array} blocks Time blocks to fill out the shiftRecord form.\n * @property {boolean} isRestBreakCompliant Indicates if the booking is rest break compliant.\n * @property {keyof BookingStatus} bookingStatus The booking status.\n * @property {boolean} showRestBreakComplianceQuestion Indicates if the rest break compliance question should be shown.\n */\n\n/**\n * @type {ShiftRecordDetailsViewModelType}\n */\nexport default class ShiftRecordDetailsViewModel {\n /** @param {ShiftRecordDetailsViewModelType} params */\n constructor(params) {\n this.bookingDate = params.bookingDate ? dayjs(params.bookingDate) : null\n this.isSubmitted = params.isSubmitted\n this.location = new BaseLocationAddress(params.location)\n this.blocks = isNonEmptyArray(params.blocks)\n ? params.blocks.map((block) => new ShiftRecordBlockWithId(block))\n : []\n this.isRestBreakCompliant = params.isRestBreakCompliant\n this.bookingStatus = params.bookingStatus\n this.showRestBreakComplianceQuestion =\n params.showRestBreakComplianceQuestion\n }\n}\n","/* eslint-disable no-unused-vars */\n\nimport { isEmpty } from 'lodash'\nimport ActionButton from '@/models/general/actionButton'\n\nexport default class ShiftRecordErrorDTO {\n constructor({\n title = '',\n message = '',\n alertType = 'alert',\n alertIcon = 'mdi-alert-circle-outline',\n alertStyle = 'error',\n testId = 'shift-record-error-block',\n showContactCard = false,\n actions = [],\n onLoadInteraction = null,\n } = {}) {\n /**\n * Title to display on the status block\n */\n this.title = title\n\n /**\n * Error message to display to the user\n * @type {String}\n */\n this.message = message\n\n /**\n * Indicates to the UI what should be displayed.\n * alert: display the error alert\n * statusBlock: display status block which is reserved for unrecoverable errors\n * @type {'alert|statusBlock|hasAlreadySubmit|nonCompliant'}\n */\n this.alertType = alertType\n\n /**\n * Icon to display on the alert\n * @type {String}\n */\n this.alertIcon = alertIcon\n\n /**\n * Styles the alert\n * @type {'error'|'info'|'success'|'warning'}\n */\n this.alertStyle = alertStyle\n\n /**\n * Used for testing and determining the type of error block being displayed\n * @type {String}\n */\n this.testId = testId\n\n /**\n * Displays the consultant contact card\n * @type {Boolean}\n */\n this.showContactCard = showContactCard\n\n /**\n * Action buttons (only used in statusBlock)\n * @type {Array}\n */\n this.actions = isEmpty(actions)\n ? []\n : actions.map((action) => new ActionButton(action))\n\n /**\n * Triggers an interaction on load of error block\n * @type {Interaction}\n */\n this.onLoadInteraction = onLoadInteraction\n }\n}\n","import TentativeFillAction from '@/constants/booking/TentativeFillAction'\n\n/**\n * @class\n * @public\n */\nexport default class TentativeFillActionDTO {\n constructor({ action = TentativeFillAction.unset } = {}) {\n /**\n * @type {TentativeFillAction}\n */\n this.action = action\n }\n}\n","/* eslint-disable no-unused-vars */\nimport TentativeFillActionDTO from './tentativeFillActionDTO'\nimport TentativeFillRequestDTO from './tentativeFillRequestDTO'\n\n/**\n * @class\n * @public\n */\nexport default class TentativeFillRequestAnonymousDTO {\n constructor({ shortTermTentativeId, accessGuid, payload } = {}) {\n /**\n * @type {String} Guid\n */\n this.shortTermTentativeId = shortTermTentativeId\n\n /**\n * @type {String} Guid\n */\n this.accessGuid = accessGuid\n\n /**\n * The value to be emitted once selected by the user\n * @type {TentativeFillActionDTO}\n */\n this.payload = payload\n }\n}\n","/* eslint-disable no-unused-vars */\nimport TentativeFillActionDTO from './tentativeFillActionDTO'\n\n/**\n * @class\n * @public\n */\nexport default class TentativeFillRequestDTO {\n constructor({ bookingId, payload } = {}) {\n /**\n * @type {Number}\n */\n this.bookingId = bookingId\n\n /**\n * The value to be emitted once selected by the user\n * @type {TentativeFillActionDTO}\n */\n this.payload = payload\n }\n}\n","/* eslint-disable no-unused-vars */\nimport AccessGuiFileViewModel from '../file/accessGuiFileViewModel'\nimport dayjs from '@/services/date/index'\n\n/**\n * @class\n * @public\n */\nexport default class CandidateDocumentViewModel {\n /**\n * @constructor\n */\n constructor({\n id,\n type = '',\n name = '',\n file = null,\n isVerified = false,\n createdDateLocal = null,\n } = {}) {\n /**\n * @type {Number}\n */\n this.id = id\n\n /**\n * @type {String}\n */\n this.type = type ?? ''\n\n /**\n * @type {String}\n */\n this.name = name ?? ''\n\n /**\n * @type {AccessGuiFileViewModel}\n */\n this.file = file ? new AccessGuiFileViewModel(file) : null\n\n /**\n * Indicates if this record has been verified by a consultant or by the system.\n * @type {Boolean}\n */\n this.isVerified = isVerified\n /**\n * @type {Date}\n */\n this.createdDateLocal = createdDateLocal ? dayjs(createdDateLocal) : null\n }\n}\n","/* eslint-disable no-unused-vars */\nimport CustomField from '@/constants/certifications/CustomField'\n\n/**\n * @class\n * @public\n */\nexport default class CertificationCustomFieldVM {\n /**\n * @constructor\n */\n constructor({ id, value = '' } = {}) {\n /**\n * @type {CustomField}\n */\n this.id = id\n\n /**\n * @type {String}\n */\n this.value = value\n }\n}\n","/* eslint-disable no-unused-vars */\nimport CertificationTypeFieldMetaVM from './certificationTypeFieldMetaVM'\nimport { isNonEmptyArray } from '@/helpers/array-helpers'\n\n/**\n * @class\n * @public\n */\nexport default class CertificationTypeVM {\n /**\n * @constructor\n */\n constructor({ id, title = '', fieldMeta = [] } = {}) {\n /**\n * @type {Number}\n */\n this.id = id\n\n /**\n * @type {String}\n */\n this.title = title\n\n /**\n * @type {Array}\n */\n this.fieldMeta = isNonEmptyArray(fieldMeta)\n ? fieldMeta.map((field) => new CertificationTypeFieldMetaVM(field))\n : []\n }\n}\n","/* eslint-disable no-unused-vars */\nimport AccessGuiFileViewModel from '../file/accessGuiFileViewModel'\nimport CertificationCustomFieldVM from './certificationCustomFieldVM'\nimport CertificationTypeVM from './certificationTypeVM'\nimport dayjs from '@/services/date/index'\nimport { isNonEmptyArray } from '@/helpers/array-helpers'\n\n/**\n * @class\n * @public\n */\nexport default class CertificationDetailsVM {\n /**\n * @constructor\n */\n constructor({\n id,\n expireStatus = '',\n ignoreExpiry = false,\n dateExpiry = null,\n dateObtained = null,\n isVerified = false,\n note = '',\n certRefNo = '',\n customFields = [],\n certificationType = null,\n files = [],\n } = {}) {\n /**\n * @type {Number}\n */\n this.id = id\n\n /**\n * @type {String}\n * @see {ExpireStatus} for valid value range\n */\n this.expireStatus = expireStatus\n\n /**\n * @type {Boolean}\n */\n this.ignoreExpiry = ignoreExpiry\n\n /**\n * @type {Date}\n */\n this.dateExpiry = dateExpiry ? dayjs(dateExpiry) : null\n\n /**\n * @type {Date}\n */\n this.dateObtained = dateObtained ? dayjs(dateObtained) : null\n\n /**\n * @type {Boolean}\n */\n this.isVerified = isVerified\n\n /**\n * @type {String}\n */\n this.note = note\n\n /**\n * @type {String}\n */\n this.certRefNo = certRefNo\n\n /**\n * @type {Array}\n */\n this.customFields = isNonEmptyArray(customFields)\n ? customFields.map(\n (customField) => new CertificationCustomFieldVM(customField)\n )\n : []\n\n /**\n * @type {CertificationTypeVM}\n */\n this.certificationType = new CertificationTypeVM(certificationType)\n\n /**\n * @type {Array}\n */\n this.files = isNonEmptyArray(files)\n ? files.map((file) => new AccessGuiFileViewModel(file))\n : []\n }\n}\n","/* eslint-disable no-unused-vars */\nimport ValidationRules from '@/constants/form/ValidationRules'\n\n/**\n * @class\n * @public\n */\nexport default class CertificationTypeFieldMetaRuleVM {\n /**\n * @constructor\n */\n constructor({ ruleType, value = '' } = {}) {\n /**\n * @type {ValidationRules}\n */\n this.ruleType = ruleType\n\n /**\n * @type {String}\n */\n this.value = value\n }\n}\n","/* eslint-disable no-unused-vars */\nimport CertificationTypeFieldMetaRuleVM from './certificationTypeFieldMetaRuleVM'\nimport FieldId from '@/constants/certifications/FieldId'\nimport FormInputType from '@/constants/form/FormInputType'\nimport { isNonEmptyArray } from '@/helpers/array-helpers'\n\n/**\n * @class\n * @public\n */\nexport default class CertificationTypeFieldMetaVM {\n /**\n * @constructor\n */\n constructor({\n fieldId,\n title = '',\n fieldType = '',\n rules = [],\n options = [],\n } = {}) {\n /**\n * @type {FieldId}\n */\n this.fieldId = fieldId\n\n /**\n * @type {String}\n */\n this.title = title\n\n /**\n * @type {FormInputType}\n */\n this.fieldType = fieldType\n\n /**\n * @type {Array}\n */\n this.rules = isNonEmptyArray(rules)\n ? rules.map((rule) => new CertificationTypeFieldMetaRuleVM(rule))\n : []\n\n /**\n * @type {Array}\n */\n this.options = isNonEmptyArray(options) ? options : []\n }\n}\n","// eslint-disable-next-line no-unused-vars\nimport CandidateDocumentAgreementViewModel from '../candidate/candidateDocumentAgreementViewModel'\n\n/**\n * Items requiring action from the candidate for a specific client\n */\nexport default class CandidateClientAgreementsViewModel {\n constructor({ clientId = null, agreements = [] } = {}) {\n /**\n * @type {Number}\n */\n this.clientId = clientId\n\n /**\n * @type {CandidateDocumentAgreementViewModel[]}\n */\n this.agreements = agreements\n }\n}\n","/**\n * Describes a grade or subject\n * @class\n * @public\n */\nexport default class Grade {\n /**\n * @param {{ id: number, title: string }} param0\n */\n constructor({ id = null, title = '' } = {}) {\n /**\n * @type {number}\n */\n this.id = id\n /**\n * @type {string}\n */\n this.title = title\n }\n}\n","/**\n * @class\n * @public\n */\nexport default class ConsultantViewModel {\n constructor({\n name = '',\n country = '',\n state = '',\n phoneNumber = '',\n email = '',\n } = {}) {\n /**\n * Consultant's fullname\n * @type {String}\n * @example Mike Nolan\n */\n this.name = name\n /**\n * Full country name\n * @type {String}\n * @example Australia\n */\n this.country = country\n /**\n * @type {String}\n * @example Victoria\n */\n this.state = state\n /**\n * Number the candidate can use to contact this consultant/office\n * @type {String}\n * @example 03 8675 3090\n */\n this.phoneNumber = phoneNumber\n /**\n * Consultant's email address or their office's email address\n * (if the consultant doesn't have an email)\n * @type {String}\n * @example nolezy@anzuk.education\n */\n this.email = email\n }\n}\n","import ErrorResponseType from '@/constants/error/ErrorResponseType'\nimport RequestErrorSource from '@/constants/error/RequestErrorSource'\n\nexport default class ErrorResponseDTO {\n constructor({\n error,\n data = null,\n source = RequestErrorSource.unknown,\n type = ErrorResponseType.unknown,\n code = '',\n message = '',\n param = null,\n } = {}) {\n /**\n * @property {Error} The original error object returned from request attempt\n */\n this.error = error\n\n /**\n * @property {Object} Container prop to transmit any relevant data down the pipeline\n */\n this.data = data\n\n /**\n * @property {RequestErrorSource} Indicates at what stage the error was triggered when attempting the request\n */\n this.source = source\n\n /**\n * @property {ErrorResponseType} The type of error received from the response (set to unknown if response wasn't received)\n */\n this.type = type\n\n /**\n * @property {string} Error code that may be received from the response or determined locally\n */\n this.code = code\n\n /**\n * @property {string} Message to relate error information to the user\n */\n this.message = message\n\n /**\n * @property {string} Contains the parameter in error (if applicable)\n */\n this.param = param\n }\n}\n","export default class VueErrorDTO {\n constructor({ error, vm, info } = {}) {\n /**\n * @type {Object} complete error trace, contains the `message` and `error stack`\n */\n this.error = error\n\n /**\n * @type {Object} Vue component/instance in which error is occurred\n */\n this.vm = vm\n\n /**\n * @type {Object} info Vue specific error information such as lifecycle hooks, events etc.\n */\n this.info = info\n }\n}\n","/**\n * The error event is fired on a Window object when a resource failed to load or couldn't be used — for example if a script has an execution error.\n * @tutorial https://developer.mozilla.org/en-US/docs/Web/API/Window/error_event\n */\nexport default class WindowErrorDTO {\n constructor({ message, source, lineno, colno, error } = {}) {\n /**\n * @type {String} message A string containing a human-readable error message describing the problem. Same as `ErrorEvent.event`\n */\n this.message = message\n\n /**\n * @type {String} source A string containing the URL of the script that generated the error.\n */\n this.source = source\n\n /**\n * @type {Number} lineno An integer containing the line number of the script file on which the error occurred.\n */\n this.lineno = lineno\n\n /**\n * @type {Number} colno An integer containing the column number of the script file on which the error occurred.\n */\n this.colno = colno\n\n /**\n * @type {Error} error The error being thrown. Usually an `Error` object.\n */\n this.error = error\n }\n}\n","/**\n * Describes different types of events\n */\nexport default Object.freeze({\n Unknown: 'Unknown',\n PD: 'PD',\n Other: 'Other',\n UkInfo: 'UkInfo',\n})\n","export default Object.freeze({\n Kilometer: 'Kilometer',\n Mile: 'Mile',\n})\n","/* eslint-disable no-unused-vars */\nimport EventType from '@/constants/event/EventType'\nimport EventStatus from '@/constants/date/EventStatus'\nimport EventCostViewModel from '@/models/event/eventCostViewModel'\nimport EventLocationViewModel from '@/models/event/eventLocationViewModel'\nimport Distance from '@/models/general/distance'\n\n/**\n * Summary data for an event\n */\nexport default class EventSummaryViewModel {\n constructor({\n id,\n registrationURL,\n type,\n title,\n startDateTimeUTC,\n endDateTimeUTC,\n timeZone,\n cost,\n status,\n numberOfSpaces,\n enrolledCount,\n remainingSpaces,\n isFull,\n description,\n distance,\n facilitatorName,\n createdDateUTC,\n location,\n } = {}) {\n /**\n * @type {Number}\n */\n this.id = id\n\n /**\n * @type {String}\n */\n this.registrationURL = registrationURL\n\n /**\n * @type {EventType}\n */\n this.type = type\n\n /**\n * @type {String}\n */\n this.title = title\n\n /**\n * @type {Date}\n */\n this.startDateTimeUTC = startDateTimeUTC\n\n /**\n * @type {Date}\n */\n this.endDateTimeUTC = endDateTimeUTC\n\n /**\n * @type {String}\n */\n this.timeZone = timeZone\n\n /**\n * @type {EventCostViewModel}\n */\n this.cost = cost\n\n /**\n * @type {EventStatus}\n */\n this.status = status\n\n /**\n * @type {Number}\n */\n this.numberOfSpaces = numberOfSpaces\n\n /**\n * @type {Number}\n */\n this.enrolledCount = enrolledCount\n\n /**\n * @type {Number}\n */\n this.remainingSpaces = remainingSpaces\n\n /**\n * @type {Boolean}\n */\n this.isFull = isFull\n\n /**\n * @type {String}\n */\n this.description = description\n\n /**\n * @type {Distance}\n */\n this.distance = distance\n\n /**\n * @type {String}\n */\n this.facilitatorName = facilitatorName\n\n /**\n * @type {Date}\n */\n this.createdDateUTC = createdDateUTC\n\n /**\n * @type {EventLocationViewModel}\n */\n this.location = location\n }\n}\n","/**\n * @class\n * @public\n */\nexport default class AccessGuiFileViewModel {\n constructor({\n accessGui = '',\n name = '',\n friendlyName = '',\n contentType = '',\n fileSizeBytes = 0,\n } = {}) {\n /**\n * A guid referencing an uploaded file\n * @type {String}\n */\n this.accessGui = accessGui\n\n /**\n * Raw file name. Used as a backup if friendlyName isn't set\n * @type {String}\n */\n this.name = name\n\n /**\n * Friendly name for the application general file\n * @type {String}\n */\n this.friendlyName = friendlyName\n\n /**\n * MIME type (e.g. application/pdf)\n * @type {String}\n */\n this.contentType = contentType\n\n /**\n * @type {Number}\n */\n this.fileSizeBytes = fileSizeBytes\n }\n}\n","import dayjs from '@/services/date'\n\n/**\n * Used for caching blob objects\n */\nexport default class BlobCacheDTO {\n constructor({ blob, id, timestamp = dayjs() } = {}) {\n /**\n * @type {Blob}\n */\n this.blob = blob\n\n /**\n * Reference to blob object\n * @type {String}\n */\n this.id = id\n\n /**\n * Date cached\n * @type {Date}\n */\n this.timestamp = timestamp\n }\n}\n","export default class DownloadedFile {\n constructor({\n id = null,\n accessGuid = null,\n type = null,\n name = null,\n size = null,\n file = null,\n } = {}) {\n /**\n * Unique Identifier used in the array to find this item for viewing/deletion\n * @type {Number|String}\n */\n this.id = id\n /**\n * accessGuid of the downloaded file. Uploaded file will have this as null\n * @type {Guid}\n */\n this.accessGuid = accessGuid\n /**\n * Content Type of the file\n * @type {String}\n */\n this.type = type\n /**\n * Name of the file\n * @type {String}\n */\n this.name = name\n /**\n * Size of the file\n * @type {Number}\n */\n this.size = size\n /**\n * Downloaded file data.\n * @type {Object}\n */\n this.file = file\n }\n}\n","/**\n * @class\n * @public\n */\nexport default class GenericFileModel {\n constructor({ base64FileData, fileName = '' } = {}) {\n /**\n * File data encoded into base64 string\n * @type {String}\n */\n this.base64FileData = base64FileData\n /**\n * Name of file with file extension (e.g. \"myFile.pdf\")\n * @type {String}\n */\n this.fileName = fileName\n }\n}\n","/* eslint-disable no-unused-vars */\nimport { nanoid } from '@root/node_modules/nanoid/index'\nimport Interaction from './interaction'\n\n/**\n * @class\n * @public\n */\nexport default class ActionButton {\n /**\n * @constructor\n */\n constructor({ text = '', icon, attributes = {}, interaction = {} } = {}) {\n /**\n * Unique key to facilitate the v-for loop. Generated by nanoid\n * @type {String}\n */\n this.key = nanoid()\n\n /**\n * Text displayed on the action button\n * @type {String}\n */\n this.text = text\n\n /**\n * Object that configure the action buttons on the dialog\n * @type {Array}\n */\n this.icon = icon\n\n /**\n * Object containing attributes to style the action button\n * @type {Object}\n * @see https://v2.vuetifyjs.com/en/api/v-btn/ for full list of attributes\n * @example\n *\n * ```\n * {\n * id: 'confirm-btn',\n * color: VuetifyColourClass.primary,\n * text: true,\n * title: 'Click here to accept the terms',\n * 'data-testid': 'promise-dialog--confirm-btn'\n * }\n * ```\n */\n this.attributes = attributes\n\n /**\n * Interaction triggered when action button is clicked\n * @type {Interaction}\n */\n this.interaction = interaction\n }\n}\n","/**\n * Color object that contains both foreground and background colours\n */\nexport default class ColorSet {\n constructor({ foreground = '#000', background = '#FFF' } = {}) {\n /**\n * Hex color value. Color for elements in the foreground, typically icons or text\n * @type {String}\n * @example #00ACEF\n */\n this.foreground = foreground\n\n /**\n * Hex color value. Color for elements in the background\n * @type {String}\n * @example #00ACEF\n */\n this.background = background\n }\n}\n","export default class DateRange {\n /**\n * @param {{ start: Date, end: Date }} param0\n */\n constructor({ start = null, end = null } = {}) {\n /**\n * Start of date range\n * @type {Date}\n */\n this.start = start\n\n /**\n * End of date range\n * @type {Date}\n */\n this.end = end\n }\n}\n","import DurationUnits from '@/constants/date/DurationUnits'\n\nexport default class Duration {\n constructor({ value = 0, unit = DurationUnits.MINUTE } = {}) {\n /**\n * Quantity of units of time\n * @type {number}\n */\n this.value = value\n\n /**\n * Unit of time to describe the value prop\n * @type {DurationUnits}\n */\n this.unit = unit\n }\n}\n","/**\n * Generic class to hold information about emit values\n */\nexport default class EmitEvent {\n constructor({ disabled = false, event = '', value = null } = {}) {\n /**\n * Will prevent event from firing\n * @type {Boolean}\n */\n this.disabled = disabled\n\n /**\n * Name of event to be emitted\n * @type {String}\n */\n this.event = event\n\n /**\n * Value of event to be emitted\n * @type {*}\n */\n this.value = value\n }\n}\n","// eslint-disable-next-line no-unused-vars\nimport EmitEvent from './emitEvent'\n// eslint-disable-next-line no-unused-vars\nimport InteractionType from '@/constants/core/InteractionType'\n\n/**\n * Describes an interaction when the user clicks a UI element\n */\nexport default class Interaction {\n /**\n * @param {{type: InteractionType, value: EmitEvent|URL|Object|Function}}\n */\n constructor({ type, value } = {}) {\n /**\n * @type {String}\n * @see {InteractionType} for valid range of values\n */\n this.type = type\n\n /**\n * Contains data required to action interation\n * @type {EmitEvent|URL|Object|Function}\n */\n this.value = value\n }\n\n /**\n * @returns {Boolean}\n */\n isEmitEvent() {\n return this.type === InteractionType.emitEvent\n }\n\n /**\n * @returns {Boolean}\n */\n isRouterLink() {\n return this.type === InteractionType.routerLink\n }\n\n /**\n * @returns {Boolean}\n */\n isExternalLink() {\n return this.type === InteractionType.externalLink\n }\n\n /**\n * @returns {Boolean}\n */\n isFunction() {\n return this.type === InteractionType.function\n }\n\n /**\n * Determines if an interaction is even possible\n * @returns {Boolean}\n */\n isInteractionPossible() {\n return (\n this.isEmitEvent ||\n this.isRouterLink ||\n this.isExternalLink ||\n this.isFunction\n )\n }\n\n /**\n * @returns {EmitEvent}\n */\n getEmitEvent() {\n if (!this.isEmitEvent())\n throw new TypeError('This interaction is not an emit event')\n return this.value\n }\n\n /**\n * @returns {RouterLink}\n */\n getRouterLink() {\n if (!this.isRouterLink())\n throw new TypeError('This interaction is not a router link')\n return this.value\n }\n\n /**\n * @returns {URL}\n */\n getExternalLink() {\n if (!this.isExternalLink())\n throw new TypeError('This interaction is not an external link')\n return this.value\n }\n\n /**\n * @returns {Function}\n */\n getFunction() {\n if (!this.isFunction())\n throw new TypeError('This interaction is not an action function')\n return this.value\n }\n}\n","/**\n * Some basic elements that make up an address\n */\nexport default class AddressViewModel {\n constructor({\n line1 = '',\n line2 = '',\n suburb = '',\n state = '',\n postcode = '',\n country = '',\n fullAddress = '',\n latitude = 0.0,\n longitude = 0.0,\n } = {}) {\n /**\n * @type {String}\n */\n this.line1 = line1\n\n /**\n * @type {String}\n */\n this.line2 = line2\n\n /**\n * @type {String}\n */\n this.suburb = suburb\n\n /**\n * @type {String}\n */\n this.state = state\n\n /**\n * @type {String}\n */\n this.postcode = postcode\n\n /**\n * @type {String}\n */\n this.country = country\n\n /**\n * A full address string. A combination of all address segements into a single string.\n * @type {String}\n */\n this.fullAddress = fullAddress\n\n /**\n * @type {Number}\n */\n this.latitude = latitude\n\n /**\n * @type {Number}\n */\n this.longitude = longitude\n }\n}\n","/* eslint-disable no-unused-vars */\nimport ComplianceItemStatus from '@/constants/registrations/ComplianceItemStatus'\n\n/**\n * @class\n * @public\n */\nexport default class ComplianceItemStatusUpdateDto {\n constructor({ complianceItemId, status } = {}) {\n /**\n * @type {Number}\n */\n this.complianceItemId = complianceItemId\n\n /**\n * @type {String}\n * @see {ComplianceItemStatus} see for valid values\n */\n this.status = status\n }\n}\n","/* eslint-disable no-unused-vars */\nimport VideoType from '@/constants/registrations/VideoType'\n\n/**\n * @class\n * @public\n */\nexport default class ComplianceItemVideoViewModel {\n constructor({ url, videoType, minWatchPercentageCompletionCriteria } = {}) {\n /**\n * Contains a URL to a hosted video\n * @type {URL}\n */\n this.url = url ? new URL(url) : null\n\n /**\n * Describes which type of hosted video exists in the url\n * @type {String}\n * @example Vimeo\n * @see {VideoType} for valid range of values\n */\n this.videoType = videoType\n\n /**\n * The minimum percentage of the video that needs to be watched before being\n * considered sufficient\n * @type {Number}\n */\n this.minWatchPercentageCompletionCriteria =\n minWatchPercentageCompletionCriteria\n }\n}\n","/* eslint-disable no-unused-vars */\nimport ComplianceItemReferenceType from '@/constants/registrations/ComplianceItemReferenceType'\nimport ComplianceItemType from '@/constants/registrations/ComplianceItemType'\nimport ComplianceItemStatus from '@/constants/registrations/ComplianceItemStatus'\n\n/**\n * @class\n * @public\n */\nexport default class ComplianceItemViewModel {\n constructor({\n id,\n referenceId,\n referenceFileId,\n status,\n title,\n referenceType,\n type,\n description,\n } = {}) {\n /**\n * @type {Number}\n * @example 8675309\n */\n this.id = id\n /**\n * This value depends on the type (ComplianceItemReferenceType) as to what it represents.\n * For example, if the type is UploadedFile, the referenceId relates to a fileTypeId\n * @type {Number}\n * @example 14\n * @see {ComplianceItemReferenceType}\n */\n this.referenceId = referenceId\n /**\n * This value is also depends on the type (ComplianceItemReferenceType) as to what it represents.\n * For example, if the type is Certification, it relates to a Candidate.Certification record.\n * This value will be used to load the related file's details on compliance items that are\n * awaiting verification.\n * @type {Number}\n * @example 8675309\n */\n this.referenceFileId = referenceFileId\n /**\n * Relates to the current status of the compliance item\n * @type {String}\n * @example RequiresCandidateAction\n * @see {ComplianceItemStatus} for valid status values\n */\n this.status = status\n /**\n * @type {String}\n */\n this.title = title\n /**\n * Type of compliance item\n * @type {String}\n * @example UploadedFile\n * @see {ComplianceItemReferenceType} for valid type values\n */\n this.referenceType = referenceType\n /**\n * The grouping/collection of compliance item this time belongs to. Directly relates to the tabs on the compliance list.\n * @type {String}\n * @example document\n * @see {ComplianceItemType} for valid type values\n */\n this.type = type\n /**\n * @type {String}\n */\n this.description = description\n }\n}\n","/* eslint-disable no-unused-vars */\nimport ComplianceItemStatusUpdateDto from './complianceItemStatusUpdateDto'\n\n/**\n * @class\n * @public\n */\nexport default class DocumentComplianceItemStatusUpdateDto extends ComplianceItemStatusUpdateDto {\n constructor({ complianceItemId, referenceFileId = null, status } = {}) {\n super({ complianceItemId, status })\n /**\n * @type {Number}\n */\n this.referenceFileId = referenceFileId\n }\n}\n","/**\n * @class\n * @public\n */\nexport default class AccountCreationDTO {\n constructor({ token, password } = {}) {\n /**\n * Encrypted token\n * @type {String}\n */\n this.token = token\n\n /**\n * @type {String}\n */\n this.password = password\n }\n}\n","import WorkExperienceDotPointType from '@/constants/workExperience/WorkExperienceDotPointType'\n\n/**\n * @class\n * @public\n */\nexport default class WorkExperienceDotPointDTO {\n /**\n * @constructor\n * @param {Object} param0\n */\n constructor({\n type = WorkExperienceDotPointType.general,\n value = null,\n } = {}) {\n /**\n * See WorkExperienceDotPointType for accepted values\n * @type {String}\n */\n this.type = type\n\n /**\n * @type {String}\n */\n this.value = value\n }\n}\n","import WorkExperienceDotPointDTO from './workExperienceDotPointDTO'\n\n/**\n * @class\n * @public\n */\nexport default class WorkExperienceDotPointWithIdDTO extends WorkExperienceDotPointDTO {\n /**\n * @constructor\n */\n constructor({ id, type, value = null } = {}) {\n super({ type, value })\n\n /**\n * @type {Number}\n */\n this.id = id\n }\n}\n","/**\n * @class\n * @public\n */\nexport default class WorkExperienceSummaryModel {\n /**\n * @constructor\n * @param {Object} param0\n */\n constructor({\n id,\n placeOfWork = null,\n positionHeld = null,\n dateFrom = null,\n dateUntil = null,\n employmentDays = 0,\n isCurrent = false,\n isVerified = false,\n } = {}) {\n /**\n * @type {Number}\n */\n this.id = id\n\n /**\n * @type {String}\n */\n this.placeOfWork = placeOfWork\n\n /**\n * @type {String}\n */\n this.positionHeld = positionHeld\n\n /**\n * @type {Date}\n */\n this.dateFrom = dateFrom\n\n /**\n * @type {Date}\n */\n this.dateUntil = dateUntil\n\n /**\n * The number of days this work experience is worth\n * @type {Number}\n */\n this.employmentDays = employmentDays\n\n /**\n * Indicates if candidate is currently in role\n * @type {Boolean}\n */\n this.isCurrent = isCurrent\n\n /**\n * Indicates if this record has been verified by a consultant\n * @type {Boolean}\n */\n this.isVerified = isVerified\n }\n}\n","/* eslint-disable no-unused-vars */\nimport WorkExperienceDotPointDTO from './workExperienceDotPointDTO'\nimport WorkExperienceDotPointWithIdDTO from './workExperienceDotPointWithIdDTO'\n\n/**\n * @class\n * @public\n */\nexport default class WorkExperienceUploadFormDTO {\n /**\n * @constructor\n * @param {Object, isCurrent: Boolean>, files: Array} param0\n */\n constructor({\n placeOfWork = null,\n positionHeld = null,\n dateFrom = null,\n dateUntil = null,\n details = null,\n dotPoints = [],\n isCurrent = false,\n files = [],\n } = {}) {\n /**\n * @type {String}\n */\n this.placeOfWork = placeOfWork\n\n /**\n * @type {String}\n */\n this.positionHeld = positionHeld\n\n /**\n * @type {Date}\n */\n this.dateFrom = dateFrom\n\n /**\n * @type {Date}\n */\n this.dateUntil = dateUntil\n\n /**\n * @type {String}\n */\n this.details = details\n\n /**\n * @type {Array}\n */\n this.dotPoints = dotPoints\n\n /**\n * Indicates if candidate is currently in role\n * @type {Boolean}\n */\n this.isCurrent = isCurrent\n\n /**\n * @type {Array}\n */\n this.files = files\n }\n}\n","/**\n * Used to identify errors thrown when required config is missing or empty\n */\nexport default class MissingConfigurationError extends Error {\n /**\n * @param {String} resourceName name of config resource that wasn't found\n */\n constructor({ message = null, resourceName = null }) {\n super(message || `Required config was not found or null: '${resourceName}'`)\n this.name = 'MissingConfigurationError'\n }\n}\n","/**\n * Code sourced from: https://github.com/latelierco/vue-application-insights/blob/master/src/index.js on 21/10/2022 3:24 PM\n * Adjusting the code to suit our needs and to ensure it conforms to the latest appinsights requirements, as the package\n * has not been maintained for some time.\n */\n\nimport { ApplicationInsights, Util } from '@microsoft/applicationinsights-web'\nimport MissingConfigurationError from '@/models/error/missingConfigurationError'\n\n/**\n * Vue plugin for application insights package\n *\n * @param Vue\n * @param options\n */\nfunction install(Vue, options) {\n // More info: https://github.com/microsoft/ApplicationInsights-JS#configuration\n const config = options.appInsightsConfig || null\n\n if (!config)\n throw new MissingConfigurationError({ resourceName: 'appInsightsConfig' })\n\n Vue.appInsights = new ApplicationInsights({ config })\n Vue.appInsights.loadAppInsights()\n Vue.appInsights.trackPageView()\n\n if (typeof options.onAfterScriptLoaded === 'function') {\n options.onAfterScriptLoaded(Vue.appInsights)\n }\n\n const router = options.router\n\n // Watch route event if router option is defined.\n if (router) {\n if (options.trackInitialPageView !== false) {\n setupPageTracking(options, Vue)\n } else {\n router.onReady(() => setupPageTracking(options, Vue))\n }\n }\n\n Object.defineProperty(Vue.prototype, '$appInsights', {\n get: () => Vue.appInsights,\n })\n}\n\n/**\n * Track route changes as page views with AppInsights\n * @param options\n */\nfunction setupPageTracking(options, Vue) {\n const router = options.router\n\n const baseName = options.baseName || '(Vue App)'\n\n router.beforeEach((route, from, next) => {\n const name = baseName + ' / ' + route.name\n Vue.appInsights.context.telemetryTrace.traceID = Util.generateW3CId()\n Vue.appInsights.context.telemetryTrace.name = route.name\n Vue.appInsights.startTrackPage(name)\n next()\n })\n\n router.afterEach((route) => {\n const name = baseName + ' / ' + route.name\n const url = location.protocol + '//' + location.host + route.fullPath\n Vue.appInsights.stopTrackPage(name, url)\n Vue.appInsights.flush()\n })\n}\n\n// auto install for navigator\nif (typeof window !== 'undefined' && window.Vue) {\n window.Vue.use(install)\n}\n\nexport default install\n","import Vue from 'vue'\nimport { logger } from '@/services/logging/AppLogger'\nimport VueErrorDTO from '@/models/error/vueErrorDTO'\nimport WindowErrorDTO from '@/models/error/windowErrorDTO'\n\n/**\n * Captures the errors that are specific to Vue instances. It would not be able\n * to capture the errors which are outside of Vue instances such as utils files,\n * services etc.\n * @param {*} error complete error trace, contains the `message` and `error stack`\n * @param {*} vm Vue component/instance in which error is occurred\n * @param {*} info Vue specific error information such as lifecycle hooks, events etc.\n */\nVue.config.errorHandler = (error, vm, info) => {\n logger.logError(new VueErrorDTO({ error, vm, info }))\n}\n\n/**\n * Captures unhandled expections outside of the Vue instance\n * @param {String} message A string containing a human-readable error message describing the problem. Same as `ErrorEvent.event`\n * @param {String} source A string containing the URL of the script that generated the error.\n * @param {Number} lineno An integer containing the line number of the script file on which the error occurred.\n * @param {Number} colno An integer containing the column number of the script file on which the error occurred.\n * @param {Error} error The error being thrown. Usually an `Error` object.\n */\nwindow.onerror = function (message, source, lineno, colno, error) {\n logger.logError(new WindowErrorDTO({ message, source, lineno, colno, error }))\n}\n\n/**\n * Captures promise rejections that are not handled by window.onerror\n * @tutorial https://developer.mozilla.org/en-US/docs/Web/API/Window/unhandledrejection_event\n *\n * @param {PromiseRejectionEvent} event\n */\nconst handlePromiseRejection = function (event) {\n logger.logError(event)\n}\n\nwindow.addEventListener('unhandledrejection', handlePromiseRejection)\n","// Firebase App (the core Firebase SDK) is always required and must be listed first\nimport { initializeApp } from 'firebase/app'\nimport config from '@/common/config'\n\n// Add the Firebase products that you want to use\nimport 'firebase/auth'\n\n// If you enabled Analytics in your project, add the Firebase SDK for Analytics\n// import \"firebase/analytics\";\n\n// firebase init goes here\nconst app = initializeApp(config.get('firebase'))\n\n// firebase utils\nexport default app\n","import { required, email, max } from 'vee-validate/dist/rules'\nimport { extend } from 'vee-validate'\n\nextend('required', {\n ...required,\n message: 'This field is required',\n})\n\nextend('max', {\n ...max,\n message: 'This field must be {length} characters or less',\n})\n\nextend('email', {\n ...email,\n message: 'This field must be a valid email',\n})\n","import config from '@/common/config'\n\n/**\n * DEPRECIATED: Don't use, okay for a best guess but often users don't know what their browser's language is set to\n * Attempts to detect the first language selected from the browser (since modern browsers come with an array of preferred languages).\n * It is also backwards compatible with older browsers and mobile.\n *\n * Sourced from https://stackoverflow.com/a/46514247 on 06/09/2021 01:46 PM\n * @returns String | null\n */\nexport const getFirstBrowserLanguage = () => {\n const nav = window.navigator\n const browserLanguagePropertyKeys = [\n 'language',\n 'browserLanguage',\n 'systemLanguage',\n 'userLanguage',\n ]\n let i\n let language\n let len\n let shortLanguage = null\n\n // support for HTML 5.1 \"navigator.languages\"\n if (Array.isArray(nav.languages)) {\n for (i = 0; i < nav.languages.length; i++) {\n language = nav.languages[i]\n len = language.length\n if (!shortLanguage && len) {\n shortLanguage = language\n }\n if (language && len > 2) {\n return language\n }\n }\n }\n\n // support for other well known properties in browsers\n for (i = 0; i < browserLanguagePropertyKeys.length; i++) {\n language = nav[browserLanguagePropertyKeys[i]]\n // skip this loop iteration if property is null/undefined. IE11 fix.\n if (language == null) {\n continue\n }\n len = language.length\n if (!shortLanguage && len) {\n shortLanguage = language\n }\n if (language && len > 2) {\n return language\n }\n }\n\n return shortLanguage\n}\n\n/**\n * Returns language key based on URL client used to access CL\n * @returns {String} Language key (e.g. en-US)\n */\nexport const getLanguageBasedOnBaseURL = () => {\n const baseUrl = window.location.origin\n\n // key-pair { langKey: url }\n // e.g. { 'en-US': 'https://example.com' }\n const urls = config.get('i18n.urls')\n\n if (!urls) {\n // Suppress warning while unit testing\n if (process.env.NODE_ENV !== 'test')\n console.warn(\"Unable to parse url config. Defaulting language to 'en'\")\n return config.get('i18n.locale')\n }\n\n // Iterate over supported urls to find a match\n for (const [key, value] of Object.entries(urls))\n if (value.includes(baseUrl)) return key\n\n // Defaults to en\n return config.get('i18n.locale')\n}\n","import Vue from 'vue'\nimport VueI18n from 'vue-i18n'\nimport { getLanguageBasedOnBaseURL } from '@/helpers/language-helpers'\n\n// Locales\nimport en from '@/locales/en.json'\nimport enUS from '@/locales/en-US.json'\nimport enCA from '@/locales/en-CA.json'\nimport enNZ from '@/locales/en-NZ.json'\nimport enGB from '@/locales/en-GB.json'\nimport enAU from '@/locales/en-AU.json'\n\nVue.use(VueI18n)\n\n// https://kazupon.github.io/vue-i18n/api/#constructor-options\nexport default new VueI18n({\n // locale: The locale of localization. If the locale contains a territory and a dialect, this locale contains an implicit fallback.\n locale: getLanguageBasedOnBaseURL(),\n // messages: The locale messages of localization.\n messages: {\n en,\n 'en-US': enUS,\n 'en-CA': enCA,\n 'en-NZ': enNZ,\n 'en-GB': enGB,\n 'en-AU': enAU,\n },\n numberFormats: {\n 'en-US': {\n currency: {\n style: 'currency',\n currency: 'USD',\n },\n },\n 'en-AU': {\n currency: {\n style: 'currency',\n currency: 'AUD',\n },\n },\n 'en-NZ': {\n currency: {\n style: 'currency',\n currency: 'NZD',\n },\n },\n 'en-GB': {\n currency: {\n style: 'currency',\n currency: 'GBP',\n },\n },\n 'en-CA': {\n currency: {\n style: 'currency',\n currency: 'CAD',\n },\n },\n },\n dateTimeFormats: {\n en: {\n time: {\n hour: '2-digit',\n minute: '2-digit',\n hour12: true,\n },\n time24: {\n hour: '2-digit',\n minute: '2-digit',\n hour12: false,\n },\n dateShort: {\n day: 'numeric',\n month: 'short',\n },\n dateFormatted: {\n day: 'numeric',\n month: 'short',\n year: 'numeric',\n },\n dateTimeLong: {\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n hour: 'numeric',\n minute: 'numeric',\n },\n },\n 'en-AU': {\n dateShort: {\n day: 'numeric',\n month: 'short',\n },\n dateFormatted: {\n day: 'numeric',\n month: 'short',\n year: 'numeric',\n },\n dateTimeLong: {\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n hour: 'numeric',\n minute: 'numeric',\n },\n },\n 'en-NZ': {\n dateShort: {\n day: 'numeric',\n month: 'short',\n },\n dateFormatted: {\n day: 'numeric',\n month: 'short',\n year: 'numeric',\n },\n dateTimeLong: {\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n hour: 'numeric',\n minute: 'numeric',\n },\n },\n 'en-GB': {\n dateShort: {\n day: 'numeric',\n month: 'short',\n },\n dateFormatted: {\n day: 'numeric',\n month: 'short',\n year: 'numeric',\n },\n dateTimeLong: {\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n hour: 'numeric',\n minute: 'numeric',\n },\n },\n 'en-CA': {\n dateShort: {\n day: 'numeric',\n month: 'short',\n },\n dateFormatted: {\n day: 'numeric',\n month: 'short',\n year: 'numeric',\n },\n dateTimeLong: {\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n hour: 'numeric',\n minute: 'numeric',\n },\n },\n 'en-US': {\n dateShort: {\n day: 'numeric',\n month: 'short',\n },\n dateFormatted: {\n day: 'numeric',\n month: 'short',\n year: 'numeric',\n },\n dateTimeLong: {\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n hour: 'numeric',\n minute: 'numeric',\n },\n },\n },\n // silentTranslationWarn: Whether suppress warnings outputted when localization fails.\n silentTranslationWarn: true,\n // silentFallbackWarn: Whether suppress fallback warnings when localization fails.\n silentFallbackWarn: true,\n})\n","import Vue from 'vue'\nimport VueMq from 'vue-mq'\nimport MediaQueryBreakPoints from '@/constants/core/MediaQueryBreakPoints'\n\nVue.use(VueMq, {\n breakpoints: {\n xs: MediaQueryBreakPoints.xs.size,\n sm: MediaQueryBreakPoints.sm.size,\n md: MediaQueryBreakPoints.md.size,\n lg: MediaQueryBreakPoints.lg.size,\n xl: MediaQueryBreakPoints.xl.size,\n },\n})\n","import Vue from 'vue'\nimport Toast, { POSITION } from 'vue-toastification'\nimport 'vue-toastification/dist/index.css'\n\n// Options: https://github.com/Maronato/vue-toastification/tree/main#plugin-registration-vueuse\nconst options = {\n position: POSITION.BOTTOM_CENTER,\n}\n\nVue.use(Toast, options)\n","import Vue from 'vue'\nimport Vuetify, {\n VApp,\n VIcon,\n VCard,\n VSnackbar,\n VBtn,\n VChip,\n VSelect,\n VTextField,\n VTooltip,\n} from 'vuetify/lib'\n\nVue.use(Vuetify, {\n components: {\n VApp,\n VIcon,\n VCard,\n VSnackbar,\n VBtn,\n VChip,\n VSelect,\n VTextField,\n VTooltip,\n },\n})\n\nexport default new Vuetify({\n theme: {\n options: {\n customProperties: true,\n },\n themes: {\n light: {\n primary: '#3d3088',\n blue: '#00acef',\n info: '#00acef',\n secondary: '#1867c0',\n indigo: '#3d3088',\n warning: '#F5B51A',\n },\n dark: {\n primary: '#ab92f7',\n blue: '#00acef',\n info: '#00acef',\n indigo: '#ab92f7',\n warning: '#F5B51A',\n },\n },\n },\n})\n","export const ErrorPageCodes = Object.freeze({\n /**\n * Server responded with 500 status code or some other unrecoverable error\n */\n INTERNAL_SERVER_ERROR: {\n code: '500',\n },\n /**\n * Resource or page was not found\n */\n PAGE_NOT_FOUND: {\n code: '404',\n },\n /**\n * User is not authorized to access resource\n */\n UNAUTHORIZED: {\n code: '401',\n },\n /**\n * Generic page for bad request responses (400)\n */\n BAD_REQUEST: {\n code: '400',\n },\n /**\n * For scenarios when the user's account couldn't be retrieved from the server\n */\n ACCOUNT_LOAD_FAILURE: {\n code: 'accountLoadFailure',\n },\n /**\n * Candidate's account has been suspended/disabled\n */\n ACCOUNT_SUSPENDED: {\n code: 'accountSuspended',\n },\n})\n","import i18n from '@plugins/vue-i18n'\nimport store from '@/store'\nimport { ErrorPageCodes } from '@/constants/error/ErrorPageCodes'\nimport routeDefinitions from '@/constants/routes/routeDefinitions'\n\nexport default [\n {\n ...routeDefinitions.home,\n component: () => import('@views/home.vue'),\n meta: {\n title: i18n.t('home.homePageTitle'),\n },\n },\n {\n ...routeDefinitions.myAvailability,\n component: () => import('@views/my-availability.vue'),\n meta: {\n title: i18n.t('availability.pageTitle'),\n },\n },\n {\n ...routeDefinitions.myRegistrations,\n component: () => import('@views/my-registrations.vue'),\n meta: {\n title: i18n.t('registrations.pageTitle'),\n },\n },\n {\n ...routeDefinitions.registrationDetails,\n component: () => import('@/router/views/registration-details.vue'),\n meta: {\n title: i18n.t('registrationDetails.pageTitle'),\n },\n },\n {\n ...routeDefinitions.groupBookingDetailsGuestAccess,\n component: () => import('@/router/views/booking-details.vue'),\n meta: {\n title: i18n.t('bookingDetails.pageTitle'),\n public: true,\n },\n },\n {\n ...routeDefinitions.bookingDetailsGuestAccess,\n component: () => import('@/router/views/booking-details.vue'),\n meta: {\n title: i18n.t('bookingDetails.pageTitle'),\n public: true,\n },\n },\n {\n ...routeDefinitions.bookingDetails,\n component: () => import('@/router/views/booking-details.vue'),\n meta: {\n title: i18n.t('bookingDetails.pageTitle'),\n },\n },\n {\n ...routeDefinitions.myFiles,\n component: () => import('@/router/views/my-files.vue'),\n meta: {\n title: i18n.t('myFiles.pageTitle'),\n },\n },\n {\n ...routeDefinitions.profDevelopment,\n component: () => import('@views/professional-development.vue'),\n meta: {\n title: i18n.t('professionalDevelopment.pageTitle'),\n },\n },\n {\n ...routeDefinitions.downloads,\n component: () => import('@views/downloads.vue'),\n meta: {\n title: i18n.t('downloads.pageTitle'),\n },\n },\n {\n ...routeDefinitions.contact,\n component: () => import('@views/contact.vue'),\n meta: {\n title: i18n.t('contact.pageTitle'),\n },\n },\n {\n ...routeDefinitions.help,\n component: () => import('@views/help.vue'),\n meta: {\n title: i18n.t('help.pageTitle'),\n },\n },\n {\n ...routeDefinitions.settings,\n component: () => import('@/router/views/settings/settings.vue'),\n },\n {\n ...routeDefinitions.changePassword,\n component: () =>\n import('@/router/views/settings/settings-change-password.vue'),\n },\n {\n ...routeDefinitions.login,\n component: () => import('@views/login.vue'),\n meta: {\n public: true,\n title: i18n.t('login.loginPageTitle'),\n async beforeResolve(routeTo, routeFrom, next) {\n // Since login is a public path, we won't get a chance to check if the\n // user is already authenticated via main route guard. So doing it here.\n try {\n await store.dispatch('auth/refreshToken')\n } catch {\n // We expect the above dispatch to throw if the user is unauthenticated.\n // Intentionally leaving this catch block blank.\n } finally {\n // If the user is already logged in\n if (store.getters['auth/isUserLoggedIn']) {\n // Redirect to the home page instead\n next({ name: routeDefinitions.home.name })\n } else {\n // Continue to the login page\n next()\n }\n }\n },\n },\n },\n {\n ...routeDefinitions.accountSetup,\n component: () => lazyLoadView(import('@views/account-setup.vue')),\n meta: {\n public: true,\n title: i18n.t('accountSetup.pageTitle'),\n },\n },\n {\n ...routeDefinitions.impersonateLogout,\n component: () => lazyLoadView(import('@views/impersonate-logout.vue')),\n meta: {\n public: true,\n title: 'Impersonate Logout',\n },\n },\n {\n ...routeDefinitions.impersonateLogin,\n component: () => lazyLoadView(import('@views/login.vue')),\n meta: {\n public: true,\n title: 'Impersonate Login',\n beforeResolve(routeTo, routeFrom, next) {\n // If the user is already logged in\n if (store.getters['auth/isUserLoggedIn']) {\n // Redirect to the home page instead\n next({ name: routeDefinitions.home.name })\n } else {\n // Continue to the login page\n next()\n }\n },\n },\n },\n {\n ...routeDefinitions.logout,\n meta: {\n beforeResolve(routeTo, routeFrom, next) {\n store.dispatch('auth/logOut')\n const authRequiredOnPreviousRoute = routeFrom.matched.some(\n (route) => route.meta.authRequired\n )\n // Navigate back to previous page, or home as a fallback\n next(\n authRequiredOnPreviousRoute\n ? { name: routeDefinitions.home.name }\n : { ...routeFrom }\n )\n },\n },\n },\n {\n ...routeDefinitions.underConstruction,\n component: () => lazyLoadView(import('@views/_under-construction.vue')),\n meta: {\n public: true,\n title: i18n.t('underConstruction.pageTitle'),\n },\n },\n {\n path: '/404',\n name: '404',\n redirect: { name: routeDefinitions.notFound.name },\n meta: {\n public: true,\n label: 'Error',\n type: ErrorPageCodes.PAGE_NOT_FOUND.code,\n },\n // Allows props to be passed to the 404 page through route\n // params, such as `resource` to define what wasn't found.\n props: true,\n },\n // Redirect any unmatched routes to the 404 page. This may\n // require some server configuration to work in production:\n // https://router.vuejs.org/en/essentials/history-mode.html#example-server-configurations\n {\n path: '*',\n component: require('@views/_error.vue').default,\n props: true,\n name: routeDefinitions.notFound.name,\n meta: {\n public: true,\n label: 'NotFound',\n type: ErrorPageCodes.PAGE_NOT_FOUND.code,\n },\n },\n {\n path: '/500',\n redirect: { name: routeDefinitions.error.name },\n meta: {\n public: true,\n label: 'Error',\n type: ErrorPageCodes.INTERNAL_SERVER_ERROR.code,\n },\n },\n {\n path: '/401',\n redirect: { name: routeDefinitions.unauthorized.name },\n meta: {\n public: true,\n label: 'Unauthorized',\n type: ErrorPageCodes.UNAUTHORIZED.code,\n icon: 'mdi-account-cancel',\n },\n },\n {\n path: '/error',\n redirect: { name: routeDefinitions.error.name },\n meta: {\n public: true,\n label: 'Error',\n type: ErrorPageCodes.INTERNAL_SERVER_ERROR.code,\n },\n },\n {\n path: '*',\n component: require('@views/_error.vue').default,\n props: true,\n name: routeDefinitions.error.name,\n meta: {\n public: true,\n label: 'Error',\n type: ErrorPageCodes.INTERNAL_SERVER_ERROR.code,\n },\n },\n {\n path: '*',\n component: require('@views/_error.vue').default,\n props: true,\n name: routeDefinitions.unauthorized.name,\n meta: {\n public: true,\n label: 'Unauthorized',\n type: ErrorPageCodes.UNAUTHORIZED.code,\n icon: 'mdi-account-cancel',\n },\n },\n {\n path: '*',\n component: require('@views/_error.vue').default,\n props: true,\n name: routeDefinitions.accountLoadFailure.name,\n meta: {\n public: true,\n label: 'Failed To Load Account',\n type: ErrorPageCodes.ACCOUNT_LOAD_FAILURE.code,\n icon: 'mdi-account-cancel',\n },\n },\n {\n path: '/account-suspended',\n redirect: { name: routeDefinitions.accountSuspended.name },\n meta: {\n public: true,\n label: 'Account Suspended',\n type: ErrorPageCodes.ACCOUNT_SUSPENDED.code,\n icon: 'mdi-account-cancel',\n },\n },\n {\n path: '*',\n component: require('@views/_error.vue').default,\n props: true,\n name: routeDefinitions.accountSuspended.name,\n meta: {\n public: true,\n label: 'Account Suspended',\n type: ErrorPageCodes.ACCOUNT_SUSPENDED.code,\n icon: 'mdi-account-cancel',\n },\n },\n]\n\n/** Lazy-loads view components, but with better UX. A loading view\n * will be used if the component takes a while to load, falling\n * back to a timeout view in case the page fails to load. You can\n * use this component to lazy-load a route with:\n *\n * component: () => lazyLoadView(import('@views/my-view'))\n *\n * NOTE: Components loaded with this strategy DO NOT have access\n * to in-component guards, such as beforeRouteEnter,\n * beforeRouteUpdate, and beforeRouteLeave. You must either use\n * route-level guards instead or lazy-load the component directly:\n *\n * component: () => import('@views/my-view')\n */\nfunction lazyLoadView(AsyncView) {\n const AsyncHandler = () => ({\n component: AsyncView,\n // A component to use while the component is loading.\n loading: require('@views/_loading.vue').default,\n // Delay before showing the loading component.\n // Default: 200 (milliseconds).\n delay: 400,\n // A fallback component in case the timeout is exceeded\n // when loading the component.\n error: require('@views/_timeout.vue').default,\n // Time before giving up trying to load the component.\n // Default: Infinity (milliseconds).\n timeout: 10000,\n })\n\n return Promise.resolve({\n functional: true,\n render(h, { data, children }) {\n // Transparently pass any props or children\n // to the view component.\n return h(AsyncHandler, data, children)\n },\n })\n}\n","import Vue from 'vue'\nimport VueRouter from 'vue-router'\n// https://github.com/declandewet/vue-meta\nimport VueMeta from 'vue-meta'\n// Adds a loading bar at the top during page loads.\nimport NProgress from 'nprogress/nprogress'\nimport routes from './routes'\nimport store from '@/store'\nimport dayjs from '@/services/date'\nimport { decideRouteBasedOnFeatureToggles } from '@/services/features/featureDecisions.js'\nimport routeDefinitions from '@/constants/routes/routeDefinitions'\n\nVue.use(VueRouter)\nVue.use(VueMeta, {\n // The component option name that vue-meta looks for meta info on.\n keyName: 'metaInfo',\n})\n\nconst router = new VueRouter({\n routes,\n // Use the HTML5 history API (i.e. normal-looking routes)\n // instead of routes with hashes (e.g. example.com/#/about).\n // This may require some server configuration in production:\n // https://router.vuejs.org/en/essentials/history-mode.html#example-server-configurations\n mode: 'history',\n // Simulate native-like scroll behavior when navigating to a new\n // route and using back/forward buttons.\n scrollBehavior(to, from, savedPosition) {\n if (savedPosition) {\n return savedPosition\n } else {\n return { x: 0, y: 0 }\n }\n },\n})\n\nconst startRouteLoading = () => {\n // Begin loading animation. Only really required for initial page loads/refreshes.\n if (!store.getters.hasLoadedAppOnce) {\n store.dispatch('startLoadingApp')\n }\n\n // Only display the top loading bar after initial load\n if (store.getters.hasLoadedAppOnce) NProgress.start()\n}\nconst stopRouteLoading = () => {\n // Prevents full page loader showing up on every route change\n if (store.getters.isLoadingApp) {\n store.dispatch('setAppAsLoaded')\n }\n\n // Complete the full page loading animation\n store.dispatch('finishLoadingApp')\n NProgress.done()\n}\n\nconst shouldBypassLoadProfileErrorFlow = (errorCode) => {\n const codesToAbortRouting = ['account_suspended']\n return codesToAbortRouting.includes(errorCode)\n}\n\n// Before each route evaluates...\nrouter.beforeEach(async (routeTo, routeFrom, next) => {\n // Check if auth is required on this route\n // (including nested routes).\n const isPublic = routeTo.matched.some((route) => route.meta.public)\n\n // If auth isn't required for the route, just continue.\n if (isPublic) return next()\n\n startRouteLoading()\n\n // If auth is required and the user isn't logged in...\n if (!store.getters['auth/isUserLoggedIn']) {\n // Retrieve another access token...\n try {\n await store.dispatch('auth/refreshToken')\n } catch (ex) {\n return redirectToLogin()\n }\n }\n\n // Get user's profile if not already set or isn't fresh\n if (!store.getters['auth/currentUser']) {\n try {\n const loadUserProfileResult = await store.dispatch(\n 'auth/getCurrentUserProfile'\n )\n\n if (!loadUserProfileResult.isSuccess) {\n if (\n shouldBypassLoadProfileErrorFlow(loadUserProfileResult?.error?.code)\n )\n return\n\n throw new Error(\"Could not load user's profile\")\n }\n\n // Set locale loaded in with profile\n await store.dispatch('setLocale', loadUserProfileResult.data.language)\n } catch (ex) {\n await store.dispatch('logException', ex)\n return redirectToErrorPage(routeDefinitions.accountLoadFailure.name)\n }\n }\n\n // If auth is required and the user is NOT currently logged in,\n // redirect to login.\n if (\n !store.getters['auth/isUserLoggedIn'] ||\n !store.getters['auth/currentUser']\n )\n redirectToLogin()\n\n // Due to notifications being available in every authenticated page\n // the overview bookings will be loaded here to ensure notifications will\n // appear on all pages.\n // TODO: Remove this once notification endpoint has been created\n store.dispatch(\n 'bookings/loadOverviewBookingsByTargetDateAsync',\n { root: true },\n dayjs()\n )\n\n return decideRouteBasedOnFeatureToggles(\n store.getters['features/featureToggles'],\n routeTo,\n next\n )\n\n function redirectToLogin() {\n stopRouteLoading()\n // Pass the original route to the login component\n next({\n name: routeDefinitions.login.name,\n query: { redirectFrom: routeTo.fullPath },\n })\n }\n\n function redirectToErrorPage(errorPageName = 'ErrorPage') {\n stopRouteLoading()\n next({ name: errorPageName, params: [routeTo.path], replace: true })\n }\n})\n\nrouter.beforeResolve(async (routeTo, routeFrom, next) => {\n // Create a `beforeResolve` hook, which fires whenever\n // `beforeRouteEnter` and `beforeRouteUpdate` would. This\n // allows us to ensure data is fetched even when params change,\n // but the resolved route does not. We put it in `meta` to\n // indicate that it's a hook we created, rather than part of\n // Vue Router (yet?).\n try {\n // For each matched route...\n for (const route of routeTo.matched) {\n await new Promise((resolve, reject) => {\n // If a `beforeResolve` hook is defined, call it with\n // the same arguments as the `beforeEnter` hook.\n if (route.meta && route.meta.beforeResolve) {\n route.meta.beforeResolve(routeTo, routeFrom, (...args) => {\n // If the user chose to redirect...\n if (args.length) {\n // If redirecting to the same route we're coming from...\n if (routeFrom.name === args[0].name) {\n // Complete the animation of the route progress bar.\n NProgress.done()\n }\n // Complete the redirect.\n next(...args)\n reject(new Error('Redirected'))\n } else {\n resolve()\n }\n })\n } else {\n // Otherwise, continue resolving the route.\n resolve()\n }\n })\n }\n // If a `beforeResolve` hook chose to redirect, just return.\n } catch (error) {\n return\n }\n\n // If we reach this point, continue resolving the route.\n next()\n})\n\n// When each route is finished evaluating...\nrouter.afterEach((routeTo, routeFrom) => {\n // Complete the animation of the route progress bar.\n stopRouteLoading()\n})\n\nexport default router\n","import dayjs from 'dayjs'\nimport relativeTime from 'dayjs/plugin/relativeTime'\nimport localizedFormat from 'dayjs/plugin/localizedFormat'\nimport isoWeek from 'dayjs/plugin/isoWeek'\nimport advancedFormat from 'dayjs/plugin/advancedFormat'\nimport isBetween from 'dayjs/plugin/isBetween'\nimport duration from 'dayjs/plugin/duration'\nimport utc from 'dayjs/plugin/utc'\nimport isSameOrBefore from 'dayjs/plugin/isSameOrBefore'\nimport objectSupport from 'dayjs/plugin/objectSupport'\nimport customParseFormat from 'dayjs/plugin/customParseFormat'\nimport isToday from 'dayjs/plugin/isToday'\nimport isYesterday from 'dayjs/plugin/isYesterday'\nimport isTomorrow from 'dayjs/plugin/isTomorrow'\nimport timezone from 'dayjs/plugin/timezone'\n// TODO: Any new supported i18n locales should have their dayjs equivalent imported here\nimport 'dayjs/locale/en-au'\nimport 'dayjs/locale/en-nz'\nimport 'dayjs/locale/en-ca'\nimport 'dayjs/locale/en-gb'\nimport localeData from 'dayjs/plugin/localeData'\nimport weekday from 'dayjs/plugin/weekday'\n\ndayjs.extend(customParseFormat)\ndayjs.extend(objectSupport)\ndayjs.extend(isSameOrBefore)\ndayjs.extend(utc)\ndayjs.extend(timezone)\ndayjs.extend(duration)\ndayjs.extend(isBetween)\ndayjs.extend(advancedFormat)\ndayjs.extend(relativeTime)\ndayjs.extend(localizedFormat)\ndayjs.extend(isoWeek)\ndayjs.extend(isToday)\ndayjs.extend(isYesterday)\ndayjs.extend(isTomorrow)\ndayjs.extend(localeData)\ndayjs.extend(weekday)\n\nexport default dayjs\n","export default Object.freeze({\n /**\n * Denotes that the associated feature is enabled\n */\n enabled: 'enabled',\n /**\n * Denotes that the associated feature is disabled\n */\n disabled: 'disabled',\n /**\n * Used by route feature toggles. Will redirect user to under construction page if set.\n */\n underConstruction: 'underConstruction',\n})\n","import featureToggleOptions from '@/constants/features/featureToggleOptions'\nimport routeDefinitions from '@/constants/routes/routeDefinitions'\n\nconst isEnabled = (key, featureToggles) => {\n if (\n !featureToggles ||\n !Object.prototype.hasOwnProperty.call(featureToggles, key)\n )\n return false\n\n const featureToggle = featureToggles[key]\n return featureToggle === featureToggleOptions.enabled\n}\n\n/**\n * Generates a series of feature toggle functions that will instruct which features\n * are enabled or not\n * @param {Object} featureToggles Dictionary of feature toggles\n */\nexport const createFeatureDecisions = (featureToggles) => {\n return {\n // #region Rego Files\n displayWorkExpInMyFiles() {\n return isEnabled(\n 'feature_workExperience_displayInMyFiles',\n featureToggles\n )\n },\n canViewWorkExpDetails() {\n return isEnabled('feature_workExperience_view', featureToggles)\n },\n canDeleteWorkExp() {\n return isEnabled('feature_workExperience_delete', featureToggles)\n },\n canDownloadWorkExpFiles() {\n return isEnabled('feature_workExperience_download', featureToggles)\n },\n canCreateWorkExp() {\n return isEnabled('feature_workExperience_create', featureToggles)\n },\n\n displayQualificationsInMyFiles() {\n return isEnabled(\n 'feature_qualifications_displayInMyFiles',\n featureToggles\n )\n },\n canViewQualificationDetails() {\n return isEnabled('feature_qualifications_view', featureToggles)\n },\n canDeleteQualifications() {\n return isEnabled('feature_qualifications_delete', featureToggles)\n },\n canDownloadQualificationFiles() {\n return isEnabled('feature_qualifications_download', featureToggles)\n },\n canCreateQualifications() {\n return isEnabled('feature_qualifications_create', featureToggles)\n },\n\n displayCanidateGeneralFilesInMyFiles() {\n return isEnabled(\n 'feature_candidateGeneralFile_displayInMyFiles',\n featureToggles\n )\n },\n canViewCanidateGeneralFileDetails() {\n return isEnabled('feature_candidateGeneralFile_view', featureToggles)\n },\n canDeleteCanidateGeneralFiles() {\n return isEnabled('feature_candidateGeneralFile_delete', featureToggles)\n },\n canDownloadCanidateGeneralFiles() {\n return isEnabled('feature_candidateGeneralFile_download', featureToggles)\n },\n canCreateCanidateGeneralFiles() {\n return isEnabled('feature_candidateGeneralFile_create', featureToggles)\n },\n\n displayCertificationsInMyFiles() {\n return isEnabled(\n 'feature_certifications_displayInMyFiles',\n featureToggles\n )\n },\n canViewCertificationDetails() {\n return isEnabled('feature_certifications_view', featureToggles)\n },\n canDeleteCertifications() {\n return isEnabled('feature_certifications_delete', featureToggles)\n },\n canDownloadCertificationFiles() {\n return isEnabled('feature_certifications_download', featureToggles)\n },\n canCreateCertifications() {\n return isEnabled('feature_certifications_create', featureToggles)\n },\n // #endregion\n\n // #region Registrations\n canViewRegistrationDetails() {\n return isEnabled('feature_registrations_viewDetails', featureToggles)\n },\n canViewAgreementsTab() {\n return isEnabled(\n 'feature_registrations_viewAgreementsTab',\n featureToggles\n )\n },\n // #endregion\n\n // #region Bookings\n isRunningLateEnabled() {\n return isEnabled('feature_runningLate', featureToggles)\n },\n // #endregion\n }\n}\n\n/**\n * Returns value of route toggle if set or undefined\n * @param {Object} featureToggles Dictionary of feature toggles\n * @param {String} routeName\n * @returns\n */\nconst getRouteToggle = (featureToggles, routeName) => {\n if (\n !featureToggles ||\n !Object.prototype.hasOwnProperty.call(featureToggles, `route_${routeName}`)\n )\n return featureToggleOptions.enabled\n return featureToggles[`route_${routeName}`]\n}\n\n/**\n * Makes routing decisions based on feature toggles and the desired next route\n * @param {Object} featureToggles Dictionary of feature toggles\n * @param {*} routeTo\n * @param {Function} next\n */\nexport const decideRouteBasedOnFeatureToggles = (\n featureToggles,\n routeTo,\n next\n) => {\n // Check if route toggle exists. If yes, decide based on value. If not, assume enabled\n const routeToggle = getRouteToggle(featureToggles, routeTo.name)\n\n switch (routeToggle) {\n case featureToggleOptions.enabled:\n case undefined:\n return next()\n case featureToggleOptions.underConstruction:\n return next({\n name: routeDefinitions.underConstruction.name,\n query: { redirectFrom: routeTo.fullPath },\n })\n case featureToggleOptions.disabled:\n default:\n return next({\n name: routeDefinitions.notFound.name,\n params: [routeTo.fullPath],\n replace: true,\n })\n }\n}\n\n/**\n * Checks route toggles to determine if a nav item should be displayed or not\n * @param {Object} featureToggles Dictionary of feature toggles\n * @param {String} routeName\n * @returns\n */\nexport const displayNavItem = (featureToggles, routeName) => {\n const routeToggle = getRouteToggle(featureToggles, routeName)\n return routeToggle === featureToggleOptions.enabled\n}\n","const fileToBase64String = (file) =>\n new Promise((resolve, reject) => {\n const reader = new FileReader()\n reader.readAsDataURL(file)\n reader.onload = () => resolve(reader.result)\n reader.onerror = (error) => reject(error)\n })\n\nexport { fileToBase64String }\n","/**\n * Provided as a catch all and ideally shouldn't be thrown\n */\nexport default class UnknownAppError extends Error {\n constructor(message) {\n super(message || 'Caught an unhandled client side error')\n this.name = 'UnknownAppError'\n }\n}\n","/**\n * Thrown when a paramter expected to be set was passed in null or undefined\n */\nexport default class NullParameterError extends Error {\n /**\n * @param {String} name name of parameter\n */\n constructor({ message = null, name = null }) {\n super(message || `Required parameter was null or undefined: '${name}'`)\n this.name = 'NullParameterError'\n }\n}\n","/**\n * To contain user data for logging purposes\n */\nexport default class UserIdentificationDTO {\n constructor({ id, emailAddress, ipAddress, isImpersonating = false } = {}) {\n /**\n * @type {Number} User's unique ID\n */\n this.user_id = id\n\n /**\n * @type {String}\n */\n this.user_email = emailAddress\n\n /**\n * @type {String}\n */\n this.user_host_address = ipAddress\n\n /**\n * @type {Boolean}\n */\n this.user_is_impersonating = isImpersonating\n }\n}\n","import NullParameterError from '@/models/error/nullParameterError'\nimport UserIdentificationDTO from '@/models/user/userIndentificationDTO'\n\n/**\n * Retrieves user identity (with optional IP address) for logging purposes\n * @param {VuexStore} store\n * @param {Boolean} logIpAddress Will not log ip address if false\n * @returns {UserIdentificationDTO}\n */\nconst fetchUserIdentityWithIpAddress = (store, logIpAddress = false) => {\n if (!store) throw new NullParameterError('store')\n\n const user = store.getters['auth/currentUserSimple']\n let userIpAddress = 'Instructed not to grab IP address'\n\n if (logIpAddress) {\n try {\n const request = new XMLHttpRequest()\n request.open('GET', 'https://api.ipify.org?format=json', false)\n\n request.send(null)\n\n if (request.status === 200) {\n const responseJSON = JSON.parse(request.responseText)\n userIpAddress = responseJSON.ip\n } else {\n throw new Error(\n `Unable to retrieve IP address. Status code: ${request.status}`\n )\n }\n } catch (ex) {\n userIpAddress = `Failed to get IP address. Reason: ${ex}`\n }\n }\n\n return new UserIdentificationDTO({\n id: user.id,\n emailAddress: user.emailAddress,\n ipAddress: userIpAddress,\n isImpersonating: user.isImpersonating,\n })\n}\n\n/**\n * Compiles custom properties object for logging\n * @param {VuexStore} store\n * @param {Object} properties\n * @param {Boolean} logUserDetails Will log the details of the current user\n * @returns\n */\nconst compileCustomProperties = (store, properties, logUserDetails = false) => {\n if (!logUserDetails) return properties\n\n const user = fetchUserIdentityWithIpAddress(store, true)\n\n return { ...properties, ...user }\n}\n\nexport { fetchUserIdentityWithIpAddress, compileCustomProperties }\n","/**\n * Used to track PromiseRejectionEvents\n */\nexport default class PromiseRejectionError extends Error {\n constructor(message) {\n super(message || 'Caught an unhandled promise rejection')\n this.name = 'PromiseRejectionError'\n }\n}\n","/**\n * Code sourced from https://github.com/arunredhu/vuejs_boilerplate/blob/master/src/app/shared/services/app-logger/app-logger.js\n * on 24/10/2022 9:52 AM\n */\n\n/* eslint no-console: [\"off\"] */\nimport Vue from 'vue'\nimport toast from '@services/toasts/index.js'\nimport { nanoid } from 'nanoid'\nimport store from '@/store'\nimport config from '@/common/config'\nimport UnknownAppError from '@/models/error/unknownAppError'\nimport VueErrorDTO from '@/models/error/vueErrorDTO'\nimport WindowErrorDTO from '@/models/error/windowErrorDTO'\nimport Environment from '@/constants/core/Environment'\nimport { compileCustomProperties } from '@/helpers/log-helper'\nimport PromiseRejectionError from '@/models/error/promiseRejectionError'\nimport dayjs from '@/services/date'\nimport ErrorResponseDTO from '@/models/error/errorResponseDTO'\n\n/**\n * @description Logger class\n * This is responsible for logging of all kinds of info in the application\n * Default, we are using the console api for logging and this provides the basic level of logging such as\n * you can use the available method of console in developement but in production these will be replaced with empty methods\n * This can be extended with the help of adding Log level functionality\n */\nclass AppLogger {\n /**\n * @constructor AppLogger\n */\n constructor() {\n /** Initializing the configuration of logger */\n this.initLogger()\n }\n\n /**\n * @description Initializing the configuration such as if environment is production then all log method will be replaced with empty methods\n * except logError, which will be responsible for logging the important info on server or logging service\n */\n initLogger() {\n // Checking the environment\n if (config.get('env') !== Environment.production) {\n this.log = console.log.bind(console)\n\n this.debug = console.debug.bind(console)\n\n this.info = console.info.bind(console)\n\n this.warn = console.warn.bind(console)\n\n this.error = console.error.bind(console)\n\n this.logError = (err) => {\n if (!err) return this.warn('AppLogger: Error received was empty')\n\n this.error(err.error, err)\n\n const message = `${err.error?.name ?? 'Error'}: ${err.error?.message}`\n\n store.commit('ADD_DEBUG_MESSAGE', {\n exception: err.error,\n date: dayjs().format('llll'),\n message,\n id: nanoid(),\n })\n if (store.getters.isDebugModeActive) toast.debug(message)\n }\n } else {\n // In case of production replace the functions definition\n this.log = this.debug = this.info = this.warn = this.error = () => {}\n\n this.logError = (err) => {\n switch (true) {\n case err instanceof VueErrorDTO: {\n const properties = compileCustomProperties(\n store,\n {\n info: err.info,\n route: err.vm?.$route?.name,\n component:\n err.vm?.$options?.name ||\n 'Name prop not set for this component',\n },\n true\n )\n\n Vue.prototype.$appInsights.trackException({\n exception: err.error,\n properties,\n })\n break\n }\n\n case err instanceof WindowErrorDTO: {\n const properties = compileCustomProperties(store, err, true)\n\n Vue.prototype.$appInsights.trackException({\n exception: err.error,\n properties,\n })\n break\n }\n\n case err instanceof PromiseRejectionEvent: {\n const properties = compileCustomProperties(\n store,\n {\n reason: err?.reason,\n type: err?.type,\n },\n true\n )\n\n Vue.prototype.$appInsights.trackException({\n exception: new PromiseRejectionError(err.reason),\n properties,\n })\n break\n }\n case err instanceof ErrorResponseDTO: {\n const properties = compileCustomProperties(\n store,\n {\n errorResponse: {\n source: err.source,\n type: err.type,\n message: err.message,\n },\n },\n true\n )\n\n Vue.prototype.$appInsights.trackException({\n exception: err.error,\n properties,\n })\n break\n }\n\n default: {\n const properties = compileCustomProperties(\n store,\n {\n error: err,\n },\n true\n )\n\n Vue.prototype.$appInsights.trackException({\n exception: new UnknownAppError(),\n properties,\n })\n break\n }\n }\n }\n }\n }\n}\n\n/** Creating the instance of logger */\nconst logger = new AppLogger()\n\nexport { logger }\n","import Vue from 'vue'\nimport { POSITION } from 'vue-toastification'\n\n// https://github.com/Maronato/vue-toastification/tree/main#toast-options-object\nconst toastOptions = {\n duration: 5000,\n position: POSITION.BOTTOM_CENTER,\n}\n\nexport default {\n success(message, options = toastOptions) {\n Vue.prototype.$toast.success(message, options)\n },\n error(message, options = toastOptions) {\n Vue.prototype.$toast.error(message, options)\n },\n warning(message, options = toastOptions) {\n Vue.prototype.$toast.warning(message, options)\n },\n info(message, options = toastOptions) {\n Vue.prototype.$toast.info(message, options)\n },\n show(message, options = toastOptions) {\n Vue.prototype.$toast(message, options)\n },\n debug(message, options = toastOptions) {\n Vue.prototype.$toast(message, options)\n },\n clear() {\n Vue.prototype.$toast.clear()\n },\n}\n","import config from '@common/config.js'\nimport { PublicClientApplication } from '@azure/msal-browser'\n\nexport default new PublicClientApplication(config.get('msalConfig'))\n","// eslint-disable-next-line no-unused-vars\nimport ErrorResponseDTO from '../error/errorResponseDTO'\n\n/**\n * @class\n * @public\n */\nexport default class ResultDTO {\n /**\n * @constructor\n * @param {Object, headers: any} param0\n */\n constructor({\n isSuccess = false,\n data = null,\n message = '',\n statusCode = null,\n error = null,\n headers = null,\n } = {}) {\n /**\n * Indicates if the operation was a success or failure\n * @type {Boolean}\n */\n this.isSuccess = isSuccess\n\n /**\n * Data returned from the operation\n * @type {*}\n */\n this.data = data\n\n /**\n * Message to convey to calling method. Typically used for error messages\n * @type {String}\n */\n this.message = message\n\n /**\n * HTTP response code\n * @type {Number}\n */\n this.statusCode = statusCode\n\n /**\n * @type {ErrorResponseDTO}\n */\n this.error = error\n\n /**\n * Contains an object of key pair values describing the response headers\n * @type {*}\n */\n this.headers = headers\n }\n}\n","import ResultDTO from '@/models/app/resultDTO'\n\n/**\n * Successful operation. isSuccess is set to true\n * @param {ResultDTO} payload\n * @returns\n */\nexport const success = ({\n data = null,\n message = '',\n statusCode,\n headers,\n} = {}) =>\n new ResultDTO({ isSuccess: true, data, message, statusCode, headers })\n\n/**\n * Failed operation. isSuccess is set to false\n * @param {ResultDTO} payload\n * @returns\n */\nexport const fail = ({\n data = null,\n message = '',\n statusCode,\n error = null,\n headers,\n} = {}) =>\n new ResultDTO({ isSuccess: false, data, message, statusCode, error, headers })\n","/**\n * Active day for availabilty\n */\nexport const ActiveDay = Object.freeze({\n TODAY: 'today',\n TOMORROW: 'tomorrow',\n NEXT_WORKING_DAY: 'nextWorkingDay',\n FUTURE: 'future',\n})\n","import { Ready2WorkStatus } from '@/constants/candidate/Ready2WorkStatus'\nimport { ActiveDay } from '@/constants/date/ActiveDay'\n\n/**\n * @class\n * @public\n */\nexport default class R2WAvailabilityStatusViewModel {\n constructor({\n activeDateLocal = null,\n activeDay = ActiveDay.TODAY,\n ready2Work = Ready2WorkStatus.UNSET,\n timeUntilUpdateRequiredInMilliSeconds = 0,\n } = {}) {\n /**\n * The date that determines the target for the ready2work button. Typically will be today's date but will switch in the afternoon to target the next day\n * @type {String}\n * @example 2022-09-30T00:00:00\n */\n this.activeDateLocal = activeDateLocal\n\n /**\n * @type {ActiveDay}\n */\n this.activeDay = activeDay\n\n /**\n * Determines if the candidate has set their ready2work for the active day or not.\n * @type {Ready2WorkStatus}\n */\n this.ready2Work = ready2Work\n\n /**\n * The time, in milliseconds, until the ready2work button switches over to the next active day\n * @type {Number}\n */\n this.timeUntilUpdateRequiredInMilliSeconds =\n timeUntilUpdateRequiredInMilliSeconds\n }\n}\n","/**\n * @class\n * @public\n */\nexport default class RegistrationSummaryViewModel {\n constructor({ id, title, status, statusReason, location } = {}) {\n /**\n * @type {Number}\n * @example 8675309\n */\n this.id = id\n /**\n * The name of the registration (Formally `type`)\n * @type {String}\n * @example VIC Teacher\n */\n this.title = title\n /**\n * Indicates the status of the registration. See `RegistrationStatus` for\n * valid values\n * @type {String}\n * @example Active\n */\n this.status = status\n /**\n * Provides context behind the current status. See `RegistrationStatusReason`\n * for valid values\n * @type {String}\n * @example AwaitCandidateAction\n */\n this.statusReason = statusReason\n /**\n * Location string indicating the area the candidate is registering for\n * @type {String}\n * @example Victoria, Australia\n */\n this.location = location\n }\n}\n","/* eslint-disable no-unused-vars */\nimport ConsultantViewModel from '../contact/consultantViewModel'\nimport R2WAvailabilityStatusViewModel from '../availability/r2WAvailabilityStatusViewModel'\nimport RegistrationSummaryViewModel from '../registration/registrationSummaryViewModel'\n\n/**\n * @class\n * @public\n */\nexport default class CandidateUserViewModel {\n /**\n * @constructor\n */\n constructor({\n id,\n email,\n firstName,\n preferredName,\n lastName,\n fullName,\n associatedConsultant = null,\n language = 'en',\n ready2WorkStatus = null,\n registrations = null,\n timezone = '',\n } = {}) {\n /**\n * @type {Number}\n * @example 8675309\n */\n this.id = id\n\n /**\n * @type {String}\n * @example mike@nolan.com\n */\n this.email = email ?? ''\n\n /**\n * @type {String}\n * @example Mike\n */\n this.firstName = firstName ?? ''\n\n /**\n * @type {String}\n * @example Nolezy\n */\n this.preferredName = preferredName ?? ''\n\n /**\n * @type {String}\n * @example Nolan\n */\n this.lastName = lastName ?? ''\n\n /**\n * A pre-concatinated string of the first and last name. If preferred name\n * is set, it will be displayed instead of the first name.\n * @type {String}\n * @example Nolezy Nolan\n */\n this.fullName = fullName ?? ''\n\n /**\n * The candidate's associated consultant's contact details\n * @type {ConsultantViewModel}\n */\n this.associatedConsultant = associatedConsultant\n ? new ConsultantViewModel(associatedConsultant)\n : null\n\n /**\n * ISO 639-1 standard language code\n * @type {String}\n * @example en-AU\n */\n this.language = language\n\n /**\n * @type {R2WAvailabilityStatusViewModel}\n */\n this.ready2WorkStatus = ready2WorkStatus\n ? new R2WAvailabilityStatusViewModel(ready2WorkStatus)\n : null\n\n /**\n * @type {Array}\n */\n this.registrations =\n registrations && registrations.length > 0\n ? registrations?.map(\n (registration) => new RegistrationSummaryViewModel(registration)\n )\n : []\n\n /**\n * IANA timezone string\n * @type {String}\n * @example Australia/Melbourne\n */\n this.timezone = timezone\n }\n}\n","import {\n getAuth,\n EmailAuthProvider,\n reauthenticateWithCredential,\n updatePassword,\n sendPasswordResetEmail,\n signOut,\n getIdToken,\n signInWithEmailAndPassword,\n signInWithCustomToken,\n} from 'firebase/auth'\nimport msal from '@plugins/msal'\nimport config from '@common/config.js'\nimport router from '@/router'\nimport { fail, success } from '@/helpers/result-helper.js'\nimport firebase from '@/plugins/firebase'\nimport toast from '@/services/toasts/index.js'\nimport $date from '@/services/date/index.js'\nimport {\n isCacheFresh,\n getSavedState,\n saveState,\n deleteState,\n} from '@/helpers/cache-helpers'\nimport DurationUnits from '@/constants/date/DurationUnits.js'\nimport routeDefinitions from '@/constants/routes/routeDefinitions'\nimport CandidateUserViewModel from '@/models/candidate/candidateUserViewModel'\n// eslint-disable-next-line no-unused-vars\nimport AccountCreationDTO from '@/models/user/accountCreationDTO'\n// eslint-disable-next-line no-unused-vars\nimport ResultDTO from '@/models/app/resultDTO'\n\nconst USER_PROFILE_FRESHNESS_DURATION = { value: 2, units: DurationUnits.HOUR }\n\n/**\n * Returns the user object from local storage if it's fresh otherwise returns null\n * @returns {Object|null}\n */\nconst checkUserCacheFreshness = (forceRefresh = false) => {\n const user = getSavedState('auth.currentUser')\n\n if (!user || !user?.lastUpdated) return null\n\n if (\n isCacheFresh({\n cacheDuration: USER_PROFILE_FRESHNESS_DURATION.value,\n durationUnits: USER_PROFILE_FRESHNESS_DURATION.units,\n lastUpdated: user?.lastUpdated,\n forceRefresh,\n })\n )\n return user\n\n return null\n}\n\nexport default {\n namespaced: true,\n state: {\n // MSAL User\n account: getSavedState('auth.account'),\n interactionRequired: true,\n // User Profile from DB\n currentUser: checkUserCacheFreshness(),\n accessToken: '', // Bearer token\n lastTokenRefresh: null,\n loadingCount: 0,\n // auth: firebase,\n impersonateCandidateId: getSavedState('auth.impersonateCandidateId'),\n username: null, // used to track errors when user profile is not set\n },\n\n mutations: {\n SET_CURRENT_USER(state, userVM) {\n state.currentUser = new CandidateUserViewModel(userVM)\n saveState('auth.currentUser', state.currentUser)\n },\n SET_ACCOUNT(state, newValue) {\n state.account = newValue\n saveState('auth.account', newValue)\n },\n SET_IMPERSONATE_CANDIDATE_ID(state, candidateId) {\n state.impersonateCandidateId = candidateId\n saveState('auth.impersonateCandidateId', candidateId)\n },\n SET_USER_GENERALFILES(state, files) {\n state.generalFiles = files\n },\n SET_INTERACTION_REQUIRED(state, newValue) {\n state.interactionRequired = newValue\n },\n SET_ACCESS_TOKEN(state, token) {\n state.accessToken = token\n state.interactionRequired = false\n state.lastTokenRefresh = $date()\n },\n SET_USER_TO_UNAUTHENTICATED(state) {\n state.account = null\n state.interactionRequired = true\n state.currentUser = null\n state.impersonateCandidateId = null\n deleteState('auth.account')\n deleteState('auth.currentUser')\n deleteState('auth.impersonateCandidateId')\n deleteState('client.id')\n deleteState('client.name')\n state.accessToken = null\n state.username = null\n\n sessionStorage.clear()\n localStorage.clear()\n },\n FRESH_IMPERSONATE_CLEAR_STORE(state) {\n state.currentUser = null\n state.impersonateCandidateId = null\n deleteState('auth.currentUser')\n deleteState('auth.impersonateCandidateId')\n deleteState('client.id')\n deleteState('client.name')\n },\n START_LOADING(state) {\n state.loadingCount++\n },\n FINISH_LOADING(state) {\n state.loadingCount--\n },\n SET_USERNAME(state, username) {\n state.username = username\n },\n },\n\n getters: {\n moduleName: () => 'auth',\n currentUserFullName: (state) =>\n state.currentUser\n ? `${state.currentUser.firstName} ${state.currentUser.lastName}`\n : '',\n currentUserEmail: (state) =>\n state.currentUser\n ? state.currentUser.email\n : state.username || 'not_specified',\n currentUser: (state) => state.currentUser,\n currentUserCandidateId: (state) =>\n state.currentUser?.id || state.impersonateCandidateId || 'not_specified',\n currentUserSimple: (state, getters) => {\n return {\n id: getters.currentUserContactId || '',\n emailAddress: getters.currentUserEmail || '',\n isImpersonating: getters.hasImpersonateCandidateId,\n }\n },\n associatedConsultant: (state) => state.currentUser.associatedConsultant,\n msalAccount: (state) => state.account,\n impersonateCandidateId: (state) => state.impersonateCandidateId,\n hasImpersonateCandidateId: (state) => !!state.impersonateCandidateId,\n accessToken: (state) => state.accessToken,\n lastTokenRefresh: (state) => state.lastTokenRefresh,\n isUserLoggedIn: (state) =>\n !!state.accessToken && (!state.interactionRequired || !!state.account),\n isLoadingAuth: (state) => state.loadingCount > 0,\n isInteractionRequired: (state) => state.interactionRequired,\n auth: (state) => firebase,\n msalInstance: (state) => msal,\n timeZone: (state) => state.currentUser.timezone,\n },\n\n actions: {\n /**\n * This is automatically run in `src/store/index.js` when the app\n * starts, along with any other actions named `init` in other modules.\n * @param {*} param0\n */\n init({ dispatch }) {},\n\n /**\n * Login via firebase\n * @param {*} param0\n * @param {Object} param1\n * @returns\n */\n async logIn({ dispatch, getters, commit }, { username, password }) {\n // Clean out localStorage to ensure AAD credentials don't remain\n dispatch('clearStore', null, { root: true })\n\n // Setting username in the store to assist with logging\n commit('SET_USERNAME', username)\n\n if (getters.isUserLoggedIn) return dispatch('refreshToken')\n\n commit('START_LOADING')\n try {\n const auth = getAuth(firebase)\n const response = await signInWithEmailAndPassword(\n auth,\n username,\n password\n )\n\n if (!response.user)\n return fail({\n error: await dispatch(\n 'logException',\n new Error(this.$i18n.t('auth.loginGetProfileFailureErrorText')),\n { root: true }\n ),\n message: this.$i18n.t('auth.loginGetProfileFailureErrorText'),\n })\n\n commit('SET_INTERACTION_REQUIRED', false)\n return success()\n } catch (ex) {\n let message = ''\n if (ex.code === 'auth/wrong-password')\n message = this.$i18n.t('auth.loginWrongPasswordErrorText')\n else if (ex.code === 'auth/user-not-found')\n message = this.$i18n.t('auth.loginUserNotFoundErrorText')\n else message = ex.message\n\n return fail({\n error: await dispatch('logException', ex, { root: true }),\n message,\n })\n } finally {\n commit('FINISH_LOADING')\n }\n },\n\n /**\n * Handles redirect auth from MSAL\n * @param {Object} response Response will be populated on msal login\n */\n async handleRedirect({ dispatch }, response) {\n // Redirect to home after login\n if (response !== null) {\n await dispatch('getUserFromMsalProvider')\n router.push({ name: routeDefinitions.home.name })\n }\n\n // In case multiple accounts exist, you can select\n const currentAccounts = msal.getAllAccounts()\n if (currentAccounts.length > 0) {\n // TODO: Add choose account code here\n await dispatch('getUserFromMsalProvider')\n }\n },\n\n // Handles already logged in impersonate redirect from login page\n async msalAlreadyLoggedInRedirect(\n { dispatch, commit },\n impersonateCandidateId\n ) {\n // Attempt to log out of firebase & clear out store in preperation\n try {\n await dispatch('firebaseLogOut', {\n nuke: false,\n showNotifications: false,\n redirect: false,\n setUnauthenticated: false,\n })\n } catch (ex) {\n await dispatch('logException', ex, { root: true })\n }\n\n // Clear out certain values that need to be retrieved from API\n // await dispatch('client/clear', null, { root: true })\n commit('FRESH_IMPERSONATE_CLEAR_STORE')\n\n // Set the new impersonate contact Id\n commit('SET_IMPERSONATE_CANDIDATE_ID', impersonateCandidateId)\n\n // Redirect to dashboard\n router.push({ name: routeDefinitions.home.name })\n },\n\n async clearImpersonateId({ commit }) {\n commit('FRESH_IMPERSONATE_CLEAR_STORE')\n },\n\n /**\n * Logs in the current user.\n * @param {*} param0\n * @param {Number} impersonateCandidateId\n * @returns\n */\n async msalLogIn({ dispatch, getters, commit }, impersonateCandidateId) {\n // Attempt to log out of firebase & clear out store in preperation\n try {\n await dispatch('firebaseLogOut', {\n nuke: true,\n showNotifications: false,\n redirect: false,\n setUnauthenticated: false,\n })\n } catch (ex) {\n await dispatch('logException', ex, { root: true })\n }\n\n commit('SET_IMPERSONATE_CANDIDATE_ID', impersonateCandidateId)\n\n if (getters.isUserLoggedIn) return dispatch('msalRefreshToken')\n\n const loginRequest = {\n scopes: ['openid'],\n }\n\n try {\n await msal.loginRedirect(loginRequest)\n } catch (ex) {\n commit('SET_USER_TO_UNAUTHENTICATED')\n\n const error = await dispatch('logException', ex, { root: true })\n\n const errorCode = ex.errorCode\n\n const noNotificationReq = ['user_cancelled']\n\n // Filter through errors that don't require a notifiction\n if (noNotificationReq.some((v) => errorCode.includes(v)))\n return fail({ error })\n\n toast.error(this.$i18n.t('auth.errorLoginImpersonateContact'))\n return fail({ error })\n }\n },\n\n /**\n * Logs out the current user.\n * @param {*} param0\n * @param {*} payload\n * @returns\n */\n async msalLogOut(\n { commit, dispatch },\n payload = { redirect: true, nuke: true }\n ) {\n const { redirect, nuke } = payload\n\n commit('START_LOADING')\n\n try {\n await msal.logout({})\n\n commit('SET_USER_TO_UNAUTHENTICATED')\n\n if (redirect) await router.push({ name: routeDefinitions.login.name })\n\n // Nuke store\n if (nuke) dispatch('clearStore', null, { root: true })\n\n return success()\n } catch (ex) {\n toast.error(this.$i18n.t('auth.signOutFailureErrorText'))\n return fail({\n error: await dispatch('logException', ex, { root: true }),\n })\n } finally {\n commit('FINISH_LOADING')\n }\n },\n\n /**\n * Retrieves user account from auth provider\n * @param {*} param0\n * @returns\n */\n getUserFromMsalProvider({ commit }) {\n if (!msal) return Promise.resolve(null)\n\n try {\n const myAccounts = msal.getAllAccounts()\n commit('SET_ACCOUNT', myAccounts[0])\n } catch {\n commit('SET_ACCOUNT', null)\n }\n },\n\n /**\n * Validates the current user's token and refreshes it\n * with new data from the API.\n * @param {*} param0\n * @returns\n */\n async msalRefreshToken({ dispatch, commit, state }) {\n if (!msal) return Promise.resolve(fail()) // Prevents trying to access auth object before it is initialised\n await dispatch('getUserFromMsalProvider')\n if (!state.account) return Promise.resolve(fail())\n\n commit('SET_USERNAME', state.account?.username)\n\n commit('START_LOADING')\n\n const request = {\n scopes: [config.get('scopes.openId'), config.get('scopes.read')],\n account: state.account,\n }\n\n try {\n const response = await msal.acquireTokenSilent(request)\n commit('SET_ACCESS_TOKEN', response.accessToken)\n return success()\n } catch (error) {\n console.warn('Silent token acquisition failed. Using interactive mode')\n\n await dispatch('logException', error, { root: true })\n\n try {\n const popupResponse = await msal.acquireTokenPopup(request)\n\n commit('SET_ACCESS_TOKEN', popupResponse.accessToken)\n return success()\n } catch (ex) {\n toast.error('Failed to authenticate as impersonated contact')\n return fail({\n error: await dispatch('logException', ex, { root: true }),\n })\n } finally {\n commit('FINISH_LOADING')\n }\n } finally {\n commit('FINISH_LOADING')\n }\n },\n\n /**\n * Logs out the current user\n * @param {*} param0\n * @param {*} payload\n * @returns\n */\n async logOut({ getters, dispatch }, payload) {\n return dispatch(\n getters.impersonateCandidateId ? 'msalLogOut' : 'firebaseLogOut',\n payload\n )\n },\n\n /**\n * Logs out the current user from firebase\n * @param {*} param0\n * @param {*} payload\n * @returns\n */\n async firebaseLogOut(\n { commit, dispatch },\n payload = {\n redirect: true,\n nuke: true,\n showNotifications: true,\n setUnauthenticated: true,\n }\n ) {\n const { redirect, nuke, showNotifications, setUnauthenticated } = payload\n\n commit('START_LOADING')\n\n const auth = getAuth(firebase)\n\n try {\n await signOut(auth)\n\n if (setUnauthenticated) commit('SET_USER_TO_UNAUTHENTICATED')\n\n if (redirect) await router.push({ name: routeDefinitions.login.name })\n\n // Nuke store\n if (nuke) dispatch('clearStore', null, { root: true })\n\n return success()\n } catch (error) {\n if (showNotifications)\n toast.error(this.$i18n.t('auth.signOutFailureErrorText'))\n return fail({\n error: await dispatch('logException', error, { root: true }),\n })\n } finally {\n commit('FINISH_LOADING')\n }\n },\n\n async refreshToken({ dispatch, getters }, forceRefresh = false) {\n return await dispatch(\n getters.impersonateCandidateId\n ? 'msalRefreshToken'\n : 'firebaseRefreshToken',\n forceRefresh\n )\n },\n\n /**\n * Checks freshness of access token and will force refresh the token if token\n * is considered stale\n * @param {*} context Vuex context\n * @param {Boolean} forceRefresh Forces a token refresh\n * @returns Access token\n */\n async getAccessTokenOrRefresh({ dispatch, getters }, forceRefresh = false) {\n const isAccessTokenFresh = isCacheFresh({\n cacheDuration: 30,\n durationUnits: DurationUnits.MINUTE,\n lastUpdated: getters.lastTokenRefresh,\n forceRefresh,\n })\n\n if (!isAccessTokenFresh) {\n await dispatch('refreshToken', true)\n }\n\n return getters.accessToken\n },\n\n //\n /**\n * Validates the current user's token and refreshes it using Firebase\n * with new data from the API.\n * @param {*} param0\n * @param {Boolean} forceRefresh\n * @returns\n */\n async firebaseRefreshToken({ commit, dispatch }, forceRefresh = false) {\n try {\n const auth = getAuth(firebase)\n const user = auth.currentUser\n\n if (!user)\n throw new Error('User is unauthenticated and trying to refresh token')\n\n commit('SET_USERNAME', user?.email)\n\n const idToken = await getIdToken(user, forceRefresh)\n commit('SET_ACCESS_TOKEN', idToken)\n return success()\n } catch (error) {\n commit('SET_USER_TO_UNAUTHENTICATED')\n await dispatch('logException', error, { root: true })\n throw error\n }\n },\n\n async resetPasswordAsync({ commit, dispatch }, payload) {\n commit('START_LOADING')\n\n const auth = getAuth(firebase)\n\n try {\n await sendPasswordResetEmail(auth, payload.email)\n\n toast.success(this.$i18n.t('auth.resetPasswordSuccessText'))\n return success()\n } catch (error) {\n const errDto = await dispatch('logException', error, { root: true })\n\n let message = ''\n if (error.code === 'auth/user-not-found')\n message = this.$i18n.t(\n 'auth.resetPasswordAccountDoesNotExistErrorText'\n )\n else message = error.message\n\n return fail({ message, error: errDto })\n } finally {\n commit('FINISH_LOADING')\n }\n },\n\n /**\n * Used to reauthenticate a user before a sensative action (e.g. change password, change email address)\n * This is a security requirement enforced by firebase.\n * Read more: https://firebase.google.com/docs/reference/js/firebase.User#reauthenticatewithcredential\n * @param {String} password\n */\n async reauthenticateWithCredentialsAsync({ commit, dispatch }, password) {\n commit('START_LOADING')\n\n const auth = getAuth(firebase)\n const user = auth.currentUser\n\n // Prepare auth credentials\n const credentials = await EmailAuthProvider.credential(\n user.email,\n password\n )\n\n // Use credentials to reauthenticate user\n try {\n await reauthenticateWithCredential(user, credentials)\n return success()\n } catch (error) {\n toast.error(this.$i18n.t('auth.failedToAuthenticateWithCredsErrorText'))\n return fail({\n error: await dispatch('logException', error, { root: true }),\n })\n } finally {\n commit('FINISH_LOADING')\n }\n },\n\n /**\n *\n * @param {*} param0\n * @param {*} payload\n * @returns\n */\n async changePasswordAsync({ commit, dispatch }, payload) {\n commit('START_LOADING')\n\n try {\n const auth = getAuth(firebase)\n const user = auth.currentUser\n\n await updatePassword(user, payload.newPass)\n\n toast.success(this.$i18n.t('auth.changePasswordSuccessText'))\n return success()\n } catch (error) {\n return fail({\n error: await dispatch('logException', error, { root: true }),\n })\n } finally {\n commit('FINISH_LOADING')\n }\n },\n\n /**\n * Loads user profile from R2W API.\n * @param {Boolean} forceRefresh forces refresh of user profile, bypassing the cache\n * @returns\n */\n async getCurrentUserProfile(\n { commit, dispatch, getters, rootGetters },\n forceRefresh = false\n ) {\n // 1. Check cache freshness\n if (checkUserCacheFreshness(forceRefresh))\n return success({ data: getters.currentUser })\n\n // 2. Load profile from API & cache user profile\n commit('START_LOADING')\n\n try {\n const response = await this.$api.user.get()\n commit('SET_CURRENT_USER', response.data)\n dispatch('ready2Work/setReady2Work', response.data?.ready2WorkStatus, {\n root: true,\n })\n\n return success({ data: getters.currentUser })\n } catch (ex) {\n return fail({\n error: await dispatch('logException', ex, { root: true }),\n })\n } finally {\n commit('FINISH_LOADING')\n }\n },\n stopImpersonating({ commit }) {\n commit('SET_USER_TO_UNAUTHENTICATED')\n router.push({ name: routeDefinitions.impersonateLogout.name })\n },\n /**\n * Authenticate to firebase using a custom auth token generated on the backend\n * @param {{dispatch: Function, commit: Function}} VuexAction\n * @param {String} token custom auth token\n * @returns\n */\n async logInWithCustomToken({ dispatch, commit }, token) {\n // Clean out localStorage to ensure AAD credentials don't remain\n dispatch('clearStore', null, { root: true })\n\n commit('SET_USERNAME', 'Username not set')\n\n commit('START_LOADING')\n try {\n const auth = getAuth(firebase)\n\n await signOut(auth)\n const response = await signInWithCustomToken(auth, token)\n\n if (!response.user)\n return fail({\n error: await dispatch(\n 'logException',\n new Error(this.$i18n.t('auth.loginGetProfileFailureErrorText')),\n { root: true }\n ),\n message: this.$i18n.t('auth.loginGetProfileFailureErrorText'),\n })\n\n // Setting username in the store to assist with logging\n commit('SET_USERNAME', response.user.email)\n\n commit('SET_INTERACTION_REQUIRED', false)\n return success()\n } catch (error) {\n const message = this.$i18n.t(\n 'auth.accountSetup.customTokenSignInError',\n [error.code, routeDefinitions.login.path]\n )\n\n return fail({\n error: await dispatch('logException', error, { root: true }),\n message,\n })\n } finally {\n commit('FINISH_LOADING')\n }\n },\n /**\n * Sets up a password for the candidate for first time account setup\n * @param {{commit: Function, dispatch: Function}} VuexAction\n * @param {AccountCreationDTO} payload\n * @returns {Promise}\n */\n async completeAccountSetup({ dispatch, commit }, payload) {\n try {\n commit('START_LOADING')\n\n const response = await this.$api.user.accountSetup(payload)\n\n const loginResult = await dispatch(\n 'logInWithCustomToken',\n response.data.authToken\n )\n\n if (!loginResult.isSuccess) return loginResult\n\n toast.success(\n this.$i18n.t('auth.accountSetup.successToast', [\n this.$i18n.t('app.appName'),\n ])\n )\n\n return response\n } catch (error) {\n const errorDto = await dispatch('logException', error, { root: true })\n\n let message = ''\n\n switch (errorDto.code) {\n case 'account_setup_token_missing':\n case 'account_setup_token_invalid':\n message = this.$i18n.t('auth.accountSetup.argError')\n break\n case 'account_setup_token_expired':\n message = this.$i18n.t('auth.accountSetup.expiredEmailLink')\n break\n case 'account_setup_already_complete':\n message = this.$i18n.t(\n 'auth.accountSetup.accountAlreadySetupError',\n [routeDefinitions.login.path]\n )\n break\n case 'account_setup_password_missing':\n message = this.$i18n.t('auth.accountSetup.passwordMissingError')\n break\n case 'account_setup_password_invalid':\n message = this.$i18n.t('auth.accountSetup.passwordInvalidError')\n break\n default:\n message = this.$i18n.t('auth.accountSetup.argError')\n }\n\n return fail({\n error: errorDto,\n message,\n })\n } finally {\n commit('FINISH_LOADING')\n }\n },\n clear({ commit }) {\n commit('SET_USER_TO_UNAUTHENTICATED')\n },\n },\n}\n","import { getType } from 'mime'\nimport config from '@/common/config'\nimport { fail, success } from '@/helpers/result-helper'\nimport toasts from '@/services/toasts/index'\n\nconst getDefaultState = () => {\n return {\n // Place any new state properties here\n loadingCount: 0,\n crudLoadingCount: 0,\n }\n}\n\nconst state = getDefaultState()\n\nexport default {\n namespaced: true,\n state,\n getters: {\n moduleName: () => 'file',\n isLoading: (state) => state.loadingCount > 0,\n isLoadingCRUD: (state) => state.crudLoadingCount > 0,\n },\n mutations: {\n START_LOADING(state) {\n state.loadingCount++\n },\n FINISH_LOADING(state) {\n state.loadingCount--\n },\n START_LOADING_CRUD(state) {\n state.crudLoadingCount++\n },\n FINISH_LOADING_CRUD(state) {\n state.crudLoadingCount--\n },\n CLEAR_STORE(state) {\n // Resets store to default state\n Object.assign(state, getDefaultState())\n },\n },\n actions: {\n /**\n * @param {*} param0\n * @param {Number} fileId\n * @returns {Promise}\n */\n async download({ commit, dispatch }, fileId) {\n commit('START_LOADING')\n try {\n const response = await this.$api.file.createFileAccessToken(fileId)\n\n const token = response.data.accessKey\n const baseURL = `${config.get('apiUrl')}v${config.get('apiVersion')}`\n const fileURL = `${baseURL}/file/(${token})`\n\n await this.$api.file.get(`(${token})`)\n window.location = fileURL\n return success()\n } catch (ex) {\n toasts.error('Download Failed')\n return fail({\n error: await dispatch('logException', ex, { root: true }),\n })\n } finally {\n commit('FINISH_LOADING')\n }\n },\n /**\n * @param {*} param0\n * @param {String} filePath\n * @returns {Promise}\n */\n async downloadGeneralFile({ commit, dispatch }, filePath) {\n commit('START_LOADING')\n try {\n const response = await this.$api.file.getGeneralFile(filePath)\n\n const url = window.URL.createObjectURL(\n new Blob([response.data], { type: getType(filePath) })\n )\n return success({ data: url })\n } catch (ex) {\n let toastErrorMessage = this.$i18n.t('error.errorGenericApiErrorText')\n // Try to resolve error response. Response type is Blob, need to convert\n // from blob to json\n try {\n const responseObject = JSON.parse(await ex.response.data.text())\n if (responseObject) toastErrorMessage = responseObject.message\n } catch {}\n\n toasts.error(toastErrorMessage)\n\n return fail({\n error: await dispatch('logException', ex, { root: true }),\n })\n } finally {\n commit('FINISH_LOADING')\n }\n },\n },\n}\n","import ComplianceItemViewModel from './complianceItemViewModel'\nimport { isNonEmptyArray } from '@/helpers/array-helpers'\n\n/**\n * @class\n * @public\n */\nexport default class RegistrationViewModel {\n constructor({\n id,\n title,\n status,\n statusReason,\n location,\n complianceItems = [],\n } = {}) {\n /**\n * @type {Number}\n * @example 8675309\n */\n this.id = id\n\n /**\n * Registration's title (was formally `type`)\n * @type {String}\n * @example VIC Teacher\n */\n this.title = title\n\n /**\n * Indicates the status of the registration. See `RegistrationStatus` for\n * valid values\n * @type {String}\n * @example Active\n */\n this.status = status\n\n /**\n * Provides context behind the current status. See `RegistrationStatusReason`\n * for valid values\n * @type {String}\n * @example AwaitCandidateAction\n */\n this.statusReason = statusReason\n\n /**\n * Location string indicating the area the candidate is registering for\n * @type {String}\n * @example Victoria, Australia\n */\n this.location = location\n\n /**\n * @type {ComplianceItemViewModel}\n */\n this.complianceItems = isNonEmptyArray(complianceItems)\n ? complianceItems.map(\n (complianceItem) => new ComplianceItemViewModel(complianceItem)\n )\n : []\n }\n}\n","export default Object.freeze({\n authorization: 'Authorization',\n /**\n * In a regular HTTP response, the Content-Disposition response header is a header indicating if the content is expected to be displayed inline in the browser, that is, as a Web page or as part of a Web page, or as an attachment, that is downloaded and saved locally.\n *\n * In a multipart/form-data body, the HTTP Content-Disposition general header is a header that must be used on each subpart of a multipart body to give information about the field it applies to. The subpart is delimited by the boundary defined in the Content-Type header. Used on the body itself, Content-Disposition has no effect.\n *\n * The Content-Disposition header is defined in the larger context of MIME messages for email, but only a subset of the possible parameters apply to HTTP forms and POST requests. Only the value form-data, as well as the optional directive name and filename, can be used in the HTTP context.\n * @tutorial https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Disposition\n */\n contentDisposition: 'content-disposition',\n\n // Custom headers\n /**\n * Instructs the server which version of the API to use\n */\n acceptVersion: 'Accept-Version',\n /**\n * Contains the ID of the candidate being impersonated\n */\n impersonatedCandidate: 'Impersonated-Candidate',\n})\n","/* eslint-disable no-unused-vars */\nimport FormProvider from '@/constants/registrations/FormProvider'\n\n/**\n * @class\n * @public\n */\nexport default class ComplianceItemFormViewModel {\n constructor({ url, provider } = {}) {\n /**\n * @type {String}\n */\n this.url = url\n /**\n * Provider of the requested form\n * @type {String}\n * @example internal | jotForm\n * @see {FormProvider} for valid type values\n */\n this.provider = provider\n }\n}\n","/**\n * Hypertext Transfer Protocol (HTTP) response status codes.\n *\n * @see {@link https://en.wikipedia.org/wiki/List_of_HTTP_status_codes}\n * @see {@link https://gist.github.com/RWOverdijk/6cef816cfdf5722228e01cc05fd4b094}\n */\nexport default Object.freeze({\n /**\n * The server has received the request headers and the client should proceed to send the request body\n * (in the case of a request for which a body needs to be sent; for example, a POST request).\n * Sending a large request body to a server after a request has been rejected for inappropriate headers would be inefficient.\n * To have a server check the request's headers, a client must send Expect: 100-continue as a header in its initial request\n * and receive a 100 Continue status code in response before sending the body. The response 417 Expectation Failed indicates the request should not be continued.\n */\n Continue: 100,\n\n /**\n * The requester has asked the server to switch protocols and the server has agreed to do so.\n */\n SwitchingProtocols: 101,\n\n /**\n * A WebDAV request may contain many sub-requests involving file operations, requiring a long time to complete the request.\n * This code indicates that the server has received and is processing the request, but no response is available yet.\n * This prevents the client from timing out and assuming the request was lost.\n */\n Processing: 102,\n\n /**\n * Standard response for successful HTTP requests.\n * The actual response will depend on the request method used.\n * In a GET request, the response will contain an entity corresponding to the requested resource.\n * In a POST request, the response will contain an entity describing or containing the result of the action.\n */\n Ok: 200,\n\n /**\n * The request has been fulfilled, resulting in the creation of a new resource.\n */\n Created: 201,\n\n /**\n * The request has been accepted for processing, but the processing has not been completed.\n * The request might or might not be eventually acted upon, and may be disallowed when processing occurs.\n */\n Accepted: 202,\n\n /**\n * SINCE HTTP/1.1\n * The server is a transforming proxy that received a 200 OK from its origin,\n * but is returning a modified version of the origin's response.\n */\n NonAuthoritativeInformation: 203,\n\n /**\n * The server successfully processed the request and is not returning any content.\n */\n NoContent: 204,\n\n /**\n * The server successfully processed the request, but is not returning any content.\n * Unlike a 204 response, this response requires that the requester reset the document view.\n */\n ResetContent: 205,\n\n /**\n * The server is delivering only part of the resource (byte serving) due to a range header sent by the client.\n * The range header is used by HTTP clients to enable resuming of interrupted downloads,\n * or split a download into multiple simultaneous streams.\n */\n PartialContent: 206,\n\n /**\n * The message body that follows is an XML message and can contain a number of separate response codes,\n * depending on how many sub-requests were made.\n */\n MultiStatus: 207,\n\n /**\n * The members of a DAV binding have already been enumerated in a preceding part of the (multistatus) response,\n * and are not being included again.\n */\n AlreadyReported: 208,\n\n /**\n * The server has fulfilled a request for the resource,\n * and the response is a representation of the result of one or more instance-manipulations applied to the current instance.\n */\n ImUsed: 226,\n\n /**\n * Indicates multiple options for the resource from which the client may choose (via agent-driven content negotiation).\n * For example, this code could be used to present multiple video format options,\n * to list files with different filename extensions, or to suggest word-sense disambiguation.\n */\n MultipleChoices: 300,\n\n /**\n * This and all future requests should be directed to the given URI.\n */\n MovedPermanently: 301,\n\n /**\n * This is an example of industry practice contradicting the standard.\n * The HTTP/1.0 specification (RFC 1945) required the client to perform a temporary redirect\n * (the original describing phrase was \"Moved Temporarily\"), but popular browsers implemented 302\n * with the functionality of a 303 See Other. Therefore, HTTP/1.1 added status codes 303 and 307\n * to distinguish between the two behaviours. However, some Web applications and frameworks\n * use the 302 status code as if it were the 303.\n */\n Found: 302,\n\n /**\n * SINCE HTTP/1.1\n * The response to the request can be found under another URI using a GET method.\n * When received in response to a POST (or PUT/DELETE), the client should presume that\n * the server has received the data and should issue a redirect with a separate GET message.\n */\n SeeOther: 303,\n\n /**\n * Indicates that the resource has not been modified since the version specified by the request headers If-Modified-Since or If-None-Match.\n * In such case, there is no need to retransmit the resource since the client still has a previously-downloaded copy.\n */\n NotModified: 304,\n\n /**\n * SINCE HTTP/1.1\n * The requested resource is available only through a proxy, the address for which is provided in the response.\n * Many HTTP clients (such as Mozilla and Internet Explorer) do not correctly handle responses with this status code, primarily for security reasons.\n */\n UseProxy: 305,\n\n /**\n * No longer used. Originally meant \"Subsequent requests should use the specified proxy.\"\n */\n SwitchProxy: 306,\n\n /**\n * SINCE HTTP/1.1\n * In this case, the request should be repeated with another URI; however, future requests should still use the original URI.\n * In contrast to how 302 was historically implemented, the request method is not allowed to be changed when reissuing the original request.\n * For example, a POST request should be repeated using another POST request.\n */\n TemporaryRedirect: 307,\n\n /**\n * The request and all future requests should be repeated using another URI.\n * 307 and 308 parallel the behaviors of 302 and 301, but do not allow the HTTP method to change.\n * So, for example, submitting a form to a permanently redirected resource may continue smoothly.\n */\n PermanentRedirect: 308,\n\n /**\n * The server cannot or will not process the request due to an apparent client error\n * (e.g., malformed request syntax, too large size, invalid request message framing, or deceptive request routing).\n */\n BadRequest: 400,\n\n /**\n * Similar to 403 Forbidden, but specifically for use when authentication is required and has failed or has not yet\n * been provided. The response must include a WWW-Authenticate header field containing a challenge applicable to the\n * requested resource. See Basic access authentication and Digest access authentication. 401 semantically means\n * \"unauthenticated\",i.e. the user does not have the necessary credentials.\n */\n Unauthorized: 401,\n\n /**\n * Reserved for future use. The original intention was that this code might be used as part of some form of digital\n * cash or micro payment scheme, but that has not happened, and this code is not usually used.\n * Google Developers API uses this status if a particular developer has exceeded the daily limit on requests.\n */\n PaymentRequired: 402,\n\n /**\n * The request was valid, but the server is refusing action.\n * The user might not have the necessary permissions for a resource.\n */\n Forbidden: 403,\n\n /**\n * The requested resource could not be found but may be available in the future.\n * Subsequent requests by the client are permissible.\n */\n NotFound: 404,\n\n /**\n * A request method is not supported for the requested resource;\n * for example, a GET request on a form that requires data to be presented via POST, or a PUT request on a read-only resource.\n */\n MethodNotAllowed: 405,\n\n /**\n * The requested resource is capable of generating only content not acceptable according to the Accept headers sent in the request.\n */\n NotAcceptable: 406,\n\n /**\n * The client must first authenticate itself with the proxy.\n */\n ProxyAuthenticationRequired: 407,\n\n /**\n * The server timed out waiting for the request.\n * According to HTTP specifications:\n * \"The client did not produce a request within the time that the server was prepared to wait. The client MAY repeat the request without modifications at any later time.\"\n */\n RequestTimeout: 408,\n\n /**\n * Indicates that the request could not be processed because of conflict in the request,\n * such as an edit conflict between multiple simultaneous updates.\n */\n Conflict: 409,\n\n /**\n * Indicates that the resource requested is no longer available and will not be available again.\n * This should be used when a resource has been intentionally removed and the resource should be purged.\n * Upon receiving a 410 status code, the client should not request the resource in the future.\n * Clients such as search engines should remove the resource from their indices.\n * Most use cases do not require clients and search engines to purge the resource, and a \"404 Not Found\" may be used instead.\n */\n Gone: 410,\n\n /**\n * The request did not specify the length of its content, which is required by the requested resource.\n */\n LengthRequired: 411,\n\n /**\n * The server does not meet one of the preconditions that the requester put on the request.\n */\n PreconditionFailed: 412,\n\n /**\n * The request is larger than the server is willing or able to process. Previously called \"Request Entity Too Large\".\n */\n PayloadTooLarge: 413,\n\n /**\n * The URI provided was too long for the server to process. Often the result of too much data being encoded as a query-string of a GET request,\n * in which case it should be converted to a POST request.\n * Called \"Request-URI Too Long\" previously.\n */\n UriTooLong: 414,\n\n /**\n * The request entity has a media type which the server or resource does not support.\n * For example, the client uploads an image as image/svg+xml, but the server requires that images use a different format.\n */\n UnsupportedMediaType: 415,\n\n /**\n * The client has asked for a portion of the file (byte serving), but the server cannot supply that portion.\n * For example, if the client asked for a part of the file that lies beyond the end of the file.\n * Called \"Requested Range Not Satisfiable\" previously.\n */\n RangeNotSatisfiable: 416,\n\n /**\n * The server cannot meet the requirements of the Expect request-header field.\n */\n ExpectationFailed: 417,\n\n /**\n * This code was defined in 1998 as one of the traditional IETF April Fools' jokes, in RFC 2324, Hyper Text Coffee Pot Control Protocol,\n * and is not expected to be implemented by actual HTTP servers. The RFC specifies this code should be returned by\n * teapots requested to brew coffee. This HTTP status is used as an Easter egg in some websites, including Google.com.\n */\n IAmATeapot: 418,\n\n /**\n * The request was directed at a server that is not able to produce a response (for example because a connection reuse).\n */\n MisdirectedRequest: 421,\n\n /**\n * The request was well-formed but was unable to be followed due to semantic errors.\n */\n UnprocessableEntity: 422,\n\n /**\n * The resource that is being accessed is locked.\n */\n Locked: 423,\n\n /**\n * The request failed due to failure of a previous request (e.g., a PROPPATCH).\n */\n FailedDependency: 424,\n\n /**\n * The client should switch to a different protocol such as TLS/1.0, given in the Upgrade header field.\n */\n UpgradeRequired: 426,\n\n /**\n * The origin server requires the request to be conditional.\n * Intended to prevent \"the 'lost update' problem, where a client\n * GETs a resource's state, modifies it, and PUTs it back to the server,\n * when meanwhile a third party has modified the state on the server, leading to a conflict.\"\n */\n PreconditionRequired: 428,\n\n /**\n * The user has sent too many requests in a given amount of time. Intended for use with rate-limiting schemes.\n */\n TooManyRequests: 429,\n\n /**\n * The server is unwilling to process the request because either an individual header field,\n * or all the header fields collectively, are too large.\n */\n RequestHeaderFieldsTooLarge: 431,\n\n /**\n * A server operator has received a legal demand to deny access to a resource or to a set of resources\n * that includes the requested resource. The code 451 was chosen as a reference to the novel Fahrenheit 451.\n */\n UnavailableForLegalReasons: 451,\n\n /**\n * A generic error message, given when an unexpected condition was encountered and no more specific message is suitable.\n */\n InternalServerError: 500,\n\n /**\n * The server either does not recognize the request method, or it lacks the ability to fulfill the request.\n * Usually this implies future availability (e.g., a new feature of a web-service API).\n */\n NotImplemented: 501,\n\n /**\n * The server was acting as a gateway or proxy and received an invalid response from the upstream server.\n */\n BadGateway: 502,\n\n /**\n * The server is currently unavailable (because it is overloaded or down for maintenance).\n * Generally, this is a temporary state.\n */\n ServiceUnavailable: 503,\n\n /**\n * The server was acting as a gateway or proxy and did not receive a timely response from the upstream server.\n */\n GatewayTimeout: 504,\n\n /**\n * The server does not support the HTTP protocol version used in the request\n */\n HttpVersionNotSupported: 505,\n\n /**\n * Transparent content negotiation for the request results in a circular reference.\n */\n VariantAlsoNegotiates: 506,\n\n /**\n * The server is unable to store the representation needed to complete the request.\n */\n InsufficientStorage: 507,\n\n /**\n * The server detected an infinite loop while processing the request.\n */\n LoopDetected: 508,\n\n /**\n * Further extensions to the request are required for the server to fulfill it.\n */\n NotExtended: 510,\n\n /**\n * The client needs to authenticate to gain network access.\n * Intended for use by intercepting proxies used to control access to the network (e.g., \"captive portals\" used\n * to require agreement to Terms of Service before granting full Internet access via a Wi-Fi hotspot).\n */\n NetworkAuthenticationRequired: 511,\n})\n","import { getType } from 'mime'\nimport { isNonEmptyArray } from '@/helpers/array-helpers'\nimport { fail, success } from '@/helpers/result-helper.js'\n// eslint-disable-next-line no-unused-vars\nimport DocumentComplianceItemStatusUpdateDto from '@/models/registration/documentComplianceItemStatusUpdateDto'\nimport RegistrationSummaryViewModel from '@/models/registration/registrationSummaryViewModel'\nimport RegistrationViewModel from '@/models/registration/registrationViewModel'\nimport dayjs from '@/services/date/index.js'\nimport { isCacheFresh } from '@/helpers/cache-helpers'\nimport DurationUnits from '@/constants/date/DurationUnits.js'\nimport ComplianceItemVideoViewModel from '@/models/registration/complianceItemVideoViewModel'\n// eslint-disable-next-line no-unused-vars\nimport ComplianceItemStatusUpdateDto from '@/models/registration/complianceItemStatusUpdateDto'\nimport { extractFileNameFromContentDisposition } from '@/helpers/file-helpers'\nimport HttpHeaders from '@/constants/api/HttpHeaders'\nimport DownloadedFile from '@/models/file/downloadedFile'\nimport ComplianceItemType from '@/constants/registrations/ComplianceItemType'\nimport ComplianceItemStatus from '@/constants/registrations/ComplianceItemStatus'\nimport ComplianceItemFormViewModel from '@/models/registration/complianceItemFormViewModel'\nimport HttpStatusCodes from '@/constants/api/HttpStatusCodes'\n\nconst getDefaultState = () => {\n return {\n registrations: null,\n registration: null,\n loadingCount: 0,\n crudLoadingCount: 0,\n loadingVideoDataCount: 0,\n loadingVerifyingComplianceItem: 0,\n loadingFileDataCount: 0,\n loadingFormDetailsCount: 0,\n }\n}\n\nconst state = getDefaultState()\n\nexport default {\n namespaced: true,\n state,\n getters: {\n moduleName: () => 'registrations',\n registrations: (state) => state.registrations?.list,\n registration: (state) => state.registration,\n isLoading: (state) => state.loadingCount > 0,\n isLoadingCRUD: (state) => state.crudLoadingCount > 0,\n isLoadingVideoData: (state) => state.loadingVideoDataCount > 0,\n isLoadingVerifyingComplianceItem: (state) =>\n state.loadingVerifyingComplianceItem > 0,\n isLoadingComplianceItemFile: (state) => state.loadingFileDataCount > 0,\n isLoadingComplianceItemForm: (state) => state.loadingFormDetailsCount > 0,\n },\n mutations: {\n SET_REGISTRATIONS(state, regos) {\n state.registrations = {\n list: regos,\n lastUpdated: dayjs(),\n isDirty: false,\n }\n },\n SET_REGISTRATION(state, regos) {\n state.registration = regos\n },\n START_LOADING(state) {\n state.loadingCount++\n },\n FINISH_LOADING(state) {\n state.loadingCount--\n },\n START_LOADING_CRUD(state) {\n state.crudLoadingCount++\n },\n FINISH_LOADING_CRUD(state) {\n state.crudLoadingCount--\n },\n START_LOADING_VIDEO_DATA(state) {\n state.loadingVideoDataCount++\n },\n FINISH_LOADING_VIDEO_DATA(state) {\n state.loadingVideoDataCount--\n },\n START_LOADING_VERIFYING_COMPLIANCE_ITEM(state) {\n state.loadingVerifyingComplianceItem++\n },\n FINISH_LOADING_VERIFYING_COMPLIANCE_ITEM(state) {\n state.loadingVerifyingComplianceItem--\n },\n START_LOADING_FILE_DATA(state) {\n state.loadingFileDataCount++\n },\n FINISH_LOADING_FILE_DATA(state) {\n state.loadingFileDataCount--\n },\n START_LOADING_FORM_DETAILS(state) {\n state.loadingFormDetailsCount++\n },\n FINISH_LOADING_FORM_DETAILS(state) {\n state.loadingFormDetailsCount--\n },\n CLEAR_STORE(state) {\n // Resets store to default state\n Object.assign(state, getDefaultState())\n },\n /**\n *\n * @param {*} state\n * @param {DocumentComplianceItemStatusUpdateDto} payload\n */\n UPDATE_DOCUMENT_COMPLIANCE_ITEM(state, payload) {\n if (\n !state.registration ||\n !isNonEmptyArray(state.registration?.complianceItems)\n )\n return\n\n const found = state.registration?.complianceItems.find(\n (complianceItem) =>\n complianceItem.id === payload.complianceItemId &&\n complianceItem.type === ComplianceItemType.document\n )\n\n if (!found) return\n\n found.status = payload.status\n found.referenceFileId = payload.referenceFileId\n },\n /**\n *\n * @param {*} state\n * @param {ComplianceItemStatusUpdateDto} payload\n */\n UPDATE_COMPLIANCE_ITEM_STATUS(state, payload) {\n if (\n !state.registration ||\n !isNonEmptyArray(state.registration?.complianceItems)\n )\n return\n\n const found = state.registration?.complianceItems.find(\n (complianceItem) => complianceItem.id === payload.complianceItemId\n )\n\n if (!found) return\n\n found.status = payload.status\n },\n SET_REGISTRATIONS_DIRTY(state) {\n if (!state.registrations) return\n state.registrations.isDirty = true\n },\n },\n actions: {\n /**\n * @param {{commit: Function, dispatch: Function}} vuexContext\n * @param {Boolean} forceRefresh\n */\n async getRegistrations({ commit, dispatch }, forceRefresh) {\n if (\n isCacheFresh({\n cacheDuration: 1,\n durationUnits: DurationUnits.HOUR,\n lastUpdated: state.registrations?.lastUpdated,\n forceRefresh,\n isDirty: state.registrations?.isDirty,\n })\n )\n return\n\n commit('START_LOADING')\n try {\n const result = await this.$api.registrations.get()\n const registrations = result.data?.map(\n (rego) => new RegistrationSummaryViewModel(rego)\n )\n\n commit('SET_REGISTRATIONS', registrations)\n } catch (ex) {\n return fail({\n error: await dispatch('logException', ex, { root: true }),\n })\n } finally {\n commit('FINISH_LOADING')\n }\n },\n /**\n * @param {{commit: Function, dispatch: Function}} vuexContext\n * @param {Number} registrationId\n * @returns {Promise}\n */\n async getRegistrationById({ commit, dispatch }, registrationId) {\n commit('START_LOADING')\n try {\n const result = await this.$api.registrations.get(registrationId)\n result.data = new RegistrationViewModel(result.data)\n\n commit('SET_REGISTRATION', result.data)\n\n return result\n } catch (ex) {\n return fail({\n error: await dispatch('logException', ex, { root: true }),\n })\n } finally {\n commit('FINISH_LOADING')\n }\n },\n /**\n * @param {{commit: Function, dispatch: Function}} vuexContext\n * @param {{registrationId: Number, complianceItemId: Number}} payload\n * @returns {Promise}\n */\n async getVideoComplianceItemData(\n { commit, dispatch },\n { registrationId, complianceItemId }\n ) {\n commit('START_LOADING_VIDEO_DATA')\n try {\n const result = await this.$api.registrations.getVideoComplianceItemData(\n { registrationId, complianceItemId }\n )\n result.data = new ComplianceItemVideoViewModel(result.data)\n return result\n } catch (ex) {\n return fail({\n error: await dispatch('logException', ex, { root: true }),\n })\n } finally {\n commit('FINISH_LOADING_VIDEO_DATA')\n }\n },\n /**\n * @param {{commit: Function}} vuexContext\n * @param {DocumentComplianceItemStatusUpdateDto} payload\n */\n updateDocumentComplianceItem({ commit }, payload) {\n commit('UPDATE_DOCUMENT_COMPLIANCE_ITEM', payload)\n commit('SET_REGISTRATIONS_DIRTY')\n },\n /**\n * @param {{commit: Function, dispatch: Function}} vuexContext\n * @param {{registrationId: Number, complianceItemId: Number}} payload\n * @returns {Promise}\n */\n async verifyComplianceItem(\n { commit, dispatch },\n { registrationId, complianceItemId }\n ) {\n commit('START_LOADING_VERIFYING_COMPLIANCE_ITEM')\n try {\n return await this.$api.registrations.verifyComplianceItem({\n registrationId,\n complianceItemId,\n })\n } catch (ex) {\n return fail({\n error: await dispatch('logException', ex, { root: true }),\n })\n } finally {\n commit('FINISH_LOADING_VERIFYING_COMPLIANCE_ITEM')\n }\n },\n /**\n * @param {{commit: Function}} vuexContext\n * @param {ComplianceItemStatusUpdateDto} payload\n */\n updateAgreementComplianceItem({ commit }, payload) {\n commit('UPDATE_COMPLIANCE_ITEM_STATUS', payload)\n commit('SET_REGISTRATIONS_DIRTY')\n },\n /**\n * @param {{commit: Function, dispatch: Function}} vuexContext\n * @param {{registrationId: Number, complianceItemId: Number}} payload\n * @returns {Promise}\n */\n async getComplianceItemFileData(\n { commit, dispatch },\n { registrationId, complianceItemId }\n ) {\n commit('START_LOADING_FILE_DATA')\n try {\n const response =\n await this.$api.registrations.getComplianceItemFileData({\n registrationId,\n complianceItemId,\n })\n\n const fileName = extractFileNameFromContentDisposition(\n response.headers[HttpHeaders.contentDisposition]\n )\n\n const contentType = getType(fileName)\n\n const blob = new Blob([response.data], {\n type: contentType,\n })\n\n const fileDto = new DownloadedFile({\n id: complianceItemId,\n type: contentType,\n name: fileName,\n file: blob,\n size: blob.size,\n })\n\n return success({ data: fileDto })\n } catch (ex) {\n return fail({\n error: await dispatch('logException', ex, { root: true }),\n })\n } finally {\n commit('FINISH_LOADING_FILE_DATA')\n }\n },\n /**\n * @param {{commit: Function, dispatch: Function}} vuexContext\n * @param {{registrationId: Number, complianceItemId: Number}} payload\n * @returns {Promise}\n */\n async getComplianceItemFormDetails(\n { commit, dispatch },\n { registrationId, complianceItemId }\n ) {\n commit('START_LOADING_FORM_DETAILS')\n try {\n const response =\n await this.$api.registrations.getComplianceItemFormDetails({\n registrationId,\n complianceItemId,\n })\n\n const hasAlreadySubmittedForm =\n response.statusCode === HttpStatusCodes.NoContent\n\n return success({\n data: hasAlreadySubmittedForm\n ? { isAlreadySubmitted: true }\n : new ComplianceItemFormViewModel(response.data),\n })\n } catch (ex) {\n return fail({\n error: await dispatch('logException', ex, { root: true }),\n })\n } finally {\n commit('FINISH_LOADING_FORM_DETAILS')\n }\n },\n setFormComplianceItemToSubmitted({ commit }, complianceItemId) {\n commit('UPDATE_COMPLIANCE_ITEM_STATUS', {\n complianceItemId,\n status: ComplianceItemStatus.AwaitingVerification,\n })\n commit('SET_REGISTRATIONS_DIRTY')\n },\n /**\n * Resets store to default state.\n */\n clear({ commit }) {\n commit('CLEAR_STORE')\n },\n },\n}\n","/**\n * Contains a list of potential error codes that the API can response with\n */\nexport default Object.freeze({\n /**\n * Errors relating to managing client agreements\n */\n Agreements: {\n /**\n * The requested agreement file Id was missing or invalid\n */\n InvalidFileId: 'invalid_file_id',\n /**\n * The requested agreement was not found\n */\n NotFound: 'agreement_not_found',\n /**\n * The candidate is not authorised to access the requested agreement\n */\n Unauthorised: 'not_authorised_to_access_agreement',\n },\n\n /**\n * Errors relating to authorisation and authentication functionality\n */\n Auth: {\n /**\n * Errors relating to the multi-factor auth functionality\n */\n MFA: {\n /**\n * The type of verification channel attempting to be registered already\n * exists for the candidate.\n */\n ChannelAlreadyExists: 'mfa_registration_channel_already_exists',\n /**\n * The supplied email address was invalid\n */\n EmailInvalid: 'mfa_email_invalid',\n /**\n * The supplied candidate id was missing or invalid\n */\n MissingCandidateId: 'mfa_registration_missing_candidate_id',\n /**\n * The supplied To property was missing\n */\n MissingTo: 'mfa_registration_missing_to',\n /**\n * The supplied phone number was invalid\n */\n PhoneNumberInvalid: 'mfa_phone_number_invalid',\n /**\n * The supplied phone number was invalid for the region determined\n * by the country code within the number itself\n */\n PhoneNumberInvalidForRegion: 'mfa_phone_number_invalid_for_region',\n /**\n * The supplied phone number was not a mobile number\n */\n PhoneNumberNotMobile: 'mfa_phone_number_not_mobile',\n /**\n * The verification channel provided was unsupported by the API\n */\n UnsupportedChannel: 'mfa_registration_unsupported_channel',\n },\n },\n\n /**\n * Errors relating to the Availability controller's endpoints\n */\n Availability: {\n /**\n * Missing or invalid status\n */\n UnsetStatus: 'availability_unset_status',\n /**\n * Request didn't contain at least one day in payload\n */\n NoDaysRequested: 'availability_no_days_requested',\n /**\n * Missing partial ranges in request payload\n */\n NoPartialRangesRequested: 'availability_no_days_requested',\n /**\n * The startTimeLocal property was invalid\n */\n InvalidStartTimeLocal: 'availability_invalid_time_start_local',\n /**\n * The endTimeLocal property was invalid\n */\n InvalidEndTimeLocal: 'availability_invalid_time_end_local',\n },\n\n /**\n * Errors relating to the Bookings controller endpoints\n */\n Bookings: {\n /**\n * The requested booking does not exist\n */\n DoesNotExist: 'booking_does_not_exist',\n /**\n * The booking Id sent in the request payload was invalid\n */\n InvalidId: 'invalid_booking_id',\n /**\n * The candidate is not authorised to access the requested booking\n */\n Unauthorised: 'user_not_authorized_to_view_booking',\n /**\n * Invalid value was sent for the MinutesLate property\n */\n MinutesLateOutOfRange: 'minutesLate_out_of_range',\n /**\n * Candidate attempted to fill themselves into a booking that wasn't tentative\n */\n NotTentative: 'booking_is_not_tentative',\n\n /**\n * Errors relating to managing guest access to a booking\n */\n GuestAccess: {\n /**\n * Guest access Id was missing or invalid\n */\n AccessIdMissing: 'booking_guest_access_id_missing',\n /**\n * Guest access key was missing or invalid\n */\n AccessKeyMissing: 'booking_guest_access_key_missing',\n /**\n * The requested booking was not found\n */\n NotFound: 'booking_guest_access_booking_not_found',\n /**\n * The requested booking has been cancelled\n */\n Cancelled: 'booking_guest_access_booking_cancelled',\n /**\n * The requested booking's fill status has been set to rejected\n */\n Rejected: 'booking_guest_access_tentative_rejected',\n /**\n * The requested booking is not tentative\n */\n NotTentative: 'booking_guest_access_not_tentative',\n /**\n * The requested booking's tentative status was unexpected\n */\n UnhandledTentativeStatus:\n 'booking_guest_access_unhandled_tentative_status',\n },\n },\n\n /**\n * Errors relating to the management of candidate certifications\n */\n Certifications: {\n /**\n * Date Expiry was earlier than Date Obtained\n */\n BadInputDates: 'bad_input_dates',\n /**\n * The certification has been verified and cannot be deleted\n */\n CannotDeleteVerified: 'certification_verified',\n /**\n * The custom field's value exceeds the maximum number of characters.\n * Since this is a custom field, only a partial error code is provided\n * @example myCustomField_exceeds_max_length\n */\n CustomFieldExceedsMaxLength: '_exceeds_max_length',\n /**\n * The custom field's value is not within the possible range of valid\n * values.\n * Since this is a custom field, only a partial error code is provided\n * @example invalid_select_value_myCustomField\n */\n CustomFieldInvalidSelectValue: 'invalid_select_value_',\n /**\n * The custom field contains an unexpected value.\n * Since this is a custom field, only a partial error code is provided\n * @example unexpected_data_myCustomField\n */\n CustomFieldUnexpectedData: 'unexpected_data_',\n /**\n * The Date Expiry property was missing from the request payload\n */\n DateExpiryMissing: 'date_expiry_missing',\n /**\n * The Date Obtained property was missing from the request payload\n */\n DateObtainedMissing: 'date_obtained_missing',\n /**\n * File(s) weren't sent in the request payload\n */\n FileMissing: 'file_missing',\n /**\n * Requested certification file was not found\n */\n FileNotFound: 'certification_file_not_found',\n /**\n * The certification Id provided was invalid\n */\n IdInvalid: 'certification_id_invalid',\n /**\n * The access GUI was missing or invalid\n */\n MissingAccessGui: 'certification_file_missing_access_gui',\n /**\n * Invalid or missing certification type sent in request\n */\n NonExistingCertType: 'non_existing_cert_type',\n /**\n * The Note property's value exceeded the maximum number of characters\n */\n NoteExceedsMaxLength: 'note_exceeds_max_length',\n /**\n * The requested cerification was not found\n */\n NotFound: 'certification_not_found',\n /**\n * The RefNo property's value exceeded the maximum number of characters\n */\n RefNumberExceedsMaxLength: 'certrefno_exceeds_max_length',\n /**\n * The candidate does not have access to the requested certification\n */\n Unauthorised: 'certification_unauthorised',\n },\n\n /**\n * Errors relating to registering devices for push notification functionality\n */\n DeviceRegistrations: {\n /**\n * The requested device could not be found\n */\n NotFound: 'device_not_found',\n },\n\n /**\n * Errors related to Candidate General Files (aka Other Files) found within the\n * My Files view and grouped within the Documents controller\n */\n Documents: {\n /**\n * Candidate attempted to delete a candidate general file that was verified.\n * This is unlikely to occur without JS manipulation.\n */\n CannotDeleteVerified: 'candidate_general_file_cannot_delete_verified',\n /**\n * The supplied candidate Id was invalid or missing\n */\n InvalidCandidateId: 'employment_history_candidate_id_invalid',\n /**\n * The candidate general file Id provided in the request was missing or invalid\n */\n InvalidId: 'candidate_general_file_id_invalid',\n /**\n * Request payload was missing access gui\n */\n MissingAccessGui: 'candidate_general_file_missing_access_gui',\n /**\n * Requested candidate general file was not found\n */\n CandidateGeneralFileNotFound: 'candidate_general_file_not_found',\n /**\n * The chosen fileType is not a general file type\n */\n FileTypeNotGeneral: 'file_type_not_general',\n /**\n * There was nissing data sent to the api\n */\n IncompleteRequestData: 'incomplete_request_data',\n },\n\n /**\n * Errors related to professional development events\n */\n Events: {\n /**\n * The requested event was not found\n */\n NotFound: 'event_not_found',\n /**\n * Unable to retrieve the event's banner image\n */\n ImageNotFound: 'event_image_not_found',\n },\n\n /**\n * Shared error codes relating to accessing files\n */\n Files: {\n /**\n * The Base64 encoded file data was invalid\n */\n Base64StringInvalid: 'file_base64_string_invalid',\n /**\n * File doesn't exist for the requesting candidate\n */\n FileIdAndCandidateIdMismatch: 'candidate_file_id_and_candidate_id_mismatch',\n /**\n * The number of files being upload exceeds the limit\n */\n ExceedsFileUploadLimit: 'exceeds_file_upload_limit',\n /**\n * Requested file was not found\n */\n NotFound: 'file_not_found',\n /**\n * File exceeds maximum uploadable file size\n */\n TooLarge: 'file_too_large',\n /**\n * File being upload is in a file format that is unsupported by the API\n */\n UnsupportedFileExtension: 'unsupported_file_extension',\n /**\n * The file data was missing or invalid in the request\n */\n MissingData: 'missing_file_data',\n /**\n * The file's name was not provided with the request\n */\n MissingFileName: 'missing_file_name',\n },\n\n /**\n * Errors relating to the Qualifications series of endpoints\n */\n Qualifications: {\n /**\n * Institute property was missing in request payload\n */\n InstituteMissing: 'upload_qualification_institute_missing',\n /**\n * Degree property was missing in request payload\n */\n DegreeMissing: 'upload_qualification_degree_missing',\n /**\n * DateComplete property was missing in request payload\n */\n DateCompleteMissing: 'upload_qualification_date_complete_missing',\n /**\n * DateComplete property was invalid\n */\n DateCompleteInvalid: 'upload_qualification_date_complete_invalid',\n /**\n * Requested qualification was not found\n */\n NotFound: 'qualification_not_found',\n /**\n * Candidate attempted to delete a qualification record that was verified.\n * This is unlikely to occur without JS manipulation.\n */\n CannotDeleteVerified: 'cannot_delete_verified',\n },\n\n /**\n * Errors related to Ready2Work endpoints that handle signifying if the\n * candidate is up and ready to work\n */\n Ready2Work: {\n /**\n * Missing or invalid status\n */\n UnsetStatus: 'unset_status',\n },\n\n /**\n * Errors related to candidate registrations\n */\n Registrations: {\n /**\n * The requested registration was not found\n */\n NotFound: 'registration_not_found',\n /**\n * The candidate is not authorised to access the requested registration\n */\n Unauthorised: 'registration_candidate_unauthorized',\n },\n\n /**\n * Errors related to the work experience (aka employment history)\n * collection of endpoints\n */\n WorkExperience: {\n /**\n * Candidate attempted to delete a work experience record that was verified.\n * This is unlikely to occur without JS manipulation.\n */\n CannotDeleteVerified: 'employment_history_cannot_delete_verified',\n /**\n * DateFrom property was missing from request payload\n */\n DateFromMissing: 'upload_emp_history_date_from_missing',\n /**\n * The DateUntil property was missing and the candidate hasn't indicated that they\n * are currently in the role\n */\n DateUntilMissingAndNotCurrent:\n 'upload_emp_history_date_until_missing_and_not_is_current',\n /**\n * The Details property was missing from the request payload\n */\n DetailsMissing: 'upload_emp_history_details_missing',\n /**\n * The value of the Details property exceeds the maximum number of characters\n * limit\n */\n DetailsExceedsMaxLength:\n 'upload_emp_history_details_exceeds_max_char_count',\n /**\n * One of the dot points was missing its value from the request payload.\n * Check the param property in the error response for the index of the dot point\n */\n DotPointMissing: 'upload_emp_history_dot_point_missing_value',\n /**\n * One of the dot points' value exceeds the maximum number of characters\n * limit. Check the param property in the error response for the index of the dot point\n */\n DotPointExceedsMaxLength:\n 'upload_emp_history_position_held_exceeds_max_char_count',\n /**\n * The requested work experience file was not found\n */\n FileNotFound: 'employment_history_file_not_found',\n /**\n * The supplied candidate Id was invalid or missing\n */\n InvalidCandidateId: 'employment_history_candidate_id_invalid',\n /**\n * The work experience Id provided in the request was missing or invalid\n */\n InvalidId: 'employment_history_id_invalid',\n /**\n * The requested work experience record was not found\n */\n NotFound: 'employment_history_not_found',\n /**\n * The PlaceOfWork property was missing from the request payload\n */\n PlaceOfWorkMissing: 'upload_emp_history_place_of_work_missing',\n /**\n * The value of the PlaceOfWork property exceeds the maximum number of characters\n * limit\n */\n PlaceOfWorkExceedsMaxLength:\n 'upload_emp_history_place_of_work_exceeds_max_char_count',\n /**\n * The PositionHeld property was missing from the request payload\n */\n PositionHeldMissing: 'upload_emp_history_position_held_missing',\n /**\n * The value of the PositionHeld property exceeds the maximum number of characters\n * limit\n */\n PositionHeldExceedsMaxLength:\n 'upload_emp_history_position_held_exceeds_max_char_count',\n },\n})\n","import ApiErrorCodes from '@/constants/api/ApiErrorCodes'\nimport HttpStatusCodes from '@/constants/api/HttpStatusCodes'\n// eslint-disable-next-line no-unused-vars\nimport ErrorResponseDTO from '@/models/error/errorResponseDTO'\n\n// Factory\n\n/**\n * Factory to handle generating error messages for document actions\n * @param {{actionName: String, error: ErrorResponseDTO, i18n: {t: Function}}} payload\n * @returns\n */\nexport function DocumentsActionErrorMessageFactory({\n actionName,\n error,\n i18n,\n}) {\n switch (actionName) {\n case 'deleteDocument':\n return deleteDocumentActionErrorMessageHandler({ error, i18n })\n default:\n return error?.message\n }\n}\n\n// Handlers\n\n/**\n * Generate error message for the deleteDocument store action\n * @param {{error: ErrorResponseDTO, i18n: {t: Function}}} payload\n * @returns\n */\nconst deleteDocumentActionErrorMessageHandler = ({ error, i18n }) => {\n let errorMessage = error.message\n\n switch (error?.error?.response?.status) {\n case HttpStatusCodes.NotFound:\n errorMessage = i18n.t('documents.error.notFound')\n break\n case HttpStatusCodes.BadRequest:\n if (error.code === ApiErrorCodes.Documents.CannotDeleteVerified)\n errorMessage = i18n.t('files.unableToRemoveVerifiedGeneralFileToolTip')\n break\n }\n\n return errorMessage\n}\n","import { getType } from 'mime'\nimport { fail, success } from '@/helpers/result-helper.js'\nimport { isCacheFresh } from '@/helpers/cache-helpers'\nimport DurationUnits from '@/constants/date/DurationUnits.js'\nimport toast from '@/services/toasts/index.js'\nimport dayjs from '@/services/date/index.js'\nimport { fileToBase64String } from '@/services/file/Base64Convert'\nimport CandidateDocumentViewModel from '@/models/candidate/candidateDocumentViewModel'\nimport { extractFileNameFromContentDisposition } from '@/helpers/file-helpers'\nimport HttpHeaders from '@/constants/api/HttpHeaders'\nimport { isNonEmptyArray } from '@/helpers/array-helpers'\nimport { DocumentsActionErrorMessageFactory } from '@/services/documents/DocumentsActionErrorMessageFactory'\n// eslint-disable-next-line no-unused-vars\nimport ResultDTO from '@/models/app/resultDTO'\n\nconst getDefaultState = () => {\n return {\n documents: null,\n loadingDocumentsCount: 0,\n loadingFileTypesCount: 0,\n loadingCount: 0,\n crudLoadingCount: 0,\n fileTypes: null,\n loadingViewDocumentCount: 0,\n loadingDeleteCount: 0,\n }\n}\n\nconst state = getDefaultState()\n\nexport default {\n namespaced: true,\n state,\n getters: {\n moduleName: () => 'documents',\n documents: (state) => state.documents?.list,\n isLoading: (state) => state.loadingCount > 0,\n isLoadingDocuments: (state) => state.loadingDocumentsCount > 0,\n isLoadingFileTypes: (state) => state.loadingFileTypesCount > 0,\n isLoadingCRUD: (state) => state.crudLoadingCount > 0,\n isLoadingDelete: (state) => state.loadingDeleteCount > 0,\n fileTypes: (state) => state.fileTypes?.list,\n isLoadingViewDocument: (state) => state.loadingViewDocumentCount > 0,\n },\n mutations: {\n START_LOADING(state) {\n state.loadingCount++\n },\n FINISH_LOADING(state) {\n state.loadingCount--\n },\n START_LOADING_DOCUMENTS(state) {\n state.loadingDocumentsCount++\n },\n FINISH_LOADING_DOCUMENTS(state) {\n state.loadingDocumentsCount--\n },\n START_LOADING_FILE_TYPES(state) {\n state.loadingFileTypesCount++\n },\n FINISH_LOADING_FILE_TYPES(state) {\n state.loadingFileTypesCount--\n },\n START_LOADING_CRUD(state) {\n state.crudLoadingCount++\n },\n FINISH_LOADING_CRUD(state) {\n state.crudLoadingCount--\n },\n START_LOADING_VIEW_DOCUMENT(state) {\n state.loadingViewDocumentCount++\n },\n FINISH_LOADING_VIEW_DOCUMENT(state) {\n state.loadingViewDocumentCount--\n },\n START_LOADING_DELETE(state) {\n state.loadingDeleteCount++\n },\n FINISH_LOADING_DELETE(state) {\n state.loadingDeleteCount--\n },\n SET_DOCUMENTS(state, documents) {\n state.documents = {\n list:\n documents && documents.length > 0\n ? documents.map(\n (document) => new CandidateDocumentViewModel(document)\n )\n : [],\n lastUpdated: dayjs(),\n isDirty: false,\n }\n },\n INSERT_DOCUMENT(state, document) {\n state.documents.list.push(new CandidateDocumentViewModel(document))\n },\n SET_DOCUMENTS_DIRTY(state) {\n if (!state.documents) return // Will prevent an exception if documents aren't initialised\n state.documents.isDirty = true\n },\n SET_FILE_TYPES(state, fileTypes) {\n state.fileTypes = {\n list: fileTypes,\n lastUpdated: dayjs(),\n }\n },\n REMOVE_DOCUMENT(state, candidateGeneralFileId) {\n if (!isNonEmptyArray(state.documents?.list)) return\n\n const foundIndex = state.documents.list.findIndex(\n (document) => document.id === candidateGeneralFileId\n )\n // If not found, reload summary list\n if (foundIndex < 0) {\n if (!state.documents) return\n state.documents.isDirty = true\n }\n\n state.documents.list.splice(foundIndex, 1)\n },\n CLEAR_STORE(state) {\n // Resets store to default state\n Object.assign(state, getDefaultState())\n },\n },\n actions: {\n /**\n * @param {{commit: Function, getters: Object, dispatch: Function}} vuexContext\n * @param {Boolean} forceRefresh\n * @returns {Promise}\n */\n async getDocumentsList({ commit, getters, dispatch }, forceRefresh) {\n // 1. Check if we already have the docs cached\n if (\n isCacheFresh({\n cacheDuration: 1,\n durationUnits: DurationUnits.HOUR,\n lastUpdated: state.documents?.lastUpdated,\n forceRefresh,\n isDirty: state.documents?.isDirty,\n })\n )\n return success({ data: getters.documents })\n\n // 2. Fetch docs from api\n commit('START_LOADING_DOCUMENTS')\n try {\n const response = await this.$api.documents.get()\n commit('SET_DOCUMENTS', response.data)\n return success({ data: getters.documents })\n } catch (ex) {\n toast.error(this.$i18n.t('documents.errorLoadDocuments'))\n return fail({\n error: await dispatch('logException', ex, { root: true }),\n })\n } finally {\n commit('FINISH_LOADING_DOCUMENTS')\n }\n },\n /**\n * @param {{commit: Function, getters: Object, dispatch: Function}} vuexContext\n * @param {Boolean} forceRefresh\n * @returns {Promise}\n */\n async getFileTypes({ commit, getters, dispatch }, forceRefresh) {\n // 1. Check if we already have the file types\n if (\n isCacheFresh({\n cacheDuration: 6,\n durationUnits: DurationUnits.HOUR,\n lastUpdated: state.fileTypes?.lastUpdated,\n forceRefresh,\n })\n )\n return success({ data: getters.fileTypes })\n\n // 2. Fetch the file types\n commit('START_LOADING_FILE_TYPES')\n try {\n const response = await this.$api.documents.getFileTypes()\n commit('SET_FILE_TYPES', response.data)\n return success({ data: getters.fileTypes })\n } catch (ex) {\n toast.error(this.$i18n.t('documents.errorLoadFileTypes'))\n return fail({\n error: await dispatch('logException', ex, { root: true }),\n })\n } finally {\n commit('FINISH_LOADING_FILE_TYPES')\n }\n },\n /**\n * @param {{commit: Function, dispatch: Function}} vuexContext\n * @param {*} documentToUpload\n * @returns {Promise}\n */\n async uploadDocument(\n { commit, dispatch, getters },\n { documentToUpload, isCacheable = true }\n ) {\n const b64File = await fileToBase64String(documentToUpload.fileBlob)\n\n const payload = {\n file: {\n base64FileData: b64File,\n fileName: documentToUpload.fileName,\n },\n fileType: documentToUpload.fileTypeId,\n }\n\n commit('START_LOADING_CRUD')\n try {\n const response = await this.$api.documents.post('', payload)\n\n const fileTypeFound = isNonEmptyArray(getters.fileTypes)\n ? getters.fileTypes.find((type) => type.id === payload.fileType)\n : null\n\n const fileTypeText = fileTypeFound ? fileTypeFound.title : ''\n\n if (isCacheable) {\n commit('INSERT_DOCUMENT', {\n id: response.data.id,\n type: fileTypeText,\n name: payload.file.fileName,\n file: {\n accessGui: response.data.accessGui,\n name: payload.file.fileName,\n friendlyName: payload.file.fileName,\n contentType: getType(payload.file.fileName),\n },\n isVerified: false,\n createdDateLocal: dayjs(),\n })\n commit('SET_DOCUMENTS_DIRTY')\n }\n\n return response\n } catch (ex) {\n toast.error(this.$i18n.t('documents.errorUploadFile'))\n return fail({\n error: await dispatch('logException', ex, { root: true }),\n })\n } finally {\n commit('FINISH_LOADING_CRUD')\n }\n },\n /**\n * @param {{commit: Function, dispatch: Function}} vuexContext\n * @param {Number} documentId\n * @returns {Promise}\n */\n async getDocumentForView({ commit, dispatch }, documentId) {\n try {\n commit('START_LOADING_VIEW_DOCUMENT')\n const response = await this.$api.documents.get(documentId)\n response.data = new CandidateDocumentViewModel(response.data)\n return response\n } catch (ex) {\n return fail({\n error: await dispatch('logException', ex, { root: true }),\n })\n } finally {\n commit('FINISH_LOADING_VIEW_DOCUMENT')\n }\n },\n /**\n * @param {{commit: Function, dispatch: Function}} vuexContext\n * @param {Number} documentId\n * @returns {Promise}\n */\n async downloadDocument(\n { commit, dispatch },\n { documentId, accessGui, disableToast = false }\n ) {\n commit('START_LOADING')\n try {\n const response = await this.$api.documents.downloadFile(\n documentId,\n accessGui\n )\n const fileName = extractFileNameFromContentDisposition(\n response.headers[HttpHeaders.contentDisposition]\n )\n const blob = new Blob([response.data], {\n type: getType(fileName),\n })\n return success({ data: blob })\n } catch (ex) {\n if (!disableToast) {\n toast.error(this.$i18n.t('error.unableToLoadFile'))\n }\n return fail({\n error: await dispatch('logException', ex, { root: true }),\n })\n } finally {\n commit('FINISH_LOADING')\n }\n },\n /**\n * Deletes a candidate general file\n * @param {{commit: Function, dispatch: Function}} vuexContext\n * @param {Number} candidateGeneralFileId\n * @returns {Promise}\n */\n async deleteDocument({ commit, dispatch }, candidateGeneralFileId) {\n commit('START_LOADING_DELETE')\n try {\n const response = await this.$api.documents.delete(\n candidateGeneralFileId\n )\n\n commit('REMOVE_DOCUMENT', candidateGeneralFileId)\n\n toast.success(this.$i18n.t('documents.deleteSuccessfulText'))\n\n return response\n } catch (ex) {\n const error = await dispatch('logException', ex, { root: true })\n toast.error(\n DocumentsActionErrorMessageFactory({\n actionName: 'deleteDocument',\n error,\n i18n: this.$i18n,\n })\n )\n return fail({ error, statusCode: ex.response.status })\n } finally {\n commit('FINISH_LOADING_DELETE')\n }\n },\n /**\n * Resets store to default state.\n */\n clear({ commit }) {\n commit('CLEAR_STORE')\n },\n },\n}\n","import { fail, success } from '@helpers/result-helper'\nimport DurationUnits from '@/constants/date/DurationUnits.js'\nimport { isCacheFresh } from '@/helpers/cache-helpers'\nimport toast from '@/services/toasts/index.js'\nimport dayjs from '@/services/date/index.js'\nimport { Ready2WorkStatus } from '@/constants/candidate/Ready2WorkStatus'\nimport { ActiveDay } from '@/constants/date/ActiveDay'\n// eslint-disable-next-line no-unused-vars\nimport R2WAvailabilityStatusViewModel from '@/models/availability/r2WAvailabilityStatusViewModel'\nimport ScheduledAvailabilityViewModel from '@/models/availability/scheduledAvailabilityViewModel'\nimport { AvailabilityStatus } from '@/constants/candidate/AvailabilityStatus'\n\nconst getDefaultState = () => {\n return {\n // Place any new state properties here\n loadingCount: 0,\n crudLoadingCount: 0,\n r2WStatusOnActiveDay: null,\n }\n}\n\nconst state = getDefaultState()\n\nexport default {\n namespaced: true,\n\n /**\n * @typedef {{\n * loadingCount: Number\n * crudLoadingCount: Number\n * r2WStatusOnActiveDay: { r2WStatus: R2WAvailabilityStatusViewModel, lastUpdated: Date }\n * }} Ready2WorkState\n * @type {Ready2WorkState}\n */\n state,\n getters: {\n moduleName: () => 'ready2Work',\n isLoading: (state) => state.loadingCount > 0,\n isLoadingCRUD: (state) => state.crudLoadingCount > 0,\n /**\n * @param {Ready2WorkState} state\n * @returns {R2WAvailabilityStatusViewModel}\n */\n r2WStatusOnActiveDay: (state) => state.r2WStatusOnActiveDay?.r2WStatus,\n },\n mutations: {\n START_LOADING(state) {\n state.loadingCount++\n },\n FINISH_LOADING(state) {\n state.loadingCount--\n },\n START_LOADING_CRUD(state) {\n state.crudLoadingCount++\n },\n FINISH_LOADING_CRUD(state) {\n state.crudLoadingCount--\n },\n CLEAR_STORE(state) {\n // Resets store to default state\n Object.assign(state, getDefaultState())\n },\n /**\n * @param {Ready2WorkState} state\n * @param {R2WAvailabilityStatusViewModel} newValue\n */\n SET_READY2WORK(state, newValue) {\n state.r2WStatusOnActiveDay = {\n r2WStatus: newValue,\n lastUpdated: dayjs(),\n }\n },\n },\n actions: {\n /**\n * @param {*} param0\n * @param {*} newStatus\n * @returns {Promise}\n */\n async setReady2WorkStatus({ commit, dispatch }, newStatus) {\n commit('START_LOADING')\n try {\n const response = await this.$api.ready2Work.setReady2WorkStatus(\n newStatus\n )\n\n let successToastMessage = this.$i18n.t(\n 'availability.successfulStatusChangeMessage',\n {\n newStatus:\n newStatus === Ready2WorkStatus.READY\n ? this.$i18n.t('availability.readyStatus')\n : this.$i18n.t('availability.notReadyStatus'),\n relevantDate: this.$i18n.d(\n dayjs(response.data.activeDateLocal),\n 'dateShort'\n ),\n }\n )\n // append check-in reminder if the user is ready for next active day\n if (\n response.data.activeDay !== ActiveDay.TODAY &&\n response.data.ready2Work === Ready2WorkStatus.READY\n ) {\n successToastMessage += `. ${this.$i18n.t(\n 'availability.checkInReminderMessage'\n )}`\n }\n toast.success(successToastMessage)\n\n commit('SET_READY2WORK', response.data)\n\n // update the availability in store\n const availabilityStatus =\n response.data.ready2Work === Ready2WorkStatus.READY\n ? AvailabilityStatus.AVAILABLE\n : AvailabilityStatus.UNAVAILABLE\n await dispatch(\n 'availability/updateAvailability',\n new ScheduledAvailabilityViewModel({\n dateLocal: response.data.activeDateLocal,\n status: availabilityStatus,\n partialRanges: [],\n }),\n {\n root: true,\n }\n )\n return response\n } catch (ex) {\n toast.error(this.$i18n.t('error.genericFailedRequestMessage'))\n return fail({\n error: await dispatch('logException', ex, { root: true }),\n })\n } finally {\n commit('FINISH_LOADING')\n }\n },\n /**\n * @param {*} param0\n * @param {*} forceRefresh\n * @returns {Promise}\n */\n async refreshReady2WorkStatus({ commit, dispatch }, forceRefresh = false) {\n if (\n isCacheFresh({\n cacheDuration:\n state.r2WStatusOnActiveDay?.r2WStatus\n .timeUntilUpdateRequiredInMilliSeconds,\n durationUnits: DurationUnits.MILLISECOND,\n lastUpdated: state.r2WStatusOnActiveDay?.lastUpdated,\n forceRefresh,\n })\n ) {\n return success()\n }\n\n commit('START_LOADING')\n try {\n const response = await this.$api.ready2Work.getReady2WorkStatus()\n commit('SET_READY2WORK', response.data)\n return response\n } catch (ex) {\n toast.error(this.$i18n.t('error.genericFailedRequestMessage'))\n return fail({\n error: await dispatch('logException', ex, { root: true }),\n })\n } finally {\n commit('FINISH_LOADING')\n }\n },\n /**\n * @param {Object} param0\n * @param {R2WAvailabilityStatusViewModel} newValue\n */\n setReady2Work({ commit }, newValue) {\n commit('SET_READY2WORK', newValue)\n },\n /**\n * Resets store to default state.\n */\n clear({ commit }) {\n commit('CLEAR_STORE')\n },\n },\n}\n","import { fail } from '@helpers/result-helper'\nimport toast from '@/services/toasts/index.js'\nimport dayjs from '@/services/date'\n/* eslint-disable no-unused-vars */\nimport CandidateBookingOverviewAvailabilityViewModel from '@/models/booking/candidateBookingOverviewAvailabilityViewModel'\nimport AvailabilityStatusDTO from '@/models/availability/availabilityStatusDTO'\nimport ScheduledAvailabilityViewModel from '@/models/availability/scheduledAvailabilityViewModel'\nimport OngoingAvailabilityViewModel from '@/models/availability/ongoingAvailabilityViewModel'\nimport { AvailabilityStatus } from '@/constants/candidate/AvailabilityStatus'\nimport { DayOfWeek } from '@/constants/date/DayOfWeek'\nimport { Ready2WorkStatus } from '@/constants/candidate/Ready2WorkStatus'\nimport { getSavedState, saveState } from '@/helpers/cache-helpers'\nimport AvailabilityCalendarSelectionMode from '@/constants/availability/AvailabilityCalendarSelectionMode'\nimport R2WAvailabilityStatusViewModel from '@/models/availability/r2WAvailabilityStatusViewModel'\n\nconst getDefaultState = () => {\n return {\n // Place any new state properties here\n loadingCount: 0,\n crudLoadingCount: 0,\n loadingOngoingAvailabilityCount: 0,\n scheduledAvailability: [],\n ongoingAvailability: null,\n availabilityCalendarSelectionMode: getSavedState(\n 'availabilityCalendarSelectionMode'\n ),\n }\n}\n\nconst state = getDefaultState()\n\nexport default {\n namespaced: true,\n\n /**\n * @typedef {{\n * loadingCount: Number\n * crudLoadingCount: Number\n * scheduledAvailability: ScheduledAvailabilityViewModel[]\n * ongoingAvailability: OngoingAvailabilityViewModel\n * }} AvailabilityState\n * @type {AvailabilityState}\n */\n state,\n getters: {\n moduleName: () => 'availability',\n isLoading: (state) => state.loadingCount > 0,\n isLoadingCRUD: (state) => state.crudLoadingCount > 0,\n isLoadingOngoingAvailability: (state) =>\n state.loadingOngoingAvailabilityCount > 0,\n scheduledAvailability: (state) => state.scheduledAvailability,\n ongoingAvailability: (state) => state.ongoingAvailability,\n getAvailabilityStatusByDate: (state) => (targetDate) => {\n const foundScheduledAvailability = state.scheduledAvailability.find((x) =>\n dayjs(x.dateLocal).isSame(dayjs(targetDate))\n )\n if (foundScheduledAvailability) {\n return foundScheduledAvailability\n }\n // read from ongoing availability if scheduled is not found\n const resultFromOngoing = new ScheduledAvailabilityViewModel({\n dateLocal: targetDate,\n status: null,\n partialRanges: [],\n })\n if (!state.ongoingAvailability) {\n resultFromOngoing.status = AvailabilityStatus.UNSET\n return resultFromOngoing\n }\n const dayOfWeek = dayjs(targetDate).day() // returns number that matches DayOfWeek enum\n switch (dayOfWeek) {\n case DayOfWeek.MONDAY:\n resultFromOngoing.status = state.ongoingAvailability.monday\n return resultFromOngoing\n case DayOfWeek.TUESDAY:\n resultFromOngoing.status = state.ongoingAvailability.tuesday\n return resultFromOngoing\n case DayOfWeek.WEDNESDAY:\n resultFromOngoing.status = state.ongoingAvailability.wednesday\n return resultFromOngoing\n case DayOfWeek.THURSDAY:\n resultFromOngoing.status = state.ongoingAvailability.thursday\n return resultFromOngoing\n case DayOfWeek.FRIDAY:\n resultFromOngoing.status = state.ongoingAvailability.friday\n return resultFromOngoing\n case DayOfWeek.SATURDAY:\n resultFromOngoing.status = state.ongoingAvailability.saturday\n return resultFromOngoing\n case DayOfWeek.SUNDAY:\n resultFromOngoing.status = state.ongoingAvailability.sunday\n return resultFromOngoing\n default:\n resultFromOngoing.status = AvailabilityStatus.UNSET\n return resultFromOngoing\n }\n },\n availabilityCalendarSelectionMode: (state) =>\n state.availabilityCalendarSelectionMode,\n },\n mutations: {\n START_LOADING(state) {\n state.loadingCount++\n },\n FINISH_LOADING(state) {\n state.loadingCount--\n },\n START_LOADING_CRUD(state) {\n state.crudLoadingCount++\n },\n FINISH_LOADING_CRUD(state) {\n state.crudLoadingCount--\n },\n START_LOADING_ONGOING_AVAILABILITY(state) {\n state.loadingOngoingAvailabilityCount++\n },\n FINISH_LOADING_ONGOING_AVAILABILITY(state) {\n state.loadingOngoingAvailabilityCount--\n },\n /**\n * Updates the scheduled availability in the store\n * @param {AvailabilityState} state\n * @param {ScheduledAvailabilityViewModel[]} scheduledAvailabiltyList\n */\n UPDATE_SCHEDULED_AVAILABILITY_MULTI(state, scheduledAvailabiltyList) {\n let foundScheduledAvailability\n\n for (const availability of scheduledAvailabiltyList) {\n foundScheduledAvailability = state.scheduledAvailability.find((x) =>\n dayjs(x.dateLocal).isSame(dayjs(availability.dateLocal))\n )\n\n if (!foundScheduledAvailability) {\n state.scheduledAvailability.push(availability)\n } else {\n Object.assign(foundScheduledAvailability, availability)\n }\n }\n },\n /**\n * Updates the scheduled availability in the store with new updates\n * @param {AvailabilityState} state\n * @param {AvailabilityStatusDTO} newAvailabilities\n */\n UPDATE_SCHEDULED_AVAILABITLITY_WITH_NEW_UPDATES(state, newAvailabilities) {\n let foundScheduledAvailability\n\n for (const date of newAvailabilities.selectedDates) {\n foundScheduledAvailability = state.scheduledAvailability.find((x) =>\n dayjs(x.dateLocal).isSame(dayjs(date))\n )\n\n const newScheduledAvailabilityVM = new ScheduledAvailabilityViewModel({\n dateLocal: date,\n status: newAvailabilities.status,\n partialRanges: newAvailabilities.partialRanges,\n })\n\n if (!foundScheduledAvailability) {\n state.scheduledAvailability.push(newScheduledAvailabilityVM)\n } else {\n Object.assign(foundScheduledAvailability, newScheduledAvailabilityVM)\n }\n }\n },\n UPDATE_ONGOING_AVAILABILITY(state, ongoingAvailability) {\n state.ongoingAvailability = ongoingAvailability\n },\n CLEAR_STORE(state) {\n // Resets store to default state\n Object.assign(state, getDefaultState())\n },\n SET_AVAILABILITY_SELECT_MODE_RANGE(state) {\n state.availabilityCalendarSelectionMode =\n AvailabilityCalendarSelectionMode.range\n saveState(\n 'availabilityCalendarSelectionMode',\n AvailabilityCalendarSelectionMode.range\n )\n },\n SET_AVAILABILITY_SELECT_MODE_MULTISELECT(state) {\n state.availabilityCalendarSelectionMode =\n AvailabilityCalendarSelectionMode.multiselect\n saveState(\n 'availabilityCalendarSelectionMode',\n AvailabilityCalendarSelectionMode.multiselect\n )\n },\n },\n actions: {\n /**\n * Updates the scheduled and ongoing availability that are brought in from overview booking\n * @param {object} VuexAction\n * @param {CandidateBookingOverviewAvailabilityViewModel} availabilty\n */\n async insertAvailability({ commit }, availabilty) {\n commit('UPDATE_SCHEDULED_AVAILABILITY_MULTI', availabilty.scheduled)\n commit('UPDATE_ONGOING_AVAILABILITY', availabilty.ongoing)\n },\n /**\n * Updates a candidate's availability for multiple days.\n * @param {object} VuexAction\n * @param {AvailabilityStatusDTO} newAvailabilities\n * @returns\n */\n async setAvailabilityStatus(\n { commit, dispatch, rootGetters },\n newAvailabilities\n ) {\n commit('START_LOADING')\n try {\n const response = await this.$api.availability.setAvailabilityStatus(\n newAvailabilities\n )\n\n let statusText = null\n switch (newAvailabilities.status) {\n case AvailabilityStatus.AVAILABLE:\n statusText = this.$i18n\n .t('availability.availableStatus')\n .toLowerCase()\n break\n case AvailabilityStatus.UNAVAILABLE:\n statusText = this.$i18n\n .t('availability.notAvailableStatus')\n .toLowerCase()\n break\n case AvailabilityStatus.PARTIAL:\n statusText = this.$i18n\n .t('availability.partialStatus')\n .toLowerCase()\n break\n default:\n statusText = this.$i18n\n .t('availability.undefinedStatus')\n .toLowerCase()\n }\n\n const successToastMessage = this.$i18n.t(\n 'availability.successfulStatusChangeMessage',\n {\n newStatus: statusText,\n relevantDate:\n newAvailabilities.selectedDates.length > 1\n ? this.$i18n.t('availability.selectedDatesText').toLowerCase()\n : this.$i18n.d(\n dayjs(newAvailabilities.selectedDates[0]),\n 'dateShort'\n ),\n }\n )\n toast.success(successToastMessage)\n\n commit(\n 'UPDATE_SCHEDULED_AVAILABITLITY_WITH_NEW_UPDATES',\n newAvailabilities\n )\n // update R2W if the date for availability contains active date\n const r2WStatusOnActiveDay =\n rootGetters['ready2Work/r2WStatusOnActiveDay']\n if (\n r2WStatusOnActiveDay &&\n r2WStatusOnActiveDay.ready2Work !== Ready2WorkStatus.UNSET &&\n newAvailabilities.selectedDates.some((date) =>\n dayjs(r2WStatusOnActiveDay.activeDateLocal).isSame(dayjs(date))\n )\n ) {\n const updatedR2WStatusOnActiveDay =\n new R2WAvailabilityStatusViewModel(r2WStatusOnActiveDay)\n updatedR2WStatusOnActiveDay.ready2Work = Ready2WorkStatus.UNSET\n await dispatch(\n 'ready2Work/setReady2Work',\n updatedR2WStatusOnActiveDay,\n {\n root: true,\n }\n )\n }\n return response\n } catch (ex) {\n toast.error(this.$i18n.t('error.genericFailedRequestMessage'))\n return fail({\n error: await dispatch('logException', ex, { root: true }),\n })\n } finally {\n commit('FINISH_LOADING')\n }\n },\n async updateAvailability({ commit }, newScheduledAvailability) {\n commit('UPDATE_SCHEDULED_AVAILABILITY_MULTI', [newScheduledAvailability])\n },\n toggleAvailabilitySelectionMode({ commit, getters }) {\n getters.availabilityCalendarSelectionMode ===\n AvailabilityCalendarSelectionMode.multiselect\n ? commit('SET_AVAILABILITY_SELECT_MODE_RANGE')\n : commit('SET_AVAILABILITY_SELECT_MODE_MULTISELECT')\n },\n /**\n * Sets a candidate's ongoing/permanent availability\n * @param {*} param0\n * @param {OngoingAvailabilityViewModel} payload\n */\n async setOngoingAvailability({ commit, dispatch }, payload) {\n commit('START_LOADING_ONGOING_AVAILABILITY')\n try {\n const response = await this.$api.availability.setOngoingAvailability(\n payload\n )\n commit('UPDATE_ONGOING_AVAILABILITY', payload)\n return response\n } catch (ex) {\n toast.error(this.$i18n.t('error.genericFailedRequestMessage'))\n return fail({\n error: await dispatch('logException', ex, { root: true }),\n })\n } finally {\n commit('FINISH_LOADING_ONGOING_AVAILABILITY')\n }\n },\n /**\n * Resets store to default state.\n */\n clear({ commit }) {\n commit('CLEAR_STORE')\n },\n },\n}\n","/* eslint-disable no-unused-vars */\nimport GenericFileModel from '../file/genericFileModel'\nimport WorkExperienceDotPointDTO from './workExperienceDotPointDTO'\n\n/**\n * @class\n * @public\n */\nexport default class WorkExperienceUploadFormDTO {\n /**\n * @constructor\n * @param {Object, isCurrent: Boolean, files: Array>} param0\n */\n constructor({\n placeOfWork = null,\n positionHeld = null,\n dateFrom = null,\n dateUntil = null,\n details = null,\n dotPoints = [],\n isCurrent = false,\n files = [],\n } = {}) {\n /**\n * @type {String}\n */\n this.placeOfWork = placeOfWork\n\n /**\n * @type {String}\n */\n this.positionHeld = positionHeld\n\n /**\n * @type {Date}\n */\n this.dateFrom = dateFrom\n\n /**\n * @type {Date}\n */\n this.dateUntil = dateUntil\n\n /**\n * @type {String}\n */\n this.details = details\n\n /**\n * @type {Array}\n */\n this.dotPoints = dotPoints\n\n /**\n * Indicates if candidate is currently in role\n * @type {Boolean}\n */\n this.isCurrent = isCurrent\n\n /**\n * @type {Array}\n */\n this.files = files\n }\n}\n","/* eslint-disable no-unused-vars */\nimport AccessGuiFileViewModel from '../file/accessGuiFileViewModel'\nimport WorkExperienceDotPointWithIdDTO from './workExperienceDotPointWithIdDTO'\nimport dayjs from '@/services/date/index'\n\n/**\n * @class\n * @public\n */\nexport default class WorkExperienceDetailsVM {\n /**\n * @constructor\n */\n constructor({\n id,\n placeOfWork = '',\n positionHeld = '',\n dateFrom = null,\n dateUntil = null,\n details = '',\n dotPoints = [],\n isCurrent = false,\n isVerified = false,\n files = [],\n createdDate = null,\n updatedDate = null,\n } = {}) {\n /**\n * @type {Number}\n */\n this.id = id\n\n /**\n * @type {String}\n */\n this.placeOfWork = placeOfWork ?? ''\n\n /**\n * @type {String}\n */\n this.positionHeld = positionHeld ?? ''\n\n /**\n * @type {Date}\n */\n this.dateFrom = dateFrom ? dayjs(dateFrom) : null\n\n /**\n * Will be null if isCurrent is true\n * @type {Date}\n */\n this.dateUntil = dateUntil ? dayjs(dateUntil) : null\n\n /**\n * A short summary of this position written by the candidate\n * @type {String}\n */\n this.details = details ?? ''\n\n /**\n * @type {Array}\n */\n this.dotPoints =\n dotPoints && dotPoints.length > 0\n ? dotPoints.map(\n (dotPoint) => new WorkExperienceDotPointWithIdDTO(dotPoint)\n )\n : []\n\n /**\n * Indicates if candidate is currently in role\n * @type {Boolean}\n */\n this.isCurrent = isCurrent\n\n /**\n * Indicates if this record has been verified by a consultant or by the system.\n * @type {Boolean}\n */\n this.isVerified = isVerified\n\n /**\n * @type {Array}\n */\n this.files =\n files && files.length > 0\n ? files.map((file) => new AccessGuiFileViewModel(file))\n : []\n\n /**\n * @type {Date}\n */\n this.createdDate = createdDate ? dayjs(createdDate) : null\n\n /**\n * @type {Date}\n */\n this.updatedDate = updatedDate ? dayjs(updatedDate) : null\n }\n}\n","import ApiErrorCodes from '@/constants/api/ApiErrorCodes'\nimport HttpStatusCodes from '@/constants/api/HttpStatusCodes'\n// eslint-disable-next-line no-unused-vars\nimport ErrorResponseDTO from '@/models/error/errorResponseDTO'\n\n// Factory\n\n/**\n * Factory to handle generating error messages for the work experience actions\n * @param {{actionName: String, error: ErrorResponseDTO, i18n: {t: Function}}} payload\n * @returns\n */\nexport function WorkExperienceActionErrorMessageFactory({\n actionName,\n error,\n i18n,\n}) {\n switch (actionName) {\n case 'deleteWorkExperience':\n return deleteWorkExperienceActionErrorMessageHandler({ error, i18n })\n default:\n return error?.message\n }\n}\n\n// Handlers\n\n/**\n * Generate error message for the deleteWorkExperience store action\n * @param {{error: ErrorResponseDTO, i18n: {t: Function}}} payload\n * @returns\n */\nconst deleteWorkExperienceActionErrorMessageHandler = ({ error, i18n }) => {\n let errorMessage = error.message\n\n switch (error?.error?.response?.status) {\n case HttpStatusCodes.NotFound:\n errorMessage = i18n.t('workExperience.view.recordNotFoundError')\n break\n case HttpStatusCodes.BadRequest:\n if (error.code === ApiErrorCodes.WorkExperience.CannotDeleteVerified)\n errorMessage = i18n.t('workExperience.view.deleteDisabledTooltip')\n break\n }\n\n return errorMessage\n}\n","import { extractFileNameFromContentDisposition } from '@helpers/file-helpers'\nimport { getType } from 'mime'\nimport { fail, success } from '@/helpers/result-helper.js'\nimport { isCacheFresh } from '@/helpers/cache-helpers'\nimport DurationUnits from '@/constants/date/DurationUnits.js'\nimport toast from '@/services/toasts/index.js'\nimport dayjs from '@/services/date/index.js'\nimport { processFilesForUpload } from '@/helpers/file-helpers'\n// eslint-disable-next-line no-unused-vars\nimport WorkExperienceUploadFormDTO from '@/models/workExperience/workExperienceUploadFormDTO'\nimport WorkExperienceUploadDTO from '@/models/workExperience/workExperienceUploadDTO'\nimport WorkExperienceDotPointDTO from '@/models/workExperience/workExperienceDotPointDTO'\nimport WorkExperienceSummaryModel from '@/models/workExperience/workExperienceSummaryModel'\n// eslint-disable-next-line no-unused-vars\nimport ResultDTO from '@/models/app/resultDTO'\nimport WorkExperienceDetailsVM from '@/models/workExperience/workExperienceDetailsVM'\nimport HttpHeaders from '@/constants/api/HttpHeaders'\nimport { isNonEmptyArray } from '@/helpers/array-helpers'\nimport { WorkExperienceActionErrorMessageFactory } from '@/services/workExperience/WorkExperienceActionErrorMessageFactory'\nimport DateFormatToken from '@/constants/date/DateFormatToken'\n\nconst getDefaultState = () => {\n return {\n workExperience: null,\n loadingWorkExperienceCount: 0,\n loadingCount: 0,\n crudLoadingCount: 0,\n loadingDetailsCount: 0,\n loadingDeleteCount: 0,\n loadingFile: [],\n }\n}\n\nconst state = getDefaultState()\n\nexport default {\n namespaced: true,\n /**\n * @typedef {{\n * workExperience: WorkExperienceDetailsVM\n * loadingWorkExperienceCount: Number\n * loadingCount: Number\n * crudLoadingCount: Number\n * loadingDetailsCount: Number\n * loadingDeleteCount: Number\n * loadingFile: Array\n * }} WorkExpState\n * @type {WorkExpState}\n */\n state,\n getters: {\n moduleName: () => 'work-experience',\n workExperience: (state) => state.workExperience?.list,\n isLoading: (state) => state.loadingCount > 0,\n isLoadingWorkExp: (state) => state.loadingWorkExperienceCount > 0,\n isLoadingCRUD: (state) => state.crudLoadingCount > 0,\n isLoadingDetails: (state) => state.loadingDetailsCount > 0,\n isLoadingDelete: (state) => state.loadingDeleteCount > 0,\n getDownloadFileLoadingState: (state) => (accessGui) =>\n state.loadingFile.includes(accessGui),\n isDownloadingFile: (state, getters) => (accessGui) =>\n !!getters.getDownloadFileLoadingState(accessGui),\n },\n mutations: {\n START_LOADING(state) {\n state.loadingCount++\n },\n FINISH_LOADING(state) {\n state.loadingCount--\n },\n START_LOADING_DETAILS(state) {\n state.loadingDetailsCount++\n },\n FINISH_LOADING_DETAILS(state) {\n state.loadingDetailsCount--\n },\n START_LOADING_WORK_EXP(state) {\n state.loadingWorkExperienceCount++\n },\n FINISH_LOADING_WORK_EXP(state) {\n state.loadingWorkExperienceCount--\n },\n START_LOADING_CRUD(state) {\n state.crudLoadingCount++\n },\n FINISH_LOADING_CRUD(state) {\n state.crudLoadingCount--\n },\n START_LOADING_DELETE(state) {\n state.loadingDeleteCount++\n },\n FINISH_LOADING_DELETE(state) {\n state.loadingDeleteCount--\n },\n START_DOWNLOADING_FILE(state, accessGui) {\n const alreadyExists = state.loadingFile.includes(accessGui)\n if (alreadyExists) return\n state.loadingFile.push(accessGui)\n },\n FINISH_DOWNLOADING_FILE(state, accessGui) {\n const foundIndex = state.loadingFile.findIndex(\n (cachedAccessGuid) => cachedAccessGuid === accessGui\n )\n if (foundIndex < 0) return\n state.loadingFile.splice(foundIndex, 1)\n },\n SET_WORK_EXP(state, workExperience) {\n const mappedWorkExp =\n !workExperience || workExperience.length === 0\n ? []\n : workExperience.map(\n (workExp) => new WorkExperienceSummaryModel(workExp)\n )\n\n state.workExperience = {\n list: mappedWorkExp,\n lastUpdated: dayjs(),\n isDirty: false,\n }\n },\n INSERT_WORK_EXPERIENCE(state, workExperience) {\n state.workExperience.list.push(\n new WorkExperienceSummaryModel(workExperience)\n )\n },\n SET_WORK_EXP_DIRTY(state) {\n if (!state.workExperience) return // Will prevent an exception if work exp aren't initialised\n state.workExperience.isDirty = true\n },\n REMOVE_WORK_EXPERIENCE(state, workExperienceId) {\n if (!isNonEmptyArray(state.workExperience?.list)) return\n\n const foundIndex = state.workExperience.list.findIndex(\n (workExperience) => workExperience.id === workExperienceId\n )\n // If not found, reload work exp summary list\n if (foundIndex < 0) {\n if (!state.workExperience) return\n state.workExperience.isDirty = true\n }\n\n state.workExperience.list.splice(foundIndex, 1)\n },\n CLEAR_STORE(state) {\n // Resets store to default state\n Object.assign(state, getDefaultState())\n },\n },\n actions: {\n /**\n * @param {{commit: Function, getters: Object, dispatch: Function}} vuexContext\n * @param {Boolean} forceRefresh\n * @returns {Promise}\n */\n async getWorkExperienceList({ commit, getters, dispatch }, forceRefresh) {\n // 1. Check if we already have the work exp cached\n if (\n isCacheFresh({\n cacheDuration: 1,\n durationUnits: DurationUnits.HOUR,\n lastUpdated: state.workExperience?.lastUpdated,\n forceRefresh,\n isDirty: state.workExperience?.isDirty,\n })\n )\n return success({ data: getters.workExperience })\n\n // 2. Fetch work exp from api\n commit('START_LOADING_WORK_EXP')\n\n try {\n const response = await this.$api.workExperience.get()\n commit('SET_WORK_EXP', response.data)\n return success({ data: getters.workExperience })\n } catch (ex) {\n toast.error(this.$i18n.t('workExperience.errorLoadWorkExperience'))\n return fail({\n error: await dispatch('logException', ex, { root: true }),\n })\n } finally {\n commit('FINISH_LOADING_WORK_EXP')\n }\n },\n /**\n * @param {{commit: Function, dispatch: Function}} vuexContext\n * @param {WorkExperienceUploadFormDTO} workExperienceToUpload\n * @returns {Promise}\n */\n async uploadWorkExperience({ commit, dispatch }, workExperienceToUpload) {\n const payload = new WorkExperienceUploadDTO({\n placeOfWork: workExperienceToUpload.placeOfWork?.trim(),\n positionHeld: workExperienceToUpload.positionHeld?.trim(),\n dateFrom: dayjs(workExperienceToUpload.dateFrom?.trim())\n .local()\n .format(DateFormatToken.YYYYMMDDT0),\n dateUntil: !workExperienceToUpload.isCurrent\n ? dayjs(workExperienceToUpload.dateUntil?.trim())\n .local()\n .format(DateFormatToken.YYYYMMDDT0)\n : null,\n details: workExperienceToUpload.details?.trim(),\n dotPoints: workExperienceToUpload.dotPoints.map(\n (dotPoint) =>\n new WorkExperienceDotPointDTO({\n type: dotPoint.type,\n value: dotPoint.value?.trim(),\n })\n ),\n isCurrent: workExperienceToUpload.isCurrent,\n files: await processFilesForUpload(workExperienceToUpload.files),\n })\n\n commit('START_LOADING_CRUD')\n try {\n const response = await this.$api.workExperience.post('', payload)\n commit('INSERT_WORK_EXPERIENCE', {\n id: response.data.id,\n placeOfWork: payload.placeOfWork,\n positionHeld: payload.positionHeld,\n dateFrom: payload.dateFrom,\n dateUntil: payload.dateUntil,\n employmentDays: 0,\n isCurrent: payload.isCurrent,\n isVerified: false,\n })\n return response\n } catch (ex) {\n const error = await dispatch('logException', ex, { root: true })\n toast.error(error.message)\n return fail({ error })\n } finally {\n commit('FINISH_LOADING_CRUD')\n }\n },\n /**\n * Retrieves work experience details by id\n * @param {{commit: Function, dispatch: Function}} vuexContext\n * @param {Number} workExpId\n * @returns {Promise}\n */\n async getWorkExperienceDetails({ commit, dispatch }, workExpId) {\n commit('START_LOADING_DETAILS')\n try {\n const result = await this.$api.workExperience.get(workExpId)\n result.data = new WorkExperienceDetailsVM(result.data)\n return result\n } catch (ex) {\n const error = await dispatch('logException', ex, { root: true })\n\n if (ex.response.status === 404) {\n error.message = this.$i18n.t(\n 'workExperience.view.recordNotFoundError'\n )\n }\n\n toast.error(error.message)\n return fail({ error, statusCode: ex.response.status })\n } finally {\n commit('FINISH_LOADING_DETAILS')\n }\n },\n /**\n * Downloads blob of the work experience file\n * @param {{commit: Function, dispatch: Function}} vuexContext\n * @param {{workExperienceId: Number, accessGui: String}} payload\n * @returns {Promise} Blob of the work experience file\n */\n async downloadWorkExperienceFile(\n { commit, dispatch },\n { workExperienceId, accessGui, disableToast = false }\n ) {\n commit('START_DOWNLOADING_FILE', accessGui)\n try {\n const response = await this.$api.workExperience.downloadFile({\n workExperienceId,\n accessGui,\n })\n const fileName = extractFileNameFromContentDisposition(\n response.headers[HttpHeaders.contentDisposition]\n )\n const blob = new Blob([response.data], {\n type: getType(fileName),\n })\n return success({ data: blob })\n } catch (ex) {\n if (!disableToast) {\n toast.error(this.$i18n.t('error.unableToLoadFile'))\n }\n return fail({\n error: await dispatch('logException', ex, { root: true }),\n })\n } finally {\n commit('FINISH_DOWNLOADING_FILE', accessGui)\n }\n },\n /**\n * Deletes a candidate's work experience record\n * @param {{commit: Function, dispatch: Function}} vuexContext\n * @param {Number} workExperienceId\n * @returns {Promise}\n */\n async deleteWorkExperience({ commit, dispatch }, workExperienceId) {\n commit('START_LOADING_DELETE')\n try {\n const response = await this.$api.workExperience.delete(workExperienceId)\n\n commit('REMOVE_WORK_EXPERIENCE', workExperienceId)\n\n toast.success(this.$i18n.t('workExperience.delete.successToastMessage'))\n\n return response\n } catch (ex) {\n const error = await dispatch('logException', ex, { root: true })\n toast.error(\n WorkExperienceActionErrorMessageFactory({\n actionName: 'deleteWorkExperience',\n error,\n i18n: this.$i18n,\n })\n )\n return fail({ error, statusCode: ex.response.status })\n } finally {\n commit('FINISH_LOADING_DELETE')\n }\n },\n /**\n * Resets store to default state.\n * @param {{commit: Function}} vuexContext\n */\n clear({ commit }) {\n commit('CLEAR_STORE')\n },\n },\n}\n","/* eslint-disable no-unused-vars */\nimport { QualificationGradeViewModel } from '@/models/qualification/qualificationGradeViewModel'\nimport AccessGuiFileViewModel from '@/models/file/accessGuiFileViewModel'\nimport dayjs from '@/services/date/index'\n\n/**\n * @class\n * @public\n */\nexport default class QualificationDetailsViewModel {\n constructor({\n id = null,\n institute = '',\n degree = '',\n completed = null,\n isVerified = false,\n grades = [],\n files = [],\n } = {}) {\n /**\n * Id of the qualification\n * @type {Number}\n */\n this.id = id\n\n /**\n * Name of the institute\n * @type {String}\n */\n this.institute = institute\n\n /**\n * Degree obtained\n * @type {String}\n */\n this.degree = degree\n\n /**\n * Date completed\n * @type {Date}\n */\n this.completed = completed ? dayjs(completed) : null\n\n /**\n * @type {Boolean}\n */\n this.isVerified = isVerified\n\n /**\n * Teaching methods qualified\n * @type {QualificationGradeViewModel[]}\n */\n this.grades = grades\n\n /**\n * @type {AccessGuiFileViewModel[]}\n */\n this.files =\n files && files.length > 0\n ? files.map((file) => new AccessGuiFileViewModel(file))\n : []\n }\n}\n","import ApiErrorCodes from '@/constants/api/ApiErrorCodes'\nimport HttpStatusCodes from '@/constants/api/HttpStatusCodes'\n// eslint-disable-next-line no-unused-vars\nimport ErrorResponseDTO from '@/models/error/errorResponseDTO'\n\n// Factory\n\n/**\n * Factory to handle generating error messages for the work experience actions\n @param {{actionName: String, error: ErrorResponseDTO, i18n: {t: Function}}} payload\n * @returns\n */\nexport function QualificationActionErrorMessageFactory({\n actionName,\n error,\n i18n,\n}) {\n switch (actionName) {\n case 'deleteQualification':\n return deleteQualificationActionErrorMessageHandler({ error, i18n })\n default:\n return error?.message\n }\n}\n\n// Handlers\n\n/**\n * Generate error message for the deleteWorkExperience store action\n * @param {{error: ErrorResponseDTO, i18n: {t: Function}}} payload\n * @returns\n */\nconst deleteQualificationActionErrorMessageHandler = ({ error, i18n }) => {\n let errorMessage = error.message\n\n switch (error?.error?.response?.status) {\n case HttpStatusCodes.NotFound:\n errorMessage = i18n.t('qualifications.view.recordNotFoundError')\n break\n case HttpStatusCodes.BadRequest:\n if (error.code === ApiErrorCodes.Qualifications.CannotDeleteVerified)\n errorMessage = i18n.t('qualifications.view.deleteDisabledTooltip')\n break\n }\n\n return errorMessage\n}\n","/* eslint-disable no-unused-vars */\nimport GenericFileModel from '../file/genericFileModel'\n\n/**\n * @class\n * @public\n */\nexport default class QualificationUploadFormDTO {\n /**\n * @constructor\n * @param {Object, files: Array>} param0\n */\n constructor({\n institute = null,\n degree = null,\n dateComplete = null,\n teachingMethods = [],\n files = [],\n } = {}) {\n /**\n * @type {String}\n */\n this.institute = institute\n /**\n * @type {String}\n */\n this.degree = degree\n /**\n * @type {Date}\n */\n this.dateComplete = dateComplete\n /**\n * @type {Array}\n */\n this.teachingMethods = teachingMethods\n /**\n * @type {Array}\n */\n this.files = files\n }\n}\n","import { extractFileNameFromContentDisposition } from '@helpers/file-helpers'\nimport { getType } from 'mime'\nimport { fail, success } from '@/helpers/result-helper.js'\nimport { isCacheFresh } from '@/helpers/cache-helpers'\nimport DurationUnits from '@/constants/date/DurationUnits.js'\nimport toast from '@/services/toasts/index.js'\nimport dayjs from '@/services/date/index.js'\nimport { processFilesForUpload } from '@/helpers/file-helpers'\nimport QualificationDetailsViewModel from '@/models/qualification/qualificationDetailsViewModel'\nimport HttpHeaders from '@/constants/api/HttpHeaders'\nimport { isNonEmptyArray } from '@/helpers/array-helpers'\nimport { QualificationActionErrorMessageFactory } from '@/services/qualifications/QualificationActionErrorMessageFactory'\nimport QualificationUploadDTO from '@/models/qualification/qualificationUploadDTO'\nimport DateFormatToken from '@/constants/date/DateFormatToken'\n\nconst getDefaultState = () => {\n return {\n // Place any new state properties here\n qualifications: null,\n loadingCount: 0,\n loadingQualificationsCount: 0,\n loadingDetailsCount: 0,\n crudLoadingCount: 0,\n loadingDeleteCount: 0,\n loadingFile: [],\n }\n}\n\nconst state = getDefaultState()\n\nexport default {\n namespaced: true,\n /**\n * @typedef {{\n * qualifications: QualificationDetailsViewModel\n * loadingCount: Number\n * loadingQualificationsCount: Number\n * loadingDetailsCount: Number\n * crudLoadingCount: Number\n * loadingDeleteCount: Number\n * loadingFile: Array\n * }} QualificationState\n * @type {QualificationState}\n */\n state,\n getters: {\n moduleName: () => 'qualifications',\n qualifications: (state) => state.qualifications?.list,\n isLoading: (state) => state.loadingCount > 0,\n isLoadingQualifications: (state) => state.loadingQualificationsCount > 0,\n isLoadingDetails: (state) => state.loadingDetailsCount > 0,\n isLoadingCRUD: (state) => state.crudLoadingCount > 0,\n isLoadingDelete: (state) => state.loadingDeleteCount > 0,\n getDownloadFileLoadingState: (state) => (accessGui) =>\n state.loadingFile.includes(accessGui),\n isDownloadingFile: (getters) => (accessGui) =>\n !!getters.getDownloadFileLoadingState(accessGui),\n },\n mutations: {\n START_LOADING(state) {\n state.loadingCount++\n },\n FINISH_LOADING(state) {\n state.loadingCount--\n },\n START_LOADING_QUALIFICATIONS(state) {\n state.loadingQualificationsCount++\n },\n FINISH_LOADING_QUALIFICATIONS(state) {\n state.loadingQualificationsCount--\n },\n START_LOADING_DETAILS(state) {\n state.loadingDetailsCount++\n },\n FINISH_LOADING_DETAILS(state) {\n state.loadingDetailsCount--\n },\n START_LOADING_CRUD(state) {\n state.crudLoadingCount++\n },\n FINISH_LOADING_CRUD(state) {\n state.crudLoadingCount--\n },\n START_LOADING_DELETE(state) {\n state.loadingDeleteCount++\n },\n FINISH_LOADING_DELETE(state) {\n state.loadingDeleteCount--\n },\n START_DOWNLOADING_FILE(state, accessGui) {\n const alreadyExists = state.loadingFile.includes(accessGui)\n if (alreadyExists) return\n state.loadingFile.push(accessGui)\n },\n FINISH_DOWNLOADING_FILE(state, accessGui) {\n const foundIndex = state.loadingFile.findIndex(\n (cachedAccessGuid) => cachedAccessGuid === accessGui\n )\n if (foundIndex < 0) return\n state.loadingFile.splice(foundIndex, 1)\n },\n SET_QUALIFICATIONS(state, qualifications) {\n state.qualifications = {\n list: qualifications,\n lastUpdated: dayjs(),\n isDirty: false,\n }\n },\n INSERT_QUALIFICATION(state, qualification) {\n state.qualifications.list.push(\n new QualificationDetailsViewModel(qualification)\n )\n },\n SET_QUALIFICATIONS_DIRTY(state) {\n if (!state.qualifications) return // Will prevent an exception if quals aren't initialised\n state.qualifications.isDirty = true\n },\n REMOVE_QUALIFICATION(state, qualificationId) {\n if (!isNonEmptyArray(state.qualifications?.list)) return\n const foundIndex = state.qualifications.list.findIndex(\n (qualification) => qualification.id === qualificationId\n )\n // If not found, reload work exp summary list\n if (foundIndex < 0) {\n if (!state.qualifications) return\n state.qualifications.isDirty = true\n }\n\n state.qualifications.list.splice(foundIndex, 1)\n },\n CLEAR_STORE(state) {\n // Resets store to default state\n Object.assign(state, getDefaultState())\n },\n },\n actions: {\n /**\n * @param {{commit: Function, getters: Function, dispatch: Function}} VuexAction\n * @param {Boolean} forceRefresh\n * @returns {Promise}\n */\n async getQualificationsList({ commit, getters, dispatch }, forceRefresh) {\n // 1. Check if we already have the quals cached\n if (\n isCacheFresh({\n cacheDuration: 1,\n durationUnits: DurationUnits.HOUR,\n lastUpdated: state.qualifications?.lastUpdated,\n forceRefresh,\n isDirty: state.qualifications?.isDirty,\n })\n )\n return success({ data: getters.qualifications })\n\n // 2. Fetch quals from api\n commit('START_LOADING_QUALIFICATIONS')\n try {\n const response = await this.$api.qualifications.get()\n commit('SET_QUALIFICATIONS', response.data)\n return success({ data: getters.qualifications })\n } catch (ex) {\n toast.error(this.$i18n.t('qualifications.errorQualificationsLoad'))\n return fail({\n error: await dispatch('logException', ex, { root: true }),\n })\n } finally {\n commit('FINISH_LOADING_QUALIFICATIONS')\n }\n },\n /**\n * @param {{commit: Function, dispatch: Function}} VuexAction\n * @param {*} qualificationToUpload\n * @returns {Promise}\n */\n async uploadQualification({ commit, dispatch }, qualificationToUpload) {\n const payload = new QualificationUploadDTO({\n institute: qualificationToUpload.institute?.trim(),\n degree: qualificationToUpload.degree?.trim(),\n dateComplete: dayjs(qualificationToUpload.dateComplete?.trim())\n .local()\n .format(DateFormatToken.YYYYMMDDT0),\n teachingMethods: qualificationToUpload.teachingMethods,\n files: await processFilesForUpload(qualificationToUpload.files),\n })\n\n commit('START_LOADING_CRUD')\n try {\n const response = await this.$api.qualifications.post('', payload)\n commit('INSERT_QUALIFICATION', {\n id: response.data.id,\n institute: payload.institute,\n degree: payload.degree,\n completed: payload.dateComplete,\n isVerified: false,\n grades: payload.teachingMethods,\n files: [],\n })\n commit('SET_QUALIFICATIONS_DIRTY')\n return response\n } catch (ex) {\n const error = await dispatch('logException', ex, { root: true })\n toast.error(error.message)\n return fail({ error })\n } finally {\n commit('FINISH_LOADING_CRUD')\n }\n },\n /**\n * Retrieves qualification details for the specified Id.\n * @param {{commit: Function, dispatch: Function}} VuexAction\n * @param {Number} qualificationId\n * @returns {Promise} Object with details on qualification\n */\n async getQualificationDetails({ commit, dispatch }, qualificationId) {\n commit('START_LOADING_DETAILS')\n try {\n const response = await this.$api.qualifications.getQualificationDetails(\n qualificationId\n )\n response.data = new QualificationDetailsViewModel(response.data)\n return response\n } catch (ex) {\n const error = await dispatch('logException', ex, { root: true })\n toast.error(error.message)\n return fail({ error })\n } finally {\n commit('FINISH_LOADING_DETAILS')\n }\n },\n /**\n * Downloads blob of the qualification file\n * @param {{commit: Function, dispatch: Function}} VuexAction\n * @param {Number} qualificationId\n * @param {Guid} accessGuid Guid of the file\n * @returns {Promise} Blob of the qualification file\n */\n async downloadQualificationFile(\n { commit, dispatch },\n { qualificationId, accessGui, disableToast = false }\n ) {\n commit('START_DOWNLOADING_FILE', accessGui)\n try {\n const response =\n await this.$api.qualifications.downloadQualificationFile(\n qualificationId,\n accessGui\n )\n const fileName = extractFileNameFromContentDisposition(\n response.headers[HttpHeaders.contentDisposition]\n )\n const blob = new Blob([response.data], {\n type: getType(fileName),\n })\n return success({ data: blob })\n } catch (ex) {\n if (!disableToast) {\n toast.error(\n this.$i18n.t('qualifications.view.unableToLoadErrorTitle')\n )\n }\n return fail({\n error: await dispatch('logException', ex, { root: true }),\n })\n } finally {\n commit('FINISH_DOWNLOADING_FILE', accessGui)\n }\n },\n async deleteQualification({ commit, dispatch }, qualificationId) {\n commit('START_LOADING_DELETE')\n try {\n const response = await this.$api.qualifications.delete(qualificationId)\n commit('REMOVE_QUALIFICATION', qualificationId)\n\n toast.success(this.$i18n.t('qualifications.delete.successToastMessage'))\n return response\n } catch (ex) {\n const error = await dispatch('logException', ex, { root: true })\n toast.error(\n QualificationActionErrorMessageFactory({\n actionName: 'deleteQualification',\n error,\n i18n: this.$i18n,\n })\n )\n return fail({ error, statusCode: ex.response.status })\n } finally {\n commit('FINISH_LOADING_DELETE')\n }\n },\n /**\n * Resets store to default state.\n */\n clear({ commit }) {\n commit('CLEAR_STORE')\n },\n },\n}\n","/* eslint-disable no-unused-vars */\nimport dayjs from '@/services/date/index'\n\n/**\n * @class\n * @public\n */\nexport default class CertificationListItemVM {\n /**\n * @constructor\n */\n constructor({\n id,\n expireStatus = '',\n ignoreExpiry = false,\n dateExpiry = null,\n dateObtained = null,\n isVerified = false,\n certRefNo = '',\n candidateTimeZone = '',\n firstParentId = 0,\n reminderDays = 0,\n title = '',\n typeId = 0,\n } = {}) {\n /**\n * @type {Number}\n */\n this.id = id\n\n /**\n * @type {String}\n * @see {ExpireStatus} for valid value range\n */\n this.expireStatus = expireStatus\n\n /**\n * @type {Boolean}\n */\n this.ignoreExpiry = ignoreExpiry\n\n /**\n * @type {Date}\n */\n this.dateExpiry = dateExpiry ? dayjs(dateExpiry) : null\n\n /**\n * @type {Date}\n */\n this.dateObtained = dateObtained ? dayjs(dateObtained) : null\n\n /**\n * @type {Boolean}\n */\n this.isVerified = isVerified\n\n /**\n * @type {String}\n */\n this.certRefNo = certRefNo\n\n /**\n * @type {String}\n */\n this.title = title\n\n /**\n * @type {String}\n */\n this.candidateTimeZone = candidateTimeZone\n\n /**\n * @type {Number}\n */\n this.firstParentId = firstParentId\n\n /**\n * @type {Number}\n */\n this.reminderDays = reminderDays\n\n /**\n * @type {Number}\n */\n this.typeId = typeId\n }\n}\n","import ApiErrorCodes from '@/constants/api/ApiErrorCodes'\nimport HttpStatusCodes from '@/constants/api/HttpStatusCodes'\n// eslint-disable-next-line no-unused-vars\nimport ErrorResponseDTO from '@/models/error/errorResponseDTO'\n\n// Factory\n\n/**\n * Factory to handle generating error messages for certification actions\n * @param {{actionName: String, error: ErrorResponseDTO, i18n: {t: Function}}} payload\n * @returns\n */\nexport function CertificationActionErrorMessageFactory({\n actionName,\n error,\n i18n,\n}) {\n switch (actionName) {\n case 'deleteCertification':\n return deleteCertificationActionErrorMessageHandler({ error, i18n })\n default:\n return error?.message\n }\n}\n\n// Handlers\n\n/**\n * Generate error message for the deleteCertification store action\n * @param {{error: ErrorResponseDTO, i18n: {t: Function}}} payload\n * @returns\n */\nconst deleteCertificationActionErrorMessageHandler = ({ error, i18n }) => {\n let errorMessage = error.message\n\n switch (error?.error?.response?.status) {\n case HttpStatusCodes.NotFound:\n errorMessage = i18n.t('certifications.error.notFound')\n break\n case HttpStatusCodes.BadRequest:\n if (error.code === ApiErrorCodes.Certifications.CannotDeleteVerified)\n errorMessage = i18n.t('certifications.view.deleteDisabledTooltip')\n break\n }\n\n return errorMessage\n}\n","import { extractFileNameFromContentDisposition } from '@helpers/file-helpers'\nimport { getType } from 'mime'\nimport { fail, success } from '@/helpers/result-helper.js'\nimport { isCacheFresh } from '@/helpers/cache-helpers'\nimport DurationUnits from '@/constants/date/DurationUnits.js'\nimport toast from '@/services/toasts/index.js'\nimport dayjs from '@/services/date/index.js'\nimport { processFilesForUpload } from '@/helpers/file-helpers'\nimport CertificationDetailsVM from '@/models/certification/certificationDetailsVM'\nimport CertificationListItemVM from '@/models/certification/certificationListItemVM'\nimport HttpHeaders from '@/constants/api/HttpHeaders'\nimport { isNonEmptyArray } from '@/helpers/array-helpers'\nimport { CertificationActionErrorMessageFactory } from '@/services/certifications/CertificationActionErrorMessageFactory'\n\nconst getDefaultState = () => {\n return {\n certifications: null,\n certificationTypes: null,\n loadingCount: 0,\n loadingCertificationsCount: 0,\n loadingCertificationTypesCount: 0,\n loadingDetailsCount: 0,\n crudLoadingCount: 0,\n loadingFile: [],\n loadingDeleteCount: 0,\n }\n}\n\nconst state = getDefaultState()\n\nexport default {\n namespaced: true,\n state,\n getters: {\n moduleName: () => 'certifications',\n certifications: (state) => state.certifications?.list,\n certificationTypes: (state) => state.certificationTypes?.list,\n getTypeById: (state) => (typeId) =>\n state.certificationTypes?.list?.find((type) => type.id === typeId),\n isLoading: (state) => state.loadingCount > 0,\n isLoadingCertifications: (state) => state.loadingCertificationsCount > 0,\n isLoadingCertificationTypes: (state) =>\n state.loadingCertificationTypesCount > 0,\n isLoadingCRUD: (state) => state.crudLoadingCount > 0,\n isLoadingDetails: (state) => state.loadingDetailsCount > 0,\n isLoadingDelete: (state) => state.loadingDeleteCount > 0,\n isDownloadingFile: (state, getters) => (accessGui) =>\n !!getters.getDownloadFileLoadingState(accessGui),\n },\n mutations: {\n START_LOADING(state) {\n state.loadingCount++\n },\n FINISH_LOADING(state) {\n state.loadingCount--\n },\n START_LOADING_CERTIFICATIONS(state) {\n state.loadingCertificationsCount++\n },\n FINISH_LOADING_CERTIFICATIONS(state) {\n state.loadingCertificationsCount--\n },\n START_LOADING_CERTIFICATION_TYPES(state) {\n state.loadingCertificationTypesCount++\n },\n FINISH_LOADING_CERTIFICATION_TYPES(state) {\n state.loadingCertificationTypesCount--\n },\n START_LOADING_CRUD(state) {\n state.crudLoadingCount++\n },\n FINISH_LOADING_CRUD(state) {\n state.crudLoadingCount--\n },\n START_LOADING_DETAILS(state) {\n state.loadingDetailsCount++\n },\n FINISH_LOADING_DETAILS(state) {\n state.loadingDetailsCount--\n },\n START_LOADING_DELETE(state) {\n state.loadingDeleteCount++\n },\n FINISH_LOADING_DELETE(state) {\n state.loadingDeleteCount--\n },\n START_DOWNLOADING_FILE(state, accessGui) {\n const alreadyExists = state.loadingFile.includes(accessGui)\n if (alreadyExists) return\n state.loadingFile.push(accessGui)\n },\n FINISH_DOWNLOADING_FILE(state, accessGui) {\n const foundIndex = state.loadingFile.findIndex(\n (cachedAccessGuid) => cachedAccessGuid === accessGui\n )\n if (foundIndex < 0) return\n state.loadingFile.splice(foundIndex, 1)\n },\n SET_CERTIFICATIONS(state, certifications) {\n state.certifications = {\n list: certifications,\n lastUpdated: dayjs(),\n isDirty: false,\n }\n },\n SET_CERTIFICATION_TYPES(state, certificationTypes) {\n state.certificationTypes = {\n list: certificationTypes,\n lastUpdated: dayjs(),\n isDirty: false,\n }\n },\n SET_CERTIFCATIONS_DIRTY(state) {\n if (!state.certifications) return // Will prevent an exception if certs aren't initialised\n state.certifications.isDirty = true\n },\n REMOVE_CERTIFICATION(state, certificationId) {\n if (!isNonEmptyArray(state.certifications?.list)) return\n\n const foundIndex = state.certifications.list.findIndex(\n (cert) => cert.id === certificationId\n )\n // If not found, reload summary list\n if (foundIndex < 0) {\n if (!state.certifications) return\n state.certifications.isDirty = true\n }\n\n state.certifications.list.splice(foundIndex, 1)\n },\n INSERT_CERTIFICATION(state, certification) {\n const index = state.certifications.list.findIndex(\n (item) => item.typeId === certification.typeId\n )\n\n if (index > -1) {\n state.certifications.list.splice(\n index,\n 1,\n new CertificationListItemVM(certification)\n )\n } else {\n state.certifications.list.push(\n new CertificationListItemVM(certification)\n )\n }\n },\n CLEAR_STORE(state) {\n // Resets store to default state\n Object.assign(state, getDefaultState())\n },\n },\n actions: {\n /**\n * @param {*} param0\n * @param {Boolean} forceRefresh\n * @returns {Promise}\n */\n async getCertificationsList({ commit, getters, dispatch }, forceRefresh) {\n // 1. Check if we already have the certs cached\n if (\n isCacheFresh({\n cacheDuration: 1,\n durationUnits: DurationUnits.HOUR,\n lastUpdated: state.certifications?.lastUpdated,\n forceRefresh,\n isDirty: state.certifications?.isDirty,\n })\n )\n return success({ data: getters.certifications })\n\n // 2. Fetch certs from api\n commit('START_LOADING_CERTIFICATIONS')\n try {\n const response = await this.$api.certifications.get()\n const certListItems = response?.data.map(\n (cert) => new CertificationListItemVM(cert)\n )\n commit('SET_CERTIFICATIONS', certListItems)\n return success({ data: getters.certifications })\n } catch (ex) {\n toast.error(this.$i18n.t('certifications.errorLoadCertifications'))\n return fail({\n error: await dispatch('logException', ex, { root: true }),\n })\n } finally {\n commit('FINISH_LOADING_CERTIFICATIONS')\n }\n },\n /**\n * @param {*} param0\n * @param {Boolean} forceRefresh\n * @returns {Promise}\n */\n async getCertificationTypes({ commit, getters, dispatch }, forceRefresh) {\n // 1. Check if we already have the data cached\n if (\n isCacheFresh({\n cacheDuration: 1,\n durationUnits: DurationUnits.HOUR,\n lastUpdated: state.certificationTypes?.lastUpdated,\n forceRefresh,\n })\n )\n return success({ data: getters.certificationTypes })\n\n // 2. Fetch data from api\n commit('START_LOADING_CERTIFICATION_TYPES')\n\n try {\n const response = await this.$api.certifications.getCertTypes()\n commit('SET_CERTIFICATION_TYPES', response.data)\n return success({ data: getters.certificationTypes })\n } catch (ex) {\n toast.error(this.$i18n.t('certifications.errorLoadCertificationTypes'))\n return fail({\n error: await dispatch('logException', ex, { root: true }),\n })\n } finally {\n commit('FINISH_LOADING_CERTIFICATION_TYPES')\n }\n },\n /**\n * Inserts a certification. Will initialise certifications list if it hasn't\n * been already.\n * @param {*} param0\n * @param {*} certification\n */\n insertCertification({ commit, getters }, certification) {\n if (!isNonEmptyArray(getters.certifications)) {\n commit('SET_CERTIFICATIONS', [])\n }\n\n commit('INSERT_CERTIFICATION', certification)\n\n commit('SET_CERTIFCATIONS_DIRTY')\n },\n /**\n * @param {*} param0\n * @param {*} certificationToUpload\n * @returns {Promise}\n */\n async uploadCertification(\n { commit, dispatch, getters },\n certificationToUpload\n ) {\n const payload = {\n files: await processFilesForUpload(certificationToUpload.files),\n certificationData: certificationToUpload.certificationData,\n }\n\n commit('START_LOADING_CRUD')\n try {\n const response = await this.$api.certifications.post('', payload)\n\n const certTypeFound = isNonEmptyArray(getters.certificationTypes)\n ? getters.certificationTypes.find(\n (type) =>\n type.id === payload.certificationData.certificationTypeId\n )\n : null\n\n const certTypeTitle = certTypeFound ? certTypeFound.title : ''\n\n await dispatch('insertCertification', {\n id: response.data.id,\n expireStatus: response.data.expireStatus,\n dateExpiry: payload.certificationData.dateExpiry,\n dateObtained: payload.certificationData.dateObtained,\n certRefNo: payload.certificationData.certRefNo,\n isVerified: false,\n firstParentId: response.data.id,\n title: certTypeTitle,\n typeId: payload.certificationData.certificationTypeId,\n })\n\n return response\n } catch (ex) {\n const errorResponse = await dispatch('logException', ex, { root: true })\n toast.error(errorResponse.message)\n return fail({ error: errorResponse })\n } finally {\n commit('FINISH_LOADING_CRUD')\n }\n },\n /**\n * Retrieves certification details by id\n * @param {{commit: Function, dispatch: Function}} vuexContext\n * @param {Number} certificationId\n * @returns {Promise}\n */\n async getCertificationDetails({ commit, dispatch }, certificationId) {\n commit('START_LOADING_DETAILS')\n try {\n const result = await this.$api.certifications.get(certificationId)\n result.data = new CertificationDetailsVM(result.data)\n return result\n } catch (ex) {\n const error = await dispatch('logException', ex, { root: true })\n\n if (ex.response.status === 404) {\n error.message = this.$i18n.t(\n 'certifications.view.recordNotFoundError'\n )\n }\n\n toast.error(error.message)\n return fail({ error, statusCode: ex.response.status })\n } finally {\n commit('FINISH_LOADING_DETAILS')\n }\n },\n /**\n * Downloads blob of the certification file\n * @param {{commit: Function, dispatch: Function}} vuexContext\n * @param {{certificationId: Number, accessGui: String}} payload\n * @returns {Promise} Blob of the certification file\n */\n async downloadCertificationFile(\n { commit, dispatch },\n { certificationId, accessGui }\n ) {\n commit('START_DOWNLOADING_FILE', accessGui)\n try {\n const response = await this.$api.certifications.downloadFile({\n certificationId,\n accessGui,\n })\n const fileName = extractFileNameFromContentDisposition(\n response.headers[HttpHeaders.contentDisposition]\n )\n const blob = new Blob([response.data], {\n type: getType(fileName),\n })\n return success({ data: blob })\n } catch (ex) {\n toast.error(this.$i18n.t('error.unableToLoadFile'))\n return fail({\n error: await dispatch('logException', ex, { root: true }),\n })\n } finally {\n commit('FINISH_DOWNLOADING_FILE', accessGui)\n }\n },\n /**\n * Deletes a certification\n * @param {{commit: Function, dispatch: Function}} vuexContext\n * @param {Number} certificationId\n * @returns {Promise}\n */\n async deleteCertification({ commit, dispatch }, certificationId) {\n commit('START_LOADING_DELETE')\n try {\n const response = await this.$api.certifications.delete(certificationId)\n\n commit('REMOVE_CERTIFICATION', certificationId)\n\n toast.success(this.$i18n.t('certifications.deleteSuccessfulText'))\n\n return response\n } catch (ex) {\n const error = await dispatch('logException', ex, { root: true })\n toast.error(\n CertificationActionErrorMessageFactory({\n actionName: 'deleteCertification',\n error,\n i18n: this.$i18n,\n })\n )\n return fail({ error, statusCode: ex.response.status })\n } finally {\n commit('FINISH_LOADING_DELETE')\n }\n },\n /**\n * Resets store to default state.\n */\n clear({ commit }) {\n commit('CLEAR_STORE')\n },\n },\n}\n","import { fail, success } from '@/helpers/result-helper.js'\nimport { isCacheFresh } from '@/helpers/cache-helpers'\nimport DurationUnits from '@/constants/date/DurationUnits.js'\nimport toast from '@/services/toasts/index.js'\nimport dayjs from '@/services/date/index.js'\n\nconst getDefaultState = () => {\n return {\n // Place any new state properties here\n subjects: [],\n loadingCount: 0,\n crudLoadingCount: 0,\n }\n}\n\nconst state = getDefaultState()\n\nexport default {\n namespaced: true,\n state,\n getters: {\n moduleName: () => 'subjects',\n subjects: (state) => state.subjects?.list,\n isLoading: (state) => state.loadingCount > 0,\n isLoadingCRUD: (state) => state.crudLoadingCount > 0,\n },\n mutations: {\n START_LOADING(state) {\n state.loadingCount++\n },\n FINISH_LOADING(state) {\n state.loadingCount--\n },\n START_LOADING_CRUD(state) {\n state.crudLoadingCount++\n },\n FINISH_LOADING_CRUD(state) {\n state.crudLoadingCount--\n },\n SET_SUBJECTS(state, subjects) {\n state.subjects = {\n list: subjects,\n lastUpdated: dayjs(),\n }\n },\n CLEAR_STORE(state) {\n // Resets store to default state\n Object.assign(state, getDefaultState())\n },\n },\n actions: {\n /**\n * @param {*} param0\n * @param {Boolean} forceRefresh\n * @returns {Promise}\n */\n async getSubjectsList({ commit, getters, dispatch }, forceRefresh) {\n // 1. Check if we already have the list cached\n if (\n isCacheFresh({\n cacheDuration: 1,\n durationUnits: DurationUnits.HOUR,\n lastUpdated: state.subjects?.lastUpdated,\n forceRefresh,\n })\n )\n return success({ data: getters.subjects })\n\n // 2. Fetch list from api\n commit('START_LOADING')\n\n try {\n const response = await this.$api.subjects.get()\n commit('SET_SUBJECTS', response.data)\n return success({ data: getters.subjects })\n } catch (ex) {\n toast.error(this.$i18n.t('subjects.errorLoadSubjects'))\n return fail({\n error: await dispatch('logException', ex, { root: true }),\n })\n } finally {\n commit('FINISH_LOADING')\n }\n },\n /**\n * Resets store to default state.\n */\n clear({ commit }) {\n commit('CLEAR_STORE')\n },\n },\n}\n","/**\n * Used to identify errors thrown because a specific store resource\n * couldn't be found\n */\nexport default class StoreResourceNotFoundError extends Error {\n /**\n * @param {String} resourceName name of resource that wasn't found\n * @param {String} message replaces default message\n */\n constructor({ resourceName = null, message = null } = {}) {\n super(\n !message\n ? `Failed to find the following resource: '${resourceName}'`\n : message\n )\n this.name = 'StoreResourceNotFoundError'\n }\n}\n","/* eslint-disable no-unused-vars */\nimport CandidateBookingNavigationItemViewModel from './candidateBookingNavigationItemViewModel'\n\nexport default class CandidateBookingNavigationViewModel {\n constructor({\n next = new CandidateBookingNavigationItemViewModel(),\n previous = new CandidateBookingNavigationItemViewModel(),\n } = {}) {\n /**\n * @type {CandidateBookingNavigationItemViewModel}\n */\n this.next = next\n\n /**\n * @type {CandidateBookingNavigationItemViewModel}\n */\n this.previous = previous\n }\n}\n","/* eslint-disable no-unused-vars */\nimport CandidateBookingNavigationViewModel from './candidateBookingNavigationViewModel'\nimport $dayjs from '@/services/date/index.js'\n\nexport default class CandidateBookingNavigationDTO {\n constructor({\n bookingId,\n navigationItems = new CandidateBookingNavigationViewModel(),\n lastUpdated = $dayjs(),\n } = {}) {\n /**\n * @type {Number}\n */\n this.bookingId = bookingId\n\n /**\n * @type {CandidateBookingNavigationViewModel}\n */\n this.navigationItems = navigationItems\n\n /**\n * @type {Date}\n */\n this.lastUpdated = lastUpdated\n }\n}\n","/**\n * @class\n * @public\n */\nexport default class BookingOverviewBookingIndexDTO {\n constructor({ topLevelIndex, bookingIndex } = {}) {\n /**\n * @type {Number}\n */\n this.topLevelIndex = topLevelIndex\n /**\n * @type {Number}\n */\n this.bookingIndex = bookingIndex\n }\n}\n","/* eslint-disable no-unused-vars */\nimport CandidateBookingSummaryViewModel from './candidateBookingSummaryViewModel'\nimport { isNonEmptyArray } from '@/helpers/array-helpers'\n\n/**\n * @class\n * @public\n */\nexport default class CandidateBookingSummaryWrapperViewModel {\n constructor({ bookings = [] } = {}) {\n /**\n * @type {Array}\n */\n this.bookings = isNonEmptyArray(bookings)\n ? bookings.map((booking) => new CandidateBookingSummaryViewModel(booking))\n : []\n }\n}\n","import HttpStatusCodes from '@/constants/api/HttpStatusCodes'\nimport ShiftRecordErrorAlertType from '@/constants/booking/ShiftRecordErrorAlertType'\nimport InteractionType from '@/constants/core/InteractionType'\nimport VuetifyColourClass from '@/constants/core/VuetifyColourClass'\nimport ShiftRecordErrorDTO from '@/models/booking/shiftRecord/shiftRecordErrorDTO'\nimport ActionButton from '@/models/general/actionButton'\nimport EmitEvent from '@/models/general/emitEvent'\nimport Interaction from '@/models/general/interaction'\n\n/**\n * Generates a shift record error DTO for error codes sent with the response code 422\n * @param { { data: Object, status: Number } } response\n * @param {{ t: Function }} i18n\n * @returns\n */\nconst unprocessableEntityHandler = (response, i18n) => {\n const errorDto = new ShiftRecordErrorDTO({\n testId: response.data.code,\n showContactCard: true,\n actions: [\n new ActionButton({\n text: i18n.t('general.closeBtn'),\n icon: 'mdi-close',\n attributes: {\n outlined: true,\n large: true,\n class: 'mt-6',\n },\n interaction: new Interaction({\n type: InteractionType.emitEvent,\n value: new EmitEvent({ event: 'closeDialog' }),\n }),\n }),\n ],\n onLoadInteraction: new Interaction({\n type: InteractionType.emitEvent,\n value: null,\n }),\n })\n\n switch (response.data.code) {\n // Shift record was not compliant for specific region.\n // Error dto will contain markdown instructions to be\n // displayed in a dialog to the user.\n case 'shift_record_non_compliance':\n errorDto.alertType = ShiftRecordErrorAlertType.nonCompliant\n errorDto.actions = []\n errorDto.onLoadInteraction = null\n errorDto.message = response?.data?.message || errorDto.message\n break\n case 'shift_record_booking_already_cancelled':\n errorDto.alertType = ShiftRecordErrorAlertType.statusBlock\n errorDto.alertIcon = 'mdi-alert-circle-outline'\n errorDto.alertStyle = VuetifyColourClass.error\n errorDto.title = 'Unable to submit your shift details'\n errorDto.onLoadInteraction.value = new EmitEvent({\n event: 'modifyShiftRecordCache',\n value: 'removeBookingThatDidNotHappen',\n })\n errorDto.message = i18n.t(\n 'bookings.shiftRecord.submit.errors.bookingAlreadyCancelled'\n )\n break\n case 'shift_record_booking_already_invoiced':\n errorDto.alertType = ShiftRecordErrorAlertType.statusBlock\n errorDto.alertIcon = 'mdi-alert-circle-outline'\n errorDto.alertStyle = VuetifyColourClass.error\n errorDto.title = 'Unable to submit your shift details'\n errorDto.onLoadInteraction.value = new EmitEvent({\n event: 'modifyShiftRecordCache',\n value: 'updateBookingShiftRecordActionableItemToComplete',\n })\n errorDto.message = i18n.t(\n 'bookings.shiftRecord.submit.errors.bookingAlreadyFinalised'\n )\n break\n }\n\n return errorDto\n}\n\n/**\n * Default shift record error DTO generator\n * @param { { data: Object, status: Number } } response\n * @param {{ t: Function }} i18n\n * @returns\n */\nconst defaultStatusCodeHandler = (response, i18n) => {\n const errorDto = new ShiftRecordErrorDTO({\n testId: response.data.code,\n showContactCard: true,\n })\n\n switch (response.data.code) {\n case 'shift_record_break_duration_invalid_range':\n errorDto.message = i18n.t(\n 'bookings.shiftRecord.submit.errors.breakDurationInvalid'\n )\n break\n case 'shift_record_break_duration_out_of_bounds':\n errorDto.message = i18n.t(\n 'bookings.shiftRecord.submit.errors.breakDurationOutOfBounds'\n )\n break\n case 'shift_record_no_blocks':\n errorDto.message = i18n.t('bookings.shiftRecord.submit.errors.noBlocks')\n break\n case 'shift_record_booking_duration_not_found':\n errorDto.message = i18n.t(\n 'bookings.shiftRecord.submit.errors.bookingDurationMissing'\n )\n break\n case 'multiple_shift_record_booking_durations':\n errorDto.message = i18n.t(\n 'bookings.shiftRecord.submit.errors.multipleBookingDurations'\n )\n break\n case 'shift_record_booking_duration_start_time_invalid_format':\n errorDto.message = i18n.t(\n 'bookings.shiftRecord.submit.errors.bookingDurationStartTimeInvalid'\n )\n break\n case 'shift_record_booking_duration_end_time_invalid_format':\n errorDto.message = i18n.t(\n 'bookings.shiftRecord.submit.errors.bookingDurationEndTimeInvalid'\n )\n break\n case 'shift_record_booking_duration_invalid_range':\n errorDto.message = i18n.t(\n 'bookings.shiftRecord.submit.errors.bookingDurationInvalid'\n )\n break\n case 'shift_record_booking_not_found':\n errorDto.message = i18n.t(\n 'bookings.shiftRecord.submit.errors.bookingNotFound'\n )\n break\n case 'shift_record_booking_not_authorised':\n errorDto.message = i18n.t(\n 'bookings.shiftRecord.submit.errors.bookingNotAuthorised'\n )\n break\n case 'shift_record_already_exists':\n errorDto.alertType = ShiftRecordErrorAlertType.statusBlock\n errorDto.alertIcon = 'mdi-check-circle'\n errorDto.alertStyle = VuetifyColourClass.success\n errorDto.message = i18n.t(\n 'bookings.shiftRecord.alreadySubmitted.conflictDescription'\n )\n break\n case 'shift_record_break_start_time_invalid_format':\n errorDto.message = i18n.t(\n 'bookings.shiftRecord.submit.errors.breakStartTimeInvalid'\n )\n break\n case 'shift_record_break_end_time_invalid_format':\n errorDto.message = i18n.t(\n 'bookings.shiftRecord.submit.errors.breakEndTimeInvalid'\n )\n break\n case 'shift_record_break_duration_overlapping':\n errorDto.message = i18n.t(\n 'bookings.shiftRecord.submit.errors.breaksOverlapping'\n )\n break\n default:\n errorDto.message = i18n.t(\n 'bookings.shiftRecord.submit.errors.genericError'\n )\n break\n }\n\n return errorDto\n}\n\n/**\n * Determines the error message and action type based on the failure response from the server\n * @param { { data: Object, status: Number } } response\n * @param {{ t: Function }} i18n\n * @returns\n */\nconst shiftRecordPostErrorHandler = (response, i18n) => {\n switch (response.status) {\n case HttpStatusCodes.UnprocessableEntity:\n return unprocessableEntityHandler(response, i18n)\n default:\n return defaultStatusCodeHandler(response, i18n)\n }\n}\n\nexport default shiftRecordPostErrorHandler\n","import ShiftRecordErrorAlertType from '@/constants/booking/ShiftRecordErrorAlertType'\nimport InteractionType from '@/constants/core/InteractionType'\nimport VuetifyColourClass from '@/constants/core/VuetifyColourClass'\nimport ShiftRecordErrorDTO from '@/models/booking/shiftRecord/shiftRecordErrorDTO'\nimport ActionButton from '@/models/general/actionButton'\nimport EmitEvent from '@/models/general/emitEvent'\nimport Interaction from '@/models/general/interaction'\n\n/**\n * Determines the error message and action type based on the failure response from the server\n * @param { { data: Object, status: Number } } response\n * @param {{ t: Function }} i18n\n * @returns\n */\nconst shiftRecordDidNotHappenErrorHandler = (response, i18n) => {\n const errorDto = new ShiftRecordErrorDTO({\n testId: response.data.code,\n title: 'Unable to process your request',\n showContactCard: true,\n actions: [\n new ActionButton({\n text: i18n.t('general.closeBtn'),\n icon: 'mdi-close',\n attributes: {\n outlined: true,\n large: true,\n class: 'mt-6',\n },\n interaction: new Interaction({\n type: InteractionType.emitEvent,\n value: new EmitEvent({ event: 'closeDialog' }),\n }),\n }),\n ],\n })\n\n switch (response.data.code) {\n case 'booking_already_cancelled':\n errorDto.alertType = ShiftRecordErrorAlertType.statusBlock\n errorDto.alertIcon = 'mdi-check-circle-outline'\n errorDto.alertStyle = VuetifyColourClass.success\n break\n case 'booking_already_invoiced':\n errorDto.alertType = ShiftRecordErrorAlertType.statusBlock\n break\n case 'booking_not_found':\n errorDto.alertType = ShiftRecordErrorAlertType.statusBlock\n errorDto.alertIcon = 'mdi-help-circle-outline'\n errorDto.alertStyle = VuetifyColourClass.warning\n break\n case 'cancel_candidate_not_authorised':\n errorDto.alertType = ShiftRecordErrorAlertType.statusBlock\n break\n case 'invalid_booking_id':\n errorDto.alertType = ShiftRecordErrorAlertType.statusBlock\n break\n default: {\n errorDto.alertType = ShiftRecordErrorAlertType.alert\n break\n }\n }\n\n const errorMessageKey = `bookings.shiftRecord.didNotHappen.errors.${response.data.code}`\n\n const translationExists = i18n.t(errorMessageKey) !== errorMessageKey\n\n errorDto.message = translationExists\n ? i18n.t(`bookings.shiftRecord.didNotHappen.errors.${response.data.code}`)\n : i18n.t('bookings.shiftRecord.didNotHappen.errors.unhandledError', [\n response.data.code,\n ])\n\n return errorDto\n}\n\nexport default shiftRecordDidNotHappenErrorHandler\n","import ShiftRecordErrorAlertType from '@/constants/booking/ShiftRecordErrorAlertType'\nimport InteractionType from '@/constants/core/InteractionType'\nimport VuetifyColourClass from '@/constants/core/VuetifyColourClass'\nimport ShiftRecordErrorDTO from '@/models/booking/shiftRecord/shiftRecordErrorDTO'\nimport ActionButton from '@/models/general/actionButton'\nimport Interaction from '@/models/general/interaction'\n\n/**\n * Determines the error message and action type based on the failure response from the server\n * @param { { data: Object, status: Number } } response\n * @param {{ t: Function }} i18n\n * @returns\n */\nconst shiftRecordLoadErrorHandler = (response, i18n) => {\n const errorDto = new ShiftRecordErrorDTO({\n testId: response?.data?.code,\n title: i18n.t('bookings.shiftRecord.load.errors.unableToLoadTitle'),\n alertType: ShiftRecordErrorAlertType.statusBlock,\n actions: [\n new ActionButton({\n text: i18n.t('general.retryBtnText'),\n icon: 'mdi-refresh',\n testId: 'shift-record-dialog-submit-error-alert',\n attributes: {\n outlined: true,\n large: true,\n class: 'mt-6',\n },\n interaction: new Interaction({\n type: InteractionType.function,\n value: null,\n }),\n }),\n ],\n })\n\n switch (response.data.code) {\n case 'shift_record_booking_not_found':\n errorDto.alertIcon = 'mdi-help-circle'\n errorDto.alertStyle = VuetifyColourClass.warning\n break\n }\n\n const errorMessageKey = `bookings.shiftRecord.load.errors.${response.data.code}`\n\n const translationExists = i18n.t(errorMessageKey) !== errorMessageKey\n\n errorDto.message = translationExists\n ? i18n.t(errorMessageKey)\n : i18n.t('bookings.shiftRecord.load.errors.unhandledError', [\n response.data.code,\n ])\n\n return errorDto\n}\n\nexport default shiftRecordLoadErrorHandler\n","import { fail, success } from '@helpers/result-helper'\nimport { cloneDeep, sortBy } from 'lodash'\nimport toast from '@/services/toasts/index.js'\n// eslint-disable-next-line no-unused-vars\nimport RunningLatePayload from '@/models/booking/runningLatePayload'\n// eslint-disable-next-line no-unused-vars\nimport CandidateBookingOverviewViewModel from '@/models/booking/candidateBookingOverviewViewModel'\nimport DurationUnits from '@/constants/date/DurationUnits'\n// eslint-disable-next-line no-unused-vars\nimport DateRange from '@/models/general/dateRange'\n// eslint-disable-next-line no-unused-vars\nimport CandidateDateSpecificBookingsSummaryViewModel from '@/models/booking/candidateDateSpecificBookingsSummaryViewModel'\nimport BookingActionableItemType from '@/constants/booking/BookingActionableItemType'\n// eslint-disable-next-line no-unused-vars\nimport CandidateBookingOverviewWithActionableItemsViewModel from '@/models/booking/candidateBookingOverviewWithActionableItemsViewModel'\n// eslint-disable-next-line no-unused-vars\nimport CandidateBookingOverviewBookingItemViewModel from '@/models/booking/candidateBookingOverviewBookingItemViewModel'\nimport StoreResourceNotFoundError from '@/models/error/storeResourceNotFoundError'\nimport DateStripDisplayRange from '@/constants/date/DateStripDisplayRange'\nimport Duration from '@/models/general/duration'\nimport {\n calculateLoadRangeBasedWithBuffer,\n determineDateTense,\n} from '@/helpers/date-helpers'\nimport { generateBookingActions } from '@/helpers/booking-helpers'\n// eslint-disable-next-line no-unused-vars\nimport CandidateBookingNavigationViewModel from '@/models/booking/candidateBookingNavigationViewModel'\nimport CandidateBookingNavigationDTO from '@/models/booking/candidateBookingNavigationDTO'\nimport {\n checkCacheFreshness,\n getSavedState,\n saveState,\n} from '@/helpers/cache-helpers'\n// eslint-disable-next-line no-unused-vars\nimport TentativeFillRequestDTO from '@/models/booking/tentativeFillRequestDTO'\n// eslint-disable-next-line no-unused-vars\nimport TentativeActionResultViewModel from '@/models/booking/tentativeActionResultViewModel'\nimport TentativeFillAction from '@/constants/booking/TentativeFillAction'\nimport BookingOverviewBookingIndexDTO from '@/models/booking/bookingOverviewBookingIndexDTO'\n// eslint-disable-next-line no-unused-vars\nimport BookingDetailsGuestAccessRequestDTO from '@/models/booking/bookingDetailsGuestAccessRequestDTO'\n// eslint-disable-next-line no-unused-vars\nimport TentativeFillRequestAnonymousDTO from '@/models/booking/tentativeFillRequestAnonymousDTO'\n// eslint-disable-next-line no-unused-vars\nimport ResultDTO from '@/models/app/resultDTO'\nimport { isNonEmptyArray } from '@/helpers/array-helpers'\n// eslint-disable-next-line no-unused-vars\nimport CandidateBookingSummaryViewModel from '@/models/booking/candidateBookingSummaryViewModel'\nimport CandidateBookingSummaryWrapperViewModel from '@/models/booking/CandidateBookingSummaryWrapperViewModel'\nimport ShiftRecordDetailsViewModel from '@/models/booking/shiftRecord/shiftRecordDetailsViewModel'\n// eslint-disable-next-line no-unused-vars\nimport AddShiftRecordPayloadDTO from '@/models/booking/shiftRecord/addShiftRecordPayloadDTO'\nimport DateFormatToken from '@/constants/date/DateFormatToken'\nimport CandidateBookingDetailsViewModel from '@/models/booking/candidateBookingDetailsViewModel'\nimport shiftRecordPostErrorHandler from '@/services/bookings/ShiftRecordPostErrorHandler'\nimport shiftRecordDidNotHappenErrorHandler from '@/services/bookings/ShiftRecordDidNotHappenErrorHandler'\nimport shiftRecordLoadErrorHandler from '@/services/bookings/ShiftRecordLoadErrorHandler'\nimport CandidateClientAgreementsViewModel from '@/models/client/candidateClientAgreementsViewModel'\n// eslint-disable-next-line no-unused-vars\nimport { TimesheetOperationType } from '@/constants/booking/TimesheetOperationType'\n// eslint-disable-next-line no-unused-vars\nimport BookingStatus from '@/constants/booking/BookingStatus'\nimport ShiftRecordBlockType from '@/constants/booking/ShiftRecordBlockType'\nimport dayjs from '@/services/date/index.js'\n\nconst getDefaultState = () => {\n return {\n // Place any new state properties here\n loadingCount: 0,\n crudLoadingCount: 0,\n cachedOverviewBookingDateRanges: [], // A list of previously requested date ranges\n overviewBookings: [], // populates the date strip\n summaryBookings: null, // populates the timeline for a specific date\n summaryBookingsDate: null,\n navigationBookings: [],\n loadingOverviewBookingsCount: 0,\n loadingSummaryBookingsCount: 0,\n loadingRunningLateCount: 0,\n loadingNavigationBookingsCount: 0,\n loadingTentativeCount: 0,\n loadingAgreementsCount: 0,\n hideBookingGuestFooter: getSavedState('hideBookingGuestFooter'),\n loadingShiftRecordDetails: 0,\n loadingShiftRecordSubmit: 0,\n loadingShiftRecordDidNotHappen: 0,\n }\n}\n\nconst state = getDefaultState()\n\nexport default {\n namespaced: true,\n /**\n * @typedef {{\n * loadingCount: Number\n * crudLoadingCount: Number\n * cachedOverviewBookingDateRanges: DateRange[]\n * overviewBookings: CandidateBookingOverviewViewModel[]\n * summaryBookings: CandidateDateSpecificBookingsSummaryViewModel\n * navigationBookings: CandidateBookingNavigationDTO[]\n * loadingOverviewBookingsCount: Number\n * loadingSummaryBookingsCount: Number\n * loadingNavigationBookingsCount: Number\n * loadingTentativeCount: Number\n * loadingAgreementsCount: Number\n * hideBookingGuestFooter: Boolean\n * loadingShiftRecordDetails: Number\n * loadingShiftRecordSubmit: Number\n * loadingShiftRecordDidNotHappen: Number\n * }} BookingState\n * @type {BookingState}\n */\n state,\n getters: {\n moduleName: () => 'bookings',\n /**\n * @param {BookingState} state\n * @returns {CandidateBookingOverviewViewModel[]}\n */\n overviewBookings: (state) => state.overviewBookings,\n /**\n * @param {BookingState} state\n * @returns {CandidateDateSpecificBookingsSummaryViewModel}\n */\n summaryBookings: (state) => state.summaryBookings,\n summaryBookingsDate: (state) => state.summaryBookingsDate,\n /**\n * @param {BookingState} state\n * @returns {Null|CandidateBookingSummaryViewModel}\n */\n getSummaryBookingById: (state) => (bookingId) => {\n if (\n !state.summaryBookings?.bookings ||\n state.summaryBookings.bookings.length === 0\n )\n return null\n return state.summaryBookings.bookings.find(\n (booking) => booking.id === bookingId\n )\n },\n /**\n * @param {BookingState} state\n * @returns {Null|CandidateBookingSummaryViewModel[]}\n */\n getSummaryBookingsByIds: (state) => (bookingIds) => {\n if (\n !state.summaryBookings?.bookings ||\n state.summaryBookings.bookings.length === 0\n )\n return []\n\n return state.summaryBookings.bookings.filter((booking) =>\n bookingIds.includes(booking.id)\n )\n },\n isOverviewRangeCached: (state) => (dateRange) => {\n return state.cachedOverviewBookingDateRanges.some(\n (cachedDateRange) =>\n dateRange.start.isBetween(\n cachedDateRange.start,\n cachedDateRange.end,\n DurationUnits.DAY,\n '[]'\n ) &&\n dateRange.end.isBetween(\n cachedDateRange.start,\n cachedDateRange.end,\n DurationUnits.DAY,\n '[]'\n )\n )\n },\n cachedOverviewBookingDateRanges: (state) =>\n state.cachedOverviewBookingDateRanges,\n haveAnyOverviewBookingsBeenLoaded: (state) => {\n return (\n state.cachedOverviewBookingDateRanges &&\n state.cachedOverviewBookingDateRanges.length > 0\n )\n },\n /**\n *\n * @param {BookingState} state\n * @returns {CandidateBookingOverviewViewModel[]}\n */\n overviewBookingsWithinRange: (state) => (dateRange) => {\n return state.overviewBookings.filter((booking) =>\n booking.dateLocal.isBetween(dateRange.start, dateRange.end, '[]')\n )\n },\n /**\n * @param {BookingState} state\n * @returns {CandidateBookingOverviewBookingItemViewModel|null}\n */\n getOverviewBookingById: (state) => (bookingId) => {\n if (!state.overviewBookings || state.overviewBookings.length === 0)\n return null\n\n for (const overviewBookingSpecificDate of state.overviewBookings) {\n // Sanity check, date should have bookings\n if (\n !overviewBookingSpecificDate?.bookings ||\n overviewBookingSpecificDate.bookings.length === 0\n )\n continue\n\n const bookingFound = overviewBookingSpecificDate.bookings.find(\n (booking) => booking.id === bookingId\n )\n\n if (bookingFound) return bookingFound\n }\n },\n overviewBookingsWithPendingAgreements: (\n state,\n getters,\n rootState,\n rootGetters\n ) => {\n /**\n * @type {CandidateBookingOverviewViewModel[]}\n */\n const overviewBookings = cloneDeep(state.overviewBookings)\n\n if (!overviewBookings || overviewBookings.length === 0)\n return state.overviewBookings\n\n for (const overviewBookingSpecificDate of overviewBookings) {\n // Sanity check, date should have bookings\n if (\n !overviewBookingSpecificDate?.bookings ||\n overviewBookingSpecificDate.bookings.length === 0\n )\n continue\n\n for (const booking of overviewBookingSpecificDate.bookings) {\n const bookingClientHasPendingAgreements = rootGetters[\n 'clients/doesClientHavePendingAgreements'\n ](booking.clientId)\n\n if (!bookingClientHasPendingAgreements) continue\n\n booking.actionableItems.push(\n BookingActionableItemType.agreementsPending\n )\n\n booking.actionableItems = generateBookingActions(\n booking.actionableItems,\n determineDateTense(overviewBookingSpecificDate.dateLocal)\n )\n }\n }\n\n return overviewBookings\n },\n /**\n * @param {BookingState} state\n * @returns\n */\n flattenOverviewBookingsList: (state) => {\n if (!state.overviewBookings || state.overviewBookings.length === 0)\n return null\n\n const unflattenedBookingsList = []\n\n for (const overviewBookingSpecificDate of state.overviewBookings) {\n // Sanity check, date should have bookings\n if (\n !overviewBookingSpecificDate?.bookings ||\n overviewBookingSpecificDate.bookings.length === 0\n )\n continue\n\n unflattenedBookingsList.push(overviewBookingSpecificDate.bookings)\n }\n\n const flatBookingList = unflattenedBookingsList.flat()\n return flatBookingList\n },\n /**\n * @param {BookingState} state\n * @returns {Null|CandidateBookingNavigationDTO}\n */\n getNavigationBookingsDtoById: (state) => (bookingId) => {\n if (!state.navigationBookings || state.navigationBookings.length === 0)\n return null\n\n return state.navigationBookings.find(\n (booking) => booking.bookingId === bookingId\n )\n },\n /**\n * @param {BookingState} state\n * @returns {Null|CandidateBookingNavigationViewModel}\n */\n getNavigationBookingsById: (state, getters) => (bookingId) => {\n const navBookingsFound = getters.getNavigationBookingsDtoById(bookingId)\n return navBookingsFound ? navBookingsFound.navigationItems : null\n },\n /**\n * Retrieve the indexes to locate a booking via the passed in ID\n * @param {BookingState} state\n * @returns {BookingOverviewBookingIndexDTO}\n */\n findOverviewBookingIndexById: (state) => (bookingId) => {\n if (!state.overviewBookings || state.overviewBookings.length === 0)\n return null\n\n for (const [\n topLevelIndex,\n overviewBookingSpecificDate,\n ] of state.overviewBookings) {\n // Sanity check, date should have bookings\n if (\n !overviewBookingSpecificDate?.bookings ||\n overviewBookingSpecificDate.bookings.length === 0\n )\n continue\n\n const bookingFoundIndex =\n overviewBookingSpecificDate.bookings.findIndex(\n (booking) => booking.id === bookingId\n )\n\n if (bookingFoundIndex >= 0) {\n return new BookingOverviewBookingIndexDTO({\n topLevelIndex,\n bookingIndex: bookingFoundIndex,\n })\n }\n }\n\n return null\n },\n /**\n * Retrieve the indexes to locate bookings via the passed in IDs\n * @param {BookingState} state\n * @returns {BookingOverviewBookingIndexDTO}\n */\n findOverviewBookingIndexByIds: (state) => (bookingIds) => {\n if (!state.overviewBookings || state.overviewBookings.length === 0)\n return []\n\n const bookingIndexes = []\n\n for (const [\n topLevelIndex,\n overviewBookingSpecificDate,\n ] of state.overviewBookings.entries()) {\n // Sanity check, date should have bookings\n if (\n !overviewBookingSpecificDate?.bookings ||\n overviewBookingSpecificDate.bookings.length === 0\n )\n continue\n\n const bookingFoundIndex =\n overviewBookingSpecificDate.bookings.findIndex((booking) =>\n bookingIds.includes(booking.id)\n )\n\n if (bookingFoundIndex >= 0) {\n bookingIndexes.push(\n new BookingOverviewBookingIndexDTO({\n topLevelIndex,\n bookingIndex: bookingFoundIndex,\n })\n )\n }\n }\n\n return bookingIndexes\n },\n hideBookingGuestFooter: (state) => state.hideBookingGuestFooter,\n isLoading: (state) => state.loadingCount > 0,\n isLoadingCRUD: (state) => state.crudLoadingCount > 0,\n isLoadingOverviewBookings: (state) =>\n state.loadingOverviewBookingsCount > 0,\n isLoadingSummaryBookings: (state) => state.loadingSummaryBookingsCount > 0,\n isLoadingRunningLate: (state) => state.loadingRunningLateCount > 0,\n isLoadingNavigationBookings: (state) =>\n state.loadingNavigationBookingsCount > 0,\n isLoadingTentativeFill: (state) => state.loadingTentativeCount > 0,\n isLoadingAgreements: (state) => state.loadingAgreementsCount > 0,\n isLoadingShiftRecordDetails: (state) => state.loadingShiftRecordDetails > 0,\n isLoadingShiftRecordSubmit: (state) => state.loadingShiftRecordSubmit > 0,\n isLoadingDidNotHappenSubmit: (state) =>\n state.loadingShiftRecordDidNotHappen > 0,\n },\n mutations: {\n START_LOADING(state) {\n state.loadingCount++\n },\n FINISH_LOADING(state) {\n state.loadingCount--\n },\n START_LOADING_CRUD(state) {\n state.crudLoadingCount++\n },\n FINISH_LOADING_CRUD(state) {\n state.crudLoadingCount--\n },\n START_LOADING_OVERVIEW_BOOKINGS(state) {\n state.loadingOverviewBookingsCount++\n },\n FINISH_LOADING_OVERVIEW_BOOKINGS(state) {\n state.loadingOverviewBookingsCount--\n },\n START_LOADING_RUNNING_LATE(state) {\n state.loadingRunningLateCount++\n },\n FINISH_LOADING_RUNNING_LATE(state) {\n state.loadingRunningLateCount--\n },\n START_LOADING_NAVIGATION_BOOKINGS(state) {\n state.loadingNavigationBookingsCount++\n },\n FINISH_LOADING_NAVIGATION_BOOKINGS(state) {\n state.loadingNavigationBookingsCount--\n },\n START_LOADING_TENTATIVE(state) {\n state.loadingTentativeCount++\n },\n FINISH_LOADING_TENTATIVE(state) {\n state.loadingTentativeCount--\n },\n START_LOADING_AGREEMENTS(state) {\n state.loadingAgreementsCount++\n },\n FINISH_LOADING_AGREEMENTS(state) {\n state.loadingAgreementsCount--\n },\n START_LOADING_SHIFT_RECORD_DETAILS(state) {\n state.loadingShiftRecordDetails++\n },\n FINISH_LOADING_SHIFT_RECORD_DETAILS(state) {\n state.loadingShiftRecordDetails--\n },\n START_LOADING_SHIFT_RECORD_SUBMIT(state) {\n state.loadingShiftRecordSubmit++\n },\n FINISH_LOADING_SHIFT_RECORD_SUBMIT(state) {\n state.loadingShiftRecordSubmit--\n },\n START_LOADING_DID_NOT_HAPPEN_SUBMIT(state) {\n state.loadingShiftRecordDidNotHappen++\n },\n FINISH_LOADING_DID_NOT_HAPPEN_SUBMIT(state) {\n state.loadingShiftRecordDidNotHappen--\n },\n /**\n * @param {BookingState} state\n * @param {CandidateBookingOverviewViewModel[]} overviewBookingsVM\n */\n INSERT_OVERVIEW_BOOKINGS(state, overviewBookingsVM) {\n let found\n\n const mappedOverviewBookings = isNonEmptyArray(overviewBookingsVM)\n ? overviewBookingsVM.map(\n (booking) => new CandidateBookingOverviewViewModel(booking)\n )\n : []\n\n for (const booking of mappedOverviewBookings) {\n booking.dateLocal = dayjs(booking.dateLocal)\n found = state.overviewBookings.find((x) =>\n x.dateLocal.isSame(booking.dateLocal, DurationUnits.DAY)\n )\n\n if (!found) {\n state.overviewBookings.push(booking)\n } else {\n Object.assign(found, booking)\n }\n }\n\n state.overviewBookings = sortBy(state.overviewBookings, ['dateLocal'])\n },\n /**\n * @param {BookingState} state\n * @param {DateRange} dateRange\n */\n CACHE_OVERVIEW_DATERANGE_REQUEST(state, dateRange) {\n const found = state.cachedOverviewBookingDateRanges.find(\n (cachedDateRange) =>\n dateRange.start.isBetween(\n cachedDateRange.start,\n cachedDateRange.end,\n DurationUnits.DAY,\n '[]'\n ) &&\n dateRange.end.isBetween(\n cachedDateRange.start,\n cachedDateRange.end,\n DurationUnits.DAY,\n '[]'\n )\n )\n\n if (!found) {\n state.cachedOverviewBookingDateRanges.push(dateRange)\n } else {\n Object.assign(found, dateRange)\n }\n },\n START_LOADING_SUMMARY_BOOKINGS(state) {\n state.loadingSummaryBookingsCount++\n },\n FINISH_LOADING_SUMMARY_BOOKINGS(state) {\n state.loadingSummaryBookingsCount--\n },\n INSERT_SUMMARY_BOOKINGS(state, bookings) {\n state.summaryBookings = new CandidateBookingSummaryWrapperViewModel(\n bookings\n )\n },\n INSERT_SUMMARY_BOOKINGS_DATE(state, newValue) {\n state.summaryBookingsDate = newValue\n },\n CLEAR_STORE(state) {\n // Resets store to default state\n Object.assign(state, getDefaultState())\n },\n /**\n * @param {BookingState} state\n * @param {RunningLatePayload} payload\n * @param {Boolean} isRunningLate\n */\n SET_RUNNING_LATE_STATUS_FOR_SUMMARY_BOOKING(\n state,\n { payload, isRunningLate }\n ) {\n if (state.summaryBookings?.bookings) {\n const bookingFound = state.summaryBookings.bookings.find(\n (booking) => booking.id === payload.bookingId\n )\n\n if (!bookingFound)\n throw new StoreResourceNotFoundError({\n resourceName: 'summaryBooking',\n })\n\n bookingFound.isRunningLate = isRunningLate\n }\n },\n /**\n * @param {BookingState} state\n * @param {CandidateBookingNavigationDTO} payload\n */\n INSERT_NAVIGATION_BOOKING(state, payload) {\n const navBookingFound = state.navigationBookings.find(\n (booking) => booking.bookingId === payload.bookingId\n )\n\n if (!navBookingFound) {\n state.navigationBookings.push(payload)\n } else {\n Object.assign(navBookingFound, payload)\n }\n },\n /**\n * @param {BookingState} state\n * @param {BookingOverviewBookingIndexDTO[]} bookingIndexesList\n */\n UPDATE_OVERVIEW_BOOKINGS_WITH_ACCEPT_TENTATIVE_FILL_RESPONSE(\n state,\n bookingIndexesList\n ) {\n for (const bookingIndexes of bookingIndexesList) {\n const booking =\n state.overviewBookings[bookingIndexes.topLevelIndex].bookings[\n bookingIndexes.bookingIndex\n ]\n\n // Sanity check, booking should exist\n if (!booking) throw new StoreResourceNotFoundError('overviewBooking')\n\n // Remove tentative status\n booking.actionableItems = booking.actionableItems.filter(\n (actionableItem) =>\n actionableItem !== BookingActionableItemType.tentative\n )\n }\n },\n /**\n * @param {BookingState} state\n * @param {BookingOverviewBookingIndexDTO[]} bookingIndexesList\n */\n REMOVE_OVERVIEW_BOOKINGS_BY_INDEX_LIST(state, bookingIndexesList) {\n for (const bookingIndexes of bookingIndexesList) {\n const bookingListToUpdate =\n state.overviewBookings[bookingIndexes.topLevelIndex].bookings\n\n // Sanity check, booking should exist\n if (!bookingListToUpdate)\n throw new StoreResourceNotFoundError('overviewBooking')\n\n // Remove booking from list\n bookingListToUpdate.splice(bookingIndexes.bookingIndex, 1)\n }\n },\n /**\n * @param {BookingState} state\n * @param {Number[]} bookingIds\n */\n UPDATE_SUMMARY_BOOKINGS_WITH_ACCEPT_TENTATIVE_FILL_RESPONSE(\n state,\n bookingIds\n ) {\n if (!state.summaryBookings || state.summaryBookings.bookings.length === 0)\n return null\n\n if (!bookingIds || bookingIds.length === 0) return null\n\n const bookingsToUpdate = state.summaryBookings.bookings.filter(\n (booking) => bookingIds.includes(booking.id)\n )\n\n if (!bookingsToUpdate || bookingsToUpdate.length === 0) return 0\n\n for (const booking of bookingsToUpdate) {\n // Remove tentative status\n booking.actionableItems = booking.actionableItems.filter(\n (actionableItem) =>\n actionableItem !== BookingActionableItemType.tentative\n )\n }\n },\n /**\n * @param {BookingState} state\n * @param {Number[]} bookingIds\n */\n REMOVE_SUMMARY_BOOKINGS_BY_ID_LIST(state, bookingIds) {\n if (!state.summaryBookings || state.summaryBookings.bookings.length === 0)\n return null\n\n if (!bookingIds || bookingIds.length === 0) return null\n\n for (const bookingId of bookingIds) {\n const foundIndex = state.summaryBookings.bookings.findIndex(\n (booking) => booking.id === bookingId\n )\n\n if (foundIndex < 0) continue\n\n state.summaryBookings.bookings.splice(foundIndex, 1)\n }\n },\n HIDE_BOOKING_GUEST_FOOTER(state) {\n state.hideBookingGuestFooter = true\n saveState('hideBookingGuestFooter', true)\n },\n /**\n * Removes shift record actionable item from an summary booking\n * @param {BookingState} state\n * @param {Number} bookingId\n */\n UPDATE_SUMMARY_BOOKING_AS_SHIFT_RECORD_COMPLETE(state, bookingId) {\n if (!state.summaryBookings || state.summaryBookings.bookings.length === 0)\n return null\n\n if (!bookingId && bookingId < 0) return null\n\n const bookingToUpdate = state.summaryBookings.bookings.find(\n (booking) => bookingId === booking.id\n )\n\n const bookingShouldBeUpdated =\n bookingToUpdate &&\n bookingToUpdate.actionableItems.includes(\n BookingActionableItemType.confirmDetailsRequired\n )\n\n if (!bookingShouldBeUpdated) return null\n\n // Remove shift record actionable item\n bookingToUpdate.actionableItems = bookingToUpdate.actionableItems.filter(\n (actionableItem) =>\n actionableItem !== BookingActionableItemType.confirmDetailsRequired\n )\n\n // Set shift record as submitted\n bookingToUpdate.isShiftRecordSubmitted = true\n },\n /**\n * Updates a summary booking with the new details from the submitted shift record\n * @param {BookingState} state\n * @param {AddShiftRecordPayloadDTO} bookingId\n */\n UPDATE_SUMMARY_BOOKING_WITH_SHIFT_RECORD_DETAILS(state, payload) {\n if (!state.summaryBookings || state.summaryBookings.bookings.length === 0)\n return null\n\n if (!payload.bookingId && payload.bookingId < 0) return null\n\n const bookingToUpdate = state.summaryBookings.bookings.find(\n (booking) => payload.bookingId === booking.id\n )\n\n const bookingShouldBeUpdated =\n bookingToUpdate &&\n bookingToUpdate.actionableItems.includes(\n BookingActionableItemType.confirmDetailsRequired\n )\n\n if (!bookingShouldBeUpdated) return null\n\n // Remove shift record actionable item\n bookingToUpdate.actionableItems = bookingToUpdate.actionableItems.filter(\n (actionableItem) =>\n actionableItem !== BookingActionableItemType.confirmDetailsRequired\n )\n\n // Set shift record as submitted\n bookingToUpdate.isShiftRecordSubmitted = true\n\n const bookingDurationBlock = payload.blocks.find(\n (block) => block.type === ShiftRecordBlockType.bookingDuration\n )\n\n if (!bookingDurationBlock) return\n\n const newStartTime = dayjs(\n bookingDurationBlock.startTime,\n DateFormatToken.HHmm\n )\n const newEndTime = dayjs(\n bookingDurationBlock.endTime,\n DateFormatToken.HHmm\n )\n\n bookingToUpdate.startTimeLocal = dayjs(bookingToUpdate.startTimeLocal)\n .set('hour', newStartTime.hour())\n .set('minute', newStartTime.minute())\n bookingToUpdate.endTimeLocal = dayjs(bookingToUpdate.endTimeLocal)\n .set('hour', newEndTime.hour())\n .set('minute', newEndTime.minute())\n },\n /**\n * Removes shift record actionable item from an overview booking\n * @param {BookingState} state\n * @param {CandidateBookingOverviewBookingItemViewModel} overviewBooking\n */\n UPDATE_OVERVIEW_BOOKING_AS_SHIFT_RECORD_COMPLETE(state, overviewBooking) {\n const overviewBookingShouldBeUpdated =\n overviewBooking &&\n overviewBooking.actionableItems.includes(\n BookingActionableItemType.confirmDetailsRequired\n )\n\n if (!overviewBookingShouldBeUpdated) return\n\n // Remove shift record actionable item\n overviewBooking.actionableItems = overviewBooking.actionableItems.filter(\n (actionableItem) =>\n actionableItem !== BookingActionableItemType.confirmDetailsRequired\n )\n },\n },\n actions: {\n /**\n * @param {Object} vuex\n * @param {DateRange} dateRange\n * @returns {Promise}\n */\n async getOverviewBookingsInRange({ commit, getters, dispatch }, dateRange) {\n if (getters.isOverviewRangeCached(dateRange)) {\n return success({ data: getters.overviewBookingsWithinRange(dateRange) })\n }\n\n if (getters.isLoadingOverviewBookings) return Promise.resolve(success())\n\n commit('START_LOADING_OVERVIEW_BOOKINGS')\n try {\n /**\n * @type {{ status: Number, data: CandidateBookingOverviewWithActionableItemsViewModel }}\n */\n const response = await this.$api.bookings.getOverviewBookingsInRange(\n dateRange.start.format('YYYY-MM-DD'),\n dateRange.end.format('YYYY-MM-DD')\n )\n\n commit('CACHE_OVERVIEW_DATERANGE_REQUEST', dateRange)\n commit('INSERT_OVERVIEW_BOOKINGS', response.data.bookings)\n await dispatch(\n 'clients/insertActionableItems',\n response.data.actionableItems.clients,\n {\n root: true,\n }\n )\n await dispatch(\n 'availability/insertAvailability',\n response.data.availability,\n {\n root: true,\n }\n )\n\n return success({ data: getters.overviewBookings })\n } catch (ex) {\n toast.error(this.$i18n.t('bookings.unableToLoadOverviewBookingsError'))\n return fail({\n error: await dispatch('logException', ex, { root: true }),\n })\n } finally {\n commit('FINISH_LOADING_OVERVIEW_BOOKINGS')\n }\n },\n /**\n * @param {*} param0\n * @param {Date} targetDate\n * @returns {Promise}\n */\n async getSummaryBookingsByDate({ commit, getters, dispatch }, targetDate) {\n commit('START_LOADING_SUMMARY_BOOKINGS')\n try {\n const response = await this.$api.bookings.getSummaryBookingsByDate(\n targetDate.format('YYYY-MM-DD')\n )\n\n commit('INSERT_SUMMARY_BOOKINGS', response.data)\n commit('INSERT_SUMMARY_BOOKINGS_DATE', targetDate.format('YYYY-MM-DD'))\n\n return success({ data: getters.summaryBookings })\n } catch (ex) {\n toast.error(\n this.$i18n.t('bookings.unableToLoadSummaryBookingsError', {\n date: targetDate.format('YYYY-MM-DD'),\n })\n )\n return fail({\n error: await dispatch('logException', ex, { root: true }),\n })\n } finally {\n commit('FINISH_LOADING_SUMMARY_BOOKINGS')\n }\n },\n /**\n * @param {{dispatch: Function, commit: Function}} vuexContext\n * @param {Number} bookingId\n * @returns {Promise}\n */\n async getBookingById({ commit, dispatch }, bookingId) {\n commit('START_LOADING')\n try {\n const response = await this.$api.bookings.get(bookingId)\n return success({\n data: new CandidateBookingDetailsViewModel(response.data),\n })\n } catch (ex) {\n return fail({\n error: await dispatch('logException', ex, { root: true }),\n })\n } finally {\n commit('FINISH_LOADING')\n }\n },\n /**\n * @param {*} param0\n * @param {BookingDetailsGuestAccessRequestDTO} payload\n * @returns {Promise}\n */\n async getBookingByIdAnon({ commit, dispatch }, payload) {\n commit('START_LOADING')\n try {\n return await this.$api.bookings.getBookingByIdAnon(payload)\n } catch (ex) {\n return fail({\n error: await dispatch('logException', ex, { root: true }),\n })\n } finally {\n commit('FINISH_LOADING')\n }\n },\n /**\n * @param {*} param0\n * @param {Guid} accessToken\n * @returns {Promise}\n */\n async getGroupBookingByIdAnon({ commit, dispatch }, accessToken) {\n commit('START_LOADING')\n try {\n return await this.$api.bookings.getGroupBookingByIdAnon(accessToken)\n } catch (ex) {\n return fail({\n error: await dispatch('logException', ex, { root: true }),\n })\n } finally {\n commit('FINISH_LOADING')\n }\n },\n setSummaryAvailability({ commit }, newValue) {\n commit('SET_SUMMARY_AVAILABILITY', newValue)\n },\n /**\n * @param {*} param0\n * @param {RunningLatePayload} payload\n * @returns {Promise}\n */\n async notifyRunningLate({ commit, dispatch }, payload) {\n commit('START_LOADING_RUNNING_LATE')\n try {\n const response = await this.$api.bookings.notifyRunningLate(\n payload.bookingId,\n payload.minutesLate\n )\n\n commit('SET_RUNNING_LATE_STATUS_FOR_SUMMARY_BOOKING', {\n payload,\n isRunningLate: true,\n })\n toast.success(this.$i18n.t('bookings.summaryRunningLateSuccessAlert'))\n return response\n } catch (ex) {\n // Still notify the user that the request was a success even if store failed to update\n if (ex instanceof StoreResourceNotFoundError) {\n toast.success(this.$i18n.t('bookings.summaryRunningLateSuccessAlert'))\n return success({ data: ex?.response?.data })\n }\n\n toast.error(\n this.$i18n.t('error.runningLateAPIFailure', [\n this.$i18n.t('app.companyName'),\n ])\n )\n\n return fail({\n error: await dispatch('logException', ex, { root: true }),\n })\n } finally {\n commit('FINISH_LOADING_RUNNING_LATE')\n }\n },\n /**\n * Calculates the overview booking load range based on a target date\n * before calling api\n * @param {*} param0\n * @param {Date|String} targetDate Date for the basis of the range calculation\n * @returns {Promise}\n */\n async loadOverviewBookingsByTargetDateAsync({ dispatch }, targetDate) {\n const dateRange = calculateLoadRangeBasedWithBuffer(\n DateStripDisplayRange.YEAR,\n targetDate,\n new Duration({ value: 1, unit: DurationUnits.MONTH })\n )\n\n return await dispatch('getOverviewBookingsInRange', dateRange)\n },\n /**\n * @param {*} param0\n * @param {Number} bookingId\n * @returns {Promise}\n */\n async getNavigationBookingsByIdAsync(\n { commit, getters, dispatch },\n bookingId\n ) {\n /**\n * @type {CandidateBookingNavigationDTO}\n */\n const isCached = getters.getNavigationBookingsDtoById(bookingId)\n\n if (\n isCached &&\n checkCacheFreshness(\n new Duration({ value: 30, unit: DurationUnits.MINUTE }),\n isCached?.lastUpdated\n )\n )\n return success({ data: isCached.navigationItems })\n commit('START_LOADING_NAVIGATION_BOOKINGS')\n try {\n /**\n * @type {{ status: Number, data: CandidateBookingNavigationViewModel }}\n */\n const response = await this.$api.bookings.get(`${bookingId}/navigation`)\n commit(\n 'INSERT_NAVIGATION_BOOKING',\n new CandidateBookingNavigationDTO({\n bookingId,\n navigationItems: response.data,\n })\n )\n return success({ data: getters.getNavigationBookingsById(bookingId) })\n } catch (ex) {\n return fail({\n error: await dispatch('logException', ex, { root: true }),\n })\n } finally {\n commit('FINISH_LOADING_NAVIGATION_BOOKINGS')\n }\n },\n /**\n * @param {*} param0\n * @param {Number} bookingId\n * @returns {Promise}\n */\n async getBookingRelatedAgreements(\n { commit, dispatch, getters },\n bookingId\n ) {\n commit('START_LOADING_AGREEMENTS')\n try {\n const response = await this.$api.bookings.getBookingRelatedAgreements(\n bookingId\n )\n\n const clientAgreements = new CandidateClientAgreementsViewModel(\n response.data\n )\n\n await dispatch('clients/insertActionableItems', [clientAgreements], {\n root: true,\n })\n\n return success({ data: clientAgreements })\n } catch (ex) {\n return fail({\n error: await dispatch('logException', ex, { root: true }),\n })\n } finally {\n commit('FINISH_LOADING_AGREEMENTS')\n }\n },\n /**\n * @param {*} param0\n * @param {TentativeFillRequestDTO} dto\n * @returns {Promise}\n */\n async respondToTentativeBookingRequest({ commit, dispatch }, dto) {\n commit('START_LOADING_TENTATIVE')\n try {\n /**\n * @type {{ status: Number, data: TentativeActionResultViewModel }}\n */\n const response = await this.$api.bookings.tentativeFill(dto)\n\n // If ids aren't returned make sure that at least the target booking id is added\n response.data.bookingIdsActioned = response?.data\n ?.bookingIdsActioned || [dto.bookingId]\n\n const overviewPromise = dispatch(\n 'updateOverviewBookingsAfterTentativeFillAction',\n {\n payload: response?.data,\n action: dto.payload.action,\n }\n )\n\n const summaryPromise = dispatch(\n 'updateSummaryBookingsAfterTentativeFillAction',\n {\n payload: response?.data,\n action: dto.payload.action,\n }\n )\n\n await Promise.all([overviewPromise, summaryPromise])\n\n const tentativeGroupCount =\n response?.data?.bookingIdsActioned?.length || 1\n\n let toastNotification = ''\n\n switch (dto.payload.action) {\n case TentativeFillAction.accept:\n toastNotification = this.$i18n.tc(\n 'bookings.tentativeBookingAcceptSuccessToastNotification',\n tentativeGroupCount,\n { count: tentativeGroupCount }\n )\n break\n case TentativeFillAction.decline:\n toastNotification = this.$i18n.tc(\n 'bookings.tentativeBookingDeclineSuccessToastNotification',\n tentativeGroupCount,\n { count: tentativeGroupCount }\n )\n break\n }\n\n toast.success(toastNotification)\n return response\n } catch (ex) {\n toast.error(\n this.$i18n.t('error.tentativeFillAPIFailure', [\n this.$i18n.t('app.companyName'),\n ])\n )\n\n return fail({\n error: await dispatch('logException', ex, { root: true }),\n })\n } finally {\n commit('FINISH_LOADING_TENTATIVE')\n }\n },\n /**\n * @param {*} param0\n * @param {TentativeFillRequestAnonymousDTO} dto\n * @returns {Promise}\n */\n async respondToTentativeBookingRequestAnon({ commit, dispatch }, dto) {\n commit('START_LOADING_TENTATIVE')\n try {\n /**\n * @type {{ status: Number, data: TentativeActionResultViewModel }}\n */\n return await this.$api.bookings.tentativeFillAnon(dto)\n } catch (ex) {\n toast.error(\n this.$i18n.t('error.tentativeFillAPIFailure', [\n this.$i18n.t('app.companyName'),\n ])\n )\n\n return fail({\n error: await dispatch('logException', ex, { root: true }),\n })\n } finally {\n commit('FINISH_LOADING_TENTATIVE')\n }\n },\n /**\n * @param {*} param0\n * @param {*} dto\n * @returns {Promise}\n */\n async respondToGroupTentativeBookingRequestAnon({ commit, dispatch }, dto) {\n commit('START_LOADING_TENTATIVE')\n try {\n /**\n * @type {{ status: Number }}\n */\n return await this.$api.bookings.groupTentativeFillAnon(dto)\n } catch (ex) {\n toast.error(\n this.$i18n.t('error.tentativeFillAPIFailure', [\n this.$i18n.t('app.companyName'),\n ])\n )\n\n return fail({\n error: await dispatch('logException', ex, { root: true }),\n })\n } finally {\n commit('FINISH_LOADING_TENTATIVE')\n }\n },\n /**\n * @param {*} param0\n * @param {{ payload: TentativeActionResultViewModel, action: TentativeFillAction}} param1\n */\n async updateOverviewBookingsAfterTentativeFillAction(\n { commit, dispatch, getters },\n { payload, action }\n ) {\n const noBookingsToUpdate =\n !payload.bookingIdsActioned || payload.bookingIdsActioned.length === 0\n\n if (noBookingsToUpdate) return null\n\n const overviewBookings = getters.overviewBookings\n if (!overviewBookings || overviewBookings.length === 0) return null\n\n /**\n * @type {BookingOverviewBookingIndexDTO[]}\n */\n const bookingIndexes = getters.findOverviewBookingIndexByIds(\n payload.bookingIdsActioned\n )\n\n if (!bookingIndexes || bookingIndexes.length === 0) {\n await dispatch(\n 'logException',\n new StoreResourceNotFoundError(\n {\n moduleName: 'overviewBookings',\n message: `Failed to find the indexes for all ${bookingIndexes.length} overview bookings.`,\n },\n { root: true }\n )\n )\n\n return\n }\n\n switch (action) {\n case TentativeFillAction.accept:\n commit(\n 'UPDATE_OVERVIEW_BOOKINGS_WITH_ACCEPT_TENTATIVE_FILL_RESPONSE',\n bookingIndexes\n )\n break\n case TentativeFillAction.decline:\n commit('REMOVE_OVERVIEW_BOOKINGS_BY_INDEX_LIST', bookingIndexes)\n break\n }\n },\n /**\n * @param {*} param0\n * @param {{ payload: TentativeActionResultViewModel, action: TentativeFillAction}} param1\n */\n updateSummaryBookingsAfterTentativeFillAction(\n { commit },\n { payload, action }\n ) {\n const noBookingsToUpdate =\n !payload.bookingIdsActioned || payload.bookingIdsActioned.length === 0\n\n if (noBookingsToUpdate) return null\n\n switch (action) {\n case TentativeFillAction.accept:\n commit(\n 'UPDATE_SUMMARY_BOOKINGS_WITH_ACCEPT_TENTATIVE_FILL_RESPONSE',\n payload.bookingIdsActioned\n )\n break\n case TentativeFillAction.decline:\n commit(\n 'REMOVE_SUMMARY_BOOKINGS_BY_ID_LIST',\n payload.bookingIdsActioned\n )\n break\n }\n },\n /**\n * Updates a booking to remove the shiftRecord actionable item\n * @param {{commit: Function, dispatch: Function, getters: Object}} vuexContext\n * @param {Number} bookingId\n */\n updateBookingShiftRecordActionableItemToComplete(\n { commit, getters },\n bookingId\n ) {\n const overviewBookingToUpdate = getters.getOverviewBookingById(bookingId)\n\n commit(\n 'UPDATE_OVERVIEW_BOOKING_AS_SHIFT_RECORD_COMPLETE',\n overviewBookingToUpdate\n )\n\n commit('UPDATE_SUMMARY_BOOKING_AS_SHIFT_RECORD_COMPLETE', bookingId)\n },\n /**\n * Removes a specified booking that the candidate stated did not happen\n * @param {{commit: Function, dispatch: Function, getters: Object}} vuexContext\n * @param {Number} bookingId\n */\n removeBookingThatDidNotHappen({ commit, getters }, bookingId) {\n const overviewBookings = getters.overviewBookings\n if (!overviewBookings || overviewBookings.length === 0) return null\n\n /**\n * @type {BookingOverviewBookingIndexDTO[]}\n */\n const overviewBookingIndexes = getters.findOverviewBookingIndexByIds([\n bookingId,\n ])\n\n if (overviewBookingIndexes) {\n commit('REMOVE_OVERVIEW_BOOKINGS_BY_INDEX_LIST', overviewBookingIndexes)\n }\n\n commit('REMOVE_SUMMARY_BOOKINGS_BY_ID_LIST', [bookingId])\n },\n /**\n * Returns shift record info for a booking.\n * @param {{commit: Function, dispatch: Function}} vuexContext\n * @param {Number} bookingId\n * @returns {Promise}\n */\n async loadBookingShiftRecordDetails({ commit, dispatch }, bookingId) {\n commit('START_LOADING_SHIFT_RECORD_DETAILS')\n try {\n const response = await this.$api.bookings.getShiftRecordDetails(\n bookingId\n )\n\n const shiftRecordVM = new ShiftRecordDetailsViewModel(response.data)\n\n if (shiftRecordVM.isSubmitted)\n await dispatch(\n 'updateBookingShiftRecordActionableItemToComplete',\n bookingId\n )\n\n return success({ data: shiftRecordVM })\n } catch (ex) {\n await dispatch('logException', ex, { root: true })\n\n const errorPayload = shiftRecordLoadErrorHandler(\n ex.response,\n this.$i18n\n )\n\n return fail({ error: errorPayload })\n } finally {\n commit('FINISH_LOADING_SHIFT_RECORD_DETAILS')\n }\n },\n /**\n * @param {{dispatch: Function}} vuexContext\n * @param {{payload: AddShiftRecordPayloadDTO, bookingStatus: keyof BookingStatus}} params\n */\n async updateStateAfterShiftRecordAcceptOperation(\n { dispatch, commit, getters },\n { payload, bookingStatus }\n ) {\n switch (bookingStatus) {\n case BookingStatus.CLIENT_SUBMITTED_TIMESHEET_MODIFIED: {\n const overviewBookingToUpdate = getters.getOverviewBookingById(\n payload.bookingId\n )\n\n commit(\n 'UPDATE_OVERVIEW_BOOKING_AS_SHIFT_RECORD_COMPLETE',\n overviewBookingToUpdate\n )\n commit('UPDATE_SUMMARY_BOOKING_WITH_SHIFT_RECORD_DETAILS', payload)\n break\n }\n default:\n await dispatch(\n 'updateBookingShiftRecordActionableItemToComplete',\n payload.bookingId\n )\n break\n }\n },\n /**\n * @param {{dispatch: Function}} vuexContext\n * @param {{payload: AddShiftRecordPayloadDTO, operationType: keyof TimesheetOperationType, keyof BookingStatus}} params\n */\n async updateStateAfterShiftRecordSubmit(\n { dispatch },\n { payload, operationType, bookingStatus }\n ) {\n switch (operationType) {\n case TimesheetOperationType.ACCEPT:\n return await dispatch('updateStateAfterShiftRecordAcceptOperation', {\n payload,\n bookingStatus,\n })\n case TimesheetOperationType.MODIFY:\n return await dispatch(\n 'updateBookingShiftRecordActionableItemToComplete',\n payload.bookingId\n )\n case TimesheetOperationType.CANCEL:\n return await dispatch(\n 'removeBookingThatDidNotHappen',\n payload.bookingId\n )\n }\n },\n /**\n * Submits a shift record for a booking\n * @param {{dispatch: Function, commit: Function}} vuexContext\n * @param {{payload: AddShiftRecordPayloadDTO, operationType: keyof TimesheetOperationType, keyof BookingStatus}} params\n * @returns {Promise}\n */\n async submitShiftRecord(\n { dispatch, commit },\n { payload, operationType, bookingStatus }\n ) {\n commit('START_LOADING_SHIFT_RECORD_SUBMIT')\n try {\n await this.$api.bookings.submitShiftRecord(payload)\n\n await dispatch('updateStateAfterShiftRecordSubmit', {\n payload,\n operationType,\n bookingStatus,\n })\n\n toast.success(\n this.$i18n.t('bookings.shiftRecord.submit.success', [\n dayjs(payload.date).format(DateFormatToken.ddddLL),\n ])\n )\n\n return success({})\n } catch (ex) {\n await dispatch('logException', ex, { root: true })\n\n const errorPayload = shiftRecordPostErrorHandler(\n ex.response,\n this.$i18n\n )\n\n return fail({ error: errorPayload })\n } finally {\n commit('FINISH_LOADING_SHIFT_RECORD_SUBMIT')\n }\n },\n /**\n * Submits a shift record for a booking\n * @param {{dispatch: Function, commit: Function}} vuexContext\n * @param {Number} bookingId\n * @returns {Promise}\n */\n async submitBookingDidNotHappen({ dispatch, commit }, bookingId) {\n commit('START_LOADING_DID_NOT_HAPPEN_SUBMIT')\n try {\n await this.$api.bookings.submitBookingDidNotHappen(bookingId)\n\n await dispatch('updateStateAfterShiftRecordSubmit', {\n payload: { bookingId },\n operationType: TimesheetOperationType.CANCEL,\n })\n\n toast.success(\n this.$i18n.t('bookings.shiftRecord.didNotHappenSuccessText')\n )\n\n return success({})\n } catch (ex) {\n await dispatch('logException', ex, { root: true })\n\n const errorPayload = shiftRecordDidNotHappenErrorHandler(\n ex.response,\n this.$i18n\n )\n\n return fail({ error: errorPayload })\n } finally {\n commit('FINISH_LOADING_DID_NOT_HAPPEN_SUBMIT')\n }\n },\n hideBookingGuestFooter({ commit }) {\n commit('HIDE_BOOKING_GUEST_FOOTER')\n },\n /**\n * Resets store to default state.\n */\n clear({ commit }) {\n commit('CLEAR_STORE')\n },\n },\n}\n","/**\n * Used to find and update the pending agreement status in overview/summary when actioned from details page\n */\nexport default class CandidateDocumentAgreementUpdateViewModel {\n constructor({ fileId = null, clientId = null, dateAgreedUTC = null } = {}) {\n /**\n * @type {Number}\n */\n this.fileId = fileId\n\n /**\n * @type {Number}\n */\n this.clientId = clientId\n\n /**\n * @type {Date}\n */\n this.dateAgreedUTC = dateAgreedUTC\n }\n}\n","import { isEmptyArray } from '../../helpers/array-helpers'\n// eslint-disable-next-line no-unused-vars\nimport CandidateClientAgreementsViewModel from '@/models/client/candidateClientAgreementsViewModel'\n// eslint-disable-next-line no-unused-vars\nimport CandidateDocumentAgreementUpdateViewModel from '@/models/candidate/candidateDocumentAgreementUpdateViewModel'\n// eslint-disable-next-line no-unused-vars\nimport CandidateDocumentAgreementViewModel from '@/models/candidate/candidateDocumentAgreementViewModel'\nimport UploadedFileType from '@/constants/file/UploadedFileType'\n\nconst getDefaultState = () => {\n return {\n // Place any new state properties here\n loadingCount: 0,\n crudLoadingCount: 0,\n /**\n * @type {CandidateClientAgreementsViewModel[]}\n */\n actionableItems: [],\n }\n}\n\nconst state = getDefaultState()\n\nexport default {\n namespaced: true,\n /**\n * @typedef {{\n * loadingCount: number\n * crudLoadingCount: number\n * actionableItems: CandidateClientAgreementsViewModel[]\n * }} ClientState\n * @type {ClientState}\n */\n state,\n getters: {\n moduleName: () => 'clients',\n isLoading: (state) => state.loadingCount > 0,\n isLoadingCRUD: (state) => state.crudLoadingCount > 0,\n /**\n * @returns {CandidateClientAgreementsViewModel[]}\n */\n allActionableItems: (state) => state.actionableItems,\n /**\n * @param {ClientState} state\n * @param {number} clientId\n * @returns {CandidateClientAgreementsViewModel}\n */\n getActionableItemsByClient: (state) => (clientId) => {\n return state.actionableItems.find(\n (clientActionableItems) => clientActionableItems.clientId === clientId\n )\n },\n /**\n * @returns {CandidateDocumentAgreementViewModel[]}\n */\n getAgreementsByClientId: (state, getters) => (clientId) => {\n const actionableItems = getters.getActionableItemsByClient(clientId)\n return actionableItems?.agreements || []\n },\n /**\n * @returns {CandidateDocumentAgreementViewModel}\n */\n getAgreementByType:\n (state, getters) =>\n (clientId, type = UploadedFileType.unset) => {\n /**\n * @type {CandidateDocumentAgreementViewModel[]}\n */\n const agreements = getters.getAgreementsByClientId(clientId)\n return agreements.find((agreement) => agreement.type === type)\n },\n /**\n * @param {ClientState} state\n * @param {*} getters\n * @param {Number} clientId\n * @returns {CandidateDocumentAgreementViewModel[]}\n */\n getPendingAgreementsByClientId: (state, getters) => (clientId) => {\n /**\n * @type {CandidateDocumentAgreementViewModel[]}\n */\n const agreements = getters.getAgreementsByClientId(clientId)\n const pendingAgreements = agreements.filter(\n (agreement) => !agreement.dateAgreedUTC\n )\n return pendingAgreements\n },\n /**\n *\n * @param {ClientState} state\n * @param {*} getters\n * @param {Number} clientId\n * @returns {Boolean}\n */\n doesClientHavePendingAgreements: (state, getters) => (clientId) => {\n /**\n * @type {CandidateDocumentAgreementViewModel[]}\n */\n const agreements = getters.getPendingAgreementsByClientId(clientId)\n return !isEmptyArray(agreements)\n },\n getTotalAgreementsCountByClientId: (state, getters) => (clientId) => {\n const agreements = getters.getAgreementsByClientId(clientId)\n return agreements.length\n },\n getPendingAgreementsCountByClientId: (state, getters) => (clientId) => {\n const pendingAgreements = getters.getPendingAgreementsByClientId(clientId)\n return pendingAgreements.length\n },\n },\n mutations: {\n START_LOADING(state) {\n state.loadingCount++\n },\n FINISH_LOADING(state) {\n state.loadingCount--\n },\n START_LOADING_CRUD(state) {\n state.crudLoadingCount++\n },\n FINISH_LOADING_CRUD(state) {\n state.crudLoadingCount--\n },\n /**\n * @param {ClientState} state\n * @param {CandidateClientAgreementsViewModel[]} actionableItems\n */\n INSERT_ACTIONABLE_ITEMS(state, actionableItems) {\n let found\n\n for (const actionableItem of actionableItems) {\n found = state.actionableItems.find(\n (x) => x.clientId === actionableItem.clientId\n )\n\n if (!found) {\n state.actionableItems.push(actionableItem)\n } else {\n Object.assign(found, actionableItem)\n }\n }\n },\n UPDATE_ACTIONABLE_ITEM(state, agreementUpdateData) {\n const clientFound = state.actionableItems.find(\n (x) => x.clientId === agreementUpdateData.clientId\n )\n if (clientFound) {\n const agreementFound = clientFound.agreements.find(\n (x) => x.fileId === agreementUpdateData.fileId\n )\n if (agreementFound) {\n agreementFound.dateAgreedUTC = agreementUpdateData.dateAgreedUTC\n }\n }\n },\n CLEAR_STORE(state) {\n // Resets store to default state\n Object.assign(state, getDefaultState())\n },\n },\n actions: {\n /**\n * @param {object} VuexAction\n * @param {CandidateClientAgreementsViewModel[]} actionableItems\n */\n insertActionableItems({ commit }, actionableItems) {\n commit('INSERT_ACTIONABLE_ITEMS', actionableItems)\n },\n /**\n * Updates agreement\n * @param {object} VuexAction\n * @param {CandidateDocumentAgreementUpdateViewModel} agreementUpdateData\n */\n updateActionableItemForAgreement({ commit }, agreementUpdateData) {\n commit('UPDATE_ACTIONABLE_ITEM', agreementUpdateData)\n },\n /**\n * Resets store to default state.\n */\n clear({ commit }) {\n commit('CLEAR_STORE')\n },\n },\n}\n","import { getType } from 'mime'\nimport { extractFileNameFromContentDisposition } from '@helpers/file-helpers'\nimport { fail, success } from '@/helpers/result-helper.js'\nimport toast from '@/services/toasts/index.js'\nimport dayjs from '@/services/date'\nimport CandidateDocumentAgreementUpdateViewModel from '@/models/candidate/candidateDocumentAgreementUpdateViewModel'\n\nconst getDefaultState = () => {\n return {\n loadingCount: 0,\n loadingAgreementsCount: 0,\n }\n}\n\nconst state = getDefaultState()\n\nexport default {\n namespaced: true,\n state,\n getters: {\n isLoading: (state) => state.loadingCount > 0,\n isLoadingAgreement: (state) => state.loadingAgreementsCount > 0,\n },\n mutations: {\n START_LOADING(state) {\n state.loadingCount++\n },\n FINISH_LOADING(state) {\n state.loadingCount--\n },\n START_LOADING_AGREEMENTS(state) {\n state.loadingAgreementsCount++\n },\n FINISH_LOADING_AGREEMENTS(state) {\n state.loadingAgreementsCount--\n },\n CLEAR_STORE(state) {\n // Resets store to default state\n Object.assign(state, getDefaultState())\n },\n },\n actions: {\n async downloadAgreement({ commit, dispatch }, fileId) {\n commit('START_LOADING_AGREEMENTS')\n try {\n const response = await this.$api.agreements.downloadAgreementsFile(\n fileId\n )\n const fileName = extractFileNameFromContentDisposition(\n response.headers['content-disposition']\n )\n const blob = new Blob([response.data], {\n type: getType(fileName),\n })\n return success({ data: blob })\n } catch (ex) {\n toast.error(this.$i18n.t('error.unableToLoadFile'))\n return fail({\n error: await dispatch('logException', ex, { root: true }),\n })\n } finally {\n commit('FINISH_LOADING_AGREEMENTS')\n }\n },\n async signAgreement({ commit, dispatch }, { fileId, clientId }) {\n commit('START_LOADING')\n try {\n const response = await this.$api.agreements.putAgreements(fileId)\n const signedDate = dayjs.utc()\n await dispatch(\n 'updateActionableItemAfterPendingAgreementAction',\n new CandidateDocumentAgreementUpdateViewModel({\n fileId,\n clientId,\n dateAgreedUTC: signedDate,\n })\n )\n\n toast.success(this.$i18n.t('agreements.acceptedAgreementText'))\n return response\n } catch (ex) {\n toast.error(this.$i18n.t('error.errorGenericApiErrorText'))\n return fail({\n error: await dispatch('logException', ex, { root: true }),\n })\n } finally {\n commit('FINISH_LOADING')\n }\n },\n /**\n * Resets store to default state.\n */\n clear({ commit }) {\n commit('CLEAR_STORE')\n },\n async updateActionableItemAfterPendingAgreementAction(\n { dispatch },\n agreementUpdateData\n ) {\n await dispatch(\n 'clients/updateActionableItemForAgreement',\n agreementUpdateData,\n {\n root: true,\n }\n )\n },\n },\n}\n","import httpStatus from 'statuses'\n\nconst isHttpStatus = (response, statusCode = 'OK') => {\n return response === httpStatus(statusCode)\n}\n\nconst isSuccess = (response) => {\n return (\n isHttpStatus(response, 'OK') ||\n isHttpStatus(response, 'No Content') ||\n isHttpStatus(response, 'Created')\n )\n}\n\nexport { isSuccess, isHttpStatus }\n","import { fail, success } from '@helpers/result-helper'\nimport toast from '@/services/toasts/index.js'\n// eslint-disable-next-line no-unused-vars\nimport EventSummaryViewModel from '@/models/event/eventSummaryViewModel'\nimport BlobCacheDTO from '@/models/file/blobCacheDTO'\nimport { checkCacheFreshness } from '@/helpers/cache-helpers'\nimport Duration from '@/models/general/duration'\nimport DurationUnits from '@/constants/date/DurationUnits'\nimport { isHttpStatus } from '@/helpers/http-status-helpers'\n\nconst getDefaultState = () => {\n return {\n events: [],\n eventImages: [],\n // Place any new state properties here\n loadingCount: 0,\n loadingEventSummaryCount: 0,\n loadingEventImage: [],\n crudLoadingCount: 0,\n }\n}\n\nconst state = getDefaultState()\n\nexport default {\n namespaced: true,\n state,\n getters: {\n moduleName: () => 'events',\n isLoading: (state) => state.loadingCount > 0,\n isLoadingEventSummary: (state) => state.loadingEventSummaryCount > 0,\n isLoadingCRUD: (state) => state.crudLoadingCount > 0,\n isLoadingEventImage: (state) => (eventId) =>\n state.loadingEventImage.some((id) => id === eventId),\n events: (state) => state.events,\n eventImage: (state) => (eventId) =>\n state.eventImages.find((image) => image.id === eventId.toString()),\n },\n mutations: {\n START_LOADING(state) {\n state.loadingCount++\n },\n FINISH_LOADING(state) {\n state.loadingCount--\n },\n START_LOADING_EVENT_SUMMARY(state) {\n state.loadingEventSummaryCount++\n },\n FINISH_LOADING_EVENT_SUMMARY(state) {\n state.loadingEventSummaryCount--\n },\n START_LOADING_EVENT_IMAGE(state, eventId) {\n state.loadingEventImage.push(eventId)\n },\n FINISH_LOADING_EVENT_IMAGE(state, eventId) {\n const index = state.loadingEventImage.findIndex((id) => id === eventId)\n if (index < 0) return\n state.loadingEventImage.splice(index, 1)\n },\n START_LOADING_CRUD(state) {\n state.crudLoadingCount++\n },\n FINISH_LOADING_CRUD(state) {\n state.crudLoadingCount--\n },\n SET_EVENTS(state, events) {\n if (!events || events.length <= 0) state.events = []\n state.events = events.map((event) => new EventSummaryViewModel(event))\n },\n /**\n *\n * @param {*} state\n * @param {BlobCacheDTO} eventImageBlob\n */\n CACHE_EVENT_IMAGE(state, eventImageBlob) {\n const eventImageFound = state.eventImages.find(\n (cachedImage) => cachedImage.id === eventImageBlob.id\n )\n\n if (!eventImageFound) {\n state.eventImages.push(eventImageBlob)\n } else {\n Object.assign(eventImageFound, eventImageBlob)\n }\n },\n CLEAR_STORE(state) {\n // Resets store to default state\n Object.assign(state, getDefaultState())\n },\n },\n actions: {\n /**\n * @param {*} param0\n * @param {Number} distanceFromInKM\n * @returns {Promise}\n */\n async getEvents({ commit, dispatch }, distanceFromInKM = 0) {\n commit('START_LOADING_EVENT_SUMMARY')\n try {\n /**\n * @type {{ status: Number, data: EventSummaryViewModel[] }}\n */\n const response = await this.$api.professionalDevelopment.getEvents({\n distanceFromKM: distanceFromInKM,\n })\n commit('SET_EVENTS', response.data)\n return response\n } catch (ex) {\n toast.error(this.$i18n.t('error.eventSummaryLoadFailure'))\n\n return fail({\n error: await dispatch('logException', ex, { root: true }),\n })\n } finally {\n commit('FINISH_LOADING_EVENT_SUMMARY')\n }\n },\n /**\n * @param {*} param0\n * @param {Number} eventId\n * @returns {Promise}\n */\n async getEventImage({ getters, commit, dispatch }, eventId) {\n /**\n * @type {BlobCacheDTO}\n */\n const isCached = getters.eventImage(eventId)\n\n if (\n isCached &&\n checkCacheFreshness(\n new Duration({ value: 1, unit: DurationUnits.HOUR }),\n isCached?.timestamp\n )\n ) {\n return success({ data: isCached.blob })\n }\n\n commit('START_LOADING_EVENT_IMAGE', eventId)\n try {\n /**\n * @type {{ status: Number, data: File }}\n */\n const response = await this.$api.events.getEventImage(eventId)\n const blob = new Blob([response.data])\n\n commit(\n 'CACHE_EVENT_IMAGE',\n new BlobCacheDTO({\n blob,\n id: eventId.toString(),\n })\n )\n return success({ data: blob })\n } catch (ex) {\n // If the event image is not found, set blob to null and cache.\n // This will prevent repeated calls to API and use default event image.\n if (isHttpStatus(ex.response.status, 'Not Found')) {\n commit(\n 'CACHE_EVENT_IMAGE',\n new BlobCacheDTO({\n blob: null,\n id: eventId.toString(),\n })\n )\n return success({ data: null })\n }\n\n return fail({\n error: await dispatch('logException', ex, { root: true }),\n })\n } finally {\n commit('FINISH_LOADING_EVENT_IMAGE', eventId)\n }\n },\n /**\n * Resets store to default state.\n */\n clear({ commit }) {\n commit('CLEAR_STORE')\n },\n },\n}\n","import { getType } from 'mime'\nimport { extractFileNameFromContentDisposition } from '@helpers/file-helpers'\nimport { fail, success } from '@/helpers/result-helper.js'\nimport toast from '@/services/toasts/index.js'\n\nconst getDefaultState = () => {\n return {\n // Place any new state properties here\n loadingListCount: 0,\n loadingCount: 0,\n crudLoadingCount: 0,\n }\n}\n\nconst state = getDefaultState()\n\nexport default {\n namespaced: true,\n state,\n getters: {\n moduleName: () => 'downloads',\n isLoadingList: (state) => state.loadingListCount > 0,\n isLoading: (state) => state.loadingCount > 0,\n isLoadingCRUD: (state) => state.crudLoadingCount > 0,\n },\n mutations: {\n START_LOADING_LIST(state) {\n state.loadingListCount++\n },\n FINISH_LOADING_LIST(state) {\n state.loadingListCount--\n },\n START_LOADING(state) {\n state.loadingCount++\n },\n FINISH_LOADING(state) {\n state.loadingCount--\n },\n START_LOADING_CRUD(state) {\n state.crudLoadingCount++\n },\n FINISH_LOADING_CRUD(state) {\n state.crudLoadingCount--\n },\n CLEAR_STORE(state) {\n // Resets store to default state\n Object.assign(state, getDefaultState())\n },\n },\n actions: {\n /**\n * Retrieves a list of application general files that are relevant to the user\n * @param {Object} VuexAction\n * @returns {Promise} List of objects containing file id and friendly name\n */\n async getAppGeneralFileList({ commit, dispatch }) {\n commit('START_LOADING_LIST')\n try {\n return await this.$api.downloads.getAppGeneralFileList()\n } catch (ex) {\n toast.error(this.$i18n.t('error.errorGeneralFileListLoadFailureText'))\n return fail({\n error: await dispatch('logException', ex, { root: true }),\n })\n } finally {\n commit('FINISH_LOADING_LIST')\n }\n },\n /**\n * Downloads blob of the application general file\n * @param {Object} VuexAction\n * @param {Number} fileId Id of the application general file\n * @returns {Promise} Blob of the application general file\n */\n async downloadAppGeneralFile({ commit, dispatch }, fileId) {\n commit('START_LOADING')\n try {\n const response = await this.$api.downloads.downloadAppGeneralFile(\n fileId\n )\n const fileName = extractFileNameFromContentDisposition(\n response.headers['content-disposition']\n )\n const blob = new Blob([response.data], {\n type: getType(fileName),\n })\n return success({ data: blob })\n } catch (ex) {\n toast.error(this.$i18n.t('error.unableToLoadFile'))\n return fail({\n error: await dispatch('logException', ex, { root: true }),\n })\n } finally {\n commit('FINISH_LOADING')\n }\n },\n /**\n * Resets store to default state.\n */\n clear({ commit }) {\n commit('CLEAR_STORE')\n },\n },\n}\n","const getDefaultState = () => {\n return {\n toggles: {},\n loadingCount: 0,\n crudLoadingCount: 0,\n }\n}\n\nconst state = getDefaultState()\n\nexport default {\n namespaced: true,\n state,\n getters: {\n moduleName: () => 'features',\n featureToggles: (state) => state.toggles,\n isLoading: (state) => state.loadingCount > 0,\n isLoadingCRUD: (state) => state.crudLoadingCount > 0,\n },\n mutations: {\n START_LOADING(state) {\n state.loadingCount++\n },\n FINISH_LOADING(state) {\n state.loadingCount--\n },\n START_LOADING_CRUD(state) {\n state.crudLoadingCount++\n },\n FINISH_LOADING_CRUD(state) {\n state.crudLoadingCount--\n },\n CLEAR_STORE(state) {\n // Resets store to default state\n Object.assign(state, getDefaultState())\n },\n SET_FEATURE_TOGGLES(state, toggles) {\n state.toggles = toggles\n },\n },\n actions: {\n setFeatureToggles({ commit }, toggles) {\n commit('SET_FEATURE_TOGGLES', toggles)\n },\n /**\n * Resets store to default state.\n */\n clear({ commit }) {\n commit('CLEAR_STORE')\n },\n },\n}\n","import auth from './auth'\nimport file from './file'\nimport registrations from './registrations'\nimport documents from './documents'\nimport ready2Work from './ready2Work'\nimport availability from './availability'\nimport workExperience from './work-experience'\nimport qualifications from './qualifications'\nimport certifications from './certifications'\nimport subjects from './subjects'\nimport bookings from './bookings'\nimport clients from './clients'\nimport agreements from './agreements'\nimport events from './events'\nimport downloads from './downloads'\nimport features from './features.js'\n\nexport default {\n features,\n downloads,\n events,\n clients,\n bookings,\n subjects,\n qualifications,\n workExperience,\n documents,\n ready2Work,\n availability,\n registrations,\n file,\n auth,\n certifications,\n agreements,\n}\n","import allModules from '@store/modules'\nimport store from '@/store'\n\nexport default function dispatchActionForAllModules(\n actionName,\n { modules = allModules, modulePrefix = '', flags = {} } = {}\n) {\n // For every module...\n for (const moduleName in modules) {\n const moduleDefinition = modules[moduleName]\n\n // If the action is defined on the module...\n if (moduleDefinition.actions && moduleDefinition.actions[actionName]) {\n // Dispatch the action if the module is namespaced. Otherwise,\n // set a flag to dispatch the action globally at the end.\n if (moduleDefinition.namespaced) {\n store.dispatch(`${modulePrefix}${moduleName}/${actionName}`)\n } else {\n flags.dispatchGlobal = true\n }\n }\n\n // If there are any nested sub-modules...\n if (moduleDefinition.modules) {\n // Also dispatch the action for these sub-modules.\n dispatchActionForAllModules(actionName, {\n modules: moduleDefinition.modules,\n modulePrefix: modulePrefix + moduleName + '/',\n flags,\n })\n }\n }\n\n // If this is the root and at least one non-namespaced module\n // was found with the action...\n if (!modulePrefix && flags.dispatchGlobal) {\n // Dispatch the action globally.\n store.dispatch(actionName)\n }\n}\n","export default Object.freeze({\n /**\n * The GET method requests a representation of the specified resource. Requests using GET should only retrieve data.\n */\n GET: 'get',\n /**\n * The POST method submits an entity to the specified resource, often causing a change in state or side effects on the server.\n */\n POST: 'post',\n /**\n * The DELETE method deletes the specified resource.\n */\n DELETE: 'delete',\n /**\n * The PATCH method applies partial modifications to a resource.\n */\n PATCH: 'patch',\n /**\n * The PUT method replaces all current representations of the target resource with the request payload.\n */\n PUT: 'put',\n})\n","/**\n * @class\n * @public\n */\nexport default class HttpRequestUrl {\n constructor({\n baseUrl = null,\n version = null,\n subPath = '',\n query = null,\n } = {}) {\n /**\n * Request base url e.g. http://localhost:8080\n * @type {String}\n */\n this.baseUrl = baseUrl\n\n /**\n * Api version appended after base path e.g. v1.0\n * @type {String}\n */\n this.version = version\n\n /**\n * Url subdirectory. e.g. \"profile/8675309\".\n * NB: the base path (the one passed into super() in the api services) is not\n * required for the subPath. Also don't include a leading slash\n * @type {String}\n */\n this.subPath = subPath\n\n /**\n * Url query arguments. Keypair object e.g. { test: true, q: 4 }\n * @type {Object}\n */\n this.query = query\n }\n}\n","/**\n * `responseType` indicates the type of data that the server will respond with\n * @tutorial https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/responseType\n */\nexport default Object.freeze({\n /**\n * The response is a JavaScript object created by parsing the contents of\n * received data as JSON.\n */\n json: 'json',\n /**\n * The response is a Blob object containing the binary data. (Browser only).\n * Typically used for download streamed data (e.g. files).\n */\n blob: 'blob',\n /**\n * The response is a JavaScript ArrayBuffer containing binary data.\n */\n arraybuffer: 'arraybuffer',\n /**\n * The response is an HTML Document or XML XMLDocument, as appropriate based\n * on the MIME type of the received data. See HTML in XMLHttpRequest to learn\n * more about using XHR to fetch HTML content.\n */\n document: 'document',\n /**\n * The response is a text in a string.\n */\n text: 'text',\n})\n","// eslint-disable-next-line no-unused-vars\nimport HttpRequestUrl from './httpRequestUrl'\nimport HttpResponseType from '@/constants/api/HttpResponseType'\n\n/**\n * @class\n * @public\n */\nexport default class HttpRequestConfig {\n constructor({\n method,\n url,\n data = null,\n headers = null,\n responseType = HttpResponseType.json,\n isAuthenticated = true,\n } = {}) {\n /**\n * HTTP Method\n * @type {String}\n */\n this.method = method\n\n /**\n * Endpoint url\n * @type {HttpRequestUrl}\n */\n this.url = url\n\n /**\n * Payload to send to server\n * @type {*}\n */\n this.data = data\n\n /**\n * Dictionary of key pair values representing request headers\n * @type {Object}\n */\n this.headers = headers\n\n /**\n * Denotes if the request requires an auth token header to be generated\n * @type {Boolean}\n */\n this.isAuthenticated = isAuthenticated\n\n /**\n * A http response type. Please see `HttpResponseType`\n * @type {String}\n */\n this.responseType = responseType\n }\n}\n","import HttpResponseType from '@/constants/api/HttpResponseType'\n\n/**\n * @class\n * @public\n */\nexport default class AxiosRequestConfig {\n constructor({\n method,\n url,\n data = null,\n headers = null,\n responseType = HttpResponseType.json,\n } = {}) {\n /**\n * HTTP Method\n * @type {String}\n */\n this.method = method\n\n /**\n * Endpoint url\n * @type {String}\n */\n this.url = url\n\n /**\n * Payload to send to server\n * @type {*}\n */\n this.data = data\n\n /**\n * Dictionary of key pair values representing request headers\n * @type {Object}\n */\n this.headers = headers\n\n /**\n * A http response type. Please see `HttpResponseType`\n * @type {String}\n */\n this.responseType = responseType\n }\n}\n","import axios from 'axios'\nimport appConfig from '@/common/config'\nimport store from '@/store'\nimport { buildURL, buildAPIBasePath } from '@/helpers/url-helpers'\nimport HttpMethods from '@/constants/api/HttpMethods'\nimport HttpRequestConfig from '@/models/api/httpRequestConfig'\nimport HttpRequestUrl from '@/models/api/httpRequestUrl'\nimport { success } from '@/helpers/result-helper'\nimport HttpResponseType from '@/constants/api/HttpResponseType'\nimport HttpHeaders from '@/constants/api/HttpHeaders'\n// eslint-disable-next-line no-unused-vars\nimport ResultDTO from '@/models/app/resultDTO'\nimport AxiosRequestConfig from '@/models/api/axiosRequestConfig'\nimport HttpStatusCodes from '@/constants/api/HttpStatusCodes'\nimport router from '@/router/index'\nimport routeDefinitions from '@/constants/routes/routeDefinitions'\n\nclass BaseApiService {\n /**\n * Api version (e.g. 1.0). Can be overridden in HttpResponseConfig object\n * @type {String}\n */\n apiVersion = appConfig.get('apiVersion')\n\n /**\n * Configured base URL. Can be overridden in HttpResponseConfig object\n * @type {String}\n */\n baseUrl = appConfig.get('apiUrl')\n\n /**\n * Axios httpClient\n */\n httpClient = axios.create({\n json: true,\n })\n\n /**\n * A particular resource, e.g. users, posts, comments etc.\n * @type {String}\n */\n resource\n\n /**\n * @constructor\n * @param {String} resource Controller base path e.g. 'users'\n */\n constructor(resource) {\n this.resource = resource\n }\n\n /**\n * Generates a URL for the requested endpoint\n * @param {HttpRequestUrl} options\n * @returns {URL}\n */\n getUrl(options) {\n const apiUrl = buildAPIBasePath(\n options.baseUrl || this.baseUrl,\n options.version || this.apiVersion,\n this.resource,\n options.subPath\n )\n\n return buildURL(apiUrl, options.query)\n }\n\n /**\n * Handles HTTP response errors\n * @param {Error} err\n * @returns\n */\n async handleErrors(err) {\n switch (err?.response?.status) {\n // If unauthorised, renew access token then retry\n case HttpStatusCodes.Unauthorized: {\n await store.dispatch('auth/getAccessTokenOrRefresh', true)\n return {\n retry: true,\n err,\n }\n }\n case HttpStatusCodes.Forbidden: {\n if (err.response?.data?.code === 'account_suspended') {\n await store.dispatch(\n 'logException',\n new Error(\"The candidate's account has been suspended.\")\n )\n\n await router.push({\n name: routeDefinitions.accountSuspended.name,\n params: [window.location.pathname],\n replace: true,\n })\n }\n break\n }\n }\n\n throw err\n }\n\n /**\n * Will attempt to get an auth token or refresh one then generate an auth header object\n * @returns\n */\n async generateAuthHeader() {\n const accessToken = await store.dispatch('auth/getAccessTokenOrRefresh')\n\n if (typeof accessToken === 'undefined' || !accessToken)\n throw Error('An access token is required for authenticated requests')\n\n return {\n [HttpHeaders.authorization]: `Bearer ${accessToken}`,\n }\n }\n\n /**\n * Generates a dictionary object of request headers\n * @param {HttpRequestConfig} options\n */\n async compileHeaders(options) {\n let impersonateHeader = {}\n let authorizationHeader = {}\n const acceptVersionheader = { [HttpHeaders.acceptVersion]: this.apiVersion }\n\n // Set impersonate header if impersonate id is present\n if (store.getters['auth/hasImpersonateCandidateId'])\n impersonateHeader = {\n [HttpHeaders.impersonatedCandidate]:\n store.getters['auth/impersonateCandidateId'],\n }\n\n if (options.isAuthenticated)\n authorizationHeader = await this.generateAuthHeader()\n\n const headers = {\n ...options.headers,\n ...acceptVersionheader,\n ...authorizationHeader,\n ...impersonateHeader,\n }\n\n return headers\n }\n\n /**\n * Compiles request configuration and handles tasks like generating headers\n * list and retrieving the auth token\n * @param {HttpRequestConfig} options\n * @returns {Promise} Request config object\n */\n async compileRequestConfig(options) {\n const headers = await this.compileHeaders(options)\n\n return new AxiosRequestConfig({\n method: options.method,\n url: this.getUrl(options.url),\n headers,\n responseType: options.responseType,\n data: options.data,\n })\n }\n\n /**\n * Generates httpClient config and calls the httpClient with that config\n * @param {HttpRequestConfig} options\n */\n async makeHttpRequest(options) {\n const config = await this.compileRequestConfig(options)\n return await this.httpClient(config)\n }\n\n /**\n * Executes a HTTP request\n * @param {HttpRequestConfig} options\n * @param {Boolean} retry Indicates to recursive call if in retry step to prevent infinite retry loop\n * @returns {Promise}\n */\n async execute(options, retry = false) {\n try {\n /**\n * @type {data: Object, status: Number, headers: Object}\n */\n const response = await this.makeHttpRequest(options)\n return success({\n data: response.data,\n statusCode: response.status,\n headers: response.headers,\n })\n } catch (ex) {\n const response = await this.handleErrors(ex)\n\n // Only retry request if haven't already required request before\n if (response.retry && !retry) return await this.execute(options, true)\n\n throw response.err\n }\n }\n}\n\nclass ReadOnlyApiService extends BaseApiService {\n /**\n * HTTP Get authenticated request\n * @param {String} subPath Url subdirectory. e.g. \"profile-image/8675309\"\n * @param {*} query query object {key: value}\n * @returns {Promise}\n */\n async get(subPath, query) {\n return this.execute(\n new HttpRequestConfig({\n method: HttpMethods.GET,\n url: new HttpRequestUrl({ subPath, query }),\n })\n )\n }\n\n /**\n * HTTP Get unauthenticated request\n * @param {String} subPath Url subdirectory. e.g. \"profile-image/8675309\"\n * @param {*} query query object {key: value}\n * @returns {Promise}\n */\n async getAnon(subPath, query) {\n return this.execute(\n new HttpRequestConfig({\n method: HttpMethods.GET,\n url: new HttpRequestUrl({ subPath, query }),\n isAuthenticated: false,\n })\n )\n }\n\n /**\n * HTTP Get authenticated request - Response type: Blob\n * @param {String} subPath Url subdirectory. e.g. \"profile-image/8675309\"\n * @param {*} query query object {key: value}\n * @returns {Promise}\n */\n async getBlob(subPath, query) {\n return this.execute(\n new HttpRequestConfig({\n method: HttpMethods.GET,\n url: new HttpRequestUrl({ subPath, query }),\n responseType: HttpResponseType.blob,\n })\n )\n }\n}\n\nclass ModelApiService extends ReadOnlyApiService {\n /**\n * HTTP Post authenticated request\n * @param {String} subPath Url subdirectory. e.g. \"profile-image/8675309\"\n * @param {*} data Payload\n * @param {*} query query object {key: value}\n * @returns {Promise}\n */\n async post(subPath, data = {}, query = null) {\n return this.execute(\n new HttpRequestConfig({\n method: HttpMethods.POST,\n url: new HttpRequestUrl({ subPath, query }),\n data,\n })\n )\n }\n\n /**\n * HTTP Post unauthenticated request\n * @param {String} subPath Url subdirectory. e.g. \"profile-image/8675309\"\n * @param {*} data Payload\n * @param {*} query query object {key: value}\n * @returns {Promise}\n */\n async postAnon(subPath, data = {}, query = null) {\n return this.execute(\n new HttpRequestConfig({\n method: HttpMethods.POST,\n url: new HttpRequestUrl({ subPath, query }),\n data,\n isAuthenticated: false,\n })\n )\n }\n\n /**\n * HTTP Post authenticated request - Response type: Blob\n * @param {String} subPath Url subdirectory. e.g. \"profile-image/8675309\"\n * @param {*} data Payload\n * @param {*} query query object {key: value}\n * @returns {Promise}\n */\n async postBlob(subPath, data = {}, query = null) {\n return this.execute(\n new HttpRequestConfig({\n method: HttpMethods.POST,\n url: new HttpRequestUrl({ subPath, query }),\n data,\n responseType: HttpResponseType.blob,\n })\n )\n }\n\n /**\n * HTTP Put authenticated request\n * @param {String} subPath Url subdirectory. e.g. \"profile-image/8675309\"\n * @param {*} data Payload\n * @param {*} query query object {key: value}\n * @returns {Promise}\n */\n async put(subPath, data = {}, query = null) {\n return this.execute(\n new HttpRequestConfig({\n method: HttpMethods.PUT,\n url: new HttpRequestUrl({ subPath, query }),\n data,\n })\n )\n }\n\n /**\n * HTTP Put unauthenticated request\n * @param {String} subPath Url subdirectory. e.g. \"profile-image/8675309\"\n * @param {*} data Payload\n * @param {*} query query object {key: value}\n * @returns {Promise}\n */\n async putAnon(subPath, data = {}, query = null) {\n return this.execute(\n new HttpRequestConfig({\n method: HttpMethods.PUT,\n url: new HttpRequestUrl({ subPath, query }),\n data,\n isAuthenticated: false,\n })\n )\n }\n\n /**\n * HTTP Put authenticated request - Response type: Blob\n * @param {String} subPath Url subdirectory. e.g. \"profile-image/8675309\"\n * @param {*} data Payload\n * @param {*} query query object {key: value}\n * @returns {Promise}\n */\n async putBlob(subPath, data = {}, query = null) {\n return this.execute(\n new HttpRequestConfig({\n method: HttpMethods.PUT,\n url: new HttpRequestUrl({ subPath, query }),\n data,\n responseType: HttpResponseType.blob,\n })\n )\n }\n\n /**\n * HTTP Patch authenticated request\n * @param {String} subPath Url subdirectory. e.g. \"profile-image/8675309\"\n * @param {*} data Payload\n * @param {*} query query object {key: value}\n * @returns {Promise}\n */\n async patch(subPath, data = {}, query = null) {\n return this.execute(\n new HttpRequestConfig({\n method: HttpMethods.PATCH,\n url: new HttpRequestUrl({ subPath, query }),\n data,\n })\n )\n }\n\n /**\n * HTTP Patch unauthenticated request\n * @param {String} subPath Url subdirectory. e.g. \"profile-image/8675309\"\n * @param {*} data Payload\n * @param {*} query query object {key: value}\n * @returns {Promise}\n */\n async patchAnon(subPath, data = {}, query = null) {\n return this.execute(\n new HttpRequestConfig({\n method: HttpMethods.PATCH,\n url: new HttpRequestUrl({ subPath, query }),\n data,\n isAuthenticated: false,\n })\n )\n }\n\n /**\n * HTTP Delete authenticated request\n * @param {String} subPath Url subdirectory. e.g. \"profile-image/8675309\"\n * @param {*} data Payload\n * @param {*} query query object {key: value}\n * @returns {Promise}\n */\n async delete(subPath, query = null) {\n return this.execute(\n new HttpRequestConfig({\n method: HttpMethods.DELETE,\n url: new HttpRequestUrl({ subPath, query }),\n })\n )\n }\n\n /**\n * HTTP Delete unauthenticated request\n * @param {String} subPath Url subdirectory. e.g. \"profile-image/8675309\"\n * @param {*} data Payload\n * @param {*} query query object {key: value}\n * @returns {Promise}\n */\n async deleteAnon(subPath, query = null) {\n return this.execute(\n new HttpRequestConfig({\n method: HttpMethods.DELETE,\n url: new HttpRequestUrl({ subPath, query }),\n isAuthenticated: false,\n })\n )\n }\n}\n\nexport { ReadOnlyApiService, ModelApiService }\n","import { ModelApiService } from './BaseApiService'\n\nexport default class SignalRApiService extends ModelApiService {\n constructor() {\n super('SignalR')\n }\n}\n","/* eslint-disable no-unused-vars */\nimport { ModelApiService } from './BaseApiService'\nimport HttpMethods from '@/constants/api/HttpMethods'\nimport HttpRequestConfig from '@/models/api/httpRequestConfig'\nimport HttpRequestUrl from '@/models/api/httpRequestUrl'\nimport ResultDTO from '@/models/app/resultDTO'\nimport AccountCreationDTO from '@/models/user/accountCreationDTO'\n\nexport default class UserApiService extends ModelApiService {\n constructor() {\n super('me')\n }\n\n /**\n * Completes the candidate account setup step by adding a password to their account\n * @param {AccountCreationDTO} payload\n * @returns {Promise} A custom auth token that can be used to authenticate with Firebase\n */\n async accountSetup({ token, password }) {\n return this.execute(\n new HttpRequestConfig({\n method: HttpMethods.POST,\n url: new HttpRequestUrl({ subPath: 'account/setup' }),\n headers: {\n 'x-candidate-account-setup-token': token,\n },\n data: { password },\n isAuthenticated: false,\n })\n )\n }\n}\n","import { ModelApiService } from './BaseApiService'\n\nexport default class FileApiService extends ModelApiService {\n constructor() {\n super('file')\n }\n\n async createFileAccessToken(fileId) {\n return this.get(`generateAccessToken/${fileId}`)\n }\n\n async getGeneralFile(fileName) {\n return this.getBlob('general', { filePath: fileName })\n }\n}\n","import { ModelApiService } from './BaseApiService'\n\nexport default class RegistrationsApiService extends ModelApiService {\n constructor() {\n super('registrations')\n }\n\n /**\n * @param {{registrationId: Number, complianceItemId: Number}} payload\n * @returns {Promise}\n */\n async getVideoComplianceItemData({ registrationId, complianceItemId }) {\n return this.get(\n `${registrationId}/compliance-items/${complianceItemId}/video`\n )\n }\n\n /**\n * @param {{registrationId: Number, complianceItemId: Number}} payload\n * @returns {Promise}\n */\n async getComplianceItemFileData({ registrationId, complianceItemId }) {\n return this.getBlob(\n `${registrationId}/compliance-items/${complianceItemId}/file`\n )\n }\n\n /**\n * @param {{registrationId: Number, complianceItemId: Number}} payload\n * @returns {Promise}\n */\n async verifyComplianceItem({ registrationId, complianceItemId }) {\n return this.post(\n `${registrationId}/compliance-items/${complianceItemId}/verify`\n )\n }\n\n /**\n * @param {{registrationId: Number, complianceItemId: Number}} payload\n * @returns {Promise}\n */\n async getComplianceItemFormDetails({ registrationId, complianceItemId }) {\n return this.get(\n `${registrationId}/compliance-items/${complianceItemId}/form`\n )\n }\n}\n","/* eslint-disable no-unused-vars */\nimport { ModelApiService } from './BaseApiService'\nimport OngoingAvailabilityViewModel from '@/models/availability/ongoingAvailabilityViewModel'\n\nexport default class AvailabilityApiService extends ModelApiService {\n constructor() {\n super('availability')\n }\n\n /**\n * Calls the API to update a candidate's availability for multiple days.\n * @param {AvailabilityStatusDTO} newAvailabilities\n * @returns\n */\n setAvailabilityStatus(newAvailabilities) {\n return this.put('', newAvailabilities)\n }\n\n /**\n * Sets a candidate's ongoing/permanent availability\n * @param {OngoingAvailabilityViewModel} payload\n * @returns\n */\n setOngoingAvailability(payload) {\n return this.put('ongoing', payload)\n }\n}\n","import { ModelApiService } from './BaseApiService'\n\nexport default class Ready2WorkApiService extends ModelApiService {\n constructor() {\n super('ready2work')\n }\n\n setReady2WorkStatus(newStatus) {\n return this.post('', { status: newStatus })\n }\n\n getReady2WorkStatus() {\n return this.get()\n }\n}\n","import { ModelApiService } from './BaseApiService'\n\nexport default class DocumentsApiService extends ModelApiService {\n constructor() {\n super('documents')\n }\n\n async getFileTypes() {\n return await this.get('file-types')\n }\n\n /**\n * Downloads a candidate general file\n * @param {Number} documentId\n * @param {String} accessGui Guid\n * @returns\n */\n async downloadFile(documentId, accessGui) {\n return await this.getBlob(`${documentId}/file/${accessGui}`)\n }\n}\n","import { ModelApiService } from './BaseApiService'\n\nexport default class QualificationsApiService extends ModelApiService {\n constructor() {\n super('qualifications')\n }\n\n async getQualificationDetails(qualificationId) {\n return this.get(qualificationId)\n }\n\n async downloadQualificationFile(qualificationId, accessGui) {\n return this.getBlob(`${qualificationId}/file/${accessGui}`)\n }\n}\n","import { ModelApiService } from './BaseApiService'\n\nexport default class WorkExperienceApiService extends ModelApiService {\n constructor() {\n super('work-experience')\n }\n\n /**\n * @param {{workExperienceId: Number, accessGui: String}} payload\n * @returns {Promise} Blob of the application general file\n */\n async downloadFile({ workExperienceId, accessGui }) {\n return this.getBlob(`${workExperienceId}/file/${accessGui}`)\n }\n}\n","import { ModelApiService } from './BaseApiService'\n\nexport default class CertificationsApiService extends ModelApiService {\n constructor() {\n super('certifications')\n }\n\n async getCertTypes() {\n return await this.get('types')\n }\n\n /**\n * @param {{certificationId: Number, accessGui: String}} payload\n * @returns {Promise} Blob of the certification file\n */\n async downloadFile({ certificationId, accessGui }) {\n return this.getBlob(`${certificationId}/file/${accessGui}`)\n }\n}\n","import { ModelApiService } from './BaseApiService'\n\nexport default class SubjectsApiService extends ModelApiService {\n constructor() {\n super('subjects')\n }\n}\n","/* eslint-disable no-unused-vars */\nimport { ModelApiService } from './BaseApiService'\nimport TentativeFillRequestDTO from '@/models/booking/tentativeFillRequestDTO'\nimport BookingDetailsGuestAccessRequestDTO from '@/models/booking/bookingDetailsGuestAccessRequestDTO'\nimport TentativeFillRequestAnonymousDTO from '@/models/booking/tentativeFillRequestAnonymousDTO'\nimport CandidateBookingDetailsGuestAccessViewModel from '@/models/booking/candidateBookingDetailsGuestAccessViewModel'\nimport ResultDTO from '@/models/app/resultDTO'\nimport AddShiftRecordPayloadDTO from '@/models/booking/shiftRecord/addShiftRecordPayloadDTO'\n\nexport default class BookingsApiService extends ModelApiService {\n constructor() {\n super('bookings')\n }\n\n getOverviewBookingsInRange(dateFromLocal, dateToLocal) {\n return this.get('overview', {\n dateFromLocal,\n dateToLocal,\n })\n }\n\n getSummaryBookingsByDate(targetDateLocalYYYYMMDD) {\n return this.get(`summary/${targetDateLocalYYYYMMDD}`)\n }\n\n /**\n * Notifies the client that this candidate will be late to this booking\n * @param {Number} bookingId\n * @param {int} minutesLate\n */\n notifyRunningLate(bookingId, minutesLate) {\n return this.post(`${bookingId}/late`, { minutesLate })\n }\n\n /**\n * @param {TentativeFillRequestDTO} dto\n * @returns\n */\n tentativeFill(dto) {\n return this.post(`${dto.bookingId}/tentative-fill`, dto.payload)\n }\n\n /**\n * @param {TentativeFillRequestAnonymousDTO} dto\n * @returns\n */\n tentativeFillAnon(dto) {\n return this.postAnon(\n `${dto.shortTermTentativeId}/guest/${dto.accessGuid}/tentative-fill`,\n dto.payload\n )\n }\n\n /**\n * @param {TentativeFillRequestAnonymousDTO} dto\n * @returns\n */\n groupTentativeFillAnon(dto) {\n return this.postAnon(\n `group/guest/${dto.accessGuid}/tentative-fill`,\n dto.payload\n )\n }\n\n /**\n * @param {BookingDetailsGuestAccessRequestDTO} dto\n * @returns {Promise}\n */\n getBookingByIdAnon(dto) {\n return this.getAnon(`${dto.shortTermTentativeId}/guest/${dto.accessGuid}`)\n }\n\n /**\n * @param {Guid} accessToken\n * @returns {Promise}\n */\n getGroupBookingByIdAnon(accessToken) {\n return this.getAnon(`group/guest/${accessToken}`)\n }\n\n getBookingRelatedAgreements(bookingId) {\n return this.get(`${bookingId}/agreements`)\n }\n\n /**\n * Returns shift record details for a specific booking\n * @param {Number} bookingId\n * @returns {Promise}\n */\n getShiftRecordDetails(bookingId) {\n return this.get(`${bookingId}/shift-record`)\n }\n\n /**\n * Submits a shift record for a specific booking\n * @param {AddShiftRecordPayloadDTO} payload\n * @returns {Promise}\n */\n submitShiftRecord(payload) {\n return this.post(`${payload.bookingId}/shift-record`, payload.toDto())\n }\n\n /**\n * Sets the booking as did not happen\n * @param {Number} bookingId\n * @returns {Promise}\n */\n submitBookingDidNotHappen(bookingId) {\n return this.delete(`${bookingId}`)\n }\n}\n","import { ModelApiService } from './BaseApiService'\n\nexport default class AgreementsApiService extends ModelApiService {\n constructor() {\n super('agreements')\n }\n\n async putAgreements(fileId) {\n return await this.put(`${fileId}`)\n }\n\n async downloadAgreementsFile(fileId) {\n return await this.getBlob(`${fileId}`)\n }\n}\n","import { ModelApiService } from './BaseApiService'\n\nexport default class FileApiService extends ModelApiService {\n constructor() {\n super('downloads')\n }\n\n async getAppGeneralFileList() {\n return this.get('general')\n }\n\n async downloadAppGeneralFile(fileId) {\n return this.getBlob(`general/${fileId}`)\n }\n}\n","import { ModelApiService } from './BaseApiService'\n\nexport default class EventsApiService extends ModelApiService {\n constructor() {\n super('events')\n }\n\n async getEventImage(eventId) {\n return await this.getBlob(`${eventId}/image`)\n }\n}\n","import { ModelApiService } from './BaseApiService'\n\nexport default class ProfessionalDevelopmentApiService extends ModelApiService {\n constructor() {\n super('pd')\n }\n\n async getEvents(params) {\n return await this.get('events', params)\n }\n}\n","import SignalRApiService from './SignalRApiService'\nimport UserApiService from './UserApiService'\nimport FileApiService from './FileApiService'\nimport RegistrationApiService from './RegistrationsApiService'\nimport AvailabilityApiService from './AvailabilityApiService'\nimport Ready2WorkApiService from './Ready2WorkApiService'\nimport DocumentsApiService from './DocumentsApiService'\nimport QualificationsApiService from './QualificationsApiService'\nimport WorkExperienceApiService from './WorkExperienceApiService'\nimport CertificationsApiService from './CertificationsApiService'\nimport SubjectsApiService from './SubjectsApiService'\nimport BookingsApiService from './BookingsApiService'\nimport AgreementsApiService from './AgreementsApiService'\nimport DownloadsApiService from './DownloadsApiService'\n\nimport EventsApiService from './EventsApiService'\nimport ProfessionalDevelopmentApiService from './ProfessionalDevelopmentApiService'\nexport default {\n professionalDevelopment: new ProfessionalDevelopmentApiService(),\n events: new EventsApiService(),\n bookings: new BookingsApiService(),\n subjects: new SubjectsApiService(),\n workExperience: new WorkExperienceApiService(),\n qualifications: new QualificationsApiService(),\n registrations: new RegistrationApiService(),\n documents: new DocumentsApiService(),\n file: new FileApiService(),\n user: new UserApiService(),\n signalR: new SignalRApiService(),\n availability: new AvailabilityApiService(),\n ready2Work: new Ready2WorkApiService(),\n certifications: new CertificationsApiService(),\n agreements: new AgreementsApiService(),\n downloads: new DownloadsApiService(),\n}\n","import api from '@/services/api'\n\nexport default function(store) {\n store.$api = api\n}\n","import i18n from '@plugins/vue-i18n'\n\nexport default function(store) {\n store.$i18n = i18n\n}\n","import appinsights from '@plugins/appinsights'\n\nexport default function (store) {\n store.$appInsights = appinsights\n}\n","import { isEmpty } from 'lodash'\nimport { AxiosError } from '@root/node_modules/axios/index'\nimport objectHasKeys from '@/utils/object-has-keys'\nimport ErrorResponseType from '@/constants/error/ErrorResponseType'\nimport RequestErrorSource from '@/constants/error/RequestErrorSource'\nimport ErrorResponseDTO from '@/models/error/errorResponseDTO'\n\n// Utils\n\nconst determineRequestErrorType = (error) => {\n const COULD_NOT_CONTACT_SERVER_STATUSCODE = 0 // Axios sets the error code to 0 if it can't contact the server\n\n if (!(error instanceof AxiosError)) return RequestErrorSource.clientSide\n\n if (error?.response?.status !== COULD_NOT_CONTACT_SERVER_STATUSCODE)\n return RequestErrorSource.server\n\n return RequestErrorSource.request\n}\n\n/**\n * Default API request validation response\n *\n * Object Structure:\n * ```json\n * {\n errors: Object,\n status: Number,\n title: String?,\n traceId: String?,\n type: String?,\n }\n * ```\n *\n * @param {Object} responseData\n * @returns\n */\nconst mapApiValidationErrorResponseToError = (error, errorSource, $i18n) => {\n const base = baseErrorResponse(error, errorSource, $i18n)\n base.data = error.response?.data?.errors\n base.type = error.response?.data?.type || ErrorResponseType.api\n base.message = error.response?.data?.title || base.message\n\n return base\n}\n\n/**\n * Ready2WorkAPI.DTOs.V1.Core.ErrorResponse\n *\n * Object Structure:\n * ```json\n * {\n type: String?,\n code: String?,\n message: String?,\n param: String?,\n }\n * ```\n *\n * @returns\n */\nconst mapR2WErrorResponseToError = (error, errorSource, $i18n) => {\n const base = baseErrorResponse(error, errorSource, $i18n)\n base.type = error.response?.data?.type || ErrorResponseType.api\n base.code = error.response?.data?.code || base.code\n base.message = error.response?.data?.message || error?.message || base.message\n base.param = error.response?.data?.param\n return base\n}\n\n// Constants\nconst BASE_ERROR_RESPONSE_OBJ_KEYS = ['type', 'code', 'param']\nconst API_VALIDATION_ERROR_OBJ_KEYS = [\n 'errors',\n 'status',\n 'title',\n 'traceId',\n 'type',\n]\n\n// Abstract Product\nconst baseErrorResponse = (error, errorSource, $i18n) => {\n const responseData = error?.response?.data\n\n return new ErrorResponseDTO({\n error,\n source: errorSource,\n code: responseData?.code || error?.code || 'error.genericApiError',\n type: responseData?.type || ErrorResponseType.API,\n message: responseData?.code\n ? $i18n.t(`error.${responseData.code}`)\n : error?.message || $i18n.t('error.genericApiError'),\n param: responseData?.param || null,\n })\n}\n\n// Factory\nexport default function (error, $i18n) {\n const errorSource = determineRequestErrorType(error)\n\n switch (errorSource) {\n case RequestErrorSource.server:\n return serverErrorResponse(error, errorSource, $i18n)\n case RequestErrorSource.request:\n return requestErrorResponse(error, errorSource, $i18n)\n case RequestErrorSource.clientSide:\n return clientSideErrorResponse(error, errorSource, $i18n)\n default:\n return baseErrorResponse(error, errorSource, $i18n)\n }\n}\n\n// Concrete Products\n\nconst serverErrorResponse = (error, errorSource, $i18n) => {\n if (!error?.response || isEmpty(error?.response) || !error?.response?.data)\n return baseErrorResponse(error, errorSource, $i18n)\n\n // Case: Default API request validation response\n if (objectHasKeys(API_VALIDATION_ERROR_OBJ_KEYS, error.response?.data)) {\n return mapApiValidationErrorResponseToError(error, errorSource, $i18n)\n }\n\n // Case: Ready2WorkAPI.DTOs.V1.Core.ErrorResponse\n if (objectHasKeys(BASE_ERROR_RESPONSE_OBJ_KEYS, error.response?.data))\n return mapR2WErrorResponseToError(error, errorSource, $i18n)\n\n // Default Case\n return baseErrorResponse(error, errorSource, $i18n)\n}\n\nconst requestErrorResponse = (error, errorSource, $i18n) => {\n return baseErrorResponse(error, errorSource, $i18n)\n}\n\nconst clientSideErrorResponse = (error, errorSource, $i18n) => {\n return baseErrorResponse(error, errorSource, $i18n)\n}\n","import dispatchActionForAllModules from '@utils/dispatch-action-for-all-modules'\nimport Vue from 'vue'\nimport Vuex from 'vuex'\nimport toast from '@services/toasts/index.js'\nimport { nanoid } from 'nanoid'\nimport modules from './modules'\nimport api from '@/plugins/api.storePlugin'\nimport i18n from '@/plugins/i18n.storePlugin'\nimport { getSavedState, saveState, deleteState } from '@/helpers/cache-helpers'\nimport config from '@/common/config'\nimport dayjs from '@/services/date'\nimport appInsights from '@/plugins/appinsights.storePlugin'\nimport { logger } from '@/services/logging/AppLogger'\nimport ErrorResponseFactory from '@/services/error/ErrorResponseFactory'\nimport { getStartOfWeekFromLocale } from '@/helpers/date-helpers'\nimport { DayOfWeek } from '@/constants/date/DayOfWeek.js'\n\nVue.use(Vuex)\n\nconst getDefaultState = () => {\n return {\n debugMessages: [],\n loadingCount: 0,\n appLoadingCount: 0,\n debugMode: getSavedState(config.get('app.debugStorageKey')),\n darkMode: getSavedState('darkMode'),\n initialAppLoad: false, // Prevents full page loader on subsequent loads\n embedded: false, // App is embedded within RR\n drawer: getSavedState('drawer'),\n redirectUrl: null,\n userSettings: {\n date: {\n startOfWeek: getSavedState('userSettings.date.startOfWeek'),\n },\n availability: {\n enableWeekends:\n getSavedState('userSettings.availability.enableWeekends') || false,\n },\n },\n // TODO: Should really be returned via an api but for the sake of time this will do\n contactLocations: [\n {\n id: nanoid(),\n name: 'Melbourne - Collingwood',\n email: 'au.anzuk.education',\n phone: '03 9249 2444',\n state: ['Victoria', 'VIC'],\n country: ['Australia', 'AU'],\n address: '2-4 Down St\\nCollingwood VIC 3066 Australia',\n },\n {\n id: nanoid(),\n name: 'Melbourne - St Kilda Road',\n email: 'au.anzuk.education',\n phone: '03 9249 2444',\n state: ['Victoria', 'VIC'],\n country: ['Australia', 'AU'],\n address: 'Level 10, 390 St Kilda Road\\nMelbourne VIC 3004 Australia',\n },\n {\n id: nanoid(),\n name: 'Geelong',\n email: 'au.anzuk.education',\n phone: '03 5201 7956',\n state: ['Victoria', 'VIC'],\n country: ['Australia', 'AU'],\n address:\n 'Level 2 Suite 20, 10-24 Moorabool Street\\nGeelong VIC 3220 Australia',\n },\n {\n id: nanoid(),\n name: 'Notting Hill',\n email: 'au.anzuk.education',\n phone: '03 5201 7956',\n state: ['Victoria', 'VIC'],\n country: ['Australia', 'AU'],\n address:\n 'Level 1 Building 3, 270 Ferntree Gully Road\\nNotting Hill VIC 3168 Australia',\n },\n {\n id: nanoid(),\n name: 'Sydney',\n email: 'bookings.nsw@anzuk.education',\n phone: '02 8027 7909',\n state: ['New South Wales', 'NSW'],\n country: ['Australia', 'AU'],\n address: '302/83-97 Kippax St\\nSurry Hills NSW 2010 Australia',\n },\n {\n id: nanoid(),\n name: 'Brisbane',\n email: 'au.anzuk.education',\n phone: '07 3852 6122',\n state: ['Queensland', 'QLD'],\n country: ['Australia', 'AU'],\n address: 'Level 1/120 Wickham St\\nFortitude QLD 4006 Australia',\n },\n {\n id: nanoid(),\n name: 'Canberra',\n email: 'au.anzuk.education',\n phone: '02 6113 7933',\n state: ['Australian Capital Territory', 'ACT'],\n country: ['Australia', 'AU'],\n address:\n 'Suite 8, Level 5, 17-21 University Avenue\\nCity ACT 2601 Australia',\n },\n {\n id: nanoid(),\n name: 'Perth',\n email: 'au.anzuk.education',\n phone: '08 9460 1000',\n state: ['Western Australia', 'WA'],\n country: ['Australia', 'AU'],\n address:\n 'Level 2, Building C\\n355 Scarborough Beach Road, Osborne Park WA 6017 Australia',\n },\n\n {\n id: nanoid(),\n name: 'London',\n email: 'uk@anzuk.education',\n phone: '02037874553',\n state: ['London'],\n country: ['United Kingdom', 'UK'],\n address:\n 'Axe and Bottle Court, Ground Floor 70 Newcomen Street\\nLondon SE1 1YT United Kingdom',\n },\n {\n id: nanoid(),\n name: 'Surrey',\n email: 'surrey@anzuk.education',\n phone: '01483 926324',\n state: ['Surrey'],\n country: ['United Kingdom', 'UK'],\n address:\n 'Chessington School, Garrison Lane, Chessington\\nSurrey KT9 2JS United Kingdom',\n },\n {\n id: nanoid(),\n name: 'Bristol',\n email: 'bristol@anzuk.education',\n phone: '0117 4573443',\n state: ['Bristol'],\n country: ['United Kingdom', 'UK'],\n address:\n '160 Aztec West, Park Avenue, Almondsbury\\nBristol BS32 4TU United Kingdom',\n },\n {\n id: nanoid(),\n name: 'Wales, UK',\n email: 'wales@anzuk.education',\n phone: '01633 988 051',\n state: ['Newport'],\n country: ['United Kingdom', 'UK'],\n address:\n 'Kings Chambers, 8 High Street\\nNewport, NP20 1FQ United Kingdom',\n },\n\n {\n id: nanoid(),\n name: 'Toronto',\n email: 'ca@anzuk.education',\n phone: '+ 1 226 773 1955',\n state: ['Toronto'],\n country: ['Canada', 'CA'],\n address: 'Toronto CA',\n },\n\n {\n id: nanoid(),\n name: 'Los Angeles',\n email: 'la@scoot.education',\n phone: '+13104777707',\n state: ['California', 'CA'],\n country: [\n 'United States',\n 'United States of America',\n 'America',\n 'US',\n 'USA',\n ],\n address: '5670 Wilshire Blvd. Suite 1970\\nLos Angeles, CA 90036',\n },\n {\n id: nanoid(),\n name: 'Bay Area',\n email: 'sf@scoot.education',\n phone: '+14155043933',\n state: ['California', 'CA'],\n country: [\n 'United States',\n 'United States of America',\n 'America',\n 'US',\n 'USA',\n ],\n address: '490 43rd St\\nOakland, CA 94609',\n },\n {\n id: nanoid(),\n name: 'San Diego',\n email: 'sd@scoot.education',\n phone: '+18589993075',\n state: ['California', 'CA'],\n country: [\n 'United States',\n 'United States of America',\n 'America',\n 'US',\n 'USA',\n ],\n address: '600 B St. Suite 300\\nSan Diego, CA 92101',\n },\n {\n id: nanoid(),\n name: 'Central Valley',\n email: 'sf@scoot.education',\n phone: '+14155043933',\n state: ['California', 'CA'],\n country: [\n 'United States',\n 'United States of America',\n 'America',\n 'US',\n 'USA',\n ],\n address: '400 Capitol Mall Suite 900\\nSacramento, CA 95814',\n },\n {\n id: nanoid(),\n name: 'Inland Empire',\n email: 'sd@scoot.education',\n phone: '+18589993075',\n state: ['California', 'CA'],\n country: [\n 'United States',\n 'United States of America',\n 'America',\n 'US',\n 'USA',\n ],\n address: '3600 Lime St. Bldg 2\\nRiverside, CA 92501',\n },\n {\n id: nanoid(),\n name: 'Phoenix, Arizona',\n email: 'px@scoot.education',\n phone: '+6028887976',\n state: ['Arizona', 'AZ'],\n country: [\n 'United States',\n 'United States of America',\n 'America',\n 'US',\n 'USA',\n ],\n address: '2425 E Camelback Rd Suite 150\\nPhoenix, AZ 85016',\n },\n {\n id: nanoid(),\n name: 'Denver, Colorado',\n email: 'dr@scoot.education',\n phone: '+7194167979',\n state: ['Colorado', 'CO'],\n country: [\n 'United States',\n 'United States of America',\n 'America',\n 'US',\n 'USA',\n ],\n address: '2420 17th St\\nDenver, CO 80202',\n },\n {\n id: nanoid(),\n name: 'Las Vegas, Nevada',\n email: 'lv@scoot.education',\n phone: '+7755073344',\n state: ['Nevada', 'NV'],\n country: [\n 'United States',\n 'United States of America',\n 'America',\n 'US',\n 'USA',\n ],\n address: '2420 17th St\\nDenver, CO 80202',\n },\n {\n id: nanoid(),\n name: 'Salt Lake City, Utah',\n email: 'slc@scoot.education',\n phone: '+3853609771',\n state: ['Utah', 'UT'],\n country: [\n 'United States',\n 'United States of America',\n 'America',\n 'US',\n 'USA',\n ],\n address: '',\n },\n {\n id: nanoid(),\n name: 'Houston',\n email: 'hn@scoot.education',\n phone: '+2818555200',\n state: ['Texas', 'TX'],\n country: [\n 'United States',\n 'United States of America',\n 'America',\n 'US',\n 'USA',\n ],\n address: '1201 Fannin St. #202, Office 107\\nHouston, TX 77002',\n },\n {\n id: nanoid(),\n name: 'Dallas',\n email: 'ds@scoot.education',\n phone: '+9726378959',\n state: ['Texas', 'TX'],\n country: [\n 'United States',\n 'United States of America',\n 'America',\n 'US',\n 'USA',\n ],\n address: '1920 McKinney Ave Floor 8\\nDallas, Texas 75201',\n },\n {\n id: nanoid(),\n name: 'San Antonio',\n email: 'sa@scoot.education',\n phone: '+2108903010',\n state: ['Texas', 'TX'],\n country: [\n 'United States',\n 'United States of America',\n 'America',\n 'US',\n 'USA',\n ],\n address: '11103 West Ave, Suite 2101\\nSan Antonio, TX 78213',\n },\n {\n id: nanoid(),\n name: 'Jersey City, New Jersey',\n email: 'jc@scoot.education',\n phone: '+5513057772',\n state: ['Texas', 'TX'],\n country: [\n 'United States',\n 'United States of America',\n 'America',\n 'US',\n 'USA',\n ],\n address: '78 John Miller Way Suite 2001\\nKearny, NJ 07032',\n },\n {\n id: nanoid(),\n name: 'Miami, Florida',\n email: 'mi@scoot.education',\n phone: '+7865503598',\n state: ['Texas', 'TX'],\n country: [\n 'United States',\n 'United States of America',\n 'America',\n 'US',\n 'USA',\n ],\n address: '333 Las Olas Way, CU1\\nFort Lauderdale, FL 33301',\n },\n\n {\n id: nanoid(),\n name: 'Wellington, NZ',\n email: 'relief@epeducation.co.nz',\n phone: '+64 4 387 9988',\n state: ['Wellington'],\n country: ['New Zealand', 'NZ'],\n address: 'Level 7, 94 Dixon St\\nWellington 6011',\n },\n {\n id: nanoid(),\n name: 'Auckland, NZ',\n email: 'relief@epeducation.co.nz',\n phone: '+64 4 387 9988',\n state: ['Auckland'],\n country: ['New Zealand', 'NZ'],\n address: '300 Richmond Road, Grey Lynn\\nAuckland 1021',\n },\n {\n id: nanoid(),\n name: 'Christchurch, NZ',\n email: 'relief@epeducation.co.nz',\n phone: '+64 4 387 9988',\n state: ['Auckland'],\n country: ['New Zealand', 'NZ'],\n address:\n 'Level 2, Unit 9, 15 Sir Gil Simpson Drive\\nBurnside,Christchurch 8053',\n },\n ],\n }\n}\n\nconst state = getDefaultState()\n\nconst store = new Vuex.Store({\n modules,\n state,\n plugins: [api, i18n, appInsights],\n // Enable strict mode in development to get a warning\n // when mutating state outside of a mutation.\n // https://vuex.vuejs.org/guide/strict.html\n strict: process.env.NODE_ENV !== 'production',\n getters: {\n moduleName: () => 'root-store',\n isLoading: (state) => state.loadingCount > 0,\n isLoadingApp: (state) => state.appLoadingCount > 0,\n hasLoadedAppOnce: (state) => state.initialAppLoad,\n isError: (state) => state.error,\n isDebugModeActive: (state) => state.debugMode,\n isDarkModeActive: (state) => state.darkMode,\n isDrawerOpen: (state) => state.drawer,\n areAvailabilityWeekendsEnabled: (state) =>\n state.userSettings.availability.enableWeekends,\n debugLog: (state) => state.debugMessages,\n redirectUrl: (state) => state.redirectUrl,\n startOfWeek:\n (state) =>\n (locale = 'en') => {\n if (\n state.userSettings.date.startOfWeek !== 0 &&\n (!state.userSettings.date.startOfWeek ||\n state.userSettings.date.startOfWeek < 0)\n ) {\n const startOfWeekLocaleAware = getStartOfWeekFromLocale(locale)\n return startOfWeekLocaleAware.day()\n }\n\n return state.userSettings.date.startOfWeek\n },\n contactLocations: (state) => state.contactLocations,\n getContactLocationsByCountry: (state, getters) => (country) => {\n if (!country) return []\n\n const countryLowerCase = country.toLowerCase()\n const filteredByCountry = getters.contactLocations.filter((location) =>\n location.country\n .map((countryItem) => countryItem.toLowerCase())\n .includes(countryLowerCase)\n )\n\n return filteredByCountry\n },\n /**\n * Attempt to filter the anzuk location list to remove irrelevant locations\n * base on the user's geographical location\n * @param {*} state\n * @param {*} getters\n * @returns\n */\n getContactLocationsByStateAndCountry:\n (state, getters) => (stateStr, country) => {\n const filteredByCountry = getters.getContactLocationsByCountry(country)\n\n if (!filteredByCountry || filteredByCountry.length === 0) {\n return getters.contactLocations\n }\n\n if (!stateStr) {\n return filteredByCountry\n }\n\n const stateLowerCase = stateStr.toLowerCase()\n\n const filteredByState = filteredByCountry.filter((location) =>\n location.state\n .map((stateItem) => stateItem.toLowerCase())\n .includes(stateLowerCase)\n )\n\n if (!filteredByState || filteredByState.length === 0) {\n return filteredByCountry\n }\n\n return filteredByState\n },\n },\n mutations: {\n START_LOADING(state) {\n state.loadingCount++\n },\n FINISH_LOADING(state) {\n state.loadingCount--\n },\n INCREMENT_APP_LOADING(state) {\n state.appLoadingCount++\n },\n DECREMENT_APP_LOADING(state) {\n state.appLoadingCount--\n },\n SET_APP_AS_LOADED(state) {\n state.initialAppLoad = true\n },\n RESET_APP_LOADING_STATE(state) {\n state.initialAppLoad = false\n },\n SET_ERROR(state) {\n state.error = true\n },\n ENABLE_DEBUG(state, persistent) {\n state.debugMode = true\n if (persistent) saveState(config.get('app.debugStorageKey'), true)\n },\n DISABLE_DEBUG(state) {\n state.debugMode = false\n deleteState(config.get('app.debugStorageKey'))\n },\n ENABLE_DARKMODE(state) {\n state.darkMode = true\n saveState('darkMode', true)\n },\n DISABLE_DARKMODE(state) {\n state.darkMode = false\n saveState('darkMode', false)\n },\n OPEN_DRAWER(state) {\n state.drawer = true\n saveState('drawer', true)\n },\n CLOSE_DRAWER(state) {\n state.drawer = false\n saveState('drawer', false)\n },\n SET_REDIRECT_URL(state, url) {\n state.redirectUrl = url\n },\n CLEAR_REDIRECT_URL(state) {\n state.redirectUrl = null\n },\n CLEAR(state) {\n // Clear out local and session storage\n localStorage.clear()\n sessionStorage.clear()\n\n Object.assign(state, getDefaultState())\n },\n ADD_DEBUG_MESSAGE(state, obj) {\n state.debugMessages.push(obj)\n },\n TOGGLE_AVAILABILITY_WEEKENDS(state) {\n state.userSettings.availability.enableWeekends =\n !state.userSettings.availability.enableWeekends\n saveState(\n 'userSettings.availability.enableWeekends',\n state.userSettings.availability.enableWeekends\n )\n },\n TOGGLE_START_OF_WEEK(state, currentStartOfWeek) {\n state.userSettings.date.startOfWeek =\n currentStartOfWeek === DayOfWeek.SUNDAY\n ? DayOfWeek.MONDAY\n : DayOfWeek.SUNDAY\n saveState(\n 'userSettings.date.startOfWeek',\n state.userSettings.date.startOfWeek\n )\n },\n },\n actions: {\n /**\n * Logs a debug message\n * @param {*} param0\n * @param {String|Object|Function} message\n * @returns\n */\n addDebugMessage({ commit, getters }, message) {\n if (!getters.isDebugModeActive) return\n commit('ADD_DEBUG_MESSAGE', {\n date: dayjs().format('llll'),\n message,\n id: nanoid(),\n })\n toast.debug(message)\n console.debug(message)\n },\n\n /**\n * Logs store exceptions via the app logger\n * @param {*} param0\n * @param {Error} error\n */\n logException(context, error) {\n const errorResponseDTO = ErrorResponseFactory(error, this.$i18n)\n logger.logError(errorResponseDTO)\n return errorResponseDTO\n },\n startLoadingApp({ commit }) {\n commit('INCREMENT_APP_LOADING')\n },\n finishLoadingApp({ commit }) {\n commit('DECREMENT_APP_LOADING')\n },\n startLoading({ commit }) {\n commit('START_LOADING')\n },\n finishLoading({ commit }) {\n commit('FINISH_LOADING')\n },\n setAppAsLoaded({ commit }) {\n commit('SET_APP_AS_LOADED')\n },\n resetAppLoadingState({ commit }) {\n commit('RESET_APP_LOADING_STATE')\n },\n toggleDebugMode({ commit, dispatch, getters }, { persistent = false }) {\n if (!getters.isDebugModeActive) {\n commit('ENABLE_DEBUG', persistent)\n dispatch('addDebugMessage', 'Debug mode on')\n } else {\n dispatch('addDebugMessage', 'Debug mode off')\n commit('DISABLE_DEBUG')\n }\n },\n toggleDarkMode({ commit, getters }) {\n getters.isDarkModeActive\n ? commit('DISABLE_DARKMODE')\n : commit('ENABLE_DARKMODE')\n },\n toggleDrawer({ commit, getters }) {\n getters.isDrawerOpen ? commit('CLOSE_DRAWER') : commit('OPEN_DRAWER')\n },\n setRedirectUrl({ commit }, url) {\n commit('SET_REDIRECT_URL', url)\n },\n clearRedirectUrl({ commit }) {\n commit('CLEAR_REDIRECT_URL')\n },\n clearStore({ commit }) {\n dispatchActionForAllModules('clear')\n\n commit('CLEAR')\n },\n async setLocale({ dispatch }, locale) {\n this.$i18n.locale = locale\n await dispatch('setFavicon')\n },\n setFavicon(context) {\n const favicon = document.querySelector(\"link[rel~='icon']\")\n favicon.href = this.$i18n.t('app.favicon')\n },\n toggleAvailabilityWeekendSetting({ commit }) {\n commit('TOGGLE_AVAILABILITY_WEEKENDS')\n },\n toggleStartOfWeekSetting({ commit, getters }) {\n commit('TOGGLE_START_OF_WEEK', getters.startOfWeek(this.$i18n.locale))\n },\n },\n})\n\nexport default store\n\n// Automatically run the `init` action for every module,\n// if one exists.\ndispatchActionForAllModules('init')\n","/**\n * Validates that an object has every key provided in the expected array\n * @param {Array} expected\n * @param {Object} obj\n * @returns {Boolean}\n */\nexport default function objectHasKeys(expected = [], obj = {}) {\n if (!expected || !Array.isArray(expected) || expected.length === 0)\n throw Error('Expected array needs to be a valid, non-empty array')\n\n if (!obj) throw Error('Object needs to be non-empty')\n\n return expected.every((key) => Object.prototype.hasOwnProperty.call(obj, key))\n}\n","import DOMPurify from 'dompurify'\n\n/**\n * Sanitzies strings containing html to remove potentially harmful code and XSS attacks\n * @param {String} dirtyHtml Potentially unsanitised HTML\n * @returns\n */\nexport default function sanitizeHtml(dirtyHtml) {\n return DOMPurify.sanitize(dirtyHtml, {\n USE_PROFILES: { html: true },\n })\n}\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"app\"}},[(_vm.isAppLoading)?_c('Loading'):_c('RouterView',{key:_vm.$route.path})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n","import mod from \"-!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./app.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./app.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./app.vue?vue&type=template&id=302d0955&\"\nimport script from \"./app.vue?vue&type=script&lang=js&\"\nexport * from \"./app.vue?vue&type=script&lang=js&\"\nimport style0 from \"./app.vue?vue&type=style&index=0&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-btn',_vm._g(_vm._b({},'v-btn',Object.assign({}, _vm.commonAttributes, _vm.$attrs),false),_vm.$listeners),[_vm._t(\"default\")],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./_base-button.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./_base-button.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./_base-button.vue?vue&type=template&id=bc3ebc9e&\"\nimport script from \"./_base-button.vue?vue&type=script&lang=js&\"\nexport * from \"./_base-button.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\ninstallComponents(component, {VBtn})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.source === 'mdi')?_c('v-icon',_vm._b({},'v-icon',_vm.$attrs,false),[_vm._v(_vm._s(_vm.name))]):(_vm.source === 'custom')?_c('span',_vm._b({class:_vm.customIconClass},'span',_vm.$attrs,false)):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./_base-icon.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./_base-icon.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./_base-icon.vue?vue&type=template&id=5c8cd9da&\"\nimport script from \"./_base-icon.vue?vue&type=script&lang=js&\"\nexport * from \"./_base-icon.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VIcon } from 'vuetify/lib/components/VIcon';\ninstallComponents(component, {VIcon})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ValidationProvider',{attrs:{\"name\":_vm.$attrs.label,\"rules\":_vm.rules},scopedSlots:_vm._u([{key:\"default\",fn:function(ref){\nvar errors = ref.errors;\nreturn [_c('v-select',_vm._g(_vm._b({attrs:{\"error-messages\":errors},scopedSlots:_vm._u([(_vm.$attrs.multiple)?{key:\"prepend-item\",fn:function(){return [_c('v-list-item',{attrs:{\"ripple\":\"\"},on:{\"click\":_vm.toggleSelectAll}},[_c('v-list-item-action',[_c('v-icon',{attrs:{\"color\":_vm.innerValue.length > 0 ? 'blue' : ''}},[_vm._v(\" \"+_vm._s(_vm.compSelectAllItemsIcon)+\" \")])],1),_c('v-list-item-content',[_c('v-list-item-title',[_vm._v(\" Select All \")])],1)],1),_c('v-divider',{staticClass:\"mt-2\"})]},proxy:true}:null],null,true),model:{value:(_vm.innerValue),callback:function ($$v) {_vm.innerValue=$$v},expression:\"innerValue\"}},'v-select',_vm.$attrs,false),_vm.$listeners))]}}])})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./_base-input-select.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./_base-input-select.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./_base-input-select.vue?vue&type=template&id=23f322be&\"\nimport script from \"./_base-input-select.vue?vue&type=script&lang=js&\"\nexport * from \"./_base-input-select.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VDivider } from 'vuetify/lib/components/VDivider';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VListItem } from 'vuetify/lib/components/VList';\nimport { VListItemAction } from 'vuetify/lib/components/VList';\nimport { VListItemContent } from 'vuetify/lib/components/VList';\nimport { VListItemTitle } from 'vuetify/lib/components/VList';\nimport { VSelect } from 'vuetify/lib/components/VSelect';\ninstallComponents(component, {VDivider,VIcon,VListItem,VListItemAction,VListItemContent,VListItemTitle,VSelect})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ValidationProvider',{attrs:{\"name\":_vm.$attrs.label,\"rules\":_vm.rules},scopedSlots:_vm._u([{key:\"default\",fn:function(ref){\nvar errors = ref.errors;\nreturn [_c('v-text-field',_vm._g(_vm._b({attrs:{\"type\":_vm.type,\"error-messages\":errors},model:{value:(_vm.innerValue),callback:function ($$v) {_vm.innerValue=$$v},expression:\"innerValue\"}},'v-text-field',\n _vm.$attrs\n // https://vuejs.org/v2/guide/components-props.html#Disabling-Attribute-Inheritance\n ,false),\n _vm.$listeners\n // https://vuejs.org/v2/guide/components-custom-events.html#Binding-Native-Events-to-Components\n ))]}}])})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./_base-input-text.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./_base-input-text.vue?vue&type=script&lang=js&\"","// extracted by mini-css-extract-plugin\nexport default {\"v-btn\":\"_base-input-text_v-btn_jqVd3\",\"v-tab\":\"_base-input-text_v-tab_ZqMew\",\"v-navigation-drawer\":\"_base-input-text_v-navigation-drawer_eiB8L\",\"v-list-item__title\":\"_base-input-text_v-list-item__title_fuyA6\",\"v-list-item__subtitle\":\"_base-input-text_v-list-item__subtitle_Q8NTi\",\"v-list-item__content\":\"_base-input-text_v-list-item__content_dJGtv\",\"v-avatar\":\"_base-input-text_v-avatar_uQMDF\",\"font-monospace\":\"_base-input-text_font-monospace_NqjGr\",\"text-overflow-unset\":\"_base-input-text_text-overflow-unset_Xds4s\",\"text-overflow-clip\":\"_base-input-text_text-overflow-clip_vrrWJ\",\"text-overflow-ellipsis\":\"_base-input-text_text-overflow-ellipsis_LI7U_\",\"text-overflow-fade\":\"_base-input-text_text-overflow-fade_FfKrY\",\"white-space-unset\":\"_base-input-text_white-space-unset_zbwNh\",\"white-space-normal\":\"_base-input-text_white-space-normal_ssfoY\",\"white-space-nowrap\":\"_base-input-text_white-space-nowrap_lR4IM\",\"white-space-pre\":\"_base-input-text_white-space-pre_Mgpzm\",\"white-space-pre-wrap\":\"_base-input-text_white-space-pre-wrap_D65qL\",\"white-space-pre-line\":\"_base-input-text_white-space-pre-line_ndRKD\",\"white-space-break-spaces\":\"_base-input-text_white-space-break-spaces_gyRQb\",\"animation--clockwise\":\"_base-input-text_animation--clockwise_W2T2w\",\"clockwise\":\"_base-input-text_clockwise_R_Bvk\",\"animation--anti-clockwise\":\"_base-input-text_animation--anti-clockwise_TcTFP\",\"anti-clockwise\":\"_base-input-text_anti-clockwise_TlAAS\",\"animation--rotating\":\"_base-input-text_animation--rotating_zcL7d\",\"rotating\":\"_base-input-text_rotating__Fdda\",\"animation--rotating-diagonal\":\"_base-input-text_animation--rotating-diagonal_FJT6D\",\"rotating-diagonal\":\"_base-input-text_rotating-diagonal_jwrAX\",\"animation\":\"_base-input-text_animation_YB9I3\",\"typed-cursor\":\"_base-input-text_typed-cursor_WaTsR\",\"blink\":\"_base-input-text_blink_qUSI6\",\"floating\":\"_base-input-text_floating_Hee9r\",\"jump\":\"_base-input-text_jump_zYYNu\",\"fade-out\":\"_base-input-text_fade-out_oC3Ft\",\"bubble-v\":\"_base-input-text_bubble-v_tLL2g\",\"bubble-v-left\":\"_base-input-text_bubble-v-left_sWowM\",\"bubble-v-right\":\"_base-input-text_bubble-v-right_zz2gi\",\"shake-v\":\"_base-input-text_shake-v_J2Uwh\"};","import { render, staticRenderFns } from \"./_base-input-text.vue?vue&type=template&id=6c2d00da&\"\nimport script from \"./_base-input-text.vue?vue&type=script&lang=js&\"\nexport * from \"./_base-input-text.vue?vue&type=script&lang=js&\"\nimport style0 from \"./_base-input-text.vue?vue&type=style&index=0&lang=scss&module=true&\"\n\n\n\n\nfunction injectStyles (context) {\n \n this[\"$style\"] = (style0.locals || style0)\n\n}\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n injectStyles,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VTextField } from 'vuetify/lib/components/VTextField';\ninstallComponents(component, {VTextField})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.href)?_c('a',_vm._b({attrs:{\"href\":_vm.href,\"target\":\"_blank\"}},'a',_vm.$attrs,false),[_vm._t(\"default\")],2):_c('RouterLink',_vm._b({attrs:{\"to\":_vm.routerLinkTo}},'RouterLink',_vm.$attrs,false),[_vm._t(\"default\")],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./_base-link.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./_base-link.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./_base-link.vue?vue&type=template&id=c82dbe10&\"\nimport script from \"./_base-link.vue?vue&type=script&lang=js&\"\nexport * from \"./_base-link.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-card',{staticClass:\"transparent\",attrs:{\"elevation\":\"0\"}},[(_vm.searchable)?_c('div',[_c('v-text-field',{ref:\"baseListSelectSearchInput\",staticClass:\"mb-4\",attrs:{\"id\":\"base-list-select__search-input\",\"label\":_vm.$t('input.searchLabel'),\"prepend-icon\":\"mdi-magnify\",\"clearable\":\"\",\"autofocus\":\"\"},model:{value:(_vm.pendingSearch),callback:function ($$v) {_vm.pendingSearch=$$v},expression:\"pendingSearch\"}})],1):_vm._e(),(_vm.loading)?_c('SkeletonBaseListSelect'):(_vm.hasListItems)?_c('v-virtual-scroll',{attrs:{\"bench\":_vm.benched,\"items\":_vm.list,\"item-height\":50},scopedSlots:_vm._u([{key:\"default\",fn:function(ref){\nvar item = ref.item;\nreturn [_c('v-list-item',{key:(\"base-list-select__list-item-\" + (item.id) + \"-\" + (item.title)),on:{\"click\":function($event){return _vm.$emit('selected', item.id)}}},[_c('v-list-item-content',[_c('v-list-item-title',{class:_vm.isMobileViewPort ? 'caption ws-normal' : ''},[_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.sanitize(_vm.renderResult(item)))}})])],1),_c('v-list-item-action',[_c('v-icon',[_vm._v(\"mdi-chevron-right\")])],1)],1),_c('v-divider')]}}])}):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-list',{staticClass:\"transparent\"},[_vm._l((_vm.count),function(n){return _c('v-list-item',{key:(\"skeleton-base-list-select__list-item-\" + n)},[_c('v-list-item-content',[_c('v-list-item-title',{class:_vm.isMobileViewPort ? 'caption' : ''},[_c('v-skeleton-loader',{attrs:{\"type\":\"text\",\"width\":\"70%\"}})],1)],1),_c('v-list-item-action',[_c('v-icon',[_vm._v(\"mdi-chevron-right\")])],1)],1)}),_c('v-divider')],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./skeleton-base-list-select.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./skeleton-base-list-select.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./skeleton-base-list-select.vue?vue&type=template&id=318a2c94&\"\nimport script from \"./skeleton-base-list-select.vue?vue&type=script&lang=js&\"\nexport * from \"./skeleton-base-list-select.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VDivider } from 'vuetify/lib/components/VDivider';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VList } from 'vuetify/lib/components/VList';\nimport { VListItem } from 'vuetify/lib/components/VList';\nimport { VListItemAction } from 'vuetify/lib/components/VList';\nimport { VListItemContent } from 'vuetify/lib/components/VList';\nimport { VListItemTitle } from 'vuetify/lib/components/VList';\nimport { VSkeletonLoader } from 'vuetify/lib/components/VSkeletonLoader';\ninstallComponents(component, {VDivider,VIcon,VList,VListItem,VListItemAction,VListItemContent,VListItemTitle,VSkeletonLoader})\n","\n\n\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./_base-list-select.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./_base-list-select.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./_base-list-select.vue?vue&type=template&id=707f28f6&\"\nimport script from \"./_base-list-select.vue?vue&type=script&lang=js&\"\nexport * from \"./_base-list-select.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VDivider } from 'vuetify/lib/components/VDivider';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VListItem } from 'vuetify/lib/components/VList';\nimport { VListItemAction } from 'vuetify/lib/components/VList';\nimport { VListItemContent } from 'vuetify/lib/components/VList';\nimport { VListItemTitle } from 'vuetify/lib/components/VList';\nimport { VTextField } from 'vuetify/lib/components/VTextField';\nimport { VVirtualScroll } from 'vuetify/lib/components/VVirtualScroll';\ninstallComponents(component, {VCard,VDivider,VIcon,VListItem,VListItemAction,VListItemContent,VListItemTitle,VTextField,VVirtualScroll})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('a',{attrs:{\"href\":_vm.compHref,\"target\":_vm.compTarget}},[_c('v-img',_vm._g(_vm._b({staticClass:\"base-logo\",attrs:{\"src\":_vm.compSrc,\"title\":_vm.compAltText,\"alt\":_vm.compAltText,\"contain\":\"\"}},'v-img',Object.assign({}, _vm.commonAttributes, _vm.$attrs),false),_vm.$listeners))],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export default Object.freeze({\n COMPANY: 'company', // Company logo\n APP: 'app', // App logo (Ready2Work)\n})\n","\n\n\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./_base-logo.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./_base-logo.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./_base-logo.vue?vue&type=template&id=5e076b3e&\"\nimport script from \"./_base-logo.vue?vue&type=script&lang=js&\"\nexport * from \"./_base-logo.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VImg } from 'vuetify/lib/components/VImg';\ninstallComponents(component, {VImg})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{class:[_vm.isMobileViewPort ? 'mb-4' : 'mb-8', 'd-flex align-center mt-3']},[_vm._t(\"leftAction\"),_c('header',{staticClass:\"d-flex justify-space-between\"},[_c('div',[(_vm.subtitleOnTop)?_c('h4',{class:[!_vm.isMobileViewPort ? _vm.subtitleClass : 'body-2'],attrs:{\"id\":\"page-subtitle\"}},[_vm._v(\" \"+_vm._s(_vm.subtitle)+\" \")]):_vm._e(),_vm._t(\"title\",function(){return [_c('h2',{class:[\n !_vm.isMobileViewPort\n ? 'text-h5 d-inline-block font-weight-medium'\n : 'text-subtitle-1 font-weight-medium',\n _vm.subtitleOnTop ? 'mt-0 mb-8' : 'mb-0' ],attrs:{\"id\":\"page-title\"}},[_vm._v(\" \"+_vm._s(_vm.title)+\" \")])]}),_vm._t(\"bottomSubtitle\",function(){return [(!_vm.subtitleOnTop)?_c('h4',{class:[!_vm.isMobileViewPort ? _vm.subtitleClass : 'body-2'],attrs:{\"id\":\"page-subtitle\"}},[_vm._v(\" \"+_vm._s(_vm.subtitle)+\" \")]):_vm._e()]})],2),_vm._t(\"appendTitle\")],2)],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./_base-page-title.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./_base-page-title.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./_base-page-title.vue?vue&type=template&id=a48b04fc&\"\nimport script from \"./_base-page-title.vue?vue&type=script&lang=js&\"\nexport * from \"./_base-page-title.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',[(_vm.content && _vm.icon && !Array.isArray(_vm.content))?_c('span',{class:['status-badge body-2', _vm.capitalize ? 'text-capitalize' : '']},[_c('v-tooltip',{attrs:{\"disabled\":!_vm.tooltip,\"bottom\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nvar attrs = ref.attrs;\nreturn [_c('span',_vm._g(_vm._b({},'span',attrs,false),on),[_c('v-icon',{class:_vm.content.color + '--text',attrs:{\"left\":\"\",\"small\":\"\"}},[_vm._v(\" \"+_vm._s(_vm.content.icon)+\" \")]),_vm._v(\" \"+_vm._s(_vm.mobile ? '' : _vm.content.title)+\" \")],1)]}}],null,false,2294613669)},[_c('span',[_vm._v(_vm._s(_vm.tooltip))])])],1):(_vm.content && !Array.isArray(_vm.content))?_c('v-chip',{staticClass:\"status-badge\",attrs:{\"x-small\":\"\",\"outlined\":_vm.outlined,\"label\":_vm.label,\"color\":_vm.content.color,\"dark\":\"\"}},[_vm._v(\" \"+_vm._s(_vm.content.title)+\" \")]):(_vm.content && Array.isArray(_vm.content))?_c('div',[_vm._l((_vm.content),function(badge,index){return [_c('v-chip',{key:index,attrs:{\"x-small\":\"\",\"light\":\"\",\"outlined\":_vm.outlined}},[_vm._v(\" \"+_vm._s(badge.title)+\" \")]),_vm._v(\"   \")]})],2):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./_base-status-label.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./_base-status-label.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./_base-status-label.vue?vue&type=template&id=3c333cf4&\"\nimport script from \"./_base-status-label.vue?vue&type=script&lang=js&\"\nexport * from \"./_base-status-label.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VChip } from 'vuetify/lib/components/VChip';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VTooltip } from 'vuetify/lib/components/VTooltip';\ninstallComponents(component, {VChip,VIcon,VTooltip})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.isDev)?_c('section',[_c('article',{class:[\n 'd-flex flex-columns debug-bar__mono',\n _vm.isMobileViewPort ? 'debug-bar__mono--mobile' : '' ]},[_c('section',{staticClass:\"mx-2 white--text\"},[_c('a',{staticClass:\"white--text\",on:{\"click\":_vm.toggleDebugMode}},[_vm._v(\" \"+_vm._s(_vm.isDebug ? '[x]' : '[ ]')+\" Enable Debug Mode \")])]),_c('section',{staticClass:\"mx-2 white--text\"},[_c('a',{staticClass:\"white--text\",on:{\"click\":function($event){_vm.showDebugLog = !_vm.showDebugLog}}},[_vm._v(\" \"+_vm._s(_vm.showDebugLog ? '[x]' : '[ ]')+\" Show Debug Log \")])])]),_c('v-dialog',{attrs:{\"fullscreen\":\"\",\"hide-overlay\":\"\",\"persistent\":\"\",\"no-click-animation\":\"\",\"transition\":\"dialog-bottom-transition\"},on:{\"input\":function($event){_vm.showDebugLog = false}},model:{value:(_vm.showDebugLog),callback:function ($$v) {_vm.showDebugLog=$$v},expression:\"showDebugLog\"}},[_c('DebugLogDialog',{on:{\"close\":function($event){_vm.showDebugLog = false}}})],1)],1):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-card',{staticClass:\"debug-log__mono\"},[_c('v-toolbar',{attrs:{\"dark\":\"\",\"color\":\"primary debug-log__mono\"}},[_c('v-btn',{attrs:{\"icon\":\"\",\"dark\":\"\"},on:{\"click\":function($event){return _vm.$emit('close')}}},[_c('v-icon',[_vm._v(\"mdi-close\")])],1),_c('v-toolbar-title',[_vm._v(\"Debug Log\")]),_c('v-spacer')],1),_c('v-list',{attrs:{\"three-line\":\"\",\"subheader\":\"\"}},[_c('v-subheader',[_vm._v(\"Controls\")]),_c('v-list-item',[_c('v-list-item-action',[_c('a',{on:{\"click\":_vm.toggleDarkMode}},[_vm._v(\" \"+_vm._s(_vm.isDarkMode ? '[x]' : '[ ]')+\" \")])]),_c('v-list-item-content',[_c('v-list-item-title',[_vm._v(\"Dark Mode\")]),_c('v-list-item-subtitle',[_vm._v(\" Enable Dark Mode \")])],1)],1)],1),_c('v-divider'),_c('v-list',{attrs:{\"three-line\":\"\",\"subheader\":\"\"}},[_c('v-subheader',[_vm._v(\"Log\")]),_vm._l((_vm.debugLog),function(logItem){return _c('v-list-item',{key:logItem.id},[_c('v-list-item-content',[_c('v-list-item-subtitle',[_vm._v(_vm._s(logItem.date))]),_vm._v(\" \"+_vm._s(logItem.message)+\" \")],1)],1)})],2)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./debug-log-dialog.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./debug-log-dialog.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./debug-log-dialog.vue?vue&type=template&id=c028eb22&scoped=true&\"\nimport script from \"./debug-log-dialog.vue?vue&type=script&lang=js&\"\nexport * from \"./debug-log-dialog.vue?vue&type=script&lang=js&\"\nimport style0 from \"./debug-log-dialog.vue?vue&type=style&index=0&id=c028eb22&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"c028eb22\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VDivider } from 'vuetify/lib/components/VDivider';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VList } from 'vuetify/lib/components/VList';\nimport { VListItem } from 'vuetify/lib/components/VList';\nimport { VListItemAction } from 'vuetify/lib/components/VList';\nimport { VListItemContent } from 'vuetify/lib/components/VList';\nimport { VListItemSubtitle } from 'vuetify/lib/components/VList';\nimport { VListItemTitle } from 'vuetify/lib/components/VList';\nimport { VSpacer } from 'vuetify/lib/components/VGrid';\nimport { VSubheader } from 'vuetify/lib/components/VSubheader';\nimport { VToolbar } from 'vuetify/lib/components/VToolbar';\nimport { VToolbarTitle } from 'vuetify/lib/components/VToolbar';\ninstallComponents(component, {VBtn,VCard,VDivider,VIcon,VList,VListItem,VListItemAction,VListItemContent,VListItemSubtitle,VListItemTitle,VSpacer,VSubheader,VToolbar,VToolbarTitle})\n","\n\n\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./the-debug-bar-actions.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./the-debug-bar-actions.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./the-debug-bar-actions.vue?vue&type=template&id=22b7e8da&\"\nimport script from \"./the-debug-bar-actions.vue?vue&type=script&lang=js&\"\nexport * from \"./the-debug-bar-actions.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VDialog } from 'vuetify/lib/components/VDialog';\ninstallComponents(component, {VDialog})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('section',[(_vm.isDev)?_c('v-system-bar',{class:[\n 'debug-bar__mono',\n _vm.isMobileViewPort ? 'debug-bar__mono--mobile' : '' ],attrs:{\"app\":_vm.setAsApp,\"dark\":\"\",\"color\":\"purple\"}},[_c('v-icon',{attrs:{\"x-small\":\"\",\"left\":\"\"}},[_vm._v(\"mdi-wrench\")]),_c('span',[_vm._v(\" Dev Mode \")]),_c('v-spacer'),_c('TheDebugBarActions'),(!_vm.isMobileViewPort)?_c('section',{staticClass:\"ml-4\"},[_c('v-icon',{attrs:{\"x-small\":\"\",\"left\":\"\"}},[_vm._v(\"mdi-code-tags\")]),_c('span',[_vm._v(_vm._s((\"v\" + _vm.appVersion)))])],1):_vm._e()],1):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./the-debug-bar.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./the-debug-bar.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./the-debug-bar.vue?vue&type=template&id=9ec38a4a&\"\nimport script from \"./the-debug-bar.vue?vue&type=script&lang=js&\"\nexport * from \"./the-debug-bar.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VSpacer } from 'vuetify/lib/components/VGrid';\nimport { VSystemBar } from 'vuetify/lib/components/VSystemBar';\ninstallComponents(component, {VIcon,VSpacer,VSystemBar})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{ref:\"lottieContainer\",style:(_vm.style || { width: 'auto' })})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./lottie.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./lottie.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./lottie.vue?vue&type=template&id=129ffc0a&\"\nimport script from \"./lottie.vue?vue&type=script&lang=js&\"\nexport * from \"./lottie.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('section',[_c('TheDebugBar',{attrs:{\"set-as-app\":!_vm.isImpersonating}}),(_vm.isAuthenticated)?_c('TheImpersonateBar'):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.isImpersonating)?_c('v-system-bar',{staticClass:\"d-flex justify-center text-center align-center white--text caption\",attrs:{\"app\":\"\",\"dark\":\"\",\"window\":\"\",\"color\":\"blue\"}},[_c('header',{staticClass:\"mr-2\"},[_c('v-icon',{attrs:{\"small\":\"\",\"color\":\"white\"}},[_vm._v(\"mdi-incognito\")]),_vm._v(\" \"+_vm._s(_vm.compBarText)+\" \"),_c('span',{staticClass:\"font-weight-medium\"},[_vm._v(\" \"+_vm._s(_vm.firstName)+\" \")])],1),_vm._v(\" | \"),_c('section',{staticClass:\"ml-2\"},[_c('a',{staticClass:\"white--text text-decoration-underline\",on:{\"click\":_vm.signOut}},[_vm._v(\" \"+_vm._s(_vm.compStopText)+\" \")])]),(_vm.isDev && !_vm.isMobileViewPort)?_c('section',{staticClass:\"ml-2\"},[_c('TheDebugBarActions')],1):_vm._e()]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { mapGetters } from 'vuex'\nimport truncateText from '@/filters/truncate-text'\n\nexport default {\n computed: {\n ...mapGetters({\n impersonateCandidateId: 'auth/impersonateCandidateId',\n currentUser: 'auth/currentUser',\n }),\n firstName() {\n const fname = this.currentUser?.firstName || 'Unknown'\n const fnameCharLimit = this.isMobileViewPort ? 15 : 30\n return `${truncateText(fname.trim(), fnameCharLimit)}${\n this.isDebug ? ` (ID: ${this.impersonateCandidateId})` : ''\n }`\n },\n },\n}\n","\n\n\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./the-impersonate-bar.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./the-impersonate-bar.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./the-impersonate-bar.vue?vue&type=template&id=f9bd07ee&\"\nimport script from \"./the-impersonate-bar.vue?vue&type=script&lang=js&\"\nexport * from \"./the-impersonate-bar.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VSystemBar } from 'vuetify/lib/components/VSystemBar';\ninstallComponents(component, {VIcon,VSystemBar})\n","\n\n\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./the-system-bar-container.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./the-system-bar-container.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./the-system-bar-container.vue?vue&type=template&id=419b88b1&\"\nimport script from \"./the-system-bar-container.vue?vue&type=script&lang=js&\"\nexport * from \"./the-system-bar-container.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-app',{attrs:{\"id\":\"ready-2-work\",\"dark\":_vm.setTheme()}},[_c('TheDebugBar'),_c('v-main',{staticClass:\"r2w_bg\"},[_c('v-container',{staticClass:\"fill-height\",attrs:{\"fluid\":\"\"}},[_c('v-layout',{attrs:{\"align-center\":\"\",\"justify-center\":\"\"}},[_c('v-flex',{attrs:{\"xs12\":\"\",\"sm8\":\"\",\"md6\":\"\"}},[_vm._t(\"default\")],2)],1)],1)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./public.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./public.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./public.vue?vue&type=template&id=31cae444&scoped=true&\"\nimport script from \"./public.vue?vue&type=script&lang=js&\"\nexport * from \"./public.vue?vue&type=script&lang=js&\"\nimport style0 from \"./public.vue?vue&type=style&index=0&id=31cae444&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"31cae444\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VApp } from 'vuetify/lib/components/VApp';\nimport { VContainer } from 'vuetify/lib/components/VGrid';\nimport { VFlex } from 'vuetify/lib/components/VGrid';\nimport { VLayout } from 'vuetify/lib/components/VGrid';\nimport { VMain } from 'vuetify/lib/components/VMain';\ninstallComponents(component, {VApp,VContainer,VFlex,VLayout,VMain})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('Layout',{staticClass:\"overflow-hidden\"},[_c('div',{staticClass:\"shapes-container\"},[_c('div',{staticClass:\"animation-shape shape-ring animation--rotating-diagonal\"},[_c('div')]),_c('div',{staticClass:\"animation-shape shape-circle animation--clockwise\"},[_c('div')]),_c('div',{staticClass:\"animation-shape shape-triangle animation--anti-clockwise\"},[_c('div',{staticClass:\"animation--rotating\"})]),_c('div',{staticClass:\"animation-shape shape-diamond animation--anti-clockwise\"},[_c('div',{staticClass:\"animation--rotating\"})]),_c('div',{staticClass:\"static-shape shape-ring-1\"}),_c('div',{staticClass:\"static-shape shape-ring-2\"}),_c('div',{staticClass:\"static-shape shape-circle-1\"}),_c('div',{staticClass:\"static-shape pattern-dots-1\"}),_c('div',{staticClass:\"static-shape pattern-dots-2\"})]),_c('div',{staticClass:\"text-center white--text z-index-1\"},[_c('div',{staticClass:\"d-flex flex-column align-center\"},[_c('h3',{staticClass:\"error-title font-weight-black my-10 text-center\",staticStyle:{\"width\":\"fit-content\"}},[_c('div',{class:['errorHeader', _vm.isSmallOrLower ? 'errorHeader--sm' : '']},[_c('div',{staticClass:\"bgHighlight pr-4\"}),_c('div',{staticClass:\"text display-4 z-index-1\"},[_vm._v(\" \"+_vm._s(_vm.factory.title)+\" \")])])]),_c('p',{staticClass:\"error-desc display-1 font-weight-bold mt-0 z-index-1\"},[_vm._v(\" \"+_vm._s(_vm.factory.desc)+\" \")]),_c('p',{staticClass:\"error-sub-desc subtitle-1 font-weight-medium z-index-1\"},[_vm._v(\" \"+_vm._s(((_vm.factory.showErrorCode ? '(' + _vm.factory.errorCode + ') ' : '') + \" \" + (_vm.factory.subDesc)))+\" \")]),_c('div',{staticClass:\"error-code\",attrs:{\"data-error-code\":_vm.factory.errorText}}),_c('div',{class:[\n 'd-flex justify-center mt-10',\n _vm.isSmallOrLower ? 'flex-column-reverse w-100' : '' ]},[_c('BaseButton',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.isUserLoggedIn || _vm.currentUser),expression:\"isUserLoggedIn || currentUser\"}],class:[\n 'rounded-lg text-capitalize no-letter-spacing',\n _vm.isSmallOrLower ? '' : 'mr-2' ],attrs:{\"id\":\"error-page-logout-btn\",\"x-large\":\"\",\"text\":\"\",\"block\":_vm.isSmallOrLower,\"outlined\":\"\",\"color\":\"white\"},on:{\"click\":_vm.signOut}},[_c('v-icon',{staticClass:\"white--text\",attrs:{\"left\":\"\"}},[_vm._v(\"mdi-arrow-left\")]),_vm._v(\" \"+_vm._s(_vm.$t('error.errorGenericLogOutButtonText'))+\" \")],1),_c('BaseButton',{class:[\n 'rounded-lg text-capitalize no-letter-spacing white--text custom-elevation',\n _vm.isSmallOrLower ? 'mb-4' : 'ml-2' ],attrs:{\"id\":\"error-page-go-home-btn\",\"x-large\":\"\",\"light\":\"\",\"block\":_vm.isSmallOrLower,\"color\":\"blue\",\"href\":_vm.factory.goBackURL}},[_vm._v(\" \"+_vm._s(_vm.factory.goBackText)+\" \")])],1)])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import httpStatus from 'statuses'\nimport i18n from '@plugins/vue-i18n'\n\n// Abstract Product\nconst BaseErrorPage = (errorCode) => {\n let errorStatusText = ''\n try {\n errorStatusText = httpStatus(errorCode)\n } catch (error) {\n errorStatusText = 'Unknown'\n }\n\n return {\n // Properties\n showErrorCode: true,\n errorCode,\n errorText: `${errorCode} ${errorStatusText}`,\n title: i18n.t('error.errorGenericTitle'),\n desc: i18n.t('error.errorGenericDescription'),\n subDesc: i18n.t('error.errorGenericSubDescription'),\n goBackURL: '/',\n goBackText: i18n.t('error.errorGenericReturnButtonText'),\n }\n}\n\n// Factory\nexport function ErrorPageFactory(errorCode) {\n switch (errorCode?.toString()) {\n case '500':\n return InternalServerError(errorCode)\n case '404':\n return PageNotFoundError(errorCode)\n case '401':\n return UnauthorizedError(errorCode)\n case '400':\n return BadRequestError(errorCode)\n case '117':\n return ActionLockedError(errorCode)\n case 'accountLoadFailure':\n return AccountLoadFailedError(403)\n case 'accountSuspended':\n return AccountSuspenedError(403)\n default:\n return BaseErrorPage('500')\n }\n}\n\n// Concrete Products\nconst InternalServerError = (errorCode) => {\n return BaseErrorPage(errorCode)\n}\n\nconst BadRequestError = () => {\n return BaseErrorPage('500')\n}\n\nconst PageNotFoundError = (errorCode) => {\n const base = BaseErrorPage(errorCode)\n base.title = i18n.t('error.errorNotFoundTitle')\n base.desc = i18n.t('error.errorNotFoundDescription')\n base.subDesc = i18n.t('error.errorNotFoundSubDescription')\n base.showErrorCode = true\n return base\n}\n\nconst UnauthorizedError = (errorCode) => {\n const base = BaseErrorPage(errorCode)\n base.desc = i18n.t('error.errorUnauthorizedDescription')\n base.subDesc = i18n.t('error.errorUnauthorizedSubDescription')\n base.showErrorCode = false\n return base\n}\n\nconst ActionLockedError = (errorCode) => {\n const base = BaseErrorPage(errorCode)\n\n base.desc = i18n.t('error.errorActionLockedDescription')\n base.subDesc = i18n.t('error.errorActionLockedSubDescription')\n base.showErrorCode = false\n return base\n}\n\nconst AccountLoadFailedError = (errorCode) => {\n const base = BaseErrorPage(errorCode)\n base.desc = i18n.t('error.accountLoadFailureDesc')\n base.subDesc = i18n.t('error.accountLoadFailureSubDesc', {\n companyName: i18n.t('app.companyName'),\n })\n base.showErrorCode = false\n base.errorText = i18n.t('error.accountLoadFailureDesc')\n return base\n}\n\nconst AccountSuspenedError = (errorCode) => {\n const base = BaseErrorPage(errorCode)\n base.desc = i18n.t('error.accountSuspendedFailureDesc')\n base.subDesc = i18n.t('error.accountSuspendedFailureSubDesc', {\n companyName: i18n.t('app.companyName'),\n })\n base.showErrorCode = false\n base.errorText = i18n.t('error.accountSuspendedFailureDesc')\n return base\n}\n","\n\n\n\n\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./_error.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./_error.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./_error.vue?vue&type=template&id=4b274bc2&scoped=true&\"\nimport script from \"./_error.vue?vue&type=script&lang=js&\"\nexport * from \"./_error.vue?vue&type=script&lang=js&\"\nimport style0 from \"./_error.vue?vue&type=style&index=0&id=4b274bc2&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4b274bc2\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VIcon } from 'vuetify/lib/components/VIcon';\ninstallComponents(component, {VIcon})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('Layout',[_c('PageLoader')],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-app',{attrs:{\"id\":\"ready-2-work\",\"dark\":_vm.setTheme()}},[_c('TheSystemBarContainer'),_c('v-main',{staticClass:\"r2w_bg\"},[_c('v-container',{staticClass:\"fill-height\",attrs:{\"fluid\":\"\"}},[_c('v-layout',{attrs:{\"align-center\":\"\",\"justify-center\":\"\"}},[_c('v-flex',{attrs:{\"xs12\":\"\",\"sm8\":\"\",\"md6\":\"\"}},[_vm._t(\"default\")],2)],1)],1)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./loading.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./loading.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./loading.vue?vue&type=template&id=324fad1b&\"\nimport script from \"./loading.vue?vue&type=script&lang=js&\"\nexport * from \"./loading.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VApp } from 'vuetify/lib/components/VApp';\nimport { VContainer } from 'vuetify/lib/components/VGrid';\nimport { VFlex } from 'vuetify/lib/components/VGrid';\nimport { VLayout } from 'vuetify/lib/components/VGrid';\nimport { VMain } from 'vuetify/lib/components/VMain';\ninstallComponents(component, {VApp,VContainer,VFlex,VLayout,VMain})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-flex',{staticClass:\"text-center\"},[_c('Lottie',{attrs:{\"options\":_vm.defaultOptions,\"height\":250,\"width\":250},on:{\"animCreated\":_vm.handleAnimation}}),_c('h2',{class:[_vm.isSmallOrLower ? '' : 'mt-4']},[_c('PageLoaderQuotes')],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('section',{staticClass:\"wordCarousel\"},[_c('div',[_c('ul',{class:['flip-text', _vm.isDarkMode ? 'dark' : '']},_vm._l((_vm.quotes),function(quote,index){return _c('li',{key:index,class:[\n 'content__container__list__item font-weight-bold',\n _vm.isDarkMode ? 'white--text' : '',\n _vm.isMobileViewPort ? 'text-subtitle-2' : 'headline' ]},[_vm._v(\" \"+_vm._s(quote)+\" \")])}),0)])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./page-loader-quotes.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./page-loader-quotes.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./page-loader-quotes.vue?vue&type=template&id=9a53db7e&scoped=true&\"\nimport script from \"./page-loader-quotes.vue?vue&type=script&lang=js&\"\nexport * from \"./page-loader-quotes.vue?vue&type=script&lang=js&\"\nimport style0 from \"./page-loader-quotes.vue?vue&type=style&index=0&id=9a53db7e&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"9a53db7e\",\n null\n \n)\n\nexport default component.exports","\n\n\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./page-loader.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./page-loader.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./page-loader.vue?vue&type=template&id=7e4edc52&\"\nimport script from \"./page-loader.vue?vue&type=script&lang=js&\"\nexport * from \"./page-loader.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VFlex } from 'vuetify/lib/components/VGrid';\ninstallComponents(component, {VFlex})\n","\n\n\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./_loading.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./_loading.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./_loading.vue?vue&type=template&id=31165b7a&\"\nimport script from \"./_loading.vue?vue&type=script&lang=js&\"\nexport * from \"./_loading.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.offlineConfirmed)?_c('Layout',[_c('h1',{class:_vm.$style.title},[_vm._v(\" The page timed out while loading. Are you sure you're still connected to the Internet? \")])]):_c('LoadingView')}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./_timeout.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./_timeout.vue?vue&type=script&lang=js&\"","// extracted by mini-css-extract-plugin\nexport default {\"v-btn\":\"_timeout_v-btn_Ep1L3\",\"v-tab\":\"_timeout_v-tab_Q8crO\",\"v-navigation-drawer\":\"_timeout_v-navigation-drawer_acLaA\",\"v-list-item__title\":\"_timeout_v-list-item__title_H88QD\",\"v-list-item__subtitle\":\"_timeout_v-list-item__subtitle_IUsjt\",\"v-list-item__content\":\"_timeout_v-list-item__content__o_6O\",\"v-avatar\":\"_timeout_v-avatar_M9Znp\",\"title\":\"_timeout_title_MGBcZ\"};","import { render, staticRenderFns } from \"./_timeout.vue?vue&type=template&id=c7520ae8&\"\nimport script from \"./_timeout.vue?vue&type=script&lang=js&\"\nexport * from \"./_timeout.vue?vue&type=script&lang=js&\"\nimport style0 from \"./_timeout.vue?vue&type=style&index=0&lang=scss&module=true&\"\n\n\n\n\nfunction injectStyles (context) {\n \n this[\"$style\"] = (style0.locals || style0)\n\n}\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n injectStyles,\n null,\n null\n \n)\n\nexport default component.exports","var map = {\n\t\"./_base-button.vue\": 9952,\n\t\"./_base-icon.vue\": 67652,\n\t\"./_base-input-select.vue\": 15888,\n\t\"./_base-input-text.vue\": 17700,\n\t\"./_base-link.vue\": 21959,\n\t\"./_base-list-select.vue\": 97146,\n\t\"./_base-logo.vue\": 20287,\n\t\"./_base-page-title.vue\": 48863,\n\t\"./_base-status-label.vue\": 57077\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 90918;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","__webpack_require__.amdO = {};","var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar [chunkIds, fn, priority] = deferred[i];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"js/\" + chunkId + \".\" + {\"62\":\"b3f5f1f1\",\"101\":\"a35d58d5\",\"129\":\"8725d56d\",\"134\":\"89ab1c8b\",\"210\":\"273f9df3\",\"310\":\"86aa6a53\",\"423\":\"b5b7e40e\",\"495\":\"9e7a4a22\",\"582\":\"4ba9d3ae\",\"650\":\"66ee2869\",\"684\":\"b8936a58\",\"692\":\"3bce0b1f\",\"707\":\"c2b69694\",\"738\":\"ddd5669d\",\"742\":\"5402b12a\",\"761\":\"0a73c23c\",\"776\":\"901210f1\",\"781\":\"afc85419\",\"786\":\"fa675450\",\"806\":\"acc64289\",\"883\":\"1f9030b3\"}[chunkId] + \".js\";\n};","// This function allow to reference async chunks\n__webpack_require__.miniCssF = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"css/\" + chunkId + \".\" + {\"101\":\"438ba3ba\",\"129\":\"174c1140\",\"134\":\"d2452f53\",\"210\":\"78c3ce49\",\"582\":\"0982e9ca\",\"650\":\"b98a7d82\",\"692\":\"5aab87c1\",\"707\":\"e45d2807\",\"738\":\"18953a2f\",\"761\":\"4ff499c7\",\"781\":\"0e45a47c\",\"786\":\"bbd761be\",\"806\":\"f13e5702\",\"883\":\"46576de8\"}[chunkId] + \".css\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","var inProgress = {};\nvar dataWebpackPrefix = \"ready-2-work:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t}\n\t;\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.p = \"/\";","var createStylesheet = (chunkId, fullhref, resolve, reject) => {\n\tvar linkTag = document.createElement(\"link\");\n\n\tlinkTag.rel = \"stylesheet\";\n\tlinkTag.type = \"text/css\";\n\tvar onLinkComplete = (event) => {\n\t\t// avoid mem leaks.\n\t\tlinkTag.onerror = linkTag.onload = null;\n\t\tif (event.type === 'load') {\n\t\t\tresolve();\n\t\t} else {\n\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\tvar realHref = event && event.target && event.target.href || fullhref;\n\t\t\tvar err = new Error(\"Loading CSS chunk \" + chunkId + \" failed.\\n(\" + realHref + \")\");\n\t\t\terr.code = \"CSS_CHUNK_LOAD_FAILED\";\n\t\t\terr.type = errorType;\n\t\t\terr.request = realHref;\n\t\t\tlinkTag.parentNode.removeChild(linkTag)\n\t\t\treject(err);\n\t\t}\n\t}\n\tlinkTag.onerror = linkTag.onload = onLinkComplete;\n\tlinkTag.href = fullhref;\n\n\tdocument.head.appendChild(linkTag);\n\treturn linkTag;\n};\nvar findStylesheet = (href, fullhref) => {\n\tvar existingLinkTags = document.getElementsByTagName(\"link\");\n\tfor(var i = 0; i < existingLinkTags.length; i++) {\n\t\tvar tag = existingLinkTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\") || tag.getAttribute(\"href\");\n\t\tif(tag.rel === \"stylesheet\" && (dataHref === href || dataHref === fullhref)) return tag;\n\t}\n\tvar existingStyleTags = document.getElementsByTagName(\"style\");\n\tfor(var i = 0; i < existingStyleTags.length; i++) {\n\t\tvar tag = existingStyleTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\");\n\t\tif(dataHref === href || dataHref === fullhref) return tag;\n\t}\n};\nvar loadStylesheet = (chunkId) => {\n\treturn new Promise((resolve, reject) => {\n\t\tvar href = __webpack_require__.miniCssF(chunkId);\n\t\tvar fullhref = __webpack_require__.p + href;\n\t\tif(findStylesheet(href, fullhref)) return resolve();\n\t\tcreateStylesheet(chunkId, fullhref, resolve, reject);\n\t});\n}\n// object to store loaded CSS chunks\nvar installedCssChunks = {\n\t143: 0\n};\n\n__webpack_require__.f.miniCss = (chunkId, promises) => {\n\tvar cssChunks = {\"101\":1,\"129\":1,\"134\":1,\"210\":1,\"582\":1,\"650\":1,\"692\":1,\"707\":1,\"738\":1,\"761\":1,\"781\":1,\"786\":1,\"806\":1,\"883\":1};\n\tif(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);\n\telse if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {\n\t\tpromises.push(installedCssChunks[chunkId] = loadStylesheet(chunkId).then(() => {\n\t\t\tinstalledCssChunks[chunkId] = 0;\n\t\t}, (e) => {\n\t\t\tdelete installedCssChunks[chunkId];\n\t\t\tthrow e;\n\t\t}));\n\t}\n};\n\n// no hmr","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t143: 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t} else installedChunks[chunkId] = 0;\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkready_2_work\"] = self[\"webpackChunkready_2_work\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [998], () => (__webpack_require__(55601)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["version","require","get","has","set","merge","env","process","config","appVersion","Vue","path","this","value","load","obj","requireComponent","keys","forEach","fileName","componentConfig","componentName","replace","split","map","kebab","charAt","toUpperCase","slice","join","Object","freeze","FULL","SHORT","ICON","NONE","DARK","LIGHT","WHITE","multiselect","range","tentative","agreementsPending","confirmDetailsRequired","feedbackRequired","runningLate","getDirections","availability","tentativeAccepted","tentativeDeclined","AGENCY_TOOK_TOO_LONG","UNABLE_TO_FILL","ANZUK_ERROR","CANDIDATE_ILLNESS","LAPSED","DELETED_FROM_GROUP_BOOKING","CANCELLED","FINANCE_CANCELLED","REFUNDED","FRIDAY_INVOICE","ECH_INVOICING_READY","ECH_NOT_APPROVED","SCHOOL_NOT_APPROVED","CLIENT_SUBMITTED_TIMESHEET_NO_CHANGES","CLIENT_SUBMITTED_TIMESHEET_MODIFIED","CLIENT_SUBMITTED_TIMESHEET_DID_NOT_HAPPEN","CANDIDATE_SUBMITTED_TIMESHEET_NO_CHANGES","CANDIDATE_SUBMITTED_TIMESHEET_MODIFIED","CANDIDATE_SUBMITTED_TIMESHEET_DID_NOT_HAPPEN","TIMESHEET_DISPUTE_OR_MISMATCH","ACTIVE_WITHOLD_PAY","ACTIVE_LAPSED","TENTATIVE_FILLED","AGENCY_MOVED_CLIENT","EXPORTED_TO_BULLHORN_NZ","PARTIAL_BULLHORN_EXPORT","TRAINING","OTHER","CANCELLED_BY_CLIENT","bookingDuration","meal","other","alert","statusBlock","nonCompliant","CLOSED_TENTATIVE_OPEN_BUT_BOOKING_NOT_105","CLOSED_STATUS_WRONG_CANDIDATE","CLOSED_STATUS_UNABLED_TO_LOAD","CLOSED_STATUS_NOT_105","REJECTED","OPEN","ACCEPTED","unset","accept","decline","TimesheetOperationType","ACCEPT","MODIFY","CANCEL","AvailabilityStatus","UNSET","AVAILABLE","UNAVAILABLE","PARTIAL","Ready2WorkStatus","READY","NOTREADY","CUSTOM_FIELD_01","FieldId","CUSTOM_FIELD_02","CUSTOM_FIELD_03","CERT_REF_NO","DATE_OBTAINED","DATE_EXPIRY","NOTE","production","development","local","unit","e2e","none","emitEvent","routerLink","externalLink","function","MediaQueryBreakPoint","code","size","xs","sm","md","lg","xl","Infinity","accent","blue","error","indigo","info","primary","red","secondary","success","warning","grey","Unknown","AUD","USD","GBP","EUR","YY","YYYY","M","MM","MMM","MMMM","D","DD","d","dd","ddd","dddd","Q","Do","X","x","H","HH","h","hh","m","mm","s","ss","SSS","Z","ZZ","A","a","LT","LTS","L","LL","LLL","LLLL","l","ll","lll","llll","DoMMM","MMMDo","DoMMMYYYY","MMMDoYYYY","dddL","ddddLL","MMMMYYYY","YYYYMMDD","YYYYMMDDT0","YYYYMM","dddDoMMM","dddMMMDo","dddDo","HHmm","WEEK","FORTNIGHT","MONTH","YEAR","past","present","future","DayOfWeek","SUNDAY","MONDAY","TUESDAY","WEDNESDAY","THURSDAY","FRIDAY","SATURDAY","DAY","QUARTER","HOUR","MINUTE","SECOND","MILLISECOND","OK","REQUIRES_ACTION","unknown","api","validation","security","notFound","server","request","clientSide","induction","ohs","covid","FormInputType","DATE","TEXT","TEXTAREA","SELECT","RADIO","ValidationRules","required","maxCharacterLength","afterObtainedDate","previous","next","CandidatePhoto","Certification","CheckBox","Contract","Form","Identification100","Qualification","ReferenceCheckFormGroup","RegistrationDoc","StatementsOfService","UploadedFile","Video","Complete","CompleteByUnlinked","RequiresCandidateAction","AwaitingVerification","AwaitingVerificationForUnlinked","document","agreement","form","internal","jotForm","RegistrationStatus","ACTIVE","COMPLETE","PENDING","IN_PROGRESS","AWAITING_VERIFICATION","DELETED","TERMINATED","RegistrationStatusReason","ITEMS_EXPIRED","ITEMS_EXPIRING","NO_CHECKLIST","AWAIT_CERT_OR_DOC","AWAITING_CANDIDATE_ACTION","AWAITING_CONSULTANT_ACTION","Vimeo","Youtube","Bitmovin","home","name","myAvailability","myRegistrations","registrationDetails","groupBookingDetailsGuestAccess","alias","bookingDetailsGuestAccess","bookingDetails","myFiles","profDevelopment","downloads","contact","help","settings","changePassword","login","accountSetup","impersonateLogout","impersonateLogin","logout","underConstruction","unauthorized","accountLoadFailure","accountSuspended","Status","VERIFIED","UNKNOWN","UNVERIFIED","general","keyAchievement","extraCurricular","rolesAndResponsibilities","text","limit","delimiter","Error","length","substring","isNonEmptyArray","arr","Array","isArray","isEmptyArray","bookingFeatureFactory","featureDecisions","backendBookingFeatureDecisions","isRunningLateEnabled","determineIfBookingIsAboutToStart","booking","tense","DateTense","hasBookingEndTimePassed","$dayjs","isAfter","endTimeLocal","MINUTES_BEFORE_START_TIME","MINUTES_AFTER_START_TIME","isBookingStartTimeApproaching","isBefore","startTimeLocal","isBookingStartTimeWithinStartHourRangeFromNow","diff","DurationUnits","isAfterBookingStartTime","hasBookingCommencedWithinStartTimeAfterRange","generateBookingActions","actionableItems","isBookingAboutToStart","processedActionableItems","clone","isTentativeBooking","includes","BookingActionableItemType","needsToSubmitShiftRecord","hasFeedbackRequired","featureToggles","push","filter","actionableItem","TypeError","filterActionableItemsForProcessingEventColour","includeList","determineColorByBookingActionableItems","filteredActionableItems","VuetifyColourClass","isCacheFresh","cacheDuration","durationUnits","lastUpdated","forceRefresh","isDirty","isEmpty","dayjs","isValid","checkCacheFreshness","duration","getSavedState","key","item","window","localStorage","getItem","JSON","parse","saveState","state","setItem","stringify","deleteState","removeItem","hashCode","str","hash","undefined","i","charCodeAt","COLOURS","ColorSet","background","foreground","orange","light_orange","yellow","light_green","aqua","light_blue","dark_blue","purple","light_purple","pink","dark_pink","dark_red","ateam_purple","anzuk_blue","COLOURS_LIST","values","avatarColourSets","stringToPredefinedColourSet","string","trim","Math","abs","MonthYearDifferentDTO","isMonthDifferent","isYearDifferent","DAYS_IN_A_FORTNIGHT","DAYS_IN_A_WEEK","NUMBER_OF_DAYS_UNTIL_END_OF_WEEK","NUMBER_OF_DAYS_UNTIL_END_OF_FORTNIGHT","calculateLastDateToDisplay","date","displayRangeType","DateStripDisplayRange","add","calcDaysToDisplayBasedOnDisplayRange","displayRange","shiftStartDateBasedOnDisplayRangeType","direction","Direction","startDate","daysToDisplay","subtract","determineDateToBeBasisOfRangeGenerationBasedOnDirection","selectedDate","dateRange","end","start","calculateDateStripDateRangeBasedOnDisplayType","targetDay","startOfWeek","weekday","DateRange","calculateLoadRangeBasedWithBuffer","buffer","Duration","startOf","endOf","determineIfMonthAndYearIsDifferentInRange","startMonth","format","startYear","endMonth","endYear","isMonthBeforeDay","locale","toLowerCase","localeData","longDateFormat","determineFormatStringsForDateRange","dayFormatString","DateFormatToken","monthFormatString","yearFormatString","monthYearDiff","isMonthBeforeDayBool","startMonthFormatString","startYearFormatString","endMonthFormatString","endYearFormatString","startFormatStringList","endFormatStringList","startFormatString","endFormatString","determineDateTense","targetDate","isTodayTheSameAsTargetDate","isSame","isTargetDateInThePast","formatDateTruncatedLocaleAware","$i18n","currentDate","ignoreRelative","target","isYesterday","t","isToday","isTomorrow","dateRangeFormatString","getAllWeekdayDatesInMonth","targetWeekday","currentMonth","DAYS_IN_WEEK","daysArr","day","month","getAllWeekdaysAcrossMultipleMonths","monthsList","weekDayArray","getListOfMonthsFromDateRange","endDate","monthsDifferenceBetweenRange","listDatesWithinRange","excludedDates","dates","some","excludedDate","getStartOfWeekFromLocale","START_OF_WEEK_INDEX","listAllDatesWithinAMonthByDayNumbers","dayNumberList","targetMonth","dayNumber","listAllDatesAcrossMultipleMonthsByDayNumbers","monthList","getRangeFromListOfDates","listOfTimestamps","sort","generateRelativeTimeWithDayMinimumValue","fromNow","getIconByMIMEType","fileType","getFileIconColourByMIMEType","getExtensionFromFileName","filename","lastIndexOf","e","getFriendlyFileSize","fileSizeBytes","sizes","parseInt","floor","log","round","pow","processFile","file","fileToBase64String","base64FileData","Promise","resolve","GenericFileModel","processFilesForUpload","files","all","extractFileNameFromContentDisposition","contentDisposition","patternMatchString","possibleFileNames","trimmedString","startsWith","replaceAll","getStatusLabelHashMap","Map","title","i18n","color","icon","getComplianceItemStatusLabelHasMap","ComplianceItemStatus","tooltip","mapSearchParamsToURL","url","searchParams","urlWithParams","URL","buildAPIBasePath","basePath","apiVersion","resource","additionalPathSegments","baseWithAPIURL","separateResourceAndPathSegementsWithSlash","resourceWithAdditionalPathSegments","buildURL","fetch","valueOf","then","response","json","localDev","loadConfig","environment","Environment","VUE_APP_TEST","Cypress","cy","onUncaughtException","getElementById","style","configFactory","configResponse","router","store","vuetify","firebase","App","getAuth","onAuthStateChanged","appinsights","sanitizeHtml","appInsightsConfig","app","truncateText","el","binding","innerHTML","auth","dispatch","render","$mount","getters","handleRedirectPromise","__app__","computed","mapGetters","isDebug","isDarkMode","hasImpersonateCandidateId","isAuthenticated","isExtraSmall","$mq","MediaQueryBreakPoints","isSmall","isMedium","isLarge","isExtraLarge","isSmallOrLower","isMediumOrLower","isLargeOrLower","isSmallOrHigher","isMediumOrHigher","isLargeOrHigher","isMobileViewPort","isDev","isImpersonating","heightOfDevBar","getStartOfWeek","$_routeDefinitions","routeDefinitions","methods","mapActions","addDebugMessage","logException","logger","msg","setTheme","$vuetify","theme","dark","sanitize","stringToBeSanitized","DOMPurify","USE_PROFILES","html","scrollToFirstInputError","$nextTick","element","querySelector","scrollIntoView","behavior","block","mounted","setFavicon","AvailabilityStatusDTO","status","selectedDates","partialRanges","OngoingAvailabilityViewModel","monday","OngoingAvailabilityStatus","tuesday","wednesday","thursday","friday","saturday","sunday","ScheduledAvailabilityViewModel","dateLocal","BackendBookingFeatureDecisions","BookingDetailsGuestAccessRequestDTO","shortTermTentativeId","accessGuid","CandidateBookingDetailsGuestAccessViewModel","id","clientId","clientName","location","grades","primaryContact","payment","description","blockDetails","isRunningLate","tentativeGroupDetails","tentativeFillStatus","CandidateBookingDetailsViewModel","CandidateBookingDetailsLocationAddressDTO","line1","line2","suburb","postcode","country","fullAddress","latitude","longitude","CandidateBookingSummaryLocationAddressViewModel","CandidateBookingSummaryLocationViewModel","isShiftRecordSubmitted","CandidateBookingNavigationItemViewModel","bookingId","startDateLocal","CandidateBookingOverviewBookingItemViewModel","locationId","groupId","CandidateBookingOverviewBookingItemWithDateViewModel","CandidateBookingOverviewViewModel","bookings","address","CandidateBookingSummaryPaymentViewModel","payOptionType","CandidateBookingSummaryViewModel","tentativeGroupBookingCount","grade","Grade","CandidateDateSpecificBookingsSummaryViewModel","RunningLatePayload","minutesLate","AddShiftRecordDTO","blocks","reasonForNonCompliance","isRestBreakCompliant","ShiftRecordBlock","AddShiftRecordPayloadDTO","type","startTime","endTime","ShiftRecordBlockWithId","nanoid","BaseLocationAddress","AddressViewModel","ShiftRecordDetailsViewModel","params","bookingDate","isSubmitted","bookingStatus","showRestBreakComplianceQuestion","ShiftRecordErrorDTO","message","alertType","alertIcon","alertStyle","testId","showContactCard","actions","onLoadInteraction","action","ActionButton","TentativeFillActionDTO","TentativeFillAction","TentativeFillRequestAnonymousDTO","payload","TentativeFillRequestDTO","CandidateDocumentViewModel","isVerified","createdDateLocal","AccessGuiFileViewModel","CertificationCustomFieldVM","CertificationTypeVM","fieldMeta","field","CertificationTypeFieldMetaVM","CertificationDetailsVM","expireStatus","ignoreExpiry","dateExpiry","dateObtained","note","certRefNo","customFields","certificationType","customField","CertificationTypeFieldMetaRuleVM","ruleType","fieldId","fieldType","rules","options","rule","CandidateClientAgreementsViewModel","agreements","ConsultantViewModel","phoneNumber","email","ErrorResponseDTO","data","source","RequestErrorSource","ErrorResponseType","param","VueErrorDTO","vm","WindowErrorDTO","lineno","colno","PD","Other","UkInfo","Kilometer","Mile","EventSummaryViewModel","registrationURL","startDateTimeUTC","endDateTimeUTC","timeZone","cost","numberOfSpaces","enrolledCount","remainingSpaces","isFull","distance","facilitatorName","createdDateUTC","accessGui","friendlyName","contentType","BlobCacheDTO","blob","timestamp","DownloadedFile","attributes","interaction","EmitEvent","disabled","event","Interaction","InteractionType","isEmitEvent","isRouterLink","isExternalLink","isFunction","ComplianceItemStatusUpdateDto","complianceItemId","ComplianceItemVideoViewModel","videoType","minWatchPercentageCompletionCriteria","ComplianceItemViewModel","referenceId","referenceFileId","referenceType","DocumentComplianceItemStatusUpdateDto","AccountCreationDTO","token","password","WorkExperienceDotPointDTO","WorkExperienceDotPointType","WorkExperienceDotPointWithIdDTO","WorkExperienceSummaryModel","placeOfWork","positionHeld","dateFrom","dateUntil","employmentDays","isCurrent","WorkExperienceUploadFormDTO","details","dotPoints","MissingConfigurationError","resourceName","install","appInsights","ApplicationInsights","loadAppInsights","trackPageView","onAfterScriptLoaded","trackInitialPageView","setupPageTracking","onReady","defineProperty","prototype","baseName","beforeEach","route","from","context","telemetryTrace","traceID","Util","startTrackPage","afterEach","protocol","host","fullPath","stopTrackPage","flush","use","onerror","handlePromiseRejection","addEventListener","initializeApp","extend","max","getLanguageBasedOnBaseURL","baseUrl","origin","urls","console","warn","entries","VueI18n","messages","en","enUS","enCA","enNZ","enGB","enAU","numberFormats","currency","dateTimeFormats","time","hour","minute","hour12","time24","dateShort","dateFormatted","year","dateTimeLong","silentTranslationWarn","silentFallbackWarn","VueMq","breakpoints","position","POSITION","Toast","Vuetify","components","VApp","VIcon","VCard","VSnackbar","VBtn","VChip","VSelect","VTextField","VTooltip","customProperties","themes","light","ErrorPageCodes","INTERNAL_SERVER_ERROR","PAGE_NOT_FOUND","UNAUTHORIZED","BAD_REQUEST","ACCOUNT_LOAD_FAILURE","ACCOUNT_SUSPENDED","component","meta","public","beforeResolve","routeTo","routeFrom","lazyLoadView","authRequiredOnPreviousRoute","matched","authRequired","redirect","label","props","AsyncView","AsyncHandler","loading","delay","timeout","functional","children","VueRouter","VueMeta","keyName","routes","mode","scrollBehavior","to","savedPosition","y","startRouteLoading","NProgress","stopRouteLoading","shouldBypassLoadProfileErrorFlow","errorCode","codesToAbortRouting","redirectToLogin","redirectToErrorPage","errorPageName","query","redirectFrom","isPublic","loadUserProfileResult","isSuccess","language","root","decideRouteBasedOnFeatureToggles","reject","args","customParseFormat","objectSupport","isSameOrBefore","utc","timezone","isBetween","advancedFormat","relativeTime","localizedFormat","isoWeek","enabled","isEnabled","hasOwnProperty","call","featureToggle","featureToggleOptions","createFeatureDecisions","displayWorkExpInMyFiles","canViewWorkExpDetails","canDeleteWorkExp","canDownloadWorkExpFiles","canCreateWorkExp","displayQualificationsInMyFiles","canViewQualificationDetails","canDeleteQualifications","canDownloadQualificationFiles","canCreateQualifications","displayCanidateGeneralFilesInMyFiles","canViewCanidateGeneralFileDetails","canDeleteCanidateGeneralFiles","canDownloadCanidateGeneralFiles","canCreateCanidateGeneralFiles","displayCertificationsInMyFiles","canViewCertificationDetails","canDeleteCertifications","canDownloadCertificationFiles","canCreateCertifications","canViewRegistrationDetails","canViewAgreementsTab","getRouteToggle","routeName","routeToggle","displayNavItem","reader","FileReader","readAsDataURL","onload","result","UnknownAppError","NullParameterError","UserIdentificationDTO","emailAddress","ipAddress","user_id","user_email","user_host_address","user_is_impersonating","fetchUserIdentityWithIpAddress","logIpAddress","user","userIpAddress","XMLHttpRequest","open","send","responseJSON","responseText","ip","ex","compileCustomProperties","properties","logUserDetails","PromiseRejectionError","AppLogger","initLogger","bind","debug","logError","err","exception","toast","$route","$options","PromiseRejectionEvent","reason","errorResponse","toastOptions","show","clear","PublicClientApplication","ResultDTO","statusCode","headers","fail","ActiveDay","TODAY","TOMORROW","NEXT_WORKING_DAY","FUTURE","R2WAvailabilityStatusViewModel","activeDateLocal","activeDay","ready2Work","timeUntilUpdateRequiredInMilliSeconds","RegistrationSummaryViewModel","statusReason","CandidateUserViewModel","firstName","preferredName","lastName","fullName","associatedConsultant","ready2WorkStatus","registrations","registration","USER_PROFILE_FRESHNESS_DURATION","units","checkUserCacheFreshness","namespaced","account","interactionRequired","currentUser","accessToken","lastTokenRefresh","loadingCount","impersonateCandidateId","username","mutations","SET_CURRENT_USER","userVM","SET_ACCOUNT","newValue","SET_IMPERSONATE_CANDIDATE_ID","candidateId","SET_USER_GENERALFILES","generalFiles","SET_INTERACTION_REQUIRED","SET_ACCESS_TOKEN","$date","SET_USER_TO_UNAUTHENTICATED","sessionStorage","FRESH_IMPERSONATE_CLEAR_STORE","START_LOADING","FINISH_LOADING","SET_USERNAME","moduleName","currentUserFullName","currentUserEmail","currentUserCandidateId","currentUserSimple","currentUserContactId","msalAccount","isUserLoggedIn","isLoadingAuth","isInteractionRequired","msalInstance","msal","init","logIn","commit","signInWithEmailAndPassword","handleRedirect","currentAccounts","getAllAccounts","msalAlreadyLoggedInRedirect","nuke","showNotifications","setUnauthenticated","clearImpersonateId","msalLogIn","loginRequest","scopes","loginRedirect","noNotificationReq","v","msalLogOut","getUserFromMsalProvider","myAccounts","msalRefreshToken","acquireTokenSilent","acquireTokenPopup","popupResponse","logOut","firebaseLogOut","signOut","refreshToken","getAccessTokenOrRefresh","isAccessTokenFresh","firebaseRefreshToken","getIdToken","idToken","resetPasswordAsync","sendPasswordResetEmail","errDto","reauthenticateWithCredentialsAsync","EmailAuthProvider","credentials","reauthenticateWithCredential","changePasswordAsync","updatePassword","newPass","getCurrentUserProfile","rootGetters","$api","stopImpersonating","logInWithCustomToken","signInWithCustomToken","completeAccountSetup","authToken","loginResult","errorDto","getDefaultState","crudLoadingCount","isLoading","isLoadingCRUD","START_LOADING_CRUD","FINISH_LOADING_CRUD","CLEAR_STORE","assign","download","fileId","createFileAccessToken","accessKey","baseURL","fileURL","toasts","downloadGeneralFile","filePath","getGeneralFile","createObjectURL","Blob","getType","toastErrorMessage","responseObject","RegistrationViewModel","complianceItems","complianceItem","authorization","acceptVersion","impersonatedCandidate","ComplianceItemFormViewModel","provider","Continue","SwitchingProtocols","Processing","Ok","Created","Accepted","NonAuthoritativeInformation","NoContent","ResetContent","PartialContent","MultiStatus","AlreadyReported","ImUsed","MultipleChoices","MovedPermanently","Found","SeeOther","NotModified","UseProxy","SwitchProxy","TemporaryRedirect","PermanentRedirect","BadRequest","Unauthorized","PaymentRequired","Forbidden","NotFound","MethodNotAllowed","NotAcceptable","ProxyAuthenticationRequired","RequestTimeout","Conflict","Gone","LengthRequired","PreconditionFailed","PayloadTooLarge","UriTooLong","UnsupportedMediaType","RangeNotSatisfiable","ExpectationFailed","IAmATeapot","MisdirectedRequest","UnprocessableEntity","Locked","FailedDependency","UpgradeRequired","PreconditionRequired","TooManyRequests","RequestHeaderFieldsTooLarge","UnavailableForLegalReasons","InternalServerError","NotImplemented","BadGateway","ServiceUnavailable","GatewayTimeout","HttpVersionNotSupported","VariantAlsoNegotiates","InsufficientStorage","LoopDetected","NotExtended","NetworkAuthenticationRequired","loadingVideoDataCount","loadingVerifyingComplianceItem","loadingFileDataCount","loadingFormDetailsCount","list","isLoadingVideoData","isLoadingVerifyingComplianceItem","isLoadingComplianceItemFile","isLoadingComplianceItemForm","SET_REGISTRATIONS","regos","SET_REGISTRATION","START_LOADING_VIDEO_DATA","FINISH_LOADING_VIDEO_DATA","START_LOADING_VERIFYING_COMPLIANCE_ITEM","FINISH_LOADING_VERIFYING_COMPLIANCE_ITEM","START_LOADING_FILE_DATA","FINISH_LOADING_FILE_DATA","START_LOADING_FORM_DETAILS","FINISH_LOADING_FORM_DETAILS","UPDATE_DOCUMENT_COMPLIANCE_ITEM","found","find","ComplianceItemType","UPDATE_COMPLIANCE_ITEM_STATUS","SET_REGISTRATIONS_DIRTY","getRegistrations","rego","getRegistrationById","registrationId","getVideoComplianceItemData","updateDocumentComplianceItem","verifyComplianceItem","updateAgreementComplianceItem","getComplianceItemFileData","HttpHeaders","fileDto","getComplianceItemFormDetails","hasAlreadySubmittedForm","HttpStatusCodes","isAlreadySubmitted","setFormComplianceItemToSubmitted","Agreements","InvalidFileId","Unauthorised","Auth","MFA","ChannelAlreadyExists","EmailInvalid","MissingCandidateId","MissingTo","PhoneNumberInvalid","PhoneNumberInvalidForRegion","PhoneNumberNotMobile","UnsupportedChannel","Availability","UnsetStatus","NoDaysRequested","NoPartialRangesRequested","InvalidStartTimeLocal","InvalidEndTimeLocal","Bookings","DoesNotExist","InvalidId","MinutesLateOutOfRange","NotTentative","GuestAccess","AccessIdMissing","AccessKeyMissing","Cancelled","Rejected","UnhandledTentativeStatus","Certifications","BadInputDates","CannotDeleteVerified","CustomFieldExceedsMaxLength","CustomFieldInvalidSelectValue","CustomFieldUnexpectedData","DateExpiryMissing","DateObtainedMissing","FileMissing","FileNotFound","IdInvalid","MissingAccessGui","NonExistingCertType","NoteExceedsMaxLength","RefNumberExceedsMaxLength","DeviceRegistrations","Documents","InvalidCandidateId","CandidateGeneralFileNotFound","FileTypeNotGeneral","IncompleteRequestData","Events","ImageNotFound","Files","Base64StringInvalid","FileIdAndCandidateIdMismatch","ExceedsFileUploadLimit","TooLarge","UnsupportedFileExtension","MissingData","MissingFileName","Qualifications","InstituteMissing","DegreeMissing","DateCompleteMissing","DateCompleteInvalid","Ready2Work","Registrations","WorkExperience","DateFromMissing","DateUntilMissingAndNotCurrent","DetailsMissing","DetailsExceedsMaxLength","DotPointMissing","DotPointExceedsMaxLength","PlaceOfWorkMissing","PlaceOfWorkExceedsMaxLength","PositionHeldMissing","PositionHeldExceedsMaxLength","DocumentsActionErrorMessageFactory","actionName","deleteDocumentActionErrorMessageHandler","errorMessage","ApiErrorCodes","documents","loadingDocumentsCount","loadingFileTypesCount","fileTypes","loadingViewDocumentCount","loadingDeleteCount","isLoadingDocuments","isLoadingFileTypes","isLoadingDelete","isLoadingViewDocument","START_LOADING_DOCUMENTS","FINISH_LOADING_DOCUMENTS","START_LOADING_FILE_TYPES","FINISH_LOADING_FILE_TYPES","START_LOADING_VIEW_DOCUMENT","FINISH_LOADING_VIEW_DOCUMENT","START_LOADING_DELETE","FINISH_LOADING_DELETE","SET_DOCUMENTS","INSERT_DOCUMENT","SET_DOCUMENTS_DIRTY","SET_FILE_TYPES","REMOVE_DOCUMENT","candidateGeneralFileId","foundIndex","findIndex","splice","getDocumentsList","getFileTypes","uploadDocument","documentToUpload","isCacheable","fileBlob","b64File","fileTypeId","post","fileTypeFound","fileTypeText","getDocumentForView","documentId","downloadDocument","disableToast","downloadFile","deleteDocument","r2WStatusOnActiveDay","r2WStatus","SET_READY2WORK","setReady2WorkStatus","newStatus","successToastMessage","relevantDate","availabilityStatus","refreshReady2WorkStatus","getReady2WorkStatus","setReady2Work","loadingOngoingAvailabilityCount","scheduledAvailability","ongoingAvailability","availabilityCalendarSelectionMode","isLoadingOngoingAvailability","getAvailabilityStatusByDate","foundScheduledAvailability","resultFromOngoing","dayOfWeek","START_LOADING_ONGOING_AVAILABILITY","FINISH_LOADING_ONGOING_AVAILABILITY","UPDATE_SCHEDULED_AVAILABILITY_MULTI","scheduledAvailabiltyList","UPDATE_SCHEDULED_AVAILABITLITY_WITH_NEW_UPDATES","newAvailabilities","newScheduledAvailabilityVM","UPDATE_ONGOING_AVAILABILITY","SET_AVAILABILITY_SELECT_MODE_RANGE","AvailabilityCalendarSelectionMode","SET_AVAILABILITY_SELECT_MODE_MULTISELECT","insertAvailability","availabilty","scheduled","ongoing","setAvailabilityStatus","statusText","updatedR2WStatusOnActiveDay","updateAvailability","newScheduledAvailability","toggleAvailabilitySelectionMode","setOngoingAvailability","WorkExperienceDetailsVM","createdDate","updatedDate","dotPoint","WorkExperienceActionErrorMessageFactory","deleteWorkExperienceActionErrorMessageHandler","workExperience","loadingWorkExperienceCount","loadingDetailsCount","loadingFile","isLoadingWorkExp","isLoadingDetails","getDownloadFileLoadingState","isDownloadingFile","START_LOADING_DETAILS","FINISH_LOADING_DETAILS","START_LOADING_WORK_EXP","FINISH_LOADING_WORK_EXP","START_DOWNLOADING_FILE","alreadyExists","FINISH_DOWNLOADING_FILE","cachedAccessGuid","SET_WORK_EXP","mappedWorkExp","workExp","INSERT_WORK_EXPERIENCE","SET_WORK_EXP_DIRTY","REMOVE_WORK_EXPERIENCE","workExperienceId","getWorkExperienceList","uploadWorkExperience","workExperienceToUpload","WorkExperienceUploadDTO","getWorkExperienceDetails","workExpId","downloadWorkExperienceFile","deleteWorkExperience","QualificationDetailsViewModel","institute","degree","completed","QualificationActionErrorMessageFactory","deleteQualificationActionErrorMessageHandler","QualificationUploadFormDTO","dateComplete","teachingMethods","qualifications","loadingQualificationsCount","isLoadingQualifications","START_LOADING_QUALIFICATIONS","FINISH_LOADING_QUALIFICATIONS","SET_QUALIFICATIONS","INSERT_QUALIFICATION","qualification","SET_QUALIFICATIONS_DIRTY","REMOVE_QUALIFICATION","qualificationId","getQualificationsList","uploadQualification","qualificationToUpload","QualificationUploadDTO","getQualificationDetails","downloadQualificationFile","deleteQualification","CertificationListItemVM","candidateTimeZone","firstParentId","reminderDays","typeId","CertificationActionErrorMessageFactory","deleteCertificationActionErrorMessageHandler","certifications","certificationTypes","loadingCertificationsCount","loadingCertificationTypesCount","getTypeById","isLoadingCertifications","isLoadingCertificationTypes","START_LOADING_CERTIFICATIONS","FINISH_LOADING_CERTIFICATIONS","START_LOADING_CERTIFICATION_TYPES","FINISH_LOADING_CERTIFICATION_TYPES","SET_CERTIFICATIONS","SET_CERTIFICATION_TYPES","SET_CERTIFCATIONS_DIRTY","REMOVE_CERTIFICATION","certificationId","cert","INSERT_CERTIFICATION","certification","index","getCertificationsList","certListItems","getCertificationTypes","getCertTypes","insertCertification","uploadCertification","certificationToUpload","certificationData","certTypeFound","certificationTypeId","certTypeTitle","getCertificationDetails","downloadCertificationFile","deleteCertification","subjects","SET_SUBJECTS","getSubjectsList","StoreResourceNotFoundError","CandidateBookingNavigationViewModel","CandidateBookingNavigationDTO","navigationItems","BookingOverviewBookingIndexDTO","topLevelIndex","bookingIndex","CandidateBookingSummaryWrapperViewModel","unprocessableEntityHandler","outlined","large","class","ShiftRecordErrorAlertType","defaultStatusCodeHandler","shiftRecordPostErrorHandler","shiftRecordDidNotHappenErrorHandler","errorMessageKey","translationExists","shiftRecordLoadErrorHandler","cachedOverviewBookingDateRanges","overviewBookings","summaryBookings","summaryBookingsDate","navigationBookings","loadingOverviewBookingsCount","loadingSummaryBookingsCount","loadingRunningLateCount","loadingNavigationBookingsCount","loadingTentativeCount","loadingAgreementsCount","hideBookingGuestFooter","loadingShiftRecordDetails","loadingShiftRecordSubmit","loadingShiftRecordDidNotHappen","getSummaryBookingById","getSummaryBookingsByIds","bookingIds","isOverviewRangeCached","cachedDateRange","haveAnyOverviewBookingsBeenLoaded","overviewBookingsWithinRange","getOverviewBookingById","overviewBookingSpecificDate","bookingFound","overviewBookingsWithPendingAgreements","rootState","cloneDeep","bookingClientHasPendingAgreements","flattenOverviewBookingsList","unflattenedBookingsList","flatBookingList","flat","getNavigationBookingsDtoById","getNavigationBookingsById","navBookingsFound","findOverviewBookingIndexById","bookingFoundIndex","findOverviewBookingIndexByIds","bookingIndexes","isLoadingOverviewBookings","isLoadingSummaryBookings","isLoadingRunningLate","isLoadingNavigationBookings","isLoadingTentativeFill","isLoadingAgreements","isLoadingShiftRecordDetails","isLoadingShiftRecordSubmit","isLoadingDidNotHappenSubmit","START_LOADING_OVERVIEW_BOOKINGS","FINISH_LOADING_OVERVIEW_BOOKINGS","START_LOADING_RUNNING_LATE","FINISH_LOADING_RUNNING_LATE","START_LOADING_NAVIGATION_BOOKINGS","FINISH_LOADING_NAVIGATION_BOOKINGS","START_LOADING_TENTATIVE","FINISH_LOADING_TENTATIVE","START_LOADING_AGREEMENTS","FINISH_LOADING_AGREEMENTS","START_LOADING_SHIFT_RECORD_DETAILS","FINISH_LOADING_SHIFT_RECORD_DETAILS","START_LOADING_SHIFT_RECORD_SUBMIT","FINISH_LOADING_SHIFT_RECORD_SUBMIT","START_LOADING_DID_NOT_HAPPEN_SUBMIT","FINISH_LOADING_DID_NOT_HAPPEN_SUBMIT","INSERT_OVERVIEW_BOOKINGS","overviewBookingsVM","mappedOverviewBookings","sortBy","CACHE_OVERVIEW_DATERANGE_REQUEST","START_LOADING_SUMMARY_BOOKINGS","FINISH_LOADING_SUMMARY_BOOKINGS","INSERT_SUMMARY_BOOKINGS","INSERT_SUMMARY_BOOKINGS_DATE","SET_RUNNING_LATE_STATUS_FOR_SUMMARY_BOOKING","INSERT_NAVIGATION_BOOKING","navBookingFound","UPDATE_OVERVIEW_BOOKINGS_WITH_ACCEPT_TENTATIVE_FILL_RESPONSE","bookingIndexesList","REMOVE_OVERVIEW_BOOKINGS_BY_INDEX_LIST","bookingListToUpdate","UPDATE_SUMMARY_BOOKINGS_WITH_ACCEPT_TENTATIVE_FILL_RESPONSE","bookingsToUpdate","REMOVE_SUMMARY_BOOKINGS_BY_ID_LIST","HIDE_BOOKING_GUEST_FOOTER","UPDATE_SUMMARY_BOOKING_AS_SHIFT_RECORD_COMPLETE","bookingToUpdate","bookingShouldBeUpdated","UPDATE_SUMMARY_BOOKING_WITH_SHIFT_RECORD_DETAILS","bookingDurationBlock","ShiftRecordBlockType","newStartTime","newEndTime","UPDATE_OVERVIEW_BOOKING_AS_SHIFT_RECORD_COMPLETE","overviewBooking","overviewBookingShouldBeUpdated","getOverviewBookingsInRange","clients","getSummaryBookingsByDate","getBookingById","getBookingByIdAnon","getGroupBookingByIdAnon","setSummaryAvailability","notifyRunningLate","loadOverviewBookingsByTargetDateAsync","getNavigationBookingsByIdAsync","isCached","getBookingRelatedAgreements","clientAgreements","respondToTentativeBookingRequest","dto","tentativeFill","bookingIdsActioned","overviewPromise","summaryPromise","tentativeGroupCount","toastNotification","tc","count","respondToTentativeBookingRequestAnon","tentativeFillAnon","respondToGroupTentativeBookingRequestAnon","groupTentativeFillAnon","updateOverviewBookingsAfterTentativeFillAction","noBookingsToUpdate","updateSummaryBookingsAfterTentativeFillAction","updateBookingShiftRecordActionableItemToComplete","overviewBookingToUpdate","removeBookingThatDidNotHappen","overviewBookingIndexes","loadBookingShiftRecordDetails","getShiftRecordDetails","shiftRecordVM","errorPayload","updateStateAfterShiftRecordAcceptOperation","BookingStatus","updateStateAfterShiftRecordSubmit","operationType","submitShiftRecord","submitBookingDidNotHappen","CandidateDocumentAgreementUpdateViewModel","dateAgreedUTC","allActionableItems","getActionableItemsByClient","clientActionableItems","getAgreementsByClientId","getAgreementByType","UploadedFileType","getPendingAgreementsByClientId","pendingAgreements","doesClientHavePendingAgreements","getTotalAgreementsCountByClientId","getPendingAgreementsCountByClientId","INSERT_ACTIONABLE_ITEMS","UPDATE_ACTIONABLE_ITEM","agreementUpdateData","clientFound","agreementFound","insertActionableItems","updateActionableItemForAgreement","isLoadingAgreement","downloadAgreement","downloadAgreementsFile","signAgreement","putAgreements","signedDate","updateActionableItemAfterPendingAgreementAction","isHttpStatus","httpStatus","events","eventImages","loadingEventSummaryCount","loadingEventImage","isLoadingEventSummary","isLoadingEventImage","eventId","eventImage","image","toString","START_LOADING_EVENT_SUMMARY","FINISH_LOADING_EVENT_SUMMARY","START_LOADING_EVENT_IMAGE","FINISH_LOADING_EVENT_IMAGE","SET_EVENTS","CACHE_EVENT_IMAGE","eventImageBlob","eventImageFound","cachedImage","getEvents","distanceFromInKM","professionalDevelopment","distanceFromKM","getEventImage","loadingListCount","isLoadingList","START_LOADING_LIST","FINISH_LOADING_LIST","getAppGeneralFileList","downloadAppGeneralFile","toggles","SET_FEATURE_TOGGLES","setFeatureToggles","features","dispatchActionForAllModules","modules","allModules","modulePrefix","flags","moduleDefinition","dispatchGlobal","GET","POST","DELETE","PATCH","PUT","HttpRequestUrl","subPath","arraybuffer","HttpRequestConfig","method","responseType","HttpResponseType","AxiosRequestConfig","BaseApiService","appConfig","axios","apiUrl","retry","pathname","impersonateHeader","authorizationHeader","acceptVersionheader","generateAuthHeader","compileHeaders","getUrl","compileRequestConfig","httpClient","makeHttpRequest","handleErrors","execute","ReadOnlyApiService","HttpMethods","ModelApiService","SignalRApiService","UserApiService","FileApiService","getBlob","RegistrationsApiService","AvailabilityApiService","put","Ready2WorkApiService","DocumentsApiService","QualificationsApiService","WorkExperienceApiService","CertificationsApiService","SubjectsApiService","BookingsApiService","dateFromLocal","dateToLocal","targetDateLocalYYYYMMDD","postAnon","getAnon","toDto","AgreementsApiService","EventsApiService","ProfessionalDevelopmentApiService","RegistrationApiService","signalR","DownloadsApiService","$appInsights","determineRequestErrorType","COULD_NOT_CONTACT_SERVER_STATUSCODE","AxiosError","mapApiValidationErrorResponseToError","errorSource","base","baseErrorResponse","errors","mapR2WErrorResponseToError","BASE_ERROR_RESPONSE_OBJ_KEYS","API_VALIDATION_ERROR_OBJ_KEYS","responseData","serverErrorResponse","requestErrorResponse","clientSideErrorResponse","objectHasKeys","Vuex","debugMessages","appLoadingCount","debugMode","darkMode","initialAppLoad","embedded","drawer","redirectUrl","userSettings","enableWeekends","contactLocations","phone","plugins","strict","isLoadingApp","hasLoadedAppOnce","isError","isDebugModeActive","isDarkModeActive","isDrawerOpen","areAvailabilityWeekendsEnabled","debugLog","startOfWeekLocaleAware","getContactLocationsByCountry","countryLowerCase","filteredByCountry","countryItem","getContactLocationsByStateAndCountry","stateStr","stateLowerCase","filteredByState","stateItem","INCREMENT_APP_LOADING","DECREMENT_APP_LOADING","SET_APP_AS_LOADED","RESET_APP_LOADING_STATE","SET_ERROR","ENABLE_DEBUG","persistent","DISABLE_DEBUG","ENABLE_DARKMODE","DISABLE_DARKMODE","OPEN_DRAWER","CLOSE_DRAWER","SET_REDIRECT_URL","CLEAR_REDIRECT_URL","CLEAR","ADD_DEBUG_MESSAGE","TOGGLE_AVAILABILITY_WEEKENDS","TOGGLE_START_OF_WEEK","currentStartOfWeek","errorResponseDTO","ErrorResponseFactory","startLoadingApp","finishLoadingApp","startLoading","finishLoading","setAppAsLoaded","resetAppLoadingState","toggleDebugMode","toggleDarkMode","toggleDrawer","setRedirectUrl","clearRedirectUrl","clearStore","setLocale","favicon","href","toggleAvailabilityWeekendSetting","toggleStartOfWeekSetting","expected","every","dirtyHtml","_vm","_h","$createElement","_c","_self","attrs","staticRenderFns","Loading","serverError","isAppLoading","metaInfo","titleTemplate","_g","_b","commonAttributes","$attrs","$listeners","_t","inheritAttrs","_v","_s","customIconClass","_e","scopedSlots","_u","fn","ref","on","toggleSelectAll","innerValue","compSelectAllItemsIcon","staticClass","proxy","model","callback","$$v","expression","ValidationProvider","hasSelectedAllItems","hasSelectedSomeItems","watch","newVal","created","VDivider","validator","injectStyles","routerLinkTo","allowInsecure","validateProps","$t","pendingSearch","benched","$event","$emit","domProps","renderResult","_l","n","mixins","SkeletonBaseListSelect","items","searchable","searchTerm","hasListItems","val","setSearchTerm","filteredItems","threshold","_resultObj","compHref","compTarget","compSrc","compAltText","COMPANY","APP","shade","companyName","VImg","subtitleClass","subtitle","subtitleOnTop","backButton","content","capitalize","mobile","badge","iconType","getBadgeFromStr","getBadgeFromArr","badges","showDebugLog","logItem","DebugLogDialog","debugToggle","toggleDebug","VDialog","setAsApp","TheDebugBarActions","width","height","overflow","margin","container","renderer","loop","autoplay","animationData","rendererSettings","compBarText","compStopText","fname","fnameCharLimit","TheDebugBar","TheImpersonateBar","staticStyle","factory","desc","showErrorCode","errorText","directives","rawName","goBackURL","goBackText","BaseErrorPage","errorStatusText","subDesc","ErrorPageFactory","PageNotFoundError","UnauthorizedError","BadRequestError","ActionLockedError","AccountLoadFailedError","AccountSuspenedError","Layout","TheSystemBarContainer","defaultOptions","handleAnimation","quote","quoteIndex","quotes","currentQuote","quotesList","loadQuotes","Lottie","PageLoaderQuotes","animationSpeed","animationDataDark","VFlex","PageLoader","$style","LoadingView","offlineConfirmed","beforeCreate","webpackContext","req","webpackContextResolve","__webpack_require__","o","module","exports","__webpack_module_cache__","moduleId","cachedModule","loaded","__webpack_modules__","amdO","deferred","O","chunkIds","priority","notFulfilled","fulfilled","j","r","getter","__esModule","definition","enumerable","f","chunkId","reduce","promises","u","miniCssF","g","globalThis","Function","prop","inProgress","dataWebpackPrefix","done","script","needAttach","scripts","getElementsByTagName","getAttribute","createElement","charset","nc","setAttribute","src","onScriptComplete","prev","clearTimeout","doneFns","parentNode","removeChild","setTimeout","head","appendChild","Symbol","toStringTag","nmd","paths","p","createStylesheet","fullhref","linkTag","rel","onLinkComplete","errorType","realHref","findStylesheet","existingLinkTags","tag","dataHref","existingStyleTags","loadStylesheet","installedCssChunks","miniCss","cssChunks","installedChunks","installedChunkData","promise","loadingEnded","realSrc","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","chunkLoadingGlobal","self","__webpack_exports__"],"sourceRoot":""}