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

fi.evolver.ai.vaadin.component.ChatMessageContainer Maven / Gradle / Ivy

There is a newer version: 1.5.5
Show 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);
				""");
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy