Skip to content

Commit

Permalink
fix: display null value as empty string (#6178)
Browse files Browse the repository at this point in the history
  • Loading branch information
ugur-vaadin committed Apr 15, 2024
1 parent 4312d1f commit d5dd56c
Show file tree
Hide file tree
Showing 3 changed files with 55 additions and 25 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -51,14 +51,18 @@ public class TreeGridBasicFeaturesPage extends Div {
private TreeDataProvider<HierarchicalTestBean> inMemoryDataProvider;
private LazyHierarchicalDataProvider lazyDataProvider;
private HierarchicalDataProvider<HierarchicalTestBean, ?> loggingDataProvider;
private TreeDataProvider<HierarchicalTestBean> dataProviderWithNullValues;
private TextArea log;

public TreeGridBasicFeaturesPage() {
initializeDataProviders();
grid = new TreeGrid<>(HierarchicalTestBean.class);
grid.setWidth("100%");
grid.setSelectionMode(SelectionMode.SINGLE);
grid.setColumns("id", HierarchicalTestBean::toString,
grid.setColumns("id",
hierarchicalTestBean -> hierarchicalTestBean.getIndex() < 0
? null
: hierarchicalTestBean.toString(),
Arrays.asList("id", "depth", "index"));
grid.setDataProvider(new LazyHierarchicalDataProvider(3, 2));

Expand Down Expand Up @@ -90,25 +94,8 @@ protected void createActions() {
}

private void initializeDataProviders() {
TreeData<HierarchicalTestBean> data = new TreeData<>();

List<Integer> ints = Arrays.asList(0, 1, 2);

ints.stream().forEach(index -> {
HierarchicalTestBean bean = new HierarchicalTestBean(null, 0,
index);
data.addItem(null, bean);
ints.stream().forEach(childIndex -> {
HierarchicalTestBean childBean = new HierarchicalTestBean(
bean.getId(), 1, childIndex);
data.addItem(bean, childBean);
ints.stream()
.forEach(grandChildIndex -> data.addItem(childBean,
new HierarchicalTestBean(childBean.getId(), 2,
grandChildIndex)));
});
});

TreeData<HierarchicalTestBean> data = getTreeData(
Arrays.asList(0, 1, 2));
inMemoryDataProvider = new CustomTreeDataProvider(data);
lazyDataProvider = new LazyHierarchicalDataProvider(3, 2);
loggingDataProvider = new CustomTreeDataProvider(data) {
Expand All @@ -129,7 +116,27 @@ public Stream<HierarchicalTestBean> fetchChildren(
return super.fetchChildren(query);
}
};
dataProviderWithNullValues = new CustomTreeDataProvider(
getTreeData(Arrays.asList(-1, 0, 1)));
}

private TreeData<HierarchicalTestBean> getTreeData(List<Integer> indexes) {
TreeData<HierarchicalTestBean> data = new TreeData<>();
indexes.stream().forEach(index -> {
HierarchicalTestBean bean = new HierarchicalTestBean(null, 0,
index);
data.addItem(null, bean);
indexes.stream().forEach(childIndex -> {
HierarchicalTestBean childBean = new HierarchicalTestBean(
bean.getId(), 1, childIndex);
data.addItem(bean, childBean);
indexes.stream()
.forEach(grandChildIndex -> data.addItem(childBean,
new HierarchicalTestBean(childBean.getId(), 2,
grandChildIndex)));
});
});
return data;
}

private void log(String txt) {
Expand All @@ -139,13 +146,15 @@ private void log(String txt) {
@SuppressWarnings("unchecked")
private void createDataProviderSelect() {
@SuppressWarnings("rawtypes")
LinkedHashMap<String, DataProvider> options = new LinkedHashMap<>();
LinkedHashMap<String, HierarchicalDataProvider> options = new LinkedHashMap<>();
options.put("LazyHierarchicalDataProvider", lazyDataProvider);
options.put("TreeDataProvider", inMemoryDataProvider);
options.put("LoggingDataProvider", loggingDataProvider);
options.put("DataProviderWithNullValues", dataProviderWithNullValues);

options.entrySet().forEach(entry -> {
addAction(entry.getKey(), () -> grid.setItems(entry.getValue()));
addAction(entry.getKey(),
() -> grid.setDataProvider(entry.getValue()));
});
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.vaadin.flow.component.treegrid.it;

import com.vaadin.flow.testutil.TestPath;
import org.junit.Assert;
import org.junit.Test;
import org.openqa.selenium.By;

@TestPath("vaadin-grid/" + TreeGridBasicFeaturesPage.VIEW)
public class TreeGridNullValueInHierarchyColumnIT extends AbstractTreeGridIT {

@Test
public void dataProviderWithNullValues_nullValueShouldBeDisplayedAsEmptyString() {
open();
setupTreeGrid();
findElement(By.id("DataProviderWithNullValues")).click();

Assert.assertEquals(3, getTreeGrid().getRowCount());
assertCellTexts(0, 0, new String[] { "", "0 | 0", "0 | 1" });
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -575,9 +575,10 @@ public Column<T> addHierarchyColumn(ValueProvider<T, ?> valueProvider) {
+ "${item.name}</vaadin-grid-tree-toggle>")
.withProperty("children",
item -> getDataCommunicator().hasChildren(item))
.withProperty("name",
value -> String.valueOf(valueProvider.apply(value)))
.withFunction("onClick", item -> {
.withProperty("name", value -> {
Object name = valueProvider.apply(value);
return name == null ? "" : String.valueOf(name);
}).withFunction("onClick", item -> {
if (getDataCommunicator().hasChildren(item)) {
if (isExpanded(item)) {
collapse(List.of(item), true);
Expand Down

0 comments on commit d5dd56c

Please sign in to comment.