-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathHeaderFooterStylesView.java
More file actions
120 lines (103 loc) · 3.79 KB
/
HeaderFooterStylesView.java
File metadata and controls
120 lines (103 loc) · 3.79 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
/*-
* #%L
* Grid Helpers Add-on
* %%
* Copyright (C) 2022 - 2026 Flowing Code
* %%
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* #L%
*/
package com.flowingcode.vaadin.addons.gridhelpers.it;
import com.flowingcode.vaadin.addons.gridhelpers.GridHelper;
import com.flowingcode.vaadin.addons.gridhelpers.GridStylesHelper;
import com.flowingcode.vaadin.jsonmigration.InstrumentedRoute;
import com.flowingcode.vaadin.jsonmigration.LegacyClientCallable;
import com.vaadin.flow.component.grid.Grid;
import com.vaadin.flow.component.grid.Grid.Column;
import com.vaadin.flow.component.grid.HeaderRow;
import com.vaadin.flow.component.grid.HeaderRow.HeaderCell;
import com.vaadin.flow.component.html.Div;
import elemental.json.JsonObject;
import elemental.json.JsonValue;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import lombok.RequiredArgsConstructor;
import lombok.experimental.Delegate;
import lombok.experimental.ExtensionMethod;
@SuppressWarnings("serial")
@InstrumentedRoute(HeaderFooterStylesView.ROUTE)
@ExtensionMethod(GridHelper.class)
public class HeaderFooterStylesView extends Div implements HeaderFooterStylesCallables {
public static final String ROUTE = "it/styles";
private Grid<Integer> grid;
public HeaderFooterStylesView() {
setSizeFull();
getElement().getStyle().set("flex-grow", "1");
grid = new Grid<>();
for (int i = 0; i < 5; i++) {
String key = "col " + i;
grid.addColumn(x -> x).setHeader(key).setKey(key);
}
grid.prependHeaderRow();
add(grid);
}
@Override
@LegacyClientCallable
public JsonValue $call(JsonObject invocation) {
return HeaderFooterStylesCallables.super.$call(invocation);
}
@RequiredArgsConstructor
private abstract class StylesWrapper {
@Delegate
private final GridStylesHelper styles;
}
private final class HeaderCellWrapperImpl extends StylesWrapper implements HeaderCellWrapper {
public HeaderCellWrapperImpl(GridStylesHelper styles) {
super(styles);
}
}
private final class HeaderRowWrapperImpl extends StylesWrapper implements HeaderRowWrapper {
private final HeaderRow row;
public HeaderRowWrapperImpl(HeaderRow row) {
super(GridHelper.getHeaderStyles(grid, row));
this.row = row;
}
@Override
public HeaderCellWrapper getCell(int columnIndex) {
HeaderCell cell = row.getCell(grid.getColumns().get(columnIndex));
return new HeaderCellWrapperImpl(grid.getHeaderStyles(cell));
}
@Override
public HeaderCellWrapper join(int... columnIndexes) {
HeaderCell cell = row.join(IntStream.of(columnIndexes)
.mapToObj(grid.getColumns()::get)
.toArray(Column[]::new));
cell.setText("join " + IntStream.of(columnIndexes)
.mapToObj(Integer::toString)
.collect(Collectors.joining()));
return new HeaderCellWrapperImpl(GridHelper.getHeaderStyles(grid, cell));
}
}
@Override
public HeaderRowWrapper getRow(int rowIndex) {
HeaderRow row = grid.getHeaderRows().get(rowIndex);
return new HeaderRowWrapperImpl(row);
}
@Override
public void setColumnOrder(int... columnIndexes) {
List<Column<Integer>> columns = grid.getColumns();
grid.setColumnOrder(
IntStream.of(columnIndexes).mapToObj(columns::get).collect(Collectors.toList()));
}
}