From 45971518eef3507f16c9aa354a646d6b816f77dc Mon Sep 17 00:00:00 2001 From: Thomas Peetz Date: Mon, 17 Mar 2025 17:44:49 +0100 Subject: [PATCH] change ModuleData view --- .../kontor/admin/views/ModuleDataView.java | 58 +++++++++++++++++-- 1 file changed, 54 insertions(+), 4 deletions(-) diff --git a/springboot/src/main/java/de/thpeetz/kontor/admin/views/ModuleDataView.java b/springboot/src/main/java/de/thpeetz/kontor/admin/views/ModuleDataView.java index bc335f3..caf3c2f 100644 --- a/springboot/src/main/java/de/thpeetz/kontor/admin/views/ModuleDataView.java +++ b/springboot/src/main/java/de/thpeetz/kontor/admin/views/ModuleDataView.java @@ -2,7 +2,12 @@ package de.thpeetz.kontor.admin.views; import com.vaadin.flow.component.Component; import com.vaadin.flow.component.button.Button; +import com.vaadin.flow.component.button.ButtonVariant; +import com.vaadin.flow.component.contextmenu.ContextMenu; +import com.vaadin.flow.component.contextmenu.MenuItem; import com.vaadin.flow.component.grid.Grid; +import com.vaadin.flow.component.icon.Icon; +import com.vaadin.flow.component.icon.VaadinIcon; import com.vaadin.flow.component.orderedlayout.HorizontalLayout; import com.vaadin.flow.component.orderedlayout.VerticalLayout; import com.vaadin.flow.component.textfield.TextField; @@ -14,6 +19,7 @@ import de.thpeetz.kontor.admin.data.ModuleData; import de.thpeetz.kontor.admin.services.ModuleService; import de.thpeetz.kontor.common.views.MainLayout; import jakarta.annotation.security.RolesAllowed; +import lombok.Getter; import lombok.extern.slf4j.Slf4j; import org.springframework.context.annotation.Scope; @@ -25,11 +31,35 @@ import org.springframework.context.annotation.Scope; @PageTitle("Module Data | Admin | Kontor") public class ModuleDataView extends VerticalLayout { - Grid grid = new Grid<>(ModuleData.class); + Grid grid = new Grid<>(ModuleData.class, false); + Grid.Column idColumn = grid.addColumn(ModuleData::getId) + .setHeader("ID").setResizable(true).setSortable(true); + Grid.Column nameColumn = grid.addColumn(ModuleData::getModuleName) + .setHeader("Name").setResizable(true).setSortable(true); + Grid.Column importColumn = grid.addComponentColumn(moduleData -> createStatusIcon(moduleData.getImportData())) + .setHeader("Import Data").setWidth("6rem").setSortable(true); + TextField filterText = new TextField(); + @Getter ModuleDataForm form; ModuleService service; + private static class ColumnToggleContextMenu extends ContextMenu { + public ColumnToggleContextMenu(Component target) { + super(target); + setOpenOnClick(true); + } + + void addColumnToggleItem(String label, Grid.Column column) { + MenuItem menuItem = this.addItem(label, e -> { + column.setVisible(e.getSource().isChecked()); + }); + menuItem.setCheckable(true); + menuItem.setChecked(column.isVisible()); + menuItem.setKeepOpen(true); + } + } + public ModuleDataView(ModuleService service) { this.service = service; addClassName("moduleData-view"); @@ -44,7 +74,7 @@ public class ModuleDataView extends VerticalLayout { private void configureGrid() { grid.addClassName("moduleData-grid"); grid.setSizeFull(); - grid.setColumns("moduleName", "importData"); + //grid.setColumns("moduleName", "importData"); grid.getColumns().forEach(col -> col.setAutoWidth(true)); grid.asSingleSelect().addValueChangeListener(event -> editModuleData(event.getValue())); } @@ -58,7 +88,20 @@ public class ModuleDataView extends VerticalLayout { form.addCloseListener(e -> closeEditor()); } - private void saveModuleData(ModuleDataForm.SaveEvent event) { + private Icon createStatusIcon(boolean status) { + Icon icon; + if (status) { + icon = VaadinIcon.CHECK.create(); + icon.getElement().getThemeList().add("badge success"); + } else { + icon = VaadinIcon.CLOSE_SMALL.create(); + icon.getElement().getThemeList().add("badge error"); + } + icon.getStyle().set("padding", "var(--lumo-space-xs"); + return icon; + } + + private void saveModuleData(ModuleDataForm.SaveEvent event) { ModuleData moduleData = event.getModuleData(); service.saveModuleData(moduleData); updateList(); @@ -86,7 +129,14 @@ public class ModuleDataView extends VerticalLayout { filterText.setValueChangeMode(ValueChangeMode.LAZY); filterText.addValueChangeListener(e -> updateList()); Button addModuleDataButton = new Button("Add module", click -> addModuleData()); - HorizontalLayout toolbar = new HorizontalLayout(filterText, addModuleDataButton); + + Button menuButton = new Button("Show/Hide Columns"); + menuButton.addThemeVariants(ButtonVariant.LUMO_TERTIARY); + ColumnToggleContextMenu columnToggleContextMenu = new ColumnToggleContextMenu(menuButton); + columnToggleContextMenu.addColumnToggleItem("ID", idColumn); + columnToggleContextMenu.addColumnToggleItem("Module Name", nameColumn); + columnToggleContextMenu.addColumnToggleItem("Import Data", importColumn); + HorizontalLayout toolbar = new HorizontalLayout(filterText, addModuleDataButton, menuButton); toolbar.addClassName("toolbar"); return toolbar; }