photoprism/frontend/src/model/model.js
Michael Mayer d05cbf6fde Frontend: Format code
Signed-off-by: Michael Mayer <michael@liquidbytes.net>
2020-04-19 01:28:35 +02:00

68 lines
1.8 KiB
JavaScript

class Model {
constructor(values) {
this.__originalValues = {};
if (values) {
this.setValues(values);
} else {
this.setValues(this.getDefaults());
}
}
setValues(values) {
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] = JSON.parse(JSON.stringify(values[key]));
} else {
this.__originalValues[key] = 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;