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 = []