Advertisement
Guest User

Untitled

a guest
Feb 26th, 2017
142
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 21.38 KB | None | 0 0
  1. <aura:component implements="flexipage:availableForAllPageTypes,force:appHostable" access="global" controller="CustomizedSendEmailController">
  2.  
  3. <ltng:require styles="/resource/design_system/assets/styles/salesforce-lightning-design-system-ltng.css" />
  4. <!--<ltng:require scripts="/resource/sizeOfJS"/>-->
  5. <ltng:require scripts="/resource/sizeofJS1"/>
  6. <!--<ltng:require scripts="/resource/TinyMCE/tinymce/js/tinymce/tinymce.min.js"
  7. afterScriptsLoaded="{!c.afterScriptsLoaded}" />-->
  8.  
  9. <!-- ======================= Attributes ========================== -->
  10. <aura:attribute name="clientId" type="Id" />
  11. <aura:attribute name="toAddress" type="String" />
  12. <aura:attribute name="emailBody" type="String" />
  13. <aura:attribute name="subject" type="String" />
  14. <!-- <aura:attribute name="subject1" type="String" /> -->
  15. <aura:attribute name="fromId" type="Id" />
  16. <aura:attribute name="folderId" type="Id" />
  17.  
  18. <aura:attribute name="emailTemplates" type="EmailTemplate[]" />
  19. <aura:attribute name="userEmail" type="User" />
  20. <aura:attribute name="userName" type="User" />
  21.  
  22. <aura:attribute name="state" type="String" default="Edit" />
  23. <aura:attribute name="isPreviewMode" type="Boolean" default="false"/>
  24. <aura:attribute name="showDocuments" type="Boolean" default="false"/>
  25. <aura:attribute name="isDisablePrev" type="Boolean" default="false"/>
  26.  
  27. <aura:attribute name="parentId" type="Id"/>
  28. <aura:attribute name="accept" type="String" default=""/>
  29.  
  30. <aura:attribute name="messageTitle" type="String" />
  31. <aura:attribute name="messageAlert" type="String" />
  32. <aura:attribute name="messageIsSuccess" type="Boolean" />
  33. <aura:attribute name="messageStayOnPage" type="Boolean" default="true" />
  34. <aura:attribute name="messageViewModal" type="Boolean" default="true" />
  35.  
  36. <aura:attribute name="selectedFiles" type="Object[]" />
  37. <aura:attribute name="documentIds" type="Id[]" access="private"/>
  38. <aura:attribute name="sharedDocuments" type="SObject[]"/>
  39. <aura:attribute name="selectedSharedDocumentIds" type="Id[]"/>
  40.  
  41. <!-- ======================= Handlers ============================ -->
  42. <aura:handler name="init" action="{!c.init}" value="{!this}" />
  43. <aura:handler name="toDisplayModal" event="c:DisplayModal" action="{!c.displayModal}"/>
  44. <aura:handler name="thumbDeleteEvt" event="c:ThumbnailDeleteEvent" action="{!c.handleImageDeleted}" />
  45. <aura:handler name="docSelectEvt" event="c:DocumentSelectEvent" action="{!c.handleDocSelection}" />
  46.  
  47. <!-- spinner -->
  48. <aura:handler event="aura:waiting" action="{!c.waiting}"/>
  49. <aura:handler event="aura:doneWaiting" action="{!c.doneWaiting}"/>
  50.  
  51. <!-- ======================= Event ============================ -->
  52. <aura:registerEvent name="ImageSelectedEvent" type="c:ImageSelected"/>
  53. <aura:registerEvent name="toDisplayModal" type="c:DisplayModal"/>
  54.  
  55. <!-- ======================= Methods ============================ -->
  56. <aura:method name="SendEmailMethod" action="{!c.submit}" />
  57.  
  58. <!-- ======================= Content ========================== -->
  59.  
  60.  
  61. <div aura:id="modalDialog" class="hideClassAlert">
  62. <c:Email_Modal_Alert_Component title="{!v.messageTitle}"
  63. message="{!v.messageAlert}"
  64. isSuccess="{!v.messageIsSuccess}"
  65. recordId="{!v.clientId}"
  66. stayOnPage="{!v.messageStayOnPage}"
  67. viewModal="{!v.messageViewModal}"/>
  68. </div>
  69.  
  70. <div class="headerStyle">
  71. <center>
  72. <button aura:id="cancelButton" class="formButton floatLeft" style="float:left" onclick="{!c.cancel}">{!$Label.c.CancelButton}</button>
  73. <span class="headerTextStyle"><b>{!$Label.c.SendEmail}</b></span>
  74. <aura:if isTrue="{!!(v.isDisablePrev)}">
  75. <button aura:id="prevButton" class="formButton floatRight" onclick="{!c.submit}">{!$Label.c.PreviewButton}</button>
  76. </aura:if>
  77. <button aura:id="submitButton" class="formButton hideClass floatRight" style="padding:5px 25px" onclick="{!c.submit}">{!$Label.c.SendButton}</button>
  78. <button aura:id="selectDocsButton" class="formButton hideClass floatRight" style="padding:5px 25px" onclick="{!c.selectDocuments}">{!$Label.c.Documents_Select}</button>
  79. </center>
  80. </div>
  81.  
  82. <div class="contentStyle">
  83. <table aura:id="tableStyle" class="tableStyle">
  84. <tr>
  85. <td class="tdStyle">
  86. <span class="textStyle">{!$Label.c.SendEmailFromLabel}</span>&nbsp;
  87. <ui:inputSelect aura:id="fromEmailAddress" class="formInputSelect" value="{!v.fromId}"/>
  88. </td>
  89. </tr>
  90. <tr>
  91. <td class="tdStyle">
  92. <span class="textStyle">{!$Label.c.SendEmailToLabel}</span>&nbsp;
  93. <ui:outputText aura:id="toID" class="formInput" value="{!v.toAddress}"/>
  94. </td>
  95. </tr>
  96. <tr>
  97. <td class="tdStyle">
  98. <span class="textStyle">{!$Label.c.SendEmailSelectLabel}</span>&nbsp;
  99. <ui:inputSelect class="formInputSelect" aura:id="EmailTemplateInputSelectDynamic" change="{!c.loadTemplate}"/>
  100. </td>
  101. </tr>
  102. <tr>
  103. <td class="tdStyle">
  104. <span class="textStyle">{!$Label.c.SendEmailSubjectLabel}</span>&nbsp;
  105. <ui:inputText aura:id="subject" class="formInput" value="{!v.subject}" required="true" updateOn="keyup" />
  106. </td>
  107. </tr>
  108. <tr>
  109. <td class="tdStyle">
  110. <span class="textStyle">{!$Label.c.SendEmailBodyLabel}</span>&nbsp;
  111. <ui:inputRichText aura:id="inputRT" value="{!v.emailBody}" change="{!c.getInput}" height="250px" />
  112. </td>
  113. </tr>
  114. <!--<tr>
  115. <td>
  116. <div class="tinyMCE" >
  117. <textarea name="content" aura:id="inputRT" />
  118. </div>
  119. </td>
  120. </tr>-->
  121. <tr>
  122. <td class="tdStyle">
  123. <div class="container" aura:id="imagePreviews">
  124. <c:ImagePreview selectedFiles="{!v.selectedFiles}"/>
  125. </div>
  126. <div class="container">
  127. <input type="file" accept="image/*" class="file" aura:id="attachment" value="{!$Label.c.SendEmailAttachmentLabel}" onchange="{!c.handleImageSelected}" multiple="multiple"/>
  128. <div>
  129. <ui:button aura:id="docsButton" class="sharedDocsButton" label="{!$Label.c.Shared_Documents}" press="{!c.showDocuments}"/>
  130. <span class="documentsSelectedStyle">{!v.selectedSharedDocumentIds.length}&nbsp;{!$Label.c.Documents_selected}</span>
  131. </div>
  132. </div>
  133. </td>
  134. </tr>
  135. </table>
  136. </div>
  137.  
  138. <center>
  139. <div aura:id="uploading" class="notUploading" style="position:fixed">
  140. <div class="spinnerLoading">
  141. <ui:spinner aura:id="spinner" />{!$Label.c.SendEmailUploadLabel}
  142. </div>
  143. </div>
  144. </center>
  145.  
  146.  
  147. <!-- ======================= Preview Page Content ========================== -->
  148. <div class="contentStyle">
  149. <div class="headerStyle">
  150. <center>
  151. <span aura:id="prevField" class="textStylePreview hideClass">{!$Label.c.SendEmailPreviewLabel}</span>
  152. </center>
  153. </div>
  154. <div class="contentStyle">
  155. <ui:outputRichText aura:id="outputRT" class="previewMode hideClass" />
  156. <aura:if isTrue="{!v.isPreviewMode}">
  157. <div class="container" aura:id="imagePreviewsReadOnly">
  158. <c:ImagePreview selectedFiles="{!v.selectedFiles}" showDel="false"/>
  159. <div class="documentsSelectedStyle">{!v.selectedSharedDocumentIds.length}&nbsp;{!$Label.c.Documents_selected}</div>
  160. </div>
  161. </aura:if>
  162. </div>
  163. </div>
  164.  
  165. <!-- ======================= Select Documents ========================== -->
  166. <aura:if isTrue="{!v.showDocuments}">
  167. <div class="contentStyle">
  168. <div class="headerStyle">
  169. <center>
  170. <span class="textStylePreview">{!$Label.c.Shared_Documents}</span>
  171. </center>
  172. </div>
  173. <div class="contentStyle">
  174. <div class="slds" style="height:100%">
  175. <table class="slds-table slds-table--bordered slds-table--fixed-layout">
  176. <thead>
  177. <tr class="slds-text-title--caps">
  178. <th scope="col" style="width:3.25rem;"></th>
  179. <th scope="col"><div class="slds-truncate">{!$Label.c.Document_Preview}</div></th>
  180. <th scope="col"><div class="slds-truncate">{!$Label.c.Document_Name}</div></th>
  181. <th scope="col"><div class="slds-truncate">{!$Label.c.Document_Type}</div></th>
  182. </tr>
  183. </thead>
  184. <tbody>
  185. <aura:iteration items="{!v.sharedDocuments}" var="doc">
  186. <c:DocumentItem document="{!doc}" isSelected="{!doc.isSelected}"/>
  187. </aura:iteration>
  188. </tbody>
  189. </table>
  190. </div>
  191. </div>
  192. </div>
  193. </aura:if>
  194. </aura:component>
  195.  
  196. ({
  197. /**
  198. *
  199. */
  200. init : function(component, event, helper) {
  201. var action = component.get("c.currentUserIsOwner");
  202. action.setParams({
  203. "clientId" : component.get("v.clientId")
  204. });
  205. action.setCallback(this, function(response){
  206. var state = response.getState();
  207. var stayOnPage;
  208. if (state === "SUCCESS") {
  209.  
  210. if(response.getReturnValue()){
  211. helper.initToAddress(component, event, helper);
  212. helper.initEmailTemplates(component, event, helper);
  213. helper.initUserInfo(component, event, helper);
  214. helper.initOwdAdd(component, event, helper);
  215. helper.initAttachmentFolder(component, event, helper);
  216. } else {
  217. stayOnPage = false;
  218. helper.showMessage(component, false, $A.get("$Label.c.Error"), $A.get("$Label.c.Client_Owner"), stayOnPage);
  219. }
  220. }
  221. });
  222. $A.enqueueAction(action);
  223. },
  224.  
  225.  
  226. /**
  227. * Process the template and apply it to the rich text field
  228. */
  229. loadTemplate : function(component, event, helper) {
  230.  
  231. var emailTemplateId = component.find("EmailTemplateInputSelectDynamic").get("v.value");
  232. var richTextField = component.find("inputRT");
  233. var action = component.get("c.processEmailTemplate");
  234. var eBody;
  235. action.setParams({
  236. "emailTemplateId" : emailTemplateId,
  237. "clientId" : component.get("v.clientId")
  238. });
  239. action.setCallback(this, function(response){
  240. var state = response.getState();
  241. if (state === "SUCCESS") {
  242. var processedString = response.getReturnValue();
  243.  
  244. component.set("v.subject", processedString[0]);
  245. eBody = processedString[1];
  246. component.set("v.emailBody", processedString[1]);
  247. //tinyMCE.activeEditor.setContent(eBody);
  248.  
  249. }
  250.  
  251. });
  252. $A.enqueueAction(action);
  253. },
  254.  
  255. /**
  256. * Preview/Submit email
  257. */
  258. submit : function(component, event, helper) {
  259. var curState = component.get("v.state");
  260. console.log("curState: " + curState);
  261. var prevButtonComp = component.find("prevButton");
  262. var submitButtonComp = component.find("submitButton");
  263. //var userInputRT = tinyMCE.activeEditor.getContent();
  264. //var userInputRT = component.find("inputRT");
  265. var userInputRT = component.get("v.emailBody");
  266. console.log("Input :" + userInputRT);
  267. var output = component.find("outputRT");
  268.  
  269. if (curState == 'Edit'){
  270. console.log('Pass 1');
  271. $A.util.addClass(prevButtonComp, "hideClass");
  272. $A.util.removeClass(submitButtonComp, "hideClass");
  273. output.set("v.value", userInputRT);
  274. console.log("Output :" + output);
  275. helper.previewMode(component, event, helper);
  276. component.set("v.state", "Preview");
  277. component.set("v.isPreviewMode", true);
  278. console.log('Pass 5');
  279.  
  280. }
  281. else {
  282. console.log('Preview Test');
  283. //component.set("v.emailBody", userInputRT);
  284. helper.submit(component, event, helper);
  285. }
  286. },
  287.  
  288. /**
  289. * Cancel for Email and Preview
  290. */
  291. cancel : function(component, event, helper){
  292. var clientRec = component.get("v.clientId");
  293. console.log("client: " + clientRec);
  294. var curState = component.get("v.state");
  295. var isDocMode = component.get("v.showDocuments");
  296. var prevButtonComp = component.find("prevButton");
  297. var submitButtonComp = component.find("submitButton");
  298. var selectDocsButton = component.find("selectDocsButton");
  299. console.log('Cancel State :' + curState);
  300. if(curState == 'Edit'){
  301. console.log('Edit 1');
  302. sfdc.canvas.publisher.publish({name: "publisher.close",payload:{ refresh:"true" }});
  303.  
  304. }
  305. else {
  306. $A.util.removeClass(prevButtonComp, "hideClass");
  307. $A.util.addClass(submitButtonComp, "hideClass");
  308. $A.util.addClass(selectDocsButton, "hideClass");
  309. component.set("v.state", "Edit");
  310. component.set("v.isPreviewMode", false);
  311. helper.editMode(component, event, helper);
  312. component.set("v.showDocuments", false);
  313. }
  314. },
  315.  
  316. /**
  317. *
  318. */
  319. showDocuments : function(component, event, helper) {
  320. console.log("Show Documents");
  321.  
  322. // query shared documents
  323. var action = component.get("c.querySharedDocuments");
  324. action.setCallback(this, function(response) {
  325. var state = response.getState();
  326. console.log("Response State: " + state);
  327.  
  328. if (state === "SUCCESS") {
  329. var sharedDocuments = response.getReturnValue();
  330. var selectedSharedDocumentIds = component.get("v.selectedSharedDocumentIds");
  331. for (var i = 0; i < sharedDocuments.length; i++) {
  332. if (selectedSharedDocumentIds.indexOf(sharedDocuments[i].Id) > -1) {
  333. sharedDocuments[i].isSelected = true;
  334. }
  335. }
  336. component.set("v.sharedDocuments", sharedDocuments);
  337. }
  338. else if (state === "ERROR") {
  339. //alert(response.getError()[0].message);
  340. var stayOnPage = true;
  341. var messageAlert = $A.get("$Label.c.ErrorAlert");
  342. helper.showMessage(component, false, $A.get("$Label.c.Error"), messageAlert, stayOnPage);
  343. console.log("ERROR");
  344. }
  345. });
  346.  
  347. $A.enqueueAction(action);
  348.  
  349. var cancelButton = component.find("cancelButton");
  350. var prevButtonComp = component.find("prevButton");
  351. var editMsg = component.find("tableStyle");
  352. var selectDocsButton = component.find("selectDocsButton");
  353.  
  354. $A.util.addClass(cancelButton, "hideClass");
  355. $A.util.addClass(prevButtonComp, "hideClass");
  356. $A.util.addClass(editMsg, "hideClass");
  357. $A.util.removeClass(selectDocsButton, "hideClass");
  358.  
  359. component.set("v.showDocuments", true);
  360. },
  361.  
  362. /**
  363. * Called if a document is selected or unselected
  364. */
  365. handleDocSelection : function(component, event, helper) {
  366. console.log("handle document selection");
  367.  
  368. var docId = event.getParam("documentId");
  369. var isSelected = event.getParam("isSelected");
  370.  
  371. var selectedSharedDocumentIds = component.get("v.selectedSharedDocumentIds");
  372. // add/remove the document from the list
  373. if (isSelected) {
  374. console.log("add document");
  375. selectedSharedDocumentIds.push(docId);
  376. }
  377. else {
  378. console.log("remove document");
  379. var i = selectedSharedDocumentIds.length;
  380. while (i--) {
  381. if (selectedSharedDocumentIds[i] == docId) {
  382. console.log("document found");
  383. selectedSharedDocumentIds.splice(i, 1);
  384. break;
  385. }
  386. }
  387. }
  388. component.set("v.selectedSharedDocumentIds", selectedSharedDocumentIds);
  389. },
  390.  
  391. /**
  392. *
  393. */
  394. selectDocuments : function(component, event, helper) {
  395. console.log("Select Documents");
  396. /*
  397. var tempSelectedDocuments = component.get("v.tempSelectedDocuments");
  398. var selectedDocuments = component.get("v.selectedDocuments");
  399. console.log("New selected Documents: " + tempSelectedDocuments.length);
  400. if (tempSelectedDocuments.length > 0) {
  401. for (var i = 0; i < tempSelectedDocuments.length; i++) {
  402. selectedDocuments.push(tempSelectedDocuments[i]);
  403. }
  404. }
  405.  
  406. component.set("v.selectedDocuments", selectedDocuments);
  407. // clear list of last selected documents
  408. tempSelectedDocuments = [];
  409. component.set("v.tempSelectedDocuments", tempSelectedDocuments);
  410. */
  411. var cancelButton = component.find("cancelButton");
  412. var prevButtonComp = component.find("prevButton");
  413. var selectDocsButton = component.find("selectDocsButton");
  414.  
  415. $A.util.removeClass(cancelButton, "hideClass");
  416. $A.util.removeClass(prevButtonComp, "hideClass");
  417. $A.util.addClass(selectDocsButton, "hideClass");
  418. helper.editMode(component, event, helper);
  419.  
  420. component.set("v.showDocuments", false);
  421. },
  422.  
  423. /**
  424. * Image Preview
  425. */
  426. handleImageSelected: function(component, event) {
  427. var fileInput = component.find("attachment").getElement();
  428. var files = fileInput.files;
  429. var selectedFiles = component.get("v.selectedFiles");
  430. // add new files to the list
  431. for (var i = 0; i < files.length; i++) {
  432. if (files[i].type.startsWith("image")) {
  433. selectedFiles.push(files[i]);
  434. }
  435. else {
  436. console.log("Invalid file type (only image is allowed)");
  437. }
  438. }
  439. component.set("v.selectedFiles", selectedFiles);
  440. },
  441.  
  442. /**
  443. * Image deletion
  444. */
  445. handleImageDeleted : function(component, event, helper) {
  446. console.log("handle image deletion");
  447.  
  448. var fileToDelete = event.getParam("previewFile");
  449.  
  450. var selectedFiles = component.get("v.selectedFiles");
  451. // remove the file from the list
  452. var i = selectedFiles.length;
  453. while (i--) {
  454. if (selectedFiles[i] == fileToDelete) {
  455. console.log("file found");
  456. selectedFiles.splice(i, 1);
  457. break;
  458. }
  459. }
  460. component.set("v.selectedFiles", selectedFiles);
  461. },
  462.  
  463. /**
  464. * Loading Spinner
  465. */
  466. waiting: function(component, event, helper) {
  467. $A.util.addClass(component.find("uploading").getElement(), "uploading");
  468. $A.util.removeClass(component.find("uploading").getElement(), "notUploading");
  469. },
  470.  
  471. doneWaiting: function(component, event, helper) {
  472. $A.util.removeClass(component.find("uploading").getElement(), "uploading");
  473. $A.util.addClass(component.find("uploading").getElement(), "notUploading");
  474. },
  475.  
  476.  
  477. //* Used in the built-in rich text field - was changed when it was replaced with TinyMCE
  478. //*
  479. getInput: function(component){
  480. console.log("getInput triggered");
  481. var userInputRT = component.find("inputRT").get("v.value");
  482. //var userInputRT = tinyMCE.activeEditor.getContent()
  483. var output = component.find("outputRT");
  484. output.set("v.value", userInputRT);
  485. //component.set("v.emailBody1", component.find("inputRT").get("v.value"));
  486.  
  487. },
  488.  
  489. /**
  490. * Hide displayModal
  491. */
  492. displayModal: function(component, event, handler){
  493. var modalDialogComp = component.find("modalDialog");
  494. $A.util.addClass(modalDialogComp, "hideClassAlert");
  495. console.log("hide component");
  496. },
  497.  
  498. /**
  499. * TinyMCE init script
  500. */
  501. /*afterScriptsLoaded : function(component, event, helper) {
  502. console.log("afterScriptsLoaded");
  503. tinymce.init({
  504. selector: "textarea",
  505. min_height: 400,
  506. resize: false,
  507. statusbar: false,
  508. menubar: false,
  509. plugins: [
  510. "advlist autolink lists link image charmap print preview anchor",
  511. "searchreplace visualblocks code fullscreen",
  512. "insertdatetime media contextmenu paste "
  513. ],
  514. toolbar: "undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent "
  515.  
  516. });
  517. console.log("afterScriptsLoaded 2");
  518. }*/
  519.  
  520. })
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement