@daypilot/daypilot-lite-angular
Version:
DayPilot Lite for Angular
49 lines • 6.26 kB
JavaScript
export function rand() {
return ((1 + Math.random()) * 0x10000) | 0;
}
;
export function optHash(options) {
return JSON.stringify(options);
}
;
export class EventDiff {
constructor() {
this.orig = { "hashes": {} };
}
diff(list) {
const orig = this.orig;
let result = {};
// new hashes, new ids
let hashes = {};
list = list || [];
for (let i = 0; i < list.length; i++) {
let e = list[i];
let id = e.id;
if (!id) {
throw "The 'id' property must be specified for event data object";
}
if (hashes.hasOwnProperty("" + id)) {
throw "Duplicate event IDs are not allowed, id: " + id;
}
hashes["" + id] = JSON.stringify(e);
}
// array of new objects
result.add = list.filter(function (item) {
return !orig.hashes.hasOwnProperty(item.id);
});
// array of IDs
result.remove = Object.getOwnPropertyNames(orig.hashes).filter(function (id) {
return !hashes.hasOwnProperty(id);
}).map(function (id) {
return JSON.parse(orig.hashes[id]).id;
}); // array of ids
// array of new objects
result.modify = list.filter(function (item) {
return orig.hashes.hasOwnProperty(item.id) && orig.hashes[item.id] !== hashes[item.id];
});
result.changeCount = result.add.length + result.modify.length + result.remove.length;
orig.hashes = hashes;
return result;
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2RheXBpbG90L2RheXBpbG90LWxpdGUtYW5ndWxhci9zcmMvbGliL3V0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxVQUFVLElBQUk7SUFDbEIsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQTtBQUM1QyxDQUFDO0FBQUEsQ0FBQztBQUVGLE1BQU0sVUFBVSxPQUFPLENBQUMsT0FBWTtJQUNsQyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDakMsQ0FBQztBQUFBLENBQUM7QUFFRixNQUFNLE9BQU8sU0FBUztJQUF0QjtRQUNFLFNBQUksR0FBUSxFQUFDLFFBQVEsRUFBRSxFQUFFLEVBQUMsQ0FBQztJQTRDN0IsQ0FBQztJQTFDQyxJQUFJLENBQUMsSUFBVztRQUNkLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDdkIsSUFBSSxNQUFNLEdBQVEsRUFBRSxDQUFDO1FBRXJCLHNCQUFzQjtRQUN0QixJQUFJLE1BQU0sR0FBUSxFQUFFLENBQUM7UUFDckIsSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFDbEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDcEMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2hCLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDZCxJQUFJLENBQUMsRUFBRSxFQUFFO2dCQUNQLE1BQU0sMkRBQTJELENBQUM7YUFDbkU7WUFDRCxJQUFJLE1BQU0sQ0FBQyxjQUFjLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFO2dCQUNsQyxNQUFNLDJDQUEyQyxHQUFHLEVBQUUsQ0FBQzthQUN4RDtZQUNELE1BQU0sQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNyQztRQUVELHVCQUF1QjtRQUN2QixNQUFNLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxJQUFJO1lBQ3JDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDOUMsQ0FBQyxDQUFDLENBQUM7UUFFSCxlQUFlO1FBQ2YsTUFBTSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUU7WUFDekUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDcEMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRTtZQUNqQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUN4QyxDQUFDLENBQUMsQ0FBQyxDQUFFLGVBQWU7UUFFcEIsdUJBQXVCO1FBQ3ZCLE1BQU0sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLElBQUk7WUFDeEMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN6RixDQUFDLENBQUMsQ0FBQztRQUVILE1BQU0sQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFFckYsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFFckIsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIHJhbmQoKSB7XG4gIHJldHVybiAoKDEgKyBNYXRoLnJhbmRvbSgpKSAqIDB4MTAwMDApIHwgMFxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIG9wdEhhc2gob3B0aW9uczogYW55KSB7XG4gIHJldHVybiBKU09OLnN0cmluZ2lmeShvcHRpb25zKTtcbn07XG5cbmV4cG9ydCBjbGFzcyBFdmVudERpZmYge1xuICBvcmlnOiBhbnkgPSB7XCJoYXNoZXNcIjoge319O1xuXG4gIGRpZmYobGlzdDogYW55W10pIHtcbiAgICBjb25zdCBvcmlnID0gdGhpcy5vcmlnO1xuICAgIGxldCByZXN1bHQ6IGFueSA9IHt9O1xuXG4gICAgLy8gbmV3IGhhc2hlcywgbmV3IGlkc1xuICAgIGxldCBoYXNoZXM6IGFueSA9IHt9O1xuICAgIGxpc3QgPSBsaXN0IHx8IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgbGV0IGUgPSBsaXN0W2ldO1xuICAgICAgbGV0IGlkID0gZS5pZDtcbiAgICAgIGlmICghaWQpIHtcbiAgICAgICAgdGhyb3cgXCJUaGUgJ2lkJyBwcm9wZXJ0eSBtdXN0IGJlIHNwZWNpZmllZCBmb3IgZXZlbnQgZGF0YSBvYmplY3RcIjtcbiAgICAgIH1cbiAgICAgIGlmIChoYXNoZXMuaGFzT3duUHJvcGVydHkoXCJcIiArIGlkKSkge1xuICAgICAgICB0aHJvdyBcIkR1cGxpY2F0ZSBldmVudCBJRHMgYXJlIG5vdCBhbGxvd2VkLCBpZDogXCIgKyBpZDtcbiAgICAgIH1cbiAgICAgIGhhc2hlc1tcIlwiICsgaWRdID0gSlNPTi5zdHJpbmdpZnkoZSk7XG4gICAgfVxuXG4gICAgLy8gYXJyYXkgb2YgbmV3IG9iamVjdHNcbiAgICByZXN1bHQuYWRkID0gbGlzdC5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHJldHVybiAhb3JpZy5oYXNoZXMuaGFzT3duUHJvcGVydHkoaXRlbS5pZCk7XG4gICAgfSk7XG5cbiAgICAvLyBhcnJheSBvZiBJRHNcbiAgICByZXN1bHQucmVtb3ZlID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob3JpZy5oYXNoZXMpLmZpbHRlcihmdW5jdGlvbiAoaWQpIHtcbiAgICAgIHJldHVybiAhaGFzaGVzLmhhc093blByb3BlcnR5KGlkKTtcbiAgICB9KS5tYXAoZnVuY3Rpb24gKGlkKSB7XG4gICAgICByZXR1cm4gSlNPTi5wYXJzZShvcmlnLmhhc2hlc1tpZF0pLmlkO1xuICAgIH0pOyAgLy8gYXJyYXkgb2YgaWRzXG5cbiAgICAvLyBhcnJheSBvZiBuZXcgb2JqZWN0c1xuICAgIHJlc3VsdC5tb2RpZnkgPSBsaXN0LmZpbHRlcihmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgcmV0dXJuIG9yaWcuaGFzaGVzLmhhc093blByb3BlcnR5KGl0ZW0uaWQpICYmIG9yaWcuaGFzaGVzW2l0ZW0uaWRdICE9PSBoYXNoZXNbaXRlbS5pZF07XG4gICAgfSk7XG5cbiAgICByZXN1bHQuY2hhbmdlQ291bnQgPSByZXN1bHQuYWRkLmxlbmd0aCArIHJlc3VsdC5tb2RpZnkubGVuZ3RoICsgcmVzdWx0LnJlbW92ZS5sZW5ndGg7XG5cbiAgICBvcmlnLmhhc2hlcyA9IGhhc2hlcztcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn1cbiJdfQ==