|
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