fi.evolver.ai.vaadin.component.ChatMessageContainer Maven / Gradle / Ivy
The newest version!
package fi.evolver.ai.vaadin.component;
import java.io.Serial;
import java.time.LocalDateTime;
import com.vaadin.flow.component.ComponentEventListener;
import com.vaadin.flow.component.messages.MessageInput;
import com.vaadin.flow.component.messages.MessageInput.SubmitEvent;
import com.vaadin.flow.component.orderedlayout.VerticalLayout;
import com.vaadin.flow.theme.lumo.LumoUtility;
import fi.evolver.ai.vaadin.component.i18n.MessageInputI18nFactory;
public class ChatMessageContainer extends VerticalLayout {
@Serial
private static final long serialVersionUID = 1L;
protected final MessageInput chatMessageInput = new MessageInput();
protected final ChatMessageList chatMessageList = new ChatMessageList();
protected ChatMessageContainer(final Boolean addComponents) {
if (addComponents)
addComponents();
}
public ChatMessageContainer() {
this(true);
}
protected void addComponents() {
addClassNames(LumoUtility.Width.FULL, LumoUtility.Display.FLEX, LumoUtility.Flex.AUTO);
setSizeFull();
addClassNames(LumoUtility.Flex.AUTO, LumoUtility.Overflow.HIDDEN);
addMessageList();
addInputs();
}
protected void addMessageList() {
chatMessageList.setId("chat-message-list-container");
chatMessageList.setSizeFull();
add(chatMessageList);
expand(chatMessageList);
}
protected void addInputs() {
chatMessageInput.setI18n(MessageInputI18nFactory.getI18n(this::getTranslation));
chatMessageInput.setWidthFull();
add(chatMessageInput);
}
public void reset() {
chatMessageList.reset();
}
public void setInputEnabled(Boolean enabled) {
chatMessageInput.setEnabled(enabled);
}
public void addSubmitListener(ComponentEventListener listener) {
chatMessageInput.addSubmitListener(listener);
}
public void addItem(ChatAvatarItem item, boolean isReplacement) {
chatMessageList.addItem(item, isReplacement);
}
public void addItem(LocalDateTime sendTime, String message, String user, boolean isReplacement, boolean convertToHtml) {
chatMessageList.addItem(sendTime, message, user, isReplacement, convertToHtml);
}
public void addItem(String message, String user, boolean isReplacement, boolean convertToHtml) {
addItem(LocalDateTime.now(), message, user, isReplacement, convertToHtml);
}
public void scrollToEnd() {
getElement().executeJs("""
const el = document.getElementById("chat-message-list-container");
el.scrollTo(0, el.scrollHeight);
""");
}
}