{"version":3,"sources":["webpack:///./src/components/Sms/SmsService.js","webpack:///./node_modules/lodash/isEmpty.js","webpack:///./src/components/LazyImage.vue","webpack:///src/components/LazyImage.vue","webpack:///./src/components/LazyImage.vue?e54e","webpack:///./src/components/LazyImage.vue?e4b2","webpack:///./src/components/Sms/columns.js","webpack:///./src/components/VueEmail/VueEmailTemplateModal.vue?5b9a","webpack:///src/views/quote/components/QuoteEmailAttachments.vue","webpack:///./src/views/quote/components/QuoteEmail.vue?d6a1","webpack:///./src/views/quote/components/QuoteEmailAttachmentViewerModal.vue","webpack:///src/views/quote/components/QuoteEmailAttachmentViewerModal.vue","webpack:///./src/views/quote/components/QuoteEmailAttachmentViewerModal.vue?b240","webpack:///./src/views/quote/components/QuoteEmailAttachmentViewerModal.vue?7b47","webpack:///./src/assets/images/attachment-pdf.png","webpack:///./src/components/VueEmail/EmailService.js","webpack:///./src/views/quote/QuoteCommunications.vue","webpack:///./src/components/Sms/SmsTemplateModal.vue","webpack:///./src/components/Sms/SmsMessageTemplates.vue","webpack:///src/components/Sms/SmsMessageTemplates.vue","webpack:///./src/components/Sms/SmsMessageTemplates.vue?4d66","webpack:///./src/components/Sms/SmsMessageTemplates.vue?74ef","webpack:///src/components/Sms/SmsTemplateModal.vue","webpack:///./src/components/Sms/SmsTemplateModal.vue?8ab0","webpack:///./src/components/Sms/SmsTemplateModal.vue?fa91","webpack:///./src/views/quote/mixins/QuoteCommunicationsMixin.js","webpack:///./src/views/quote/components/QuoteEmail.vue","webpack:///./src/views/quote/components/QuoteCommunicationEmailModal.vue","webpack:///./src/views/quote/components/QuoteEmailAttachments.vue","webpack:///./src/views/quote/components/QuoteEmailAttachments.vue?ff88","webpack:///./src/views/quote/components/QuoteEmailAttachments.vue?7238","webpack:///src/views/quote/components/QuoteCommunicationEmailModal.vue","webpack:///./src/views/quote/components/QuoteCommunicationEmailModal.vue?cfea","webpack:///./src/views/quote/components/QuoteCommunicationEmailModal.vue?5f66","webpack:///./src/components/VueEmail/VueEmailTemplateModal.vue","webpack:///./src/components/VueEmail/VueEmailMessageTemplates.vue","webpack:///./src/components/VueEmail/columns.js","webpack:///src/components/VueEmail/VueEmailMessageTemplates.vue","webpack:///./src/components/VueEmail/VueEmailMessageTemplates.vue?c299","webpack:///./src/components/VueEmail/VueEmailMessageTemplates.vue?ffcb","webpack:///src/components/VueEmail/VueEmailTemplateModal.vue","webpack:///./src/components/VueEmail/VueEmailTemplateModal.vue?3838","webpack:///./src/components/VueEmail/VueEmailTemplateModal.vue?37d3","webpack:///src/views/quote/components/QuoteEmail.vue","webpack:///./src/views/quote/components/QuoteEmail.vue?f33f","webpack:///./src/views/quote/components/QuoteEmail.vue?e2d6","webpack:///./src/views/quote/components/QuoteEmailViewerModal.vue","webpack:///src/views/quote/components/QuoteEmailViewerModal.vue","webpack:///./src/views/quote/components/QuoteEmailViewerModal.vue?980a","webpack:///./src/views/quote/components/QuoteEmailViewerModal.vue?2502","webpack:///src/views/quote/QuoteCommunications.vue","webpack:///./src/views/quote/QuoteCommunications.vue?8d16","webpack:///./src/views/quote/QuoteCommunications.vue?ca43","webpack:///./node_modules/core-js/modules/es.string.ends-with.js","webpack:///./src/assets/images/attachment-doc.png","webpack:///./src/components/ImageSelect/index.js","webpack:///./src/components/VueEmail/index.js","webpack:///./src/views/quote/QuoteCommunications.vue?c822","webpack:///./src/components/Sms/SmsTemplateModal.vue?5c4d","webpack:///./src/views/quote/components/QuoteCommunicationEmailModal.vue?d0b8"],"names":["getEntitySummaries","filter","serialised","serialiseMessageFilter","url","FqApi","get","result","data","entityProto","require","filterMessage","SmsMessageFilter","SmsMessageFilterModel","buffer","encode","finish","b64encoded","ProtoBuf","util","base64","length","getSmsMessageDropdownProto","serialiseSmsMessageDropdownFilter","ProtoBufApi","proto","message","SmsMessageDropdown","SmsMessageDropdownModel","entity","decode","Uint8Array","assets","SmsMessageDropdownFilter","SmsMessageDropdownFilterModel","sendSms","info","post","postEntity","putEntity","put","id","deleteEntity","delete","baseKeys","getTag","isArguments","isArray","isArrayLike","isBuffer","isPrototype","isTypedArray","mapTag","setTag","objectProto","Object","prototype","hasOwnProperty","isEmpty","value","splice","tag","size","key","call","module","exports","render","_vm","this","_c","_self","staticClass","staticStyle","isLoaded","_e","attrs","src","on","$event","setLoading","staticRenderFns","name","props","type","default","loading","computed","watch","methods","state","console","component","Columns","TableColumn","filters","components","QuoteEmailAttachmentViewerModal","quoteId","emailId","attachments","isIncoming","isModalActive","isViewerModalOpen","attachmentUrl","innerAttachments","selectedQuoteEmailAttachmentId","viewAttachment","attachmentCategories","attachmentCategory","isCopyingAttachmentToQuote","hasSelected","selectedAttachments","handler","created","mounted","loadQuoteAttachmentCategories","QuoteService","getAttachment","EmailService","setSelectedStatusAll","item","openModal","attachment","decodeData","base64Data","closeModal","handleIsSelectedChange","isSelected","imageUpdated","downloadUrl","fileName","link","URL","downloadModifiedDocument","response","hasExtension","extension","viewImage","isImage","copyAttachmentToQuote","row","documentCount","isActive","animationIn","animationOut","animationDuration","class","showIcon","iconType","iconName","_v","externalStorageURL","style","cancel","BaseModalEx","LazyImage","active","buttonLocation","selectedDervied","internalAttachment","redaction","maxHeight","isPDF","baseUrl","send","formData","sendExport","exportOptions","reportOptions","getAssetsEmailAddresses","customer","vehicle","directives","rawName","editMaximize","expression","activeTab","setActiveTab","_m","smsUnreadCount","isShowWhatsApp","whatsappUnreadCount","emailUnreadCount","ref","_l","messages","isRead","_s","truncate","sender","isOutgoing","recipients","$filters","formatDateTimeLocale","createdDate","$userInfo","locale","isEmail","getEmailStatus","openMessageModal","getEmailStatusIndicator","viewEmail","openAttachmentModel","replyTo","isSelectedReplyToMessage","messageId","messageBodyStyle","subject","isViewEmail","viewMessage","closeViewEmail","slot","isEmailerActive","replyToMessageId","replyToEmail","selectedAttachmentEmailId","msgDetails","emailSent","resetEmail","closeAttachmentModel","toggleEditMaximize","phoneNoMask","phoneNoTokens","model","mobile","callback","$$v","$set","templates","isTemplateLoading","templateFilter","pageSize","selectTemplate","selectedTemplate","approvedTemplate","maxLength","domProps","target","composing","isSmsTemplateModalActive","getToolTip","closeSmsTemplateModal","isMessageModalActive","messageModalMessage","closeMessageModal","enableSave","setEnableSave","add","save","close","columns","pageIndex","totalRows","isTableLoading","sortColumn","sortOrder","onPageChange","sort","entitySummaries","sms","index","selectedRow","highlightSelected","editMessage","deleteMessage","isEnableSave","smsMessage","isMessageEntered","enterMessage","insertTag","isUnsavedModalActive","skipSave","saveContinue","isConfirmModalActive","BulmaTable","UnsavedModal","ConfirmModal","FocusInserted","isNew","isEdit","isDeleted","isBack","isClose","selected","oriMsg","getData","SmsService","reset","back","msg","confirmDelete","EventBus","saveSms","newMsg","event","order","myValue","myField","sel","SmsMessageTemplates","edit","moduleName","moduleNameQuote","mapGetters","getEmailer","getParameters","currentSnapshot","mapActions","addEmailer","removeEmailer","addParameter","addParameters","setEmailerAttachments","removeParameter","removeParameters","getStoreItem","selectedImages","emailer","assetId","innerReplyToEmail","replyToSenderEmails","replyToEmailCcs","replyToEmailBccs","innerReplyToEmailSubject","innerReplyToEmailMessage","newEmailInput","sent","isAttachmentModalActive","closeAttachModal","isEmailTemplateModalActive","enableSend","enableAttach","toggleAttachButton","openAttachModel","closeTemplateModal","_t","innerEmailer","isActiveImageSelect","attachmentOptions","selectedQuotes","map","q","getSelectedImage","imagesSelectedForAttachment","isActiveAttachment","innerSelectedAttachmentEmailId","closeAttachmentsModel","canAttach","ok","cancelInWording","cancelDisabled","$$selectedVal","Array","options","o","val","_value","multiple","m","quoteAttachmentCategoryId","quoteEmailAttachmentId","isPdf","filename","ImageSelect","QuoteEmailAttachments","mixins","okDisabled","attachDisabled","defaul","innerValue","childModel","set","newValue","emailerId","getImageIdForAttachment","updateAttachment","prevIndex","saveEmail","VueEmailMessageTemplates","VueEmail","QuoteCommunicationEmailModal","VueEmailTemplateModal","Multiselect","quote","required","rego","jobStart","jobEnd","excess","shopName","reportName","quoteIds","isEnteringNewEmail","selectedImageIds","innerMsgDetails","getSender","differences","deep","beforeDestroy","assignInnerValue","isEmptyObject","obj","buildReplyEmail","newEmail","clearSessionStorage","sessionStorage","setEmailer","resetEmailer","_emailer","retrieveEmailer","persistEmailer","cleanEmailer","StoreUtil","updateAttachmentList","discardEmail","getEmailMessageDropdown","postData","setTimeout","clearSelectedTemplate","replaceTags","extractName","resetReplyToEmail","email","cc","bcc","getHtmlMessage","ucaseFirst","str","SmsTemplateModal","QuoteEmail","QuoteEmailViewerModal","P","pattern","imgLink","smsDetails","interval","replyToSender","replyToContent","communicationTypes","isSMS","isWhatsApp","updated","clearInterval","getEntity","getMessages","WhatsAppService","assignMessageDetails","getSmsMessageDropdown","autoRefresh","stopAutoRefresh","setMessagesAsRead","tab","getMaxLength","resetMsgLength","setParams","getSettings","setting","getUnreadCount","waUnreadCount","max","beforeRouteEnter","to","from","next","beforeRouteLeave","noOfChar","$","uncurryThis","getOwnPropertyDescriptor","f","toLength","toString","notARegExp","requireObjectCoercible","correctIsRegExpLogic","IS_PURE","slice","min","Math","CORRECT_IS_REGEXP_LOGIC","MDN_POLYFILL_BUG","descriptor","String","writable","forced","endsWith","searchString","that","endPosition","arguments","undefined","len","end","search","r","VueEmailModal"],"mappings":"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,kCAuBA,WAvBA,QAwBA,YACA,4BACA,0BACA,oCACA,UACA,gBAEA,gCAEA,4GACA,0BACA,kBACA,0BApCA,4BAqCA,6BArCA,kCAuCA,WAvCA,QA2CA,sBACA,gBAGA,uBACA,oBAhDA,+CAmDAD,SApOA,WAqOA,YACA,mBACA,aACA,uBACA,gBACA,sBACA,cACA,aACA,6BACA,sCACA,8BACA,cACA,eACA,4BACA,gCACA,2CACA,aACA,6BACA,sCACA,8BACA,cACA,eACA,8BAGAlJ,WA9PA,WA8PA,WACA,kBACA,eACA,gBACA,6BACA,oBACA,8BACA,qHAGAyI,kBAxQA,SAwQA1O,EAAAwO,EAAAkC,GACA,mBACA,iBAEAtC,aA5QA,SA4QAL,GACA,wBACA,gBAEAM,KAhRA,SAgRAhL,EAAAsN,GACA,yBACA,wBACA,gBAEA1B,UArRA,SAqRA2B,GACA,4CAEA,uBACAC,UACA,uCACAC,cACA,4CACA,uBACA,iBACAD,0EAEAA,WAEA,wBACA,oBACAA,aCle2W,I,YCOvW9M,EAAY,eACd,EACA,EACA,GACA,EACA,KACA,KACA,MAIa,EAAAA,E,QCuDA,GACfV,wBACAc,YAAA2D,mBAAAiJ,uBACAzN,OACAxB,WACAkG,QACAzE,aACAC,YAEA2D,aACA5D,YACAC,kBAEA4D,cACA7D,YACAC,mBAEA6D,mBACA9D,qBACAC,YAEAyE,gBACA1E,YACAC,eAEA+D,UACAhE,aACAC,YAEAgE,UACAjE,YACAC,mBAEAiE,UACAlE,YACAC,6BAGA7E,KAtCA,WAuCA,OACAuI,YACAuG,gBAGA/J,YACA2B,QA7CA,aA8CAC,QA9CA,WA+CA,+BAEA1B,SACAoN,KADA,aAEAxI,KAFA,WAEA,oJACA,4BACA,kBAFA,8CAIAmF,IANA,WAOA,qCACA,oBAEAE,MAVA,WAWA,+BACA,oBACA,kBAEAhG,OAfA,WAgBA,yCAEA6F,cAlBA,SAkBA5L,GACA,mBAEA8L,KArBA,WAsBA,yCACA,+BACA,uBClJwW,ICQpW,G,UAAY,eACd,EACA,EACA,GACA,EACA,KACA,WACA,OAIa,I,6ECjBTqD,EAAa,sBACbC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YACA,4BACA,0BACA,oCACA,6BACA,4GACA,0BACA,kBACA,0BApBA,2BAqBA,mBArBA,kCAuBA,WAvBA,QAwBA,YACA,4BACA,0BACA,oCACA,UACA,aAEA,6BAEA,4GACA,0BACA,kBACA,0BApCA,4BAqCA,6BArCA,kCAuCA,WAvCA,QA2CA,sBACA,gBAGA,uBACA,oBAhDA,+CAmDAD,SA3OA,WA4OA,YACA,mBACA,aACA,uBACA,gBACA,sBACA,cACA,aACA,6BACA,mCACA,2BACA,cACA,eACA,yBACA,gCACA,2CACA,aACA,6BACA,mCACA,2BACA,cACA,eACA,2BAGAlJ,WArQA,WAqQA,WACA,kBACA,eACA,gBACA,6BACA,oBACA,2BACA,qHAGAyI,kBA/QA,SA+QA1O,EAAAwO,EAAAkC,GACA,mBACA,iBAEAtC,aAnRA,SAmRAL,GACA,wBACA,gBAEAM,KAvRA,SAuRAhL,EAAAsN,GACA,yBACA,wBACA,gBAEA1B,UA5RA,SA4RA2B,GACA,yCAEA,uBACAC,UACA,uCACAC,cACA,4CACA,uBACA,iBACAD,0EAEAA,WAEA,qBACA,oBACAA,aCzegX,MCO5W,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QCwDA,IACfxN,6BACAc,YAAA2D,mBAAAgO,6BACAxS,OACAxB,WACAkG,QACAzE,aACAC,YAEA2D,aACA5D,YACAC,kBAEA4D,cACA7D,YACAC,mBAEA6D,mBACA9D,qBACAC,YAEAyE,gBACA1E,YACAC,eAEA+D,UACAhE,aACAC,YAEAgE,UACAjE,YACAC,mBAEAiE,UACAlE,YACAC,6BAGA7E,KAtCA,WAuCA,OACAuI,YACAuG,gBAGA/J,YACA2B,QA7CA,aA8CAC,QA9CA,WA+CA,+BAEA1B,SACAoN,KADA,aAEAxI,KAFA,WAEA,oJACA,4BACA,kBAFA,8CAIAmF,IANA,WAOA,uCACA,oBAEAE,MAVA,WAWA,+BACA,oBACA,kBAEAhG,OAfA,WAgBA,2CAEA6F,cAlBA,SAkBA5L,GACA,mBAEA8L,KArBA,WAqBA,oKACA,0CADA,OAGA,4BACA,iBAJA,gDChJ6W,MCQzW,I,UAAY,eACd,GACA,GACA,IACA,EACA,KACA,WACA,OAIa,M,QCqHf,oEACA,GACA,qbAEe,IACfvK,kBACAc,YAAA4R,gBAAAC,gCAAAC,yBAAAC,iBACAjB,WACA3R,OACA6S,OACA5S,YACA6S,aAEArD,cACAxP,aACAC,YAEAsP,YACAvP,aACAC,YAEAwP,oBACAzP,aACAC,YAEAkI,cACAnI,YACAC,mBACA,WAGAmI,2BACApI,YACAC,YAEAgB,YACAjB,aACAC,YAEAoI,YACArI,YACAC,mBACA,OACAa,aACAyE,cACAuN,UACAC,cACAC,YACAC,YACApK,YACAvM,WACA4W,gBAKA9X,gBACA,OAGAsT,SACArR,QACA8V,gBACAxE,YAIAF,kBACA2E,YACAC,sBACAC,oBAEAzE,uBACAC,mBACAC,oBACAK,2BACAR,qBACAI,4BACAC,4BACAqB,kCACA3K,gBAEA2J,8BACApG,qBACAD,aACA3C,YACAgD,oBACAH,gBACA7M,WACAkO,YACApB,cAEAmK,qBAGApT,UACAqT,UADA,WAEA,6BACA,wBACA,iDAMApT,OACA+H,aADA,SACA7L,GACA,oBACA,6BACA,kCACA,wBAUA,uBACAuF,sBAAA,WACA,oDACA,8CACA,wDACA,gBAEA,SACA4R,uBACA,iFACA,oCACA,8EACA,2CAiBAC,SAEAtL,2BACAvG,sBACA,sCACA,oCAKAC,QA3JA,WA2JA,oJACA,wBACA,eACA,4BACA,qBAJA,8CAMAC,QAjKA,WAkKA,oBACA,wBAEA4R,cArKA,WAsKA,qBAEAtT,SACAuT,iBADA,WAEA,sCAEAC,cAJA,SAIAC,GAEA,2CAEA,wCAGA,2DAEA,iCAKA,UAEAC,gBApBA,WAqBA,iDACA,yCACA,qBACA,kCAEA,gCACA,uCAEA,iCACA,wCAEA,eACA,iCACA,oEACA,oDAGA,8DACA,yFACA,mEAKA,mDACA,mDACA,4BACA,wBACA,0BAIA7E,cArDA,SAqDA8E,GACA,2BAEAC,oBAxDA,WAyDAC,iGACAA,kGAEAC,WA5DA,WA6DA,iBACAzF,6BACAA,yBACAA,8CACAA,iGACAA,yCACAA,4DACAA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S,CAACE,YAAY,iBAAiBI,MAAM,CAAC,eAAe,SAASE,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAOX,EAAIsL,WAAW,CAACpL,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,6BAA6BF,EAAG,OAAO,CAACF,EAAImF,GAAG,sBAEp1GtE,GAAkB,GCmHP,IACfC,6BACAc,YACA2D,oBAGAxE,OACA0E,QACAzE,aACAC,YAEA2D,aACA5D,YACAC,kBAEA4D,cACA7D,YACAC,mBAEA6D,mBACA9D,qBACAC,YAEAyE,gBACA1E,YACAC,eAEA+D,UACAhE,aACAC,YAEAgE,UACAjE,YACAC,mBAEAiE,UACAlE,YACAC,0BAEAkV,OACAnV,YACAC,mBACA,YAIA7E,KA9CA,WA+CA,OACAuI,yBACAgB,qBACAC,mCACAC,aACAC,oBAGA3E,YACAC,OACA+U,MADA,SACA5W,GACA,aACAgC,wBACAA,4BAEAkE,OANA,SAMAlG,GACA,gBACAgC,iBAGAuB,QAnEA,aAoEAC,QApEA,aAqEA1B,SACAiV,eADA,WACA,MACA,0EAEA,UAEAC,WANA,SAMAC,GACA,6CAEAlL,MATA,WAUA,uBCpM4X,MCOxX,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QC8RA,IACfxK,2BAEAc,YAAA+R,gBAAA8C,mBAAAC,cAAAC,yBAAApR,oBACAkB,YACAyG,sBAEAwF,WACA3R,OACAxB,OACAyB,YACAC,cAEAsF,UACAvF,YACAC,cAEAuF,SACAxF,YACAC,cAEA2D,aACA5D,YACAC,kBAEA4D,cACA7D,YACAC,mBAEA6D,mBACA9D,qBACAC,aAGA7E,gBACA,OACAqB,YACAiM,gCACAC,eACAiN,GACAC,wBAGAxN,YACAvH,aACAyE,cACAuN,UACAC,cACAC,YACAC,YACApK,YACAvM,WACA4W,YACA4C,YAEAC,sBACA7M,qBACAD,aACA3C,YACAgD,oBACAH,gBACA7M,WACAkO,YACApB,cAEAQ,4BACAoM,cACAnQ,qBACA2D,YACAvD,kBACAsD,oBACApD,mBACAH,iBACAE,sBACAgC,oB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","file":"static/js/quote-communications-chunk.21ecd7fa.js","sourcesContent":["import FqApi from '@/services/fq-api'\nimport ProtoBuf from 'protobufjs'\nimport ProtoBufApi from '@/services/protobuf-api'\n\nexport default {\n  async getEntitySummaries(filter) {\n    const serialised = this.serialiseMessageFilter(filter)\n    const url = `/sms/list/${serialised}`\n    const result = await FqApi.get(url)\n    return result.data\n  },\n  serialiseMessageFilter(filter) {\n    const entityProto = require('../../assets/proto/sms/SmsMessageFilter.proto')\n    const filterMessage = entityProto.SmsMessageFilter.SmsMessageFilterModel\n    const buffer = filterMessage.encode(filter).finish()\n    const b64encoded = ProtoBuf.util.base64.encode(buffer, 0, buffer.length)\n    return b64encoded\n  },\n  async getSmsMessageDropdownProto(filter) {\n    const serialised = this.serialiseSmsMessageDropdownFilter(filter)\n    const result = await ProtoBufApi(`/sms/protobuf/sendsms/listcombo/${serialised}`)\n    const proto = require('../../assets/proto/sms/SmsMessageDropdown.proto')\n    const message = proto.SmsMessageDropdown.SmsMessageDropdownModel\n    const entity = message.decode(new Uint8Array(result.data))\n    return entity.assets\n  },\n  serialiseSmsMessageDropdownFilter(filter) {\n    const entityProto = require('../../assets/proto/sms/SmsMessageDropdownFilter.proto')\n    const filterMessage = entityProto.SmsMessageDropdownFilter.SmsMessageDropdownFilterModel\n    const buffer = filterMessage.encode(filter).finish()\n    const b64encoded = ProtoBuf.util.base64.encode(buffer, 0, buffer.length)\n    return b64encoded\n  },\n  async sendSms(info) {\n    const result = await FqApi.post('/sms/send', info)\n    return result.data\n  },\n  postEntity(entity) {\n    return FqApi.post('/sms/new', entity)\n  },\n  putEntity(entity) {\n    return FqApi.put(`/sms/${entity.id}`, entity)\n  },\n  deleteEntity(id) {\n    return FqApi.delete('/sms/' + id)\n  }\n}\n","var baseKeys = require('./_baseKeys'),\n    getTag = require('./_getTag'),\n    isArguments = require('./isArguments'),\n    isArray = require('./isArray'),\n    isArrayLike = require('./isArrayLike'),\n    isBuffer = require('./isBuffer'),\n    isPrototype = require('./_isPrototype'),\n    isTypedArray = require('./isTypedArray');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n    setTag = '[object Set]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if `value` is an empty object, collection, map, or set.\n *\n * Objects are considered empty if they have no own enumerable string keyed\n * properties.\n *\n * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n * jQuery-like collections are considered empty if they have a `length` of `0`.\n * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n * @example\n *\n * _.isEmpty(null);\n * // => true\n *\n * _.isEmpty(true);\n * // => true\n *\n * _.isEmpty(1);\n * // => true\n *\n * _.isEmpty([1, 2, 3]);\n * // => false\n *\n * _.isEmpty({ 'a': 1 });\n * // => false\n */\nfunction isEmpty(value) {\n  if (value == null) {\n    return true;\n  }\n  if (isArrayLike(value) &&\n      (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n        isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n    return !value.length;\n  }\n  var tag = getTag(value);\n  if (tag == mapTag || tag == setTag) {\n    return !value.size;\n  }\n  if (isPrototype(value)) {\n    return !baseKeys(value).length;\n  }\n  for (var key in value) {\n    if (hasOwnProperty.call(value, key)) {\n      return false;\n    }\n  }\n  return true;\n}\n\nmodule.exports = isEmpty;\n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"is-relative\",staticStyle:{\"height\":\"100%\",\"width\":\"100%\",\"object-fit\":\"contain\"}},[(!_vm.isLoaded)?_c('div',{staticClass:\"loading-image\",staticStyle:{\"height\":\"100%\",\"width\":\"100%\",\"object-fit\":\"contain\"}}):_vm._e(),_c('img',{staticStyle:{\"height\":\"100%\",\"width\":\"100%\",\"object-fit\":\"contain\"},attrs:{\"src\":_vm.src},on:{\"load\":function($event){return _vm.setLoading(false)}}})])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n  <div class=\"is-relative\"\n    style=\"height: 100%; width: 100%; object-fit: contain;\">\n    <div class=\"loading-image\"\n      style=\"height: 100%; width: 100%; object-fit: contain;\"\n      v-if=\"!isLoaded\" />\n    <img :src=\"src\"\n      style=\"height: 100%; width: 100%; object-fit: contain;\"\n      @load=\"setLoading(false)\">\n  </div>\n</template>\n\n<script>\nexport default {\n  name: 'LazyImage',\n  props: {\n    src: {\n      type: String,\n      default: null\n    }\n  },\n  data() {\n    return {\n      loading: false\n    }\n  },\n  computed: {\n    isLoaded() {\n      return !this.loading && this.src != '' && this.src != null\n    }\n  },\n  watch: {\n    src: function (val, oldVal) {\n      this.setLoading(true)\n    }\n  },\n  methods: {\n    setLoading(state) {\n      console.log('x', state)\n      this.loading = state\n    }\n  }\n}\n</script>\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!./LazyImage.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!./LazyImage.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./LazyImage.vue?vue&type=template&id=793349a4\"\nimport script from \"./LazyImage.vue?vue&type=script&lang=js\"\nexport * from \"./LazyImage.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 { TableColumn } from '@/classes'\n\nconst Columns = [new TableColumn('Message Template', 'message', true, 'asc', 'left'), new TableColumn('', 'action', false, 'desc', 'centered')]\n\nexport { Columns }\n","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./VueEmailTemplateModal.vue?vue&type=style&index=0&id=c9b32cb2&prod&lang=scss&scoped=true\"","<template>\r\n  <div>\r\n    <div class=\"columns is-multiline mt-3 mr-2\">\r\n      <div class=\"column\"\r\n        v-show=\"hasSelected\">\r\n        Please select category:\r\n        <div class=\"select\">\r\n          <select v-model=\"attachmentCategory\">\r\n            <option v-for=\"(m) in attachmentCategories\"\r\n              :key=\"m.quoteAttachmentCategoryId\"\r\n              :value=\"m.quoteAttachmentCategoryId\">{{ m.name }}</option>\r\n          </select>\r\n        </div>\r\n        <a v-show=\"hasSelected\"\r\n          class=\"button tooltip ml-2\"\r\n          @click=\"copyAttachmentToQuote(true)\"\r\n          data-tooltip=\"Copy to quote\">\r\n          <span class=\"icon has-text-primary\">\r\n            <i class=\"mdi mdi-content-copy mdi-24px\" />\r\n          </span>\r\n        </a>\r\n      </div>\r\n      <div class=\"column is-narrow\"\r\n        :class=\"[{ 'is-full': !hasSelected }]\">\r\n        <p class=\"buttons is-justify-content-right\">\r\n\r\n          <!-- <a v-show=\"hasSelected\"\r\n            class=\"button tooltip\"\r\n            @click=\"openEmailModal()\"\r\n            data-tooltip=\"Email\">\r\n            <span class=\"icon\">\r\n              <i class=\"mdi mdi-email-fast mdi-24px\" />\r\n            </span>\r\n          </a> -->\r\n          <a class=\"button tooltip\"\r\n            @click=\"setSelectedStatusAll(true)\"\r\n            v-show=\"isIncoming\"\r\n            data-tooltip=\"Select all\">\r\n            <span class=\"icon has-text-success\">\r\n              <i class=\"mdi mdi-select-all mdi-24px\" />\r\n            </span>\r\n          </a>\r\n          <a v-show=\"hasSelected\"\r\n            class=\"button tooltip\"\r\n            @click=\"setSelectedStatusAll(false)\"\r\n            data-tooltip=\"Deselect all\">\r\n            <span class=\"icon has-text-grey\">\r\n              <i class=\"mdi mdi-select-off mdi-24px\" />\r\n            </span>\r\n          </a>\r\n        </p>\r\n\r\n      </div>\r\n    </div>\r\n    <div>\r\n      <div class=\"columns is-multiline \">\r\n        <div v-for=\"attachment in innerAttachments\"\r\n          class=\"column is-1 m-0 p-1\"\r\n          :key=\"attachment.quoteEmailAttachmentId\">\r\n          <div class=\"is-clickable is-unselectable has-background-light py-0 px-0\">\r\n            <div class=\"columns is-gapless  is-relative\">\r\n              <div class=\"button is-primary is-small px-1 m-0 \"\r\n                v-show=\"isIncoming\"\r\n                @click=\"()=>{ attachment.isSelected = !attachment.isSelected }\"\r\n                :class=\"{'is-light': !attachment.isSelected}\"\r\n                style=\"position:absolute; top: 0; left: 0; z-index: 1\">\r\n                <i class=\"mdi mdi-check\"\r\n                  :class=\"{'':attachment.isSelected,'has-text-grey-light':!attachment.isSelected}\" />\r\n              </div>\r\n\r\n              <div class=\"column is-full is-clipped\">\r\n                <figure class=\"image is-3by4 is-fullwidth is-vcentered\"\r\n                  @click=\"viewImage(attachment, attachment.isImage)\">\r\n                  <img v-if=\"attachment.isImage\"\r\n                    style=\"object-fit: cover\"\r\n                    :src=\"attachment.externalStorageURL\">\r\n                  <img alt=\"Vue logo\"\r\n                    v-if=\"attachment.isPdf\"\r\n                    src=\"../../../assets/images/attachment-pdf.png\">\r\n                  <img alt=\"Vue logo\"\r\n                    v-if=\"!attachment.isImage && !attachment.isPdf\"\r\n                    src=\"../../../assets/images/attachment-doc.png\">\r\n                </figure>\r\n                <div class=\"columns is-multiline column is-clipped p-0 m-0\">\r\n                  <div class=\"column is-full p-0 m-0\"\r\n                    style=\"overflow:hidden;text-overflow: ellipsis; font-weight: bold; white-space: nowrap;\"\r\n                    :tooltip=\"attachment.filename\"\r\n                    :title=\"attachment.filename\">{{ attachment.filename }})</div>\r\n                </div>\r\n              </div>\r\n\r\n            </div>\r\n          </div>\r\n          <quote-email-attachment-viewer-modal :active=\"isViewerModalOpen\"\r\n            v-if=\"isViewerModalOpen\"\r\n            :attachment=\"viewAttachment\"\r\n            :quote-id=\"quoteId\"\r\n            @cancel=\"viewImage(null)\"\r\n            :is-incoming=\"isIncoming\" />\r\n        </div>\r\n      </div>\r\n    </div>\r\n  </div>\r\n\r\n</template>\r\n\r\n<script>\r\nimport QuoteEmailAttachmentViewerModal from './QuoteEmailAttachmentViewerModal.vue'\r\nimport QuoteService from '@/views/quote/QuoteService'\r\n//import { DateTime } from 'luxon'\r\nimport { EmailService } from '@/services'\r\nimport { EventHubTypes } from '@/enums'\r\n\r\nexport default {\r\n  name: 'QuoteEmailAttachments',\r\n  filters: {},\r\n  components: { QuoteEmailAttachmentViewerModal },\r\n  props: {\r\n    quoteId: {\r\n      type: String\r\n    },\r\n    emailId: {\r\n      type: String\r\n    },\r\n    // quoteAttachmentId: {\r\n    //   type: String\r\n    // },\r\n    // quoteAttachmentCategoryId: {\r\n    //   type: String\r\n    // },\r\n    attachments: {\r\n      type: Array,\r\n      default: () => []\r\n    },\r\n    // attachment: {\r\n    //   type: Object\r\n    // },\r\n    // categories: {\r\n    //   type: Array,\r\n    //   default: () => []\r\n    // }\r\n    isIncoming: {\r\n      type: Boolean,\r\n      default: false\r\n    }\r\n  },\r\n  data() {\r\n    return {\r\n      isModalActive: false,\r\n      isViewerModalOpen: false,\r\n      attachmentUrl: '',\r\n      innerAttachments: [],\r\n      selectedQuoteEmailAttachmentId: '',\r\n      viewAttachment: null,\r\n      attachmentCategories: [],\r\n      attachmentCategory: '',\r\n      isCopyingAttachmentToQuote: false\r\n    }\r\n  },\r\n  computed: {\r\n    hasSelected() {\r\n      return this.innerAttachments.filter((i) => i.isSelected).length > 0\r\n    },\r\n    selectedAttachments() {\r\n      return this.innerAttachments.filter((i) => i.isSelected)\r\n    }\r\n  },\r\n  watch: {\r\n    emailId: {\r\n      handler: function (newVal, oldVal) {\r\n        console.log(newVal)\r\n        this.getAttachment()\r\n      }\r\n    }\r\n  },\r\n  async created() {\r\n    await this.getAttachment()\r\n    await this.loadQuoteAttachmentCategories()\r\n  },\r\n  mounted() {},\r\n  methods: {\r\n    async loadQuoteAttachmentCategories() {\r\n      this.attachmentCategories = await QuoteService.getQuoteAttachmentCategories()\r\n      if (!this.attachmentCategory) {\r\n        this.attachmentCategory = this.attachmentCategories[0].quoteAttachmentCategoryId\r\n      }\r\n    },\r\n    async getAttachment() {\r\n      const attachments = await EmailService.getQuoteEmailAttachments(this.quoteId, this.emailId, this.isIncoming)\r\n      this.innerAttachments = attachments\r\n    },\r\n    setSelectedStatusAll(value) {\r\n      this.innerAttachments.forEach(function (item) {\r\n        item.isSelected = value\r\n      })\r\n    },\r\n    openModal(attachment) {\r\n      const filename = attachment.filename\r\n      //const decodeData = this.decodeData(attachment.ImageContentBase64)\r\n      if (filename.toLowerCase().endsWith('.pdf')) {\r\n        this.attachmentUrl = `data:application/pdf;base64,${attachment.imageContentBase64}`\r\n      } else {\r\n        this.attachmentUrl = `data:image/jpeg;base64,${attachment.imageContentBase64}`\r\n      }\r\n      this.isModalActive = true\r\n    },\r\n    decodeData(base64Data) {\r\n      return Buffer.from(base64Data, 'base64')\r\n    },\r\n    closeModal() {\r\n      this.isModalActive = false\r\n      this.$emit('close')\r\n    },\r\n    handleIsSelectedChange(value) {\r\n      let isSelected = value\r\n      //this.attachment.isSelected = isSelected\r\n      //console.log('sending update:attachment', isSelected)\r\n      this.$emit('update:attachment', { attachment: this.attachment, isSelected: isSelected })\r\n    },\r\n    imageUpdated() {\r\n      this.$emit('image-uploaded')\r\n    },\r\n    downloadUrl(url, fileName) {\r\n      const link = document.createElement('a')\r\n      link.href = url\r\n      link.download = fileName\r\n      link.click()\r\n      URL.revokeObjectURL(link.href)\r\n    },\r\n    async downloadModifiedDocument(attachment) {\r\n      const response = await EmailService.downloadModifiedQuoteEmailAttachment(this.quoteId, attachment.quoteEmailAttachmentId, attachment.isIncoming)\r\n      let fileName = attachment.filename\r\n      // if (fileName.indexOf('.pdf') === -1) {\r\n      //   fileName += '.pdf'\r\n      // }\r\n      console.log(response)\r\n      if (attachment.isPdf) {\r\n        this.downloadUrl('data:application/pdf;base64,' + response.data, fileName)\r\n      } else if (this.hasExtension(fileName, '.xml')) {\r\n        this.downloadUrl('data:application/xml;base64,' + response.data, fileName)\r\n      } else {\r\n        this.downloadUrl('data:application/text/plain;base64,' + response.data, fileName)\r\n      }\r\n    },\r\n    hasExtension(fileName, extension) {\r\n      return fileName.toLowerCase().endsWith(extension.toLowerCase())\r\n    },\r\n    async viewImage(attachment, isImage) {\r\n      console.log(attachment)\r\n      if (attachment) {\r\n        if (!isImage) {\r\n          this.downloadModifiedDocument(attachment)\r\n        } else {\r\n          this.isViewerModalOpen = true\r\n          this.selectedQuoteEmailAttachmentId = attachment.quoteEmailAttachmentId\r\n          this.viewAttachment = attachment\r\n        }\r\n      } else {\r\n        this.isViewerModalOpen = false\r\n        this.selectedQuoteEmailAttachmentId = ''\r\n        this.viewAttachment = null\r\n      }\r\n    },\r\n    async copyAttachmentToQuote() {\r\n      this.$showSpinner('Copying attachment')\r\n      for (let row of this.selectedAttachments) {\r\n        await EmailService.copyAttachmentToQuote(row.quoteEmailAttachmentId, this.quoteId, this.attachmentCategory)\r\n      }\r\n      this.$hideSpinner('Copying images')\r\n      var response = await QuoteService.getQuoteAttachments(this.quoteId)\r\n      const data = response.data\r\n      let documentCount = Object.values(data).reduce((total, row) => total + Object.values(row.quoteAttachments).length, 0)\r\n      this.$eventHub.$emit(EventHubTypes.DocumentCountChanged, documentCount)\r\n\r\n      this.$notification.openNotificationWithType('success','Copy to attachment', 'Save successful')\r\n      //console.log('trigger')\r\n      //this.toggleCopyAttachmentModal(false)\r\n    }\r\n  }\r\n}\r\n</script>","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./QuoteEmail.vue?vue&type=style&index=0&id=ce9c9156&prod&lang=scss&scoped=true\"","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('base-modal-ex',{attrs:{\"active\":_vm.isActive,\"animation-in\":_vm.animationIn,\"animation-out\":_vm.animationOut,\"animation-duration\":_vm.animationDuration,\"can-cancel\":false,\"min-width\":60,\"has-modal-card\":\"\"},on:{\"update:active\":function($event){_vm.isActive=$event}}},[_c('header',{staticClass:\"modal-card-head\"},[_c('p',{staticClass:\"modal-card-title\",class:{ 'is-flex-items-center' : _vm.showIcon}},[(_vm.showIcon)?_c('span',{staticClass:\"icon is-medium\",class:`has-text-${_vm.iconType}`,staticStyle:{\"margin-right\":\"0.5rem\"}},[_c('i',{staticClass:\"mdi mdi-36px\",class:`${_vm.iconName}`})]):_vm._e(),_c('span',[_vm._v(\"Attachment Viewer\")])])]),_c('section',{staticClass:\"modal-card-body p-0 m-0\",staticStyle:{\"position\":\"relative\"}},[_c('div',{staticClass:\"columns p-0 m-0\"},[_c('div',{staticClass:\"column p-0 m-0\"},[_c('div',{staticClass:\"box p-0 m-0\"},[_c('figure',{staticClass:\"image\"},[_c('LazyImage',{staticClass:\"image\",attrs:{\"src\":_vm.attachment.externalStorageURL}})],1)])])])]),_c('footer',{staticClass:\"modal-card-foot\"},[_c('div',{style:(`width: 100%; display: flex; justify-content: space-between;`)},[_c('div',{staticStyle:{\"align-self\":\"flex-start\"}},[_c('button',{staticClass:\"button tooltip\",attrs:{\"data-tooltip\":\"Download\"},on:{\"click\":()=>{_vm.downloadModifiedDocument()}}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-format-color-marker-cancel mdi-18px\"})]),_c('span',[_vm._v(\"Download\")])])]),_c('div',{staticStyle:{\"align-self\":\"flex-end\"}},[_c('button',{staticClass:\"button tooltip\",attrs:{\"data-tooltip\":\"Cancel\"},on:{\"click\":function($event){return _vm.cancel()}}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-close mdi-18px\"})]),_c('span',[_vm._v(\"Close\")])])])])])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n  <base-modal-ex :active.sync=\"isActive\"\r\n    :animation-in=\"animationIn\"\r\n    :animation-out=\"animationOut\"\r\n    :animation-duration=\"animationDuration\"\r\n    :can-cancel=\"false\"\r\n    :min-width=\"60\"\r\n    has-modal-card>\r\n    <header class=\"modal-card-head\">\r\n      <p class=\"modal-card-title\"\r\n        :class=\"{ 'is-flex-items-center' : showIcon}\">\r\n        <span v-if=\"showIcon\"\r\n          class=\"icon is-medium\"\r\n          :class=\"`has-text-${iconType}`\"\r\n          style=\"margin-right: 0.5rem;\">\r\n          <i class=\"mdi mdi-36px\"\r\n            :class=\"`${iconName}`\" />\r\n        </span>\r\n        <span>Attachment Viewer</span>\r\n      </p>\r\n    </header>\r\n    <section class=\"modal-card-body p-0 m-0\"\r\n      style=\"position:relative;\">\r\n      <div class=\"columns p-0 m-0\">\r\n        <div class=\"column p-0 m-0\">\r\n          <div class=\"box p-0 m-0\">\r\n            <figure class=\"image\">\r\n              <LazyImage class=\"image\"\r\n                :src=\"attachment.externalStorageURL\" />\r\n            </figure>\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </section>\r\n\r\n    <footer class=\"modal-card-foot\">\r\n\r\n      <div :style=\"`width: 100%; display: flex; justify-content: space-between;`\">\r\n        <div style=\"align-self: flex-start;\">\r\n          <button class=\"button tooltip\"\r\n            @click=\"()=>{downloadModifiedDocument()}\"\r\n            data-tooltip=\"Download\">\r\n            <span class=\"icon\">\r\n              <i class=\"mdi mdi-format-color-marker-cancel mdi-18px\" />\r\n            </span>\r\n            <span>Download</span>\r\n          </button>\r\n        </div>\r\n        <div style=\"align-self: flex-end;\">\r\n          <button class=\"button tooltip\"\r\n            @click=\"cancel()\"\r\n            data-tooltip=\"Cancel\">\r\n            <span class=\"icon\">\r\n              <i class=\"mdi mdi-close mdi-18px\" />\r\n            </span>\r\n            <span>Close</span>\r\n          </button>\r\n        </div>\r\n      </div>\r\n    </footer>\r\n  </base-modal-ex>\r\n</template>\r\n\r\n<script>\r\nimport { BaseModalEx } from '@/components/BulmaModal'\r\nimport LazyImage from '@/components/LazyImage'\r\nimport { EmailService } from '@/services'\r\n\r\nexport default {\r\n  name: 'QuoteEmailAttachmentViewerModal',\r\n  components: {\r\n    BaseModalEx,\r\n    LazyImage\r\n    // PsPdfViewer\r\n  },\r\n  props: {\r\n    active: {\r\n      type: Boolean,\r\n      default: false\r\n    },\r\n    animationIn: {\r\n      type: String,\r\n      default: 'zoomIn'\r\n    },\r\n    animationOut: {\r\n      type: String,\r\n      default: 'zoomOut'\r\n    },\r\n    animationDuration: {\r\n      type: [String, Number],\r\n      default: 0.3\r\n    },\r\n    buttonLocation: {\r\n      type: String,\r\n      default: 'end' // valid values 'start' & 'end'\r\n    },\r\n    showIcon: {\r\n      type: Boolean,\r\n      default: true\r\n    },\r\n    iconType: {\r\n      type: String,\r\n      default: 'warning'\r\n    },\r\n    iconName: {\r\n      type: String,\r\n      default: 'mdi-alert-decagram'\r\n    },\r\n    quoteId: {\r\n      type: String\r\n    },\r\n    // quoteAttachmentId: {\r\n    //   type: String\r\n    // },\r\n    attachment: {\r\n      type: Object\r\n    },\r\n    isIncoming: {\r\n      type: Boolean,\r\n      default: false\r\n    }\r\n  },\r\n  data() {\r\n    return {\r\n      isActive: this.active || false,\r\n      selectedDervied: null,\r\n      internalAttachment: this.attachment,\r\n      redaction: false,\r\n      maxHeight: '600px'\r\n    }\r\n  },\r\n  computed: {\r\n    isPDF() {\r\n      return this.internalAttachment.filename.toLowerCase().endsWith('pdf')\r\n    }\r\n  },\r\n  watch: {\r\n    active(value) {\r\n      this.isActive = value\r\n    },\r\n    attachment(value) {\r\n      this.internalAttachment = value\r\n    }\r\n  },\r\n  created() {},\r\n  mounted() {},\r\n  methods: {\r\n    downloadUrl(url, fileName) {\r\n      const link = document.createElement('a')\r\n      link.href = url\r\n      link.download = fileName\r\n      link.click()\r\n      URL.revokeObjectURL(link.href)\r\n    },\r\n    async downloadModifiedDocument() {\r\n      const response = await EmailService.downloadModifiedQuoteEmailAttachment(\r\n        this.quoteId,\r\n        this.internalAttachment.quoteEmailAttachmentId,\r\n        this.internalAttachment.isIncoming\r\n      )\r\n      let fileName = this.attachment.filename\r\n      this.downloadUrl('data:application/pdf;base64,' + response.data, fileName)\r\n    },\r\n\r\n    cancel() {\r\n      this.$emit('cancel')\r\n    }\r\n  }\r\n}\r\n</script>\r\n\r\n<style>\r\n</style>","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!./QuoteEmailAttachmentViewerModal.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!./QuoteEmailAttachmentViewerModal.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./QuoteEmailAttachmentViewerModal.vue?vue&type=template&id=028524b0\"\nimport script from \"./QuoteEmailAttachmentViewerModal.vue?vue&type=script&lang=js\"\nexport * from \"./QuoteEmailAttachmentViewerModal.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","module.exports = __webpack_public_path__ + \"static/img/attachment-pdf.bce4ba74.png\";","import FqApi from '@/services/fq-api'\n\nconst baseUrl = '/emails'\n\nexport default {\n  async send(formData) {\n    const result = await FqApi.post('/emails/send', formData)\n    return result\n  },\n  async sendExport(quoteId, exportOptions, reportOptions, formData) {\n    const url = `/emails/sendtext/${quoteId}?exportOptions=${exportOptions}&reportOptions=${reportOptions}`\n    const result = await FqApi.post(url, formData)\n    return result\n  },\n  async getAssetsEmailAddresses(filter) {\n    const url = 'emails/assetsemails'\n    const result = await FqApi.post(url, filter)\n    return result.data\n  },\n  async getEntitySummaries(filter) {\n    const result = await FqApi.post(`${baseUrl}/template/list`, filter)\n    return result.data\n  },\n  async postEntity(entity) {\n    const result = await FqApi.post(`${baseUrl}/new`, entity)\n    return result.data\n  },\n  async putEntity(entity) {\n    const result = await FqApi.put(`${baseUrl}/${entity.id}`, entity)\n    return result.data\n  },\n  async deleteEntity(id) {\n    const result = await FqApi.delete(`${baseUrl}/${id}`)\n    return result.data\n  }\n}\n","var render = function render(){var _vm=this,_c=_vm._self._c;return (_vm.value && _vm.customer && _vm.vehicle)?_c('div',{staticClass:\"tile is-ancestor is-parent\"},[_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.editMaximize),expression:\"!editMaximize\"}],staticClass:\"tile is-vertical is-half\"},[_c('div',{staticClass:\"tile is-parent\"},[_c('article',{staticClass:\"tile is-child box detail-page-tile\"},[_c('p',{staticClass:\"title\"},[_vm._v(\"Communications\")]),_c('div',{staticClass:\"tabs is-boxed\"},[_c('ul',[_c('li',{class:_vm.activeTab == 'SMS' ? 'is-active' : '',on:{\"click\":function($event){return _vm.setActiveTab('SMS')}}},[_c('a',[_vm._m(0),_c('span',{staticClass:\"has-badge-child-offset3\"},[_vm._v(\"SMS\")]),_c('span',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.smsUnreadCount),expression:\"smsUnreadCount\"}],staticClass:\"has-badge-rounded has-badge-medium has-badge-info\",attrs:{\"data-badge\":_vm.smsUnreadCount}})])]),(_vm.isShowWhatsApp)?_c('li',{class:_vm.activeTab == 'WhatsApp' ? 'is-active' : '',on:{\"click\":function($event){return _vm.setActiveTab('WhatsApp')}}},[_c('a',[_vm._m(1),_c('span',{staticClass:\"has-badge-child-offset3\"},[_vm._v(\"WhatsApp\")]),_c('span',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.whatsappUnreadCount),expression:\"whatsappUnreadCount\"}],staticClass:\"has-badge-rounded has-badge-medium has-badge-info\",attrs:{\"data-badge\":_vm.whatsappUnreadCount}})])]):_vm._e(),_c('li',{class:_vm.activeTab == 'Email' ? 'is-active' : '',on:{\"click\":function($event){return _vm.setActiveTab('Email')}}},[_c('a',[_vm._m(2),_c('span',{staticClass:\"has-badge-child-offset3\"},[_vm._v(\"Email\")]),_c('span',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.emailUnreadCount),expression:\"emailUnreadCount\"}],staticClass:\"has-badge-rounded has-badge-medium has-badge-info\",attrs:{\"data-badge\":_vm.emailUnreadCount}})])])])]),_c('div',{ref:\"messageContainer\",staticClass:\"container\"},[_vm._l((_vm.messages),function(message){return _c('div',{key:message.id,staticClass:\"is-flex px-1 py-2\",class:{ 'is-justify-content-flex-end': message.isIncoming }},[_c('transition',{attrs:{\"mode\":\"out-in\",\"enter-active-class\":`animate__animated animate__slideInRight`,\"leave-active-class\":`animate__animated animate__slideInRight`}},[_c('article',{staticClass:\"message is-flex\",class:[{'message-reply': message.isIncoming}, {'unread-animation': !message.isRead}],staticStyle:{\"flex-direction\":\"column\"}},[_c('div',{staticClass:\"is-flex\",staticStyle:{\"justify-content\":\"space-between\"}},[(message.isIncoming)?_c('span',{staticClass:\"is-size-7 help has-text-weight-medium\"},[_vm._v(_vm._s(_vm.truncate(message.sender, 50)))]):_vm._e(),(message.isOutgoing && message.recipients)?_c('span',{staticClass:\"is-size-7 help has-text-weight-medium\"},[_vm._v(_vm._s(_vm.truncate(message.recipients, 50)))]):_vm._e(),_c('div',[_c('span',{staticClass:\"is-size-7 help is-italic has-text-grey-light createdDate is-inline-block mr-3\"},[_vm._v(\" \"+_vm._s(_vm.$filters.formatDateTimeLocale(message.createdDate, _vm.$userInfo.locale))+\" \")]),(_vm.isEmail && message.isOutgoing)?_c('span',{staticClass:\"icon is-small tooltip is-tooltip-left is-clickable mr-2\",attrs:{\"data-tooltip\":_vm.getEmailStatus(message)},on:{\"click\":function($event){return _vm.openMessageModal(message)}}},[_c('i',{staticClass:\"mdi mdi-18px\",class:_vm.getEmailStatusIndicator(message)})]):_vm._e(),(_vm.isEmail)?_c('span',{staticClass:\"icon is-small tooltip is-tooltip-left is-clickable mr-2\",attrs:{\"data-tooltip\":\"View Email\"},on:{\"click\":function($event){return _vm.viewEmail(message)}}},[_c('i',{staticClass:\"mdi mdi-18px mdi-email-open\"})]):_vm._e(),(_vm.isEmail)?_c('span',{directives:[{name:\"show\",rawName:\"v-show\",value:(message.attachments),expression:\"message.attachments\"}],staticClass:\"icon is-small tooltip is-tooltip-left is-clickable mr-2\",attrs:{\"data-tooltip\":\"Attachment\"},on:{\"click\":function($event){return _vm.openAttachmentModel(message.id, message.isIncoming)}}},[_c('i',{staticClass:\"mdi mdi-18px mdi-attachment\"})]):_vm._e(),(_vm.isEmail)?_c('span',{staticClass:\"icon is-small tooltip is-tooltip-left is-clickable\",attrs:{\"data-tooltip\":\"Reply\"},on:{\"click\":function($event){return _vm.replyTo(message)}}},[_c('i',{staticClass:\"mdi mdi-18px\",class:[{'mdi-reply-outline': !_vm.isSelectedReplyToMessage(message.messageId)}, {'mdi-reply': _vm.isSelectedReplyToMessage(message.messageId)}]})]):_vm._e()])]),_c('div',{staticClass:\"message-body py-1 px-2\",class:_vm.messageBodyStyle(message)},[_c('div',{staticClass:\"has-text-weight-semibold\",attrs:{\"v-show\":_vm.activeTab == 'Email'}},[_vm._v(\" \"+_vm._s(message.subject)+\" \")]),_c('span',{staticClass:\"message-sent\"},[_vm._v(_vm._s(_vm.truncate(message.message, 100)))]),_c('div',{staticClass:\"is-flex help is-italic\",class:{ 'is-justify-content-flex-end': message.isIncoming }})])])])],1)}),_c('quote-email-viewer-modal',{attrs:{\"active\":_vm.isViewEmail,\"show-icon\":true,\"email\":_vm.viewMessage},on:{\"update:active\":function($event){_vm.isViewEmail=$event},\"cancel\":_vm.closeViewEmail,\"close\":_vm.closeViewEmail}},[_c('p',{attrs:{\"slot\":\"text-title\"},slot:\"text-title\"},[_vm._v(\"Email\")])])],2)])])]),(_vm.isEmail)?_c('div',{staticClass:\"tile is-vertical is-half\"},[_c('div',{staticClass:\"tile is-parent\"},[(_vm.isEmail && _vm.isEmailerActive)?_c('quote-email',{attrs:{\"quote\":_vm.entity,\"enable-send\":true,\"enable-attach\":true,\"reply-to-message-id\":_vm.replyToMessageId,\"reply-to-email\":_vm.replyToEmail,\"selected-attachment-email-id\":_vm.selectedAttachmentEmailId,\"is-incoming\":_vm.isIncoming,\"msg-details\":_vm.msgDetails},on:{\"sent\":_vm.emailSent,\"resetEmail\":_vm.resetEmail,\"close\":_vm.closeAttachmentModel,\"toggleEditMaximize\":_vm.toggleEditMaximize}}):_vm._e()],1)]):_c('div',{staticClass:\"tile is-vertical is-half\"},[_c('div',{staticClass:\"tile is-parent\"},[_c('article',{staticClass:\"tile is-child box detail-page-tile\"},[_c('div',{staticClass:\"field\"},[_c('label',{staticClass:\"label\",attrs:{\"for\":\"\"}},[_vm._v(\"Send To\")]),_c('div',{staticClass:\"control\"},[_c('the-mask',{directives:[{name:\"focus-inserted\",rawName:\"v-focus-inserted\"}],staticClass:\"input\",attrs:{\"mask\":_vm.phoneNoMask,\"tokens\":_vm.phoneNoTokens,\"placeholder\":\"Mobile No.\",\"maxlength\":\"20\"},model:{value:(_vm.msgDetails.mobile),callback:function ($$v) {_vm.$set(_vm.msgDetails, \"mobile\", $$v)},expression:\"msgDetails.mobile\"}})],1)]),_c('div',{staticClass:\"field\"},[_c('label',{staticClass:\"label\"},[_vm._v(\"Message\")]),_c('div',{staticClass:\"control is-expanded\"},[_c('multiselect',{attrs:{\"track-by\":\"message\",\"label\":\"message\",\"placeholder\":\"Select Template\",\"options\":_vm.templates,\"loading\":_vm.isTemplateLoading,\"searchable\":true,\"allow-empty\":true,\"options-limit\":_vm.templateFilter.pageSize},on:{\"select\":_vm.selectTemplate},model:{value:(_vm.selectedTemplate),callback:function ($$v) {_vm.selectedTemplate=$$v},expression:\"selectedTemplate\"}})],1)]),(_vm.approvedTemplate)?_c('div',{staticClass:\"field\"},[_c('div',{staticClass:\"control\"},[_c('span',{staticClass:\"is-size-7 help has-text-grey-light\"},[_vm._v(\"Approved Template\")]),_c('div',{staticClass:\"box\"},[_vm._v(\" \"+_vm._s(_vm.approvedTemplate)+\" \")])])]):_vm._e(),_c('div',{staticClass:\"field\"},[_c('div',{staticClass:\"control\"},[_c('textarea',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.msgDetails.message),expression:\"msgDetails.message\"}],staticClass:\"textarea\",attrs:{\"rows\":\"8\",\"maxlength\":_vm.maxLength,\"placeholder\":\"Text message\"},domProps:{\"value\":(_vm.msgDetails.message)},on:{\"input\":function($event){if($event.target.composing)return;_vm.$set(_vm.msgDetails, \"message\", $event.target.value)}}})]),_c('span',{staticClass:\"help\"},[_vm._v(_vm._s(_vm.msgDetails.message.length)+\"/\"+_vm._s(_vm.maxLength))])]),_c('div',{staticClass:\"is-flex is-justify-content-space-between\"},[_c('button',{staticClass:\"button is-primary tooltip\",attrs:{\"data-tooltip\":\"Edit message template\"},on:{\"click\":function($event){_vm.isSmsTemplateModalActive = true}}},[_vm._m(3),_c('span',[_vm._v(\"Edit Template\")])]),_c('button',{staticClass:\"button is-success tooltip\",attrs:{\"data-tooltip\":_vm.getToolTip(),\"disabled\":!_vm.msgDetails.message || !_vm.msgDetails.mobile},on:{\"click\":function($event){return _vm.send()},\"sent\":_vm.emailSent}},[_vm._m(4),_c('span',[_vm._v(\"Send\")])])])])])]),(_vm.isSmsTemplateModalActive)?_c('sms-template-modal',{attrs:{\"active\":_vm.isSmsTemplateModalActive},on:{\"update:active\":function($event){_vm.isSmsTemplateModalActive=$event},\"close\":_vm.closeSmsTemplateModal}}):_vm._e(),_c('base-modal-ex',{attrs:{\"active\":_vm.isMessageModalActive,\"animation-in\":_vm.animationIn,\"animation-out\":_vm.animationOut,\"animation-duration\":_vm.animationDuration,\"can-cancel\":false,\"min-width\":60,\"has-modal-card\":\"\"},on:{\"update:active\":function($event){_vm.isMessageModalActive=$event}}},[_c('header',{staticClass:\"modal-card-head\"},[_c('p',{staticClass:\"modal-card-title\",class:{ 'is-flex-items-center' : true}},[_c('span',[_vm._v(\"Email Delivery Failed Message\")])])]),_c('section',{staticClass:\"modal-card-body p-0 m-0\",staticStyle:{\"position\":\"relative\"}},[_c('div',{staticClass:\"columns p-0 m-0\"},[_c('div',{staticClass:\"column p-0 m-0\"},[_c('div',{staticClass:\"box p-0 m-0\"},[_c('div',{staticClass:\"columns is-multiline p-0 m-0\"},[_c('div',{staticClass:\"column is-full p-3 m-0\"},[_c('div',{domProps:{\"innerHTML\":_vm._s(_vm.messageModalMessage)}})])])])])])]),_c('footer',{staticClass:\"modal-card-foot\"},[_c('div',{style:(`width: 100%; display: flex; justify-content: space-between;`)},[_c('div',{staticStyle:{\"align-self\":\"flex-start\"}}),_c('div',{staticStyle:{\"align-self\":\"flex-end\"}},[_c('button',{staticClass:\"button tooltip\",attrs:{\"data-tooltip\":\"Close\"},on:{\"click\":function($event){return _vm.closeMessageModal()}}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-close mdi-18px\"})]),_c('span',[_vm._v(\"Close\")])])])])])])],1):_vm._e()\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('span',{staticClass:\"icon is-small\"},[_c('i',{staticClass:\"mdi mdi-message-text mdi-20px\",attrs:{\"aria-hidden\":\"true\"}})])\n},function (){var _vm=this,_c=_vm._self._c;return _c('span',{staticClass:\"icon is-small\"},[_c('i',{staticClass:\"mdi mdi-whatsapp mdi-20px icon-green\",attrs:{\"aria-hidden\":\"true\"}})])\n},function (){var _vm=this,_c=_vm._self._c;return _c('span',{staticClass:\"icon is-small\"},[_c('i',{staticClass:\"mdi mdi-email mdi-20px\",attrs:{\"aria-hidden\":\"true\"}})])\n},function (){var _vm=this,_c=_vm._self._c;return _c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-pencil mdi-20px\"})])\n},function (){var _vm=this,_c=_vm._self._c;return _c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-message-text mdi-20px\"})])\n}]\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('base-modal-ex',{attrs:{\"active\":_vm.isActive,\"animation-in\":_vm.animationIn,\"animation-out\":_vm.animationOut,\"animation-duration\":_vm.animationDuration,\"can-cancel\":false,\"min-width\":45,\"min-height\":85,\"has-modal-card\":\"\"},on:{\"update:active\":function($event){_vm.isActive=$event}}},[_c('header',{staticClass:\"modal-card-head\"},[_c('p',{staticClass:\"modal-card-title\",class:{ 'is-flex-items-center' : _vm.showIcon}},[(_vm.showIcon)?_c('span',{staticClass:\"icon is-medium\",class:`has-text-${_vm.iconType}`,staticStyle:{\"margin-right\":\"0.5rem\"}},[_c('i',{staticClass:\"mdi mdi-36px\",class:`${_vm.iconName}`})]):_vm._e(),_c('span',[_vm._v(\"SMS Template\")])])]),_c('section',{staticClass:\"modal-card-body\"},[_c('sms-message-templates',{ref:\"smsMessageTemplates\",attrs:{\"enable-save\":_vm.enableSave},on:{\"save-button\":_vm.setEnableSave}})],1),_c('footer',{staticClass:\"modal-card-foot is-flex is-justify-content-flex-end\"},[_c('div',{staticClass:\"buttons\"},[(!_vm.enableSave)?_c('button',{staticClass:\"button is-success tooltip\",attrs:{\"data-tooltip\":\"Save template\"},on:{\"click\":_vm.add}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-plus mdi-20px\"})]),_c('span',[_vm._v(\"New\")])]):_vm._e(),(_vm.enableSave)?_c('button',{staticClass:\"button is-success tooltip\",attrs:{\"data-tooltip\":\"Save template\"},on:{\"click\":_vm.save}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-content-save mdi-20px\"})]),_c('span',[_vm._v(\"Save\")])]):_vm._e(),(_vm.enableSave)?_c('button',{staticClass:\"button tooltip\",attrs:{\"data-tooltip\":\"Cancel changes\"},on:{\"click\":_vm.cancel}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-content-save-off mdi-20px\"})]),_c('span',[_vm._v(\"Cancel\")])]):_vm._e(),_c('button',{staticClass:\"button tooltip\",attrs:{\"data-tooltip\":\"Close\"},on:{\"click\":_vm.close}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-close mdi-20px\"})]),_c('span',[_vm._v(\"Close\")])])])])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{attrs:{\"active\":_vm.isActive},on:{\"update:active\":function($event){_vm.isActive=$event}}},[_c('bulma-table',{staticClass:\"table is-bordered is-striped is-narrow is-fullwidth\",attrs:{\"columns\":_vm.columns,\"page-index\":_vm.filter.pageIndex,\"page-size\":_vm.filter.pageSize,\"total-rows\":_vm.totalRows,\"is-loading\":_vm.isTableLoading,\"sort-column\":_vm.filter.sortColumn,\"sort-order\":_vm.filter.sortOrder},on:{\"pageChanged\":_vm.onPageChange,\"sort\":_vm.sort}},[_vm._l((_vm.entitySummaries),function(sms,index){return _c('tr',{key:sms.id,class:{ 'is-selected' : _vm.selectedRow === index },on:{\"click\":function($event){return _vm.highlightSelected(sms, index, $event)}}},[_c('td',{on:{\"dblclick\":function($event){return _vm.editMessage(sms, index)}}},[_vm._v(_vm._s(sms.message))]),_c('td',{staticClass:\"has-vertical-middle has-text-centered is-content-width\"},[_c('a',{staticClass:\"button is-danger is-small is-inverted\",attrs:{\"data-tooltip\":\"Click to delete\"},on:{\"click\":function($event){return _vm.deleteMessage(sms.id, index, sms.message)}}},[_c('span',{staticClass:\"icon is-medium\"},[_c('i',{staticClass:\"mdi mdi-delete mdi-24px\"})])])])])}),_c('template',{slot:\"empty\"},[_c('section',{staticClass:\"section\"},[_c('div',{staticClass:\"content has-text-grey has-text-centered\"},[_c('span',{attrs:{\"icon\":\"icon is-large\"}},[_c('i',{staticClass:\"mdi mdi-48px mdi-emoticon-sad\"})]),_c('p',[_vm._v(\"Nothing\")])])])])],2),(_vm.isEnableSave)?_c('div',{staticClass:\"field\"},[_c('label',{staticClass:\"label\"},[_vm._v(\"Message :\")]),_c('div',{staticClass:\"control\"},[_c('textarea',{directives:[{name:\"focus-inserted\",rawName:\"v-focus-inserted\"},{name:\"model\",rawName:\"v-model\",value:(_vm.smsMessage),expression:\"smsMessage\"}],staticClass:\"textarea\",class:{ 'is-danger' : !_vm.isMessageEntered},attrs:{\"id\":\"smsMessage\",\"placeholder\":\"Enter New Message Here...\",\"maxlength\":\"2000\"},domProps:{\"value\":(_vm.smsMessage)},on:{\"input\":[function($event){if($event.target.composing)return;_vm.smsMessage=$event.target.value},_vm.enterMessage]}}),_vm._v(\" \"),_c('div',{staticClass:\"is-flex is-justify-content-space-between\"},[_c('span',{staticClass:\"help\"},[_vm._v(_vm._s(_vm.smsMessage.length)+\"/2000\")]),(!_vm.isMessageEntered && _vm.isEnableSave)?_c('span',{staticClass:\"help is-danger\"},[_vm._v(\"Message is required.\")]):_vm._e()])]),_c('label',{staticClass:\"label\"},[_vm._v(\"Insert : \")]),_c('div',[_c('button',{staticClass:\"button is-small is-rounded is-outlined is-info tooltip\",attrs:{\"data-tooltip\":\"Add Name\"},on:{\"click\":function($event){return _vm.insertTag('[NAME]')}}},[_c('span',[_vm._v(\"Name\")])]),_vm._v(\"  \"),_c('button',{staticClass:\"button is-small is-rounded is-outlined is-info tooltip\",attrs:{\"data-tooltip\":\"Add Rego\"},on:{\"click\":function($event){return _vm.insertTag('[REGO]')}}},[_c('span',[_vm._v(\"Rego\")])]),_vm._v(\"  \"),_c('button',{staticClass:\"button is-small is-rounded is-outlined is-info tooltip\",attrs:{\"data-tooltip\":\"Add Excess\"},on:{\"click\":function($event){return _vm.insertTag('[EXCESS]')}}},[_c('span',[_vm._v(\"Excess\")])]),_vm._v(\"  \"),_c('button',{staticClass:\"button is-small is-rounded is-outlined is-info tooltip\",attrs:{\"data-tooltip\":\"Add Estimated Start Date\"},on:{\"click\":function($event){return _vm.insertTag('[EST START DATE]')}}},[_c('span',[_vm._v(\"Estimated Start Date\")])]),_vm._v(\"  \"),_c('button',{staticClass:\"button is-small is-rounded is-outlined is-info tooltip\",attrs:{\"data-tooltip\":\"Add Estimated End Date\"},on:{\"click\":function($event){return _vm.insertTag('[EST END DATE]')}}},[_c('span',[_vm._v(\"Estimated End Date\")])]),_vm._v(\"  \"),_c('button',{staticClass:\"button is-small is-rounded is-outlined is-info tooltip\",attrs:{\"data-tooltip\":\"Add Shop Name\"},on:{\"click\":function($event){return _vm.insertTag('[SHOPNAME]')}}},[_c('span',[_vm._v(\"Shop Name\")])]),_vm._v(\"  \"),_c('button',{staticClass:\"button is-small is-rounded is-outlined is-info tooltip\",attrs:{\"data-tooltip\":\"Attach Image Hyperlink\"},on:{\"click\":function($event){return _vm.insertTag('[IMAGEUPLOAD]')}}},[_c('span',[_vm._v(\"Image Upload Link\")])])])]):_vm._e(),(_vm.entity)?_c('unsaved-modal',{attrs:{\"active\":_vm.isUnsavedModalActive},on:{\"update:active\":function($event){_vm.isUnsavedModalActive=$event},\"close\":function($event){return _vm.closeModal()},\"skipSave\":function($event){return _vm.skipSave()},\"saveContinue\":function($event){return _vm.saveContinue()}}},[_c('p',{attrs:{\"slot\":\"text-title\"},slot:\"text-title\"},[_vm._v(\"Unsaved Changes\")]),_c('p',{attrs:{\"slot\":\"text-content\"},slot:\"text-content\"},[_vm._v(\"There are unsaved changes. Please select action below\")])]):_vm._e(),(_vm.entity)?_c('confirm-modal',{attrs:{\"active\":_vm.isConfirmModalActive,\"ok-text\":'Yes',\"cancel-text\":'No'},on:{\"update:active\":function($event){_vm.isConfirmModalActive=$event},\"ok\":function($event){return _vm.deleteEntity(true)},\"cancel\":function($event){return _vm.deleteEntity(false)}},model:{value:(_vm.entity),callback:function ($$v) {_vm.entity=$$v},expression:\"entity\"}},[_c('p',{attrs:{\"slot\":\"text-title\"},slot:\"text-title\"},[_vm._v(\"Delete Message Template\")]),_c('p',{attrs:{\"slot\":\"text-content\"},slot:\"text-content\"},[_vm._v(\" Message Template \"),_c('span',{staticClass:\"has-text-primary has-text-weight-bold\"},[_vm._v(_vm._s(`${_vm.entity.message}`))]),_vm._v(\" will be deleted. Continue? \")])]):_vm._e()],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n  <div :active.sync=\"isActive\">\n    <bulma-table class=\"table is-bordered is-striped is-narrow is-fullwidth\"\n      :columns=\"columns\"\n      :page-index=\"filter.pageIndex\"\n      :page-size=\"filter.pageSize\"\n      :total-rows=\"totalRows\"\n      :is-loading=\"isTableLoading\"\n      :sort-column=\"filter.sortColumn\"\n      :sort-order=\"filter.sortOrder\"\n      @pageChanged=\"onPageChange\"\n      @sort=\"sort\">\n      <tr v-for=\"(sms, index) in entitySummaries\"\n        :key=\"sms.id\"\n        :class=\"{ 'is-selected' : selectedRow === index }\"\n        @click=\"highlightSelected(sms, index, $event)\">\n        <td @dblclick=\"editMessage(sms, index)\">{{ sms.message }}</td>\n        <td class=\"has-vertical-middle has-text-centered is-content-width\">\n          <a class=\"button is-danger is-small is-inverted\"\n            @click=\"deleteMessage(sms.id, index, sms.message)\"\n            data-tooltip=\"Click to delete\">\n            <span class=\"icon is-medium\">\n              <i class=\"mdi mdi-delete mdi-24px\" />\n            </span>\n          </a>\n        </td>\n      </tr>\n      <template slot=\"empty\">\n        <section class=\"section\">\n          <div class=\"content has-text-grey has-text-centered\">\n            <span icon=\"icon is-large\">\n              <i class=\"mdi mdi-48px mdi-emoticon-sad\" />\n            </span>\n            <p>Nothing</p>\n          </div>\n        </section>\n      </template>\n    </bulma-table>\n\n    <div class=\"field\"\n      v-if=\"isEnableSave\">\n      <label class=\"label\">Message :</label>\n      <div class=\"control\">\n        <textarea class=\"textarea\"\n          :class=\"{ 'is-danger' : !isMessageEntered}\"\n          id=\"smsMessage\"\n          v-focus-inserted\n          v-model=\"smsMessage\"\n          placeholder=\"Enter New Message Here...\"\n          @input=\"enterMessage\"\n          maxlength=\"2000\" />\n        <div class=\"is-flex is-justify-content-space-between\">\n          <span class=\"help\">{{ smsMessage.length }}/2000</span>\n          <span class=\"help is-danger\"\n            v-if=\"!isMessageEntered && isEnableSave\">Message is required.</span>\n        </div>\n      </div>\n\n      <label class=\"label\">Insert : </label>\n      <div>\n        <button class=\"button is-small is-rounded is-outlined is-info tooltip\"\n          @click=\"insertTag('[NAME]')\"\n          data-tooltip=\"Add Name\">\n          <span>Name</span>\n        </button>&nbsp;\n        <button class=\"button is-small is-rounded is-outlined is-info tooltip\"\n          @click=\"insertTag('[REGO]')\"\n          data-tooltip=\"Add Rego\">\n          <span>Rego</span>\n        </button>&nbsp;\n        <button class=\"button is-small is-rounded is-outlined is-info tooltip\"\n          @click=\"insertTag('[EXCESS]')\"\n          data-tooltip=\"Add Excess\">\n          <span>Excess</span>\n        </button>&nbsp;\n        <button class=\"button is-small is-rounded is-outlined is-info tooltip\"\n          @click=\"insertTag('[EST START DATE]')\"\n          data-tooltip=\"Add Estimated Start Date\">\n          <span>Estimated Start Date</span>\n        </button>&nbsp;\n        <button class=\"button is-small is-rounded is-outlined is-info tooltip\"\n          @click=\"insertTag('[EST END DATE]')\"\n          data-tooltip=\"Add Estimated End Date\">\n          <span>Estimated End Date</span>\n        </button>&nbsp;\n        <button class=\"button is-small is-rounded is-outlined is-info tooltip\"\n          @click=\"insertTag('[SHOPNAME]')\"\n          data-tooltip=\"Add Shop Name\">\n          <span>Shop Name</span>\n        </button>&nbsp;\n        <button\n          class=\"button is-small is-rounded is-outlined is-info tooltip\"\n          @click=\"insertTag('[IMAGEUPLOAD]')\"\n          data-tooltip=\"Attach Image Hyperlink\">\n          <span>Image Upload Link</span>\n        </button>\n      </div>\n    </div>\n\n    <unsaved-modal v-if=\"entity\"\n      :active.sync=\"isUnsavedModalActive\"\n      @close=\"closeModal()\"\n      @skipSave=\"skipSave()\"\n      @saveContinue=\"saveContinue()\">\n      <p slot=\"text-title\">Unsaved Changes</p>\n      <p slot=\"text-content\">There are unsaved changes. Please select action below</p>\n    </unsaved-modal>\n    <confirm-modal v-if=\"entity\"\n      :active.sync=\"isConfirmModalActive\"\n      @ok=\"deleteEntity(true)\"\n      @cancel=\"deleteEntity(false)\"\n      :ok-text=\"'Yes'\"\n      :cancel-text=\"'No'\"\n      v-model=\"entity\">\n      <p slot=\"text-title\">Delete Message Template</p>\n      <p slot=\"text-content\">\n        Message Template\n        <span class=\"has-text-primary has-text-weight-bold\">{{ `${entity.message}` }}</span> will be deleted. Continue?\n      </p>\n    </confirm-modal>\n  </div>\n</template>\n\n<script>\nimport BulmaTable from '@/components/BulmaTable'\nimport { UnsavedModal, ConfirmModal } from '@/components/BulmaModal'\nimport { Columns } from './columns'\nimport { FocusInserted } from '@/components/directives'\nimport EventBus from '@/components/EventBus'\nimport SmsService from './SmsService'\n\nexport default {\n  name: 'SmsMessageTemplates',\n  components: {\n    BulmaTable,\n    UnsavedModal,\n    ConfirmModal\n  },\n\n  directives: {\n    FocusInserted\n  },\n  props: {\n    value: null,\n    enableSave: false,\n    active: {\n      type: Boolean,\n      default: false\n    }\n  },\n  data() {\n    return {\n      isActive: this.active || false,\n      isNew: false,\n      isEdit: false,\n      isDeleted: false,\n      isBack: false,\n      isClose: false,\n      isEnableSave: false,\n      isMessageEntered: true,\n      isUnsavedModalActive: false,\n      isConfirmModalActive: false,\n      isEmpty: false,\n      totalRows: 0,\n      entitySummaries: {},\n      entity: { id: '', message: '' },\n      selected: { id: '', message: '' },\n      filter: {\n        sortColumn: Columns[0].name,\n        sortOrder: Columns[0].defaultOrder,\n        pageIndex: 1,\n        pageSize: 5\n      },\n      oriMsg: '',\n      selectedRow: null,\n      isTableLoading: false,\n      smsMessage: ''\n    }\n  },\n  computed: {\n    columns() {\n      return Columns\n    }\n  },\n  created() {\n    this.smsMessage = ''\n    this.getData()\n    this.isEnableSave = this.enableSave\n  },\n  methods: {\n    async getData() {\n      this.isTableLoading = true\n      this.entitySummaries = await SmsService.getEntitySummaries(this.filter)\n      this.totalRows = this.entitySummaries.length > 0 ? this.entitySummaries[0].totalRows : 0\n      this.isTableLoading = false\n    },\n    enterMessage() {\n      this.isMessageEntered = this.smsMessage !== ''\n      if (this.isMessageEntered) {\n        this.isEnableSave = true\n      }\n    },\n    reset() {\n      this.isNew = false\n      this.isDeleted = false\n      this.isEdit = false\n      this.isUnsavedModalActive = false\n      this.isConfirmModalActive = false\n      this.entity.id = ''\n      this.entity.message = ''\n      this.oriMsg = this.smsMessage = ''\n      this.isEnableSave = false\n      this.$emit('save-button', false)\n    },\n    add() {\n      this.reset()\n      this.selectedRow = ''\n      this.isMessageEntered = false\n      this.isEnableSave = true\n      this.isNew = true\n    },\n    back() {\n      if (this.oriMsg !== this.smsMessage) {\n        this.isBack = true\n        this.isUnsavedModalActive = true\n      } else {\n        this.$emit('back')\n      }\n    },\n    close() {\n      if (this.oriMsg !== this.smsMessage) {\n        this.isClose = true\n        this.isUnsavedModalActive = true\n      } else {\n        this.$emit('close', true)\n      }\n    },\n    editMessage(entity, index) {\n      // add new -> edit message\n      if (this.oriMsg !== this.smsMessage) {\n        this.isEdit = true\n        this.isUnsavedModalActive = true\n        // edit message\n      } else {\n        this.isNew = false\n        this.isEdit = true\n        this.isEnableSave = true\n        this.entity.id = entity.id\n        this.entity.message = entity.message\n        this.oriMsg = entity.message\n        this.smsMessage = entity.message\n        this.smsMessage.FocusInserted\n        this.isMessageEntered = this.smsMessage !== ''\n        this.isEnableSave = true\n        this.$emit('save-button', true)\n      }\n    },\n    deleteMessage(id, index, msg) {\n      this.isDeleted = true\n      if (!this.isEdit) {\n        this.entity.id = id\n      }\n      if (!this.isEdit && this.oriMsg !== this.smsMessage && this.entity.id !== this.selected.id) {\n        this.entity.id = this.selected.id\n        this.entity.message = this.selected.message\n        this.isUnsavedModalActive = true\n      } else if (this.smsMessage != msg && this.smsMessage != '' && this.isNew) {\n        this.isUnsavedModalActive = true\n        // } else if (this.isEdit && this.selected.id !== id) {\n        // edit msg then delete on same msg or other msg\n      } else if (this.isEdit && this.isDeleted && this.oriMsg !== this.smsMessage && this.entity.id !== id) {\n        this.isUnsavedModalActive = true\n      } else {\n        this.entity.id = id\n        this.entity.message = msg\n        this.isNew = false // set to false when add new message is empty and then click on delete\n        this.isEdit = false // set to false when no change on edit message and then click on delete\n        this.isConfirmModalActive = true\n      }\n    },\n    async deleteEntity(confirmDelete) {\n      if (confirmDelete) {\n        try {\n          await SmsService.deleteEntity(this.selected.id)\n          this.getData()\n          this.isEnableSave = false\n          this.isMessageEntered = true\n          // for edit then edit same message and\n          // for add new then highlight and delete other message\n          if (\n            (!this.isNew && !this.isEdit && this.isDeleted) ||\n            (!this.isNew && !this.isEdit && this.entity.id == this.selected.id) ||\n            (!this.isNew && this.isEdit && this.entity.id == this.selected.id)\n          ) {\n            this.reset()\n          }\n          this.selectedRow = ''\n          this.$emit('save-button', false)\n        } catch (e) {\n          EventBus.$emit('serviceError', e.response.status)\n          this.$notification.openMessageXhrError('SMS Message', e)\n          return false\n        }\n      } else {\n        if (!this.isNew && this.isEdit && this.entity.id == this.selected.id) {\n          this.isConfirmModalActive = false\n          this.selectedRow = this.entitySummaries.indexOf(this.entitySummaries.find((i) => i.message === this.oriMsg))\n        } else {\n          this.reset()\n          this.$emit('save-button', false)\n        }\n      }\n    },\n    cancel() {\n      this.reset()\n      this.selectedRow = ''\n    },\n    async saveSms() {\n      if (this.isNew) {\n        await this.save(true)\n      } else if (this.isEdit) {\n        await this.save(false)\n      }\n    },\n    async save(isNew) {\n      var newMsg = this.smsMessage\n      this.isEmpty = false\n      if (newMsg == '') {\n        this.isEmpty = true\n        this.$notification.openNotificationWithType('danger', 'SMS Message', 'Validation errors. Please fix before saving')\n        return false\n      }\n      if (this.oriMsg == newMsg && this.entity.id == this.selected.id) {\n        this.$notification.openNotificationWithType('warning', 'SMS Message', 'No changes detected. Not saved')\n        return false\n      }\n\n      try {\n        this.$showSpinner('Saving...')\n        // add new message\n        if (isNew) {\n          this.entity.id = 0\n          this.entity.message = newMsg\n          await SmsService.postEntity(this.entity)\n          await this.getData() // wait to get latest order after add\n          this.selectedRow = this.entitySummaries.indexOf(this.entitySummaries.find((i) => i.message === newMsg)) // get latest index for case NOT from save continue\n          // edit message\n        } else {\n          this.entity.message = newMsg\n          await SmsService.putEntity(this.entity)\n          await this.getData() // wait to get latest order after edit\n          this.selectedRow = this.entitySummaries.indexOf(this.entitySummaries.find((i) => i.id === this.selected.id)) // get latest index for case NOT from save continue\n        }\n\n        this.reset()\n        this.$notification.success('SMS Message', 'Save successful')\n        this.$emit('save-button', false)\n        return true\n      } catch (e) {\n        EventBus.$emit('serviceError', e.response.status)\n        this.$notification.openMessageXhrError('SMS Message', e)\n        return false\n      } finally {\n        this.$hideSpinner()\n      }\n    },\n    async saveContinue() {\n      if (this.isNew && this.isDeleted) {\n        await this.deleteEntity(true)\n        await this.save(true)\n        this.reset()\n      } else if (this.isEdit && this.isDeleted) {\n        await this.deleteEntity(true)\n        await this.save(false)\n        this.isUnsavedModalActive = false\n        this.isEnableSave = false\n      } else if (this.isNew && this.isEdit) {\n        await this.save(true)\n        this.isEdit = true // isEdit has been set to false after save. Re-set to true for edit on selected msg\n        this.oriMsg = this.selected.message\n        this.entity.id = this.selected.id\n        this.entity.message = this.selected.message\n        this.smsMessage = this.selected.message\n        this.selectedRow = this.entitySummaries.indexOf(this.entitySummaries.find((i) => i.id === this.selected.id)) // for case add new then edit, get latest index after insert\n        this.isUnsavedModalActive = false\n        this.isEnableSave = true\n        this.$emit('save-button', true)\n      } else if (!this.isNew && this.isEdit) {\n        // edit not save, then edit on other message\n        await this.save(false)\n        this.isEdit = true // isEdit has been set to false after save. Re-set to true for edit on selected msg\n        this.oriMsg = this.selected.message\n        this.entity.id = this.selected.id\n        this.entity.message = this.selected.message\n        if (this.isEmpty) {\n          this.smsMessage = ''\n        } else {\n          this.smsMessage = this.selected.message\n        }\n        this.selectedRow = this.entitySummaries.indexOf(this.entitySummaries.find((i) => i.id === this.selected.id)) // for edit then edit others, get latest index after insert\n        this.isUnsavedModalActive = false\n        this.isEnableSave = true\n        this.$emit('save-button', true)\n      } else if (this.isNew && !this.isEdit && !this.Deleted) {\n        //back button, add new but not save, then click save continue\n        await this.save(true)\n      }\n\n      // isEmpty is to check if msg empty then it not allow back to SmsSend\n      if (this.isBack && !this.isEmpty) {\n        this.$emit('back')\n      }\n\n      if (this.isClose && !this.isEmpty) {\n        this.$emit('close', true)\n      }\n    },\n    skipSave() {\n      if (this.isBack) {\n        this.$emit('back')\n      } else if (this.isClose) {\n        this.$emit('close', true)\n      } else if (this.isDeleted) {\n        this.deleteEntity(true)\n        this.reset()\n      } else if (this.isEdit) {\n        this.isUnsavedModalActive = false\n        this.smsMessage = this.selected.message\n        this.smsMessage.FocusInserted\n        this.isNew = false\n        this.isEdit = true\n        this.oriMsg = this.smsMessage\n        this.entity.id = this.selected.id\n        this.entity.message = this.selected.message\n      } else if (this.isNew) {\n        this.isUnsavedModalActive = false\n        this.smsMessage = this.selected.message\n        this.smsMessage.FocusInserted\n        this.isNew = false\n        this.isEdit = true\n        this.oriMsg = this.smsMessage\n      }\n    },\n    closeModal() {\n      this.isDeleted = false\n      this.isBack = false\n      this.isClose = false\n      this.isUnsavedModalActive = false\n      if (this.isEnableSave) {\n        this.smsMessage.FocusInserted\n        this.selectedRow = this.entitySummaries.indexOf(this.entitySummaries.find((i) => i.id === this.entity.id))\n      }\n    },\n    highlightSelected(entity, index, event) {\n      this.selectedRow = index\n      this.selected = entity\n    },\n    onPageChange(pageIndex) {\n      this.filter.pageIndex = pageIndex\n      this.getData()\n    },\n    sort(name, order) {\n      this.filter.sortColumn = name\n      this.filter.sortOrder = order\n      this.getData()\n    },\n    insertTag(myValue) {\n      var myField = document.getElementById('smsMessage')\n\n      if (document.selection) {\n        myField.focus()\n        var sel = document.selection.createRange()\n        sel.text = myValue\n      } else if (myField.selectionStart || myField.selectionStart == '0') {\n        var startPos = myField.selectionStart\n        var endPos = myField.selectionEnd\n        myField.value = myField.value.substring(0, startPos) + myValue + myField.value.substring(endPos, myField.value.length)\n      } else {\n        myField.value += myValue\n      }\n      this.smsMessage = myField.value\n      this.enterMessage()\n      myField.focus()\n    }\n  }\n}\n</script>\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!./SmsMessageTemplates.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!./SmsMessageTemplates.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./SmsMessageTemplates.vue?vue&type=template&id=22f5921f\"\nimport script from \"./SmsMessageTemplates.vue?vue&type=script&lang=js\"\nexport * from \"./SmsMessageTemplates.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>\n  <base-modal-ex :active.sync=\"isActive\"\n    :animation-in=\"animationIn\"\n    :animation-out=\"animationOut\"\n    :animation-duration=\"animationDuration\"\n    :can-cancel=\"false\"\n    :min-width=\"45\"\n    :min-height=\"85\"\n    has-modal-card>\n    <header class=\"modal-card-head\">\n      <p class=\"modal-card-title\"\n        :class=\"{ 'is-flex-items-center' : showIcon}\">\n        <span v-if=\"showIcon\"\n          class=\"icon is-medium\"\n          :class=\"`has-text-${iconType}`\"\n          style=\"margin-right: 0.5rem\">\n          <i class=\"mdi mdi-36px\"\n            :class=\"`${iconName}`\" />\n        </span>\n        <span>SMS Template</span>\n      </p>\n    </header>\n    <section class=\"modal-card-body\">\n      <sms-message-templates ref=\"smsMessageTemplates\"\n        :enable-save=\"enableSave\"\n        @save-button=\"setEnableSave\" />\n    </section>\n    <footer class=\"modal-card-foot is-flex is-justify-content-flex-end\">\n      <div class=\"buttons\">\n        <button v-if=\"!enableSave\"\n          class=\"button is-success tooltip\"\n          data-tooltip=\"Save template\"\n          @click=\"add\">\n          <span class=\"icon\">\n            <i class=\"mdi mdi-plus mdi-20px\" />\n          </span>\n          <span>New</span>\n        </button>\n        <button v-if=\"enableSave\"\n          class=\"button is-success tooltip\"\n          data-tooltip=\"Save template\"\n          @click=\"save\">\n          <span class=\"icon\">\n            <i class=\"mdi mdi-content-save mdi-20px\" />\n          </span>\n          <span>Save</span>\n        </button>\n        <button v-if=\"enableSave\"\n          class=\"button tooltip\"\n          @click=\"cancel\"\n          data-tooltip=\"Cancel changes\">\n          <span class=\"icon\">\n            <i class=\"mdi mdi-content-save-off mdi-20px\" />\n          </span>\n          <span>Cancel</span>\n        </button>\n        <button class=\"button tooltip\"\n          @click=\"close\"\n          data-tooltip=\"Close\">\n          <span class=\"icon\">\n            <i class=\"mdi mdi-close mdi-20px\" />\n          </span>\n          <span>Close</span>\n        </button>\n      </div>\n    </footer>\n  </base-modal-ex>\n</template>\n\n<script>\nimport { BaseModalEx } from '@/components/BulmaModal'\nimport SmsMessageTemplates from './SmsMessageTemplates'\n\nexport default {\n  name: 'SmsTemplateModal',\n  components: { BaseModalEx, SmsMessageTemplates },\n  props: {\n    value: null,\n    active: {\n      type: Boolean,\n      default: false\n    },\n    animationIn: {\n      type: String,\n      default: 'zoomIn'\n    },\n    animationOut: {\n      type: String,\n      default: 'zoomOut'\n    },\n    animationDuration: {\n      type: [String, Number],\n      default: 0.3\n    },\n    buttonLocation: {\n      type: String,\n      default: 'end' // valid values 'start' & 'end'\n    },\n    showIcon: {\n      type: Boolean,\n      default: true\n    },\n    iconType: {\n      type: String,\n      default: 'primary'\n    },\n    iconName: {\n      type: String,\n      default: 'mdi-message-text'\n    }\n  },\n  data() {\n    return {\n      isActive: false,\n      enableSave: false\n    }\n  },\n  computed: {},\n  created() {},\n  mounted() {\n    this.isActive = this.active || false\n  },\n  methods: {\n    edit() {},\n    async send() {\n      this.$emit('update:active', false)\n      this.$emit('cancel')\n    },\n    add() {\n      this.$refs.smsMessageTemplates.add()\n      this.enableSave = true\n    },\n    close() {\n      this.$emit('update:active', false)\n      this.$emit('close')\n      this.isActive = false\n    },\n    cancel() {\n      this.$refs.smsMessageTemplates.cancel()\n    },\n    setEnableSave(value) {\n      this.enableSave = value\n    },\n    save() {\n      this.$refs.smsMessageTemplates.saveSms()\n      this.$emit('update:active', false)\n      this.$emit('close')\n    }\n  }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.is-flex-items-center {\n  display: flex;\n  align-items: center;\n}\n</style>\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!./SmsTemplateModal.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!./SmsTemplateModal.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./SmsTemplateModal.vue?vue&type=template&id=0cc55b29&scoped=true\"\nimport script from \"./SmsTemplateModal.vue?vue&type=script&lang=js\"\nexport * from \"./SmsTemplateModal.vue?vue&type=script&lang=js\"\nimport style0 from \"./SmsTemplateModal.vue?vue&type=style&index=0&id=0cc55b29&prod&lang=scss&scoped=true\"\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  \"0cc55b29\",\n  null\n  \n)\n\nexport default component.exports","import { mapGetters, mapActions } from 'vuex'\n\nconst moduleName = 'quotecommunications'\nconst moduleNameQuote = 'quotes'\n\nexport default {\n  computed: {\n    ...mapGetters(moduleName, {\n      getEmailer: 'getEmailer',\n      getParameters: 'getParameters'\n    }),\n    ...mapGetters(['licenceExpired']),\n    ...mapGetters(moduleNameQuote, {\n      currentSnapshot: 'currentSnapshot'\n    })\n  },\n  methods: {\n    ...mapActions(moduleName, { addEmailer: 'addEmailer', removeEmailer: 'removeEmailer' }),\n    ...mapActions(moduleName, {\n      addParameter: 'addParameter',\n      addParameters: 'addParameters',\n      setEmailerAttachments: 'setEmailerAttachments',\n      removeParameter: 'removeParameter',\n      removeParameters: 'removeParameters'\n    }),\n    ...mapActions(moduleNameQuote, { getStoreItem: 'getStoreItem' })\n  }\n}\n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('article',{staticClass:\"tile is-child box detail-page-tile\"},[_c('div',{staticClass:\"is-flex\",staticStyle:{\"justify-content\":\"space-between\"}},[_c('span',{staticClass:\"icon is-small tooltip is-tooltip-left is-clickable mr-2\",attrs:{\"data-tooltip\":\"maximize\"}},[_c('i',{staticClass:\"mdi mdi-24px\",class:{ 'mdi-arrow-collapse-right' : !_vm.editMaximize, 'mdi-arrow-collapse-left' : _vm.editMaximize},on:{\"click\":function($event){return _vm.toggleEditMaximize()}}})])]),_c('div',[_c('div',{staticClass:\"field is-horizontal\"},[_vm._m(0),_c('div',{staticClass:\"field-body\"},[_c('div',{staticClass:\"field\"},[_c('div',{staticClass:\"control is-expanded\"},[_c('multiselect',{attrs:{\"track-by\":\"message\",\"label\":\"message\",\"placeholder\":\"Select Template\",\"options\":_vm.templates,\"loading\":_vm.isTemplateLoading,\"searchable\":true,\"allow-empty\":true,\"options-limit\":_vm.templateFilter.pageSize},on:{\"select\":_vm.selectTemplate},model:{value:(_vm.selectedTemplate),callback:function ($$v) {_vm.selectedTemplate=$$v},expression:\"selectedTemplate\"}})],1)])])])]),_c('hr'),_c('vue-email',{ref:\"emailer\",attrs:{\"quote-image-attachments\":_vm.selectedImages,\"asset-id\":_vm.emailer.assetId,\"reply-to-message-id\":_vm.innerReplyToEmail.replyToMessageId,\"to-emails\":_vm.replyToSenderEmails,\"cc-emails\":_vm.replyToEmailCcs,\"bcc-emails\":_vm.replyToEmailBccs,\"subject\":_vm.innerReplyToEmailSubject,\"message\":_vm.innerReplyToEmailMessage,\"is-show-cc-bcc\":(!!_vm.replyToEmailCcs.length || !!_vm.replyToEmailBccs.length)},on:{\"new-email\":_vm.newEmailInput,\"sent\":_vm.sent},model:{value:(_vm.emailer),callback:function ($$v) {_vm.emailer=$$v},expression:\"emailer\"}}),_c('quote-communication-email-modal',{attrs:{\"active\":_vm.isAttachmentModalActive,\"show-icon\":true,\"attach-disabled\":false,\"cancel-disabled\":false,\"emailer\":_vm.emailer,\"selected-attachment-email-id\":_vm.selectedAttachmentEmailId,\"is-incoming\":_vm.isIncoming},on:{\"update:active\":function($event){_vm.isAttachmentModalActive=$event},\"ok\":function($event){return _vm.closeAttachModal()},\"cancel\":function($event){return _vm.closeAttachModal()},\"close\":function($event){return _vm.closeAttachModal()}},model:{value:(_vm.selectedImages),callback:function ($$v) {_vm.selectedImages=$$v},expression:\"selectedImages\"}},[_c('p',{attrs:{\"slot\":\"text-title\"},slot:\"text-title\"},[_vm._v(\"Attachment\")])]),_c('div',{staticClass:\"mt-3 buttons-group is-flex is-justify-content-space-between\",style:(`width: 100%;`)},[_c('button',{staticClass:\"button is-primary tooltip\",attrs:{\"data-tooltip\":\"Edit message template\"},on:{\"click\":function($event){_vm.isEmailTemplateModalActive = true}}},[_vm._m(1),_c('span',[_vm._v(\"Edit Template\")])]),_c('div',{staticClass:\"buttons\"},[_c('button',{staticClass:\"button is-warning tooltip is-tooltip-topright\",attrs:{\"data-tooltip\":\"Reset Email\",\"disabled\":!_vm.enableSend},on:{\"click\":function($event){return _vm.resetEmail()}}},[_vm._m(2),_c('span',[_vm._v(\"Reset\")])]),_c('button',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.enableAttach),expression:\"enableAttach\"}],staticClass:\"button is-primary tooltip\",attrs:{\"data-tooltip\":[!_vm.toggleAttachButton ? 'Attach images' : 'Done'],\"disabled\":!_vm.enableAttach},on:{\"click\":function($event){return _vm.openAttachModel()}}},[(!_vm.toggleAttachButton)?_c('span',{staticClass:\"icon is-small\"},[_c('i',{staticClass:\"mdi mdi-18px mdi-paperclip\"})]):_c('span',[_vm._v(\"Done\")])]),_c('button',{staticClass:\"button is-success tooltip is-tooltip-topright\",attrs:{\"data-tooltip\":\"Send Email\",\"disabled\":!_vm.enableSend},on:{\"click\":function($event){return _vm.send()}}},[_vm._m(3),_c('span',[_vm._v(\"Send\")])])])]),(_vm.isEmailTemplateModalActive)?_c('vue-email-template-modal',{attrs:{\"active\":_vm.isEmailTemplateModalActive},on:{\"update:active\":function($event){_vm.isEmailTemplateModalActive=$event},\"close\":_vm.closeTemplateModal}}):_vm._e()],1)\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"field-label is-normal\"},[_c('label',{staticClass:\"label\"},[_vm._v(\"Template\")])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-pencil mdi-20px\"})])\n},function (){var _vm=this,_c=_vm._self._c;return _c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-refresh mdi-18px\"})])\n},function (){var _vm=this,_c=_vm._self._c;return _c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-send mdi-18px\"})])\n}]\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return (_vm.isActive)?_c('base-modal-ex',{attrs:{\"active\":_vm.isActive,\"animation-in\":_vm.animationIn,\"animation-out\":_vm.animationOut,\"animation-duration\":_vm.animationDuration,\"can-cancel\":false,\"min-width\":60,\"has-modal-card\":\"\"},on:{\"update:active\":function($event){_vm.isActive=$event}}},[_c('header',{staticClass:\"modal-card-head\"},[_c('p',{staticClass:\"modal-card-title\",class:{ 'is-flex-items-center' : _vm.showIcon}},[(_vm.showIcon)?_c('span',{staticClass:\"icon is-medium\",class:`has-text-${_vm.iconType}`,staticStyle:{\"margin-right\":\"0.5rem\"}},[_c('i',{staticClass:\"mdi mdi-36px\",class:`${_vm.iconName}`})]):_vm._e(),_vm._t(\"text-title\")],2)]),_c('section',{staticClass:\"modal-card-body\"},[_c('div',[(_vm.innerEmailer && _vm.isActiveImageSelect)?_c('image-select',{attrs:{\"quote-id\":_vm.innerEmailer.assetId,\"quote-ids\":_vm.attachmentOptions.selectedQuotes.map(q => q.value),\"subtitle\":`Select images to attach`},on:{\"input\":_vm.getSelectedImage},model:{value:(_vm.imagesSelectedForAttachment),callback:function ($$v) {_vm.imagesSelectedForAttachment=$$v},expression:\"imagesSelectedForAttachment\"}}):_vm._e(),(_vm.isActiveAttachment)?_c('quote-email-attachments',{attrs:{\"quote-id\":_vm.innerEmailer.assetId,\"email-id\":_vm.innerSelectedAttachmentEmailId,\"is-incoming\":_vm.isIncoming},on:{\"close\":_vm.closeAttachmentsModel}}):_vm._e()],1)]),_c('footer',{staticClass:\"modal-card-foot\",style:(`justify-content: flex-${_vm.buttonLocation}`)},[_c('button',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.isActiveImageSelect),expression:\"isActiveImageSelect\"}],staticClass:\"button is-success tooltip\",attrs:{\"data-tooltip\":\"Done\",\"disabled\":!_vm.canAttach},on:{\"click\":function($event){return _vm.ok()}}},[_c('span',[_vm._v(\"Ok\")])]),_c('button',{staticClass:\"button tooltip\",attrs:{\"data-tooltip\":_vm.cancelInWording,\"disabled\":_vm.cancelDisabled},on:{\"click\":function($event){return _vm.cancel()}}},[_vm._v(_vm._s(_vm.cancelInWording))])])]):_vm._e()\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',[_c('div',{staticClass:\"columns is-multiline mt-3 mr-2\"},[_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.hasSelected),expression:\"hasSelected\"}],staticClass:\"column\"},[_vm._v(\" Please select category: \"),_c('div',{staticClass:\"select\"},[_c('select',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.attachmentCategory),expression:\"attachmentCategory\"}],on:{\"change\":function($event){var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return val}); _vm.attachmentCategory=$event.target.multiple ? $$selectedVal : $$selectedVal[0]}}},_vm._l((_vm.attachmentCategories),function(m){return _c('option',{key:m.quoteAttachmentCategoryId,domProps:{\"value\":m.quoteAttachmentCategoryId}},[_vm._v(_vm._s(m.name))])}),0)]),_c('a',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.hasSelected),expression:\"hasSelected\"}],staticClass:\"button tooltip ml-2\",attrs:{\"data-tooltip\":\"Copy to quote\"},on:{\"click\":function($event){return _vm.copyAttachmentToQuote(true)}}},[_vm._m(0)])]),_c('div',{staticClass:\"column is-narrow\",class:[{ 'is-full': !_vm.hasSelected }]},[_c('p',{staticClass:\"buttons is-justify-content-right\"},[_c('a',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.isIncoming),expression:\"isIncoming\"}],staticClass:\"button tooltip\",attrs:{\"data-tooltip\":\"Select all\"},on:{\"click\":function($event){return _vm.setSelectedStatusAll(true)}}},[_vm._m(1)]),_c('a',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.hasSelected),expression:\"hasSelected\"}],staticClass:\"button tooltip\",attrs:{\"data-tooltip\":\"Deselect all\"},on:{\"click\":function($event){return _vm.setSelectedStatusAll(false)}}},[_vm._m(2)])])])]),_c('div',[_c('div',{staticClass:\"columns is-multiline\"},_vm._l((_vm.innerAttachments),function(attachment){return _c('div',{key:attachment.quoteEmailAttachmentId,staticClass:\"column is-1 m-0 p-1\"},[_c('div',{staticClass:\"is-clickable is-unselectable has-background-light py-0 px-0\"},[_c('div',{staticClass:\"columns is-gapless is-relative\"},[_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.isIncoming),expression:\"isIncoming\"}],staticClass:\"button is-primary is-small px-1 m-0\",class:{'is-light': !attachment.isSelected},staticStyle:{\"position\":\"absolute\",\"top\":\"0\",\"left\":\"0\",\"z-index\":\"1\"},on:{\"click\":()=>{ attachment.isSelected = !attachment.isSelected }}},[_c('i',{staticClass:\"mdi mdi-check\",class:{'':attachment.isSelected,'has-text-grey-light':!attachment.isSelected}})]),_c('div',{staticClass:\"column is-full is-clipped\"},[_c('figure',{staticClass:\"image is-3by4 is-fullwidth is-vcentered\",on:{\"click\":function($event){return _vm.viewImage(attachment, attachment.isImage)}}},[(attachment.isImage)?_c('img',{staticStyle:{\"object-fit\":\"cover\"},attrs:{\"src\":attachment.externalStorageURL}}):_vm._e(),(attachment.isPdf)?_c('img',{attrs:{\"alt\":\"Vue logo\",\"src\":require(\"../../../assets/images/attachment-pdf.png\")}}):_vm._e(),(!attachment.isImage && !attachment.isPdf)?_c('img',{attrs:{\"alt\":\"Vue logo\",\"src\":require(\"../../../assets/images/attachment-doc.png\")}}):_vm._e()]),_c('div',{staticClass:\"columns is-multiline column is-clipped p-0 m-0\"},[_c('div',{staticClass:\"column is-full p-0 m-0\",staticStyle:{\"overflow\":\"hidden\",\"text-overflow\":\"ellipsis\",\"font-weight\":\"bold\",\"white-space\":\"nowrap\"},attrs:{\"tooltip\":attachment.filename,\"title\":attachment.filename}},[_vm._v(_vm._s(attachment.filename)+\")\")])])])])]),(_vm.isViewerModalOpen)?_c('quote-email-attachment-viewer-modal',{attrs:{\"active\":_vm.isViewerModalOpen,\"attachment\":_vm.viewAttachment,\"quote-id\":_vm.quoteId,\"is-incoming\":_vm.isIncoming},on:{\"cancel\":function($event){return _vm.viewImage(null)}}}):_vm._e()],1)}),0)])])\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('span',{staticClass:\"icon has-text-primary\"},[_c('i',{staticClass:\"mdi mdi-content-copy mdi-24px\"})])\n},function (){var _vm=this,_c=_vm._self._c;return _c('span',{staticClass:\"icon has-text-success\"},[_c('i',{staticClass:\"mdi mdi-select-all mdi-24px\"})])\n},function (){var _vm=this,_c=_vm._self._c;return _c('span',{staticClass:\"icon has-text-grey\"},[_c('i',{staticClass:\"mdi mdi-select-off mdi-24px\"})])\n}]\n\nexport { render, staticRenderFns }","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!./QuoteEmailAttachments.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!./QuoteEmailAttachments.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./QuoteEmailAttachments.vue?vue&type=template&id=27d28ac2\"\nimport script from \"./QuoteEmailAttachments.vue?vue&type=script&lang=js\"\nexport * from \"./QuoteEmailAttachments.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","\n<template>\n  <base-modal-ex v-if=\"isActive\"\n    :active.sync=\"isActive\"\n    :animation-in=\"animationIn\"\n    :animation-out=\"animationOut\"\n    :animation-duration=\"animationDuration\"\n    :can-cancel=\"false\"\n    :min-width=\"60\"\n    has-modal-card>\n    <!-- <div class=\"model-content\">\n      <div class=\"modal-card\"> -->\n    <header class=\"modal-card-head\">\n      <p class=\"modal-card-title\"\n        :class=\"{ 'is-flex-items-center' : showIcon}\">\n        <span v-if=\"showIcon\"\n          class=\"icon is-medium\"\n          :class=\"`has-text-${iconType}`\"\n          style=\"margin-right: 0.5rem\">\n          <i class=\"mdi mdi-36px\"\n            :class=\"`${iconName}`\" />\n        </span>\n        <slot name=\"text-title\" />\n      </p>\n    </header>\n    <section class=\"modal-card-body\">\n      <!-- <slot name=\"text-content\"></slot> -->\n      <div>\n        <image-select v-if=\"innerEmailer && isActiveImageSelect\"\n          v-model=\"imagesSelectedForAttachment\"\n          :quote-id=\"innerEmailer.assetId\"\n          :quote-ids=\"attachmentOptions.selectedQuotes.map(q => q.value)\"\n          :subtitle=\"`Select images to attach`\"\n          @input=\"getSelectedImage\" />\n        <quote-email-attachments v-if=\"isActiveAttachment\"\n          :quote-id=\"innerEmailer.assetId\"\n          :email-id=\"innerSelectedAttachmentEmailId\"\n          :is-incoming=\"isIncoming\"\n          @close=\"closeAttachmentsModel\"\n        />\n      </div>\n    </section>\n    <footer class=\"modal-card-foot\"\n      :style=\"`justify-content: flex-${buttonLocation}`\">\n      <button class=\"button is-success tooltip\"\n        v-show=\"isActiveImageSelect\"\n        @click=\"ok()\"\n        data-tooltip=\"Done\"\n        :disabled=\"!canAttach\">\n        <span>Ok</span>\n      </button>\n      <!-- <button class=\"button is-primary tooltip\"\n        v-show=\"!attachDisabled\"\n        @click=\"attach()\"\n        :data-tooltip=\"[!toggleAttachButton ? 'Attach images' : 'Done']\"\n        :disabled=\"attachDisabled\">\n        <span v-if=\"!toggleAttachButton\"\n          class=\"icon is-small\">\n          <i class=\"mdi mdi-18px mdi-paperclip\" />\n        </span>\n        <span v-else>Done</span>\n      </button> -->\n      <button class=\"button tooltip\"\n        @click=\"cancel()\"\n        :data-tooltip=\"cancelInWording\"\n        :disabled=\"cancelDisabled\">{{ cancelInWording }}</button>\n    </footer>\n    <!-- </div>\n    </div> -->\n  </base-modal-ex>\n</template>\n\n<script>\nimport { BaseModalEx } from '@/components/BulmaModal'\nimport { mapGetters } from 'vuex'\nimport ImageSelect from '@/components/ImageSelect'\nimport Guid from '@/components/Guid'\n// import { Emailer } from '@/classes'\n// import StoreUtil from '@/store/utils'\n// import PrintPreviewRoutes from '@/components/printpreview/route-types'\n// import { RemarkTypes, AssetTypes } from '@/enums'\n// import { KeyValuePairModel } from '@/classes/viewmodels'\nimport QuoteCommunicationsMixin from '../mixins/QuoteCommunicationsMixin'\nimport QuoteEmailAttachments from './QuoteEmailAttachments'\n\nexport default {\n  name: 'QuoteCommunicationEmailModal',\n  components: {\n    BaseModalEx,\n    ImageSelect,\n    QuoteEmailAttachments\n  },\n  mixins: [QuoteCommunicationsMixin],\n  props: {\n    value: null,\n    active: {\n      type: Boolean,\n      default: false\n    },\n    animationIn: {\n      type: String,\n      default: 'zoomIn'\n    },\n    animationOut: {\n      type: String,\n      default: 'zoomOut'\n    },\n    animationDuration: {\n      type: [String, Number],\n      default: 0.3\n    },\n    buttonLocation: {\n      type: String,\n      default: 'end' // valid values 'start' & 'end'\n    },\n    showIcon: {\n      type: Boolean,\n      default: true\n    },\n    iconType: {\n      type: String,\n      default: 'primary'\n    },\n    iconName: {\n      type: String,\n      default: 'mdi-attachment'\n    },\n    okDisabled: {\n      type: Boolean,\n      default: false\n    },\n    attachDisabled: {\n      type: Boolean,\n      default: true\n    },\n    cancelDisabled: {\n      type: Boolean,\n      default: false\n    },\n    emailer: {\n      type: Object,\n      defaul: {}\n    },\n    // toggleAttachButton: {\n    //   type: Boolean,\n    //   default: false\n    // }\n    selectedAttachmentEmailId: {\n      type: String,\n      default: ''\n    },\n    isIncoming: {\n      type: Boolean,\n      default: false\n    }\n  },\n  data() {\n    return {\n      isActive: false,\n      innerValue: null,\n      imagesSelectedForAttachment: [],\n      attachmentOptions: {\n          selectedQuotes: []\n      },\n      toggleAttachButton: false,\n      innerEmailer: {},\n      isActiveImageSelect: true,\n      isActiveAttachment: false\n    }\n  },\n  computed: {\n    ...mapGetters(['licenceExpired']),\n    childModel: {\n      get() {\n        return this.value\n      },\n      set(newValue) {\n        this.$emit('input', newValue)\n      }\n    },\n    canAttach() {\n      return this.imagesSelectedForAttachment.length > 0\n    },\n    cancelInWording() {\n      return (this.isActiveAttachment) ? 'Close' : 'Cancel'\n    }\n  },\n  watch: {\n    active(value) {\n      this.isActive = value\n    },\n    value: {\n      handler: function(newVal, oldVal) {\n        //console.log(newVal)\n        this.imagesSelectedForAttachment = newVal\n      }\n    },\n    selectedAttachmentEmailId: {\n      handler: function(newVal, oldVal) {\n        this.innerSelectedAttachmentEmailId = newVal\n        this.isActiveAttachment = !!(newVal)\n        this.isActiveImageSelect = !this.isActiveAttachment\n      }\n    }\n  },\n  created() {\n    this.imagesSelectedForAttachment = this.value\n    this.innerEmailer = this.emailer\n    //console.log(this.innerEmailer)\n  },\n  mounted() {\n    this.isActive = this.active || false\n  },\n  methods: {\n    // ...mapActions('printpreview', { addEmailer: 'addEmailer', removeEmailer: 'removeEmailer' }),\n    // ...mapActions('printpreview', { addReportParameters: 'addParameters', removeReportParameters: 'removeParameters' }),\n    ok() {\n      //this.isActive = false\n      //this.$emit('update:active', false)\n      //this.imagesSelectedForAttachment = this.childModel\n      this.childModel = this.imagesSelectedForAttachment\n      this.setEmailerAttachments({ emailerId: this.innerEmailer.id, attachments: this.imagesSelectedForAttachment })\n      this.reset()\n      this.$emit('ok')\n      //this.print()\n    },\n    // attach() {\n    //   this.toggleAttachButton = !this.toggleAttachButton\n    //   // const param = {\n    //   //   quoteId: this.innerEmailer.assetId,\n    //   //   images: this.imagesSelectedForAttachment\n    //   // }\n    //   // this.imagesSelectedForAttachment.forEach(i => { i.text = i.fileName })\n    //   this.setEmailerAttachments({ emailerId: this.innerEmailer.id, attachments: this.imagesSelectedForAttachment })\n    //   this.childModel = this.imagesSelectedForAttachment\n    // },\n    cancel() {\n      //this.imagesSelectedForAttachment.splice(0, this.imagesSelectedForAttachment.length)\n      //this.isActive = false\n      //this.$emit('update:active', false)\n      this.reset()\n      this.$emit('cancel')\n    },\n    reset() {\n      this.toggleAttachButton = false\n    },\n    getImageIdForAttachment(index) {\n      if (index <= this.imagesSelectedForAttachment.length) {\n        return this.imagesSelectedForAttachment[index - 1].quoteImageId\n      } else {\n        return Guid.empty()\n      }\n    },\n    getSelectedImage(selectedImages) {\n      this.imagesSelectedForAttachment = selectedImages\n    },\n    updateAttachment(){\n      this.$emit('updateAttachment')\n    },\n    closeAttachmentsModel() {\n      this.isActiveAttachment = false\n      this.isActiveImageSelect = true\n      this.isActive = false\n      this.innerSelectedAttachmentEmailId = ''\n      this.$emit('close')\n    }\n  }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.is-flex-items-center {\n  display: flex;\n  align-items: center;\n}\n</style>\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!./QuoteCommunicationEmailModal.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!./QuoteCommunicationEmailModal.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./QuoteCommunicationEmailModal.vue?vue&type=template&id=c8fbc934&scoped=true\"\nimport script from \"./QuoteCommunicationEmailModal.vue?vue&type=script&lang=js\"\nexport * from \"./QuoteCommunicationEmailModal.vue?vue&type=script&lang=js\"\nimport style0 from \"./QuoteCommunicationEmailModal.vue?vue&type=style&index=0&id=c8fbc934&prod&lang=scss&scoped=true\"\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  \"c8fbc934\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('base-modal-ex',{attrs:{\"active\":_vm.isActive,\"animation-in\":_vm.animationIn,\"animation-out\":_vm.animationOut,\"animation-duration\":_vm.animationDuration,\"can-cancel\":false,\"min-width\":45,\"min-height\":85,\"has-modal-card\":\"\"},on:{\"update:active\":function($event){_vm.isActive=$event}}},[_c('header',{staticClass:\"modal-card-head\"},[_c('p',{staticClass:\"modal-card-title\",class:{ 'is-flex-items-center' : _vm.showIcon}},[(_vm.showIcon)?_c('span',{staticClass:\"icon is-medium\",class:`has-text-${_vm.iconType}`,staticStyle:{\"margin-right\":\"0.5rem\"}},[_c('i',{staticClass:\"mdi mdi-36px\",class:`${_vm.iconName}`})]):_vm._e(),_c('span',[_vm._v(\"Email Template\")])])]),_c('section',{staticClass:\"modal-card-body\"},[_c('vue-email-message-templates',{ref:\"emailMessageTemplates\",attrs:{\"enable-save\":_vm.enableSave},on:{\"save-button\":_vm.setEnableSave}})],1),_c('footer',{staticClass:\"modal-card-foot is-flex is-justify-content-flex-end\"},[_c('div',{staticClass:\"buttons\"},[(!_vm.enableSave)?_c('button',{staticClass:\"button is-success tooltip\",attrs:{\"data-tooltip\":\"Save template\"},on:{\"click\":_vm.add}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-plus mdi-20px\"})]),_c('span',[_vm._v(\"New\")])]):_vm._e(),(_vm.enableSave)?_c('button',{staticClass:\"button is-success tooltip\",attrs:{\"data-tooltip\":\"Save template\"},on:{\"click\":_vm.save}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-content-save mdi-20px\"})]),_c('span',[_vm._v(\"Save\")])]):_vm._e(),(_vm.enableSave)?_c('button',{staticClass:\"button tooltip\",attrs:{\"data-tooltip\":\"Cancel changes\"},on:{\"click\":_vm.cancel}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-content-save-off mdi-20px\"})]),_c('span',[_vm._v(\"Cancel\")])]):_vm._e(),_c('button',{staticClass:\"button tooltip\",attrs:{\"data-tooltip\":\"Close\"},on:{\"click\":_vm.close}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-close mdi-20px\"})]),_c('span',[_vm._v(\"Close\")])])])])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{attrs:{\"active\":_vm.isActive},on:{\"update:active\":function($event){_vm.isActive=$event}}},[_c('bulma-table',{staticClass:\"table is-bordered is-striped is-narrow is-fullwidth\",attrs:{\"columns\":_vm.columns,\"page-index\":_vm.filter.pageIndex,\"page-size\":_vm.filter.pageSize,\"total-rows\":_vm.totalRows,\"is-loading\":_vm.isTableLoading,\"sort-column\":_vm.filter.sortColumn,\"sort-order\":_vm.filter.sortOrder},on:{\"pageChanged\":_vm.onPageChange,\"sort\":_vm.sort}},[_vm._l((_vm.entitySummaries),function(msg,index){return _c('tr',{key:msg.id,class:{ 'is-selected' : _vm.selectedRow === index },on:{\"click\":function($event){return _vm.highlightSelected(msg, index, $event)}}},[_c('td',{on:{\"dblclick\":function($event){return _vm.editMessage(msg, index)}}},[_vm._v(_vm._s(msg.message))]),_c('td',{staticClass:\"has-vertical-middle has-text-centered is-content-width\"},[_c('a',{staticClass:\"button is-danger is-small is-inverted\",attrs:{\"data-tooltip\":\"Click to delete\"},on:{\"click\":function($event){return _vm.deleteMessage(msg.id, index, msg.message)}}},[_c('span',{staticClass:\"icon is-medium\"},[_c('i',{staticClass:\"mdi mdi-delete mdi-24px\"})])])])])}),_c('template',{slot:\"empty\"},[_c('section',{staticClass:\"section\"},[_c('div',{staticClass:\"content has-text-grey has-text-centered\"},[_c('span',{attrs:{\"icon\":\"icon is-large\"}},[_c('i',{staticClass:\"mdi mdi-48px mdi-emoticon-sad\"})]),_c('p',[_vm._v(\"Nothing\")])])])])],2),(_vm.isEnableSave)?_c('div',{staticClass:\"field\"},[_c('label',{staticClass:\"label\"},[_vm._v(\"Message :\")]),_c('div',{staticClass:\"control\"},[_c('textarea',{directives:[{name:\"focus-inserted\",rawName:\"v-focus-inserted\"},{name:\"model\",rawName:\"v-model\",value:(_vm.message),expression:\"message\"}],staticClass:\"textarea\",class:{ 'is-danger' : !_vm.isMessageEntered},attrs:{\"id\":\"message\",\"placeholder\":\"Enter New Message Here...\",\"maxlength\":\"2000\"},domProps:{\"value\":(_vm.message)},on:{\"input\":[function($event){if($event.target.composing)return;_vm.message=$event.target.value},_vm.enterMessage]}}),_vm._v(\" \"),_c('div',{staticClass:\"is-flex is-justify-content-space-between\"},[_c('span',{staticClass:\"help\"},[_vm._v(_vm._s(_vm.message.length)+\"/8000\")]),(!_vm.isMessageEntered && _vm.isEnableSave)?_c('span',{staticClass:\"help is-danger\"},[_vm._v(\"Message is required.\")]):_vm._e()])]),_c('label',{staticClass:\"label\"},[_vm._v(\"Insert : \")]),_c('div',[_c('button',{staticClass:\"button is-small is-rounded is-outlined is-info tooltip\",attrs:{\"data-tooltip\":\"Add Name\"},on:{\"click\":function($event){return _vm.insertTag('[NAME]')}}},[_c('span',[_vm._v(\"Name\")])]),_vm._v(\"  \"),_c('button',{staticClass:\"button is-small is-rounded is-outlined is-info tooltip\",attrs:{\"data-tooltip\":\"Add Rego\"},on:{\"click\":function($event){return _vm.insertTag('[REGO]')}}},[_c('span',[_vm._v(\"Rego\")])]),_vm._v(\"  \"),_c('button',{staticClass:\"button is-small is-rounded is-outlined is-info tooltip\",attrs:{\"data-tooltip\":\"Add Excess\"},on:{\"click\":function($event){return _vm.insertTag('[EXCESS]')}}},[_c('span',[_vm._v(\"Excess\")])]),_vm._v(\"  \"),_c('button',{staticClass:\"button is-small is-rounded is-outlined is-info tooltip\",attrs:{\"data-tooltip\":\"Add Estimated Start Date\"},on:{\"click\":function($event){return _vm.insertTag('[EST START DATE]')}}},[_c('span',[_vm._v(\"Estimated Start Date\")])]),_vm._v(\"  \"),_c('button',{staticClass:\"button is-small is-rounded is-outlined is-info tooltip\",attrs:{\"data-tooltip\":\"Add Estimated End Date\"},on:{\"click\":function($event){return _vm.insertTag('[EST END DATE]')}}},[_c('span',[_vm._v(\"Estimated End Date\")])]),_vm._v(\"  \"),_c('button',{staticClass:\"button is-small is-rounded is-outlined is-info tooltip\",attrs:{\"data-tooltip\":\"Add Shop Name\"},on:{\"click\":function($event){return _vm.insertTag('[SHOPNAME]')}}},[_c('span',[_vm._v(\"Shop Name\")])]),_vm._v(\"  \"),_c('button',{staticClass:\"button is-small is-rounded is-outlined is-info tooltip\",attrs:{\"data-tooltip\":\"Attach Image Hyperlink\"},on:{\"click\":function($event){return _vm.insertTag('[IMAGEUPLOAD]')}}},[_c('span',[_vm._v(\"Image Upload Link\")])])])]):_vm._e(),(_vm.entity)?_c('unsaved-modal',{attrs:{\"active\":_vm.isUnsavedModalActive},on:{\"update:active\":function($event){_vm.isUnsavedModalActive=$event},\"close\":function($event){return _vm.closeModal()},\"skipSave\":function($event){return _vm.skipSave()},\"saveContinue\":function($event){return _vm.saveContinue()}}},[_c('p',{attrs:{\"slot\":\"text-title\"},slot:\"text-title\"},[_vm._v(\"Unsaved Changes\")]),_c('p',{attrs:{\"slot\":\"text-content\"},slot:\"text-content\"},[_vm._v(\"There are unsaved changes. Please select action below\")])]):_vm._e(),(_vm.entity)?_c('confirm-modal',{attrs:{\"active\":_vm.isConfirmModalActive,\"ok-text\":'Yes',\"cancel-text\":'No'},on:{\"update:active\":function($event){_vm.isConfirmModalActive=$event},\"ok\":function($event){return _vm.deleteEntity(true)},\"cancel\":function($event){return _vm.deleteEntity(false)}},model:{value:(_vm.entity),callback:function ($$v) {_vm.entity=$$v},expression:\"entity\"}},[_c('p',{attrs:{\"slot\":\"text-title\"},slot:\"text-title\"},[_vm._v(\"Delete Email Template\")]),_c('p',{attrs:{\"slot\":\"text-content\"},slot:\"text-content\"},[_vm._v(\" Email Template \"),_c('span',{staticClass:\"has-text-primary has-text-weight-bold\"},[_vm._v(_vm._s(`${_vm.entity.message}`))]),_vm._v(\" will be deleted. Continue? \")])]):_vm._e()],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { TableColumn } from '@/classes'\n\nconst Columns = [new TableColumn('Message Template', 'message', true, 'asc', 'left'), new TableColumn('', 'action', false, 'desc', 'centered')]\n\nexport { Columns }\n","<template>\n  <div :active.sync=\"isActive\">\n    <bulma-table class=\"table is-bordered is-striped is-narrow is-fullwidth\"\n      :columns=\"columns\"\n      :page-index=\"filter.pageIndex\"\n      :page-size=\"filter.pageSize\"\n      :total-rows=\"totalRows\"\n      :is-loading=\"isTableLoading\"\n      :sort-column=\"filter.sortColumn\"\n      :sort-order=\"filter.sortOrder\"\n      @pageChanged=\"onPageChange\"\n      @sort=\"sort\">\n      <tr v-for=\"(msg, index) in entitySummaries\"\n        :key=\"msg.id\"\n        :class=\"{ 'is-selected' : selectedRow === index }\"\n        @click=\"highlightSelected(msg, index, $event)\">\n        <td @dblclick=\"editMessage(msg, index)\">{{ msg.message }}</td>\n        <td class=\"has-vertical-middle has-text-centered is-content-width\">\n          <a class=\"button is-danger is-small is-inverted\"\n            @click=\"deleteMessage(msg.id, index, msg.message)\"\n            data-tooltip=\"Click to delete\">\n            <span class=\"icon is-medium\">\n              <i class=\"mdi mdi-delete mdi-24px\" />\n            </span>\n          </a>\n        </td>\n      </tr>\n      <template slot=\"empty\">\n        <section class=\"section\">\n          <div class=\"content has-text-grey has-text-centered\">\n            <span icon=\"icon is-large\">\n              <i class=\"mdi mdi-48px mdi-emoticon-sad\" />\n            </span>\n            <p>Nothing</p>\n          </div>\n        </section>\n      </template>\n    </bulma-table>\n\n    <div class=\"field\"\n      v-if=\"isEnableSave\">\n      <label class=\"label\">Message :</label>\n      <div class=\"control\">\n        <textarea class=\"textarea\"\n          :class=\"{ 'is-danger' : !isMessageEntered}\"\n          id=\"message\"\n          v-focus-inserted\n          v-model=\"message\"\n          placeholder=\"Enter New Message Here...\"\n          @input=\"enterMessage\"\n          maxlength=\"2000\" />\n        <div class=\"is-flex is-justify-content-space-between\">\n          <span class=\"help\">{{ message.length }}/8000</span>\n          <span class=\"help is-danger\"\n            v-if=\"!isMessageEntered && isEnableSave\">Message is required.</span>\n        </div>\n      </div>\n\n      <label class=\"label\">Insert : </label>\n      <div>\n        <button class=\"button is-small is-rounded is-outlined is-info tooltip\"\n          @click=\"insertTag('[NAME]')\"\n          data-tooltip=\"Add Name\">\n          <span>Name</span>\n        </button>&nbsp;\n        <button class=\"button is-small is-rounded is-outlined is-info tooltip\"\n          @click=\"insertTag('[REGO]')\"\n          data-tooltip=\"Add Rego\">\n          <span>Rego</span>\n        </button>&nbsp;\n        <button class=\"button is-small is-rounded is-outlined is-info tooltip\"\n          @click=\"insertTag('[EXCESS]')\"\n          data-tooltip=\"Add Excess\">\n          <span>Excess</span>\n        </button>&nbsp;\n        <button class=\"button is-small is-rounded is-outlined is-info tooltip\"\n          @click=\"insertTag('[EST START DATE]')\"\n          data-tooltip=\"Add Estimated Start Date\">\n          <span>Estimated Start Date</span>\n        </button>&nbsp;\n        <button class=\"button is-small is-rounded is-outlined is-info tooltip\"\n          @click=\"insertTag('[EST END DATE]')\"\n          data-tooltip=\"Add Estimated End Date\">\n          <span>Estimated End Date</span>\n        </button>&nbsp;\n        <button class=\"button is-small is-rounded is-outlined is-info tooltip\"\n          @click=\"insertTag('[SHOPNAME]')\"\n          data-tooltip=\"Add Shop Name\">\n          <span>Shop Name</span>\n        </button>&nbsp;\n        <button\n          class=\"button is-small is-rounded is-outlined is-info tooltip\"\n          @click=\"insertTag('[IMAGEUPLOAD]')\"\n          data-tooltip=\"Attach Image Hyperlink\">\n          <span>Image Upload Link</span>\n        </button>\n      </div>\n    </div>\n\n    <unsaved-modal v-if=\"entity\"\n      :active.sync=\"isUnsavedModalActive\"\n      @close=\"closeModal()\"\n      @skipSave=\"skipSave()\"\n      @saveContinue=\"saveContinue()\">\n      <p slot=\"text-title\">Unsaved Changes</p>\n      <p slot=\"text-content\">There are unsaved changes. Please select action below</p>\n    </unsaved-modal>\n    <confirm-modal v-if=\"entity\"\n      :active.sync=\"isConfirmModalActive\"\n      @ok=\"deleteEntity(true)\"\n      @cancel=\"deleteEntity(false)\"\n      :ok-text=\"'Yes'\"\n      :cancel-text=\"'No'\"\n      v-model=\"entity\">\n      <p slot=\"text-title\">Delete Email Template</p>\n      <p slot=\"text-content\">\n        Email Template\n        <span class=\"has-text-primary has-text-weight-bold\">{{ `${entity.message}` }}</span> will be deleted. Continue?\n      </p>\n    </confirm-modal>\n  </div>\n</template>\n\n<script>\nimport BulmaTable from '@/components/BulmaTable'\nimport { UnsavedModal, ConfirmModal } from '@/components/BulmaModal'\nimport { Columns } from './columns'\nimport { FocusInserted } from '@/components/directives'\nimport EventBus from '@/components/EventBus'\nimport EmailService from './EmailService'\n\nexport default {\n  name: 'VueEmailMessageTemplates',\n  components: {\n    BulmaTable,\n    UnsavedModal,\n    ConfirmModal\n  },\n\n  directives: {\n    FocusInserted\n  },\n  props: {\n    value: null,\n    enableSave: false,\n    active: {\n      type: Boolean,\n      default: false\n    }\n  },\n  data() {\n    return {\n      isActive: this.active || false,\n      isNew: false,\n      isEdit: false,\n      isDeleted: false,\n      isBack: false,\n      isClose: false,\n      isEnableSave: false,\n      isMessageEntered: true,\n      isUnsavedModalActive: false,\n      isConfirmModalActive: false,\n      isEmpty: false,\n      totalRows: 0,\n      entitySummaries: {},\n      entity: { id: '', message: '' },\n      selected: { id: '', message: '' },\n      filter: {\n        sortColumn: Columns[0].name,\n        sortOrder: Columns[0].defaultOrder,\n        pageIndex: 1,\n        pageSize: 5\n      },\n      oriMsg: '',\n      selectedRow: null,\n      isTableLoading: false,\n      message: ''\n    }\n  },\n  computed: {\n    columns() {\n      return Columns\n    }\n  },\n  created() {\n    this.message = ''\n    this.getData()\n    this.isEnableSave = this.enableSave\n  },\n  methods: {\n    async getData() {\n      this.isTableLoading = true\n      this.entitySummaries = await EmailService.getEntitySummaries(this.filter)\n      if (!this.entitySummaries.length && this.filter.pageIndex > 1) {\n        const prevIndex = this.filter.pageIndex - 1\n        this.onPageChange(prevIndex)\n      }\n      this.totalRows = this.entitySummaries.length > 0 ? this.entitySummaries[0].totalRows : 0\n      this.isTableLoading = false\n    },\n    enterMessage() {\n      this.isMessageEntered = this.message !== ''\n      if (this.isMessageEntered) {\n        this.isEnableSave = true\n      }\n    },\n    reset() {\n      this.isNew = false\n      this.isDeleted = false\n      this.isEdit = false\n      this.isUnsavedModalActive = false\n      this.isConfirmModalActive = false\n      this.entity.id = ''\n      this.entity.message = ''\n      this.oriMsg = this.message = ''\n      this.isEnableSave = false\n      this.$emit('save-button', false)\n    },\n    add() {\n      this.reset()\n      this.selectedRow = ''\n      this.isMessageEntered = false\n      this.isEnableSave = true\n      this.isNew = true\n    },\n    back() {\n      if (this.oriMsg !== this.message) {\n        this.isBack = true\n        this.isUnsavedModalActive = true\n      } else {\n        this.$emit('back')\n      }\n    },\n    close() {\n      if (this.oriMsg !== this.message) {\n        this.isClose = true\n        this.isUnsavedModalActive = true\n      } else {\n        this.$emit('close', true)\n      }\n    },\n    editMessage(entity, index) {\n      // add new -> edit message\n      if (this.oriMsg !== this.message) {\n        this.isEdit = true\n        this.isUnsavedModalActive = true\n        // edit message\n      } else {\n        this.isNew = false\n        this.isEdit = true\n        this.isEnableSave = true\n        this.entity.id = entity.id\n        this.entity.message = entity.message\n        this.oriMsg = entity.message\n        this.message = entity.message\n        this.message.FocusInserted\n        this.isMessageEntered = this.message !== ''\n        this.isEnableSave = true\n        this.$emit('save-button', true)\n      }\n    },\n    deleteMessage(id, index, msg) {\n      this.isDeleted = true\n      if (!this.isEdit) {\n        this.entity.id = id\n      }\n      if (!this.isEdit && this.oriMsg !== this.message && this.entity.id !== this.selected.id) {\n        this.entity.id = this.selected.id\n        this.entity.message = this.selected.message\n        this.isUnsavedModalActive = true\n      } else if (this.message != msg && this.message != '' && this.isNew) {\n        this.isUnsavedModalActive = true\n        // } else if (this.isEdit && this.selected.id !== id) {\n        // edit msg then delete on same msg or other msg\n      } else if (this.isEdit && this.isDeleted && this.oriMsg !== this.message && this.entity.id !== id) {\n        this.isUnsavedModalActive = true\n      } else {\n        this.entity.id = id\n        this.entity.message = msg\n        this.isNew = false // set to false when add new message is empty and then click on delete\n        this.isEdit = false // set to false when no change on edit message and then click on delete\n        this.isConfirmModalActive = true\n      }\n    },\n    async deleteEntity(confirmDelete) {\n      if (confirmDelete) {\n        try {\n          await EmailService.deleteEntity(this.selected.id)\n          this.getData()\n          this.isEnableSave = false\n          this.isMessageEntered = true\n          // for edit then edit same message and\n          // for add new then highlight and delete other message\n          if (\n            (!this.isNew && !this.isEdit && this.isDeleted) ||\n            (!this.isNew && !this.isEdit && this.entity.id == this.selected.id) ||\n            (!this.isNew && this.isEdit && this.entity.id == this.selected.id)\n          ) {\n            this.reset()\n          }\n          this.selectedRow = ''\n          this.$emit('save-button', false)\n        } catch (e) {\n          EventBus.$emit('serviceError', e.response.status)\n          this.$notification.openMessageXhrError('Email Message', e)\n          return false\n        }\n      } else {\n        if (!this.isNew && this.isEdit && this.entity.id == this.selected.id) {\n          this.isConfirmModalActive = false\n          this.selectedRow = this.entitySummaries.indexOf(this.entitySummaries.find((i) => i.message === this.oriMsg))\n        } else {\n          this.reset()\n          this.$emit('save-button', false)\n        }\n      }\n    },\n    cancel() {\n      this.reset()\n      this.selectedRow = ''\n    },\n    async saveEmail() {\n      if (this.isNew) {\n        await this.save(true)\n      } else if (this.isEdit) {\n        await this.save(false)\n      }\n    },\n    async save(isNew) {\n      var newMsg = this.message\n      this.isEmpty = false\n      if (newMsg == '') {\n        this.isEmpty = true\n        this.$notification.openNotificationWithType('danger', 'Email Message', 'Validation errors. Please fix before saving')\n        return false\n      }\n      if (this.oriMsg == newMsg && this.entity.id == this.selected.id) {\n        this.$notification.openNotificationWithType('warning', 'Email Message', 'No changes detected. Not saved')\n        return false\n      }\n\n      try {\n        this.$showSpinner('Saving...')\n        // add new message\n        if (isNew) {\n          this.entity.id = 0\n          this.entity.message = newMsg\n          await EmailService.postEntity(this.entity)\n          await this.getData() // wait to get latest order after add\n          //console.log('save')\n          this.selectedRow = this.entitySummaries.indexOf(this.entitySummaries.find((i) => i.message === newMsg)) // get latest index for case NOT from save continue\n          // edit message\n        } else {\n          this.entity.message = newMsg\n          await EmailService.putEntity(this.entity)\n          await this.getData() // wait to get latest order after edit\n          this.selectedRow = this.entitySummaries.indexOf(this.entitySummaries.find((i) => i.id === this.selected.id)) // get latest index for case NOT from save continue\n        }\n        //console.log('save done')\n        this.reset()\n        this.$notification.success('Email Message', 'Save successful')\n        this.$emit('save-button', false)\n        return true\n      } catch (e) {\n        if (e && e.response && e.response.status){\n          EventBus.$emit('serviceError', e.response.status)\n          this.$notification.openMessageXhrError('Email Message', e)\n        }\n        return false\n      } finally {\n        this.$hideSpinner()\n      }\n    },\n    async saveContinue() {\n      if (this.isNew && this.isDeleted) {\n        await this.deleteEntity(true)\n        await this.save(true)\n        this.reset()\n      } else if (this.isEdit && this.isDeleted) {\n        await this.deleteEntity(true)\n        await this.save(false)\n        this.isUnsavedModalActive = false\n        this.isEnableSave = false\n      } else if (this.isNew && this.isEdit) {\n        await this.save(true)\n        this.isEdit = true // isEdit has been set to false after save. Re-set to true for edit on selected msg\n        this.oriMsg = this.selected.message\n        this.entity.id = this.selected.id\n        this.entity.message = this.selected.message\n        this.message = this.selected.message\n        this.selectedRow = this.entitySummaries.indexOf(this.entitySummaries.find((i) => i.id === this.selected.id)) // for case add new then edit, get latest index after insert\n        this.isUnsavedModalActive = false\n        this.isEnableSave = true\n        this.$emit('save-button', true)\n      } else if (!this.isNew && this.isEdit) {\n        // edit not save, then edit on other message\n        await this.save(false)\n        this.isEdit = true // isEdit has been set to false after save. Re-set to true for edit on selected msg\n        this.oriMsg = this.selected.message\n        this.entity.id = this.selected.id\n        this.entity.message = this.selected.message\n        if (this.isEmpty) {\n          this.message = ''\n        } else {\n          this.message = this.selected.message\n        }\n        this.selectedRow = this.entitySummaries.indexOf(this.entitySummaries.find((i) => i.id === this.selected.id)) // for edit then edit others, get latest index after insert\n        this.isUnsavedModalActive = false\n        this.isEnableSave = true\n        this.$emit('save-button', true)\n      } else if (this.isNew && !this.isEdit && !this.Deleted) {\n        //back button, add new but not save, then click save continue\n        await this.save(true)\n      }\n\n      // isEmpty is to check if msg empty then it not allow back to MessageSend\n      if (this.isBack && !this.isEmpty) {\n        this.$emit('back')\n      }\n\n      if (this.isClose && !this.isEmpty) {\n        this.$emit('close', true)\n      }\n    },\n    skipSave() {\n      if (this.isBack) {\n        this.$emit('back')\n      } else if (this.isClose) {\n        this.$emit('close', true)\n      } else if (this.isDeleted) {\n        this.deleteEntity(true)\n        this.reset()\n      } else if (this.isEdit) {\n        this.isUnsavedModalActive = false\n        this.message = this.selected.message\n        this.message.FocusInserted\n        this.isNew = false\n        this.isEdit = true\n        this.oriMsg = this.message\n        this.entity.id = this.selected.id\n        this.entity.message = this.selected.message\n      } else if (this.isNew) {\n        this.isUnsavedModalActive = false\n        this.message = this.selected.message\n        this.message.FocusInserted\n        this.isNew = false\n        this.isEdit = true\n        this.oriMsg = this.message\n      }\n    },\n    closeModal() {\n      this.isDeleted = false\n      this.isBack = false\n      this.isClose = false\n      this.isUnsavedModalActive = false\n      if (this.isEnableSave) {\n        this.message.FocusInserted\n        this.selectedRow = this.entitySummaries.indexOf(this.entitySummaries.find((i) => i.id === this.entity.id))\n      }\n    },\n    highlightSelected(entity, index, event) {\n      this.selectedRow = index\n      this.selected = entity\n    },\n    onPageChange(pageIndex) {\n      this.filter.pageIndex = pageIndex\n      this.getData()\n    },\n    sort(name, order) {\n      this.filter.sortColumn = name\n      this.filter.sortOrder = order\n      this.getData()\n    },\n    insertTag(myValue) {\n      var myField = document.getElementById('message')\n\n      if (document.selection) {\n        myField.focus()\n        var sel = document.selection.createRange()\n        sel.text = myValue\n      } else if (myField.selectionStart || myField.selectionStart == '0') {\n        var startPos = myField.selectionStart\n        var endPos = myField.selectionEnd\n        myField.value = myField.value.substring(0, startPos) + myValue + myField.value.substring(endPos, myField.value.length)\n      } else {\n        myField.value += myValue\n      }\n      this.message = myField.value\n      this.enterMessage()\n      myField.focus()\n    }\n  }\n}\n</script>\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!./VueEmailMessageTemplates.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!./VueEmailMessageTemplates.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./VueEmailMessageTemplates.vue?vue&type=template&id=7c2cb972\"\nimport script from \"./VueEmailMessageTemplates.vue?vue&type=script&lang=js\"\nexport * from \"./VueEmailMessageTemplates.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>\n  <base-modal-ex :active.sync=\"isActive\"\n    :animation-in=\"animationIn\"\n    :animation-out=\"animationOut\"\n    :animation-duration=\"animationDuration\"\n    :can-cancel=\"false\"\n    :min-width=\"45\"\n    :min-height=\"85\"\n    has-modal-card>\n    <header class=\"modal-card-head\">\n      <p class=\"modal-card-title\"\n        :class=\"{ 'is-flex-items-center' : showIcon}\">\n        <span v-if=\"showIcon\"\n          class=\"icon is-medium\"\n          :class=\"`has-text-${iconType}`\"\n          style=\"margin-right: 0.5rem\">\n          <i class=\"mdi mdi-36px\"\n            :class=\"`${iconName}`\" />\n        </span>\n        <span>Email Template</span>\n      </p>\n    </header>\n    <section class=\"modal-card-body\">\n      <vue-email-message-templates ref=\"emailMessageTemplates\"\n        :enable-save=\"enableSave\"\n        @save-button=\"setEnableSave\"\n      />\n    </section>\n    <footer class=\"modal-card-foot is-flex is-justify-content-flex-end\">\n      <div class=\"buttons\">\n        <button v-if=\"!enableSave\"\n          class=\"button is-success tooltip\"\n          data-tooltip=\"Save template\"\n          @click=\"add\">\n          <span class=\"icon\">\n            <i class=\"mdi mdi-plus mdi-20px\" />\n          </span>\n          <span>New</span>\n        </button>\n        <button v-if=\"enableSave\"\n          class=\"button is-success tooltip\"\n          data-tooltip=\"Save template\"\n          @click=\"save\">\n          <span class=\"icon\">\n            <i class=\"mdi mdi-content-save mdi-20px\" />\n          </span>\n          <span>Save</span>\n        </button>\n        <button v-if=\"enableSave\"\n          class=\"button tooltip\"\n          @click=\"cancel\"\n          data-tooltip=\"Cancel changes\">\n          <span class=\"icon\">\n            <i class=\"mdi mdi-content-save-off mdi-20px\" />\n          </span>\n          <span>Cancel</span>\n        </button>\n        <button class=\"button tooltip\"\n          @click=\"close\"\n          data-tooltip=\"Close\">\n          <span class=\"icon\">\n            <i class=\"mdi mdi-close mdi-20px\" />\n          </span>\n          <span>Close</span>\n        </button>\n      </div>\n    </footer>\n  </base-modal-ex>\n</template>\n\n<script>\nimport { BaseModalEx } from '@/components/BulmaModal'\nimport VueEmailMessageTemplates from './VueEmailMessageTemplates'\n\nexport default {\n  name: 'VueEmailTemplateModal',\n  components: { BaseModalEx, VueEmailMessageTemplates },\n  props: {\n    value: null,\n    active: {\n      type: Boolean,\n      default: false\n    },\n    animationIn: {\n      type: String,\n      default: 'zoomIn'\n    },\n    animationOut: {\n      type: String,\n      default: 'zoomOut'\n    },\n    animationDuration: {\n      type: [String, Number],\n      default: 0.3\n    },\n    buttonLocation: {\n      type: String,\n      default: 'end' // valid values 'start' & 'end'\n    },\n    showIcon: {\n      type: Boolean,\n      default: true\n    },\n    iconType: {\n      type: String,\n      default: 'primary'\n    },\n    iconName: {\n      type: String,\n      default: 'mdi-message-text'\n    }\n  },\n  data() {\n    return {\n      isActive: false,\n      enableSave: false\n    }\n  },\n  computed: {},\n  created() {},\n  mounted() {\n    this.isActive = this.active || false\n  },\n  methods: {\n    edit() {},\n    async send() {\n      this.$emit('update:active', false)\n      this.$emit('cancel')\n    },\n    add() {\n      this.$refs.emailMessageTemplates.add()\n      this.enableSave = true\n    },\n    close() {\n      this.$emit('update:active', false)\n      this.$emit('close')\n      this.isActive = false\n    },\n    cancel() {\n      this.$refs.emailMessageTemplates.cancel()\n    },\n    setEnableSave(value) {\n      this.enableSave = value\n    },\n    async save() {\n      await this.$refs.emailMessageTemplates.saveEmail()\n      //console.log('save complete')\n      this.$emit('update:active', false)\n      this.$emit('close')\n    }\n  }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.is-flex-items-center {\n  display: flex;\n  align-items: center;\n}\n</style>\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!./VueEmailTemplateModal.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!./VueEmailTemplateModal.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./VueEmailTemplateModal.vue?vue&type=template&id=c9b32cb2&scoped=true\"\nimport script from \"./VueEmailTemplateModal.vue?vue&type=script&lang=js\"\nexport * from \"./VueEmailTemplateModal.vue?vue&type=script&lang=js\"\nimport style0 from \"./VueEmailTemplateModal.vue?vue&type=style&index=0&id=c9b32cb2&prod&lang=scss&scoped=true\"\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  \"c9b32cb2\",\n  null\n  \n)\n\nexport default component.exports","<template>\n  <article class=\"tile is-child box detail-page-tile\">\n    <div class=\"is-flex\"\n      style=\"justify-content: space-between\">\n      <span class=\"icon is-small tooltip is-tooltip-left is-clickable mr-2\"\n        data-tooltip=\"maximize\">\n        <i class=\"mdi mdi-24px\"\n          :class=\"{ 'mdi-arrow-collapse-right' : !editMaximize, 'mdi-arrow-collapse-left' : editMaximize}\"\n          @click=\"toggleEditMaximize()\" />\n      </span>\n    </div>\n    <div>\n      <div class=\"field is-horizontal\">\n        <div class=\"field-label is-normal\">\n          <label class=\"label\">Template</label>\n        </div>\n        <div class=\"field-body\">\n          <div class=\"field\">\n            <div class=\"control is-expanded\">\n              <multiselect v-model=\"selectedTemplate\"\n                track-by=\"message\"\n                label=\"message\"\n                placeholder=\"Select Template\"\n                :options=\"templates\"\n                :loading=\"isTemplateLoading\"\n                :searchable=\"true\"\n                :allow-empty=\"true\"\n                :options-limit=\"templateFilter.pageSize\"\n                @select=\"selectTemplate\" />\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n\n    <hr>\n\n    <vue-email ref=\"emailer\"\n      v-model=\"emailer\"\n      :quote-image-attachments=\"selectedImages\"\n      @new-email=\"newEmailInput\"\n      @sent=\"sent\"\n      :asset-id=\"emailer.assetId\"\n      :reply-to-message-id=\"innerReplyToEmail.replyToMessageId\"\n      :to-emails=\"replyToSenderEmails\"\n      :cc-emails=\"replyToEmailCcs\"\n      :bcc-emails=\"replyToEmailBccs\"\n      :subject=\"innerReplyToEmailSubject\"\n      :message=\"innerReplyToEmailMessage\"\n      :is-show-cc-bcc=\"(!!replyToEmailCcs.length || !!replyToEmailBccs.length)\" />\n\n    <!-- <image-select v-if=\"emailer && isImageAttachActive\"\n      v-show=\"isImageAttachActive\"\n      v-model=\"selectedImages\"\n      :quote-id=\"emailer.assetId\"\n      :quote-ids=\"quoteIds\" /> -->\n\n    <quote-communication-email-modal :active.sync=\"isAttachmentModalActive\"\n      v-model=\"selectedImages\"\n      :show-icon=\"true\"\n      :attach-disabled=\"false\"\n      :cancel-disabled=\"false\"\n      :emailer=\"emailer\"\n      :selected-attachment-email-id=\"selectedAttachmentEmailId\"\n      :is-incoming=\"isIncoming\"\n      @ok=\"closeAttachModal()\"\n      @cancel=\"closeAttachModal()\"\n      @close=\"closeAttachModal()\">\n      <p slot=\"text-title\">Attachment</p>\n    </quote-communication-email-modal>\n\n    <div :style=\"`width: 100%;`\"\n      class=\"mt-3 buttons-group is-flex is-justify-content-space-between\">\n      <button class=\"button is-primary tooltip\"\n        data-tooltip=\"Edit message template\"\n        @click=\"isEmailTemplateModalActive = true\">\n        <span class=\"icon\">\n          <i class=\"mdi mdi-pencil mdi-20px\" />\n        </span>\n        <span>Edit Template</span>\n      </button>\n      <div class=\"buttons\">\n        <button class=\"button is-warning tooltip is-tooltip-topright\"\n          @click=\"resetEmail()\"\n          data-tooltip=\"Reset Email\"\n          :disabled=\"!enableSend\">\n          <span class=\"icon\">\n            <i class=\"mdi mdi-refresh mdi-18px\" />\n          </span>\n          <span>Reset</span>\n        </button>\n        <button class=\"button is-primary tooltip\"\n          v-show=\"enableAttach\"\n          @click=\"openAttachModel()\"\n          :data-tooltip=\"[!toggleAttachButton ? 'Attach images' : 'Done']\"\n          :disabled=\"!enableAttach\">\n          <span v-if=\"!toggleAttachButton\"\n            class=\"icon is-small\">\n            <i class=\"mdi mdi-18px mdi-paperclip\" />\n          </span>\n          <span v-else>Done</span>\n        </button>\n        <button class=\"button is-success tooltip is-tooltip-topright\"\n          @click=\"send()\"\n          data-tooltip=\"Send Email\"\n          :disabled=\"!enableSend\">\n          <span class=\"icon\">\n            <i class=\"mdi mdi-send mdi-18px\" />\n          </span>\n          <span>Send</span>\n        </button>\n      </div>\n    </div>\n\n    <vue-email-template-modal v-if=\"isEmailTemplateModalActive\"\n      :active.sync=\"isEmailTemplateModalActive\"\n      @close=\"closeTemplateModal\" />\n\n  </article>\n</template>\n\n<script>\nimport { VueEmail } from '@/components/VueEmail'\n// import mimeTypes from 'mime-types'\nimport { Emailer } from '@/classes'\nimport StoreUtil from '@/store/utils'\nimport _cloneDeep from 'lodash/cloneDeep'\nimport QuoteCommunicationsMixin from '../mixins/QuoteCommunicationsMixin'\nimport { RemarkTypes, AssetTypes, EmailAssetTypes } from '@/enums'\nimport QuoteCommunicationEmailModal from './QuoteCommunicationEmailModal.vue'\nimport _isEmpty from 'lodash/isEmpty'\nimport VueEmailTemplateModal from '@/components/VueEmail/VueEmailTemplateModal'\nimport { EmailService } from '@/services'\nimport Multiselect from 'vue-multiselect'\n\n// Temporary const for copyright message\nconst divider = '=============================================================='\nconst copyright =\n  'All accompanying materials are the exclusive property of [COMPANY].  All [COMPANY] rights are reserved.  These Materials must not be reproduced, adapted, modified, published, or communicated to any person in any form, without express prior written consent of [COMPANY].  Any unauthorised use of these Materials will be vigorously pursued and may result in legal action, including a claim for damages or an account for loss of profits.'\n\nexport default {\n  name: 'QuoteEmail',\n  components: { VueEmail, QuoteCommunicationEmailModal, VueEmailTemplateModal, Multiselect },\n  mixins: [QuoteCommunicationsMixin],\n  props: {\n    quote: {\n      type: Object,\n      required: true\n    },\n    enableAttach: {\n      type: Boolean,\n      default: true\n    },\n    enableSend: {\n      type: Boolean,\n      default: false\n    },\n    toggleAttachButton: {\n      type: Boolean,\n      default: false\n    },\n    replyToEmail: {\n      type: Object,\n      default: function () {\n        return {}\n      }\n    },\n    selectedAttachmentEmailId: {\n      type: String,\n      default: ''\n    },\n    isIncoming: {\n      type: Boolean,\n      default: false\n    },\n    msgDetails: {\n      type: Object,\n      default: () => {\n        return {\n          quoteId: null,\n          customer: null,\n          rego: null,\n          jobStart: null,\n          jobEnd: null,\n          excess: null,\n          mobile: null,\n          message: '',\n          shopName: ''\n        }\n      }\n    }\n  },\n  data: () => {\n    return {\n      //isEmailModalActive: false,\n      //isImageAttachActive: false,\n      emailer: {\n        id: null,\n        reportName: null,\n        assetId: ''\n      },\n      //reportBytes: null,\n      // reportContentType: '',\n      selectedImages: [],\n      quoteIds: [],\n      isEnteringNewEmail: false,\n      selectedImageIds: [],\n      // replyToMessageId: '',\n      replyToSenderEmails: [],\n      replyToEmailCcs: [],\n      replyToEmailBccs: [],\n      isAttachmentModalActive: false,\n      innerReplyToEmail: {},\n      innerReplyToEmailSubject: '',\n      innerReplyToEmailMessage: '',\n      innerSelectedAttachmentEmailId: '',\n      editMaximize: true,\n\n      isEmailTemplateModalActive: false,\n      isTemplateLoading: false,\n      templates: [],\n      messages: [],\n      selectedTemplate: '',\n      templateFilter: {\n        message: '',\n        pageIndex: 1,\n        pageSize: 999\n      },\n      innerMsgDetails: {}\n    }\n  },\n  computed: {\n    getSender() {\n      const message = this.innerReplyToEmail\n      const isEmpty = this.isEmptyObject(message)\n      return isEmpty ? '' : message.isIncoming ? message.sender : message.recipients\n    }\n    // reportExtension() {\n    //   return mimeTypes.extension(this.reportContentType)\n    // }\n  },\n  watch: {\n    replyToEmail(message) {\n      this.resetEmailer()\n      this.clearSelectedTemplate()\n      this.innerReplyToEmail = _cloneDeep(message || {})\n      this.buildReplyEmail()\n      //this.resetEmailer()\n      //this.clearSelectedTemplate()\n    },\n    // replyToMessage(value) {\n    //   this.replyToMessageId = value\n    // },\n    // replyToSender(value) {\n    //   this.replyToSenderEmails = value ? [value] : []\n    // },\n    'emailer.attachments': {\n      handler: function (newVal, oldVal) {\n        if (this.selectedImages && this.selectedImages.length) {\n          const differences = this.selectedImages.filter(function (image) {\n            const index = newVal.findIndex((i) => i === image.fileName)\n            return index === -1\n          })\n          if (!_isEmpty(differences)) {\n            differences.forEach((diff) => {\n              const imageIndex = this.selectedImages.findIndex((i) => i.fileName === diff.fileName)\n              if (imageIndex !== -1) this.selectedImages.splice(imageIndex, 1)\n              const idIndex = this.selectedImageIds.findIndex((id) => id === diff.quoteImageId)\n              if (idIndex !== -1) this.selectedImageIds.splice(idIndex, 1)\n            })\n          }\n        }\n        // if (this.selectedImages.length > 0) {\n        //   const difference = this.selectedImages.filter(function(image) {\n        //     const index = newVal.findIndex(i => i === image.fileName)\n        //     return index === -1\n        //   })\n        //   if (!_isEmpty(difference)) {\n        //     const imageIndex = this.selectedImages.findIndex(i => i.fileName === difference[0].fileName)\n        //     this.selectedImages.splice(imageIndex, 1)\n        //     const idIndex = this.selectedImageIds.findIndex(id => id === difference[0].quoteImageId)\n        //     this.selectedImageIds.splice(idIndex, 1, Guid.empty())\n        //   }\n        // }\n      },\n      deep: true\n    },\n    selectedAttachmentEmailId: {\n      handler: function (newVal, oldVal) {\n        this.innerSelectedAttachmentEmailId = newVal\n        this.isAttachmentModalActive = !!newVal\n      }\n    }\n  },\n\n  async created() {\n    this.clearSessionStorage()\n    this.setEmailer()\n    this.getEmailMessageDropdown()\n    this.assignInnerValue()\n  },\n  mounted() {\n    this.resetEmailer()\n    this.buildReplyEmail()\n  },\n  beforeDestroy() {\n    this.cleanEmailer()\n  },\n  methods: {\n    assignInnerValue() {\n      this.innerMsgDetails = this.msgDetails\n    },\n    isEmptyObject(obj) {\n      // Check if obj is an object and not null\n      if (typeof obj === 'object' && obj !== null) {\n        // Get the internal [[Class]] property\n        var objClass = Object.prototype.toString.call(obj)\n\n        // Check if the object is an object literal or an instance of Object\n        if (objClass === '[object Object]' || objClass === '[object ObjectConstructor]') {\n          // Check if the object has no own enumerable properties\n          return Object.keys(obj).length === 0\n        }\n      }\n\n      // Return false for non-object types or non-empty objects\n      return false\n    },\n    buildReplyEmail() {\n      const isEmpty = this.isEmptyObject(this.innerReplyToEmail)\n      if (!isEmpty && this.innerReplyToEmail.messageId) {\n        const sender = this.getSender\n        this.replyToSenderEmails = sender ? [sender] : []\n\n        const cc = this.innerReplyToEmail.cc\n        this.replyToEmailCcs = cc ? cc.split(',') : []\n\n        const bcc = this.innerReplyToEmail.bcc\n        this.replyToEmailBccs = bcc ? bcc.split(',') : []\n\n        const currentDate = new Date()\n        if (this.innerReplyToEmail.subject) {\n          this.innerReplyToEmailSubject = 'Re: ' + this.innerReplyToEmail.subject\n          this.emailer.subject = this.innerReplyToEmailSubject\n        }\n\n        this.innerReplyToEmailMessage = this.emailer.message + '\\n\\n\\n\\n'\n        this.innerReplyToEmailMessage += `On ${currentDate}, ${this.getSender} wrote:\\n\\n`\n        this.innerReplyToEmailMessage += this.innerReplyToEmail.message\n        // if (this.getSender)\n        //   this.innerReplyToEmailMessage = `${this.emailer.message} \\n\\n\\n\\nOn ${currentDate}, ${this.getSender} wrote:\\n\\n` + this.innerReplyToEmail.message\n      } else {\n        // this.resetEmailer()\n        this.innerReplyToEmailSubject = this.emailer.subject\n        this.innerReplyToEmailMessage = this.emailer.message\n        this.replyToSenderEmails = []\n        this.replyToEmailCcs = []\n        this.replyToEmailBccs = []\n      }\n      //return message\n    },\n    newEmailInput(newEmail) {\n      this.isEnteringNewEmail = newEmail\n    },\n    clearSessionStorage() {\n      sessionStorage.removeItem(`${this.$userInfo.sessionId}|${this.$route.meta.ekey}`)\n      sessionStorage.removeItem(`${this.$userInfo.sessionId}|${this.$route.meta.pkey}`)\n    },\n    setEmailer() {\n      let emailer = new Emailer()\n      emailer.assetId = this.quote.quoteId\n      emailer.assetType = EmailAssetTypes.Quote\n      emailer.assetTypes = [AssetTypes.Customer, AssetTypes.Insurer]\n      emailer.remark = `Quote ${this.quote.prefix}${this.quote.quoteNo}${this.quote.suffix}`\n      emailer.remarkTypeId = RemarkTypes.OtherSystemRemark\n      emailer.subject = `Quote Claim No. ${this.quote.claimNo || ''}`\n      emailer.reportName = `${this.quote.prefix}${this.quote.quoteNo}${this.quote.suffix}`\n      this.addEmailer(emailer)\n      this.emailer = _cloneDeep(this.getEmailer(emailer.id))\n    },\n    async resetEmailer() {\n      //console.log('reset Emailer')\n      let _emailer = null\n      if (!_emailer) _emailer = this.retrieveEmailer()\n      if (!_emailer) _emailer = StoreUtil.getLocalStorage(this.emailer.id, 'emailer')\n      if (!_emailer) _emailer = _cloneDeep(this.getEmailer(this.emailer.id) || new Emailer())\n      _emailer.message = `\\n\\n${divider}\\n${copyright.replace(/\\[COMPANY\\]/g, this.$userInfo.companyName)}`\n      this.emailer = _emailer\n      this.persistEmailer()\n      this.updateAttachmentList()\n    },\n    retrieveEmailer() {\n      return JSON.parse(sessionStorage.getItem(`${this.$userInfo.sessionId}|${this.$route.meta.ekey}`))\n    },\n    persistEmailer() {\n      sessionStorage.setItem(`${this.$userInfo.sessionId}|${this.$route.meta.ekey}`, JSON.stringify(this.emailer))\n    },\n    cleanEmailer() {\n      //console.log('cleanEmailer')\n      StoreUtil.removeStorage(this.emailer.id, 'emailer')\n      StoreUtil.removeLocalStorage(this.emailer.id, 'emailer')\n      this.removeEmailer(this.emailer.id)\n    },\n    sent() {\n      this.discardEmail()\n      this.$emit('sent')\n    },\n    resetEmail() {\n      this.discardEmail()\n      this.$emit('resetEmail')\n    },\n    updateAttachmentList() {\n      this.emailer.attachments.splice(0, this.emailer.attachments.length)\n      //this.emailer.attachments.splice(this.emailer.attachments.length, 1, `${this.emailer.reportName}.${this.reportExtension}`)\n      //console.log('updateAttachmentList')\n      //console.log(this.selectedImages)\n      for (var i = 0; i < this.selectedImages.length; i++) {\n        this.emailer.attachments.push(this.selectedImages[i].fileName)\n      }\n    },\n    // async resetReportParameters() {\n    //   const sessionParameters = this.retrieveParameters() || StoreUtil.getLocalStorage(this.$route.query.parameterId, this.$route.meta.pkey)\n    //   // console.log('sessionParameters', sessionParameters)\n    //   if (sessionParameters) {\n    //     this.parameters = sessionParameters\n    //   } else {\n    //     this.parameters = _cloneDeep(this.getParameters)\n    //   }\n    //   // console.log(this.parameters, this.getParameters)\n    //   StoreUtil.removeLocalStorage(this.$route.query.parameterId, this.$route.meta.pkey)\n    //   this.persistParameters()\n    // },\n    // retrieveParameters() {\n    //   const json = sessionStorage.getItem(`${this.$userInfo.sessionId}|${this.$route.meta.pkey}`)\n    //   return json ? JSON.parse(json) : ''\n    // },\n    // persistParameters() {\n    //   sessionStorage.setItem(`${this.$userInfo.sessionId}|${this.$route.meta.pkey}`, JSON.stringify(this.parameters))\n    // },\n    async send() {\n      // this.isActive = false\n      // this.$emit('update:active', false)\n      await this.$refs.emailer.send()\n      this.clearSelectedTemplate()\n    },\n    discardEmail() {\n      //this.isImageAttachActive = false\n      this.selectedImageIds.splice(0, this.selectedImageIds.length)\n      this.selectedImages.splice(0, this.selectedImages.length)\n      // this.replyToMessageId = ''\n      this.replyToSenderEmails = []\n      this.replyToEmailCcs = []\n      this.replyToEmailBccs = []\n      this.resetEmailer()\n    },\n    openAttachModel() {\n      this.isAttachmentModalActive = true\n    },\n    closeAttachModal() {\n      this.isAttachmentModalActive = false\n      this.innerSelectedAttachmentEmailId = ''\n      this.updateAttachmentList()\n      this.$emit('close')\n    },\n    toggleEditMaximize() {\n      this.editMaximize = !this.editMaximize\n      this.$emit('toggleEditMaximize')\n    },\n    async getEmailMessageDropdown() {\n      this.isTemplateLoading = true\n      const postData = { ...this.templateFilter, ...{ message: '' } }\n      const templates = await EmailService.getEmailTemplateDropdown(postData)\n      this.templates = templates\n      if (this.templateFilter.message !== '') {\n        this.selectedTemplate = this.templates.find((c) => c.message === this.templateFilter.message)\n        if (!this.selectedTemplate) {\n          this.clearSelectedTemplate()\n          const templates = await EmailService.getEmailTemplateDropdown(this.templateFilter)\n          this.templates = templates\n        }\n      }\n      this.isTemplateLoading = false\n    },\n    async closeTemplateModal() {\n      this.isEmailTemplateModalActive = false\n      //console.log('close template modal')\n      setTimeout(async () => await this.getEmailMessageDropdown(), 1000)\n    },\n    selectTemplate(selected) {\n      //this.innerMsgDetails.customer = this.extractName(this.getSender)\n      this.resetEmailer()\n      this.clearSelectedTemplate()\n      this.buildReplyEmail()\n      this.templateFilter.message = selected.message\n      this.selectedTemplate = selected\n      //console.log(this.emailer.message)\n      const templateMessage = this.replaceTags(selected.message)\n      this.innerReplyToEmailMessage = templateMessage + '\\n\\n' + this.innerReplyToEmailMessage\n    },\n    clearSelectedTemplate() {\n      this.templateFilter.message = ''\n      //this.innerReplyToEmail.message = ''\n      //this.innerMsgDetails.customer = this.msgDetails.customer\n      this.selectedTemplate = ''\n    },\n    replaceTags(message) {\n      message = message.replace(/\\[QUOTEID\\]/g, this.innerMsgDetails.quoteId)\n      message = message.replace(/\\[NAME\\]/g, this.innerMsgDetails.customer)\n      message = message.replace(/\\[REGO\\]/g, this.innerMsgDetails.rego)\n      message = message.replace(/\\[EST START DATE\\]/g, this.innerMsgDetails.jobStart)\n      message = message.replace(/\\[EST END DATE\\]/g, this.innerMsgDetails.jobEnd)\n      message = message.replace(/\\[EXCESS\\]/g, this.innerMsgDetails.excess)\n      message = message.replace(/\\[SHOPNAME\\]/g, this.innerMsgDetails.shopName)\n      return message\n    },\n    extractName(sender) {\n      if (sender) {\n        let matchName = sender.match(/^[^<]*/)\n        if (matchName) return matchName[0].trim()\n        let matchEmail = sender.match(/<([^>]+)>/)\n        if (matchEmail) return matchEmail[1]\n      }\n      return ''\n    },\n    resetReplyToEmail() {\n      this.innerReplyToEmail = {}\n      this.innerReplyToEmailSubject = ''\n      this.innerReplyToEmailMessage = ''\n      // this.replyToMessageId = ''\n      this.replyToSenderEmails = []\n      this.replyToEmailCcs = []\n      this.replyToEmailBccs = []\n    }\n  }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.buttons-group {\n  justify-content: flex-end;\n}\n\n.buttons-group > .button:not(:last-child) {\n  margin-right: 0.5em;\n}\n</style>\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!./QuoteEmail.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!./QuoteEmail.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./QuoteEmail.vue?vue&type=template&id=ce9c9156&scoped=true\"\nimport script from \"./QuoteEmail.vue?vue&type=script&lang=js\"\nexport * from \"./QuoteEmail.vue?vue&type=script&lang=js\"\nimport style0 from \"./QuoteEmail.vue?vue&type=style&index=0&id=ce9c9156&prod&lang=scss&scoped=true\"\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  \"ce9c9156\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('base-modal-ex',{attrs:{\"active\":_vm.isActive,\"animation-in\":_vm.animationIn,\"animation-out\":_vm.animationOut,\"animation-duration\":_vm.animationDuration,\"can-cancel\":false,\"min-width\":60,\"has-modal-card\":\"\"},on:{\"update:active\":function($event){_vm.isActive=$event}}},[_c('header',{staticClass:\"modal-card-head\"},[_c('p',{staticClass:\"modal-card-title\",class:{ 'is-flex-items-center' : _vm.showIcon}},[(_vm.showIcon)?_c('span',{staticClass:\"icon is-medium\",class:`has-text-${_vm.iconType}`,staticStyle:{\"margin-right\":\"0.5rem\"}},[_c('i',{staticClass:\"mdi mdi-36px\",class:`${_vm.iconName}`})]):_vm._e(),_c('span',[_vm._v(\"Email\")])])]),_c('section',{staticClass:\"modal-card-body p-0 m-0\",staticStyle:{\"position\":\"relative\"}},[_c('div',{staticClass:\"columns p-0 m-0\"},[_c('div',{staticClass:\"column p-0 m-0\"},[_c('div',{staticClass:\"p-0 m-0\"},[_c('div',{staticClass:\"columns is-multiline p-0 m-0\"},[_c('div',{staticClass:\"column is-9 p-3 m-0\"},[_vm._v(\" From: \"),_c('b',[_vm._v(_vm._s(_vm.email.sender))])]),_c('div',{staticClass:\"column is-3 p-3 m-0 has-text-right\"},[_vm._v(\" \"+_vm._s(_vm.$filters.formatDateTimeLocale(_vm.email.createdDate, _vm.$userInfo.locale))+\" \")])])])])]),_c('div',{staticClass:\"columns p-0 m-0\"},[_c('div',{staticClass:\"column p-0 m-0\"},[_c('div',{staticClass:\"p-0 m-0\"},[_c('div',{staticClass:\"columns is-multiline p-0 m-0\"},[_c('div',{staticClass:\"column is-full p-3 m-0\"},[_vm._v(\" To : \"),_c('b',[_vm._v(_vm._s(_vm.email.recipients))])])])])])]),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.email.cc && _vm.email.cc.length),expression:\"email.cc && email.cc.length\"}],staticClass:\"columns p-0 m-0\"},[_c('div',{staticClass:\"column p-0 m-0\"},[_c('div',{staticClass:\"p-0 m-0\"},[_c('div',{staticClass:\"columns is-multiline p-0 m-0\"},[_c('div',{staticClass:\"column is-full p-3 m-0\"},[_vm._v(\" Cc : \"),_c('b',[_vm._v(_vm._s(_vm.email.cc))])])])])])]),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.email.bcc && _vm.email.bcc.length),expression:\"email.bcc && email.bcc.length\"}],staticClass:\"columns p-0 m-0\"},[_c('div',{staticClass:\"column p-0 m-0\"},[_c('div',{staticClass:\"p-0 m-0\"},[_c('div',{staticClass:\"columns is-multiline p-0 m-0\"},[_c('div',{staticClass:\"column is-full p-3 m-0\"},[_vm._v(\" Bcc : \"),_c('b',[_vm._v(_vm._s(_vm.email.bcc))])])])])])]),_c('div',{staticClass:\"columns p-0 m-0\"},[_c('div',{staticClass:\"column p-0 m-0\"},[_c('div',{staticClass:\"box p-0 m-0\"},[_c('div',{staticClass:\"columns is-multiline p-0 m-0\"},[_c('div',{staticClass:\"column is-full p-3 m-0\"},[_c('b',[_vm._v(_vm._s(_vm.email.subject))])])])])])]),_c('div',{staticClass:\"columns p-0 m-0\"},[_c('div',{staticClass:\"column p-0 m-0\"},[_c('div',{staticClass:\"box p-0 m-0\"},[_c('div',{staticClass:\"columns is-multiline p-0 m-0\"},[_c('div',{staticClass:\"column is-full p-3 m-0\"},[_c('div',{domProps:{\"innerHTML\":_vm._s(_vm.getHtmlMessage())}})])])])])])]),_c('footer',{staticClass:\"modal-card-foot\"},[_c('div',{style:(`width: 100%; display: flex; justify-content: space-between;`)},[_c('div',{staticStyle:{\"align-self\":\"flex-start\"}}),_c('div',{staticStyle:{\"align-self\":\"flex-end\"}},[_c('button',{staticClass:\"button tooltip\",attrs:{\"data-tooltip\":\"Close\"},on:{\"click\":function($event){return _vm.close()}}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-close mdi-18px\"})]),_c('span',[_vm._v(\"Close\")])])])])])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n  <base-modal-ex :active.sync=\"isActive\"\n    :animation-in=\"animationIn\"\n    :animation-out=\"animationOut\"\n    :animation-duration=\"animationDuration\"\n    :can-cancel=\"false\"\n    :min-width=\"60\"\n    has-modal-card>\n    <header class=\"modal-card-head\">\n      <p class=\"modal-card-title\"\n        :class=\"{ 'is-flex-items-center' : showIcon}\">\n        <span v-if=\"showIcon\"\n          class=\"icon is-medium\"\n          :class=\"`has-text-${iconType}`\"\n          style=\"margin-right: 0.5rem;\">\n          <i class=\"mdi mdi-36px\"\n            :class=\"`${iconName}`\" />\n        </span>\n        <span>Email</span>\n      </p>\n    </header>\n    <section class=\"modal-card-body p-0 m-0\"\n      style=\"position:relative;\">\n      <div class=\"columns p-0 m-0\">\n        <div class=\"column p-0 m-0\">\n          <div class=\"p-0 m-0\">\n            <div class=\"columns is-multiline p-0 m-0\">\n              <div class=\"column is-9 p-3 m-0\">\n                From: <b>{{ email.sender }}</b>\n              </div>\n              <div class=\"column is-3 p-3 m-0  has-text-right\">\n                {{ $filters.formatDateTimeLocale(email.createdDate, $userInfo.locale) }}\n              </div>\n            </div>\n          </div>\n        </div>\n      </div>\n      <div class=\"columns p-0 m-0\">\n        <div class=\"column p-0 m-0\">\n          <div class=\"p-0 m-0\">\n            <div class=\"columns is-multiline p-0 m-0\">\n              <div class=\"column is-full p-3 m-0\">\n                To : <b>{{ email.recipients }}</b>\n              </div>\n            </div>\n          </div>\n        </div>\n      </div>\n      <div v-show=\"email.cc && email.cc.length\"\n        class=\"columns p-0 m-0\">\n        <div class=\"column p-0 m-0\">\n          <div class=\"p-0 m-0\">\n            <div class=\"columns is-multiline p-0 m-0\">\n              <div class=\"column is-full p-3 m-0\">\n                Cc : <b>{{ email.cc }}</b>\n              </div>\n            </div>\n          </div>\n        </div>\n      </div>\n      <div v-show=\"email.bcc && email.bcc.length\"\n        class=\"columns p-0 m-0\">\n        <div class=\"column p-0 m-0\">\n          <div class=\"p-0 m-0\">\n            <div class=\"columns is-multiline p-0 m-0\">\n              <div class=\"column is-full p-3 m-0\">\n                Bcc : <b>{{ email.bcc }}</b>\n              </div>\n            </div>\n          </div>\n        </div>\n      </div>\n      <div class=\"columns p-0 m-0\">\n        <div class=\"column p-0 m-0\">\n          <div class=\"box p-0 m-0\">\n            <div class=\"columns is-multiline p-0 m-0\">\n              <div class=\"column is-full p-3 m-0\">\n                <b>{{ email.subject }}</b>\n              </div>\n            </div>\n          </div>\n        </div>\n      </div>\n      <div class=\"columns p-0 m-0\">\n        <div class=\"column p-0 m-0\">\n          <div class=\"box p-0 m-0\">\n            <div class=\"columns is-multiline p-0 m-0\">\n              <div class=\"column is-full p-3 m-0\">\n                <div v-html=\"getHtmlMessage()\" />\n              </div>\n            </div>\n          </div>\n        </div>\n      </div>\n    </section>\n\n    <footer class=\"modal-card-foot\">\n      <div :style=\"`width: 100%; display: flex; justify-content: space-between;`\">\n        <div style=\"align-self: flex-start;\" />\n        <div style=\"align-self: flex-end;\">\n          <button class=\"button tooltip\"\n            @click=\"close()\"\n            data-tooltip=\"Close\">\n            <span class=\"icon\">\n              <i class=\"mdi mdi-close mdi-18px\" />\n            </span>\n            <span>Close</span>\n          </button>\n        </div>\n      </div>\n    </footer>\n  </base-modal-ex>\n</template>\n\n<script>\nimport { BaseModalEx } from '@/components/BulmaModal'\n\nexport default {\n  name: 'QuoteEmailViewerModal',\n  components: {\n    BaseModalEx\n    // PsPdfViewer\n  },\n  props: {\n    active: {\n      type: Boolean,\n      default: false\n    },\n    animationIn: {\n      type: String,\n      default: 'zoomIn'\n    },\n    animationOut: {\n      type: String,\n      default: 'zoomOut'\n    },\n    animationDuration: {\n      type: [String, Number],\n      default: 0.3\n    },\n    buttonLocation: {\n      type: String,\n      default: 'end' // valid values 'start' & 'end'\n    },\n    showIcon: {\n      type: Boolean,\n      default: true\n    },\n    iconType: {\n      type: String,\n      default: 'warning'\n    },\n    iconName: {\n      type: String,\n      default: 'mdi-email-open'\n    },\n    email: {\n      type: Object,\n      default: function () {\n        return {}\n      }\n    }\n  },\n  data() {\n    return {\n      isActive: this.active || false,\n      selectedDervied: null,\n      internalAttachment: this.attachment,\n      redaction: false,\n      maxHeight: '600px'\n    }\n  },\n  computed: {},\n  watch: {\n    email(value) {\n      this.email = value\n      console.log(this.email)\n      console.log(this.isActive)\n    },\n    active(value) {\n      this.isActive = value\n      console.log(value)\n    }\n  },\n  created() {},\n  mounted() {},\n  methods: {\n    getHtmlMessage() {\n      const html = (this.email.message ?? '').replace(/\\n/g, '<br/>')\n\n      return html\n    },\n    ucaseFirst(str) {\n      return str.charAt(0).toUpperCase() + str.slice(1)\n    },\n    close() {\n      this.$emit('close')\n    }\n  }\n}\n</script>\n\n<style>\n</style>","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!./QuoteEmailViewerModal.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!./QuoteEmailViewerModal.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./QuoteEmailViewerModal.vue?vue&type=template&id=06f7b248\"\nimport script from \"./QuoteEmailViewerModal.vue?vue&type=script&lang=js\"\nexport * from \"./QuoteEmailViewerModal.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>\n  <div v-if=\"value && customer && vehicle\"\n    class=\"tile is-ancestor is-parent\">\n    <div class=\"tile is-vertical is-half\"\n      v-show=\"!editMaximize\">\n      <div class=\"tile is-parent\">\n        <article class=\"tile is-child box detail-page-tile\">\n          <p class=\"title\">Communications</p>\n          <div class=\"tabs is-boxed\">\n            <ul>\n              <li :class=\"activeTab == 'SMS' ? 'is-active' : ''\"\n                @click=\"setActiveTab('SMS')\">\n                <a>\n                  <span class=\"icon is-small\">\n                    <i class=\"mdi mdi-message-text mdi-20px\"\n                      aria-hidden=\"true\" />\n                  </span>\n                  <span class=\"has-badge-child-offset3\">SMS</span>\n                  <span v-show=\"smsUnreadCount\"\n                    class=\"has-badge-rounded has-badge-medium has-badge-info\"\n                    :data-badge=\"smsUnreadCount\" />\n                </a>\n              </li>\n              <li v-if=\"isShowWhatsApp\"\n                :class=\"activeTab == 'WhatsApp' ? 'is-active' : ''\"\n                @click=\"setActiveTab('WhatsApp')\">\n                <a>\n                  <span class=\"icon is-small\">\n                    <i class=\"mdi mdi-whatsapp mdi-20px icon-green\"\n                      aria-hidden=\"true\" />\n                  </span>\n                  <span class=\"has-badge-child-offset3\">WhatsApp</span>\n                  <span v-show=\"whatsappUnreadCount\"\n                    class=\"has-badge-rounded has-badge-medium has-badge-info\"\n                    :data-badge=\"whatsappUnreadCount\" />\n                </a>\n              </li>\n              <li :class=\"activeTab == 'Email' ? 'is-active' : ''\"\n                @click=\"setActiveTab('Email')\">\n                <a>\n                  <span class=\"icon is-small\">\n                    <i class=\"mdi mdi-email mdi-20px\"\n                      aria-hidden=\"true\" />\n                  </span>\n                  <span class=\"has-badge-child-offset3\">Email</span>\n                  <span v-show=\"emailUnreadCount\"\n                    class=\"has-badge-rounded has-badge-medium has-badge-info\"\n                    :data-badge=\"emailUnreadCount\" />\n                </a>\n              </li>\n            </ul>\n          </div>\n          <div ref=\"messageContainer\"\n            class=\"container\">\n            <div v-for=\"(message) in messages\"\n              :key=\"message.id\"\n              class=\"is-flex px-1 py-2\"\n              :class=\"{ 'is-justify-content-flex-end': message.isIncoming }\">\n\n              <transition mode=\"out-in\"\n                :enter-active-class=\"`animate__animated animate__slideInRight`\"\n                :leave-active-class=\"`animate__animated animate__slideInRight`\">\n                <article class=\"message is-flex\"\n                  style=\"flex-direction: column\"\n                  :class=\"[{'message-reply': message.isIncoming}, {'unread-animation': !message.isRead}]\">\n                  <div class=\"is-flex\"\n                    style=\"justify-content: space-between\">\n                    <span v-if=\"message.isIncoming\"\n                      class=\"is-size-7 help has-text-weight-medium\">{{ truncate(message.sender, 50) }}</span>\n                    <span v-if=\"message.isOutgoing && message.recipients\"\n                      class=\"is-size-7 help has-text-weight-medium\">{{ truncate(message.recipients, 50) }}</span>\n                    <div>\n                      <span class=\"is-size-7 help is-italic has-text-grey-light createdDate is-inline-block mr-3\">\n                        {{ $filters.formatDateTimeLocale(message.createdDate, $userInfo.locale) }}\n                      </span>\n                      <span v-if=\"isEmail && message.isOutgoing\"\n                        class=\"icon is-small tooltip is-tooltip-left is-clickable mr-2\"\n                        :data-tooltip=\"getEmailStatus(message)\"\n                        @click=\"openMessageModal(message)\">\n                        <i class=\"mdi mdi-18px\"\n                          :class=\"getEmailStatusIndicator(message)\" />\n                      </span>\n                      <span v-if=\"isEmail\"\n                        class=\"icon is-small tooltip is-tooltip-left is-clickable mr-2\"\n                        data-tooltip=\"View Email\"\n                        @click=\"viewEmail(message)\">\n                        <i class=\"mdi mdi-18px mdi-email-open\" />\n                      </span>\n                      <span v-if=\"isEmail\"\n                        v-show=\"message.attachments\"\n                        class=\"icon is-small tooltip is-tooltip-left is-clickable mr-2\"\n                        data-tooltip=\"Attachment\"\n                        @click=\"openAttachmentModel(message.id, message.isIncoming)\">\n                        <i class=\"mdi mdi-18px mdi-attachment\" />\n                      </span>\n                      <span v-if=\"isEmail\"\n                        class=\"icon is-small tooltip is-tooltip-left is-clickable\"\n                        data-tooltip=\"Reply\"\n                        @click=\"replyTo(message)\">\n                        <i class=\"mdi mdi-18px\"\n                          :class=\"[{'mdi-reply-outline': !isSelectedReplyToMessage(message.messageId)}, {'mdi-reply': isSelectedReplyToMessage(message.messageId)}]\" />\n                      </span>\n                    </div>\n                  </div>\n\n                  <!-- <div :class=\"[{'speech-left': message.isOutgoing}, {'speech-right': message.isIncoming}]\"> -->\n                  <div class=\"message-body py-1 px-2\"\n                    :class=\"messageBodyStyle(message)\">\n                    <div :v-show=\"activeTab == 'Email'\"\n                      class=\"has-text-weight-semibold\">\n                      {{ message.subject }}\n                    </div>\n                    <span class=\"message-sent\">{{ truncate(message.message, 100) }}</span>\n                    <div class=\"is-flex help is-italic\"\n                      :class=\"{ 'is-justify-content-flex-end': message.isIncoming }\" />\n                  </div>\n                  <!-- </div> -->\n\n                </article>\n              </transition>\n            </div>\n            <quote-email-viewer-modal :active.sync=\"isViewEmail\"\n              :show-icon=\"true\"\n              :email=\"viewMessage\"\n              @cancel=\"closeViewEmail\"\n              @close=\"closeViewEmail\">\n              <p slot=\"text-title\">Email</p>\n            </quote-email-viewer-modal>\n          </div>\n        </article>\n      </div>\n    </div>\n    <div class=\"tile is-vertical is-half\"\n      v-if=\"isEmail\">\n      <div class=\"tile is-parent\">\n        <quote-email v-if=\"isEmail && isEmailerActive\"\n          :quote=\"entity\"\n          :enable-send=\"true\"\n          :enable-attach=\"true\"\n          :reply-to-message-id=\"replyToMessageId\"\n          :reply-to-email=\"replyToEmail\"\n          :selected-attachment-email-id=\"selectedAttachmentEmailId\"\n          :is-incoming=\"isIncoming\"\n          :msg-details=\"msgDetails\"\n\n          @sent=\"emailSent\"\n          @resetEmail=\"resetEmail\"\n          @close=\"closeAttachmentModel\"\n          @toggleEditMaximize=\"toggleEditMaximize\" />\n\n      </div>\n    </div>\n    <div class=\"tile is-vertical is-half\"\n      v-else>\n      <div class=\"tile is-parent\">\n        <article class=\"tile is-child box detail-page-tile\">\n          <div class=\"field\">\n            <label for=\"\"\n              class=\"label\">Send To</label>\n            <div class=\"control\">\n              <the-mask v-model=\"msgDetails.mobile\"\n                :mask=\"phoneNoMask\"\n                :tokens=\"phoneNoTokens\"\n                class=\"input\"\n                placeholder=\"Mobile No.\"\n                maxlength=\"20\"\n                v-focus-inserted />\n            </div>\n          </div>\n          <div class=\"field\">\n            <label class=\"label\">Message</label>\n            <div class=\"control is-expanded\">\n              <multiselect v-model=\"selectedTemplate\"\n                track-by=\"message\"\n                label=\"message\"\n                placeholder=\"Select Template\"\n                :options=\"templates\"\n                :loading=\"isTemplateLoading\"\n                :searchable=\"true\"\n                :allow-empty=\"true\"\n                :options-limit=\"templateFilter.pageSize\"\n                @select=\"selectTemplate\" />\n            </div>\n          </div>\n          <div v-if=\"approvedTemplate\"\n            class=\"field\">\n            <div class=\"control\">\n              <span class=\"is-size-7 help has-text-grey-light\">Approved Template</span>\n              <div class=\"box\">\n                {{ approvedTemplate }}\n              </div>\n            </div>\n          </div>\n          <div class=\"field\">\n            <div class=\"control\">\n              <textarea v-model=\"msgDetails.message\"\n                class=\"textarea\"\n                rows=\"8\"\n                :maxlength=\"maxLength\"\n                placeholder=\"Text message\" />\n            </div>\n            <span class=\"help\">{{ msgDetails.message.length }}/{{ maxLength }}</span>\n          </div>\n          <div class=\"is-flex is-justify-content-space-between\">\n            <button class=\"button is-primary tooltip\"\n              data-tooltip=\"Edit message template\"\n              @click=\"isSmsTemplateModalActive = true\">\n              <span class=\"icon\">\n                <i class=\"mdi mdi-pencil mdi-20px\" />\n              </span>\n              <span>Edit Template</span>\n            </button>\n            <button class=\"button is-success tooltip\"\n              @click=\"send()\"\n              @sent=\"emailSent\"\n              :data-tooltip=\"getToolTip()\"\n              :disabled=\"!msgDetails.message || !msgDetails.mobile\">\n              <span class=\"icon\">\n                <i class=\"mdi mdi-message-text mdi-20px\" />\n              </span>\n              <span>Send</span>\n            </button>\n          </div>\n        </article>\n      </div>\n    </div>\n\n    <sms-template-modal v-if=\"isSmsTemplateModalActive\"\n      :active.sync=\"isSmsTemplateModalActive\"\n      @close=\"closeSmsTemplateModal\" />\n\n    <base-modal-ex :active.sync=\"isMessageModalActive\"\n      :animation-in=\"animationIn\"\n      :animation-out=\"animationOut\"\n      :animation-duration=\"animationDuration\"\n      :can-cancel=\"false\"\n      :min-width=\"60\"\n      has-modal-card>\n      <header class=\"modal-card-head\">\n        <p class=\"modal-card-title\"\n          :class=\"{ 'is-flex-items-center' : true}\">\n          <span>Email Delivery Failed Message</span>\n        </p>\n      </header>\n      <section class=\"modal-card-body p-0 m-0\"\n        style=\"position:relative;\">\n        <div class=\"columns p-0 m-0\">\n          <div class=\"column p-0 m-0\">\n            <div class=\"box p-0 m-0\">\n              <div class=\"columns is-multiline p-0 m-0\">\n                <div class=\"column is-full p-3 m-0\">\n                  <div v-html=\"messageModalMessage\" />\n                </div>\n              </div>\n            </div>\n          </div>\n        </div>\n      </section>\n\n      <footer class=\"modal-card-foot\">\n        <div :style=\"`width: 100%; display: flex; justify-content: space-between;`\">\n          <div style=\"align-self: flex-start;\" />\n          <div style=\"align-self: flex-end;\">\n            <button class=\"button tooltip\"\n              @click=\"closeMessageModal()\"\n              data-tooltip=\"Close\">\n              <span class=\"icon\">\n                <i class=\"mdi mdi-close mdi-18px\" />\n              </span>\n              <span>Close</span>\n            </button>\n          </div>\n        </div>\n      </footer>\n    </base-modal-ex>\n  </div>\n</template>\n\n<script>\nimport { SmsSendMessageModel } from '@/classes/viewmodels'\nimport Multiselect from 'vue-multiselect'\nimport { FocusInserted } from '@/components/directives'\nimport { SmsService, WhatsAppService, EmailService } from '@/services'\nimport { PhoneTypes, CommunicationTypes, NotificationType } from '@/enums'\nimport SmsTemplateModal from '@/components/Sms/SmsTemplateModal'\nimport { roundAwayFromZero } from '@/components/utils/AccountingFunctions'\nimport { truncate } from '@/utils/StringFunctions'\n\n// import { VueEmail } from '@/components/VueEmail'\n// import mimeTypes from 'mime-types'\n// import { Emailer } from '@/classes'\n// import StoreUtil from '@/store/utils'\nimport _cloneDeep from 'lodash/cloneDeep'\nimport QuoteCommunicationsMixin from './mixins/QuoteCommunicationsMixin'\n// import { QuoteImage } from '../components/QuoteImage'\nimport QuoteEmail from './components/QuoteEmail.vue'\nimport QuoteEmailViewerModal from './components/QuoteEmailViewerModal.vue'\nimport { BaseModalEx } from '@/components/BulmaModal'\n\n// Temporary const for copyright message\n// const divider = '=============================================================='\n// const copyright =\n//   'All accompanying materials are the exclusive property of [COMPANY].  All [COMPANY] rights are reserved.  These Materials must not be reproduced, adapted, modified, published, or communicated to any person in any form, without express prior written consent of [COMPANY].  Any unauthorised use of these Materials will be vigorously pursued and may result in legal action, including a claim for damages or an account for loss of profits.'\n\nexport default {\n  name: 'QuoteCommunications',\n  // components: { Multiselect, SmsTemplateModal, VueEmail, QuoteEmail },\n  components: { Multiselect, SmsTemplateModal, QuoteEmail, QuoteEmailViewerModal, BaseModalEx },\n  directives: {\n    FocusInserted\n  },\n  mixins: [QuoteCommunicationsMixin],\n  props: {\n    value: {\n      type: Object,\n      default: null\n    },\n    customer: {\n      type: Object,\n      default: null\n    },\n    vehicle: {\n      type: Object,\n      default: null\n    },\n    animationIn: {\n      type: String,\n      default: 'zoomIn'\n    },\n    animationOut: {\n      type: String,\n      default: 'zoomOut'\n    },\n    animationDuration: {\n      type: [String, Number],\n      default: 0.3\n    }\n  },\n  data: () => {\n    return {\n      entity: null,\n      phoneNoMask: Array(31).join('P'),\n      phoneNoTokens: {\n        P: {\n          pattern: /[0-9 ()\\-+]/\n        }\n      },\n      msgDetails: {\n        quoteId: null,\n        customer: null,\n        rego: null,\n        jobStart: null,\n        jobEnd: null,\n        excess: null,\n        mobile: null,\n        message: '',\n        shopName: '',\n        imgLink:''\n      },\n      smsDetails: new SmsSendMessageModel(),\n      isTemplateLoading: false,\n      templates: [],\n      messages: [],\n      selectedTemplate: '',\n      templateFilter: {\n        message: '',\n        pageIndex: 1,\n        pageSize: 999\n      },\n      isSmsTemplateModalActive: false,\n      interval: null,\n      activeTab: CommunicationTypes.SMS,\n      maxLength: 0,\n      isShowWhatsApp: false,\n      approvedTemplate: '',\n      emailUnreadCount: 0,\n      smsUnreadCount: 0,\n      whatsappUnreadCount: 0,\n      replyToMessageId: '',\n      replyToSender: '',\n      replyToContent: '',\n      replyToEmail: {},\n      selectedAttachmentEmailId: '',\n      isIncoming: null,\n      editMaximize: false,\n      isViewEmail: false,\n      viewMessage: {},\n      isMessageModalActive: false,\n      messageModalMessage: '',\n      isEmailerActive : true\n      // isEmailModalActive: false,\n      // isImageAttachActive: false,\n      // emailer: {\n      //   reportName: null\n      // },\n      // reportBytes: null,\n      // reportContentType: '',\n      // selectedImages: [],\n      // quoteIds: []\n    }\n  },\n  computed: {\n    communicationTypes: function () {\n      return CommunicationTypes\n    },\n    isSMS: function () {\n      return this.activeTab == CommunicationTypes.SMS\n    },\n    isWhatsApp: function () {\n      return this.activeTab == CommunicationTypes.WhatsApp\n    },\n    isEmail: function () {\n      return this.activeTab == CommunicationTypes.Email\n    }\n\n    //reportExtension() {\n    //  return mimeTypes.extension(this.reportContentType)\n    //}\n  },\n  watch: {\n    isEmail(value) {\n      //this.isEmailModalActive = value\n      if (!value) {\n        this.replyToMessageId = ''\n      }\n    }\n  },\n  async created() {\n    this.getEntity()\n    this.setParams()\n    await this.getSettings()\n    this.getSmsMessageDropdown()\n    this.autoRefresh()\n    this.getMessages()\n    this.getMaxLength()\n    await this.getUnreadCount()\n    //this.clearSessionStorage()\n    this.assignMessageDetails(this.msgDetails)\n  },\n  mounted() {\n    if (this.customer) {\n      const mobile = this.customer.phones.find((p) => p.type === PhoneTypes.Mobile.toString())\n      const mobileNo = mobile ? mobile.no : ''\n      this.msgDetails.mobile = mobileNo\n    }\n    //this.resetEmailer()\n  },\n  updated() {\n    const unreadCount = this.messages.reduce((acc, cur) => (!cur.isRead ? ++acc : acc), 0)\n    if (this.$refs.messageContainer && unreadCount) {\n      this.$refs.messageContainer.scrollTop = this.$refs.messageContainer.scrollHeight\n    }\n  },\n  beforeDestroy() {\n    clearInterval(this.interval)\n  },\n  methods: {\n    async getEntity() {\n      if (!this.currentSnapshot) {\n        await this.getStoreItem(this.$route.params.quoteId)\n      }\n      this.entity = _cloneDeep(this.currentSnapshot)\n    },\n    async getMessages() {\n      if (this.isSMS) {\n        this.messages = await SmsService.getMessages(this.value.quoteId)\n      } else if (this.isWhatsApp) {\n        this.messages = await WhatsAppService.getMessages(this.value.quoteId)\n      } else if (this.isEmail) {\n        this.messages = await EmailService.getMessages(this.value.quoteId)\n        //console.log(this.messages)\n      }\n      this.setMessagesAsRead()\n    },\n    assignMessageDetails(message) {\n      const jobStart = new Date(this.value.jobStart).toLocaleDateString(this.$userInfo.locale)\n      const jobEnd = new Date(this.value.jobEnd).toLocaleDateString(this.$userInfo.locale)\n\n      message.quoteId = this.value.quoteId\n      message.customer = this.customer.firstname ? this.customer.firstname : this.customer.fullname\n      message.rego = this.vehicle.rego\n      message.jobStart = jobStart\n      message.jobEnd = jobEnd\n      message.excess = this.value.excessWithGst ? this.value.excess + roundAwayFromZero((this.value.excess * this.value.gstRate) / 100) : this.value.excess\n      message.shopName = this.$userInfo.companyName\n    },\n    async send() {\n      this.$showSpinner('Sending...')\n      this.assignMessageDetails(this.msgDetails)\n      var type = this.activeTab\n      try {\n        if (this.isSMS) {\n          await SmsService.sendSms(this.msgDetails)\n        } else if (this.isWhatsApp) {\n          await WhatsAppService.sendWhatsApp(this.msgDetails)\n        }\n        this.$notification.openNotificationWithType('success', `Send ${type}`, 'Message Sent')\n        //if (this.isSMS) this.smsDetails.message = ''\n        this.msgDetails.message = ''\n        this.selectedTemplate = ''\n      } catch (e) {\n        this.$notification.openMessageXhrError(`Send ${type}`, e)\n      } finally {\n        await this.getMessages()\n        this.$hideSpinner()\n      }\n    },\n    async getSmsMessageDropdown() {\n      this.isTemplateLoading = true\n      this.templates = await SmsService.getSmsMessageDropdownProto(this.templateFilter)\n      if (this.templateFilter.message !== '') {\n        this.selectedTemplate = this.templates.find((c) => c.message === this.templateFilter.message)\n      }\n      this.isTemplateLoading = false\n    },\n    selectTemplate(selected) {\n      this.templateFilter.message = selected.message\n      this.msgDetails.message = selected.message //this.smsDetails.message = selected.message\n    },\n    async closeSmsTemplateModal() {\n      this.isSmsTemplateModalActive = false\n      await this.getSmsMessageDropdown()\n    },\n    autoRefresh() {\n      this.interval = setInterval(async () => {\n        await this.getMessages()\n        await this.getUnreadCount()\n      }, 30000)\n    },\n    stopAutoRefresh() {\n      clearInterval(this.interval)\n    },\n    setMessagesAsRead() {\n      const unread = this.messages.filter((m) => !m.isRead)\n      if (unread && unread.length > 0) {\n        setTimeout(async () => {\n          if (this.isSMS) {\n            await SmsService.setMessagesAsRead(this.value.quoteId)\n          } else if (this.isWhatsApp) {\n            await WhatsAppService.setMessagesAsRead(this.value.quoteId)\n          } else if (this.isEmail) {\n            await EmailService.setMessagesAsRead(this.value.quoteId)\n          }\n          this.messages.forEach((m) => (m.isRead = true))\n        }, 10000)\n      }\n    },\n    async setActiveTab(tab) {\n      this.activeTab = tab\n      await this.getMessages()\n      this.getMaxLength()\n      this.resetMsgLength()\n    },\n    getToolTip() {\n      return `Send ${this.activeTab}`\n    },\n    getMaxLength() {\n      this.maxLength =\n        this.activeTab == CommunicationTypes.SMS\n          ? 2000\n          : this.activeTab == CommunicationTypes.WhatsApp\n          ? 2000\n          : this.activeTab == CommunicationTypes.Email\n          ? 2000\n          : 0\n    },\n    resetMsgLength() {\n      this.msgDetails.message = this.msgDetails.message.slice(0, this.maxLength)\n    },\n    setParams() {\n      var type = this.$route.params.type\n      if (type) {\n        if (type == NotificationType.QuoteSmsIncoming) this.activeTab = CommunicationTypes.SMS\n        else if (type == NotificationType.QuoteWhatsAppIncoming) this.activeTab = CommunicationTypes.WhatsApp\n        else if (type == NotificationType.QuoteEmailIncoming) this.activeTab = CommunicationTypes.Email\n      }\n    },\n    async getSettings() {\n      var setting = await WhatsAppService.getCompanyExternalSetting()\n      if (setting) {\n        this.isShowWhatsApp = setting.active == '1'\n        this.approvedTemplate = setting.approvedTemplate\n      }\n    },\n    async getUnreadCount() {\n      const emailUnreadCount = await EmailService.getUnreadCount(this.value.quoteId)\n      const smsUnreadCount = await SmsService.getUnreadCount(this.value.quoteId)\n      const waUnreadCount = await WhatsAppService.getUnreadCount(this.value.quoteId)\n      this.emailUnreadCount = emailUnreadCount\n      this.smsUnreadCount = smsUnreadCount\n      this.whatsappUnreadCount = waUnreadCount\n    },\n    truncate(str, max) {\n      return this.isEmail ? truncate(str, max) : str\n    },\n    replyTo(message) {\n      // .messageId, message.isIncoming ? message.sender : message.recipients, message.message\n      const isCancelReply = this.replyToMessageId === message.messageId\n      this.replyToMessageId = isCancelReply ? '' : message.messageId\n      // this.replyToSender = isCancelReply ? '' : message.isIncoming ? message.sender : message.recipients\n      this.replyToEmail = isCancelReply ? {} : message\n      // this.replyToContent = isCancelReply ? '' : message\n    },\n    sent() {\n\n    },\n    isSelectedReplyToMessage(messageId) {\n      if (!this.replyToMessageId) return false\n      return this.replyToMessageId === messageId\n    },\n    messageBodyStyle(message) {\n      if (this.isSelectedReplyToMessage(message.messageId)) return 'is-warning'\n      else if (message.isOutgoing) return 'is-info'\n      else if (message.isIncoming) return 'is-success'\n      else return ''\n    },\n    openAttachmentModel(messageId, isIncoming) {\n      this.selectedAttachmentEmailId = messageId\n      this.isIncoming = isIncoming\n    },\n    closeAttachmentModel() {\n      this.selectedAttachmentEmailId = ''\n      this.isIncoming = null\n    },\n    toggleEditMaximize() {\n      this.editMaximize = !this.editMaximize\n    },\n    updateAttachment() {\n      this.$emit('image-uploaded')\n    },\n    viewEmail(message) {\n      this.viewMessage = message\n      this.isViewEmail = !this.isViewEmail\n      //console.log(this.isViewEmail)\n    },\n    closeViewEmail() {\n      this.viewMessage = {}\n      this.isViewEmail = !this.isViewEmail\n      //console.log(this.isViewEmail)\n    },\n    getEmailStatusIndicator(message) {\n      if (message.isDelivered) return 'mdi-check-all'\n      else if (message.isFailed) return 'mdi-check-all has-text-danger'\n      else return 'mdi-check'\n    },\n    getEmailStatus(message) {\n      if (message.isDelivered) return 'Delivered at ' + this.$filters.formatDateTimeLocale(message.deliveredAt, this.$userInfo.locale)\n      else if (message.isFailed) return 'Failed at ' + this.$filters.formatDateTimeLocale(message.failedAt, this.$userInfo.locale)\n      else return 'Sent at ' + this.$filters.formatDateTimeLocale(message.sentAt, this.$userInfo.locale)\n    },\n    openMessageModal(message) {\n      if (!message.isFailed) return\n      this.messageModalMessage = message.failedMessage.replace(/\\\\n/g, '<br/>')\n      this.isMessageModalActive = true\n    },\n    closeMessageModal() {\n      this.messageModalMessage = ''\n      this.isMessageModalActive = false\n    },\n    resetEmail(){\n      this.replyToMessageId = ''\n      // this.replyToSender = ''\n      this.replyToContent = ''\n      this.replyToEmail = {}\n      this.refreshEmailer = true\n\n      if (this.isEmailerActive === true) {\n        this.isEmailerActive = false\n        this.$nextTick(() => {\n          this.isEmailerActive = true\n        })\n      }\n    },\n    async emailSent() {\n\n      this.resetEmail()\n      await this.getMessages()\n      await this.getUnreadCount()\n    }\n  },\n  beforeRouteEnter(to, from, next) {\n    next()\n  },\n  beforeRouteLeave(to, from, next) {\n    next()\n  },\n  truncate(message, noOfChar){\n    return truncate(sender, noOfChar)\n  }\n}\n</script>\n\n<style lang=\"scss\" scoped>\narticle.message {\n  width: 80%;\n  // &.message-reply {\n  //   justify-content: end;\n  //   > .message-body {\n  //     text-align: right;\n  //     // border-width: 0 6px 0 0;\n  //   }\n  // }\n}\n.message-body {\n  width: 100%;\n}\n.is-info > .message-body,\n.is-success > .message-body {\n  border-width: 1px 1px 1px 8px;\n}\n.message-body.is-info {\n  background: #e5f2ff;\n  border-width: 1px 1px 1px 8px;\n  // color: #0d5aa5;\n  border-color: #5ba7f2;\n}\n.message-body.is-success {\n  background: #f4ffeb;\n  border-width: 1px 1px 1px 8px;\n  // color: #52b300;\n  border-color: #54b700;\n}\n.message-body.is-warning {\n  background: #fff9eb;\n  border-width: 1px 1px 1px 8px;\n  // color: #0d5aa5;\n  border-color: #ffb70f;\n}\n.message-sent {\n  white-space: pre-line;\n  overflow-wrap: break-word;\n  word-wrap: break-word;\n  word-break: break-word;\n  hyphens: auto;\n}\narticle.message {\n  background-color: #fff;\n}\n.container {\n  max-height: calc(100vh - 18em);\n  overflow-y: auto;\n  scroll-behavior: smooth;\n}\n@keyframes highlight-unread {\n  0% {\n    filter: brightness(0.4);\n    filter: contrast(0.4);\n    -webkit-filter: brightness(0.4);\n    -webkit-filter: contrast(0.4);\n  }\n  50% {\n    filter: brightness(0.6);\n    filter: contrast(0.6);\n    -webkit-filter: brightness(0.6);\n    -webkit-filter: contrast(0.6);\n  }\n  100% {\n    filter: brightness(1);\n    filter: contrast(1);\n    -webkit-filter: brightness(1);\n    -webkit-filter: contrast(1);\n  }\n}\n.unread-animation {\n  animation-name: highlight-unread;\n  animation-duration: 10s;\n  animation-iteration-count: 1;\n  font-weight: bold;\n}\ni.icon-green {\n  color: #2bb741;\n}\nspan.createdDate {\n  margin-top: auto;\n}\n\n.speech-right {\n  position: relative;\n  margin-right: 5px;\n}\n\n// .speech-bubble::before {\n//     content: \"\";\n//     position: absolute;\n//     display: block;\n//     top: 0;\n//     left: 0;\n//     height: 100%;\n//     width: 100%;\n//     //border: 1px solid #54b700;\n//     // border-radius: 2px;\n//     box-sizing: border-box;\n//     /* clip-path: polygon(0% 105%, 0% 0%, 105% 0%, 105% 105%, 43px 105%, 43px 80%, 21px 80%, 21px 105%); */\n// }\n\n.speech-right::after {\n  content: '';\n  position: absolute;\n  display: block;\n  width: 9px;\n  height: 9px;\n  background: #54b700;\n  top: 30%;\n  right: -9px;\n  box-sizing: border-box;\n  clip-path: polygon(0 100%, 0 0, 100% 100%);\n}\n\n.speech-left {\n  position: relative;\n  margin-left: 5px;\n}\n\n.speech-left::after {\n  content: '';\n  position: absolute;\n  display: block;\n  width: 9px;\n  height: 9px;\n  background: #5ba7f2;\n  top: 30%;\n  left: -8px;\n  box-sizing: border-box;\n  clip-path: polygon(100% 0, 0% 100%, 100% 100%);\n}\n</style>","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!./QuoteCommunications.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!./QuoteCommunications.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./QuoteCommunications.vue?vue&type=template&id=96ce0daa&scoped=true\"\nimport script from \"./QuoteCommunications.vue?vue&type=script&lang=js\"\nexport * from \"./QuoteCommunications.vue?vue&type=script&lang=js\"\nimport style0 from \"./QuoteCommunications.vue?vue&type=style&index=0&id=96ce0daa&prod&lang=scss&scoped=true\"\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  \"96ce0daa\",\n  null\n  \n)\n\nexport default component.exports","'use strict';\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this-clause');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar toLength = require('../internals/to-length');\nvar toString = require('../internals/to-string');\nvar notARegExp = require('../internals/not-a-regexp');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar correctIsRegExpLogic = require('../internals/correct-is-regexp-logic');\nvar IS_PURE = require('../internals/is-pure');\n\nvar slice = uncurryThis(''.slice);\nvar min = Math.min;\n\nvar CORRECT_IS_REGEXP_LOGIC = correctIsRegExpLogic('endsWith');\n// https://github.com/zloirock/core-js/pull/702\nvar MDN_POLYFILL_BUG = !IS_PURE && !CORRECT_IS_REGEXP_LOGIC && !!function () {\n  var descriptor = getOwnPropertyDescriptor(String.prototype, 'endsWith');\n  return descriptor && !descriptor.writable;\n}();\n\n// `String.prototype.endsWith` method\n// https://tc39.es/ecma262/#sec-string.prototype.endswith\n$({ target: 'String', proto: true, forced: !MDN_POLYFILL_BUG && !CORRECT_IS_REGEXP_LOGIC }, {\n  endsWith: function endsWith(searchString /* , endPosition = @length */) {\n    var that = toString(requireObjectCoercible(this));\n    notARegExp(searchString);\n    var endPosition = arguments.length > 1 ? arguments[1] : undefined;\n    var len = that.length;\n    var end = endPosition === undefined ? len : min(toLength(endPosition), len);\n    var search = toString(searchString);\n    return slice(that, end - search.length, end) === search;\n  }\n});\n","module.exports = __webpack_public_path__ + \"static/img/attachment-doc.4702bc2f.png\";","// import ImageSelect from './ImageSelect'\nconst ImageSelect = r => require.ensure([], () => r(require('./ImageSelect.vue')), 'imageselect-components-chunk')\n\nexport default ImageSelect\n","// import VueEmail from './VueEmail'\n// import VueEmailModal from './VueEmailModal'\nconst VueEmail = r => require.ensure([], () => r(require('./VueEmail.vue')), 'email-components-chunk')\nconst VueEmailModal = r => require.ensure([], () => r(require('./VueEmailModal.vue')), 'email-components-chunk')\n\nexport { VueEmail, VueEmailModal }\n","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./QuoteCommunications.vue?vue&type=style&index=0&id=96ce0daa&prod&lang=scss&scoped=true\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SmsTemplateModal.vue?vue&type=style&index=0&id=0cc55b29&prod&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./QuoteCommunicationEmailModal.vue?vue&type=style&index=0&id=c8fbc934&prod&lang=scss&scoped=true\""],"sourceRoot":""}