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

WIP profile view

This commit is contained in:
Sebastian Beckmann
2025-09-09 15:39:33 +02:00
parent 3e55606ef8
commit 6fd2d755ad
2 changed files with 88 additions and 0 deletions

View File

@@ -55,6 +55,7 @@ public class KickerAppLayout extends AppLayout {
SideNav general = new SideNav("Allgemein"); SideNav general = new SideNav("Allgemein");
general.setCollapsible(true); general.setCollapsible(true);
general.addItem(new SideNavItem("Spielerliste", PlayerListView.class, VaadinIcon.GROUP.create()), general.addItem(new SideNavItem("Spielerliste", PlayerListView.class, VaadinIcon.GROUP.create()),
new SideNavItem("Profil", ProfileView.class, VaadinIcon.USER.create()),
new SideNavItem("Verwaltung", AdminView.class, VaadinIcon.COG.create())); new SideNavItem("Verwaltung", AdminView.class, VaadinIcon.COG.create()));
SideNav nav1 = new SideNav("1 vs 1"); SideNav nav1 = new SideNav("1 vs 1");
nav1.setCollapsible(true); nav1.setCollapsible(true);

View File

@@ -0,0 +1,87 @@
package org.kickerelo.kickerelo.views;
import com.vaadin.flow.component.button.Button;
import com.vaadin.flow.component.combobox.ComboBox;
import com.vaadin.flow.component.html.H1;
import com.vaadin.flow.component.html.Paragraph;
import com.vaadin.flow.component.notification.Notification;
import com.vaadin.flow.component.notification.NotificationVariant;
import com.vaadin.flow.component.orderedlayout.VerticalLayout;
import com.vaadin.flow.router.Route;
import org.kickerelo.kickerelo.data.Spieler;
import org.kickerelo.kickerelo.repository.AuthentikUserRepository;
import org.kickerelo.kickerelo.repository.Ergebnis1vs1Repository;
import org.kickerelo.kickerelo.repository.Ergebnis2vs2Repository;
import org.kickerelo.kickerelo.repository.SpielerRepository;
import org.kickerelo.kickerelo.service.KickerEloService;
import org.kickerelo.kickerelo.util.AccessControlService;
@Route("profile")
public class ProfileView extends VerticalLayout {
private final AccessControlService accessControlService;
private final Ergebnis1vs1Repository ergebnis1vs1;
private final Ergebnis2vs2Repository ergebnis2vs2;
private final SpielerRepository spieler;
private final KickerEloService eloService;
private final AuthentikUserRepository userRepository;
public ProfileView(Ergebnis1vs1Repository ergebnis1vs1, Ergebnis2vs2Repository ergebnis2vs2, SpielerRepository spielerRepository, AccessControlService accessControlService, KickerEloService eloService, AuthentikUserRepository userRepository) {
this.ergebnis1vs1 = ergebnis1vs1;
this.ergebnis2vs2 = ergebnis2vs2;
this.spieler = spielerRepository;
this.accessControlService = accessControlService;
this.eloService = eloService;
this.userRepository = userRepository;
add(new H1("Profil"));
accessControlService.getCurrentUser().ifPresentOrElse(user -> {
Paragraph p1 = new Paragraph("Hallo, %s!".formatted(user.getName()));
add(p1);
user.getSpieler().ifPresentOrElse(
spieler -> {
var p2 = new Paragraph("Verbundene*r Spieler*in: %s".formatted(spieler.getName()));
Button buttonUnlink = new Button("Spieler*in trennen");
buttonUnlink.addClickListener(event -> {
spieler.setAuthentikUser(null);
user.setSpieler(null);
spielerRepository.save(spieler);
userRepository.save(user);
// TODO: Refresh
});
buttonUnlink.setDisableOnClick(true);
add(p2, new Paragraph("TODO: Hier könnten Stats angezeigt werden"), buttonUnlink);
},
() -> {
var p2 = new Paragraph("Kein*e Spieler*in verbunden.");
ComboBox<Spieler> playerSelect = new ComboBox<>("Neue*n Spieler*in verbinden");
playerSelect.setItems(eloService.getSpielerEntities());
playerSelect.setPlaceholder("Spieler auswählen");
Button submitButton = new Button("Speichern");
submitButton.addClickListener(event -> {
playerSelect.getOptionalValue().ifPresentOrElse(spieler -> {
if (spieler.getAuthentikUser().isPresent()) {
submitButton.setEnabled(true);
Notification.show("Spieler*in ist schon mit einem*einer User*in verbunden.").addThemeVariants(NotificationVariant.LUMO_ERROR);
return;
}
spieler.setAuthentikUser(user);
user.setSpieler(spieler);
spielerRepository.save(spieler);
userRepository.save(user);
//TODO: Refresh page
}, () -> {
submitButton.setEnabled(true);
Notification.show("Kein*e Spieler*in ausgewählt.").addThemeVariants(NotificationVariant.LUMO_ERROR);
});
});
submitButton.setDisableOnClick(true);
var p3 = new Paragraph();
p3.add(playerSelect, submitButton);
add(p2, p3);
});
}, () -> add(new Paragraph("Du musst dich einloggen, um dein Profil zu sehen.")));
}
}