REFACTOR: Remove `Discourse` constant from `showModal`

This commit is contained in:
Robin Ward 2020-08-19 12:18:52 -04:00
parent 98e5e1cd53
commit 02e8d84e30
3 changed files with 13 additions and 4 deletions

View File

@ -1,13 +1,17 @@
import I18n from "I18n";
import { dasherize } from "@ember/string";
let _container;
export function setModalContainer(container) {
_container = container;
}
export default function(name, opts) {
opts = opts || {};
const container = Discourse.__container__;
// We use the container here because modals are like singletons
// in Discourse. Only one can be shown with a particular state.
const route = container.lookup("route:application");
const route = _container.lookup("route:application");
const modalController = route.controllerFor("modal");
modalController.set(
@ -18,7 +22,7 @@ export default function(name, opts) {
const controllerName = opts.admin ? `modals/${name}` : name;
modalController.set("name", controllerName);
let controller = container.lookup("controller:" + controllerName);
let controller = _container.lookup("controller:" + controllerName);
const templateName = opts.templateName || dasherize(name);
const renderArgs = { into: "modal", outlet: "modalBody" };
@ -27,7 +31,7 @@ export default function(name, opts) {
} else {
// use a basic controller
renderArgs.controller = "basic-modal-body";
controller = container.lookup(`controller:${renderArgs.controller}`);
controller = _container.lookup(`controller:${renderArgs.controller}`);
}
if (opts.addModalBodyView) {

View File

@ -13,6 +13,7 @@ import deprecated from "discourse-common/lib/deprecated";
import { setIconList } from "discourse-common/lib/icon-library";
import { setPluginContainer } from "discourse/lib/plugin-api";
import { setURLContainer } from "discourse/lib/url";
import { setModalContainer } from "discourse/lib/show-modal";
export default {
name: "discourse-bootstrap",
@ -21,6 +22,7 @@ export default {
initialize(container, app) {
setPluginContainer(container);
setURLContainer(container);
setModalContainer(container);
// Our test environment has its own bootstrap code
if (isTesting()) {

View File

@ -29,6 +29,7 @@ import { currentSettings, mergeSettings } from "helpers/site-settings";
import { getOwner } from "discourse-common/lib/get-owner";
import { setTopicList } from "discourse/lib/topic-list-tracker";
import { setURLContainer } from "discourse/lib/url";
import { setModalContainer } from "discourse/lib/show-modal";
export function currentUser() {
return User.create(sessionFixtures["/session/current.json"].current_user);
@ -176,6 +177,7 @@ export function acceptance(name, options) {
this.container = getOwner(this);
setPluginContainer(this.container);
setURLContainer(this.container);
setModalContainer(this.container);
if (options.beforeEach) {
options.beforeEach.call(this);
}
@ -205,6 +207,7 @@ export function acceptance(name, options) {
setTopicList(null);
_clearSnapshots();
setURLContainer(null);
setModalContainer(null);
Discourse._runInitializer(
"instanceInitializers",
(initName, initializer) => {