Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <aura:component implements="flexipage:availableForAllPageTypes,force:appHostable" access="global" controller="CustomizedSendEmailController">
- <ltng:require styles="/resource/design_system/assets/styles/salesforce-lightning-design-system-ltng.css" />
- <!--<ltng:require scripts="/resource/sizeOfJS"/>-->
- <ltng:require scripts="/resource/sizeofJS1"/>
- <!--<ltng:require scripts="/resource/TinyMCE/tinymce/js/tinymce/tinymce.min.js"
- afterScriptsLoaded="{!c.afterScriptsLoaded}" />-->
- <!-- ======================= Attributes ========================== -->
- <aura:attribute name="clientId" type="Id" />
- <aura:attribute name="toAddress" type="String" />
- <aura:attribute name="emailBody" type="String" />
- <aura:attribute name="subject" type="String" />
- <!-- <aura:attribute name="subject1" type="String" /> -->
- <aura:attribute name="fromId" type="Id" />
- <aura:attribute name="folderId" type="Id" />
- <aura:attribute name="emailTemplates" type="EmailTemplate[]" />
- <aura:attribute name="userEmail" type="User" />
- <aura:attribute name="userName" type="User" />
- <aura:attribute name="state" type="String" default="Edit" />
- <aura:attribute name="isPreviewMode" type="Boolean" default="false"/>
- <aura:attribute name="showDocuments" type="Boolean" default="false"/>
- <aura:attribute name="isDisablePrev" type="Boolean" default="false"/>
- <aura:attribute name="parentId" type="Id"/>
- <aura:attribute name="accept" type="String" default=""/>
- <aura:attribute name="messageTitle" type="String" />
- <aura:attribute name="messageAlert" type="String" />
- <aura:attribute name="messageIsSuccess" type="Boolean" />
- <aura:attribute name="messageStayOnPage" type="Boolean" default="true" />
- <aura:attribute name="messageViewModal" type="Boolean" default="true" />
- <aura:attribute name="selectedFiles" type="Object[]" />
- <aura:attribute name="documentIds" type="Id[]" access="private"/>
- <aura:attribute name="sharedDocuments" type="SObject[]"/>
- <aura:attribute name="selectedSharedDocumentIds" type="Id[]"/>
- <!-- ======================= Handlers ============================ -->
- <aura:handler name="init" action="{!c.init}" value="{!this}" />
- <aura:handler name="toDisplayModal" event="c:DisplayModal" action="{!c.displayModal}"/>
- <aura:handler name="thumbDeleteEvt" event="c:ThumbnailDeleteEvent" action="{!c.handleImageDeleted}" />
- <aura:handler name="docSelectEvt" event="c:DocumentSelectEvent" action="{!c.handleDocSelection}" />
- <!-- spinner -->
- <aura:handler event="aura:waiting" action="{!c.waiting}"/>
- <aura:handler event="aura:doneWaiting" action="{!c.doneWaiting}"/>
- <!-- ======================= Event ============================ -->
- <aura:registerEvent name="ImageSelectedEvent" type="c:ImageSelected"/>
- <aura:registerEvent name="toDisplayModal" type="c:DisplayModal"/>
- <!-- ======================= Methods ============================ -->
- <aura:method name="SendEmailMethod" action="{!c.submit}" />
- <!-- ======================= Content ========================== -->
- <div aura:id="modalDialog" class="hideClassAlert">
- <c:Email_Modal_Alert_Component title="{!v.messageTitle}"
- message="{!v.messageAlert}"
- isSuccess="{!v.messageIsSuccess}"
- recordId="{!v.clientId}"
- stayOnPage="{!v.messageStayOnPage}"
- viewModal="{!v.messageViewModal}"/>
- </div>
- <div class="headerStyle">
- <center>
- <button aura:id="cancelButton" class="formButton floatLeft" style="float:left" onclick="{!c.cancel}">{!$Label.c.CancelButton}</button>
- <span class="headerTextStyle"><b>{!$Label.c.SendEmail}</b></span>
- <aura:if isTrue="{!!(v.isDisablePrev)}">
- <button aura:id="prevButton" class="formButton floatRight" onclick="{!c.submit}">{!$Label.c.PreviewButton}</button>
- </aura:if>
- <button aura:id="submitButton" class="formButton hideClass floatRight" style="padding:5px 25px" onclick="{!c.submit}">{!$Label.c.SendButton}</button>
- <button aura:id="selectDocsButton" class="formButton hideClass floatRight" style="padding:5px 25px" onclick="{!c.selectDocuments}">{!$Label.c.Documents_Select}</button>
- </center>
- </div>
- <div class="contentStyle">
- <table aura:id="tableStyle" class="tableStyle">
- <tr>
- <td class="tdStyle">
- <span class="textStyle">{!$Label.c.SendEmailFromLabel}</span>
- <ui:inputSelect aura:id="fromEmailAddress" class="formInputSelect" value="{!v.fromId}"/>
- </td>
- </tr>
- <tr>
- <td class="tdStyle">
- <span class="textStyle">{!$Label.c.SendEmailToLabel}</span>
- <ui:outputText aura:id="toID" class="formInput" value="{!v.toAddress}"/>
- </td>
- </tr>
- <tr>
- <td class="tdStyle">
- <span class="textStyle">{!$Label.c.SendEmailSelectLabel}</span>
- <ui:inputSelect class="formInputSelect" aura:id="EmailTemplateInputSelectDynamic" change="{!c.loadTemplate}"/>
- </td>
- </tr>
- <tr>
- <td class="tdStyle">
- <span class="textStyle">{!$Label.c.SendEmailSubjectLabel}</span>
- <ui:inputText aura:id="subject" class="formInput" value="{!v.subject}" required="true" updateOn="keyup" />
- </td>
- </tr>
- <tr>
- <td class="tdStyle">
- <span class="textStyle">{!$Label.c.SendEmailBodyLabel}</span>
- <ui:inputRichText aura:id="inputRT" value="{!v.emailBody}" change="{!c.getInput}" height="250px" />
- </td>
- </tr>
- <!--<tr>
- <td>
- <div class="tinyMCE" >
- <textarea name="content" aura:id="inputRT" />
- </div>
- </td>
- </tr>-->
- <tr>
- <td class="tdStyle">
- <div class="container" aura:id="imagePreviews">
- <c:ImagePreview selectedFiles="{!v.selectedFiles}"/>
- </div>
- <div class="container">
- <input type="file" accept="image/*" class="file" aura:id="attachment" value="{!$Label.c.SendEmailAttachmentLabel}" onchange="{!c.handleImageSelected}" multiple="multiple"/>
- <div>
- <ui:button aura:id="docsButton" class="sharedDocsButton" label="{!$Label.c.Shared_Documents}" press="{!c.showDocuments}"/>
- <span class="documentsSelectedStyle">{!v.selectedSharedDocumentIds.length} {!$Label.c.Documents_selected}</span>
- </div>
- </div>
- </td>
- </tr>
- </table>
- </div>
- <center>
- <div aura:id="uploading" class="notUploading" style="position:fixed">
- <div class="spinnerLoading">
- <ui:spinner aura:id="spinner" />{!$Label.c.SendEmailUploadLabel}
- </div>
- </div>
- </center>
- <!-- ======================= Preview Page Content ========================== -->
- <div class="contentStyle">
- <div class="headerStyle">
- <center>
- <span aura:id="prevField" class="textStylePreview hideClass">{!$Label.c.SendEmailPreviewLabel}</span>
- </center>
- </div>
- <div class="contentStyle">
- <ui:outputRichText aura:id="outputRT" class="previewMode hideClass" />
- <aura:if isTrue="{!v.isPreviewMode}">
- <div class="container" aura:id="imagePreviewsReadOnly">
- <c:ImagePreview selectedFiles="{!v.selectedFiles}" showDel="false"/>
- <div class="documentsSelectedStyle">{!v.selectedSharedDocumentIds.length} {!$Label.c.Documents_selected}</div>
- </div>
- </aura:if>
- </div>
- </div>
- <!-- ======================= Select Documents ========================== -->
- <aura:if isTrue="{!v.showDocuments}">
- <div class="contentStyle">
- <div class="headerStyle">
- <center>
- <span class="textStylePreview">{!$Label.c.Shared_Documents}</span>
- </center>
- </div>
- <div class="contentStyle">
- <div class="slds" style="height:100%">
- <table class="slds-table slds-table--bordered slds-table--fixed-layout">
- <thead>
- <tr class="slds-text-title--caps">
- <th scope="col" style="width:3.25rem;"></th>
- <th scope="col"><div class="slds-truncate">{!$Label.c.Document_Preview}</div></th>
- <th scope="col"><div class="slds-truncate">{!$Label.c.Document_Name}</div></th>
- <th scope="col"><div class="slds-truncate">{!$Label.c.Document_Type}</div></th>
- </tr>
- </thead>
- <tbody>
- <aura:iteration items="{!v.sharedDocuments}" var="doc">
- <c:DocumentItem document="{!doc}" isSelected="{!doc.isSelected}"/>
- </aura:iteration>
- </tbody>
- </table>
- </div>
- </div>
- </div>
- </aura:if>
- </aura:component>
- ({
- /**
- *
- */
- init : function(component, event, helper) {
- var action = component.get("c.currentUserIsOwner");
- action.setParams({
- "clientId" : component.get("v.clientId")
- });
- action.setCallback(this, function(response){
- var state = response.getState();
- var stayOnPage;
- if (state === "SUCCESS") {
- if(response.getReturnValue()){
- helper.initToAddress(component, event, helper);
- helper.initEmailTemplates(component, event, helper);
- helper.initUserInfo(component, event, helper);
- helper.initOwdAdd(component, event, helper);
- helper.initAttachmentFolder(component, event, helper);
- } else {
- stayOnPage = false;
- helper.showMessage(component, false, $A.get("$Label.c.Error"), $A.get("$Label.c.Client_Owner"), stayOnPage);
- }
- }
- });
- $A.enqueueAction(action);
- },
- /**
- * Process the template and apply it to the rich text field
- */
- loadTemplate : function(component, event, helper) {
- var emailTemplateId = component.find("EmailTemplateInputSelectDynamic").get("v.value");
- var richTextField = component.find("inputRT");
- var action = component.get("c.processEmailTemplate");
- var eBody;
- action.setParams({
- "emailTemplateId" : emailTemplateId,
- "clientId" : component.get("v.clientId")
- });
- action.setCallback(this, function(response){
- var state = response.getState();
- if (state === "SUCCESS") {
- var processedString = response.getReturnValue();
- component.set("v.subject", processedString[0]);
- eBody = processedString[1];
- component.set("v.emailBody", processedString[1]);
- //tinyMCE.activeEditor.setContent(eBody);
- }
- });
- $A.enqueueAction(action);
- },
- /**
- * Preview/Submit email
- */
- submit : function(component, event, helper) {
- var curState = component.get("v.state");
- console.log("curState: " + curState);
- var prevButtonComp = component.find("prevButton");
- var submitButtonComp = component.find("submitButton");
- //var userInputRT = tinyMCE.activeEditor.getContent();
- //var userInputRT = component.find("inputRT");
- var userInputRT = component.get("v.emailBody");
- console.log("Input :" + userInputRT);
- var output = component.find("outputRT");
- if (curState == 'Edit'){
- console.log('Pass 1');
- $A.util.addClass(prevButtonComp, "hideClass");
- $A.util.removeClass(submitButtonComp, "hideClass");
- output.set("v.value", userInputRT);
- console.log("Output :" + output);
- helper.previewMode(component, event, helper);
- component.set("v.state", "Preview");
- component.set("v.isPreviewMode", true);
- console.log('Pass 5');
- }
- else {
- console.log('Preview Test');
- //component.set("v.emailBody", userInputRT);
- helper.submit(component, event, helper);
- }
- },
- /**
- * Cancel for Email and Preview
- */
- cancel : function(component, event, helper){
- var clientRec = component.get("v.clientId");
- console.log("client: " + clientRec);
- var curState = component.get("v.state");
- var isDocMode = component.get("v.showDocuments");
- var prevButtonComp = component.find("prevButton");
- var submitButtonComp = component.find("submitButton");
- var selectDocsButton = component.find("selectDocsButton");
- console.log('Cancel State :' + curState);
- if(curState == 'Edit'){
- console.log('Edit 1');
- sfdc.canvas.publisher.publish({name: "publisher.close",payload:{ refresh:"true" }});
- }
- else {
- $A.util.removeClass(prevButtonComp, "hideClass");
- $A.util.addClass(submitButtonComp, "hideClass");
- $A.util.addClass(selectDocsButton, "hideClass");
- component.set("v.state", "Edit");
- component.set("v.isPreviewMode", false);
- helper.editMode(component, event, helper);
- component.set("v.showDocuments", false);
- }
- },
- /**
- *
- */
- showDocuments : function(component, event, helper) {
- console.log("Show Documents");
- // query shared documents
- var action = component.get("c.querySharedDocuments");
- action.setCallback(this, function(response) {
- var state = response.getState();
- console.log("Response State: " + state);
- if (state === "SUCCESS") {
- var sharedDocuments = response.getReturnValue();
- var selectedSharedDocumentIds = component.get("v.selectedSharedDocumentIds");
- for (var i = 0; i < sharedDocuments.length; i++) {
- if (selectedSharedDocumentIds.indexOf(sharedDocuments[i].Id) > -1) {
- sharedDocuments[i].isSelected = true;
- }
- }
- component.set("v.sharedDocuments", sharedDocuments);
- }
- else if (state === "ERROR") {
- //alert(response.getError()[0].message);
- var stayOnPage = true;
- var messageAlert = $A.get("$Label.c.ErrorAlert");
- helper.showMessage(component, false, $A.get("$Label.c.Error"), messageAlert, stayOnPage);
- console.log("ERROR");
- }
- });
- $A.enqueueAction(action);
- var cancelButton = component.find("cancelButton");
- var prevButtonComp = component.find("prevButton");
- var editMsg = component.find("tableStyle");
- var selectDocsButton = component.find("selectDocsButton");
- $A.util.addClass(cancelButton, "hideClass");
- $A.util.addClass(prevButtonComp, "hideClass");
- $A.util.addClass(editMsg, "hideClass");
- $A.util.removeClass(selectDocsButton, "hideClass");
- component.set("v.showDocuments", true);
- },
- /**
- * Called if a document is selected or unselected
- */
- handleDocSelection : function(component, event, helper) {
- console.log("handle document selection");
- var docId = event.getParam("documentId");
- var isSelected = event.getParam("isSelected");
- var selectedSharedDocumentIds = component.get("v.selectedSharedDocumentIds");
- // add/remove the document from the list
- if (isSelected) {
- console.log("add document");
- selectedSharedDocumentIds.push(docId);
- }
- else {
- console.log("remove document");
- var i = selectedSharedDocumentIds.length;
- while (i--) {
- if (selectedSharedDocumentIds[i] == docId) {
- console.log("document found");
- selectedSharedDocumentIds.splice(i, 1);
- break;
- }
- }
- }
- component.set("v.selectedSharedDocumentIds", selectedSharedDocumentIds);
- },
- /**
- *
- */
- selectDocuments : function(component, event, helper) {
- console.log("Select Documents");
- /*
- var tempSelectedDocuments = component.get("v.tempSelectedDocuments");
- var selectedDocuments = component.get("v.selectedDocuments");
- console.log("New selected Documents: " + tempSelectedDocuments.length);
- if (tempSelectedDocuments.length > 0) {
- for (var i = 0; i < tempSelectedDocuments.length; i++) {
- selectedDocuments.push(tempSelectedDocuments[i]);
- }
- }
- component.set("v.selectedDocuments", selectedDocuments);
- // clear list of last selected documents
- tempSelectedDocuments = [];
- component.set("v.tempSelectedDocuments", tempSelectedDocuments);
- */
- var cancelButton = component.find("cancelButton");
- var prevButtonComp = component.find("prevButton");
- var selectDocsButton = component.find("selectDocsButton");
- $A.util.removeClass(cancelButton, "hideClass");
- $A.util.removeClass(prevButtonComp, "hideClass");
- $A.util.addClass(selectDocsButton, "hideClass");
- helper.editMode(component, event, helper);
- component.set("v.showDocuments", false);
- },
- /**
- * Image Preview
- */
- handleImageSelected: function(component, event) {
- var fileInput = component.find("attachment").getElement();
- var files = fileInput.files;
- var selectedFiles = component.get("v.selectedFiles");
- // add new files to the list
- for (var i = 0; i < files.length; i++) {
- if (files[i].type.startsWith("image")) {
- selectedFiles.push(files[i]);
- }
- else {
- console.log("Invalid file type (only image is allowed)");
- }
- }
- component.set("v.selectedFiles", selectedFiles);
- },
- /**
- * Image deletion
- */
- handleImageDeleted : function(component, event, helper) {
- console.log("handle image deletion");
- var fileToDelete = event.getParam("previewFile");
- var selectedFiles = component.get("v.selectedFiles");
- // remove the file from the list
- var i = selectedFiles.length;
- while (i--) {
- if (selectedFiles[i] == fileToDelete) {
- console.log("file found");
- selectedFiles.splice(i, 1);
- break;
- }
- }
- component.set("v.selectedFiles", selectedFiles);
- },
- /**
- * Loading Spinner
- */
- waiting: function(component, event, helper) {
- $A.util.addClass(component.find("uploading").getElement(), "uploading");
- $A.util.removeClass(component.find("uploading").getElement(), "notUploading");
- },
- doneWaiting: function(component, event, helper) {
- $A.util.removeClass(component.find("uploading").getElement(), "uploading");
- $A.util.addClass(component.find("uploading").getElement(), "notUploading");
- },
- //* Used in the built-in rich text field - was changed when it was replaced with TinyMCE
- //*
- getInput: function(component){
- console.log("getInput triggered");
- var userInputRT = component.find("inputRT").get("v.value");
- //var userInputRT = tinyMCE.activeEditor.getContent()
- var output = component.find("outputRT");
- output.set("v.value", userInputRT);
- //component.set("v.emailBody1", component.find("inputRT").get("v.value"));
- },
- /**
- * Hide displayModal
- */
- displayModal: function(component, event, handler){
- var modalDialogComp = component.find("modalDialog");
- $A.util.addClass(modalDialogComp, "hideClassAlert");
- console.log("hide component");
- },
- /**
- * TinyMCE init script
- */
- /*afterScriptsLoaded : function(component, event, helper) {
- console.log("afterScriptsLoaded");
- tinymce.init({
- selector: "textarea",
- min_height: 400,
- resize: false,
- statusbar: false,
- menubar: false,
- plugins: [
- "advlist autolink lists link image charmap print preview anchor",
- "searchreplace visualblocks code fullscreen",
- "insertdatetime media contextmenu paste "
- ],
- toolbar: "undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent "
- });
- console.log("afterScriptsLoaded 2");
- }*/
- })
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement