Server IP : 80.87.202.40 / Your IP : 216.73.216.169 Web Server : Apache System : Linux rospirotorg.ru 5.14.0-539.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Dec 5 22:26:13 UTC 2024 x86_64 User : bitrix ( 600) PHP Version : 8.2.27 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /home/bitrix/ext_www/rospirotorg.ru/bitrix/js/calendar/open-events/list/dist/ |
Upload File : |
{"version":3,"file":"list.bundle.js","sources":["../src/model/category/category.js","../src/data-manager/category-manager/pull-requests.js","../src/api/category-api.js","../src/data-manager/category-manager/category-manager.js","../src/helpers/app-settings.js","../src/components/categories/edit-form/category-edit-form.js","../src/components/categories/header/categories-title.js","../src/components/categories/header/categories-search.js","../src/components/categories/categories-header.js","../src/data-manager/event-manager/pull-requests.js","../src/model/event/open-event.js","../src/data-manager/event-manager/recursion-parser.js","../src/api/event-api.js","../src/api/filter-api.js","../src/data-manager/event-manager/event-manager.js","../src/components/categories/category.js","../src/components/categories/category-list.js","../src/components/categories/categories.js","../src/components/events/parts/title-menu.js","../src/components/events/event-list-title.js","../src/components/events/parts/calendar-sheet.js","../src/components/events/parts/attend-button.js","../src/components/events/parts/comment-counter.js","../src/components/events/parts/attendee-counter.js","../src/components/events/parts/name-with-counter.js","../src/components/events/event.js","../src/components/events/empty-state.js","../src/components/events/event-list.js","../src/components/events/events.js","../src/components/base-component.js","../src/store/categories-search.js","../src/store/categories-store.js","../src/store/events-store.js","../src/store/store.js","../src/list.js"],"sourcesContent":["export class CategoryModel\n{\n\t#id: number;\n\t#closed: number;\n\t#name: string;\n\t#description: string;\n\t#eventsCount: number;\n\t#permissions: EventCategoryPermissions;\n\t#channelId: number;\n\t#isMuted: boolean;\n\t#isBanned: boolean;\n\t#newCount: number;\n\t#updatedAt: number = 0;\n\t#channel: ChannelInfo;\n\n\t#isSelected: boolean;\n\n\t//TODO: can see fields value on vue debug tools\n\tfields: {};\n\n\tconstructor(fields: CategoryDto = {})\n\t{\n\t\tthis.#id = fields.id;\n\t\tthis.#closed = fields.closed;\n\t\tthis.#name = fields.name;\n\t\tthis.#description = fields.description;\n\t\tthis.#eventsCount = fields.eventsCount;\n\t\tthis.#permissions = fields.permissions;\n\t\tthis.#channelId = fields.channelId;\n\t\tthis.#isMuted = fields.isMuted;\n\t\tthis.#isBanned = fields.isBanned;\n\t\tthis.#newCount = fields.newCount;\n\t\tthis.#updatedAt = fields.updatedAt || 0;\n\t\tthis.#channel = fields.channel;\n\n\t\tthis.#isSelected = false;\n\n\t\tthis.fields = fields;\n\t}\n\n\tget id(): number\n\t{\n\t\treturn this.#id;\n\t}\n\n\tget closed(): number\n\t{\n\t\treturn this.#closed;\n\t}\n\n\tget name(): string\n\t{\n\t\treturn this.#name;\n\t}\n\n\tget description(): string\n\t{\n\t\treturn this.#description;\n\t}\n\n\tget eventsCount(): number\n\t{\n\t\treturn this.#eventsCount;\n\t}\n\n\tget permissions(): EventCategoryPermissions\n\t{\n\t\treturn this.#permissions;\n\t}\n\n\tget channelId(): number\n\t{\n\t\treturn this.#channelId;\n\t}\n\n\tget isMuted(): boolean\n\t{\n\t\treturn this.#isMuted;\n\t}\n\n\tset isMuted(isMuted: boolean): void\n\t{\n\t\tthis.#isMuted = isMuted;\n\t}\n\n\tget isBanned(): boolean\n\t{\n\t\treturn this.#isBanned;\n\t}\n\n\tset isBanned(isBanned: boolean): void\n\t{\n\t\tthis.#isBanned = isBanned;\n\t}\n\n\tget newCount(): number\n\t{\n\t\treturn this.#newCount;\n\t}\n\n\tget isSelected(): boolean\n\t{\n\t\treturn this.#isSelected;\n\t}\n\n\tset isSelected(isSelected: number): void\n\t{\n\t\tthis.#isSelected = isSelected;\n\t}\n\n\tget updatedAt(): number\n\t{\n\t\treturn this.#updatedAt;\n\t}\n\n\tget channel(): ChannelInfo\n\t{\n\t\treturn this.#channel;\n\t}\n\n\tset channel(channel: ChannelInfo): void\n\t{\n\t\tthis.#channel = channel;\n\t}\n}\n","import { BaseEvent, EventEmitter } from 'main.core.events';\n\nexport class PullRequests extends EventEmitter\n{\n\tconstructor()\n\t{\n\t\tsuper();\n\n\t\tthis.setEventNamespace('Calendar.OpenEvents.List.CategoryManager.PullRequests');\n\t}\n\n\tgetModuleId(): string\n\t{\n\t\treturn 'calendar';\n\t}\n\n\tgetMap(): Object\n\t{\n\t\treturn {\n\t\t\tEVENT_CATEGORY_CREATED: this.#create.bind(this),\n\t\t\tEVENT_CATEGORY_UPDATED: this.#update.bind(this),\n\t\t\tEVENT_CATEGORY_DELETED: this.#delete.bind(this),\n\t\t\tOPEN_EVENT_SCORER_UPDATED: this.#eventScorerUpdated.bind(this),\n\t\t};\n\t}\n\n\t#update(event: BaseEvent): void\n\t{\n\t\tthis.emit('update', event);\n\t}\n\n\t#create(event: BaseEvent): void\n\t{\n\t\tthis.emit('create', event);\n\t}\n\n\t#delete(event: BaseEvent): void\n\t{\n\t\tthis.emit('delete', event);\n\t}\n\n\t#eventScorerUpdated(event: BaseEvent): void\n\t{\n\t\tthis.emit('eventScorerUpdated', event);\n\t}\n}\n","export type ListParams = {\n\tisBanned: boolean,\n\tquery: string,\n\tpage: number,\n\tcategoryId: number,\n};\n\nexport class CategoryApi\n{\n\tstatic async list(params: ListParams): Promise<CategoryDto>\n\t{\n\t\tconst response = await BX.ajax.runAction('calendar.open-events.Category.list', {\n\t\t\tdata: params,\n\t\t});\n\n\t\treturn response.data;\n\t}\n\n\tstatic async add(fields: CreateCategoryDto): Promise<CategoryDto>\n\t{\n\t\tconst response = await BX.ajax.runAction('calendar.open-events.Category.add', {\n\t\t\tdata: {\n\t\t\t\tname: fields.name,\n\t\t\t\tdescription: fields.description,\n\t\t\t\tclosed: fields.closed,\n\t\t\t\tattendees: fields.attendees,\n\t\t\t\tdepartmentIds: fields.departmentIds,\n\t\t\t\tchannelId: fields.channelId,\n\t\t\t},\n\t\t});\n\n\t\treturn response.data;\n\t}\n\n\tstatic update(fields: UpdateCategoryDto): Promise<void>\n\t{\n\t\treturn BX.ajax.runAction('calendar.open-events.Category.update', {\n\t\t\tdata: {\n\t\t\t\tid: fields.id,\n\t\t\t\tname: fields.name,\n\t\t\t\tdescription: fields.description,\n\t\t\t},\n\t\t});\n\t}\n\n\tstatic setMute(id: number, muteState: boolean): Promise<void>\n\t{\n\t\treturn BX.ajax.runAction('calendar.open-events.Category.setMute', {\n\t\t\tdata: { id, muteState },\n\t\t});\n\t}\n\n\tstatic setBan(id: number, banState: boolean): Promise<void>\n\t{\n\t\treturn BX.ajax.runAction('calendar.open-events.Category.setBan', {\n\t\t\tdata: { id, banState },\n\t\t});\n\t}\n\n\tstatic async getChannelInfo(id: number): Promise<ChannelInfo>\n\t{\n\t\tconst response = await BX.ajax.runAction('calendar.open-events.Category.getChannelInfo', {\n\t\t\tdata: { id },\n\t\t});\n\n\t\treturn response.data;\n\t}\n}\n","import { Type } from 'main.core';\nimport { EventEmitter, BaseEvent } from 'main.core.events';\nimport { CategoryModel } from '../../model/category/category';\nimport { PullRequests } from './pull-requests';\nimport { CategoryApi } from '../../api/category-api';\nimport type { ListParams } from '../../api/category-api';\n\nconst ListKeys = Object.freeze({\n\tnotBanned: 'notBanned',\n\tbanned: 'banned',\n\tsearch: 'search',\n});\n\nclass Manager extends EventEmitter\n{\n\t#categories: CategoryModel[] = [];\n\t#categoryIds: {[string]: number[]} = {};\n\t#categoryPromises: {[string]: {[number]: Promise}} = {};\n\t#lastLoadedPage: {[string]: number} = {};\n\t#loadedLists = {\n\t\t[ListKeys.notBanned]: false,\n\t\t[ListKeys.banned]: false,\n\t\t[ListKeys.search]: false,\n\t};\n\t#query: string;\n\n\tconstructor()\n\t{\n\t\tsuper();\n\n\t\tthis.setEventNamespace('Calendar.OpenEvents.List.CategoryManager');\n\n\t\tthis.#subscribeToPull();\n\t}\n\n\t#subscribeToPull(): void\n\t{\n\t\tif (!BX.PULL)\n\t\t{\n\t\t\tconsole.info('BX.PULL not initialized');\n\n\t\t\treturn;\n\t\t}\n\n\t\tconst pullRequests = new PullRequests();\n\t\tpullRequests.subscribe('create', this.#createCategoryPull.bind(this));\n\t\tpullRequests.subscribe('update', this.#updateCategoryPull.bind(this));\n\t\tpullRequests.subscribe('delete', this.#deleteCategoryPull.bind(this));\n\t\tpullRequests.subscribe('eventScorerUpdated', this.#onPullEventScorerUpdated.bind(this));\n\n\t\tBX.PULL.subscribe(pullRequests);\n\t}\n\n\t#createCategoryPull(event: BaseEvent): void\n\t{\n\t\tconst { fields } = event.getData();\n\n\t\tif (this.#getCategory(fields.id))\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tthis.#addNewCategory(fields);\n\t}\n\n\t#updateCategoryPull(event: BaseEvent): void\n\t{\n\t\tconst { fields } = event.getData();\n\n\t\tthis.#updateCategory(fields.id, fields);\n\t}\n\n\t#deleteCategoryPull(event: BaseEvent): void\n\t{\n\t\tconst { fields } = event.getData();\n\n\t\tthis.#categories = this.#categories.filter((category) => category.id !== fields.id)\n\n\t\tthis.emit('update');\n\t}\n\n\t#onPullEventScorerUpdated(event: BaseEvent): void\n\t{\n\t\tconst { fields: { categoriesCounter } } = event.getData();\n\n\t\tthis.#updateCounters(categoriesCounter);\n\t}\n\n\tasync addCategory(fields: CreateCategoryDto): Promise<void>\n\t{\n\t\tconst categoryDto = await CategoryApi.add(fields);\n\n\t\tthis.#addNewCategory(categoryDto);\n\t}\n\n\t#addNewCategory(categoryDto: CategoryDto): void\n\t{\n\t\tcategoryDto.updatedAt = Date.now();\n\n\t\tconst category = new CategoryModel(categoryDto);\n\n\t\tthis.#categories.push(category);\n\t\tthis.#categoryIds[ListKeys.notBanned]?.push(category.id);\n\n\t\tthis.emit('update');\n\t}\n\n\tasync updateCategory(fields: UpdateCategoryDto): Promise<void>\n\t{\n\t\tconst category = this.#getCategory(fields.id);\n\n\t\tcategory.channel.title = fields.name;\n\n\t\treturn CategoryApi.update(fields);\n\t}\n\n\tasync setMute(categoryId: number, isMuted: boolean): Promise<void>\n\t{\n\t\tthis.#updateCategory(categoryId, { isMuted });\n\n\t\tvoid CategoryApi.setMute(categoryId, isMuted);\n\t}\n\n\tasync setBan(categoryId: number, isBanned: boolean): Promise<void>\n\t{\n\t\tthis.#updateCategory(categoryId, { isBanned });\n\n\t\tvoid CategoryApi.setBan(categoryId, isBanned);\n\t}\n\n\tasync getChannelInfo(categoryId: number): Promise<ChannelInfo>\n\t{\n\t\tconst category = this.#categories.find((category) => category.id === categoryId);\n\n\t\tcategory.channel ??= await CategoryApi.getChannelInfo(categoryId);\n\n\t\treturn category.channel;\n\t}\n\n\tasync bubbleUp(categoryId: number): void\n\t{\n\t\tconst category = this.#getCategory(categoryId) ?? await this.#loadCategoryById(categoryId);\n\n\t\tthis.#updateCategory(category.id, {\n\t\t\tupdatedAt: Date.now(),\n\t\t});\n\t}\n\n\tasync searchMore(): Promise<CategoryModel[]>\n\t{\n\t\tif (this.#loadedLists[ListKeys.search])\n\t\t{\n\t\t\treturn [];\n\t\t}\n\n\t\tconst query = this.#query;\n\n\t\tconst listKey = this.#getListKey({ query });\n\n\t\tconst countBefore = this.#getListIds(listKey).length;\n\n\t\tconst lastPage = this.#lastLoadedPage[listKey] ?? -1;\n\t\tconst categories = await this.getCategories({\n\t\t\tquery,\n\t\t\tpage: lastPage + 1,\n\t\t});\n\n\t\tif (categories.length === countBefore)\n\t\t{\n\t\t\tthis.#loadedLists[listKey] = true;\n\t\t}\n\n\t\treturn categories;\n\t}\n\n\tasync loadMore(): Promise<CategoryModel[]>\n\t{\n\t\tif (this.#loadedLists[ListKeys.notBanned] && this.#loadedLists[ListKeys.banned])\n\t\t{\n\t\t\treturn [];\n\t\t}\n\n\t\tconst isBanned = this.#loadedLists[ListKeys.notBanned] && !this.#loadedLists[ListKeys.banned];\n\n\t\tconst listKey = this.#getListKey({ isBanned });\n\n\t\tconst countBefore = this.#getListIds(listKey).length;\n\n\t\tconst lastPage = this.#lastLoadedPage[listKey] ?? -1;\n\t\tconst categories = await this.getCategories({\n\t\t\tisBanned,\n\t\t\tpage: lastPage + 1,\n\t\t});\n\n\t\tif (categories.length === countBefore)\n\t\t{\n\t\t\tthis.#loadedLists[listKey] = true;\n\n\t\t\treturn this.loadMore();\n\t\t}\n\n\t\treturn categories;\n\t}\n\n\tasync searchCategories(query: string): Promise<CategoryModel[]>\n\t{\n\t\tif (query !== this.#query)\n\t\t{\n\t\t\tthis.#loadedLists[ListKeys.search] = false;\n\t\t\tdelete this.#lastLoadedPage[ListKeys.search];\n\t\t\tdelete this.#categoryPromises[ListKeys.search];\n\t\t\tdelete this.#categoryIds[ListKeys.search];\n\t\t}\n\n\t\tthis.#query = query;\n\n\t\treturn this.getCategories({ query });\n\t}\n\n\tasync getCategories(params: ListParams = { isBanned: false }): Promise<CategoryModel[]>\n\t{\n\t\tconst listKey = this.#getListKey(params);\n\n\t\tconst categories = await this.#loadCategories(params);\n\n\t\tconst alreadyLoadedIds = this.#categories.map((it) => it.id);\n\t\tconst newCategories = categories.filter((it) => !alreadyLoadedIds.includes(it.id));\n\n\t\tthis.#categories.push(...newCategories);\n\n\t\tconst alreadyLoadedListIds = this.#getListIds(listKey);\n\t\tconst newListCategories = categories.filter((it) => !alreadyLoadedListIds.includes(it.id));\n\n\t\tthis.#categoryIds[listKey] ??= [];\n\t\tthis.#categoryIds[listKey].push(...newListCategories.map((it) => it.id));\n\n\t\treturn this.#prepareCategories(listKey);\n\t}\n\n\t#prepareCategories(listKey: string): CategoryModel[]\n\t{\n\t\tconst listIds = this.#getListIds(listKey);\n\n\t\treturn this.#categories\n\t\t\t.filter((category) => listIds.includes(category.id))\n\t\t\t.map((category) => new CategoryModel(category.fields))\n\t\t;\n\t}\n\n\t#getListIds(listKey: string): number[]\n\t{\n\t\tconst listKeys = listKey === ListKeys.search ? [ListKeys.search] : [ListKeys.notBanned, ListKeys.banned];\n\n\t\tconst listIds = Object.entries(this.#categoryIds)\n\t\t\t.filter(([listKey]) => listKeys.includes(listKey))\n\t\t\t.flatMap(([, categoryIds]) => categoryIds)\n\t\t;\n\n\t\treturn [...new Set(listIds)];\n\t}\n\n\tasync #loadCategories(params: ListParams): Promise<CategoryModel[]>\n\t{\n\t\tconst isBanned = params.isBanned ?? null;\n\t\tconst query = params.query ?? '';\n\t\tconst page = params.page ?? 0;\n\n\t\tconst listKey = this.#getListKey(params);\n\n\t\tthis.#categoryPromises[listKey] ??= {};\n\t\tthis.#categoryPromises[listKey][page] ??= CategoryApi.list({ isBanned, query, page });\n\n\t\tconst categories: CategoryDto[] = await this.#categoryPromises[listKey][page];\n\n\t\tthis.#lastLoadedPage[listKey] = page;\n\n\t\treturn categories.map((category) => new CategoryModel(category));\n\t}\n\n\t#getListKey({ isBanned, query }: ListParams): string\n\t{\n\t\tif (Type.isStringFilled(query))\n\t\t{\n\t\t\treturn ListKeys.search;\n\t\t}\n\n\t\tif (isBanned === true)\n\t\t{\n\t\t\treturn ListKeys.banned;\n\t\t}\n\n\t\treturn ListKeys.notBanned;\n\t}\n\n\tasync #loadCategoryById(categoryId: number): Promise<CategoryModel>\n\t{\n\t\tconst promiseByIdKey = 'byId';\n\n\t\tthis.#categoryPromises[promiseByIdKey] ??= {};\n\t\tthis.#categoryPromises[promiseByIdKey][categoryId] ??= CategoryApi.list({ categoryId });\n\n\t\tconst categories: CategoryDto[] = await this.#categoryPromises[promiseByIdKey][categoryId];\n\t\tconst categoryDto: CategoryDto = categories.find((it) => it.id === categoryId);\n\n\t\tconst category = new CategoryModel(categoryDto);\n\n\t\tthis.#categories.push(category);\n\n\t\tconst listKey = category.isBanned ? ListKeys.banned : ListKeys.notBanned;\n\n\t\tthis.#categoryIds[listKey]?.push(category.id);\n\n\t\treturn category;\n\t}\n\n\t#updateCounters(categoryCounters: any): void\n\t{\n\t\tfor (const [id, newCount] of Object.entries(categoryCounters))\n\t\t{\n\t\t\tconst categoryId = parseInt(id, 10);\n\t\t\tconst category = this.#getCategory(categoryId);\n\t\t\tif (category === null)\n\t\t\t{\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst eventsCreated = newCount > category.newCount;\n\t\t\tconst updatedAt = eventsCreated ? Date.now() : category.updatedAt;\n\n\t\t\tthis.#updateCategory(categoryId, { newCount, updatedAt });\n\t\t}\n\t}\n\n\tincrementNewCounter(categoryId: number): void\n\t{\n\t\tconst category = this.#getCategory(categoryId);\n\t\tif (category === null)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tthis.#updateCategory(categoryId, {\n\t\t\tnewCount: category.newCount + 1,\n\t\t});\n\t}\n\n\tdecrementNewCounter(categoryId: number): void\n\t{\n\t\tconst category = this.#getCategory(categoryId);\n\t\tif (category === null)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tthis.#updateCategory(categoryId, {\n\t\t\tnewCount: category.newCount - 1,\n\t\t});\n\t}\n\n\t#getCategory(categoryId: number): ?CategoryModel\n\t{\n\t\treturn this.#categories.find((category: CategoryModel) => category.id === categoryId) ?? null;\n\t}\n\n\t#updateCategory(categoryId: number, fields: CategoryDto): void\n\t{\n\t\tthis.#categories = this.#categories.map((category: CategoryModel) => {\n\t\t\tif (category.id !== categoryId)\n\t\t\t{\n\t\t\t\treturn category;\n\t\t\t}\n\n\t\t\treturn this.#buildCategoryModel(category, fields);\n\t\t});\n\n\t\tthis.emit('update');\n\t}\n\n\t#buildCategoryModel(category: CategoryModel, fields: CategoryDto = {}): CategoryModel\n\t{\n\t\treturn new CategoryModel({\n\t\t\tid: category.id,\n\t\t\tclosed: fields.closed ?? category.closed,\n\t\t\tname: fields.name ?? category.name,\n\t\t\tdescription: fields.description ?? category.description,\n\t\t\teventsCount: fields.eventsCount ?? category.eventsCount,\n\t\t\tpermissions: category.permissions,\n\t\t\tchannelId: category.channelId,\n\t\t\tisMuted: fields.isMuted ?? category.isMuted,\n\t\t\tisBanned: fields.isBanned ?? category.isBanned,\n\t\t\tnewCount: fields.newCount ?? category.newCount,\n\t\t\tisSelected: fields.isSelected ?? category.isSelected,\n\t\t\tupdatedAt: fields.updatedAt ?? category.updatedAt,\n\t\t\tchannel: fields.channel ?? category.channel,\n\t\t});\n\t}\n}\n\nexport const CategoryManager = new Manager();\n","import { Extension, Text } from 'main.core';\n\nclass ExtensionSettings {\n\t#config: {\n\t\tcurrentUserId: number,\n\t\tcurrentUserTimeOffset: number,\n\t\topenEventSection: any,\n\t\tpullEventUserFieldsKey: string,\n\t};\n\n\tconstructor()\n\t{\n\t\tthis.#config = Extension.getSettings('calendar.open-events.list');\n\t}\n\n\tget currentUserId(): number\n\t{\n\t\treturn Text.toNumber(this.#config.currentUserId);\n\t}\n\n\tget openEventSection(): any\n\t{\n\t\treturn this.#config.openEventSection;\n\t}\n\n\tget currentUserTimeOffset(): number\n\t{\n\t\treturn Text.toNumber(this.#config.currentUserTimeOffset);\n\t}\n\n\tget pullEventUserFieldsKey(): string\n\t{\n\t\treturn this.#config.pullEventUserFieldsKey.toString();\n\t}\n}\n\nexport const AppSettings = new ExtensionSettings();\n","import { PopupManager } from 'main.popup';\nimport { TagSelector } from 'ui.entity-selector';\nimport { Switcher, SwitcherSize } from 'ui.switcher';\nimport { CategoryManager } from '../../../data-manager/category-manager/category-manager';\nimport { AppSettings } from '../../../helpers/app-settings';\nimport { CategoryModel } from '../../../model/category/category';\nimport { BaseEvent } from 'main.core.events';\nimport 'ui.icon-set.main';\nimport './category-edit-form.css';\n\ntype Params = {\n\tcategory: CategoryModel,\n\tcreate: boolean,\n};\n\nexport const CategoryEditForm = {\n\tdata(): Object\n\t{\n\t\treturn {\n\t\t\tid: 'calendar-open-events-category-edit-popup',\n\t\t\tparams: {},\n\t\t\tcategory: null,\n\t\t\tcreate: false,\n\t\t\tpopup: null,\n\t\t\tname: '',\n\t\t\tdescription: '',\n\t\t\tclosed: false,\n\t\t\tselectedChannelId: null,\n\t\t};\n\t},\n\tcomputed: {\n\t\tisEdit(): boolean\n\t\t{\n\t\t\treturn !this.create;\n\t\t},\n\t},\n\tmethods: {\n\t\tshow(params: Params = {}): void\n\t\t{\n\t\t\tthis.create = params.create;\n\t\t\tthis.category = params.category;\n\n\t\t\tif (this.category)\n\t\t\t{\n\t\t\t\tif (!this.category.channel)\n\t\t\t\t{\n\t\t\t\t\tCategoryManager.getChannelInfo(this.category.id).then((channelInfo: ChannelInfo) => {\n\t\t\t\t\t\tthis.category.channel = channelInfo;\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tthis.name = this.category.name;\n\t\t\t\tthis.description = this.category.description;\n\t\t\t\tthis.closed = this.category.closed;\n\t\t\t}\n\n\t\t\tPopupManager.getPopupById(this.id)?.destroy();\n\n\t\t\tthis.popup = PopupManager.create({\n\t\t\t\tid: this.id,\n\t\t\t\tautoHide: true,\n\t\t\t\tautoHideHandler: (event) => {\n\t\t\t\t\tconst isClickInside = this.popup.getPopupContainer().contains(event.target);\n\n\t\t\t\t\tlet isClickUserSelector = false;\n\t\t\t\t\tif (this.userSelector)\n\t\t\t\t\t{\n\t\t\t\t\t\tconst userSelectorPopup = this.userSelector.getDialog().getPopup();\n\t\t\t\t\t\tisClickUserSelector = userSelectorPopup.getPopupContainer().contains(event.target);\n\t\t\t\t\t}\n\n\t\t\t\t\tlet isClickChannelSelector = false;\n\t\t\t\t\tif (this.channelSelector)\n\t\t\t\t\t{\n\t\t\t\t\t\tconst channelSelectorPopup = this.channelSelector.getDialog().getPopup();\n\t\t\t\t\t\tisClickChannelSelector = channelSelectorPopup.getPopupContainer().contains(event.target);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn !isClickInside && !isClickUserSelector && !isClickChannelSelector;\n\t\t\t\t},\n\t\t\t\twidth: 600,\n\t\t\t\tcontent: this.$refs.popupContent,\n\t\t\t\tclassName: 'calendar-open-events-category-edit-popup-container',\n\t\t\t\ttitleBar: true,\n\t\t\t\tdraggable: true,\n\t\t\t});\n\n\t\t\tthis.renderSwitcher();\n\t\t\tif (this.create)\n\t\t\t{\n\t\t\t\tthis.renderChannelSelector();\n\t\t\t\tthis.renderUserSelector();\n\t\t\t}\n\n\t\t\tthis.popup.show();\n\n\t\t\tthis.$refs.inputName.focus();\n\t\t},\n\t\tasync onCreateButtonClick(): Promise<void>\n\t\t{\n\t\t\tconst attendees = this.userSelector?.getTags()\n\t\t\t\t.filter((tag) => tag.entityId === 'user')\n\t\t\t\t.map((tag) => tag.id)\n\t\t\t;\n\t\t\tconst departmentIds = this.userSelector?.getTags()\n\t\t\t\t.filter((tag) => tag.entityId === 'department')\n\t\t\t\t.map((tag) => tag.id)\n\t\t\t;\n\n\t\t\tawait CategoryManager.addCategory({\n\t\t\t\tname: this.name,\n\t\t\t\tdescription: this.description,\n\t\t\t\tclosed: this.closed,\n\t\t\t\tattendees: this.closed ? attendees : [],\n\t\t\t\tdepartmentIds: this.closed ? departmentIds : [],\n\t\t\t\tchannelId: this.selectedChannelId,\n\t\t\t});\n\n\t\t\tthis.clearFields();\n\n\t\t\tthis.popup.close();\n\t\t},\n\t\tasync onSaveButtonClick(): Promise<void>\n\t\t{\n\t\t\tawait CategoryManager.updateCategory({\n\t\t\t\tid: this.category.id,\n\t\t\t\tname: this.name,\n\t\t\t\tdescription: this.description,\n\t\t\t});\n\n\t\t\tthis.clearFields();\n\n\t\t\tthis.popup.close();\n\t\t},\n\t\tonCancelButtonClick(): void\n\t\t{\n\t\t\tthis.clearFields();\n\n\t\t\tthis.popup.close();\n\t\t},\n\t\tclearFields(): void\n\t\t{\n\t\t\tthis.name = '';\n\t\t\tthis.description = '';\n\t\t\tthis.closed = false;\n\t\t\tthis.userSelector?.getTags().forEach((tag) => {\n\t\t\t\tif (tag.getEntityId() === 'user' && tag.getId() === AppSettings.currentUserId)\n\t\t\t\t{\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.userSelector.removeTag(tag, false);\n\t\t\t});\n\t\t\tthis.channelSelector?.getTags().forEach(tag => this.channelSelector.removeTag(tag, false));\n\t\t\tthis.selectedChannelId = null;\n\t\t},\n\t\trenderSwitcher(): void\n\t\t{\n\t\t\tif (this.switcher)\n\t\t\t{\n\t\t\t\tthis.switcher.check(this.closed);\n\t\t\t\tthis.switcher.disable(Boolean(this.selectedChannelId));\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.switcher = new Switcher({\n\t\t\t\tnode: this.$refs.closedSwitcher,\n\t\t\t\tchecked: this.closed,\n\t\t\t\tsize: SwitcherSize.extraSmall,\n\t\t\t\tdisabled: Boolean(this.selectedChannelId),\n\t\t\t\thandlers: {\n\t\t\t\t\ttoggled: () => {\n\t\t\t\t\t\tthis.closed = this.switcher.isChecked();\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t});\n\t\t},\n\t\trenderUserSelector(): void\n\t\t{\n\t\t\tif (this.userSelector)\n\t\t\t{\n\t\t\t\tthis.userSelector.renderTo(this.$refs.userSelector);\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst currentUserItem = ['user', AppSettings.currentUserId];\n\n\t\t\tthis.userSelector = new TagSelector({\n\t\t\t\tdialogOptions: {\n\t\t\t\t\tcontext: 'CALENDAR_OPEN_EVENTS_CATEGORY_EDIT_FORM',\n\t\t\t\t\tshowAvatars: true,\n\t\t\t\t\tdropdownMode: true,\n\t\t\t\t\tpreload: true,\n\t\t\t\t\tentities: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tid: 'user',\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tid: 'department',\n\t\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\t\tselectMode: 'usersAndDepartments',\n\t\t\t\t\t\t\t\tallowFlatDepartments: true,\n\t\t\t\t\t\t\t\tallowSelectRootDepartment: true,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\tpreselectedItems: [currentUserItem],\n\t\t\t\t\tundeselectedItems: [currentUserItem],\n\t\t\t\t},\n\t\t\t});\n\n\t\t\tthis.userSelector.renderTo(this.$refs.userSelector);\n\t\t},\n\t\trenderChannelSelector(): void\n\t\t{\n\t\t\tif (this.channelSelector)\n\t\t\t{\n\t\t\t\tthis.channelSelector.renderTo(this.$refs.channelSelector);\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.channelSelector = new TagSelector({\n\t\t\t\tmultiple: false,\n\t\t\t\tdialogOptions: {\n\t\t\t\t\tcontext: 'CALENDAR_OPEN_EVENTS_CATEGORY_EDIT_FORM',\n\t\t\t\t\tdropdownMode: true,\n\t\t\t\t\tpreload: true,\n\t\t\t\t\tentities: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tid: 'im-channel',\n\t\t\t\t\t\t\tdynamicLoad: true,\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\tevents: {\n\t\t\t\t\t\t'Item:onSelect': this.onChannelSelected.bind(this),\n\t\t\t\t\t\t'Item:onDeselect': this.onChannelDeselected.bind(this),\n\t\t\t\t\t},\n\t\t\t\t\tmultiple: false,\n\t\t\t\t},\n\t\t\t});\n\n\t\t\tthis.channelSelector.renderTo(this.$refs.channelSelector);\n\t\t},\n\t\tonChannelSelected(event: BaseEvent): void\n\t\t{\n\t\t\tconst { item: tag } = event.getData();\n\t\t\tthis.selectedChannelId = tag.id;\n\t\t\tthis.closed = tag.customData.get('closed');\n\n\t\t\tif (!this.name || !this.userChangedName)\n\t\t\t{\n\t\t\t\tthis.name = tag.getTitle();\n\t\t\t}\n\n\t\t\tthis.renderSwitcher();\n\t\t},\n\t\tonChannelDeselected(event: BaseEvent): void\n\t\t{\n\t\t\tconst { item: tag } = event.getData();\n\t\t\tthis.selectedChannelId = null;\n\t\t\tthis.closed = false;\n\n\t\t\tif (this.name === tag.getTitle())\n\t\t\t{\n\t\t\t\tthis.name = '';\n\t\t\t\tthis.userChangedName = false;\n\t\t\t}\n\n\t\t\tthis.renderSwitcher();\n\t\t},\n\t\tgetFirstLetters(text): string\n\t\t{\n\t\t\tconst words = text.split(/[\\s,]/).filter((word) => /[\\p{L}\\p{N} ]/u.test(word[0]));\n\n\t\t\treturn (words[0]?.[0] ?? '') + (words[1]?.[0] ?? '');\n\t\t},\n\t\tonNameInput(): void\n\t\t{\n\t\t\tthis.userChangedName = true;\n\t\t}\n\t},\n\ttemplate: `\n\t\t<div class=\"calendar-open-events-category-edit-popup\" ref=\"popupContent\">\n\t\t\t<input\n\t\t\t\tclass=\"calendar-open-events-category-edit-name-input\"\n\t\t\t\t:placeholder=\"$Bitrix.Loc.getMessage('CALENDAR_OPEN_EVENTS_LIST_CATEGORY_NAME')\"\n\t\t\t\tv-model=\"name\"\n\t\t\t\t@input=\"onNameInput\"\n\t\t\t\tref=\"inputName\"\n\t\t\t>\n\t\t\t<div class=\"calendar-open-events-category-edit-channel --edit\" v-show=\"create\">\n\t\t\t\t<div class=\"ui-icon-set --speaker-mouthpiece\" v-if=\"create\"></div>\n\t\t\t\t<div class=\"calendar-open-events-category-edit-channel-text\" v-if=\"create\">\n\t\t\t\t\t{{ $Bitrix.Loc.getMessage('CALENDAR_OPEN_EVENTS_LIST_CATEGORY_CHOOSE_CHANNEL') }}\n\t\t\t\t</div>\n\t\t\t\t<div\n\t\t\t\t\tclass=\"calendar-open-events-category-edit-channel-selector\"\n\t\t\t\t\tref=\"channelSelector\"\n\t\t\t\t\tv-show=\"create\"\n\t\t\t\t></div>\n\t\t\t</div>\n\t\t\t<div class=\"calendar-open-events-category-edit-channel --edit\" v-if=\"!create && !category?.channel\">\n\t\t\t\t<div class=\"ui-icon-set --speaker-mouthpiece\"></div>\n\t\t\t\t<div class=\"calendar-open-events-category-edit-channel-loader\"></div>\n\t\t\t</div>\n\t\t\t<div class=\"calendar-open-events-category-edit-channel\" v-if=\"category?.channel\">\n\t\t\t\t<div class=\"ui-icon-set --speaker-mouthpiece\"></div>\n\t\t\t\t<img\n\t\t\t\t\tv-if=\"category.channel.avatar\"\n\t\t\t\t\tclass=\"calendar-open-events-category-edit-channel-avatar\"\n\t\t\t\t\t:src=\"category.channel.avatar\"\n\t\t\t\t>\n\t\t\t\t<div\n\t\t\t\t\tv-if=\"!category.channel.avatar && getFirstLetters(category.channel.title)\"\n\t\t\t\t\tclass=\"calendar-open-events-category-edit-channel-avatar\"\n\t\t\t\t\t:style=\"'background-color: ' + category.channel.color\"\n\t\t\t\t>\n\t\t\t\t\t{{ getFirstLetters(category.channel.title) }}\n\t\t\t\t</div>\n\t\t\t\t<div class=\"calendar-open-events-category-edit-channel-name\">{{ category.channel.title }}</div>\n\t\t\t</div>\n\t\t\t<div\n\t\t\t\tclass=\"calendar-open-events-category-edit-close\"\n\t\t\t\t:class=\"{\n\t\t\t\t\t'--closed': closed,\n\t\t\t\t\t'--disabled': !create,\n\t\t\t\t}\"\n\t\t\t>\n\t\t\t\t<div class=\"calendar-open-events-category-edit-close-switcher\">\n\t\t\t\t\t<div ref=\"closedSwitcher\"></div>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"calendar-open-events-category-edit-close-body\">\n\t\t\t\t\t<div class=\"calendar-open-events-category-edit-close-title\">\n\t\t\t\t\t\t{{ $Bitrix.Loc.getMessage('CALENDAR_OPEN_EVENTS_LIST_CATEGORY_CLOSE') }}\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"calendar-open-events-category-edit-close-hint\">\n\t\t\t\t\t\t{{ $Bitrix.Loc.getMessage('CALENDAR_OPEN_EVENTS_LIST_CATEGORY_CLOSE_HINT') }}\n\t\t\t\t\t</div>\n\t\t\t\t\t<div\n\t\t\t\t\t\tclass=\"calendar-open-events-category-edit-close-users\"\n\t\t\t\t\t\tref=\"userSelector\"\n\t\t\t\t\t\tv-show=\"create && closed && !selectedChannelId\"\n\t\t\t\t\t></div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<textarea\n\t\t\t\tclass=\"calendar-open-events-category-edit-description-textarea\"\n\t\t\t\t:placeholder=\"$Bitrix.Loc.getMessage('CALENDAR_OPEN_EVENTS_LIST_CATEGORY_DESCRIPTION')\"\n\t\t\t\tv-model=\"description\"\n\t\t\t></textarea>\n\t\t\t<div class=\"calendar-open-events-category-edit-buttons\">\n\t\t\t\t<div\n\t\t\t\t\tv-if=\"create\"\n\t\t\t\t\tclass=\"calendar-open-events-category-edit-button-create\"\n\t\t\t\t\t@click=\"onCreateButtonClick\"\n\t\t\t\t>\n\t\t\t\t\t<div class=\"ui-icon-set --calendar-1\"></div>\n\t\t\t\t\t<div class=\"calendar-open-events-category-edit-button-create-text\">\n\t\t\t\t\t\t{{ $Bitrix.Loc.getMessage('CALENDAR_OPEN_EVENTS_LIST_CATEGORY_CREATE') }}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div\n\t\t\t\t\tv-if=\"isEdit\"\n\t\t\t\t\tclass=\"calendar-open-events-category-edit-button-create\"\n\t\t\t\t\t@click=\"onSaveButtonClick\"\n\t\t\t\t>\n\t\t\t\t\t<div class=\"ui-icon-set --calendar-1\"></div>\n\t\t\t\t\t<div class=\"calendar-open-events-category-edit-button-create-text\">\n\t\t\t\t\t\t{{ $Bitrix.Loc.getMessage('CALENDAR_OPEN_EVENTS_LIST_CATEGORY_SAVE') }}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"calendar-open-events-category-edit-button-cancel\" @click=\"onCancelButtonClick\">\n\t\t\t\t\t{{ $Bitrix.Loc.getMessage('CALENDAR_OPEN_EVENTS_LIST_CATEGORY_CANCEL') }}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t`,\n};\n","import { CategoryEditForm } from '../edit-form/category-edit-form';\nimport 'ui.icon-set.main';\nimport 'ui.icon-set.actions';\nimport './header.css';\n\nexport const CategoriesTitle = {\n\tmethods: {\n\t\tonSearchClick(): void\n\t\t{\n\t\t\tthis.$store.dispatch('setSearchMode', true);\n\t\t},\n\t\tonAddClick(): void\n\t\t{\n\t\t\tthis.$refs.editForm.show({\n\t\t\t\tcreate: true,\n\t\t\t});\n\t\t},\n\t},\n\tcomponents: {\n\t\tCategoryEditForm,\n\t},\n\ttemplate: `\n\t\t<div class=\"calendar-open-events-list-categories-title\">\n\t\t\t<div class=\"calendar-open-events-list-categories-title-text\">\n\t\t\t\t{{ $Bitrix.Loc.getMessage('CALENDAR_OPEN_EVENTS_LIST_CATEGORIES') }}\n\t\t\t</div>\n\t\t\t<div class=\"calendar-open-events-list-categories-title-button\" @click=\"onSearchClick()\">\n\t\t\t\t<div class=\"ui-icon-set --search-2\"></div>\n\t\t\t</div>\n\t\t\t<div class=\"calendar-open-events-list-categories-title-button\" @click=\"onAddClick()\">\n\t\t\t\t<div class=\"ui-icon-set --plus-30\"></div>\n\t\t\t</div>\n\t\t</div>\n\t\t<CategoryEditForm ref=\"editForm\"/>\n\t`,\n};\n","import { Event, Runtime, Type } from 'main.core';\nimport { CategoryManager } from '../../../data-manager/category-manager/category-manager';\nimport 'ui.icon-set.actions';\nimport './header.css';\n\nexport const CategoriesSearch = {\n\tcreated(): void\n\t{\n\t\tthis.searchDebounced = Runtime.debounce(this.search, 500, this);\n\t},\n\tmounted(): void\n\t{\n\t\tthis.$refs.input.focus();\n\t\tEvent.bind(document, 'click', this.handleAutoHide, true);\n\t},\n\tunmounted(): void\n\t{\n\t\tEvent.unbind(document, 'click', this.handleAutoHide, true);\n\t},\n\tmethods: {\n\t\thandleAutoHide(event): void\n\t\t{\n\t\t\tif (this.shouldHideForm(event))\n\t\t\t{\n\t\t\t\tvoid this.closeSearch();\n\t\t\t}\n\t\t},\n\t\tshouldHideForm(event): boolean\n\t\t{\n\t\t\tconst queryIsEmpty = !Type.isStringFilled(this.getSearchQuery());\n\t\t\tconst clickOnSelf = this.$refs.search.contains(event.target);\n\n\t\t\treturn queryIsEmpty && !clickOnSelf;\n\t\t},\n\t\tonCloseSearchClick(): void\n\t\t{\n\t\t\tvoid this.closeSearch();\n\t\t},\n\t\tasync closeSearch(): Promise<void>\n\t\t{\n\t\t\tconst categories = await CategoryManager.getCategories();\n\n\t\t\tawait this.$store.dispatch('setCategories', categories);\n\t\t\tawait this.$store.dispatch('setSearchMode', false);\n\t\t},\n\t\tasync onSearchInput(): Promise<void>\n\t\t{\n\t\t\tconst query = this.getSearchQuery();\n\t\t\tif (Type.isStringFilled(query))\n\t\t\t{\n\t\t\t\tthis.searchDebounced(query);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tconst categories = await CategoryManager.getCategories();\n\n\t\t\t\tthis.$store.dispatch('setCategories', categories);\n\t\t\t}\n\t\t},\n\t\tasync search(query: string): Promise<void>\n\t\t{\n\t\t\tawait this.$store.dispatch('setCategoriesQuery', query);\n\n\t\t\tconst categories = await CategoryManager.searchCategories(query);\n\n\t\t\tif (query === this.getSearchQuery())\n\t\t\t{\n\t\t\t\tthis.$store.dispatch('setCategories', categories);\n\t\t\t}\n\t\t},\n\t\tgetSearchQuery(): string\n\t\t{\n\t\t\treturn this.$refs.input.value.trim();\n\t\t},\n\t},\n\ttemplate: `\n\t\t<div class=\"calendar-open-events-list-categories-search\" ref=\"search\">\n\t\t\t<input\n\t\t\t\tref=\"input\"\n\t\t\t\tclass=\"calendar-open-events-list-categories-search-input\"\n\t\t\t\ttype=\"text\"\n\t\t\t\t:placeholder=\"$Bitrix.Loc.getMessage('CALENDAR_OPEN_EVENTS_LIST_SEARCH_CATEGORY')\"\n\t\t\t\t@input=\"onSearchInput()\"\n\t\t\t>\n\t\t\t<div class=\"calendar-open-events-list-categories-close-search-button\" @click=\"onCloseSearchClick()\">\n\t\t\t\t<div class=\"ui-icon-set --cross-circle-70\"></div>\n\t\t\t</div>\n\t\t</div>\n\t`,\n};\n","import { mapGetters } from 'ui.vue3.vuex';\nimport { CategoriesTitle } from './header/categories-title';\nimport { CategoriesSearch } from './header/categories-search';\n\nexport const CategoriesHeader = {\n\tcomputed: {\n\t\t...mapGetters({\n\t\t\tisSearchMode: 'isSearchMode',\n\t\t}),\n\t},\n\tcomponents: {\n\t\tCategoriesTitle,\n\t\tCategoriesSearch,\n\t},\n\ttemplate: `\n\t\t<div class=\"calendar-open-events-list-categories-title-container\">\n\t\t\t<CategoriesSearch v-if=\"isSearchMode\"/>\n\t\t\t<CategoriesTitle v-else/>\n\t\t</div>\n\t`,\n};","import { EventEmitter, BaseEvent } from 'main.core.events';\n\nexport class PullRequests extends EventEmitter\n{\n\tconstructor()\n\t{\n\t\tsuper();\n\n\t\tthis.setEventNamespace('Calendar.OpenEvents.List.EventManager.PullRequests');\n\t}\n\n\tgetModuleId(): string\n\t{\n\t\treturn 'calendar';\n\t}\n\n\tgetMap(): Object\n\t{\n\t\treturn {\n\t\t\tOPEN_EVENT_CREATED: this.#create.bind(this),\n\t\t\tOPEN_EVENT_UPDATED: this.#update.bind(this),\n\t\t\tOPEN_EVENT_DELETED: this.#delete.bind(this),\n\t\t};\n\t}\n\n\t#create(event: BaseEvent): void\n\t{\n\t\tthis.emit('create', event);\n\t}\n\n\t#update(event: BaseEvent): void\n\t{\n\t\tthis.emit('update', event);\n\t}\n\n\t#delete(event: BaseEvent): void\n\t{\n\t\tthis.emit('delete', event);\n\t}\n}\n","import { Loc, Type } from 'main.core';\nimport { DateTimeFormat } from 'main.date';\nimport { RecursionParser } from '../../data-manager/event-manager/recursion-parser';\nimport type { EventOptions } from './event-options';\n\nexport class EventModel\n{\n\t#id: number;\n\t#name: string;\n\t#isFullDay: boolean;\n\t#dateFromTs: number;\n\t#dateToTs: number;\n\t#commentsCount: number;\n\t#isAttendee: boolean = false;\n\t#attendeesCount: number;\n\t#creatorId: number;\n\t#eventOptions: EventOptions;\n\t#categoryId: number;\n\t#categoryName: string;\n\t#color: string;\n\t#categoryChannelId: number;\n\t#threadId: number;\n\t#isNew: boolean;\n\t#rrule: ?any;\n\t#rruleDescription: ?string;\n\t#exdate: string;\n\n\tfields: {};\n\n\tconstructor(fields = {})\n\t{\n\t\tthis.#initFields(fields);\n\t}\n\n\t#initFields(fields): void\n\t{\n\t\tthis.#id = parseInt(fields.id, 10);\n\t\tthis.#name = fields.name;\n\t\tthis.#isFullDay = fields.isFullDay;\n\n\t\tconst fullDayOffset = this.isFullDay ? new Date().getTimezoneOffset() * 60 : 0;\n\t\tthis.#dateFromTs = fields.dateFromTs + fullDayOffset;\n\t\tthis.#dateToTs = fields.dateToTs + fullDayOffset;\n\n\t\tthis.#commentsCount = fields.commentsCount;\n\t\tthis.#isAttendee = fields.isAttendee;\n\t\tthis.#attendeesCount = fields.attendeesCount;\n\t\tthis.#creatorId = parseInt(fields.creatorId, 10);\n\t\tthis.#eventOptions = {\n\t\t\tmaxAttendees: fields.eventOptions?.maxAttendees || 0,\n\t\t};\n\t\tthis.#categoryId = parseInt(fields.categoryId, 10);\n\t\tthis.#categoryName = fields.categoryName;\n\t\tthis.#color = fields.color;\n\t\tthis.#categoryChannelId = fields.categoryChannelId;\n\t\tthis.#threadId = fields.threadId;\n\t\tthis.#isNew = fields.isNew;\n\t\tthis.#rrule = RecursionParser.parseRrule(fields.rrule);\n\t\tthis.#rruleDescription = fields.rruleDescription;\n\t\tif (Type.isNumber(fields.recursionAmount))\n\t\t{\n\t\t\tthis.#rrule.amount = fields.recursionAmount;\n\t\t}\n\t\tif (Type.isNumber(fields.recursionNum))\n\t\t{\n\t\t\tthis.#rrule.num = fields.recursionNum;\n\t\t}\n\n\t\tthis.#exdate = fields.exdate;\n\t\tthis.fields = fields;\n\t}\n\n\tupdateFields(fields)\n\t{\n\t\tif ('name' in fields)\n\t\t{\n\t\t\tthis.#name = fields.name;\n\t\t}\n\n\t\tif (!Type.isBoolean(fields.isAttendee))\n\t\t{\n\t\t\tdelete fields.isAttendee;\n\t\t}\n\n\t\tif (!Type.isNumber(fields.commentsCount))\n\t\t{\n\t\t\tdelete fields.commentsCount;\n\t\t}\n\n\t\tif ('isAttendee' in fields)\n\t\t{\n\t\t\tif (!this.#isAttendee && fields.isAttendee)\n\t\t\t{\n\t\t\t\tthis.incrementAttendeesCount();\n\t\t\t}\n\t\t\tif (this.#isAttendee && !fields.isAttendee)\n\t\t\t{\n\t\t\t\tthis.decrementAttendeesCount();\n\t\t\t}\n\n\t\t\tthis.#isAttendee = fields.isAttendee;\n\t\t}\n\n\t\tif ('attendeesCount' in fields)\n\t\t{\n\t\t\tthis.#attendeesCount = fields.attendeesCount;\n\t\t}\n\n\t\tObject.assign(this.fields, fields);\n\t}\n\n\tget uniqueId(): string\n\t{\n\t\treturn this.#id.toString() + '|' + this.#dateFromTs.toString();\n\t}\n\n\tget id(): number\n\t{\n\t\treturn this.#id;\n\t}\n\n\tget name(): string\n\t{\n\t\treturn this.#name;\n\t}\n\n\tget commentsCount(): number\n\t{\n\t\treturn this.#commentsCount;\n\t}\n\n\tget isAttendee(): boolean\n\t{\n\t\treturn this.#isAttendee;\n\t}\n\n\tset isAttendee(isAttendee: boolean): void\n\t{\n\t\tthis.#isAttendee = isAttendee;\n\t\tthis.updateFields({ isAttendee });\n\t}\n\n\tget attendeesCount(): number\n\t{\n\t\treturn this.#attendeesCount;\n\t}\n\n\tset attendeesCount(attendeesCount: number): void\n\t{\n\t\tthis.#attendeesCount = attendeesCount;\n\t\tthis.updateFields({ attendeesCount });\n\t}\n\n\tincrementAttendeesCount(): void\n\t{\n\t\tthis.attendeesCount = ++this.attendeesCount;\n\t}\n\n\tdecrementAttendeesCount(): void\n\t{\n\t\tthis.attendeesCount = --this.attendeesCount;\n\t}\n\n\tget creatorId(): number\n\t{\n\t\treturn this.#creatorId;\n\t}\n\n\tget eventOptions(): EventOptions\n\t{\n\t\treturn this.#eventOptions;\n\t}\n\n\tget categoryId(): number\n\t{\n\t\treturn this.#categoryId;\n\t}\n\n\tget categoryName(): string\n\t{\n\t\treturn this.#categoryName;\n\t}\n\n\tget duration(): number\n\t{\n\t\treturn this.dateTo.getTime() - this.dateFrom.getTime();\n\t}\n\n\tget dateFrom(): Date\n\t{\n\t\treturn new Date(this.#dateFromTs * 1000);\n\t}\n\n\tget dateTo(): Date\n\t{\n\t\treturn new Date(this.#dateToTs * 1000);\n\t}\n\n\tget formattedDateTime(): string\n\t{\n\t\tconst isSameDate = this.#getDateCode(this.#dateFromTs) === this.#getDateCode(this.#dateToTs);\n\t\tconst startsInCurrentYear = this.dateFrom.getFullYear() === new Date().getFullYear();\n\t\tconst endsInCurrentYear = this.dateTo.getFullYear() === new Date().getFullYear();\n\n\t\tif (isSameDate)\n\t\t{\n\t\t\tconst dateFormat = startsInCurrentYear ? 'DAY_OF_WEEK_MONTH_FORMAT' : 'FULL_DATE_FORMAT';\n\t\t\tconst date = DateTimeFormat.format(DateTimeFormat.getFormat(dateFormat), this.#dateFromTs);\n\t\t\tif (this.isFullDay)\n\t\t\t{\n\t\t\t\treturn date;\n\t\t\t}\n\n\t\t\tconst from = DateTimeFormat.format(DateTimeFormat.getFormat('SHORT_TIME_FORMAT'), this.#dateFromTs);\n\t\t\tconst to = DateTimeFormat.format(DateTimeFormat.getFormat('SHORT_TIME_FORMAT'), this.#dateToTs);\n\t\t\tconst time = Loc.getMessage('CALENDAR_OPEN_EVENTS_LIST_FORMAT_TIME_RANGE', {\n\t\t\t\t'#FROM#': from,\n\t\t\t\t'#TO#': to,\n\t\t\t});\n\n\t\t\treturn Loc.getMessage('CALENDAR_OPEN_EVENTS_LIST_FORMAT_DATE_TIME', {\n\t\t\t\t'#DATE#': date,\n\t\t\t\t'#TIME#': time,\n\t\t\t});\n\t\t}\n\n\t\tconst dateFromFormat = startsInCurrentYear ? 'DAY_MONTH_FORMAT' : 'LONG_DATE_FORMAT';\n\t\tconst dateToFormat = endsInCurrentYear ? 'DAY_MONTH_FORMAT' : 'LONG_DATE_FORMAT';\n\n\t\tconst dateFrom = DateTimeFormat.format(DateTimeFormat.getFormat(dateFromFormat), this.#dateFromTs);\n\t\tconst dateTo = DateTimeFormat.format(DateTimeFormat.getFormat(dateToFormat), this.#dateToTs);\n\n\t\tif (this.isFullDay)\n\t\t{\n\t\t\treturn Loc.getMessage('CALENDAR_OPEN_EVENTS_LIST_FORMAT_TIME_RANGE', {\n\t\t\t\t'#FROM#': dateFrom,\n\t\t\t\t'#TO#': dateTo,\n\t\t\t});\n\t\t}\n\n\t\tconst timeFrom = DateTimeFormat.format(DateTimeFormat.getFormat('SHORT_TIME_FORMAT'), this.#dateFromTs);\n\t\tconst timeTo = DateTimeFormat.format(DateTimeFormat.getFormat('SHORT_TIME_FORMAT'), this.#dateToTs);\n\n\t\treturn Loc.getMessage('CALENDAR_OPEN_EVENTS_LIST_FORMAT_DATE_TIME_RANGE', {\n\t\t\t'#FROM_DATE#': dateFrom,\n\t\t\t'#FROM_TIME#': timeFrom,\n\t\t\t'#TO_DATE#': dateTo,\n\t\t\t'#TO_TIME#': timeTo,\n\t\t});\n\t}\n\n\tget color(): string\n\t{\n\t\treturn this.#color;\n\t}\n\n\tget isFullDay(): boolean\n\t{\n\t\treturn this.#isFullDay;\n\t}\n\n\tget threadId(): number\n\t{\n\t\treturn this.#threadId;\n\t}\n\n\tget categoryChannelId(): number\n\t{\n\t\treturn this.#categoryChannelId;\n\t}\n\n\tget isNew(): boolean\n\t{\n\t\treturn this.#isNew;\n\t}\n\n\tset isNew(isNew: boolean): void\n\t{\n\t\tthis.#isNew = isNew;\n\t\tthis.updateFields({ isNew });\n\t}\n\n\tget exdate(): string\n\t{\n\t\treturn this.#exdate;\n\t}\n\n\tget rrule(): ?RRule\n\t{\n\t\treturn this.#rrule;\n\t}\n\n\tget rruleDescription(): ?string\n\t{\n\t\treturn this.#rruleDescription;\n\t}\n\n\t#getDateCode(timestamp: number): string\n\t{\n\t\treturn DateTimeFormat.format('d.m.Y', timestamp);\n\t}\n}\n","import { Type } from 'main.core';\nimport { DateTimeFormat } from 'main.date';\nimport { EventModel } from '../../model/event/open-event';\n\nconst END_OF_TIME = 2038;\n\nexport class RecursionParser\n{\n\tstatic parseRecursion(event: EventModel, { fromLimit, toLimit }): EventModel[]\n\t{\n\t\tif (event.rrule === null)\n\t\t{\n\t\t\treturn new EventModel(event.fields);\n\t\t}\n\n\t\tconst { timestamps } = this.parseTimestamps(event, { fromLimit, toLimit });\n\t\tconst recursionAmount = this.getAmount(event);\n\n\t\treturn timestamps.map(({ fromTs, num }) => new EventModel({\n\t\t\t...event.fields,\n\t\t\tdateFromTs: fromTs / 1000,\n\t\t\tdateToTs: fromTs / 1000 + event.duration / 1000,\n\t\t\trecursionAmount,\n\t\t\trecursionNum: num + 1,\n\t\t}));\n\t}\n\n\tstatic getAmount(event: EventModel): number\n\t{\n\t\tconst rruleCount = parseInt(event.rrule.COUNT, 10) || 0;\n\t\tif (rruleCount > 0)\n\t\t{\n\t\t\treturn rruleCount;\n\t\t}\n\n\t\tconst toLimit = DateTimeFormat.parse(event.rrule.UNTIL);\n\t\tif (toLimit.getFullYear() === END_OF_TIME)\n\t\t{\n\t\t\treturn Infinity;\n\t\t}\n\n\t\tconst { count } = this.parseTimestamps(event, { fromLimit: null, toLimit });\n\n\t\treturn count;\n\t}\n\n\tstatic parseTimestamps(event: EventModel, { fromLimit, toLimit }): number[]\n\t{\n\t\tconst timestamps = [];\n\n\t\tconst rrule = event.rrule;\n\t\tconst exDate = event.exdate.split(';');\n\n\t\tconst fullDayOffset = event.isFullDay ? new Date().getTimezoneOffset() * 60000 : 0;\n\t\tlet from = new Date(event.dateFrom.getTime() - fullDayOffset);\n\t\tconst to = new Date(Math.min(toLimit, DateTimeFormat.parse(rrule.UNTIL)));\n\t\tto.setHours(from.getHours(), from.getMinutes());\n\n\t\tconst fromYear = from.getFullYear();\n\t\tconst fromMonth = from.getMonth();\n\t\tconst fromDate = from.getDate();\n\t\tconst fromHour = from.getHours();\n\t\tconst fromMinute = from.getMinutes();\n\n\t\tlet count = 0;\n\n\t\tconst FORMAT_DATE = DateTimeFormat.getFormat('FORMAT_DATE');\n\n\t\twhile(from <= to)\n\t\t{\n\t\t\tif (rrule.COUNT > 0 && count >= rrule.COUNT)\n\t\t\t{\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tconst exclude = exDate.includes(DateTimeFormat.format(FORMAT_DATE, from.getTime() / 1000));\n\t\t\tconst include = !exclude\n\t\t\t\t&& (!fromLimit || from.getTime() >= fromLimit.getTime())\n\t\t\t\t&& (!toLimit || from.getTime() + event.duration <= toLimit.getTime())\n\t\t\t;\n\n\t\t\tif (rrule.FREQ === 'WEEKLY')\n\t\t\t{\n\t\t\t\tconst weekDay = this.getWeekDayByInd(DateTimeFormat.format('w', from.getTime() / 1000));\n\n\t\t\t\tif (Type.isStringFilled(rrule.BYDAY[weekDay]))\n\t\t\t\t{\n\t\t\t\t\tif (include)\n\t\t\t\t\t{\n\t\t\t\t\t\ttimestamps.push({\n\t\t\t\t\t\t\tfromTs: from.getTime(),\n\t\t\t\t\t\t\tnum: count,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tcount++;\n\t\t\t\t}\n\n\t\t\t\tconst skipWeek = (rrule.INTERVAL - 1) * 7 + 1;\n\t\t\t\tconst delta = weekDay === 'SU' ? skipWeek : 1;\n\n\t\t\t\tfrom = new Date(from.getFullYear(), from.getMonth(), from.getDate() + delta, fromHour, fromMinute);\n\t\t\t}\n\n\t\t\tif (['DAILY', 'MONTHLY', 'YEARLY'].includes(rrule.FREQ))\n\t\t\t{\n\t\t\t\tif (include)\n\t\t\t\t{\n\t\t\t\t\ttimestamps.push({\n\t\t\t\t\t\tfromTs: from.getTime(),\n\t\t\t\t\t\tnum: count,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tcount++;\n\n\t\t\t\tswitch (rrule.FREQ)\n\t\t\t\t{\n\t\t\t\t\tcase 'DAILY':\n\t\t\t\t\t\tfrom = new Date(fromYear, fromMonth, fromDate + count * rrule.INTERVAL, fromHour, fromMinute, 0, 0);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'MONTHLY':\n\t\t\t\t\t\tfrom = new Date(fromYear, fromMonth + count * rrule.INTERVAL, fromDate, fromHour, fromMinute, 0, 0);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'YEARLY':\n\t\t\t\t\t\tfrom = new Date(fromYear + count * rrule.INTERVAL, fromMonth, fromDate, fromHour, fromMinute, 0, 0);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn { timestamps, count };\n\t}\n\n\tstatic getWeekDayByInd(index): string\n\t{\n\t\treturn ['SU', 'MO', 'TU', 'WE', 'TH', 'FR', 'SA'][index];\n\t}\n\n\tstatic parseRrule(rule: string): ?RRule\n\t{\n\t\tif (!Type.isStringFilled(rule))\n\t\t{\n\t\t\treturn null;\n\t\t}\n\n\t\tconst res = {};\n\t\tconst pairs = rule.split(';')\n\t\t\t.map((it) => it.split('='))\n\t\t\t.filter(([ field ]) => Type.isStringFilled(field))\n\t\t;\n\n\t\tfor (const [ field, value ] of pairs)\n\t\t{\n\t\t\tif (field === 'FREQ' && ['DAILY', 'WEEKLY', 'MONTHLY', 'YEARLY'].includes(value))\n\t\t\t{\n\t\t\t\tres.FREQ = value;\n\t\t\t}\n\t\t\tif (['COUNT', 'INTERVAL'].includes(field))\n\t\t\t{\n\t\t\t\tres[field] = Math.max(1, parseInt(value, 10) ?? 0);\n\t\t\t}\n\t\t\tif (field === 'UNTIL')\n\t\t\t{\n\t\t\t\tres.UNTIL = value;\n\t\t\t}\n\t\t\tif (field === 'BYDAY')\n\t\t\t{\n\t\t\t\tconst regex = /(([-+])?\\d+)?(MO|TU|WE|TH|FR|SA|SU)/;\n\n\t\t\t\tfor (const day of value.split(',').filter((d) => regex.test(d)))\n\t\t\t\t{\n\t\t\t\t\tconst matches = [...day.match(regex)];\n\n\t\t\t\t\tres.BYDAY ??= {};\n\t\t\t\t\tres.BYDAY[matches[3]] = matches[1] ?? matches[3];\n\t\t\t\t}\n\n\t\t\t\tres.BYDAY ??= { MO: 'MO' };\n\t\t\t}\n\t\t}\n\n\t\treturn res;\n\t}\n}\n","export class EventApi\n{\n\tstatic async list(params: {\n\t\tcategoryId: number,\n\t\tfromMonth: number,\n\t\tfromYear: number,\n\t\ttoMonth: number,\n\t\ttoYear: number,\n\t}): Promise<EventDto[]>\n\t{\n\t\tconst { categoryId, fromMonth, fromYear, toMonth, toYear } = params;\n\n\t\tconst response = await BX.ajax.runAction('calendar.open-events.Event.list', {\n\t\t\tdata: {\n\t\t\t\tcategoryId,\n\t\t\t\tfromMonth,\n\t\t\t\tfromYear,\n\t\t\t\ttoMonth,\n\t\t\t\ttoYear,\n\t\t\t},\n\t\t});\n\n\t\treturn response.data;\n\t}\n\n\tstatic async getTsRange(categoryId: number): Promise<DateRange>\n\t{\n\t\tconst response = await BX.ajax.runAction('calendar.open-events.Event.getTsRange', {\n\t\t\tdata: {\n\t\t\t\tcategoryId,\n\t\t\t},\n\t\t});\n\n\t\treturn {\n\t\t\tfrom: new Date(parseInt(response.data.from, 10) * 1000),\n\t\t\tto: new Date(parseInt(response.data.to, 10) * 1000),\n\t\t};\n\t}\n\n\tstatic async setAttendeeStatus(eventId: number, attendeeStatus: boolean): Promise\n\t{\n\t\tconst response = await BX.ajax.runAction('calendar.open-events.Event.setAttendeeStatus', {\n\t\t\tdata: { eventId, attendeeStatus },\n\t\t});\n\n\t\treturn response.data;\n\t}\n\n\tstatic async setWatched(eventIds: number[]): Promise\n\t{\n\t\tconst response = await BX.ajax.runAction('calendar.open-events.Event.setWatched', {\n\t\t\tdata: { eventIds },\n\t\t});\n\n\t\treturn response.data;\n\t}\n}\n","export class FilterApi\n{\n\tstatic async query(params: {\n\t\tfilterId: number,\n\t\tfromMonth: number,\n\t\tfromYear: number,\n\t\ttoMonth: number,\n\t\ttoYear: number,\n\t}): Promise<EventDto[]>\n\t{\n\t\tconst { filterId, fromDate, fromMonth, fromYear, toDate, toMonth, toYear } = params;\n\n\t\tconst response = await BX.ajax.runAction('calendar.open-events.Filter.query', {\n\t\t\tdata: {\n\t\t\t\tfilterId,\n\t\t\t\tfromDate,\n\t\t\t\tfromMonth,\n\t\t\t\tfromYear,\n\t\t\t\ttoDate,\n\t\t\t\ttoMonth,\n\t\t\t\ttoYear,\n\t\t\t},\n\t\t});\n\n\t\treturn response.data;\n\t}\n\n\tstatic async getTsRange(filterId: number): Promise<DateRange>\n\t{\n\t\tconst response = await BX.ajax.runAction('calendar.open-events.Filter.getTsRange', {\n\t\t\tdata: {\n\t\t\t\tfilterId,\n\t\t\t},\n\t\t});\n\n\t\treturn {\n\t\t\tfrom: new Date(parseInt(response.data.from, 10) * 1000),\n\t\t\tto: new Date(parseInt(response.data.to, 10) * 1000),\n\t\t};\n\t}\n}\n","import { EventEmitter, BaseEvent } from 'main.core.events';\nimport { DateTimeFormat } from 'main.date';\nimport { Filter } from 'calendar.open-events.filter';\nimport { AppSettings } from '../../helpers/app-settings';\nimport { CategoryManager } from '../category-manager/category-manager';\nimport { PullRequests } from './pull-requests';\nimport { RecursionParser } from './recursion-parser';\nimport { EventApi, FilterApi } from '../../api/client';\nimport { EventModel } from '../../model/event/open-event';\n\nconst FILTER_CATEGORY_ID = -1;\n\nclass Manager extends EventEmitter\n{\n\t#filter: Filter;\n\n\t#events: EventModel[] = [];\n\t#eventIds: {[categoryId: number]: number[]} = {};\n\t#shownRanges: {[categoryId: number]: DateRange} = {};\n\t#loadedRanges: {[categoryId: number]: DateRange} = {};\n\t#tsRanges: {[categoryId: number]: DateRange} = {};\n\n\t#eventPromises: {[categoryId: number]: {[datesKey: string]: Promise<EventDto[]>}} = {};\n\t#tsRangePromises: {[categoryId: number]: Promise<DateRange>} = {};\n\n\tconstructor()\n\t{\n\t\tsuper();\n\n\t\tthis.setEventNamespace('Calendar.OpenEvents.List.EventManager');\n\n\t\tthis.#subscribeToPull();\n\t}\n\n\tsetFilter(filter: Filter): void\n\t{\n\t\tthis.#filter = filter;\n\t}\n\n\t#subscribeToPull(): void\n\t{\n\t\tif (!BX.PULL)\n\t\t{\n\t\t\tconsole.info('BX.PULL not initialized');\n\n\t\t\treturn;\n\t\t}\n\n\t\tconst pullRequests = new PullRequests();\n\t\tpullRequests.subscribe('create', this.#createEventPull.bind(this));\n\t\tpullRequests.subscribe('update', this.#updateEventPull.bind(this));\n\t\tpullRequests.subscribe('delete', this.#deletePullEvent.bind(this));\n\n\t\tBX.PULL.subscribe(pullRequests);\n\t}\n\n\t#createEventPull(event: BaseEvent): void\n\t{\n\t\tconst { fields: eventDto } = event.getData();\n\n\t\tconst newEvent = new EventModel(eventDto);\n\n\t\tthis.#events.push(newEvent);\n\n\t\t[0, newEvent.categoryId].forEach((categoryId) => this.#eventIds[categoryId]?.push(newEvent.id));\n\n\t\tif (newEvent.creatorId !== AppSettings.currentUserId)\n\t\t{\n\t\t\tnewEvent.isNew = true;\n\t\t\t[0, newEvent.categoryId].forEach((categoryId) => CategoryManager.incrementNewCounter(categoryId));\n\t\t}\n\n\t\tCategoryManager.bubbleUp(newEvent.categoryId);\n\n\t\tthis.emit('update', { eventId: newEvent.id });\n\t}\n\n\t#updateEventPull(event: BaseEvent): void\n\t{\n\t\tconst { fields: eventDto, [AppSettings.pullEventUserFieldsKey]: userFields } = event.getData();\n\t\tObject.assign(eventDto, userFields || {});\n\n\t\tthis.#updateEvent(eventDto.id, eventDto);\n\t}\n\n\t#deletePullEvent(event: BaseEvent): void\n\t{\n\t\tconst { fields: { eventId } } = event.getData();\n\n\t\tthis.#deleteEvent(eventId);\n\t}\n\n\tasync setEventAttendee(eventId: number, isAttendee: boolean): void\n\t{\n\t\tthis.#updateEvent(eventId, { isAttendee });\n\n\t\ttry\n\t\t{\n\t\t\tawait EventApi.setAttendeeStatus(eventId, isAttendee);\n\t\t}\n\t\tcatch (e)\n\t\t{\n\t\t\tthis.#updateEvent(eventId, { isAttendee: !isAttendee });\n\t\t}\n\t}\n\n\tasync setEventWatched(eventId: number): void\n\t{\n\t\tconst event = this.#getEvent(eventId);\n\t\tif (!event.isNew)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tthis.#updateEvent(eventId, { isNew: false });\n\n\t\ttry\n\t\t{\n\t\t\tawait EventApi.setWatched([ eventId ]);\n\n\t\t\tCategoryManager.decrementNewCounter(event.categoryId);\n\t\t}\n\t\tcatch\n\t\t{\n\t\t\tthis.#updateEvent(eventId, { isNew: true });\n\t\t}\n\t}\n\n\t#updateEvent(eventId: number, fields: any): void\n\t{\n\t\tconst event = this.#getEvent(eventId);\n\t\tif (!event)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tevent.updateFields(fields);\n\n\t\tthis.emit('update', { eventId });\n\t}\n\n\t#deleteEvent(eventId: number): void\n\t{\n\t\tthis.#events = this.#events.filter(it => it.id !== eventId);\n\n\t\tthis.emit('delete', { eventId });\n\t}\n\n\t#getEvent(eventId: number): ?EventModel\n\t{\n\t\treturn this.#events.find((it) => it.id === eventId) ?? null;\n\t}\n\n\tasync filterEvents(): Promise<EventModel[]>\n\t{\n\t\tconst filterKey = this.#filter.getFilterFieldsKey();\n\t\tif (filterKey !== this.filterEvents.previousFilterKey)\n\t\t{\n\t\t\tdelete this.#shownRanges[FILTER_CATEGORY_ID];\n\t\t\tdelete this.#loadedRanges[FILTER_CATEGORY_ID];\n\t\t\tdelete this.#eventIds[FILTER_CATEGORY_ID];\n\t\t\tdelete this.#eventPromises[FILTER_CATEGORY_ID];\n\t\t\tdelete this.#tsRanges[FILTER_CATEGORY_ID];\n\t\t\tdelete this.#tsRangePromises[FILTER_CATEGORY_ID];\n\t\t}\n\n\t\tthis.filterEvents.previousFilterKey = filterKey;\n\n\t\treturn this.getEvents(FILTER_CATEGORY_ID);\n\t}\n\n\tfilterNext(): Promise<EventModel[]>\n\t{\n\t\treturn this.getNext(FILTER_CATEGORY_ID);\n\t}\n\n\tfilterPrevious(): Promise<EventModel[]>\n\t{\n\t\treturn this.getPrevious(FILTER_CATEGORY_ID);\n\t}\n\n\tasync getNext(categoryId: number = 0): Promise<EventModel[]>\n\t{\n\t\tconst everythingIsLoaded = this.#loadedRanges[categoryId].to >= this.#tsRanges[categoryId].to;\n\t\tconst everythingIsShown = this.#shownRanges[categoryId].to >= this.#tsRanges[categoryId].to;\n\t\tconst events = this.#prepareEvents(categoryId);\n\n\t\tif (everythingIsShown)\n\t\t{\n\t\t\treturn events;\n\t\t}\n\n\t\tthis.#shownRanges[categoryId].to = this.#getLastDayOfNextMonth(this.#shownRanges[categoryId].to);\n\n\t\tconst eventsBeforeLoad = this.#prepareEvents(categoryId);\n\n\t\tif (everythingIsLoaded)\n\t\t{\n\t\t\tif (eventsBeforeLoad.length === events.length)\n\t\t\t{\n\t\t\t\treturn this.getNext(categoryId);\n\t\t\t}\n\n\t\t\treturn eventsBeforeLoad;\n\t\t}\n\n\t\tconst loadedEvents = await this.getEvents(categoryId, {\n\t\t\tfrom: this.#shownRanges[categoryId].to,\n\t\t\tto: this.#shownRanges[categoryId].to,\n\t\t});\n\n\t\tif (loadedEvents.length === eventsBeforeLoad.length)\n\t\t{\n\t\t\tawait this.getEvents(categoryId, {\n\t\t\t\tfrom: this.#shownRanges[categoryId].to,\n\t\t\t\tto: this.#tsRanges[categoryId].to,\n\t\t\t});\n\n\t\t\treturn this.getNext(categoryId);\n\t\t}\n\n\t\treturn loadedEvents;\n\t}\n\n\tasync getPrevious(categoryId: number = 0): Promise<EventModel[]>\n\t{\n\t\tconst everythingIsLoaded = this.#loadedRanges[categoryId].from <= this.#tsRanges[categoryId].from;\n\t\tconst everythingIsShown = this.#shownRanges[categoryId].from <= this.#tsRanges[categoryId].from;\n\t\tconst events = this.#prepareEvents(categoryId);\n\n\t\tif (everythingIsShown)\n\t\t{\n\t\t\treturn events;\n\t\t}\n\n\t\tthis.#shownRanges[categoryId].from = this.#getFirstDayOfPreviousMonth(this.#shownRanges[categoryId].from);\n\n\t\tconst eventsBeforeLoad = this.#prepareEvents(categoryId);\n\n\t\tif (everythingIsLoaded)\n\t\t{\n\t\t\tif (eventsBeforeLoad.length === events.length)\n\t\t\t{\n\t\t\t\treturn this.getPrevious(categoryId);\n\t\t\t}\n\n\t\t\treturn eventsBeforeLoad;\n\t\t}\n\n\t\tconst loadedEvents = await this.getEvents(categoryId, {\n\t\t\tfrom: this.#shownRanges[categoryId].from,\n\t\t\tto: this.#shownRanges[categoryId].from,\n\t\t});\n\n\t\tif (loadedEvents.length === eventsBeforeLoad.length)\n\t\t{\n\t\t\tawait this.getEvents(categoryId, {\n\t\t\t\tfrom: this.#tsRanges[categoryId].from,\n\t\t\t\tto: this.#shownRanges[categoryId].from,\n\t\t\t});\n\n\t\t\treturn this.getPrevious(categoryId);\n\t\t}\n\n\t\treturn loadedEvents;\n\t}\n\n\tasync getEvents(categoryId: number = 0, dateRange: DateRange = {}): Promise<EventModel[]>\n\t{\n\t\tthis.#tsRanges[categoryId] ??= await this.#loadTsRange(categoryId);\n\n\t\tconst today = new Date();\n\t\tlet from = dateRange.from ?? this.#getFirstDayOfPreviousMonth(today);\n\t\tlet to = dateRange.to ?? this.#getLastDayOfNextMonth(today);\n\n\t\tif (categoryId === FILTER_CATEGORY_ID && this.#filter.isDateFieldApplied())\n\t\t{\n\t\t\tfrom = this.#tsRanges[categoryId].from;\n\t\t\tto = this.#tsRanges[categoryId].to;\n\t\t}\n\n\t\tthis.#loadedRanges[categoryId] ??= { from, to };\n\t\tthis.#shownRanges[categoryId] ??= { from, to };\n\n\t\tthis.#loadedRanges[categoryId].from = new Date(Math.min(from, this.#loadedRanges[categoryId].from));\n\t\tthis.#loadedRanges[categoryId].to = new Date(Math.max(to, this.#loadedRanges[categoryId].to));\n\n\t\tconst events = await this.#loadEvents(categoryId, { from, to });\n\n\t\tconst alreadyLoadedIds = Object.values(this.#eventIds).flat();\n\t\tconst newEvents = events.filter((it) => !alreadyLoadedIds.includes(it.id));\n\n\t\tthis.#events.push(...newEvents);\n\n\t\tconst alreadyLoadedCategoryIds = this.#eventIds[categoryId] ?? [];\n\t\tconst newCategoryEvents = events.filter((it) => !alreadyLoadedCategoryIds.includes(it.id));\n\n\t\tthis.#eventIds[categoryId] ??= [];\n\t\tthis.#eventIds[categoryId].push(...newCategoryEvents.map((it) => it.id));\n\n\t\treturn this.#prepareEvents(categoryId);\n\t}\n\n\t#getFirstDayOfPreviousMonth(date: Date): Date\n\t{\n\t\treturn new Date(date.getFullYear(), date.getMonth() - 1, 1);\n\t}\n\n\t#getLastDayOfNextMonth(date: Date): Date\n\t{\n\t\treturn new Date(date.getFullYear(), date.getMonth() + 2, 0, 23, 59, 59);\n\t}\n\n\t#prepareEvents(categoryId: number): EventModel[]\n\t{\n\t\tconst fromLimit = this.#shownRanges[categoryId].from;\n\t\tconst toLimit = this.#shownRanges[categoryId].to;\n\n\t\treturn this.#events\n\t\t\t.filter((it) => this.#eventIds[categoryId].includes(it.id))\n\t\t\t.flatMap((it) => RecursionParser.parseRecursion(it, {\n\t\t\t\tfromLimit,\n\t\t\t\ttoLimit,\n\t\t\t}))\n\t\t\t.filter((it) => it.dateFrom >= fromLimit && it.dateTo <= toLimit)\n\t\t;\n\t}\n\n\tasync #loadEvents(categoryId: number, dateRange: DateRange): Promise<EventModel[]>\n\t{\n\t\tconst datesKey = this.#getDateKey(dateRange);\n\n\t\tthis.#eventPromises[categoryId] ??= {};\n\t\tthis.#eventPromises[categoryId][datesKey] ??= this.#requestEvents(categoryId, dateRange);\n\n\t\tconst response = await this.#eventPromises[categoryId][datesKey];\n\n\t\treturn response.map((eventDto: EventDto): EventModel => new EventModel(eventDto));\n\t}\n\n\t#getDateKey(dateRange: DateRange): string\n\t{\n\t\treturn `${this.#getDateCode(dateRange.from)}-${this.#getDateCode(dateRange.to)}`;\n\t}\n\n\t#getDateCode(date: Date): string\n\t{\n\t\treturn DateTimeFormat.format('d.m.Y', date);\n\t}\n\n\t#requestEvents(categoryId: number, dateRange: DateRange): Promise<EventDto[]>\n\t{\n\t\tif (categoryId === FILTER_CATEGORY_ID)\n\t\t{\n\t\t\treturn FilterApi.query({\n\t\t\t\tfilterId: this.#filter.id,\n\t\t\t\tfromDate: dateRange.from.getDate(),\n\t\t\t\tfromMonth: dateRange.from.getMonth() + 1,\n\t\t\t\tfromYear: dateRange.from.getFullYear(),\n\t\t\t\ttoDate: dateRange.to.getDate(),\n\t\t\t\ttoMonth: dateRange.to.getMonth() + 1,\n\t\t\t\ttoYear: dateRange.to.getFullYear(),\n\t\t\t});\n\t\t}\n\n\t\treturn EventApi.list({\n\t\t\tcategoryId,\n\t\t\tfromMonth: dateRange.from.getMonth() + 1,\n\t\t\tfromYear: dateRange.from.getFullYear(),\n\t\t\ttoMonth: dateRange.to.getMonth() + 1,\n\t\t\ttoYear: dateRange.to.getFullYear(),\n\t\t});\n\t}\n\n\tasync #loadTsRange(categoryId: number): Promise<DateRange>\n\t{\n\t\tthis.#tsRangePromises[categoryId] ??= this.#requestTsRange(categoryId);\n\n\t\treturn this.#tsRangePromises[categoryId];\n\t}\n\n\t#requestTsRange(categoryId: number): Promise<DateRange>\n\t{\n\t\tif (categoryId === FILTER_CATEGORY_ID)\n\t\t{\n\t\t\treturn FilterApi.getTsRange(this.#filter.id);\n\t\t}\n\n\t\treturn EventApi.getTsRange(categoryId);\n\t}\n}\n\nexport const EventManager = new Manager();\n","import { Loc } from 'main.core';\nimport { Counter } from 'ui.cnt';\nimport { mapGetters } from 'ui.vue3.vuex';\nimport { EventManager } from '../../data-manager/event-manager/event-manager';\nimport { CategoryModel } from '../../model/category/category';\nimport 'ui.icon-set.main';\n\nexport const Category = {\n\tprops: {\n\t\tcategory: CategoryModel,\n\t},\n\tcomputed: {\n\t\t...mapGetters({\n\t\t\tselectedCategoryId: 'selectedCategoryId',\n\t\t}),\n\t},\n\tmethods: {\n\t\tasync onClick(): void\n\t\t{\n\t\t\tawait this.$store.dispatch('selectCategory', this.category.id);\n\t\t\tawait this.$store.dispatch('setEventsLoading', true);\n\n\t\t\tconst events = await EventManager.getEvents(this.category.id);\n\n\t\t\tif (this.selectedCategoryId !== this.category.id)\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tawait this.$store.dispatch('setEvents', events);\n\t\t\tawait this.$store.dispatch('setEventsLoading', false);\n\t\t},\n\t\tgetEventCountPhrase(eventsCount: number): string\n\t\t{\n\t\t\treturn Loc.getMessagePlural('CALENDAR_OPEN_EVENTS_LIST_CATEGORY_EVENTS_COUNT', eventsCount, {\n\t\t\t\t'#COUNT#': eventsCount,\n\t\t\t});\n\t\t},\n\t\trenderCounter(): void\n\t\t{\n\t\t\tthis.$refs.counter.innerHTML = '';\n\t\t\tif (this.category.newCount > 0)\n\t\t\t{\n\t\t\t\tnew Counter({\n\t\t\t\t\tvalue: this.category.newCount,\n\t\t\t\t\tcolor: this.category.isMuted ? Counter.Color.GRAY : Counter.Color.DANGER,\n\t\t\t\t}).renderTo(this.$refs.counter);\n\t\t\t}\n\t\t},\n\t},\n\tmounted(): void\n\t{\n\t\tthis.renderCounter();\n\t},\n\twatch: {\n\t\tcategory(): void\n\t\t{\n\t\t\tthis.renderCounter();\n\t\t},\n\t},\n\ttemplate: `\n\t\t<div\n\t\t\tclass=\"calendar-open-events-list-category\"\n\t\t\t:class=\"{\n\t\t\t\t'--banned': category.isBanned,\n\t\t\t\t'--selected': category.isSelected,\n\t\t\t\t'--all-category': category.id === 0,\n\t\t\t}\"\n\t\t\t:data-category-id=\"category.id\"\n\t\t>\n\t\t\t<div class=\"calendar-open-events-list-category-inner\" @click=\"onClick\">\n\t\t\t\t<div class=\"calendar-open-events-list-category-title\">\n\t\t\t\t\t<div class=\"ui-icon-set --calendar-2\" v-if=\"category.id === 0\"></div>\n\t\t\t\t\t<div\n\t\t\t\t\t\tclass=\"calendar-open-events-list-category-title-name\"\n\t\t\t\t\t\t:title=\"category.name\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<span>{{ category.name }}</span>\n\t\t\t\t\t\t<div class=\"ui-icon-set --sound-off\" v-if=\"category.isMuted && !category.isBanned\"></div>\n\t\t\t\t\t\t<div class=\"ui-icon-set --lock\" v-if=\"category.closed\"></div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div ref=\"counter\"></div>\n\t\t\t\t</div>\n\t\t\t\t<div\n\t\t\t\t\tclass=\"calendar-open-events-list-category-info\"\n\t\t\t\t\tv-html=\"getEventCountPhrase(category.eventsCount)\"\n\t\t\t\t\tv-if=\"category.id !== 0\"\n\t\t\t\t>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t`,\n};\n","import { mapGetters } from 'ui.vue3.vuex';\nimport { CategoryManager } from '../../data-manager/category-manager/category-manager';\nimport type { CategoryModel } from '../../model/category/category';\nimport { Category } from './category';\n\nexport const CategoryList = {\n\tcomputed: {\n\t\t...mapGetters({\n\t\t\tcategories: 'categories',\n\t\t\tisSearchMode: 'isSearchMode',\n\t\t\tcategoriesQuery: 'categoriesQuery',\n\t\t}),\n\t\tallCategory(): CategoryModel\n\t\t{\n\t\t\treturn this.categories.find((category) => category.id === 0);\n\t\t},\n\t\tsortedCategories(): CategoryModel[]\n\t\t{\n\t\t\treturn [...this.categories]\n\t\t\t\t.filter((category) => category.id > 0)\n\t\t\t\t.sort((a: CategoryModel, b: CategoryModel) => {\n\t\t\t\t\tif (a.isBanned !== b.isBanned)\n\t\t\t\t\t{\n\t\t\t\t\t\treturn a.isBanned - b.isBanned;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn b.updatedAt - a.updatedAt;\n\t\t\t\t})\n\t\t\t;\n\t\t},\n\t},\n\tmounted(): void\n\t{\n\t\tvoid this.loadOnScroll();\n\t\tthis.$refs.categoryList.addEventListener('scroll', this.loadOnScroll);\n\t\tCategoryManager.subscribe('update', this.onCategoriesUpdatedHandler);\n\t},\n\tbeforeUnmount(): void\n\t{\n\t\tthis.$refs.categoryList.removeEventListener('scroll', this.loadOnScroll);\n\t\tCategoryManager.unsubscribe('update', this.onCategoriesUpdatedHandler);\n\t},\n\twatch: {\n\t\tcategories()\n\t\t{\n\t\t\tvoid this.$nextTick(() => this.loadOnScroll());\n\t\t},\n\t},\n\tmethods: {\n\t\tasync onCategoriesUpdatedHandler(): Promise<void>\n\t\t{\n\t\t\tconst categories = await this.getCategories();\n\n\t\t\tthis.$store.dispatch('setCategories', categories);\n\t\t},\n\t\tasync loadOnScroll(): Promise\n\t\t{\n\t\t\tconst scrollTop = this.$refs.categoryList.scrollTop;\n\t\t\tconst scrollHeight = this.$refs.categoryList.scrollHeight;\n\t\t\tconst offsetHeight = this.$refs.categoryList.offsetHeight;\n\n\t\t\tif (scrollTop + 1 >= scrollHeight - offsetHeight)\n\t\t\t{\n\t\t\t\tconst categories = await this.loadMore();\n\n\t\t\t\tif (categories.length > 0)\n\t\t\t\t{\n\t\t\t\t\tthis.$store.dispatch('setCategories', categories);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tgetCategories(): Promise<CategoryModel[]>\n\t\t{\n\t\t\tif (this.isSearchMode)\n\t\t\t{\n\t\t\t\treturn CategoryManager.searchCategories(this.categoriesQuery);\n\t\t\t}\n\n\t\t\treturn CategoryManager.getCategories();\n\t\t},\n\t\tloadMore(): Promise<CategoryModel[]>\n\t\t{\n\t\t\tif (this.isSearchMode)\n\t\t\t{\n\t\t\t\treturn CategoryManager.searchMore();\n\t\t\t}\n\n\t\t\treturn CategoryManager.loadMore();\n\t\t},\n\t},\n\tcomponents: {\n\t\tCategory,\n\t},\n\ttemplate: `\n\t\t<div class=\"calendar-open-events-list-category-list --calendar-scroll-bar\" ref=\"categoryList\">\n\t\t\t<Category :category=\"allCategory\" v-show=\"!isSearchMode\"/>\n\t\t\t<Category v-for=\"category of sortedCategories\" :category=\"category\"/>\n\t\t</div>\n\t`,\n};\n","import { mapGetters } from 'ui.vue3.vuex';\nimport { CategoriesHeader } from './categories-header';\nimport { CategoryList } from './category-list';\nimport './categories.css';\n\nexport const Categories = {\n\tcomputed: {\n\t\t...mapGetters({\n\t\t\tisFilterMode: 'isFilterMode',\n\t\t}),\n\t},\n\tcomponents: {\n\t\tCategoriesHeader,\n\t\tCategoryList,\n\t},\n\ttemplate: `\n\t\t<div class=\"calendar-open-events-list-categories\" :class=\"{ '--filter': isFilterMode }\" >\n\t\t\t<CategoriesHeader/>\n\t\t\t<CategoryList/>\n\t\t</div>\n\t`,\n};\n","import { Menu } from 'main.popup';\nimport { Messenger } from 'im.public.iframe';\nimport { CategoryManager } from '../../../data-manager/category-manager/category-manager';\nimport { CategoryModel } from '../../../model/category/category';\nimport { CategoryEditForm } from '../../categories/edit-form/category-edit-form';\nimport 'ui.icon-set.main';\n\nexport const TitleMenu = {\n\tprops: {\n\t\tcategory: CategoryModel,\n\t},\n\tdata(): Object {\n\t\treturn {\n\t\t\tmenu: Menu,\n\t\t};\n\t},\n\tmethods: {\n\t\topenMenu(): void\n\t\t{\n\t\t\tthis.menu = new Menu({\n\t\t\t\tbindElement: this.$refs.menuIcon,\n\t\t\t\tcloseByEsc: true,\n\t\t\t\titems: this.getMenuItems(),\n\t\t\t});\n\n\t\t\tthis.menu.show();\n\t\t},\n\t\tredrawMenu(): void\n\t\t{\n\t\t\tconst itemIds = this.menu.getMenuItems().map((item) => item.getId());\n\t\t\titemIds.forEach((id) => this.menu.removeMenuItem(id, {\n\t\t\t\tdestroyEmptyPopup: false,\n\t\t\t}));\n\t\t\tthis.getMenuItems().forEach((item) => this.menu.addMenuItem(item));\n\t\t},\n\t\tgetMenuItems(): any[]\n\t\t{\n\t\t\tconst items = [\n\t\t\t\tthis.getInfoItem(),\n\t\t\t\tthis.getOpenChatItem(),\n\t\t\t];\n\n\t\t\tif (!this.category.isBanned)\n\t\t\t{\n\t\t\t\titems.push(this.getMuteItem());\n\t\t\t}\n\n\t\t\titems.push(this.getBanItem());\n\n\t\t\tif (this.category.permissions.edit === true)\n\t\t\t{\n\t\t\t\titems.push(this.getEditItem());\n\t\t\t}\n\n\t\t\tif (this.category.permissions.delete === true)\n\t\t\t{\n\t\t\t\titems.push(this.getDeleteItem());\n\t\t\t}\n\n\t\t\treturn items;\n\t\t},\n\t\tgetInfoItem()\n\t\t{\n\t\t\treturn {\n\t\t\t\thtml: `\n\t\t\t\t\t<div class=\"calendar-open-events-list-menu-item\">\n\t\t\t\t\t\t<div class=\"ui-icon-set --info-circle\"></div>\n\t\t\t\t\t\t<span>${this.$Bitrix.Loc.getMessage('CALENDAR_OPEN_EVENTS_LIST_MENU_ABOUT_CATEGORY')}</span>\n\t\t\t\t\t</div>\n\t\t\t\t`,\n\t\t\t\tonclick: () => {\n\t\t\t\t\tthis.menu.close();\n\t\t\t\t\talert('info');\n\t\t\t\t},\n\t\t\t};\n\t\t},\n\t\tgetOpenChatItem(): any\n\t\t{\n\t\t\treturn {\n\t\t\t\thtml: `\n\t\t\t\t\t<div class=\"calendar-open-events-list-menu-item\">\n\t\t\t\t\t\t<div class=\"ui-icon-set --chats-2\"></div>\n\t\t\t\t\t\t<span>${this.$Bitrix.Loc.getMessage('CALENDAR_OPEN_EVENTS_LIST_MENU_OPEN_CHANNEL')}</span>\n\t\t\t\t\t</div>\n\t\t\t\t`,\n\t\t\t\tonclick: () => {\n\t\t\t\t\tthis.menu.close();\n\t\t\t\t\tMessenger.openChat(`chat${this.category.channelId}`);\n\t\t\t\t},\n\t\t\t};\n\t\t},\n\t\tgetMuteItem(): any\n\t\t{\n\t\t\treturn {\n\t\t\t\thtml: this.renderMuteItem(),\n\t\t\t\tonclick: () => {\n\t\t\t\t\tthis.category.isMuted = !this.category.isMuted;\n\n\t\t\t\t\tthis.muteCategory(this.category.isMuted);\n\n\t\t\t\t\tthis.redrawMenu();\n\t\t\t\t},\n\t\t\t};\n\t\t},\n\t\trenderMuteItem(): string\n\t\t{\n\t\t\tconst icon = this.category.isMuted ? '--notifications-off' : '--bell-1';\n\n\t\t\tconst text = this.category.isMuted\n\t\t\t\t? this.$Bitrix.Loc.getMessage('CALENDAR_OPEN_EVENTS_LIST_MENU_ENABLE_NOTIFY')\n\t\t\t\t: this.$Bitrix.Loc.getMessage('CALENDAR_OPEN_EVENTS_LIST_MENU_DISABLE_NOTIFY')\n\t\t\t;\n\n\t\t\treturn `\n\t\t\t\t<div class=\"calendar-open-events-list-menu-item\">\n\t\t\t\t\t<div class=\"ui-icon-set ${icon}\"></div>\n\t\t\t\t\t<span>${text}</span>\n\t\t\t\t</div>\n\t\t\t`;\n\t\t},\n\t\tgetBanItem(): any\n\t\t{\n\t\t\treturn {\n\t\t\t\thtml: this.renderBanItem(),\n\t\t\t\tonclick: () => {\n\t\t\t\t\tthis.category.isBanned = !this.category.isBanned;\n\n\t\t\t\t\tthis.banCategory(this.category.isBanned);\n\n\t\t\t\t\tthis.redrawMenu();\n\t\t\t\t},\n\t\t\t};\n\t\t},\n\t\trenderBanItem(): any\n\t\t{\n\t\t\tconst icon = this.category.isBanned ? '--bell-1' : '--unavailable';\n\n\t\t\tconst text = this.category.isBanned\n\t\t\t\t? this.$Bitrix.Loc.getMessage('CALENDAR_OPEN_EVENTS_LIST_MENU_SUBSCRIBE')\n\t\t\t\t: this.$Bitrix.Loc.getMessage('CALENDAR_OPEN_EVENTS_LIST_MENU_UNSUBSCRIBE')\n\t\t\t;\n\n\t\t\treturn `\n\t\t\t\t<div class=\"calendar-open-events-list-menu-item\">\n\t\t\t\t\t<div class=\"ui-icon-set ${icon}\"></div>\n\t\t\t\t\t<span>${text}</span>\n\t\t\t\t</div>\n\t\t\t`;\n\t\t},\n\t\tgetEditItem(): any\n\t\t{\n\t\t\treturn {\n\t\t\t\thtml: `\n\t\t\t\t\t<div class=\"calendar-open-events-list-menu-item\">\n\t\t\t\t\t\t<div class=\"ui-icon-set --pencil-40\"></div>\n\t\t\t\t\t\t<span>${this.$Bitrix.Loc.getMessage('CALENDAR_OPEN_EVENTS_LIST_MENU_EDIT')}</span>\n\t\t\t\t\t</div>\n\t\t\t\t`,\n\t\t\t\tonclick: () => {\n\t\t\t\t\tthis.menu.close();\n\t\t\t\t\tthis.openEditCategoryForm();\n\t\t\t\t},\n\t\t\t};\n\t\t},\n\t\tgetDeleteItem(): any\n\t\t{\n\t\t\treturn {\n\t\t\t\thtml: `\n\t\t\t\t\t<div class=\"calendar-open-events-list-menu-item\">\n\t\t\t\t\t\t<div class=\"ui-icon-set --cross-40\"></div>\n\t\t\t\t\t\t<span>${this.$Bitrix.Loc.getMessage('CALENDAR_OPEN_EVENTS_LIST_MENU_DELETE')}</span>\n\t\t\t\t\t</div>\n\t\t\t\t`,\n\t\t\t\tonclick: () => {\n\t\t\t\t\tthis.menu.close();\n\t\t\t\t\tthis.deleteCategory();\n\t\t\t\t},\n\t\t\t};\n\t\t},\n\t\tmuteCategory(isMuted: boolean): void\n\t\t{\n\t\t\tvoid CategoryManager.setMute(this.category.id, isMuted);\n\t\t},\n\t\tbanCategory(isBanned: boolean): void\n\t\t{\n\t\t\tvoid CategoryManager.setBan(this.category.id, isBanned);\n\t\t},\n\t\topenEditCategoryForm(): void\n\t\t{\n\t\t\tthis.$refs.editForm.show({\n\t\t\t\tcategory: this.category,\n\t\t\t});\n\t\t},\n\t\tdeleteCategory(): void\n\t\t{\n\t\t\talert('delete category ' + this.category.id);\n\t\t},\n\t},\n\tcomponents: {\n\t\tCategoryEditForm,\n\t},\n\ttemplate: `\n\t\t<div\n\t\t\tclass=\"calendar-open-events-list-item__list-header__menu ui-icon-set --more-information\"\n\t\t\t@click=\"openMenu\"\n\t\t\tref=\"menuIcon\"\n\t\t></div>\n\t\t<CategoryEditForm ref=\"editForm\"/>\n\t`,\n}\n","import { mapGetters } from 'ui.vue3.vuex';\nimport { TitleMenu } from './parts/title-menu';\n\nimport './css/event-list-title.css';\n\nexport const EventListTitle = {\n\tcomputed: {\n\t\t...mapGetters({\n\t\t\tisFilterMode: 'isFilterMode',\n\t\t\tcategory: 'selectedCategory',\n\t\t}),\n\t\ttitle(): string\n\t\t{\n\t\t\tif (this.isFilterMode)\n\t\t\t{\n\t\t\t\treturn this.$Bitrix.Loc.getMessage('CALENDAR_OPEN_EVENTS_LIST_SEARCH_RESULT');\n\t\t\t}\n\n\t\t\treturn this.category?.name;\n\t\t},\n\t},\n\tcomponents: {\n\t\tTitleMenu,\n\t},\n\ttemplate: `\n\t\t<div class=\"calendar__open-event__list-header\">\n\t\t\t<div class=\"calendar__open-event__list-header__title\" :title=\"title\">\n\t\t\t\t{{ title }}\n\t\t\t</div>\n\t\t\t<div class=\"calendar__open-event__list-header__icon ui-icon-set --lock\" v-if=\"category.closed\"></div>\n\t\t\t<TitleMenu v-if=\"!isFilterMode && category.id\" :category=\"category\"/>\n\t\t</div>\n\t`,\n};\n","import { DateTimeFormat } from 'main.date';\nimport { AppSettings } from '../../../helpers/app-settings';\nimport { EventModel } from '../../../model/event/open-event';\nimport 'ui.icon-set.main';\nimport '../css/calendar-sheet.css';\n\nexport const CalendarSheet = {\n\tprops: {\n\t\tevent: EventModel,\n\t},\n\tcomputed: {\n\t\tcalendarDate(): string\n\t\t{\n\t\t\treturn this.event.dateFrom.getDate();\n\t\t},\n\t\tcalendarMonth(): string\n\t\t{\n\t\t\treturn DateTimeFormat.format('f', this.event.dateFrom);\n\t\t},\n\t\tcalendarTime(): string\n\t\t{\n\t\t\tif (this.event.isFullDay)\n\t\t\t{\n\t\t\t\treturn this.$Bitrix.Loc.getMessage('CALENDAR_OPEN_EVENTS_LIST_ALL_DAY');\n\t\t\t}\n\n\t\t\tconst timeFormat = DateTimeFormat.getFormat('SHORT_TIME_FORMAT');\n\t\t\tconst time = DateTimeFormat.format(timeFormat, this.event.dateFrom);\n\t\t\tconst dayOfWeek = DateTimeFormat.format('D', this.event.dateFrom);\n\n\t\t\treturn this.$Bitrix.Loc.getMessage('CALENDAR_OPEN_EVENTS_LIST_FORMAT_WEEKDAY_TIME', {\n\t\t\t\t'#WEEKDAY#': dayOfWeek,\n\t\t\t\t'#TIME#': time,\n\t\t\t});\n\t\t},\n\t\tisCreator()\n\t\t{\n\t\t\treturn this.event.creatorId === AppSettings.currentUserId;\n\t\t},\n\t},\n\ttemplate: `\n\t\t<div class=\"calendar-open-events-list-calendar-sheet\" :style=\"{ borderColor: event.color }\">\n\t\t\t<div class=\"calendar-open-events-list-calendar-sheet-header\" :style=\"{ backgroundColor: event.color }\">\n\t\t\t\t<div class=\"calendar-open-events-list-calendar-sheet-header-hole\"></div>\n\t\t\t\t<div class=\"calendar-open-events-list-calendar-sheet-header-hole\"></div>\n\t\t\t</div>\n\t\t\t<div class=\"calendar-open-events-list-calendar-sheet-content\">\n\t\t\t\t<div class=\"calendar-open-events-list-calendar-sheet-date\">\n\t\t\t\t\t{{ calendarDate }}\n\t\t\t\t</div>\n\t\t\t\t<div class=\"calendar-open-events-list-calendar-sheet-month\">\n\t\t\t\t\t{{ calendarMonth }}\n\t\t\t\t</div>\n\t\t\t\t<div class=\"calendar-open-events-list-calendar-sheet-time\" :style=\"{ color: event.color }\">\n\t\t\t\t\t{{ calendarTime }}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div\n\t\t\t\tclass=\"calendar-open-events-list-calendar-sheet-crown\"\n\t\t\t\tv-if=\"isCreator\"\n\t\t\t\t:title=\"$Bitrix.Loc.getMessage('CALENDAR_OPEN_EVENTS_LIST_EVENT_YOU_ARE_OWNER')\"\n\t\t\t>\n\t\t\t\t<div class=\"ui-icon-set --crown-2\"></div>\n\t\t\t</div>\n\t\t</div>\n\t`,\n}\n","import { Button, ButtonColor, ButtonSize, ButtonIcon } from 'ui.buttons';\n\n//TODO: remove when button icons ready\nimport 'ui.icon-set.actions';\nimport '../css/attend-button.css';\n\nexport const AttendButton = {\n\tprops: {\n\t\tisAttendee: Boolean,\n\t},\n\tmethods: {\n\t\trenderButton(): void\n\t\t{\n\t\t\tconst button = new Button({\n\t\t\t\tcolor: this.isAttendee ? ButtonColor.LIGHT_BORDER : ButtonColor.SUCCESS,\n\t\t\t\tsize: ButtonSize.SMALL,\n\t\t\t\tround: true,\n\t\t\t\t//TODO: replace with icon property when icons ready\n\t\t\t\t// icon: this.isAttendee ? ButtonIcon. : ButtonIcon.,\n\t\t\t\tclassName: this.isAttendee\n\t\t\t\t\t? 'calendar-open-events-list-item__attend-button --off'\n\t\t\t\t\t: 'calendar-open-events-list-item__attend-button --on'\n\t\t\t\t,\n\t\t\t});\n\n\t\t\tthis.$refs.bindBtn.innerHTML = '';\n\t\t\tbutton.renderTo(this.$refs.bindBtn);\n\t\t},\n\t},\n\twatch: {\n\t\tisAttendee(): void\n\t\t{\n\t\t\tthis.renderButton();\n\t\t},\n\t},\n\tmounted(): void\n\t{\n\t\tthis.renderButton();\n\t},\n\ttemplate: `\n\t\t<div ref=\"bindBtn\"></div>\n\t`,\n};\n","import { Counter } from 'ui.cnt';\n\nimport '../css/comment-counter.css';\n\nexport const CommentCounter = {\n\tprops: {\n\t\tcommentsCount: Number,\n\t},\n\tmethods: {\n\t\trenderCounter(): void\n\t\t{\n\t\t\tconst value = this.commentsCount;\n\t\t\tconst color = value ? Counter.Color.PRIMARY : Counter.Color.GRAY;\n\n\t\t\tthis.$refs.counter.innerHTML = '';\n\t\t\tnew Counter({ value, color, size: Counter.Size.LARGE }).renderTo(this.$refs.counter);\n\t\t},\n\t},\n\tmounted(): void\n\t{\n\t\tthis.renderCounter();\n\t},\n\twatch: {\n\t\tcommentsCount(): void\n\t\t{\n\t\t\tthis.renderCounter();\n\t\t},\n\t},\n\ttemplate: `\n\t\t<div class=\"calendar-open-events-list-item-comment-counter\">\n\t\t\t<div class=\"ui-icon-set --chats-1\"></div>\n\t\t\t<div ref=\"counter\"></div>\n\t\t</div>\n\t`,\n};\n","import '../css/attendee-counter.css';\n\nexport const AttendeeCounter = {\n\tprops: {\n\t\tattendeesCount: Number,\n\t\tmaxAttendees: Number|null,\n\t},\n\tcomputed: {\n\t\tattendeesValue(): string\n\t\t{\n\t\t\tif (this.maxAttendees)\n\t\t\t{\n\t\t\t\treturn this.$Bitrix.Loc.getMessage(\n\t\t\t\t\t'CALENDAR_OPEN_EVENTS_LIST_EVENT_ATTENDEE_VALUE',\n\t\t\t\t\t{\n\t\t\t\t\t\t'#COUNT#': this.attendeesCount,\n\t\t\t\t\t\t'#COUNT_MAX#': this.maxAttendees,\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\treturn this.attendeesCount;\n\t\t\t}\n\t\t},\n\t},\n\ttemplate: `\n\t\t<div class=\"calendar-open-events-list-item-attendee-counter\">\n\t\t\t<div class=\"ui-icon-set --persons-2\"></div>\n\t\t\t<div v-html=\"attendeesValue\"></div>\n\t\t</div>\n\t`,\n};\n","import { Event } from 'main.core';\nimport { Menu, Popup } from 'main.popup';\nimport { Counter } from 'ui.cnt';\nimport { mapGetters } from 'ui.vue3.vuex';\nimport { EventModel } from '../../../model/event/open-event';\nimport '../css/name-with-counter.css';\n\nexport const NameWithCounter = {\n\temits: ['openEvent'],\n\tprops: {\n\t\tevent: EventModel,\n\t},\n\tcomputed: {\n\t\t...mapGetters({\n\t\t\tselectedCategoryId: 'selectedCategoryId',\n\t\t}),\n\t\tformattedRrule(): string\n\t\t{\n\t\t\tif (this.event.rrule.amount === 0 || this.event.rrule.amount === Infinity)\n\t\t\t{\n\t\t\t\treturn '';\n\t\t\t}\n\n\t\t\treturn this.$Bitrix.Loc.getMessage('CALENDAR_OPEN_EVENTS_LIST_NUM_MEETING_OF_AMOUNT', {\n\t\t\t\t'#NUM#': this.event.rrule.num,\n\t\t\t\t'#AMOUNT#': this.event.rrule.amount,\n\t\t\t});\n\t\t},\n\t},\n\tmethods: {\n\t\trenderCounter(): void\n\t\t{\n\t\t\tthis.$refs.counter.innerHTML = '';\n\t\t\tif (this.event.isNew)\n\t\t\t{\n\t\t\t\tnew Counter({ value: 1, color: Counter.Color.DANGER }).renderTo(this.$refs.counter);\n\t\t\t}\n\t\t},\n\t\tbindRrulePopup(): void\n\t\t{\n\t\t\tif (!this.$refs.rrule)\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst popup = new Popup({\n\t\t\t\tbindElement: this.$refs.rrule,\n\t\t\t\tcontent: this.event.rruleDescription,\n\t\t\t\tdarkMode: true,\n\t\t\t\tbindOptions: { position: 'top' },\n\t\t\t\toffsetTop: -10,\n\t\t\t\tangle: true,\n\t\t\t\tautoHide: true,\n\t\t\t});\n\n\t\t\tthis.bindShowOnHover(popup);\n\t\t},\n\t\tbindShowOnHover(popup: Menu|Popup): void\n\t\t{\n\t\t\tif (popup instanceof Menu)\n\t\t\t{\n\t\t\t\tpopup = popup.getPopupWindow();\n\t\t\t}\n\n\t\t\tconst bindElement = popup.bindElement;\n\t\t\tconst container = popup.getPopupContainer();\n\n\t\t\tlet hoverElement = null;\n\n\t\t\tconst closeMenuHandler = () => {\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tif (!container.contains(hoverElement) && !bindElement.contains(hoverElement))\n\t\t\t\t\t{\n\t\t\t\t\t\tpopup.close();\n\t\t\t\t\t}\n\t\t\t\t}, 100);\n\t\t\t};\n\t\t\tconst showMenuHandler = () => {\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tif (bindElement.contains(hoverElement))\n\t\t\t\t\t{\n\t\t\t\t\t\tpopup.show();\n\t\t\t\t\t}\n\t\t\t\t}, 300);\n\t\t\t};\n\t\t\tconst clickHandler = () => {\n\t\t\t\tif (!popup.isShown())\n\t\t\t\t{\n\t\t\t\t\tpopup.show();\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tEvent.bind(document, 'mouseover', (event) => {\n\t\t\t\thoverElement = event.target;\n\t\t\t});\n\t\t\tEvent.bind(bindElement, 'mouseenter', showMenuHandler);\n\t\t\tEvent.bind(bindElement, 'mouseleave', closeMenuHandler);\n\t\t\tEvent.bind(container, 'mouseleave', closeMenuHandler);\n\t\t\tEvent.bind(bindElement, 'click', clickHandler);\n\n\t\t\tconst adjustPosition = () => {\n\t\t\t\tconst angleLeft = Popup.getOption('angleMinBottom');\n\t\t\t\tconst popupWidth = popup.getPopupContainer().offsetWidth;\n\t\t\t\tconst elementWidth = popup.bindElement.offsetWidth;\n\n\t\t\t\tpopup.setOffset({ offsetLeft: elementWidth / 2 - popupWidth / 2 });\n\t\t\t\tpopup.adjustPosition();\n\n\t\t\t\tif (popup.angle)\n\t\t\t\t{\n\t\t\t\t\tpopup.setAngle({ offset: popupWidth / 2 + angleLeft });\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tpopup.subscribeFromOptions({\n\t\t\t\tonShow: () => {\n\t\t\t\t\tadjustPosition();\n\t\t\t\t\tdocument.addEventListener('scroll', adjustPosition, true);\n\t\t\t\t},\n\t\t\t\tonClose: () => {\n\t\t\t\t\tdocument.removeEventListener('scroll', adjustPosition, true);\n\t\t\t\t},\n\t\t\t});\n\t\t},\n\t},\n\tmounted(): void\n\t{\n\t\tthis.renderCounter();\n\t\tthis.bindRrulePopup();\n\t},\n\twatch: {\n\t\tevent(): void\n\t\t{\n\t\t\tthis.renderCounter();\n\t\t},\n\t},\n\ttemplate: `\n\t\t<div class=\"calendar-open-events-list-item-name\">\n\t\t\t<div\n\t\t\t\tclass=\"calendar-open-events-list-item__event-name-with-counter\"\n\t\t\t\t@click=\"$emit('openEvent')\"\n\t\t\t>\n\t\t\t\t<div class=\"calendar-open-events-list-event-name-category\" v-if=\"selectedCategoryId === 0\">\n\t\t\t\t\t{{ event.categoryName }}\n\t\t\t\t</div>\n\t\t\t\t<div v-show=\"event.isNew\" ref=\"counter\"></div>\n\t\t\t\t<div class=\"calendar-open-events-list-item__event-name\" :title=\"event.name\">\n\t\t\t\t\t{{ event.name }}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div class=\"calendar-open-events-list-event-time\">\n\t\t\t\t<div class=\"calendar-open-events-list-event-time-datetime\">\n\t\t\t\t\t{{ event.formattedDateTime }}\n\t\t\t\t</div>\n\t\t\t\t<div class=\"calendar-open-events-list-event-time-full-day\" v-if=\"event.isFullDay\">\n\t\t\t\t\t{{ $Bitrix.Loc.getMessage('CALENDAR_OPEN_EVENTS_LIST_ALL_DAY') }}\n\t\t\t\t</div>\n\t\t\t\t<div\n\t\t\t\t\tclass=\"calendar-open-events-list-event-time-recursion\"\n\t\t\t\t\tref=\"rrule\"\n\t\t\t\t\tv-if=\"event.rrule\"\n\t\t\t\t>\n\t\t\t\t\t<div class=\"ui-icon-set --refresh-3\"></div>\n\t\t\t\t\t<div class=\"calendar-open-events-list-event-time-rrule\" v-if=\"formattedRrule\">\n\t\t\t\t\t\t{{ formattedRrule }}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t`,\n}\n","import { Runtime } from 'main.core';\nimport { EventEmitter } from 'main.core.events';\nimport { Messenger } from 'im.public.iframe';\nimport { EventType } from 'im.v2.const';\nimport { mapGetters } from 'ui.vue3.vuex';\nimport { AppSettings } from '../../helpers/app-settings';\nimport { EventManager } from '../../data-manager/event-manager/event-manager';\nimport { EventModel } from '../../model/event/open-event';\nimport { CalendarSheet } from './parts/calendar-sheet';\nimport { AttendButton } from './parts/attend-button';\nimport { CommentCounter } from './parts/comment-counter';\nimport { AttendeeCounter } from './parts/attendee-counter';\nimport { NameWithCounter } from './parts/name-with-counter';\n\nimport './css/event-list.css';\n\nexport const Event = {\n\tprops: {\n\t\tevent: EventModel,\n\t},\n\tcomputed: {\n\t\t...mapGetters({\n\t\t\tselectedCategoryId: 'selectedCategoryId',\n\t\t}),\n\t},\n\tmethods: {\n\t\tasync openComments(): Promise<void>\n\t\t{\n\t\t\tconst categoryChannelId = this.event.categoryChannelId;\n\t\t\tconst messageId = this.event.threadId;\n\n\t\t\tawait Messenger.openChat(`chat${categoryChannelId}`, messageId);\n\n\t\t\tEventEmitter.emit(EventType.dialog.openComments, { messageId });\n\t\t},\n\t\tasync openEvent(): void\n\t\t{\n\t\t\tconst { EntryManager, Entry, CalendarSection } = await Runtime.loadExtension('calendar.entry');\n\n\t\t\tconst section = new CalendarSection({\n\t\t\t\t...AppSettings.openEventSection,\n\t\t\t\tPERM: {\n\t\t\t\t\t'view_time': true,\n\t\t\t\t\t'view_title': true,\n\t\t\t\t\t'view_full': true,\n\t\t\t\t\t'add': false,\n\t\t\t\t\t'edit': false,\n\t\t\t\t\t'edit_section': false,\n\t\t\t\t\t'access': false,\n\t\t\t\t},\n\t\t\t});\n\n\t\t\tconst entry = new Entry({\n\t\t\t\tdata: {\n\t\t\t\t\tID: this.event.id,\n\t\t\t\t\tNAME: this.event.name,\n\t\t\t\t\tSKIP_TIME: this.event.isFullDay,\n\t\t\t\t\tdateFrom: this.event.dateFrom,\n\t\t\t\t\tdateTo: this.event.dateTo,\n\t\t\t\t\tSECT_ID: section.getId(),\n\t\t\t\t\tRRULE: this.event.fields.rrule,\n\t\t\t\t\tCOLOR: this.event.color,\n\t\t\t\t\t'~RRULE_DESCRIPTION': this.event.rruleDescription,\n\t\t\t\t},\n\t\t\t});\n\n\t\t\tEntryManager.openCompactViewForm({\n\t\t\t\tentry,\n\t\t\t\tsections: [section],\n\t\t\t});\n\n\t\t\tif (this.event.isNew)\n\t\t\t{\n\t\t\t\tEventManager.setEventWatched(this.event.id);\n\t\t\t}\n\t\t},\n\t\tasync attendEvent(isAttendee: boolean): Promise<void>\n\t\t{\n\t\t\tEventManager.setEventAttendee(this.event.id, isAttendee);\n\t\t},\n\t},\n\tcomponents: {\n\t\tCalendarSheet,\n\t\tAttendButton,\n\t\tCommentCounter,\n\t\tAttendeeCounter,\n\t\tNameWithCounter,\n\t},\n\ttemplate: `\n\t\t<div class=\"calendar-open-events-list-item\">\n\t\t\t<div class=\"calendar-open-events-list-item-info\">\n\t\t\t\t<CalendarSheet :event=\"event\"/>\n\t\t\t\t<NameWithCounter\n\t\t\t\t\t:event=\"event\"\n\t\t\t\t\t@openEvent=\"openEvent()\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t\t<div class=\"calendar-open-events-list-item-actions\">\n\t\t\t\t<CommentCounter :commentsCount=\"event.commentsCount\" @click=\"openComments()\"/>\n\t\t\t\t<AttendeeCounter\n\t\t\t\t\t:attendeesCount=\"event.attendeesCount\"\n\t\t\t\t\t:maxAttendees=\"event.eventOptions.maxAttendees\"\n\t\t\t\t/>\n\t\t\t\t<AttendButton :isAttendee=\"event.isAttendee\" @click=\"attendEvent(!event.isAttendee)\"/>\n\t\t\t</div>\n\t\t</div>\n\t`,\n};\n","import './css/empty-state.css';\n\nexport const EmptyState = {\n\ttemplate: `\n\t\t<div class=\"calendar-open-events-list-events-empty\">\n\t\t\t<div class=\"calendar-open-events-list-events-empty-icon\"></div>\n\t\t\t<div class=\"calendar-open-events-list-events-empty-title\">\n\t\t\t\t{{ $Bitrix.Loc.getMessage('CALENDAR_OPEN_EVENTS_LIST_EMPTY_STATE') }}\n\t\t\t</div>\n\t\t</div>\n\t`,\n};\n","import 'main.polyfill.intersectionobserver';\nimport { mapGetters } from 'ui.vue3.vuex';\nimport { EventManager } from '../../data-manager/event-manager/event-manager';\nimport { EventModel } from '../../model/event/open-event';\nimport { Event } from './event';\nimport { EmptyState } from './empty-state';\n\nconst WATCH_EVENT_MS = 2000;\n\nexport const EventList = {\n\tdata(): Object\n\t{\n\t\treturn {\n\t\t\tobservedEvents: new Map(),\n\t\t\teventRefs: [],\n\t\t};\n\t},\n\tcomputed: {\n\t\t...mapGetters({\n\t\t\tevents: 'events',\n\t\t\tselectedCategoryId: 'selectedCategoryId',\n\t\t\tisFilterMode: 'isFilterMode',\n\t\t}),\n\t\tsortedEvents(): Array<EventModel>\n\t\t{\n\t\t\treturn [...this.events].sort((a: EventModel, b: EventModel) => {\n\t\t\t\tif (a.dateFrom.getTime() === b.dateFrom.getTime())\n\t\t\t\t{\n\t\t\t\t\tif (a.dateTo.getTime() === b.dateTo.getTime())\n\t\t\t\t\t{\n\t\t\t\t\t\treturn parseInt(a.id) - parseInt(b.id);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn a.dateTo.getTime() - b.dateTo.getTime();\n\t\t\t\t}\n\n\t\t\t\treturn a.dateFrom.getTime() - b.dateFrom.getTime();\n\t\t\t});\n\t\t},\n\t},\n\tmethods: {\n\t\tinitObserver(): void\n\t\t{\n\t\t\tthis.observer = new IntersectionObserver(this.observerCallback, {\n\t\t\t\troot: this.$refs.eventList,\n\t\t\t\tthreshold: 0.9,\n\t\t\t});\n\t\t},\n\t\tobserverCallback(entries)\n\t\t{\n\t\t\tentries.forEach((entry) => {\n\t\t\t\tif (entry.isIntersecting)\n\t\t\t\t{\n\t\t\t\t\tthis.processIntersectedElement(entry.target);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\tprocessIntersectedElement(element)\n\t\t{\n\t\t\tconst eventId = parseInt(element.dataset.eventId, 10);\n\n\t\t\tif (this.observedEvents.has(eventId))\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.observedEvents.set(eventId, eventId);\n\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis.observer.unobserve(element);\n\t\t\t\tEventManager.setEventWatched(eventId);\n\t\t\t}, WATCH_EVENT_MS);\n\t\t},\n\t\tscrollToUpcomingEvent(): void\n\t\t{\n\t\t\tconst today = new Date();\n\t\t\ttoday.setHours(0, 0, 0, 0);\n\n\t\t\tconst upcomingEvent = this.sortedEvents.find((event) => event.dateFrom >= today);\n\t\t\tif (!upcomingEvent)\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.$refs.eventList.scrollTop = this.eventRefs[upcomingEvent.uniqueId].offsetTop;\n\t\t},\n\t\tasync loadOnScroll(): Promise\n\t\t{\n\t\t\tconst scrollTop = this.$refs.eventList.scrollTop;\n\t\t\tconst scrollHeight = this.$refs.eventList.scrollHeight;\n\t\t\tconst offsetHeight = this.$refs.eventList.offsetHeight;\n\n\t\t\tif (scrollTop + 1 >= scrollHeight - offsetHeight)\n\t\t\t{\n\t\t\t\tawait this.$store.dispatch('setEventsUpdating', true);\n\t\t\t\tconst events = await this.getNext();\n\n\t\t\t\tawait this.$store.dispatch('setEvents', events);\n\t\t\t\tawait this.$store.dispatch('setEventsUpdating', false);\n\t\t\t}\n\n\t\t\tif (scrollTop <= 0)\n\t\t\t{\n\t\t\t\tawait this.$store.dispatch('setEventsUpdating', true);\n\t\t\t\tconst events = await this.getPrevious();\n\n\t\t\t\tawait this.$store.dispatch('setEvents', events);\n\t\t\t\tawait this.$store.dispatch('setEventsUpdating', false);\n\n\t\t\t\tthis.$refs.eventList.scrollTop += this.$refs.eventList.scrollHeight - scrollHeight;\n\t\t\t}\n\t\t},\n\t\tgetNext(): Promise<EventModel[]>\n\t\t{\n\t\t\tif (this.isFilterMode)\n\t\t\t{\n\t\t\t\treturn EventManager.filterNext();\n\t\t\t}\n\n\t\t\treturn EventManager.getNext(this.selectedCategoryId);\n\t\t},\n\t\tgetPrevious(): Promise<EventModel[]>\n\t\t{\n\t\t\tif (this.isFilterMode)\n\t\t\t{\n\t\t\t\treturn EventManager.filterPrevious();\n\t\t\t}\n\n\t\t\treturn EventManager.getPrevious(this.selectedCategoryId);\n\t\t},\n\t\tsetEventRef(ref: ?{ event: EventModel, $el: HTMLElement }): void\n\t\t{\n\t\t\tif (!ref)\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst { event, $el } = ref;\n\n\t\t\tthis.eventRefs[event.uniqueId] = $el;\n\t\t\tif (event.isNew)\n\t\t\t{\n\t\t\t\tthis.observer.observe($el);\n\t\t\t}\n\t\t},\n\t},\n\tcreated(): void\n\t{\n\t\tthis.initObserver();\n\t},\n\tmounted(): void\n\t{\n\t\tthis.scrollToUpcomingEvent();\n\t\tvoid this.loadOnScroll();\n\t\tthis.$refs.eventList.addEventListener('scroll', this.loadOnScroll);\n\t},\n\tbeforeUnmount(): void\n\t{\n\t\tthis.observer.disconnect();\n\t\tthis.$refs.eventList.removeEventListener('scroll', this.loadOnScroll);\n\t},\n\tcomponents: {\n\t\tEvent,\n\t\tEmptyState,\n\t},\n\ttemplate: `\n\t\t<div class=\"calendar-open-events-list-events-list --calendar-scroll-bar\" ref=\"eventList\">\n\t\t\t<Event\n\t\t\t\tv-for=\"event of sortedEvents\"\n\t\t\t\t:event=\"event\"\n\t\t\t\t:data-event-id=\"event.id\"\n\t\t\t\t:ref=\"setEventRef\"\n\t\t\t/>\n\t\t\t<EmptyState v-if=\"events.length === 0\"/>\n\t\t</div>\n\t`,\n};\n","import { BaseEvent } from 'main.core.events';\nimport { Loader } from 'main.loader';\nimport { mapGetters } from 'ui.vue3.vuex';\nimport { EventListTitle } from './event-list-title';\nimport { EventList } from './event-list';\nimport { EventManager } from '../../data-manager/event-manager/event-manager';\nimport { EventModel } from '../../model/event/open-event';\n\nexport const Events = {\n\tcomputed: {\n\t\t...mapGetters({\n\t\t\tselectedCategoryId: 'selectedCategoryId',\n\t\t\tareEventsUpdating: 'areEventsUpdating',\n\t\t\tisFilterMode: 'isFilterMode',\n\t\t\tevents: 'events',\n\t\t}),\n\t},\n\tmounted(): void\n\t{\n\t\tEventManager.subscribe('update', this.eventManagerUpdateHandler);\n\t\tEventManager.subscribe('delete', this.eventManagerDeleteHandler);\n\n\t\tnew Loader().show(this.$refs.events);\n\t},\n\tbeforeUnmount(): void\n\t{\n\t\tEventManager.unsubscribe('update', this.eventManagerUpdateHandler);\n\t\tEventManager.unsubscribe('delete', this.eventManagerDeleteHandler);\n\t},\n\tmethods: {\n\t\tasync eventManagerUpdateHandler(event: BaseEvent)\n\t\t{\n\t\t\tconst { eventId } = event.getData();\n\n\t\t\tconst events = await this.getEvents();\n\n\t\t\tif (!events.find((it) => it.id === eventId))\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.$store.dispatch('setEvents', events);\n\t\t},\n\n\t\tasync eventManagerDeleteHandler(event: BaseEvent): Promise<void>\n\t\t{\n\t\t\tconst { eventId } = event.getData();\n\n\t\t\tif (!this.events.find(it => it.id === eventId))\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst events = await this.getEvents();\n\t\t\tthis.$store.dispatch('setEvents', events);\n\t\t},\n\n\t\tasync getEvents(): Promise<EventModel[]>\n\t\t{\n\t\t\tif (this.isFilterMode)\n\t\t\t{\n\t\t\t\treturn EventManager.filterEvents();\n\t\t\t}\n\n\t\t\treturn EventManager.getEvents(this.selectedCategoryId);\n\t\t},\n\t},\n\tcomponents: {\n\t\tEventListTitle,\n\t\tEventList,\n\t},\n\ttemplate: `\n\t\t<div\n\t\t\tclass=\"calendar-open-events-list-events\"\n\t\t\t:class=\"{ '--updating': areEventsUpdating }\"\n\t\t\tref=\"events\"\n\t\t>\n\t\t\t<EventListTitle/>\n\t\t\t<EventList/>\n\t\t</div>\n\t`,\n};\n","import { mapGetters } from 'ui.vue3.vuex';\nimport { Categories } from './categories/categories';\nimport { Events } from './events/events';\n\nimport './components.css';\n\nexport const BaseComponent = {\n\tcomputed: {\n\t\t...mapGetters({\n\t\t\tareEventsLoading: 'areEventsLoading',\n\t\t}),\n\t},\n\tcomponents: {\n\t\tCategories,\n\t\tEvents,\n\t},\n\ttemplate: `\n\t\t<Categories/>\n\t\t<div class=\"calendar-open-events-list-events-loader\" v-if=\"areEventsLoading\"></div>\n\t\t<Events v-else/>\n\t`,\n};","export const CategoriesSearchStore = {\n\tstate(): Object\n\t{\n\t\treturn {\n\t\t\tisSearchMode: false,\n\t\t\tcategoriesQuery: '',\n\t\t};\n\t},\n\tactions:\n\t{\n\t\tsetSearchMode: (store, isSearchMode: boolean) => {\n\t\t\tstore.commit('setSearchMode', isSearchMode);\n\t\t},\n\t\tsetCategoriesQuery: (store, categoriesQuery: string) => {\n\t\t\tstore.commit('setCategoriesQuery', categoriesQuery);\n\t\t},\n\t},\n\tmutations:\n\t{\n\t\tsetSearchMode: (state, isSearchMode: boolean) => {\n\t\t\tstate.isSearchMode = isSearchMode;\n\t\t},\n\t\tsetCategoriesQuery: (state, categoriesQuery: string) => {\n\t\t\tstate.categoriesQuery = categoriesQuery;\n\t\t},\n\t},\n\tgetters:\n\t{\n\t\tisSearchMode: (state): boolean => state.isSearchMode,\n\t\tcategoriesQuery: (state): string => state.categoriesQuery,\n\t},\n};\n","import { CategoryModel } from '../model/category/category';\n\nexport const CategoriesStore = {\n\tstate(): Object\n\t{\n\t\treturn {\n\t\t\tselectedCategoryId: 0,\n\t\t\tcategories: [],\n\t\t};\n\t},\n\tactions:\n\t{\n\t\tsetCategories: (store, categories: CategoryModel[]) => {\n\t\t\tstore.commit('setCategories', categories);\n\t\t},\n\t\tselectCategory: (store, categoryId) => {\n\t\t\tstore.commit('selectCategory', categoryId);\n\t\t},\n\t},\n\tmutations:\n\t{\n\t\tsetCategories: (state, categories: CategoryModel[]) => {\n\t\t\tstate.categories = categories;\n\t\t},\n\t\tselectCategory: (state, categoryId) => {\n\t\t\tstate.selectedCategoryId = categoryId;\n\t\t},\n\t},\n\tgetters:\n\t{\n\t\tcategories: (state): CategoryModel[] => state.categories.map((category) => {\n\t\t\tcategory.isSelected = category.id === state.selectedCategoryId;\n\n\t\t\treturn category;\n\t\t}),\n\t\tselectedCategory: (state): CategoryModel => state.categories.find((it) => it.id === state.selectedCategoryId),\n\t\tselectedCategoryId: (state): number => state.selectedCategoryId,\n\t},\n};","import { Store } from 'ui.vue3.vuex';\n\nexport const EventsStore = {\n\tstate(): Object\n\t{\n\t\treturn {\n\t\t\tevents: [],\n\t\t\tareEventsLoading: false,\n\t\t\tareEventsUpdating: false,\n\t\t\tisFilterMode: false,\n\t\t};\n\t},\n\tactions:\n\t{\n\t\tsetEventsLoading: (store: Store, areEventsLoading: boolean) => {\n\t\t\tstore.commit('setEventsLoading', areEventsLoading);\n\t\t},\n\t\tsetEventsUpdating: (store: Store, areEventsUpdating: boolean) => {\n\t\t\tstore.commit('setEventsUpdating', areEventsUpdating);\n\t\t},\n\t\tsetEvents: (store: Store, events) => {\n\t\t\tstore.commit('setEvents', events);\n\t\t},\n\t\tsetFilterMode: (store, isFilterMode: boolean) => {\n\t\t\tstore.commit('setFilterMode', isFilterMode);\n\t\t},\n\t},\n\tmutations:\n\t{\n\t\tsetEventsLoading: (state, areEventsLoading: boolean) => {\n\t\t\tstate.areEventsLoading = areEventsLoading;\n\t\t},\n\t\tsetEventsUpdating: (state, areEventsUpdating: boolean) => {\n\t\t\tstate.areEventsUpdating = areEventsUpdating;\n\t\t},\n\t\tsetEvents: (state, events: EventModel[]) => {\n\t\t\tstate.events = events;\n\t\t},\n\t\tsetFilterMode: (state, isFilterMode: boolean) => {\n\t\t\tstate.isFilterMode = isFilterMode;\n\t\t},\n\t},\n\tgetters:\n\t{\n\t\tareEventsLoading: (state): boolean => state.areEventsLoading,\n\t\tareEventsUpdating: (state): boolean => state.areEventsUpdating,\n\t\tevents: (state): EventModel[] => state.events,\n\t\tisFilterMode: (state): boolean => state.isFilterMode,\n\t},\n};\n","import { createStore } from 'ui.vue3.vuex';\nimport { CategoriesSearchStore } from './categories-search';\nimport { CategoriesStore } from './categories-store';\nimport { EventsStore } from './events-store';\n\nexport const Store = createStore({\n\tmodules: {\n\t\tcategories: CategoriesStore,\n\t\tcategoriesSearch: CategoriesSearchStore,\n\t\tevents: EventsStore,\n\t},\n});","import { BitrixVue, VueCreateAppResult } from 'ui.vue3';\nimport { Filter } from 'calendar.open-events.filter';\nimport { mapGetters } from 'ui.vue3.vuex';\nimport { BaseComponent } from './components/base-component';\nimport { CategoryManager } from './data-manager/category-manager/category-manager';\nimport { EventManager } from './data-manager/event-manager/event-manager';\nimport { CategoryModel } from './model/category/category';\nimport { EventModel } from './model/event/open-event';\nimport { Store } from './store/store';\n\nimport './list.css';\n\ntype Params = {\n\tcontainer: HTMLElement,\n\tfilterId: string,\n};\n\nexport class List\n{\n\t#params: Params;\n\t#application: VueCreateAppResult;\n\n\tconstructor(params: Params)\n\t{\n\t\tthis.#params = params;\n\n\t\tthis.#mountApplication();\n\t}\n\n\t#mountApplication(): void\n\t{\n\t\tthis.#application = BitrixVue.createApp(\n\t\t\t{\n\t\t\t\tname: 'List',\n\t\t\t\tprops: {\n\t\t\t\t\tfilterId: String,\n\t\t\t\t},\n\t\t\t\tdata(): Object\n\t\t\t\t{\n\t\t\t\t\treturn {\n\t\t\t\t\t\tisLoading: true,\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t\tcomputed: {\n\t\t\t\t\t...mapGetters({\n\t\t\t\t\t\tselectedCategoryId: 'selectedCategoryId',\n\t\t\t\t\t}),\n\t\t\t\t},\n\t\t\t\tasync mounted(): void\n\t\t\t\t{\n\t\t\t\t\tthis.bindFilter(this.filterId);\n\n\t\t\t\t\tconst categories: CategoryModel[] = await CategoryManager.getCategories();\n\t\t\t\t\tconst events: EventModel[] = await EventManager.getEvents(this.selectedCategoryId);\n\n\t\t\t\t\tthis.isLoading = false;\n\n\t\t\t\t\tthis.$store.dispatch('setCategories', categories);\n\t\t\t\t\tthis.$store.dispatch('setEvents', events);\n\t\t\t\t},\n\t\t\t\tmethods: {\n\t\t\t\t\tbindFilter(filterId: string): void\n\t\t\t\t\t{\n\t\t\t\t\t\tconst filter = new Filter(filterId);\n\n\t\t\t\t\t\tEventManager.setFilter(filter);\n\n\t\t\t\t\t\tfilter.subscribe('beforeApply', () => {\n\t\t\t\t\t\t\tthis.isLoading = true;\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tfilter.subscribe('apply', async () => {\n\t\t\t\t\t\t\tconst events = await EventManager.filterEvents();\n\n\t\t\t\t\t\t\tthis.$store.dispatch('setEvents', events);\n\t\t\t\t\t\t\tthis.$store.dispatch('setFilterMode', true);\n\n\t\t\t\t\t\t\tthis.isLoading = false;\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tfilter.subscribe('clear', async () => {\n\t\t\t\t\t\t\tconst events = await EventManager.getEvents(this.selectedCategoryId);\n\n\t\t\t\t\t\t\tthis.$store.dispatch('setEvents', events);\n\t\t\t\t\t\t\tthis.$store.dispatch('setFilterMode', false);\n\n\t\t\t\t\t\t\tthis.isLoading = false;\n\t\t\t\t\t\t});\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tcomponents: {\n\t\t\t\t\tBaseComponent,\n\t\t\t\t},\n\t\t\t\ttemplate: `\n\t\t\t\t\t<div class=\"calendar-open-events-list-loader\" v-if=\"isLoading\"></div>\n\t\t\t\t\t<BaseComponent v-else/>\n\t\t\t\t`,\n\t\t\t},\n\t\t\t{\n\t\t\t\tfilterId: this.#params.filterId,\n\t\t\t},\n\t\t);\n\t\tthis.#application.use(Store);\n\t\tthis.#application.mount(this.#params.container);\n\t}\n}\n"],"names":["CategoryModel","constructor","fields","id","closed","name","description","eventsCount","permissions","channelId","isMuted","isBanned","newCount","updatedAt","channel","isSelected","PullRequests","EventEmitter","setEventNamespace","getModuleId","getMap","EVENT_CATEGORY_CREATED","bind","EVENT_CATEGORY_UPDATED","EVENT_CATEGORY_DELETED","OPEN_EVENT_SCORER_UPDATED","event","emit","CategoryApi","list","params","response","BX","ajax","runAction","data","add","attendees","departmentIds","update","setMute","muteState","setBan","banState","getChannelInfo","ListKeys","Object","freeze","notBanned","banned","search","Manager","addCategory","categoryDto","updateCategory","category","title","categoryId","find","bubbleUp","Date","now","searchMore","query","listKey","countBefore","length","lastPage","categories","getCategories","page","loadMore","searchCategories","alreadyLoadedIds","map","it","newCategories","filter","includes","push","alreadyLoadedListIds","newListCategories","incrementNewCounter","decrementNewCounter","PULL","console","info","pullRequests","subscribe","getData","categoriesCounter","listIds","listKeys","entries","flatMap","categoryIds","Set","Type","isStringFilled","promiseByIdKey","categoryCounters","parseInt","eventsCreated","CategoryManager","ExtensionSettings","Extension","getSettings","currentUserId","Text","toNumber","openEventSection","currentUserTimeOffset","pullEventUserFieldsKey","toString","AppSettings","CategoryEditForm","create","popup","selectedChannelId","computed","isEdit","methods","show","then","channelInfo","PopupManager","getPopupById","destroy","autoHide","autoHideHandler","isClickInside","getPopupContainer","contains","target","isClickUserSelector","userSelector","userSelectorPopup","getDialog","getPopup","isClickChannelSelector","channelSelector","channelSelectorPopup","width","content","$refs","popupContent","className","titleBar","draggable","renderSwitcher","renderChannelSelector","renderUserSelector","inputName","focus","onCreateButtonClick","getTags","tag","entityId","clearFields","close","onSaveButtonClick","onCancelButtonClick","forEach","getEntityId","getId","removeTag","switcher","check","disable","Boolean","Switcher","node","closedSwitcher","checked","size","SwitcherSize","extraSmall","disabled","handlers","toggled","isChecked","renderTo","currentUserItem","TagSelector","dialogOptions","context","showAvatars","dropdownMode","preload","entities","options","selectMode","allowFlatDepartments","allowSelectRootDepartment","preselectedItems","undeselectedItems","multiple","dynamicLoad","events","onChannelSelected","onChannelDeselected","item","customData","get","userChangedName","getTitle","getFirstLetters","text","words","split","word","test","onNameInput","template","CategoriesTitle","onSearchClick","$store","dispatch","onAddClick","editForm","components","CategoriesSearch","created","searchDebounced","Runtime","debounce","mounted","input","Event","document","handleAutoHide","unmounted","unbind","shouldHideForm","closeSearch","queryIsEmpty","getSearchQuery","clickOnSelf","onCloseSearchClick","onSearchInput","value","trim","CategoriesHeader","mapGetters","isSearchMode","OPEN_EVENT_CREATED","OPEN_EVENT_UPDATED","OPEN_EVENT_DELETED","EventModel","updateFields","isBoolean","isAttendee","isNumber","commentsCount","incrementAttendeesCount","decrementAttendeesCount","attendeesCount","assign","uniqueId","creatorId","eventOptions","categoryName","duration","dateTo","getTime","dateFrom","formattedDateTime","isSameDate","startsInCurrentYear","getFullYear","endsInCurrentYear","dateFormat","date","DateTimeFormat","format","getFormat","isFullDay","from","to","time","Loc","getMessage","dateFromFormat","dateToFormat","timeFrom","timeTo","color","threadId","categoryChannelId","isNew","exdate","rrule","rruleDescription","fullDayOffset","getTimezoneOffset","dateFromTs","dateToTs","maxAttendees","RecursionParser","parseRrule","recursionAmount","amount","recursionNum","num","timestamp","END_OF_TIME","parseRecursion","fromLimit","toLimit","timestamps","parseTimestamps","getAmount","fromTs","rruleCount","COUNT","parse","UNTIL","Infinity","count","exDate","Math","min","setHours","getHours","getMinutes","fromYear","fromMonth","getMonth","fromDate","getDate","fromHour","fromMinute","FORMAT_DATE","exclude","include","FREQ","weekDay","getWeekDayByInd","BYDAY","skipWeek","INTERVAL","delta","index","rule","res","pairs","field","max","regex","day","d","matches","match","MO","EventApi","toMonth","toYear","getTsRange","setAttendeeStatus","eventId","attendeeStatus","setWatched","eventIds","FilterApi","filterId","toDate","FILTER_CATEGORY_ID","setFilter","setEventAttendee","e","setEventWatched","filterEvents","filterKey","getFilterFieldsKey","previousFilterKey","getEvents","filterNext","getNext","filterPrevious","getPrevious","everythingIsLoaded","everythingIsShown","eventsBeforeLoad","loadedEvents","dateRange","today","isDateFieldApplied","values","flat","newEvents","alreadyLoadedCategoryIds","newCategoryEvents","eventDto","newEvent","userFields","datesKey","EventManager","Category","props","selectedCategoryId","onClick","getEventCountPhrase","getMessagePlural","renderCounter","counter","innerHTML","Counter","Color","GRAY","DANGER","watch","CategoryList","categoriesQuery","allCategory","sortedCategories","sort","a","b","loadOnScroll","categoryList","addEventListener","onCategoriesUpdatedHandler","beforeUnmount","removeEventListener","unsubscribe","$nextTick","scrollTop","scrollHeight","offsetHeight","Categories","isFilterMode","TitleMenu","menu","Menu","openMenu","bindElement","menuIcon","closeByEsc","items","getMenuItems","redrawMenu","itemIds","removeMenuItem","destroyEmptyPopup","addMenuItem","getInfoItem","getOpenChatItem","getMuteItem","getBanItem","edit","getEditItem","delete","getDeleteItem","html","$Bitrix","onclick","alert","Messenger","openChat","renderMuteItem","muteCategory","icon","renderBanItem","banCategory","openEditCategoryForm","deleteCategory","EventListTitle","CalendarSheet","calendarDate","calendarMonth","calendarTime","timeFormat","dayOfWeek","isCreator","AttendButton","renderButton","button","Button","ButtonColor","LIGHT_BORDER","SUCCESS","ButtonSize","SMALL","round","bindBtn","CommentCounter","Number","PRIMARY","Size","LARGE","AttendeeCounter","attendeesValue","NameWithCounter","emits","formattedRrule","bindRrulePopup","Popup","darkMode","bindOptions","position","offsetTop","angle","bindShowOnHover","getPopupWindow","container","hoverElement","closeMenuHandler","setTimeout","showMenuHandler","clickHandler","isShown","adjustPosition","angleLeft","getOption","popupWidth","offsetWidth","elementWidth","setOffset","offsetLeft","setAngle","offset","subscribeFromOptions","onShow","onClose","openComments","messageId","EventType","dialog","openEvent","EntryManager","Entry","CalendarSection","loadExtension","section","PERM","entry","ID","NAME","SKIP_TIME","SECT_ID","RRULE","COLOR","openCompactViewForm","sections","attendEvent","EmptyState","WATCH_EVENT_MS","EventList","observedEvents","Map","eventRefs","sortedEvents","initObserver","observer","IntersectionObserver","observerCallback","root","eventList","threshold","isIntersecting","processIntersectedElement","element","dataset","has","set","unobserve","scrollToUpcomingEvent","upcomingEvent","setEventRef","ref","$el","observe","disconnect","Events","areEventsUpdating","eventManagerUpdateHandler","eventManagerDeleteHandler","Loader","BaseComponent","areEventsLoading","CategoriesSearchStore","state","actions","setSearchMode","store","commit","setCategoriesQuery","mutations","getters","CategoriesStore","setCategories","selectCategory","selectedCategory","EventsStore","setEventsLoading","setEventsUpdating","setEvents","setFilterMode","Store","createStore","modules","categoriesSearch","List","BitrixVue","createApp","String","isLoading","bindFilter","Filter","use","mount"],"mappings":"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"}