66import com .vaadin .flow .component .grid .GridSortOrder ;
77import com .vaadin .flow .component .orderedlayout .HorizontalLayout ;
88import com .vaadin .flow .component .orderedlayout .VerticalLayout ;
9+ import com .vaadin .flow .component .page .BrowserWindowResizeEvent ;
10+ import com .vaadin .flow .component .page .BrowserWindowResizeListener ;
911import com .vaadin .flow .component .select .Select ;
1012import com .vaadin .flow .component .textfield .TextField ;
1113import com .vaadin .flow .data .value .ValueChangeMode ;
3032import 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