Move apiOptionsSet implementation into Backend
This commit is contained in:
parent
d6fe5c3e46
commit
6a1cfbaad6
@ -21,44 +21,8 @@ function apiOptionsGet(optionsContext) {
|
|||||||
return utilBackend()._onApiOptionsGet({optionsContext});
|
return utilBackend()._onApiOptionsGet({optionsContext});
|
||||||
}
|
}
|
||||||
|
|
||||||
async function apiOptionsSet(changedOptions, optionsContext, source) {
|
function apiOptionsSet(changedOptions, optionsContext, source) {
|
||||||
const options = await apiOptionsGet(optionsContext);
|
return utilBackend()._onApiOptionsSet({changedOptions, optionsContext, source});
|
||||||
|
|
||||||
function getValuePaths(obj) {
|
|
||||||
const valuePaths = [];
|
|
||||||
const nodes = [{obj, path: []}];
|
|
||||||
while (nodes.length > 0) {
|
|
||||||
const node = nodes.pop();
|
|
||||||
for (const key of Object.keys(node.obj)) {
|
|
||||||
const path = node.path.concat(key);
|
|
||||||
const obj = node.obj[key];
|
|
||||||
if (obj !== null && typeof obj === 'object') {
|
|
||||||
nodes.unshift({obj, path});
|
|
||||||
} else {
|
|
||||||
valuePaths.push([obj, path]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return valuePaths;
|
|
||||||
}
|
|
||||||
|
|
||||||
function modifyOption(path, value, options) {
|
|
||||||
let pivot = options;
|
|
||||||
for (const key of path.slice(0, -1)) {
|
|
||||||
if (!hasOwn(pivot, key)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
pivot = pivot[key];
|
|
||||||
}
|
|
||||||
pivot[path[path.length - 1]] = value;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (const [value, path] of getValuePaths(changedOptions)) {
|
|
||||||
modifyOption(path, value, options);
|
|
||||||
}
|
|
||||||
|
|
||||||
await apiOptionsSave(source);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function apiOptionsGetFull() {
|
function apiOptionsGetFull() {
|
||||||
|
@ -194,8 +194,44 @@ class Backend {
|
|||||||
return this.getFullOptions();
|
return this.getFullOptions();
|
||||||
}
|
}
|
||||||
|
|
||||||
_onApiOptionsSet({changedOptions, optionsContext, source}) {
|
async _onApiOptionsSet({changedOptions, optionsContext, source}) {
|
||||||
return apiOptionsSet(changedOptions, optionsContext, source);
|
const options = await this.getOptions(optionsContext);
|
||||||
|
|
||||||
|
function getValuePaths(obj) {
|
||||||
|
const valuePaths = [];
|
||||||
|
const nodes = [{obj, path: []}];
|
||||||
|
while (nodes.length > 0) {
|
||||||
|
const node = nodes.pop();
|
||||||
|
for (const key of Object.keys(node.obj)) {
|
||||||
|
const path = node.path.concat(key);
|
||||||
|
const obj = node.obj[key];
|
||||||
|
if (obj !== null && typeof obj === 'object') {
|
||||||
|
nodes.unshift({obj, path});
|
||||||
|
} else {
|
||||||
|
valuePaths.push([obj, path]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return valuePaths;
|
||||||
|
}
|
||||||
|
|
||||||
|
function modifyOption(path, value, options) {
|
||||||
|
let pivot = options;
|
||||||
|
for (const key of path.slice(0, -1)) {
|
||||||
|
if (!hasOwn(pivot, key)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
pivot = pivot[key];
|
||||||
|
}
|
||||||
|
pivot[path[path.length - 1]] = value;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const [value, path] of getValuePaths(changedOptions)) {
|
||||||
|
modifyOption(path, value, options);
|
||||||
|
}
|
||||||
|
|
||||||
|
await this._optionsSave({source});
|
||||||
}
|
}
|
||||||
|
|
||||||
_onApiOptionsSave({source}) {
|
_onApiOptionsSave({source}) {
|
||||||
|
Loading…
Reference in New Issue
Block a user