diff --git a/.gitignore b/.gitignore index 3c3b11f..c60a598 100644 --- a/.gitignore +++ b/.gitignore @@ -1,9 +1,10 @@ .idea/ +.theia/ +.vscode/ __pycache__/ bonus/ icons/ icons-shadowless/ -.vscode/ springboot/.factorypath java-ee/.settings java-ee/.project diff --git a/kontor-spring/src/main/java/de/thpeetz/kontor/admin/views/MetaDataView.java b/kontor-spring/src/main/java/de/thpeetz/kontor/admin/views/MetaDataView.java index 2db89d0..6137f3e 100644 --- a/kontor-spring/src/main/java/de/thpeetz/kontor/admin/views/MetaDataView.java +++ b/kontor-spring/src/main/java/de/thpeetz/kontor/admin/views/MetaDataView.java @@ -95,7 +95,7 @@ public class MetaDataView extends VerticalLayout { modifiedColumn.setVisible(false); versionColumn.setVisible(false); grid.setMultiSort(true); - List sortOrder = new ArrayList(); + List> sortOrder = new ArrayList<>(); sortOrder.add(new GridSortOrder(tableColumn, SortDirection.ASCENDING)); sortOrder.add(new GridSortOrder(columnOrderColumn, SortDirection.ASCENDING)); grid.sort(sortOrder); @@ -111,19 +111,6 @@ public class MetaDataView extends VerticalLayout { form.addCloseListener(e -> closeEditor()); } - private void saveMetaData(MetaDataForm.SaveEvent event) { - MetaDataColumn metaDataColumn = event.getMetaDataColumn(); - service.saveMetaDataColumn(metaDataColumn); - updateList(); - closeEditor(); - } - - private void deleteMetaData(MetaDataForm.DeleteEvent event) { - service.deleteMetaDataColumn(event.getMetaDataColumn()); - updateList(); - closeEditor(); - } - private Component getContent() { HorizontalLayout content = new HorizontalLayout(grid, form); content.setFlexGrow(2, grid); @@ -166,6 +153,19 @@ public class MetaDataView extends VerticalLayout { return toolbar; } + private void saveMetaData(MetaDataForm.SaveEvent event) { + MetaDataColumn metaDataColumn = event.getMetaDataColumn(); + service.saveMetaDataColumn(metaDataColumn); + updateList(); + closeEditor(); + } + + private void deleteMetaData(MetaDataForm.DeleteEvent event) { + service.deleteMetaDataColumn(event.getMetaDataColumn()); + updateList(); + closeEditor(); + } + public void editMetaData(MetaDataColumn metaDataColumn) { if (metaDataColumn == null) { closeEditor(); diff --git a/kontor-spring/src/main/java/de/thpeetz/kontor/comics/data/Issue.java b/kontor-spring/src/main/java/de/thpeetz/kontor/comics/data/Issue.java index 5a36f7d..d63f924 100644 --- a/kontor-spring/src/main/java/de/thpeetz/kontor/comics/data/Issue.java +++ b/kontor-spring/src/main/java/de/thpeetz/kontor/comics/data/Issue.java @@ -39,4 +39,8 @@ public class Issue extends AbstractEntity { private Boolean isRead; private Boolean inStock; + + public String getComicTitle() { + return comic.getTitle(); + } } diff --git a/kontor-spring/src/main/java/de/thpeetz/kontor/comics/views/IssueView.java b/kontor-spring/src/main/java/de/thpeetz/kontor/comics/views/IssueView.java index 4b9d58c..f77bf99 100644 --- a/kontor-spring/src/main/java/de/thpeetz/kontor/comics/views/IssueView.java +++ b/kontor-spring/src/main/java/de/thpeetz/kontor/comics/views/IssueView.java @@ -1,5 +1,10 @@ package de.thpeetz.kontor.comics.views; +import com.vaadin.flow.component.button.ButtonVariant; +import com.vaadin.flow.component.grid.GridSortOrder; +import com.vaadin.flow.data.provider.SortDirection; +import de.thpeetz.kontor.common.views.ColumnToggleContextMenu; +import de.thpeetz.kontor.common.views.StatusIcon; import org.springframework.context.annotation.Scope; import com.vaadin.flow.component.Component; @@ -18,8 +23,12 @@ import de.thpeetz.kontor.comics.data.Issue; import de.thpeetz.kontor.comics.services.ComicService; import de.thpeetz.kontor.common.views.MainLayout; import jakarta.annotation.security.PermitAll; +import lombok.Getter; import lombok.extern.slf4j.Slf4j; +import java.util.ArrayList; +import java.util.List; + @Slf4j @SpringComponent @Scope("prototype") @@ -28,8 +37,26 @@ import lombok.extern.slf4j.Slf4j; @PageTitle("Issue | Comics | Kontor") public class IssueView extends VerticalLayout { - Grid grid = new Grid<>(Issue.class); + @Getter + Grid grid = new Grid<>(Issue.class, false); + Grid.Column idColumn = grid.addColumn(Issue::getId) + .setHeader("ID").setResizable(true).setSortable(true); + Grid.Column createdColumn = grid.addColumn(Issue::getCreatedDate) + .setHeader("Erstellt").setResizable(true).setSortable(true); + Grid.Column modifiedColumn = grid.addColumn(Issue::getLastModifiedDate) + .setHeader("GeƤndert").setResizable(true).setSortable(true); + Grid.Column versionColumn = grid.addColumn(Issue::getVersion) + .setHeader("Version").setResizable(true).setSortable(true); + Grid.Column titleColumn = grid.addColumn(Issue::getComicTitle) + .setHeader("Comic").setResizable(true).setSortable(true); + Grid.Column issueNumberColumn = grid.addColumn(Issue::getIssueNumber) + .setHeader("Heft Nummer").setResizable(true).setSortable(true); + Grid.Column isReadColumn = grid.addComponentColumn(issueColumn -> StatusIcon.create(issueColumn.getIsRead())) + .setHeader("Gelesen?").setWidth("6rem").setSortable(true); + Grid.Column inStockColumn = grid.addComponentColumn(issueColumn -> StatusIcon.create(issueColumn.getInStock())) + .setHeader("Im Bestand?").setWidth("6rem").setSortable(true); ComboBox comicFilter = new ComboBox<>("Comic"); + @Getter IssueForm form; ComicService service; @@ -44,22 +71,22 @@ public class IssueView extends VerticalLayout { updateList(); } - public Grid getGrid() { - return grid; - } - private void configureGrid() { grid.addClassName("issue-grid"); grid.setSizeFull(); - grid.setColumns("comic.title", "issueNumber", "isRead", "inStock"); grid.getColumns().forEach(col -> col.setAutoWidth(true)); + idColumn.setVisible(false); + createdColumn.setVisible(false); + modifiedColumn.setVisible(false); + versionColumn.setVisible(false); + grid.setMultiSort(true); + List> sortOrder = new ArrayList<>(); + sortOrder.add(new GridSortOrder(titleColumn, SortDirection.ASCENDING)); + sortOrder.add(new GridSortOrder(issueNumberColumn, SortDirection.ASCENDING)); + grid.sort(sortOrder); grid.asSingleSelect().addValueChangeListener(event -> editIssue(event.getValue())); } - public IssueForm getForm() { - return form; - } - private void configureForm() { form = new IssueForm(service.findAllComics(null)); form.setWidth("25em"); @@ -69,18 +96,6 @@ public class IssueView extends VerticalLayout { form.addCloseListener(e -> closeEditor()); } - private void saveIssue(IssueForm.SaveEvent event) { - service.saveIssue(event.getIssue()); - updateList(); - closeEditor(); - } - - private void deleteIssue(IssueForm.DeleteEvent event) { - service.deleteIssue(event.getIssue()); - updateList(); - closeEditor(); - } - private Component getContent() { HorizontalLayout content = new HorizontalLayout(grid, form); content.setFlexGrow(2, grid); @@ -93,16 +108,40 @@ public class IssueView extends VerticalLayout { private HorizontalLayout getToolbar() { comicFilter.setItems(service.findAllComics(null)); comicFilter.setItemLabelGenerator(Comic::getTitle); - comicFilter.addValueChangeListener(e -> updateList()); comicFilter.setClearButtonVisible(true); + comicFilter.addValueChangeListener(e -> updateList()); - Button addIssueButton = new Button("Add issue", click -> addIssue()); + Button addIssueButton = new Button("Add issue"); + addIssueButton.addClickListener(click -> addIssue()); - HorizontalLayout toolbar = new HorizontalLayout(comicFilter, addIssueButton); + Button menuButton = new Button("Show/Hide Columns"); + menuButton.addThemeVariants(ButtonVariant.LUMO_TERTIARY); + ColumnToggleContextMenu columnToggleContextMenu = new ColumnToggleContextMenu<>(menuButton); + columnToggleContextMenu.addColumnToggleItem(idColumn); + columnToggleContextMenu.addColumnToggleItem(createdColumn); + columnToggleContextMenu.addColumnToggleItem(modifiedColumn); + columnToggleContextMenu.addColumnToggleItem(versionColumn); + columnToggleContextMenu.addColumnToggleItem(titleColumn); + columnToggleContextMenu.addColumnToggleItem(issueNumberColumn); + columnToggleContextMenu.addColumnToggleItem(isReadColumn); + columnToggleContextMenu.addColumnToggleItem(inStockColumn); + HorizontalLayout toolbar = new HorizontalLayout(comicFilter, addIssueButton, menuButton); toolbar.addClassName("toolbar"); return toolbar; } + private void saveIssue(IssueForm.SaveEvent event) { + service.saveIssue(event.getIssue()); + updateList(); + closeEditor(); + } + + private void deleteIssue(IssueForm.DeleteEvent event) { + service.deleteIssue(event.getIssue()); + updateList(); + closeEditor(); + } + public void editIssue(Issue issue) { if (issue == null) { closeEditor();