2 lines
No EOL
13 KiB
JavaScript
2 lines
No EOL
13 KiB
JavaScript
import{I as e,M as t,R as n,U as r,X as i,Y as a,_ as o,d as s,f as c,g as l,i as u,p as d,q as f,t as p,u as m}from"./_plugin-vue_export-helper.By3-ojQa.js";import{a as h}from"./modal.BLgTTi-o.js";import{i as g,r as ee}from"./vuex.esm-bundler.CWMfctgB.js";import{t as _}from"./lodash.daI9UflD.js";import{O as v,c as y,d as b,n as x}from"./oauth.C4JLKGAu.js";import{C as S,K as C,_n as w,kn as T,w as te}from"./free-solid-svg-icons.vn_kySUQ.js";import{t as ne}from"./promise_interval.BgbE32Aa.js";import{t as re}from"./locale.service.ol8gNUGd.js";import{i as ie}from"./user_card.DVbLIASH.js";import{t as ae}from"./popover.94nM-RDc.js";import{A as E,I as D,T as O,_ as k,a as A,i as j,j as M,r as N,s as P,t as F,u as I,y as L}from"./main.CPF6dYCY.js";import{t as R}from"./chat_title.C29jtIsU.js";var z=_(),B={name:`Timeago`,props:[`date`],computed:{displayDate(){let e=new Date;return e.setHours(0,0,0,0),this.date.getTime()===e.getTime()?this.$t(`display_date.today`):this.date.toLocaleDateString(re.internalToBrowserLocale(this.$i18n.locale),{day:`numeric`,month:`long`})}}};function V(e,n,r,a,o,s){return t(),d(`time`,null,i(s.displayDate),1)}var H=p(B,[[`render`,V]]);T.add(w,C);var U={name:`ChatMessage`,props:[`author`,`edited`,`noHeading`,`chatViewItem`,`hoveredMessageChain`],emits:[`hover`],components:{Popover:ae,Attachment:M,StatusContent:L,UserAvatar:ie,Gallery:E,LinkPreview:O,ChatMessageDate:H,UserPopover:D},computed:{createdAt(){return this.chatViewItem.data.created_at.toLocaleTimeString(`en`,{hour:`2-digit`,minute:`2-digit`,hour12:!1})},isCurrentUser(){return this.message.account_id===this.currentUser.id},message(){return this.chatViewItem.data},isMessage(){return this.chatViewItem.type===`message`},messageForStatusContent(){return{summary:``,emojis:this.message.emojis,raw_html:this.message.content||``,text:this.message.content||``,attachments:this.message.attachments}},hasAttachment(){return this.message.attachments.length>0},...h(b,{betterShadow:e=>e.browserSupport.cssFilter}),...g({currentUser:e=>e.users.currentUser,restrictedNicknames:e=>y().restrictedNicknames}),popoverMarginStyle(){return this.isCurrentUser?{}:{left:50}},...h(v,[`mergedConfig`,`findUser`])},data(){return{hovered:!1,menuOpened:!1}},methods:{onHover(e){this.$emit(`hover`,{isHovered:e,messageChainId:this.chatViewItem.messageChainId})},async deleteMessage(){window.confirm(this.$t(`chats.delete_confirm`))&&await this.$store.dispatch(`deleteChatMessage`,{messageId:this.chatViewItem.data.id,chatId:this.chatViewItem.data.chat_id}),this.hovered=!1,this.menuOpened=!1}}},W={key:0,class:`avatar-wrapper`},G={class:`chat-message-inner`},K={class:`dropdown-menu`},q={class:`menu-item dropdown-item -icon`},J=[`title`],oe={class:`created-at`},se={key:1,class:`chat-message-date-separator`};function ce(e,u,p,h,g,ee){let _=n(`UserAvatar`),v=n(`UserPopover`),y=n(`FAIcon`),b=n(`Popover`),x=n(`StatusContent`),S=n(`ChatMessageDate`);return e.isMessage?(t(),d(`div`,{key:0,class:f([`chat-message-wrapper`,{"hovered-message-chain":e.hoveredMessageChain}]),onMouseover:u[5]||=t=>e.onHover(!0),onMouseleave:u[6]||=t=>e.onHover(!1)},[m(`div`,{class:f([`chat-message`,[{outgoing:e.isCurrentUser,incoming:!e.isCurrentUser}]])},[e.isCurrentUser?c(``,!0):(t(),d(`div`,W,[e.chatViewItem.isHead?(t(),s(v,{key:0,"user-id":e.author.id},{default:r(()=>[o(_,{compact:!0,user:e.author},null,8,[`user`])]),_:1},8,[`user-id`])):c(``,!0)])),m(`div`,G,[m(`div`,{class:`status-body`,style:a({"min-width":e.message.attachment?`80%`:``})},[m(`div`,{class:f([`media status`,{"without-attachment":!e.hasAttachment,pending:e.chatViewItem.data.pending,error:e.chatViewItem.data.error}]),style:{position:`relative`},onMouseenter:u[3]||=t=>e.hovered=!0,onMouseleave:u[4]||=t=>e.hovered=!1},[m(`div`,{class:f([`chat-message-menu`,{visible:e.hovered||e.menuOpened}])},[o(b,{trigger:`click`,placement:`top`,"bound-to-selector":`.chat-view-inner`,"bound-to":{x:`container`},margin:e.popoverMarginStyle,onShow:u[1]||=t=>e.menuOpened=!0,onClose:u[2]||=t=>e.menuOpened=!1},{content:r(()=>[m(`div`,K,[m(`div`,q,[m(`button`,{class:`main-button`,onClick:u[0]||=(...t)=>e.deleteMessage&&e.deleteMessage(...t)},[o(y,{icon:`times`}),l(` `+i(e.$t(`chats.delete`)),1)])])])]),trigger:r(()=>[m(`button`,{class:`button-default menu-icon`,title:e.$t(`chats.more`)},[o(y,{icon:`ellipsis-h`})],8,J)]),_:1},8,[`margin`])],2),o(x,{class:`message-content`,status:e.messageForStatusContent,"full-content":!0},{footer:r(()=>[m(`span`,oe,i(e.createdAt),1)]),_:1},8,[`status`])],34)],4)])],2)],34)):(t(),d(`div`,se,[o(S,{date:e.chatViewItem.date},null,8,[`date`])]))}var le=p(U,[[`render`,ce]]),Y=()=>({scrollTop:window.scrollY,scrollHeight:document.documentElement.scrollHeight,offsetHeight:window.innerHeight}),ue=(e,t)=>e.scrollTop+(t.scrollHeight-e.scrollHeight),de=(e=0)=>{let t=window.scrollY+e;return document.documentElement.scrollHeight-window.innerHeight<=t},fe=()=>document.documentElement.scrollHeight>window.innerHeight;T.add(S,te);var X=10,Z=10,pe=100,me=1500,Q=10,he={components:{ChatMessage:le,ChatTitle:R,PostStatusForm:k},data(){return{jumpToBottomButtonVisible:!1,hoveredMessageChainId:void 0,lastScrollPosition:{},scrollableContainerHeight:`100%`,errorLoadingChat:!1,messageRetriers:{}}},created(){this.startFetching(),window.addEventListener(`resize`,this.handleResize)},mounted(){window.addEventListener(`scroll`,this.handleScroll),document.hidden!==void 0&&document.addEventListener(`visibilitychange`,this.handleVisibilityChange,!1),this.$nextTick(()=>{this.handleResize()})},unmounted(){window.removeEventListener(`scroll`,this.handleScroll),window.removeEventListener(`resize`,this.handleResize),document.hidden!==void 0&&document.removeEventListener(`visibilitychange`,this.handleVisibilityChange,!1),this.$store.dispatch(`clearCurrentChat`)},computed:{recipient(){return this.currentChat&&this.currentChat.account},recipientId(){return this.$route.params.recipient_id},formPlaceholder(){return this.recipient?this.$t(`chats.message_user`,{nickname:this.recipient.screen_name_ui}):``},chatViewItems(){return A.getView(this.currentChatMessageService)},newMessageCount(){return this.currentChatMessageService&&this.currentChatMessageService.newMessageCount},streamingEnabled(){return this.mergedConfig.useStreamingApi&&this.mastoUserSocketStatus===I.JOINED},...ee([`currentChat`,`currentChatMessageService`,`findOpenedChatByRecipientId`]),...h(v,[`mergedConfig`]),...h(b,{mobileLayout:e=>e.layoutType===`mobile`}),...g({mastoUserSocketStatus:e=>e.api.mastoUserSocketStatus,currentUser:e=>e.users.currentUser})},watch:{chatViewItems(){let e=this.bottomedOut(X);this.$nextTick(()=>{e&&this.scrollDown()})},$route:function(){this.startFetching()},mastoUserSocketStatus(e){e===I.JOINED&&this.fetchChat({isFirstFetch:!0})}},methods:{onMessageHover({isHovered:e,messageChainId:t}){this.hoveredMessageChainId=e?t:void 0},onFilesDropped(){this.$nextTick(()=>{this.handleResize()})},handleVisibilityChange(){this.$nextTick(()=>{!document.hidden&&this.bottomedOut(X)&&this.scrollDown({forceRead:!0})})},handleResize(e={}){let{delayed:t=!1}=e;if(t){setTimeout(()=>{this.handleResize({...e,delayed:!1})},pe);return}this.$nextTick(()=>{let{offsetHeight:e=void 0}=Y(),t=e-this.lastScrollPosition.offsetHeight;t!==0&&!this.bottomedOut()&&this.$nextTick(()=>{window.scrollBy({top:-Math.trunc(t)})}),this.lastScrollPosition=Y()})},scrollDown(e={}){let{behavior:t=`auto`,forceRead:n=!1}=e;this.$nextTick(()=>{window.scrollTo({top:document.documentElement.scrollHeight,behavior:t})}),n&&this.readChat()},readChat(){if(!(this.currentChatMessageService&&this.currentChatMessageService.maxId)||document.hidden)return;let e=this.currentChatMessageService.maxId;this.$store.dispatch(`readChat`,{id:this.currentChat.id,lastReadId:e})},bottomedOut(e){return de(e)},reachedTop(){return window.scrollY<=0},cullOlderCheck(){window.setTimeout(()=>{this.bottomedOut(Z)&&this.$store.dispatch(`cullOlderMessages`,this.currentChatMessageService.chatId)},5e3)},handleScroll:(0,z.throttle)(function(){this.lastScrollPosition=Y(),this.currentChat&&(this.reachedTop()?this.fetchChat({maxId:this.currentChatMessageService.minId}):this.bottomedOut(Z)?(this.jumpToBottomButtonVisible=!1,this.cullOlderCheck(),this.newMessageCount>0&&window.setTimeout(()=>{this.$el&&this.readChat()},me)):this.jumpToBottomButtonVisible=!0)},200),handleScrollUp(e){let t=Y();window.scrollTo({top:ue(e,t)})},fetchChat({isFirstFetch:e=!1,fetchLatest:t=!1,maxId:n}){let r=this.currentChatMessageService;if(!r||t&&this.streamingEnabled)return;let i=r.chatId,a=!!n;return F({id:i,maxId:n,sinceId:t&&r.maxId,credentials:x().token}).then(({data:t})=>{e&&A.clear(r);let n=Y();this.$store.dispatch(`addChatMessages`,{chatId:i,messages:t}).then(()=>{this.$nextTick(()=>{a&&this.handleScrollUp(n),!fe()&&t.length>0&&this.fetchChat({maxId:this.currentChatMessageService.minId})})})})},async startFetching(){let e=this.findOpenedChatByRecipientId(this.recipientId);if(!e)try{let{data:t}=await N({accountId:this.recipientId,credentials:x().token});e=t}catch(e){console.error(`Error creating or getting a chat`,e),this.errorLoadingChat=!0}e&&(this.$nextTick(()=>{this.scrollDown({forceRead:!0})}),this.$store.dispatch(`addOpenedChat`,{chat:e}),this.doStartFetching())},doStartFetching(){this.$store.dispatch(`startFetchingCurrentChat`,{fetcher:()=>ne(()=>this.fetchChat({fetchLatest:!0}),5e3)}),this.fetchChat({isFirstFetch:!0})},handleAttachmentPosting(){this.$nextTick(()=>{this.handleResize(),this.scrollDown({forceRead:!0})})},sendMessage({status:e,media:t,idempotencyKey:n}){let r={id:this.currentChat.id,content:e,idempotencyKey:n};t[0]&&(r.mediaId=t[0].id);let i=P({attachments:t,chatId:this.currentChat.id,content:e,userId:this.currentUser.id,idempotencyKey:n});return this.$store.dispatch(`addChatMessages`,{chatId:this.currentChat.id,messages:[i]}).then(()=>{this.handleAttachmentPosting()}),this.doSendMessage({params:r,fakeMessage:i,retriesLeft:Q})},doSendMessage({params:e,fakeMessage:t,retriesLeft:n=Q}){if(!(n<=0))return j({...e,credentials:x().token}).then(({data:e})=>(this.$store.dispatch(`addChatMessages`,{chatId:this.currentChat.id,updateMaxId:!1,messages:[{...e,fakeId:t.id}]}),e)).catch(r=>(console.error(`Error sending message`,r),this.$store.dispatch(`handleMessageError`,{chatId:this.currentChat.id,fakeId:t.id,isRetry:n!==Q}),(r.statusCode>=500&&r.statusCode<600||r.message===`Failed to fetch`)&&(this.messageRetriers[t.id]=setTimeout(()=>{this.doSendMessage({params:e,fakeMessage:t,retriesLeft:n-1})},1e3*2**(Q-n))),{})),Promise.resolve(t)},goBack(){this.$router.push({name:`chats`,params:{username:this.currentUser.screen_name}})}}},ge={class:`chat-view`},_e={class:`chat-view-inner`},ve={ref:`inner`,class:`panel-default panel chat-view-body`},ye={ref:`header`,class:`panel-heading -sticky chat-view-heading`},be={class:`title text-center`},$={key:1,class:`chat-loading-error`},xe={class:`alert error`},Se={ref:`footer`,class:`panel-body footer`},Ce={key:0,class:`badge -notification unread-chat-count unread-message-count`};function we(r,l,p,h,g,ee){let _=n(`FAIcon`),v=n(`ChatTitle`),y=n(`ChatMessage`),b=n(`PostStatusForm`);return t(),d(`div`,ge,[m(`div`,_e,[m(`div`,ve,[m(`div`,ye,[m(`button`,{class:`button-unstyled go-back-button`,onClick:l[0]||=(...e)=>r.goBack&&r.goBack(...e)},[o(_,{size:`lg`,icon:`chevron-left`})]),m(`div`,be,[o(v,{user:r.recipient,"with-avatar":!0},null,8,[`user`])])],512),m(`div`,{class:`chat-message-list message-list`,style:a({height:r.scrollableContainerHeight})},[r.errorLoadingChat?(t(),d(`div`,$,[m(`div`,xe,i(r.$t(`chats.error_loading_chat`)),1)])):(t(!0),d(u,{key:0},e(r.chatViewItems,e=>(t(),s(y,{key:e.id,author:r.recipient,"chat-view-item":e,"hovered-message-chain":e.messageChainId===r.hoveredMessageChainId,onHover:r.onMessageHover},null,8,[`author`,`chat-view-item`,`hovered-message-chain`,`onHover`]))),128))],4),m(`div`,Se,[m(`div`,{class:f([`jump-to-bottom-button`,{visible:r.jumpToBottomButtonVisible}]),onClick:l[1]||=e=>r.scrollDown({behavior:`smooth`})},[m(`span`,null,[o(_,{icon:`chevron-down`}),r.newMessageCount?(t(),d(`div`,Ce,i(r.newMessageCount),1)):c(``,!0)])],2),o(b,{"disable-subject":!0,"disable-scope-selector":!0,"disable-notice":!0,"disable-lock-warning":!0,"disable-polls":!0,"disable-quotes":!0,"disable-sensitivity-checkbox":!0,"disable-submit":r.errorLoadingChat||!r.currentChat,"disable-preview":!0,"disable-draft":!0,"optimistic-posting":!0,"post-handler":r.sendMessage,"submit-on-enter":!r.mobileLayout,"preserve-focus":!r.mobileLayout,"auto-focus":!r.mobileLayout,placeholder:r.formPlaceholder,"file-limit":1,"max-height":`160`,"emoji-picker-placement":`top`,onResize:r.handleResize},null,8,[`disable-submit`,`post-handler`,`submit-on-enter`,`preserve-focus`,`auto-focus`,`placeholder`,`onResize`])],512)],512)])])}var Te=p(he,[[`render`,we]]);export{Te as default};
|
|
//# sourceMappingURL=chat.DdKwqQWN.js.map
|