From 5f67094d2032c48f835695f1a9300506c38e263b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20Brand=C3=A9ho?= Date: Wed, 4 Oct 2023 23:15:18 +0200 Subject: [PATCH] fix rx.image src not working with state (#1915) --- reflex/components/media/image.py | 19 ++++++++++++++----- tests/components/media/test_image.py | 6 ++---- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/reflex/components/media/image.py b/reflex/components/media/image.py index 2c76bb6b76..0109e0dada 100644 --- a/reflex/components/media/image.py +++ b/reflex/components/media/image.py @@ -7,7 +7,6 @@ from reflex.components.component import Component from reflex.components.libs.chakra import ChakraComponent -from reflex.components.tags import Tag from reflex.utils.serializers import serializer from reflex.vars import Var @@ -65,11 +64,21 @@ def get_event_triggers(self) -> dict[str, Union[Var, Any]]: "on_load": lambda: [], } - def _render(self) -> Tag: - self.src.is_string = True + @classmethod + def create(cls, *children, **props) -> Component: + """Create an Image component. - # Render the table. - return super()._render() + Args: + *children: The children of the image. + **props: The props of the image. + + Returns: + The Image component. + """ + src = props.get("src", None) + if src is not None and not isinstance(src, (Var)): + props["src"] = Var.create(value=src, is_string=True) + return super().create(*children, **props) try: diff --git a/tests/components/media/test_image.py b/tests/components/media/test_image.py index 781a1a5b33..9651c5dfd5 100644 --- a/tests/components/media/test_image.py +++ b/tests/components/media/test_image.py @@ -34,7 +34,7 @@ def test_serialize_image(pil_image: Img): def test_set_src_str(): """Test that setting the src works.""" image = rx.image(src="pic2.jpeg") - assert str(image.src) == "pic2.jpeg" # type: ignore + assert str(image.src) == "{`pic2.jpeg`}" # type: ignore def test_set_src_img(pil_image: Img): """Test that setting the src works. @@ -43,7 +43,7 @@ def test_set_src_img(pil_image: Img): pil_image: The image to serialize. """ image = Image.create(src=pil_image) - assert str(image.src) == serialize_image(pil_image) # type: ignore + assert str(image.src.name) == serialize_image(pil_image) # type: ignore def test_render(pil_image: Img): """Test that rendering an image works. @@ -52,8 +52,6 @@ def test_render(pil_image: Img): pil_image: The image to serialize. """ image = Image.create(src=pil_image) - assert not image.src.is_string # type: ignore - image._render() assert image.src.is_string # type: ignore except ImportError: