kontor-spring: change IssueView to use StatusIcon

This commit is contained in:
Thomas Peetz
2025-04-25 16:32:31 +02:00
parent 525d82cbda
commit 8c98e6de26
4 changed files with 84 additions and 40 deletions
+2 -1
View File
@@ -1,9 +1,10 @@
.idea/
.theia/
.vscode/
__pycache__/
bonus/
icons/
icons-shadowless/
.vscode/
springboot/.factorypath
java-ee/.settings
java-ee/.project
@@ -95,7 +95,7 @@ public class MetaDataView extends VerticalLayout {
modifiedColumn.setVisible(false);
versionColumn.setVisible(false);
grid.setMultiSort(true);
List sortOrder = new ArrayList();
List<GridSortOrder<MetaDataColumn>> sortOrder = new ArrayList<>();
sortOrder.add(new GridSortOrder<MetaDataColumn>(tableColumn, SortDirection.ASCENDING));
sortOrder.add(new GridSortOrder<MetaDataColumn>(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();
@@ -39,4 +39,8 @@ public class Issue extends AbstractEntity {
private Boolean isRead;
private Boolean inStock;
public String getComicTitle() {
return comic.getTitle();
}
}
@@ -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<Issue> grid = new Grid<>(Issue.class);
@Getter
Grid<Issue> grid = new Grid<>(Issue.class, false);
Grid.Column<Issue> idColumn = grid.addColumn(Issue::getId)
.setHeader("ID").setResizable(true).setSortable(true);
Grid.Column<Issue> createdColumn = grid.addColumn(Issue::getCreatedDate)
.setHeader("Erstellt").setResizable(true).setSortable(true);
Grid.Column<Issue> modifiedColumn = grid.addColumn(Issue::getLastModifiedDate)
.setHeader("Geändert").setResizable(true).setSortable(true);
Grid.Column<Issue> versionColumn = grid.addColumn(Issue::getVersion)
.setHeader("Version").setResizable(true).setSortable(true);
Grid.Column<Issue> titleColumn = grid.addColumn(Issue::getComicTitle)
.setHeader("Comic").setResizable(true).setSortable(true);
Grid.Column<Issue> issueNumberColumn = grid.addColumn(Issue::getIssueNumber)
.setHeader("Heft Nummer").setResizable(true).setSortable(true);
Grid.Column<Issue> isReadColumn = grid.addComponentColumn(issueColumn -> StatusIcon.create(issueColumn.getIsRead()))
.setHeader("Gelesen?").setWidth("6rem").setSortable(true);
Grid.Column<Issue> inStockColumn = grid.addComponentColumn(issueColumn -> StatusIcon.create(issueColumn.getInStock()))
.setHeader("Im Bestand?").setWidth("6rem").setSortable(true);
ComboBox<Comic> comicFilter = new ComboBox<>("Comic");
@Getter
IssueForm form;
ComicService service;
@@ -44,22 +71,22 @@ public class IssueView extends VerticalLayout {
updateList();
}
public Grid<Issue> 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<GridSortOrder<Issue>> sortOrder = new ArrayList<>();
sortOrder.add(new GridSortOrder<Issue>(titleColumn, SortDirection.ASCENDING));
sortOrder.add(new GridSortOrder<Issue>(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<Issue> 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();