UNPKG

@daypilot/daypilot-lite-angular

Version:

DayPilot Lite for Angular

49 lines 6.26 kB
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==