Why did Salesforce choose this approach with the column definition of the lightning-datatable
component?
const columns = [
{ label: 'Label', fieldName: 'name' },
{ label: 'Website', fieldName: 'website', type: 'url' },
{ label: 'Phone', fieldName: 'phone', type: 'phone' },
{ label: 'Balance', fieldName: 'amount', type: 'currency' },
{ label: 'CloseAt', fieldName: 'closeAt', type: 'date' },
];
I was lately thinking about streamlining the definition using a Builder pattern, so we could build the columns like this for example:
return buildColumns([
new TextColumnBuilder('ApexClass.Name', 'Class Name').setInitialWidth(300),
new TextColumnBuilder('Status', 'Status').setInitialWidth(110),
new DateColumnBuilder('CreatedDate', 'Created Date').setInitialWidth(160).setYear('numeric').setMonth('2-digit').setDay('2-digit').setHour('2-digit').setMinute('2-digit'),
new DateColumnBuilder('CompletedDate', 'Completed Date').setInitialWidth(160).setYear('numeric').setMonth('2-digit').setDay('2-digit').setHour('2-digit').setMinute('2-digit'),
new NumberColumnBuilder('TotalJobItems', 'Total').setCellAttributes({ alignment: 'left' }),
new NumberColumnBuilder('JobItemsProcessed', 'Processed').setCellAttributes({ alignment: 'left' }),
new NumberColumnBuilder('NumberOfErrors', 'Errors').setCellAttributes({ alignment: 'left' }),
new TextColumnBuilder('CreatedBy.Name', 'Submitted By').setInitialWidth(150),
new ButtonIconColumnBuilder('abort').setInitialWidth(50).setIconName('utility:close').setDisabled({ fieldName: 'isDisabled' }).setVariant('destructive-text'),
]);
What would be the benefits of such approach? Does anyone have experience with something similar?