photoprism/frontend/src/model/model.js

69 lines
1.8 KiB
JavaScript
Raw Normal View History

class Model {
constructor(values) {
this.__originalValues = {};
if (values) {
this.setValues(values);
} else {
this.setValues(this.getDefaults());
}
}
setValues(values, scalarOnly) {
if (!values) return;
for (let key in values) {
if (values.hasOwnProperty(key) && key !== "__originalValues") {
this[key] = values[key];
if (typeof values[key] !== "object") {
this.__originalValues[key] = values[key];
} else if (!scalarOnly) {
this.__originalValues[key] = JSON.parse(JSON.stringify(values[key]));
}
}
}
return this;
}
getValues(changed) {
const result = {};
const defaults = this.getDefaults();
for (let key in this.__originalValues) {
if (this.__originalValues.hasOwnProperty(key) && key !== "__originalValues") {
let val;
if (defaults.hasOwnProperty(key)) {
switch (typeof defaults[key]) {
case "bigint":
case "number":
val = parseFloat(this[key]);
break;
case "boolean":
val = !!this[key];
break;
default:
val = this[key];
}
} else {
val = this[key];
}
if (!changed || JSON.stringify(val) !== JSON.stringify(this.__originalValues[key])) {
result[key] = val;
}
}
}
return result;
}
getDefaults() {
return {};
}
}
export default Model;