5
0
mirror of https://github.com/AJMicke/KickerELO.git synced 2026-03-11 13:31:02 +01:00

Allow searching for teams in 2vs2 match history

This commit is contained in:
Anton Micke
2025-04-02 16:07:17 +02:00
committed by AJMicke
parent 975a27a95b
commit 5409067226

View File

@@ -4,6 +4,7 @@ import com.vaadin.flow.component.grid.Grid;
import com.vaadin.flow.component.grid.GridSortOrder; import com.vaadin.flow.component.grid.GridSortOrder;
import com.vaadin.flow.component.grid.dataview.GridListDataView; import com.vaadin.flow.component.grid.dataview.GridListDataView;
import com.vaadin.flow.component.html.H2; import com.vaadin.flow.component.html.H2;
import com.vaadin.flow.component.html.Paragraph;
import com.vaadin.flow.component.icon.Icon; import com.vaadin.flow.component.icon.Icon;
import com.vaadin.flow.component.icon.VaadinIcon; import com.vaadin.flow.component.icon.VaadinIcon;
import com.vaadin.flow.component.orderedlayout.HorizontalLayout; import com.vaadin.flow.component.orderedlayout.HorizontalLayout;
@@ -27,8 +28,8 @@ public class History2vs2View extends VerticalLayout {
Grid<Ergebnis2vs2> grid = new Grid<>(Ergebnis2vs2.class); Grid<Ergebnis2vs2> grid = new Grid<>(Ergebnis2vs2.class);
GridListDataView<Ergebnis2vs2> dataView = grid.setItems(res); GridListDataView<Ergebnis2vs2> dataView = grid.setItems(res);
HorizontalLayout filterLayout = new HorizontalLayout(); HorizontalLayout team1Layout = new HorizontalLayout();
filterLayout.setWidth("95%"); team1Layout.setWidth("95%");
TextField filter1 = new TextField(); TextField filter1 = new TextField();
filter1.setPlaceholder("Spieler"); filter1.setPlaceholder("Spieler");
filter1.setPrefixComponent(new Icon(VaadinIcon.SEARCH)); filter1.setPrefixComponent(new Icon(VaadinIcon.SEARCH));
@@ -41,8 +42,23 @@ public class History2vs2View extends VerticalLayout {
filter2.setValueChangeMode(ValueChangeMode.EAGER); filter2.setValueChangeMode(ValueChangeMode.EAGER);
filter2.addValueChangeListener(event -> dataView.refreshAll()); filter2.addValueChangeListener(event -> dataView.refreshAll());
filter2.setMaxWidth("50%"); filter2.setMaxWidth("50%");
team1Layout.add(new Paragraph("Team 1"), filter1, filter2);
filterLayout.add(filter1, filter2); HorizontalLayout team2Layout = new HorizontalLayout();
team1Layout.setWidth("95%");
TextField filter3 = new TextField();
filter3.setPlaceholder("Spieler");
filter3.setPrefixComponent(new Icon(VaadinIcon.SEARCH));
filter3.setValueChangeMode(ValueChangeMode.EAGER);
filter3.addValueChangeListener(event -> dataView.refreshAll());
filter3.setMaxWidth("50%");
TextField filter4 = new TextField();
filter4.setPlaceholder("Spieler");
filter4.setPrefixComponent(new Icon(VaadinIcon.SEARCH));
filter4.setValueChangeMode(ValueChangeMode.EAGER);
filter4.addValueChangeListener(event -> dataView.refreshAll());
filter4.setMaxWidth("50%");
team2Layout.add(new Paragraph("Team 2"), filter3, filter4);
grid.removeColumnByKey("id"); grid.removeColumnByKey("id");
Grid.Column<Ergebnis2vs2> winnerFront = grid.getColumnByKey("gewinnerVorn"); Grid.Column<Ergebnis2vs2> winnerFront = grid.getColumnByKey("gewinnerVorn");
@@ -64,34 +80,26 @@ public class History2vs2View extends VerticalLayout {
grid.sort(List.of(sortOrder)); grid.sort(List.of(sortOrder));
dataView.addFilter(result -> { dataView.addFilter(result -> {
String name1 = result.getGewinnerVorn().getName().toLowerCase(); String winF = result.getGewinnerVorn().getName().toLowerCase();
String name2 = result.getVerliererVorn().getName().toLowerCase(); String losF = result.getVerliererVorn().getName().toLowerCase();
String name3 = result.getVerliererHinten().getName().toLowerCase(); String losB = result.getVerliererHinten().getName().toLowerCase();
String name4 = result.getGewinnerHinten().getName().toLowerCase(); String winB = result.getGewinnerHinten().getName().toLowerCase();
String s1 = filter1.getValue(); String t11 = filter1.getValue() != null ? filter1.getValue().toLowerCase() : "";
if (s1 != null) s1 = s1.toLowerCase(); String t12 = filter2.getValue() != null ? filter2.getValue().toLowerCase() : "";
boolean p1 = !(s1 == null || s1.isEmpty()); String t21 = filter3.getValue() != null ? filter3.getValue().toLowerCase() : "";
String s2 = filter2.getValue(); String t22 = filter4.getValue() != null ? filter4.getValue().toLowerCase() : "";
if (s2 != null) s2 = s2.toLowerCase(); return checkTeamFits(t11, t12, winF, winB) && checkTeamFits(t21, t22, losF, losB)
boolean p2 = !(s2 == null || s2.isEmpty()); || checkTeamFits(t11, t12, losF, losB) && checkTeamFits(t21, t22, winF, winB);
if (p1 && p2) {
return name1.contains(s1) && name2.contains(s2) || name2.contains(s1) && name1.contains(s2)
|| name1.contains(s1) && name3.contains(s2) || name3.contains(s1) && name1.contains(s2)
|| name1.contains(s1) && name4.contains(s2) || name4.contains(s1) && name1.contains(s2)
|| name2.contains(s1) && name3.contains(s2) || name3.contains(s1) && name2.contains(s2)
|| name2.contains(s1) && name4.contains(s2) || name4.contains(s1) && name2.contains(s2)
|| name3.contains(s1) && name4.contains(s2) || name4.contains(s1) && name3.contains(s2);
}
if (p1) {
return name1.contains(s1) || name2.contains(s1) || name3.contains(s1) || name4.contains(s1);
}
if (p2) {
return name1.contains(s2) || name2.contains(s2) || name3.contains(s2) || name4.contains(s2);
}
return true;
}); });
add(subheading, filterLayout, grid); add(subheading, team1Layout, team2Layout, grid);
}
private boolean checkTeamFits(String p1, String p2, String tp1, String tp2) {
if (p1.isBlank() && p2.isBlank()) return true;
if (p1.isBlank()) return tp1.contains(p2) || tp2.contains(p2);
if (p2.isBlank()) return tp1.contains(p1) || tp2.contains(p1);
return (tp1.contains(p1) && tp2.contains(p2)) || (tp2.contains(p1) && tp1.contains(p2));
} }
} }