@daypilot/daypilot-lite-angular
Version:
DayPilot Lite for Angular
45 lines • 6.24 kB
JavaScript
export function rand() {
return ((1 + Math.random()) * 0x10000) | 0;
}
export function optHash(options) {
return JSON.stringify(options);
}
export class EventDiff {
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2RheXBpbG90L2RheXBpbG90LWxpdGUtYW5ndWxhci9zcmMvbGliL3V0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsTUFBTSxVQUFVLElBQUk7SUFDbEIsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQTtBQUM1QyxDQUFDO0FBRUQsTUFBTSxVQUFVLE9BQU8sQ0FBQyxPQUFZO0lBQ2xDLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNqQyxDQUFDO0FBRUQsTUFBTSxPQUFPLFNBQVM7SUFDcEIsSUFBSSxHQUFRLEVBQUMsUUFBUSxFQUFFLEVBQUUsRUFBQyxDQUFDO0lBRTNCLElBQUksQ0FBQyxJQUFXO1FBQ2QsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztRQUN2QixJQUFJLE1BQU0sR0FBUSxFQUFFLENBQUM7UUFFckIsc0JBQXNCO1FBQ3RCLElBQUksTUFBTSxHQUFRLEVBQUUsQ0FBQztRQUNyQixJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNsQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNwQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDaEIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNkLElBQUksQ0FBQyxFQUFFLEVBQUU7Z0JBQ1AsTUFBTSwyREFBMkQsQ0FBQzthQUNuRTtZQUNELElBQUksTUFBTSxDQUFDLGNBQWMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUU7Z0JBQ2xDLE1BQU0sMkNBQTJDLEdBQUcsRUFBRSxDQUFDO2FBQ3hEO1lBQ0QsTUFBTSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3JDO1FBRUQsdUJBQXVCO1FBQ3ZCLE1BQU0sQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLElBQUk7WUFDckMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM5QyxDQUFDLENBQUMsQ0FBQztRQUVILGVBQWU7UUFDZixNQUFNLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRTtZQUN6RSxPQUFPLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNwQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFO1lBQ2pCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3hDLENBQUMsQ0FBQyxDQUFDLENBQUUsZUFBZTtRQUVwQix1QkFBdUI7UUFDdkIsTUFBTSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsSUFBSTtZQUN4QyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3pGLENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUVyRixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUVyQixPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1NpZ25hbH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcblxuZXhwb3J0IHR5cGUgT3B0aW9uYWxTaWduYWw8VD4gPSBUIHwgU2lnbmFsPFQ+O1xuXG5leHBvcnQgZnVuY3Rpb24gcmFuZCgpIHtcbiAgcmV0dXJuICgoMSArIE1hdGgucmFuZG9tKCkpICogMHgxMDAwMCkgfCAwXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvcHRIYXNoKG9wdGlvbnM6IGFueSkge1xuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkob3B0aW9ucyk7XG59XG5cbmV4cG9ydCBjbGFzcyBFdmVudERpZmYge1xuICBvcmlnOiBhbnkgPSB7XCJoYXNoZXNcIjoge319O1xuXG4gIGRpZmYobGlzdDogYW55W10pIHtcbiAgICBjb25zdCBvcmlnID0gdGhpcy5vcmlnO1xuICAgIGxldCByZXN1bHQ6IGFueSA9IHt9O1xuXG4gICAgLy8gbmV3IGhhc2hlcywgbmV3IGlkc1xuICAgIGxldCBoYXNoZXM6IGFueSA9IHt9O1xuICAgIGxpc3QgPSBsaXN0IHx8IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgbGV0IGUgPSBsaXN0W2ldO1xuICAgICAgbGV0IGlkID0gZS5pZDtcbiAgICAgIGlmICghaWQpIHtcbiAgICAgICAgdGhyb3cgXCJUaGUgJ2lkJyBwcm9wZXJ0eSBtdXN0IGJlIHNwZWNpZmllZCBmb3IgZXZlbnQgZGF0YSBvYmplY3RcIjtcbiAgICAgIH1cbiAgICAgIGlmIChoYXNoZXMuaGFzT3duUHJvcGVydHkoXCJcIiArIGlkKSkge1xuICAgICAgICB0aHJvdyBcIkR1cGxpY2F0ZSBldmVudCBJRHMgYXJlIG5vdCBhbGxvd2VkLCBpZDogXCIgKyBpZDtcbiAgICAgIH1cbiAgICAgIGhhc2hlc1tcIlwiICsgaWRdID0gSlNPTi5zdHJpbmdpZnkoZSk7XG4gICAgfVxuXG4gICAgLy8gYXJyYXkgb2YgbmV3IG9iamVjdHNcbiAgICByZXN1bHQuYWRkID0gbGlzdC5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHJldHVybiAhb3JpZy5oYXNoZXMuaGFzT3duUHJvcGVydHkoaXRlbS5pZCk7XG4gICAgfSk7XG5cbiAgICAvLyBhcnJheSBvZiBJRHNcbiAgICByZXN1bHQucmVtb3ZlID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob3JpZy5oYXNoZXMpLmZpbHRlcihmdW5jdGlvbiAoaWQpIHtcbiAgICAgIHJldHVybiAhaGFzaGVzLmhhc093blByb3BlcnR5KGlkKTtcbiAgICB9KS5tYXAoZnVuY3Rpb24gKGlkKSB7XG4gICAgICByZXR1cm4gSlNPTi5wYXJzZShvcmlnLmhhc2hlc1tpZF0pLmlkO1xuICAgIH0pOyAgLy8gYXJyYXkgb2YgaWRzXG5cbiAgICAvLyBhcnJheSBvZiBuZXcgb2JqZWN0c1xuICAgIHJlc3VsdC5tb2RpZnkgPSBsaXN0LmZpbHRlcihmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgcmV0dXJuIG9yaWcuaGFzaGVzLmhhc093blByb3BlcnR5KGl0ZW0uaWQpICYmIG9yaWcuaGFzaGVzW2l0ZW0uaWRdICE9PSBoYXNoZXNbaXRlbS5pZF07XG4gICAgfSk7XG5cbiAgICByZXN1bHQuY2hhbmdlQ291bnQgPSByZXN1bHQuYWRkLmxlbmd0aCArIHJlc3VsdC5tb2RpZnkubGVuZ3RoICsgcmVzdWx0LnJlbW92ZS5sZW5ndGg7XG5cbiAgICBvcmlnLmhhc2hlcyA9IGhhc2hlcztcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn1cbiJdfQ==