DEV: Replace `current-user:main` with `service:current-user`

This will allow consumers to inject it using `currentUser: service()` in preparation for the removal of implicit injections in Ember 4.0. `current-user:main` is still available and will print a deprecation notice.
This commit is contained in:
David Taylor 2022-07-30 18:15:43 +01:00
parent 2463a8d568
commit 4c2f08b6e2
21 changed files with 72 additions and 44 deletions

View File

@ -68,6 +68,11 @@ const DEPRECATED_MODULES = new Map(
since: "2.9.0.beta7", since: "2.9.0.beta7",
dropFrom: "3.0.0", dropFrom: "3.0.0",
}, },
"current-user:main": {
newName: "service:current-user",
since: "2.9.0.beta7",
dropFrom: "3.0.0",
},
}) })
); );

View File

@ -18,12 +18,7 @@ export default class DiscourseGlimmerComponent extends GlimmerComponent {
@service keyValueStore; @service keyValueStore;
@service pmTopicTrackingState; @service pmTopicTrackingState;
@service siteSettings; @service siteSettings;
@service currentUser;
@cached
get currentUser() {
const applicationInstance = getOwner(this);
return applicationInstance.lookup("current-user:main");
}
@cached @cached
get messageBus() { get messageBus() {

View File

@ -21,7 +21,7 @@ export function autoLoadModules(container, registry) {
siteSettings: container.lookup("service:site-settings"), siteSettings: container.lookup("service:site-settings"),
keyValueStore: container.lookup("service:key-value-store"), keyValueStore: container.lookup("service:key-value-store"),
capabilities: container.lookup("capabilities:main"), capabilities: container.lookup("capabilities:main"),
currentUser: container.lookup("current-user:main"), currentUser: container.lookup("service:current-user"),
site: container.lookup("site:main"), site: container.lookup("site:main"),
session: container.lookup("session:main"), session: container.lookup("session:main"),
topicTrackingState: container.lookup("topic-tracking-state:main"), topicTrackingState: container.lookup("topic-tracking-state:main"),

View File

@ -8,7 +8,7 @@ export default {
return; return;
} // must have the Badging API } // must have the Badging API
const user = container.lookup("current-user:main"); const user = container.lookup("service:current-user");
if (!user) { if (!user) {
return; return;
} // must be logged in } // must be logged in

View File

@ -14,7 +14,7 @@ export default {
const siteSettings = container.lookup("service:site-settings"); const siteSettings = container.lookup("service:site-settings");
const messageBus = container.lookup("service:message-bus"); const messageBus = container.lookup("service:message-bus");
const keyValueStore = container.lookup("service:key-value-store"); const keyValueStore = container.lookup("service:key-value-store");
const currentUser = container.lookup("current-user:main"); const currentUser = container.lookup("service:current-user");
LogsNotice.reopenClass(Singleton, { LogsNotice.reopenClass(Singleton, {
createCurrent() { createCurrent() {
return this.create({ return this.create({

View File

@ -41,7 +41,7 @@ export default {
} }
const messageBus = container.lookup("service:message-bus"), const messageBus = container.lookup("service:message-bus"),
user = container.lookup("current-user:main"), user = container.lookup("service:current-user"),
siteSettings = container.lookup("service:site-settings"); siteSettings = container.lookup("service:site-settings");
messageBus.alwaysLongPoll = !isProduction(); messageBus.alwaysLongPoll = !isProduction();

View File

@ -13,7 +13,7 @@ export default {
const session = Session.current(); const session = Session.current();
const siteSettings = container.lookup("service:site-settings"); const siteSettings = container.lookup("service:site-settings");
const keyValueStore = container.lookup("service:key-value-store"); const keyValueStore = container.lookup("service:key-value-store");
const user = container.lookup("current-user:main"); const user = container.lookup("service:current-user");
const appEvents = container.lookup("service:app-events"); const appEvents = container.lookup("service:app-events");
// Preconditions // Preconditions

View File

@ -19,7 +19,7 @@ export default {
after: "message-bus", after: "message-bus",
initialize(container) { initialize(container) {
const user = container.lookup("current-user:main"); const user = container.lookup("service:current-user");
const bus = container.lookup("service:message-bus"); const bus = container.lookup("service:message-bus");
const appEvents = container.lookup("service:app-events"); const appEvents = container.lookup("service:app-events");

View File

@ -7,7 +7,7 @@ export default {
after: "inject-objects", after: "inject-objects",
initialize(container) { initialize(container) {
const currentUser = container.lookup("current-user:main"); const currentUser = container.lookup("service:current-user");
if (currentUser) { if (currentUser) {
const username = currentUser.get("username"); const username = currentUser.get("username");
const escapedUsername = escapeRegExp(username); const escapedUsername = escapeRegExp(username);

View File

@ -135,7 +135,7 @@ export default {
this.searchService = this.container.lookup("service:search"); this.searchService = this.container.lookup("service:search");
this.appEvents = this.container.lookup("service:app-events"); this.appEvents = this.container.lookup("service:app-events");
this.currentUser = this.container.lookup("current-user:main"); this.currentUser = this.container.lookup("service:current-user");
this.siteSettings = this.container.lookup("service:site-settings"); this.siteSettings = this.container.lookup("service:site-settings");
// Disable the shortcut if private messages are disabled // Disable the shortcut if private messages are disabled

View File

@ -152,7 +152,7 @@ class PluginApi {
* If the user is not logged in, it will be `null`. * If the user is not logged in, it will be `null`.
**/ **/
getCurrentUser() { getCurrentUser() {
return this._lookupContainer("current-user:main"); return this._lookupContainer("service:current-user");
} }
_lookupContainer(path) { _lookupContainer(path) {

View File

@ -8,7 +8,7 @@ import User from "discourse/models/user";
const ALL_TARGETS = ["controller", "component", "route", "model", "adapter"]; const ALL_TARGETS = ["controller", "component", "route", "model", "adapter"];
function injectServiceIntoService({ app, property, specifier }) { export function injectServiceIntoService({ app, property, specifier }) {
// app.inject doesn't allow implicit injection of services into services. // app.inject doesn't allow implicit injection of services into services.
// However, we need to do it in order to convert our old service-like objects // However, we need to do it in order to convert our old service-like objects
// into true services, without breaking existing implicit injections. // into true services, without breaking existing implicit injections.
@ -34,8 +34,10 @@ export default {
const siteSettings = container.lookup("service:site-settings"); const siteSettings = container.lookup("service:site-settings");
const currentUser = User.current(); const currentUser = User.current();
app.register("current-user:main", currentUser, { instantiate: false });
app.currentUser = currentUser; // We can't use a 'real' service factory (i.e. services/current-user.js) because we need
// to register a null value for anon
app.register("service:current-user", currentUser, { instantiate: false });
const topicTrackingState = TopicTrackingState.create({ const topicTrackingState = TopicTrackingState.create({
messageBus: container.lookup("service:message-bus"), messageBus: container.lookup("service:message-bus"),
@ -87,8 +89,13 @@ export default {
}); });
if (currentUser) { if (currentUser) {
["controller", "component", "route", "service"].forEach((t) => { ["controller", "component", "route"].forEach((t) => {
app.inject(t, "currentUser", "current-user:main"); app.inject(t, "currentUser", "service:current-user");
});
injectServiceIntoService({
app,
property: "currentUser",
specifier: "service:current-user",
}); });
} }

View File

@ -20,7 +20,7 @@ export default {
return; return;
} }
this.currentUser = container.lookup("current-user:main"); this.currentUser = container.lookup("service:current-user");
getAndClearUnhandledThemeErrors().forEach((e) => { getAndClearUnhandledThemeErrors().forEach((e) => {
reportThemeError(this.currentUser, e); reportThemeError(this.currentUser, e);

View File

@ -142,7 +142,7 @@ export default class Widget {
this.key = this.buildKey ? this.buildKey(attrs) : null; this.key = this.buildKey ? this.buildKey(attrs) : null;
this.site = register.lookup("site:main"); this.site = register.lookup("site:main");
this.siteSettings = register.lookup("service:site-settings"); this.siteSettings = register.lookup("service:site-settings");
this.currentUser = register.lookup("current-user:main"); this.currentUser = register.lookup("service:current-user");
this.capabilities = register.lookup("capabilities:main"); this.capabilities = register.lookup("capabilities:main");
this.store = register.lookup("service:store"); this.store = register.lookup("service:store");
this.appEvents = register.lookup("service:app-events"); this.appEvents = register.lookup("service:app-events");

View File

@ -8,6 +8,7 @@ import QUnit, { test } from "qunit";
import { setupRenderingTest as emberSetupRenderingTest } from "ember-qunit"; import { setupRenderingTest as emberSetupRenderingTest } from "ember-qunit";
import { currentSettings } from "discourse/tests/helpers/site-settings"; import { currentSettings } from "discourse/tests/helpers/site-settings";
import { testCleanup } from "discourse/tests/helpers/qunit-helpers"; import { testCleanup } from "discourse/tests/helpers/qunit-helpers";
import { injectServiceIntoService } from "discourse/pre-initializers/inject-discourse-objects";
export function setupRenderingTest(hooks) { export function setupRenderingTest(hooks) {
emberSetupRenderingTest(hooks); emberSetupRenderingTest(hooks);
@ -31,12 +32,16 @@ export function setupRenderingTest(hooks) {
timezone: "Australia/Brisbane", timezone: "Australia/Brisbane",
}); });
this.currentUser = currentUser; this.currentUser = currentUser;
this.owner.unregister("current-user:main"); this.owner.unregister("service:current-user");
this.owner.register("current-user:main", currentUser, { this.owner.register("service:current-user", currentUser, {
instantiate: false, instantiate: false,
}); });
this.owner.inject("component", "currentUser", "current-user:main"); this.owner.inject("component", "currentUser", "service:current-user");
this.owner.inject("service", "currentUser", "current-user:main"); injectServiceIntoService({
app: this.owner.application,
property: "currentUser",
specifier: "service:current-user",
});
this.owner.unregister("topic-tracking-state:main"); this.owner.unregister("topic-tracking-state:main");
this.owner.register( this.owner.register(
@ -85,7 +90,7 @@ export default function (name, hooks, opts) {
test(name, async function (assert) { test(name, async function (assert) {
if (opts.anonymous) { if (opts.anonymous) {
this.owner.unregister("current-user:main"); this.owner.unregister("service:current-user");
} }
if (opts.beforeEach) { if (opts.beforeEach) {

View File

@ -32,7 +32,7 @@ module("Integration | Component | site-header", function (hooks) {
}); });
test("do not call authenticated endpoints as anonymous", async function (assert) { test("do not call authenticated endpoints as anonymous", async function (assert) {
this.owner.unregister("current-user:main"); this.owner.unregister("service:current-user");
await render(hbs`<SiteHeader />`); await render(hbs`<SiteHeader />`);

View File

@ -68,7 +68,7 @@ module("Integration | Component | Widget | hamburger-menu", function (hooks) {
}); });
test("general links", async function (assert) { test("general links", async function (assert) {
this.owner.unregister("current-user:main"); this.owner.unregister("service:current-user");
await render(hbs`<MountWidget @widget="hamburger-menu" />`); await render(hbs`<MountWidget @widget="hamburger-menu" />`);
@ -86,7 +86,7 @@ module("Integration | Component | Widget | hamburger-menu", function (hooks) {
let maxCategoriesToDisplay; let maxCategoriesToDisplay;
test("top categories - anonymous", async function (assert) { test("top categories - anonymous", async function (assert) {
this.owner.unregister("current-user:main"); this.owner.unregister("service:current-user");
this.siteSettings.header_dropdown_category_count = 8; this.siteSettings.header_dropdown_category_count = 8;
await render(hbs`<MountWidget @widget="hamburger-menu" />`); await render(hbs`<MountWidget @widget="hamburger-menu" />`);
@ -102,7 +102,7 @@ module("Integration | Component | Widget | hamburger-menu", function (hooks) {
}); });
test("top categories - allow_uncategorized_topics", async function (assert) { test("top categories - allow_uncategorized_topics", async function (assert) {
this.owner.unregister("current-user:main"); this.owner.unregister("service:current-user");
this.siteSettings.allow_uncategorized_topics = false; this.siteSettings.allow_uncategorized_topics = false;
this.siteSettings.header_dropdown_category_count = 8; this.siteSettings.header_dropdown_category_count = 8;

View File

@ -15,7 +15,7 @@ module("Integration | Component | Widget | header", function (hooks) {
}); });
test("sign up / login buttons", async function (assert) { test("sign up / login buttons", async function (assert) {
this.owner.unregister("current-user:main"); this.owner.unregister("service:current-user");
this.set("args", { canSignUp: true }); this.set("args", { canSignUp: true });
this.set("showCreateAccount", () => (this.signupShown = true)); this.set("showCreateAccount", () => (this.signupShown = true));
this.set("showLogin", () => (this.loginShown = true)); this.set("showLogin", () => (this.loginShown = true));
@ -40,7 +40,7 @@ module("Integration | Component | Widget | header", function (hooks) {
}); });
test("anon when login required", async function (assert) { test("anon when login required", async function (assert) {
this.owner.unregister("current-user:main"); this.owner.unregister("service:current-user");
this.set("args", { canSignUp: true }); this.set("args", { canSignUp: true });
this.set("showCreateAccount", () => (this.signupShown = true)); this.set("showCreateAccount", () => (this.signupShown = true));
this.set("showLogin", () => (this.loginShown = true)); this.set("showLogin", () => (this.loginShown = true));

View File

@ -237,7 +237,7 @@ module("Integration | Component | Widget | post", function (hooks) {
}); });
test("anon liking", async function (assert) { test("anon liking", async function (assert) {
this.owner.unregister("current-user:main"); this.owner.unregister("service:current-user");
const args = { showLike: true }; const args = { showLike: true };
this.set("args", args); this.set("args", args);
this.set("showLogin", () => (this.loginShown = true)); this.set("showLogin", () => (this.loginShown = true));

View File

@ -21,7 +21,7 @@ discourseModule("Unit | Controller | topic", function (hooks) {
}); });
hooks.afterEach(function () { hooks.afterEach(function () {
this.registry.unregister("current-user:main"); this.registry.unregister("service:current-user");
let topic = this.container.lookup("controller:topic"); let topic = this.container.lookup("controller:topic");
topic.setProperties({ topic.setProperties({
selectedPostIds: [], selectedPostIds: [],
@ -264,10 +264,14 @@ discourseModule("Unit | Controller | topic", function (hooks) {
test("canDeleteSelected", function (assert) { test("canDeleteSelected", function (assert) {
const currentUser = User.create({ admin: false }); const currentUser = User.create({ admin: false });
this.registry.register("current-user:main", currentUser, { this.registry.register("service:current-user", currentUser, {
instantiate: false, instantiate: false,
}); });
this.registry.injection("controller", "currentUser", "current-user:main"); this.registry.injection(
"controller",
"currentUser",
"service:current-user"
);
let model = topicWithStream({ let model = topicWithStream({
posts: [ posts: [
{ id: 1, can_delete: false }, { id: 1, can_delete: false },
@ -362,10 +366,14 @@ discourseModule("Unit | Controller | topic", function (hooks) {
test("canChangeOwner", function (assert) { test("canChangeOwner", function (assert) {
const currentUser = User.create({ admin: false }); const currentUser = User.create({ admin: false });
this.registry.register("current-user:main", currentUser, { this.registry.register("service:current-user", currentUser, {
instantiate: false, instantiate: false,
}); });
this.registry.injection("controller", "currentUser", "current-user:main"); this.registry.injection(
"controller",
"currentUser",
"service:current-user"
);
let model = topicWithStream({ let model = topicWithStream({
posts: [ posts: [
@ -405,10 +413,14 @@ discourseModule("Unit | Controller | topic", function (hooks) {
test("modCanChangeOwner", function (assert) { test("modCanChangeOwner", function (assert) {
const currentUser = User.create({ moderator: false }); const currentUser = User.create({ moderator: false });
this.registry.register("current-user:main", currentUser, { this.registry.register("service:current-user", currentUser, {
instantiate: false, instantiate: false,
}); });
this.registry.injection("controller", "currentUser", "current-user:main"); this.registry.injection(
"controller",
"currentUser",
"service:current-user"
);
let model = topicWithStream({ let model = topicWithStream({
posts: [ posts: [
@ -667,10 +679,14 @@ discourseModule("Unit | Controller | topic", function (hooks) {
}); });
const currentUser = EmberObject.create({ moderator: true }); const currentUser = EmberObject.create({ moderator: true });
this.registry.register("current-user:main", currentUser, { this.registry.register("service:current-user", currentUser, {
instantiate: false, instantiate: false,
}); });
this.registry.injection("controller", "currentUser", "current-user:main"); this.registry.injection(
"controller",
"currentUser",
"service:current-user"
);
let model = topicWithStream({ let model = topicWithStream({
stream: [2, 3, 4], stream: [2, 3, 4],

View File

@ -5,7 +5,7 @@ acceptance("current-user", function (needs) {
needs.user(); needs.user();
test("currentUser has appEvents", function (assert) { test("currentUser has appEvents", function (assert) {
let currentUser = this.container.lookup("current-user:main"); let currentUser = this.container.lookup("service:current-user");
assert.ok(currentUser.appEvents); assert.ok(currentUser.appEvents);
}); });
}); });