fridge_api
Version:
Fridge API client for node/browser.
135 lines (108 loc) • 3.66 kB
JavaScript
;
exports.__esModule = true;
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
var Model = (function () {
function Model(data) {
_classCallCheck(this, Model);
this.raw = data;
this._parts = {};
this.attrs = this.parse();
}
Model.newFromType = function newFromType(type) {
var data = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
var parts = type.parts || [];
return new Model(_extends({
active: true,
site_id: type.site_id,
document_definition_id: type.id,
content: parts.map(function (partDefinition) {
return { part_definition_id: partDefinition.id, part: partDefinition };
})
}, data));
};
Model.prototype.commit = function commit() {
var _this = this;
var _loop = function (key) {
var value = _this.raw[key];
if (Array.isArray(value)) {
if (_this._isPart(value)) {
value.forEach(function (part, i) {
var partName = _this._partName(part);
if (_this._partValue(partName) !== _this._parts[partName]) {
_this.raw[key][i].value = _this._parts[partName];
}
});
return "continue";
}
}
if (value !== _this.attrs[key]) {
_this.raw[key] = _this.attrs[key];
}
};
for (var key in this.raw) {
var _ret = _loop(key);
if (_ret === "continue") continue;
}
return this.raw;
};
Model.prototype.parse = function parse() {
var _this2 = this;
var hash = {};
for (var key in this.raw) {
var value = this.raw[key];
if (Array.isArray(value)) {
if (this._isPart(value)) {
value.forEach(function (part) {
_this2._parts[_this2._partName(part)] = _this2._partValue(part);
});
} else if (this._isPartDefinition(value)) {
value.forEach(function (partDefinition) {
_this2._parts[_this2._partName(partDefinition)] = partDefinition;
});
} else {
hash[key] = value.map(function (v) {
return v && v.id ? new Model(v) : v;
});
continue;
}
}
hash[key] = value;
}
var _loop2 = function (key) {
Object.defineProperty(_this2, key, {
get: function get() {
return key in this.attrs ? this.attrs[key] : undefined;
},
set: function set(value) {
this.attrs[key] = value;
}
});
};
for (var key in hash) {
_loop2(key);
}
return hash;
};
Model.prototype.get = function get(key) {
return key in this._parts ? this._parts[key] : undefined;
};
Model.prototype.set = function set(key, value) {
this._parts[key] = value;
};
Model.prototype._isPart = function _isPart(val) {
return val && val[0] && val[0].part_definition_id;
};
Model.prototype._isPartDefinition = function _isPartDefinition(val) {
return val[0] && val[0].definition_id;
};
Model.prototype._partName = function _partName(part) {
return part.part ? part.part.name : part.name;
};
Model.prototype._partValue = function _partValue(part) {
return part.value;
};
return Model;
})();
exports["default"] = Model;
module.exports = exports["default"];