{"version":3,"sources":["webpack:///../../../src/components/VExpansionPanel/VExpansionPanels.ts","webpack:///../../../src/components/VGrid/VRow.ts","webpack:///./src/components/composers/VoiceComposer.vue","webpack:///./src/components/alert/VoiceSelect.vue","webpack:///src/components/alert/VoiceSelect.vue","webpack:///./src/components/alert/VoiceSelect.vue?af82","webpack:///./src/components/alert/VoiceSelect.vue?f344","webpack:///./src/components/alert/VoiceAttemptSelect.vue","webpack:///src/components/alert/VoiceAttemptSelect.vue","webpack:///./src/components/alert/VoiceAttemptSelect.vue?74a7","webpack:///./src/components/alert/VoiceAttemptSelect.vue?1ddb","webpack:///./src/components/alert/VoiceDelaySelect.vue","webpack:///src/components/alert/VoiceDelaySelect.vue","webpack:///./src/components/alert/VoiceDelaySelect.vue?2cb7","webpack:///./src/components/alert/VoiceDelaySelect.vue?3375","webpack:///./src/components/composers/TestVoiceText.vue","webpack:///src/components/composers/TestVoiceText.vue","webpack:///./src/components/composers/TestVoiceText.vue?d018","webpack:///./src/components/composers/TestVoiceText.vue?ce46","webpack:///./src/components/files/FileSelect.vue","webpack:///src/components/files/FileSelect.vue","webpack:///./src/components/files/FileSelect.vue?7fbc","webpack:///./src/components/files/FileSelect.vue?8df5","webpack:///src/components/composers/VoiceComposer.vue","webpack:///./src/components/composers/VoiceComposer.vue?3e45","webpack:///./src/components/composers/VoiceComposer.vue?7722","webpack:///./src/components/misc/DynamicTextInfo.vue","webpack:///src/components/misc/DynamicTextInfo.vue","webpack:///./src/components/misc/DynamicTextInfo.vue?91d6","webpack:///./src/components/misc/DynamicTextInfo.vue?8950","webpack:///./src/api/v24/api.email.js","webpack:///../../../src/components/VTooltip/VTooltip.ts","webpack:///./src/components/alertTemplates/AlertTemplateDetails.vue?0af1","webpack:///../../../src/components/VExpansionPanel/VExpansionPanelContent.ts","webpack:///../../../src/mixins/rippleable/index.ts","webpack:///./src/views/AlertTemplates.vue","webpack:///./src/components/alertTemplates/AlertTemplateDetails.vue","webpack:///src/components/alertTemplates/AlertTemplateDetails.vue","webpack:///./src/components/alertTemplates/AlertTemplateDetails.vue?6709","webpack:///./src/components/alertTemplates/AlertTemplateDetails.vue?603c","webpack:///src/views/AlertTemplates.vue","webpack:///./src/views/AlertTemplates.vue?a733","webpack:///./src/views/AlertTemplates.vue?d0ea","webpack:///./src/components/alert/SmsSender.vue","webpack:///src/components/alert/SmsSender.vue","webpack:///./src/components/alert/SmsSender.vue?8040","webpack:///./src/components/alert/SmsSender.vue?cae2","webpack:///./src/util/timeUtil.js","webpack:///./src/components/misc/UpdateBtn.vue","webpack:///src/components/misc/UpdateBtn.vue","webpack:///./src/components/misc/UpdateBtn.vue?510b","webpack:///./src/components/misc/UpdateBtn.vue?adef","webpack:///./src/components/misc/Tooltip.vue","webpack:///src/components/misc/Tooltip.vue","webpack:///./src/components/misc/Tooltip.vue?68c2","webpack:///./src/components/misc/Tooltip.vue?b5c4","webpack:///./src/components/misc/DynamicTextInfo.vue?761a","webpack:///./src/views/AlertTemplates.vue?f10a","webpack:///./src/util/EmailUtil.js","webpack:///./src/components/misc/ResponsePreview.vue","webpack:///src/components/misc/ResponsePreview.vue","webpack:///./src/components/misc/ResponsePreview.vue?0a9e","webpack:///./src/components/misc/ResponsePreview.vue?fa8d","webpack:///./src/components/alert/ResponseChip.vue?42e1","webpack:///../../../src/components/VCheckbox/VCheckbox.ts","webpack:///./src/util/SmsSender.js","webpack:///../../../src/components/VSwitch/VSwitch.ts","webpack:///./src/components/misc/CustomBtn.vue","webpack:///src/components/misc/CustomBtn.vue","webpack:///./src/components/misc/CustomBtn.vue?2b27","webpack:///./src/components/misc/CustomBtn.vue?a224","webpack:///../../../src/components/VExpansionPanel/VExpansionPanelHeader.ts","webpack:///../../../src/components/VExpansionPanel/VExpansionPanel.ts","webpack:///./src/util/sms.js","webpack:///./src/util/objectUtil.js","webpack:///./src/components/composers/SmsComposer.vue","webpack:///./src/components/misc/CharCounter.vue","webpack:///src/components/misc/CharCounter.vue","webpack:///./src/components/misc/CharCounter.vue?e7b6","webpack:///./src/components/misc/CharCounter.vue?7372","webpack:///./src/components/composers/TestSmsText.vue","webpack:///./src/api/v24/api.sms.js","webpack:///src/components/composers/TestSmsText.vue","webpack:///./src/components/composers/TestSmsText.vue?fc00","webpack:///./src/components/composers/TestSmsText.vue?7d19","webpack:///src/components/composers/SmsComposer.vue","webpack:///./src/components/composers/SmsComposer.vue?0895","webpack:///./src/components/composers/SmsComposer.vue?0459","webpack:///./src/components/departments/DepartmentSelect.vue","webpack:///src/components/departments/DepartmentSelect.vue","webpack:///./src/components/departments/DepartmentSelect.vue?e326","webpack:///./src/components/departments/DepartmentSelect.vue?351d","webpack:///./src/components/composers/EmailComposer.vue","webpack:///./src/components/composers/TestEmailText.vue","webpack:///src/components/composers/TestEmailText.vue","webpack:///./src/components/composers/TestEmailText.vue?1885","webpack:///./src/components/composers/TestEmailText.vue?41d3","webpack:///./EmailAttachmentSelect.vue","webpack:///EmailAttachmentSelect.vue","webpack:///./EmailAttachmentSelect.vue?09d4","webpack:///./EmailAttachmentSelect.vue?a9d7","webpack:///src/components/composers/EmailComposer.vue","webpack:///./src/components/composers/EmailComposer.vue?2fe9","webpack:///./src/components/composers/EmailComposer.vue?1b98","webpack:///./src/util/alertResponseOptions.js","webpack:///./src/components/alert/ResponseOptionsComposer.vue","webpack:///src/components/alert/ResponseOptionsComposer.vue","webpack:///./src/components/alert/ResponseOptionsComposer.vue?1c71","webpack:///./src/components/alert/ResponseOptionsComposer.vue?306d","webpack:///./src/components/misc/UserError.vue","webpack:///src/components/misc/UserError.vue","webpack:///./src/components/misc/UserError.vue?a26c","webpack:///./src/components/misc/UserError.vue?ca39","webpack:///./src/components/alert/ResponseChip.vue","webpack:///src/components/alert/ResponseChip.vue","webpack:///./src/components/alert/ResponseChip.vue?d250","webpack:///./src/components/alert/ResponseChip.vue?760f","webpack:///../../../src/mixins/selectable/index.ts"],"names":["BaseItemGroup","extend","name","provide","expansionPanels","this","props","accordion","Boolean","disabled","flat","hover","focusable","inset","popout","readonly","tile","computed","classes","_objectSpread","options","call","created","$attrs","hasOwnProperty","breaking","Array","isArray","value","length","methods","updateItem","item","index","getValue","nextValue","isActive","toggleMethod","nextIsActive","breakpoints","ALIGNMENT","makeProps","prefix","def","reduce","val","upperFirst","alignValidator","str","concat","includes","alignProps","type","String","default","validator","justifyValidator","justifyProps","alignContentValidator","alignContentProps","propMap","align","Object","keys","justify","alignContent","classMap","breakpointClass","prop","className","breakpoint","replace","toLowerCase","cache","Map","Vue","functional","tag","dense","noGutters","render","h","_ref","data","children","cacheKey","classList","get","_classList$push","forEach","push","_defineProperty","set","mergeData","staticClass","class","_vm","enabled","attrs","on","$t","emitChange","model","callback","$$v","expression","voiceProps","_t","_v","permissionFiles","showSoundFileOption","useAudioFile","key","audioFileId","dialogPlayback","advancedOptPanel","_c","directives","rawName","deputy","dialogVoiceTips","scopedSlots","_u","fn","proxy","$event","dialogWidth","large","dialogManageFiles","fileAdminKey","cancel","dialogRecord","_s","staticRenderFns","_self","initVoiceProps","required","voices","_this","store","dispatch","then","getItemText","LanguageName","Name","onChange","$emit","component","attemptOptions","text","event","delayOptions","voiceDelay","initValue","change","mobile","components","Tooltip","voicePerson","usrMobile","usrProfile","Bruker","Mobilnr","sendVoiceMsg","_this2","apiVoice","sendSingle","appSnackbar","setMessage","catch","files","FileName","file","typeAudio","initFileId","apiFileType","apiFile","getAll","res","Files","find","FileId","AudioPlayback","AudioRecorder","FileSelect","FileManagement","TestVoiceText","VoiceDelaySelect","VoiceAttemptSelect","VoiceSelect","initEnabled","initText","initAttempts","initDelay","initDeputy","initPanelState","showDeputyOptions","watch","newText","protectedFiles","_store$state$userProf","state","userProfile","_permissions","attempts","delay","config","dialogWith","fileSelectKey","_this$initVoiceProps","Id","configVoice","getDefaultProps","showVoiceTips","setVoiceProps","setVoiceDelay","setAudioFile","fileId","manageAudioFiles","useAudioFileChange","advancedOptPanelState","audioFile","endOnState","tagName","apiEmail","send","senderName","subject","body","recipients","params","Sender","defaultEmailSenderAddr","SenderName","Messages","Title","Content","Simulation","SpamFilter","Recipients","Promise","resolve","reject","api","execute","Status","mixins","Colorable","Delayable","Dependent","Menuable","closeDelay","Number","openDelay","openOnHover","openOnFocus","transition","calculatedMinWidth","closeDependents","calculatedLeft","_this$dimensions","dimensions","activator","content","unknown","bottom","left","top","right","activatorLeft","attach","offsetLeft","width","nudgeLeft","parseInt","nudgeRight","calcXOverflow","calculatedTop","_this$dimensions2","activatorTop","offsetTop","height","nudgeTop","nudgeBottom","pageYOffset","calcYOverflow","computedTransition","offsetY","offsetX","styles","maxWidth","convertToUnit","minWidth","zIndex","activeZIndex","beforeMount","$nextTick","callActivate","mounted","getSlotType","consoleError","activate","updateDimensions","requestAnimationFrame","startTransition","deactivate","runDelay","genActivatorListeners","listeners","Activatable","focus","e","getActivator","blur","keydown","keyCode","keyCodes","esc","genActivatorAttributes","genTransition","genContent","$createElement","_class","setBackgroundColor","color","contentClass","activatorFixed","style","getScopeIdAttrs","isContentActive","ref","getContentSlot","_this3","showLazyContent","genActivator","baseMixins","Bootable","RegistrableInject","parentIsActive","expansionPanel","immediate","handler","oldVal","isBooted","registerContent","beforeDestroy","unregisterContent","VExpandTransition","getSlot","ripple","genRipple","arguments","undefined","center","templates","template","dialogDetails","validationRules","requiredRule","setDepartment","setSms","useVoice","voiceSettings","setVoice","alertNameLabel","atLeastOneResponseOptionIsSet","dialogResponse","dialogDelete","emitClose","_e","formValid","deleteTemplate","DepartmentSelect","VoiceComposer","EmailComposer","SmsComposer","UserConfirm","ResponseChip","ResponseOptionsComposer","ResponsePreview","inTemplate","userIsAdmin","getters","getUserIsAdmin","responsCreatorResponses","requestedTemplate","formValidationRules","smsLengthValid","smsTextValid","orgTemplate","useSms","useEmail","selectedDepartment","objectUtil","deepClone","alertResponseOptions","createResponseOptArrayFromTemplate","department","user","getDepartmentForItemSave","sms","email","voice","showResponseDialog","smsSettings","lengthValid","textValid","setEmail","emailSettings","emailTitle","title","vs","defaultSetting","i","len","responseOptions","setResponses","responseOpts","updatedTemplateResponses","rcr","number","num","customValue","link","departmentId","apiAlertTemplates","delete","commit","save","promise","id","update","create","DataTable","AlertTemplateDetails","listHeaders","headers","getShowDepartmentInfoInLists","alertTemplates","search","maxDialogWidth","xLarge","tblFooterProps","itemsPerPageOptions","fixedTblItemsPerPageOptions","filterList","query","whitespaceAsWildcard","setTemplate","__setTemplate","toggleDetails","setEmptyTemplate","emptyTemplate","AlertTemplate","getLabel","sender","optional","validationErrors","smsSender","SmsSender","validate","label","isValid","timeUtil","isToday","date","today","Date","isSameDate","isYesterday","yesterday","setDate","getDate","date1","date2","getMonth","getFullYear","createDateTimeString","getNumberAsTwoDigits","getHours","getMinutes","getDateRangeFromMonths","fromYear","fromMonth","toYear","toMonth","startDay","from","to","monthNum","toString","block","onClick","CustomBtn","bottomPlacement","placement","rightPlacement","leftPlacement","emailUtil","attachmentsFileSizeIsOk","attachments","totSize","selFile","FileSize","mb","numberUtil","bytesToMegabytes","totFileSizeMb","limit","emailAttachmentMbimit","sizeOk","Selectable","indeterminate","indeterminateIcon","offIcon","onIcon","inputIndeterminate","VInput","computedIcon","validationState","isDisabled","hasError","shouldValidate","hasSuccess","hasColor","computedColor","genCheckbox","_this$attrs$","attrs$","checkboxAttrs","_objectWithoutProperties","_excluded","VIcon","setTextColor","dark","light","genInput","rippleState","genDefaultSlot","genLabel","senderPhoneNumOrName","_classCallCheck","_createClass","i18n","t","seemsToBePhoneNumber","pn","PhoneNumber","hasInternationalPrefix","isMobile","hasWhitespace","stringUtil","hasNorwegianLetters","test","indexOf","char","validChars","charAt","usrInput","Touch","loading","role","switchData","themeClasses","genSwitch","switchAttrs","onSwipeLeft","onSwipeRight","genProgress","VFabTransition","$slots","progress","VProgressCircular","size","onKeydown","icon","info","primary","outlined","small","disableIconRotate","expandIcon","hideActions","hasMousedown","isReadonly","registerHeader","unregisterHeader","genIcon","VFadeTransition","tabindex","$listeners","click","mousedown","mouseup","open","GroupableFactory","RegistrableProvide","header","groupClasses","vm","$on","detail","$el","toggle","charCount","maxSingleSmsLength","internalLength","smsLength","numOfSms","extendedCharactersCount","count","Math","ceil","findInvalidSymbols","_step","okChars","_iterator","_createForOfIteratorHelper","s","n","done","symbol","err","f","extendedCharacters","chars","split","object","JSON","parse","stringify","max","lengthOk","dynamicNameTags","nameTag","searchStr","regExp","RegExp","matches","match","numOfMatches","maxLengthName","dynamicCharsLength","tagTextLength","charsInSms","apiSms","recipient","spamFilterTimeout","Recipient","Stats","SendCount","sendTestMessage","TestSmsText","DynamicTextInfo","CharCounter","smsTextInvalid","initSender","hideSmsSender","autoSmsSender","validSender","setSmsSender","setSender","senderProps","setSmsLengthValid","fixUnsupportedWhitespace","selectedDepId","getSelectedDepartment","apiDepartment","selectedDep","depSender","SmsAvsender","departments","labelText","hint","userConfirm","selected","dialogConfirm","cancelDepartmentChange","initDepartment","askForUserConfirm","visible","AvdelingId","Navn","_toConsumableArray","mainDepartment","Avdeling","AvdelingNavn","Avdelinger","rollbackDepartment","setSelectedDepartment","newVal","usrEmail","Epost","usrName","BrukerNavn","Firmanavn","Email","dialogSelect","selectedFiles","dialogNew","AlertFileUpload","fileSizeLimitWarning","fileSizeLimit","totalSize","attachmentData","toFixed","fetchFiles","addAlertFile","filter","Description","EmailAttachmentSelect","TestEmailText","initTitle","hideAttachmentFeature","setAttachements","fillMissingOptions","responses","resOption","useCustomValue","getDefaultScenarioSettings","getEmpty","oneOrMoreDefined","response","getApiFormatSmsEmail","responseObjects","responseObj","responsNum","getApiFormatVoice","languageCode","choices","voiceLanguageData","getVoiceLanguageData","flatten","createVoiceResponseOption","responseOptText","repeat","noUserInputMsg","confirmText","responseConfirm","parseApiFormat","returnData","responseOption","splitData","option","choiceNum","responseText","choiceNumVoiceFriendly","press","for","supportedVoiceLanguages","element","code","responsesFlat","fixedOptions","optionsDefined","targetOption","optionChanged","linkBtnLabel","$set","urlRules","getResponseLabel","getResponseValue","respons","dialog","ok","fullwidth","avatar","fullWidth","prevent","preventDefault","Rippleable","Comparable","inputValue","falseValue","trueValue","multiple","lazyValue","isDark","appIsDark","isMultiple","internalValue","input","some","valueComparator","isDirty","assign","computedId","domProps","checked","onBlur","onFocus","isInteractive","isFocused"],"mappings":"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","file":"js/chunk-6709d376.706c51a2.js","sourcesContent":["// Styles\nimport './VExpansionPanel.sass'\n\n// Components\nimport { BaseItemGroup, GroupableInstance } from '../VItemGroup/VItemGroup'\nimport VExpansionPanel from './VExpansionPanel'\n\n// Utilities\nimport { breaking } from '../../util/console'\n\n// Types\ninterface VExpansionPanelInstance extends InstanceType<typeof VExpansionPanel> {}\n\n/* @vue/component */\nexport default BaseItemGroup.extend({\n name: 'v-expansion-panels',\n\n provide (): object {\n return {\n expansionPanels: this,\n }\n },\n\n props: {\n accordion: Boolean,\n disabled: Boolean,\n flat: Boolean,\n hover: Boolean,\n focusable: Boolean,\n inset: Boolean,\n popout: Boolean,\n readonly: Boolean,\n tile: Boolean,\n },\n\n computed: {\n classes (): object {\n return {\n ...BaseItemGroup.options.computed.classes.call(this),\n 'v-expansion-panels': true,\n 'v-expansion-panels--accordion': this.accordion,\n 'v-expansion-panels--flat': this.flat,\n 'v-expansion-panels--hover': this.hover,\n 'v-expansion-panels--focusable': this.focusable,\n 'v-expansion-panels--inset': this.inset,\n 'v-expansion-panels--popout': this.popout,\n 'v-expansion-panels--tile': this.tile,\n }\n },\n },\n\n created () {\n /* istanbul ignore next */\n if (this.$attrs.hasOwnProperty('expand')) {\n breaking('expand', 'multiple', this)\n }\n\n /* istanbul ignore next */\n if (\n Array.isArray(this.value) &&\n this.value.length > 0 &&\n typeof this.value[0] === 'boolean'\n ) {\n breaking(':value=\"[true, false, true]\"', ':value=\"[0, 2]\"', this)\n }\n },\n\n methods: {\n updateItem (item: GroupableInstance & VExpansionPanelInstance, index: number) {\n const value = this.getValue(item, index)\n const nextValue = this.getValue(item, index + 1)\n\n item.isActive = this.toggleMethod(value)\n item.nextIsActive = this.toggleMethod(nextValue)\n },\n },\n})\n","import './VGrid.sass'\n\nimport Vue, { PropOptions } from 'vue'\nimport mergeData from '../../util/mergeData'\nimport { upperFirst } from '../../util/helpers'\n\n// no xs\nconst breakpoints = ['sm', 'md', 'lg', 'xl']\n\nconst ALIGNMENT = ['start', 'end', 'center']\n\nfunction makeProps (prefix: string, def: () => PropOptions) {\n return breakpoints.reduce((props, val) => {\n props[prefix + upperFirst(val)] = def()\n return props\n }, {} as Dictionary<PropOptions>)\n}\n\nconst alignValidator = (str: any) => [...ALIGNMENT, 'baseline', 'stretch'].includes(str)\nconst alignProps = makeProps('align', () => ({\n type: String,\n default: null,\n validator: alignValidator,\n}))\n\nconst justifyValidator = (str: any) => [...ALIGNMENT, 'space-between', 'space-around'].includes(str)\nconst justifyProps = makeProps('justify', () => ({\n type: String,\n default: null,\n validator: justifyValidator,\n}))\n\nconst alignContentValidator = (str: any) => [...ALIGNMENT, 'space-between', 'space-around', 'stretch'].includes(str)\nconst alignContentProps = makeProps('alignContent', () => ({\n type: String,\n default: null,\n validator: alignContentValidator,\n}))\n\nconst propMap = {\n align: Object.keys(alignProps),\n justify: Object.keys(justifyProps),\n alignContent: Object.keys(alignContentProps),\n}\n\nconst classMap = {\n align: 'align',\n justify: 'justify',\n alignContent: 'align-content',\n}\n\nfunction breakpointClass (type: keyof typeof propMap, prop: string, val: string) {\n let className = classMap[type]\n if (val == null) {\n return undefined\n }\n if (prop) {\n // alignSm -> Sm\n const breakpoint = prop.replace(type, '')\n className += `-${breakpoint}`\n }\n // .align-items-sm-center\n className += `-${val}`\n return className.toLowerCase()\n}\n\nconst cache = new Map<string, any[]>()\n\nexport default Vue.extend({\n name: 'v-row',\n functional: true,\n props: {\n tag: {\n type: String,\n default: 'div',\n },\n dense: Boolean,\n noGutters: Boolean,\n align: {\n type: String,\n default: null,\n validator: alignValidator,\n },\n ...alignProps,\n justify: {\n type: String,\n default: null,\n validator: justifyValidator,\n },\n ...justifyProps,\n alignContent: {\n type: String,\n default: null,\n validator: alignContentValidator,\n },\n ...alignContentProps,\n },\n render (h, { props, data, children }) {\n // Super-fast memoization based on props, 5x faster than JSON.stringify\n let cacheKey = ''\n for (const prop in props) {\n cacheKey += String((props as any)[prop])\n }\n let classList = cache.get(cacheKey)\n\n if (!classList) {\n classList = []\n // Loop through `align`, `justify`, `alignContent` breakpoint props\n let type: keyof typeof propMap\n for (type in propMap) {\n propMap[type].forEach(prop => {\n const value: string = (props as any)[prop]\n const className = breakpointClass(type, prop, value)\n if (className) classList!.push(className)\n })\n }\n\n classList.push({\n 'no-gutters': props.noGutters,\n 'row--dense': props.dense,\n [`align-${props.align}`]: props.align,\n [`justify-${props.justify}`]: props.justify,\n [`align-content-${props.alignContent}`]: props.alignContent,\n })\n\n cache.set(cacheKey, classList)\n }\n\n return h(\n props.tag,\n mergeData(data, {\n staticClass: 'row',\n class: classList,\n }),\n children\n )\n },\n})\n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{class:[_vm.enabled ? 'elevation-3 channel-panel' : 'mb-n6']},[_c('v-switch',{class:[_vm.enabled ? 'mt-n1' : ''],attrs:{\"label\":_vm.$t('sendVoice'),\"data-testid\":\"sendVoice\"},on:{\"change\":_vm.emitChange},model:{value:(_vm.enabled),callback:function ($$v) {_vm.enabled=$$v},expression:\"enabled\"}}),(_vm.enabled)?_c('div',[(_vm.voiceProps)?_c('VoiceSelect',{attrs:{\"init-voice-props\":_vm.voiceProps,\"data-testid\":\"voiceSelectVoiceComposer\"},on:{\"change\":_vm.setVoiceProps}}):_vm._e(),_c('v-textarea',{staticClass:\"mb-n5\",attrs:{\"label\":_vm.$t('voiceText'),\"outlined\":\"\",\"data-testid\":\"voiceText\"},on:{\"change\":_vm.emitChange},model:{value:(_vm.text),callback:function ($$v) {_vm.text=$$v},expression:\"text\"}}),_c('TestVoiceText',{attrs:{\"text\":_vm.text,\"voice-person\":_vm.voiceProps.Name}}),_vm._t(\"text-footer\",function(){return [(_vm.voiceProps.Name === 'Liv')?_c('v-btn',{attrs:{\"outlined\":\"\",\"x-small\":\"\"},on:{\"click\":_vm.showVoiceTips}},[_vm._v(\" \"+_vm._s(_vm.$t(\"tipsForVoiceMsg\"))+\" \")]):_vm._e()]}),(_vm.permissionFiles && _vm.showSoundFileOption)?_c('v-row',[_c('v-col',{attrs:{\"cols\":\"12\"}},[_c('v-checkbox',{staticClass:\"mb-4\",attrs:{\"label\":_vm.$t('useSoundFile'),\"hint\":_vm.$t('useSoundFileHint'),\"persistent-hint\":\"\"},on:{\"change\":_vm.useAudioFileChange},model:{value:(_vm.useAudioFile),callback:function ($$v) {_vm.useAudioFile=$$v},expression:\"useAudioFile\"}})],1)],1):_vm._e(),(_vm.useAudioFile && !_vm.dialogManageFiles)?_c('div',[_c('v-row',[_c('v-col',{attrs:{\"cols\":\"10\"}},[_c('FileSelect',{key:_vm.fileSelectKey,attrs:{\"init-file-id\":_vm.audioFileId,\"type-audio\":true},on:{\"change\":function($event){return _vm.setAudioFile($event.FileId)}}})],1),(_vm.audioFileId)?_c('v-col',{attrs:{\"cols\":\"2\"}},[_c('v-btn',{staticClass:\"mt-2\",attrs:{\"icon\":\"\",\"outlined\":\"\"},on:{\"click\":function($event){_vm.dialogPlayback = true}}},[_c('v-icon',[_vm._v(\"mdi-play\")])],1)],1):_vm._e()],1),_c('div',[_c('v-btn',{staticClass:\"mr-2\",attrs:{\"outlined\":\"\",\"small\":\"\"},on:{\"click\":function($event){_vm.dialogRecord = true}}},[_c('v-icon',{attrs:{\"small\":\"\"}},[_vm._v(\" mdi-microphone \")]),_vm._v(\" \"+_vm._s(_vm.$t(\"newRecording\"))+\" \")],1),_c('v-btn',{attrs:{\"outlined\":\"\",\"small\":\"\"},on:{\"click\":_vm.manageAudioFiles}},[_vm._v(\" \"+_vm._s(_vm.$t(\"manageFiles\"))+\" \")])],1),_c('br'),_c('br')],1):_vm._e()],2):_vm._e(),(_vm.enabled)?_c('v-expansion-panels',{staticClass:\"mt-2\",attrs:{\"data-testid\":\"advancedVoiceComposer\"},model:{value:(_vm.advancedOptPanel),callback:function ($$v) {_vm.advancedOptPanel=$$v},expression:\"advancedOptPanel\"}},[_c('v-expansion-panel',[_c('v-expansion-panel-header',[_vm._v(\" \"+_vm._s(_vm.$t(\"advancedVoiceSettings\"))+\" \")]),_c('v-expansion-panel-content',[_c('VoiceAttemptSelect',{on:{\"change\":_vm.emitChange},model:{value:(_vm.attempts),callback:function ($$v) {_vm.attempts=$$v},expression:\"attempts\"}}),(_vm.attempts)?_c('div',[_c('VoiceDelaySelect',{attrs:{\"init-value\":_vm.delay,\"data-testid\":\"delayVoiceComposer\"},on:{\"change\":_vm.setVoiceDelay}})],1):_vm._e(),_c('v-switch',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.showDeputyOptions),expression:\"showDeputyOptions\"}],attrs:{\"label\":_vm.$t('useDeputy'),\"data-testid\":\"useDeputyVoiceComposer\"},on:{\"change\":_vm.emitChange},model:{value:(_vm.deputy),callback:function ($$v) {_vm.deputy=$$v},expression:\"deputy\"}}),(_vm.deputy)?_c('div',{staticClass:\"mt-n4 text-body-2\"},[_vm._v(\" \"+_vm._s(_vm.$t(\"deputyUsageInfo\"))+\" \")]):_vm._e()],1)],1)],1):_vm._e(),_c('v-dialog',{attrs:{\"max-width\":_vm.dialogWidth.medium},model:{value:(_vm.dialogVoiceTips),callback:function ($$v) {_vm.dialogVoiceTips=$$v},expression:\"dialogVoiceTips\"}},[_c('v-card',[_c('v-card-title',[_vm._v(\" \"+_vm._s(_vm.$t(\"tipsForVoiceMsg\"))+\" \")]),_c('v-card-text',[_c('v-alert',{attrs:{\"type\":\"warning\",\"outlined\":\"\",\"dense\":\"\"}},[_vm._v(\" \"+_vm._s(_vm.$t(\"thisOnlyAppliesToVoice\"))+\" \\\"Liv\\\" (\"+_vm._s(_vm.$t(\"norwegian\").toLowerCase())+\" bokmÃ¥l) \")]),_c('v-simple-table',{scopedSlots:_vm._u([{key:\"default\",fn:function(){return [_c('thead',[_c('tr',[_c('th',{staticClass:\"text-left\"},[_vm._v(\" \"+_vm._s(_vm.$t(\"text\"))+\" \")]),_c('th',{staticClass:\"text-left\"},[_vm._v(\" \"+_vm._s(_vm.$t(\"pronounced\"))+\" \")])])]),_c('tbody',[_c('tr',[_c('td',[_vm._v(\"..\")]),_c('td',[_vm._v(\"\\\"punktum\\\"\")])]),_c('tr',[_c('td',[_vm._v(\"\\\"pause\\\"\")]),_c('td',[_c('i',[_vm._v(_vm._s(_vm.$t(\"insertsShortBreak\")))])])]),_c('tr',[_c('td',[_vm._v(\"kl. 12:00\")]),_c('td',[_vm._v(\"\\\"klokka tolv null null\\\"\")])]),_c('tr',[_c('td',[_vm._v(\"\\\"09.04\\\"\")]),_c('td',[_vm._v(\"\\\"niende april\\\"\")])])])]},proxy:true}])})],1),_c('v-card-actions',[_c('v-spacer'),_c('v-btn',{on:{\"click\":function($event){_vm.dialogVoiceTips = false}}},[_vm._v(_vm._s(_vm.$t(\"close\")))])],1)],1)],1),_c('v-dialog',{attrs:{\"max-width\":_vm.dialogWidth.large},model:{value:(_vm.dialogManageFiles),callback:function ($$v) {_vm.dialogManageFiles=$$v},expression:\"dialogManageFiles\"}},[_c('v-card',[_c('v-card-title',[_vm._v(\" \"+_vm._s(_vm.$t(\"manageFiles\"))+\" \")]),_c('v-card-text',[_c('FileManagement',{key:_vm.fileAdminKey,attrs:{\"is-audio-file\":true,\"protected-files\":_vm.protectedFiles}})],1),_c('v-card-actions',[_c('v-spacer'),_c('v-btn',{on:{\"click\":function($event){_vm.dialogManageFiles = false}}},[_vm._v(\" \"+_vm._s(_vm.$t(\"close\"))+\" \")])],1)],1)],1),(_vm.dialogRecord)?_c('v-dialog',{attrs:{\"max-width\":_vm.dialogWidth.medium},model:{value:(_vm.dialogRecord),callback:function ($$v) {_vm.dialogRecord=$$v},expression:\"dialogRecord\"}},[_c('AudioRecorder',{attrs:{\"save-and-use-btn\":true},on:{\"cancel\":function($event){_vm.dialogRecord = false},\"done\":_vm.setAudioFile}})],1):_vm._e(),(_vm.dialogPlayback)?_c('v-dialog',{attrs:{\"max-width\":_vm.dialogWidth.small},model:{value:(_vm.dialogPlayback),callback:function ($$v) {_vm.dialogPlayback=$$v},expression:\"dialogPlayback\"}},[_c('v-card',[_c('v-card-title'),_c('v-card-text',{staticClass:\"text-center\"},[_c('AudioPlayback',{staticClass:\"mt-6\",attrs:{\"audio-file-id\":_vm.audioFileId,\"autoplay\":true}})],1),_c('v-card-actions',[_c('v-spacer'),_c('v-btn',{on:{\"click\":function($event){_vm.dialogPlayback = false}}},[_vm._v(_vm._s(_vm.$t(\"close\")))])],1)],1)],1):_vm._e()],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return (_vm.voices.length)?_c('v-select',{key:\"Id\",attrs:{\"outlined\":\"\",\"items\":_vm.voices,\"item-text\":_vm.getItemText,\"label\":_vm.$t('voice2'),\"return-object\":\"\"},on:{\"change\":_vm.onChange},model:{value:(_vm.voiceProps),callback:function ($$v) {_vm.voiceProps=$$v},expression:\"voiceProps\"}}):_vm._e()\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n <v-select\r\n v-if=\"voices.length\"\r\n v-model=\"voiceProps\"\r\n outlined\r\n :items=\"voices\"\r\n :item-text=\"getItemText\"\r\n :label=\"$t('voice2')\"\r\n key=\"Id\"\r\n @change=\"onChange\"\r\n return-object\r\n ></v-select>\r\n</template>\r\n\r\n<script>\r\nimport store from \"@/store\";\r\n\r\nexport default {\r\n name: \"VoiceSelect\",\r\n\r\n props: {\r\n initVoiceProps: {\r\n required: true\r\n }\r\n },\r\n\r\n data: () => ({\r\n voices: [],\r\n voiceProps: null\r\n }),\r\n\r\n created() {\r\n this.voiceProps = this.initVoiceProps;\r\n store.dispatch(\"updateVoices\").then(voices => this.voices = voices);\r\n },\r\n\r\n methods: {\r\n getItemText(item) {\r\n return item.LanguageName + \" - \" + item.Name;\r\n },\r\n onChange() {\r\n this.$emit(\"change\", this.voiceProps);\r\n },\r\n }\r\n};\r\n\r\n</script>\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./VoiceSelect.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./VoiceSelect.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./VoiceSelect.vue?vue&type=template&id=2690a498&\"\nimport script from \"./VoiceSelect.vue?vue&type=script&lang=js&\"\nexport * from \"./VoiceSelect.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('v-select',{attrs:{\"items\":_vm.attemptOptions,\"label\":_vm.$t('attemptsNoResponse'),\"value\":_vm.value,\"outlined\":\"\",\"data-testid\":\"attemptsVoiceAttemptsSelect\"},on:{\"change\":function($event){return _vm.onChange($event)}}})\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n <v-select\r\n :items=\"attemptOptions\"\r\n :label=\"$t('attemptsNoResponse')\"\r\n :value=\"value\"\r\n outlined\r\n @change=\"onChange($event)\"\r\n data-testid=\"attemptsVoiceAttemptsSelect\" \r\n >\r\n </v-select>\r\n</template>\r\n\r\n<script>\r\nexport default {\r\n name: \"VoiceAttemptSelect\",\r\n props: [\"value\"],\r\n data: () => ({\r\n attemptOptions: [\r\n { text: \"0\", value: 0 },\r\n { text: \"1\", value: 1 },\r\n { text: \"2\", value: 2 },\r\n { text: \"3\", value: 3 },\r\n { text: \"4\", value: 4 },\r\n { text: \"5\", value: 5 },\r\n { text: \"6\", value: 6 },\r\n { text: \"7\", value: 7 },\r\n { text: \"8\", value: 8 },\r\n { text: \"9\", value: 9 },\r\n { text: \"10\", value: 10 }\r\n ]\r\n }),\r\n methods: {\r\n onChange(event) {\r\n this.$emit('input', event);\r\n this.$emit(\"change\");\r\n }\r\n }\r\n};\r\n</script>\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./VoiceAttemptSelect.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./VoiceAttemptSelect.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./VoiceAttemptSelect.vue?vue&type=template&id=e55d811a&\"\nimport script from \"./VoiceAttemptSelect.vue?vue&type=script&lang=js&\"\nexport * from \"./VoiceAttemptSelect.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('v-select',{attrs:{\"items\":_vm.delayOptions,\"label\":_vm.$t('delayBetweenAttempts'),\"outlined\":\"\"},on:{\"change\":_vm.change},model:{value:(_vm.voiceDelay),callback:function ($$v) {_vm.voiceDelay=$$v},expression:\"voiceDelay\"}})\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n <v-select\r\n :items=\"delayOptions\"\r\n :label=\"$t('delayBetweenAttempts')\"\r\n v-model=\"voiceDelay\"\r\n outlined\r\n @change=\"change\"\r\n >\r\n </v-select>\r\n</template>\r\n\r\n<script>\r\nexport default {\r\n name: \"VoiceDelaySelect\",\r\n props: {\r\n initValue: {\r\n default: 5\r\n }\r\n },\r\n data: () => ({\r\n voiceDelay: 0,\r\n delayOptions: []\r\n }),\r\n created() {\r\n this.voiceDelay = this.initValue;\r\n this.delayOptions = [\r\n { text: \"3 \" + this.$t(\"minutes\"), value: 3 },\r\n { text: \"5 \" + this.$t(\"minutes\"), value: 5 },\r\n { text: \"10 \" + this.$t(\"minutes\"), value: 10 },\r\n { text: \"15 \" + this.$t(\"minutes\"), value: 15 },\r\n { text: \"30 \" + this.$t(\"minutes\"), value: 30 },\r\n { text: \"45 \" + this.$t(\"minutes\"), value: 45 },\r\n { text: \"60 \" + this.$t(\"minutes\"), value: 60 },\r\n { text: \"90 \" + this.$t(\"minutes\"), value: 90 },\r\n { text: \"120 \" + this.$t(\"minutes\"), value: 120 }\r\n ];\r\n },\r\n methods: {\r\n change() {\r\n this.$emit(\"change\", this.voiceDelay);\r\n }\r\n }\r\n};\r\n</script>\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./VoiceDelaySelect.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./VoiceDelaySelect.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./VoiceDelaySelect.vue?vue&type=template&id=edcaf7ea&\"\nimport script from \"./VoiceDelaySelect.vue?vue&type=script&lang=js&\"\nexport * from \"./VoiceDelaySelect.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return (_vm.text.length)?_c('div',[_c('v-btn',{attrs:{\"outlined\":\"\",\"x-small\":\"\"},on:{\"click\":_vm.sendVoiceMsg}},[_vm._v(\" \"+_vm._s(_vm.$t(\"testVoice\"))+\" \")]),_c('Tooltip',{scopedSlots:_vm._u([{key:\"content\",fn:function(){return [_c('p',[_vm._v(\" \"+_vm._s(_vm.$t(\"youWillRecCall\", { mobile: _vm.usrMobile }))+\" \")]),_c('p',[_vm._v(\" \"+_vm._s(_vm.$t(\"youWillRecMsgVoiceLimitations\"))+\" \")])]},proxy:true}],null,false,2688507778)})],1):_vm._e()\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n <div v-if=\"text.length\">\r\n <v-btn outlined x-small @click=\"sendVoiceMsg\">\r\n {{ $t(\"testVoice\") }}\r\n </v-btn>\r\n <Tooltip>\r\n <template v-slot:content>\r\n <p>\r\n {{ $t(\"youWillRecCall\", { mobile: usrMobile }) }}\r\n </p>\r\n <p>\r\n {{ $t(\"youWillRecMsgVoiceLimitations\") }}\r\n </p>\r\n </template>\r\n </Tooltip>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport Tooltip from \"@/components/misc/Tooltip\";\r\nimport store from \"@/store\";\r\nimport apiVoice from \"@/api/v24/api.voice\";\r\nimport appSnackbar from \"@/util/appSnackbac\";\r\n\r\nexport default {\r\n name: \"TestVoiceText\",\r\n components: { Tooltip },\r\n\r\n props: {\r\n text: {\r\n required: true,\r\n type: String\r\n },\r\n voicePerson: {\r\n required: true,\r\n type: String\r\n }\r\n },\r\n\r\n data: () => ({\r\n usrMobile: \"\"\r\n }),\r\n\r\n created() {\r\n store.dispatch(\"updateUserProfile\").then(usrProfile => {\r\n this.usrMobile = usrProfile.Bruker.Mobilnr;\r\n });\r\n },\r\n\r\n methods: {\r\n sendVoiceMsg() {\r\n apiVoice\r\n .sendSingle(this.usrMobile, this.text, this.voicePerson)\r\n .then(() => {\r\n appSnackbar.setMessage(this.$t(\"testMessageSent\"));\r\n })\r\n .catch(() => {\r\n appSnackbar.setMessage(this.$t(\"testMessageFailed\"));\r\n });\r\n }\r\n }\r\n};\r\n</script>\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TestVoiceText.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TestVoiceText.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TestVoiceText.vue?vue&type=template&id=41c8f9ae&\"\nimport script from \"./TestVoiceText.vue?vue&type=script&lang=js&\"\nexport * from \"./TestVoiceText.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('v-select',{attrs:{\"items\":_vm.files,\"outlined\":\"\",\"label\":_vm.$t('chooseFile'),\"item-text\":\"FileName\",\"item-value\":\"FileId\",\"return-object\":\"\"},on:{\"change\":_vm.emitChange},scopedSlots:_vm._u([{key:\"item\",fn:function({ item }){return [_c('span',{staticClass:\"mr-6\"},[_vm._v(\" \"+_vm._s(item.Description)+\" \")]),_c('span',{staticClass:\"font-weight-light font-italic\"},[_vm._v(\" \"+_vm._s(item.FileName)+\" \")])]}}]),model:{value:(_vm.file),callback:function ($$v) {_vm.file=$$v},expression:\"file\"}})\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n <v-select\r\n :items=\"files\"\r\n v-model=\"file\"\r\n @change=\"emitChange\"\r\n outlined\r\n :label=\"$t('chooseFile')\"\r\n item-text=\"FileName\"\r\n item-value=\"FileId\"\r\n return-object\r\n >\r\n <template v-slot:item=\"{ item }\">\r\n <span class=\"mr-6\">\r\n {{ item.Description }}\r\n </span>\r\n <span class=\"font-weight-light font-italic\">\r\n {{ item.FileName }}\r\n </span>\r\n </template>\r\n </v-select>\r\n</template>\r\n\r\n<script>\r\nimport apiFile from \"@/api/v24/api.file\";\r\n\r\nexport default {\r\n name: \"FileSelect\",\r\n\r\n props: {\r\n typeAudio: {\r\n type: Boolean,\r\n default: true\r\n },\r\n initFileId: {\r\n type: String,\r\n default: \"\"\r\n }\r\n },\r\n\r\n data: () => ({\r\n files: [],\r\n file: null\r\n }),\r\n\r\n created() {\r\n const apiFileType = this.typeAudio ? \"A\" : \"E\";\r\n apiFile.getAll(apiFileType).then(res => {\r\n this.files = res.Files;\r\n if (this.initFileId) {\r\n this.file = this.files.find(file => file.FileId === this.initFileId);\r\n }\r\n });\r\n },\r\n\r\n methods: {\r\n emitChange() {\r\n this.$emit(\"change\", this.file);\r\n }\r\n }\r\n};\r\n</script>\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FileSelect.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FileSelect.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./FileSelect.vue?vue&type=template&id=46a2e2d2&\"\nimport script from \"./FileSelect.vue?vue&type=script&lang=js&\"\nexport * from \"./FileSelect.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","<template>\r\n <div v-bind:class=\"[enabled ? 'elevation-3 channel-panel' : 'mb-n6']\">\r\n <v-switch\r\n v-model=\"enabled\"\r\n @change=\"emitChange\"\r\n :label=\"$t('sendVoice')\"\r\n v-bind:class=\"[enabled ? 'mt-n1' : '']\"\r\n data-testid=\"sendVoice\"\r\n ></v-switch>\r\n <div v-if=\"enabled\">\r\n <VoiceSelect\r\n v-if=\"voiceProps\"\r\n :init-voice-props=\"voiceProps\"\r\n v-on:change=\"setVoiceProps\"\r\n data-testid=\"voiceSelectVoiceComposer\"\r\n />\r\n <v-textarea\r\n class=\"mb-n5\"\r\n v-model=\"text\"\r\n :label=\"$t('voiceText')\"\r\n outlined\r\n @change=\"emitChange\"\r\n data-testid=\"voiceText\"\r\n ></v-textarea>\r\n <TestVoiceText :text=\"text\" :voice-person=\"voiceProps.Name\" />\r\n <slot name=\"text-footer\">\r\n <v-btn\r\n outlined\r\n x-small\r\n v-if=\"voiceProps.Name === 'Liv'\"\r\n @click=\"showVoiceTips\"\r\n >\r\n {{ $t(\"tipsForVoiceMsg\") }}\r\n </v-btn>\r\n </slot>\r\n\r\n <v-row v-if=\"permissionFiles && showSoundFileOption\">\r\n <v-col cols=\"12\">\r\n <v-checkbox\r\n v-model=\"useAudioFile\"\r\n @change=\"useAudioFileChange\"\r\n :label=\"$t('useSoundFile')\"\r\n :hint=\"$t('useSoundFileHint')\"\r\n persistent-hint\r\n class=\"mb-4\"\r\n />\r\n </v-col>\r\n </v-row>\r\n\r\n <!-- v-if on dialogManageFiles is to force component destroy/create to\r\n fetch fresh data after dialogMangeFiles is closed -->\r\n <div v-if=\"useAudioFile && !dialogManageFiles\">\r\n <v-row>\r\n <v-col cols=\"10\">\r\n <FileSelect\r\n :key=\"fileSelectKey\"\r\n :init-file-id=\"audioFileId\"\r\n :type-audio=\"true\"\r\n v-on:change=\"setAudioFile($event.FileId)\"\r\n />\r\n </v-col>\r\n <v-col cols=\"2\" v-if=\"audioFileId\">\r\n <v-btn icon @click=\"dialogPlayback = true\" class=\"mt-2\" outlined>\r\n <v-icon>mdi-play</v-icon>\r\n </v-btn>\r\n </v-col>\r\n </v-row>\r\n\r\n <div>\r\n <v-btn @click=\"dialogRecord = true\" outlined small class=\"mr-2\">\r\n <v-icon small>\r\n mdi-microphone\r\n </v-icon>\r\n {{ $t(\"newRecording\") }}\r\n </v-btn>\r\n <v-btn @click=\"manageAudioFiles\" outlined small>\r\n {{ $t(\"manageFiles\") }}\r\n </v-btn>\r\n </div>\r\n <br /><br />\r\n </div>\r\n </div>\r\n\r\n <v-expansion-panels\r\n v-model=\"advancedOptPanel\"\r\n v-if=\"enabled\"\r\n class=\"mt-2\"\r\n data-testid=\"advancedVoiceComposer\"\r\n >\r\n <v-expansion-panel>\r\n <v-expansion-panel-header>\r\n {{ $t(\"advancedVoiceSettings\") }}\r\n </v-expansion-panel-header>\r\n <v-expansion-panel-content>\r\n <VoiceAttemptSelect v-model=\"attempts\" @change=\"emitChange\" />\r\n <div v-if=\"attempts\">\r\n <VoiceDelaySelect\r\n :init-value=\"delay\"\r\n v-on:change=\"setVoiceDelay\"\r\n data-testid=\"delayVoiceComposer\"\r\n />\r\n </div>\r\n <v-switch\r\n v-show=\"showDeputyOptions\"\r\n v-model=\"deputy\"\r\n @change=\"emitChange\"\r\n :label=\"$t('useDeputy')\"\r\n data-testid=\"useDeputyVoiceComposer\"\r\n ></v-switch>\r\n <div v-if=\"deputy\" class=\"mt-n4 text-body-2\">\r\n {{ $t(\"deputyUsageInfo\") }}\r\n </div>\r\n </v-expansion-panel-content>\r\n </v-expansion-panel>\r\n </v-expansion-panels>\r\n\r\n <v-dialog v-model=\"dialogVoiceTips\" :max-width=\"dialogWidth.medium\">\r\n <v-card>\r\n <v-card-title>\r\n {{ $t(\"tipsForVoiceMsg\") }}\r\n </v-card-title>\r\n <v-card-text>\r\n <v-alert type=\"warning\" outlined dense>\r\n {{ $t(\"thisOnlyAppliesToVoice\") }}\r\n \"Liv\" ({{ $t(\"norwegian\").toLowerCase() }} bokmÃ¥l)\r\n </v-alert>\r\n <v-simple-table>\r\n <template v-slot:default>\r\n <thead>\r\n <tr>\r\n <th class=\"text-left\">\r\n {{ $t(\"text\") }}\r\n </th>\r\n <th class=\"text-left\">\r\n {{ $t(\"pronounced\") }}\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr>\r\n <td>..</td>\r\n <td>\"punktum\"</td>\r\n </tr>\r\n <tr>\r\n <td>\"pause\"</td>\r\n <td>\r\n <i>{{ $t(\"insertsShortBreak\") }}</i>\r\n </td>\r\n </tr>\r\n <tr>\r\n <td>kl. 12:00</td>\r\n <td>\"klokka tolv null null\"</td>\r\n </tr>\r\n <tr>\r\n <td>\"09.04\"</td>\r\n <td>\"niende april\"</td>\r\n </tr>\r\n </tbody>\r\n </template>\r\n </v-simple-table>\r\n </v-card-text>\r\n <v-card-actions>\r\n <v-spacer />\r\n <v-btn @click=\"dialogVoiceTips = false\">{{ $t(\"close\") }}</v-btn>\r\n </v-card-actions>\r\n </v-card>\r\n </v-dialog>\r\n\r\n <v-dialog v-model=\"dialogManageFiles\" :max-width=\"dialogWidth.large\">\r\n <v-card>\r\n <v-card-title>\r\n {{ $t(\"manageFiles\") }}\r\n </v-card-title>\r\n <v-card-text>\r\n <FileManagement\r\n :key=\"fileAdminKey\"\r\n :is-audio-file=\"true\"\r\n :protected-files=\"protectedFiles\"\r\n />\r\n </v-card-text>\r\n <v-card-actions>\r\n <v-spacer />\r\n <v-btn @click=\"dialogManageFiles = false\">\r\n {{ $t(\"close\") }}\r\n </v-btn>\r\n </v-card-actions>\r\n </v-card>\r\n </v-dialog>\r\n\r\n <v-dialog\r\n v-model=\"dialogRecord\"\r\n v-if=\"dialogRecord\"\r\n :max-width=\"dialogWidth.medium\"\r\n >\r\n <AudioRecorder\r\n :save-and-use-btn=\"true\"\r\n v-on:cancel=\"dialogRecord = false\"\r\n v-on:done=\"setAudioFile\"\r\n />\r\n </v-dialog>\r\n\r\n <v-dialog\r\n v-model=\"dialogPlayback\"\r\n v-if=\"dialogPlayback\"\r\n :max-width=\"dialogWidth.small\"\r\n >\r\n <v-card>\r\n <v-card-title></v-card-title>\r\n <v-card-text class=\"text-center\">\r\n <AudioPlayback\r\n :audio-file-id=\"audioFileId\"\r\n :autoplay=\"true\"\r\n class=\"mt-6\"\r\n />\r\n </v-card-text>\r\n <v-card-actions>\r\n <v-spacer />\r\n <v-btn @click=\"dialogPlayback = false\">{{ $t(\"close\") }}</v-btn>\r\n </v-card-actions>\r\n </v-card>\r\n </v-dialog>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport VoiceSelect from \"@/components/alert/VoiceSelect\";\r\nimport VoiceAttemptSelect from \"@/components/alert/VoiceAttemptSelect\";\r\nimport VoiceDelaySelect from \"@/components/alert/VoiceDelaySelect\";\r\nimport TestVoiceText from \"@/components/composers/TestVoiceText\";\r\nimport config from \"@/config/config\";\r\nimport FileManagement from \"@/components/files/FileManagement\";\r\nimport FileSelect from \"@/components/files/FileSelect\";\r\nimport store from \"@/store\";\r\nimport AudioRecorder from \"@/components/files/AudioRecorder.vue\";\r\nimport AudioPlayback from \"@/components/files/AudioPlayback.vue\";\r\nimport configVoice from \"@/config/configVoice\";\r\nimport eventLogger from \"@/util/eventLogger\";\r\n\r\nexport default {\r\n name: \"VoiceComposer\",\r\n components: {\r\n AudioPlayback,\r\n AudioRecorder,\r\n FileSelect,\r\n FileManagement,\r\n TestVoiceText,\r\n VoiceDelaySelect,\r\n VoiceAttemptSelect,\r\n VoiceSelect\r\n },\r\n props: {\r\n initVoiceProps: {\r\n required: true\r\n },\r\n initEnabled: {\r\n default: false\r\n },\r\n initText: {\r\n default: \"\"\r\n },\r\n initAttempts: {\r\n default: 0\r\n },\r\n initDelay: {\r\n default: 5\r\n },\r\n initDeputy: {\r\n default: false\r\n },\r\n initPanelState: {\r\n default: null\r\n },\r\n showDeputyOptions: {\r\n default: true\r\n },\r\n showSoundFileOption: {\r\n default: false\r\n }\r\n },\r\n\r\n watch: {\r\n initText(newText) {\r\n this.text = newText;\r\n }\r\n },\r\n\r\n computed: {\r\n protectedFiles() {\r\n if (this.audioFileId) {\r\n return [this.audioFileId];\r\n }\r\n return [];\r\n },\r\n permissionFiles() {\r\n return store.state.userProfile?.Bruker._permissions.files;\r\n }\r\n },\r\n\r\n data: () => ({\r\n enabled: false,\r\n voiceProps: null,\r\n text: \"\",\r\n advancedOptPanel: null,\r\n attempts: 0,\r\n delay: 0,\r\n deputy: false,\r\n dialogVoiceTips: false,\r\n dialogManageFiles: false,\r\n dialogWidth: config.dialogWith,\r\n dialogRecord: false,\r\n dialogPlayback: false,\r\n useAudioFile: false,\r\n audioFileId: null,\r\n fileSelectKey: 0,\r\n fileAdminKey: 0\r\n }),\r\n\r\n created() {\r\n store.dispatch(\"updateUserProfile\");\r\n this.enabled = this.initEnabled;\r\n this.text = this.initText;\r\n this.attempts = this.initAttempts;\r\n this.delay = this.initDelay;\r\n this.deputy = this.initDeputy;\r\n this.advancedOptPanel = this.initPanelState;\r\n if (this.initVoiceProps?.Id) {\r\n this.voiceProps = this.initVoiceProps;\r\n } else {\r\n configVoice.getDefaultProps().then(props => {\r\n this.voiceProps = props;\r\n });\r\n }\r\n },\r\n\r\n methods: {\r\n showVoiceTips() {\r\n this.dialogVoiceTips = true;\r\n },\r\n setVoiceProps(voiceProps) {\r\n this.voiceProps = voiceProps;\r\n this.emitChange();\r\n },\r\n setVoiceDelay(delay) {\r\n this.delay = delay;\r\n this.emitChange();\r\n },\r\n setAudioFile(fileId) {\r\n this.dialogRecord = false;\r\n this.audioFileId = fileId;\r\n // Force component update\r\n this.fileSelectKey++;\r\n this.fileAdminKey++;\r\n\r\n this.emitChange();\r\n },\r\n manageAudioFiles() {\r\n this.dialogManageFiles = true;\r\n },\r\n useAudioFileChange() {\r\n if (!this.useAudioFile) {\r\n this.audioFileId = null;\r\n this.emitChange();\r\n }\r\n },\r\n emitChange() {\r\n if (this.audioFileId && !this.text) {\r\n // Workaround for issue where API insists on text even though file is set\r\n this.text = \" \";\r\n }\r\n this.$emit(\"change\", {\r\n enabled: this.enabled,\r\n text: this.text,\r\n voiceProps: this.voiceProps,\r\n advancedOptPanelState: this.advancedOptPanel,\r\n attempts: this.attempts,\r\n delay: this.delay,\r\n deputy: this.deputy,\r\n audioFile: this.audioFileId,\r\n // API supports \"confirmed\" (receiver presses key on phone) and\r\n // \"active\" (call get answered). We supported both initilally, but\r\n // are now forcing use of \"confirmed\" since \"active\" does not handle\r\n // voice mail (call flow stops when machine answers)\r\n endOnState: \"confirmed\"\r\n });\r\n }\r\n }\r\n};\r\n</script>\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./VoiceComposer.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./VoiceComposer.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./VoiceComposer.vue?vue&type=template&id=deb6f144&\"\nimport script from \"./VoiceComposer.vue?vue&type=script&lang=js&\"\nexport * from \"./VoiceComposer.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"caption mb-1\"},[_vm._v(\" \"+_vm._s(_vm.$t(\"write\"))+\" \"),_c('code',[_vm._v(_vm._s(_vm.tagName))]),_vm._v(\" \"+_vm._s(_vm.$t(\"toMergeRecNameIntoText\"))+\". \"),_c('Tooltip',{attrs:{\"placement\":\"left\"},scopedSlots:_vm._u([{key:\"content\",fn:function(){return [_c('div',[_vm._v(\" \"+_vm._s(_vm.$t(\"dynMergeInfo1\"))+\" \"),_c('br'),_c('pre',[_vm._v(_vm._s(_vm.$t(\"dynMergeInfo2\")))]),_vm._v(\" \"+_vm._s(_vm.$t(\"dynMergeInfo3\"))+\" \"),_c('pre',[_vm._v(_vm._s(_vm.$t(\"dynMergeInfo4\")))]),_vm._v(\" \"+_vm._s(_vm.$t(\"and\"))+\" \"),_c('pre',[_vm._v(_vm._s(_vm.$t(\"dynMergeInfo5\")))])])]},proxy:true}])})],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n <div class=\"caption mb-1 \">\r\n {{ $t(\"write\") }} <code>{{ tagName }}</code>\r\n {{ $t(\"toMergeRecNameIntoText\") }}.\r\n <Tooltip placement=\"left\">\r\n <template v-slot:content>\r\n <div>\r\n {{ $t(\"dynMergeInfo1\") }}\r\n <br />\r\n <pre>{{ $t(\"dynMergeInfo2\") }}</pre>\r\n {{ $t(\"dynMergeInfo3\") }}\r\n <pre>{{ $t(\"dynMergeInfo4\") }}</pre>\r\n {{ $t(\"and\") }}\r\n <pre>{{ $t(\"dynMergeInfo5\") }}</pre>\r\n </div>\r\n </template>\r\n </Tooltip>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport Tooltip from \"@/components/misc/Tooltip\";\r\nimport store from \"@/store\";\r\n\r\nexport default {\r\n name: \"DynamicTextInfo\",\r\n components: { Tooltip },\r\n computed: {\r\n tagName() {\r\n return store.state.tagName;\r\n }\r\n }\r\n};\r\n</script>\r\n<style scoped>\r\npre {\r\n margin: 16px;\r\n}\r\n</style>\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DynamicTextInfo.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DynamicTextInfo.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./DynamicTextInfo.vue?vue&type=template&id=069c4514&scoped=true&\"\nimport script from \"./DynamicTextInfo.vue?vue&type=script&lang=js&\"\nexport * from \"./DynamicTextInfo.vue?vue&type=script&lang=js&\"\nimport style0 from \"./DynamicTextInfo.vue?vue&type=style&index=0&id=069c4514&prod&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"069c4514\",\n null\n \n)\n\nexport default component.exports","import api from \"@/api/v24/api\";\r\nimport config from \"@/config/config\";\r\n\r\nconst apiEmail = {\r\n /**\r\n * @name send\r\n * @param senderName\r\n * @param subject\r\n * @param body\r\n * @param recipients Array with objects of type\r\n {\r\n Email: \"\",\r\n Name: \"\"\r\n }\r\n * @returns {Promise | Promise<unknown>}\r\n */\r\n send(senderName, subject, body, recipients) {\r\n const params = {\r\n Sender: config.defaultEmailSenderAddr,\r\n SenderName: senderName,\r\n Messages: [\r\n {\r\n Title: subject,\r\n Content: body,\r\n Simulation: false,\r\n SpamFilter: 0,\r\n Recipients: recipients\r\n }\r\n ]\r\n };\r\n return new Promise((resolve, reject) => {\r\n api.execute(\"SendEmail\", params).then(res => {\r\n if (res.Status === \"1 messages queued for sending\") {\r\n resolve();\r\n } else {\r\n reject();\r\n }\r\n });\r\n });\r\n }\r\n};\r\n\r\nexport default apiEmail;\r\n","import './VTooltip.sass'\n\n// Mixins\nimport Activatable from '../../mixins/activatable'\nimport Colorable from '../../mixins/colorable'\nimport Delayable from '../../mixins/delayable'\nimport Dependent from '../../mixins/dependent'\nimport Menuable from '../../mixins/menuable'\n\n// Helpers\nimport { convertToUnit, keyCodes, getSlotType } from '../../util/helpers'\nimport { consoleError } from '../../util/console'\n\n// Types\nimport { VNode } from 'vue'\nimport mixins from '../../util/mixins'\n\n/* @vue/component */\nexport default mixins(Colorable, Delayable, Dependent, Menuable).extend({\n name: 'v-tooltip',\n\n props: {\n closeDelay: {\n type: [Number, String],\n default: 0,\n },\n disabled: Boolean,\n openDelay: {\n type: [Number, String],\n default: 0,\n },\n openOnHover: {\n type: Boolean,\n default: true,\n },\n openOnFocus: {\n type: Boolean,\n default: true,\n },\n tag: {\n type: String,\n default: 'span',\n },\n transition: String,\n },\n\n data: () => ({\n calculatedMinWidth: 0,\n closeDependents: false,\n }),\n\n computed: {\n calculatedLeft (): string {\n const { activator, content } = this.dimensions\n const unknown = !this.bottom && !this.left && !this.top && !this.right\n const activatorLeft = this.attach !== false ? activator.offsetLeft : activator.left\n let left = 0\n\n if (this.top || this.bottom || unknown) {\n left = (\n activatorLeft +\n (activator.width / 2) -\n (content.width / 2)\n )\n } else if (this.left || this.right) {\n left = (\n activatorLeft +\n (this.right ? activator.width : -content.width) +\n (this.right ? 10 : -10)\n )\n }\n\n if (this.nudgeLeft) left -= parseInt(this.nudgeLeft)\n if (this.nudgeRight) left += parseInt(this.nudgeRight)\n\n return `${this.calcXOverflow(left, this.dimensions.content.width)}px`\n },\n calculatedTop (): string {\n const { activator, content } = this.dimensions\n const activatorTop = this.attach !== false ? activator.offsetTop : activator.top\n let top = 0\n\n if (this.top || this.bottom) {\n top = (\n activatorTop +\n (this.bottom ? activator.height : -content.height) +\n (this.bottom ? 10 : -10)\n )\n } else if (this.left || this.right) {\n top = (\n activatorTop +\n (activator.height / 2) -\n (content.height / 2)\n )\n }\n\n if (this.nudgeTop) top -= parseInt(this.nudgeTop)\n if (this.nudgeBottom) top += parseInt(this.nudgeBottom)\n if (this.attach === false) top += this.pageYOffset\n\n return `${this.calcYOverflow(top)}px`\n },\n classes (): object {\n return {\n 'v-tooltip--top': this.top,\n 'v-tooltip--right': this.right,\n 'v-tooltip--bottom': this.bottom,\n 'v-tooltip--left': this.left,\n 'v-tooltip--attached':\n this.attach === '' ||\n this.attach === true ||\n this.attach === 'attach',\n }\n },\n computedTransition (): string {\n if (this.transition) return this.transition\n\n return this.isActive ? 'scale-transition' : 'fade-transition'\n },\n offsetY (): boolean {\n return this.top || this.bottom\n },\n offsetX (): boolean {\n return this.left || this.right\n },\n styles (): object {\n return {\n left: this.calculatedLeft,\n maxWidth: convertToUnit(this.maxWidth),\n minWidth: convertToUnit(this.minWidth),\n top: this.calculatedTop,\n zIndex: this.zIndex || this.activeZIndex,\n }\n },\n },\n\n beforeMount () {\n this.$nextTick(() => {\n this.value && this.callActivate()\n })\n },\n\n mounted () {\n if (getSlotType(this, 'activator', true) === 'v-slot') {\n consoleError(`v-tooltip's activator slot must be bound, try '<template #activator=\"data\"><v-btn v-on=\"data.on>'`, this)\n }\n },\n\n methods: {\n activate () {\n // Update coordinates and dimensions of menu\n // and its activator\n this.updateDimensions()\n // Start the transition\n requestAnimationFrame(this.startTransition)\n },\n deactivate () {\n this.runDelay('close')\n },\n genActivatorListeners () {\n const listeners = Activatable.options.methods.genActivatorListeners.call(this)\n\n if (this.openOnFocus) {\n listeners.focus = (e: Event) => {\n this.getActivator(e)\n this.runDelay('open')\n }\n listeners.blur = (e: Event) => {\n this.getActivator(e)\n this.runDelay('close')\n }\n }\n\n listeners.keydown = (e: KeyboardEvent) => {\n if (e.keyCode === keyCodes.esc) {\n this.getActivator(e)\n this.runDelay('close')\n }\n }\n\n return listeners\n },\n genActivatorAttributes () {\n return {\n 'aria-haspopup': true,\n 'aria-expanded': String(this.isActive),\n }\n },\n genTransition () {\n const content = this.genContent()\n\n if (!this.computedTransition) return content\n\n return this.$createElement('transition', {\n props: {\n name: this.computedTransition,\n },\n }, [content])\n },\n genContent () {\n return this.$createElement(\n 'div',\n this.setBackgroundColor(this.color, {\n staticClass: 'v-tooltip__content',\n class: {\n [this.contentClass]: true,\n menuable__content__active: this.isActive,\n 'v-tooltip__content--fixed': this.activatorFixed,\n },\n style: this.styles,\n attrs: this.getScopeIdAttrs(),\n directives: [{\n name: 'show',\n value: this.isContentActive,\n }],\n ref: 'content',\n }),\n this.getContentSlot()\n )\n },\n },\n\n render (h): VNode {\n return h(this.tag, {\n staticClass: 'v-tooltip',\n class: this.classes,\n }, [\n this.showLazyContent(() => [this.genTransition()]),\n this.genActivator(),\n ])\n },\n})\n","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AlertTemplateDetails.vue?vue&type=style&index=0&id=7e31f40f&prod&scoped=true&lang=css&\"","// Components\nimport VExpansionPanel from './VExpansionPanel'\nimport { VExpandTransition } from '../transitions'\n\n// Mixins\nimport Bootable from '../../mixins/bootable'\nimport Colorable from '../../mixins/colorable'\nimport { inject as RegistrableInject } from '../../mixins/registrable'\n\n// Utilities\nimport { getSlot } from '../../util/helpers'\nimport mixins, { ExtractVue } from '../../util/mixins'\n\n// Types\nimport Vue, { VNode, VueConstructor } from 'vue'\n\nconst baseMixins = mixins(\n Bootable,\n Colorable,\n RegistrableInject<'expansionPanel', VueConstructor<Vue>>('expansionPanel', 'v-expansion-panel-content', 'v-expansion-panel')\n)\n\ninterface options extends ExtractVue<typeof baseMixins> {\n expansionPanel: InstanceType<typeof VExpansionPanel>\n}\n\n/* @vue/component */\nexport default baseMixins.extend<options>().extend({\n name: 'v-expansion-panel-content',\n\n data: () => ({\n isActive: false,\n }),\n\n computed: {\n parentIsActive (): boolean {\n return this.expansionPanel.isActive\n },\n },\n\n watch: {\n parentIsActive: {\n immediate: true,\n handler (val, oldVal) {\n if (val) this.isBooted = true\n\n if (oldVal == null) this.isActive = val\n else this.$nextTick(() => this.isActive = val)\n },\n },\n },\n\n created () {\n this.expansionPanel.registerContent(this)\n },\n\n beforeDestroy () {\n this.expansionPanel.unregisterContent()\n },\n\n render (h): VNode {\n return h(VExpandTransition, this.showLazyContent(() => [\n h('div', this.setBackgroundColor(this.color, {\n staticClass: 'v-expansion-panel-content',\n directives: [{\n name: 'show',\n value: this.isActive,\n }],\n }), [\n h('div', { class: 'v-expansion-panel-content__wrap' }, getSlot(this)),\n ]),\n ]))\n },\n})\n","// Directives\nimport ripple from '../../directives/ripple'\n\n// Types\nimport Vue, { VNode, VNodeData, VNodeDirective } from 'vue'\n\nexport default Vue.extend({\n name: 'rippleable',\n\n directives: { ripple },\n\n props: {\n ripple: {\n type: [Boolean, Object],\n default: true,\n },\n },\n\n methods: {\n genRipple (data: VNodeData = {}): VNode | null {\n if (!this.ripple) return null\n\n data.staticClass = 'v-input--selection-controls__ripple'\n\n data.directives = data.directives || []\n data.directives.push({\n name: 'ripple',\n value: { center: true },\n } as VNodeDirective)\n\n return this.$createElement('div', data)\n },\n },\n})\n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('v-container',[_c('v-row',[_c('v-col',{attrs:{\"cols\":\"12\",\"align\":\"center\",\"justify\":\"center\"}},[_c('v-card',{attrs:{\"id\":\"card\"}},[_c('v-card-title',[_vm._v(\" \"+_vm._s(_vm.$t(\"alertTemplates\"))+\" \")]),_c('v-card-text',[_c('v-col',{staticClass:\"text-end\",attrs:{\"cols\":\"12\"}},[_c('v-btn',{attrs:{\"data-testid\":\"newAlertTemplate\"},on:{\"click\":_vm.setEmptyTemplate}},[_c('v-icon',{attrs:{\"left\":\"\"}},[_vm._v(\"mdi-plus\")]),_vm._v(\" \"+_vm._s(_vm.$t(\"newTemplate\"))+\" \")],1)],1),_c('v-text-field',{attrs:{\"label\":_vm.$t('search'),\"data-testid\":\"searchAlertTemplates\"},model:{value:(_vm.search),callback:function ($$v) {_vm.search=$$v},expression:\"search\"}}),_c('DataTable',{attrs:{\"items\":_vm.templates,\"headers\":_vm.listHeaders,\"search\":_vm.search,\"custom-filter\":_vm.filterList},scopedSlots:_vm._u([{key:\"item.actions\",fn:function({ item }){return [_c('div',{staticClass:\"text-end\"},[_c('v-btn',{attrs:{\"outlined\":\"\"},on:{\"click\":function($event){return _vm.setTemplate(item)}}},[_c('v-icon',{attrs:{\"left\":\"\",\"small\":\"\"}},[_vm._v(\" mdi-eye \")]),_vm._v(\" \"+_vm._s(_vm.$t(\"vis\"))+\" \")],1)],1)]}}])})],1)],1)],1),_c('v-col',{attrs:{\"cols\":\"12\",\"md\":\"8\",\"sm\":\"12\"}},[(_vm.template)?_c('v-dialog',{attrs:{\"persistent\":\"\",\"max-width\":_vm.maxDialogWidth,\"maxlength\":\"50\"},model:{value:(_vm.dialogDetails),callback:function ($$v) {_vm.dialogDetails=$$v},expression:\"dialogDetails\"}},[_c('AlertTemplateDetails',{attrs:{\"in-template\":_vm.template},on:{\"close\":function($event){return _vm.toggleDetails(false)}}})],1):_vm._e()],1)],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',[(_vm.template)?_c('v-form',{attrs:{\"autocomplete\":\"off\"},model:{value:(_vm.formValid),callback:function ($$v) {_vm.formValid=$$v},expression:\"formValid\"}},[_c('v-card',[_c('v-card-title',[_vm._v(\" \"+_vm._s(_vm.template.name)+\" \")]),_c('v-card-text',[(_vm.template)?_c('div',[_c('v-text-field',{attrs:{\"rules\":_vm.validationRules.requiredRule,\"outlined\":\"\",\"label\":_vm.$t('templateName'),\"autofocus\":\"\",\"maxlength\":\"50\",\"data-testid\":\"nameAlertTemplateDetails\"},model:{value:(_vm.template.name),callback:function ($$v) {_vm.$set(_vm.template, \"name\", (typeof $$v === 'string'? $$v.trim(): $$v))},expression:\"template.name\"}}),_c('DepartmentSelect',{attrs:{\"init-department\":_vm.selectedDepartment,\"dense\":true,\"data-testid\":\"departmentSelectAlertTemplateDetails\"},on:{\"change\":_vm.setDepartment}}),_c('SmsComposer',{attrs:{\"init-enabled\":_vm.useSms,\"init-text\":_vm.template.text.sms,\"hide-sms-sender\":true,\"data-testid\":\"smsComposerAlertTemplateDetails\"},on:{\"change\":_vm.setSms}}),_c('EmailComposer',{attrs:{\"init-enabled\":_vm.useEmail,\"init-title\":_vm.template.emailTitle,\"init-text\":_vm.template.text.email,\"hide-attachment-feature\":true,\"data-testid\":\"emailComposerAlertTemplateDetails\"},on:{\"change\":_vm.setEmail}}),_c('VoiceComposer',{attrs:{\"init-enabled\":_vm.useVoice,\"init-voice-props\":_vm.template.voiceSettings.voiceProps,\"init-text\":_vm.template.text.voice,\"init-attempts\":_vm.template.voiceSettings.attempts,\"init-delay\":_vm.template.voiceSettings.delay,\"init-deputy\":_vm.template.voiceSettings.deputy,\"data-testid\":\"voiceComposerAlertTemplateDetails\"},on:{\"change\":_vm.setVoice}}),_c('v-text-field',{staticClass:\"mt-6\",attrs:{\"maxlength\":\"50\",\"outlined\":\"\",\"label\":_vm.alertNameLabel,\"data-testid\":\"alertNameAlertTemplateDetails\"},model:{value:(_vm.template.alertName),callback:function ($$v) {_vm.$set(_vm.template, \"alertName\", (typeof $$v === 'string'? $$v.trim(): $$v))},expression:\"template.alertName\"}}),_c('br'),_c('v-card',{staticClass:\"res-opt\"},[_c('v-card-title',[_vm._v(\" \"+_vm._s(_vm.$t(\"responseOptions\"))+\" \")]),_c('v-card-text',[_vm._l((_vm.template.responseOptions),function(res){return _c('div',[_c('ResponseChip',{attrs:{\"text\":res.text,\"number\":res.number}})],1)}),(!_vm.atLeastOneResponseOptionIsSet())?_c('div',[_vm._v(\" \"+_vm._s(_vm.$t(\"none\"))+\" \")]):_vm._e(),_c('v-dialog',{attrs:{\"width\":\"500\",\"scrollable\":\"\",\"persistent\":\"\"},model:{value:(_vm.dialogResponse),callback:function ($$v) {_vm.dialogResponse=$$v},expression:\"dialogResponse\"}},[_c('ResponseOptionsComposer',{attrs:{\"responses\":_vm.responsCreatorResponses},on:{\"done\":_vm.setResponses}})],1)],2),_c('v-card-actions',[_c('v-btn',{attrs:{\"data-testid\":\"editResponseOptionsAlertTemplateDetails\"},on:{\"click\":_vm.showResponseDialog}},[_vm._v(\" \"+_vm._s(_vm.$t(\"edit\"))+\" \")])],1)],1)],1):_vm._e()]),(_vm.template)?_c('v-card-actions',[_c('v-container',{attrs:{\"fluid\":\"\"}},[_c('v-row',[_c('v-col',{attrs:{\"cols\":\"12\",\"sm\":\"6\",\"xs\":\"6\"}},[(_vm.template.id)?_c('v-btn',{staticClass:\"error mt-4\",attrs:{\"small\":\"\",\"data-testid\":\"deleteAlertTemplateDetails\",\"block\":_vm.$vuetify.breakpoint.xs},on:{\"click\":function($event){_vm.dialogDelete = true}}},[_vm._v(\" \"+_vm._s(_vm.$t(\"deleteTemplate\"))+\" \")]):_vm._e()],1),_c('v-col',{attrs:{\"cols\":\"12\",\"sm\":\"6\",\"xs\":\"6\",\"align\":\"right\"}},[_c('v-spacer'),_c('v-btn',{staticClass:\"mt-2\",attrs:{\"block\":_vm.$vuetify.breakpoint.xs},on:{\"click\":_vm.emitClose}},[_vm._v(\" \"+_vm._s(_vm.$t(\"cancel\"))+\" \")]),(!_vm.$vuetify.breakpoint.xs)?_c('span',{staticClass:\"ml-2\"}):_vm._e(),_c('v-btn',{staticClass:\"primary mt-2\",attrs:{\"disabled\":!_vm.formValid || !_vm.smsLengthValid || !_vm.smsTextValid,\"data-testid\":\"SaveAlertTemplateDetails\",\"block\":_vm.$vuetify.breakpoint.xs},on:{\"click\":_vm.save}},[_vm._v(\" \"+_vm._s(_vm.$t(\"save\"))+\" \")])],1)],1)],1)],1):_vm._e()],1)],1):_vm._e(),_c('v-dialog',{attrs:{\"max-width\":\"550\"},model:{value:(_vm.dialogDelete),callback:function ($$v) {_vm.dialogDelete=$$v},expression:\"dialogDelete\"}},[_c('UserConfirm',{attrs:{\"text\":_vm.$t('deleteAlertTempl?')},on:{\"cancel\":function($event){_vm.dialogDelete = false},\"ok\":_vm.deleteTemplate}})],1),_c('span',{staticClass:\"channel-panel\",staticStyle:{\"display\":\"none\"}})],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n <div>\r\n <v-form autocomplete=\"off\" v-model=\"formValid\" v-if=\"template\">\r\n <v-card>\r\n <v-card-title>\r\n {{ template.name }}\r\n </v-card-title>\r\n <v-card-text>\r\n <div v-if=\"template\">\r\n <v-text-field\r\n v-model.trim=\"template.name\"\r\n :rules=\"validationRules.requiredRule\"\r\n outlined\r\n :label=\"$t('templateName')\"\r\n autofocus\r\n maxlength=\"50\"\r\n data-testid=\"nameAlertTemplateDetails\"\r\n />\r\n\r\n <DepartmentSelect\r\n :init-department=\"selectedDepartment\"\r\n :dense=\"true\"\r\n v-on:change=\"setDepartment\"\r\n data-testid=\"departmentSelectAlertTemplateDetails\"\r\n />\r\n\r\n <SmsComposer\r\n :init-enabled=\"useSms\"\r\n :init-text=\"template.text.sms\"\r\n :hide-sms-sender=\"true\"\r\n v-on:change=\"setSms\"\r\n data-testid=\"smsComposerAlertTemplateDetails\"\r\n />\r\n\r\n <EmailComposer\r\n :init-enabled=\"useEmail\"\r\n :init-title=\"template.emailTitle\"\r\n :init-text=\"template.text.email\"\r\n :hide-attachment-feature=\"true\"\r\n v-on:change=\"setEmail\"\r\n data-testid=\"emailComposerAlertTemplateDetails\"\r\n />\r\n\r\n <VoiceComposer\r\n :init-enabled=\"useVoice\"\r\n :init-voice-props=\"template.voiceSettings.voiceProps\"\r\n :init-text=\"template.text.voice\"\r\n :init-attempts=\"template.voiceSettings.attempts\"\r\n :init-delay=\"template.voiceSettings.delay\"\r\n :init-deputy=\"template.voiceSettings.deputy\"\r\n v-on:change=\"setVoice\"\r\n data-testid=\"voiceComposerAlertTemplateDetails\"\r\n />\r\n\r\n <v-text-field\r\n class=\"mt-6\"\r\n maxlength=\"50\"\r\n v-model.trim=\"template.alertName\"\r\n outlined\r\n :label=\"alertNameLabel\"\r\n data-testid=\"alertNameAlertTemplateDetails\"\r\n />\r\n\r\n <br />\r\n <v-card class=\"res-opt\">\r\n <v-card-title>\r\n {{ $t(\"responseOptions\") }}\r\n </v-card-title>\r\n <v-card-text>\r\n <div v-for=\"res in template.responseOptions\">\r\n <ResponseChip :text=\"res.text\" :number=\"res.number\" />\r\n </div>\r\n <div v-if=\"!atLeastOneResponseOptionIsSet()\">\r\n {{ $t(\"none\") }}\r\n </div>\r\n <v-dialog\r\n v-model=\"dialogResponse\"\r\n width=\"500\"\r\n scrollable\r\n persistent\r\n >\r\n <ResponseOptionsComposer\r\n :responses=\"responsCreatorResponses\"\r\n v-on:done=\"setResponses\"\r\n />\r\n </v-dialog>\r\n </v-card-text>\r\n <v-card-actions>\r\n <v-btn\r\n @click=\"showResponseDialog\"\r\n data-testid=\"editResponseOptionsAlertTemplateDetails\"\r\n >\r\n {{ $t(\"edit\") }}\r\n </v-btn>\r\n </v-card-actions>\r\n </v-card>\r\n </div>\r\n </v-card-text>\r\n <v-card-actions v-if=\"template\">\r\n <v-container fluid>\r\n <v-row>\r\n <v-col cols=\"12\" sm=\"6\" xs=\"6\">\r\n <v-btn\r\n v-if=\"template.id\"\r\n class=\"error mt-4\"\r\n @click=\"dialogDelete = true\"\r\n small\r\n data-testid=\"deleteAlertTemplateDetails\"\r\n :block=\"$vuetify.breakpoint.xs\"\r\n >\r\n {{ $t(\"deleteTemplate\") }}\r\n </v-btn>\r\n </v-col>\r\n <v-col cols=\"12\" sm=\"6\" xs=\"6\" align=\"right\">\r\n <v-spacer />\r\n <v-btn\r\n @click=\"emitClose\"\r\n :block=\"$vuetify.breakpoint.xs\"\r\n class=\"mt-2\"\r\n >\r\n {{ $t(\"cancel\") }}\r\n </v-btn>\r\n <span v-if=\"!$vuetify.breakpoint.xs\" class=\"ml-2\" />\r\n <v-btn\r\n class=\"primary mt-2\"\r\n @click=\"save\"\r\n :disabled=\"!formValid || !smsLengthValid || !smsTextValid\"\r\n data-testid=\"SaveAlertTemplateDetails\"\r\n :block=\"$vuetify.breakpoint.xs\"\r\n >\r\n {{ $t(\"save\") }}\r\n </v-btn>\r\n </v-col>\r\n </v-row>\r\n </v-container>\r\n </v-card-actions>\r\n </v-card>\r\n </v-form>\r\n <v-dialog v-model=\"dialogDelete\" max-width=\"550\">\r\n <UserConfirm\r\n :text=\"$t('deleteAlertTempl?')\"\r\n v-on:cancel=\"dialogDelete = false\"\r\n v-on:ok=\"deleteTemplate\"\r\n />\r\n </v-dialog>\r\n <!-- Just to please IntellJ IDE inspection -->\r\n <span style=\"display: none\" class=\"channel-panel\"></span>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport configVoice from \"@/config/configVoice\";\r\nimport apiAlertTemplates from \"@/api/v24/apiAlertTemplates\";\r\nimport store from \"@/store\";\r\nimport formValidationRules from \"@/util/formValidationRules\";\r\nimport VoiceComposer from \"@/components/composers/VoiceComposer\";\r\nimport EmailComposer from \"@/components/composers/EmailComposer\";\r\nimport SmsComposer from \"@/components/composers/SmsComposer\";\r\nimport UserConfirm from \"@/components/misc/UserConfirm\";\r\nimport ResponseChip from \"@/components/alert/ResponseChip\";\r\nimport ResponseOptionsComposer from \"@/components/alert/ResponseOptionsComposer\";\r\nimport ResponsePreview from \"@/components/misc/ResponsePreview\";\r\nimport objectUtil from \"@/util/objectUtil\";\r\nimport alertResponseOptions from \"@/util/alertResponseOptions\";\r\nimport user from \"@/util/user\";\r\nimport DepartmentSelect from \"@/components/departments/DepartmentSelect\";\r\n\r\nexport default {\r\n name: \"AlertTemplateDetails\",\r\n components: {\r\n DepartmentSelect,\r\n VoiceComposer,\r\n EmailComposer,\r\n SmsComposer,\r\n UserConfirm,\r\n ResponseChip,\r\n ResponseOptionsComposer,\r\n ResponsePreview\r\n },\r\n\r\n props: {\r\n inTemplate: {\r\n type: Object,\r\n required: true\r\n }\r\n },\r\n\r\n computed: {\r\n alertNameLabel() {\r\n return (\r\n this.$t(\"alertName\") + \" (\" + this.$t(\"optional\").toLowerCase() + \")\"\r\n );\r\n },\r\n userIsAdmin() {\r\n return store.getters.getUserIsAdmin;\r\n }\r\n },\r\n\r\n data: () => ({\r\n template: null,\r\n dialogResponse: false,\r\n responsCreatorResponses: null,\r\n requestedTemplate: null,\r\n formValid: false,\r\n validationRules: formValidationRules,\r\n smsLengthValid: true,\r\n smsTextValid: true,\r\n orgTemplate: null,\r\n useSms: false,\r\n useEmail: false,\r\n useVoice: false,\r\n dialogDelete: false,\r\n selectedDepartment: \"\"\r\n }),\r\n\r\n watch: {\r\n inTemplate: {\r\n immediate: true,\r\n handler() {\r\n this.template = objectUtil.deepClone(this.inTemplate);\r\n this.responsCreatorResponses = alertResponseOptions.createResponseOptArrayFromTemplate(\r\n this.template\r\n );\r\n if (this.template.department) {\r\n this.selectedDepartment = this.template.department;\r\n } else {\r\n user.getDepartmentForItemSave().then(department => {\r\n this.selectedDepartment = department;\r\n });\r\n }\r\n\r\n this.useSms = !!this.template.text.sms;\r\n this.useEmail = !!this.template.text.email;\r\n this.useVoice = !!this.template.text.voice;\r\n }\r\n }\r\n },\r\n\r\n methods: {\r\n showResponseDialog() {\r\n this.dialogResponse = true;\r\n },\r\n setSms(smsSettings) {\r\n this.useSms = smsSettings.enabled;\r\n this.template.text.sms = this.useSms ? smsSettings.text : \"\";\r\n this.smsLengthValid = smsSettings.lengthValid;\r\n this.smsTextValid = smsSettings.textValid;\r\n },\r\n setEmail(emailSettings) {\r\n this.useEmail = emailSettings.enabled;\r\n this.template.text.email = this.useEmail ? emailSettings.text : \"\";\r\n this.template.emailTitle = this.useEmail ? emailSettings.title : \"\";\r\n },\r\n setVoice(voiceSettings) {\r\n this.useVoice = voiceSettings.enabled;\r\n let vs = this.template.voiceSettings;\r\n if (this.useVoice) {\r\n this.template.text.voice = voiceSettings.text;\r\n vs.attempts = voiceSettings.attempts;\r\n vs.delay = voiceSettings.delay;\r\n vs.deputy = voiceSettings.deputy;\r\n vs.endOnState = voiceSettings.endOnState;\r\n vs.voiceProps = voiceSettings.voiceProps;\r\n } else {\r\n this.template.text.voice = \"\";\r\n vs.attempts = configVoice.defaultSetting.attempts;\r\n vs.delay = configVoice.defaultSetting.delay;\r\n vs.deputy = configVoice.defaultSetting.deputy;\r\n vs.endOnState = configVoice.defaultSetting.endOnState;\r\n vs.voiceProps = null;\r\n }\r\n },\r\n atLeastOneResponseOptionIsSet() {\r\n let i = 0;\r\n const len = this.template.responseOptions.length;\r\n for (i; i < len; i++) {\r\n if (this.template.responseOptions[i].text) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n },\r\n setResponses(responseOpts) {\r\n this.responsCreatorResponses = responseOpts;\r\n const updatedTemplateResponses = [];\r\n responseOpts.forEach(rcr => {\r\n updatedTemplateResponses.push({\r\n number: rcr.num,\r\n text: rcr.value ? rcr.value : rcr.customValue,\r\n link: rcr.link\r\n });\r\n });\r\n this.template.responseOptions = updatedTemplateResponses;\r\n this.dialogResponse = false;\r\n },\r\n setDepartment(departmentId) {\r\n this.selectedDepartment = departmentId;\r\n },\r\n deleteTemplate() {\r\n apiAlertTemplates.delete(this.template).then(() => {\r\n this.dialogDelete = false;\r\n store.dispatch(\"updateAlertTemplates\");\r\n store.commit(\"setAppSnackbar\", this.$t(\"alertTemplateDeleted\"));\r\n this.emitClose();\r\n });\r\n },\r\n save() {\r\n let promise;\r\n if (!this.template.id) {\r\n promise = apiAlertTemplates.create(\r\n this.template,\r\n this.selectedDepartment\r\n );\r\n } else {\r\n promise = apiAlertTemplates.update(\r\n this.template,\r\n this.selectedDepartment\r\n );\r\n }\r\n promise.then(() => {\r\n store.dispatch(\"updateAlertTemplates\");\r\n store.commit(\"setAppSnackbar\", this.$t(\"alertTemplateSaved\"));\r\n this.emitClose();\r\n });\r\n },\r\n emitClose() {\r\n this.template = null;\r\n this.$emit(\"close\");\r\n }\r\n }\r\n};\r\n</script>\r\n<style scoped>\r\n.res-opt {\r\n max-width: 500px;\r\n}\r\n.channel-panel {\r\n border-radius: 4px;\r\n padding: 12px;\r\n margin-bottom: 12px;\r\n margin-top: 12px;\r\n}\r\n</style>\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AlertTemplateDetails.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AlertTemplateDetails.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AlertTemplateDetails.vue?vue&type=template&id=7e31f40f&scoped=true&\"\nimport script from \"./AlertTemplateDetails.vue?vue&type=script&lang=js&\"\nexport * from \"./AlertTemplateDetails.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AlertTemplateDetails.vue?vue&type=style&index=0&id=7e31f40f&prod&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"7e31f40f\",\n null\n \n)\n\nexport default component.exports","<template>\r\n <v-container>\r\n <v-row>\r\n <v-col cols=\"12\" align=\"center\" justify=\"center\">\r\n <v-card id=\"card\">\r\n <v-card-title>\r\n {{ $t(\"alertTemplates\") }}\r\n </v-card-title>\r\n <v-card-text>\r\n <v-col cols=\"12\" class=\"text-end\">\r\n <v-btn @click=\"setEmptyTemplate\" data-testid=\"newAlertTemplate\">\r\n <v-icon left>mdi-plus</v-icon>\r\n {{ $t(\"newTemplate\") }}\r\n </v-btn>\r\n </v-col>\r\n <v-text-field\r\n :label=\"$t('search')\"\r\n v-model=\"search\"\r\n data-testid=\"searchAlertTemplates\"\r\n />\r\n <DataTable\r\n :items=\"templates\"\r\n :headers=\"listHeaders\"\r\n :search=\"search\"\r\n :custom-filter=\"filterList\"\r\n >\r\n <template v-slot:item.actions=\"{ item }\">\r\n <div class=\"text-end\">\r\n <v-btn outlined @click=\"setTemplate(item)\">\r\n <v-icon left small>\r\n mdi-eye\r\n </v-icon>\r\n {{ $t(\"vis\") }}\r\n </v-btn>\r\n </div>\r\n </template>\r\n </DataTable>\r\n </v-card-text>\r\n </v-card>\r\n </v-col>\r\n <v-col cols=\"12\" md=\"8\" sm=\"12\">\r\n <v-dialog\r\n v-model=\"dialogDetails\"\r\n v-if=\"template\"\r\n persistent\r\n :max-width=\"maxDialogWidth\"\r\n maxlength=\"50\"\r\n >\r\n <AlertTemplateDetails\r\n :in-template=\"template\"\r\n v-on:close=\"toggleDetails(false)\"\r\n />\r\n </v-dialog>\r\n </v-col>\r\n </v-row>\r\n </v-container>\r\n</template>\r\n\r\n<script>\r\nimport store from \"@/store\";\r\nimport configVoice from \"@/config/configVoice\";\r\nimport AlertTemplateDetails from \"@/components/alertTemplates/AlertTemplateDetails\";\r\nimport AlertTemplate from \"@/util/AlertTemplate\";\r\nimport config from \"@/config/config\";\r\nimport search from \"@/util/search\";\r\nimport DataTable from \"@/components/dataTable/DataTable.vue\";\r\n\r\nexport default {\r\n name: \"AlertTemplates\",\r\n components: { DataTable, AlertTemplateDetails },\r\n computed: {\r\n listHeaders() {\r\n let headers = [{ text: this.$t(\"name\"), value: \"name\" }];\r\n if (store.getters.getShowDepartmentInfoInLists) {\r\n headers.push({\r\n text: this.$t(\"department\"),\r\n value: \"departmentName\"\r\n });\r\n }\r\n headers.push({ text: \"\", value: \"actions\" });\r\n return headers;\r\n },\r\n templates() {\r\n return store.state.alertTemplates;\r\n }\r\n },\r\n\r\n data: () => ({\r\n search: \"\",\r\n template: null,\r\n dialogDetails: false,\r\n maxDialogWidth: config.dialogWith.xLarge,\r\n tblFooterProps: {\r\n itemsPerPageOptions: config.fixedTblItemsPerPageOptions\r\n }\r\n }),\r\n\r\n created() {\r\n store.dispatch(\"updateAlertTemplates\");\r\n },\r\n\r\n methods: {\r\n filterList(value, query) {\r\n return search.whitespaceAsWildcard(value, query);\r\n },\r\n setTemplate(template) {\r\n const __setTemplate = template => {\r\n this.template = template;\r\n this.toggleDetails(true);\r\n };\r\n this.template = null;\r\n if (template.voiceSettings.voiceProps) {\r\n __setTemplate(template);\r\n } else {\r\n configVoice.getDefaultProps().then(props => {\r\n template.voiceSettings.voiceProps = props;\r\n this.template = template;\r\n __setTemplate(template);\r\n });\r\n }\r\n },\r\n setEmptyTemplate() {\r\n const emptyTemplate = new AlertTemplate();\r\n this.setTemplate(emptyTemplate.get());\r\n },\r\n toggleDetails(state) {\r\n this.dialogDetails = state;\r\n if (!state) {\r\n this.template = null;\r\n }\r\n }\r\n }\r\n};\r\n</script>\r\n\r\n<style scoped>\r\n#card {\r\n max-width: 900px;\r\n}\r\n</style>\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AlertTemplates.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AlertTemplates.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AlertTemplates.vue?vue&type=template&id=1eb9937c&scoped=true&\"\nimport script from \"./AlertTemplates.vue?vue&type=script&lang=js&\"\nexport * from \"./AlertTemplates.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AlertTemplates.vue?vue&type=style&index=0&id=1eb9937c&prod&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1eb9937c\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',[_c('v-text-field',{attrs:{\"outlined\":\"\",\"label\":_vm.getLabel(),\"dense\":\"\",\"data-testid\":\"senderSmsSender\"},model:{value:(_vm.sender),callback:function ($$v) {_vm.sender=$$v},expression:\"sender\"}}),(_vm.validationErrors)?_c('v-alert',{attrs:{\"type\":\"error\"}},[_vm._v(\" \"+_vm._s(_vm.validationErrors)+\" \")]):_vm._e()],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n <div>\r\n <v-text-field\r\n outlined\r\n v-model=\"sender\"\r\n :label=\"getLabel()\"\r\n dense\r\n data-testid=\"senderSmsSender\"\r\n />\r\n <v-alert type=\"error\" v-if=\"validationErrors\">\r\n {{ validationErrors }}\r\n </v-alert>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport SmsSender from \"@/util/SmsSender\";\r\n\r\nexport default {\r\n name: \"SmsSender\",\r\n\r\n props: {\r\n initValue: {\r\n type: String\r\n },\r\n optional: {\r\n type: Boolean,\r\n default: false\r\n }\r\n },\r\n\r\n watch: {\r\n // Using watch instead of @change/@keypress since text can come from\r\n // right click paste with mouse\r\n sender: {\r\n handler() {\r\n this.change();\r\n }\r\n }\r\n },\r\n\r\n computed: {\r\n validationErrors() {\r\n const smsSender = new SmsSender(this.sender);\r\n if (this.sender === \"\" && this.optional) {\r\n return \"\";\r\n }\r\n return smsSender.validate();\r\n }\r\n },\r\n\r\n data: () => ({\r\n sender: \"\"\r\n }),\r\n\r\n created() {\r\n this.sender = this.initValue;\r\n },\r\n\r\n methods: {\r\n getLabel() {\r\n let label = this.$t('smsSender');\r\n if (this.optional) {\r\n label += \" \" + this.$t(\"optionalHint\")\r\n }\r\n return label;\r\n },\r\n change() {\r\n const isValid = !this.validationErrors;\r\n this.$emit(\"change\", {\r\n text: this.sender,\r\n isValid: isValid\r\n });\r\n }\r\n }\r\n};\r\n</script>\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SmsSender.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SmsSender.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SmsSender.vue?vue&type=template&id=eab8c8e0&\"\nimport script from \"./SmsSender.vue?vue&type=script&lang=js&\"\nexport * from \"./SmsSender.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","const timeUtil = {\r\n isToday(date) {\r\n const today = new Date();\r\n // Not the simplest way, but is fast; https://stackoverflow.com/a/17861971/529171\r\n return this.isSameDate(date, today);\r\n },\r\n\r\n isYesterday(date) {\r\n const yesterday = new Date();\r\n yesterday.setDate(yesterday.getDate() - 1);\r\n return this.isSameDate(date, yesterday);\r\n },\r\n\r\n isSameDate(date1, date2) {\r\n return (\r\n date1.getDate() === date2.getDate() &&\r\n date1.getMonth() === date2.getMonth() &&\r\n date1.getFullYear() === date2.getFullYear()\r\n );\r\n },\r\n\r\n createDateTimeString(date) {\r\n return (\r\n date.getFullYear() +\r\n \"-\" +\r\n this.getNumberAsTwoDigits(date.getMonth() + 1) +\r\n \"-\" +\r\n this.getNumberAsTwoDigits(date.getDate()) +\r\n \" \" +\r\n this.getNumberAsTwoDigits(date.getHours()) +\r\n \":\" +\r\n this.getNumberAsTwoDigits(date.getMinutes())\r\n );\r\n },\r\n\r\n getDateRangeFromMonths(fromYear, fromMonth, toYear, toMonth) {\r\n fromYear = parseInt(fromYear, 10);\r\n fromMonth = parseInt(fromMonth, 10);\r\n toYear = parseInt(toYear, 10);\r\n toMonth = parseInt(toMonth, 10);\r\n if (toMonth === 12) {\r\n toMonth = 1;\r\n toYear++;\r\n } else {\r\n toMonth++;\r\n }\r\n var startDay = \"-01 00:00\";\r\n\r\n return {\r\n from: fromYear + \"-\" + this.getNumberAsTwoDigits(fromMonth) + startDay,\r\n to: toYear + \"-\" + this.getNumberAsTwoDigits(toMonth) + startDay\r\n };\r\n },\r\n\r\n getNumberAsTwoDigits(monthNum) {\r\n if (monthNum < 10) {\r\n monthNum = \"0\" + monthNum;\r\n }\r\n return monthNum.toString();\r\n }\r\n};\r\n\r\nexport default timeUtil;\r\n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('CustomBtn',{attrs:{\"icon\":\"mdi-refresh\",\"text\":_vm.$t('update'),\"min-width\":_vm.minWidth,\"block\":_vm.block},on:{\"click\":_vm.onClick}})\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n <CustomBtn\r\n icon=\"mdi-refresh\"\r\n :text=\"$t('update')\"\r\n :min-width=\"minWidth\"\r\n v-on:click=\"onClick\"\r\n :block=\"block\"\r\n />\r\n</template>\r\n\r\n<script>\r\nimport CustomBtn from \"@/components/misc/CustomBtn\";\r\nexport default {\r\n name: \"UpdateBtn\",\r\n components: { CustomBtn },\r\n props: {\r\n block: {\r\n type: Boolean,\r\n default: false\r\n },\r\n minWidth: {\r\n type: String,\r\n default: \"\"\r\n }\r\n },\r\n methods: {\r\n onClick() {\r\n this.$emit(\"click\");\r\n }\r\n }\r\n};\r\n</script>\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UpdateBtn.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UpdateBtn.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./UpdateBtn.vue?vue&type=template&id=56f1880e&\"\nimport script from \"./UpdateBtn.vue?vue&type=script&lang=js&\"\nexport * from \"./UpdateBtn.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('v-tooltip',{attrs:{\"id\":\"tooltip\",\"bottom\":_vm.bottomPlacement,\"right\":_vm.rightPlacement,\"left\":_vm.leftPlacement,\"max-width\":\"500\"},scopedSlots:_vm._u([{key:\"activator\",fn:function({ on, attrs }){return [_c('v-icon',_vm._g(_vm._b({},'v-icon',attrs,false),on),[_vm._v(\" mdi-information-outline \")])]}}])},[(_vm.text)?_c('span',[_vm._v(_vm._s(_vm.text))]):_vm._e(),_vm._t(\"content\")],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n <v-tooltip\r\n id=\"tooltip\"\r\n :bottom=\"bottomPlacement\"\r\n :right=\"rightPlacement\"\r\n :left=\"leftPlacement\"\r\n max-width=\"500\"\r\n >\r\n <template v-slot:activator=\"{ on, attrs }\">\r\n <v-icon v-bind=\"attrs\" v-on=\"on\">\r\n mdi-information-outline\r\n </v-icon>\r\n </template>\r\n <span v-if=\"text\">{{ text }}</span>\r\n <slot name=\"content\"></slot>\r\n </v-tooltip>\r\n</template>\r\n\r\n<script>\r\nexport default {\r\n name: \"Tooltip\",\r\n\r\n props: {\r\n // Use slot \"content\" instead for rich text/content\r\n text: {\r\n type: String\r\n },\r\n placement: {\r\n type: String,\r\n default: \"bottom\"\r\n }\r\n },\r\n\r\n computed: {\r\n bottomPlacement() {\r\n return this.placement === \"bottom\";\r\n },\r\n rightPlacement() {\r\n return this.placement === \"right\";\r\n },\r\n leftPlacement() {\r\n return this.placement === \"left\";\r\n }\r\n }\r\n};\r\n</script>\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Tooltip.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Tooltip.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Tooltip.vue?vue&type=template&id=576066ac&\"\nimport script from \"./Tooltip.vue?vue&type=script&lang=js&\"\nexport * from \"./Tooltip.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DynamicTextInfo.vue?vue&type=style&index=0&id=069c4514&prod&scoped=true&lang=css&\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AlertTemplates.vue?vue&type=style&index=0&id=1eb9937c&prod&scoped=true&lang=css&\"","import numberUtil from \"@/util/numberUtil\";\r\nimport config from \"@/config/config\";\r\n\r\nconst emailUtil = {\r\n /**\r\n * @name attachmentsFileSizeIsOk\r\n * @param attachments Array with file structure as returned from API\r\n */\r\n attachmentsFileSizeIsOk(attachments) {\r\n let totSize = 0;\r\n attachments.forEach(selFile => {\r\n totSize += selFile.FileSize;\r\n });\r\n const mb = numberUtil.bytesToMegabytes(totSize, 2);\r\n return {\r\n totFileSizeMb: mb,\r\n limit: config.emailAttachmentMbimit,\r\n sizeOk: mb <= config.emailAttachmentMbimit\r\n };\r\n }\r\n};\r\n\r\nexport default emailUtil;\r\n","var render = function render(){var _vm=this,_c=_vm._self._c;return (_vm.text)?_c('div',[_c('div',[_c('strong',[_vm._v(_vm._s(_vm.$t(\"voicePronunciation\")))]),_c('i',[_vm._v(\" \\\"\"+_vm._s(_vm.$t(\"pressPhone\"))+\" \"),_c('span',[_vm._v(_vm._s(_vm.number))]),_vm._v(\" \"+_vm._s(_vm.$t(\"for\"))+\": \"),_c('span',[_vm._v(_vm._s(_vm.text)+\"\\\"\")])])]),_c('div',[_c('strong',[_vm._v(_vm._s(_vm.$t(\"sms\"))+\"/\"+_vm._s(_vm.$t(\"email\"))+\":\")]),_c('i',[_vm._v(\" \"+_vm._s(_vm.$t(\"linksToWebBtn\"))+\": \")]),_c('v-btn',{attrs:{\"small\":\"\",\"href\":_vm.link,\"target\":\"_blank\"}},[_vm._v(\" \"+_vm._s(_vm.text)+\" \")])],1)]):_vm._e()\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n <div v-if=\"text\">\r\n <div>\r\n <strong>{{ $t(\"voicePronunciation\") }}</strong>\r\n <i>\r\n \"{{ $t(\"pressPhone\") }} <span>{{ number }}</span> {{ $t(\"for\") }}:\r\n <span>{{ text }}\"</span>\r\n </i>\r\n </div>\r\n <div>\r\n <strong>{{ $t(\"sms\") }}/{{ $t(\"email\") }}:</strong>\r\n <i> {{ $t(\"linksToWebBtn\") }}: </i>\r\n <v-btn small :href=\"link\" target=\"_blank\">\r\n {{ text }}\r\n </v-btn>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nexport default {\r\n name: \"ResponsePreview\",\r\n\r\n props: {\r\n number: {\r\n required: true\r\n },\r\n text: {\r\n required: true,\r\n type: String\r\n },\r\n link: {\r\n default: \"\"\r\n }\r\n },\r\n};\r\n</script>\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ResponsePreview.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ResponsePreview.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ResponsePreview.vue?vue&type=template&id=7c0ed362&\"\nimport script from \"./ResponsePreview.vue?vue&type=script&lang=js&\"\nexport * from \"./ResponsePreview.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ResponseChip.vue?vue&type=style&index=0&id=49d29954&prod&scoped=true&lang=css&\"","// Styles\nimport './VCheckbox.sass'\nimport '../../styles/components/_selection-controls.sass'\n\n// Components\nimport VIcon from '../VIcon'\nimport VInput from '../VInput'\n\n// Mixins\nimport Selectable from '../../mixins/selectable'\n\n/* @vue/component */\nexport default Selectable.extend({\n name: 'v-checkbox',\n\n props: {\n indeterminate: Boolean,\n indeterminateIcon: {\n type: String,\n default: '$checkboxIndeterminate',\n },\n offIcon: {\n type: String,\n default: '$checkboxOff',\n },\n onIcon: {\n type: String,\n default: '$checkboxOn',\n },\n },\n\n data () {\n return {\n inputIndeterminate: this.indeterminate,\n }\n },\n\n computed: {\n classes (): object {\n return {\n ...VInput.options.computed.classes.call(this),\n 'v-input--selection-controls': true,\n 'v-input--checkbox': true,\n 'v-input--indeterminate': this.inputIndeterminate,\n }\n },\n computedIcon (): string {\n if (this.inputIndeterminate) {\n return this.indeterminateIcon\n } else if (this.isActive) {\n return this.onIcon\n } else {\n return this.offIcon\n }\n },\n // Do not return undefined if disabled,\n // according to spec, should still show\n // a color when disabled and active\n validationState (): string | undefined {\n if (this.isDisabled && !this.inputIndeterminate) return undefined\n if (this.hasError && this.shouldValidate) return 'error'\n if (this.hasSuccess) return 'success'\n if (this.hasColor !== null) return this.computedColor\n return undefined\n },\n },\n\n watch: {\n indeterminate (val) {\n // https://github.com/vuetifyjs/vuetify/issues/8270\n this.$nextTick(() => (this.inputIndeterminate = val))\n },\n inputIndeterminate (val) {\n this.$emit('update:indeterminate', val)\n },\n isActive () {\n if (!this.indeterminate) return\n this.inputIndeterminate = false\n },\n },\n\n methods: {\n genCheckbox () {\n const { title, ...checkboxAttrs } = this.attrs$\n return this.$createElement('div', {\n staticClass: 'v-input--selection-controls__input',\n }, [\n this.$createElement(VIcon, this.setTextColor(this.validationState, {\n props: {\n dense: this.dense,\n dark: this.dark,\n light: this.light,\n },\n }), this.computedIcon),\n this.genInput('checkbox', {\n ...checkboxAttrs,\n 'aria-checked': this.inputIndeterminate\n ? 'mixed'\n : this.isActive.toString(),\n }),\n this.genRipple(this.setTextColor(this.rippleState)),\n ])\n },\n genDefaultSlot () {\n return [\n this.genCheckbox(),\n this.genLabel(),\n ]\n },\n },\n})\n","import i18n from \"@/i18n\";\r\nimport stringUtil from \"@/util/stringUtil\";\r\nimport PhoneNumber from \"@/util/PhoneNumber\";\r\n\r\nexport default class SmsSender {\r\n constructor(senderPhoneNumOrName) {\r\n this.sender = senderPhoneNumOrName;\r\n }\r\n\r\n /**\r\n * Validates SMS sender.\r\n * @returns {VueI18n.TranslateResult|string}\r\n */\r\n validate() {\r\n if (!this.sender || !this.sender.length) {\r\n return i18n.t(\"smsSenderMustBeDef\");\r\n }\r\n if (seemsToBePhoneNumber(this.sender)) {\r\n const pn = new PhoneNumber(this.sender);\r\n if (!hasInternationalPrefix(this.sender)) {\r\n return i18n.t(\"missingIntPrefix\");\r\n }\r\n if (!pn.isValid()) {\r\n return i18n.t(\"invalidPhoneNumber\");\r\n }\r\n if (!pn.isMobile(true)) {\r\n return i18n.t(\"smsSenderMustBeMob\");\r\n }\r\n if (hasWhitespace(this.sender)) {\r\n return i18n.t(\"smsSenderSpace\");\r\n }\r\n } else {\r\n if (stringUtil.hasNorwegianLetters(this.sender)) {\r\n return i18n.t(\"smsSenderNoNo\");\r\n }\r\n if (this.sender.length < 3) {\r\n return i18n.t(\"smsSenderMinChars\");\r\n }\r\n if (this.sender.length > 11) {\r\n return i18n.t(\"smsSenderMaxChars\");\r\n }\r\n const test = /[^a-zA-Z\\d ]/.test(this.sender);\r\n if (test) {\r\n return i18n.t(\"smsSenderNoSymbol\");\r\n }\r\n }\r\n return \"\";\r\n }\r\n}\r\n\r\nconst hasWhitespace = str => {\r\n return str.indexOf(\" \") >= 0;\r\n};\r\n\r\nconst seemsToBePhoneNumber = str => {\r\n const validChars = \" +0123456789\";\r\n let char;\r\n let i = 0;\r\n for (i; i < str.length; i++) {\r\n char = str.charAt(i);\r\n if (validChars.indexOf(char) === -1) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n};\r\n\r\nconst hasInternationalPrefix = usrInput => {\r\n return usrInput.charAt(0) === \"+\";\r\n};\r\n","// Styles\nimport '../../styles/components/_selection-controls.sass'\nimport './VSwitch.sass'\n\n// Mixins\nimport Selectable from '../../mixins/selectable'\nimport VInput from '../VInput'\n\n// Directives\nimport Touch from '../../directives/touch'\n\n// Components\nimport { VFabTransition } from '../transitions'\nimport VProgressCircular from '../VProgressCircular/VProgressCircular'\n\n// Helpers\nimport { keyCodes } from '../../util/helpers'\n\n// Types\nimport { VNode, VNodeData } from 'vue'\n\n/* @vue/component */\nexport default Selectable.extend({\n name: 'v-switch',\n\n directives: { Touch },\n\n props: {\n inset: Boolean,\n loading: {\n type: [Boolean, String],\n default: false,\n },\n flat: {\n type: Boolean,\n default: false,\n },\n },\n\n computed: {\n classes (): object {\n return {\n ...VInput.options.computed.classes.call(this),\n 'v-input--selection-controls v-input--switch': true,\n 'v-input--switch--flat': this.flat,\n 'v-input--switch--inset': this.inset,\n }\n },\n attrs (): object {\n return {\n 'aria-checked': String(this.isActive),\n 'aria-disabled': String(this.isDisabled),\n role: 'switch',\n }\n },\n // Do not return undefined if disabled,\n // according to spec, should still show\n // a color when disabled and active\n validationState (): string | undefined {\n if (this.hasError && this.shouldValidate) return 'error'\n if (this.hasSuccess) return 'success'\n if (this.hasColor !== null) return this.computedColor\n return undefined\n },\n switchData (): VNodeData {\n return this.setTextColor(this.loading ? undefined : this.validationState, {\n class: this.themeClasses,\n })\n },\n },\n\n methods: {\n genDefaultSlot (): (VNode | null)[] {\n return [\n this.genSwitch(),\n this.genLabel(),\n ]\n },\n genSwitch (): VNode {\n const { title, ...switchAttrs } = this.attrs$\n\n return this.$createElement('div', {\n staticClass: 'v-input--selection-controls__input',\n }, [\n this.genInput('checkbox', {\n ...this.attrs,\n ...switchAttrs,\n }),\n this.genRipple(this.setTextColor(this.validationState, {\n directives: [{\n name: 'touch',\n value: {\n left: this.onSwipeLeft,\n right: this.onSwipeRight,\n },\n }],\n })),\n this.$createElement('div', {\n staticClass: 'v-input--switch__track',\n ...this.switchData,\n }),\n this.$createElement('div', {\n staticClass: 'v-input--switch__thumb',\n ...this.switchData,\n }, [this.genProgress()]),\n ])\n },\n genProgress (): VNode {\n return this.$createElement(VFabTransition, {}, [\n this.loading === false\n ? null\n : this.$slots.progress || this.$createElement(VProgressCircular, {\n props: {\n color: (this.loading === true || this.loading === '')\n ? (this.color || 'primary')\n : this.loading,\n size: 16,\n width: 2,\n indeterminate: true,\n },\n }),\n ])\n },\n onSwipeLeft () {\n if (this.isActive) this.onChange()\n },\n onSwipeRight () {\n if (!this.isActive) this.onChange()\n },\n onKeydown (e: KeyboardEvent) {\n if (\n (e.keyCode === keyCodes.left && this.isActive) ||\n (e.keyCode === keyCodes.right && !this.isActive)\n ) this.onChange()\n },\n },\n})\n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('v-btn',{attrs:{\"outlined\":_vm.outlined,\"small\":_vm.small,\"min-width\":_vm.minWidth,\"block\":_vm.block,\"data-testid\":\"btnCustomBtn\"},on:{\"click\":_vm.onClick}},[(_vm.icon)?_c('v-icon',{attrs:{\"left\":\"\"}},[_vm._v(\" \"+_vm._s(_vm.icon)+\" \")]):_vm._e(),_vm._v(\" \"+_vm._s(_vm.text)+\" \")],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n <v-btn\r\n @click=\"onClick\"\r\n :outlined=\"outlined\"\r\n :small=\"small\"\r\n :min-width=\"minWidth\"\r\n :block=\"block\"\r\n data-testid=\"btnCustomBtn\"\r\n >\r\n <v-icon left v-if=\"icon\">\r\n {{ icon }}\r\n </v-icon>\r\n {{ text }}\r\n </v-btn>\r\n</template>\r\n\r\n<script>\r\nexport default {\r\n name: \"CustomBtn\",\r\n\r\n props: {\r\n icon: {\r\n type: String\r\n },\r\n text: {\r\n type: String\r\n },\r\n info: {\r\n type: Boolean,\r\n default: false\r\n },\r\n primary: {\r\n type: Boolean,\r\n default: false\r\n },\r\n block: {\r\n type: Boolean,\r\n default: false\r\n },\r\n outlined: {\r\n type: Boolean,\r\n default: true\r\n },\r\n small: {\r\n type: Boolean,\r\n default: false\r\n },\r\n minWidth: {\r\n type: String,\r\n default: \"\"\r\n }\r\n },\r\n\r\n methods: {\r\n onClick() {\r\n this.$emit(\"click\");\r\n }\r\n }\r\n};\r\n</script>\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CustomBtn.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CustomBtn.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./CustomBtn.vue?vue&type=template&id=895a7e14&\"\nimport script from \"./CustomBtn.vue?vue&type=script&lang=js&\"\nexport * from \"./CustomBtn.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","// Components\nimport { VFadeTransition } from '../transitions'\nimport VExpansionPanel from './VExpansionPanel'\nimport VIcon from '../VIcon'\n\n// Mixins\nimport Colorable from '../../mixins/colorable'\nimport { inject as RegistrableInject } from '../../mixins/registrable'\n\n// Directives\nimport ripple from '../../directives/ripple'\n\n// Utilities\nimport { getSlot } from '../../util/helpers'\nimport mixins, { ExtractVue } from '../../util/mixins'\n\n// Types\nimport Vue, { VNode, VueConstructor } from 'vue'\n\nconst baseMixins = mixins(\n Colorable,\n RegistrableInject<'expansionPanel', VueConstructor<Vue>>('expansionPanel', 'v-expansion-panel-header', 'v-expansion-panel')\n)\n\ninterface options extends ExtractVue<typeof baseMixins> {\n $el: HTMLElement\n expansionPanel: InstanceType<typeof VExpansionPanel>\n}\n\nexport default baseMixins.extend<options>().extend({\n name: 'v-expansion-panel-header',\n\n directives: { ripple },\n\n props: {\n disableIconRotate: Boolean,\n expandIcon: {\n type: String,\n default: '$expand',\n },\n hideActions: Boolean,\n ripple: {\n type: [Boolean, Object],\n default: false,\n },\n },\n\n data: () => ({\n hasMousedown: false,\n }),\n\n computed: {\n classes (): object {\n return {\n 'v-expansion-panel-header--active': this.isActive,\n 'v-expansion-panel-header--mousedown': this.hasMousedown,\n }\n },\n isActive (): boolean {\n return this.expansionPanel.isActive\n },\n isDisabled (): boolean {\n return this.expansionPanel.isDisabled\n },\n isReadonly (): boolean {\n return this.expansionPanel.isReadonly\n },\n },\n\n created () {\n this.expansionPanel.registerHeader(this)\n },\n\n beforeDestroy () {\n this.expansionPanel.unregisterHeader()\n },\n\n methods: {\n onClick (e: MouseEvent) {\n this.$emit('click', e)\n },\n genIcon () {\n const icon = getSlot(this, 'actions') ||\n [this.$createElement(VIcon, this.expandIcon)]\n\n return this.$createElement(VFadeTransition, [\n this.$createElement('div', {\n staticClass: 'v-expansion-panel-header__icon',\n class: {\n 'v-expansion-panel-header__icon--disable-rotate': this.disableIconRotate,\n },\n directives: [{\n name: 'show',\n value: !this.isDisabled,\n }],\n }, icon),\n ])\n },\n },\n\n render (h): VNode {\n return h('button', this.setBackgroundColor(this.color, {\n staticClass: 'v-expansion-panel-header',\n class: this.classes,\n attrs: {\n tabindex: this.isDisabled ? -1 : null,\n type: 'button',\n 'aria-expanded': this.isActive,\n },\n directives: [{\n name: 'ripple',\n value: this.ripple,\n }],\n on: {\n ...this.$listeners,\n click: this.onClick,\n mousedown: () => (this.hasMousedown = true),\n mouseup: () => (this.hasMousedown = false),\n },\n }), [\n getSlot(this, 'default', { open: this.isActive }, true),\n this.hideActions || this.genIcon(),\n ])\n },\n})\n","// Components\nimport VExpansionPanels from './VExpansionPanels'\nimport VExpansionPanelHeader from './VExpansionPanelHeader'\nimport VExpansionPanelContent from './VExpansionPanelContent'\n\n// Mixins\nimport { factory as GroupableFactory } from '../../mixins/groupable'\nimport { provide as RegistrableProvide } from '../../mixins/registrable'\n\n// Utilities\nimport { getSlot } from '../../util/helpers'\nimport mixins from '../../util/mixins'\n\n// Types\nimport { VNode } from 'vue'\n\ntype VExpansionPanelHeaderInstance = InstanceType<typeof VExpansionPanelHeader>\ntype VExpansionPanelContentInstance = InstanceType<typeof VExpansionPanelContent>\n\nexport default mixins(\n GroupableFactory<'expansionPanels', typeof VExpansionPanels>('expansionPanels', 'v-expansion-panel', 'v-expansion-panels'),\n RegistrableProvide('expansionPanel', true)\n /* @vue/component */\n).extend({\n name: 'v-expansion-panel',\n\n props: {\n disabled: Boolean,\n readonly: Boolean,\n },\n\n data () {\n return {\n content: null as VExpansionPanelContentInstance | null,\n header: null as VExpansionPanelHeaderInstance | null,\n nextIsActive: false,\n }\n },\n\n computed: {\n classes (): object {\n return {\n 'v-expansion-panel--active': this.isActive,\n 'v-expansion-panel--next-active': this.nextIsActive,\n 'v-expansion-panel--disabled': this.isDisabled,\n ...this.groupClasses,\n }\n },\n isDisabled (): boolean {\n return this.expansionPanels.disabled || this.disabled\n },\n isReadonly (): boolean {\n return this.expansionPanels.readonly || this.readonly\n },\n },\n\n methods: {\n registerContent (vm: VExpansionPanelContentInstance) {\n this.content = vm\n },\n unregisterContent () {\n this.content = null\n },\n registerHeader (vm: VExpansionPanelHeaderInstance) {\n this.header = vm\n vm.$on('click', this.onClick)\n },\n unregisterHeader () {\n this.header = null\n },\n onClick (e: MouseEvent) {\n if (e.detail) this.header!.$el.blur()\n\n this.$emit('click', e)\n\n this.isReadonly || this.isDisabled || this.toggle()\n },\n toggle () {\n this.$nextTick(() => this.$emit('change'))\n },\n },\n\n render (h): VNode {\n return h('div', {\n staticClass: 'v-expansion-panel',\n class: this.classes,\n attrs: {\n 'aria-expanded': String(this.isActive),\n },\n }, getSlot(this))\n },\n})\n","const sms = {\r\n\r\n /**\r\n * @name getNumOfSumFromText\r\n * @param text\r\n * @returns {Object}\r\n * @desc\r\n * From docs/ITC_SMS_Gateway_API_2.2.4.pdf:\r\n * 3.4 Message Content\r\n * You can specify the content of the SMS message using the “contentâ€\r\n * parameter. For text messages, the max length of a single message is\r\n * 160 characters. If you provide text that is longer than 160\r\n * characters the SMSGW will automatically split the message into\r\n * concatenated text messages. When SMS messages are concatenated, some of\r\n * the SMS payload is needed for the UDH, resulting in the max message length\r\n * for each concatenated message being 153 characters. The Intelecom platform\r\n * allows a maximum of six concatenated messages, meaning that the maximum\r\n * character length of the content field is 918 characters (153*6). The GSM\r\n * specification allows for a much higher number of concatenated messages but\r\n * because of restrictions in the MNO SMSCs, the max limit of six\r\n * concatenated messages had to be included.\r\n */\r\n charCount(text) {\r\n const maxSingleSmsLength = 160;\r\n const internalLength = 153;\r\n let smsLength = text.length;\r\n let numOfSms = 0;\r\n\r\n smsLength += extendedCharactersCount(text);\r\n\r\n if (smsLength <= 0) {\r\n numOfSms = 0;\r\n } else if (smsLength <= maxSingleSmsLength) {\r\n numOfSms = 1;\r\n } else {\r\n numOfSms = smsLength / internalLength;\r\n }\r\n return {\r\n count: smsLength,\r\n // Round up. 4.1 SMS is in reality 5 SMS.\r\n numOfSms: Math.ceil(numOfSms)\r\n }\r\n },\r\n\r\n /**\r\n * @name findInnvalidChars\r\n * @param text\r\n * @returns {String} Returns first invalid char. Returns empty string if\r\n * text is valid\r\n */\r\n findInvalidSymbols(text) {\r\n // Why these chars?\r\n // This is the GSM Character Set without the greek letters. When I testet\r\n // all letters the greek ones became question marks. And € became a\r\n // whitespace. Not sure it our backend or Puzzel API that has trouble with\r\n // these letters\r\n const okChars =\r\n \"\\n\\r\" + // accept line break!\r\n \" @£$¥èéùìòÇØøÅå_^{}[~]|ÆæßÉ!\\\"#¤%&'()*+,-./0123456789:;<=>?¡ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÑܧ¿abcdefghijklmnopqrstuvwxyzäöñüà \\\\\";\r\n\r\n for (const symbol of text) {\r\n const index = okChars.indexOf(symbol);\r\n if (index === -1) {\r\n return symbol;\r\n }\r\n }\r\n return \"\";\r\n }\r\n};\r\n\r\nconst extendedCharactersCount = text => {\r\n let count = 0;\r\n // The GSM charset uses 7-bit alphabet encoding, but the escape characters\r\n // require 14 bits to encode, thus taking up two characters.\r\n const extendedCharacters = \"€{}[]^|~\\\\\";\r\n const chars = text.split(\"\");\r\n let i = 0;\r\n const len = chars.length\r\n for (i; i < len; i++) {\r\n const index = extendedCharacters.indexOf(chars[i]);\r\n if (index >= 0) count++;\r\n }\r\n return count;\r\n};\r\n\r\nexport default sms;\r\n","const objectUtil = {\r\n // Sometime we must clone to avoid parent mutation. From Vue docs:\r\n // \"Note that objects and arrays in JavaScript are passed by reference, so\r\n // if the prop is an array or object, mutating the object or array itself\r\n // inside the child component will affect parent state.\"\r\n deepClone(object) {\r\n return JSON.parse(JSON.stringify(object));\r\n }\r\n};\r\n\r\nexport default objectUtil;\r\n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{class:[_vm.enabled ? 'elevation-3 channel-panel' : 'mb-n6']},[_c('v-switch',{class:[_vm.enabled ? 'mt-n1' : ''],attrs:{\"label\":_vm.$t('sendSms'),\"data-testid\":\"sendSms\"},on:{\"change\":_vm.emitChange},model:{value:(_vm.enabled),callback:function ($$v) {_vm.enabled=$$v},expression:\"enabled\"}}),(_vm.enabled)?_c('div',[(!_vm.hideSmsSender)?_c('SmsSender',{attrs:{\"init-value\":_vm.sender},on:{\"change\":_vm.setSender}}):_vm._e(),_c('v-textarea',{attrs:{\"label\":_vm.$t('smsText'),\"outlined\":\"\",\"data-testid\":\"smsText\"},on:{\"change\":_vm.emitChange},model:{value:(_vm.text),callback:function ($$v) {_vm.text=$$v},expression:\"text\"}}),_c('CharCounter',{staticClass:\"mt-n6\",attrs:{\"text\":_vm.text,\"max\":857},on:{\"validationupdate\":_vm.setSmsLengthValid}}),_c('DynamicTextInfo'),(!_vm.smsTextInvalid)?_c('TestSmsText',{attrs:{\"text\":_vm.text,\"sender\":_vm.sender}}):_vm._e(),(!_vm.hideSmsSender)?_c('div',[(_vm.smsTextInvalid)?_c('v-alert',{attrs:{\"type\":\"error\"}},[_vm._v(\" \"+_vm._s(_vm.$t(\"smsTextIsInvalid\"))+\". \"+_vm._s(_vm.$t(\"symbolNotAccepted\"))+\": \"+_vm._s(_vm.smsTextInvalid)+\" \")]):_vm._e()],1):_vm._e()],1):_vm._e()],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',[_vm._v(\" \"+_vm._s(_vm.$t(\"chars\"))+\": \"+_vm._s(_vm.charCount.count)+\"/\"+_vm._s(_vm.max)+\" (\"+_vm._s(_vm.charCount.numOfSms)+\" SMS) \"),(!_vm.lengthOk)?_c('v-alert',{attrs:{\"type\":\"error\"}},[_vm._v(\" \"+_vm._s(_vm.$t(\"smsTooLong\"))+\" \")]):_vm._e()],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n <div>\r\n {{ $t(\"chars\") }}: {{ charCount.count }}/{{ max }} ({{ charCount.numOfSms }}\r\n SMS)\r\n <v-alert type=\"error\" v-if=\"!lengthOk\">\r\n {{ $t(\"smsTooLong\") }}\r\n </v-alert>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport sms from \"../../util/sms\";\r\nimport config from \"@/config/config\";\r\n\r\nexport default {\r\n name: \"CharCounter\",\r\n props: {\r\n text: {\r\n required: true,\r\n type: String,\r\n default: \"\"\r\n },\r\n max: {\r\n type: Number,\r\n required: true\r\n }\r\n },\r\n\r\n data: () => ({\r\n lengthOk: true\r\n }),\r\n\r\n computed: {\r\n charCount() {\r\n const charCount = sms.charCount(this.text);\r\n // We got the SMS char count, but we also need to check if \"dynamic text\"\r\n // is used: [name], [navn] and [name] (and any other futre tag names)\r\n // gets replaced by receiver name on server side.\r\n // Name can be up to 50 chars when creating a contact in GroupAlert, so\r\n // we need to make place for this\r\n config.dynamicNameTags.forEach(nameTag => {\r\n const searchStr = \"\\\\[\" + nameTag + \"\\\\]\";\r\n const regExp = new RegExp(searchStr, \"g\");\r\n const matches = this.text.match(regExp);\r\n if (matches && matches.length > 0) {\r\n const numOfMatches = matches.length;\r\n const maxLengthName = 50;\r\n const dynamicCharsLength = maxLengthName * numOfMatches;\r\n const tagTextLength = searchStr.length * numOfMatches;\r\n const charsInSms = dynamicCharsLength - tagTextLength;\r\n charCount.count += charsInSms;\r\n }\r\n });\r\n this.lengthOk = charCount.count <= this.max;\r\n this.$emit(\"validationupdate\", this.lengthOk);\r\n return charCount;\r\n }\r\n }\r\n};\r\n</script>\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CharCounter.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CharCounter.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./CharCounter.vue?vue&type=template&id=195fa42e&\"\nimport script from \"./CharCounter.vue?vue&type=script&lang=js&\"\nexport * from \"./CharCounter.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return (_vm.text.length && _vm.sender.length)?_c('div',[_c('v-btn',{attrs:{\"outlined\":\"\",\"x-small\":\"\"},on:{\"click\":_vm.sendTestMessage}},[_vm._v(\" \"+_vm._s(_vm.$t(\"testSms\"))+\" \")]),_c('Tooltip',{scopedSlots:_vm._u([{key:\"content\",fn:function(){return [_c('p',[_vm._v(\" \"+_vm._s(_vm.$t(\"youWillRecSms\", { mobile: _vm.usrMobile }))+\" \")]),_c('p',[_vm._v(\" \"+_vm._s(_vm.$t(\"youWillRecMsgLimitations\"))+\" \")])]},proxy:true}],null,false,3495177467)})],1):_vm._e()\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import api from \"./api\";\r\n\r\nconst apiSms = {\r\n sendSingle(sender, content, recipient, spamFilterTimeout = 0) {\r\n const params = {\r\n Messages: [\r\n {\r\n Sender: sender,\r\n Content: content,\r\n Recipient: recipient,\r\n SpamFilter: spamFilterTimeout\r\n }\r\n ]\r\n };\r\n return new Promise((resolve, reject) => {\r\n api.execute(\"SendSmsExt\", params).then(res => {\r\n if (res.Stats && res.Stats.SendCount) {\r\n resolve();\r\n } else {\r\n reject();\r\n }\r\n });\r\n });\r\n }\r\n};\r\n\r\nexport default apiSms;\r\n","<template>\r\n <div v-if=\"text.length && sender.length\">\r\n <v-btn outlined x-small @click=\"sendTestMessage\">\r\n {{ $t(\"testSms\") }}\r\n </v-btn>\r\n <Tooltip>\r\n <template v-slot:content>\r\n <p>\r\n {{ $t(\"youWillRecSms\", { mobile: usrMobile }) }}\r\n </p>\r\n <p>\r\n {{ $t(\"youWillRecMsgLimitations\") }}\r\n </p>\r\n </template>\r\n </Tooltip>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport Tooltip from \"@/components/misc/Tooltip\";\r\nimport store from \"@/store\";\r\nimport appSnackbar from \"@/util/appSnackbac\";\r\nimport apiSms from \"@/api/v24/api.sms\";\r\n\r\nexport default {\r\n name: \"TestSmsText\",\r\n components: { Tooltip },\r\n\r\n props: {\r\n text: {\r\n required: true,\r\n type: String\r\n },\r\n sender: {\r\n required: true,\r\n type: String\r\n }\r\n },\r\n\r\n data: () => ({\r\n usrMobile: \"\"\r\n }),\r\n\r\n created() {\r\n store.dispatch(\"updateUserProfile\").then(usrProfile => {\r\n this.usrMobile = usrProfile.Bruker.Mobilnr;\r\n });\r\n },\r\n\r\n methods: {\r\n sendTestMessage() {\r\n apiSms\r\n .sendSingle(this.sender, this.text, this.usrMobile)\r\n .then(() => {\r\n appSnackbar.setMessage(this.$t(\"testMessageSent\"));\r\n })\r\n .catch(() => {\r\n appSnackbar.setMessage(this.$t(\"testMessageFailed\"));\r\n });\r\n }\r\n }\r\n};\r\n</script>\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TestSmsText.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TestSmsText.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TestSmsText.vue?vue&type=template&id=7e9a92fa&\"\nimport script from \"./TestSmsText.vue?vue&type=script&lang=js&\"\nexport * from \"./TestSmsText.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","<template>\r\n <div v-bind:class=\"[enabled ? 'elevation-3 channel-panel' : 'mb-n6']\">\r\n <v-switch\r\n v-model=\"enabled\"\r\n :label=\"$t('sendSms')\"\r\n v-bind:class=\"[enabled ? 'mt-n1' : '']\"\r\n @change=\"emitChange\"\r\n data-testid=\"sendSms\"\r\n ></v-switch>\r\n <div v-if=\"enabled\">\r\n <SmsSender\r\n v-if=\"!hideSmsSender\"\r\n :init-value=\"sender\"\r\n v-on:change=\"setSender\"\r\n />\r\n <v-textarea\r\n v-model=\"text\"\r\n :label=\"$t('smsText')\"\r\n outlined\r\n @change=\"emitChange\"\r\n data-testid=\"smsText\"\r\n ></v-textarea>\r\n <!--\r\n Cannot use maxlength since some symbols count as two chars\r\n in GSM standard.\r\n Setting max 857 since 918 (max at Puzzel) subtracted with a response\r\n URL with 61 chars\r\n \\nhttps://groupalert-test.azurewebsites.net/r?i=90583374881241\r\n is 857.\r\n This will handle groupalert-test that has a longer URL than production.\r\n I will create an issue to dynamically set max-length with regareds\r\n to server environment.\r\n -->\r\n <CharCounter\r\n class=\"mt-n6\"\r\n :text=\"text\"\r\n v-on:validationupdate=\"setSmsLengthValid\"\r\n :max=\"857\"\r\n ></CharCounter>\r\n <DynamicTextInfo />\r\n\r\n <TestSmsText v-if=\"!smsTextInvalid\" :text=\"text\" :sender=\"sender\" />\r\n\r\n <div v-if=\"!hideSmsSender\">\r\n <v-alert v-if=\"smsTextInvalid\" type=\"error\">\r\n {{ $t(\"smsTextIsInvalid\") }}. {{ $t(\"symbolNotAccepted\") }}:\r\n {{ smsTextInvalid }}\r\n </v-alert>\r\n </div>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport SmsSender from \"@/components/alert/SmsSender\";\r\nimport CharCounter from \"@/components/misc/CharCounter\";\r\nimport sms from \"@/util/sms\";\r\nimport store from \"@/store\";\r\nimport DynamicTextInfo from \"@/components/misc/DynamicTextInfo\";\r\nimport stringUtil from \"@/util/stringUtil\";\r\nimport TestSmsText from \"@/components/composers/TestSmsText\";\r\nimport user from \"@/util/user\";\r\nimport apiDepartment from \"@/api/v24/api.department\";\r\n\r\nexport default {\r\n name: \"SmsComposer\",\r\n components: { TestSmsText, DynamicTextInfo, CharCounter, SmsSender },\r\n\r\n computed: {\r\n smsTextInvalid() {\r\n return sms.findInvalidSymbols(this.text);\r\n }\r\n },\r\n\r\n props: {\r\n initEnabled: {\r\n type: Boolean,\r\n default: false\r\n },\r\n initSender: {\r\n type: String,\r\n default: \"\"\r\n },\r\n initText: {\r\n type: String,\r\n default: \"\"\r\n },\r\n hideSmsSender: {\r\n type: Boolean,\r\n default: false\r\n },\r\n // If initSender not defined it will set the value to the selected\r\n // departments sender value. If that is not set/available it will\r\n // use the value of the users main department\r\n autoSmsSender: {\r\n type: Boolean,\r\n default: false\r\n }\r\n },\r\n\r\n data: () => ({\r\n enabled: false,\r\n sender: \"\",\r\n validSender: false,\r\n text: \"\"\r\n }),\r\n\r\n created() {\r\n this.enabled = this.initEnabled;\r\n this.text = this.initText;\r\n this.sender = this.initSender;\r\n if (!this.initSender && this.autoSmsSender) {\r\n this.setSmsSender();\r\n }\r\n },\r\n\r\n methods: {\r\n setSender(senderProps) {\r\n this.sender = senderProps.text;\r\n this.validSender = senderProps.isValid;\r\n this.emitChange();\r\n },\r\n setSmsLengthValid(state) {\r\n this.smsLengthValid = state;\r\n this.emitChange();\r\n },\r\n emitChange() {\r\n this.text = stringUtil.fixUnsupportedWhitespace(this.text);\r\n this.$emit(\"change\", {\r\n enabled: this.enabled,\r\n sender: this.sender,\r\n validSender: this.validSender,\r\n text: this.text,\r\n lengthValid: this.smsLengthValid,\r\n textValid: !this.smsTextInvalid\r\n });\r\n },\r\n setSmsSender() {\r\n store.dispatch(\"updateUserProfile\").then(usrProfile => {\r\n const selectedDepId = user.getSelectedDepartment();\r\n if (!selectedDepId) {\r\n // No department selected. Default users default sms sender defined\r\n // in the user profile\r\n this.sender = usrProfile.SmsAvsender;\r\n this.emitChange();\r\n } else {\r\n // Use selected department sms sender, if set.\r\n // Workaround: API does not return the SMS sender for the main\r\n // department in HentBrukerProfil. So we do an API callSMS|\r\n // to get this.\r\n apiDepartment.get(selectedDepId).then(selectedDep => {\r\n const depSender = selectedDep.SmsAvsender;\r\n this.sender = depSender ? depSender : usrProfile.SmsAvsender;\r\n this.emitChange();\r\n });\r\n }\r\n });\r\n }\r\n }\r\n};\r\n</script>\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SmsComposer.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SmsComposer.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SmsComposer.vue?vue&type=template&id=acde3a20&\"\nimport script from \"./SmsComposer.vue?vue&type=script&lang=js&\"\nexport * from \"./SmsComposer.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',[(_vm.visible)?_c('v-select',{attrs:{\"dense\":_vm.dense,\"items\":_vm.departments,\"item-text\":\"Navn\",\"item-value\":\"AvdelingId\",\"loading\":!_vm.departments,\"outlined\":\"\",\"label\":_vm.labelText,\"hint\":_vm.hint,\"persistent-hint\":!!_vm.hint,\"disabled\":_vm.disabled,\"data-testid\":\"departmentSelect\"},on:{\"change\":_vm.userConfirm},model:{value:(_vm.selected),callback:function ($$v) {_vm.selected=$$v},expression:\"selected\"}}):_vm._e(),_c('v-dialog',{attrs:{\"max-width\":_vm.dialogWidth.small,\"persistent\":\"\"},model:{value:(_vm.dialogConfirm),callback:function ($$v) {_vm.dialogConfirm=$$v},expression:\"dialogConfirm\"}},[_c('UserConfirm',{attrs:{\"text\":_vm.$t('confirmChangeGrpDep')},on:{\"cancel\":_vm.cancelDepartmentChange,\"ok\":_vm.emitChange}})],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n <div>\r\n <v-select\r\n :dense=\"dense\"\r\n v-if=\"visible\"\r\n v-model=\"selected\"\r\n @change=\"userConfirm\"\r\n :items=\"departments\"\r\n item-text=\"Navn\"\r\n item-value=\"AvdelingId\"\r\n :loading=\"!departments\"\r\n outlined\r\n :label=\"labelText\"\r\n :hint=\"hint\"\r\n :persistent-hint=\"!!hint\"\r\n :disabled=\"disabled\"\r\n data-testid=\"departmentSelect\"\r\n />\r\n\r\n <v-dialog v-model=\"dialogConfirm\" :max-width=\"dialogWidth.small\" persistent>\r\n <UserConfirm\r\n :text=\"$t('confirmChangeGrpDep')\"\r\n v-on:cancel=\"cancelDepartmentChange\"\r\n v-on:ok=\"emitChange\"\r\n />\r\n </v-dialog>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport apiDepartment from \"@/api/v24/api.department\";\r\nimport store from \"@/store\";\r\nimport user from \"@/util/user\";\r\nimport config from \"@/config/config\";\r\nimport UserConfirm from \"@/components/misc/UserConfirm.vue\";\r\n\r\nexport default {\r\n name: \"DepartmentSelect\",\r\n props: {\r\n initDepartment: {\r\n default: \"\"\r\n },\r\n dense: {\r\n default: false\r\n },\r\n hint: {\r\n default: \"\"\r\n },\r\n label: {\r\n type: String,\r\n required: false\r\n },\r\n askForUserConfirm: {\r\n type: Boolean,\r\n default: false\r\n }\r\n },\r\n\r\n components: { UserConfirm },\r\n\r\n computed: {\r\n labelText() {\r\n return this.label ? this.label : this.$t(\"department\");\r\n },\r\n visible() {\r\n if (!store.state.userProfile || !this.departments) {\r\n return false;\r\n }\r\n return this.departments.length > 1;\r\n },\r\n disabled() {\r\n if (!store.state.userProfile || !store.state.departments) {\r\n return false;\r\n }\r\n if (store.getters.getUserIsAdmin) {\r\n return false;\r\n }\r\n return !!user.getSelectedDepartment();\r\n },\r\n departments() {\r\n if (!store.state.userProfile || !store.state.departments) {\r\n return null;\r\n }\r\n const usrProfile = store.state.userProfile;\r\n if (store.getters.getUserIsAdmin) {\r\n // Admins can see all departments. And select no department.\r\n const departments = store.state.departments;\r\n return [\r\n {\r\n AvdelingId: \"\",\r\n Navn: this.$t(\"noDepartment\")\r\n },\r\n ...departments\r\n ];\r\n } else {\r\n // Non-admins can only see their own departments.\r\n const mainDepartment = {\r\n AvdelingId: usrProfile.Bruker.Avdeling,\r\n Navn: usrProfile.Bruker.AvdelingNavn\r\n };\r\n return [mainDepartment, ...usrProfile.Bruker.Avdelinger];\r\n }\r\n }\r\n },\r\n\r\n data: () => ({\r\n selected: \"\",\r\n dialogConfirm: false,\r\n dialogWidth: config.dialogWith,\r\n rollbackDepartment: null\r\n }),\r\n\r\n created() {\r\n store.dispatch(\"updateUserProfile\");\r\n store.dispatch(\"updateDepartments\");\r\n this.setSelectedDepartment();\r\n },\r\n\r\n watch: {\r\n initDepartment(newVal) {\r\n // Need a watcher here to in case initDepartment is set after the\r\n\r\n this.setSelectedDepartment();\r\n },\r\n\r\n departments() {\r\n // Vue sometimes sets the this.selected to null when the departments state\r\n // is updated. Not sure why. Resetting it after departments change solved\r\n // the issue.\r\n this.setSelectedDepartment();\r\n }\r\n },\r\n\r\n methods: {\r\n userConfirm() {\r\n if (this.askForUserConfirm) {\r\n this.dialogConfirm = true;\r\n } else {\r\n this.emitChange();\r\n }\r\n },\r\n\r\n cancelDepartmentChange() {\r\n this.selected = this.rollbackDepartment;\r\n this.dialogConfirm = false;\r\n },\r\n\r\n setSelectedDepartment(departmentId) {\r\n if (this.initDepartment) {\r\n this.selected = this.initDepartment;\r\n }\r\n },\r\n\r\n emitChange() {\r\n this.rollbackDepartment = this.selected;\r\n this.dialogConfirm = false;\r\n this.$emit(\"change\", this.selected);\r\n }\r\n }\r\n};\r\n</script>\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DepartmentSelect.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DepartmentSelect.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./DepartmentSelect.vue?vue&type=template&id=16c7381b&\"\nimport script from \"./DepartmentSelect.vue?vue&type=script&lang=js&\"\nexport * from \"./DepartmentSelect.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{class:[_vm.enabled ? 'elevation-3 channel-panel' : 'mb-n6']},[_c('v-switch',{class:[_vm.enabled ? 'mt-n1' : ''],attrs:{\"label\":_vm.$t('sendEmail'),\"data-testid\":\"sendEmail\"},on:{\"change\":_vm.emitChange},model:{value:(_vm.enabled),callback:function ($$v) {_vm.enabled=$$v},expression:\"enabled\"}}),(_vm.enabled)?_c('div',[_c('v-text-field',{staticClass:\"mb-n6\",attrs:{\"maxlength\":\"80\",\"label\":_vm.$t('subject'),\"outlined\":\"\",\"data-testid\":\"subject\"},on:{\"change\":_vm.emitChange},model:{value:(_vm.title),callback:function ($$v) {_vm.title=$$v},expression:\"title\"}}),_c('v-textarea',{staticClass:\"mb-n5\",attrs:{\"id\":\"text-email\",\"label\":_vm.$t('emailText'),\"outlined\":\"\",\"data-testid\":\"emailText\"},on:{\"change\":_vm.emitChange},model:{value:(_vm.text),callback:function ($$v) {_vm.text=$$v},expression:\"text\"}}),_c('DynamicTextInfo',{staticClass:\"mt-n8\"}),(_vm.permissionFiles && !_vm.hideAttachmentFeature)?_c('EmailAttachmentSelect',{staticClass:\"mt-2 mb-4\",on:{\"change\":_vm.setAttachements}}):_vm._e(),_c('TestEmailText',{attrs:{\"text\":_vm.text,\"subject\":_vm.title}}),_vm._t(\"footer\")],2):_vm._e()],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return (_vm.text.length && _vm.subject.length)?_c('div',[_c('v-btn',{attrs:{\"outlined\":\"\",\"x-small\":\"\"},on:{\"click\":_vm.sendTestMessage}},[_vm._v(\" \"+_vm._s(_vm.$t(\"testEmail\"))+\" \")]),_c('Tooltip',{scopedSlots:_vm._u([{key:\"content\",fn:function(){return [_c('p',[_vm._v(\" \"+_vm._s(_vm.$t(\"youWillRecEmail\", { email: _vm.usrEmail }))+\" \")]),_c('p',[_vm._v(\" \"+_vm._s(_vm.$t(\"youWillRecMsgLimitations\"))+\" \")])]},proxy:true}],null,false,3896909050)})],1):_vm._e()\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n <div v-if=\"text.length && subject.length\">\r\n <v-btn outlined x-small @click=\"sendTestMessage\">\r\n {{ $t(\"testEmail\") }}\r\n </v-btn>\r\n <Tooltip>\r\n <template v-slot:content>\r\n <p>\r\n {{ $t(\"youWillRecEmail\", { email: usrEmail }) }}\r\n </p>\r\n <p>\r\n {{ $t(\"youWillRecMsgLimitations\") }}\r\n </p>\r\n </template>\r\n </Tooltip>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport Tooltip from \"@/components/misc/Tooltip\";\r\nimport store from \"@/store\";\r\nimport appSnackbar from \"@/util/appSnackbac\";\r\nimport apiEmail from \"@/api/v24/api.email\";\r\n\r\nexport default {\r\n name: \"TestEmailText\",\r\n components: { Tooltip },\r\n\r\n props: {\r\n text: {\r\n required: true,\r\n type: String\r\n },\r\n subject: {\r\n required: true,\r\n type: String\r\n }\r\n },\r\n\r\n data: () => ({\r\n usrEmail: \"\",\r\n sender: \"\"\r\n }),\r\n\r\n created() {\r\n store.dispatch(\"updateUserProfile\").then(usrProfile => {\r\n this.usrEmail = usrProfile.Bruker.Epost;\r\n this.usrName = usrProfile.Bruker.BrukerNavn;\r\n this.sender = usrProfile.Firmanavn;\r\n });\r\n },\r\n\r\n methods: {\r\n sendTestMessage() {\r\n const recipients = [{ Email: this.usrEmail, Name: this.usrName }];\r\n apiEmail\r\n .send(this.sender, this.subject, this.text, recipients)\r\n .then(() => {\r\n appSnackbar.setMessage(this.$t(\"testMessageSent\"));\r\n })\r\n .catch(() => {\r\n appSnackbar.setMessage(this.$t(\"testMessageFailed\"));\r\n });\r\n }\r\n }\r\n};\r\n</script>\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TestEmailText.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TestEmailText.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TestEmailText.vue?vue&type=template&id=452c3a3a&\"\nimport script from \"./TestEmailText.vue?vue&type=script&lang=js&\"\nexport * from \"./TestEmailText.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',[_vm._l((_vm.selectedFiles),function(selectedFile){return _c('ul',[_c('li',[_vm._v(_vm._s(selectedFile.FileName))])])}),(_vm.totalSize !== '0.00')?_c('div',[_vm._v(\" \"+_vm._s(_vm.$t(\"totalFileSize\"))+\": \"+_vm._s(_vm.totalSize)+\" MB \")]):_vm._e(),(_vm.fileSizeLimitWarning)?_c('v-alert',{attrs:{\"type\":\"error\"}},[_vm._v(\" \"+_vm._s(_vm.$t(\"totFileSizeError\", { count: _vm.fileSizeLimit }))+\" \")]):_vm._e(),_c('v-btn',{attrs:{\"outlined\":\"\",\"small\":\"\"},on:{\"click\":function($event){_vm.dialogSelect = true}}},[_c('v-icon',{attrs:{\"left\":\"\"},on:{\"click\":function($event){return _vm.edit(_vm.item)}}},[_vm._v(\" mdi-attachment \")]),_vm._v(\" \"+_vm._s(_vm.$t(\"addAttachment\"))+\" \")],1),(_vm.dialogSelect)?_c('v-dialog',{attrs:{\"max-width\":_vm.dialogWidth.small,\"persistent\":\"\"},model:{value:(_vm.dialogSelect),callback:function ($$v) {_vm.dialogSelect=$$v},expression:\"dialogSelect\"}},[_c('v-card',[_c('v-card-title',[_vm._v(\" \"+_vm._s(_vm.$t(\"selectFiles\"))+\" \")]),_c('v-card-text',[_c('v-select',{attrs:{\"items\":_vm.files,\"label\":_vm.$t('files'),\"multiple\":\"\",\"item-value\":\"FileId\",\"item-text\":_vm.getItemText,\"outlined\":\"\",\"return-object\":\"\"},on:{\"change\":_vm.emitChange},model:{value:(_vm.selectedFiles),callback:function ($$v) {_vm.selectedFiles=$$v},expression:\"selectedFiles\"}}),_c('v-btn',{staticClass:\"mr-2\",attrs:{\"outlined\":\"\",\"small\":\"\"},on:{\"click\":function($event){_vm.dialogNew = true}}},[_vm._v(\" \"+_vm._s(_vm.$t(\"newAttachment\"))+\" \")]),_c('v-btn',{attrs:{\"outlined\":\"\",\"small\":\"\"},on:{\"click\":function($event){_vm.dialogManageFiles = true}}},[_vm._v(\" \"+_vm._s(_vm.$t(\"manageFiles\"))+\" \")])],1),_c('v-card-actions',[_c('v-spacer'),_c('v-btn',{on:{\"click\":function($event){_vm.dialogSelect = false}}},[_vm._v(\" \"+_vm._s(_vm.$t(\"close\"))+\" \")])],1)],1)],1):_vm._e(),(_vm.dialogNew)?_c('v-dialog',{attrs:{\"max-width\":_vm.dialogWidth.small},model:{value:(_vm.dialogNew),callback:function ($$v) {_vm.dialogNew=$$v},expression:\"dialogNew\"}},[_c('AlertFileUpload',{attrs:{\"save-and-use-btn\":true},on:{\"cancel\":function($event){_vm.dialogNew = false},\"done\":_vm.addAlertFile}})],1):_vm._e(),_c('v-dialog',{attrs:{\"max-width\":_vm.dialogWidth.large},model:{value:(_vm.dialogManageFiles),callback:function ($$v) {_vm.dialogManageFiles=$$v},expression:\"dialogManageFiles\"}},[_c('v-card',[_c('v-card-title',[_vm._v(\" \"+_vm._s(_vm.$t(\"manageFiles\"))+\" \")]),_c('v-card-text',[_c('FileManagement',{attrs:{\"is-audio-file\":false,\"protected-files\":_vm.selectedFiles.map(selFile => selFile.FileId)},on:{\"change\":_vm.fetchFiles}})],1),_c('v-card-actions',[_c('v-spacer'),_c('v-btn',{on:{\"click\":function($event){_vm.dialogManageFiles = false}}},[_vm._v(\" \"+_vm._s(_vm.$t(\"close\"))+\" \")])],1)],1)],1)],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n <div>\r\n <ul v-for=\"selectedFile in selectedFiles\">\r\n <li>{{ selectedFile.FileName }}</li>\r\n </ul>\r\n <div v-if=\"totalSize !== '0.00'\">\r\n {{ $t(\"totalFileSize\") }}: {{ totalSize }} MB\r\n </div>\r\n <v-alert type=\"error\" v-if=\"fileSizeLimitWarning\">\r\n {{ $t(\"totFileSizeError\", { count: fileSizeLimit }) }}\r\n </v-alert>\r\n <v-btn outlined small @click=\"dialogSelect = true\">\r\n <v-icon @click=\"edit(item)\" left>\r\n mdi-attachment\r\n </v-icon>\r\n {{ $t(\"addAttachment\") }}\r\n </v-btn>\r\n\r\n <v-dialog\r\n v-model=\"dialogSelect\"\r\n v-if=\"dialogSelect\"\r\n :max-width=\"dialogWidth.small\"\r\n persistent\r\n >\r\n <v-card>\r\n <v-card-title>\r\n {{ $t(\"selectFiles\") }}\r\n </v-card-title>\r\n <v-card-text>\r\n <v-select\r\n :items=\"files\"\r\n v-model=\"selectedFiles\"\r\n @change=\"emitChange\"\r\n :label=\"$t('files')\"\r\n multiple\r\n item-value=\"FileId\"\r\n :item-text=\"getItemText\"\r\n outlined\r\n return-object\r\n />\r\n <v-btn @click=\"dialogNew = true\" outlined small class=\"mr-2\">\r\n {{ $t(\"newAttachment\") }}\r\n </v-btn>\r\n <v-btn @click=\"dialogManageFiles = true\" outlined small>\r\n {{ $t(\"manageFiles\") }}\r\n </v-btn>\r\n </v-card-text>\r\n <v-card-actions>\r\n <v-spacer />\r\n <v-btn @click=\"dialogSelect = false\">\r\n {{ $t(\"close\") }}\r\n </v-btn>\r\n </v-card-actions>\r\n </v-card>\r\n </v-dialog>\r\n\r\n <v-dialog\r\n v-model=\"dialogNew\"\r\n v-if=\"dialogNew\"\r\n :max-width=\"dialogWidth.small\"\r\n >\r\n <AlertFileUpload\r\n :save-and-use-btn=\"true\"\r\n v-on:cancel=\"dialogNew = false\"\r\n v-on:done=\"addAlertFile\"\r\n />\r\n </v-dialog>\r\n\r\n <v-dialog v-model=\"dialogManageFiles\" :max-width=\"dialogWidth.large\">\r\n <v-card>\r\n <v-card-title>\r\n {{ $t(\"manageFiles\") }}\r\n </v-card-title>\r\n <v-card-text>\r\n <FileManagement\r\n :is-audio-file=\"false\"\r\n v-on:change=\"fetchFiles\"\r\n :protected-files=\"selectedFiles.map(selFile => selFile.FileId)\"\r\n />\r\n </v-card-text>\r\n <v-card-actions>\r\n <v-spacer />\r\n <v-btn @click=\"dialogManageFiles = false\">\r\n {{ $t(\"close\") }}\r\n </v-btn>\r\n </v-card-actions>\r\n </v-card>\r\n </v-dialog>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport apiFile from \"@/api/v24/api.file\";\r\nimport config from \"@/config/config\";\r\nimport FileManagement from \"@/components/files/FileManagement\";\r\nimport numberUtil from \"@/util/numberUtil\";\r\nimport emailUtil from \"@/util/EmailUtil\";\r\nimport AudioRecorder from \"@/components/files/AudioRecorder.vue\";\r\nimport AlertFileUpload from \"@/components/files/AlertFileUpload.vue\";\r\n\r\nexport default {\r\n name: \"EmailAttachmentSelect\",\r\n components: { AlertFileUpload, AudioRecorder, FileManagement },\r\n\r\n data: () => ({\r\n dialogSelect: false,\r\n dialogManageFiles: false,\r\n dialogNew: false,\r\n files: [],\r\n selectedFiles: [],\r\n dialogWidth: config.dialogWith,\r\n fileSizeLimitWarning: false,\r\n fileSizeLimit: null\r\n }),\r\n\r\n computed: {\r\n totalSize() {\r\n const attachmentData = emailUtil.attachmentsFileSizeIsOk(\r\n this.selectedFiles\r\n );\r\n this.fileSizeLimit = attachmentData.limit;\r\n this.fileSizeLimitWarning = !attachmentData.sizeOk;\r\n return attachmentData.totFileSizeMb.toFixed(2);\r\n }\r\n },\r\n\r\n created() {\r\n this.fetchFiles();\r\n },\r\n\r\n methods: {\r\n fetchFiles() {\r\n return new Promise(resolve => {\r\n apiFile.getAll(\"E\").then(res => {\r\n this.files = res.Files;\r\n resolve();\r\n });\r\n });\r\n },\r\n addAlertFile(fileId) {\r\n this.dialogNew = false;\r\n this.fetchFiles().then(() => {\r\n this.selectedFiles = this.selectedFiles.concat(\r\n this.files.filter(file => file.FileId === fileId)\r\n );\r\n this.emitChange();\r\n });\r\n },\r\n getItemText(item) {\r\n return item.Description + \" - \" + item.FileName;\r\n },\r\n emitChange() {\r\n this.$emit(\"change\", this.selectedFiles);\r\n }\r\n }\r\n};\r\n</script>\r\n","import mod from \"-!./node_modules/cache-loader/dist/cjs.js??ref--13-0!./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib/index.js??vue-loader-options!./EmailAttachmentSelect.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!./node_modules/cache-loader/dist/cjs.js??ref--13-0!./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib/index.js??vue-loader-options!./EmailAttachmentSelect.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./EmailAttachmentSelect.vue?vue&type=template&id=4c82975f&\"\nimport script from \"./EmailAttachmentSelect.vue?vue&type=script&lang=js&\"\nexport * from \"./EmailAttachmentSelect.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!./node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","<template>\r\n <div v-bind:class=\"[enabled ? 'elevation-3 channel-panel' : 'mb-n6']\">\r\n <v-switch\r\n v-model=\"enabled\"\r\n :label=\"$t('sendEmail')\"\r\n v-bind:class=\"[enabled ? 'mt-n1' : '']\"\r\n @change=\"emitChange\"\r\n data-testid=\"sendEmail\"\r\n ></v-switch>\r\n <div v-if=\"enabled\">\r\n <v-text-field\r\n v-model=\"title\"\r\n @change=\"emitChange\"\r\n maxlength=\"80\"\r\n :label=\"$t('subject')\"\r\n outlined\r\n class=\"mb-n6\"\r\n data-testid=\"subject\"\r\n ></v-text-field>\r\n <v-textarea\r\n @change=\"emitChange\"\r\n class=\"mb-n5\"\r\n id=\"text-email\"\r\n v-model=\"text\"\r\n :label=\"$t('emailText')\"\r\n outlined\r\n data-testid=\"emailText\"\r\n ></v-textarea>\r\n <DynamicTextInfo class=\"mt-n8\" />\r\n <EmailAttachmentSelect\r\n v-if=\"permissionFiles && !hideAttachmentFeature\"\r\n v-on:change=\"setAttachements\"\r\n class=\"mt-2 mb-4\"\r\n />\r\n <TestEmailText :text=\"text\" :subject=\"title\" />\r\n <slot name=\"footer\"></slot>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport DynamicTextInfo from \"@/components/misc/DynamicTextInfo\";\r\nimport stringUtil from \"@/util/stringUtil\";\r\nimport TestEmailText from \"@/components/composers/TestEmailText\";\r\nimport EmailAttachmentSelect from \"../../../EmailAttachmentSelect\";\r\nimport store from \"@/store\";\r\n\r\nexport default {\r\n name: \"EmailComposer\",\r\n components: { EmailAttachmentSelect, TestEmailText, DynamicTextInfo },\r\n props: {\r\n initEnabled: {\r\n default: false\r\n },\r\n initTitle: {\r\n default: \"\"\r\n },\r\n initText: {\r\n default: \"\"\r\n },\r\n hideAttachmentFeature: {\r\n default: false\r\n }\r\n },\r\n\r\n computed: {\r\n permissionFiles() {\r\n return store.state.userProfile?.Bruker._permissions.files;\r\n }\r\n },\r\n\r\n data: () => ({\r\n enabled: false,\r\n title: \"\",\r\n text: \"\",\r\n attachments: []\r\n }),\r\n\r\n created() {\r\n this.enabled = this.initEnabled;\r\n this.title = this.initTitle;\r\n this.text = this.initText;\r\n store.dispatch(\"updateUserProfile\");\r\n },\r\n\r\n watch: {\r\n initText(newText) {\r\n this.text = newText;\r\n }\r\n },\r\n\r\n methods: {\r\n setAttachements(files) {\r\n this.attachments = files;\r\n this.emitChange();\r\n },\r\n emitChange() {\r\n this.text = stringUtil.fixUnsupportedWhitespace(this.text);\r\n this.title = stringUtil.fixUnsupportedWhitespace(this.title);\r\n this.$emit(\"change\", {\r\n enabled: this.enabled,\r\n title: this.title,\r\n text: this.text,\r\n attachments: this.attachments\r\n });\r\n }\r\n }\r\n};\r\n</script>\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EmailComposer.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EmailComposer.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./EmailComposer.vue?vue&type=template&id=8677dd24&\"\nimport script from \"./EmailComposer.vue?vue&type=script&lang=js&\"\nexport * from \"./EmailComposer.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import configVoice from \"@/config/configVoice\";\r\n\r\nconst alertResponseOptions = {\r\n /**\r\n * Creates array from alert template to be used as prop for\r\n * ResponseOptionsComposer.vue\r\n * @param template\r\n * @returns {Array}\r\n */\r\n createResponseOptArrayFromTemplate(template) {\r\n template.responseOptions = fillMissingOptions(template.responseOptions);\r\n const responses = [];\r\n template.responseOptions.forEach(resOption => {\r\n responses.push({\r\n customValue: resOption.text,\r\n value: !!resOption.text ? \"customResOpt\" : \"\",\r\n num: resOption.number,\r\n useCustomValue: !!resOption.text,\r\n link: resOption.link\r\n });\r\n });\r\n return responses;\r\n },\r\n\r\n getDefaultScenarioSettings() {\r\n return {\r\n enabled: false,\r\n options: this.getEmpty()\r\n };\r\n },\r\n\r\n getEmpty() {\r\n return [\r\n { num: \"1\", value: \"\", customValue: \"\", useCustomValue: false, link: \"\" },\r\n { num: \"2\", value: \"\", customValue: \"\", useCustomValue: false, link: \"\" },\r\n { num: \"3\", value: \"\", customValue: \"\", useCustomValue: false, link: \"\" },\r\n { num: \"4\", value: \"\", customValue: \"\", useCustomValue: false, link: \"\" },\r\n { num: \"5\", value: \"\", customValue: \"\", useCustomValue: false, link: \"\" },\r\n { num: \"6\", value: \"\", customValue: \"\", useCustomValue: false, link: \"\" },\r\n { num: \"7\", value: \"\", customValue: \"\", useCustomValue: false, link: \"\" },\r\n { num: \"8\", value: \"\", customValue: \"\", useCustomValue: false, link: \"\" }\r\n ];\r\n },\r\n\r\n oneOrMoreDefined(responseOptions) {\r\n return !!responseOptions.find(response => {\r\n return response.value || response.customValue;\r\n });\r\n },\r\n\r\n getApiFormatSmsEmail(responseObjects) {\r\n let i = 0;\r\n const len = responseObjects.length;\r\n const responseObj = {};\r\n for (i; i < len; i++) {\r\n const response = responseObjects[i];\r\n const text = response.customValue || response.value;\r\n const link = response.link ? \"|\" + response.link : \"\";\r\n const responsNum = i + 1;\r\n responseObj[\"A\" + responsNum] = text + link;\r\n }\r\n return responseObj;\r\n },\r\n\r\n /**\r\n * @name getApiFormatVoice\r\n * @param responseObjects Set to null to just get repeat option\r\n * @param languageCode\r\n * @returns {{confirmText: (string|*), choices: {}}}\r\n */\r\n getApiFormatVoice(responseObjects, languageCode) {\r\n const choices = {};\r\n const voiceLanguageData = getVoiceLanguageData(languageCode);\r\n if (responseObjects) {\r\n const responses = flatten(responseObjects);\r\n choices[\"Key1\"] = createVoiceResponseOption(\r\n voiceLanguageData,\r\n responses[0],\r\n 1\r\n );\r\n choices[\"Key2\"] = createVoiceResponseOption(\r\n voiceLanguageData,\r\n responses[1],\r\n 2\r\n );\r\n choices[\"Key3\"] = createVoiceResponseOption(\r\n voiceLanguageData,\r\n responses[2],\r\n 3\r\n );\r\n choices[\"Key4\"] = createVoiceResponseOption(\r\n voiceLanguageData,\r\n responses[3],\r\n 4\r\n );\r\n choices[\"Key5\"] = createVoiceResponseOption(\r\n voiceLanguageData,\r\n responses[4],\r\n 5\r\n );\r\n choices[\"Key6\"] = createVoiceResponseOption(\r\n voiceLanguageData,\r\n responses[5],\r\n 6\r\n );\r\n choices[\"Key7\"] = createVoiceResponseOption(\r\n voiceLanguageData,\r\n responses[6],\r\n 7\r\n );\r\n choices[\"Key8\"] = createVoiceResponseOption(\r\n voiceLanguageData,\r\n responses[7],\r\n 8\r\n );\r\n }\r\n choices[\"Key9\"] = voiceLanguageData.responseOptText.repeat;\r\n choices[\"NoUserInputMsg\"] =\r\n voiceLanguageData.responseOptText.noUserInputMsg;\r\n\r\n return {\r\n choices: choices,\r\n confirmText: voiceLanguageData.responseOptText.responseConfirm\r\n };\r\n },\r\n\r\n /**\r\n * Parses out text and link from respons option strings\r\n * @param responseOptions\r\n */\r\n parseApiFormat(responseOptions) {\r\n const returnData = [];\r\n\r\n let i = 1;\r\n for (i; i <= 9; i++) {\r\n if (!responseOptions.hasOwnProperty(\"A\" + i)) {\r\n break;\r\n }\r\n const responseOption = responseOptions[\"A\" + i];\r\n const splitData = responseOption.split(\"|\");\r\n const text = splitData[0];\r\n const link = splitData[1] || \"\";\r\n // noinspection JSUnfilteredForInLoop\r\n returnData.push({\r\n number: i,\r\n text: text,\r\n link: link\r\n });\r\n }\r\n return returnData;\r\n }\r\n};\r\n\r\nconst createVoiceResponseOption = (voiceLanguageData, option, choiceNum) => {\r\n if (!option) {\r\n return \"\";\r\n }\r\n const responseText = voiceLanguageData.responseOptText;\r\n // Add some pause for \"press 1\". It gets read to fast. For Norwegian at least.\r\n // Works well with English also.\r\n const choiceNumVoiceFriendly = choiceNum === 1 ? \",1,\" : choiceNum;\r\n\r\n return (\r\n responseText.press +\r\n \" \" +\r\n choiceNumVoiceFriendly +\r\n \" \" +\r\n responseText.for +\r\n \": \" +\r\n option\r\n );\r\n};\r\n\r\nconst getVoiceLanguageData = languageCode => {\r\n return configVoice.supportedVoiceLanguages.find(\r\n element => element.code === languageCode\r\n );\r\n};\r\n\r\nconst flatten = responseObjects => {\r\n const responsesFlat = [];\r\n responseObjects.forEach(response => {\r\n responsesFlat.push(response.customValue || response.value);\r\n });\r\n return responsesFlat;\r\n};\r\n\r\n/**\r\n * Makes sure we all options are defined. We had an issue where imported\r\n * templates via custom script only set the options that had a value. That\r\n * caused that those issues where not visible in the UI.\r\n * @param responseOptions\r\n * @returns {Array}\r\n */\r\nconst fillMissingOptions = responseOptions => {\r\n const fixedOptions = [\r\n { number: 1, text: \"\", link: \"\" },\r\n { number: 2, text: \"\", link: \"\" },\r\n { number: 3, text: \"\", link: \"\" },\r\n { number: 4, text: \"\", link: \"\" },\r\n { number: 5, text: \"\", link: \"\" },\r\n { number: 6, text: \"\", link: \"\" },\r\n { number: 7, text: \"\", link: \"\" },\r\n { number: 8, text: \"\", link: \"\" }\r\n ];\r\n\r\n const optionsDefined = responseOptions.filter(response => {\r\n return response.text;\r\n });\r\n optionsDefined.forEach(response => {\r\n const targetOption = fixedOptions.find(option => {\r\n return option.number === response.number;\r\n });\r\n targetOption.text = response.text;\r\n targetOption.link = response.link;\r\n });\r\n\r\n return fixedOptions;\r\n};\r\n\r\nexport default alertResponseOptions;\r\n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('v-card',[_c('v-card-title',{staticClass:\"headline\"},[_vm._v(_vm._s(_vm.$t(\"responses\")))]),_c('v-card-text',[_c('p',[_vm._v(_vm._s(_vm.$t(\"infoResponse\")))]),_c('p',[_c('strong',[_vm._v(_vm._s(_vm.$t(\"infoResponse2\")))])]),_vm._l((_vm.responses),function(res){return _c('div',[_c('v-card',[_c('v-card-title',[_vm._v(\" \"+_vm._s(_vm.getResponseLabel(res))+\" \")]),_c('v-card-text',[_c('v-select',{attrs:{\"outlined\":\"\",\"items\":_vm.choices,\"label\":_vm.$t('select'),\"data-testid\":\"responseOptionsComposerCard\"},on:{\"change\":function($event){return _vm.optionChanged(res)}},model:{value:(res.value),callback:function ($$v) {_vm.$set(res, \"value\", $$v)},expression:\"res.value\"}}),(res.useCustomValue)?_c('v-text-field',{attrs:{\"outlined\":\"\",\"label\":_vm.$t('typeInCustfRes'),\"maxlength\":\"37\"},model:{value:(res.customValue),callback:function ($$v) {_vm.$set(res, \"customValue\", $$v)},expression:\"res.customValue\"}}):_vm._e(),(res.useCustomValue)?_c('v-text-field',{staticClass:\"mt-n4\",attrs:{\"dense\":\"\",\"outlined\":\"\",\"label\":_vm.linkBtnLabel,\"hint\":_vm.$t('dummyLink'),\"rules\":_vm.urlRules},model:{value:(res.link),callback:function ($$v) {_vm.$set(res, \"link\", $$v)},expression:\"res.link\"}}):_vm._e(),_c('ResponsePreview',{attrs:{\"number\":res.num,\"text\":_vm.getResponseValue(res),\"link\":res.link}})],1)],1),_c('br')],1)})],2),_c('v-card-actions',[_c('v-spacer'),_c('v-btn',{staticClass:\"primary\",attrs:{\"data-testid\":\"responseOptionsComposerCardOK\"},on:{\"click\":function($event){return _vm.done()}}},[_vm._v(\" \"+_vm._s(_vm.$t(\"ok\"))+\" \")])],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n <v-card>\r\n <v-card-title class=\"headline\">{{ $t(\"responses\") }}</v-card-title>\r\n\r\n <v-card-text>\r\n <p>{{ $t(\"infoResponse\") }}</p>\r\n <p>\r\n <strong>{{ $t(\"infoResponse2\") }}</strong>\r\n </p>\r\n <div v-for=\"res in responses\">\r\n <v-card>\r\n <v-card-title>\r\n {{ getResponseLabel(res) }}\r\n </v-card-title>\r\n <v-card-text>\r\n <v-select \r\n v-model=\"res.value\" \r\n outlined \r\n @change=\"optionChanged(res)\" \r\n :items=\"choices\" \r\n :label=\"$t('select')\" \r\n data-testid=\"responseOptionsComposerCard\"\r\n ></v-select>\r\n\r\n <!-- maxlength is 37 so that respons text will fit in\r\n ReceiverResponseRegistration view on small screens -->\r\n <v-text-field \r\n v-if=\"res.useCustomValue\" \r\n outlined \r\n v-model=\"res.customValue\" \r\n :label=\"$t('typeInCustfRes')\" \r\n maxlength=\"37\" \r\n />\r\n\r\n <v-text-field \r\n v-if=\"res.useCustomValue\" \r\n v-model=\"res.link\" \r\n dense \r\n outlined \r\n :label=\"linkBtnLabel\" \r\n :hint=\"$t('dummyLink')\" \r\n class=\"mt-n4\" \r\n :rules=\"urlRules\"\r\n />\r\n\r\n <ResponsePreview \r\n :number=\"res.num\" \r\n :text=\"getResponseValue(res)\" \r\n :link=\"res.link\" \r\n />\r\n </v-card-text>\r\n </v-card>\r\n <br />\r\n </div>\r\n </v-card-text>\r\n\r\n <v-card-actions>\r\n <v-spacer></v-spacer>\r\n <v-btn class=\"primary\" @click=\"done()\" data-testid=\"responseOptionsComposerCardOK\">\r\n {{ $t(\"ok\") }}\r\n </v-btn>\r\n </v-card-actions>\r\n </v-card>\r\n</template>\r\n\r\n<script>\r\nimport ResponseChip from \"./ResponseChip\";\r\nimport ResponsePreview from \"@/components/misc/ResponsePreview\";\r\nimport formValidationRules from \"@/util/formValidationRules\";\r\n\r\nexport default {\r\n name: \"ResponseOptionsComposer\",\r\n components: { ResponsePreview, ResponseChip },\r\n\r\n props: {\r\n /**\r\n * Array of format\r\n *\r\n * { num: \"1\", value: \"\", customValue: \"\", useCustomValue: false, link: \"\" },\r\n * { num: \"2\", value: \"\", customValue: \"\", useCustomValue: false, link: \"\" },\r\n * etc\r\n */\r\n responses: {\r\n type: Array\r\n }\r\n },\r\n\r\n data: () => ({\r\n urlRules: formValidationRules.urlRules\r\n }),\r\n\r\n computed: {\r\n choices() {\r\n return [\r\n { text: this.$t(\"none\"), value: \"\" },\r\n { text: this.$t(\"customResOpt\"), value: \"customResOpt\" },\r\n { text: '\"' + this.$t(\"ok\") + '\"', value: this.$t(\"ok\") },\r\n { text: '\"' + this.$t(\"yes\") + '\"', value: this.$t(\"yes\") },\r\n { text: '\"' + this.$t(\"no\") + '\"', value: this.$t(\"no\") },\r\n { text: '\"' + this.$t(\"confirmRecMsg\") + '\"', value: this.$t(\"confirmRecMsg\") },\r\n { text: '\"' + this.$t(\"notAvail\") + '\"', value: this.$t(\"notAvail\") },\r\n { text: '\"' + this.$t(\"maybe\") + '\"', value: this.$t(\"maybe\") },\r\n { text: '\"' + this.$t(\"iAmBusy\") + '\"', value: this.$t(\"iAmBusy\") }\r\n ];\r\n },\r\n linkBtnLabel() {\r\n return `${this.$t(\"goToLinkBtnPress\")}\r\n (${this.$t(\"optional\").toLowerCase()})`;\r\n }\r\n },\r\n\r\n methods: {\r\n getResponseLabel(response) {\r\n return this.$t(\"alternative\") + \" \" + response.num;\r\n },\r\n getResponseValue(response) {\r\n return response.customValue || response.value;\r\n },\r\n optionChanged(response) {\r\n response.customValue = \"\";\r\n if (response.value === \"customResOpt\") {\r\n response.value = \"\";\r\n response.useCustomValue = true;\r\n } else {\r\n response.useCustomValue = false;\r\n }\r\n },\r\n done() {\r\n this.responses.forEach(respons => {\r\n if (respons.customValue) {\r\n // Remove any previus values if custom value is set\r\n respons.value = \"\";\r\n }\r\n });\r\n this.$emit(\"done\", this.responses);\r\n this.dialog = false;\r\n }\r\n }\r\n};\r\n</script>\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ResponseOptionsComposer.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ResponseOptionsComposer.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ResponseOptionsComposer.vue?vue&type=template&id=112f57a9&\"\nimport script from \"./ResponseOptionsComposer.vue?vue&type=script&lang=js&\"\nexport * from \"./ResponseOptionsComposer.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('v-card',[_c('v-card-title',[_vm._t(\"title\",function(){return [_vm._v(\" \"+_vm._s(_vm.$t(\"error\"))+\" \")]})],2),_c('v-card-text',[_c('v-alert',{attrs:{\"type\":\"error\"}},[_vm._t(\"text\")],2)],1),_c('v-card-actions',[_c('v-spacer'),_c('v-btn',{staticClass:\"primary\",attrs:{\"data-testid\":\"UserErrorOK\"},on:{\"click\":_vm.ok}},[_vm._v(\" \"+_vm._s(_vm.$t(\"ok\"))+\" \")])],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n <v-card>\r\n <v-card-title>\r\n <slot name=\"title\">\r\n {{ $t(\"error\") }}\r\n </slot>\r\n </v-card-title>\r\n <v-card-text>\r\n <v-alert type=\"error\">\r\n <slot name=\"text\"></slot>\r\n </v-alert>\r\n </v-card-text>\r\n <v-card-actions>\r\n <v-spacer />\r\n <v-btn @click=\"ok\" class=\"primary\" data-testid=\"UserErrorOK\">\r\n {{ $t(\"ok\") }}\r\n </v-btn>\r\n </v-card-actions>\r\n </v-card>\r\n</template>\r\n\r\n<script>\r\nexport default {\r\n name: \"UserError\",\r\n\r\n methods: {\r\n ok() {\r\n this.$emit(\"ok\");\r\n }\r\n }\r\n};\r\n</script>\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserError.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserError.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./UserError.vue?vue&type=template&id=f49a3638&\"\nimport script from \"./UserError.vue?vue&type=script&lang=js&\"\nexport * from \"./UserError.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return (_vm.text)?_c('v-chip',{class:{ fullwidth: _vm.fullWidth },attrs:{\"label\":\"\",\"id\":\"chip\"}},[(_vm.avatar)?_c('v-avatar',{attrs:{\"left\":\"\"}},[_c('v-icon',{attrs:{\"large\":\"\"}},[_vm._v(\"mdi-numeric-\"+_vm._s(_vm.number)+\"-box\")])],1):_vm._e(),_vm._v(\" \"+_vm._s(_vm.text)+\" \")],1):_vm._e()\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n <v-chip v-if=\"text\" label id=\"chip\" v-bind:class=\"{ fullwidth: fullWidth }\">\r\n <v-avatar left v-if=\"avatar\">\r\n <v-icon large>mdi-numeric-{{ number }}-box</v-icon>\r\n </v-avatar>\r\n {{ text }}\r\n </v-chip>\r\n</template>\r\n\r\n<script>\r\nexport default {\r\n name: \"ResponseChip\",\r\n\r\n props: {\r\n text: {\r\n required: true\r\n },\r\n number: {\r\n required: true\r\n },\r\n avatar: {\r\n type: Boolean,\r\n default: true\r\n },\r\n fullWidth: {\r\n type: Boolean,\r\n default: true\r\n }\r\n },\r\n\r\n methods: {\r\n getResponseValue(response) {\r\n return response.customValue || response.value;\r\n }\r\n }\r\n};\r\n</script>\r\n\r\n<style scoped>\r\n#chip {\r\n margin: 2px;\r\n}\r\n.fullwidth {\r\n width: 100%;\r\n}\r\n</style>\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ResponseChip.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ResponseChip.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ResponseChip.vue?vue&type=template&id=49d29954&scoped=true&\"\nimport script from \"./ResponseChip.vue?vue&type=script&lang=js&\"\nexport * from \"./ResponseChip.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ResponseChip.vue?vue&type=style&index=0&id=49d29954&prod&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"49d29954\",\n null\n \n)\n\nexport default component.exports","// Components\nimport VInput from '../../components/VInput'\n\n// Mixins\nimport Rippleable from '../rippleable'\nimport Comparable from '../comparable'\n\n// Utilities\nimport mixins from '../../util/mixins'\n\nexport function prevent (e: Event) {\n e.preventDefault()\n}\n\n/* @vue/component */\nexport default mixins(\n VInput,\n Rippleable,\n Comparable\n).extend({\n name: 'selectable',\n\n model: {\n prop: 'inputValue',\n event: 'change',\n },\n\n props: {\n id: String,\n inputValue: null as any,\n falseValue: null as any,\n trueValue: null as any,\n multiple: {\n type: Boolean,\n default: null,\n },\n label: String,\n },\n\n data () {\n return {\n hasColor: this.inputValue,\n lazyValue: this.inputValue,\n }\n },\n\n computed: {\n computedColor (): string | undefined {\n if (!this.isActive) return undefined\n if (this.color) return this.color\n if (this.isDark && !this.appIsDark) return 'white'\n return 'primary'\n },\n isMultiple (): boolean {\n return this.multiple === true || (this.multiple === null && Array.isArray(this.internalValue))\n },\n isActive (): boolean {\n const value = this.value\n const input = this.internalValue\n\n if (this.isMultiple) {\n if (!Array.isArray(input)) return false\n\n return input.some(item => this.valueComparator(item, value))\n }\n\n if (this.trueValue === undefined || this.falseValue === undefined) {\n return value\n ? this.valueComparator(value, input)\n : Boolean(input)\n }\n\n return this.valueComparator(input, this.trueValue)\n },\n isDirty (): boolean {\n return this.isActive\n },\n rippleState (): string | undefined {\n return !this.isDisabled && !this.validationState\n ? undefined\n : this.validationState\n },\n },\n\n watch: {\n inputValue (val) {\n this.lazyValue = val\n this.hasColor = val\n },\n },\n\n methods: {\n genLabel () {\n const label = VInput.options.methods.genLabel.call(this)\n\n if (!label) return label\n\n label!.data!.on = {\n // Label shouldn't cause the input to focus\n click: prevent,\n }\n\n return label\n },\n genInput (type: string, attrs: object) {\n return this.$createElement('input', {\n attrs: Object.assign({\n 'aria-checked': this.isActive.toString(),\n disabled: this.isDisabled,\n id: this.computedId,\n role: type,\n type,\n }, attrs),\n domProps: {\n value: this.value,\n checked: this.isActive,\n },\n on: {\n blur: this.onBlur,\n change: this.onChange,\n focus: this.onFocus,\n keydown: this.onKeydown,\n click: prevent,\n },\n ref: 'input',\n })\n },\n onClick (e: Event) {\n this.onChange()\n this.$emit('click', e)\n },\n onChange () {\n if (!this.isInteractive) return\n\n const value = this.value\n let input = this.internalValue\n\n if (this.isMultiple) {\n if (!Array.isArray(input)) {\n input = []\n }\n\n const length = input.length\n\n input = input.filter((item: any) => !this.valueComparator(item, value))\n\n if (input.length === length) {\n input.push(value)\n }\n } else if (this.trueValue !== undefined && this.falseValue !== undefined) {\n input = this.valueComparator(input, this.trueValue) ? this.falseValue : this.trueValue\n } else if (value) {\n input = this.valueComparator(input, value) ? null : value\n } else {\n input = !input\n }\n\n this.validate(true, input)\n this.internalValue = input\n this.hasColor = input\n },\n onFocus (e: FocusEvent) {\n this.isFocused = true\n this.$emit('focus', e)\n },\n onBlur (e: FocusEvent) {\n this.isFocused = false\n this.$emit('blur', e)\n },\n /** @abstract */\n onKeydown (e: Event) {},\n },\n})\n"],"sourceRoot":""}