mirror of
https://github.com/discourse/discourse.git
synced 2025-02-10 23:45:33 +08:00
![Robin Ward](/assets/img/avatar_default.png)
We weren't using this very much and introduces a dependency between discourse-common and discourse which makes moving to yarn workspaces more difficult. In the future we might user ember-addons properly but for now it's easier to move the code into discourse-common. Note the old folder is still there because at least one plugin was still requiring the old files. It will be removed in the future.
72 lines
1.7 KiB
JavaScript
72 lines
1.7 KiB
JavaScript
import { computed, get } from "@ember/object";
|
|
import extractValue from "./extract-value";
|
|
|
|
export default function handleDescriptor(target, key, desc, params = []) {
|
|
return {
|
|
enumerable: desc.enumerable,
|
|
configurable: desc.configurable,
|
|
writeable: desc.writeable,
|
|
initializer: function() {
|
|
let computedDescriptor;
|
|
|
|
if (desc.writable) {
|
|
var val = extractValue(desc);
|
|
if (typeof val === "object") {
|
|
let value = {};
|
|
if (val.get) {
|
|
value.get = callUserSuppliedGet(params, val.get);
|
|
}
|
|
if (val.set) {
|
|
value.set = callUserSuppliedSet(params, val.set);
|
|
}
|
|
computedDescriptor = value;
|
|
} else {
|
|
computedDescriptor = callUserSuppliedGet(params, val);
|
|
}
|
|
} else {
|
|
throw new Error(
|
|
"ember-computed-decorators does not support using getters and setters"
|
|
);
|
|
}
|
|
|
|
return computed.apply(null, params.concat(computedDescriptor));
|
|
}
|
|
};
|
|
}
|
|
|
|
function niceAttr(attr) {
|
|
const parts = attr.split(".");
|
|
let i;
|
|
|
|
for (i = 0; i < parts.length; i++) {
|
|
if (
|
|
parts[i] === "@each" ||
|
|
parts[i] === "[]" ||
|
|
parts[i].indexOf("{") !== -1
|
|
) {
|
|
break;
|
|
}
|
|
}
|
|
|
|
return parts.slice(0, i).join(".");
|
|
}
|
|
|
|
function callUserSuppliedGet(params, func) {
|
|
params = params.map(niceAttr);
|
|
return function() {
|
|
let paramValues = params.map(p => get(this, p));
|
|
|
|
return func.apply(this, paramValues);
|
|
};
|
|
}
|
|
|
|
function callUserSuppliedSet(params, func) {
|
|
params = params.map(niceAttr);
|
|
return function(key, value) {
|
|
let paramValues = params.map(p => get(this, p));
|
|
paramValues.unshift(value);
|
|
|
|
return func.apply(this, paramValues);
|
|
};
|
|
}
|