Skip to content

Commit ecad95a

Browse files
committed
fix
1 parent 00d040e commit ecad95a

File tree

1 file changed

+33
-87
lines changed

1 file changed

+33
-87
lines changed

ember_debug/libs/render-tree.js

+33-87
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
1-
import captureRenderTree from "./capture-render-tree";
2-
import { guidFor } from "ember-debug/utils/ember/object/internals";
3-
import { EmberLoader } from "ember-debug/utils/ember/loader";
1+
import captureRenderTree from './capture-render-tree';
2+
import { guidFor } from 'ember-debug/utils/ember/object/internals';
3+
import { EmberLoader } from 'ember-debug/utils/ember/loader';
44

55
class InElementSupportProvider {
66
constructor(owner) {
7+
this.owner = owner;
78
this.nodeMap = new Map();
89
this.remoteRoots = [];
910
this.runtime = this.require('@glimmer/runtime');
@@ -32,6 +33,7 @@ class InElementSupportProvider {
3233

3334
const NewElementBuilder = this.NewElementBuilder;
3435
const remoteStack = [];
36+
const modifierStack = [];
3537

3638
const didAppendNode = NewElementBuilder.prototype.didAppendNode;
3739
NewElementBuilder.prototype.didAppendNode = function (...args) {
@@ -71,6 +73,29 @@ class InElementSupportProvider {
7173
return pushRemoteElement.call(this, ...args);
7274
};
7375

76+
const pushModifiers = NewElementBuilder.prototype.pushModifiers;
77+
NewElementBuilder.prototype.pushModifiers = function (modifiers) {
78+
if (!modifiers) return pushModifiers.call(this, modifiers);
79+
for (const modifier of modifiers) {
80+
const state = {};
81+
const name = modifier.definition.resolvedName;
82+
const delegate = modifier.manager.componentManagerDelegates.get(self.owner);
83+
const element = modifier.state.element;
84+
this.env.debugRenderTree?.create(state, {
85+
type: 'modifier',
86+
name,
87+
args: modifier.state.args,
88+
instance: delegate
89+
});
90+
this.env.debugRenderTree?.didRender(state, {
91+
parentElement: () => element.parentElement,
92+
firstNode: () => element,
93+
lastNode: () => element,
94+
});
95+
}
96+
return pushModifiers.call(this, modifiers);
97+
};
98+
7499
const popRemoteElement = NewElementBuilder.prototype.popRemoteElement;
75100
NewElementBuilder.prototype.popRemoteElement = function (...args) {
76101
this.env.debugRenderTree?.didRender(remoteStack.at(-1), {
@@ -80,7 +105,7 @@ class InElementSupportProvider {
80105
});
81106
remoteStack.pop();
82107
return popRemoteElement.call(this, ...args);
83-
}
108+
};
84109

85110
this.NewElementBuilderFunctions = {
86111
pushElement,
@@ -161,91 +186,9 @@ export default class RenderTree {
161186
build() {
162187
this._reset();
163188

164-
const manager = requirejs('@glimmer/manager');
165-
const didInsertDefinition = requirejs('@ember/render-modifiers/modifiers/did-insert')?.default;
166-
if (didInsertDefinition) {
167-
const delegate = manager.getInternalModifierManager(didInsertDefinition).componentManagerDelegates.get(this.owner);
168-
if (delegate) {
169-
delegate.name = 'did-insert';
170-
}
171-
}
172-
173-
const willRemoveDefinition = requirejs('@ember/render-modifiers/modifiers/will-destroy')?.default;
174-
if (willRemoveDefinition) {
175-
const delegate = manager.getInternalModifierManager(willRemoveDefinition).componentManagerDelegates.get(this.owner);
176-
if (delegate) {
177-
delegate.name = 'will-remove';
178-
}
179-
}
180-
181-
const didUpdateDefinition = requirejs('@ember/render-modifiers/modifiers/did-update')?.default;
182-
if (didUpdateDefinition) {
183-
const delegate = manager.getInternalModifierManager(didUpdateDefinition).componentManagerDelegates.get(this.owner);
184-
if (delegate) {
185-
delegate.name = 'will-remove';
186-
}
187-
}
188-
189189
this.tree = captureRenderTree(this.owner);
190-
191-
const self = this;
192-
let idx = Object.keys(self.nodes).length;
193-
194-
function buildModifierNode(options) {
195-
const obj = Object.create(null);
196-
obj.index = idx++;
197-
obj.id = obj.index.toString();
198-
obj.name =
199-
options.modifier?.name || options.delegate?.name || 'unknown-modifier';
200-
obj.type = 'modifier';
201-
obj.template = null;
202-
obj.isRemote = false;
203-
obj.args = options.args;
204-
obj.instance = {
205-
args: options.args,
206-
modifier: options.modifier,
207-
};
208-
obj.bounds = {
209-
firstNode: options.element,
210-
lastNode: options.element,
211-
parentElement: options.element.parentElement,
212-
};
213-
obj.children = [];
214-
return obj;
215-
}
216-
217-
function buildTagNode(node, options) {
218-
const obj = Object.create(null);
219-
obj.index = idx++;
220-
obj.id = obj.index.toString();
221-
obj.name = node.localName;
222-
obj.type = 'htmlTag';
223-
obj.template = null;
224-
obj.isRemote = false;
225-
obj.instance = {};
226-
obj.args = {
227-
named: {},
228-
positional: [],
229-
};
230-
obj.bounds = {
231-
firstNode: node,
232-
lastNode: node,
233-
parentElement: node.parentElement,
234-
};
235-
obj.children = options.map((m) => buildModifierNode(m));
236-
return obj;
237-
}
238-
239190
let serialized = this._serializeRenderNodes(this.tree);
240191

241-
for (const modifiersForNode of this.modifiersForNodes.entries()) {
242-
const component = this.findNearest(modifiersForNode[0]);
243-
if (!component) continue;
244-
this.serialized[component.id].children.push(
245-
this._serializeRenderNode(buildTagNode(...modifiersForNode))
246-
);
247-
}
248-
249192
this._releaseStaleObjects();
250193

251194
return serialized;
@@ -466,7 +409,10 @@ export default class RenderTree {
466409
this.inElementSupport?.remoteRoots.push(node);
467410
}
468411

469-
if (this.inElementSupport?.Wormhole && node.instance instanceof this.inElementSupport?.Wormhole.default) {
412+
if (
413+
this.inElementSupport?.Wormhole &&
414+
node.instance instanceof this.inElementSupport.Wormhole.default
415+
) {
470416
this.inElementSupport?.remoteRoots.push(node);
471417
const bounds = node.bounds;
472418
Object.defineProperty(node, 'bounds', {

0 commit comments

Comments
 (0)