403Webshell
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/cvetdv.ru/bitrix/js/im/v2/component/search/dist/

Upload File :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

Current File : /home/bitrix/ext_www/cvetdv.ru/bitrix/js/im/v2/component/search/dist/registry.bundle.js.map
{"version":3,"file":"registry.bundle.js","sources":["../src/classes/search-service.js","../src/classes/search-context-menu.js","../src/helpers/get-first-search-item.js","../src/helpers/get-min-token-size.js","../src/helpers/merge-search-items.js","../src/components/elements/empty-state.js","../src/components/elements/search-item.js","../src/components/elements/my-notes.js","../src/components/elements/carousel-user.js","../src/components/elements/recent-users-carousel.js","../src/components/chat-search.js","../src/components/chat-search-input.js","../src/components/add-to-chat.js","../src/components/forward-search.js"],"sourcesContent":["import { ajax as Ajax } from 'main.core';\n\nimport {\n\tEntityId,\n\tgetSearchConfig,\n\tLocalSearch,\n\tStoreUpdater,\n\tSearchConfig,\n\ttype ImRecentProviderItem,\n\ttype SearchResultItem,\n} from 'im.v2.lib.search';\nimport { Logger } from 'im.v2.lib.logger';\nimport { Utils } from 'im.v2.lib.utils';\n\ntype RecentItem = [string, string | number];\n\nconst SEARCH_REQUEST_ENDPOINT = 'ui.entityselector.doSearch';\nconst LOAD_LATEST_RESULTS_ENDPOINT = 'ui.entityselector.load';\nconst SAVE_ITEM_ENDPOINT = 'ui.entityselector.saveRecentItems';\n\nexport class SearchService\n{\n\t#localSearch: LocalSearch;\n\t#localCollection: Map<string, Date> = new Map();\n\t#searchConfig: SearchConfig;\n\t#storeUpdater: StoreUpdater;\n\n\tconstructor(searchConfig)\n\t{\n\t\tthis.#searchConfig = searchConfig;\n\t\tthis.#storeUpdater = new StoreUpdater();\n\t\tthis.#localSearch = new LocalSearch(searchConfig);\n\t}\n\n\tasync loadLatestResults(): Promise<SearchResultItem[]>\n\t{\n\t\tconst response = await this.#loadLatestResultsRequest();\n\t\tconst { items, recentItems } = response;\n\t\tif (items.length === 0 || recentItems.length === 0)\n\t\t{\n\t\t\treturn [];\n\t\t}\n\n\t\tconst itemsFromRecentItems = this.#getItemsFromRecentItems(recentItems, items);\n\t\tawait this.#storeUpdater.update(itemsFromRecentItems);\n\n\t\treturn this.#getDialogIdAndDate(itemsFromRecentItems);\n\t}\n\n\tsearchLocal(query: string): SearchResultItem[]\n\t{\n\t\tconst localCollection = [...this.#localCollection.values()];\n\n\t\treturn this.#localSearch.search(query, localCollection);\n\t}\n\n\tasync search(query: string): Promise<SearchResultItem[]>\n\t{\n\t\tconst items = await this.#searchRequest(query);\n\t\tawait this.#storeUpdater.update(items);\n\n\t\tconst searchResult = this.#getDialogIdAndDate(items);\n\n\t\tsearchResult.forEach((searchItem) => {\n\t\t\tthis.#localCollection.set(searchItem.dialogId, searchItem);\n\t\t});\n\n\t\treturn searchResult;\n\t}\n\n\tsaveItemToRecentSearch(dialogId: string): void\n\t{\n\t\tconst recentItems = [{ id: dialogId, entityId: EntityId }];\n\n\t\tconst config = {\n\t\t\tjson: {\n\t\t\t\t...getSearchConfig(this.#searchConfig),\n\t\t\t\trecentItems,\n\t\t\t},\n\t\t};\n\n\t\tvoid Ajax.runAction(SAVE_ITEM_ENDPOINT, config);\n\t}\n\n\tclearSessionResult()\n\t{\n\t\tthis.#localCollection.clear();\n\t}\n\n\tasync #loadLatestResultsRequest(): Promise<{items: ImRecentProviderItem[], recentItems: Object[]}>\n\t{\n\t\tconst config = {\n\t\t\tjson: getSearchConfig(this.#searchConfig),\n\t\t};\n\n\t\tlet items = { items: [], recentItems: [] };\n\t\ttry\n\t\t{\n\t\t\tconst response = await Ajax.runAction(LOAD_LATEST_RESULTS_ENDPOINT, config);\n\t\t\tLogger.warn('Search service: latest search request result', response);\n\t\t\titems = response.data.dialog;\n\t\t}\n\t\tcatch (error)\n\t\t{\n\t\t\tLogger.warn('Search service: latest search request error', error);\n\t\t}\n\n\t\treturn items;\n\t}\n\n\tasync #searchRequest(query: string): Promise<ImRecentProviderItem[]>\n\t{\n\t\tconst config = {\n\t\t\tjson: getSearchConfig(this.#searchConfig),\n\t\t};\n\n\t\tconfig.json.searchQuery = {\n\t\t\tqueryWords: Utils.text.getWordsFromString(query),\n\t\t\tquery,\n\t\t};\n\n\t\tlet items = [];\n\t\ttry\n\t\t{\n\t\t\tconst response = await Ajax.runAction(SEARCH_REQUEST_ENDPOINT, config);\n\t\t\tLogger.warn('Search service: request result', response);\n\t\t\titems = response.data.dialog.items;\n\t\t}\n\t\tcatch (error)\n\t\t{\n\t\t\tLogger.warn('Search service: error', error);\n\t\t}\n\n\t\treturn items;\n\t}\n\n\t#getDialogIdAndDate(items: ImRecentProviderItem[]): SearchResultItem[]\n\t{\n\t\treturn items.map((item) => {\n\t\t\treturn {\n\t\t\t\tdialogId: item.id.toString(),\n\t\t\t\tdateMessage: item.customData?.dateMessage ?? '',\n\t\t\t};\n\t\t});\n\t}\n\n\t#getItemsFromRecentItems(recentItems: RecentItem[], items: ImRecentProviderItem[]): ImRecentProviderItem[]\n\t{\n\t\tconst filledRecentItems = [];\n\t\trecentItems.forEach(([, dialogId]) => {\n\t\t\tconst found = items.find((recentItem) => {\n\t\t\t\treturn recentItem.id === dialogId.toString();\n\t\t\t});\n\t\t\tif (found)\n\t\t\t{\n\t\t\t\tfilledRecentItems.push(found);\n\t\t\t}\n\t\t});\n\n\t\treturn filledRecentItems;\n\t}\n}\n","import { Loc } from 'main.core';\nimport { EventEmitter } from 'main.core.events';\n\nimport { Messenger } from 'im.public';\nimport { Utils } from 'im.v2.lib.utils';\nimport { BaseMenu } from 'im.v2.lib.menu';\nimport { CallManager } from 'im.v2.lib.call';\nimport { PermissionManager } from 'im.v2.lib.permission';\nimport { EventType, SidebarDetailBlock, UserType } from 'im.v2.const';\n\nimport type { MenuItem } from 'im.v2.lib.menu';\nimport type { ImModelUser } from 'im.v2.model';\n\nexport class SearchContextMenu extends BaseMenu\n{\n\tcallManager: CallManager;\n\n\tconstructor()\n\t{\n\t\tsuper();\n\n\t\tthis.id = 'im-chat-search-context-menu';\n\t\tthis.callManager = CallManager.getInstance();\n\t\tthis.permissionManager = PermissionManager.getInstance();\n\t}\n\n\tgetMenuItems(): MenuItem[]\n\t{\n\t\treturn [\n\t\t\tthis.getOpenItem(),\n\t\t\tthis.getOpenProfileItem(),\n\t\t\tthis.getChatsWithUserItem(),\n\t\t];\n\t}\n\n\tgetOpenItem(): MenuItem\n\t{\n\t\treturn {\n\t\t\ttext: Loc.getMessage('IM_LIB_MENU_OPEN'),\n\t\t\tonclick: () => {\n\t\t\t\tMessenger.openChat(this.context.dialogId);\n\t\t\t\tthis.menuInstance.close();\n\t\t\t},\n\t\t};\n\t}\n\n\tgetOpenProfileItem(): ?MenuItem\n\t{\n\t\tif (!this.isUser() || this.isBot())\n\t\t{\n\t\t\treturn null;\n\t\t}\n\n\t\tconst profileUri = Utils.user.getProfileLink(this.context.dialogId);\n\n\t\treturn {\n\t\t\ttext: Loc.getMessage('IM_LIB_MENU_OPEN_PROFILE_V2'),\n\t\t\thref: profileUri,\n\t\t\tonclick: () => {\n\t\t\t\tthis.menuInstance.close();\n\t\t\t},\n\t\t};\n\t}\n\n\tgetChatsWithUserItem(): ?MenuItem\n\t{\n\t\tif (!this.isUser() || this.isBot() || this.isChatWithCurrentUser())\n\t\t{\n\t\t\treturn null;\n\t\t}\n\n\t\tconst isAnyChatOpened = this.store.getters['application/getLayout'].entityId.length > 0;\n\n\t\treturn {\n\t\t\ttext: Loc.getMessage('IM_LIB_MENU_FIND_SHARED_CHATS'),\n\t\t\tonclick: async () => {\n\t\t\t\tif (!isAnyChatOpened)\n\t\t\t\t{\n\t\t\t\t\tawait Messenger.openChat(this.context.dialogId);\n\t\t\t\t}\n\n\t\t\t\tEventEmitter.emit(EventType.sidebar.open, {\n\t\t\t\t\tpanel: SidebarDetailBlock.chatsWithUser,\n\t\t\t\t\tstandalone: true,\n\t\t\t\t\tdialogId: this.context.dialogId,\n\t\t\t\t});\n\t\t\t\tthis.menuInstance.close();\n\t\t\t},\n\t\t};\n\t}\n\n\tisUser(): boolean\n\t{\n\t\treturn this.store.getters['chats/isUser'](this.context.dialogId);\n\t}\n\n\tisBot(): boolean\n\t{\n\t\tif (!this.isUser())\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\tconst user: ImModelUser = this.store.getters['users/get'](this.context.dialogId);\n\n\t\treturn user.type === UserType.bot;\n\t}\n\n\tisChatWithCurrentUser(): boolean\n\t{\n\t\treturn this.getCurrentUserId() === Number.parseInt(this.context.dialogId, 10);\n\t}\n}\n","import type { SearchResultItem } from 'im.v2.lib.search';\n\nexport const getFirstItemFromSearchResults = ({ searchResult, recentItems }): ?SearchResultItem => {\n\tif (searchResult.length > 0)\n\t{\n\t\treturn searchResult[0];\n\t}\n\n\tif (recentItems.length > 0)\n\t{\n\t\treturn recentItems[0];\n\t}\n\n\treturn null;\n};\n","import { Extension } from 'main.core';\n\nconst DEFAULT_MIN_TOKEN_SIZE = 3;\n\nexport const getMinTokenSize = (): number => {\n\tconst settings = Extension.getSettings('im.v2.component.search');\n\n\treturn settings.get('minTokenSize', DEFAULT_MIN_TOKEN_SIZE);\n};\n","import type { SearchResultItem } from 'im.v2.lib.search';\n\nexport const mergeSearchItems = (\n\toriginalItems: SearchResultItem[],\n\tnewItems: SearchResultItem[],\n): SearchResultItem[] => {\n\tconst mergedItems = [...originalItems, ...newItems].map((item) => {\n\t\treturn [item.dialogId, item];\n\t});\n\tconst result = new Map(mergedItems);\n\n\treturn [...result.values()];\n};\n","import '../css/empty-state.css';\n\n// @vue/component\nexport const EmptyState = {\n\tname: 'EmptyState',\n\tcomputed:\n\t{\n\t\ttitle(): string\n\t\t{\n\t\t\treturn this.$Bitrix.Loc.getMessage('IM_SEARCH_RESULT_NOT_FOUND');\n\t\t},\n\t\tsubTitle(): string\n\t\t{\n\t\t\treturn this.$Bitrix.Loc.getMessage('IM_SEARCH_RESULT_NOT_FOUND_DESCRIPTION');\n\t\t},\n\t},\n\ttemplate: `\n\t\t<div class=\"bx-im-search-empty-state__container bx-im-search-empty-state__scope\">\n\t\t\t<div class=\"bx-im-search-empty-state__icon\"></div>\n\t\t\t<div class=\"bx-im-search-empty-state__title\">\n\t\t\t\t{{ title }}\n\t\t\t</div>\n\t\t\t<div class=\"bx-im-search-empty-state__subtitle\">\n\t\t\t\t{{ subTitle }}\n\t\t\t</div>\n\t\t</div>\n\t`,\n};\n","import { Core } from 'im.v2.application.core';\nimport { Text, Loc } from 'main.core';\n\nimport { ChatType } from 'im.v2.const';\nimport { Utils } from 'im.v2.lib.utils';\nimport { highlightText } from 'im.v2.lib.text-highlighter';\nimport { DateFormatter, DateTemplate } from 'im.v2.lib.date-formatter';\nimport { ChatTitleWithHighlighting, ChatTitleType } from 'im.v2.component.elements.chat-title';\nimport { ChatAvatar, AvatarSize, ChatAvatarType } from 'im.v2.component.elements.avatar';\n\nimport '../css/search-item.css';\n\nimport type { ImModelChat } from 'im.v2.model';\n\nconst ItemTextByChatType = {\n\t[ChatType.openChannel]: Loc.getMessage('IM_SEARCH_ITEM_OPEN_CHANNEL_TYPE_GROUP'),\n\t[ChatType.generalChannel]: Loc.getMessage('IM_SEARCH_ITEM_OPEN_CHANNEL_TYPE_GROUP'),\n\t[ChatType.channel]: Loc.getMessage('IM_SEARCH_ITEM_PRIVATE_CHANNEL_TYPE_GROUP'),\n\t[ChatType.collab]: Loc.getMessage('IM_SEARCH_ITEM_COLLAB_TYPE'),\n\tdefault: Loc.getMessage('IM_SEARCH_ITEM_CHAT_TYPE_GROUP_V2'),\n};\n\n// @vue/component\nexport const SearchItem = {\n\tname: 'SearchItem',\n\tcomponents: { ChatAvatar, ChatTitleWithHighlighting },\n\tprops: {\n\t\tdialogId: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tdateMessage: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t\twithDate: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tselected: {\n\t\t\ttype: Boolean,\n\t\t\trequired: false,\n\t\t},\n\t\tquery: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t\treplaceWithNotes: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t},\n\temits: ['clickItem', 'openContextMenu'],\n\tcomputed:\n\t{\n\t\tAvatarSize: () => AvatarSize,\n\t\tdialog(): ImModelChat\n\t\t{\n\t\t\treturn this.$store.getters['chats/get'](this.dialogId, true);\n\t\t},\n\t\tisChat(): boolean\n\t\t{\n\t\t\treturn !this.isUser;\n\t\t},\n\t\tisUser(): boolean\n\t\t{\n\t\t\treturn this.dialog.type === ChatType.user;\n\t\t},\n\t\tisNotes(): boolean\n\t\t{\n\t\t\tif (!this.replaceWithNotes)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\treturn Number.parseInt(this.dialogId, 10) === Core.getUserId();\n\t\t},\n\t\tavatarType(): string\n\t\t{\n\t\t\tif (!this.replaceWithNotes)\n\t\t\t{\n\t\t\t\treturn '';\n\t\t\t}\n\n\t\t\treturn this.isNotes ? ChatAvatarType.notes : '';\n\t\t},\n\t\ttitleType(): string\n\t\t{\n\t\t\tif (!this.replaceWithNotes)\n\t\t\t{\n\t\t\t\treturn '';\n\t\t\t}\n\n\t\t\treturn this.isNotes ? ChatTitleType.notes : '';\n\t\t},\n\t\tposition(): string\n\t\t{\n\t\t\tif (!this.isUser)\n\t\t\t{\n\t\t\t\treturn '';\n\t\t\t}\n\n\t\t\treturn this.$store.getters['users/getPosition'](this.dialogId);\n\t\t},\n\t\tuserItemText(): string\n\t\t{\n\t\t\tif (!this.position)\n\t\t\t{\n\t\t\t\treturn this.loc('IM_SEARCH_ITEM_USER_TYPE_GROUP_V2');\n\t\t\t}\n\n\t\t\treturn highlightText(Text.encode(this.position), this.query);\n\t\t},\n\t\tchatItemText(): string\n\t\t{\n\t\t\treturn ItemTextByChatType[this.dialog.type] ?? ItemTextByChatType.default;\n\t\t},\n\t\titemText(): string\n\t\t{\n\t\t\tif (this.isNotes)\n\t\t\t{\n\t\t\t\treturn this.notesText;\n\t\t\t}\n\n\t\t\treturn this.isUser ? this.userItemText : this.chatItemText;\n\t\t},\n\t\titemTextForTitle(): string\n\t\t{\n\t\t\tif (this.isNotes)\n\t\t\t{\n\t\t\t\treturn this.notesText;\n\t\t\t}\n\n\t\t\treturn this.isUser ? this.position : this.chatItemText;\n\t\t},\n\t\tnotesText(): string\n\t\t{\n\t\t\treturn this.loc('IM_LIST_RECENT_CHAT_SELF_SUBTITLE');\n\t\t},\n\t\tformattedDate(): ?string\n\t\t{\n\t\t\tif (!this.dateMessage)\n\t\t\t{\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tconst date = Utils.date.cast(this.dateMessage);\n\n\t\t\treturn this.formatDate(date);\n\t\t},\n\t},\n\tmethods:\n\t{\n\t\tonClick(event: PointerEvent)\n\t\t{\n\t\t\tthis.$emit('clickItem', {\n\t\t\t\tdialogId: this.dialogId,\n\t\t\t\tnativeEvent: event,\n\t\t\t});\n\t\t},\n\t\tonRightClick(event: PointerEvent)\n\t\t{\n\t\t\tif (event.altKey && event.shiftKey)\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.$emit('openContextMenu', { dialogId: this.dialogId, nativeEvent: event });\n\t\t},\n\t\tformatDate(date: Date): string\n\t\t{\n\t\t\treturn DateFormatter.formatByTemplate(date, DateTemplate.recent);\n\t\t},\n\t\tloc(phraseCode: string): string\n\t\t{\n\t\t\treturn this.$Bitrix.Loc.getMessage(phraseCode);\n\t\t},\n\t},\n\ttemplate: `\n\t\t<div \n\t\t\t@click=\"onClick\" \n\t\t\t@click.right.prevent=\"onRightClick\" \n\t\t\tclass=\"bx-im-search-item__container bx-im-search-item__scope\"\n\t\t\t:class=\"{'--selected': selected}\"\n\t\t>\n\t\t\t<div class=\"bx-im-search-item__avatar-container\">\n\t\t\t\t<ChatAvatar\n\t\t\t\t\t:avatarDialogId=\"dialogId\" \n\t\t\t\t\t:contextDialogId=\"dialogId\" \n\t\t\t\t\t:size=\"AvatarSize.XL\"\n\t\t\t\t\t:customType=\"avatarType\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t\t<div class=\"bx-im-search-item__content-container\" :class=\"{'--centered': isNotes}\">\n\t\t\t\t<div class=\"bx-im-search-item__content_header\">\n\t\t\t\t\t<ChatTitleWithHighlighting\n\t\t\t\t\t\t:dialogId=\"dialogId\"\n\t\t\t\t\t\t:textToHighlight=\"query\"\n\t\t\t\t\t\t:customType=\"titleType\"\n\t\t\t\t\t\t:showItsYou=\"!replaceWithNotes\"\n\t\t\t\t\t/>\n\t\t\t\t\t<div v-if=\"withDate && formattedDate\" class=\"bx-im-search-item__date\">\n\t\t\t\t\t\t<span>{{ formattedDate }}</span>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div v-if=\"itemText\" class=\"bx-im-search-item__item-text\" :title=\"itemTextForTitle\" v-html=\"itemText\"></div>\n\t\t\t</div>\n\t\t\t<div v-if=\"selected\" class=\"bx-im-chat-search-item__selected\"></div>\n\t\t</div>\n\t`,\n};\n","import { Core } from 'im.v2.application.core';\n\nimport { SearchContextMenu } from '../../classes/search-context-menu';\n\nimport '../css/my-notes.css';\n\n// @vue/component\nexport const MyNotes = {\n\tname: 'MyNotes',\n\temits: ['clickItem'],\n\tcomputed:\n\t{\n\t\tdialogId(): number\n\t\t{\n\t\t\treturn Core.getUserId().toString();\n\t\t},\n\t\tname(): string\n\t\t{\n\t\t\treturn this.$Bitrix.Loc.getMessage('IM_SEARCH_MY_NOTES');\n\t\t},\n\t},\n\tcreated()\n\t{\n\t\tthis.contextMenuManager = new SearchContextMenu();\n\t},\n\tbeforeUnmount()\n\t{\n\t\tthis.contextMenuManager.destroy();\n\t},\n\tmethods:\n\t{\n\t\tonClick(event)\n\t\t{\n\t\t\tthis.$emit('clickItem', {\n\t\t\t\tdialogId: this.dialogId,\n\t\t\t\tnativeEvent: event,\n\t\t\t});\n\t\t},\n\t},\n\ttemplate: `\n\t\t<div \n\t\t\tclass=\"bx-im-search-my-notes__container bx-im-search-my-notes__scope\"\n\t\t\t@click=\"onClick\" \n\t\t\t@click.right.prevent\n\t\t>\n\t\t\t<div class=\"bx-im-search-my-notes__avatar\"></div>\n\t\t\t<div class=\"bx-im-search-my-notes__title\" :title=\"name\">\n\t\t\t\t{{ name }}\n\t\t\t</div>\n\t\t</div>\n\t`,\n};\n","import { ChatAvatar, AvatarSize } from 'im.v2.component.elements.avatar';\nimport { UserType } from 'im.v2.const';\n\nimport { SearchContextMenu } from '../../classes/search-context-menu';\n\nimport '../css/carousel-user.css';\n\nimport type { ImModelUser } from 'im.v2.model';\n\n// @vue/component\nexport const CarouselUser = {\n\tname: 'CarouselUser',\n\tcomponents: { ChatAvatar },\n\tprops: {\n\t\tuserDialogId: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tselected: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\temits: ['clickItem', 'openContextMenu'],\n\tcomputed:\n\t{\n\t\tAvatarSize: () => AvatarSize,\n\t\tuser(): ImModelUser\n\t\t{\n\t\t\treturn this.$store.getters['users/get'](this.userDialogId, true);\n\t\t},\n\t\tname(): string\n\t\t{\n\t\t\treturn this.user.firstName ?? this.user.name;\n\t\t},\n\t\tisExtranet(): boolean\n\t\t{\n\t\t\treturn this.user.type === UserType.extranet;\n\t\t},\n\t},\n\tcreated()\n\t{\n\t\tthis.contextMenuManager = new SearchContextMenu();\n\t},\n\tbeforeUnmount()\n\t{\n\t\tthis.contextMenuManager.destroy();\n\t},\n\tmethods:\n\t{\n\t\tonClick(event)\n\t\t{\n\t\t\tthis.$emit('clickItem', {\n\t\t\t\tdialogId: this.userDialogId,\n\t\t\t\tnativeEvent: event,\n\t\t\t});\n\t\t},\n\t\tonRightClick(event)\n\t\t{\n\t\t\tif (event.altKey && event.shiftKey)\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.$emit('openContextMenu', { dialogId: this.userDialogId, nativeEvent: event });\n\t\t},\n\t},\n\ttemplate: `\n\t\t<div \n\t\t\tclass=\"bx-im-carousel-user__container bx-im-carousel-user__scope\"\n\t\t\t:class=\"{'--extranet': isExtranet, '--selected': selected}\"\n\t\t\t@click=\"onClick\" \n\t\t\t@click.right.prevent=\"onRightClick\"\n\t\t>\n\t\t\t<div v-if=\"selected\" class=\"bx-im-carousel-user__selected-mark\"></div>\n\t\t\t<ChatAvatar \n\t\t\t\t:avatarDialogId=\"userDialogId\" \n\t\t\t\t:contextDialogId=\"userDialogId\" \n\t\t\t\t:size=\"AvatarSize.XL\" \n\t\t\t/>\n\t\t\t<div class=\"bx-im-carousel-user__title\" :title=\"name\">\n\t\t\t\t{{ name }}\n\t\t\t</div>\n\t\t</div>\n\t`,\n};\n","import { getUsersFromRecentItems } from 'im.v2.lib.search';\n\nimport { MyNotes } from './my-notes';\nimport { CarouselUser } from './carousel-user';\n\nimport '../css/recent-users-carousel.css';\n\nconst SHOW_USERS_LIMIT = 6;\n\n// @vue/component\nexport const RecentUsersCarousel = {\n\tname: 'RecentUsersCarousel',\n\tcomponents: { CarouselUser, MyNotes },\n\temits: ['clickItem', 'openContextMenu'],\n\tcomputed:\n\t{\n\t\tusersDialogIds(): string[]\n\t\t{\n\t\t\treturn getUsersFromRecentItems({ withFakeUsers: false }).map(({ dialogId }) => dialogId);\n\t\t},\n\t\titems(): string[]\n\t\t{\n\t\t\treturn this.usersDialogIds.slice(0, SHOW_USERS_LIMIT - 1);\n\t\t},\n\t},\n\tmethods:\n\t{\n\t\tisChat(dialogId: string): boolean\n\t\t{\n\t\t\treturn dialogId.startsWith('chat');\n\t\t},\n\t\tloc(key: string): string\n\t\t{\n\t\t\treturn this.$Bitrix.Loc.getMessage(key);\n\t\t},\n\t},\n\ttemplate: `\n\t\t<div class=\"bx-im-recent-users-carousel__container bx-im-recent-users-carousel__scope\">\n\t\t\t<div class=\"bx-im-recent-users-carousel__title-container\">\n\t\t\t\t<span class=\"bx-im-recent-users-carousel__section-title\">\n\t\t\t\t\t{{ loc('IM_SEARCH_SECTION_RECENT_CHATS') }}\n\t\t\t\t</span>\n\t\t\t</div>\n\t\t\t<div class=\"bx-im-recent-users-carousel__users-container\">\n\t\t\t\t<MyNotes\n\t\t\t\t\t@clickItem=\"$emit('clickItem', $event)\" \n\t\t\t\t/>\n\t\t\t\t<CarouselUser\n\t\t\t\t\tv-for=\"userDialogId in items\"\n\t\t\t\t\t:key=\"userDialogId\"\n\t\t\t\t\t:userDialogId=\"userDialogId\"\n\t\t\t\t\t@clickItem=\"$emit('clickItem', $event)\"\n\t\t\t\t\t@openContextMenu=\"$emit('openContextMenu', $event)\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</div>\n\t`,\n};\n","import 'ui.design-tokens';\nimport 'ui.fonts.opensans';\n\nimport { Runtime, type JsonObject } from 'main.core';\nimport { BaseEvent, EventEmitter } from 'main.core.events';\n\nimport { Messenger } from 'im.public';\nimport { Utils } from 'im.v2.lib.utils';\nimport { EventType } from 'im.v2.const';\n\nimport { ScrollWithGradient } from 'im.v2.component.elements.scroll-with-gradient';\nimport { Loader } from 'im.v2.component.elements.loader';\nimport { sortByDate, type SearchResultItem } from 'im.v2.lib.search';\n\nimport { SearchService } from '../classes/search-service';\nimport { SearchContextMenu } from '../classes/search-context-menu';\nimport { getFirstItemFromSearchResults } from '../helpers/get-first-search-item';\nimport { getMinTokenSize } from '../helpers/get-min-token-size';\nimport { mergeSearchItems } from '../helpers/merge-search-items';\nimport { EmptyState } from './elements/empty-state';\nimport { SearchItem } from './elements/search-item';\nimport { RecentUsersCarousel } from './elements/recent-users-carousel';\n\nimport './css/chat-search.css';\n\n// @vue/component\nexport const ChatSearch = {\n\tname: 'ChatSearch',\n\tcomponents: { ScrollWithGradient, SearchItem, EmptyState, RecentUsersCarousel, Loader },\n\tprops: {\n\t\tquery: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t\tsearchMode: {\n\t\t\ttype: Boolean,\n\t\t\trequired: true,\n\t\t},\n\t},\n\temits: ['loading'],\n\tdata(): JsonObject\n\t{\n\t\treturn {\n\t\t\tisRecentLoading: false,\n\t\t\tisServerLoading: false,\n\n\t\t\tcurrentServerQueries: 0,\n\t\t\trecentItems: [],\n\t\t\tsearchResult: [],\n\t\t};\n\t},\n\tcomputed: {\n\t\tcleanQuery(): string\n\t\t{\n\t\t\treturn this.query.trim().toLowerCase();\n\t\t},\n\t\tshowLatestSearchResult(): boolean\n\t\t{\n\t\t\treturn this.cleanQuery.length === 0;\n\t\t},\n\t\tisEmptyState(): boolean\n\t\t{\n\t\t\treturn this.searchResult.length === 0;\n\t\t},\n\t},\n\twatch: {\n\t\tcleanQuery(newQuery: string)\n\t\t{\n\t\t\tif (newQuery.length === 0)\n\t\t\t{\n\t\t\t\tthis.cleanSearchResult();\n\t\t\t}\n\n\t\t\tthis.startSearch(newQuery);\n\t\t},\n\t\tisServerLoading(newValue: boolean)\n\t\t{\n\t\t\tthis.$emit('loading', newValue);\n\t\t},\n\t\tsearchMode(newValue: boolean)\n\t\t{\n\t\t\tif (!newValue)\n\t\t\t{\n\t\t\t\tthis.searchService.clearSessionResult();\n\t\t\t\tvoid this.loadRecentSearchFromServer();\n\t\t\t}\n\t\t},\n\t},\n\tcreated()\n\t{\n\t\tthis.contextMenuManager = new SearchContextMenu();\n\n\t\tthis.searchService = new SearchService({\n\t\t\tchats: true,\n\t\t\tusers: true,\n\t\t});\n\t\tthis.searchOnServerDelayed = Runtime.debounce(this.searchOnServer, 400, this);\n\n\t\tEventEmitter.subscribe(EventType.dialog.errors.accessDenied, this.onDelete);\n\t\tEventEmitter.subscribe(EventType.search.keyPressed, this.onKeyPressed);\n\n\t\tvoid this.loadRecentSearchFromServer();\n\t},\n\tbeforeUnmount()\n\t{\n\t\tEventEmitter.unsubscribe(EventType.dialog.errors.accessDenied, this.onDelete);\n\t\tEventEmitter.unsubscribe(EventType.search.keyPressed, this.onKeyPressed);\n\t},\n\tmethods: {\n\t\tasync loadRecentSearchFromServer()\n\t\t{\n\t\t\tthis.isRecentLoading = true;\n\t\t\tthis.recentItems = await this.searchService.loadLatestResults();\n\t\t\tthis.isRecentLoading = false;\n\t\t},\n\t\tstartSearch(query: string)\n\t\t{\n\t\t\tif (query.length > 0)\n\t\t\t{\n\t\t\t\tconst result = this.searchService.searchLocal(query);\n\t\t\t\tif (query !== this.cleanQuery)\n\t\t\t\t{\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.searchResult = sortByDate(result);\n\t\t\t}\n\n\t\t\tif (query.length >= getMinTokenSize())\n\t\t\t{\n\t\t\t\tthis.isServerLoading = true;\n\t\t\t\tthis.searchOnServerDelayed(query);\n\t\t\t}\n\t\t},\n\t\tcleanSearchResult()\n\t\t{\n\t\t\tthis.searchResult = [];\n\t\t\tthis.searchService.clearSessionResult();\n\t\t},\n\t\tasync searchOnServer(query: string)\n\t\t{\n\t\t\tthis.currentServerQueries++;\n\n\t\t\tconst searchResult = await this.searchService.search(query);\n\t\t\tif (query !== this.cleanQuery)\n\t\t\t{\n\t\t\t\tthis.stopLoader();\n\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst mergedItems = mergeSearchItems(this.searchResult, searchResult);\n\t\t\tthis.searchResult = sortByDate(mergedItems);\n\t\t\tthis.stopLoader();\n\t\t},\n\t\tstopLoader()\n\t\t{\n\t\t\tthis.currentServerQueries--;\n\t\t\tif (this.currentServerQueries > 0)\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.isServerLoading = false;\n\t\t},\n\t\tonOpenContextMenu(event)\n\t\t{\n\t\t\tconst { dialogId, nativeEvent } = event;\n\t\t\tif (Utils.key.isAltOrOption(nativeEvent))\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.contextMenuManager.openMenu({ dialogId }, nativeEvent.currentTarget);\n\t\t},\n\t\tonDelete({ data: eventData })\n\t\t{\n\t\t\tconst { dialogId } = eventData;\n\t\t\tthis.recentItems = this.recentItems.filter((recentItem) => {\n\t\t\t\treturn recentItem !== dialogId;\n\t\t\t});\n\t\t\tthis.searchResult = this.searchResult.filter((dialogIdFromSearch) => {\n\t\t\t\treturn dialogIdFromSearch !== dialogId;\n\t\t\t});\n\t\t},\n\t\tonScroll()\n\t\t{\n\t\t\tthis.contextMenuManager.destroy();\n\t\t},\n\t\tasync onClickItem(event: {dialogId: string, nativeEvent: KeyboardEvent})\n\t\t{\n\t\t\tconst { dialogId, nativeEvent } = event;\n\t\t\tthis.searchService.saveItemToRecentSearch(dialogId);\n\t\t\tvoid Messenger.openChat(dialogId);\n\n\t\t\tif (!Utils.key.isAltOrOption(nativeEvent))\n\t\t\t{\n\t\t\t\tEventEmitter.emit(EventType.search.close);\n\t\t\t}\n\t\t},\n\t\tonKeyPressed(event: BaseEvent)\n\t\t{\n\t\t\tif (!this.searchMode)\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst { keyboardEvent } = event.getData();\n\n\t\t\tif (Utils.key.isCombination(keyboardEvent, 'Enter'))\n\t\t\t{\n\t\t\t\tthis.onPressEnterKey(event);\n\t\t\t}\n\t\t},\n\t\tonPressEnterKey(keyboardEvent: KeyboardEvent)\n\t\t{\n\t\t\tconst firstItem: ?SearchResultItem = getFirstItemFromSearchResults({\n\t\t\t\tsearchResult: this.searchResult,\n\t\t\t\trecentItems: this.recentItems,\n\t\t\t});\n\t\t\tif (!firstItem)\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvoid this.onClickItem({\n\t\t\t\tdialogId: firstItem.dialogId,\n\t\t\t\tnativeEvent: keyboardEvent,\n\t\t\t});\n\t\t},\n\t\tloc(key: string): string\n\t\t{\n\t\t\treturn this.$Bitrix.Loc.getMessage(key);\n\t\t},\n\t},\n\ttemplate: `\n\t\t<ScrollWithGradient :gradientHeight=\"28\" :withShadow=\"false\" @scroll=\"onScroll\"> \n\t\t\t<div class=\"bx-im-chat-search__container\">\n\t\t\t\t<template v-if=\"showLatestSearchResult\">\n\t\t\t\t\t<RecentUsersCarousel\n\t\t\t\t\t\t@clickItem=\"onClickItem\"\n\t\t\t\t\t\t@openContextMenu=\"onOpenContextMenu\"\n\t\t\t\t\t/>\n\t\t\t\t\t<div class=\"bx-im-chat-search__title\">{{ loc('IM_SEARCH_SECTION_RECENT') }}</div>\n\t\t\t\t\t<SearchItem\n\t\t\t\t\t\tv-for=\"item in recentItems\"\n\t\t\t\t\t\t:key=\"item.dialogId\"\n\t\t\t\t\t\t:dialogId=\"item.dialogId\"\n\t\t\t\t\t\t:replaceWithNotes=\"true\"\n\t\t\t\t\t\t@clickItem=\"onClickItem\"\n\t\t\t\t\t\t@openContextMenu=\"onOpenContextMenu\"\n\t\t\t\t\t/>\n\t\t\t\t\t<Loader v-if=\"isRecentLoading\" class=\"bx-im-chat-search__loader\" />\n\t\t\t\t</template>\n\t\t\t\t<template v-else>\n\t\t\t\t\t<SearchItem\n\t\t\t\t\t\tv-for=\"item in searchResult\"\n\t\t\t\t\t\t:key=\"item.dialogId\"\n\t\t\t\t\t\t:dialogId=\"item.dialogId\"\n\t\t\t\t\t\t:dateMessage=\"item.dateMessage\"\n\t\t\t\t\t\t:withDate=\"true\"\n\t\t\t\t\t\t:query=\"cleanQuery\"\n\t\t\t\t\t\t:replaceWithNotes=\"true\"\n\t\t\t\t\t\t@clickItem=\"onClickItem\"\n\t\t\t\t\t\t@openContextMenu=\"onOpenContextMenu\"\n\t\t\t\t\t/>\n\t\t\t\t\t<EmptyState v-if=\"isEmptyState\" />\n\t\t\t\t</template>\n\t\t\t</div>\n\t\t</ScrollWithGradient> \n\t`,\n};\n","import { EventEmitter } from 'main.core.events';\n\nimport { EventType } from 'im.v2.const';\nimport { SearchInput } from 'im.v2.component.elements.search-input';\n\n// @vue/component\nexport const ChatSearchInput = {\n\tname: 'ChatSearchInput',\n\tcomponents: { SearchInput },\n\tprops: {\n\t\tsearchMode: {\n\t\t\ttype: Boolean,\n\t\t\trequired: true,\n\t\t},\n\t\tisLoading: {\n\t\t\ttype: Boolean,\n\t\t\trequired: false,\n\t\t},\n\t\tdelayForFocusOnStart: {\n\t\t\ttype: [Number, null],\n\t\t\tdefault: null,\n\t\t},\n\t\twithIcon: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t},\n\temits: ['closeSearch', 'openSearch', 'updateSearch'],\n\tcreated()\n\t{\n\t\tEventEmitter.subscribe(EventType.search.close, this.onClose);\n\t},\n\tbeforeUnmount()\n\t{\n\t\tEventEmitter.unsubscribe(EventType.search.close, this.onClose);\n\t},\n\tmethods: {\n\t\tonInputFocus()\n\t\t{\n\t\t\tthis.$emit('openSearch');\n\t\t},\n\t\tonClose()\n\t\t{\n\t\t\tthis.$emit('closeSearch');\n\t\t},\n\t\tonInputUpdate(query: string)\n\t\t{\n\t\t\tthis.$emit('updateSearch', query);\n\t\t},\n\t\tonKeyPressed(event: KeyboardEvent)\n\t\t{\n\t\t\tEventEmitter.emit(EventType.search.keyPressed, { keyboardEvent: event });\n\t\t},\n\t\tloc(key: string): string\n\t\t{\n\t\t\treturn this.$Bitrix.Loc.getMessage(key);\n\t\t},\n\t},\n\ttemplate: `\n\t\t<SearchInput\n\t\t\t:placeholder=\"loc('IM_SEARCH_INPUT_PLACEHOLDER_V2')\"\n\t\t\t:searchMode=\"searchMode\"\n\t\t\t:isLoading=\"isLoading\"\n\t\t\t:withLoader=\"true\"\n\t\t\t:delayForFocusOnStart=\"delayForFocusOnStart\"\n\t\t\t:withIcon=\"withIcon\"\n\t\t\t@inputFocus=\"onInputFocus\"\n\t\t\t@inputBlur=\"onClose\"\n\t\t\t@queryChange=\"onInputUpdate\"\n\t\t\t@keyPressed=\"onKeyPressed\"\n\t\t\t@close=\"onClose\"\n\t\t/>\n\t`,\n};\n","import 'ui.design-tokens';\nimport 'ui.fonts.opensans';\n\nimport { Runtime } from 'main.core';\nimport { BaseEvent, EventEmitter } from 'main.core.events';\n\nimport { Utils } from 'im.v2.lib.utils';\nimport { EventType } from 'im.v2.const';\nimport { Analytics } from 'im.v2.lib.analytics';\nimport { ScrollWithGradient } from 'im.v2.component.elements.scroll-with-gradient';\nimport { sortByDate, getUsersFromRecentItems, type SearchResultItem } from 'im.v2.lib.search';\n\nimport { SearchService } from '../classes/search-service';\nimport { getFirstItemFromSearchResults } from '../helpers/get-first-search-item';\nimport { getMinTokenSize } from '../helpers/get-min-token-size';\nimport { mergeSearchItems } from '../helpers/merge-search-items';\nimport { EmptyState } from './elements/empty-state';\nimport { SearchItem } from './elements/search-item';\n\nimport './css/chat-search.css';\n\nimport type { JsonObject } from 'main.core';\n\n// @vue/component\nexport const AddToChat = {\n\tname: 'AddToChat',\n\tcomponents: { ScrollWithGradient, SearchItem, EmptyState },\n\tprops: {\n\t\tquery: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t\tdialogId: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tselectedItems: {\n\t\t\ttype: Array,\n\t\t\trequired: false,\n\t\t\tdefault: () => [],\n\t\t},\n\t},\n\temits: ['clickItem'],\n\tdata(): JsonObject\n\t{\n\t\treturn {\n\t\t\tisLoading: false,\n\n\t\t\tcurrentServerQueries: 0,\n\t\t\tsearchResult: [],\n\t\t};\n\t},\n\tcomputed: {\n\t\tshowLatestSearchResult(): boolean\n\t\t{\n\t\t\treturn this.query.length === 0;\n\t\t},\n\t\trecentSearchItems(): SearchResultItem[]\n\t\t{\n\t\t\treturn getUsersFromRecentItems({ withFakeUsers: true });\n\t\t},\n\t\tisEmptyState(): boolean\n\t\t{\n\t\t\treturn this.searchResult.length === 0;\n\t\t},\n\t},\n\twatch: {\n\t\tquery(newQuery: string)\n\t\t{\n\t\t\tif (newQuery.length === 0)\n\t\t\t{\n\t\t\t\tthis.cleanSearchResult();\n\t\t\t}\n\n\t\t\tthis.startSearch(newQuery);\n\t\t},\n\t},\n\tcreated()\n\t{\n\t\tthis.searchService = new SearchService({\n\t\t\tchats: false,\n\t\t\tusers: true,\n\t\t});\n\t\tthis.searchOnServerDelayed = Runtime.debounce(this.searchOnServer, 400, this);\n\n\t\tEventEmitter.subscribe(EventType.search.keyPressed, this.onKeyPressed);\n\t},\n\tbeforeUnmount()\n\t{\n\t\tEventEmitter.unsubscribe(EventType.search.keyPressed, this.onKeyPressed);\n\t},\n\tmethods: {\n\t\tstartSearch(query: string)\n\t\t{\n\t\t\tif (query.length > 0)\n\t\t\t{\n\t\t\t\tconst result = this.searchService.searchLocal(query);\n\t\t\t\tif (query !== this.query)\n\t\t\t\t{\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.searchResult = sortByDate(result);\n\t\t\t}\n\n\t\t\tif (query.length >= getMinTokenSize())\n\t\t\t{\n\t\t\t\tthis.isLoading = true;\n\t\t\t\tthis.searchOnServerDelayed(query);\n\t\t\t}\n\t\t},\n\t\tcleanSearchResult()\n\t\t{\n\t\t\tthis.searchService.clearSessionResult();\n\t\t\tthis.searchResult = [];\n\t\t},\n\t\tasync searchOnServer(query: string)\n\t\t{\n\t\t\tthis.currentServerQueries++;\n\n\t\t\tconst searchResult = await this.searchService.search(query);\n\t\t\tif (query !== this.query)\n\t\t\t{\n\t\t\t\tthis.stopLoader();\n\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst mergedItems = mergeSearchItems(this.searchResult, searchResult);\n\t\t\tthis.searchResult = sortByDate(mergedItems);\n\t\t\tthis.stopLoader();\n\t\t},\n\t\tstopLoader()\n\t\t{\n\t\t\tthis.currentServerQueries--;\n\t\t\tif (this.currentServerQueries > 0)\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.isLoading = false;\n\t\t},\n\t\tasync onClickItem(event: {dialogId: string, nativeEvent: KeyboardEvent}, itemIndex: number)\n\t\t{\n\t\t\tAnalytics.getInstance().userAdd.onSelectUserFromSearchResult({\n\t\t\t\tdialogId: this.dialogId,\n\t\t\t\tposition: itemIndex + 1,\n\t\t\t});\n\t\t\tthis.$emit('clickItem', event);\n\t\t},\n\t\tasync onClickItemRecentItem(event: {dialogId: string, nativeEvent: KeyboardEvent}, itemIndex: number)\n\t\t{\n\t\t\tAnalytics.getInstance().userAdd.onSelectUserFromRecent({\n\t\t\t\tdialogId: this.dialogId,\n\t\t\t\tposition: itemIndex + 1,\n\t\t\t});\n\t\t\tthis.$emit('clickItem', event);\n\t\t},\n\t\tonKeyPressed(event: BaseEvent)\n\t\t{\n\t\t\tconst { keyboardEvent } = event.getData();\n\n\t\t\tif (Utils.key.isCombination(keyboardEvent, 'Enter'))\n\t\t\t{\n\t\t\t\tthis.onPressEnterKey(event);\n\t\t\t}\n\t\t},\n\t\tonPressEnterKey(keyboardEvent: KeyboardEvent)\n\t\t{\n\t\t\tconst firstItem: ?SearchResultItem = getFirstItemFromSearchResults({\n\t\t\t\tsearchResult: this.searchResult,\n\t\t\t\trecentItems: this.recentSearchItems,\n\t\t\t});\n\t\t\tif (!firstItem)\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvoid this.onClickItem({\n\t\t\t\tdialogId: firstItem.dialogId,\n\t\t\t\tnativeEvent: keyboardEvent,\n\t\t\t});\n\t\t},\n\t\tisSelected(dialogId: string): boolean\n\t\t{\n\t\t\treturn this.selectedItems.includes(dialogId);\n\t\t},\n\t\tloc(key: string): string\n\t\t{\n\t\t\treturn this.$Bitrix.Loc.getMessage(key);\n\t\t},\n\t},\n\ttemplate: `\n\t\t<ScrollWithGradient :gradientHeight=\"28\" :withShadow=\"false\"> \n\t\t\t<div class=\"bx-im-chat-search__container\">\n\t\t\t\t<div class=\"bx-im-chat-search__title\">\n\t\t\t\t\t{{ loc('IM_SEARCH_SECTION_RECENT_CHATS') }}\n\t\t\t\t</div>\n\t\t\t\t<template v-if=\"showLatestSearchResult\">\n\t\t\t\t\t<SearchItem\n\t\t\t\t\t\tv-for=\"(item, index) in recentSearchItems\"\n\t\t\t\t\t\t:key=\"item.dialogId\"\n\t\t\t\t\t\t:dialogId=\"item.dialogId\"\n\t\t\t\t\t\t:selected=\"isSelected(item.dialogId)\"\n\t\t\t\t\t\t:replaceWithNotes=\"false\"\n\t\t\t\t\t\t@clickItem=\"onClickItemRecentItem($event, index)\"\n\t\t\t\t\t/>\n\t\t\t\t</template>\n\t\t\t\t<template v-else>\n\t\t\t\t\t<SearchItem\n\t\t\t\t\t\tv-for=\"(item, index) in searchResult\"\n\t\t\t\t\t\t:key=\"item.dialogId\"\n\t\t\t\t\t\t:dialogId=\"item.dialogId\"\n\t\t\t\t\t\t:dateMessage=\"item.dateMessage\"\n\t\t\t\t\t\t:withDate=\"true\"\n\t\t\t\t\t\t:isSelected=\"isSelected(item.dialogId)\"\n\t\t\t\t\t\t:query=\"query\"\n\t\t\t\t\t\t:replaceWithNotes=\"false\"\n\t\t\t\t\t\t@clickItem=\"onClickItem($event, index)\"\n\t\t\t\t\t/>\n\t\t\t\t\t<EmptyState v-if=\"isEmptyState\" />\n\t\t\t\t</template>\n\t\t\t</div>\n\t\t</ScrollWithGradient> \n\t`,\n};\n","import 'ui.design-tokens';\nimport 'ui.fonts.opensans';\nimport { Runtime, type JsonObject } from 'main.core';\nimport { BaseEvent, EventEmitter } from 'main.core.events';\n\nimport { Core } from 'im.v2.application.core';\nimport { Utils } from 'im.v2.lib.utils';\nimport { EventType } from 'im.v2.const';\nimport { Analytics } from 'im.v2.lib.analytics';\nimport { getRecentListItems, sortByDate, type SearchResultItem } from 'im.v2.lib.search';\nimport { ScrollWithGradient } from 'im.v2.component.elements.scroll-with-gradient';\n\nimport { getFirstItemFromSearchResults } from '../helpers/get-first-search-item';\nimport { getMinTokenSize } from '../helpers/get-min-token-size';\nimport { mergeSearchItems } from '../helpers/merge-search-items';\nimport { EmptyState } from './elements/empty-state';\nimport { SearchItem } from './elements/search-item';\nimport { SearchService } from '../classes/search-service';\n\nimport './css/chat-search.css';\n\n// @vue/component\nexport const ForwardSearch = {\n\tname: 'ForwardSearch',\n\tcomponents: { ScrollWithGradient, SearchItem, EmptyState },\n\tprops: {\n\t\tquery: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t\tdialogId: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t},\n\temits: ['clickItem', 'loading'],\n\tdata(): JsonObject\n\t{\n\t\treturn {\n\t\t\tisLoading: false,\n\n\t\t\tcurrentServerQueries: 0,\n\t\t\tsearchResult: [],\n\t\t};\n\t},\n\tcomputed: {\n\t\tshowLatestSearchResult(): boolean\n\t\t{\n\t\t\treturn this.query.length === 0;\n\t\t},\n\t\trecentSearchItems(): SearchResultItem[]\n\t\t{\n\t\t\tconst recent = getRecentListItems({ withFakeUsers: true });\n\t\t\tconst filteredRecent = recent.filter(({ dialogId }) => {\n\t\t\t\treturn dialogId !== Core.getUserId().toString();\n\t\t\t});\n\n\t\t\tfilteredRecent.unshift({\n\t\t\t\tdialogId: Core.getUserId().toString(),\n\t\t\t\tdateMessage: '',\n\t\t\t});\n\n\t\t\treturn filteredRecent;\n\t\t},\n\t\tisEmptyState(): boolean\n\t\t{\n\t\t\treturn this.searchResult.length === 0;\n\t\t},\n\t},\n\twatch: {\n\t\tquery(newQuery: string)\n\t\t{\n\t\t\tif (newQuery.length === 0)\n\t\t\t{\n\t\t\t\tthis.cleanSearchResult();\n\t\t\t}\n\n\t\t\tthis.startSearch(newQuery);\n\t\t},\n\t\tisLoading(newValue: boolean)\n\t\t{\n\t\t\tthis.$emit('loading', newValue);\n\t\t},\n\t},\n\tcreated()\n\t{\n\t\tthis.searchService = new SearchService({\n\t\t\tchats: true,\n\t\t\tusers: true,\n\t\t});\n\t\tthis.searchOnServerDelayed = Runtime.debounce(this.searchOnServer, 400, this);\n\t\tEventEmitter.subscribe(EventType.search.keyPressed, this.onKeyPressed);\n\t},\n\tbeforeUnmount()\n\t{\n\t\tEventEmitter.unsubscribe(EventType.search.keyPressed, this.onKeyPressed);\n\t},\n\tmethods: {\n\t\tstartSearch(query: string)\n\t\t{\n\t\t\tif (query.length > 0)\n\t\t\t{\n\t\t\t\tconst result = this.searchService.searchLocal(query);\n\t\t\t\tif (query !== this.query)\n\t\t\t\t{\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.searchResult = sortByDate(result);\n\t\t\t}\n\n\t\t\tif (query.length >= getMinTokenSize())\n\t\t\t{\n\t\t\t\tthis.isLoading = true;\n\t\t\t\tthis.searchOnServerDelayed(query);\n\t\t\t}\n\t\t},\n\t\tcleanSearchResult()\n\t\t{\n\t\t\tthis.searchResult = [];\n\t\t\tthis.searchService.clearSessionResult();\n\t\t},\n\t\tasync searchOnServer(query: string)\n\t\t{\n\t\t\tthis.currentServerQueries++;\n\n\t\t\tconst searchResult = await this.searchService.search(query);\n\t\t\tif (query !== this.query)\n\t\t\t{\n\t\t\t\tthis.stopLoader();\n\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst mergedItems = mergeSearchItems(this.searchResult, searchResult);\n\t\t\tthis.searchResult = sortByDate(mergedItems);\n\t\t\tthis.stopLoader();\n\t\t},\n\t\tstopLoader()\n\t\t{\n\t\t\tthis.currentServerQueries--;\n\t\t\tif (this.currentServerQueries > 0)\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.isLoading = false;\n\t\t},\n\t\tasync onClickItem(event: {dialogId: string, nativeEvent: KeyboardEvent}, itemIndex: number)\n\t\t{\n\t\t\tAnalytics.getInstance().messageForward.onSelectRecipientFromSearchResult({\n\t\t\t\tdialogId: this.dialogId,\n\t\t\t\tposition: itemIndex + 1,\n\t\t\t});\n\t\t\tthis.$emit('clickItem', event);\n\t\t},\n\t\tasync onClickRecentItem(event: {dialogId: string, nativeEvent: KeyboardEvent}, itemIndex: number)\n\t\t{\n\t\t\tAnalytics.getInstance().messageForward.onSelectRecipientFromRecent({\n\t\t\t\tdialogId: this.dialogId,\n\t\t\t\tposition: itemIndex + 1,\n\t\t\t});\n\t\t\tthis.$emit('clickItem', event);\n\t\t},\n\t\tonKeyPressed(event: BaseEvent)\n\t\t{\n\t\t\tconst { keyboardEvent } = event.getData();\n\n\t\t\tif (Utils.key.isCombination(keyboardEvent, 'Enter'))\n\t\t\t{\n\t\t\t\tthis.onPressEnterKey(event);\n\t\t\t}\n\t\t},\n\t\tonPressEnterKey(keyboardEvent: KeyboardEvent)\n\t\t{\n\t\t\tconst firstItem: ?SearchResultItem = getFirstItemFromSearchResults({\n\t\t\t\trecentItems: this.recentSearchItems,\n\t\t\t\tsearchResult: this.searchResult,\n\t\t\t});\n\t\t\tif (!firstItem)\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvoid this.onClickItem({\n\t\t\t\tdialogId: firstItem.dialogId,\n\t\t\t\tnativeEvent: keyboardEvent,\n\t\t\t});\n\t\t},\n\t\tloc(key: string): string\n\t\t{\n\t\t\treturn this.$Bitrix.Loc.getMessage(key);\n\t\t},\n\t},\n\ttemplate: `\n\t\t<ScrollWithGradient :gradientHeight=\"28\" :withShadow=\"false\"> \n\t\t\t<div class=\"bx-im-chat-search__container\">\n\t\t\t\t<div class=\"bx-im-chat-search__title\">\n\t\t\t\t\t{{ loc('IM_SEARCH_SECTION_RECENT_CHATS') }}\n\t\t\t\t</div>\n\t\t\t\t<template v-if=\"showLatestSearchResult\">\n\t\t\t\t\t<SearchItem\n\t\t\t\t\t\tv-for=\"(item, index) in recentSearchItems\"\n\t\t\t\t\t\t:key=\"item.dialogId\"\n\t\t\t\t\t\t:dialogId=\"item.dialogId\"\n\t\t\t\t\t\t:replaceWithNotes=\"true\"\n\t\t\t\t\t\t@clickItem=\"onClickRecentItem($event, index)\"\n\t\t\t\t\t/>\n\t\t\t\t</template>\n\t\t\t\t<template v-else>\n\t\t\t\t\t<SearchItem\n\t\t\t\t\t\tv-for=\"(item, index) in searchResult\"\n\t\t\t\t\t\t:key=\"item.dialogId\"\n\t\t\t\t\t\t:dialogId=\"item.dialogId\"\n\t\t\t\t\t\t:dateMessage=\"item.dateMessage\"\n\t\t\t\t\t\t:withDate=\"true\"\n\t\t\t\t\t\t:query=\"query\"\n\t\t\t\t\t\t:replaceWithNotes=\"true\"\n\t\t\t\t\t\t@clickItem=\"onClickItem($event, index)\"\n\t\t\t\t\t/>\n\t\t\t\t\t<EmptyState v-if=\"isEmptyState\" />\n\t\t\t\t</template>\n\t\t\t</div>\n\t\t</ScrollWithGradient> \n\t`,\n};\n"],"names":["SEARCH_REQUEST_ENDPOINT","LOAD_LATEST_RESULTS_ENDPOINT","SAVE_ITEM_ENDPOINT","SearchService","constructor","searchConfig","Map","StoreUpdater","LocalSearch","loadLatestResults","response","items","recentItems","length","itemsFromRecentItems","update","searchLocal","query","localCollection","values","search","searchResult","forEach","searchItem","set","dialogId","saveItemToRecentSearch","id","entityId","EntityId","config","json","getSearchConfig","Ajax","runAction","clearSessionResult","clear","Logger","warn","data","dialog","error","searchQuery","queryWords","Utils","text","getWordsFromString","map","item","toString","dateMessage","customData","filledRecentItems","found","find","recentItem","push","SearchContextMenu","BaseMenu","callManager","CallManager","getInstance","permissionManager","PermissionManager","getMenuItems","getOpenItem","getOpenProfileItem","getChatsWithUserItem","Loc","getMessage","onclick","Messenger","openChat","context","menuInstance","close","isUser","isBot","profileUri","user","getProfileLink","href","isChatWithCurrentUser","isAnyChatOpened","store","getters","EventEmitter","emit","EventType","sidebar","open","panel","SidebarDetailBlock","chatsWithUser","standalone","type","UserType","bot","getCurrentUserId","Number","parseInt","getFirstItemFromSearchResults","DEFAULT_MIN_TOKEN_SIZE","getMinTokenSize","settings","Extension","getSettings","get","mergeSearchItems","originalItems","newItems","mergedItems","result","EmptyState","name","computed","title","$Bitrix","subTitle","template","ItemTextByChatType","ChatType","openChannel","generalChannel","channel","collab","default","SearchItem","components","ChatAvatar","ChatTitleWithHighlighting","props","String","required","withDate","Boolean","selected","replaceWithNotes","emits","AvatarSize","$store","isChat","isNotes","Core","getUserId","avatarType","ChatAvatarType","notes","titleType","ChatTitleType","position","userItemText","loc","highlightText","Text","encode","chatItemText","itemText","notesText","itemTextForTitle","formattedDate","date","cast","formatDate","methods","onClick","event","$emit","nativeEvent","onRightClick","altKey","shiftKey","DateFormatter","formatByTemplate","DateTemplate","recent","phraseCode","MyNotes","created","contextMenuManager","beforeUnmount","destroy","CarouselUser","userDialogId","firstName","isExtranet","extranet","SHOW_USERS_LIMIT","RecentUsersCarousel","usersDialogIds","getUsersFromRecentItems","withFakeUsers","slice","startsWith","key","ChatSearch","ScrollWithGradient","Loader","searchMode","isRecentLoading","isServerLoading","currentServerQueries","cleanQuery","trim","toLowerCase","showLatestSearchResult","isEmptyState","watch","newQuery","cleanSearchResult","startSearch","newValue","searchService","loadRecentSearchFromServer","chats","users","searchOnServerDelayed","Runtime","debounce","searchOnServer","subscribe","errors","accessDenied","onDelete","keyPressed","onKeyPressed","unsubscribe","sortByDate","stopLoader","onOpenContextMenu","isAltOrOption","openMenu","currentTarget","eventData","filter","dialogIdFromSearch","onScroll","onClickItem","keyboardEvent","getData","isCombination","onPressEnterKey","firstItem","ChatSearchInput","SearchInput","isLoading","delayForFocusOnStart","withIcon","onClose","onInputFocus","onInputUpdate","AddToChat","selectedItems","Array","recentSearchItems","itemIndex","Analytics","userAdd","onSelectUserFromSearchResult","onClickItemRecentItem","onSelectUserFromRecent","isSelected","includes","ForwardSearch","getRecentListItems","filteredRecent","unshift","messageForward","onSelectRecipientFromSearchResult","onClickRecentItem","onSelectRecipientFromRecent"],"mappings":"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"}

Youez - 2016 - github.com/yon3zu
LinuXploit