diff --git a/panel/chat/message.py b/panel/chat/message.py index 5c63167632..f527e5e18a 100644 --- a/panel/chat/message.py +++ b/panel/chat/message.py @@ -300,11 +300,13 @@ def _build_layout(self): visible=self.param.show_user, stylesheets=self._stylesheets, ) + header_objects = ( + [self._user_html] + + self.param.header_objects.rx() + + [self.chat_copy_icon, self._activity_dot] + ) header_row = Row( - self._user_html, - *self.param.header_objects.rx(), - self.chat_copy_icon, - self._activity_dot, + objects=header_objects, stylesheets=self._stylesheets + self.param.stylesheets.rx(), sizing_mode="stretch_width", css_classes=["header"] @@ -317,11 +319,10 @@ def _build_layout(self): ) footer_col = Column( - *self.param.footer_objects.rx(), - self._timestamp_html, + objects=self.param.footer_objects.rx() + [self._timestamp_html], stylesheets=self._stylesheets + self.param.stylesheets.rx(), sizing_mode="stretch_width", - css_classes=["footer"] + css_classes=["footer"], ) self._right_col = right_col = Column( diff --git a/panel/tests/chat/test_message.py b/panel/tests/chat/test_message.py index cb99f46c14..fdaeda7167 100644 --- a/panel/tests/chat/test_message.py +++ b/panel/tests/chat/test_message.py @@ -15,7 +15,6 @@ from panel.pane.image import PNG, SVG, Image from panel.pane.markup import HTML, DataFrame, Markdown from panel.pane.media import Audio -from panel.param import ParamFunction from panel.tests.util import mpl_available, mpl_figure from panel.widgets.button import Button from panel.widgets.input import ( @@ -29,7 +28,7 @@ class TestChatMessage: def test_layout(self): - message = ChatMessage(object="ABC", header_objects=["Header Test"], footer_objects=["Footer Test"]) + message = ChatMessage(object="ABC", header_objects=["Header Test", "Header 2"], footer_objects=["Footer Test", "Footer 2"]) columns = message._composite.objects assert len(columns) == 2 @@ -42,9 +41,8 @@ def test_layout(self): assert isinstance(user_pane, HTML) assert user_pane.object == "User" - header_objects = header_row[1][0] - assert isinstance(header_objects, Row) - assert isinstance(header_objects.objects[0], ParamFunction) + assert header_row[1] == "Header Test" + assert header_row[2] == "Header 2" center_row = columns[1][1] assert isinstance(center_row, Row) @@ -59,11 +57,10 @@ def test_layout(self): footer_col = columns[1][2] assert isinstance(footer_col, Column) - footer_objects = footer_col[0][0] - assert isinstance(footer_objects, Row) - assert isinstance(footer_objects.objects[0], ParamFunction) + assert footer_col[0] == "Footer Test" + assert footer_col[1] == "Footer 2" - timestamp_pane = footer_col[1] + timestamp_pane = footer_col[2] assert isinstance(timestamp_pane, HTML) def test_reactions_link(self): diff --git a/panel/tests/ui/chat/test_chat_message.py b/panel/tests/ui/chat/test_chat_message.py new file mode 100644 index 0000000000..e578a2869d --- /dev/null +++ b/panel/tests/ui/chat/test_chat_message.py @@ -0,0 +1,34 @@ +import pytest + +pytest.importorskip("playwright") + +from playwright.sync_api import expect + +from panel.chat import ChatMessage +from panel.tests.util import serve_component + +pytestmark = pytest.mark.ui + + +def test_chat_message_dynamic_footer_objects(page): + chat_msg = ChatMessage() + serve_component(page, chat_msg) + + footer = page.get_by_text("It works!") + expect(footer).to_have_count(0) + + chat_msg.footer_objects = ["It works!"] + footer = page.get_by_text("It works!") + expect(footer).to_have_count(1) + + +def test_chat_message_dynamic_header_objects(page): + chat_msg = ChatMessage() + serve_component(page, chat_msg) + + header = page.get_by_text("It works!") + expect(header).to_have_count(0) + + chat_msg.header_objects = ["It works!"] + header = page.get_by_text("It works!") + expect(header).to_have_count(1)