Skip to content

Commit eddec66

Browse files
committed
🔛 Make compendium table responsive
1 parent 5ca711a commit eddec66

File tree

1 file changed

+29
-7
lines changed

1 file changed

+29
-7
lines changed

src/main/java/org/cleancode/journal/view/CompendiumView.java

Lines changed: 29 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
import com.vaadin.flow.component.grid.GridSortOrder;
77
import com.vaadin.flow.component.orderedlayout.HorizontalLayout;
88
import com.vaadin.flow.component.orderedlayout.VerticalLayout;
9+
import com.vaadin.flow.component.page.BrowserWindowResizeEvent;
10+
import com.vaadin.flow.component.page.BrowserWindowResizeListener;
911
import com.vaadin.flow.component.select.Select;
1012
import com.vaadin.flow.component.textfield.TextField;
1113
import com.vaadin.flow.data.value.ValueChangeMode;
@@ -30,11 +32,13 @@
3032
import static java.util.stream.Collectors.toList;
3133

3234
@Route(layout = MainView.class)
33-
public class CompendiumView extends VerticalLayout {
35+
public class CompendiumView extends VerticalLayout implements BrowserWindowResizeListener {
3436

3537
private final ViewMode defaultViewMode = ViewMode.Table;
3638
private final Grid<GradeTopic> table;
3739
private Accordion tree;
40+
private Grid.Column<GradeTopic> columnGrade;
41+
private Grid.Column<GradeTopic> columnResponsibility;
3842

3943
public CompendiumView(Profile profile, IGradeService gradeService, IAchievementService achievementService) {
4044
setHeightFull();
@@ -54,6 +58,9 @@ public CompendiumView(Profile profile, IGradeService gradeService, IAchievementS
5458
setViewMode(defaultViewMode);
5559

5660
add(new AddSpeedDial(profile, gradeService, achievementService));
61+
62+
UI.getCurrent().getPage().addBrowserWindowResizeListener(this);
63+
UI.getCurrent().getPage().retrieveExtendedClientDetails(details -> resizeTable(details.getWindowInnerWidth()));
5764
}
5865

5966
private TextField createFilter(IGradeService gradeService) {
@@ -88,7 +95,6 @@ private Accordion createTree(Collection<GradeTopic> gradeTopics) {
8895
Accordion tree = new Accordion();
8996
Map<Grade, List<GradeTopic>> groupedTopics = gradeTopics.stream().collect(groupingBy(GradeTopic::getGrade));
9097
groupedTopics.keySet().stream().sorted(reverseOrder()).forEach(grade -> addGrade(tree, grade, groupedTopics.get(grade)));
91-
9298
tree.close();
9399
return tree;
94100
}
@@ -99,19 +105,20 @@ private Grid<GradeTopic> creteTable(Collection<GradeTopic> gradeTopics) {
99105

100106
Grid.Column<GradeTopic> columnName = table.addColumn(GradeTopic::getName).
101107
setHeader(getTranslation("domain.grade.name")).
102-
setSortable(true);
108+
setSortable(true).setAutoWidth(true);
103109

104-
table.addColumn(this::formatTopic).
110+
columnGrade = table.addColumn(this::formatTopic).
105111
setHeader(getTranslation("domain.grade.grade")).
106-
setSortable(true);
112+
setSortable(true).setAutoWidth(true);
107113

108-
table.addColumn(topic -> topic.getGradeRating().getResponsibility()).
114+
columnResponsibility = table.addColumn(topic -> topic.getGradeRating().getResponsibility()).
109115
setHeader(getTranslation("domain.grade.rating.responsibility")).
110-
setSortable(true);
116+
setSortable(true).setAutoWidth(true);
111117

112118
table.sort(List.of(new GridSortOrder<>(columnName, ASCENDING)));
113119

114120
table.addSelectionListener(event -> event.getFirstSelectedItem().ifPresent(this::openGradeTopic));
121+
table.recalculateColumnWidths();
115122
return table;
116123
}
117124

@@ -157,6 +164,21 @@ public void setViewMode(ViewMode viewMode) {
157164
}
158165
}
159166

167+
@Override
168+
public void browserWindowResized(BrowserWindowResizeEvent browserWindowResizeEvent) {
169+
resizeTable(browserWindowResizeEvent.getWidth());
170+
}
171+
172+
/**
173+
* Hide column grade and responsibility if there is not enough space to display them.
174+
*
175+
* @param windowWidth in pixels
176+
*/
177+
private void resizeTable(int windowWidth) {
178+
columnGrade.setVisible(windowWidth > 500);
179+
columnResponsibility.setVisible(windowWidth > 580);
180+
}
181+
160182
private enum ViewMode {Tree, Table}
161183

162184
public void openGradeTopic(GradeTopic topic) {

0 commit comments

Comments
 (0)