Can we change the background color of a domino-ui datatable row based on some expression or a condition? for example make the row background red if DueDate < Today.
Domino-ui datatable has a built-in plugin called Marker plugin that can mark the row conditionally with different colors, the plugin adds the color as a border to the left border of the row
you can find an example in domino-ui demo here
and if that is not enough you can create your own plugin, like this
import elemental2.dom.HTMLTableRowElement;
import org.dominokit.domino.ui.datatable.DataTable;
import org.dominokit.domino.ui.datatable.TableRow;
import org.dominokit.domino.ui.datatable.plugins.DataTablePlugin;
public class RowColorPlugin<T> implements DataTablePlugin<T> {
@Override
public void onRowAdded(DataTable<T> dataTable, TableRow<T> tableRow) {
T record = tableRow.getRecord();
HTMLTableRowElement row = tableRow.element();
// Add css classes or set css properties in the row element based on the row record to change the row colors
}
}
And here is a sample showing how to use the custom plugin
TableConfig<Contact> tableConfig = new TableConfig<>();
tableConfig
.addColumn(ColumnConfig.<Contact>create("id", "#")
.textAlign("right")
.asHeader()
.setCellRenderer(cell -> TextNode.of(cell.getTableRow().getRecord().getIndex() + 1 + "")))
.addColumn(ColumnConfig.<Contact>create("status", "Status")
.textAlign("center")
.setCellRenderer(cell -> {
if (cell.getTableRow().getRecord().isActive()) {
return Style.of(Icons.ALL.check_circle()).setColor(Color.GREEN_DARKEN_3.getHex()).element();
} else {
return Style.of(Icons.ALL.highlight_off()).setColor(Color.RED_DARKEN_3.getHex()).element();
}
}))
.addColumn(ColumnConfig.<Contact>create("firstName", "First name")
.setCellRenderer(cell -> TextNode.of(cell.getTableRow().getRecord().getName())))
.addColumn(ColumnConfig.<Contact>create("gender", "Gender")
.setCellRenderer(cell -> ContactUiUtils.getGenderElement(cell.getRecord()))
.textAlign("center"))
.addColumn(ColumnConfig.<Contact>create("eyeColor", "Eye color")
.setCellRenderer(cell -> ContactUiUtils.getEyeColorElement(cell.getRecord()))
.textAlign("center"))
.addColumn(ColumnConfig.<Contact>create("balance", "Balance")
.setCellRenderer(cellInfo -> ContactUiUtils.getBalanceElement(cellInfo.getRecord())))
.addColumn(ColumnConfig.<Contact>create("email", "Email")
.setCellRenderer(cell -> TextNode.of(cell.getTableRow().getRecord().getEmail())))
.addColumn(ColumnConfig.<Contact>create("phone", "Phone")
.setCellRenderer(cell -> TextNode.of(cell.getTableRow().getRecord().getPhone())))
.addColumn(ColumnConfig.<Contact>create("badges", "Badges")
.setCellRenderer(cell -> {
if (cell.getTableRow().getRecord().getAge() < 35) {
return Badge.create("Young")
.setBackground(ColorScheme.GREEN.color()).element();
}
return TextNode.of("");
}));
tableConfig.addPlugin(new RowColorPlugin<>(tableCellInfo -> ContactUiUtils.getBalanceColor(tableCellInfo.getRecord())));
LocalListDataStore<Contact> localListDataStore = new LocalListDataStore<>();
DataTable<Contact> defaultTable = new DataTable<>(tableConfig, localListDataStore);
localListDataStore.setData(contactsList);