{"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,EAAkB,SAET,GACbxN,SAAU,gDACLyN,eAAWF,EAAY,CACxBG,WAAY,aACZC,cAAe,mBAEdF,eAAW,CAAC,oBACZA,eAAWD,EAAiB,CAC7BI,gBAAiB,qBAGrB1N,QAAS,gDACJ2N,eAAWN,EAAY,CAAEO,WAAY,aAAcC,cAAe,mBAClEF,eAAWN,EAAY,CACxBS,aAAc,eACdC,cAAe,gBACfC,sBAAuB,wBACvBC,gBAAiB,kBACjBC,iBAAkB,sBAEjBP,eAAWL,EAAiB,CAAEa,aAAc,mBCzB/CzP,EAAS,WAAkB,IAAIC,EAAIC,KAAKC,EAAGF,EAAIG,MAAMD,GAAG,OAAOA,EAAG,UAAU,CAACE,YAAY,sCAAsC,CAACF,EAAG,MAAM,CAACE,YAAY,UAAUC,YAAY,CAAC,kBAAkB,kBAAkB,CAACH,EAAG,OAAO,CAACE,YAAY,0DAA0DI,MAAM,CAAC,eAAe,aAAa,CAACN,EAAG,IAAI,CAACE,YAAY,eAAe2E,MAAM,CAAE,4BAA8B/E,EAAI2G,aAAc,0BAA4B3G,EAAI2G,cAAcjG,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAOX,EAAIyJ,6BAA6BvJ,EAAG,MAAM,CAACA,EAAG,MAAM,CAACE,YAAY,uBAAuB,CAACJ,EAAI+G,GAAG,GAAG7G,EAAG,MAAM,CAACE,YAAY,cAAc,CAACF,EAAG,MAAM,CAACE,YAAY,SAAS,CAACF,EAAG,MAAM,CAACE,YAAY,uBAAuB,CAACF,EAAG,cAAc,CAACM,MAAM,CAAC,WAAW,UAAU,MAAQ,UAAU,YAAc,kBAAkB,QAAUR,EAAIiK,UAAU,QAAUjK,EAAIkK,kBAAkB,YAAa,EAAK,eAAc,EAAK,gBAAgBlK,EAAImK,eAAeC,UAAU1J,GAAG,CAAC,OAASV,EAAIqK,gBAAgBT,MAAM,CAACrK,MAAOS,EAAIsK,iBAAkBR,SAAS,SAAUC,GAAM/J,EAAIsK,iBAAiBP,GAAKnD,WAAW,uBAAuB,WAAW1G,EAAG,MAAMA,EAAG,YAAY,CAACkH,IAAI,UAAU5G,MAAM,CAAC,0BAA0BR,EAAIyP,eAAe,WAAWzP,EAAI0P,QAAQC,QAAQ,sBAAsB3P,EAAI4P,kBAAkB1G,iBAAiB,YAAYlJ,EAAI6P,oBAAoB,YAAY7P,EAAI8P,gBAAgB,aAAa9P,EAAI+P,iBAAiB,QAAU/P,EAAIgQ,yBAAyB,QAAUhQ,EAAIiQ,yBAAyB,mBAAoBjQ,EAAI8P,gBAAgB7S,UAAY+C,EAAI+P,iBAAiB9S,QAASyD,GAAG,CAAC,YAAYV,EAAIkQ,cAAc,KAAOlQ,EAAImQ,MAAMvG,MAAM,CAACrK,MAAOS,EAAI0P,QAAS5F,SAAS,SAAUC,GAAM/J,EAAI0P,QAAQ3F,GAAKnD,WAAW,aAAa1G,EAAG,kCAAkC,CAACM,MAAM,CAAC,OAASR,EAAIoQ,wBAAwB,aAAY,EAAK,mBAAkB,EAAM,mBAAkB,EAAM,QAAUpQ,EAAI0P,QAAQ,+BAA+B1P,EAAIoJ,0BAA0B,cAAcpJ,EAAIiC,YAAYvB,GAAG,CAAC,gBAAgB,SAASC,GAAQX,EAAIoQ,wBAAwBzP,GAAQ,GAAK,SAASA,GAAQ,OAAOX,EAAIqQ,oBAAoB,OAAS,SAAS1P,GAAQ,OAAOX,EAAIqQ,oBAAoB,MAAQ,SAAS1P,GAAQ,OAAOX,EAAIqQ,qBAAqBzG,MAAM,CAACrK,MAAOS,EAAIyP,eAAgB3F,SAAS,SAAUC,GAAM/J,EAAIyP,eAAe1F,GAAKnD,WAAW,mBAAmB,CAAC1G,EAAG,IAAI,CAACM,MAAM,CAAC,KAAO,cAAcwI,KAAK,cAAc,CAAChJ,EAAImF,GAAG,kBAAkBjF,EAAG,MAAM,CAACE,YAAY,8DAA8DiF,MAAK,gBAAmB,CAACnF,EAAG,SAAS,CAACE,YAAY,4BAA4BI,MAAM,CAAC,eAAe,yBAAyBE,GAAG,CAAC,MAAQ,SAASC,GAAQX,EAAIsQ,4BAA6B,KAAQ,CAACtQ,EAAI+G,GAAG,GAAG7G,EAAG,OAAO,CAACF,EAAImF,GAAG,qBAAqBjF,EAAG,MAAM,CAACE,YAAY,WAAW,CAACF,EAAG,SAAS,CAACE,YAAY,gDAAgDI,MAAM,CAAC,eAAe,cAAc,UAAYR,EAAIuQ,YAAY7P,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAOX,EAAIuJ,gBAAgB,CAACvJ,EAAI+G,GAAG,GAAG7G,EAAG,OAAO,CAACF,EAAImF,GAAG,aAAajF,EAAG,SAAS,CAACuG,WAAW,CAAC,CAAC3F,KAAK,OAAO4F,QAAQ,SAASnH,MAAOS,EAAIwQ,aAAc5J,WAAW,iBAAiBxG,YAAY,4BAA4BI,MAAM,CAAC,eAAe,CAAER,EAAIyQ,mBAAuC,OAAlB,iBAA0B,UAAYzQ,EAAIwQ,cAAc9P,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAOX,EAAI0Q,qBAAqB,CAAG1Q,EAAIyQ,mBAAkHvQ,EAAG,OAAO,CAACF,EAAImF,GAAG,UAAhHjF,EAAG,OAAO,CAACE,YAAY,iBAAiB,CAACF,EAAG,IAAI,CAACE,YAAY,mCAA+DF,EAAG,SAAS,CAACE,YAAY,gDAAgDI,MAAM,CAAC,eAAe,aAAa,UAAYR,EAAIuQ,YAAY7P,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAOX,EAAIiG,UAAU,CAACjG,EAAI+G,GAAG,GAAG7G,EAAG,OAAO,CAACF,EAAImF,GAAG,gBAAiBnF,EAAIsQ,2BAA4BpQ,EAAG,2BAA2B,CAACM,MAAM,CAAC,OAASR,EAAIsQ,4BAA4B5P,GAAG,CAAC,gBAAgB,SAASC,GAAQX,EAAIsQ,2BAA2B3P,GAAQ,MAAQX,EAAI2Q,sBAAsB3Q,EAAIO,MAAM,IAEn1HM,EAAkB,CAAC,WAAY,IAAIb,EAAIC,KAAKC,EAAGF,EAAIG,MAAMD,GAAG,OAAOA,EAAG,MAAM,CAACE,YAAY,yBAAyB,CAACF,EAAG,QAAQ,CAACE,YAAY,SAAS,CAACJ,EAAImF,GAAG,iBAC9J,WAAY,IAAInF,EAAIC,KAAKC,EAAGF,EAAIG,MAAMD,GAAG,OAAOA,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,+BACpG,WAAY,IAAIJ,EAAIC,KAAKC,EAAGF,EAAIG,MAAMD,GAAG,OAAOA,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,gCACpG,WAAY,IAAIJ,EAAIC,KAAKC,EAAGF,EAAIG,MAAMD,GAAG,OAAOA,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,8B,kICLlGL,G,UAAS,WAAkB,IAAIC,EAAIC,KAAKC,EAAGF,EAAIG,MAAMD,GAAG,OAAQF,EAAI2E,SAAUzE,EAAG,gBAAgB,CAACM,MAAM,CAAC,OAASR,EAAI2E,SAAS,eAAe3E,EAAI4E,YAAY,gBAAgB5E,EAAI6E,aAAa,qBAAqB7E,EAAI8E,kBAAkB,cAAa,EAAM,YAAY,GAAG,iBAAiB,IAAIpE,GAAG,CAAC,gBAAgB,SAASC,GAAQX,EAAI2E,SAAShE,KAAU,CAACT,EAAG,SAAS,CAACE,YAAY,mBAAmB,CAACF,EAAG,IAAI,CAACE,YAAY,mBAAmB2E,MAAM,CAAE,uBAAyB/E,EAAIgF,WAAW,CAAEhF,EAAIgF,SAAU9E,EAAG,OAAO,CAACE,YAAY,iBAAiB2E,MAAK,mBAAa/E,EAAIiF,UAAW5E,YAAY,CAAC,eAAe,WAAW,CAACH,EAAG,IAAI,CAACE,YAAY,eAAe2E,MAAK,UAAI/E,EAAIkF,cAAelF,EAAIO,KAAKP,EAAI4Q,GAAG,eAAe,KAAK1Q,EAAG,UAAU,CAACE,YAAY,mBAAmB,CAACF,EAAG,MAAM,CAAEF,EAAI6Q,cAAgB7Q,EAAI8Q,oBAAqB5Q,EAAG,eAAe,CAACM,MAAM,CAAC,WAAWR,EAAI6Q,aAAalB,QAAQ,YAAY3P,EAAI+Q,kBAAkBC,eAAeC,KAAI,SAAAC,GAAC,OAAIA,EAAE3R,SAAO,oCAAsCmB,GAAG,CAAC,MAAQV,EAAImR,kBAAkBvH,MAAM,CAACrK,MAAOS,EAAIoR,4BAA6BtH,SAAS,SAAUC,GAAM/J,EAAIoR,4BAA4BrH,GAAKnD,WAAW,iCAAiC5G,EAAIO,KAAMP,EAAIqR,mBAAoBnR,EAAG,0BAA0B,CAACM,MAAM,CAAC,WAAWR,EAAI6Q,aAAalB,QAAQ,WAAW3P,EAAIsR,+BAA+B,cAActR,EAAIiC,YAAYvB,GAAG,CAAC,MAAQV,EAAIuR,yBAAyBvR,EAAIO,MAAM,KAAKL,EAAG,SAAS,CAACE,YAAY,kBAAkBiF,MAAK,gCAA2BrF,EAAI0F,iBAAmB,CAACxF,EAAG,SAAS,CAACuG,WAAW,CAAC,CAAC3F,KAAK,OAAO4F,QAAQ,SAASnH,MAAOS,EAAI8Q,oBAAqBlK,WAAW,wBAAwBxG,YAAY,4BAA4BI,MAAM,CAAC,eAAe,OAAO,UAAYR,EAAIwR,WAAW9Q,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAOX,EAAIyR,QAAQ,CAACvR,EAAG,OAAO,CAACF,EAAImF,GAAG,UAAUjF,EAAG,SAAS,CAACE,YAAY,iBAAiBI,MAAM,CAAC,eAAeR,EAAI0R,gBAAgB,SAAW1R,EAAI2R,gBAAgBjR,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAOX,EAAIsF,YAAY,CAACtF,EAAImF,GAAGnF,EAAIwH,GAAGxH,EAAI0R,wBAAwB1R,EAAIO,OAE79DM,EAAkB,G,wBCFlBd,EAAS,WAAkB,IAAIC,EAAIC,KAAKC,EAAGF,EAAIG,MAAMD,GAAG,OAAOA,EAAG,MAAM,CAACA,EAAG,MAAM,CAACE,YAAY,kCAAkC,CAACF,EAAG,MAAM,CAACuG,WAAW,CAAC,CAAC3F,KAAK,OAAO4F,QAAQ,SAASnH,MAAOS,EAAI2C,YAAaiE,WAAW,gBAAgBxG,YAAY,UAAU,CAACJ,EAAImF,GAAG,6BAA6BjF,EAAG,MAAM,CAACE,YAAY,UAAU,CAACF,EAAG,SAAS,CAACuG,WAAW,CAAC,CAAC3F,KAAK,QAAQ4F,QAAQ,UAAUnH,MAAOS,EAAIyC,mBAAoBmE,WAAW,uBAAuBlG,GAAG,CAAC,OAAS,SAASC,GAAQ,IAAIiR,EAAgBC,MAAMzS,UAAUvD,OAAO+D,KAAKe,EAAO+J,OAAOoH,SAAQ,SAASC,GAAG,OAAOA,EAAEvE,YAAWyD,KAAI,SAASc,GAAG,IAAIC,EAAM,WAAYD,EAAIA,EAAEE,OAASF,EAAExS,MAAM,OAAOyS,KAAOhS,EAAIyC,mBAAmB9B,EAAO+J,OAAOwH,SAAWN,EAAgBA,EAAc,MAAM5R,EAAIqH,GAAIrH,EAAIwC,sBAAsB,SAAS2P,GAAG,OAAOjS,EAAG,SAAS,CAACP,IAAIwS,EAAEC,0BAA0B3H,SAAS,CAAC,MAAQ0H,EAAEC,4BAA4B,CAACpS,EAAImF,GAAGnF,EAAIwH,GAAG2K,EAAErR,YAAW,KAAKZ,EAAG,IAAI,CAACuG,WAAW,CAAC,CAAC3F,KAAK,OAAO4F,QAAQ,SAASnH,MAAOS,EAAI2C,YAAaiE,WAAW,gBAAgBxG,YAAY,sBAAsBI,MAAM,CAAC,eAAe,iBAAiBE,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAOX,EAAIwE,uBAAsB,MAAS,CAACxE,EAAI+G,GAAG,OAAO7G,EAAG,MAAM,CAACE,YAAY,mBAAmB2E,MAAM,CAAC,CAAE,WAAY/E,EAAI2C,eAAgB,CAACzC,EAAG,IAAI,CAACE,YAAY,oCAAoC,CAACF,EAAG,IAAI,CAACuG,WAAW,CAAC,CAAC3F,KAAK,OAAO4F,QAAQ,SAASnH,MAAOS,EAAIiC,WAAY2E,WAAW,eAAexG,YAAY,iBAAiBI,MAAM,CAAC,eAAe,cAAcE,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAOX,EAAIoD,sBAAqB,MAAS,CAACpD,EAAI+G,GAAG,KAAK7G,EAAG,IAAI,CAACuG,WAAW,CAAC,CAAC3F,KAAK,OAAO4F,QAAQ,SAASnH,MAAOS,EAAI2C,YAAaiE,WAAW,gBAAgBxG,YAAY,iBAAiBI,MAAM,CAAC,eAAe,gBAAgBE,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAOX,EAAIoD,sBAAqB,MAAU,CAACpD,EAAI+G,GAAG,WAAW7G,EAAG,MAAM,CAACA,EAAG,MAAM,CAACE,YAAY,wBAAwBJ,EAAIqH,GAAIrH,EAAIqC,kBAAkB,SAASkB,GAAY,OAAOrD,EAAG,MAAM,CAACP,IAAI4D,EAAW8O,uBAAuBjS,YAAY,uBAAuB,CAACF,EAAG,MAAM,CAACE,YAAY,+DAA+D,CAACF,EAAG,MAAM,CAACE,YAAY,kCAAkC,CAACF,EAAG,MAAM,CAACuG,WAAW,CAAC,CAAC3F,KAAK,OAAO4F,QAAQ,SAASnH,MAAOS,EAAIiC,WAAY2E,WAAW,eAAexG,YAAY,sCAAsC2E,MAAM,CAAC,YAAaxB,EAAWK,YAAYvD,YAAY,CAAC,SAAW,WAAW,IAAM,IAAI,KAAO,IAAI,UAAU,KAAKK,GAAG,CAAC,MAAQ,WAAM6C,EAAWK,YAAcL,EAAWK,cAAe,CAAC1D,EAAG,IAAI,CAACE,YAAY,gBAAgB2E,MAAM,CAAC,GAAGxB,EAAWK,WAAW,uBAAuBL,EAAWK,gBAAgB1D,EAAG,MAAM,CAACE,YAAY,6BAA6B,CAACF,EAAG,SAAS,CAACE,YAAY,0CAA0CM,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAOX,EAAIsE,UAAUf,EAAYA,EAAWgB,YAAY,CAAEhB,EAAWgB,QAASrE,EAAG,MAAM,CAACG,YAAY,CAAC,aAAa,SAASG,MAAM,CAAC,IAAM+C,EAAW6B,sBAAsBpF,EAAIO,KAAMgD,EAAW+O,MAAOpS,EAAG,MAAM,CAACM,MAAM,CAAC,IAAM,WAAW,IAAMlE,EAAQ,WAAgD0D,EAAIO,KAAOgD,EAAWgB,SAAYhB,EAAW+O,MAAuGtS,EAAIO,KAApGL,EAAG,MAAM,CAACM,MAAM,CAAC,IAAM,WAAW,IAAMlE,EAAQ,aAA2D4D,EAAG,MAAM,CAACE,YAAY,kDAAkD,CAACF,EAAG,MAAM,CAACE,YAAY,yBAAyBC,YAAY,CAAC,SAAW,SAAS,gBAAgB,WAAW,cAAc,OAAO,cAAc,UAAUG,MAAM,CAAC,QAAU+C,EAAWgP,SAAS,MAAQhP,EAAWgP,WAAW,CAACvS,EAAImF,GAAGnF,EAAIwH,GAAGjE,EAAWgP,UAAU,eAAgBvS,EAAImC,kBAAmBjC,EAAG,sCAAsC,CAACM,MAAM,CAAC,OAASR,EAAImC,kBAAkB,WAAanC,EAAIuC,eAAe,WAAWvC,EAAI8B,QAAQ,cAAc9B,EAAIiC,YAAYvB,GAAG,CAAC,OAAS,SAASC,GAAQ,OAAOX,EAAIsE,UAAU,UAAUtE,EAAIO,MAAM,MAAK,QAEhvHM,EAAkB,CAAC,WAAY,IAAIb,EAAIC,KAAKC,EAAGF,EAAIG,MAAMD,GAAG,OAAOA,EAAG,OAAO,CAACE,YAAY,yBAAyB,CAACF,EAAG,IAAI,CAACE,YAAY,qCAC1I,WAAY,IAAIJ,EAAIC,KAAKC,EAAGF,EAAIG,MAAMD,GAAG,OAAOA,EAAG,OAAO,CAACE,YAAY,yBAAyB,CAACF,EAAG,IAAI,CAACE,YAAY,mCACrH,WAAY,IAAIJ,EAAIC,KAAKC,EAAGF,EAAIG,MAAMD,GAAG,OAAOA,EAAG,OAAO,CAACE,YAAY,sBAAsB,CAACF,EAAG,IAAI,CAACE,YAAY,oC,YCJwQ,SCOxX,GAAY,eACd,EACA,EACA,GACA,EACA,KACA,KACA,MAIa,M,QCmEA,IACfU,oCACAc,YACA2D,mBACAiN,mBACAC,0BAEAC,WACA3R,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,0BAEA0R,YACA3R,aACAC,YAEA2R,gBACA5R,aACAC,YAEA0Q,gBACA3Q,aACAC,YAEAyO,SACA1O,YACA6R,WAMAzJ,2BACApI,YACAC,YAEAgB,YACAjB,aACAC,aAGA7E,KAvEA,WAwEA,OACAuI,YACAmO,gBACA1B,+BACAL,mBACAC,mBAEAP,sBACAI,gBACAC,uBACAO,wBAGAlQ,0CACAyN,oCADA,IAEAmE,YACA7W,IADA,WAEA,mBAEA8W,IAJA,SAIAC,GACA,wBAGAzB,UAVA,WAWA,kDAEAE,gBAbA,WAcA,mDAGAtQ,OACAqE,OADA,SACAlG,GACA,iBAEAA,OACAsD,sBAEA,qCAGAuG,2BACAvG,sBACA,sCACA,4BACA,qDAIAC,QAxHA,WAyHA,4CACA,gCAGAC,QA7HA,WA8HA,+BAEA1B,SAGAoQ,GAHA,WAOA,iDACA,4BAAAyB,+BAAAlR,+CACA,aACA,kBAaAsD,OAvBA,WA2BA,aACA,sBAEAsI,MA9BA,WA+BA,4BAEAuF,wBAjCA,SAiCAlH,GACA,kDACA,mDAEA,gBAGAkF,iBAxCA,SAwCA1B,GACA,oCAEA2D,iBA3CA,WA4CA,gCAEA7B,sBA9CA,WA+CA,2BACA,4BACA,iBACA,uCACA,uBCxQmY,MCQ/X,I,UAAY,eACd,GACA,EACA,GACA,EACA,KACA,WACA,OAIa,M,gCCnBXxR,GAAS,WAAkB,IAAIC,EAAIC,KAAKC,EAAGF,EAAIG,MAAMD,GAAG,OAAOA,EAAG,gBAAgB,CAACM,MAAM,CAAC,OAASR,EAAI2E,SAAS,eAAe3E,EAAI4E,YAAY,gBAAgB5E,EAAI6E,aAAa,qBAAqB7E,EAAI8E,kBAAkB,cAAa,EAAM,YAAY,GAAG,aAAa,GAAG,iBAAiB,IAAIpE,GAAG,CAAC,gBAAgB,SAASC,GAAQX,EAAI2E,SAAShE,KAAU,CAACT,EAAG,SAAS,CAACE,YAAY,mBAAmB,CAACF,EAAG,IAAI,CAACE,YAAY,mBAAmB2E,MAAM,CAAE,uBAAyB/E,EAAIgF,WAAW,CAAEhF,EAAIgF,SAAU9E,EAAG,OAAO,CAACE,YAAY,iBAAiB2E,MAAK,mBAAa/E,EAAIiF,UAAW5E,YAAY,CAAC,eAAe,WAAW,CAACH,EAAG,IAAI,CAACE,YAAY,eAAe2E,MAAK,UAAI/E,EAAIkF,cAAelF,EAAIO,KAAKL,EAAG,OAAO,CAACF,EAAImF,GAAG,wBAAwBjF,EAAG,UAAU,CAACE,YAAY,mBAAmB,CAACF,EAAG,8BAA8B,CAACkH,IAAI,wBAAwB5G,MAAM,CAAC,cAAcR,EAAIkL,YAAYxK,GAAG,CAAC,cAAcV,EAAImL,kBAAkB,GAAGjL,EAAG,SAAS,CAACE,YAAY,uDAAuD,CAACF,EAAG,MAAM,CAACE,YAAY,WAAW,CAAGJ,EAAIkL,WAA4OlL,EAAIO,KAApOL,EAAG,SAAS,CAACE,YAAY,4BAA4BI,MAAM,CAAC,eAAe,iBAAiBE,GAAG,CAAC,MAAQV,EAAIoL,MAAM,CAAClL,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,4BAA4BF,EAAG,OAAO,CAACF,EAAImF,GAAG,WAAqBnF,EAAIkL,WAAYhL,EAAG,SAAS,CAACE,YAAY,4BAA4BI,MAAM,CAAC,eAAe,iBAAiBE,GAAG,CAAC,MAAQV,EAAIqL,OAAO,CAACnL,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,oCAAoCF,EAAG,OAAO,CAACF,EAAImF,GAAG,YAAYnF,EAAIO,KAAMP,EAAIkL,WAAYhL,EAAG,SAAS,CAACE,YAAY,iBAAiBI,MAAM,CAAC,eAAe,kBAAkBE,GAAG,CAAC,MAAQV,EAAIsF,SAAS,CAACpF,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,wCAAwCF,EAAG,OAAO,CAACF,EAAImF,GAAG,cAAcnF,EAAIO,KAAKL,EAAG,SAAS,CAACE,YAAY,iBAAiBI,MAAM,CAAC,eAAe,SAASE,GAAG,CAAC,MAAQV,EAAIsL,QAAQ,CAACpL,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,6BAA6BF,EAAG,OAAO,CAACF,EAAImF,GAAG,oBAE38DtE,GAAkB,GCFlBd,GAAS,WAAkB,IAAIC,EAAIC,KAAKC,EAAGF,EAAIG,MAAMD,GAAG,OAAOA,EAAG,MAAM,CAACM,MAAM,CAAC,OAASR,EAAI2E,UAAUjE,GAAG,CAAC,gBAAgB,SAASC,GAAQX,EAAI2E,SAAShE,KAAU,CAACT,EAAG,cAAc,CAACE,YAAY,sDAAsDI,MAAM,CAAC,QAAUR,EAAIuL,QAAQ,aAAavL,EAAInE,OAAO2P,UAAU,YAAYxL,EAAInE,OAAOuO,SAAS,aAAapK,EAAIyL,UAAU,aAAazL,EAAI0L,eAAe,cAAc1L,EAAInE,OAAO8P,WAAW,aAAa3L,EAAInE,OAAO+P,WAAWlL,GAAG,CAAC,YAAcV,EAAI6L,aAAa,KAAO7L,EAAI8L,OAAO,CAAC9L,EAAIqH,GAAIrH,EAAI+L,iBAAiB,SAAS+B,EAAI7B,GAAO,OAAO/L,EAAG,KAAK,CAACP,IAAImO,EAAIzP,GAAG0G,MAAM,CAAE,cAAgB/E,EAAIkM,cAAgBD,GAAQvL,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAOX,EAAImM,kBAAkB2B,EAAK7B,EAAOtL,MAAW,CAACT,EAAG,KAAK,CAACQ,GAAG,CAAC,SAAW,SAASC,GAAQ,OAAOX,EAAIoM,YAAY0B,EAAK7B,MAAU,CAACjM,EAAImF,GAAGnF,EAAIwH,GAAGsG,EAAIxQ,YAAY4C,EAAG,KAAK,CAACE,YAAY,0DAA0D,CAACF,EAAG,IAAI,CAACE,YAAY,wCAAwCI,MAAM,CAAC,eAAe,mBAAmBE,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAOX,EAAIqM,cAAcyB,EAAIzP,GAAI4N,EAAO6B,EAAIxQ,YAAY,CAAC4C,EAAG,OAAO,CAACE,YAAY,kBAAkB,CAACF,EAAG,IAAI,CAACE,YAAY,uCAAsCF,EAAG,WAAW,CAAC8I,KAAK,SAAS,CAAC9I,EAAG,UAAU,CAACE,YAAY,WAAW,CAACF,EAAG,MAAM,CAACE,YAAY,2CAA2C,CAACF,EAAG,OAAO,CAACM,MAAM,CAAC,KAAO,kBAAkB,CAACN,EAAG,IAAI,CAACE,YAAY,oCAAoCF,EAAG,IAAI,CAACF,EAAImF,GAAG,oBAAoB,GAAInF,EAAIsM,aAAcpM,EAAG,MAAM,CAACE,YAAY,SAAS,CAACF,EAAG,QAAQ,CAACE,YAAY,SAAS,CAACJ,EAAImF,GAAG,eAAejF,EAAG,MAAM,CAACE,YAAY,WAAW,CAACF,EAAG,WAAW,CAACuG,WAAW,CAAC,CAAC3F,KAAK,iBAAiB4F,QAAQ,oBAAoB,CAAC5F,KAAK,QAAQ4F,QAAQ,UAAUnH,MAAOS,EAAI1C,QAASsJ,WAAW,YAAYxG,YAAY,WAAW2E,MAAM,CAAE,aAAe/E,EAAIwM,kBAAkBhM,MAAM,CAAC,GAAK,UAAU,YAAc,4BAA4B,UAAY,QAAQiK,SAAS,CAAC,MAASzK,EAAI1C,SAAUoD,GAAG,CAAC,MAAQ,CAAC,SAASC,GAAWA,EAAO+J,OAAOC,YAAiB3K,EAAI1C,QAAQqD,EAAO+J,OAAOnL,QAAOS,EAAIyM,iBAAiBzM,EAAImF,GAAG,KAAKjF,EAAG,MAAM,CAACE,YAAY,4CAA4C,CAACF,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACJ,EAAImF,GAAGnF,EAAIwH,GAAGxH,EAAI1C,QAAQL,QAAQ,YAAa+C,EAAIwM,kBAAoBxM,EAAIsM,aAAcpM,EAAG,OAAO,CAACE,YAAY,kBAAkB,CAACJ,EAAImF,GAAG,0BAA0BnF,EAAIO,SAASL,EAAG,QAAQ,CAACE,YAAY,SAAS,CAACJ,EAAImF,GAAG,eAAejF,EAAG,MAAM,CAACA,EAAG,SAAS,CAACE,YAAY,yDAAyDI,MAAM,CAAC,eAAe,YAAYE,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAOX,EAAI0M,UAAU,aAAa,CAACxM,EAAG,OAAO,CAACF,EAAImF,GAAG,YAAYnF,EAAImF,GAAG,MAAMjF,EAAG,SAAS,CAACE,YAAY,yDAAyDI,MAAM,CAAC,eAAe,YAAYE,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAOX,EAAI0M,UAAU,aAAa,CAACxM,EAAG,OAAO,CAACF,EAAImF,GAAG,YAAYnF,EAAImF,GAAG,MAAMjF,EAAG,SAAS,CAACE,YAAY,yDAAyDI,MAAM,CAAC,eAAe,cAAcE,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAOX,EAAI0M,UAAU,eAAe,CAACxM,EAAG,OAAO,CAACF,EAAImF,GAAG,cAAcnF,EAAImF,GAAG,MAAMjF,EAAG,SAAS,CAACE,YAAY,yDAAyDI,MAAM,CAAC,eAAe,4BAA4BE,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAOX,EAAI0M,UAAU,uBAAuB,CAACxM,EAAG,OAAO,CAACF,EAAImF,GAAG,4BAA4BnF,EAAImF,GAAG,MAAMjF,EAAG,SAAS,CAACE,YAAY,yDAAyDI,MAAM,CAAC,eAAe,0BAA0BE,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAOX,EAAI0M,UAAU,qBAAqB,CAACxM,EAAG,OAAO,CAACF,EAAImF,GAAG,0BAA0BnF,EAAImF,GAAG,MAAMjF,EAAG,SAAS,CAACE,YAAY,yDAAyDI,MAAM,CAAC,eAAe,iBAAiBE,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAOX,EAAI0M,UAAU,iBAAiB,CAACxM,EAAG,OAAO,CAACF,EAAImF,GAAG,iBAAiBnF,EAAImF,GAAG,MAAMjF,EAAG,SAAS,CAACE,YAAY,yDAAyDI,MAAM,CAAC,eAAe,0BAA0BE,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAOX,EAAI0M,UAAU,oBAAoB,CAACxM,EAAG,OAAO,CAACF,EAAImF,GAAG,6BAA6BnF,EAAIO,KAAMP,EAAIvC,OAAQyC,EAAG,gBAAgB,CAACM,MAAM,CAAC,OAASR,EAAI2M,sBAAsBjM,GAAG,CAAC,gBAAgB,SAASC,GAAQX,EAAI2M,qBAAqBhM,GAAQ,MAAQ,SAASA,GAAQ,OAAOX,EAAI0D,cAAc,SAAW,SAAS/C,GAAQ,OAAOX,EAAI4M,YAAY,aAAe,SAASjM,GAAQ,OAAOX,EAAI6M,kBAAkB,CAAC3M,EAAG,IAAI,CAACM,MAAM,CAAC,KAAO,cAAcwI,KAAK,cAAc,CAAChJ,EAAImF,GAAG,qBAAqBjF,EAAG,IAAI,CAACM,MAAM,CAAC,KAAO,gBAAgBwI,KAAK,gBAAgB,CAAChJ,EAAImF,GAAG,6DAA6DnF,EAAIO,KAAMP,EAAIvC,OAAQyC,EAAG,gBAAgB,CAACM,MAAM,CAAC,OAASR,EAAI8M,qBAAqB,UAAU,MAAM,cAAc,MAAMpM,GAAG,CAAC,gBAAgB,SAASC,GAAQX,EAAI8M,qBAAqBnM,GAAQ,GAAK,SAASA,GAAQ,OAAOX,EAAI1B,cAAa,IAAO,OAAS,SAASqC,GAAQ,OAAOX,EAAI1B,cAAa,KAASsL,MAAM,CAACrK,MAAOS,EAAIvC,OAAQqM,SAAS,SAAUC,GAAM/J,EAAIvC,OAAOsM,GAAKnD,WAAW,WAAW,CAAC1G,EAAG,IAAI,CAACM,MAAM,CAAC,KAAO,cAAcwI,KAAK,cAAc,CAAChJ,EAAImF,GAAG,2BAA2BjF,EAAG,IAAI,CAACM,MAAM,CAAC,KAAO,gBAAgBwI,KAAK,gBAAgB,CAAChJ,EAAImF,GAAG,oBAAoBjF,EAAG,OAAO,CAACE,YAAY,yCAAyC,CAACJ,EAAImF,GAAGnF,EAAIwH,GAAJ,UAAUxH,EAAIvC,OAAOH,aAAc0C,EAAImF,GAAG,oCAAoCnF,EAAIO,MAAM,IAElwKM,GAAkB,GCAhBY,GAAU,CAAC,IAAIC,OAAY,mBAAoB,WAAW,EAAM,MAAO,QAAS,IAAIA,OAAY,GAAI,UAAU,EAAO,OAAQ,a,aCiIpH,IACfZ,gCACAc,YACAmL,kBACAC,oBACAC,qBAGAxG,YACAyG,sBAEAnM,OACAxB,WACA2L,cACAzF,QACAzE,aACAC,aAGA7E,KAnBA,WAoBA,OACAuI,yBACAwI,SACAC,UACAC,aACAC,UACAC,WACAjB,gBACAE,oBACAG,wBACAG,wBACAxN,WACAmM,YACAM,mBACAtO,QAAAY,MAAAf,YACAkQ,UAAAnP,MAAAf,YACAzB,QACA8P,sBACAC,6BACAJ,YACApB,YAEAqD,UACAvB,iBACAR,kBACApO,aAGA6D,UACAoK,QADA,WAEA,YAGAzI,QArDA,WAsDA,gBACA,eACA,mCAEAzB,SACAqM,QADA,WACA,iKACA,oBADA,SAEAvK,qCAFA,OAEA,kBAFA,QAGA,iDACAkQ,EAAA,qBACA,mBAEA,wEACA,oBARA,8CAUA5G,aAXA,WAYA,wCACA,wBACA,uBAGAmB,MAjBA,WAkBA,cACA,kBACA,eACA,6BACA,6BACA,kBACA,uBACA,4BACA,qBACA,8BAEAxC,IA7BA,WA8BA,aACA,oBACA,yBACA,qBACA,eAEAyC,KApCA,WAqCA,4BACA,eACA,8BAEA,oBAGAvC,MA5CA,WA6CA,4BACA,gBACA,8BAEA,wBAGAc,YApDA,SAoDA3O,EAAAwO,GAEA,4BACA,eACA,+BAGA,cACA,eACA,qBACA,oBACA,8BACA,sBACA,uBACA,2BACA,wCACA,qBACA,+BAGAI,cAxEA,SAwEAhO,EAAA4N,EAAA6B,GACA,kBACA,cACA,kBAEA,2EAIA,+CAIA,4EAHA,8BAMA,iBACA,sBACA,cACA,eACA,+BAdA,gCACA,0CACA,+BAeAxP,aA/FA,SA+FAyP,GAAA,wJACAA,EADA,0CAGA5K,oCAHA,OAIA,YACA,kBACA,wBAIA,kCACA,iDACA,gDAEA,UAEA,iBACA,0BAjBA,4DAmBA6K,kDACA,0DApBA,mBAqBA,GArBA,iCAwBA,+CACA,0BACA,8GAEA,UACA,2BA7BA,6DAiCA1I,OAhIA,WAiIA,aACA,qBAEAgO,UApIA,WAoIA,wJACA,QADA,gCAEA,WAFA,iCAGA,SAHA,gCAIA,WAJA,8CAOAjI,KA3IA,SA2IA8B,GAAA,6JACAe,EAAA,UACA,aACAA,MAHA,uBAIA,aACA,iHALA,mBAMA,GANA,UAQA,wCARA,uBASA,qGATA,mBAUA,GAVA,mBAcA,6BAEAf,EAhBA,wBAiBA,cACA,mBAlBA,UAmBAhK,6BAnBA,yBAoBA,YApBA,QAsBA,qGAtBA,+BAyBA,mBAzBA,UA0BAA,4BA1BA,yBA2BA,YA3BA,QA4BA,4GA5BA,eA+BA,UACA,2DACA,0BAjCA,mBAkCA,GAlCA,4CAoCA,4CACA6K,kDACA,2DAtCA,mBAwCA,GAxCA,yBA0CA,iBA1CA,gFA6CAnB,aAxLA,WAwLA,wJACA,sBADA,gCAEA,mBAFA,uBAGA,WAHA,OAIA,UAJA,2BAKA,uBALA,kCAMA,mBANA,yBAOA,WAPA,QAQA,0BACA,kBATA,4BAUA,mBAVA,kCAWA,WAXA,QAYA,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,+FACA,mBACA,yCAEA0F,aAxEA,WAwEA,0JAEAC,EAAA,KACA,2BACA,sDACA,mDACAA,4FACA,YACA,mBACA,yBATA,8CAWAC,gBAnFA,WAoFA,kHAEAC,eAtFA,WAuFAL,4HAEAM,aAzFA,WA2FAC,gDACAA,qDACA,qCAEAtF,KA/FA,WAgGA,oBACA,oBAEA5G,WAnGA,WAoGA,oBACA,0BAEAmM,qBAvGA,WAwGA,mEAIA,6CACA,gEAsBAzP,KAnIA,WAmIA,oKAGA,uBAHA,OAIA,0BAJA,8CAMA0P,aAzIA,WA2IA,6DACA,yDAEA,4BACA,wBACA,yBACA,qBAEAjF,gBAnJA,WAoJA,iCAEAL,iBAtJA,WAuJA,gCACA,uCACA,4BACA,qBAEA5G,mBA5JA,WA6JA,qCACA,kCAEAmM,wBAhKA,WAgKA,qKACA,uBACAC,EAFA,iCAEA,mBAAAvY,aAFA,SAGA6F,mCAHA,UAGA8G,EAHA,OAIA,cACA,8BALA,oBAMA,gGACA,mBAPA,wBAQA,0BARA,UASA9G,kDATA,QASA8G,EATA,OAUA,cAVA,QAaA,uBAbA,+CAeA0G,mBA/KA,WA+KA,oJACA,gCAEAmF,8DAAA,mNAHA,8CAKAzL,eApLA,SAoLAmD,GAEA,oBACA,6BACA,uBACA,sCACA,wBAEA,kCACA,sEAEAuI,sBA/LA,WAgMA,+BAGA,0BAEAC,YArMA,SAqMA1Y,GAQA,OAPAA,yDACAA,uDACAA,mDACAA,iEACAA,6DACAA,uDACAA,2DACA,GAEA2Y,YA/MA,SA+MAvO,GACA,MACA,wBACA,wBACA,2BACA,iBAEA,UAEAwO,kBAxNA,WAyNA,0BACA,iCACA,iCAEA,4BACA,wBACA,4BCnhBiX,MCQ7W,I,UAAY,eACd,GACA,EACA,GACA,EACA,KACA,WACA,OAIa,M,QCnBXnW,GAAS,WAAkB,IAAIC,EAAIC,KAAKC,EAAGF,EAAIG,MAAMD,GAAG,OAAOA,EAAG,gBAAgB,CAACM,MAAM,CAAC,OAASR,EAAI2E,SAAS,eAAe3E,EAAI4E,YAAY,gBAAgB5E,EAAI6E,aAAa,qBAAqB7E,EAAI8E,kBAAkB,cAAa,EAAM,YAAY,GAAG,iBAAiB,IAAIpE,GAAG,CAAC,gBAAgB,SAASC,GAAQX,EAAI2E,SAAShE,KAAU,CAACT,EAAG,SAAS,CAACE,YAAY,mBAAmB,CAACF,EAAG,IAAI,CAACE,YAAY,mBAAmB2E,MAAM,CAAE,uBAAyB/E,EAAIgF,WAAW,CAAEhF,EAAIgF,SAAU9E,EAAG,OAAO,CAACE,YAAY,iBAAiB2E,MAAK,mBAAa/E,EAAIiF,UAAW5E,YAAY,CAAC,eAAe,WAAW,CAACH,EAAG,IAAI,CAACE,YAAY,eAAe2E,MAAK,UAAI/E,EAAIkF,cAAelF,EAAIO,KAAKL,EAAG,OAAO,CAACF,EAAImF,GAAG,eAAejF,EAAG,UAAU,CAACE,YAAY,0BAA0BC,YAAY,CAAC,SAAW,aAAa,CAACH,EAAG,MAAM,CAACE,YAAY,mBAAmB,CAACF,EAAG,MAAM,CAACE,YAAY,kBAAkB,CAACF,EAAG,MAAM,CAACE,YAAY,WAAW,CAACF,EAAG,MAAM,CAACE,YAAY,gCAAgC,CAACF,EAAG,MAAM,CAACE,YAAY,uBAAuB,CAACJ,EAAImF,GAAG,WAAWjF,EAAG,IAAI,CAACF,EAAImF,GAAGnF,EAAIwH,GAAGxH,EAAImW,MAAMzO,aAAaxH,EAAG,MAAM,CAACE,YAAY,sCAAsC,CAACJ,EAAImF,GAAG,IAAInF,EAAIwH,GAAGxH,EAAI6H,SAASC,qBAAqB9H,EAAImW,MAAMpO,YAAa/H,EAAIgI,UAAUC,SAAS,eAAe/H,EAAG,MAAM,CAACE,YAAY,mBAAmB,CAACF,EAAG,MAAM,CAACE,YAAY,kBAAkB,CAACF,EAAG,MAAM,CAACE,YAAY,WAAW,CAACF,EAAG,MAAM,CAACE,YAAY,gCAAgC,CAACF,EAAG,MAAM,CAACE,YAAY,0BAA0B,CAACJ,EAAImF,GAAG,UAAUjF,EAAG,IAAI,CAACF,EAAImF,GAAGnF,EAAIwH,GAAGxH,EAAImW,MAAMvO,yBAAyB1H,EAAG,MAAM,CAACuG,WAAW,CAAC,CAAC3F,KAAK,OAAO4F,QAAQ,SAASnH,MAAOS,EAAImW,MAAMC,IAAMpW,EAAImW,MAAMC,GAAGnZ,OAAQ2J,WAAW,gCAAgCxG,YAAY,mBAAmB,CAACF,EAAG,MAAM,CAACE,YAAY,kBAAkB,CAACF,EAAG,MAAM,CAACE,YAAY,WAAW,CAACF,EAAG,MAAM,CAACE,YAAY,gCAAgC,CAACF,EAAG,MAAM,CAACE,YAAY,0BAA0B,CAACJ,EAAImF,GAAG,UAAUjF,EAAG,IAAI,CAACF,EAAImF,GAAGnF,EAAIwH,GAAGxH,EAAImW,MAAMC,iBAAiBlW,EAAG,MAAM,CAACuG,WAAW,CAAC,CAAC3F,KAAK,OAAO4F,QAAQ,SAASnH,MAAOS,EAAImW,MAAME,KAAOrW,EAAImW,MAAME,IAAIpZ,OAAQ2J,WAAW,kCAAkCxG,YAAY,mBAAmB,CAACF,EAAG,MAAM,CAACE,YAAY,kBAAkB,CAACF,EAAG,MAAM,CAACE,YAAY,WAAW,CAACF,EAAG,MAAM,CAACE,YAAY,gCAAgC,CAACF,EAAG,MAAM,CAACE,YAAY,0BAA0B,CAACJ,EAAImF,GAAG,WAAWjF,EAAG,IAAI,CAACF,EAAImF,GAAGnF,EAAIwH,GAAGxH,EAAImW,MAAME,kBAAkBnW,EAAG,MAAM,CAACE,YAAY,mBAAmB,CAACF,EAAG,MAAM,CAACE,YAAY,kBAAkB,CAACF,EAAG,MAAM,CAACE,YAAY,eAAe,CAACF,EAAG,MAAM,CAACE,YAAY,gCAAgC,CAACF,EAAG,MAAM,CAACE,YAAY,0BAA0B,CAACF,EAAG,IAAI,CAACF,EAAImF,GAAGnF,EAAIwH,GAAGxH,EAAImW,MAAMvN,sBAAsB1I,EAAG,MAAM,CAACE,YAAY,mBAAmB,CAACF,EAAG,MAAM,CAACE,YAAY,kBAAkB,CAACF,EAAG,MAAM,CAACE,YAAY,eAAe,CAACF,EAAG,MAAM,CAACE,YAAY,gCAAgC,CAACF,EAAG,MAAM,CAACE,YAAY,0BAA0B,CAACF,EAAG,MAAM,CAACuK,SAAS,CAAC,UAAYzK,EAAIwH,GAAGxH,EAAIsW,iCAAiCpW,EAAG,SAAS,CAACE,YAAY,mBAAmB,CAACF,EAAG,MAAM,CAACmF,MAAK,+DAAkE,CAACnF,EAAG,MAAM,CAACG,YAAY,CAAC,aAAa,gBAAgBH,EAAG,MAAM,CAACG,YAAY,CAAC,aAAa,aAAa,CAACH,EAAG,SAAS,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> \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> \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> \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> \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> \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> \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> \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> \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> \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> \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> \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> \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":""}