Skip to content

Commit 37cc591

Browse files
committed
Adapt GridConfiguration
1 parent 67b4f0a commit 37cc591

File tree

8 files changed

+327
-119
lines changed

8 files changed

+327
-119
lines changed

datamanager-app/src/main/java/life/qbic/datamanager/views/demo/ComponentDemo.java

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -149,10 +149,10 @@ private Div filterGridShowCase() {
149149
var personGrid = FilterGrid.create(
150150
Person.class,
151151
SimplePersonFilter.class,
152-
gridPerson,
152+
lazyConfiguration.applyConfiguration(gridPerson),
153153
() -> new SimplePersonFilter(""),
154-
(searchTerm, filter) -> new SimplePersonFilter(searchTerm),
155-
lazyConfiguration
154+
(searchTerm, filter) -> new SimplePersonFilter(searchTerm)
155+
156156
);
157157

158158
personGrid.addFilterUpdateListener(
@@ -169,15 +169,13 @@ private Div filterGridShowCase() {
169169
gridContact.addColumn(Person::lastName).setHeader("Last Name").setKey("lastName");
170170
gridContact.addColumn(Person::age).setHeader("Age").setKey("age");
171171

172-
173172
var contactGrid = FilterGrid.create(
174173
Person.class,
175174
SimplePersonFilter.class,
176-
gridContact,
175+
lazyConfiguration.applyConfiguration(gridContact),
177176
() -> new SimplePersonFilter(""),
178-
(searchTerm, filter) -> new SimplePersonFilter(searchTerm),
179-
lazyConfiguration
180-
);
177+
(searchTerm, filter) -> new SimplePersonFilter(searchTerm));
178+
181179
var filterTabContacts = new FilterGridTab<>("Contacts", contactGrid);
182180

183181
var gridMemoryPerson = new Grid<Person>();
@@ -193,11 +191,10 @@ private Div filterGridShowCase() {
193191
var inMemoryPersonGrid = FilterGrid.create(
194192
Person.class,
195193
SimplePersonFilter.class,
196-
gridMemoryPerson,
194+
contactInMemoryConfiguration.applyConfiguration(gridMemoryPerson),
197195
() -> new SimplePersonFilter(""),
198-
(searchTerm, filter) -> new SimplePersonFilter(searchTerm),
199-
contactInMemoryConfiguration
200-
);
196+
(searchTerm, filter) -> new SimplePersonFilter(searchTerm));
197+
201198
var filterTabInMemoryPerson = new FilterGridTab<>("In Memory Persons", inMemoryPersonGrid);
202199

203200
var tabSheet = new FilterGridTabSheet();

datamanager-app/src/main/java/life/qbic/datamanager/views/general/grid/component/FilterGrid.java

Lines changed: 23 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import java.util.function.BiFunction;
3030
import java.util.function.Supplier;
3131
import java.util.stream.Collectors;
32+
import life.qbic.datamanager.views.general.grid.component.GridConfiguration.ConfiguredGrid;
3233
import life.qbic.logging.api.Logger;
3334
import life.qbic.logging.service.LoggerFactory;
3435
import org.springframework.lang.NonNull;
@@ -107,16 +108,13 @@ public final class FilterGrid<T, F> extends Div {
107108
static final String FLEX_HORIZONTAL_CSS = "flex-horizontal";
108109
static final String GAP_04_CSS = "gap-04";
109110

110-
private static final int DEFAULT_QUERY_SIZE = 150;
111-
private static final int MAX_QUERY_SIZE = 350;
112111
private static final String DEFAULT_ITEM_DISPLAY_LABEL = "item";
113112
private static final Logger log = LoggerFactory.logger(FilterGrid.class);
114113

115114
private final Class<T> type;
116115
private final Class<F> filterType;
117116

118-
private final Grid<T> grid;
119-
private final GridConfiguration<T, F> gridConfiguration;
117+
private final ConfiguredGrid<T, F> configuredGrid;
120118
private final Div selectionDisplay = new SelectionNotification();
121119
private final Div secondaryActionGroup = createSecondaryActionGroup();
122120

@@ -129,36 +127,32 @@ public final class FilterGrid<T, F> extends Div {
129127
public static <T, F> FilterGrid<T, F> create(
130128
Class<T> itemType,
131129
Class<F> filterType,
132-
Grid<T> grid,
130+
ConfiguredGrid<T, F> configuredGrid,
133131
Supplier<F> filterSupplier,
134-
SearchTermFilterCombiner<F> searchTermFilterCombiner,
135-
GridConfiguration<T, F> gridConfiguration) {
132+
SearchTermFilterCombiner<F> searchTermFilterCombiner) {
136133

137-
return new FilterGrid<>(itemType, filterType, grid, filterSupplier,
138-
searchTermFilterCombiner, gridConfiguration);
134+
return new FilterGrid<>(itemType, filterType, configuredGrid, filterSupplier,
135+
searchTermFilterCombiner);
139136
}
140137

141138

142139
private FilterGrid(
143140
Class<T> itemType,
144141
Class<F> filterType,
145-
Grid<T> grid,
142+
ConfiguredGrid<T, F> configuredGrid,
146143
Supplier<F> filterSupplier,
147-
SearchTermFilterCombiner<F> searchTermFilterUpdater,
148-
GridConfiguration<T, F> gridConfiguration) {
144+
SearchTermFilterCombiner<F> searchTermFilterUpdater) {
149145
//assign fields
150146
this.type = Objects.requireNonNull(itemType);
151147
this.filterType = Objects.requireNonNull(filterType);
152-
this.grid = Objects.requireNonNull(grid);
153-
this.gridConfiguration = gridConfiguration;
148+
this.configuredGrid = Objects.requireNonNull(configuredGrid);
154149

155-
configureGridForMultiSelect(grid);
156-
optimizeGrid(grid, DEFAULT_QUERY_SIZE);
157-
gridConfiguration.applyConfiguration(grid);
158150
//construct filter Grid component
159-
constructComponent(grid);
151+
var primaryGridControls = getPrimaryGridControls(configuredGrid.getColumns());
152+
add(primaryGridControls, configuredGrid);
153+
addClassNames("flex-vertical", "gap-03", "height-full", "width-full");
160154

161-
listenToSelection();
155+
forwardGridSelectionEvents();
162156
//update the filter
163157
searchField.addValueChangeListener(
164158
event -> updateFilter(searchTermFilterUpdater, filterSupplier.get(), event.getValue()));
@@ -168,8 +162,8 @@ private FilterGrid(
168162
* Refreshes the grid and clears the selection.
169163
*/
170164
public void refreshAll() {
171-
this.grid.getDataProvider().refreshAll();
172-
this.grid.deselectAll();
165+
this.configuredGrid.refreshAll();
166+
this.configuredGrid.deselectAll();
173167
}
174168

175169

@@ -240,16 +234,9 @@ default F apply(String searchTerm, F filter) {
240234
}
241235

242236

243-
private void constructComponent(Grid<T> grid) {
244-
var primaryGridControls = getPrimaryGridControls(grid.getColumns());
245-
add(primaryGridControls, grid);
246-
addClassNames("flex-vertical", "gap-03", "height-full", "width-full");
247-
248-
}
249-
250-
private void listenToSelection() {
237+
private void forwardGridSelectionEvents() {
251238
updateSelectionDisplay(
252-
this.grid.getSelectionModel().getSelectedItems().size());
239+
this.configuredGrid.getSelectedItems().size());
253240
addSelectionListener(event -> updateSelectionDisplay(event.selectedItems().size()));
254241
}
255242

@@ -265,7 +252,7 @@ private void updateFilter(SearchTermFilterCombiner<F> searchTermFilterCombiner,
265252
F filter,
266253
String searchTerm) {
267254
F updatedFilter = searchTermFilterCombiner.apply(searchTerm, filter);
268-
gridConfiguration.applyConfiguration(grid).setFilter(updatedFilter);
255+
configuredGrid.setFilter(updatedFilter);
269256
fireEvent(new FilterUpdateEvent<>(this.filterType, this, false, filter, updatedFilter));
270257
}
271258

@@ -282,8 +269,7 @@ public Registration addItemCountListener(
282269
ComponentEventListener<ItemCountChangeEvent<FilterGrid<T, F>>> listener) {
283270
ComponentEventListener<ItemCountChangeEvent<?>> itemCountComponentListener = it -> listener.onComponentEvent(
284271
new ItemCountChangeEvent<>(this, it.getItemCount(), it.isItemCountEstimated()));
285-
return gridConfiguration.applyConfiguration(grid).addItemCountChangeListener(
286-
itemCountComponentListener);
272+
return configuredGrid.addItemCountChangeListener(itemCountComponentListener);
287273
}
288274

289275
/**
@@ -292,7 +278,7 @@ public Registration addItemCountListener(
292278
* @return the assumed number of items.
293279
*/
294280
public int getItemCount() {
295-
return grid.getDataCommunicator().getItemCount();
281+
return configuredGrid.getItemCount();
296282
}
297283

298284
/**
@@ -449,20 +435,6 @@ private TextField createSearchField() {
449435
return field;
450436
}
451437

452-
private static void optimizeGrid(Grid<?> grid, int pageSize) {
453-
if (grid.getDataProvider().isInMemory()) {
454-
return;
455-
}
456-
var computedPageSize = Math.clamp(pageSize, 100, MAX_QUERY_SIZE);
457-
grid.setPageSize(computedPageSize);
458-
// Grid height must not be determined by rows in lazy mode
459-
grid.setAllRowsVisible(false);
460-
}
461-
462-
private static boolean hasContent(String text) {
463-
return text != null && !text.isBlank();
464-
}
465-
466438
/**
467439
* Defines a custom placeholder for the search field. Default is <i>"Filter"</i>
468440
* @param placeholder the text to use as placeholder
@@ -537,7 +509,7 @@ public void setSecondaryActionGroup(Button firstButton, Button... buttons) {
537509
* @since 1.12.0
538510
*/
539511
public @NonNull Set<T> selectedElements() {
540-
return grid.getSelectedItems();
512+
return configuredGrid.getSelectedItems();
541513
}
542514

543515
/**
@@ -573,7 +545,7 @@ public void itemDisplayLabel(String label) {
573545
* @see Grid#deselectAll()
574546
*/
575547
public void deselectAll() {
576-
grid.deselectAll();
548+
configuredGrid.deselectAll();
577549
}
578550

579551
/**
@@ -588,7 +560,7 @@ public void deselectAll() {
588560
*/
589561
public Registration addSelectionListener(
590562
ComponentEventListener<FilterGridSelectionEvent<T>> listener) {
591-
return grid.addSelectionListener(it -> listener.onComponentEvent(
563+
return configuredGrid.addSelectionListener(it -> listener.onComponentEvent(
592564
new FilterGridSelectionEvent<>(this, it.getAllSelectedItems(), it.isFromClient())));
593565
}
594566

datamanager-app/src/main/java/life/qbic/datamanager/views/general/grid/component/Filterable.java

Lines changed: 0 additions & 6 deletions
This file was deleted.

0 commit comments

Comments
 (0)