fi.evolver.ai.vaadin.component.form.PromptMessagesForm Maven / Gradle / Ivy
package fi.evolver.ai.vaadin.component.form;
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> {
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();
}
}