2024-07-25 21:09:06 +08:00
|
|
|
import { getOwner as emberGetOwner, setOwner } from "@ember/owner";
|
2016-11-04 23:32:12 +08:00
|
|
|
import deprecated from "discourse-common/lib/deprecated";
|
2020-08-20 03:41:11 +08:00
|
|
|
|
|
|
|
let _default = {};
|
2016-11-04 23:32:12 +08:00
|
|
|
|
2023-09-26 21:30:52 +08:00
|
|
|
/**
|
2024-07-25 21:09:06 +08:00
|
|
|
* Works similarly to { getOwner } from `@ember/owner`, but has a fallback
|
2023-09-26 21:30:52 +08:00
|
|
|
* when the passed object doesn't have an owner.
|
|
|
|
*
|
|
|
|
* This exists for historical reasons. Ideally, any uses of it should be updated to use
|
2024-07-25 21:09:06 +08:00
|
|
|
* the official `@ember/owner` implementation.
|
2023-09-26 21:30:52 +08:00
|
|
|
*/
|
|
|
|
export function getOwnerWithFallback(obj) {
|
2020-03-24 03:05:03 +08:00
|
|
|
if (emberGetOwner) {
|
2020-08-20 03:47:49 +08:00
|
|
|
return emberGetOwner(obj || _default) || emberGetOwner(_default);
|
2016-11-04 23:32:12 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
return obj.container;
|
|
|
|
}
|
|
|
|
|
2023-09-26 21:30:52 +08:00
|
|
|
/**
|
|
|
|
* @deprecated use `getOwnerWithFallback` instead
|
|
|
|
*/
|
|
|
|
export function getOwner(obj) {
|
|
|
|
deprecated(
|
2024-01-19 21:36:05 +08:00
|
|
|
"Importing getOwner from `discourse-common/lib/get-owner` is deprecated. See the alternatives on meta.",
|
|
|
|
{
|
|
|
|
since: "3.2",
|
|
|
|
id: "discourse.get-owner-with-fallback",
|
|
|
|
url: "https://meta.discourse.org/t/292080",
|
|
|
|
}
|
2023-09-26 21:30:52 +08:00
|
|
|
);
|
|
|
|
return getOwnerWithFallback(obj);
|
|
|
|
}
|
|
|
|
|
2020-08-20 03:41:11 +08:00
|
|
|
export function setDefaultOwner(container) {
|
|
|
|
setOwner(_default, container);
|
|
|
|
}
|
|
|
|
|
2016-11-04 23:32:12 +08:00
|
|
|
// `this.container` is deprecated, but we can still build a container-like
|
|
|
|
// object for components to use
|
|
|
|
export function getRegister(obj) {
|
2023-09-26 21:30:52 +08:00
|
|
|
const owner = getOwnerWithFallback(obj);
|
2016-11-04 23:32:12 +08:00
|
|
|
const register = {
|
|
|
|
lookup: (...args) => owner.lookup(...args),
|
|
|
|
lookupFactory: (...args) => {
|
2017-06-14 03:52:08 +08:00
|
|
|
if (owner.factoryFor) {
|
|
|
|
return owner.factoryFor(...args);
|
|
|
|
} else if (owner._lookupFactory) {
|
|
|
|
return owner._lookupFactory(...args);
|
|
|
|
}
|
2016-11-04 23:32:12 +08:00
|
|
|
},
|
|
|
|
|
|
|
|
deprecateContainer(target) {
|
|
|
|
Object.defineProperty(target, "container", {
|
|
|
|
get() {
|
|
|
|
deprecated(
|
2022-11-16 18:00:39 +08:00
|
|
|
"Use `this.register` or `getOwner` instead of `this.container`",
|
|
|
|
{ id: "discourse.this-container" }
|
2016-11-04 23:32:12 +08:00
|
|
|
);
|
|
|
|
return register;
|
|
|
|
},
|
|
|
|
});
|
|
|
|
},
|
|
|
|
};
|
|
|
|
|
2023-07-04 00:34:24 +08:00
|
|
|
setOwner(register, owner);
|
|
|
|
|
2016-11-04 23:32:12 +08:00
|
|
|
return register;
|
|
|
|
}
|