in legacy/src/Calendar/EventSources/FreeFormEventsSource.ts [256:308]
private _updateCategoryForEvents(
events: Calendar_Contracts.CalendarEvent[],
): PromiseLike<Calendar_Contracts.IEventCategory[]> {
const categoryMap: { [id: string]: boolean } = {};
const updatedCategories = [];
// remove event from current category
for (const event of events) {
const categoryForEvent = $.grep(this._categories, (cat: Calendar_Contracts.IEventCategory) => {
return cat.events.indexOf(event.id) > -1;
})[0];
if (categoryForEvent) {
// Do nothing if category hasn't changed
if (event.category && event.category.title === categoryForEvent.title) {
event.category = categoryForEvent;
return;
}
const index = categoryForEvent.events.indexOf(event.id);
categoryForEvent.events.splice(index, 1);
const count = categoryForEvent.events.length;
categoryForEvent.subTitle = Utils_String.format("{0} event{1}", count, count > 1 ? "s" : "");
if (!categoryMap[categoryForEvent.id]) {
categoryMap[categoryForEvent.id] = true;
updatedCategories.push(categoryForEvent);
}
}
// add event to new category
if (event.category) {
let newCategory = $.grep(this._categories, (cat: Calendar_Contracts.IEventCategory) => {
return cat.id === event.category.id;
})[0];
if (newCategory) {
// category already exists
newCategory.events.push(event.id);
const count = newCategory.events.length;
newCategory.subTitle = Utils_String.format("{0} event{1}", count, count > 1 ? "s" : "");
event.category = newCategory;
} else {
// category doesn't exist yet
newCategory = event.category;
newCategory.events = [event.id];
newCategory.subTitle = event.title;
newCategory.color = Calendar_ColorUtils.generateColor(event.category.title);
}
if (!categoryMap[newCategory.id]) {
categoryMap[newCategory.id] = true;
updatedCategories.push(newCategory);
}
}
}
// update categories
return this.updateCategories(updatedCategories);
}