In this blog I will show you how you may create a self parent Tree Grid !
If you are following my blogs than few weeks back I have created a video on Tree Grid in which Account was the parent and Contacts was the child.
You may check that post below as well -
https://www.salesforcebolt.com/2021/12/tree-grid-in-lightning-web-component.html
In the self parent Tree Grid both Parent and Child comes from the same object. In this example I have created a tree grid with Account's Rating as a Parent and Accounts which belongs to that rating as Child.
Please check the code below :
HTML
1 2 3 4 5 6 7 8 9 10 | <template> <lightning-card title="Tree Grid Self Parent Example"> <lightning-tree-grid columns={columns} data={accounts} key-field="Id" hide-checkbox-column ></lightning-tree-grid> </lightning-card> </template> |
JS
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 | import { LightningElement, wire, track } from "lwc"; import getAccountList from "@salesforce/apex/AccountController.getAccList"; export default class TreeGridSelfParent extends LightningElement { accounts; error; @track expandedRows = []; @wire(getAccountList) wiredAccounts({ error, data }) { if (data) { let accounts = JSON.parse(JSON.stringify(data)); let parseData = []; let parentId = 0; let parentEntity = ""; for (let i = 0; i < accounts.length; i++) { let jsonData = '{"Id":"' + parentId + '","Name":"","Rating":"' + accounts[i].Rating + '","Phone":""}'; if (parentId === 0) { parseData.push(JSON.parse(jsonData)); parseData[parentId]._children = []; parseData[parentId]._children.push(accounts[i]); parentEntity = accounts[i].Rating; parentId++; } else { if (accounts[i].Rating === parentEntity) { parseData[parentId - 1]._children.push(accounts[i]); } else { parentEntity = accounts[i].Rating; parseData.push(JSON.parse(jsonData)); parseData[parentId]._children = []; parseData[parentId]._children.push(accounts[i]); parentId++; } } } this.accounts = parseData; } else if (error) { this.error = error; this.accounts = undefined; } } constructor() { super(); this.columns = [ { type: "text", fieldName: "Rating", label: "Rating" }, { type: "text", fieldName: "Name", label: "Name" }, { type: "text", fieldName: "Phone", label: "Phone" }, { type: "action", typeAttributes: { rowActions: this.getRowActions } } ]; } get expandedRowItems() { return this.expandedRows; } getRowActions(row, doneCallback) { const actions = []; actions.push({ label: "Edit", name: "edit" }); actions.push({ label: "Delete", name: "delete" }); doneCallback(actions); } } |
Output
Checkout complete video tutorial below
If you have any question please leave a comment below.
If you would like to add something to this post please leave a comment below.
Share this blog with your friends if you find it helpful somehow !
Thanks
Happy Coding :)
0 Comments