Advertisement
Guest User

Untitled

a guest
Jun 19th, 2019
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 15.21 KB | None | 0 0
  1. ({
  2. init : function(cmp, event, helper) {
  3. $A.util.removeClass(cmp.find("spinner"), 'slds-hide');
  4. helper.setInit(cmp,event,helper);
  5.  
  6. setInterval(function() {
  7. cmp.set("v.updatedAgo",cmp.get("v.updatedAgo")+1);
  8. },60000);
  9. },
  10. refresh : function(cmp,event,helper){
  11. helper.setInit(cmp,event,helper);
  12. },
  13. loadMoreData: function (cmp, event, helper) {
  14.  
  15. var promiseData;
  16.  
  17. event.getSource().set("v.isLoading", true);
  18. cmp.set('v.loadMoreStatus', 'Loading');
  19.  
  20. promiseData = helper.loadMore(cmp,helper,cmp.get("v.data").length);
  21.  
  22. promiseData.then($A.getCallback(function (data) {
  23. if (cmp.get('v.data').length >= cmp.get('v.maxCount')) {
  24. cmp.set('v.enableInfiniteLoading', false);
  25. cmp.set('v.loadMoreStatus', 'No more data to load');
  26. } else {
  27. var currentData = cmp.get('v.data');
  28. var newData = currentData.concat(data);
  29. cmp.set('v.data', newData);
  30. cmp.set('v.loadMoreStatus', '');
  31. }
  32. event.getSource().set("v.isLoading", false);
  33. }));
  34. },
  35. updateColumnSorting:function(component, event, helper){
  36. var sortName = event.getParam("fieldName");
  37. var sortDirection = event.getParam("sortDirection");
  38. component.set("v.sortedBy", sortName);
  39. component.set("v.sortedDirection", sortDirection);
  40. if (sortName == "linkName") {sortName = "Name" ;} //if sort by name
  41. component.set("v.sortOrder",sortName + " " + sortDirection);
  42. for (var field of component.get('v.columns')){
  43. if (field.fieldName == sortName){
  44. component.set("v.sortOrderLabel", field.label);
  45. break;
  46. }
  47. }
  48. console.log("SortOrder: "+component.get("v.sortOrder"));
  49.  
  50. var promiseData = helper.loadMore(component,helper,0);
  51. promiseData.then(function(results) {
  52. component.set('v.data', results);
  53. });
  54. },
  55. newRecord:function(cmp,event,helper){
  56. cmp.set('v.showRTModal',true);
  57. },
  58. navObjHome:function(cmp,event,helper){
  59. var navService = cmp.find("navService");
  60. var pageReference = {
  61. "type": "standard__objectPage",
  62. attributes: {
  63. objectApiName: "Account",
  64. actionName: "list"
  65. },
  66. state: {
  67. filterName: "Recent"
  68. }
  69. };
  70. navService.navigate(pageReference);
  71. },
  72. navRecord:function(cmp,event,helper){
  73. var navService = cmp.find("navService");
  74. var pageReference = {
  75. "type": "standard__recordPage",
  76. attributes: {
  77. recordId: cmp.get("v.recordId"),
  78. objectApiName: cmp.get("v.parentObjAPI"),
  79. actionName: "view"
  80. },
  81. state: {
  82. filterName: "Recent"
  83. }
  84. };
  85. navService.navigate(pageReference);
  86. },
  87. handleRowAction: function (cmp, event, helper) {
  88. var action = event.getParam('action');
  89. var row = event.getParam('row');
  90. switch (action.name) {
  91. case 'editRecord':
  92. helper.editRecord(row['Id']);
  93. break;
  94. case 'viewRecord':
  95. helper.viewRecord(row['Id']);
  96. break;
  97. }
  98. }
  99.  
  100. ({
  101. setInit : function(cmp,event,helper){
  102. var object = cmp.get("v.pageReference").state.c__object;
  103. var objectLabel = cmp.get("v.pageReference").state.c__objectLabel ;
  104. var iconName = cmp.get("v.pageReference").state.c__iconName;
  105. var fields = cmp.get("v.pageReference").state.c__fields ;
  106. var relationship = cmp.get("v.pageReference").state.c__relationship;
  107. var sortOrder = cmp.get("v.pageReference").state.c__sortOrder;
  108. var conditions = cmp.get("v.pageReference").state.c__conditions;
  109. var recordId = cmp.get("v.pageReference").state.c__recordId;
  110. var fields = cmp.get("v.pageReference").state.c__fields;
  111. var maxCount = cmp.get("v.pageReference").state.c__maxCount;
  112. var actionList = cmp.get("v.pageReference").state.c__actionList;
  113.  
  114. cmp.set("v.object",object);
  115. cmp.set("v.objectLabel",objectLabel);
  116. cmp.set("v.iconName",iconName);
  117. cmp.set("v.fields",fields);
  118. cmp.set("v.relationship",relationship);
  119. cmp.set("v.sortOrder",sortOrder);
  120. cmp.set("v.conditions",conditions);
  121. cmp.set("v.recordId",recordId);
  122. cmp.set("v.fields",fields);
  123. cmp.set("v.maxCount",maxCount);
  124. cmp.set("v.actionList",actionList);
  125.  
  126. cmp.set('v.actionNew',cmp.get('v.actionList') ? cmp.get('v.actionList').includes('new') : false);
  127.  
  128. cmp.set("v.updatedAgo",0);
  129.  
  130. helper.getParentNames(cmp,recordId);
  131.  
  132. helper.fetchColumns(cmp,event,helper, recordId, fields, object);
  133.  
  134. var promiseData = helper.loadMore(cmp,helper,0);
  135. promiseData.then(function(results) {
  136. cmp.set('v.data', results);
  137. });
  138.  
  139. helper.setTabLabelIcon(cmp,object);
  140. },
  141. fetchData : function(cmp, recordId, fields, relatedObjectName, sortOrder, conditions, relationship,limit, offset) {
  142. var action = cmp.get("c.getRecords");
  143. action.setParams({
  144. "recId": recordId,
  145. "fields": fields,
  146. "relatedObjectName": relatedObjectName,
  147. "sortOrder": sortOrder,
  148. "conditions": conditions,
  149. "relationship": relationship,
  150. "recordLimit":limit.toString(),
  151. "offset": offset.toString()
  152. });
  153.  
  154. var promisedata = new Promise(function(resolve, reject) {
  155. action.setCallback(this, $A.getCallback(function (response) {
  156. var state = response.getState();
  157. if (state === "SUCCESS") {
  158. var data = response.getReturnValue();
  159. console.log('DATA Original: ' + JSON.stringify(data));
  160.  
  161. data.forEach(function(record){
  162. for (var field of cmp.get('v.columns')){
  163. if (field.typeAttributes && field.typeAttributes.relationship){
  164. if (record[field.typeAttributes.relationship]) {
  165. record[field.typeAttributes.relationship+"_Id"] = "/" +record[field.typeAttributes.relationship]['Id'];
  166. record[field.typeAttributes.relationship+"_Name"] = record[field.typeAttributes.relationship]['Name'];
  167. }
  168. } else if (field.cellAttributes){
  169. if (record[field.fieldName]){
  170. record[field.fieldName+"_chk"] = 'utility:check';
  171. }
  172. } else if (field.type == 'DATETIME'){
  173. var d = new Date(record[field.fieldName]);
  174. record[field.fieldName] = d.toLocaleString();
  175. } else if (field.type == 'TEXTAREA'){
  176. record[field.fieldName] = record[field.fieldName].split('n')[0];
  177. }
  178. }
  179. record.linkName = '/'+ record.Id;
  180. record.urlName = record.Name;
  181.  
  182. });
  183.  
  184. console.log('DATA: ' + JSON.stringify(data));
  185. resolve(data);
  186. } else if (state === "ERROR") {
  187. var errors = response.getError();
  188. console.error(errors);
  189. return null;
  190. }
  191. $A.util.addClass(cmp.find("spinner"), 'slds-hide');
  192. }));
  193. });
  194.  
  195. $A.enqueueAction(action);
  196. return promisedata;
  197. },
  198. loadMore:function(cmp,helper,offset){
  199. var object = cmp.get("v.object");
  200. var fields = cmp.get("v.fields");
  201. var relationship = cmp.get("v.relationship");
  202. var sortOrder = cmp.get("v.sortOrder");
  203. var conditions = cmp.get("v.conditions");
  204. var recordId = cmp.get("v.recordId");
  205. var rowsToLoad = cmp.get('v.rowsToLoad');
  206.  
  207. return helper.fetchData(cmp, recordId, fields, object, sortOrder, conditions, relationship,rowsToLoad,offset);
  208. },
  209. setTabLabelIcon:function(cmp){
  210. //set title and heading
  211. var workspaceAPI = cmp.find("workspace");
  212. workspaceAPI.getFocusedTabInfo().then(function(response) {
  213. console.log(response);
  214. for (var i of response.subtabs){
  215. if (i.pageReference.state.object == cmp.get("v.pageReference").state.object){
  216. var focusedTabId = i.tabId;
  217. workspaceAPI.setTabLabel({
  218. tabId: focusedTabId,
  219. label: i.pageReference.state.objectLabel
  220. });
  221. workspaceAPI.setTabIcon({
  222. tabId: focusedTabId,
  223. icon: cmp.get("v.iconName"),
  224. iconAlt: i.pageReference.state.objectLabel
  225. });
  226.  
  227. }
  228. }
  229. }).catch(function(error) {
  230. console.log(error);
  231. });
  232. },
  233. getParentNames:function(cmp,recordId){
  234. //set scrumbread
  235. var action = cmp.get("c.getParentObjectName");
  236. action.setParams({
  237. "recordId": recordId
  238. });
  239. action.setCallback(this, $A.getCallback(function (response) {
  240. var state = response.getState();
  241. if (state === "SUCCESS") {
  242. var names = response.getReturnValue();
  243. cmp.set('v.parentObjLabel', names['parentObjLabel']);
  244. cmp.set('v.parentObjAPI', names['parentObjAPI']);
  245. cmp.set('v.parentRecName', names['parentRecName']);
  246. console.log('parentNames: ' + names);
  247. } else if (state === "ERROR") {
  248. var errors = response.getError();
  249. console.error(errors);
  250. }
  251. }));
  252. $A.enqueueAction(action);
  253. },
  254. fetchColumns : function(cmp,evt,hlp, recordId, fields, relatedObjectName) {
  255. var tableAction = hlp.getTableActions(cmp);
  256. var action = cmp.get("c.getColumns");
  257. action.setParams({
  258. "recId": recordId,
  259. "fields": fields,
  260. "relatedObjectName": relatedObjectName
  261. });
  262. action.setCallback(this, $A.getCallback(function (response) {
  263. var state = response.getState();
  264. if (state === "SUCCESS") {
  265. var columns = response.getReturnValue();
  266. tableAction.length != 0 ? columns.push({ type: 'action', typeAttributes: { rowActions: tableAction } }) : '';
  267. cmp.set('v.columns', columns);
  268. console.log('COLUMNS: ' + JSON.stringify(columns));
  269. } else if (state === "ERROR") {
  270. var errors = response.getError();
  271. console.error(errors);
  272. }
  273. }));
  274. $A.enqueueAction(action);
  275. },
  276. getTableActions:function(cmp){
  277. var actionListMap = {
  278. 'view' : { label: 'View', name: 'viewRecord' },
  279. 'edit' : { label: 'Edit', name: 'editRecord' }
  280. };
  281. var tableAction = [];
  282. var actionLists = cmp.get('v.actionList') ? cmp.get('v.actionList').split(';') : [];
  283. for (var i = 0; i<actionLists.length;i++){
  284. actionListMap[actionLists[i]] ? tableAction.push(actionListMap[actionLists[i]]) : '';
  285. }
  286. return tableAction;
  287. },
  288. editRecord:function(recordId){
  289. var editRecordEvent = $A.get("e.force:editRecord");
  290. editRecordEvent.setParams({
  291. "recordId": recordId
  292. });
  293. editRecordEvent.fire();
  294. },
  295. viewRecord:function(recordId){
  296. var editRecordEvent = $A.get("e.force:navigateToSObject");
  297. editRecordEvent.setParams({
  298. "recordId": recordId
  299. });
  300. editRecordEvent.fire();
  301. }
  302.  
  303. <aura:component implements='lightning:isUrlAddressable,flexipage:availableForRecordHome' access='global' controller='SummaryTableController'>
  304. <!--crumbread parameters-->
  305. <aura:attribute name="parentObjLabel" type="String"/>
  306. <aura:attribute name="parentObjAPI" type="String"/>
  307. <aura:attribute name="parentRecName" type="String"/>
  308.  
  309. <aura:attribute name="updatedAgo" type="Integer" default = '0'/>
  310.  
  311. <aura:attribute name="object" type="String"/>
  312. <aura:attribute name="objectLabel" type="String"/>
  313. <aura:attribute name="fields" type="String"/>
  314. <aura:attribute name="sortOrder" type="String"/>
  315. <aura:attribute name="sortOrderLabel" type="String"/>
  316. <aura:attribute name="relationship" type="String"/>
  317. <aura:attribute name="conditions" type="String"/>
  318. <aura:attribute name="iconName" type="String"/>
  319. <aura:attribute name="rowsToLoad" type="Integer" default="50"/>
  320.  
  321. <!-- action lists -->
  322. <aura:attribute name='actionList' type='String' default='' />
  323. <aura:attribute name='actionNew' type='Boolean' default='true'/>
  324.  
  325. <aura:attribute name="maxCount" type="Integer" default="50"/>
  326. <aura:attribute name="loadMoreOffset" type="Integer" default="20"/>
  327. <aura:attribute name="enableInfiniteLoading" type="Boolean" default='true'/>
  328. <aura:attribute name="sortedBy" type="String" />
  329. <aura:attribute name="sortedDirection" type="Boolean" default="true" />
  330.  
  331. <aura:attribute name="data" type="Object"/>
  332. <aura:attribute name="columns" type="Object" />
  333. <aura:attribute name="recordId" type="String" />
  334.  
  335. <aura:attribute name="showRTModal" type="Boolean" default='false'/>
  336. <lightning:navigation aura:id="navService"/>
  337.  
  338. <aura:handler name="init" value="{! this}" action="{! c.init }"/>
  339. <aura:handler name="change" value="{!v.pageReference}" action="{!c.init}" />
  340.  
  341. <lightning:workspaceAPI aura:id="workspace" />
  342.  
  343. <lightning:spinner aura:id="spinner" alternativeText="Searching" size="medium" variant="brand" class="slds-hide"/>
  344. <div class='slds-page-header--object-home slds-page-header_joined slds-page-header_bleed slds-page-header slds-shrink-none test-headerRegion forceListViewManagerHeader'>
  345. <div class='slds-grid'>
  346. <div class='slds-col slds-has-flexi-truncate'>
  347. <lightning:breadcrumbs>
  348. <lightning:breadcrumb label="{!v.parentObjLabel}" onclick="{!c.navObjHome}"/>
  349. <lightning:breadcrumb label="{!v.parentRecName}" onclick="{!c.navRecord}"/>
  350. </lightning:breadcrumbs>
  351. <h1 class='slds-page-header__title slds-truncate'>{!v.objectLabel}</h1>
  352. </div>
  353.  
  354. <div class='slds-col slds-no-flex slds-grid slds-align-top slds-p-bottom--xx-small test-lvmForceActionsContainer'>
  355. <aura:if isTrue = '{!v.actionNew}'>
  356. <lightning:button label="New" title="New" onclick="{! c.newRecord }"/>
  357. </aura:if>
  358. </div>
  359. </div>
  360.  
  361. <div class='slds-grid'>
  362. <div class='slds-col slds-align-bottom'>
  363. <p>{!v.data.length}{!v.InfiniteLoading == true ? '+ ' : ' '}item{!v.data.length>1?'s':''} • Sorted by {!v.sortOrderLabel} • Updated {!v.updatedAgo>0 ? (v.updatedAgo >1 ? v.updatedAgo+' minutes ago' : 'a minute ago') : 'a few seconds ago' }</p>
  364. </div>
  365. <div class='slds-col slds-no-flex slds-grid slds-align-bottom'>
  366. <lightning:buttonIcon iconName="utility:refresh" variant="border-filled" alternativeText="Refresh" onclick='{!c.refresh}' />
  367. </div>
  368. </div>
  369. </div>
  370. <div style="height: 100%">
  371. <lightning:datatable
  372. data="{! v.data}"
  373. columns="{! v.columns}"
  374. keyField="id"
  375. showRowNumberColumn="true"
  376. loadMoreOffset="{! v.loadMoreOffset }"
  377. enableInfiniteLoading="{! v.enableInfiniteLoading }"
  378. onloadmore="{! c.loadMoreData }"
  379. hideCheckboxColumn = "true"
  380.  
  381. sortedBy="{! v.sortedBy }"
  382. sortedDirection="{! v.sortedDirection }"
  383. defaultSortDirection="desc"
  384. onsort="{! c.updateColumnSorting }"
  385. onrowaction="{! c.handleRowAction }"
  386. />
  387.  
  388. </div>
  389. {! v.loadMoreStatus }
  390.  
  391. <c:RecordTypeModal objectAPIName='{!v.object}' objectName='{!v.objectLabel}' show='{!v.showRTModal}' relationship='{!v.relationship}' recordId = '{!v.recordId}'/>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement