All Downloads are FREE. Search and download functionalities are using the official Maven repository.

fi.evolver.ai.vaadin.component.form.FormDialog Maven / Gradle / Ivy

The newest version!
package fi.evolver.ai.vaadin.component.form;

import java.io.Serial;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Consumer;
import java.util.function.Supplier;

import com.vaadin.flow.component.Component;
import com.vaadin.flow.component.button.Button;
import com.vaadin.flow.component.dialog.Dialog;
import com.vaadin.flow.component.html.H2;
import com.vaadin.flow.shared.Registration;

import fi.evolver.ai.vaadin.entity.HasValueGetterSetter;
import fi.evolver.utils.string.StringUtils;

public class FormDialog, FType> extends Dialog implements HasValueGetterSetter {
	@Serial
	private static final long serialVersionUID = 1L;

	private final List> onCloseListeners = new ArrayList<>();
	private final List onOpenListeners = new ArrayList<>();
	private final F content;
	private final String title;
	private final Button saveBtn = new Button(getTranslation("common.close"));

	public FormDialog(F content, String titleKey, boolean translateTitle) {
		if (translateTitle)
			this.title = getTranslation(titleKey);
		else
			this.title = titleKey;
		this.content = content;
		setWidth("75%");
		addFields();
		addOpenListener(() -> saveBtn.setText(onCloseListeners.size() > 0 ? getTranslation("common.save") : getTranslation("common.close")));
	}

	public FormDialog(F content, String title) {
		this(content, title, false);
	}

	public FormDialog(F content) {
		this(content, null);
	}

	@Override
	public void setValue(FType value) {
		content.setValue(value);
	}

	@Override
	public FType getValue() {
		return content.getValue();
	}

	@Override
	public void open() {
		onOpenListeners.forEach(Runnable::run);
		super.open();
	}

	@Override 
	public void close() {
		onCloseListeners.forEach(listener -> listener.accept(getValue()));
		super.close();
	}

	public String getTitle() {
		return title;
	}

	public F getContent() {
		return content;
	}

	public Registration addOpenListener(Runnable onOpen) {
		return Registration.addAndRemove(onOpenListeners, onOpen);
	}

	public Registration addOpenListener(Supplier onOpen) {
		return addOpenListener(() -> setValue(onOpen.get()));
	}

	public Registration addSaveClickListener(Consumer onSave) {
		return Registration.addAndRemove(onCloseListeners, onSave);
	}

	public Registration addSaveClickListener(Runnable onSave) {
		return addSaveClickListener(val -> onSave.run());
	}

	private void addFields() {
		if (StringUtils.hasText(title))
			add(new H2(title));
		add(content);
		
		saveBtn.addClickListener((e) -> close());
		add(saveBtn);
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy