From 4cf6a2285976b62a93d3dc30b7a1821d621bab92 Mon Sep 17 00:00:00 2001 From: Ken Kinder Date: Sun, 23 Jun 2024 12:39:14 +0100 Subject: [PATCH] Be less willy-nilly about re-using components --- puepy/core.py | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/puepy/core.py b/puepy/core.py index aa93ffa..4813995 100644 --- a/puepy/core.py +++ b/puepy/core.py @@ -1,13 +1,8 @@ +import binascii +import hashlib + from .exceptions import ElementNotInDom, PropsError, PageError from .reactivity import ReactiveDict, Stateful -from .util import ( - mixed_to_underscores, - merge_classes, - jsobj, - _extract_event_handlers, - patch_dom_element, -) - from .runtime import ( add_event_listener, remove_event_listener, @@ -17,6 +12,12 @@ setTimeout, CustomEvent, ) +from .util import ( + mixed_to_underscores, + merge_classes, + _extract_event_handlers, + patch_dom_element, +) class Prop: @@ -705,12 +706,15 @@ def generate_tag(self, tag_name, *children, **kwargs): raise Exception("t.generate_tag called without a context") # Determine ref value - ref_part = f"__{parent.ref}.{tag_name}{len(parent.children) + 1}" + ref_part = f"__{parent.ref}.{tag_name}{len(parent.children) + 1}_" + binascii.hexlify( + hashlib.sha256(str(kwargs).encode()).digest() + )[:8].decode("utf8") ref = kwargs.pop("ref", ref_part) if ref and origin and ref in origin._refs_pending_removal: - element = origin._refs_pending_removal.pop(ref) + element: Tag = origin._refs_pending_removal.pop(ref) + assert element.origin == origin element._configure(kwargs) element.children = []