mirror of
https://github.com/discourse/discourse.git
synced 2024-11-25 09:42:07 +08:00
DEV: Fix optionalService in decorator form (#29042)
…and remove unused injections
This commit is contained in:
parent
6545b06e6b
commit
41c3c5745e
|
@ -49,7 +49,7 @@ export default class ReviewableItem extends Component {
|
||||||
@service siteSettings;
|
@service siteSettings;
|
||||||
@service currentUser;
|
@service currentUser;
|
||||||
@service composer;
|
@service composer;
|
||||||
@optionalService("admin-tools") adminTools;
|
@optionalService adminTools;
|
||||||
|
|
||||||
updating = null;
|
updating = null;
|
||||||
editing = false;
|
editing = false;
|
||||||
|
|
|
@ -2,7 +2,6 @@ import Component from "@glimmer/component";
|
||||||
import { tracked } from "@glimmer/tracking";
|
import { tracked } from "@glimmer/tracking";
|
||||||
import { action } from "@ember/object";
|
import { action } from "@ember/object";
|
||||||
import { service } from "@ember/service";
|
import { service } from "@ember/service";
|
||||||
import optionalService from "discourse/lib/optional-service";
|
|
||||||
import { bind } from "discourse-common/utils/decorators";
|
import { bind } from "discourse-common/utils/decorators";
|
||||||
|
|
||||||
export default class TopicTimeline extends Component {
|
export default class TopicTimeline extends Component {
|
||||||
|
@ -13,8 +12,6 @@ export default class TopicTimeline extends Component {
|
||||||
@tracked docked = false;
|
@tracked docked = false;
|
||||||
@tracked dockedBottom = false;
|
@tracked dockedBottom = false;
|
||||||
|
|
||||||
adminTools = optionalService();
|
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
super(...arguments);
|
super(...arguments);
|
||||||
|
|
||||||
|
|
|
@ -15,7 +15,7 @@ export default class UserController extends Controller.extend(CanCheckEmails) {
|
||||||
@service currentUser;
|
@service currentUser;
|
||||||
@service router;
|
@service router;
|
||||||
@service dialog;
|
@service dialog;
|
||||||
@optionalService("admin-tools") adminTools;
|
@optionalService adminTools;
|
||||||
|
|
||||||
@controller("user-notifications") userNotifications;
|
@controller("user-notifications") userNotifications;
|
||||||
|
|
||||||
|
|
|
@ -2,8 +2,16 @@ import { computed } from "@ember/object";
|
||||||
import { getOwner } from "@ember/owner";
|
import { getOwner } from "@ember/owner";
|
||||||
import { dasherize } from "@ember/string";
|
import { dasherize } from "@ember/string";
|
||||||
|
|
||||||
export default function (name) {
|
export default function (target, name, descriptor) {
|
||||||
return computed(function (defaultName) {
|
name ??= target;
|
||||||
|
|
||||||
|
const decorator = computed(function (defaultName) {
|
||||||
return getOwner(this).lookup(`service:${name || dasherize(defaultName)}`);
|
return getOwner(this).lookup(`service:${name || dasherize(defaultName)}`);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if (descriptor) {
|
||||||
|
return decorator(target, name, descriptor);
|
||||||
|
} else {
|
||||||
|
return decorator;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,59 @@
|
||||||
|
import Component from "@ember/component";
|
||||||
|
import Service from "@ember/service";
|
||||||
|
import { render } from "@ember/test-helpers";
|
||||||
|
import { hbs } from "ember-cli-htmlbars";
|
||||||
|
import { module, test } from "qunit";
|
||||||
|
import optionalService from "discourse/lib/optional-service";
|
||||||
|
import { setupRenderingTest } from "discourse/tests/helpers/component-test";
|
||||||
|
|
||||||
|
class FooService extends Service {
|
||||||
|
name = "foo";
|
||||||
|
}
|
||||||
|
|
||||||
|
class BarService extends Service {
|
||||||
|
name = "bar";
|
||||||
|
}
|
||||||
|
|
||||||
|
const EmberObjectComponent = Component.extend({
|
||||||
|
name: "",
|
||||||
|
layout: hbs`<span class="ember-object-component">{{this.foo.name}} {{this.baz.name}}</span>`,
|
||||||
|
|
||||||
|
foo: optionalService(),
|
||||||
|
baz: optionalService("bar"),
|
||||||
|
});
|
||||||
|
|
||||||
|
class NativeComponent extends Component {
|
||||||
|
@optionalService foo;
|
||||||
|
@optionalService("bar") baz;
|
||||||
|
|
||||||
|
name = "";
|
||||||
|
layout = hbs`<span class="native-component">{{this.foo.name}} {{this.baz.name}}</span>`;
|
||||||
|
}
|
||||||
|
|
||||||
|
module("Unit | Utils | optional-service", function (hooks) {
|
||||||
|
setupRenderingTest(hooks);
|
||||||
|
|
||||||
|
hooks.beforeEach(function () {
|
||||||
|
this.registry.register("service:foo", FooService);
|
||||||
|
this.registry.register("service:bar", BarService);
|
||||||
|
});
|
||||||
|
|
||||||
|
test("optionalService works in EmberObject classes", async function (assert) {
|
||||||
|
this.registry.register(
|
||||||
|
"component:ember-object-component",
|
||||||
|
EmberObjectComponent
|
||||||
|
);
|
||||||
|
|
||||||
|
await render(hbs`<EmberObjectComponent />`);
|
||||||
|
|
||||||
|
assert.dom(".ember-object-component").hasText("foo bar");
|
||||||
|
});
|
||||||
|
|
||||||
|
test("optionalService works in native classes", async function (assert) {
|
||||||
|
this.registry.register("component:native-component", NativeComponent);
|
||||||
|
|
||||||
|
await render(hbs`<NativeComponent />`);
|
||||||
|
|
||||||
|
assert.dom(".native-component").hasText("foo bar");
|
||||||
|
});
|
||||||
|
});
|
|
@ -14,7 +14,6 @@ import { modifier } from "ember-modifier";
|
||||||
import { eq, not } from "truth-helpers";
|
import { eq, not } from "truth-helpers";
|
||||||
import DButton from "discourse/components/d-button";
|
import DButton from "discourse/components/d-button";
|
||||||
import concatClass from "discourse/helpers/concat-class";
|
import concatClass from "discourse/helpers/concat-class";
|
||||||
import optionalService from "discourse/lib/optional-service";
|
|
||||||
import { applyValueTransformer } from "discourse/lib/transformer";
|
import { applyValueTransformer } from "discourse/lib/transformer";
|
||||||
import { updateUserStatusOnMention } from "discourse/lib/update-user-status-on-mention";
|
import { updateUserStatusOnMention } from "discourse/lib/update-user-status-on-mention";
|
||||||
import isZoomed from "discourse/lib/zoom-check";
|
import isZoomed from "discourse/lib/zoom-check";
|
||||||
|
@ -65,7 +64,6 @@ export default class ChatMessage extends Component {
|
||||||
@service router;
|
@service router;
|
||||||
@service toasts;
|
@service toasts;
|
||||||
@service modal;
|
@service modal;
|
||||||
@optionalService adminTools;
|
|
||||||
|
|
||||||
@tracked isActive = false;
|
@tracked isActive = false;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user