2020.03.04
Lightning Web Componentで作るlightning-datatableについて
はじめに
みなさん、Lightning Web Component(LWC) 使っていますか?
私はここ最近、ついにLWCへの一歩を踏み出したところです。
まだまだ理解は浅いのですが、せっかくなのでブログに書いていこうと思います。
さっそくですが、タイトルにも書いているlightning-datatableコンポーネントは、テーブルが簡単に作成できてすごく便利ですよね。テーブルを表示するときは大体お世話になっています。
ただ、レコードのIDがリンクで表示されないなど、絶妙に使いづらかったりしますよね。
と、いうことで今回はlightning-datatableを拡張して、独自に作成したデータ型を追加してみたいと思います。
そもそもLWCって?という方は過去に公開されている記事を参考にしてみてください。
私はここ最近、ついにLWCへの一歩を踏み出したところです。
まだまだ理解は浅いのですが、せっかくなのでブログに書いていこうと思います。
さっそくですが、タイトルにも書いているlightning-datatableコンポーネントは、テーブルが簡単に作成できてすごく便利ですよね。テーブルを表示するときは大体お世話になっています。
ただ、レコードのIDがリンクで表示されないなど、絶妙に使いづらかったりしますよね。
と、いうことで今回はlightning-datatableを拡張して、独自に作成したデータ型を追加してみたいと思います。
そもそもLWCって?という方は過去に公開されている記事を参考にしてみてください。
Lightning Web Component (LWC)のご紹介 - TerraSkyBase
本記事は、Lightning Web Componentがどういうものか概要を把握したい方向けの記事です。Lightning Web Componentの構成要素やSalesforce独自の機能を紹介します。
Lightning Web ComponentsとHappyになれる方法(基礎編) - TerraSkyBase
Salesforce Spring '19から正式リリースされたLightning Web Component に基本的な機能についてご紹介します。
作成するコンポーネント
作成するコンポーネントは下記の3つです。
・sampleDatatable
画面に表示するメインのコンポーネントです。
・customDatatable
lightning-datatableを継承するコンポーネントです。
ここにデータ型を定義していきます。
・datatableLinkRow
リンクのコンポーネントです。
これらを作成して下記のようにテーブル内にリンク型のデータを表示することができます。
・sampleDatatable
画面に表示するメインのコンポーネントです。
・customDatatable
lightning-datatableを継承するコンポーネントです。
ここにデータ型を定義していきます。
・datatableLinkRow
リンクのコンポーネントです。
これらを作成して下記のようにテーブル内にリンク型のデータを表示することができます。
sampleDatatable
<template> <c-custom-datatable key-field="id" data={data} columns={columns}> </c-custom-datatable> </template>
sampleDatatable.html
import { LightningElement, track } from 'lwc'; const columns = [ { label: 'Name', fieldName: 'name' }, { label: 'Link', fieldName: 'link', type: 'customLink', typeAttributes: { linkName: { fieldName: 'linkName' }, }, ]; export default class sampleDatatable extends LightningElement { @track columns = columns; @track data = [ { id: 'a', name: 'テストデータ1', link: 'testLink1', linkName: 'リンク1', }, { id: 'b', name: 'テストデータ2', link: 'testLink2', linkName: 'リンク2', } ]; }
sampleDatatable.js
このコンポーネントが画面に表示されるメインのコンポーネントになります。
colmunsに指定している、customLinkが追加したデータ型の部分になっています。
colmunsに指定している、customLinkが追加したデータ型の部分になっています。
customDatatable
import LightningDatatable from 'lightning/datatable'; import link from './link.html'; export default class CustomDatatable extends LightningDatatable { static customTypes = { customLink: { template: link, typeAttributes: ['linkName'], }, // typeを追加する場合はここに追加していく }; }
customDatatable.js
このクラスではLightningDatatableを継承しています。
利用するテンプレート(template)と値を渡したいプロパティ名(typeAttributes)をcustomTypesに設定します。
利用するテンプレート(template)と値を渡したいプロパティ名(typeAttributes)をcustomTypesに設定します。
<template> <c-datatable-link-row row-id={value} link-name={typeAttributes.linkName}> </c-datatable-link-row> </template>
link.html
テンプレートは、CustomDatatable.jsと同階層に作成して、次に作成するdatatableLinkRowコンポーネントを呼び出します。
valueには「fieldName」に設定した値が入ります。
typeAttributes.linkNameには「typeAttribute」の「fieldName」に設定した値が入ります。
valueには「fieldName」に設定した値が入ります。
typeAttributes.linkNameには「typeAttribute」の「fieldName」に設定した値が入ります。
datatableLinkRow
<template> <a onclick={handleClick} target="_self">{linkName}</a> </template>
datatableLinkRow.html
import { LightningElement, api } from 'lwc'; export default class DatatableLinkRow extends LightningElement { @api rowId @api linkName; handleClick(){ console.log(this.rowId); } }
datatableLinkRow.js
このクラスではリンクのコンポーネントを作成すればOKです。
さいごに
いかがでしたでしょうか。
今回は簡単にリンクを表示してみただけですが、応用すればもっといろいろなことができると思います!
今後のアップデートでもっと使いやすくなるかもしれませんが、何かの参考になれば嬉しいです。
最後まで読んでいただきありがとうございました。
今回は簡単にリンクを表示してみただけですが、応用すればもっといろいろなことができると思います!
今後のアップデートでもっと使いやすくなるかもしれませんが、何かの参考になれば嬉しいです。
最後まで読んでいただきありがとうございました。
23 件