Skip to content

Commit 4b5e681

Browse files
committed
Add child componentInit() calls into the parent js initialization.
1 parent 3f9e30b commit 4b5e681

File tree

1 file changed

+13
-4
lines changed

1 file changed

+13
-4
lines changed

django_unicorn/components.py

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -172,17 +172,25 @@ def render(self):
172172
root_element["unicorn:checksum"] = checksum
173173

174174
if self.init_js:
175-
script_tag = soup.new_tag("script")
176175
init = {
177176
"id": self.component.component_id,
178177
"name": nested_component_name,
179178
"key": self.component.component_key,
180179
"data": orjson.loads(frontend_context_variables),
181180
}
182181
init = orjson.dumps(init).decode("utf-8")
183-
script_tag["type"] = "module"
184-
script_tag.string = f"if (typeof Unicorn === 'undefined') {{ console.error('Unicorn is missing. Do you need {{% load unicorn %}} or {{% unicorn-scripts %}}?') }} else {{ Unicorn.componentInit({init}); }}"
185-
root_element.insert_after(script_tag)
182+
init_script = f"Unicorn.componentInit({init});"
183+
184+
if self.component.parent:
185+
self.component._init_script = init_script
186+
else:
187+
for child in self.component.children:
188+
init_script = f"{init_script} {child._init_script}"
189+
190+
script_tag = soup.new_tag("script")
191+
script_tag["type"] = "module"
192+
script_tag.string = f"if (typeof Unicorn === 'undefined') {{ console.error('Unicorn is missing. Do you need {{% load unicorn %}} or {{% unicorn-scripts %}}?') }} else {{ {init_script} }}"
193+
root_element.insert_after(script_tag)
186194

187195
rendered_template = UnicornTemplateResponse._desoupify(soup)
188196
rendered_template = mark_safe(rendered_template)
@@ -247,6 +255,7 @@ def __init__(self, **kwargs):
247255
if "parent" in kwargs:
248256
self.parent = kwargs["parent"]
249257

258+
self._init_script: str = ""
250259
self._children_set = False
251260
self._validate_called = False
252261
self.errors = {}

0 commit comments

Comments
 (0)