|
6 | 6 | Tuple,
|
7 | 7 | Mapping,
|
8 | 8 | NamedTuple,
|
| 9 | + Optional, |
9 | 10 | Any,
|
10 | 11 | Set,
|
11 | 12 | Iterator,
|
@@ -154,29 +155,41 @@ def _render_element(self, element_state: ElementState) -> Dict[str, Any]:
|
154 | 155 | return element_state.model
|
155 | 156 |
|
156 | 157 | def _render_model(
|
157 |
| - self, element_state: ElementState, model: Mapping[str, Any] |
| 158 | + self, |
| 159 | + element_state: ElementState, |
| 160 | + model: Mapping[str, Any], |
| 161 | + path: Optional[str] = None, |
158 | 162 | ) -> Dict[str, Any]:
|
| 163 | + if path is None: |
| 164 | + path = element_state.path |
| 165 | + |
159 | 166 | serialized_model: Dict[str, Any] = {}
|
160 | 167 | event_handlers = self._render_model_event_targets(element_state, model)
|
161 | 168 | if event_handlers:
|
162 | 169 | serialized_model["eventHandlers"] = event_handlers
|
163 | 170 | if "children" in model:
|
164 | 171 | serialized_model["children"] = self._render_model_children(
|
165 |
| - element_state, model["children"] |
| 172 | + element_state, model["children"], path |
166 | 173 | )
|
167 | 174 | return {**model, **serialized_model}
|
168 | 175 |
|
169 | 176 | def _render_model_children(
|
170 |
| - self, element_state: ElementState, children: Union[List[Any], Tuple[Any, ...]] |
| 177 | + self, |
| 178 | + element_state: ElementState, |
| 179 | + children: Union[List[Any], Tuple[Any, ...]], |
| 180 | + path: str, |
171 | 181 | ) -> List[Any]:
|
172 | 182 | resolved_children: List[Any] = []
|
173 | 183 | for index, child in enumerate(
|
174 | 184 | children if isinstance(children, (list, tuple)) else [children]
|
175 | 185 | ):
|
176 | 186 | if isinstance(child, dict):
|
177 |
| - resolved_children.append(self._render_model(element_state, child)) |
| 187 | + child_path = f"{path}/children/{index}" |
| 188 | + resolved_children.append( |
| 189 | + self._render_model(element_state, child, child_path) |
| 190 | + ) |
178 | 191 | elif isinstance(child, AbstractElement):
|
179 |
| - child_path = f"{element_state.path}/children/{index}" |
| 192 | + child_path = f"{path}/children/{index}" |
180 | 193 | child_state = self._create_element_state(child, child_path, save=True)
|
181 | 194 | resolved_children.append(self._render_element(child_state))
|
182 | 195 | element_state.child_elements_ids.append(id(child))
|
|
0 commit comments