private _updateCategoryForEvents()

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);
    }