From 0556a544ad853c554d58bab2848091e2d5d91be0 Mon Sep 17 00:00:00 2001 From: Steffengreiner Date: Fri, 14 Jul 2023 10:56:02 +0200 Subject: [PATCH] WIP GridPro Based Batch implementation --- .../samples/BatchDetailsComponent.java | 74 ++++++++++++++++--- 1 file changed, 63 insertions(+), 11 deletions(-) diff --git a/vaadinfrontend/src/main/java/life/qbic/datamanager/views/projects/project/samples/BatchDetailsComponent.java b/vaadinfrontend/src/main/java/life/qbic/datamanager/views/projects/project/samples/BatchDetailsComponent.java index d31f0c403..f07d51484 100644 --- a/vaadinfrontend/src/main/java/life/qbic/datamanager/views/projects/project/samples/BatchDetailsComponent.java +++ b/vaadinfrontend/src/main/java/life/qbic/datamanager/views/projects/project/samples/BatchDetailsComponent.java @@ -2,13 +2,14 @@ import com.vaadin.flow.component.button.Button; import com.vaadin.flow.component.button.ButtonVariant; -import com.vaadin.flow.component.grid.Grid; -import com.vaadin.flow.component.grid.GridVariant; import com.vaadin.flow.component.grid.editor.Editor; +import com.vaadin.flow.component.gridpro.GridPro; +import com.vaadin.flow.component.gridpro.ItemUpdater; import com.vaadin.flow.component.html.Div; import com.vaadin.flow.component.html.Span; import com.vaadin.flow.component.icon.Icon; import com.vaadin.flow.component.icon.VaadinIcon; +import com.vaadin.flow.data.binder.Binder; import com.vaadin.flow.spring.annotation.SpringComponent; import com.vaadin.flow.spring.annotation.UIScope; import com.vaadin.flow.theme.lumo.LumoUtility.IconSize; @@ -17,6 +18,7 @@ import java.io.Serializable; import java.util.Collection; import java.util.List; +import java.util.Objects; import life.qbic.datamanager.views.general.PageArea; import life.qbic.datamanager.views.projects.project.ProjectViewPage; import life.qbic.datamanager.views.projects.project.samples.registration.batch.BatchDeletionEvent; @@ -41,7 +43,7 @@ public class BatchDetailsComponent extends PageArea implements Serializable { @Serial private static final long serialVersionUID = 4047815658668024042L; private final Div content = new Div(); - Grid batchGrid = new Grid<>(); + GridPro batchGrid = new GridPro<>(); public BatchDetailsComponent() { this.addClassName("batch-details-component"); @@ -60,13 +62,19 @@ private void layoutComponent() { private void createBatchGrid() { Editor editor = batchGrid.getEditor(); - batchGrid.addColumn(BatchPreview::name).setHeader("Name"); - batchGrid.addColumn(batchPreview -> batchPreview.experiment.getName()).setHeader("Experiment"); - batchGrid.addColumn(BatchPreview::date).setHeader("Date"); + Binder batchPreviewBinder = new Binder<>(BatchPreview.class); + editor.setBinder(batchPreviewBinder); + batchGrid.addEditColumn(BatchPreview::getName).text(BatchPreview::setName) + .setHeader("Name").setResizable(true); + batchGrid.addEditColumn(batchPreview -> batchPreview.experiment.getName()) + .select(styleExperimentValue, createExperimentList()).setHeader("Experiment") + .setResizable(true); + batchGrid.addEditColumn(BatchPreview::getDate).text(BatchPreview::setDate).setHeader("Date") + .setResizable(true); batchGrid.addComponentColumn(batchPreview -> { Icon editIcon = VaadinIcon.EDIT.create(); Button editButton = new Button(editIcon); - editButton.addThemeVariants(ButtonVariant.LUMO_ICON); + editButton.addThemeVariants(ButtonVariant.LUMO_TERTIARY_INLINE); editIcon.addClassName(IconSize.SMALL); editButton.addClickListener(e -> { if (editor.isOpen()) { @@ -74,9 +82,17 @@ private void createBatchGrid() { } batchGrid.getEditor().editItem(batchPreview); }); - return editIcon; - }); - batchGrid.addThemeVariants(GridVariant.LUMO_COMPACT); + return editButton; + }).setWidth("3em").setFlexGrow(0); + batchGrid.setEditOnClick(true); + + } + + private static final ItemUpdater styleExperimentValue = (batchPreview, string) -> string = batchPreview.experiment.getName(); + + private List createExperimentList() { + return List.of("Experiment 1", "Experiment 2", + "Experiment 3", "Experiment 4"); } private Collection createDummyBatchPreviews() { @@ -90,8 +106,44 @@ private void setGridItems() { batchGrid.setItems(createDummyBatchPreviews()); } - private record BatchPreview(String name, String date, Experiment experiment) { + private class BatchPreview { + + private String name; + private String date; + private Experiment experiment; + + public BatchPreview(String name, String date, Experiment experiment) { + Objects.requireNonNull(name); + Objects.requireNonNull(date); + Objects.requireNonNull(experiment); + this.name = name; + this.date = date; + this.experiment = experiment; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getDate() { + return date; + } + + public void setDate(String date) { + this.date = date; + } + + public Experiment getExperiment() { + return experiment; + } + public void setExperiment(Experiment experiment) { + this.experiment = experiment; + } } @FunctionalInterface