patch-resource
Version:
JSON Patch extension for Angular's ngResource module
44 lines (33 loc) • 1.42 kB
JavaScript
const observers = [];
function patchResourceService($resource) {
return function (host = '', params = {}, extensions = {}, ...rest) {
let resource;
if (extensions.patch) throw new Error('PatchResource: "Patch" is already extended with an action');
extensions.patch = {
method: 'PATCH',
transformRequest: function (resourceObject) {
const obj = observers.filter((_obj) => _obj.resourceObject === resourceObject)[0];
let patch;
if (!obj) throw new Error('No JSON Patch observer available for $patch');
patch = window.jsonpatch.generate(obj.observer);
return window.angular.toJson(patch);
},
};
resource = $resource(host, params, extensions, ...rest);
resource.__get = resource.get;
resource.get = function () {
const resourceObject = this.__get.apply(this, arguments);
resourceObject.$promise.then(function () {
observers.push({
resourceObject: resourceObject,
observer: window.jsonpatch.observe(resourceObject),
});
});
return resourceObject;
};
return resource;
};
}
window.angular
.module('patchResource', ['ngResource'])
.service('$patchResource', ['$resource', patchResourceService]);