REFACTOR: simplifies connectors code (#10579)

- directly uses factoryFor to avoid having to set owner later
- drops jquery usage
- renames view into component as I find it more explicit
This commit is contained in:
Joffrey JAFFEUX
2020-09-02 15:53:42 +02:00
committed by GitHub
parent 879e274dc7
commit c6e336b519
2 changed files with 19 additions and 26 deletions

View File

@@ -1,5 +1,5 @@
import { scheduleOnce } from "@ember/runloop"; import { scheduleOnce } from "@ember/runloop";
import { setOwner, getOwner } from "@ember/application"; import { getOwner } from "@ember/application";
export default class ComponentConnector { export default class ComponentConnector {
constructor(widget, componentName, opts, trackedProperties) { constructor(widget, componentName, opts, trackedProperties) {
@@ -40,21 +40,18 @@ export default class ComponentConnector {
const { elem, opts, widget, componentName } = this; const { elem, opts, widget, componentName } = this;
const mounted = widget._findView(); const mounted = widget._findView();
const view = widget.register const component = getOwner(mounted)
.lookupFactory(`component:${componentName}`) .factoryFor(`component:${componentName}`)
.create(opts); .create(opts);
if (setOwner) {
setOwner(view, getOwner(mounted));
}
// component connector is not triggering didReceiveAttrs // component connector is not triggering didReceiveAttrs
// we force it for selectKit components // we force it for selectKit components
if (view.selectKit) { if (component.selectKit) {
view.didReceiveAttrs(); component.didReceiveAttrs();
} }
mounted._connected.push(view);
view.renderer.appendTo(view, elem); mounted._connected.push(component);
component.renderer.appendTo(component, elem);
} }
} }

View File

@@ -1,5 +1,5 @@
import { next } from "@ember/runloop"; import { next } from "@ember/runloop";
import { setOwner, getOwner } from "@ember/application"; import { getOwner } from "@ember/application";
export default class Connector { export default class Connector {
constructor(widget, opts) { constructor(widget, opts) {
@@ -8,27 +8,23 @@ export default class Connector {
} }
init() { init() {
const $elem = $(`<div class='widget-connector'></div>`); const elem = document.createElement("div");
const elem = $elem[0]; elem.classList.add("widget-connector");
const { opts, widget } = this; const { opts, widget } = this;
next(() => { next(() => {
const mounted = widget._findView(); const mounted = widget._findView();
if (opts.component) { if (opts.component) {
const connector = widget.register.lookupFactory( const component = getOwner(mounted)
"component:connector-container" .factoryFor("component:connector-container")
); .create({
const view = connector.create({
layoutName: `components/${opts.component}`, layoutName: `components/${opts.component}`,
model: widget.findAncestorModel() model: widget.findAncestorModel()
}); });
setOwner(view, getOwner(mounted)); mounted._connected.push(component);
component.renderer.appendTo(component, elem);
mounted._connected.push(view);
view.renderer.appendTo(view, $elem[0]);
} }
}); });