@vectoriox/iox-builder 2.3.1 → 2.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -4772,9 +4772,7 @@ class BuilderComponent {
|
|
|
4772
4772
|
this.selectedItem = event.node;
|
|
4773
4773
|
this.overlayService.setSelect(event.element, event.node.type, this.activeMode, event.node, event.componentRef);
|
|
4774
4774
|
this.selectPanel(PanelTypes.STYLES);
|
|
4775
|
-
|
|
4776
|
-
?? this.findSymbolAncestorOf(event.node, this.globalElements);
|
|
4777
|
-
this.panelEventService.emit(PanelEventTypes.ELEMENT_SELECT, { node: event.node, componentRef: event.componentRef, symbolAncestor });
|
|
4775
|
+
this._emitElementSelect(event.node, event.componentRef);
|
|
4778
4776
|
}
|
|
4779
4777
|
_selectAfterDrop(node) {
|
|
4780
4778
|
// Wait one tick for Angular to render the new component and register it
|
|
@@ -4786,9 +4784,7 @@ class BuilderComponent {
|
|
|
4786
4784
|
this.selectedItem = node;
|
|
4787
4785
|
this.overlayService.setSelect(ref.element, node.type, this.activeMode, node, ref.componentRef);
|
|
4788
4786
|
this.selectPanel(PanelTypes.STYLES);
|
|
4789
|
-
|
|
4790
|
-
?? this.findSymbolAncestorOf(node, this.globalElements);
|
|
4791
|
-
this.panelEventService.emit(PanelEventTypes.ELEMENT_SELECT, { node, componentRef: ref.componentRef, symbolAncestor });
|
|
4787
|
+
this._emitElementSelect(node, ref.componentRef);
|
|
4792
4788
|
});
|
|
4793
4789
|
}
|
|
4794
4790
|
handleMouseEnter(event) {
|
|
@@ -4812,9 +4808,7 @@ class BuilderComponent {
|
|
|
4812
4808
|
this.selectedItem = node;
|
|
4813
4809
|
const ref = this.overlayService.getNodeRef(node);
|
|
4814
4810
|
if (ref) {
|
|
4815
|
-
|
|
4816
|
-
?? this.findSymbolAncestorOf(node, this.globalElements);
|
|
4817
|
-
this.panelEventService.emit(PanelEventTypes.ELEMENT_SELECT, { node, componentRef: ref.componentRef, symbolAncestor });
|
|
4811
|
+
this._emitElementSelect(node, ref.componentRef);
|
|
4818
4812
|
}
|
|
4819
4813
|
this.selectPanel(PanelTypes.STYLES);
|
|
4820
4814
|
}
|
|
@@ -4900,7 +4894,7 @@ class BuilderComponent {
|
|
|
4900
4894
|
if (ref) {
|
|
4901
4895
|
this.selectedItem = parentNode;
|
|
4902
4896
|
this.overlayService.setSelect(ref.element, parentNode.type, this.activeMode, parentNode, ref.componentRef);
|
|
4903
|
-
this.
|
|
4897
|
+
this._emitElementSelect(parentNode, ref.componentRef);
|
|
4904
4898
|
}
|
|
4905
4899
|
}
|
|
4906
4900
|
else {
|
|
@@ -5129,6 +5123,28 @@ class BuilderComponent {
|
|
|
5129
5123
|
}
|
|
5130
5124
|
return null;
|
|
5131
5125
|
}
|
|
5126
|
+
/** Nearest Repeater ancestor of `target` (or null). A node inside a repeater renders in ITEM
|
|
5127
|
+
* scope, so the bindings panel needs the repeater to sample its current item (e.g. bind an
|
|
5128
|
+
* Image to a `gallery` string item). Prefers the innermost repeater when nested. */
|
|
5129
|
+
findRepeaterAncestorOf(target, nodes) {
|
|
5130
|
+
for (const node of nodes) {
|
|
5131
|
+
if (node === target)
|
|
5132
|
+
return null;
|
|
5133
|
+
if (node.children?.length && this.findNodeInTree(target, node.children)) {
|
|
5134
|
+
return this.findRepeaterAncestorOf(target, node.children)
|
|
5135
|
+
?? (node.type === 'Repeater' ? node : null);
|
|
5136
|
+
}
|
|
5137
|
+
}
|
|
5138
|
+
return null;
|
|
5139
|
+
}
|
|
5140
|
+
/** Emit ELEMENT_SELECT with the ancestors the panels need (symbol + repeater item scope). */
|
|
5141
|
+
_emitElementSelect(node, componentRef) {
|
|
5142
|
+
const symbolAncestor = this.findSymbolAncestorOf(node, this.layout)
|
|
5143
|
+
?? this.findSymbolAncestorOf(node, this.globalElements);
|
|
5144
|
+
const repeaterAncestor = this.findRepeaterAncestorOf(node, this.layout)
|
|
5145
|
+
?? this.findRepeaterAncestorOf(node, this.globalElements);
|
|
5146
|
+
this.panelEventService.emit(PanelEventTypes.ELEMENT_SELECT, { node, componentRef, symbolAncestor, repeaterAncestor });
|
|
5147
|
+
}
|
|
5132
5148
|
handlePanelEvents(panelEvent) {
|
|
5133
5149
|
if (panelEvent.type === PanelEventTypes.PANEL_CLOSE) {
|
|
5134
5150
|
this.isPanelOpen = false;
|
|
@@ -5774,8 +5790,11 @@ class BuilderRepeaterComponent {
|
|
|
5774
5790
|
* (or change) so both orderings — and loaded pages with sync sources — render their rows. */
|
|
5775
5791
|
set children(value) {
|
|
5776
5792
|
this._children = value ?? [];
|
|
5793
|
+
// Defer to the next tick: RenderDirective sets `children` before the template child's
|
|
5794
|
+
// component is instantiated/registered, so applyFirstItemToTemplate needs the ref to exist
|
|
5795
|
+
// first (otherwise the FIRST row shows its default instead of item[0]'s value).
|
|
5777
5796
|
if (this.items.length)
|
|
5778
|
-
this.refreshPreviews();
|
|
5797
|
+
setTimeout(() => this.refreshPreviews());
|
|
5779
5798
|
}
|
|
5780
5799
|
get source() { return this._source; }
|
|
5781
5800
|
set source(value) {
|