{"version":3,"sources":["webpack:///./src/components/date/DatePicker.vue","webpack:///./src/components/date/DatePicker.vue?f738","webpack:///./src/components/date/DatePicker.vue?f9a0","webpack:///./src/validation/updateActiveExpiresDateValidationModel.ts","webpack:///./src/components/subscriptions/DiagnosticsDialog.vue?8b1e","webpack:///./src/utils/dateUtil.ts","webpack:///./src/store/subscriptions/mapping/subscriptionService.ts","webpack:///./src/views/subscriptions/SubscriptionGeneratePage.vue?64a1","webpack:///./src/store/contracts/subscriptions/subscriptionUpdateType.ts","webpack:///./src/views/Subscriptions.vue","webpack:///./src/views/Subscriptions.vue?4f53","webpack:///./src/views/Subscriptions.vue?403b","webpack:///./src/views/subscriptions/SubscriptionGeneratePage.vue","webpack:///./src/store/subscriptions/mapping/subscriptionCreateModel.ts","webpack:///./src/store/subscriptions/mapping/systemInfoSearch.ts","webpack:///./src/validation/subscriptionCreateValidationModel.ts","webpack:///./src/utils/indexable.ts","webpack:///./src/store/subscriptions/create.ts","webpack:///./src/views/subscriptions/SubscriptionGeneratePage.vue?651b","webpack:///./node_modules/quasar/src/components/form/QForm.js","webpack:///./src/views/subscriptions/SubscriptionGeneratePage.vue?d26b","webpack:///./src/components/date/DatePicker.vue?515b","webpack:///./src/views/subscriptions/SubscriptionGeneratePage.vue?ae4f","webpack:///./src/views/subscriptions/SubscriptionListPage.vue","webpack:///./src/components/subscriptions/DiagnosticsDialog.vue","webpack:///./src/components/subscriptions/DiagnosticsDialog.vue?32be","webpack:///./src/components/subscriptions/DiagnosticsDialog.vue?1a9b","webpack:///./src/views/subscriptions/SubscriptionListPage.vue?c4bd","webpack:///./src/views/subscriptions/SubscriptionListPage.vue?d728","webpack:///./src/store/subscriptions/subscription.ts","webpack:///./src/components/date/DatePicker.vue?442a","webpack:///./src/components/subscriptions/EditActiveExpiresDatesDialog.vue?cba1","webpack:///./src/utils/hasFlag.ts","webpack:///./src/views/subscriptions/SubscriptionListPage.vue?6366","webpack:///./src/utils/units.ts","webpack:///./src/components/subscriptions/AddServiceDialog.vue","webpack:///./src/validation/subscriptionServiceValidationModel.ts","webpack:///./src/store/subscriptions/addService.ts","webpack:///./src/components/subscriptions/AddServiceDialog.vue?eec3","webpack:///./src/components/subscriptions/AddServiceDialog.vue?af8c","webpack:///./src/views/subscriptions/SubscriptionTransactionsPage.vue?eb79","webpack:///./src/store/contracts/subscriptions/visionFeaturesFlag.ts","webpack:///./src/store/contracts/subscriptions/profileFeaturesFlag.ts","webpack:///./src/views/subscriptions/SubscriptionTransactionsPage.vue?6816","webpack:///./src/components/subscriptions/DiagnosticsDialog.vue?b3df","webpack:///./src/views/subscriptions/SubscriptionViewPage.vue?8349","webpack:///./src/utils/time.ts","webpack:///./src/views/subscriptions/SubscriptionListPage.vue?a9a8","webpack:///./src/components/subscriptions/EditActiveExpiresDatesDialog.vue?5ee3","webpack:///./src/validation/updateSubscriptionLabelValidationModel.ts","webpack:///./src/views/subscriptions/SubscriptionViewPage.vue","webpack:///./src/components/subscriptions/EditActiveExpiresDatesDialog.vue","webpack:///./src/components/subscriptions/EditActiveExpiresDatesDialog.vue?9b09","webpack:///./src/components/subscriptions/EditActiveExpiresDatesDialog.vue?752e","webpack:///./src/views/subscriptions/SubscriptionViewPage.vue?7246","webpack:///./src/views/subscriptions/SubscriptionViewPage.vue?730f","webpack:///./src/components/subscriptions/AddServiceDialog.vue?a870","webpack:///./src/store/contracts/subscriptions/subscriptionServiceType.ts","webpack:///./node_modules/quasar/src/components/table/QTr.js","webpack:///./src/views/subscriptions/SubscriptionViewPage.vue?9ae1","webpack:///./src/store/subscriptions/mapping/subscriptionListingModel.ts","webpack:///./src/store/subscriptions/subscriptions.ts","webpack:///./src/validation/common/dateRules.ts","webpack:///./node_modules/quasar/src/components/table/QTd.js","webpack:///./src/components/subscriptions/AddServiceDialog.vue?5d54","webpack:///./src/views/subscriptions/SubscriptionTransactionsPage.vue","webpack:///./src/components/subscriptions/TransactionChart.vue","webpack:///./src/store/contracts/subscriptions/transactions.ts","webpack:///./src/components/subscriptions/TransactionChart.vue?116d","webpack:///./src/components/subscriptions/TransactionChart.vue?40e3","webpack:///./src/store/subscriptions/mapping/subscriptionUsage.ts","webpack:///./src/validation/transactionsFilterValidationModel.ts","webpack:///./src/store/subscriptions/transactions.ts","webpack:///./src/router/goBack.ts","webpack:///./src/utils/systemUtils.ts","webpack:///./src/views/subscriptions/SubscriptionTransactionsPage.vue?331c","webpack:///./src/views/subscriptions/SubscriptionTransactionsPage.vue?1231"],"names":["class","dateLabel","filled","dateString","dateChanged","type","hint","dense","error","isError","disable","error-message","errorMessage","showOffsetDateButton","label","dateOffsetLabel","disableOffsetButton","outline","color","dateOffsets","props","defaultDate","Object","required","Boolean","String","appendHint","isStart","offsetDate","yearsOffset","Number","default","isUpdatingDate","emits","setup","emit","formatDate","dateValue","toDate","value","date","getUTCFullYear","getUTCMonth","getUTCDate","dateParts","split","map","p","parseInt","year","month","day","Date","newDateString","length","slice","cleanDateString","join","addYears","setUTCFullYear","setUTCDate","newDate","defaultDateChanged","render","QInput","QBtn","UpdateActiveExpiresDateFieldName","UpdateActiveExpiresDateValidationModel","setField","ActiveDate","getter","model","activeDate","rules","expiresDate","ExpiresDate","twoDigitDates","toString","shortDateFormat","setStart","setUTCHours","setUTCMinutes","setUTCSeconds","setMilliseconds","setEnd","cleanServerQuota","quota","Math","ceil","toServer","app","ContractStartDate","contractStartDate","ContractEndDate","contractEndDate","ContractQuota","contractQuota","MonthlyQuota","monthlyQuota","DailyQuota","dailyQuota","ServiceType","serviceType","FeaturesFlag","featuresFlag","TanglesApiKey","tanglesApiKey","toApp","server","index","remainingContractUnits","setRemainingContractUnits","createModel","fromAdd","add","None","Transcription","Vision","Translation","Profile","Error","SubscriptionUpdateType","id","view","name","components","AsyncContent","TopNav","LeftDrawer","QLayout","isShowingSearch","right-label","selectedSystem","options","selectOptions","use-input","emit-value","map-options","filterSearch","no-option","machineId","fieldIsError","FieldName","MachineId","fieldErrorMessage","Label","activeDateChanged","expiresDateChanged","rows","services","columns","hide-bottom","hasData","body","key","getServiceName","row","subscriptionServiceTypeGridDisplay","quotaDisplay","getFlags","startAddingService","deleteService","note","cancel","loading","isLoading","save","isAddingService","subscriptionService","editSubscriptionService","subscriptionCreateModel","service","addService","impl","Note","Services","serverModel","systemId","SystemId","machineLabel","MachineLabel","customerName","CustomerName","SubscriptionCreateFieldName","mapKeys","obj","mapfn","keys","k","SubscriptionCreateStoreKey","Symbol","setModel","state","setLabel","setMachineId","existingLabel","resultMatch","systemSearchResults","find","info","systemInfo","setSystemInfo","setActiveDate","setExpiresDate","setNote","setServices","setSearchTerm","searchTerm","systemSearchTerm","setSearchResults","searchResults","sortBy","s","searchSystems","handler","adminApiBaseUrl","partialSystemName","onSuccess","r","Systems","groupBy","val","createErrorPropToValidationProp","validation","doValidation","valid","response","onError","status","data","unhandled","forEach","errKey","vProp","setModelFieldResult","modelName","responseValid","isValid","SubscriptionId","createState","clear","createForState","provideStore","AddServiceDialog","DatePicker","createStore","validationStore","router","debouncedSearch","debounce","align","field","toLocaleString","featureFlag","visionFlags","filter","f","profileFlags","fieldName","get","set","machineIdIsError","machineIdErrorMessage","si","update","undefined","updatedServices","subscriptionId","push","params","back","formatSeconds","defineComponent","autofocus","noErrorFocus","noResetFocus","greedy","onSubmit","Function","slots","vm","getCurrentInstance","rootRef","ref","validateIndex","registeredComponents","validate","shouldFocus","promises","focus","emitEvent","res","i","comp","then","Promise","resolve","all","errors","resetValidation","submit","evt","stopAndPrevent","target","reset","nextTick","querySelector","Array","prototype","call","querySelectorAll","el","tabIndex","provide","formKey","bindComponent","vmProxy","unbindComponent","indexOf","splice","onMounted","assign","proxy","getValidationComponents","h","onReset","hSlot","QForm","QToggle","QSelect","QItem","QItemSection","QTable","QTr","QTd","QTooltip","module","exports","showDisabledSubscriptions","left-label","generateSubscription","subscriptions","visible-columns","visibleColumns","grid","screen","lt","md","binary-state-sort","row-key","pagination","body-cell-enabled","modelValue","isEnabled","size","body-cell-actions","viewSubscription","confirmDisableSubscription","enableSubscription","isDiagnosticsOpen","isOpen","persistent","isRefreshingSubscriptions","refreshCachedSubscriptions","anchor","self","refreshSubscriptionsSuccessIcon","close","subscriptionsStore","v","refreshSubscriptionsSuccess","QDialog","QCard","QCardSection","QIcon","DiagnosticsDialog","onKeyDown","displayServices","toggleDiagnostics","subscription","$q","dialog","title","message","onOk","disableSubscription","generate","e","keysPressed","m","ctrlKey","altKey","window","addEventListener","removeEventListener","sub","showDisabled","setShowDisabled","ColumnNames","c","enabled","sortable","sort","a","b","getTime","actions","loadSubscriptions","QCheckbox","SubscriptionStoreKey","setSubscription","loadSubscription","generateNewKey","updateNote","$type","UpdateSubscriptionNotes","updateLabel","UpdateSubscriptionLabel","updateActiveExpiresDate","UpdateSubscriptionStatus","updateServices","UpdateSubscriptionServices","console","warn","useStore","hasFlag","flag","flags","getFlagValues","possibleValues","toFlag","values","reduce","prev","next","subscriptionServiceTypeChartDisplay","dialogTitle","availableServices","validationRefs","contractStartDateChanged","noServiceTypeSelected","contractEndDateChanged","contractQuotaLabel","monthlyQuotaLabel","dailyQuotaLabel","hasVisionFeatures","visionFeaturesFlag","availableFeatures","multiple","use-chips","stack-label","hasProfileFeatures","profileFeaturesFlag","hasTanglesFeatures","confirmWord","SubscriptionServiceFieldName","context","existingServiceTypes","newServiceType","none","ctx","AddServiceStoreKey","setContractStartDate","setContractEndDate","setContractQuota","parsed","isNaN","setMonthlyQuota","setDailyQuota","setServiceType","setFeaturesFlag","setTanglesApiKey","setCreateModel","setIndex","defaultContractQuota","defaultMonthlyQuota","defaultDailyQuota","addServiceStore","resetQuotas","getQuota","setQuota","contractType","normalizeQuotaFromServer","normalizeQuotaToServer","parseFloat","toFixed","includes","TanglesSearch","AdvancedTanglesSearch","resetState","Tags","startDate","endDate","VisionFeaturesFlag","VisionFeaturesFlags","Adult","getVisionFeatureName","feature","defaultException","ProfileFeaturesFlag","ProfileFeaturesFlags","getProfileFeatureName","dayMillis","daysMillis","days","plusDays","seconds","hours","floor","minutes","secondsRemainder","timeString","UpdateLabelFieldName","UpdateSubscriptionLabelValidationModel","icon","subscriptionListView","labelText","readonly","isUpdatingLabel","doUpdateLabel","stopUpdatingLabel","isLabelInError","labelErrorMessage","after","isUpdating","isRequestingUpdate","isRequestingLabelUpdate","startUpdatingLabel","model-value","subscriptionKeyInputType","subscriptionKey","append","flat","goToImageAnalysis","hasVisionService","showSubscriptionKeyIcon","toggleShowSubscriptionKey","showSubscriptionKeyTooltip","rounded","text-color","confirmGenerateNewKey","copySubscriptionKeyToClipboard","activationDateDisplay","expirationDateDisplay","padding","startEditingDates","noteText","isUpdatingNote","stopUpdatingNote","isRequestingNoteUpdate","doUpdateNote","startUpdatingNote","servicesDisplay","tableHasData","sm","header-cell-actions","getFeatures","viewTransactions","finishAddingService","isEditingDates","activationDate","expirationDate","activeDateRef","updateContractDates","isSaving","subscriptionStore","expiresDateRef","EditFieldActions","EditActiveExpiresDatesDialog","list","uploadStore","setSubscriptionKey","imageAnalysis","transactions","servicesUi","servicesStore","onCancel","confirmed","notify","timeout","text","showSubscriptionKey","features","featureNames","shift","noteInput","noteInputEl","$el","noteInputInputEl","labelInput","labelInputEl","labelInputInputEl","some","editText","compText","isEditing","doUpdate","stopEditing","startEditing","activationDateIsError","activationDateErrorMessage","expirationDateIsError","expirationDateErrorMessage","toCreateModel","QTh","SubscriptionServiceType","SubscriptionServiceTypes","noHover","classes","computed","header","__trClass","toServerDate","subscriptiontoApp","Subscription","SubscriptionKey","RemainingContractUnits","subscriptionListingToApp","mapReadonly","listing","SubscriptionsStoreKey","setSubscriptions","Subscriptions","now","expires","active","currentDate","setFullYear","getFullYear","success","storeState","store","isAfter","compareDate","isBefore","autoWidth","vnode","col","colsMap","__tdClass","style","serviceTypeOptions","fromDate","From","isUpdatingDates","fromDateChanged","To","toDateChanged","updateChart","updatingChart","canClearFilters","clearFilters","totalUsages","units","usages","dailyUsages","aggregateType","AggregateUsagePeriodType","Daily","serviceTypeDisplay","chartTitle","monthlyUsages","Monthly","width","chartWidth","series","onChartMounted","perService","u","usageSeries","x","recordedDay","y","transactionCount","quotaSeries","svc","q","minTimeDays","minTime","min","maxTimeDays","maxTime","max","optionsDashArray","chart","xaxis","tickPlacement","labels","format","legend","show","showForSingleSeries","noData","stroke","dashArray","dataLabels","tooltip","formatter","xs","chartContext","qs","toggleSeries","zoomX","setTimeout","RecordedDay","TransactionCount","TransactionsFilterFieldName","from","to","TransactionsStoreKey","setSubscriptionId","filterModel","setUsages","setFrom","setTo","fetchUsagesForAggregate","AggregateType","Usages","err","onNotAuthenticated","onNotFound","loadUsages","results","result","goBack","fallback","beforeLoc","location","href","afterLoc","delay","ms","TransactionChart","formatWithCommas","setDefaultDates","transactionStore","activeServiceType","number","t","changed","QField"],"mappings":"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","file":"js/subscriptions.c305b460.js","sourcesContent":["\r\n\r\n\r\n\r\n\r\n","\r\nimport { setEnd, setStart, twoDigitDates } from '@/utils/dateUtil';\r\nimport { isNullOrWhitespace } from '@/utils/stringUtils';\r\nimport { computed, defineComponent, PropType, ref, watch } from 'vue';\r\n\r\nexport default defineComponent({\r\n props: {\r\n defaultDate: {\r\n type: Object as PropType,\r\n required: false\r\n },\r\n isError: {\r\n type: Boolean,\r\n required: false\r\n },\r\n errorMessage: {\r\n type: String,\r\n required: false\r\n },\r\n label: {\r\n type: String,\r\n required: false\r\n },\r\n appendHint: {\r\n type: String,\r\n required: false\r\n },\r\n isStart: {\r\n type: Boolean,\r\n required: true\r\n },\r\n showOffsetDateButton: {\r\n type: Boolean,\r\n required: false\r\n },\r\n offsetDate: {\r\n type: Object as PropType,\r\n required: false\r\n },\r\n dateOffsetLabel: {\r\n type: String,\r\n required: false\r\n },\r\n yearsOffset: {\r\n type: Number,\r\n default: 1,\r\n required: false\r\n },\r\n isUpdatingDate: {\r\n type: Boolean,\r\n default: false,\r\n required: false\r\n },\r\n disable: {\r\n type: Boolean,\r\n default: false,\r\n required: false\r\n }\r\n },\r\n emits: ['dateChanged'],\r\n setup (props, { emit }) {\r\n const dateString = ref(formatDate(props.defaultDate));\r\n const dateValue = computed(() => toDate(dateString.value));\r\n const dateLabel = computed(() => props.label ?? 'Date');\r\n const hint = computed(() => props.appendHint ? `MM/DD/YYYY - ${props.appendHint}` : 'MM/DD/YYYY');\r\n const disableOffsetButton = computed(() => !props.offsetDate);\r\n\r\n watch(() => props.defaultDate, defaultDateChanged);\r\n\r\n function formatDate (date: Date | null | undefined): string | null {\r\n return !date ? null : `${date.getUTCFullYear()}-${twoDigitDates(date.getUTCMonth() + 1)}-${twoDigitDates(date.getUTCDate())}`;\r\n }\r\n\r\n function toDate (dateString: string | null): Date | null {\r\n if (isNullOrWhitespace(dateString)) {\r\n return null;\r\n }\r\n\r\n const dateParts = dateString!.split('-').map(p => Number.parseInt(p, 10));\r\n const year = dateParts[0];\r\n const month = dateParts[1] - 1;\r\n const day = dateParts[2];\r\n const date = new Date(year, month, day);\r\n if (props.isStart) {\r\n setStart(date);\r\n } else {\r\n setEnd(date);\r\n }\r\n return date;\r\n }\r\n\r\n function dateChanged (newDateString: string | null) {\r\n if (!isNullOrWhitespace(dateString.value)) {\r\n const dateParts = newDateString!.split('-');\r\n const year = dateParts[0];\r\n if (year.length > 4) {\r\n dateParts[0] = year.slice(year.length - 4);\r\n const cleanDateString = dateParts.join('-');\r\n dateString.value = cleanDateString;\r\n }\r\n }\r\n emit('dateChanged', dateValue.value);\r\n }\r\n\r\n function addYears (date: Date) {\r\n date.setUTCFullYear(date.getUTCFullYear() + props.yearsOffset);\r\n if (!props.isStart) {\r\n date.setUTCDate(date.getUTCDate() - 1);\r\n }\r\n }\r\n\r\n function dateOffsets () {\r\n if (props.offsetDate) {\r\n const newDate = new Date(props.offsetDate);\r\n addYears(newDate);\r\n dateString.value = formatDate(newDate);\r\n emit('dateChanged', dateValue.value);\r\n }\r\n }\r\n\r\n function defaultDateChanged () {\r\n if (props.isUpdatingDate) {\r\n // We don't need to emit an update here as the consuming component is the one that made the update.\r\n dateString.value = formatDate(props.defaultDate);\r\n }\r\n }\r\n\r\n return {\r\n dateString,\r\n dateLabel,\r\n hint,\r\n dateChanged,\r\n dateOffsets,\r\n disableOffsetButton\r\n };\r\n }\r\n\r\n});\r\n","import { render } from \"./DatePicker.vue?vue&type=template&id=7d8f4962\"\nimport script from \"./DatePicker.vue?vue&type=script&lang=ts\"\nexport * from \"./DatePicker.vue?vue&type=script&lang=ts\"\n\nimport \"./DatePicker.vue?vue&type=style&index=0&id=7d8f4962&lang=scss\"\nscript.render = render\n\nexport default script\nimport QInput from 'quasar/src/components/input/QInput.js';\nimport QBtn from 'quasar/src/components/btn/QBtn.js';\nimport qInstall from \"../../../node_modules/vue-cli-plugin-quasar/lib/runtime.auto-import.js\";\nqInstall(script, 'components', {QInput,QBtn});\n","import { IUpdateActiveExpiresDateModel } from '@/store/contracts/subscriptions/subscription';\r\nimport { ValidationModel } from '.';\r\nimport { isAfter, isBefore } from '@/validation/common/dateRules';\r\nimport { getValueRequiredRule } from './common/rules';\r\n\r\nexport enum UpdateActiveExpiresDateFieldName {\r\n ActiveDate = 'activeDate',\r\n ExpiresDate = 'expiresDate'\r\n}\r\n\r\nclass UpdateActiveExpiresDateValidationModel extends ValidationModel {\r\n constructor () {\r\n super();\r\n\r\n this.setField(UpdateActiveExpiresDateFieldName.ActiveDate, {\r\n getter: (model) => model?.activeDate ?? null,\r\n rules: [\r\n getValueRequiredRule((value: Date | null) => value !== null)('Activation Date is required.'),\r\n isBefore((model) => model?.expiresDate ?? null, 'Should be before Expiration Date')\r\n ]\r\n });\r\n\r\n this.setField(UpdateActiveExpiresDateFieldName.ExpiresDate, {\r\n getter: (model) => model?.expiresDate ?? null,\r\n rules: [\r\n getValueRequiredRule((value: Date | null) => value !== null)('Expiration Date is required.'),\r\n isAfter((model) => model?.activeDate ?? null, 'Should be after Activation Date')\r\n ]\r\n });\r\n }\r\n\r\n get modelName (): string {\r\n return 'UpdateActiveExpiresDateValidationModel';\r\n }\r\n}\r\n\r\nexport default new UpdateActiveExpiresDateValidationModel();\r\n","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/vue-cli-plugin-quasar/lib/loader.vue.auto-import-quasar.js?kebab!../../../node_modules/cache-loader/dist/cjs.js??ref--0-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-2!./DiagnosticsDialog.vue?vue&type=style&index=0&id=2bc9c79d&lang=scss\"","export function twoDigitDates (value: number): string {\r\n return value < 10 ? `0${value}` : value.toString();\r\n}\r\n\r\nexport function shortDateFormat (date: Date | null | undefined): string | null {\r\n return !date ? null : `${twoDigitDates(date.getUTCMonth() + 1)}/${twoDigitDates(date.getUTCDate())}/${date.getUTCFullYear()}`;\r\n}\r\n\r\nexport function setStart (date: Date | null | undefined): void {\r\n if (!date) {\r\n return;\r\n }\r\n\r\n date.setUTCHours(0);\r\n date.setUTCMinutes(0);\r\n date.setUTCSeconds(0);\r\n date.setMilliseconds(0);\r\n}\r\n\r\nexport function setEnd (date: Date | null | undefined): void {\r\n if (!date) {\r\n return;\r\n }\r\n\r\n date.setUTCHours(23);\r\n date.setUTCMinutes(59);\r\n date.setUTCSeconds(59);\r\n date.setMilliseconds(999);\r\n}\r\n","import { ISubscriptionServiceModel } from '@/store/contracts/subscriptions/addService';\r\nimport { ISubscriptionCreateModel } from '@/store/contracts/subscriptions/create';\r\nimport { ISubscriptionService } from '@/store/contracts/subscriptions/subscriptions';\r\nimport { SubscriptionServiceType } from '@/store/contracts/subscriptions/subscriptionServiceType';\r\nimport { impl } from '@/utils/impl';\r\nimport { DeepReadonly } from 'vue';\r\nimport { IRemainingContractUnits } from './subscriptionListingModel';\r\n\r\nexport interface IServerSubscriptionService {\r\n ContractStartDate: Date | null;\r\n ContractEndDate: Date | null;\r\n ContractQuota: number | null;\r\n MonthlyQuota: number | null;\r\n DailyQuota: number | null;\r\n ServiceType: SubscriptionServiceType;\r\n FeaturesFlag: number | null;\r\n TanglesApiKey: string | null;\r\n}\r\n\r\nexport interface IServerUpdateServiceModel {\r\n Services: IServerSubscriptionService[];\r\n}\r\n\r\nexport function cleanServerQuota (quota: number | null): number | null {\r\n return quota === null ? null : Math.ceil(quota);\r\n}\r\n\r\nexport function toServer (app: ISubscriptionService): IServerSubscriptionService {\r\n return impl({\r\n ContractStartDate: app.contractStartDate,\r\n ContractEndDate: app.contractEndDate,\r\n ContractQuota: cleanServerQuota(app.contractQuota),\r\n MonthlyQuota: cleanServerQuota(app.monthlyQuota),\r\n DailyQuota: cleanServerQuota(app.dailyQuota),\r\n ServiceType: app.serviceType,\r\n FeaturesFlag: app.featuresFlag ?? null,\r\n TanglesApiKey: app.tanglesApiKey ?? null\r\n });\r\n}\r\n\r\nexport function toApp (server: IServerSubscriptionService, index: number, remainingContractUnits: IRemainingContractUnits | null): ISubscriptionService {\r\n return impl({\r\n contractStartDate: server.ContractStartDate === null ? null : new Date(server.ContractStartDate),\r\n contractEndDate: server.ContractEndDate === null ? null : new Date(server.ContractEndDate),\r\n remainingContractUnits: remainingContractUnits ? setRemainingContractUnits(server.ServiceType, remainingContractUnits) : server.ContractQuota,\r\n contractQuota: server.ContractQuota,\r\n monthlyQuota: server.MonthlyQuota,\r\n dailyQuota: server.DailyQuota,\r\n serviceType: server.ServiceType,\r\n featuresFlag: server.FeaturesFlag,\r\n tanglesApiKey: server.TanglesApiKey,\r\n createModel: null,\r\n index: index\r\n });\r\n}\r\n\r\nexport function fromAdd (add: ISubscriptionServiceModel | DeepReadonly): ISubscriptionService {\r\n return impl({\r\n contractStartDate: add.contractStartDate,\r\n contractEndDate: add.contractEndDate,\r\n remainingContractUnits: null, // Remaining contract units is not present on Add Service Dialog.\r\n contractQuota: add.contractQuota,\r\n monthlyQuota: add.monthlyQuota,\r\n dailyQuota: add.dailyQuota,\r\n serviceType: add.serviceType ?? SubscriptionServiceType.None,\r\n featuresFlag: add.featuresFlag,\r\n tanglesApiKey: add.tanglesApiKey,\r\n createModel: add.createModel as ISubscriptionCreateModel,\r\n index: add.index\r\n });\r\n}\r\n\r\nexport function setRemainingContractUnits (serviceType: SubscriptionServiceType, remainingContractUnits: IRemainingContractUnits): number {\r\n switch (serviceType) {\r\n case SubscriptionServiceType.Transcription:\r\n return remainingContractUnits.Transcription;\r\n case SubscriptionServiceType.Vision:\r\n return remainingContractUnits.Vision;\r\n case SubscriptionServiceType.Translation:\r\n return remainingContractUnits.Translation;\r\n case SubscriptionServiceType.Profile:\r\n return remainingContractUnits.Profile;\r\n case SubscriptionServiceType.None:\r\n throw Error('SubscriptionServiceType.None is not a valid service type');\r\n }\r\n}\r\n","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/vue-cli-plugin-quasar/lib/loader.vue.auto-import-quasar.js?kebab!../../../node_modules/cache-loader/dist/cjs.js??ref--0-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-2!./SubscriptionGeneratePage.vue?vue&type=style&index=0&id=dc245a84&lang=scss\"","// This is used for polymorphic json requests to the backend subscription/update api.\r\nexport enum SubscriptionUpdateType {\r\n UpdateSubscriptionStatus = 'status',\r\n UpdateSubscriptionServices = 'services',\r\n UpdateSubscriptionNotes = 'notes',\r\n UpdateSubscriptionLabel = 'label'\r\n}\r\n","\r\n\r\n\r\n","\r\nimport { defineComponent } from 'vue';\r\nimport AsyncContent from '@/components/AsyncContent.vue';\r\nimport TopNav from '@/components/TopNav.vue';\r\nimport LeftDrawer from '@/components/LeftDrawer.vue';\r\nimport { provideStore as provideSubscriptionsStore } from '@/store/subscriptions/subscriptions';\r\n\r\nexport default defineComponent({\r\n name: 'Subscriptions',\r\n components: {\r\n AsyncContent,\r\n TopNav,\r\n LeftDrawer\r\n },\r\n setup () {\r\n provideSubscriptionsStore();\r\n }\r\n});\r\n","import { render } from \"./Subscriptions.vue?vue&type=template&id=462982b0\"\nimport script from \"./Subscriptions.vue?vue&type=script&lang=ts\"\nexport * from \"./Subscriptions.vue?vue&type=script&lang=ts\"\nscript.render = render\n\nexport default script\nimport QLayout from 'quasar/src/components/layout/QLayout.js';\nimport qInstall from \"../../node_modules/vue-cli-plugin-quasar/lib/runtime.auto-import.js\";\nqInstall(script, 'components', {QLayout});\n","\r\n\r\n\r\n\r\n\r\n","import { ISubscriptionCreateModel } from '@/store/contracts/subscriptions/create';\r\nimport { IServerSubscriptionService, toServer as serviceToServer } from '@/store/subscriptions/mapping/subscriptionService';\r\nimport { impl } from '@/utils/impl';\r\n\r\nexport interface IServerSubscriptionCreateModel {\r\n Label: string;\r\n MachineId: string;\r\n ActiveDate: Date | null;\r\n ExpiresDate: Date | null;\r\n Note: string | null;\r\n Services: IServerSubscriptionService[];\r\n}\r\n\r\nexport function toServer (app: ISubscriptionCreateModel): IServerSubscriptionCreateModel {\r\n return impl({\r\n Label: app.label ?? '',\r\n MachineId: app.machineId ?? '',\r\n ActiveDate: app.activeDate,\r\n ExpiresDate: app.expiresDate,\r\n Note: app.note,\r\n Services: app.services.map(serviceToServer)\r\n });\r\n}\r\n","import { ISystemInfoSearchModel } from '@/store/contracts/subscriptions/create';\r\nimport { impl } from '@/utils/impl';\r\n\r\nexport interface IServerSystemInfoSearchModel {\r\n SystemId: string;\r\n MachineId: string;\r\n MachineLabel: string;\r\n CustomerName: string;\r\n}\r\n\r\nexport interface IServerSystemInforSearchResponse {\r\n Systems: IServerSystemInfoSearchModel[];\r\n}\r\n\r\nexport function toApp (serverModel: IServerSystemInfoSearchModel): ISystemInfoSearchModel {\r\n return impl({\r\n systemId: serverModel.SystemId,\r\n machineId: serverModel.MachineId,\r\n machineLabel: serverModel.MachineLabel,\r\n customerName: serverModel.CustomerName\r\n });\r\n}\r\n","import { ISubscriptionCreateModel } from '@/store/contracts/subscriptions/create';\r\nimport { ValidationModel } from '@/validation';\r\nimport { getValueRequiredRule, stringRequiredRule } from '@/validation/common/rules';\r\nimport { isAfter, isBefore } from '@/validation/common/dateRules';\r\n\r\nexport enum SubscriptionCreateFieldName {\r\n Label = 'label',\r\n MachineId = 'machineId',\r\n ActiveDate = 'activeDate',\r\n ExpiresDate = 'expiresDate',\r\n Note = 'note',\r\n Services = 'services'\r\n}\r\n\r\nclass SubscriptionCreateValidationModel extends ValidationModel {\r\n constructor () {\r\n super();\r\n\r\n this.setField(SubscriptionCreateFieldName.Label, {\r\n getter: (model) => model?.label ?? null,\r\n rules: [\r\n stringRequiredRule('Label is required')\r\n ]\r\n });\r\n\r\n this.setField(SubscriptionCreateFieldName.MachineId, {\r\n getter: (model) => model?.machineId ?? null,\r\n rules: [\r\n stringRequiredRule('Enter a machine id or search/select a system.')\r\n ]\r\n });\r\n\r\n this.setField(SubscriptionCreateFieldName.ActiveDate, {\r\n getter: (model) => model?.activeDate ?? null,\r\n rules: [\r\n getValueRequiredRule((value: Date | null) => value !== null)('Activation Date is required.'),\r\n isBefore((model) => model?.expiresDate ?? null, 'Should be before Expiration Date')\r\n ]\r\n });\r\n\r\n this.setField(SubscriptionCreateFieldName.ExpiresDate, {\r\n getter: (model) => model?.expiresDate ?? null,\r\n rules: [\r\n getValueRequiredRule((value: Date | null) => value !== null)('Expiration Date is required.'),\r\n isAfter((model) => model?.activeDate ?? null, 'Should be after Activation Date')\r\n ]\r\n });\r\n }\r\n\r\n public get modelName (): string {\r\n return 'SubscriptionCreate';\r\n }\r\n}\r\n\r\nexport default new SubscriptionCreateValidationModel();\r\n","export interface IIndexable {\r\n [index: string]: D;\r\n [index: number]: D;\r\n}\r\n\r\nexport function mapKeys (obj: IIndexable, mapfn: (item: V) => T): T[] {\r\n return Object.keys(obj).map(k => mapfn(obj[k]));\r\n}\r\n","import { impl } from '@/utils/impl';\r\nimport { inject, provide, reactive, readonly } from 'vue';\r\nimport {\r\n ISubscriptionCreateResponseModel,\r\n ISubscriptionCreateState,\r\n ISubscriptionCreateStore,\r\n TSave,\r\n TSearchSystems,\r\n TSetActiveDate,\r\n TSetExpiresDate,\r\n TSetLabel,\r\n TSetMachineId,\r\n TSetModel,\r\n TSetNote,\r\n TSetSearchResults,\r\n TSetSearchTerm,\r\n TSetServices,\r\n TSetSystemInfo\r\n} from '@/store/contracts/subscriptions/create';\r\nimport { ApiResponse, chainHandlers, DefaultIStatusHandler, handleErrorStatus, handleErrorStatusResult, IStatusHandler } from '@/store/utils/apiResponseHandling';\r\nimport { sendRequest } from '@/store/utils/axiosUtils';\r\nimport { Settings } from '@/settings';\r\nimport { toServer as createModelToServer } from '@/store/subscriptions/mapping/subscriptionCreateModel';\r\nimport { IServerSystemInforSearchResponse, toApp as systemInfoToApp } from '@/store/subscriptions/mapping/systemInfoSearch';\r\nimport { store as validationStore } from '@/store/validation';\r\nimport validationModel, { SubscriptionCreateFieldName } from '@/validation/subscriptionCreateValidationModel';\r\nimport { IIndexable, mapKeys } from '@/utils/indexable';\r\nimport { isNullOrWhitespace } from '@/utils/stringUtils';\r\n\r\nconst SubscriptionCreateStoreKey = Symbol('SubscriptionCreateStore');\r\n\r\nfunction setModel (state: ISubscriptionCreateState): TSetModel {\r\n return (model) => {\r\n state.model = model;\r\n };\r\n}\r\n\r\nfunction setLabel (state: ISubscriptionCreateState): TSetLabel {\r\n return (label) => {\r\n state.model.label = label;\r\n };\r\n}\r\n\r\nfunction setMachineId (state: ISubscriptionCreateState): TSetMachineId {\r\n return (machineId) => {\r\n const existingLabel = state.model.label;\r\n const resultMatch = state.systemSearchResults.find(info => info.machineId === machineId);\r\n state.systemInfo = resultMatch ?? null;\r\n state.model.machineId = machineId;\r\n if (isNullOrWhitespace(existingLabel) ||\r\n existingLabel === state.systemInfo?.customerName) {\r\n state.model.label = resultMatch?.customerName ?? null;\r\n }\r\n };\r\n}\r\n\r\nfunction setSystemInfo (state: ISubscriptionCreateState): TSetSystemInfo {\r\n return (systemInfo) => {\r\n const existingLabel = state.model.label;\r\n state.systemInfo = systemInfo;\r\n state.model.machineId = systemInfo?.machineId ?? null;\r\n if (isNullOrWhitespace(existingLabel) ||\r\n existingLabel === state.systemInfo?.customerName) {\r\n state.model.label = systemInfo?.customerName ?? null;\r\n }\r\n };\r\n}\r\n\r\nfunction setActiveDate (state: ISubscriptionCreateState): TSetActiveDate {\r\n return (activeDate) => {\r\n state.model.activeDate = activeDate;\r\n };\r\n}\r\n\r\nfunction setExpiresDate (state: ISubscriptionCreateState): TSetExpiresDate {\r\n return (expiresDate) => {\r\n state.model.expiresDate = expiresDate;\r\n };\r\n}\r\n\r\nfunction setNote (state: ISubscriptionCreateState): TSetNote {\r\n return (note) => {\r\n state.model.note = note;\r\n };\r\n}\r\n\r\nfunction setServices (state: ISubscriptionCreateState): TSetServices {\r\n return (services) => {\r\n state.model.services = services;\r\n };\r\n}\r\n\r\nfunction setSearchTerm (state: ISubscriptionCreateState): TSetSearchTerm {\r\n return (searchTerm) => {\r\n state.systemSearchTerm = searchTerm;\r\n };\r\n}\r\n\r\nfunction setSearchResults (state: ISubscriptionCreateState): TSetSearchResults {\r\n return (searchResults) => {\r\n state.systemSearchResults = searchResults.sortBy(s => s.customerName);\r\n };\r\n}\r\n\r\nfunction searchSystems (state: ISubscriptionCreateState): TSearchSystems {\r\n return async (handler) => {\r\n await handleErrorStatusResult(await sendRequest(\r\n `${Settings.adminApiBaseUrl}/admin/v1/subscription/system/search`,\r\n 'post',\r\n {\r\n partialSystemName: state.systemSearchTerm ?? ''\r\n }\r\n ), chainHandlers({\r\n onSuccess: async (r) => setSearchResults(state)(mapKeys(r.Systems.sortBy(s => s.CustomerName).groupBy(s => s.MachineId), (val) => {\r\n if (val.length > 1) {\r\n val[0].CustomerName = `${val[0].CustomerName} Et. Al.`;\r\n }\r\n return val[0];\r\n }).map(systemInfoToApp))\r\n }, handler));\r\n };\r\n}\r\n\r\nconst createErrorPropToValidationProp: IIndexable = {\r\n MachineId: SubscriptionCreateFieldName.MachineId,\r\n ActiveDate: SubscriptionCreateFieldName.ActiveDate,\r\n ExpiresDate: SubscriptionCreateFieldName.ExpiresDate,\r\n Services: SubscriptionCreateFieldName.Services,\r\n Note: SubscriptionCreateFieldName.Note\r\n};\r\n\r\nfunction save (state: ISubscriptionCreateState): TSave {\r\n return async () => {\r\n const valid = await validationStore.doValidation({\r\n model: validationModel,\r\n value: state.model\r\n });\r\n let response: ApiResponse | null = null;\r\n if (valid) {\r\n const handler = impl>>({\r\n onError: async (r) => {\r\n const status = r?.status ?? 500;\r\n if (status !== 500) {\r\n const data = r?.data ?? {};\r\n let unhandled = false;\r\n Object.keys(data).forEach((errKey) => {\r\n const vProp = createErrorPropToValidationProp[errKey];\r\n if (vProp) {\r\n validationStore.setModelFieldResult(validationModel.modelName, vProp, data[errKey].join('\\n'));\r\n } else {\r\n unhandled = true;\r\n }\r\n });\r\n if (!unhandled) {\r\n return;\r\n }\r\n }\r\n await DefaultIStatusHandler.onError(r);\r\n }\r\n });\r\n response = await sendRequest(\r\n `${Settings.adminApiBaseUrl}/admin/v1/subscription/create`,\r\n 'post',\r\n createModelToServer(state.model)\r\n );\r\n await handleErrorStatus(response, handler);\r\n }\r\n\r\n const responseValid = validationStore.isValid(validationModel);\r\n return !responseValid ? null : response?.[1]?.data.SubscriptionId;\r\n };\r\n}\r\n\r\nexport function createState (): ISubscriptionCreateState {\r\n validationStore.clear(validationModel);\r\n\r\n return reactive(impl({\r\n model: {\r\n label: null,\r\n machineId: null,\r\n activeDate: null,\r\n expiresDate: null,\r\n note: null,\r\n services: []\r\n },\r\n systemInfo: null,\r\n systemSearchResults: [],\r\n systemSearchTerm: null\r\n }));\r\n}\r\n\r\nexport function createForState (state: ISubscriptionCreateState): ISubscriptionCreateStore {\r\n return impl({\r\n state: readonly(state),\r\n setModel: setModel(state),\r\n setLabel: setLabel(state),\r\n setMachineId: setMachineId(state),\r\n setSystemInfo: setSystemInfo(state),\r\n setActiveDate: setActiveDate(state),\r\n setExpiresDate: setExpiresDate(state),\r\n setNote: setNote(state),\r\n setServices: setServices(state),\r\n setSearchTerm: setSearchTerm(state),\r\n setSearchResults: setSearchResults(state),\r\n searchSystems: searchSystems(state),\r\n save: save(state)\r\n });\r\n}\r\n\r\nexport function provideStore (): ISubscriptionCreateStore {\r\n const state = createState();\r\n\r\n provide(SubscriptionCreateStoreKey, state);\r\n\r\n return createForState(state);\r\n}\r\n\r\nexport function useStore (): ISubscriptionCreateStore {\r\n const state = inject(SubscriptionCreateStoreKey);\r\n if (state === undefined) {\r\n throw new Error('Using SubscriptionCreateStore before providing it!');\r\n }\r\n return createForState(state);\r\n}\r\n","\r\nimport { QTableColumn } from '@/components/utils/qTable';\r\nimport { computed, defineComponent, ref, Ref } from 'vue';\r\nimport AddServiceDialog from '@/components/subscriptions/AddServiceDialog.vue';\r\nimport { provideStore as provideCreateStore } from '@/store/subscriptions/create';\r\nimport { isNullOrWhitespace } from '@/utils/stringUtils';\r\nimport debounce from 'quasar/src/utils/debounce.js';;\r\nimport validationModel, {\r\n SubscriptionCreateFieldName as FieldName\r\n} from '@/validation/subscriptionCreateValidationModel';\r\nimport { useStore as useValidationStore } from '@/store/validation';\r\nimport { useRouter } from 'vue-router';\r\nimport { ISubscriptionServiceModel } from '@/store/contracts/subscriptions/addService';\r\nimport { getServiceName, SubscriptionServiceType } from '@/store/contracts/subscriptions/subscriptionServiceType';\r\nimport { getFlagValues } from '@/utils/hasFlag';\r\nimport { VisionFeaturesFlag, VisionFeaturesFlags, getVisionFeatureName } from '@/store/contracts/subscriptions/visionFeaturesFlag';\r\nimport { ProfileFeaturesFlag, ProfileFeaturesFlags, getProfileFeatureName } from '@/store/contracts/subscriptions/profileFeaturesFlag';\r\nimport { ISubscriptionService } from '@/store/contracts/subscriptions/subscriptions';\r\nimport { SubscriptionRoutes } from '@/router/routes/subscriptions';\r\nimport { shortDateFormat } from '@/utils/dateUtil';\r\nimport DatePicker from '@/components/date/DatePicker.vue';\r\nimport { ISubscriptionCreateModel } from '@/store/contracts/subscriptions/create';\r\nimport { subscriptionServiceTypeGridDisplay } from '@/utils/units';\r\nimport { formatSeconds } from '@/utils/time';\r\n\r\nexport default defineComponent({\r\n components: {\r\n AddServiceDialog,\r\n DatePicker\r\n },\r\n setup () {\r\n const createStore = provideCreateStore();\r\n const validationStore = useValidationStore();\r\n const router = useRouter();\r\n const isLoading = ref(false);\r\n\r\n const subscriptionCreateModel = computed(() => createStore.state.model as ISubscriptionCreateModel);\r\n\r\n const debouncedSearch = debounce(createStore.searchSystems, 1500);\r\n\r\n const columns: QTableColumn[] = [\r\n {\r\n name: 'name',\r\n label: 'Service Name',\r\n align: 'left',\r\n field: row => getServiceName(row.serviceType)\r\n },\r\n {\r\n name: 'contractStartDate',\r\n label: 'Contract Start Date',\r\n align: 'left',\r\n field: row => shortDateFormat(row.contractStartDate)\r\n },\r\n {\r\n name: 'contractEndDate',\r\n label: 'Contract End Date',\r\n align: 'left',\r\n field: row => shortDateFormat(row.contractEndDate)\r\n },\r\n {\r\n name: 'contractQuota',\r\n label: 'Contract Quota',\r\n align: 'left',\r\n field: row => quotaDisplay(row.contractQuota, row.contractQuota)\r\n },\r\n {\r\n name: 'monthlyQuota',\r\n label: 'Monthly Quota',\r\n align: 'left',\r\n field: row => quotaDisplay(row.monthlyQuota, row.contractQuota)\r\n },\r\n {\r\n name: 'dailyQuota',\r\n label: 'Daily Quota',\r\n align: 'left',\r\n field: row => quotaDisplay(row.dailyQuota, row.contractQuota)\r\n },\r\n {\r\n name: 'features',\r\n label: 'Features',\r\n align: 'left',\r\n field: row => getFlags(row.serviceType, row.featuresFlag)\r\n },\r\n {\r\n name: 'actions',\r\n label: '',\r\n align: 'right',\r\n field: row => row\r\n }\r\n ];\r\n\r\n function quotaDisplay (serviceType: SubscriptionServiceType, quota?: number) {\r\n switch (serviceType) {\r\n case SubscriptionServiceType.Transcription:\r\n return formatSeconds(quota);\r\n default:\r\n return quota?.toLocaleString('en-US');\r\n }\r\n }\r\n\r\n function getFlags (serviceType: SubscriptionServiceType, featureFlag: number) : string {\r\n switch (serviceType) {\r\n case SubscriptionServiceType.Vision: {\r\n const visionFlags = getFlagValues(VisionFeaturesFlags, featureFlag).filter(f => f !== VisionFeaturesFlag.None);\r\n if (visionFlags.length === 0) {\r\n return 'None';\r\n }\r\n return visionFlags.map(f => getVisionFeatureName(f)).join(', ');\r\n }\r\n case SubscriptionServiceType.Profile: {\r\n const profileFlags = getFlagValues(ProfileFeaturesFlags, featureFlag).filter(f => f !== ProfileFeaturesFlag.None);\r\n if (profileFlags.length === 0) {\r\n return 'None';\r\n }\r\n return profileFlags.map(f => getProfileFeatureName(f)).join(', ');\r\n }\r\n default:\r\n return 'None';\r\n }\r\n }\r\n\r\n function fieldIsError (fieldName: FieldName): boolean {\r\n return validationStore.fieldIsError(validationModel.modelName, fieldName);\r\n }\r\n\r\n function fieldErrorMessage (fieldName: FieldName): string {\r\n return validationStore.fieldErrorMessage(validationModel.modelName, fieldName);\r\n }\r\n const label = computed({\r\n get: () => createStore.state.model.label ?? ' ',\r\n set: createStore.setLabel\r\n });\r\n\r\n const machineId = computed({\r\n get: () => createStore.state.model.machineId ?? ' ',\r\n set: createStore.setMachineId\r\n });\r\n const machineIdIsError = computed(() => fieldIsError(FieldName.MachineId));\r\n const machineIdErrorMessage = computed(() => fieldErrorMessage(FieldName.MachineId));\r\n\r\n const activeDate = computed({\r\n get: () => createStore.state.model.activeDate,\r\n set: createStore.setActiveDate\r\n });\r\n\r\n const expiresDate = computed({\r\n get: () => createStore.state.model.expiresDate,\r\n set: createStore.setExpiresDate\r\n });\r\n\r\n const note = computed({\r\n get: () => createStore.state.model.note,\r\n set: createStore.setNote\r\n });\r\n\r\n const services = computed(() => createStore.state.model.services);\r\n\r\n const hasData = computed(() => services.value.length > 0);\r\n\r\n const selectedSystem = computed({\r\n get: () => createStore.state.systemInfo,\r\n set: (s) => createStore.setSystemInfo(s)\r\n });\r\n\r\n const systemSearchResults = computed(() => createStore.state.systemSearchResults);\r\n\r\n const isAddingService = ref(false);\r\n const editSubscriptionService: Ref = ref(null);\r\n\r\n function startAddingService (service: ISubscriptionService | null) {\r\n editSubscriptionService.value = service;\r\n isAddingService.value = true;\r\n }\r\n\r\n const selectOptions = computed(() => createStore.state.systemSearchResults.map((si) => ({ label: si.customerName, value: si })));\r\n\r\n const isShowingSearch = ref(false);\r\n\r\n function filterSearch (val, update) {\r\n createStore.setSearchTerm(val);\r\n if (!isNullOrWhitespace(val)) {\r\n debouncedSearch({\r\n onSuccess: () => update()\r\n });\r\n } else {\r\n update();\r\n }\r\n }\r\n\r\n function addService (service: ISubscriptionService) {\r\n if (editSubscriptionService.value?.index !== null && editSubscriptionService.value?.index !== undefined) {\r\n const updatedServices = [...createStore.state.model.services];\r\n updatedServices[editSubscriptionService.value.index] = service;\r\n createStore.setServices(updatedServices as ISubscriptionService[]);\r\n } else {\r\n createStore.setServices([...createStore.state.model.services as ISubscriptionService[], service]);\r\n }\r\n }\r\n\r\n function deleteService (service: ISubscriptionServiceModel) {\r\n createStore.setServices(createStore.state.model.services.filter(s => s !== service) as ISubscriptionService[]);\r\n }\r\n\r\n async function save () {\r\n isLoading.value = true;\r\n try {\r\n const subscriptionId = await createStore.save();\r\n if (subscriptionId) {\r\n router.push({ name: SubscriptionRoutes.view, params: { subscriptionId: subscriptionId } });\r\n } else {\r\n isShowingSearch.value = false;\r\n }\r\n } finally {\r\n isLoading.value = false;\r\n }\r\n }\r\n\r\n async function cancel () {\r\n validationStore.clear(validationModel);\r\n router.back();\r\n }\r\n\r\n function activeDateChanged (newDate: Date | null) {\r\n activeDate.value = newDate;\r\n }\r\n\r\n function expiresDateChanged (newDate: Date | null) {\r\n expiresDate.value = newDate;\r\n }\r\n\r\n const dateOffsetLabel = 'Set 1 year from Activation Date';\r\n\r\n return {\r\n activeDate,\r\n activeDateChanged,\r\n expiresDate,\r\n expiresDateChanged,\r\n dateOffsetLabel,\r\n columns,\r\n isAddingService,\r\n startAddingService,\r\n isShowingSearch,\r\n selectedSystem,\r\n systemSearchResults,\r\n filterSearch,\r\n note,\r\n label,\r\n machineId,\r\n machineIdIsError,\r\n machineIdErrorMessage,\r\n services,\r\n selectOptions,\r\n hasData,\r\n save,\r\n cancel,\r\n deleteService,\r\n subscriptionCreateModel,\r\n FieldName,\r\n fieldIsError,\r\n fieldErrorMessage,\r\n addService,\r\n editSubscriptionService,\r\n shortDateFormat,\r\n getFlags,\r\n quotaDisplay,\r\n formatSeconds,\r\n getServiceName,\r\n subscriptionServiceTypeGridDisplay,\r\n isLoading\r\n };\r\n }\r\n});\r\n","import { h, defineComponent, ref, onMounted, getCurrentInstance, nextTick, provide } from 'vue'\n\nimport { stopAndPrevent } from '../../utils/event.js'\nimport { hSlot } from '../../utils/private/render.js'\nimport { formKey } from '../../utils/private/symbols.js'\n\nexport default defineComponent({\n name: 'QForm',\n\n props: {\n autofocus: Boolean,\n noErrorFocus: Boolean,\n noResetFocus: Boolean,\n greedy: Boolean,\n\n onSubmit: Function\n },\n\n emits: [ 'reset', 'validation-success', 'validation-error' ],\n\n setup (props, { slots, emit }) {\n const vm = getCurrentInstance()\n const rootRef = ref(null)\n\n let validateIndex = 0\n const registeredComponents = []\n\n function validate (shouldFocus) {\n const promises = []\n const focus = typeof shouldFocus === 'boolean'\n ? shouldFocus\n : props.noErrorFocus !== true\n\n validateIndex++\n\n const emitEvent = (res, ref) => {\n emit('validation-' + (res === true ? 'success' : 'error'), ref)\n }\n\n for (let i = 0; i < registeredComponents.length; i++) {\n const comp = registeredComponents[ i ]\n const valid = comp.validate()\n\n if (typeof valid.then === 'function') {\n promises.push(\n valid.then(\n valid => ({ valid, comp }),\n error => ({ valid: false, comp, error })\n )\n )\n }\n else if (valid !== true) {\n if (props.greedy === false) {\n emitEvent(false, comp)\n\n if (focus === true && typeof comp.focus === 'function') {\n comp.focus()\n }\n\n return Promise.resolve(false)\n }\n\n promises.push({ valid: false, comp })\n }\n }\n\n if (promises.length === 0) {\n emitEvent(true)\n return Promise.resolve(true)\n }\n\n const index = validateIndex\n\n return Promise.all(promises).then(\n res => {\n if (index === validateIndex) {\n const errors = res.filter(r => r.valid !== true)\n\n if (errors.length === 0) {\n emitEvent(true)\n return true\n }\n\n const { valid, comp } = errors[ 0 ]\n\n emitEvent(false, comp)\n\n if (\n focus === true\n && valid !== true\n && typeof comp.focus === 'function'\n ) {\n comp.focus()\n }\n\n return false\n }\n }\n )\n }\n\n function resetValidation () {\n validateIndex++\n\n registeredComponents.forEach(comp => {\n typeof comp.resetValidation === 'function' && comp.resetValidation()\n })\n }\n\n function submit (evt) {\n evt !== void 0 && stopAndPrevent(evt)\n\n validate().then(val => {\n if (val === true) {\n if (props.onSubmit !== void 0) {\n emit('submit', evt)\n }\n else if (evt !== void 0 && evt.target !== void 0 && typeof evt.target.submit === 'function') {\n evt.target.submit()\n }\n }\n })\n }\n\n function reset (evt) {\n evt !== void 0 && stopAndPrevent(evt)\n\n emit('reset')\n\n nextTick(() => { // allow userland to reset values before\n resetValidation()\n if (props.autofocus === true && props.noResetFocus !== true) {\n focus()\n }\n })\n }\n\n function focus () {\n const target = rootRef.value.querySelector('[autofocus], [data-autofocus]')\n || Array.prototype.find.call(rootRef.value.querySelectorAll('[tabindex]'), el => el.tabIndex > -1)\n\n target !== null && target !== void 0 && target.focus()\n }\n\n provide(formKey, {\n bindComponent (vmProxy) {\n registeredComponents.push(vmProxy)\n },\n\n unbindComponent (vmProxy) {\n const index = registeredComponents.indexOf(vmProxy)\n if (index > -1) {\n registeredComponents.splice(index, 1)\n }\n }\n })\n\n onMounted(() => {\n props.autofocus === true && focus()\n })\n\n // expose public methods\n Object.assign(vm.proxy, {\n validate,\n resetValidation,\n submit,\n reset,\n focus,\n getValidationComponents: () => registeredComponents\n })\n\n return () => h('form', {\n class: 'q-form',\n ref: rootRef,\n onSubmit: submit,\n onReset: reset\n }, hSlot(slots.default))\n }\n})\n","import { render } from \"./SubscriptionGeneratePage.vue?vue&type=template&id=dc245a84\"\nimport script from \"./SubscriptionGeneratePage.vue?vue&type=script&lang=ts\"\nexport * from \"./SubscriptionGeneratePage.vue?vue&type=script&lang=ts\"\n\nimport \"./SubscriptionGeneratePage.vue?vue&type=style&index=0&id=dc245a84&lang=scss\"\nscript.render = render\n\nexport default script\nimport QForm from 'quasar/src/components/form/QForm.js';\nimport QToggle from 'quasar/src/components/toggle/QToggle.js';\nimport QSelect from 'quasar/src/components/select/QSelect.js';\nimport QItem from 'quasar/src/components/item/QItem.js';\nimport QItemSection from 'quasar/src/components/item/QItemSection.js';\nimport QInput from 'quasar/src/components/input/QInput.js';\nimport QTable from 'quasar/src/components/table/QTable.js';\nimport QTr from 'quasar/src/components/table/QTr.js';\nimport QTd from 'quasar/src/components/table/QTd.js';\nimport QTooltip from 'quasar/src/components/tooltip/QTooltip.js';\nimport QBtn from 'quasar/src/components/btn/QBtn.js';\nimport qInstall from \"../../../node_modules/vue-cli-plugin-quasar/lib/runtime.auto-import.js\";\nqInstall(script, 'components', {QForm,QToggle,QSelect,QItem,QItemSection,QInput,QTable,QTr,QTd,QTooltip,QBtn});\n","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/vue-cli-plugin-quasar/lib/loader.vue.auto-import-quasar.js?kebab!../../../node_modules/cache-loader/dist/cjs.js??ref--0-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-2!./DatePicker.vue?vue&type=style&index=0&id=7d8f4962&lang=scss\"","// extracted by mini-css-extract-plugin\nmodule.exports = {\"Gray50\":\"#fafafa\",\"Gray100\":\"#f2f4f5\",\"Gray200\":\"#ebeff2\",\"Gray300\":\"#dae0e6\",\"Gray400\":\"#bec5cc\",\"Gray500\":\"#a1aab3\",\"Gray600\":\"#8a9299\",\"Gray700\":\"#737980\",\"Gray800\":\"#5c6166\",\"Gray900\":\"#45494d\",\"Navy50\":\"#bde3fc\",\"Navy100\":\"#7ec9fc\",\"Navy200\":\"#3faffc\",\"Navy300\":\"#0095fc\",\"Navy400\":\"#0086e3\",\"Navy500\":\"#0077c9\",\"Navy600\":\"#0068b0\",\"Navy700\":\"#005996\",\"Navy800\":\"#004a7d\",\"Navy900\":\"#002b49\",\"Blue50\":\"#bbeafa\",\"Blue100\":\"#7ddafa\",\"Blue200\":\"#3ecafa\",\"Blue300\":\"#00bbfa\",\"Blue400\":\"#00a8e1\",\"Blue500\":\"#0095c7\",\"Blue600\":\"#0081ad\",\"Blue700\":\"#006e94\",\"Blue800\":\"#005b7a\",\"Blue900\":\"#004861\",\"Red50\":\"#f2b5c1\",\"Red100\":\"#f2798f\",\"Red200\":\"#f23d5e\",\"Red300\":\"#f2002c\",\"Red400\":\"#d90027\",\"Red500\":\"#bf0023\",\"Red600\":\"#a6001e\",\"Red700\":\"#8c001a\",\"Red800\":\"#730015\",\"Red900\":\"#590010\",\"Yellow50\":\"#fcf8bd\",\"Yellow100\":\"#fcf37e\",\"Yellow200\":\"#fcef3f\",\"Yellow300\":\"#fceb00\",\"Yellow400\":\"#e3d400\",\"Yellow500\":\"#c9bc00\",\"White\":\"#fff\",\"Black\":\"#17181a\",\"Orange\":\"#ff8900\",\"Transparent\":\"rgba(255,255,255,0)\"};","\r\n\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\n\r\n","\r\nimport { computed, defineComponent, Ref, ref, watch } from 'vue';\r\nimport { useStore as useSubscriptionsStore } from '@/store/subscriptions/subscriptions';\r\n\r\nexport default defineComponent({\r\n props: {\r\n modelValue: {\r\n type: Boolean,\r\n required: true\r\n }\r\n },\r\n setup (props, { emit }) {\r\n const subscriptionsStore = useSubscriptionsStore();\r\n\r\n const isOpen = computed({\r\n get: () => props.modelValue,\r\n set: (v) => emit('update:modelValue', v)\r\n });\r\n\r\n watch(() => props.modelValue, reset);\r\n\r\n const isRefreshingSubscriptions = ref(false);\r\n const refreshSubscriptionsSuccess: Ref = ref(null);\r\n const refreshSubscriptionsSuccessIcon = computed(() => {\r\n if (refreshSubscriptionsSuccess.value === null) {\r\n return [null, null];\r\n }\r\n\r\n return refreshSubscriptionsSuccess.value ? ['mdi-check-circle', 'green'] : ['mdi-alpha-x-circle green', 'red'];\r\n });\r\n\r\n async function refreshCachedSubscriptions () {\r\n isRefreshingSubscriptions.value = true;\r\n\r\n refreshSubscriptionsSuccess.value = await subscriptionsStore.refreshCachedSubscriptions();\r\n\r\n isRefreshingSubscriptions.value = false;\r\n }\r\n\r\n function reset () {\r\n isRefreshingSubscriptions.value = false;\r\n refreshSubscriptionsSuccess.value = null;\r\n }\r\n\r\n function close () {\r\n isOpen.value = false;\r\n }\r\n\r\n return {\r\n isOpen,\r\n refreshCachedSubscriptions,\r\n refreshSubscriptionsSuccess,\r\n refreshSubscriptionsSuccessIcon,\r\n isRefreshingSubscriptions,\r\n close\r\n };\r\n }\r\n});\r\n","import { render } from \"./DiagnosticsDialog.vue?vue&type=template&id=2bc9c79d\"\nimport script from \"./DiagnosticsDialog.vue?vue&type=script&lang=ts\"\nexport * from \"./DiagnosticsDialog.vue?vue&type=script&lang=ts\"\n\nimport \"./DiagnosticsDialog.vue?vue&type=style&index=0&id=2bc9c79d&lang=scss\"\nscript.render = render\n\nexport default script\nimport QDialog from 'quasar/src/components/dialog/QDialog.js';\nimport QCard from 'quasar/src/components/card/QCard.js';\nimport QCardSection from 'quasar/src/components/card/QCardSection.js';\nimport QBtn from 'quasar/src/components/btn/QBtn.js';\nimport QTooltip from 'quasar/src/components/tooltip/QTooltip.js';\nimport QIcon from 'quasar/src/components/icon/QIcon.js';\nimport qInstall from \"../../../node_modules/vue-cli-plugin-quasar/lib/runtime.auto-import.js\";\nqInstall(script, 'components', {QDialog,QCard,QCardSection,QBtn,QTooltip,QIcon});\n","\r\nimport { computed, defineComponent, onMounted, onUnmounted, ref } from 'vue';\r\nimport { QTableColumn } from '@/components/utils/qTable';\r\nimport { useRouter } from 'vue-router';\r\nimport { ISubscriptionListingModel, ISubscriptionService } from '@/store/contracts/subscriptions/subscriptions';\r\nimport { SubscriptionRoutes } from '@/router/routes/subscriptions';\r\nimport { getServiceName } from '@/store/contracts/subscriptions/subscriptionServiceType';\r\nimport useQuasar from 'quasar/src/composables/use-quasar.js';;\r\nimport { useStore as useSubscriptionsStore } from '@/store/subscriptions/subscriptions';\r\nimport { shortDateFormat } from '@/utils/dateUtil';\r\nimport DiagnosticsDialog from '@/components/subscriptions/DiagnosticsDialog.vue';\r\n\r\nexport default defineComponent({\r\n components: {\r\n DiagnosticsDialog\r\n },\r\n async setup () {\r\n const subscriptionsStore = useSubscriptionsStore();\r\n const router = useRouter();\r\n const $q = useQuasar();\r\n\r\n const keysPressed = { m: false };\r\n function onKeyDown (e: KeyboardEvent) {\r\n keysPressed[e.key] = true;\r\n if (keysPressed.m && e.ctrlKey && e.altKey && Object.keys(keysPressed).length === 3) {\r\n toggleDiagnostics();\r\n }\r\n }\r\n onMounted(() => {\r\n window.addEventListener('keydown', (e) => onKeyDown(e));\r\n window.addEventListener('keyup', (e) => delete keysPressed[e.key]);\r\n });\r\n onUnmounted(() => {\r\n window.removeEventListener('keydown', (e) => onKeyDown(e));\r\n window.removeEventListener('keyup', (e) => delete keysPressed[e.key]);\r\n });\r\n\r\n function displayServices (services: ISubscriptionService[]) {\r\n if (services.length === 0) {\r\n return 'None';\r\n }\r\n return services.map(s => getServiceName(s.serviceType)).join(', ');\r\n }\r\n const subscriptions = computed(() => subscriptionsStore.state.subscriptions?.filter(sub => showDisabledSubscriptions.value || subscriptionsStore.isEnabled(sub)));\r\n\r\n const showDisabledSubscriptions = computed({\r\n get: () => subscriptionsStore.state.showDisabled,\r\n set: (value) => subscriptionsStore.setShowDisabled(value)\r\n });\r\n\r\n enum ColumnNames {\r\n label = 'label',\r\n machineId = 'machineId',\r\n services = 'services',\r\n activeDate = 'activeDate',\r\n expiresDate = 'expiresDate',\r\n enabled = 'enabled',\r\n actions = 'actions'\r\n }\r\n\r\n const visibleColumns = computed(() => Object.keys(ColumnNames).filter((c) => showDisabledSubscriptions.value || c !== ColumnNames.enabled));\r\n\r\n const columns: QTableColumn[] = [\r\n {\r\n name: ColumnNames.enabled,\r\n label: 'Enabled',\r\n align: 'left',\r\n field: (row: ISubscriptionListingModel) => subscriptionsStore.isEnabled(row)\r\n },\r\n {\r\n name: ColumnNames.label,\r\n label: 'Label',\r\n align: 'left',\r\n field: (row: ISubscriptionListingModel) => row.label,\r\n sortable: true\r\n },\r\n {\r\n name: ColumnNames.machineId,\r\n label: 'Machine ID',\r\n align: 'left',\r\n field: (row: ISubscriptionListingModel) => row.machineId\r\n },\r\n {\r\n name: ColumnNames.services,\r\n label: 'Services',\r\n align: 'left',\r\n field: (row: ISubscriptionListingModel) => displayServices(row.services)\r\n },\r\n {\r\n name: ColumnNames.activeDate,\r\n label: 'Activation Date',\r\n align: 'left',\r\n field: (row: ISubscriptionListingModel) => shortDateFormat(row.activeDate),\r\n sortable: true,\r\n sort: (a, b) => new Date(a).getTime() - new Date(b).getTime()\r\n },\r\n {\r\n name: ColumnNames.expiresDate,\r\n label: 'Expiration Date',\r\n align: 'left',\r\n field: (row: ISubscriptionListingModel) => shortDateFormat(row.expiresDate),\r\n sortable: true,\r\n sort: (a, b) => new Date(a).getTime() - new Date(b).getTime()\r\n },\r\n {\r\n name: ColumnNames.actions,\r\n label: '',\r\n align: 'left',\r\n field: (row: ISubscriptionListingModel) => row\r\n }\r\n ];\r\n\r\n await subscriptionsStore.loadSubscriptions();\r\n\r\n function viewSubscription (subscription: ISubscriptionListingModel) {\r\n router.push({ name: SubscriptionRoutes.view, params: { subscriptionId: subscription.subscriptionId } });\r\n }\r\n\r\n function generateSubscription () {\r\n router.push({ name: SubscriptionRoutes.generate });\r\n }\r\n\r\n function confirmDisableSubscription (subscription: ISubscriptionListingModel) {\r\n $q.dialog({\r\n title: 'Disable Subscription Confirmation',\r\n message: 'Are you sure you want to disable this subscription?',\r\n cancel: true,\r\n persistent: true\r\n }).onOk(() => {\r\n subscriptionsStore.disableSubscription(subscription.subscriptionId);\r\n });\r\n }\r\n\r\n async function enableSubscription (subscription: ISubscriptionListingModel) {\r\n await subscriptionsStore.enableSubscription(subscription.subscriptionId);\r\n }\r\n\r\n const isDiagnosticsOpen = ref(false);\r\n function toggleDiagnostics () {\r\n isDiagnosticsOpen.value = !isDiagnosticsOpen.value;\r\n }\r\n\r\n return {\r\n columns,\r\n visibleColumns,\r\n subscriptions,\r\n screen: $q.screen,\r\n viewSubscription,\r\n generateSubscription,\r\n isEnabled: subscriptionsStore.isEnabled,\r\n confirmDisableSubscription,\r\n enableSubscription,\r\n showDisabledSubscriptions,\r\n isDiagnosticsOpen\r\n };\r\n }\r\n});\r\n","import { render } from \"./SubscriptionListPage.vue?vue&type=template&id=700b620d\"\nimport script from \"./SubscriptionListPage.vue?vue&type=script&lang=ts\"\nexport * from \"./SubscriptionListPage.vue?vue&type=script&lang=ts\"\n\nimport \"./SubscriptionListPage.vue?vue&type=style&index=0&id=700b620d&lang=scss\"\nscript.render = render\n\nexport default script\nimport QToggle from 'quasar/src/components/toggle/QToggle.js';\nimport QBtn from 'quasar/src/components/btn/QBtn.js';\nimport QTable from 'quasar/src/components/table/QTable.js';\nimport QCheckbox from 'quasar/src/components/checkbox/QCheckbox.js';\nimport qInstall from \"../../../node_modules/vue-cli-plugin-quasar/lib/runtime.auto-import.js\";\nqInstall(script, 'components', {QToggle,QBtn,QTable,QCheckbox});\n","import { ISubscriptionState, ISubscriptionStore, TEnableSubscription, TDisableSubscription, TGenerateNewKey, TLoadSubscription, TSetSubscription, TUpdateActiveExpiresDate, TUpdateLabel, TUpdateNote, TUpdateServices } from '@/store/contracts/subscriptions/subscription';\r\nimport { impl } from '@/utils/impl';\r\nimport { reactive, readonly, provide, inject } from 'vue';\r\nimport { chainHandlers, DefaultIStatusHandler, handleErrorStatus, handleErrorStatusResult, ResponseStatus } from '@/store/utils/apiResponseHandling';\r\nimport { sendRequest } from '@/store/utils/axiosUtils';\r\nimport { Settings } from '@/settings';\r\nimport { store as subscriptionsStore } from '@/store/subscriptions/subscriptions';\r\nimport { IServerSubscriptionResponse, subscriptiontoApp, toServerDate } from '@/store/subscriptions/mapping/subscriptionListingModel';\r\nimport updateLabelValidationModel from '@/validation/updateSubscriptionLabelValidationModel';\r\nimport { store as validationStore } from '@/store/validation';\r\nimport updateActiveExpiresDateValidationModel from '@/validation/updateActiveExpiresDateValidationModel';\r\nimport { SubscriptionUpdateType } from '../contracts/subscriptions/subscriptionUpdateType';\r\n\r\nconst SubscriptionStoreKey = Symbol('SubscriptionStore');\r\n\r\nconst createState = () => reactive(impl({\r\n subscription: null\r\n}));\r\n\r\nfunction setSubscription (state: ISubscriptionState): TSetSubscription {\r\n return (subscription) => {\r\n state.subscription = subscription;\r\n };\r\n}\r\n\r\nfunction loadSubscription (state: ISubscriptionState): TLoadSubscription {\r\n return async (subscriptionId, handler) => {\r\n await handleErrorStatusResult(await sendRequest(\r\n `${Settings.adminApiBaseUrl}/admin/v1/subscription/load`,\r\n 'post',\r\n {\r\n SubscriptionId: subscriptionId\r\n }\r\n ), chainHandlers({\r\n onSuccess: async (s) => setSubscription(state)(subscriptiontoApp(s))\r\n }, handler));\r\n };\r\n}\r\n\r\nfunction generateNewKey (state: ISubscriptionState): TGenerateNewKey {\r\n return async (handler) => {\r\n if (state.subscription !== null) {\r\n await handleErrorStatusResult(await sendRequest(\r\n `${Settings.adminApiBaseUrl}/admin/v1/subscription/newKey`,\r\n 'post',\r\n {\r\n SubscriptionId: state.subscription.subscriptionId\r\n }\r\n ), chainHandlers({\r\n onSuccess: async () => loadSubscription(state)(state.subscription!.subscriptionId)\r\n }, handler));\r\n }\r\n };\r\n}\r\n\r\nfunction updateNote (state: ISubscriptionState): TUpdateNote {\r\n return async (model, handler) => {\r\n if (state.subscription !== null) {\r\n await handleErrorStatus(await sendRequest(\r\n `${Settings.adminApiBaseUrl}/admin/v1/subscription/update`,\r\n 'post',\r\n {\r\n $type: SubscriptionUpdateType.UpdateSubscriptionNotes,\r\n SubscriptionId: state.subscription.subscriptionId,\r\n Note: model.note\r\n }\r\n ), chainHandlers({\r\n onSuccess: async () => loadSubscription(state)(state.subscription!.subscriptionId),\r\n onError: async (r) => {\r\n await DefaultIStatusHandler.onError(r);\r\n }\r\n }, handler));\r\n }\r\n };\r\n}\r\n\r\nfunction updateLabel (state: ISubscriptionState): TUpdateLabel {\r\n return async (model, handler) => {\r\n if (state.subscription !== null) {\r\n const isValid = await validationStore.doValidation({\r\n model: updateLabelValidationModel,\r\n value: model\r\n });\r\n if (isValid) {\r\n await handleErrorStatus(await sendRequest(\r\n `${Settings.adminApiBaseUrl}/admin/v1/subscription/update`,\r\n 'post',\r\n {\r\n $type: SubscriptionUpdateType.UpdateSubscriptionLabel,\r\n SubscriptionId: state.subscription.subscriptionId,\r\n Label: model.label\r\n }\r\n ), chainHandlers({\r\n onSuccess: async () => await loadSubscription(state)(state.subscription!.subscriptionId),\r\n onError: async (r) => {\r\n await DefaultIStatusHandler.onError(r);\r\n }\r\n }, handler));\r\n }\r\n }\r\n };\r\n}\r\n\r\nfunction updateActiveExpiresDate (state: ISubscriptionState): TUpdateActiveExpiresDate {\r\n return async (model, handler) => {\r\n if (state.subscription !== null) {\r\n const isValid = await validationStore.doValidation({\r\n model: updateActiveExpiresDateValidationModel,\r\n value: model\r\n });\r\n if (isValid) {\r\n await handleErrorStatus(await sendRequest(\r\n `${Settings.adminApiBaseUrl}/admin/v1/subscription/update`,\r\n 'post',\r\n {\r\n $type: SubscriptionUpdateType.UpdateSubscriptionStatus,\r\n SubscriptionId: state.subscription.subscriptionId,\r\n ...toServerDate(model)\r\n }\r\n ), chainHandlers({\r\n onSuccess: async () => await loadSubscription(state)(state.subscription!.subscriptionId),\r\n onError: async (r) => {\r\n await DefaultIStatusHandler.onError(r);\r\n }\r\n }, handler));\r\n }\r\n }\r\n };\r\n}\r\n\r\nfunction updateServices (state: ISubscriptionState): TUpdateServices {\r\n return async (model, handler) => {\r\n if (state.subscription !== null) {\r\n await handleErrorStatusResult(await sendRequest(\r\n `${Settings.adminApiBaseUrl}/admin/v1/subscription/update`,\r\n 'post',\r\n {\r\n $type: SubscriptionUpdateType.UpdateSubscriptionServices,\r\n SubscriptionId: state.subscription.subscriptionId,\r\n Services: model.Services\r\n }\r\n ), chainHandlers({\r\n onSuccess: async () => loadSubscription(state)(state.subscription!.subscriptionId),\r\n onError: async (r) => {\r\n await DefaultIStatusHandler.onError(r);\r\n }\r\n }, handler));\r\n }\r\n };\r\n}\r\n\r\nfunction enableSubscription (state: ISubscriptionState): TEnableSubscription {\r\n return async (handler) => {\r\n if (state.subscription !== null) {\r\n return await subscriptionsStore.enableSubscription(state.subscription.subscriptionId,\r\n chainHandlers(\r\n {\r\n onSuccess: async () => loadSubscription(state)(state.subscription!.subscriptionId)\r\n }, handler));\r\n }\r\n console.warn(\"Can't enable a subscription when the subscription is null.\");\r\n };\r\n}\r\n\r\nfunction disableSubscription (state: ISubscriptionState): TDisableSubscription {\r\n return async (handler) => {\r\n if (state.subscription !== null) {\r\n return await subscriptionsStore.disableSubscription(state.subscription.subscriptionId,\r\n chainHandlers(\r\n {\r\n onSuccess: async () => loadSubscription(state)(state.subscription!.subscriptionId)\r\n }, handler));\r\n }\r\n console.warn(\"Can't disable a subscription when the subscription is null.\");\r\n };\r\n}\r\n\r\nfunction isEnabled (state: ISubscriptionState): () => boolean {\r\n return () => {\r\n if (state.subscription === null) {\r\n return false;\r\n }\r\n\r\n return subscriptionsStore.isEnabled(state.subscription);\r\n };\r\n}\r\n\r\nconst createForState = (state: ISubscriptionState) => impl({\r\n state: readonly(state),\r\n setSubscription: setSubscription(state),\r\n loadSubscription: loadSubscription(state),\r\n enableSubscription: enableSubscription(state),\r\n disableSubscription: disableSubscription(state),\r\n generateNewKey: generateNewKey(state),\r\n updateNote: updateNote(state),\r\n updateServices: updateServices(state),\r\n updateLabel: updateLabel(state),\r\n updateActiveExpiresDate: updateActiveExpiresDate(state),\r\n get isEnabled (): boolean {\r\n return isEnabled(state)();\r\n }\r\n});\r\n\r\nexport function provideStore (): ISubscriptionStore {\r\n const state = createState();\r\n provide(SubscriptionStoreKey, state);\r\n return createForState(state);\r\n}\r\n\r\nexport function useStore (): ISubscriptionStore {\r\n const state = inject(SubscriptionStoreKey);\r\n if (state === undefined) {\r\n throw new Error('Using SubscriptionStore before providing it!');\r\n }\r\n return createForState(state);\r\n}\r\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"Gray50\":\"#fafafa\",\"Gray100\":\"#f2f4f5\",\"Gray200\":\"#ebeff2\",\"Gray300\":\"#dae0e6\",\"Gray400\":\"#bec5cc\",\"Gray500\":\"#a1aab3\",\"Gray600\":\"#8a9299\",\"Gray700\":\"#737980\",\"Gray800\":\"#5c6166\",\"Gray900\":\"#45494d\",\"Navy50\":\"#bde3fc\",\"Navy100\":\"#7ec9fc\",\"Navy200\":\"#3faffc\",\"Navy300\":\"#0095fc\",\"Navy400\":\"#0086e3\",\"Navy500\":\"#0077c9\",\"Navy600\":\"#0068b0\",\"Navy700\":\"#005996\",\"Navy800\":\"#004a7d\",\"Navy900\":\"#002b49\",\"Blue50\":\"#bbeafa\",\"Blue100\":\"#7ddafa\",\"Blue200\":\"#3ecafa\",\"Blue300\":\"#00bbfa\",\"Blue400\":\"#00a8e1\",\"Blue500\":\"#0095c7\",\"Blue600\":\"#0081ad\",\"Blue700\":\"#006e94\",\"Blue800\":\"#005b7a\",\"Blue900\":\"#004861\",\"Red50\":\"#f2b5c1\",\"Red100\":\"#f2798f\",\"Red200\":\"#f23d5e\",\"Red300\":\"#f2002c\",\"Red400\":\"#d90027\",\"Red500\":\"#bf0023\",\"Red600\":\"#a6001e\",\"Red700\":\"#8c001a\",\"Red800\":\"#730015\",\"Red900\":\"#590010\",\"Yellow50\":\"#fcf8bd\",\"Yellow100\":\"#fcf37e\",\"Yellow200\":\"#fcef3f\",\"Yellow300\":\"#fceb00\",\"Yellow400\":\"#e3d400\",\"Yellow500\":\"#c9bc00\",\"White\":\"#fff\",\"Black\":\"#17181a\",\"Orange\":\"#ff8900\",\"Transparent\":\"rgba(255,255,255,0)\"};","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/vue-cli-plugin-quasar/lib/loader.vue.auto-import-quasar.js?kebab!../../../node_modules/cache-loader/dist/cjs.js??ref--0-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-2!./EditActiveExpiresDatesDialog.vue?vue&type=style&index=0&id=3429c4f9&lang=scss\"","\r\nexport function hasFlag (flag: T): (flags: T | number) => boolean {\r\n return (flags) => (flags & flag) === flag;\r\n}\r\n\r\n/**\r\n * Get an array of enum values based on the given populated flag value.\r\n * @param possibleValues the enum values\r\n * @param flag the populated flag value\r\n * @returns an array containing the values of the enum that are populated in the flag\r\n */\r\nexport function getFlagValues (possibleValues: E[], flag: number | null): E[] {\r\n if (flag === null) {\r\n return [];\r\n }\r\n return possibleValues.filter(v => hasFlag(v)(flag));\r\n}\r\n\r\nexport function toFlag (values: E[]): number {\r\n return values.reduce((prev, next) => prev | next, 0);\r\n}\r\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"Gray50\":\"#fafafa\",\"Gray100\":\"#f2f4f5\",\"Gray200\":\"#ebeff2\",\"Gray300\":\"#dae0e6\",\"Gray400\":\"#bec5cc\",\"Gray500\":\"#a1aab3\",\"Gray600\":\"#8a9299\",\"Gray700\":\"#737980\",\"Gray800\":\"#5c6166\",\"Gray900\":\"#45494d\",\"Navy50\":\"#bde3fc\",\"Navy100\":\"#7ec9fc\",\"Navy200\":\"#3faffc\",\"Navy300\":\"#0095fc\",\"Navy400\":\"#0086e3\",\"Navy500\":\"#0077c9\",\"Navy600\":\"#0068b0\",\"Navy700\":\"#005996\",\"Navy800\":\"#004a7d\",\"Navy900\":\"#002b49\",\"Blue50\":\"#bbeafa\",\"Blue100\":\"#7ddafa\",\"Blue200\":\"#3ecafa\",\"Blue300\":\"#00bbfa\",\"Blue400\":\"#00a8e1\",\"Blue500\":\"#0095c7\",\"Blue600\":\"#0081ad\",\"Blue700\":\"#006e94\",\"Blue800\":\"#005b7a\",\"Blue900\":\"#004861\",\"Red50\":\"#f2b5c1\",\"Red100\":\"#f2798f\",\"Red200\":\"#f23d5e\",\"Red300\":\"#f2002c\",\"Red400\":\"#d90027\",\"Red500\":\"#bf0023\",\"Red600\":\"#a6001e\",\"Red700\":\"#8c001a\",\"Red800\":\"#730015\",\"Red900\":\"#590010\",\"Yellow50\":\"#fcf8bd\",\"Yellow100\":\"#fcf37e\",\"Yellow200\":\"#fcef3f\",\"Yellow300\":\"#fceb00\",\"Yellow400\":\"#e3d400\",\"Yellow500\":\"#c9bc00\",\"White\":\"#fff\",\"Black\":\"#17181a\",\"Orange\":\"#ff8900\",\"Transparent\":\"rgba(255,255,255,0)\"};","import { SubscriptionServiceType } from '@/store/contracts/subscriptions/subscriptionServiceType';\r\n\r\nexport function subscriptionServiceTypeGridDisplay (serviceType: SubscriptionServiceType) : string | null {\r\n switch (serviceType) {\r\n case SubscriptionServiceType.None:\r\n return null;\r\n case SubscriptionServiceType.Vision:\r\n return 'Lookups';\r\n case SubscriptionServiceType.Translation:\r\n return 'Characters';\r\n case SubscriptionServiceType.Transcription:\r\n return 'Duration of Audio';\r\n case SubscriptionServiceType.Profile:\r\n return 'Searches';\r\n default:\r\n return '';\r\n }\r\n}\r\n\r\nexport function subscriptionServiceTypeChartDisplay (serviceType: SubscriptionServiceType) : string | null {\r\n switch (serviceType) {\r\n case SubscriptionServiceType.None:\r\n return null;\r\n case SubscriptionServiceType.Vision:\r\n return 'Lookups';\r\n case SubscriptionServiceType.Translation:\r\n return 'Characters';\r\n case SubscriptionServiceType.Transcription:\r\n return 'Hours';\r\n case SubscriptionServiceType.Profile:\r\n return 'Searches';\r\n default:\r\n return '';\r\n }\r\n}\r\n","\r\n\r\n\r\n\r\n\r\n","import { ISubscriptionServiceModel } from '@/store/contracts/subscriptions/addService';\r\nimport { SubscriptionServiceType } from '@/store/contracts/subscriptions/subscriptionServiceType';\r\nimport { VisionFeaturesFlag } from '@/store/contracts/subscriptions/visionFeaturesFlag';\r\nimport { ValidationModel } from '@/validation';\r\nimport { conditionalRules, getValueRequiredRule, numberRequiredRule } from '@/validation/common/rules';\r\nimport { isAfter, isBefore } from '@/validation/common/dateRules';\r\n\r\nexport enum SubscriptionServiceFieldName {\r\n DailyQuota = 'dailyQuota',\r\n MonthlyQuota = 'monthlyQuota',\r\n ContractStartDate = 'contractStartDate',\r\n ContractEndDate = 'contractEndDate',\r\n ContractQuota = 'contractQuota',\r\n ServiceType = 'serviceType',\r\n FeaturesFlag = 'featuresFlag'\r\n}\r\n\r\nclass SubscriptionServiceValidationModel extends ValidationModel {\r\n constructor () {\r\n super();\r\n\r\n this.setField(SubscriptionServiceFieldName.ContractQuota, {\r\n getter: (model) => model?.contractQuota ?? null,\r\n rules: [\r\n numberRequiredRule('Contract Quota is required.')\r\n ]\r\n });\r\n\r\n this.setField(SubscriptionServiceFieldName.ContractStartDate, {\r\n getter: (model) => model?.contractStartDate ?? null,\r\n rules: [\r\n getValueRequiredRule((value: Date | null) => value !== null)('Contract Start Date is required.'),\r\n isBefore((model) => model?.contractEndDate ?? null, 'Should be before Contract End Date.')\r\n ]\r\n });\r\n\r\n this.setField(SubscriptionServiceFieldName.ContractEndDate, {\r\n getter: (model) => model?.contractEndDate ?? null,\r\n rules: [\r\n getValueRequiredRule((value: Date | null) => value !== null)('Contract End Date is required.'),\r\n isAfter((model) => model?.contractStartDate ?? null, 'Should be after Contract Start Date.')\r\n ]\r\n });\r\n\r\n this.setField(SubscriptionServiceFieldName.ServiceType, {\r\n getter: (model) => model?.serviceType ?? null,\r\n rules: [\r\n getValueRequiredRule((v) => v !== null && v !== SubscriptionServiceType.None)('Service Type is required.'),\r\n async (context) => {\r\n const existingServiceTypes = context.model?.createModel?.services.filter(s => s.index === null || s.index !== context.model?.index).map((s) => s.serviceType) ?? [];\r\n const newServiceType = context.model?.serviceType ?? SubscriptionServiceType.None;\r\n return existingServiceTypes.none((s) => s === newServiceType) || 'Can not have multiple services of the same type';\r\n }\r\n ]\r\n });\r\n\r\n this.setField(SubscriptionServiceFieldName.FeaturesFlag, {\r\n getter: (model) => model?.featuresFlag ?? null,\r\n rules: [\r\n ...conditionalRules(\r\n (ctx) => ctx.model?.serviceType === SubscriptionServiceType.Vision,\r\n [\r\n getValueRequiredRule((f) => f !== null && f !== VisionFeaturesFlag.None)('Features are required.')\r\n ])\r\n ]\r\n });\r\n }\r\n\r\n public get modelName (): string {\r\n return 'SubscriptionService';\r\n }\r\n}\r\n\r\nexport default new SubscriptionServiceValidationModel();\r\n","import { impl } from '@/utils/impl';\r\nimport { inject, provide, reactive, readonly } from 'vue';\r\nimport {\r\n IAddServiceState,\r\n IAddServiceStore,\r\n TSetContractStartDate,\r\n TSetContractEndDate,\r\n TSetContractQuota,\r\n TSetMonthlyQuota,\r\n TSetDailyQuota,\r\n TSetCreateModel,\r\n TSetFeaturesFlag,\r\n TSetTanglesApiKey,\r\n TSetIndex,\r\n TSetModel,\r\n TSetServiceType,\r\n TValidate\r\n} from '@/store/contracts/subscriptions/addService';\r\nimport { store as validationStore } from '@/store/validation';\r\nimport validationModel from '@/validation/subscriptionServiceValidationModel';\r\nimport { SubscriptionServiceType } from '@/store/contracts/subscriptions/subscriptionServiceType';\r\nimport { Settings } from '@/settings';\r\n\r\nconst AddServiceStoreKey = Symbol('AddServiceStore');\r\n\r\nfunction setModel (state: IAddServiceState): TSetModel {\r\n return (model) => {\r\n state.model = model;\r\n };\r\n}\r\n\r\nfunction setContractStartDate (state: IAddServiceState): TSetContractStartDate {\r\n return (contractStartDate) => {\r\n state.model.contractStartDate = contractStartDate;\r\n };\r\n}\r\n\r\nfunction setContractEndDate (state: IAddServiceState): TSetContractEndDate {\r\n return (contractEndDate) => {\r\n state.model.contractEndDate = contractEndDate;\r\n };\r\n}\r\n\r\nfunction setContractQuota (state: IAddServiceState): TSetContractQuota {\r\n return (contractQuota) => {\r\n let val = contractQuota;\r\n if ((typeof contractQuota) === 'string') {\r\n const parsed = Number.parseInt(contractQuota as any);\r\n val = isNaN(parsed) ? null : parsed;\r\n }\r\n state.model.contractQuota = val;\r\n };\r\n}\r\n\r\nfunction setMonthlyQuota (state: IAddServiceState): TSetMonthlyQuota {\r\n return (monthlyQuota) => {\r\n let val = monthlyQuota;\r\n if ((typeof monthlyQuota) === 'string') {\r\n const parsed = Number.parseInt(monthlyQuota as any);\r\n val = isNaN(parsed) ? null : parsed;\r\n }\r\n state.model.monthlyQuota = val;\r\n };\r\n}\r\n\r\nfunction setDailyQuota (state: IAddServiceState): TSetDailyQuota {\r\n return (dailyQuota) => {\r\n let val = dailyQuota;\r\n if ((typeof dailyQuota) === 'string') {\r\n const parsed = Number.parseInt(dailyQuota as any);\r\n val = isNaN(parsed) ? null : parsed;\r\n }\r\n state.model.dailyQuota = val;\r\n };\r\n}\r\n\r\nfunction setServiceType (state: IAddServiceState): TSetServiceType {\r\n return (serviceType) => {\r\n state.model.serviceType = serviceType;\r\n };\r\n}\r\n\r\nfunction setFeaturesFlag (state: IAddServiceState): TSetFeaturesFlag {\r\n return (featuresFlag) => {\r\n state.model.featuresFlag = featuresFlag;\r\n };\r\n}\r\n\r\nfunction setTanglesApiKey (state: IAddServiceState): TSetTanglesApiKey {\r\n return (tanglesApiKey) => {\r\n state.model.tanglesApiKey = tanglesApiKey;\r\n };\r\n}\r\n\r\nfunction setCreateModel (state: IAddServiceState): TSetCreateModel {\r\n return (createModel) => {\r\n state.model.createModel = createModel;\r\n };\r\n}\r\n\r\nfunction setIndex (state: IAddServiceState): TSetIndex {\r\n return (index) => {\r\n state.model.index = index;\r\n };\r\n}\r\n\r\nfunction validate (state: IAddServiceState): TValidate {\r\n return async () => {\r\n return await validationStore.doValidation({\r\n model: validationModel,\r\n value: state.model\r\n });\r\n };\r\n}\r\n\r\nexport function createState (): IAddServiceState {\r\n validationStore.clear(validationModel);\r\n\r\n return reactive(impl({\r\n model: {\r\n contractStartDate: null,\r\n contractEndDate: null,\r\n contractQuota: Settings.defaultContractQuota,\r\n monthlyQuota: Settings.defaultMonthlyQuota,\r\n dailyQuota: Settings.defaultDailyQuota,\r\n serviceType: SubscriptionServiceType.None,\r\n featuresFlag: 1, // coincidentally want to default to Tag's for Vision and Tangles for Profile\r\n tanglesApiKey: null,\r\n createModel: null,\r\n index: null\r\n }\r\n }));\r\n}\r\n\r\nexport function createForState (state: IAddServiceState): IAddServiceStore {\r\n return impl({\r\n state: readonly(state),\r\n setModel: setModel(state),\r\n setContractStartDate: setContractStartDate(state),\r\n setContractEndDate: setContractEndDate(state),\r\n setContractQuota: setContractQuota(state),\r\n setMonthlyQuota: setMonthlyQuota(state),\r\n setDailyQuota: setDailyQuota(state),\r\n setFeaturesFlag: setFeaturesFlag(state),\r\n setTanglesApiKey: setTanglesApiKey(state),\r\n setServiceType: setServiceType(state),\r\n setCreateModel: setCreateModel(state),\r\n setIndex: setIndex(state),\r\n validate: validate(state)\r\n });\r\n}\r\n\r\nexport function provideStore (): IAddServiceStore {\r\n const state = createState();\r\n\r\n provide(AddServiceStoreKey, state);\r\n\r\n return createForState(state);\r\n}\r\n\r\nexport function useStore (): IAddServiceStore {\r\n const state = inject(AddServiceStoreKey);\r\n if (state === undefined) {\r\n throw new Error('Using AddServiceStore before providing it!');\r\n }\r\n return createForState(state);\r\n}\r\n","\r\nimport { computed, defineComponent, PropType, ref, watch } from 'vue';\r\nimport { VisionFeaturesFlag, VisionFeaturesFlags, getVisionFeatureName } from '@/store/contracts/subscriptions/visionFeaturesFlag';\r\nimport { ProfileFeaturesFlag, ProfileFeaturesFlags, getProfileFeatureName } from '@/store/contracts/subscriptions/profileFeaturesFlag';\r\nimport { SubscriptionServiceType, SubscriptionServiceTypes, getServiceName } from '@/store/contracts/subscriptions/subscriptionServiceType';\r\nimport validationModel, { SubscriptionServiceFieldName as FieldName } from '@/validation/subscriptionServiceValidationModel';\r\nimport { provideStore as provideServiceStore } from '@/store/subscriptions/addService';\r\nimport { fromAdd } from '@/store/subscriptions/mapping/subscriptionService';\r\nimport { getFlagValues, toFlag } from '@/utils/hasFlag';\r\nimport { ISubscriptionCreateModel } from '@/store/contracts/subscriptions/create';\r\nimport { useFieldsValidation } from '@/components/utils/fieldValidation';\r\nimport { ISubscriptionServiceModel } from '@/store/contracts/subscriptions/addService';\r\nimport { Settings } from '@/settings';\r\nimport DatePicker from '@/components/date/DatePicker.vue';\r\n\r\nexport default defineComponent({\r\n props: {\r\n modelValue: {\r\n type: Boolean,\r\n required: true\r\n },\r\n subscriptionCreateModel: {\r\n type: Object as PropType,\r\n required: true\r\n },\r\n subscriptionService: {\r\n type: Object as PropType,\r\n required: false\r\n }\r\n },\r\n components: {\r\n DatePicker\r\n },\r\n setup (props, { emit }) {\r\n const isOpen = computed({\r\n get: () => props.modelValue,\r\n set: (v) => emit('update:modelValue', v)\r\n });\r\n\r\n const contractQuotaLabel = computed(() => {\r\n switch (serviceType.value) {\r\n case SubscriptionServiceType.None:\r\n return 'Contract Quota';\r\n case SubscriptionServiceType.Vision:\r\n return 'Contract Quota (Lookups)';\r\n case SubscriptionServiceType.Translation:\r\n return 'Contract Quota (Characters)';\r\n case SubscriptionServiceType.Transcription:\r\n return 'Contract Quota (Hours)';\r\n case SubscriptionServiceType.Profile:\r\n return 'Contract Quota (Searches)';\r\n default:\r\n throw new Error(`Service Type ${serviceType.value} not found.`);\r\n }\r\n });\r\n\r\n const monthlyQuotaLabel = computed(() => {\r\n switch (serviceType.value) {\r\n case SubscriptionServiceType.None:\r\n return 'Monthly Quota';\r\n case SubscriptionServiceType.Vision:\r\n return 'Monthly Quota (Lookups)';\r\n case SubscriptionServiceType.Translation:\r\n return 'Monthly Quota (Characters)';\r\n case SubscriptionServiceType.Transcription:\r\n return 'Monthly Quota (Hours)';\r\n case SubscriptionServiceType.Profile:\r\n return 'Monthly Quota (Searches)';\r\n default:\r\n throw new Error(`Service Type ${serviceType.value} not found.`);\r\n }\r\n });\r\n\r\n const dailyQuotaLabel = computed(() => {\r\n switch (serviceType.value) {\r\n case SubscriptionServiceType.None:\r\n return 'Daily Quota';\r\n case SubscriptionServiceType.Vision:\r\n return 'Daily Quota (Lookups)';\r\n case SubscriptionServiceType.Translation:\r\n return 'Daily Quota (Characters)';\r\n case SubscriptionServiceType.Transcription:\r\n return 'Daily Quota (Hours)';\r\n case SubscriptionServiceType.Profile:\r\n return 'Daily Quota (Searches)';\r\n default:\r\n throw new Error(`Service Type ${serviceType.value} not found.`);\r\n }\r\n });\r\n\r\n const addServiceStore = provideServiceStore();\r\n\r\n const noServiceTypeSelected = computed(() => serviceType.value === SubscriptionServiceType.None);\r\n\r\n addServiceStore.setCreateModel(props.subscriptionCreateModel);\r\n\r\n const availableServices = SubscriptionServiceTypes.map(v => ({\r\n label: getServiceName(v),\r\n value: v\r\n }));\r\n\r\n const { validationStore, validationRefs } = useFieldsValidation(\r\n validationModel,\r\n ref(true),\r\n [FieldName.ServiceType, FieldName.DailyQuota, FieldName.MonthlyQuota, FieldName.ContractStartDate, FieldName.ContractEndDate, FieldName.ContractQuota, FieldName.FeaturesFlag]);\r\n\r\n const serviceType = computed({\r\n get: () => addServiceStore.state.model.serviceType,\r\n set: (s) => {\r\n resetQuotas(s); // Quotas use different units based on service type so we want to rest them when the service type changes.\r\n addServiceStore.setServiceType(s);\r\n }\r\n });\r\n\r\n const contractStartDate = computed({\r\n get: () => addServiceStore.state.model.contractStartDate,\r\n set: addServiceStore.setContractStartDate\r\n });\r\n\r\n const contractEndDate = computed({\r\n get: () => addServiceStore.state.model.contractEndDate,\r\n set: addServiceStore.setContractEndDate\r\n });\r\n\r\n const contractQuota = computed({\r\n get: () => getQuota('Contract', serviceType.value),\r\n set: (s) => setQuota(s, 'Contract', serviceType.value)\r\n });\r\n\r\n const monthlyQuota = computed({\r\n get: () => getQuota('Monthly', serviceType.value),\r\n set: (s) => setQuota(s, 'Monthly', serviceType.value)\r\n });\r\n\r\n const dailyQuota = computed({\r\n get: () => getQuota('Daily', serviceType.value),\r\n set: (s) => setQuota(s, 'Daily', serviceType.value)\r\n });\r\n\r\n const visionFeaturesFlag = computed({\r\n get: () => getFlagValues(VisionFeaturesFlags.filter(f => f !== VisionFeaturesFlag.None), addServiceStore.state.model.featuresFlag),\r\n set: (value) => addServiceStore.setFeaturesFlag(toFlag(value))\r\n });\r\n\r\n const profileFeaturesFlag = computed({\r\n get: () => getFlagValues(ProfileFeaturesFlags.filter(f => f !== ProfileFeaturesFlag.None), addServiceStore.state.model.featuresFlag),\r\n set: (value) => addServiceStore.setFeaturesFlag(toFlag(value))\r\n });\r\n\r\n const tanglesApiKey = computed({\r\n get: () => addServiceStore.state.model.tanglesApiKey,\r\n set: (s) => {\r\n if (s) {\r\n addServiceStore.setContractQuota(2147483647);\r\n } else if (addServiceStore.state.model.contractQuota === 2147483647) {\r\n addServiceStore.setContractQuota(null);\r\n }\r\n addServiceStore.setTanglesApiKey(s);\r\n }\r\n });\r\n\r\n const availableFeatures = computed(() => {\r\n switch (serviceType.value) {\r\n case SubscriptionServiceType.Vision:\r\n return VisionFeaturesFlags.filter(f => f !== VisionFeaturesFlags[0]).map(f => ({\r\n label: getVisionFeatureName(f),\r\n value: f\r\n }));\r\n case SubscriptionServiceType.Profile:\r\n return ProfileFeaturesFlags.filter(f => f !== ProfileFeaturesFlags[0]).map(f => ({\r\n label: getProfileFeatureName(f),\r\n value: f\r\n }));\r\n default:\r\n return [];\r\n }\r\n });\r\n\r\n function resetQuotas (serviceType: SubscriptionServiceType | null) {\r\n if (serviceType === SubscriptionServiceType.Profile && tanglesApiKey.value) {\r\n addServiceStore.setContractQuota(2147483647);\r\n } else {\r\n addServiceStore.setContractQuota(null);\r\n }\r\n addServiceStore.setMonthlyQuota(null);\r\n addServiceStore.setDailyQuota(null);\r\n }\r\n\r\n function getQuota (contractType: 'Contract' | 'Monthly' | 'Daily', serviceType: SubscriptionServiceType | null) {\r\n if (!serviceType) {\r\n serviceType = SubscriptionServiceType.None;\r\n }\r\n switch (contractType) {\r\n case 'Contract':\r\n return normalizeQuotaFromServer(addServiceStore.state.model.contractQuota, serviceType);\r\n case 'Monthly':\r\n return normalizeQuotaFromServer(addServiceStore.state.model.monthlyQuota, serviceType);\r\n case 'Daily':\r\n return normalizeQuotaFromServer(addServiceStore.state.model.dailyQuota, serviceType);\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n function setQuota (quota: number | null | undefined, contractType: 'Contract' | 'Monthly' | 'Daily', serviceType: SubscriptionServiceType | null) {\r\n if (!serviceType) {\r\n serviceType = SubscriptionServiceType.None;\r\n }\r\n switch (contractType) {\r\n case 'Contract':\r\n addServiceStore.setContractQuota(normalizeQuotaToServer(quota, serviceType));\r\n break;\r\n case 'Monthly':\r\n addServiceStore.setMonthlyQuota(normalizeQuotaToServer(quota, serviceType));\r\n break;\r\n case 'Daily':\r\n addServiceStore.setDailyQuota(normalizeQuotaToServer(quota, serviceType));\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n function normalizeQuotaToServer (value: number | null | undefined, serviceType: SubscriptionServiceType) {\r\n if (!value) {\r\n return null;\r\n }\r\n switch (serviceType) {\r\n case SubscriptionServiceType.Transcription:\r\n return value * 3600; // Converting hours to seconds for storage on the backend.\r\n default:\r\n return parseFloat(value.toFixed(0)); // Backend quotas are long and cannot have decimals.\r\n }\r\n }\r\n\r\n function normalizeQuotaFromServer (value: number | null, serviceType: SubscriptionServiceType) {\r\n if (!value) {\r\n return null;\r\n }\r\n switch (serviceType) {\r\n case SubscriptionServiceType.Transcription:\r\n return parseFloat((value / 3600).toFixed(2)); // Converting seconds to hours for view on frontend\r\n default:\r\n return parseFloat(value.toFixed(0)); // Backend quotas are long and cannot have decimals.\r\n }\r\n }\r\n\r\n const hasVisionFeatures = computed(() => {\r\n return (serviceType.value === SubscriptionServiceType.Vision);\r\n });\r\n const hasProfileFeatures = computed(() => {\r\n return (serviceType.value === SubscriptionServiceType.Profile);\r\n });\r\n const hasTanglesFeatures = computed(() => {\r\n return (serviceType.value === SubscriptionServiceType.Profile && (profileFeaturesFlag.value.includes(ProfileFeaturesFlag.TanglesSearch) || profileFeaturesFlag.value.includes(ProfileFeaturesFlag.AdvancedTanglesSearch)));\r\n });\r\n\r\n function resetState () {\r\n addServiceStore.setContractStartDate(props.subscriptionService ? props.subscriptionService?.contractStartDate : props.subscriptionCreateModel.activeDate);\r\n addServiceStore.setContractEndDate(props.subscriptionService ? props.subscriptionService?.contractEndDate : props.subscriptionCreateModel.expiresDate);\r\n addServiceStore.setContractQuota(props.subscriptionService?.contractQuota ?? Settings.defaultContractQuota);\r\n addServiceStore.setMonthlyQuota(props.subscriptionService?.monthlyQuota ?? Settings.defaultMonthlyQuota);\r\n addServiceStore.setDailyQuota(props.subscriptionService?.dailyQuota ?? Settings.defaultDailyQuota);\r\n addServiceStore.setServiceType(props.subscriptionService?.serviceType ?? SubscriptionServiceType.None);\r\n addServiceStore.setFeaturesFlag(props.subscriptionService?.featuresFlag ?? VisionFeaturesFlag.Tags);\r\n addServiceStore.setTanglesApiKey(props.subscriptionService?.tanglesApiKey ?? null);\r\n addServiceStore.setIndex(props.subscriptionService?.index ?? props.subscriptionCreateModel.services.length);\r\n }\r\n\r\n watch(() => props.modelValue, resetState);\r\n\r\n watch(() => props.subscriptionCreateModel, () => addServiceStore.setCreateModel(props.subscriptionCreateModel));\r\n\r\n async function add () {\r\n const valid = await addServiceStore.validate();\r\n if (valid) {\r\n emit('service-added', fromAdd(addServiceStore.state.model));\r\n isOpen.value = false;\r\n }\r\n }\r\n\r\n async function cancel () {\r\n validationStore.clear(validationModel);\r\n isOpen.value = false;\r\n }\r\n\r\n const dialogTitle = computed(() => props.subscriptionService ? 'Edit Service' : 'Add Service');\r\n const confirmWord = computed(() => props.subscriptionService ? 'Save' : 'Add');\r\n\r\n function contractStartDateChanged (startDate: Date | null) {\r\n contractStartDate.value = startDate;\r\n }\r\n\r\n function contractEndDateChanged (endDate: Date | null) {\r\n contractEndDate.value = endDate;\r\n }\r\n\r\n return {\r\n isOpen,\r\n contractStartDate,\r\n contractStartDateChanged,\r\n contractEndDate,\r\n contractEndDateChanged,\r\n contractQuota,\r\n monthlyQuota,\r\n dailyQuota,\r\n availableServices,\r\n serviceType,\r\n availableFeatures,\r\n add,\r\n cancel,\r\n hasVisionFeatures,\r\n hasProfileFeatures,\r\n hasTanglesFeatures,\r\n validationRefs,\r\n FieldName,\r\n visionFeaturesFlag,\r\n profileFeaturesFlag,\r\n tanglesApiKey,\r\n dialogTitle,\r\n confirmWord,\r\n contractQuotaLabel,\r\n monthlyQuotaLabel,\r\n dailyQuotaLabel,\r\n noServiceTypeSelected,\r\n resetQuotas\r\n };\r\n }\r\n});\r\n","import { render } from \"./AddServiceDialog.vue?vue&type=template&id=71ad42ae\"\nimport script from \"./AddServiceDialog.vue?vue&type=script&lang=ts\"\nexport * from \"./AddServiceDialog.vue?vue&type=script&lang=ts\"\n\nimport \"./AddServiceDialog.vue?vue&type=style&index=0&id=71ad42ae&lang=scss\"\nscript.render = render\n\nexport default script\nimport QDialog from 'quasar/src/components/dialog/QDialog.js';\nimport QCard from 'quasar/src/components/card/QCard.js';\nimport QCardSection from 'quasar/src/components/card/QCardSection.js';\nimport QSelect from 'quasar/src/components/select/QSelect.js';\nimport QInput from 'quasar/src/components/input/QInput.js';\nimport QBtn from 'quasar/src/components/btn/QBtn.js';\nimport qInstall from \"../../../node_modules/vue-cli-plugin-quasar/lib/runtime.auto-import.js\";\nqInstall(script, 'components', {QDialog,QCard,QCardSection,QSelect,QInput,QBtn});\n","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/vue-cli-plugin-quasar/lib/loader.vue.auto-import-quasar.js?kebab!../../../node_modules/cache-loader/dist/cjs.js??ref--0-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-2!./SubscriptionTransactionsPage.vue?vue&type=style&index=0&id=2c0a2708&lang=scss\"","export enum VisionFeaturesFlag\r\n {\r\n /// \r\n /// No additional features enabled for Vision\r\n /// \r\n None = 0,\r\n /// \r\n /// Tags feature for Vision\r\n /// \r\n Tags = 1,\r\n /// \r\n /// Adult content feature for Vision\r\n /// \r\n Adult = 1 << 1,\r\n}\r\n\r\nexport const VisionFeaturesFlags = [VisionFeaturesFlag.None, VisionFeaturesFlag.Adult, VisionFeaturesFlag.Tags];\r\n\r\nexport const getVisionFeatureName = (feature: VisionFeaturesFlag, defaultException = true): string => {\r\n switch (feature) {\r\n case VisionFeaturesFlag.Tags:\r\n return 'Tags';\r\n case VisionFeaturesFlag.Adult:\r\n return 'Adult';\r\n default:\r\n if (defaultException) {\r\n throw new Error(`Feature ${feature} does not exist.`);\r\n }\r\n return 'None';\r\n }\r\n};\r\n","export enum ProfileFeaturesFlag\r\n {\r\n /// \r\n /// No profile search features enabled.\r\n /// \r\n None = 0,\r\n /// \r\n /// Ability to search tangles.\r\n /// \r\n TanglesSearch = 1,\r\n /// \r\n /// Ability to search tangles with the advanced search flag.\r\n /// \r\n AdvancedTanglesSearch = 1 << 1,\r\n}\r\n\r\nexport const ProfileFeaturesFlags = [ProfileFeaturesFlag.None, ProfileFeaturesFlag.TanglesSearch];\r\n\r\nexport const getProfileFeatureName = (feature: ProfileFeaturesFlag, defaultException = true): string => {\r\n switch (feature) {\r\n case ProfileFeaturesFlag.TanglesSearch:\r\n return 'Tangles';\r\n case ProfileFeaturesFlag.AdvancedTanglesSearch:\r\n return 'Advanced Tangles';\r\n default:\r\n if (defaultException) {\r\n throw new Error(`Feature ${feature} does not exist.`);\r\n }\r\n return 'None';\r\n }\r\n};\r\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"Gray50\":\"#fafafa\",\"Gray100\":\"#f2f4f5\",\"Gray200\":\"#ebeff2\",\"Gray300\":\"#dae0e6\",\"Gray400\":\"#bec5cc\",\"Gray500\":\"#a1aab3\",\"Gray600\":\"#8a9299\",\"Gray700\":\"#737980\",\"Gray800\":\"#5c6166\",\"Gray900\":\"#45494d\",\"Navy50\":\"#bde3fc\",\"Navy100\":\"#7ec9fc\",\"Navy200\":\"#3faffc\",\"Navy300\":\"#0095fc\",\"Navy400\":\"#0086e3\",\"Navy500\":\"#0077c9\",\"Navy600\":\"#0068b0\",\"Navy700\":\"#005996\",\"Navy800\":\"#004a7d\",\"Navy900\":\"#002b49\",\"Blue50\":\"#bbeafa\",\"Blue100\":\"#7ddafa\",\"Blue200\":\"#3ecafa\",\"Blue300\":\"#00bbfa\",\"Blue400\":\"#00a8e1\",\"Blue500\":\"#0095c7\",\"Blue600\":\"#0081ad\",\"Blue700\":\"#006e94\",\"Blue800\":\"#005b7a\",\"Blue900\":\"#004861\",\"Red50\":\"#f2b5c1\",\"Red100\":\"#f2798f\",\"Red200\":\"#f23d5e\",\"Red300\":\"#f2002c\",\"Red400\":\"#d90027\",\"Red500\":\"#bf0023\",\"Red600\":\"#a6001e\",\"Red700\":\"#8c001a\",\"Red800\":\"#730015\",\"Red900\":\"#590010\",\"Yellow50\":\"#fcf8bd\",\"Yellow100\":\"#fcf37e\",\"Yellow200\":\"#fcef3f\",\"Yellow300\":\"#fceb00\",\"Yellow400\":\"#e3d400\",\"Yellow500\":\"#c9bc00\",\"White\":\"#fff\",\"Black\":\"#17181a\",\"Orange\":\"#ff8900\",\"Transparent\":\"rgba(255,255,255,0)\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"Gray50\":\"#fafafa\",\"Gray100\":\"#f2f4f5\",\"Gray200\":\"#ebeff2\",\"Gray300\":\"#dae0e6\",\"Gray400\":\"#bec5cc\",\"Gray500\":\"#a1aab3\",\"Gray600\":\"#8a9299\",\"Gray700\":\"#737980\",\"Gray800\":\"#5c6166\",\"Gray900\":\"#45494d\",\"Navy50\":\"#bde3fc\",\"Navy100\":\"#7ec9fc\",\"Navy200\":\"#3faffc\",\"Navy300\":\"#0095fc\",\"Navy400\":\"#0086e3\",\"Navy500\":\"#0077c9\",\"Navy600\":\"#0068b0\",\"Navy700\":\"#005996\",\"Navy800\":\"#004a7d\",\"Navy900\":\"#002b49\",\"Blue50\":\"#bbeafa\",\"Blue100\":\"#7ddafa\",\"Blue200\":\"#3ecafa\",\"Blue300\":\"#00bbfa\",\"Blue400\":\"#00a8e1\",\"Blue500\":\"#0095c7\",\"Blue600\":\"#0081ad\",\"Blue700\":\"#006e94\",\"Blue800\":\"#005b7a\",\"Blue900\":\"#004861\",\"Red50\":\"#f2b5c1\",\"Red100\":\"#f2798f\",\"Red200\":\"#f23d5e\",\"Red300\":\"#f2002c\",\"Red400\":\"#d90027\",\"Red500\":\"#bf0023\",\"Red600\":\"#a6001e\",\"Red700\":\"#8c001a\",\"Red800\":\"#730015\",\"Red900\":\"#590010\",\"Yellow50\":\"#fcf8bd\",\"Yellow100\":\"#fcf37e\",\"Yellow200\":\"#fcef3f\",\"Yellow300\":\"#fceb00\",\"Yellow400\":\"#e3d400\",\"Yellow500\":\"#c9bc00\",\"White\":\"#fff\",\"Black\":\"#17181a\",\"Orange\":\"#ff8900\",\"Transparent\":\"rgba(255,255,255,0)\"};","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/vue-cli-plugin-quasar/lib/loader.vue.auto-import-quasar.js?kebab!../../../node_modules/cache-loader/dist/cjs.js??ref--0-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-2!./SubscriptionViewPage.vue?vue&type=style&index=0&id=053df376&lang=scss\"","export const dayMillis = (1000 * 60 * 60 * 24);\r\n\r\nexport function daysMillis (days: number): number {\r\n return dayMillis * days;\r\n}\r\n\r\nexport function minusDays (date: Date | number, days: number): number {\r\n return (typeof date === 'number' ? date : date.getTime()) - daysMillis(days);\r\n}\r\n\r\nexport function plusDays (date: Date | number, days: number): number {\r\n return (typeof date === 'number' ? date : date.getTime()) + daysMillis(days);\r\n}\r\n\r\nexport function formatSeconds (seconds: number | null | undefined): string {\r\n if (seconds === null || seconds === undefined) {\r\n return '0h';\r\n }\r\n // Convert seconds to hours, minutes, and seconds in this format 00h 00m 00s\r\n const hours = Math.floor(seconds / 3600);\r\n const minutes = Math.floor((seconds - (hours * 3600)) / 60);\r\n const secondsRemainder = seconds - (hours * 3600) - (minutes * 60);\r\n\r\n let timeString = '';\r\n if (hours > 0) {\r\n timeString += hours + 'h ';\r\n }\r\n if (minutes > 0) {\r\n timeString += minutes + 'm ';\r\n }\r\n if (secondsRemainder > 0) {\r\n timeString += secondsRemainder.toFixed(0) + 's ';\r\n }\r\n return timeString;\r\n}\r\n","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/vue-cli-plugin-quasar/lib/loader.vue.auto-import-quasar.js?kebab!../../../node_modules/cache-loader/dist/cjs.js??ref--0-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-2!./SubscriptionListPage.vue?vue&type=style&index=0&id=700b620d&lang=scss\"","// extracted by mini-css-extract-plugin\nmodule.exports = {\"Gray50\":\"#fafafa\",\"Gray100\":\"#f2f4f5\",\"Gray200\":\"#ebeff2\",\"Gray300\":\"#dae0e6\",\"Gray400\":\"#bec5cc\",\"Gray500\":\"#a1aab3\",\"Gray600\":\"#8a9299\",\"Gray700\":\"#737980\",\"Gray800\":\"#5c6166\",\"Gray900\":\"#45494d\",\"Navy50\":\"#bde3fc\",\"Navy100\":\"#7ec9fc\",\"Navy200\":\"#3faffc\",\"Navy300\":\"#0095fc\",\"Navy400\":\"#0086e3\",\"Navy500\":\"#0077c9\",\"Navy600\":\"#0068b0\",\"Navy700\":\"#005996\",\"Navy800\":\"#004a7d\",\"Navy900\":\"#002b49\",\"Blue50\":\"#bbeafa\",\"Blue100\":\"#7ddafa\",\"Blue200\":\"#3ecafa\",\"Blue300\":\"#00bbfa\",\"Blue400\":\"#00a8e1\",\"Blue500\":\"#0095c7\",\"Blue600\":\"#0081ad\",\"Blue700\":\"#006e94\",\"Blue800\":\"#005b7a\",\"Blue900\":\"#004861\",\"Red50\":\"#f2b5c1\",\"Red100\":\"#f2798f\",\"Red200\":\"#f23d5e\",\"Red300\":\"#f2002c\",\"Red400\":\"#d90027\",\"Red500\":\"#bf0023\",\"Red600\":\"#a6001e\",\"Red700\":\"#8c001a\",\"Red800\":\"#730015\",\"Red900\":\"#590010\",\"Yellow50\":\"#fcf8bd\",\"Yellow100\":\"#fcf37e\",\"Yellow200\":\"#fcef3f\",\"Yellow300\":\"#fceb00\",\"Yellow400\":\"#e3d400\",\"Yellow500\":\"#c9bc00\",\"White\":\"#fff\",\"Black\":\"#17181a\",\"Orange\":\"#ff8900\",\"Transparent\":\"rgba(255,255,255,0)\"};","import { IUpdateLabelModel } from '@/store/contracts/subscriptions/subscription';\r\nimport { ValidationModel } from '@/validation';\r\nimport { stringRequiredRule } from '@/validation/common/rules';\r\n\r\nexport enum UpdateLabelFieldName {\r\n Label = 'label'\r\n}\r\n\r\nclass UpdateSubscriptionLabelValidationModel extends ValidationModel {\r\n constructor () {\r\n super();\r\n\r\n this.setField(UpdateLabelFieldName.Label, {\r\n getter: (model) => model?.label ?? null,\r\n rules: [\r\n stringRequiredRule('Label is required')\r\n ]\r\n });\r\n }\r\n\r\n get modelName (): string {\r\n return 'UpdateSubscriptionLabelValidationModel';\r\n }\r\n}\r\n\r\nexport default new UpdateSubscriptionLabelValidationModel();\r\n","\r\n\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\n\r\n","\r\nimport { computed, defineComponent, PropType, ref, watch } from 'vue';\r\nimport { useStore as useSubscriptionStore } from '@/store/subscriptions/subscription';\r\nimport validationModel, { UpdateActiveExpiresDateFieldName as FieldName } from '@/validation/updateActiveExpiresDateValidationModel';\r\nimport { useFieldsValidation } from '@/components/utils/fieldValidation';\r\nimport DatePicker from '@/components/date/DatePicker.vue';\r\nimport { IUpdateActiveExpiresDateModel } from '@/store/contracts/subscriptions/subscription';\r\nimport { mapReadonly } from '@/store/subscriptions/mapping/subscriptionListingModel';\r\nimport { ISubscriptionService } from '@/store/contracts/subscriptions/subscriptions';\r\nimport { toServer } from '@/store/subscriptions/mapping/subscriptionService';\r\n\r\nexport default defineComponent({\r\n props: {\r\n modelValue: {\r\n type: Boolean,\r\n required: true\r\n },\r\n activeDate: {\r\n type: Object as PropType,\r\n required: true\r\n },\r\n expiresDate: {\r\n type: Object as PropType,\r\n required: true\r\n }\r\n },\r\n components: {\r\n DatePicker\r\n },\r\n emits: ['update:modelValue'],\r\n setup (props, { emit }) {\r\n const subscriptionStore = useSubscriptionStore();\r\n\r\n const isOpen = computed({\r\n get: () => props.modelValue,\r\n set: (v) => emit('update:modelValue', v)\r\n });\r\n\r\n const activeDateRef = ref(props.activeDate);\r\n const expiresDateRef = ref(props.expiresDate);\r\n const model = computed(() => {\r\n return {\r\n activeDate: activeDateRef.value,\r\n expiresDate: expiresDateRef.value\r\n };\r\n });\r\n\r\n const updateContractDates = ref(true);\r\n\r\n const { validationStore, validationRefs } = useFieldsValidation(\r\n validationModel,\r\n ref(true),\r\n [FieldName.ActiveDate, FieldName.ExpiresDate]);\r\n\r\n function resetState () {\r\n activeDateRef.value = props.activeDate;\r\n expiresDateRef.value = props.expiresDate;\r\n updateContractDates.value = true;\r\n isSaving.value = false;\r\n }\r\n\r\n watch(() => props.modelValue, resetState);\r\n\r\n const isSaving = ref(false);\r\n async function save () {\r\n isSaving.value = true;\r\n const valid = await validationStore.doValidation({\r\n model: validationModel,\r\n value: model.value\r\n });\r\n if (valid) {\r\n await subscriptionStore.updateActiveExpiresDate(model.value);\r\n\r\n if (updateContractDates.value) {\r\n let services: ISubscriptionService[] | undefined = subscriptionStore.state.subscription?.services.map(mapReadonly);\r\n services = services?.map(s => {\r\n s.contractStartDate = activeDateRef.value;\r\n s.contractEndDate = expiresDateRef.value;\r\n return s;\r\n });\r\n\r\n if (services && services.length > 0) {\r\n await subscriptionStore.updateServices({\r\n Services: services.map(toServer)\r\n });\r\n }\r\n }\r\n\r\n isOpen.value = false;\r\n }\r\n isSaving.value = false;\r\n }\r\n\r\n async function cancel () {\r\n validationStore.clear(validationModel);\r\n isOpen.value = false;\r\n }\r\n\r\n function activeDateChanged (newDate: Date | null) {\r\n activeDateRef.value = newDate;\r\n }\r\n\r\n function expiresDateChanged (newDate: Date | null) {\r\n expiresDateRef.value = newDate;\r\n }\r\n\r\n const dateOffsetLabel = 'Set 1 year from Activation Date';\r\n\r\n return {\r\n isOpen,\r\n validationRefs,\r\n FieldName,\r\n isSaving,\r\n save,\r\n cancel,\r\n activeDateChanged,\r\n expiresDateChanged,\r\n updateContractDates,\r\n dateOffsetLabel,\r\n activeDateRef\r\n };\r\n }\r\n});\r\n","import { render } from \"./EditActiveExpiresDatesDialog.vue?vue&type=template&id=3429c4f9\"\nimport script from \"./EditActiveExpiresDatesDialog.vue?vue&type=script&lang=ts\"\nexport * from \"./EditActiveExpiresDatesDialog.vue?vue&type=script&lang=ts\"\n\nimport \"./EditActiveExpiresDatesDialog.vue?vue&type=style&index=0&id=3429c4f9&lang=scss\"\nscript.render = render\n\nexport default script\nimport QDialog from 'quasar/src/components/dialog/QDialog.js';\nimport QCard from 'quasar/src/components/card/QCard.js';\nimport QCardSection from 'quasar/src/components/card/QCardSection.js';\nimport QCheckbox from 'quasar/src/components/checkbox/QCheckbox.js';\nimport QBtn from 'quasar/src/components/btn/QBtn.js';\nimport qInstall from \"../../../node_modules/vue-cli-plugin-quasar/lib/runtime.auto-import.js\";\nqInstall(script, 'components', {QDialog,QCard,QCardSection,QCheckbox,QBtn});\n","\r\nimport { QTableColumn } from '@/components/utils/qTable';\r\nimport { SubscriptionRoutes } from '@/router/routes/subscriptions';\r\nimport { ISubscriptionListingModel, ISubscriptionService } from '@/store/contracts/subscriptions/subscriptions';\r\nimport { SubscriptionServiceType, getServiceName } from '@/store/contracts/subscriptions/subscriptionServiceType';\r\nimport { computed, defineComponent, ref } from 'vue';\r\nimport { useRouter } from 'vue-router';\r\nimport { VisionFeaturesFlags, getVisionFeatureName } from '@/store/contracts/subscriptions/visionFeaturesFlag';\r\nimport { ProfileFeaturesFlags, getProfileFeatureName } from '@/store/contracts/subscriptions/profileFeaturesFlag';\r\nimport { getFlagValues } from '@/utils/hasFlag';\r\nimport copyToClipboard from 'quasar/src/utils/copy-to-clipboard.js';import useQuasar from 'quasar/src/composables/use-quasar.js';import QInput from 'quasar/src/components/input/QInput.js';;\r\nimport { provideStore as provideSubscriptionScore } from '@/store/subscriptions/subscription';\r\nimport AddServiceDialog from '@/components/subscriptions/AddServiceDialog.vue';\r\nimport EditFieldActions from '@/components/EditFieldActions.vue';\r\nimport { mapReadonly, toCreateModel } from '@/store/subscriptions/mapping/subscriptionListingModel';\r\nimport { toServer } from '@/store/subscriptions/mapping/subscriptionService';\r\nimport labelValidationModel, { UpdateLabelFieldName } from '@/validation/updateSubscriptionLabelValidationModel';\r\nimport { useStore as useValidationStore } from '@/store/validation';\r\nimport { useInlineEditable } from '@/components/utils/inlineEditable';\r\nimport { ApiTestRoutes } from '@/router/routes/apiTest';\r\nimport { useStore as useUploadStore } from '@/store/apiTest/upload';\r\nimport activeExpiresDateValidationModel, { UpdateActiveExpiresDateFieldName } from '@/validation/updateActiveExpiresDateValidationModel';\r\nimport { shortDateFormat } from '@/utils/dateUtil';\r\nimport EditActiveExpiresDatesDialog from '@/components/subscriptions/EditActiveExpiresDatesDialog.vue';\r\nimport { subscriptionServiceTypeGridDisplay } from '@/utils/units';\r\nimport { formatSeconds } from '@/utils/time';\r\n\r\nexport default defineComponent({\r\n components: {\r\n AddServiceDialog,\r\n EditFieldActions,\r\n EditActiveExpiresDatesDialog\r\n },\r\n props: {\r\n subscriptionId: {\r\n type: String,\r\n required: true\r\n }\r\n },\r\n async setup (props) {\r\n const noteInput = ref(null);\r\n const noteInputEl = computed(() => (noteInput.value?.$el ?? null) as HTMLElement | null);\r\n const noteInputInputEl = computed(() => noteInputEl.value?.querySelector('textarea') ?? null);\r\n\r\n const labelInput = ref(null);\r\n const labelInputEl = computed(() => (labelInput.value?.$el ?? null) as HTMLElement | null);\r\n const labelInputInputEl = computed(() => labelInputEl.value?.querySelector('input') ?? null);\r\n\r\n const subscriptionStore = provideSubscriptionScore();\r\n const validationStore = useValidationStore();\r\n const uploadStore = useUploadStore();\r\n const router = useRouter();\r\n const $q = useQuasar();\r\n\r\n await subscriptionStore.loadSubscription(props.subscriptionId);\r\n\r\n const subscription = computed(() => subscriptionStore.state.subscription);\r\n const subscriptionCreateModel = computed(() => toCreateModel(subscription.value as ISubscriptionListingModel));\r\n\r\n const activationDate = computed(() => subscription.value?.activeDate ?? null);\r\n const activationDateDisplay = computed(() => shortDateFormat(activationDate.value));\r\n const expirationDate = computed(() => subscription.value?.expiresDate ?? null);\r\n const expirationDateDisplay = computed(() => shortDateFormat(expirationDate.value));\r\n const customerName = computed(() => subscription.value?.customerName);\r\n const machineId = computed(() => subscription.value?.machineId);\r\n const subscriptionKey = computed(() => subscription.value?.subscriptionKey);\r\n const note = computed(() => subscription.value?.note ?? null);\r\n const label = computed(() => subscription.value?.label ?? null);\r\n const servicesStore = computed(() => subscription.value!.services.map(mapReadonly));\r\n const servicesUi = ref(null);\r\n const servicesDisplay = computed(() => servicesUi.value ?? servicesStore.value);\r\n\r\n const isEnabled = computed(() => subscriptionStore.isEnabled);\r\n const hasVisionService = computed(() => {\r\n return subscription.value?.services.some(service => service.serviceType === SubscriptionServiceType.Vision) ?? false;\r\n });\r\n\r\n const columns: QTableColumn[] = [\r\n {\r\n name: 'serviceName',\r\n label: 'Service',\r\n align: 'left',\r\n field: row => getServiceName(row.serviceType)\r\n },\r\n {\r\n name: 'contractStartDate',\r\n label: 'Contract Start Date',\r\n align: 'left',\r\n field: row => shortDateFormat(row.contractStartDate)\r\n },\r\n {\r\n name: 'contractEndDate',\r\n label: 'Contract End Date',\r\n align: 'left',\r\n field: row => shortDateFormat(row.contractEndDate)\r\n },\r\n {\r\n name: 'remainingContractUnits',\r\n label: 'Remaining Units',\r\n align: 'left',\r\n field: row => quotaDisplay(row.serviceType, row.remainingContractUnits)\r\n },\r\n {\r\n name: 'contractQuota',\r\n label: 'Contract Quota',\r\n align: 'left',\r\n field: row => quotaDisplay(row.serviceType, row.contractQuota)\r\n },\r\n {\r\n name: 'monthlyQuota',\r\n label: 'Monthly Quota',\r\n align: 'left',\r\n field: row => quotaDisplay(row.serviceType, row.monthlyQuota)\r\n },\r\n {\r\n name: 'dailyQuota',\r\n label: 'Daily Quota',\r\n align: 'left',\r\n field: row => quotaDisplay(row.serviceType, row.dailyQuota)\r\n },\r\n {\r\n name: 'features',\r\n label: 'Features',\r\n align: 'left',\r\n field: row => getFeatures(row.serviceType, row.featuresFlag)\r\n },\r\n {\r\n name: 'actions',\r\n label: '',\r\n align: 'right',\r\n field: row => row\r\n }\r\n ];\r\n\r\n function quotaDisplay (serviceType: SubscriptionServiceType, quota?: number) {\r\n switch (serviceType) {\r\n case SubscriptionServiceType.Transcription:\r\n return formatSeconds(quota);\r\n default:\r\n return quota?.toLocaleString('en-US');\r\n }\r\n }\r\n\r\n function getFeatures (serviceType: SubscriptionServiceType, featuresFlag: number) {\r\n if (featuresFlag === 0) {\r\n return 'None';\r\n }\r\n\r\n switch (serviceType) {\r\n case SubscriptionServiceType.Vision: {\r\n const features = getFlagValues(VisionFeaturesFlags, featuresFlag);\r\n const featureNames: string[] = features.map(f => getVisionFeatureName(f, false));\r\n featureNames.shift();\r\n return featureNames.join(', ');\r\n }\r\n case SubscriptionServiceType.Profile: {\r\n const features = getFlagValues(ProfileFeaturesFlags, featuresFlag);\r\n const featureNames: string[] = features.map(f => getProfileFeatureName(f, false));\r\n featureNames.shift();\r\n return featureNames.join(', ');\r\n }\r\n default:\r\n return '';\r\n }\r\n }\r\n\r\n const showSubscriptionKey = ref(false);\r\n const subscriptionKeyInputType = computed(() => showSubscriptionKey.value ? 'text' : 'password');\r\n const showSubscriptionKeyTooltip = computed(() => showSubscriptionKey.value ? 'Hide subscription key' : 'Show subscription key');\r\n const showSubscriptionKeyIcon = computed(() => showSubscriptionKey.value ? 'mdi-eye-off-outline' : 'mdi-eye-outline');\r\n\r\n function toggleShowSubscriptionKey () {\r\n showSubscriptionKey.value = !showSubscriptionKey.value;\r\n }\r\n\r\n async function copySubscriptionKeyToClipboard () {\r\n const text = subscription.value?.subscriptionKey ?? null;\r\n if (text !== null) {\r\n await copyToClipboard(text);\r\n\r\n $q.notify({\r\n type: 'positive',\r\n message: 'Subscription key copied to clipboard',\r\n timeout: 3000\r\n });\r\n }\r\n }\r\n\r\n async function confirmGenerateNewKey () {\r\n if (subscription.value !== null) {\r\n const confirmed = await new Promise((resolve) => {\r\n $q.dialog({\r\n title: 'Generate new key?',\r\n message: 'Are you sure you want to generate a new key for this subscription? This will cause any clients using the current key to be non-functional until they begin using the new key.',\r\n cancel: true,\r\n persistent: true\r\n }).onOk(() => resolve(true)).onCancel(() => resolve(false));\r\n });\r\n if (confirmed) {\r\n await subscriptionStore.generateNewKey();\r\n $q.notify({\r\n type: 'positive',\r\n message: 'New subscription key generated',\r\n timeout: 3000\r\n });\r\n }\r\n }\r\n }\r\n\r\n const isAddingService = ref(false);\r\n const editSubscriptionService = ref(null);\r\n const tableHasData = computed(() => servicesDisplay.value.length > 0);\r\n\r\n function addService (service: ISubscriptionService | null) {\r\n editSubscriptionService.value = service;\r\n isAddingService.value = true;\r\n }\r\n\r\n function finishAddingService (service: ISubscriptionService) {\r\n servicesUi.value = servicesStore.value;\r\n if (editSubscriptionService.value) {\r\n servicesUi.value[editSubscriptionService.value.index!] = service;\r\n } else {\r\n servicesUi.value.push(service);\r\n }\r\n updateServices();\r\n }\r\n\r\n function deleteService (service: ISubscriptionService) {\r\n $q.dialog({\r\n title: 'Delete Service Confirmation',\r\n message: 'Are you sure you want to delete this service subscription?',\r\n cancel: true,\r\n persistent: true\r\n }).onOk(() => {\r\n servicesUi.value = servicesStore.value;\r\n servicesUi.value.splice(servicesUi.value.indexOf(service), 1);\r\n updateServices();\r\n });\r\n }\r\n\r\n async function updateServices () {\r\n await subscriptionStore.updateServices({\r\n Services: servicesUi.value?.map(toServer) ?? []\r\n });\r\n\r\n // null out our ui updated services after a fresh load.\r\n servicesUi.value = null;\r\n }\r\n\r\n function viewTransactions () {\r\n router.push({ name: SubscriptionRoutes.transactions, params: { subscriptionId: props.subscriptionId } });\r\n }\r\n\r\n function confirmDisableSubscription () {\r\n $q.dialog({\r\n title: 'Disable Subscription Confirmation',\r\n message: 'Are you sure you want to disable this subscription?',\r\n cancel: true,\r\n persistent: true\r\n }).onOk(() => {\r\n subscriptionStore.disableSubscription();\r\n });\r\n }\r\n\r\n async function enableSubscription () {\r\n await subscriptionStore.enableSubscription();\r\n }\r\n\r\n const {\r\n compText: noteText\r\n , isEditing: isUpdatingNote\r\n , isRequestingUpdate: isRequestingNoteUpdate\r\n , doUpdate: doUpdateNote\r\n , stopEditing: stopUpdatingNote\r\n , startEditing: startUpdatingNote\r\n } = useInlineEditable(\r\n () => subscription.value?.note ?? null\r\n , note\r\n , noteInputInputEl\r\n , async (comp) => {\r\n await subscriptionStore.updateNote({\r\n note: comp.editText.value\r\n },\r\n {\r\n onSuccess: async () => stopUpdatingNote()\r\n });\r\n }\r\n );\r\n const isEditingDates = ref(false);\r\n function startEditingDates () {\r\n isEditingDates.value = true;\r\n }\r\n const activationDateIsError = computed(() => validationStore.fieldIsError(activeExpiresDateValidationModel.modelName, UpdateActiveExpiresDateFieldName.ActiveDate));\r\n const activationDateErrorMessage = computed(() => validationStore.fieldErrorMessage(activeExpiresDateValidationModel.modelName, UpdateActiveExpiresDateFieldName.ActiveDate));\r\n const expirationDateIsError = computed(() => validationStore.fieldIsError(activeExpiresDateValidationModel.modelName, UpdateActiveExpiresDateFieldName.ExpiresDate));\r\n const expirationDateErrorMessage = computed(() => validationStore.fieldErrorMessage(activeExpiresDateValidationModel.modelName, UpdateActiveExpiresDateFieldName.ExpiresDate));\r\n\r\n const {\r\n compText: labelText\r\n , isEditing: isUpdatingLabel\r\n , isRequestingUpdate: isRequestingLabelUpdate\r\n , doUpdate: doUpdateLabel\r\n , stopEditing: stopUpdatingLabel\r\n , startEditing: startUpdatingLabel\r\n } = useInlineEditable(\r\n () => subscription.value?.label ?? null\r\n , label\r\n , labelInputInputEl\r\n , async (comp) => {\r\n await subscriptionStore.updateLabel({\r\n label: comp.editText.value\r\n }, {\r\n onSuccess: async () => await comp.stopEditing()\r\n });\r\n }\r\n , async () => {\r\n validationStore.clear(labelValidationModel);\r\n }, async () => {\r\n validationStore.clear(labelValidationModel);\r\n });\r\n const isLabelInError = computed(() => validationStore.fieldIsError(labelValidationModel.modelName, UpdateLabelFieldName.Label));\r\n const labelErrorMessage = computed(() => validationStore.fieldErrorMessage(labelValidationModel.modelName, UpdateLabelFieldName.Label));\r\n\r\n function goToImageAnalysis () {\r\n uploadStore.setSubscriptionKey(subscriptionKey.value ?? null);\r\n router.push({ name: ApiTestRoutes.imageAnalysis });\r\n }\r\n\r\n function subscriptionListView () {\r\n router.push({ name: SubscriptionRoutes.list });\r\n }\r\n\r\n return {\r\n screen: $q.screen,\r\n subscription,\r\n customerName,\r\n machineId,\r\n label,\r\n note,\r\n subscriptionKey,\r\n activationDate,\r\n activationDateDisplay,\r\n expirationDate,\r\n expirationDateDisplay,\r\n columns,\r\n subscriptionListView,\r\n getServiceName,\r\n subscriptionKeyInputType,\r\n toggleShowSubscriptionKey,\r\n copySubscriptionKeyToClipboard,\r\n showSubscriptionKeyTooltip,\r\n showSubscriptionKeyIcon,\r\n confirmGenerateNewKey,\r\n viewTransactions,\r\n isEnabled,\r\n confirmDisableSubscription,\r\n enableSubscription,\r\n noteText,\r\n isUpdatingNote,\r\n isRequestingNoteUpdate,\r\n noteInput,\r\n startUpdatingNote,\r\n stopUpdatingNote,\r\n doUpdateNote,\r\n subscriptionCreateModel,\r\n toCreateModel,\r\n servicesDisplay,\r\n isAddingService,\r\n addService,\r\n finishAddingService,\r\n deleteService,\r\n tableHasData,\r\n labelText,\r\n labelInput,\r\n startUpdatingLabel,\r\n stopUpdatingLabel,\r\n doUpdateLabel,\r\n isUpdatingLabel,\r\n isRequestingLabelUpdate,\r\n isLabelInError,\r\n labelErrorMessage,\r\n goToImageAnalysis,\r\n startEditingDates,\r\n isEditingDates,\r\n activationDateIsError,\r\n activationDateErrorMessage,\r\n expirationDateIsError,\r\n expirationDateErrorMessage,\r\n editSubscriptionService,\r\n hasVisionService,\r\n shortDateFormat,\r\n getFeatures,\r\n quotaDisplay,\r\n subscriptionServiceTypeGridDisplay,\r\n formatSeconds\r\n };\r\n }\r\n});\r\n","import { render } from \"./SubscriptionViewPage.vue?vue&type=template&id=053df376\"\nimport script from \"./SubscriptionViewPage.vue?vue&type=script&lang=ts\"\nexport * from \"./SubscriptionViewPage.vue?vue&type=script&lang=ts\"\n\nimport \"./SubscriptionViewPage.vue?vue&type=style&index=0&id=053df376&lang=scss\"\nscript.render = render\n\nexport default script\nimport QBtn from 'quasar/src/components/btn/QBtn.js';\nimport QTooltip from 'quasar/src/components/tooltip/QTooltip.js';\nimport QInput from 'quasar/src/components/input/QInput.js';\nimport QTable from 'quasar/src/components/table/QTable.js';\nimport QTh from 'quasar/src/components/table/QTh.js';\nimport QTr from 'quasar/src/components/table/QTr.js';\nimport QTd from 'quasar/src/components/table/QTd.js';\nimport qInstall from \"../../../node_modules/vue-cli-plugin-quasar/lib/runtime.auto-import.js\";\nqInstall(script, 'components', {QBtn,QTooltip,QInput,QTable,QTh,QTr,QTd});\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"Gray50\":\"#fafafa\",\"Gray100\":\"#f2f4f5\",\"Gray200\":\"#ebeff2\",\"Gray300\":\"#dae0e6\",\"Gray400\":\"#bec5cc\",\"Gray500\":\"#a1aab3\",\"Gray600\":\"#8a9299\",\"Gray700\":\"#737980\",\"Gray800\":\"#5c6166\",\"Gray900\":\"#45494d\",\"Navy50\":\"#bde3fc\",\"Navy100\":\"#7ec9fc\",\"Navy200\":\"#3faffc\",\"Navy300\":\"#0095fc\",\"Navy400\":\"#0086e3\",\"Navy500\":\"#0077c9\",\"Navy600\":\"#0068b0\",\"Navy700\":\"#005996\",\"Navy800\":\"#004a7d\",\"Navy900\":\"#002b49\",\"Blue50\":\"#bbeafa\",\"Blue100\":\"#7ddafa\",\"Blue200\":\"#3ecafa\",\"Blue300\":\"#00bbfa\",\"Blue400\":\"#00a8e1\",\"Blue500\":\"#0095c7\",\"Blue600\":\"#0081ad\",\"Blue700\":\"#006e94\",\"Blue800\":\"#005b7a\",\"Blue900\":\"#004861\",\"Red50\":\"#f2b5c1\",\"Red100\":\"#f2798f\",\"Red200\":\"#f23d5e\",\"Red300\":\"#f2002c\",\"Red400\":\"#d90027\",\"Red500\":\"#bf0023\",\"Red600\":\"#a6001e\",\"Red700\":\"#8c001a\",\"Red800\":\"#730015\",\"Red900\":\"#590010\",\"Yellow50\":\"#fcf8bd\",\"Yellow100\":\"#fcf37e\",\"Yellow200\":\"#fcef3f\",\"Yellow300\":\"#fceb00\",\"Yellow400\":\"#e3d400\",\"Yellow500\":\"#c9bc00\",\"White\":\"#fff\",\"Black\":\"#17181a\",\"Orange\":\"#ff8900\",\"Transparent\":\"rgba(255,255,255,0)\"};","export enum SubscriptionServiceType {\r\n None = 'None',\r\n Vision = 'Vision',\r\n Translation = 'Translation',\r\n Transcription = 'Transcription',\r\n Profile = 'Profile'\r\n}\r\n\r\nexport const SubscriptionServiceTypes = [SubscriptionServiceType.None, SubscriptionServiceType.Vision, SubscriptionServiceType.Translation, SubscriptionServiceType.Transcription, SubscriptionServiceType.Profile];\r\n\r\nexport const getServiceName = (serviceType: SubscriptionServiceType): string => {\r\n switch (serviceType) {\r\n case SubscriptionServiceType.None:\r\n return 'Not Selected';\r\n case SubscriptionServiceType.Vision:\r\n return 'Vision';\r\n case SubscriptionServiceType.Translation:\r\n return 'Translation';\r\n case SubscriptionServiceType.Transcription:\r\n return 'Transcription';\r\n case SubscriptionServiceType.Profile:\r\n return 'Profile';\r\n default:\r\n throw new Error(`Service type ${serviceType} does not exist.`);\r\n }\r\n};\r\n","import { h, defineComponent, computed } from 'vue'\n\nimport { hSlot } from '../../utils/private/render.js'\n\nexport default defineComponent({\n name: 'QTr',\n\n props: {\n props: Object,\n noHover: Boolean\n },\n\n setup (props, { slots }) {\n const classes = computed(() =>\n 'q-tr'\n + (props.props === void 0 || props.props.header === true ? '' : ' ' + props.props.__trClass)\n + (props.noHover === true ? ' q-tr--no-hover' : '')\n )\n\n return () => h('tr', { class: classes.value }, hSlot(slots.default))\n }\n})\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"Gray50\":\"#fafafa\",\"Gray100\":\"#f2f4f5\",\"Gray200\":\"#ebeff2\",\"Gray300\":\"#dae0e6\",\"Gray400\":\"#bec5cc\",\"Gray500\":\"#a1aab3\",\"Gray600\":\"#8a9299\",\"Gray700\":\"#737980\",\"Gray800\":\"#5c6166\",\"Gray900\":\"#45494d\",\"Navy50\":\"#bde3fc\",\"Navy100\":\"#7ec9fc\",\"Navy200\":\"#3faffc\",\"Navy300\":\"#0095fc\",\"Navy400\":\"#0086e3\",\"Navy500\":\"#0077c9\",\"Navy600\":\"#0068b0\",\"Navy700\":\"#005996\",\"Navy800\":\"#004a7d\",\"Navy900\":\"#002b49\",\"Blue50\":\"#bbeafa\",\"Blue100\":\"#7ddafa\",\"Blue200\":\"#3ecafa\",\"Blue300\":\"#00bbfa\",\"Blue400\":\"#00a8e1\",\"Blue500\":\"#0095c7\",\"Blue600\":\"#0081ad\",\"Blue700\":\"#006e94\",\"Blue800\":\"#005b7a\",\"Blue900\":\"#004861\",\"Red50\":\"#f2b5c1\",\"Red100\":\"#f2798f\",\"Red200\":\"#f23d5e\",\"Red300\":\"#f2002c\",\"Red400\":\"#d90027\",\"Red500\":\"#bf0023\",\"Red600\":\"#a6001e\",\"Red700\":\"#8c001a\",\"Red800\":\"#730015\",\"Red900\":\"#590010\",\"Yellow50\":\"#fcf8bd\",\"Yellow100\":\"#fcf37e\",\"Yellow200\":\"#fcef3f\",\"Yellow300\":\"#fceb00\",\"Yellow400\":\"#e3d400\",\"Yellow500\":\"#c9bc00\",\"White\":\"#fff\",\"Black\":\"#17181a\",\"Orange\":\"#ff8900\",\"Transparent\":\"rgba(255,255,255,0)\"};","import { ISubscriptionCreateModel } from '@/store/contracts/subscriptions/create';\r\nimport { IUpdateActiveExpiresDateModel } from '@/store/contracts/subscriptions/subscription';\r\nimport { ISubscriptionListingModel, ISubscriptionService } from '@/store/contracts/subscriptions/subscriptions';\r\nimport { IServerSubscriptionService, toApp as serviceToApp } from '@/store/subscriptions/mapping/subscriptionService';\r\nimport { impl } from '@/utils/impl';\r\nimport { DeepReadonly } from 'vue';\r\n\r\nexport interface IRemainingContractUnits {\r\n Vision: number;\r\n Translation: number;\r\n Transcription: number;\r\n Profile: number;\r\n}\r\n\r\nexport interface IServerSubscriptionListingModel {\r\n Label: string;\r\n CustomerName: string;\r\n SubscriptionId: string;\r\n SubscriptionKey: string;\r\n MachineId: string;\r\n Services: IServerSubscriptionService[];\r\n ActiveDate: Date | null;\r\n ExpiresDate: Date | null;\r\n Note: string | null;\r\n}\r\n\r\nexport interface IServerSubscriptionListingResponse {\r\n Subscriptions: IServerSubscriptionListingModel[];\r\n}\r\n\r\nexport interface IServerSubscriptionResponse {\r\n Subscription: IServerSubscriptionListingModel;\r\n RemainingContractUnits: IRemainingContractUnits | null;\r\n}\r\n\r\nexport interface IServerUpdateDateModel {\r\n ActiveDate: Date | null;\r\n ExpiresDate: Date | null;\r\n}\r\n\r\nexport function toServerDate (model: IUpdateActiveExpiresDateModel): IServerUpdateDateModel {\r\n return impl({\r\n ActiveDate: model.activeDate,\r\n ExpiresDate: model.expiresDate\r\n });\r\n}\r\n\r\nexport function subscriptiontoApp (server: IServerSubscriptionResponse): ISubscriptionListingModel {\r\n return impl({\r\n label: server.Subscription.Label,\r\n customerName: server.Subscription.CustomerName,\r\n subscriptionId: server.Subscription.SubscriptionId,\r\n subscriptionKey: server.Subscription.SubscriptionKey,\r\n machineId: server.Subscription.MachineId,\r\n services: server.Subscription.Services.map((s, i) => serviceToApp(s, i, server.RemainingContractUnits)),\r\n activeDate: server.Subscription.ActiveDate === null ? null : new Date(server.Subscription.ActiveDate),\r\n expiresDate: server.Subscription.ExpiresDate === null ? null : new Date(server.Subscription.ExpiresDate),\r\n note: server.Subscription.Note\r\n });\r\n}\r\n\r\nexport function subscriptionListingToApp (server: IServerSubscriptionListingModel): ISubscriptionListingModel {\r\n return impl({\r\n label: server.Label,\r\n customerName: server.CustomerName,\r\n subscriptionId: server.SubscriptionId,\r\n subscriptionKey: server.SubscriptionKey,\r\n machineId: server.MachineId,\r\n services: server.Services.map((s, i) => serviceToApp(s, i, null)),\r\n activeDate: server.ActiveDate === null ? null : new Date(server.ActiveDate),\r\n expiresDate: server.ExpiresDate === null ? null : new Date(server.ExpiresDate),\r\n note: server.Note\r\n });\r\n}\r\n\r\nexport function mapReadonly (service: ISubscriptionService | DeepReadonly): ISubscriptionService {\r\n return impl({\r\n serviceType: service.serviceType,\r\n contractStartDate: service.contractStartDate,\r\n contractEndDate: service.contractEndDate,\r\n remainingContractUnits: service.remainingContractUnits,\r\n contractQuota: service.contractQuota,\r\n monthlyQuota: service.monthlyQuota,\r\n dailyQuota: service.dailyQuota,\r\n featuresFlag: service.featuresFlag,\r\n tanglesApiKey: service.tanglesApiKey,\r\n createModel: service.createModel as ISubscriptionCreateModel,\r\n index: service.index\r\n });\r\n}\r\n\r\nexport function toCreateModel (listing: ISubscriptionListingModel): ISubscriptionCreateModel {\r\n return impl({\r\n label: listing.label,\r\n machineId: listing.machineId || '',\r\n activeDate: listing.activeDate,\r\n expiresDate: listing.expiresDate,\r\n note: listing.note || '',\r\n services: listing.services.map(mapReadonly)\r\n });\r\n}\r\n","import { impl } from '@/utils/impl';\r\nimport { App, inject, provide, reactive, readonly } from 'vue';\r\nimport {\r\n ISubscriptionsState,\r\n TSetSubscriptions,\r\n TLoadSubscriptions,\r\n TEnableSubscription,\r\n TDisableSubscription,\r\n ISubscriptionsStore,\r\n TSetShowDisabled,\r\n TIsEnabled,\r\n TRefreshCachedSubscriptions\r\n} from '@/store/contracts/subscriptions/subscriptions';\r\nimport {\r\n chainHandlers,\r\n handleErrorStatus,\r\n handleErrorStatusResult,\r\n IStatusHandler,\r\n ResponseStatus\r\n} from '@/store/utils/apiResponseHandling';\r\nimport { sendRequest } from '@/store/utils/axiosUtils';\r\nimport { Settings } from '@/settings';\r\nimport {\r\n IServerSubscriptionListingResponse,\r\n subscriptionListingToApp\r\n} from '@/store/subscriptions/mapping/subscriptionListingModel';\r\nimport { setEnd, setStart } from '@/utils/dateUtil';\r\nimport { SubscriptionUpdateType } from '../contracts/subscriptions/subscriptionUpdateType';\r\n\r\nconst SubscriptionsStoreKey = Symbol('SubscriptionsStore');\r\n\r\nconst createState = () => reactive(impl({\r\n subscriptions: null,\r\n showDisabled: false\r\n}));\r\n\r\nfunction setSubscriptions (state: ISubscriptionsState): TSetSubscriptions {\r\n return (subscriptions) => {\r\n state.subscriptions = subscriptions;\r\n };\r\n}\r\n\r\nfunction loadSubscriptions (state: ISubscriptionsState): TLoadSubscriptions {\r\n return async (handler?: Partial>) => {\r\n await handleErrorStatusResult(await sendRequest(\r\n `${Settings.adminApiBaseUrl}/admin/v1/subscription/loadGrid`,\r\n 'get'\r\n ), chainHandlers({\r\n onSuccess: async (s) => {\r\n setSubscriptions(state)(s.Subscriptions.map(subscriptionListingToApp));\r\n }\r\n }, handler));\r\n };\r\n}\r\n\r\nfunction setShowDisabled (state: ISubscriptionsState): TSetShowDisabled {\r\n return (showDisabled) => {\r\n state.showDisabled = showDisabled;\r\n };\r\n}\r\n\r\nconst isEnabled: TIsEnabled = (subscription) => {\r\n const activeDate = subscription.activeDate;\r\n const expiresDate = subscription.expiresDate;\r\n\r\n const now = new Date();\r\n return (activeDate === null || activeDate <= now) && (expiresDate === null || now <= expiresDate);\r\n};\r\n\r\nfunction disableSubscription (state: ISubscriptionsState): TDisableSubscription {\r\n return async (subscriptionId, handler) => {\r\n const expires = new Date();\r\n expires.setUTCDate(expires.getUTCDate() - 1);\r\n setEnd(expires);\r\n const active = state.subscriptions?.find(s => s.subscriptionId === subscriptionId)?.activeDate ?? expires;\r\n setStart(active);\r\n\r\n await handleErrorStatus(\r\n await sendRequest(\r\n `${Settings.adminApiBaseUrl}/admin/v1/subscription/update`,\r\n 'post',\r\n {\r\n $type: SubscriptionUpdateType.UpdateSubscriptionStatus,\r\n SubscriptionId: subscriptionId,\r\n ActiveDate: active,\r\n ExpiresDate: expires\r\n }\r\n ), chainHandlers({\r\n onSuccess: async () => loadSubscriptions(state)()\r\n }, handler));\r\n };\r\n}\r\n\r\nfunction enableSubscription (state: ISubscriptionsState): TEnableSubscription {\r\n return async (subscriptionId, handler) => {\r\n const currentDate = new Date();\r\n const active = currentDate;\r\n const expires = new Date(currentDate.getTime());\r\n // Setting expires date a year out since it is required on backend.\r\n expires.setFullYear(currentDate.getFullYear() + 1);\r\n setEnd(expires);\r\n setStart(active);\r\n await handleErrorStatus(\r\n await sendRequest(\r\n `${Settings.adminApiBaseUrl}/admin/v1/subscription/update`,\r\n 'post',\r\n {\r\n $type: SubscriptionUpdateType.UpdateSubscriptionStatus,\r\n SubscriptionId: subscriptionId,\r\n ActiveDate: active,\r\n ExpiresDate: expires\r\n }\r\n ), chainHandlers({\r\n onSuccess: async () => loadSubscriptions(state)()\r\n }, handler));\r\n };\r\n}\r\n\r\nfunction refreshCachedSubscriptions (): TRefreshCachedSubscriptions {\r\n return async (handler) => {\r\n let success = false;\r\n await handleErrorStatusResult(await sendRequest(\r\n `${Settings.adminApiBaseUrl}/admin/v1/subscription/refreshCache`,\r\n 'post'\r\n ), chainHandlers({\r\n onSuccess: async () => { success = true; },\r\n onError: async () => { success = false; }\r\n }, handler));\r\n return success;\r\n };\r\n}\r\n\r\nconst storeState = createState();\r\n\r\nconst createForState = (state: ISubscriptionsState) => impl({\r\n state: readonly(state),\r\n setSubscriptions: setSubscriptions(state),\r\n loadSubscriptions: loadSubscriptions(state),\r\n setShowDisabled: setShowDisabled(state),\r\n isEnabled,\r\n enableSubscription: enableSubscription(state),\r\n disableSubscription: disableSubscription(state),\r\n refreshCachedSubscriptions: refreshCachedSubscriptions()\r\n});\r\n\r\nexport const store: ISubscriptionsStore = createForState(storeState);\r\n\r\nexport function provideStore (app?: App): void {\r\n if (app !== undefined) {\r\n app.provide(SubscriptionsStoreKey, storeState);\r\n } else {\r\n provide(SubscriptionsStoreKey, storeState);\r\n }\r\n}\r\n\r\nexport function useStore (): ISubscriptionsStore {\r\n const state = inject(SubscriptionsStoreKey);\r\n if (state === undefined) {\r\n throw new Error('Using SubscriptionsStore before providing it!');\r\n }\r\n return createForState(state);\r\n}\r\n","import { TValidationRule } from '@/validation/common/rules';\r\nimport { shortDateFormat } from '@/utils/dateUtil';\r\n\r\nexport function isAfter (getter: (model: T | null) => Date | null, errorMessage?: string): TValidationRule {\r\n return async (context) => {\r\n const value = context.value;\r\n if (value === null) {\r\n return true;\r\n }\r\n\r\n const compareDate = getter(context.model);\r\n if (compareDate === null) {\r\n return true;\r\n }\r\n\r\n return value > compareDate || (errorMessage ?? `Must be after ${shortDateFormat(compareDate)}`);\r\n };\r\n}\r\n\r\nexport function isBefore (getter: (model: T | null) => Date | null, errorMessage?: string): TValidationRule {\r\n return async (context) => {\r\n const value = context.value;\r\n if (value === null) {\r\n return true;\r\n }\r\n\r\n const compareDate = getter(context.model);\r\n if (compareDate === null) {\r\n return true;\r\n }\r\n\r\n return value < compareDate || (errorMessage ?? `Must be before ${shortDateFormat(compareDate)}`);\r\n };\r\n}\r\n","import { h, defineComponent, computed, getCurrentInstance } from 'vue'\n\nimport { hSlot } from '../../utils/private/render.js'\n\nexport default defineComponent({\n name: 'QTd',\n\n props: {\n props: Object,\n autoWidth: Boolean,\n noHover: Boolean\n },\n\n setup (props, { slots }) {\n const vm = getCurrentInstance()\n const classes = computed(() =>\n 'q-td' + (props.autoWidth === true ? ' q-table--col-auto-width' : '')\n + (props.noHover === true ? ' q-td--no-hover' : '')\n )\n\n return () => {\n if (props.props === void 0) {\n return h('td', { class: classes.value }, hSlot(slots.default))\n }\n\n const name = vm.vnode.key\n\n const col = props.props.colsMap !== void 0 && name\n ? props.props.colsMap[ name ]\n : props.props.col\n\n if (col === void 0) { return }\n\n return h('td', {\n class: classes.value + ' ' + col.__tdClass,\n style: col.style\n }, hSlot(slots.default))\n }\n }\n})\n","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/vue-cli-plugin-quasar/lib/loader.vue.auto-import-quasar.js?kebab!../../../node_modules/cache-loader/dist/cjs.js??ref--0-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-2!./AddServiceDialog.vue?vue&type=style&index=0&id=71ad42ae&lang=scss\"","\r\n\r\n\r\n\r\n\r\n","\r\n\r\n\r\n","import { SubscriptionServiceType } from '@/store/contracts/subscriptions/subscriptionServiceType';\r\nimport { IStatusHandler } from '@/store/utils/apiResponseHandling';\r\nimport { DeepReadonly } from 'vue';\r\n\r\nexport interface IServerSubscriptionUsage {\r\n ServiceType: SubscriptionServiceType;\r\n RecordedDay: Date | string;\r\n TransactionCount: number;\r\n}\r\n\r\nexport interface ISubscriptionUsage {\r\n serviceType: SubscriptionServiceType;\r\n recordedDay: Date;\r\n transactionCount: number;\r\n}\r\n\r\nexport enum AggregateUsagePeriodType {\r\n None = 'None',\r\n Daily = 'Daily',\r\n Monthly = 'Monthly'\r\n}\r\n\r\nexport interface IServerSubscriptionUsageRequest {\r\n From: Date;\r\n To: Date;\r\n ServiceType: SubscriptionServiceType;\r\n AggregateType: AggregateUsagePeriodType;\r\n}\r\n\r\nexport interface IServerSubscriptionUsageResponse {\r\n Usages: IServerSubscriptionUsage[];\r\n}\r\n\r\nexport interface ITransactionsFilterModel {\r\n serviceType: SubscriptionServiceType | null;\r\n from: Date | null;\r\n to: Date | null;\r\n}\r\n\r\nexport interface ITransactionsState {\r\n subscriptionId: string | null;\r\n dailyUsages: ISubscriptionUsage[];\r\n monthlyUsages: ISubscriptionUsage[];\r\n totalUsages: number;\r\n filterModel: ITransactionsFilterModel;\r\n}\r\n\r\nexport type TSetSubscriptionId = (subscriptionId) => void;\r\nexport type TSetUsages = (dailyUsages: ISubscriptionUsage[], monthlyUsages: ISubscriptionUsage[], totalUsages: number) => void;\r\nexport type TSetServiceType = (serviceType: SubscriptionServiceType | null) => void;\r\nexport type TSetFrom = (from: Date | null) => void;\r\nexport type TSetTo = (to: Date | null) => void;\r\nexport type TLoadUsages = (handler?: Partial>) => Promise;\r\n\r\nexport interface ITransactionsStore {\r\n state: DeepReadonly;\r\n setSubscriptionId: TSetSubscriptionId;\r\n setUsages: TSetUsages;\r\n setServiceType: TSetServiceType;\r\n setFrom: TSetFrom;\r\n setTo: TSetTo;\r\n loadUsages: TLoadUsages;\r\n}\r\n","\r\nimport { computed, DeepReadonly, defineComponent, PropType, ref, watch } from 'vue';\r\nimport { SubscriptionServiceType } from '@/store/contracts/subscriptions/subscriptionServiceType';\r\nimport ApexCharts, { ApexOptions } from 'apexcharts';\r\nimport useQuasar from 'quasar/src/composables/use-quasar.js';;\r\nimport { useStore as useSubscriptionStore } from '@/store/subscriptions/subscription';\r\nimport { ISubscriptionUsage, AggregateUsagePeriodType } from '@/store/contracts/subscriptions/transactions';\r\nimport { plusDays } from '@/utils/time';\r\nimport { possiblyNull } from '@/utils/nullable';\r\n\r\nexport default defineComponent({\r\n props: {\r\n usages: {\r\n type: Array as () => (DeepReadonly | ISubscriptionUsage)[],\r\n required: true\r\n },\r\n aggregateType: {\r\n type: String as PropType,\r\n required: true\r\n },\r\n chartTitle: {\r\n type: String,\r\n required: true\r\n },\r\n serviceTypeDisplay: {\r\n type: String,\r\n required: true\r\n }\r\n },\r\n setup: (props) => {\r\n const $q = useQuasar();\r\n const subscriptionStore = useSubscriptionStore();\r\n const perService = computed(() => [...props.usages].groupBy(u => u.serviceType));\r\n const usageSeries = computed(() => Object.keys(perService.value).map(s => {\r\n const usages = perService.value[s];\r\n return {\r\n name: SubscriptionServiceType[s],\r\n type: 'area',\r\n data: usages.map(u => ({\r\n x: u.recordedDay.getTime(),\r\n y: u.transactionCount\r\n }))\r\n };\r\n }));\r\n const quotaSeries = computed(() => Object.keys(perService.value).map(s => {\r\n const usages = perService.value[s];\r\n const service = subscriptionStore.state.subscription?.services?.find(svc => svc.serviceType === s);\r\n const quota = props.aggregateType === AggregateUsagePeriodType.Daily ? service?.dailyQuota ?? 0 : service?.monthlyQuota ?? 0;\r\n return {\r\n name: `${SubscriptionServiceType[s]} Quota`,\r\n type: 'line',\r\n data: usages.map(q => ({\r\n x: q.recordedDay.getTime(),\r\n y: quota\r\n }))\r\n };\r\n }));\r\n\r\n const minTimeDays = computed(() => props.aggregateType === AggregateUsagePeriodType.Daily ? 1 : 30);\r\n\r\n const minTime = computed(() => plusDays(props.usages.map(u => u.recordedDay.getTime()).min(new Date().getTime()), -minTimeDays.value));\r\n\r\n const maxTimeDays = computed(() => props.aggregateType === AggregateUsagePeriodType.Daily ? 30 : 120);\r\n\r\n const maxTime = computed(() => plusDays(props.usages.map(u => u.recordedDay.getTime()).max(new Date().getTime()), maxTimeDays.value));\r\n\r\n const series = computed(() => [...usageSeries.value, ...quotaSeries.value]);\r\n\r\n const optionsDashArray = computed(() => [...usageSeries.value.map(() => 0), ...quotaSeries.value.map(() => 8)]);\r\n const options = computed(() => ({\r\n chart: {\r\n id: 'transaction-chart'\r\n },\r\n xaxis: {\r\n type: 'datetime',\r\n min: minTime.value,\r\n max: maxTime.value,\r\n tickPlacement: 'on',\r\n labels: {\r\n format: props.aggregateType === AggregateUsagePeriodType.Daily ? 'yyyy-MM-dd' : 'yyyy-MM'\r\n }\r\n },\r\n legend: {\r\n show: true,\r\n showForSingleSeries: true\r\n },\r\n noData: {\r\n text: 'No transactions to display'\r\n },\r\n stroke: {\r\n dashArray: optionsDashArray.value\r\n },\r\n dataLabels: {\r\n enabled: true\r\n },\r\n title: {\r\n text: props.chartTitle\r\n },\r\n tooltip: {\r\n x: {\r\n format: props.aggregateType === AggregateUsagePeriodType.Daily ? 'yyyy-MM-dd' : 'yyyy-MM'\r\n },\r\n y: {\r\n formatter: (val: number) => val + ' ' + props.serviceTypeDisplay\r\n }\r\n }\r\n }));\r\n\r\n const chartWidth = computed(() => $q.screen.sm || $q.screen.xs ? '90%' : 750);\r\n\r\n const chart = ref(null);\r\n function onChartMounted (chartContext: ApexCharts) {\r\n // Have quota series toggled off by default.\r\n quotaSeries.value.forEach(qs => chartContext.toggleSeries(qs.name));\r\n // Make sure the chart zooms to the data correctly.\r\n // It doesn't like to do that, it seems.\r\n chartContext.zoomX(minTime.value, maxTime.value);\r\n\r\n chart.value = chartContext;\r\n }\r\n\r\n watch(usageSeries, () => {\r\n setTimeout(() => possiblyNull(chart.value, onChartMounted), 250);\r\n });\r\n\r\n return {\r\n options,\r\n chartWidth,\r\n series,\r\n onChartMounted\r\n };\r\n }\r\n});\r\n","import { render } from \"./TransactionChart.vue?vue&type=template&id=1519755f\"\nimport script from \"./TransactionChart.vue?vue&type=script&lang=ts\"\nexport * from \"./TransactionChart.vue?vue&type=script&lang=ts\"\nscript.render = render\n\nexport default script","import { IServerSubscriptionUsage, ISubscriptionUsage } from '@/store/contracts/subscriptions/transactions';\r\n\r\nexport function toApp (serverModel: IServerSubscriptionUsage): ISubscriptionUsage {\r\n return {\r\n serviceType: serverModel.ServiceType,\r\n recordedDay: new Date(serverModel.RecordedDay),\r\n transactionCount: serverModel.TransactionCount\r\n };\r\n}\r\n","import { ITransactionsFilterModel } from '@/store/contracts/subscriptions/transactions';\r\nimport { ValidationModel } from '@/validation';\r\nimport { isAfter, isBefore } from '@/validation/common/dateRules';\r\n\r\nexport enum TransactionsFilterFieldName {\r\n ServiceType = 'serviceType',\r\n From = 'from',\r\n To = 'to'\r\n}\r\n\r\nclass TransactionsFilterValidationModel extends ValidationModel {\r\n constructor () {\r\n super();\r\n\r\n this.setField(TransactionsFilterFieldName.From, {\r\n getter: (model) => model?.from ?? null,\r\n rules: [\r\n isBefore((model) => model?.to ?? null, 'Should be before \"To\".')\r\n ]\r\n });\r\n\r\n this.setField(TransactionsFilterFieldName.To, {\r\n getter: (model) => model?.to ?? null,\r\n rules: [\r\n isAfter((model) => model?.from ?? null, 'Should be after \"From\".')\r\n ]\r\n });\r\n }\r\n\r\n public get modelName (): string {\r\n return 'TransactionFilter';\r\n }\r\n}\r\n\r\nexport default new TransactionsFilterValidationModel();\r\n","import { Settings } from '@/settings';\r\nimport {\r\n ITransactionsState,\r\n TSetServiceType,\r\n TSetUsages,\r\n TSetFrom,\r\n TSetTo,\r\n TLoadUsages,\r\n TSetSubscriptionId,\r\n ITransactionsStore,\r\n AggregateUsagePeriodType,\r\n ISubscriptionUsage,\r\n IServerSubscriptionUsageResponse,\r\n IServerSubscriptionUsageRequest\r\n} from '@/store/contracts/subscriptions/transactions';\r\nimport { chainHandlers, DefaultIStatusHandler, handleErrorStatusResult, IStatusHandler } from '@/store/utils/apiResponseHandling';\r\nimport { sendRequest } from '@/store/utils/axiosUtils';\r\nimport { toApp as usageToApp } from '@/store/subscriptions/mapping/subscriptionUsage';\r\nimport { inject, provide, reactive, readonly } from 'vue';\r\nimport { store as validationStore } from '@/store/validation';\r\nimport filterValidationModel from '@/validation/transactionsFilterValidationModel';\r\nimport { SubscriptionServiceType } from '@/store/contracts/subscriptions/subscriptionServiceType';\r\n\r\nconst TransactionsStoreKey = Symbol('TransactionsStore');\r\n\r\nfunction setSubscriptionId (state: ITransactionsState): TSetSubscriptionId {\r\n return (subscriptionId) => {\r\n state.subscriptionId = subscriptionId;\r\n state.dailyUsages = [];\r\n state.monthlyUsages = [];\r\n state.totalUsages = 0;\r\n state.filterModel = {\r\n serviceType: null,\r\n from: null,\r\n to: null\r\n };\r\n };\r\n}\r\n\r\nfunction setUsages (state: ITransactionsState): TSetUsages {\r\n return (dailyUsages, monthlyUsages, totalUsages) => {\r\n state.dailyUsages = dailyUsages;\r\n state.monthlyUsages = monthlyUsages;\r\n state.totalUsages = totalUsages;\r\n };\r\n}\r\n\r\nfunction setServiceType (state: ITransactionsState): TSetServiceType {\r\n return (serviceType) => {\r\n state.filterModel.serviceType = serviceType;\r\n };\r\n}\r\n\r\nfunction setFrom (state: ITransactionsState): TSetFrom {\r\n return (from) => {\r\n state.filterModel.from = from;\r\n };\r\n}\r\n\r\nfunction setTo (state: ITransactionsState): TSetTo {\r\n return (to) => {\r\n state.filterModel.to = to;\r\n };\r\n}\r\n\r\nfunction fetchUsagesForAggregate (\r\n state: ITransactionsState,\r\n aggregateType: AggregateUsagePeriodType,\r\n handler?: Partial>\r\n): Promise<[boolean, ISubscriptionUsage[]]> {\r\n return new Promise<[boolean, ISubscriptionUsage[]]>((resolve) => {\r\n sendRequest(\r\n `${Settings.adminApiBaseUrl}/admin/v1/subscription/usage/load`,\r\n 'post',\r\n {\r\n SubscriptionId: state.subscriptionId,\r\n To: state.filterModel.to,\r\n From: state.filterModel.from,\r\n AggregateType: aggregateType,\r\n ServiceType: SubscriptionServiceType[state.filterModel.serviceType ?? SubscriptionServiceType.Vision]\r\n } as IServerSubscriptionUsageRequest\r\n ).then((response) => handleErrorStatusResult(response, chainHandlers({\r\n onSuccess: async (u) => resolve([true, u.Usages.map(usageToApp)]),\r\n onError: async (err) => {\r\n await DefaultIStatusHandler.onError(err);\r\n resolve([false, []]);\r\n },\r\n onNotAuthenticated: async (err) => {\r\n await DefaultIStatusHandler.onNotAuthenticated(err);\r\n resolve([false, []]);\r\n },\r\n onNotFound: async (err) => {\r\n await DefaultIStatusHandler.onNotFound(err);\r\n resolve([false, []]);\r\n }\r\n }, handler)));\r\n });\r\n}\r\n\r\nfunction loadUsages (state: ITransactionsState): TLoadUsages {\r\n return async (handler) => {\r\n const isValid = await validationStore.doValidation({\r\n model: filterValidationModel,\r\n value: state.filterModel\r\n });\r\n if (state.subscriptionId && isValid) {\r\n const results = await Promise.all([\r\n fetchUsagesForAggregate(state, AggregateUsagePeriodType.Daily, handler),\r\n fetchUsagesForAggregate(state, AggregateUsagePeriodType.Monthly, handler)\r\n ]);\r\n\r\n if (results.none(result => !result[0])) {\r\n const dailyUsages = results[0][1];\r\n const monthlyUsages = results[1][1];\r\n const totalUsages = dailyUsages.length > 0 ? dailyUsages.map(a => a.transactionCount).reduce((a, b) => a + b) : 0;\r\n setUsages(state)(dailyUsages, monthlyUsages, totalUsages);\r\n }\r\n }\r\n };\r\n}\r\n\r\nexport function createState (): ITransactionsState {\r\n validationStore.clear(filterValidationModel);\r\n return reactive({\r\n subscriptionId: null,\r\n dailyUsages: [],\r\n monthlyUsages: [],\r\n totalUsages: 0,\r\n filterModel: {\r\n from: null,\r\n to: null,\r\n serviceType: null\r\n }\r\n });\r\n}\r\n\r\nexport function createForState (state: ITransactionsState): ITransactionsStore {\r\n return {\r\n state: readonly(state),\r\n setSubscriptionId: setSubscriptionId(state),\r\n setUsages: setUsages(state),\r\n setServiceType: setServiceType(state),\r\n setFrom: setFrom(state),\r\n setTo: setTo(state),\r\n loadUsages: loadUsages(state)\r\n };\r\n}\r\n\r\nexport function provideStore (): ITransactionsStore {\r\n const state = createState();\r\n provide(TransactionsStoreKey, state);\r\n return createForState(state);\r\n}\r\n\r\nexport function useStore (): ITransactionsStore {\r\n const state = inject(TransactionsStoreKey);\r\n if (state === undefined) {\r\n throw new Error('Using TransactionStore before providing it!');\r\n }\r\n return createForState(state);\r\n}\r\n","import { RouteLocationRaw, Router } from 'vue-router';\r\n\r\nexport function goBack (router: Router, fallback: RouteLocationRaw): () => void {\r\n return () => {\r\n const beforeLoc = window.location.href;\r\n router.back();\r\n const afterLoc = window.location.href;\r\n if (beforeLoc === afterLoc) {\r\n router.push(fallback);\r\n }\r\n };\r\n}\r\n","export function delay (ms: number): Promise {\r\n return new Promise(resolve => setTimeout(resolve, ms));\r\n}\r\n","\r\nimport { computed, defineComponent, ref, watch } from 'vue';\r\nimport TransactionChart from '@/components/subscriptions/TransactionChart.vue';\r\nimport { provideStore as provideTransactionStore } from '@/store/subscriptions/transactions';\r\nimport { provideStore as provideSubscriptionScore } from '@/store/subscriptions/subscription';\r\nimport { useRouter } from 'vue-router';\r\nimport { goBack } from '@/router/goBack';\r\nimport { SubscriptionRoutes } from '@/router/routes/subscriptions';\r\nimport {\r\n SubscriptionServiceTypes,\r\n SubscriptionServiceType\r\n} from '@/store/contracts/subscriptions/subscriptionServiceType';\r\nimport validationModel, {\r\n TransactionsFilterFieldName as FieldName\r\n} from '@/validation/transactionsFilterValidationModel';\r\nimport { AggregateUsagePeriodType, ISubscriptionUsage } from '@/store/contracts/subscriptions/transactions';\r\nimport { useFieldsValidation } from '@/components/utils/fieldValidation';\r\nimport DatePicker from '@/components/date/DatePicker.vue';\r\nimport { delay } from '@/utils/systemUtils';\r\nimport { subscriptionServiceTypeChartDisplay } from '@/utils/units';\r\n\r\nexport default defineComponent({\r\n components: {\r\n TransactionChart,\r\n DatePicker\r\n },\r\n props: {\r\n subscriptionId: {\r\n type: String,\r\n required: true\r\n }\r\n },\r\n async setup (props) {\r\n const transactionStore = provideTransactionStore();\r\n const subscriptionStore = provideSubscriptionScore();\r\n const router = useRouter();\r\n\r\n const { validationRefs } = useFieldsValidation(\r\n validationModel,\r\n ref(true),\r\n [FieldName.ServiceType, FieldName.From, FieldName.To]);\r\n\r\n transactionStore.setSubscriptionId(props.subscriptionId);\r\n watch(() => props.subscriptionId, transactionStore.setSubscriptionId);\r\n\r\n await transactionStore.loadUsages();\r\n await subscriptionStore.loadSubscription(props.subscriptionId);\r\n\r\n function formatWithCommas (number: number) {\r\n return number.toLocaleString('en-US');\r\n }\r\n\r\n const dailyUsages = computed(() => transactionStore.state.dailyUsages as ISubscriptionUsage[]);\r\n const monthlyUsages = computed(() => transactionStore.state.monthlyUsages as ISubscriptionUsage[]);\r\n const totalUsages = computed(() => formatWithCommas(transactionStore.state.totalUsages));\r\n const activeServiceType = ref(SubscriptionServiceType.Vision);\r\n const units = computed(() => subscriptionServiceTypeChartDisplay(activeServiceType.value));\r\n\r\n const serviceTypeOptions = SubscriptionServiceTypes.filter(t => t !== SubscriptionServiceType.None).map(t => ({\r\n label: SubscriptionServiceType[t],\r\n value: t\r\n }));\r\n\r\n const serviceType = computed({\r\n get: () => transactionStore.state.filterModel.serviceType ?? SubscriptionServiceType.Vision,\r\n set: (val) => {\r\n const changed = val !== serviceType.value;\r\n transactionStore.setServiceType(val);\r\n if (changed) {\r\n setDefaultDates();\r\n }\r\n }\r\n });\r\n\r\n const fromDate = computed({\r\n get: () => transactionStore.state.filterModel.from,\r\n set: (val) => transactionStore.setFrom(val)\r\n });\r\n\r\n const toDate = computed({\r\n get: () => transactionStore.state.filterModel.to,\r\n set: (val) => transactionStore.setTo(val)\r\n });\r\n\r\n const updatingChart = ref(false);\r\n async function updateChart () {\r\n updatingChart.value = true;\r\n await transactionStore.loadUsages();\r\n activeServiceType.value = transactionStore.state.filterModel.serviceType ?? SubscriptionServiceType.Vision;\r\n updatingChart.value = false;\r\n }\r\n\r\n const canClearFilters = computed(() =>\r\n (transactionStore.state.filterModel.serviceType !== null &&\r\n transactionStore.state.filterModel.serviceType !== SubscriptionServiceType.Vision) ||\r\n transactionStore.state.filterModel.from !== null ||\r\n transactionStore.state.filterModel.to !== null);\r\n\r\n async function clearFilters () {\r\n transactionStore.setServiceType(null);\r\n transactionStore.setTo(null);\r\n transactionStore.setFrom(null);\r\n await updateChart();\r\n }\r\n\r\n function fromDateChanged (newDate: Date | null) {\r\n fromDate.value = newDate;\r\n }\r\n\r\n function toDateChanged (newDate: Date | null) {\r\n toDate.value = newDate;\r\n }\r\n\r\n const isUpdatingDates = ref(false);\r\n async function setDefaultDates () {\r\n isUpdatingDates.value = true;\r\n const service = subscriptionStore.state.subscription?.services.find(s => s.serviceType === serviceType.value);\r\n fromDate.value = service?.contractStartDate ?? subscriptionStore.state.subscription?.activeDate ?? null;\r\n toDate.value = service?.contractEndDate ?? subscriptionStore.state.subscription?.expiresDate ?? null;\r\n await delay(100); // Give the UI a short delay to update before flipping back our update bool\r\n isUpdatingDates.value = false;\r\n }\r\n\r\n setDefaultDates();\r\n\r\n return {\r\n TransactionChart,\r\n back: goBack(router, { name: SubscriptionRoutes.list }),\r\n dailyUsages,\r\n monthlyUsages,\r\n totalUsages,\r\n serviceTypeOptions,\r\n serviceType,\r\n fromDate,\r\n toDate,\r\n FieldName,\r\n validationRefs,\r\n updatingChart,\r\n updateChart,\r\n clearFilters,\r\n canClearFilters,\r\n AggregateUsagePeriodType,\r\n fromDateChanged,\r\n toDateChanged,\r\n isUpdatingDates,\r\n units\r\n };\r\n }\r\n});\r\n","import { render } from \"./SubscriptionTransactionsPage.vue?vue&type=template&id=2c0a2708\"\nimport script from \"./SubscriptionTransactionsPage.vue?vue&type=script&lang=ts\"\nexport * from \"./SubscriptionTransactionsPage.vue?vue&type=script&lang=ts\"\n\nimport \"./SubscriptionTransactionsPage.vue?vue&type=style&index=0&id=2c0a2708&lang=scss\"\nscript.render = render\n\nexport default script\nimport QBtn from 'quasar/src/components/btn/QBtn.js';\nimport QTooltip from 'quasar/src/components/tooltip/QTooltip.js';\nimport QSelect from 'quasar/src/components/select/QSelect.js';\nimport QField from 'quasar/src/components/field/QField.js';\nimport qInstall from \"../../../node_modules/vue-cli-plugin-quasar/lib/runtime.auto-import.js\";\nqInstall(script, 'components', {QBtn,QTooltip,QSelect,QField});\n"],"sourceRoot":""}