package org.example; import com.vaadin.cdi.CDIView; import com.vaadin.navigator.View; import com.vaadin.navigator.ViewChangeListener; import com.vaadin.ui.Alignment; import com.vaadin.ui.Notification; import javax.annotation.PostConstruct; import javax.inject.Inject; import com.vaadin.ui.Button; import org.example.backend.Product; import org.vaadin.viritin.fields.MTable; import org.vaadin.viritin.label.Header; import org.vaadin.viritin.layouts.MVerticalLayout; import org.example.backend.service.ProductFacade; import org.vaadin.viritin.button.PrimaryButton; import org.vaadin.viritin.layouts.MHorizontalLayout; /** * * @author Mortoza Khan */ @CDIView public class ProductView extends MVerticalLayout implements View { @Inject ProductFacade facade; @Inject ProductForm form; @Inject InvoicerSelect invoicerSelect; Button newButton = new PrimaryButton("New", e -> { Product p = new Product(); p.setInvoicer(invoicerSelect.getValue()); form.setEntity(p); form.openInModalPopup(); }); MTable<Product> table = new MTable<>(Product.class) .withProperties("name", "price", "unit", "productState"); @PostConstruct public void initComponent() { invoicerSelect.addMValueChangeListener(e -> listEntities()); form.setResetHandler(this::reset); form.setSavedHandler(this::save); table.setWidth("400px"); //table.setHeight("400px"); table.setColumnCollapsingAllowed(true); table.addMValueChangeListener(e -> { form.setEntity(e.getValue()); form.openInModalPopup(); }); listEntities(); addComponents(new Header("Product listing"), new MHorizontalLayout(invoicerSelect, newButton) .alignAll(Alignment.MIDDLE_LEFT), table ); } private void listEntities() { table.setBeans(facade.findByInvoicer(invoicerSelect.getValue())); } public void save(Product entity) { facade.save(entity); form.getPopup().close(); listEntities(); Notification.show("Saved!"); } public void reset(Product entity) { // just hide the form form.setEntity(null); form.getPopup().close(); listEntities(); } @Override public void enter(ViewChangeListener.ViewChangeEvent event) { } }