DEV: Use Session service rather than singleton (#23813)

(where applicable)
This commit is contained in:
Jarek Radosz 2023-10-06 17:14:31 +02:00 committed by GitHub
parent 2c490773f1
commit 484004fc5e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 34 additions and 28 deletions

View File

@ -1,9 +1,11 @@
import Component from "@glimmer/component";
import { tracked } from "@glimmer/tracking";
import { action } from "@ember/object";
import Session from "discourse/models/session";
import { inject as service } from "@ember/service";
export default class UserMenuItemsList extends Component {
@service session;
@tracked loading = false;
@tracked items = [];
@ -67,14 +69,14 @@ export default class UserMenuItemsList extends Component {
#getCachedItems() {
const key = this.itemsCacheKey;
if (key) {
return Session.currentProp(`user-menu-items:${key}`);
return this.session[`user-menu-items:${key}`];
}
}
#setCachedItems(newItems) {
const key = this.itemsCacheKey;
if (key) {
Session.currentProp(`user-menu-items:${key}`, newItems);
this.session.set(`user-menu-items:${key}`, newItems);
}
}

View File

@ -1,6 +1,6 @@
import Controller, { inject as controller } from "@ember/controller";
import { inject as service } from "@ember/service";
import { AUTO_DELETE_PREFERENCES } from "discourse/models/bookmark";
import Session from "discourse/models/session";
import { setDefaultHomepage } from "discourse/lib/utilities";
import {
listColorSchemes,
@ -30,6 +30,8 @@ const TEXT_SIZES = ["smallest", "smaller", "normal", "larger", "largest"];
const TITLE_COUNT_MODES = ["notifications", "contextual"];
export default Controller.extend({
session: service(),
currentThemeId: -1,
previewingColorScheme: false,
selectedDarkColorSchemeId: null,
@ -409,10 +411,10 @@ export default Controller.extend({
this.themeId,
true
);
Session.currentProp("darkModeAvailable", false);
this.session.set("darkModeAvailable", false);
} else {
loadColorSchemeStylesheet(colorSchemeId, this.themeId, true);
Session.currentProp("darkModeAvailable", true);
this.session.set("darkModeAvailable", true);
}
},

View File

@ -1,13 +1,13 @@
import EmberObject from "@ember/object";
import { Promise } from "rsvp";
import RestModel from "discourse/models/rest";
import Session from "discourse/models/session";
import User from "discourse/models/user";
import { ajax } from "discourse/lib/ajax";
import { getOwnerWithFallback } from "discourse-common/lib/get-owner";
import { isEmpty } from "@ember/utils";
import { notEmpty } from "@ember/object/computed";
import deprecated from "discourse-common/lib/deprecated";
import { inject as service } from "@ember/service";
function extractByKey(collection, klass) {
const retval = {};
@ -40,6 +40,7 @@ function displayCategoryInList(site, category) {
}
const TopicList = RestModel.extend({
session: service(),
canLoadMore: notEmpty("more_topics_url"),
forEachNew(topics, callback) {
@ -118,7 +119,7 @@ const TopicList = RestModel.extend({
more_topics_url: result.topic_list.more_topics_url,
});
Session.currentProp("topicList", this);
this.session.set("topicList", this);
return { moreTopicsUrl: this.more_topics_url, newTopics };
}
});
@ -147,7 +148,7 @@ const TopicList = RestModel.extend({
});
if (storeInSession) {
Session.currentProp("topicList", this);
this.session.set("topicList", this);
}
});
},

View File

@ -8,11 +8,11 @@ import { ajax } from "discourse/lib/ajax";
import { defaultHomepage } from "discourse/lib/utilities";
import { hash } from "rsvp";
import showModal from "discourse/lib/show-modal";
import Session from "discourse/models/session";
import { inject as service } from "@ember/service";
export default class DiscoveryCategoriesRoute extends DiscourseRoute {
@service router;
@service session;
renderTemplate() {
this.render("navigation/categories", { outlet: "navigation-bar" });
@ -51,6 +51,8 @@ export default class DiscoveryCategoriesRoute extends DiscourseRoute {
}
_loadBefore(store) {
const session = this.session;
return function (topic_ids, storeInSession) {
// refresh dupes
this.topics.removeObjects(
@ -73,7 +75,7 @@ export default class DiscoveryCategoriesRoute extends DiscourseRoute {
});
if (storeInSession) {
Session.currentProp("topicList", this);
session.set("topicList", this);
}
});
};

View File

@ -3,7 +3,6 @@ import EmberObject, { computed } from "@ember/object";
import { ajax } from "discourse/lib/ajax";
import { cancel, debounce, next, once, throttle } from "@ember/runloop";
import discourseLater from "discourse-common/lib/later";
import Session from "discourse/models/session";
import { Promise } from "rsvp";
import User from "discourse/models/user";
import userPresent, {
@ -254,8 +253,9 @@ class PresenceChannelState extends EmberObject.extend(Evented) {
@disableImplicitInjections
export default class PresenceService extends Service {
@service currentUser;
@service siteSettings;
@service messageBus;
@service session;
@service siteSettings;
_presenceDebounceMs = DEFAULT_PRESENCE_DEBOUNCE_MS;
@ -486,7 +486,7 @@ export default class PresenceService extends Service {
data.append("client_id", this.messageBus.clientId);
channelsToLeave.forEach((ch) => data.append("leave_channels[]", ch));
data.append("authenticity_token", Session.currentProp("csrfToken"));
data.append("authenticity_token", this.session.csrfToken);
navigator.sendBeacon(getURL("/presence/update"), data);
}

View File

@ -7,6 +7,7 @@ import { iconNode } from "discourse-common/lib/icon-library";
import { wantsNewWindow } from "discourse/lib/intercept-click";
export default createWidget("home-logo", {
services: ["session"],
tagName: "div.title",
settings: {
@ -37,21 +38,18 @@ export default createWidget("home-logo", {
},
logo() {
const { siteSettings } = this,
mobileView = this.site.mobileView;
const darkModeOptions = Session.currentProp("darkModeAvailable")
const darkModeOptions = this.session.darkModeAvailable
? { dark: true }
: {};
const mobileLogoUrl = this.mobileLogoUrl(),
mobileLogoUrlDark = this.mobileLogoUrl(darkModeOptions);
const showMobileLogo = mobileView && mobileLogoUrl.length > 0;
const showMobileLogo = this.site.mobileView && mobileLogoUrl.length > 0;
const logoUrl = this.logoUrl(),
logoUrlDark = this.logoUrl(darkModeOptions);
const title = siteSettings.title;
const title = this.siteSettings.title;
if (this.attrs.minimized) {
const logoSmallUrl = this.smallLogoUrl(),

View File

@ -2,8 +2,8 @@ import { module, test } from "qunit";
import { setupRenderingTest } from "discourse/tests/helpers/component-test";
import { render } from "@ember/test-helpers";
import { count, exists, query } from "discourse/tests/helpers/qunit-helpers";
import Session from "discourse/models/session";
import MountWidget from "discourse/components/mount-widget";
import { getOwner } from "@ember/application";
const bigLogo = "/images/d-logo-sketch.png?test";
const smallLogo = "/images/d-logo-sketch-small.png?test";
@ -16,8 +16,9 @@ module("Integration | Component | Widget | home-logo", function (hooks) {
setupRenderingTest(hooks);
hooks.afterEach(function () {
Session.currentProp("darkModeAvailable", null);
Session.currentProp("defaultColorSchemeIsDark", null);
this.session = getOwner(this).lookup("service:session");
this.session.set("darkModeAvailable", null);
this.session.set("defaultColorSchemeIsDark", null);
});
test("basics", async function (assert) {
@ -103,7 +104,7 @@ module("Integration | Component | Widget | home-logo", function (hooks) {
test("logo with dark mode alternative", async function (assert) {
this.siteSettings.site_logo_url = bigLogo;
this.siteSettings.site_logo_dark_url = darkLogo;
Session.currentProp("darkModeAvailable", true);
this.session.set("darkModeAvailable", true);
await render(<template><MountWidget @widget="home-logo" /></template>);
@ -126,7 +127,7 @@ module("Integration | Component | Widget | home-logo", function (hooks) {
this.siteSettings.site_logo_url = bigLogo;
this.siteSettings.site_mobile_logo_url = mobileLogo;
this.siteSettings.site_mobile_logo_dark_url = darkLogo;
Session.currentProp("darkModeAvailable", true);
this.session.set("darkModeAvailable", true);
this.site.mobileView = true;
@ -149,7 +150,7 @@ module("Integration | Component | Widget | home-logo", function (hooks) {
test("dark mode enabled but no dark logo set", async function (assert) {
this.siteSettings.site_logo_url = bigLogo;
this.siteSettings.site_logo_dark_url = "";
Session.currentProp("darkModeAvailable", true);
this.session.set("darkModeAvailable", true);
await render(<template><MountWidget @widget="home-logo" /></template>);
@ -172,7 +173,7 @@ module("Integration | Component | Widget | home-logo", function (hooks) {
test("dark color scheme and dark logo set", async function (assert) {
this.siteSettings.site_logo_url = bigLogo;
this.siteSettings.site_logo_dark_url = darkLogo;
Session.currentProp("defaultColorSchemeIsDark", true);
this.session.set("defaultColorSchemeIsDark", true);
await render(<template><MountWidget @widget="home-logo" /></template>);
@ -188,7 +189,7 @@ module("Integration | Component | Widget | home-logo", function (hooks) {
test("dark color scheme and dark logo not set", async function (assert) {
this.siteSettings.site_logo_url = bigLogo;
this.siteSettings.site_logo_dark_url = "";
Session.currentProp("defaultColorSchemeIsDark", true);
this.session.set("defaultColorSchemeIsDark", true);
await render(<template><MountWidget @widget="home-logo" /></template>);