Add the ability to connect a component to a Discourse widget
This commit is contained in:
parent
ae4fd06444
commit
c5687100b0
|
@ -0,0 +1 @@
|
||||||
|
export default Ember.Component.extend();
|
|
@ -1,3 +1,5 @@
|
||||||
|
import deprecated from 'discourse-common/lib/deprecated';
|
||||||
|
|
||||||
export default class Connector {
|
export default class Connector {
|
||||||
|
|
||||||
constructor(widget, opts) {
|
constructor(widget, opts) {
|
||||||
|
@ -14,23 +16,43 @@ export default class Connector {
|
||||||
|
|
||||||
const mounted = widget._findView();
|
const mounted = widget._findView();
|
||||||
|
|
||||||
let context;
|
if (opts.templateName) {
|
||||||
if (opts.context === 'model') {
|
deprecated(`Using a 'templateName' for a connector is deprecated. Use 'component' instead [${opts.templateName}]`);
|
||||||
const model = widget.findAncestorModel();
|
|
||||||
context = model;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const view = Ember.View.create({
|
const container = Ember.getOwner ? Ember.getOwner(mounted) : mounted.container;
|
||||||
container: mounted.container || widget.register,
|
|
||||||
templateName: opts.templateName,
|
|
||||||
context
|
|
||||||
});
|
|
||||||
if (Ember.setOwner) {
|
|
||||||
Ember.setOwner(view, Ember.getOwner(mounted));
|
|
||||||
}
|
|
||||||
mounted._connected.push(view);
|
|
||||||
|
|
||||||
view.renderer.replaceIn(view, $elem[0]);
|
let view;
|
||||||
|
|
||||||
|
if (opts.component) {
|
||||||
|
const connector = container.lookupFactory('component:connector-container');
|
||||||
|
view = connector.create({
|
||||||
|
layoutName: `components/${opts.component}`,
|
||||||
|
model: widget.findAncestorModel()
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (opts.templateName) {
|
||||||
|
let context;
|
||||||
|
if (opts.context === 'model') {
|
||||||
|
const model = widget.findAncestorModel();
|
||||||
|
context = model;
|
||||||
|
}
|
||||||
|
|
||||||
|
view = Ember.View.create({
|
||||||
|
container: container || widget.register,
|
||||||
|
templateName: opts.templateName,
|
||||||
|
context
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (view) {
|
||||||
|
if (Ember.setOwner) {
|
||||||
|
Ember.setOwner(view, Ember.getOwner(mounted));
|
||||||
|
}
|
||||||
|
mounted._connected.push(view);
|
||||||
|
view.renderer.replaceIn(view, $elem[0]);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
return elem;
|
return elem;
|
||||||
|
|
|
@ -7,6 +7,7 @@ class DecoratorHelper {
|
||||||
constructor(widget, attrs, state) {
|
constructor(widget, attrs, state) {
|
||||||
this.widget = widget;
|
this.widget = widget;
|
||||||
this.attrs = attrs;
|
this.attrs = attrs;
|
||||||
|
this.canConnectComponent = true;
|
||||||
this.state = state;
|
this.state = state;
|
||||||
this.register = widget.register;
|
this.register = widget.register;
|
||||||
this.register.deprecateContainer(this);
|
this.register.deprecateContainer(this);
|
||||||
|
@ -105,7 +106,6 @@ class DecoratorHelper {
|
||||||
connect(details) {
|
connect(details) {
|
||||||
return new Connector(this.widget, details);
|
return new Connector(this.widget, details);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
DecoratorHelper.prototype.h = h;
|
DecoratorHelper.prototype.h = h;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue