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/im/v2/component/search/dist/ |
Upload File : |
this.BX=this.BX||{};this.BX.Messenger=this.BX.Messenger||{};this.BX.Messenger.v2=this.BX.Messenger.v2||{};(function(t,e,s,r,i,n,a,o,c,l,h,d,u,m,g,v,p,I,y,S,b,_){"use strict";const E="ui.entityselector.doSearch";const C="ui.entityselector.load";const f="ui.entityselector.saveRecentItems";var M=babelHelpers.classPrivateFieldLooseKey("localSearch");var L=babelHelpers.classPrivateFieldLooseKey("localCollection");var R=babelHelpers.classPrivateFieldLooseKey("searchConfig");var x=babelHelpers.classPrivateFieldLooseKey("storeUpdater");var T=babelHelpers.classPrivateFieldLooseKey("loadLatestResultsRequest");var k=babelHelpers.classPrivateFieldLooseKey("searchRequest");var P=babelHelpers.classPrivateFieldLooseKey("getDialogIdAndDate");var B=babelHelpers.classPrivateFieldLooseKey("getItemsFromRecentItems");class U{constructor(t){Object.defineProperty(this,B,{value:H});Object.defineProperty(this,P,{value:D});Object.defineProperty(this,k,{value:F});Object.defineProperty(this,T,{value:w});Object.defineProperty(this,M,{writable:true,value:void 0});Object.defineProperty(this,L,{writable:true,value:new Map});Object.defineProperty(this,R,{writable:true,value:void 0});Object.defineProperty(this,x,{writable:true,value:void 0});babelHelpers.classPrivateFieldLooseBase(this,R)[R]=t;babelHelpers.classPrivateFieldLooseBase(this,x)[x]=new b.StoreUpdater;babelHelpers.classPrivateFieldLooseBase(this,M)[M]=new b.LocalSearch(t)}async loadLatestResults(){const t=await babelHelpers.classPrivateFieldLooseBase(this,T)[T]();const{items:e,recentItems:s}=t;if(e.length===0||s.length===0){return[]}const r=babelHelpers.classPrivateFieldLooseBase(this,B)[B](s,e);await babelHelpers.classPrivateFieldLooseBase(this,x)[x].update(r);return babelHelpers.classPrivateFieldLooseBase(this,P)[P](r)}searchLocal(t){const e=[...babelHelpers.classPrivateFieldLooseBase(this,L)[L].values()];return babelHelpers.classPrivateFieldLooseBase(this,M)[M].search(t,e)}async search(t){const e=await babelHelpers.classPrivateFieldLooseBase(this,k)[k](t);await babelHelpers.classPrivateFieldLooseBase(this,x)[x].update(e);const s=babelHelpers.classPrivateFieldLooseBase(this,P)[P](e);s.forEach((t=>{babelHelpers.classPrivateFieldLooseBase(this,L)[L].set(t.dialogId,t)}));return s}saveItemToRecentSearch(t){const e=[{id:t,entityId:b.EntityId}];const s={json:{...b.getSearchConfig(babelHelpers.classPrivateFieldLooseBase(this,R)[R]),recentItems:e}};void g.ajax.runAction(f,s)}clearSessionResult(){babelHelpers.classPrivateFieldLooseBase(this,L)[L].clear()}}async function w(){const t={json:b.getSearchConfig(babelHelpers.classPrivateFieldLooseBase(this,R)[R])};let e={items:[],recentItems:[]};try{const r=await g.ajax.runAction(C,t);s.Logger.warn("Search service: latest search request result",r);e=r.data.dialog}catch(t){s.Logger.warn("Search service: latest search request error",t)}return e}async function F(t){const e={json:b.getSearchConfig(babelHelpers.classPrivateFieldLooseBase(this,R)[R])};e.json.searchQuery={queryWords:I.Utils.text.getWordsFromString(t),query:t};let r=[];try{const t=await g.ajax.runAction(E,e);s.Logger.warn("Search service: request result",t);r=t.data.dialog.items}catch(t){s.Logger.warn("Search service: error",t)}return r}function D(t){return t.map((t=>{var e,s;return{dialogId:t.id.toString(),dateMessage:(e=(s=t.customData)==null?void 0:s.dateMessage)!=null?e:""}}))}function H(t,e){const s=[];t.forEach((([,t])=>{const r=e.find((e=>e.id===t.toString()));if(r){s.push(r)}}));return s}class O extends i.BaseMenu{constructor(){super();this.id="im-chat-search-context-menu";this.callManager=n.CallManager.getInstance();this.permissionManager=a.PermissionManager.getInstance()}getMenuItems(){return[this.getOpenItem(),this.getOpenProfileItem(),this.getChatsWithUserItem()]}getOpenItem(){return{text:g.Loc.getMessage("IM_LIB_MENU_OPEN"),onclick:()=>{r.Messenger.openChat(this.context.dialogId);this.menuInstance.close()}}}getOpenProfileItem(){if(!this.isUser()||this.isBot()){return null}const t=I.Utils.user.getProfileLink(this.context.dialogId);return{text:g.Loc.getMessage("IM_LIB_MENU_OPEN_PROFILE_V2"),href:t,onclick:()=>{this.menuInstance.close()}}}getChatsWithUserItem(){if(!this.isUser()||this.isBot()||this.isChatWithCurrentUser()){return null}const t=this.store.getters["application/getLayout"].entityId.length>0;return{text:g.Loc.getMessage("IM_LIB_MENU_FIND_SHARED_CHATS"),onclick:async()=>{if(!t){await r.Messenger.openChat(this.context.dialogId)}v.EventEmitter.emit(y.EventType.sidebar.open,{panel:y.SidebarDetailBlock.chatsWithUser,standalone:true,dialogId:this.context.dialogId});this.menuInstance.close()}}}isUser(){return this.store.getters["chats/isUser"](this.context.dialogId)}isBot(){if(!this.isUser()){return false}const t=this.store.getters["users/get"](this.context.dialogId);return t.type===y.UserType.bot}isChatWithCurrentUser(){return this.getCurrentUserId()===Number.parseInt(this.context.dialogId,10)}}const A=({searchResult:t,recentItems:e})=>{if(t.length>0){return t[0]}if(e.length>0){return e[0]}return null};const N=3;const q=()=>{const t=g.Extension.getSettings("im.v2.component.search");return t.get("minTokenSize",N)};const $=(t,e)=>{const s=[...t,...e].map((t=>[t.dialogId,t]));const r=new Map(s);return[...r.values()]};const W={name:"EmptyState",computed:{title(){return this.$Bitrix.Loc.getMessage("IM_SEARCH_RESULT_NOT_FOUND")},subTitle(){return this.$Bitrix.Loc.getMessage("IM_SEARCH_RESULT_NOT_FOUND_DESCRIPTION")}},template:`\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`};const X={[y.ChatType.openChannel]:g.Loc.getMessage("IM_SEARCH_ITEM_OPEN_CHANNEL_TYPE_GROUP"),[y.ChatType.generalChannel]:g.Loc.getMessage("IM_SEARCH_ITEM_OPEN_CHANNEL_TYPE_GROUP"),[y.ChatType.channel]:g.Loc.getMessage("IM_SEARCH_ITEM_PRIVATE_CHANNEL_TYPE_GROUP"),[y.ChatType.collab]:g.Loc.getMessage("IM_SEARCH_ITEM_COLLAB_TYPE"),default:g.Loc.getMessage("IM_SEARCH_ITEM_CHAT_TYPE_GROUP_V2")};const K={name:"SearchItem",components:{ChatAvatar:h.ChatAvatar,ChatTitleWithHighlighting:l.ChatTitleWithHighlighting},props:{dialogId:{type:String,required:true},dateMessage:{type:String,default:""},withDate:{type:Boolean,default:false},selected:{type:Boolean,required:false},query:{type:String,default:""},replaceWithNotes:{type:Boolean,default:true}},emits:["clickItem","openContextMenu"],computed:{AvatarSize:()=>h.AvatarSize,dialog(){return this.$store.getters["chats/get"](this.dialogId,true)},isChat(){return!this.isUser},isUser(){return this.dialog.type===y.ChatType.user},isNotes(){if(!this.replaceWithNotes){return false}return Number.parseInt(this.dialogId,10)===p.Core.getUserId()},avatarType(){if(!this.replaceWithNotes){return""}return this.isNotes?h.ChatAvatarType.notes:""},titleType(){if(!this.replaceWithNotes){return""}return this.isNotes?l.ChatTitleType.notes:""},position(){if(!this.isUser){return""}return this.$store.getters["users/getPosition"](this.dialogId)},userItemText(){if(!this.position){return this.loc("IM_SEARCH_ITEM_USER_TYPE_GROUP_V2")}return o.highlightText(g.Text.encode(this.position),this.query)},chatItemText(){var t;return(t=X[this.dialog.type])!=null?t:X.default},itemText(){if(this.isNotes){return this.notesText}return this.isUser?this.userItemText:this.chatItemText},itemTextForTitle(){if(this.isNotes){return this.notesText}return this.isUser?this.position:this.chatItemText},notesText(){return this.loc("IM_LIST_RECENT_CHAT_SELF_SUBTITLE")},formattedDate(){if(!this.dateMessage){return null}const t=I.Utils.date.cast(this.dateMessage);return this.formatDate(t)}},methods:{onClick(t){this.$emit("clickItem",{dialogId:this.dialogId,nativeEvent:t})},onRightClick(t){if(t.altKey&&t.shiftKey){return}this.$emit("openContextMenu",{dialogId:this.dialogId,nativeEvent:t})},formatDate(t){return c.DateFormatter.formatByTemplate(t,c.DateTemplate.recent)},loc(t){return this.$Bitrix.Loc.getMessage(t)}},template:`\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`};const Q={name:"MyNotes",emits:["clickItem"],computed:{dialogId(){return p.Core.getUserId().toString()},name(){return this.$Bitrix.Loc.getMessage("IM_SEARCH_MY_NOTES")}},created(){this.contextMenuManager=new O},beforeUnmount(){this.contextMenuManager.destroy()},methods:{onClick(t){this.$emit("clickItem",{dialogId:this.dialogId,nativeEvent:t})}},template:`\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`};const G={name:"CarouselUser",components:{ChatAvatar:h.ChatAvatar},props:{userDialogId:{type:String,required:true},selected:{type:Boolean,default:false}},emits:["clickItem","openContextMenu"],computed:{AvatarSize:()=>h.AvatarSize,user(){return this.$store.getters["users/get"](this.userDialogId,true)},name(){var t;return(t=this.user.firstName)!=null?t:this.user.name},isExtranet(){return this.user.type===y.UserType.extranet}},created(){this.contextMenuManager=new O},beforeUnmount(){this.contextMenuManager.destroy()},methods:{onClick(t){this.$emit("clickItem",{dialogId:this.userDialogId,nativeEvent:t})},onRightClick(t){if(t.altKey&&t.shiftKey){return}this.$emit("openContextMenu",{dialogId:this.userDialogId,nativeEvent:t})}},template:`\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`};const j=6;const z={name:"RecentUsersCarousel",components:{CarouselUser:G,MyNotes:Q},emits:["clickItem","openContextMenu"],computed:{usersDialogIds(){return b.getUsersFromRecentItems({withFakeUsers:false}).map((({dialogId:t})=>t))},items(){return this.usersDialogIds.slice(0,j-1)}},methods:{isChat(t){return t.startsWith("chat")},loc(t){return this.$Bitrix.Loc.getMessage(t)}},template:`\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`};const Y={name:"ChatSearch",components:{ScrollWithGradient:_.ScrollWithGradient,SearchItem:K,EmptyState:W,RecentUsersCarousel:z,Loader:e.Loader},props:{query:{type:String,default:""},searchMode:{type:Boolean,required:true}},emits:["loading"],data(){return{isRecentLoading:false,isServerLoading:false,currentServerQueries:0,recentItems:[],searchResult:[]}},computed:{cleanQuery(){return this.query.trim().toLowerCase()},showLatestSearchResult(){return this.cleanQuery.length===0},isEmptyState(){return this.searchResult.length===0}},watch:{cleanQuery(t){if(t.length===0){this.cleanSearchResult()}this.startSearch(t)},isServerLoading(t){this.$emit("loading",t)},searchMode(t){if(!t){this.searchService.clearSessionResult();void this.loadRecentSearchFromServer()}}},created(){this.contextMenuManager=new O;this.searchService=new U({chats:true,users:true});this.searchOnServerDelayed=g.Runtime.debounce(this.searchOnServer,400,this);v.EventEmitter.subscribe(y.EventType.dialog.errors.accessDenied,this.onDelete);v.EventEmitter.subscribe(y.EventType.search.keyPressed,this.onKeyPressed);void this.loadRecentSearchFromServer()},beforeUnmount(){v.EventEmitter.unsubscribe(y.EventType.dialog.errors.accessDenied,this.onDelete);v.EventEmitter.unsubscribe(y.EventType.search.keyPressed,this.onKeyPressed)},methods:{async loadRecentSearchFromServer(){this.isRecentLoading=true;this.recentItems=await this.searchService.loadLatestResults();this.isRecentLoading=false},startSearch(t){if(t.length>0){const e=this.searchService.searchLocal(t);if(t!==this.cleanQuery){return}this.searchResult=b.sortByDate(e)}if(t.length>=q()){this.isServerLoading=true;this.searchOnServerDelayed(t)}},cleanSearchResult(){this.searchResult=[];this.searchService.clearSessionResult()},async searchOnServer(t){this.currentServerQueries++;const e=await this.searchService.search(t);if(t!==this.cleanQuery){this.stopLoader();return}const s=$(this.searchResult,e);this.searchResult=b.sortByDate(s);this.stopLoader()},stopLoader(){this.currentServerQueries--;if(this.currentServerQueries>0){return}this.isServerLoading=false},onOpenContextMenu(t){const{dialogId:e,nativeEvent:s}=t;if(I.Utils.key.isAltOrOption(s)){return}this.contextMenuManager.openMenu({dialogId:e},s.currentTarget)},onDelete({data:t}){const{dialogId:e}=t;this.recentItems=this.recentItems.filter((t=>t!==e));this.searchResult=this.searchResult.filter((t=>t!==e))},onScroll(){this.contextMenuManager.destroy()},async onClickItem(t){const{dialogId:e,nativeEvent:s}=t;this.searchService.saveItemToRecentSearch(e);void r.Messenger.openChat(e);if(!I.Utils.key.isAltOrOption(s)){v.EventEmitter.emit(y.EventType.search.close)}},onKeyPressed(t){if(!this.searchMode){return}const{keyboardEvent:e}=t.getData();if(I.Utils.key.isCombination(e,"Enter")){this.onPressEnterKey(t)}},onPressEnterKey(t){const e=A({searchResult:this.searchResult,recentItems:this.recentItems});if(!e){return}void this.onClickItem({dialogId:e.dialogId,nativeEvent:t})},loc(t){return this.$Bitrix.Loc.getMessage(t)}},template:`\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`};const V={name:"ChatSearchInput",components:{SearchInput:d.SearchInput},props:{searchMode:{type:Boolean,required:true},isLoading:{type:Boolean,required:false},delayForFocusOnStart:{type:[Number,null],default:null},withIcon:{type:Boolean,default:true}},emits:["closeSearch","openSearch","updateSearch"],created(){v.EventEmitter.subscribe(y.EventType.search.close,this.onClose)},beforeUnmount(){v.EventEmitter.unsubscribe(y.EventType.search.close,this.onClose)},methods:{onInputFocus(){this.$emit("openSearch")},onClose(){this.$emit("closeSearch")},onInputUpdate(t){this.$emit("updateSearch",t)},onKeyPressed(t){v.EventEmitter.emit(y.EventType.search.keyPressed,{keyboardEvent:t})},loc(t){return this.$Bitrix.Loc.getMessage(t)}},template:`\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`};const J={name:"AddToChat",components:{ScrollWithGradient:_.ScrollWithGradient,SearchItem:K,EmptyState:W},props:{query:{type:String,default:""},dialogId:{type:String,required:true},selectedItems:{type:Array,required:false,default:()=>[]}},emits:["clickItem"],data(){return{isLoading:false,currentServerQueries:0,searchResult:[]}},computed:{showLatestSearchResult(){return this.query.length===0},recentSearchItems(){return b.getUsersFromRecentItems({withFakeUsers:true})},isEmptyState(){return this.searchResult.length===0}},watch:{query(t){if(t.length===0){this.cleanSearchResult()}this.startSearch(t)}},created(){this.searchService=new U({chats:false,users:true});this.searchOnServerDelayed=g.Runtime.debounce(this.searchOnServer,400,this);v.EventEmitter.subscribe(y.EventType.search.keyPressed,this.onKeyPressed)},beforeUnmount(){v.EventEmitter.unsubscribe(y.EventType.search.keyPressed,this.onKeyPressed)},methods:{startSearch(t){if(t.length>0){const e=this.searchService.searchLocal(t);if(t!==this.query){return}this.searchResult=b.sortByDate(e)}if(t.length>=q()){this.isLoading=true;this.searchOnServerDelayed(t)}},cleanSearchResult(){this.searchService.clearSessionResult();this.searchResult=[]},async searchOnServer(t){this.currentServerQueries++;const e=await this.searchService.search(t);if(t!==this.query){this.stopLoader();return}const s=$(this.searchResult,e);this.searchResult=b.sortByDate(s);this.stopLoader()},stopLoader(){this.currentServerQueries--;if(this.currentServerQueries>0){return}this.isLoading=false},async onClickItem(t,e){S.Analytics.getInstance().userAdd.onSelectUserFromSearchResult({dialogId:this.dialogId,position:e+1});this.$emit("clickItem",t)},async onClickItemRecentItem(t,e){S.Analytics.getInstance().userAdd.onSelectUserFromRecent({dialogId:this.dialogId,position:e+1});this.$emit("clickItem",t)},onKeyPressed(t){const{keyboardEvent:e}=t.getData();if(I.Utils.key.isCombination(e,"Enter")){this.onPressEnterKey(t)}},onPressEnterKey(t){const e=A({searchResult:this.searchResult,recentItems:this.recentSearchItems});if(!e){return}void this.onClickItem({dialogId:e.dialogId,nativeEvent:t})},isSelected(t){return this.selectedItems.includes(t)},loc(t){return this.$Bitrix.Loc.getMessage(t)}},template:`\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`};const Z={name:"ForwardSearch",components:{ScrollWithGradient:_.ScrollWithGradient,SearchItem:K,EmptyState:W},props:{query:{type:String,default:""},dialogId:{type:String,required:true}},emits:["clickItem","loading"],data(){return{isLoading:false,currentServerQueries:0,searchResult:[]}},computed:{showLatestSearchResult(){return this.query.length===0},recentSearchItems(){const t=b.getRecentListItems({withFakeUsers:true});const e=t.filter((({dialogId:t})=>t!==p.Core.getUserId().toString()));e.unshift({dialogId:p.Core.getUserId().toString(),dateMessage:""});return e},isEmptyState(){return this.searchResult.length===0}},watch:{query(t){if(t.length===0){this.cleanSearchResult()}this.startSearch(t)},isLoading(t){this.$emit("loading",t)}},created(){this.searchService=new U({chats:true,users:true});this.searchOnServerDelayed=g.Runtime.debounce(this.searchOnServer,400,this);v.EventEmitter.subscribe(y.EventType.search.keyPressed,this.onKeyPressed)},beforeUnmount(){v.EventEmitter.unsubscribe(y.EventType.search.keyPressed,this.onKeyPressed)},methods:{startSearch(t){if(t.length>0){const e=this.searchService.searchLocal(t);if(t!==this.query){return}this.searchResult=b.sortByDate(e)}if(t.length>=q()){this.isLoading=true;this.searchOnServerDelayed(t)}},cleanSearchResult(){this.searchResult=[];this.searchService.clearSessionResult()},async searchOnServer(t){this.currentServerQueries++;const e=await this.searchService.search(t);if(t!==this.query){this.stopLoader();return}const s=$(this.searchResult,e);this.searchResult=b.sortByDate(s);this.stopLoader()},stopLoader(){this.currentServerQueries--;if(this.currentServerQueries>0){return}this.isLoading=false},async onClickItem(t,e){S.Analytics.getInstance().messageForward.onSelectRecipientFromSearchResult({dialogId:this.dialogId,position:e+1});this.$emit("clickItem",t)},async onClickRecentItem(t,e){S.Analytics.getInstance().messageForward.onSelectRecipientFromRecent({dialogId:this.dialogId,position:e+1});this.$emit("clickItem",t)},onKeyPressed(t){const{keyboardEvent:e}=t.getData();if(I.Utils.key.isCombination(e,"Enter")){this.onPressEnterKey(t)}},onPressEnterKey(t){const e=A({recentItems:this.recentSearchItems,searchResult:this.searchResult});if(!e){return}void this.onClickItem({dialogId:e.dialogId,nativeEvent:t})},loc(t){return this.$Bitrix.Loc.getMessage(t)}},template:`\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`};t.ChatSearch=Y;t.ChatSearchInput=V;t.AddToChat=J;t.ForwardSearch=Z})(this.BX.Messenger.v2.Component=this.BX.Messenger.v2.Component||{},BX.Messenger.v2.Component.Elements,BX.Messenger.v2.Lib,BX.Messenger.v2.Lib,BX.Messenger.v2.Lib,BX.Messenger.v2.Lib,BX.Messenger.v2.Lib,BX.Messenger.v2.Lib,BX.Messenger.v2.Lib,BX.Messenger.v2.Component.Elements,BX.Messenger.v2.Component.Elements,BX.Messenger.v2.Component.Elements,BX,BX,BX,BX.Event,BX.Messenger.v2.Application,BX.Messenger.v2.Lib,BX.Messenger.v2.Const,BX.Messenger.v2.Lib,BX.Messenger.v2.Lib,BX.Messenger.v2.Component.Elements); //# sourceMappingURL=registry.bundle.map.js