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

fi.evolver.ai.vaadin.component.form.PromptMessagesForm 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 org.vaadin.lineawesome.LineAwesomeIcon;

import com.vaadin.flow.component.button.Button;
import com.vaadin.flow.component.html.Div;
import com.vaadin.flow.component.orderedlayout.VerticalLayout;

import fi.evolver.ai.spring.chat.prompt.Message;
import fi.evolver.ai.vaadin.entity.HasValueGetterSetter;

public class PromptMessagesForm extends VerticalLayout implements HasValueGetterSetter> {
	@Serial
	private static final long serialVersionUID = 1L;
	private final List messageInputs = new ArrayList<>();
	private Div content = new Div();

	public PromptMessagesForm() {
		setWidthFull();
		content.setWidthFull();
		add(content);
		Button addMessageButton = new Button(getTranslation("component.form.promptMessageForm.addMessage"), LineAwesomeIcon.PLUS_CIRCLE_SOLID.create());
		addMessageButton.addClickListener(e -> addMessageInput(new PromptMessageInput()));
		add(addMessageButton);
	}

	public PromptMessagesForm(List messages) {
		this();
		setValue(messages);
	}

	private void addMessageInput(PromptMessageInput messageInput) {
		messageInputs.add(messageInput);
		content.add(messageInput);
		messageInput.addRemoveHandler(() -> {
			messageInputs.remove(messageInput);
			content.remove(messageInput);
		});
	}

	@Override
	public void setValue(List messages) {
		messageInputs.forEach(content::remove);
		messageInputs.clear();
		if (messages != null)
			messages.stream().map(PromptMessageInput::new).forEach(this::addMessageInput);
	}

	@Override
	public List getValue() {
		return messageInputs.stream().map(PromptMessageInput::getValue).toList();
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy