mirror of
https://github.com/discourse/discourse.git
synced 2025-04-23 19:14:25 +08:00
DEV: adds afterRender decorator (#8864)
This commit is contained in:
parent
478c095e5c
commit
f5f4ce90c1
app/assets/javascripts/discourse-common/utils
test/javascripts
@ -1,6 +1,7 @@
|
|||||||
import handleDescriptor from "ember-addons/utils/handle-descriptor";
|
import handleDescriptor from "ember-addons/utils/handle-descriptor";
|
||||||
import isDescriptor from "ember-addons/utils/is-descriptor";
|
import isDescriptor from "ember-addons/utils/is-descriptor";
|
||||||
import extractValue from "ember-addons/utils/extract-value";
|
import extractValue from "ember-addons/utils/extract-value";
|
||||||
|
import { schedule, next } from "@ember/runloop";
|
||||||
|
|
||||||
export default function discourseComputedDecorator(...params) {
|
export default function discourseComputedDecorator(...params) {
|
||||||
// determine if user called as @discourseComputed('blah', 'blah') or @discourseComputed
|
// determine if user called as @discourseComputed('blah', 'blah') or @discourseComputed
|
||||||
@ -13,6 +14,19 @@ export default function discourseComputedDecorator(...params) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function afterRender(target, name, descriptor) {
|
||||||
|
const originalFunction = descriptor.value;
|
||||||
|
descriptor.value = function() {
|
||||||
|
next(() => {
|
||||||
|
schedule("afterRender", () => {
|
||||||
|
if (this.element && !this.isDestroying && !this.isDestroyed) {
|
||||||
|
return originalFunction.apply(this, arguments);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
export function readOnly(target, name, desc) {
|
export function readOnly(target, name, desc) {
|
||||||
return {
|
return {
|
||||||
writable: false,
|
writable: false,
|
||||||
|
@ -3,10 +3,12 @@ import selectKit from "helpers/select-kit-helper";
|
|||||||
export function testSelectKitModule(moduleName, options = {}) {
|
export function testSelectKitModule(moduleName, options = {}) {
|
||||||
moduleForComponent(`select-kit/${moduleName}`, {
|
moduleForComponent(`select-kit/${moduleName}`, {
|
||||||
integration: true,
|
integration: true,
|
||||||
|
|
||||||
beforeEach() {
|
beforeEach() {
|
||||||
this.set("subject", selectKit());
|
this.set("subject", selectKit());
|
||||||
options.beforeEach && options.beforeEach.call(this);
|
options.beforeEach && options.beforeEach.call(this);
|
||||||
},
|
},
|
||||||
|
|
||||||
afterEach() {
|
afterEach() {
|
||||||
options.afterEach && options.afterEach.call(this);
|
options.afterEach && options.afterEach.call(this);
|
||||||
}
|
}
|
||||||
|
49
test/javascripts/utils/decorators-test.js.es6
Normal file
49
test/javascripts/utils/decorators-test.js.es6
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
import { afterRender } from "discourse-common/utils/decorators";
|
||||||
|
import Component from "@ember/component";
|
||||||
|
import componentTest from "helpers/component-test";
|
||||||
|
|
||||||
|
const fooComponent = Component.extend({
|
||||||
|
layoutName: "foo-component",
|
||||||
|
|
||||||
|
classNames: ["foo-component"],
|
||||||
|
|
||||||
|
baz: null,
|
||||||
|
|
||||||
|
didInsertElement() {
|
||||||
|
this._super(...arguments);
|
||||||
|
|
||||||
|
this.setBaz(1);
|
||||||
|
},
|
||||||
|
|
||||||
|
willDestroyElement() {
|
||||||
|
this._super(...arguments);
|
||||||
|
|
||||||
|
this.setBaz(2);
|
||||||
|
},
|
||||||
|
|
||||||
|
@afterRender
|
||||||
|
setBaz(baz) {
|
||||||
|
this.set("baz", baz);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
moduleForComponent("utils:decorators", { integration: true });
|
||||||
|
|
||||||
|
componentTest("afterRender", {
|
||||||
|
template: "{{foo-component baz=baz}}",
|
||||||
|
|
||||||
|
beforeEach() {
|
||||||
|
this.registry.register("component:foo-component", fooComponent);
|
||||||
|
this.set("baz", 0);
|
||||||
|
},
|
||||||
|
|
||||||
|
test(assert) {
|
||||||
|
assert.ok(exists(document.querySelector(".foo-component")));
|
||||||
|
assert.equal(this.baz, 1);
|
||||||
|
|
||||||
|
this.clearRender();
|
||||||
|
|
||||||
|
assert.ok(!exists(document.querySelector(".foo-component")));
|
||||||
|
assert.equal(this.baz, 1);
|
||||||
|
}
|
||||||
|
});
|
Loading…
x
Reference in New Issue
Block a user