diff --git a/extensions/messages/js/dist/forum/components/MessageComposer.js.map b/extensions/messages/js/dist/forum/components/MessageComposer.js.map index 92286c1e0..71a70c51a 100644 --- a/extensions/messages/js/dist/forum/components/MessageComposer.js.map +++ b/extensions/messages/js/dist/forum/components/MessageComposer.js.map @@ -1 +1 @@ -{"version":3,"file":"forum/components/MessageComposer.js","mappings":"ySAce,MAAMA,UAAwB,KAC3C,WAAAC,GACEC,SAASC,YACT,OAAgBC,KAAM,kBAAc,EACtC,CACA,gBAAOC,CAAUC,GACfJ,MAAMG,UAAUC,GAChBA,EAAMC,YAAcD,EAAMC,aAAe,IAAY,eAAeC,MAAM,6CAA8C,CAAC,GAAG,IAC5HF,EAAMG,YAAcH,EAAMG,aAAe,eAAeD,MAAM,+CAAgD,CAAC,GAAG,GAClHF,EAAMI,YAAcJ,EAAMI,aAAe,IAAY,eAAeF,MAAM,sDAAuD,CAAC,GAAG,IACrIF,EAAMK,UAAY,uBACpB,CACA,MAAAC,CAAOC,GACL,IAAIC,EACJZ,MAAMU,OAAOC,GACb,IAAIE,GAA4D,OAAlDD,EAAwBV,KAAKE,MAAMU,iBAAsB,EAASF,EAAsBC,UAAYX,KAAKE,MAAMW,YAAc,GACvIF,IACFA,EAAQA,EAAMG,QAAOC,GAAQA,GAAQA,EAAKC,OAAS,YAAYD,KAAKC,QAEtEhB,KAAKiB,SAASC,OAAOL,WAAab,KAAKiB,SAASC,OAAOL,YAAc,IAAOF,GAC5EX,KAAKa,WAAab,KAAKiB,SAASC,OAAOL,UACzC,CACA,WAAAM,GACE,MAAMC,EAAQtB,MAAMqB,cAwBpB,OAvBAC,EAAMC,IAAI,aAAcC,EAAE,MAAO,CAC/Bf,UAAW,+BACTP,KAAKE,MAAMU,YAAcU,EAAE,IAAQ,CACrCC,KAAM,SACNhB,UAAW,yCACXiB,QAAS,IAAM,UAAUC,KAAK,IAAoB,CAChDC,MAAO,eAAetB,MAAM,wDAAyD,CAAC,GAAG,GACzFuB,SAAU3B,KAAKa,aACfe,SAAU,EACVC,SAAU,CAAC,YAAYd,KAAKC,MAC5Bc,SAAUnB,IACRX,KAAKa,WAAWF,EAAM,KAGzB,eAAeP,MAAM,gDAAiDJ,KAAKa,aAAakB,QAAUT,EAAE,MAAO,CAC5Gf,UAAW,oCACV,eAAeH,MAAM,sCAAuCkB,EAAE,KAAM,CACrEf,UAAW,mCACVP,KAAKa,aAAamB,KAAIjB,GAAQO,EAAE,KAAM,KAAMA,EAAE,IAAS,CACxDW,KAAMlB,EAAKmB,YACVZ,EAAE,IAAQ,CACXP,KAAMA,UACC,KACFK,CACT,CAKA,IAAAe,GACE,MAAMA,EAAO,CACXC,QAASpC,KAAKiB,SAASC,OAAOkB,WAgBhC,OAdIpC,KAAKE,MAAMU,WACbuB,EAAKE,cAAgB,CACnBC,OAAQ,CACNH,KAAM,CACJnB,GAAIhB,KAAKE,MAAMU,WAAWI,KAC1BO,KAAM,aAKZY,EAAKxB,MAAQX,KAAKa,aAAamB,KAAIjB,IAAQ,CACzCC,GAAID,EAAKC,SAGNmB,CACT,CACA,QAAAL,GACE9B,KAAKuC,SAAU,EACf,MAAMJ,EAAOnC,KAAKmC,OAClB,UAAUK,aAAa,mBAAmBC,KAAKN,EAAM,CACnDO,OAAQ,CACNC,QAAS,CAAC,aAEXC,MAAKC,IACN,IAAIC,EAAsBC,EAC1B/C,KAAKiB,SAAS+B,OAGd1B,EAAE2B,MAAMC,IAAI,UAAU,SAAU,CAC9BlC,GAAI6B,EAAQV,KAAKE,cAAcC,OAAOH,KAAKnB,MAEmB,OAA/D8B,GAAwBC,EAAc/C,KAAKE,OAAO4B,WAAqBgB,EAAqBK,KAAKJ,EAAaF,EAAQ,GACtH7C,KAAKoD,OAAOC,KAAKrD,MACtB,GAEF,OAAgBJ,EAAiB,mBAAmB,IAAM,uBAC1D0D,OAAOC,IAAIlC,IAAI,kBAAmB,mCAAoCzB,E","sources":["webpack://@flarum/messages/./src/forum/components/MessageComposer.tsx"],"sourcesContent":["import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/forum/app';\nimport ComposerBody from 'flarum/forum/components/ComposerBody';\nimport extractText from 'flarum/common/utils/extractText';\nimport Stream from 'flarum/common/utils/Stream';\nimport Button from 'flarum/common/components/Button';\nimport UserSelectionModal from 'flarum/common/components/UserSelectionModal';\nimport Avatar from 'flarum/common/components/Avatar';\nimport Tooltip from 'flarum/common/components/Tooltip';\n/**\n * The `MessageComposer` component displays the composer content for sending\n * a new message. It adds a selection field as a header control so the user can\n * enter the recipient(s) of their message.\n */\nexport default class MessageComposer extends ComposerBody {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"recipients\", void 0);\n }\n static initAttrs(attrs) {\n super.initAttrs(attrs);\n attrs.placeholder = attrs.placeholder || extractText(app.translator.trans('flarum-messages.forum.composer.placeholder', {}, true));\n attrs.submitLabel = attrs.submitLabel || app.translator.trans('flarum-messages.forum.composer.submit_button', {}, true);\n attrs.confirmExit = attrs.confirmExit || extractText(app.translator.trans('flarum-messages.forum.composer.discard_confirmation', {}, true));\n attrs.className = 'ComposerBody--message';\n }\n oninit(vnode) {\n var _this$attrs$replyingT;\n super.oninit(vnode);\n let users = ((_this$attrs$replyingT = this.attrs.replyingTo) == null ? void 0 : _this$attrs$replyingT.users()) || this.attrs.recipients || [];\n if (users) {\n users = users.filter(user => user && user.id() !== app.session.user.id());\n }\n this.composer.fields.recipients = this.composer.fields.recipients || Stream(users);\n this.recipients = this.composer.fields.recipients;\n }\n headerItems() {\n const items = super.headerItems();\n items.add('recipients', m(\"div\", {\n className: \"MessageComposer-recipients\"\n }, !this.attrs.replyingTo && m(Button, {\n type: \"button\",\n className: \"Button Button--outline Button--compact\",\n onclick: () => app.modal.show(UserSelectionModal, {\n title: app.translator.trans('flarum-messages.forum.recipient_selection_modal.title', {}, true),\n selected: this.recipients(),\n maxItems: 1,\n excluded: [app.session.user.id()],\n onsubmit: users => {\n this.recipients(users);\n }\n })\n }, app.translator.trans('flarum-messages.forum.composer.recipients')), !!this.recipients().length && m(\"div\", {\n className: \"MessageComposer-recipients-label\"\n }, app.translator.trans('flarum-messages.forum.composer.to')), m(\"ul\", {\n className: \"MessageComposer-recipients-list\"\n }, this.recipients().map(user => m(\"li\", null, m(Tooltip, {\n text: user.username()\n }, m(Avatar, {\n user: user\n })))))), 100);\n return items;\n }\n\n /**\n * Get the data to submit to the server when the discussion is saved.\n */\n data() {\n const data = {\n content: this.composer.fields.content()\n };\n if (this.attrs.replyingTo) {\n data.relationships = {\n dialog: {\n data: {\n id: this.attrs.replyingTo.id(),\n type: 'dialogs'\n }\n }\n };\n } else {\n data.users = this.recipients().map(user => ({\n id: user.id()\n }));\n }\n return data;\n }\n onsubmit() {\n this.loading = true;\n const data = this.data();\n app.store.createRecord('dialog-messages').save(data, {\n params: {\n include: ['dialog']\n }\n }).then(message => {\n var _this$attrs$onsubmit, _this$attrs;\n this.composer.hide();\n // @todo: app.dialogs.refresh();\n // @ts-ignore\n m.route.set(app.route('dialog', {\n id: message.data.relationships.dialog.data.id\n }));\n (_this$attrs$onsubmit = (_this$attrs = this.attrs).onsubmit) == null || _this$attrs$onsubmit.call(_this$attrs, message);\n }, this.loaded.bind(this));\n }\n}\n_defineProperty(MessageComposer, \"focusOnSelector\", () => '.TextEditor-editor');\nflarum.reg.add('flarum-messages', 'forum/components/MessageComposer', MessageComposer);"],"names":["MessageComposer","constructor","super","arguments","this","initAttrs","attrs","placeholder","trans","submitLabel","confirmExit","className","oninit","vnode","_this$attrs$replyingT","users","replyingTo","recipients","filter","user","id","composer","fields","headerItems","items","add","m","type","onclick","show","title","selected","maxItems","excluded","onsubmit","length","map","text","username","data","content","relationships","dialog","loading","createRecord","save","params","include","then","message","_this$attrs$onsubmit","_this$attrs","hide","route","set","call","loaded","bind","flarum","reg"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"forum/components/MessageComposer.js","mappings":"ySAce,MAAMA,UAAwB,KAC3C,WAAAC,GACEC,SAASC,YACT,OAAgBC,KAAM,kBAAc,EACtC,CACA,gBAAOC,CAAUC,GACfJ,MAAMG,UAAUC,GAChBA,EAAMC,YAAcD,EAAMC,aAAe,IAAY,eAAeC,MAAM,6CAA8C,CAAC,GAAG,IAC5HF,EAAMG,YAAcH,EAAMG,aAAe,eAAeD,MAAM,+CAAgD,CAAC,GAAG,GAClHF,EAAMI,YAAcJ,EAAMI,aAAe,IAAY,eAAeF,MAAM,sDAAuD,CAAC,GAAG,IACrIF,EAAMK,UAAY,uBACpB,CACA,MAAAC,CAAOC,GACL,IAAIC,EACJZ,MAAMU,OAAOC,GACb,IAAIE,GAA4D,OAAlDD,EAAwBV,KAAKE,MAAMU,iBAAsB,EAASF,EAAsBC,UAAYX,KAAKE,MAAMW,YAAc,GACvIF,IACFA,EAAQA,EAAMG,QAAOC,GAAQA,GAAQA,EAAKC,OAAS,YAAYD,KAAKC,QAEtEhB,KAAKiB,SAASC,OAAOL,WAAab,KAAKiB,SAASC,OAAOL,YAAc,IAAOF,GAC5EX,KAAKa,WAAab,KAAKiB,SAASC,OAAOL,UACzC,CACA,WAAAM,GACE,MAAMC,EAAQtB,MAAMqB,cAwBpB,OAvBAC,EAAMC,IAAI,aAAcC,EAAE,MAAO,CAC/Bf,UAAW,+BACTP,KAAKE,MAAMU,YAAcU,EAAE,IAAQ,CACrCC,KAAM,SACNhB,UAAW,yCACXiB,QAAS,IAAM,UAAUC,KAAK,IAAoB,CAChDC,MAAO,eAAetB,MAAM,wDAAyD,CAAC,GAAG,GACzFuB,SAAU3B,KAAKa,aACfe,SAAU,EACVC,SAAU,CAAC,YAAYd,KAAKC,MAC5Bc,SAAUnB,IACRX,KAAKa,WAAWF,EAAM,KAGzB,eAAeP,MAAM,gDAAiDJ,KAAKa,aAAakB,QAAUT,EAAE,MAAO,CAC5Gf,UAAW,oCACV,eAAeH,MAAM,sCAAuCkB,EAAE,KAAM,CACrEf,UAAW,mCACVP,KAAKa,aAAamB,KAAIjB,GAAQO,EAAE,KAAM,KAAMA,EAAE,IAAS,CACxDW,KAAMlB,EAAKmB,YACVZ,EAAE,IAAQ,CACXP,KAAMA,UACC,KACFK,CACT,CAKA,IAAAe,GACE,MAAMA,EAAO,CACXC,QAASpC,KAAKiB,SAASC,OAAOkB,WAgBhC,OAdIpC,KAAKE,MAAMU,WACbuB,EAAKE,cAAgB,CACnBC,OAAQ,CACNH,KAAM,CACJnB,GAAIhB,KAAKE,MAAMU,WAAWI,KAC1BO,KAAM,aAKZY,EAAKxB,MAAQX,KAAKa,aAAamB,KAAIjB,IAAQ,CACzCC,GAAID,EAAKC,SAGNmB,CACT,CACA,QAAAL,GACE9B,KAAKuC,SAAU,EACf,MAAMJ,EAAOnC,KAAKmC,OAClB,UAAUK,aAAa,mBAAmBC,KAAKN,EAAM,CACnDO,OAAQ,CACNC,QAAS,CAAC,aAEXC,MAAKC,IACN,IAAIC,EAAsBC,EAC1B/C,KAAKiB,SAAS+B,OAEd1B,EAAE2B,MAAMC,IAAI,UAAU,SAAU,CAC9BlC,GAAI6B,EAAQV,KAAKE,cAAcC,OAAOH,KAAKnB,MAEmB,OAA/D8B,GAAwBC,EAAc/C,KAAKE,OAAO4B,WAAqBgB,EAAqBK,KAAKJ,EAAaF,EAAQ,GACtH7C,KAAKoD,OAAOC,KAAKrD,MACtB,GAEF,OAAgBJ,EAAiB,mBAAmB,IAAM,uBAC1D0D,OAAOC,IAAIlC,IAAI,kBAAmB,mCAAoCzB,E","sources":["webpack://@flarum/messages/./src/forum/components/MessageComposer.tsx"],"sourcesContent":["import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/forum/app';\nimport ComposerBody from 'flarum/forum/components/ComposerBody';\nimport extractText from 'flarum/common/utils/extractText';\nimport Stream from 'flarum/common/utils/Stream';\nimport Button from 'flarum/common/components/Button';\nimport UserSelectionModal from 'flarum/common/components/UserSelectionModal';\nimport Avatar from 'flarum/common/components/Avatar';\nimport Tooltip from 'flarum/common/components/Tooltip';\n/**\n * The `MessageComposer` component displays the composer content for sending\n * a new message. It adds a selection field as a header control so the user can\n * enter the recipient(s) of their message.\n */\nexport default class MessageComposer extends ComposerBody {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"recipients\", void 0);\n }\n static initAttrs(attrs) {\n super.initAttrs(attrs);\n attrs.placeholder = attrs.placeholder || extractText(app.translator.trans('flarum-messages.forum.composer.placeholder', {}, true));\n attrs.submitLabel = attrs.submitLabel || app.translator.trans('flarum-messages.forum.composer.submit_button', {}, true);\n attrs.confirmExit = attrs.confirmExit || extractText(app.translator.trans('flarum-messages.forum.composer.discard_confirmation', {}, true));\n attrs.className = 'ComposerBody--message';\n }\n oninit(vnode) {\n var _this$attrs$replyingT;\n super.oninit(vnode);\n let users = ((_this$attrs$replyingT = this.attrs.replyingTo) == null ? void 0 : _this$attrs$replyingT.users()) || this.attrs.recipients || [];\n if (users) {\n users = users.filter(user => user && user.id() !== app.session.user.id());\n }\n this.composer.fields.recipients = this.composer.fields.recipients || Stream(users);\n this.recipients = this.composer.fields.recipients;\n }\n headerItems() {\n const items = super.headerItems();\n items.add('recipients', m(\"div\", {\n className: \"MessageComposer-recipients\"\n }, !this.attrs.replyingTo && m(Button, {\n type: \"button\",\n className: \"Button Button--outline Button--compact\",\n onclick: () => app.modal.show(UserSelectionModal, {\n title: app.translator.trans('flarum-messages.forum.recipient_selection_modal.title', {}, true),\n selected: this.recipients(),\n maxItems: 1,\n excluded: [app.session.user.id()],\n onsubmit: users => {\n this.recipients(users);\n }\n })\n }, app.translator.trans('flarum-messages.forum.composer.recipients')), !!this.recipients().length && m(\"div\", {\n className: \"MessageComposer-recipients-label\"\n }, app.translator.trans('flarum-messages.forum.composer.to')), m(\"ul\", {\n className: \"MessageComposer-recipients-list\"\n }, this.recipients().map(user => m(\"li\", null, m(Tooltip, {\n text: user.username()\n }, m(Avatar, {\n user: user\n })))))), 100);\n return items;\n }\n\n /**\n * Get the data to submit to the server when the discussion is saved.\n */\n data() {\n const data = {\n content: this.composer.fields.content()\n };\n if (this.attrs.replyingTo) {\n data.relationships = {\n dialog: {\n data: {\n id: this.attrs.replyingTo.id(),\n type: 'dialogs'\n }\n }\n };\n } else {\n data.users = this.recipients().map(user => ({\n id: user.id()\n }));\n }\n return data;\n }\n onsubmit() {\n this.loading = true;\n const data = this.data();\n app.store.createRecord('dialog-messages').save(data, {\n params: {\n include: ['dialog']\n }\n }).then(message => {\n var _this$attrs$onsubmit, _this$attrs;\n this.composer.hide();\n // @ts-ignore\n m.route.set(app.route('dialog', {\n id: message.data.relationships.dialog.data.id\n }));\n (_this$attrs$onsubmit = (_this$attrs = this.attrs).onsubmit) == null || _this$attrs$onsubmit.call(_this$attrs, message);\n }, this.loaded.bind(this));\n }\n}\n_defineProperty(MessageComposer, \"focusOnSelector\", () => '.TextEditor-editor');\nflarum.reg.add('flarum-messages', 'forum/components/MessageComposer', MessageComposer);"],"names":["MessageComposer","constructor","super","arguments","this","initAttrs","attrs","placeholder","trans","submitLabel","confirmExit","className","oninit","vnode","_this$attrs$replyingT","users","replyingTo","recipients","filter","user","id","composer","fields","headerItems","items","add","m","type","onclick","show","title","selected","maxItems","excluded","onsubmit","length","map","text","username","data","content","relationships","dialog","loading","createRecord","save","params","include","then","message","_this$attrs$onsubmit","_this$attrs","hide","route","set","call","loaded","bind","flarum","reg"],"sourceRoot":""} \ No newline at end of file diff --git a/extensions/messages/js/dist/forum/components/MessagesPage.js b/extensions/messages/js/dist/forum/components/MessagesPage.js index 06d43238d..4fccc3547 100644 --- a/extensions/messages/js/dist/forum/components/MessagesPage.js +++ b/extensions/messages/js/dist/forum/components/MessagesPage.js @@ -1,2 +1,2 @@ -"use strict";(self.webpackChunkmodule_exports=self.webpackChunkmodule_exports||[]).push([[301],{684:(e,s,t)=>{t.d(s,{A:()=>y});var a=t(488),r=t.n(a),o=t(950),i=t.n(o),l=t(336),n=t.n(l),d=t(443),c=t.n(d),u=t(88),g=t.n(u),h=t(917),p=t.n(h),f=t(521),v=t.n(f),b=t(167),N=t.n(b),_=t(906),M=t.n(_);class A extends(i()){view(e){var s;const t=this.attrs.dialog,a=t.recipient(),o=t.lastMessage();return m("li",{className:c()("DialogListItem",{"DialogListItem--unread":t.unreadCount(),active:this.attrs.active})},m(g(),{href:r().route.dialog(t),className:c()("DialogListItem-button",{active:this.attrs.active})},m("div",{className:"DialogListItem-avatar"},m(p(),{user:a}),!!t.unreadCount()&&m("div",{className:"Bubble Bubble--primary"},t.unreadCount())),m("div",{className:"DialogListItem-content"},m("div",{className:"DialogListItem-title"},v()(a),N()(t.lastMessageAt()),this.attrs.actions&&m("div",{className:"DialogListItem-actions"},this.actionItems().toArray())),m("div",{className:"DialogListItem-lastMessage"},o?null==(s=o.contentPlain())?void 0:s.slice(0,80):""))))}actionItems(){const e=new(M());return e.add("markAsRead",m(n(),{className:"Notification-action Button Button--link",icon:"fas fa-check","aria-label":r().translator.trans("flarum-messages.forum.dialog_list.mark_as_read_tooltip"),onclick:e=>{var s;e.preventDefault(),e.stopPropagation(),this.attrs.dialog.save({lastReadMessageId:(null==(s=this.attrs.dialog.data.relationships)?void 0:s.lastMessage.data).id}).finally((()=>{var e;0===this.attrs.dialog.unreadCount()&&r().session.user.pushAttributes({messageCount:(null!=(e=r().session.user.attribute("messageCount"))?e:1)-1}),m.redraw()}))}}),100),e}}flarum.reg.add("flarum-messages","forum/components/DialogListItem",A);class y extends(i()){oninit(e){super.oninit(e)}oncreate(e){super.oncreate(e)}onupdate(e){super.onupdate(e)}view(){return m("div",{className:"DialogList"},m("ul",{className:"DialogList-list"},this.attrs.state.getAllItems().map((e=>{var s;return m(A,{dialog:e,active:(null==(s=this.attrs.activeDialog)?void 0:s.id())===e.id(),actions:this.attrs.itemActions})}))),this.attrs.state.hasNext()&&!this.attrs.hideMore&&m("div",{className:"DialogList-loadMore"},m(n(),{className:"Button",onclick:this.attrs.state.loadNext.bind(this.attrs.state)},r().translator.trans("flarum-messages.forum.dialog_list.load_more_button"))))}}flarum.reg.add("flarum-messages","forum/components/DialogList",y)},654:(e,s,t)=>{t.r(s),t.d(s,{default:()=>me});var a=t(805),r=t(488),o=t.n(r),i=t(859),l=t.n(i),n=t(314),d=t.n(n),c=t(801),u=t.n(c),g=t(684),h=t(661),p=t.n(h),f=t(821),v=t.n(f),b=t(500),N=t.n(b),_=t(402),M=t.n(_),A=t(336),y=t.n(A);class I extends(M()){static initAttrs(e){e.className="MessagesPage-nav"}items(){const e=super.items(),s=o().session.user.attribute("canSendAnyMessage");return e.remove("newDiscussion"),e.add("newMessage",m(y(),{icon:"fas fa-edit",className:"Button Button--primary IndexPage-newDiscussion MessagesPage-newMessage",itemClassName:"App-primaryControl",onclick:()=>this.newMessageAction(),disabled:!s},o().translator.trans("flarum-messages.forum.messages_page.new_message_button")),10),e}newMessageAction(){return flarum.reg.asyncModuleImport("flarum/forum/components/ComposerBody").then((()=>(o().composer.load((()=>t.e(451).then(t.bind(t,761))),{user:o().session.user,onsubmit:()=>{o().dialogs.refresh()}}).then((()=>o().composer.show())),o().composer)))}}flarum.reg.add("flarum-messages","forum/components/MessagesSidebar",I);var k=t(950),D=t.n(k),w=t(476),P=t.n(w),S=t(906),T=t.n(S),B=t(154),L=t.n(B),x=t(917),C=t.n(x),R=t(3),H=t.n(R),j=t(651),q=t.n(j),G=t(301),O=t.n(G),E=t(443),F=t.n(E);class V extends(L()){oninit(e){super.oninit(e)}user(){return this.attrs.message.user()}controls(){return[]}freshness(){return this.attrs.message.freshness}createdByStarter(){return!1}onbeforeupdate(e){return super.onbeforeupdate(e)}onupdate(e){super.onupdate(e)}elementAttrs(){const e=this.attrs.message,s=super.elementAttrs();return s.className=F()(s.className||null,"Message",{"Post--renderFailed":e.renderFailed(),revealContent:!1,editing:!1}),s}header(){return super.header()}content(){return super.content().concat([m(H(),{headerItems:this.headerItems(),cardVisible:!1,isEditing:!1,isHidden:!1,contentHtml:this.attrs.message.contentHtml(),user:this.attrs.message.user()})])}classes(e){return super.classes(e)}actionItems(){return super.actionItems()}footerItems(){return super.footerItems()}sideItems(){return super.sideItems()}avatar(){return this.attrs.message.user()?m(C(),{user:this.attrs.message.user()}):""}headerItems(){const e=new(T()),s=this.attrs.message;return e.add("user",m(q(),{post:s}),100),e.add("meta",m(O(),{post:s})),e}}flarum.reg.add("flarum-messages","forum/components/Message",V);class z extends(D()){constructor(){super(...arguments),(0,a.A)(this,"replyPlaceholderComponent",v()(null)),(0,a.A)(this,"loadingPostComponent",v()(null)),(0,a.A)(this,"scrollListener",void 0),(0,a.A)(this,"initialToBottomScroll",!1),(0,a.A)(this,"lastTime",null),(0,a.A)(this,"checkedRead",!1),(0,a.A)(this,"markingAsRead",!1)}oninit(e){super.oninit(e),Promise.all([flarum.reg.asyncModuleImport("flarum/forum/components/ReplyPlaceholder"),flarum.reg.asyncModuleImport("flarum/forum/components/LoadingPost")]).then((e=>{let[s,t]=e;this.replyPlaceholderComponent(s.default),this.loadingPostComponent(t.default)}))}oncreate(e){super.oncreate(e),this.scrollListener=new(P())(this.onscroll.bind(this),this.element),setTimeout((()=>{this.scrollListener.start(),this.element.addEventListener("scrollend",this.markAsRead.bind(this))}))}onupdate(e){super.onupdate(e),this.initialToBottomScroll||this.attrs.state.isLoading()||(this.scrollToBottom(),this.initialToBottomScroll=!0),this.initialToBottomScroll&&!this.checkedRead&&(this.markAsRead(),this.checkedRead=!0)}onremove(e){super.onremove(e),this.scrollListener.stop()}view(){return m("div",{className:"MessageStream"},this.attrs.state.isLoading()?m(p(),null):this.content())}content(){var e;const s=[],a=this.attrs.state.getAllItems().sort(((e,s)=>e.createdAt().getTime()-s.createdAt().getTime())),r=this.replyPlaceholderComponent(),i=this.loadingPostComponent();return a[0].id()!==(null==(e=this.attrs.dialog.data.relationships)?void 0:e.firstMessage.data).id&&(s.push(m("div",{className:"MessageStream-item",key:"loadPrevious"},m(y(),{onclick:()=>this.whileMaintainingScroll((()=>this.attrs.state.loadNext())),type:"button",className:"Button Button--block MessageStream-loadPrev"},o().translator.trans("flarum-messages.forum.messages_page.stream.load_previous_button")))),i&&s.push(m("div",{className:"MessageStream-item",key:"loading-prev"},m(i,null)))),a.forEach(((e,t)=>s.push(this.messageItem(e,t)))),r&&s.push(m("div",{className:"MessageStream-item",key:"reply"},m(r,{discussion:this.attrs.dialog,onclick:()=>{flarum.reg.asyncModuleImport("flarum/forum/components/ComposerBody").then((()=>{o().composer.load((()=>t.e(451).then(t.bind(t,761))),{user:o().session.user,replyingTo:this.attrs.dialog,onsubmit:e=>{this.attrs.state.push(e),setTimeout((()=>this.scrollToBottom()),50)}}).then((()=>o().composer.show()))}))},composingReply:()=>o().composer.composingMessageTo(this.attrs.dialog)}))),s}messageItem(e,s){return m("div",{className:"MessageStream-item",key:s,"data-id":e.id()},this.timeGap(e),m(V,{message:e}))}timeGap(e){var s;if(e.id()===(null==(s=this.attrs.dialog.data.relationships)?void 0:s.firstMessage.data).id)return this.lastTime=e.createdAt(),m("div",{class:"PostStream-timeGap"},m("span",null,o().translator.trans("flarum-messages.forum.messages_page.stream.start_of_the_conversation")));const t=this.lastTime,a=e.createdAt().getTime()-((null==t?void 0:t.getTime())||0);return this.lastTime=e.createdAt(),t&&a>3456e5?m("div",{className:"PostStream-timeGap"},m("span",null,o().translator.trans("flarum-messages.forum.messages_page.stream.time_lapsed_text",{period:dayjs().add(a,"ms").fromNow(!0)}))):null}onscroll(){this.whileMaintainingScroll((()=>this.element.scrollTop<=80&&this.attrs.state.hasNext()?this.attrs.state.loadNext():this.element.scrollTop+this.element.clientHeight===this.element.scrollHeight&&this.attrs.state.hasPrev()?this.attrs.state.loadPrev():null))}scrollToBottom(){this.element.scrollTop=this.element.scrollHeight}whileMaintainingScroll(e){const s=this.element.scrollTop,t=this.element.scrollHeight,a=e();a instanceof Promise&&a.then((()=>{requestAnimationFrame((()=>{this.element.scrollTop=this.element.scrollHeight-t+s}))}))}markAsRead(){const e=Number(this.$(".MessageStream-item[data-id]").filter(((e,s)=>this.element.scrollHeight<=this.element.clientHeight||this.$().offset().top+this.element.clientHeight>$(s).offset().top)).last().data("id"));e&&o().session.user&&e>(this.attrs.dialog.lastReadMessageId()||0)&&!this.markingAsRead&&(this.markingAsRead=!0,this.attrs.dialog.save({lastReadMessageId:e}).finally((()=>{var e;this.markingAsRead=!1,0===this.attrs.dialog.unreadCount()&&o().session.user.pushAttributes({messageCount:(null!=(e=o().session.user.attribute("messageCount"))?e:1)-1}),m.redraw()})))}}flarum.reg.add("flarum-messages","forum/components/MessageStream",z);var J=t(521),K=t.n(J),Q=t(662),U=t.n(Q);class W extends(U()){constructor(e,s){void 0===s&&(s=1),super(e,s,null)}get type(){return"dialog-messages"}getAllItems(){return super.getAllItems()}}flarum.reg.add("flarum-messages","forum/states/MessageStreamState",W);var X=t(88),Y=t.n(X),Z=t(741),ee=t.n(Z),se=t(533),te=t.n(se),ae=t(653),re=t.n(ae),oe=t(819),ie=t.n(oe);class le extends(te()){className(){return"Modal--small Modal--flat DetailsModal"}title(){return o().translator.trans("flarum-messages.forum.dialog_section.details_modal.title")}content(){let e=(this.attrs.dialog.users()||[]).filter(Boolean);return m("div",{className:"Modal-body DetailsModal-infoGroups"},m("div",{className:"DetailsModal-recipients DetailsModal-info"},m("div",{className:"DetailsModal-info-title"},o().translator.trans("flarum-messages.forum.dialog_section.details_modal.recipients")),m("div",{className:"DetailsModal-recipients-list"},null==e?void 0:e.map((e=>m("div",{className:"DetailsModal-recipient"},m(C(),{user:e}),m(Y(),{href:o().route("user",{username:e.slug()})},m("span",{className:"DetailsModal-recipient-username"},K()(e))),m("div",{className:"badges"},ie()(e.badges().toArray()))))))),this.infoItems().toArray())}infoItems(){const e=new(T());return e.add("created",m("div",{className:"DetailsModal-createdAt DetailsModal-info"},m("div",{className:"DetailsModal-info-title"},o().translator.trans("flarum-messages.forum.dialog_section.details_modal.created_at")),m("div",{className:"DetailsModal-info-content"},re()(this.attrs.dialog.createdAt())))),e}}flarum.reg.add("flarum-messages","forum/components/DetailsModal",le);class ne extends(D()){constructor(){super(...arguments),(0,a.A)(this,"loading",!1),(0,a.A)(this,"messages",void 0)}oninit(e){super.oninit(e),this.messages=new W({filter:{dialog:this.attrs.dialog.id()},sort:"-createdAt"}),this.messages.refresh()}view(){const e=this.attrs.dialog.recipient();return m("div",{className:"DialogSection"},m("div",{className:"DialogSection-header"},m(C(),{user:e}),m("div",{className:"DialogSection-header-info"},e&&m(Y(),{href:o().route.user(e)},m("h2",null,K()(e)))||m("h2",null,K()(e)),m("div",{className:"badges"},ie()((null==e?void 0:e.badges().toArray())||[]))),m("div",{className:"DialogSection-header-actions"},this.actionItems().toArray())),m(z,{dialog:this.attrs.dialog,state:this.messages}))}actionItems(){const e=new(T());return e.add("details",m(ee(),{icon:"fas fa-ellipsis-h",className:"DialogSection-controls",buttonClassName:"Button Button--icon",accessibleToggleLabel:o().translator.trans("flarum-messages.forum.dialog_section.controls_toggle_label"),label:o().translator.trans("flarum-messages.forum.dialog_section.controls_toggle_label")},this.controlItems().toArray())),e}controlItems(){const e=new(T());return e.add("details",m(y(),{icon:"fas fa-info-circle",onclick:()=>o().modal.show(le,{dialog:this.attrs.dialog})},o().translator.trans("flarum-messages.forum.dialog_section.controls.details_button"))),e}}flarum.reg.add("flarum-messages","forum/components/DialogSection",ne);class me extends(l()){constructor(){super(...arguments),(0,a.A)(this,"selectedDialog",v()(null))}oninit(e){super.oninit(e),o().session.user?(o().current.set("noTagsList",!0),o().dialogs.hasItems()?this.initDialog():o().dialogs.refresh().then((async()=>{o().dialogs.hasItems()&&await this.initDialog()}))):m.route.set(o().route("index"))}dialogRequestParams(){return{include:"users.groups"}}async initDialog(){const e=m.route.param("id"),s=o().translator.trans("flarum-messages.forum.messages_page.title",{},!0);let t;t=e?o().store.getById("dialogs",e)||await o().store.find("dialogs",e,this.dialogRequestParams()):o().dialogs.getAllItems()[0],this.selectedDialog(t),t?(o().setTitle(t.title()),o().history.push("dialog",t.title())):(o().setTitle(s),o().history.push("messages",s)),m.redraw()}onupdate(e){super.onupdate(e);const s=this.element.querySelector(".DialogListItem.active"),t=this.element.querySelector(".DialogList");s&&$(t).offset().top+t.clientHeight<=$(s).offset().top&&s.scrollIntoView()}view(){return m(d(),{className:"MessagesPage Page--vertical",loading:!1,hero:this.hero.bind(this),sidebar:()=>m(I,null)},o().dialogs.isLoading()?m(p(),null):o().dialogs.hasItems()?m("div",{className:"MessagesPage-content"},m("div",{className:"MessagesPage-sidebar",key:"sidebar"},m("div",{className:"IndexPage-toolbar",key:"toolbar"},m("ul",{className:"IndexPage-toolbar-view"},ie()(this.viewItems().toArray())),m("ul",{className:"IndexPage-toolbar-action"},ie()(this.actionItems().toArray()))),m(g.A,{key:"list",state:o().dialogs,activeDialog:this.selectedDialog()})),this.selectedDialog()?m(ne,{key:"dialog",dialog:this.selectedDialog()}):m(p(),{key:"loading",display:"block"})):m(N(),{icon:"far fa-envelope-open"},o().translator.trans("flarum-messages.forum.messages_page.empty_text")))}hero(){return m("header",{className:"Hero MessagesPageHero"},m("div",{className:"container"},m("div",{className:"containerNarrow"},m("h1",{className:"Hero-title"},m(u(),{name:"fas fa-envelope"})," ",o().translator.trans("flarum-messages.forum.messages_page.hero.title")),m("div",{className:"Hero-subtitle"},o().translator.trans("flarum-messages.forum.messages_page.hero.subtitle")))))}viewItems(){var e;const s=new(T()),t=o().dialogs.sortMap(),a=Object.keys(t).reduce(((e,s)=>{const a=t[s];return e[s]="string"!=typeof a?a.label:o().translator.trans("flarum-messages.forum.index_sort.".concat(s,"_button")),e}),{});return s.add("sort",m(ee(),{buttonClassName:"Button",label:a[(null==(e=o().dialogs.getParams())?void 0:e.sort)||0]||Object.values(a)[0],accessibleToggleLabel:o().translator.trans("core.forum.index_sort.toggle_dropdown_accessible_label")},Object.keys(a).map((e=>{const s=a[e],r=(o().dialogs.getParams().sort||Object.keys(t)[0])===e;return m(y(),{icon:!r||"fas fa-check",onclick:()=>o().dialogs.changeSort(e),active:r},s)})))),s}actionItems(){const e=new(T());return e.add("refresh",m(y(),{title:o().translator.trans("flarum-messages.forum.messages_page.refresh_tooltip"),"aria-label":o().translator.trans("flarum-messages.forum.messages_page.refresh_tooltip"),icon:"fas fa-sync",className:"Button Button--icon",onclick:()=>{o().dialogs.refresh()}})),o().session.user&&e.add("markAllAsRead",m(y(),{title:o().translator.trans("flarum-messages.forum.messages_page.mark_all_as_read_tooltip"),"aria-label":o().translator.trans("flarum-messages.forum.messages_page.mark_all_as_read_tooltip"),icon:"fas fa-check",className:"Button Button--icon",onclick:()=>o().dialogs.markAllAsRead()})),e}}flarum.reg.add("flarum-messages","forum/components/MessagesPage",me)}}]); +"use strict";(self.webpackChunkmodule_exports=self.webpackChunkmodule_exports||[]).push([[301],{684:(e,s,t)=>{t.d(s,{A:()=>y});var a=t(488),r=t.n(a),o=t(950),i=t.n(o),l=t(336),n=t.n(l),d=t(443),c=t.n(d),u=t(88),g=t.n(u),h=t(917),p=t.n(h),f=t(521),v=t.n(f),b=t(167),N=t.n(b),_=t(906),M=t.n(_);class A extends(i()){view(e){var s;const t=this.attrs.dialog,a=t.recipient(),o=t.lastMessage();return m("li",{className:c()("DialogListItem",{"DialogListItem--unread":t.unreadCount(),active:this.attrs.active})},m(g(),{href:r().route.dialog(t),className:c()("DialogListItem-button",{active:this.attrs.active})},m("div",{className:"DialogListItem-avatar"},m(p(),{user:a}),!!t.unreadCount()&&m("div",{className:"Bubble Bubble--primary"},t.unreadCount())),m("div",{className:"DialogListItem-content"},m("div",{className:"DialogListItem-title"},v()(a),N()(t.lastMessageAt()),this.attrs.actions&&m("div",{className:"DialogListItem-actions"},this.actionItems().toArray())),m("div",{className:"DialogListItem-lastMessage"},o?null==(s=o.contentPlain())?void 0:s.slice(0,80):""))))}actionItems(){const e=new(M());return e.add("markAsRead",m(n(),{className:"Notification-action Button Button--link",icon:"fas fa-check","aria-label":r().translator.trans("flarum-messages.forum.dialog_list.mark_as_read_tooltip"),onclick:e=>{var s;e.preventDefault(),e.stopPropagation(),this.attrs.dialog.save({lastReadMessageId:(null==(s=this.attrs.dialog.data.relationships)?void 0:s.lastMessage.data).id}).finally((()=>{var e;0===this.attrs.dialog.unreadCount()&&r().session.user.pushAttributes({messageCount:(null!=(e=r().session.user.attribute("messageCount"))?e:1)-1}),m.redraw()}))}}),100),e}}flarum.reg.add("flarum-messages","forum/components/DialogListItem",A);class y extends(i()){oninit(e){super.oninit(e)}oncreate(e){super.oncreate(e)}onupdate(e){super.onupdate(e)}view(){return m("div",{className:"DialogList"},m("ul",{className:"DialogList-list"},this.attrs.state.getAllItems().map((e=>{var s;return m(A,{dialog:e,active:(null==(s=this.attrs.activeDialog)?void 0:s.id())===e.id(),actions:this.attrs.itemActions})}))),this.attrs.state.hasNext()&&!this.attrs.hideMore&&m("div",{className:"DialogList-loadMore"},m(n(),{className:"Button",onclick:this.attrs.state.loadNext.bind(this.attrs.state)},r().translator.trans("flarum-messages.forum.dialog_list.load_more_button"))))}}flarum.reg.add("flarum-messages","forum/components/DialogList",y)},654:(e,s,t)=>{t.r(s),t.d(s,{default:()=>me});var a=t(805),r=t(488),o=t.n(r),i=t(859),l=t.n(i),n=t(314),d=t.n(n),c=t(801),u=t.n(c),g=t(684),h=t(661),p=t.n(h),f=t(821),v=t.n(f),b=t(500),N=t.n(b),_=t(402),M=t.n(_),A=t(336),y=t.n(A);class I extends(M()){static initAttrs(e){e.className="MessagesPage-nav"}items(){const e=super.items(),s=o().session.user.attribute("canSendAnyMessage");return e.remove("newDiscussion"),e.add("newMessage",m(y(),{icon:"fas fa-edit",className:"Button Button--primary IndexPage-newDiscussion MessagesPage-newMessage",itemClassName:"App-primaryControl",onclick:()=>this.newMessageAction(),disabled:!s},o().translator.trans("flarum-messages.forum.messages_page.new_message_button")),10),e}newMessageAction(){return flarum.reg.asyncModuleImport("flarum/forum/components/ComposerBody").then((()=>(o().composer.load((()=>t.e(451).then(t.bind(t,761))),{user:o().session.user,onsubmit:()=>{o().dialogs.refresh()}}).then((()=>o().composer.show())),o().composer)))}}flarum.reg.add("flarum-messages","forum/components/MessagesSidebar",I);var k=t(950),D=t.n(k),w=t(476),P=t.n(w),S=t(906),T=t.n(S),B=t(154),L=t.n(B),x=t(917),C=t.n(x),R=t(3),H=t.n(R),j=t(651),q=t.n(j),G=t(301),O=t.n(G),E=t(443),F=t.n(E);class V extends(L()){oninit(e){super.oninit(e)}user(){return this.attrs.message.user()}controls(){return[]}freshness(){return this.attrs.message.freshness}createdByStarter(){return!1}onbeforeupdate(e){return super.onbeforeupdate(e)}onupdate(e){super.onupdate(e)}elementAttrs(){const e=this.attrs.message,s=super.elementAttrs();return s.className=F()(s.className||null,"Message",{"Post--renderFailed":e.renderFailed(),revealContent:!1,editing:!1}),s}header(){return super.header()}content(){return super.content().concat([m(H(),{headerItems:this.headerItems(),cardVisible:!1,isEditing:!1,isHidden:!1,contentHtml:this.attrs.message.contentHtml(),user:this.attrs.message.user()})])}classes(e){return super.classes(e)}actionItems(){return super.actionItems()}footerItems(){return super.footerItems()}sideItems(){return super.sideItems()}avatar(){return this.attrs.message.user()?m(C(),{user:this.attrs.message.user()}):""}headerItems(){const e=new(T()),s=this.attrs.message;return e.add("user",m(q(),{post:s}),100),e.add("meta",m(O(),{post:s})),e}}flarum.reg.add("flarum-messages","forum/components/Message",V);class z extends(D()){constructor(){super(...arguments),(0,a.A)(this,"replyPlaceholderComponent",v()(null)),(0,a.A)(this,"loadingPostComponent",v()(null)),(0,a.A)(this,"scrollListener",void 0),(0,a.A)(this,"initialToBottomScroll",!1),(0,a.A)(this,"lastTime",null),(0,a.A)(this,"checkedRead",!1),(0,a.A)(this,"markingAsRead",!1)}oninit(e){super.oninit(e),Promise.all([flarum.reg.asyncModuleImport("flarum/forum/components/ReplyPlaceholder"),flarum.reg.asyncModuleImport("flarum/forum/components/LoadingPost")]).then((e=>{let[s,t]=e;this.replyPlaceholderComponent(s.default),this.loadingPostComponent(t.default)}))}oncreate(e){super.oncreate(e),this.scrollListener=new(P())(this.onscroll.bind(this),this.element),setTimeout((()=>{this.scrollListener.start(),this.element.addEventListener("scrollend",this.markAsRead.bind(this))}))}onupdate(e){super.onupdate(e),this.initialToBottomScroll||this.attrs.state.isLoading()||(this.scrollToBottom(),this.initialToBottomScroll=!0),this.initialToBottomScroll&&!this.checkedRead&&(this.markAsRead(),this.checkedRead=!0)}onremove(e){super.onremove(e),this.scrollListener.stop()}view(){return m("div",{className:"MessageStream"},this.attrs.state.isLoading()?m(p(),null):this.content())}content(){var e;const s=[],a=this.attrs.state.getAllItems().sort(((e,s)=>e.createdAt().getTime()-s.createdAt().getTime())),r=this.replyPlaceholderComponent(),i=this.loadingPostComponent();return a[0].id()!==(null==(e=this.attrs.dialog.data.relationships)?void 0:e.firstMessage.data).id&&(s.push(m("div",{className:"MessageStream-item",key:"loadPrevious"},m(y(),{onclick:()=>this.whileMaintainingScroll((()=>this.attrs.state.loadNext())),type:"button",className:"Button Button--block MessageStream-loadPrev"},o().translator.trans("flarum-messages.forum.messages_page.stream.load_previous_button")))),i&&s.push(m("div",{className:"MessageStream-item",key:"loading-prev"},m(i,null)))),a.forEach(((e,t)=>s.push(this.messageItem(e,t)))),r&&s.push(m("div",{className:"MessageStream-item",key:"reply"},m(r,{discussion:this.attrs.dialog,onclick:()=>{flarum.reg.asyncModuleImport("flarum/forum/components/ComposerBody").then((()=>{o().composer.load((()=>t.e(451).then(t.bind(t,761))),{user:o().session.user,replyingTo:this.attrs.dialog,onsubmit:()=>{this.attrs.state.refresh().then((()=>setTimeout((()=>this.scrollToBottom()),50)))}}).then((()=>o().composer.show()))}))},composingReply:()=>o().composer.composingMessageTo(this.attrs.dialog)}))),s}messageItem(e,s){return m("div",{className:"MessageStream-item",key:s,"data-id":e.id()},this.timeGap(e),m(V,{message:e}))}timeGap(e){var s;if(e.id()===(null==(s=this.attrs.dialog.data.relationships)?void 0:s.firstMessage.data).id)return this.lastTime=e.createdAt(),m("div",{class:"PostStream-timeGap"},m("span",null,o().translator.trans("flarum-messages.forum.messages_page.stream.start_of_the_conversation")));const t=this.lastTime,a=e.createdAt().getTime()-((null==t?void 0:t.getTime())||0);return this.lastTime=e.createdAt(),t&&a>3456e5?m("div",{className:"PostStream-timeGap"},m("span",null,o().translator.trans("flarum-messages.forum.messages_page.stream.time_lapsed_text",{period:dayjs().add(a,"ms").fromNow(!0)}))):null}onscroll(){this.whileMaintainingScroll((()=>this.element.scrollTop<=80&&this.attrs.state.hasNext()?this.attrs.state.loadNext():this.element.scrollTop+this.element.clientHeight===this.element.scrollHeight&&this.attrs.state.hasPrev()?this.attrs.state.loadPrev():null))}scrollToBottom(){this.element.scrollTop=this.element.scrollHeight}whileMaintainingScroll(e){const s=this.element.scrollTop,t=this.element.scrollHeight,a=e();a instanceof Promise&&a.then((()=>{requestAnimationFrame((()=>{this.element.scrollTop=this.element.scrollHeight-t+s}))}))}markAsRead(){const e=Number(this.$(".MessageStream-item[data-id]").filter(((e,s)=>this.element.scrollHeight<=this.element.clientHeight||this.$().offset().top+this.element.clientHeight>$(s).offset().top)).last().data("id"));e&&o().session.user&&e>(this.attrs.dialog.lastReadMessageId()||0)&&!this.markingAsRead&&(this.markingAsRead=!0,this.attrs.dialog.save({lastReadMessageId:e}).finally((()=>{var e;this.markingAsRead=!1,0===this.attrs.dialog.unreadCount()&&o().session.user.pushAttributes({messageCount:(null!=(e=o().session.user.attribute("messageCount"))?e:1)-1}),m.redraw()})))}}flarum.reg.add("flarum-messages","forum/components/MessageStream",z);var J=t(521),K=t.n(J),Q=t(662),U=t.n(Q);class W extends(U()){constructor(e,s){void 0===s&&(s=1),super(e,s,null)}get type(){return"dialog-messages"}getAllItems(){return super.getAllItems()}}flarum.reg.add("flarum-messages","forum/states/MessageStreamState",W);var X=t(88),Y=t.n(X),Z=t(741),ee=t.n(Z),se=t(533),te=t.n(se),ae=t(653),re=t.n(ae),oe=t(819),ie=t.n(oe);class le extends(te()){className(){return"Modal--small Modal--flat DetailsModal"}title(){return o().translator.trans("flarum-messages.forum.dialog_section.details_modal.title")}content(){let e=(this.attrs.dialog.users()||[]).filter(Boolean);return m("div",{className:"Modal-body DetailsModal-infoGroups"},m("div",{className:"DetailsModal-recipients DetailsModal-info"},m("div",{className:"DetailsModal-info-title"},o().translator.trans("flarum-messages.forum.dialog_section.details_modal.recipients")),m("div",{className:"DetailsModal-recipients-list"},null==e?void 0:e.map((e=>m("div",{className:"DetailsModal-recipient"},m(C(),{user:e}),m(Y(),{href:o().route("user",{username:e.slug()})},m("span",{className:"DetailsModal-recipient-username"},K()(e))),m("div",{className:"badges"},ie()(e.badges().toArray()))))))),this.infoItems().toArray())}infoItems(){const e=new(T());return e.add("created",m("div",{className:"DetailsModal-createdAt DetailsModal-info"},m("div",{className:"DetailsModal-info-title"},o().translator.trans("flarum-messages.forum.dialog_section.details_modal.created_at")),m("div",{className:"DetailsModal-info-content"},re()(this.attrs.dialog.createdAt())))),e}}flarum.reg.add("flarum-messages","forum/components/DetailsModal",le);class ne extends(D()){constructor(){super(...arguments),(0,a.A)(this,"loading",!1),(0,a.A)(this,"messages",void 0)}oninit(e){super.oninit(e),this.messages=new W({filter:{dialog:this.attrs.dialog.id()},sort:"-createdAt"}),this.messages.refresh()}view(){const e=this.attrs.dialog.recipient();return m("div",{className:"DialogSection"},m("div",{className:"DialogSection-header"},m(C(),{user:e}),m("div",{className:"DialogSection-header-info"},e&&m(Y(),{href:o().route.user(e)},m("h2",null,K()(e)))||m("h2",null,K()(e)),m("div",{className:"badges"},ie()((null==e?void 0:e.badges().toArray())||[]))),m("div",{className:"DialogSection-header-actions"},this.actionItems().toArray())),m(z,{dialog:this.attrs.dialog,state:this.messages}))}actionItems(){const e=new(T());return e.add("details",m(ee(),{icon:"fas fa-ellipsis-h",className:"DialogSection-controls",buttonClassName:"Button Button--icon",accessibleToggleLabel:o().translator.trans("flarum-messages.forum.dialog_section.controls_toggle_label"),label:o().translator.trans("flarum-messages.forum.dialog_section.controls_toggle_label")},this.controlItems().toArray())),e}controlItems(){const e=new(T());return e.add("details",m(y(),{icon:"fas fa-info-circle",onclick:()=>o().modal.show(le,{dialog:this.attrs.dialog})},o().translator.trans("flarum-messages.forum.dialog_section.controls.details_button"))),e}}flarum.reg.add("flarum-messages","forum/components/DialogSection",ne);class me extends(l()){constructor(){super(...arguments),(0,a.A)(this,"selectedDialog",v()(null))}oninit(e){super.oninit(e),o().session.user?(o().current.set("noTagsList",!0),o().dialogs.hasItems()?this.initDialog():o().dialogs.refresh().then((async()=>{o().dialogs.hasItems()&&await this.initDialog()}))):m.route.set(o().route("index"))}dialogRequestParams(){return{include:"users.groups"}}async initDialog(){const e=m.route.param("id"),s=o().translator.trans("flarum-messages.forum.messages_page.title",{},!0);let t;t=e?o().store.getById("dialogs",e)||await o().store.find("dialogs",e,this.dialogRequestParams()):o().dialogs.getAllItems()[0],this.selectedDialog(t),t?(o().setTitle(t.title()),o().history.push("dialog",t.title())):(o().setTitle(s),o().history.push("messages",s)),m.redraw()}onupdate(e){super.onupdate(e);const s=this.element.querySelector(".DialogListItem.active"),t=this.element.querySelector(".DialogList");s&&$(t).offset().top+t.clientHeight<=$(s).offset().top&&s.scrollIntoView()}view(){return m(d(),{className:"MessagesPage Page--vertical",loading:!1,hero:this.hero.bind(this),sidebar:()=>m(I,null)},o().dialogs.isLoading()?m(p(),null):o().dialogs.hasItems()?m("div",{className:"MessagesPage-content"},m("div",{className:"MessagesPage-sidebar",key:"sidebar"},m("div",{className:"IndexPage-toolbar",key:"toolbar"},m("ul",{className:"IndexPage-toolbar-view"},ie()(this.viewItems().toArray())),m("ul",{className:"IndexPage-toolbar-action"},ie()(this.actionItems().toArray()))),m(g.A,{key:"list",state:o().dialogs,activeDialog:this.selectedDialog()})),this.selectedDialog()?m(ne,{key:"dialog",dialog:this.selectedDialog()}):m(p(),{key:"loading",display:"block"})):m(N(),{icon:"far fa-envelope-open"},o().translator.trans("flarum-messages.forum.messages_page.empty_text")))}hero(){return m("header",{className:"Hero MessagesPageHero"},m("div",{className:"container"},m("div",{className:"containerNarrow"},m("h1",{className:"Hero-title"},m(u(),{name:"fas fa-envelope"})," ",o().translator.trans("flarum-messages.forum.messages_page.hero.title")),m("div",{className:"Hero-subtitle"},o().translator.trans("flarum-messages.forum.messages_page.hero.subtitle")))))}viewItems(){var e;const s=new(T()),t=o().dialogs.sortMap(),a=Object.keys(t).reduce(((e,s)=>{const a=t[s];return e[s]="string"!=typeof a?a.label:o().translator.trans("flarum-messages.forum.index_sort.".concat(s,"_button")),e}),{});return s.add("sort",m(ee(),{buttonClassName:"Button",label:a[(null==(e=o().dialogs.getParams())?void 0:e.sort)||0]||Object.values(a)[0],accessibleToggleLabel:o().translator.trans("core.forum.index_sort.toggle_dropdown_accessible_label")},Object.keys(a).map((e=>{const s=a[e],r=(o().dialogs.getParams().sort||Object.keys(t)[0])===e;return m(y(),{icon:!r||"fas fa-check",onclick:()=>o().dialogs.changeSort(e),active:r},s)})))),s}actionItems(){const e=new(T());return e.add("refresh",m(y(),{title:o().translator.trans("flarum-messages.forum.messages_page.refresh_tooltip"),"aria-label":o().translator.trans("flarum-messages.forum.messages_page.refresh_tooltip"),icon:"fas fa-sync",className:"Button Button--icon",onclick:()=>{o().dialogs.refresh()}})),o().session.user&&e.add("markAllAsRead",m(y(),{title:o().translator.trans("flarum-messages.forum.messages_page.mark_all_as_read_tooltip"),"aria-label":o().translator.trans("flarum-messages.forum.messages_page.mark_all_as_read_tooltip"),icon:"fas fa-check",className:"Button Button--icon",onclick:()=>o().dialogs.markAllAsRead()})),e}}flarum.reg.add("flarum-messages","forum/components/MessagesPage",me)}}]); //# sourceMappingURL=MessagesPage.js.map \ No newline at end of file diff --git a/extensions/messages/js/dist/forum/components/MessagesPage.js.map b/extensions/messages/js/dist/forum/components/MessagesPage.js.map index 44f6530e9..683ce97cb 100644 --- a/extensions/messages/js/dist/forum/components/MessagesPage.js.map +++ b/extensions/messages/js/dist/forum/components/MessagesPage.js.map @@ -1 +1 @@ -{"version":3,"file":"forum/components/MessagesPage.js","mappings":"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","sources":["webpack://@flarum/messages/./src/forum/components/DialogListItem.tsx","webpack://@flarum/messages/./src/forum/components/DialogList.tsx","webpack://@flarum/messages/./src/forum/components/MessagesSidebar.tsx","webpack://@flarum/messages/./src/forum/components/Message.tsx","webpack://@flarum/messages/./src/forum/components/MessageStream.tsx","webpack://@flarum/messages/./src/forum/states/MessageStreamState.ts","webpack://@flarum/messages/./src/forum/components/DetailsModal.tsx","webpack://@flarum/messages/./src/forum/components/DialogSection.tsx","webpack://@flarum/messages/./src/forum/components/MessagesPage.tsx"],"sourcesContent":["import Component from 'flarum/common/Component';\nimport classList from 'flarum/common/utils/classList';\nimport Link from 'flarum/common/components/Link';\nimport app from 'flarum/forum/app';\nimport Avatar from 'flarum/common/components/Avatar';\nimport username from 'flarum/common/helpers/username';\nimport humanTime from 'flarum/common/helpers/humanTime';\nimport ItemList from 'flarum/common/utils/ItemList';\nimport Button from 'flarum/common/components/Button';\nexport default class DialogListItem extends Component {\n view(vnode) {\n var _lastMessage$contentP;\n const dialog = this.attrs.dialog;\n const recipient = dialog.recipient();\n const lastMessage = dialog.lastMessage();\n return m(\"li\", {\n className: classList('DialogListItem', {\n 'DialogListItem--unread': dialog.unreadCount(),\n active: this.attrs.active\n })\n }, m(Link, {\n href: app.route.dialog(dialog),\n className: classList('DialogListItem-button', {\n active: this.attrs.active\n })\n }, m(\"div\", {\n className: \"DialogListItem-avatar\"\n }, m(Avatar, {\n user: recipient\n }), !!dialog.unreadCount() && m(\"div\", {\n className: \"Bubble Bubble--primary\"\n }, dialog.unreadCount())), m(\"div\", {\n className: \"DialogListItem-content\"\n }, m(\"div\", {\n className: \"DialogListItem-title\"\n }, username(recipient), humanTime(dialog.lastMessageAt()), this.attrs.actions && m(\"div\", {\n className: \"DialogListItem-actions\"\n }, this.actionItems().toArray())), m(\"div\", {\n className: \"DialogListItem-lastMessage\"\n }, lastMessage ? (_lastMessage$contentP = lastMessage.contentPlain()) == null ? void 0 : _lastMessage$contentP.slice(0, 80) : ''))));\n }\n actionItems() {\n const items = new ItemList();\n items.add('markAsRead', m(Button, {\n className: \"Notification-action Button Button--link\",\n icon: \"fas fa-check\",\n \"aria-label\": app.translator.trans('flarum-messages.forum.dialog_list.mark_as_read_tooltip'),\n onclick: e => {\n var _this$attrs$dialog$da;\n e.preventDefault();\n e.stopPropagation();\n this.attrs.dialog.save({\n lastReadMessageId: ((_this$attrs$dialog$da = this.attrs.dialog.data.relationships) == null ? void 0 : _this$attrs$dialog$da.lastMessage.data).id\n }).finally(() => {\n if (this.attrs.dialog.unreadCount() === 0) {\n var _attribute;\n app.session.user.pushAttributes({\n messageCount: ((_attribute = app.session.user.attribute('messageCount')) != null ? _attribute : 1) - 1\n });\n }\n m.redraw();\n });\n }\n }), 100);\n return items;\n }\n}\nflarum.reg.add('flarum-messages', 'forum/components/DialogListItem', DialogListItem);","import app from 'flarum/forum/app';\nimport Component from 'flarum/common/Component';\nimport Button from 'flarum/common/components/Button';\nimport DialogListItem from './DialogListItem';\nexport default class DialogList extends Component {\n oninit(vnode) {\n super.oninit(vnode);\n }\n oncreate(vnode) {\n super.oncreate(vnode);\n }\n onupdate(vnode) {\n super.onupdate(vnode);\n }\n view() {\n return m(\"div\", {\n className: \"DialogList\"\n }, m(\"ul\", {\n className: \"DialogList-list\"\n }, this.attrs.state.getAllItems().map(dialog => {\n var _this$attrs$activeDia;\n return m(DialogListItem, {\n dialog: dialog,\n active: ((_this$attrs$activeDia = this.attrs.activeDialog) == null ? void 0 : _this$attrs$activeDia.id()) === dialog.id(),\n actions: this.attrs.itemActions\n });\n })), this.attrs.state.hasNext() && !this.attrs.hideMore && m(\"div\", {\n className: \"DialogList-loadMore\"\n }, m(Button, {\n className: \"Button\",\n onclick: this.attrs.state.loadNext.bind(this.attrs.state)\n }, app.translator.trans('flarum-messages.forum.dialog_list.load_more_button'))));\n }\n}\nflarum.reg.add('flarum-messages', 'forum/components/DialogList', DialogList);","import app from 'flarum/forum/app';\nimport IndexSidebar from 'flarum/forum/components/IndexSidebar';\nimport Button from 'flarum/common/components/Button';\nexport default class MessagesSidebar extends IndexSidebar {\n static initAttrs(attrs) {\n attrs.className = 'MessagesPage-nav';\n }\n items() {\n const items = super.items();\n const canSendAnyMessage = app.session.user.attribute('canSendAnyMessage');\n items.remove('newDiscussion');\n items.add('newMessage', m(Button, {\n icon: \"fas fa-edit\",\n className: \"Button Button--primary IndexPage-newDiscussion MessagesPage-newMessage\",\n itemClassName: \"App-primaryControl\",\n onclick: () => {\n return this.newMessageAction();\n },\n disabled: !canSendAnyMessage\n }, app.translator.trans('flarum-messages.forum.messages_page.new_message_button')), 10);\n return items;\n }\n\n /**\n * Open the composer for a new message.\n */\n newMessageAction() {\n return flarum.reg.asyncModuleImport('flarum/forum/components/ComposerBody').then(() => {\n app.composer.load(() => import(/* webpackChunkName: 'forum/components/MessageComposer', webpackMode: 'lazy-once' */ './MessageComposer'), {\n user: app.session.user,\n onsubmit: () => {\n app.dialogs.refresh();\n }\n }).then(() => app.composer.show());\n return app.composer;\n });\n }\n}\nflarum.reg.add('flarum-messages', 'forum/components/MessagesSidebar', MessagesSidebar);","import ItemList from 'flarum/common/utils/ItemList';\nimport AbstractPost from 'flarum/forum/components/AbstractPost';\nimport Avatar from 'flarum/common/components/Avatar';\nimport Comment from 'flarum/forum/components/Comment';\nimport PostUser from 'flarum/forum/components/PostUser';\nimport PostMeta from 'flarum/forum/components/PostMeta';\nimport classList from 'flarum/common/utils/classList';\n/**\n * The `Post` component displays a single post. The basic post template just\n * includes a controls dropdown; subclasses must implement `content` and `attrs`\n * methods.\n */\nexport default class Message extends AbstractPost {\n oninit(vnode) {\n super.oninit(vnode);\n }\n user() {\n return this.attrs.message.user();\n }\n controls() {\n return [];\n }\n freshness() {\n return this.attrs.message.freshness;\n }\n createdByStarter() {\n return false;\n }\n onbeforeupdate(vnode) {\n return super.onbeforeupdate(vnode);\n }\n onupdate(vnode) {\n super.onupdate(vnode);\n }\n elementAttrs() {\n const message = this.attrs.message;\n const attrs = super.elementAttrs();\n attrs.className = classList(attrs.className || null, 'Message', {\n 'Post--renderFailed': message.renderFailed(),\n revealContent: false,\n editing: false\n });\n return attrs;\n }\n header() {\n return super.header();\n }\n content() {\n return super.content().concat([m(Comment, {\n headerItems: this.headerItems(),\n cardVisible: false,\n isEditing: false,\n isHidden: false,\n contentHtml: this.attrs.message.contentHtml(),\n user: this.attrs.message.user()\n })]);\n }\n classes(existing) {\n return super.classes(existing);\n }\n actionItems() {\n return super.actionItems();\n }\n footerItems() {\n return super.footerItems();\n }\n sideItems() {\n return super.sideItems();\n }\n avatar() {\n return this.attrs.message.user() ? m(Avatar, {\n user: this.attrs.message.user()\n }) : '';\n }\n headerItems() {\n const items = new ItemList();\n const message = this.attrs.message;\n items.add('user', m(PostUser, {\n post: message\n }), 100);\n items.add('meta', m(PostMeta, {\n post: message\n }));\n return items;\n }\n}\nflarum.reg.add('flarum-messages', 'forum/components/Message', Message);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/forum/app';\nimport Component from 'flarum/common/Component';\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\nimport Stream from 'flarum/common/utils/Stream';\nimport Button from 'flarum/common/components/Button';\nimport ScrollListener from 'flarum/common/utils/ScrollListener';\nimport Message from './Message';\nexport default class MessageStream extends Component {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"replyPlaceholderComponent\", Stream(null));\n _defineProperty(this, \"loadingPostComponent\", Stream(null));\n _defineProperty(this, \"scrollListener\", void 0);\n _defineProperty(this, \"initialToBottomScroll\", false);\n _defineProperty(this, \"lastTime\", null);\n _defineProperty(this, \"checkedRead\", false);\n _defineProperty(this, \"markingAsRead\", false);\n }\n oninit(vnode) {\n super.oninit(vnode);\n\n // We need the lazy ReplyPlaceholder and LoadingPost components to be loaded.\n Promise.all([flarum.reg.asyncModuleImport('flarum/forum/components/ReplyPlaceholder'), flarum.reg.asyncModuleImport('flarum/forum/components/LoadingPost')]).then(_ref => {\n let [ReplyPlaceholder, LoadingPost] = _ref;\n this.replyPlaceholderComponent(ReplyPlaceholder.default);\n this.loadingPostComponent(LoadingPost.default);\n });\n }\n oncreate(vnode) {\n super.oncreate(vnode);\n this.scrollListener = new ScrollListener(this.onscroll.bind(this), this.element);\n setTimeout(() => {\n this.scrollListener.start();\n this.element.addEventListener('scrollend', this.markAsRead.bind(this));\n });\n }\n onupdate(vnode) {\n super.onupdate(vnode);\n\n // @todo: for future versions, consider using the post stream scrubber to scroll through the messages. (big task..)\n // @todo: introduce read status, to jump to the first unread message instead.\n if (!this.initialToBottomScroll && !this.attrs.state.isLoading()) {\n this.scrollToBottom();\n this.initialToBottomScroll = true;\n }\n if (this.initialToBottomScroll && !this.checkedRead) {\n this.markAsRead();\n this.checkedRead = true;\n }\n }\n onremove(vnode) {\n super.onremove(vnode);\n this.scrollListener.stop();\n }\n view() {\n return m(\"div\", {\n className: \"MessageStream\"\n }, this.attrs.state.isLoading() ? m(LoadingIndicator, null) : this.content());\n }\n content() {\n var _this$attrs$dialog$da;\n const items = [];\n const messages = this.attrs.state.getAllItems().sort((a, b) => a.createdAt().getTime() - b.createdAt().getTime());\n const ReplyPlaceholder = this.replyPlaceholderComponent();\n const LoadingPost = this.loadingPostComponent();\n if (messages[0].id() !== ((_this$attrs$dialog$da = this.attrs.dialog.data.relationships) == null ? void 0 : _this$attrs$dialog$da.firstMessage.data).id) {\n items.push(m(\"div\", {\n className: \"MessageStream-item\",\n key: \"loadPrevious\"\n }, m(Button, {\n onclick: () => this.whileMaintainingScroll(() => this.attrs.state.loadNext()),\n type: \"button\",\n className: \"Button Button--block MessageStream-loadPrev\"\n }, app.translator.trans('flarum-messages.forum.messages_page.stream.load_previous_button'))));\n if (LoadingPost) {\n items.push(m(\"div\", {\n className: \"MessageStream-item\",\n key: \"loading-prev\"\n }, m(LoadingPost, null)));\n }\n }\n messages.forEach((message, index) => items.push(this.messageItem(message, index)));\n if (ReplyPlaceholder) {\n items.push(m(\"div\", {\n className: \"MessageStream-item\",\n key: \"reply\" /*data-index={this.attrs.state.count()}*/\n }, m(ReplyPlaceholder, {\n discussion: this.attrs.dialog,\n onclick: () => {\n flarum.reg.asyncModuleImport('flarum/forum/components/ComposerBody').then(() => {\n app.composer.load(() => import(/* webpackChunkName: 'forum/components/MessageComposer', webpackMode: 'lazy-once' */ './MessageComposer'), {\n user: app.session.user,\n replyingTo: this.attrs.dialog,\n onsubmit: message => {\n this.attrs.state.push(message);\n setTimeout(() => this.scrollToBottom(), 50);\n }\n }).then(() => app.composer.show());\n });\n },\n composingReply: () => app.composer.composingMessageTo(this.attrs.dialog)\n })));\n }\n return items;\n }\n messageItem(message, index) {\n return m(\"div\", {\n className: \"MessageStream-item\",\n key: index,\n \"data-id\": message.id()\n }, this.timeGap(message), m(Message, {\n message: message\n }));\n }\n timeGap(message) {\n var _this$attrs$dialog$da2;\n if (message.id() === ((_this$attrs$dialog$da2 = this.attrs.dialog.data.relationships) == null ? void 0 : _this$attrs$dialog$da2.firstMessage.data).id) {\n this.lastTime = message.createdAt();\n return m(\"div\", {\n class: \"PostStream-timeGap\"\n }, m(\"span\", null, app.translator.trans('flarum-messages.forum.messages_page.stream.start_of_the_conversation')));\n }\n const lastTime = this.lastTime;\n const dt = message.createdAt().getTime() - ((lastTime == null ? void 0 : lastTime.getTime()) || 0);\n this.lastTime = message.createdAt();\n if (lastTime && dt > 1000 * 60 * 60 * 24 * 4) {\n return m(\"div\", {\n className: \"PostStream-timeGap\"\n }, m(\"span\", null, app.translator.trans('flarum-messages.forum.messages_page.stream.time_lapsed_text', {\n period: dayjs().add(dt, 'ms').fromNow(true)\n })));\n }\n return null;\n }\n onscroll() {\n this.whileMaintainingScroll(() => {\n if (this.element.scrollTop <= 80 && this.attrs.state.hasNext()) {\n return this.attrs.state.loadNext();\n }\n if (this.element.scrollTop + this.element.clientHeight === this.element.scrollHeight && this.attrs.state.hasPrev()) {\n return this.attrs.state.loadPrev();\n }\n return null;\n });\n }\n scrollToBottom() {\n this.element.scrollTop = this.element.scrollHeight;\n }\n whileMaintainingScroll(callback) {\n const scrollTop = this.element.scrollTop;\n const scrollHeight = this.element.scrollHeight;\n const result = callback();\n if (result instanceof Promise) {\n result.then(() => {\n requestAnimationFrame(() => {\n this.element.scrollTop = this.element.scrollHeight - scrollHeight + scrollTop;\n });\n });\n }\n }\n markAsRead() {\n const lastVisibleId = Number(this.$('.MessageStream-item[data-id]').filter((_, $el) => {\n if (this.element.scrollHeight <= this.element.clientHeight) {\n return true;\n }\n return this.$().offset().top + this.element.clientHeight > $($el).offset().top;\n }).last().data('id'));\n if (lastVisibleId && app.session.user && lastVisibleId > (this.attrs.dialog.lastReadMessageId() || 0) && !this.markingAsRead) {\n this.markingAsRead = true;\n this.attrs.dialog.save({\n lastReadMessageId: lastVisibleId\n }).finally(() => {\n this.markingAsRead = false;\n if (this.attrs.dialog.unreadCount() === 0) {\n var _attribute;\n app.session.user.pushAttributes({\n messageCount: ((_attribute = app.session.user.attribute('messageCount')) != null ? _attribute : 1) - 1\n });\n }\n m.redraw();\n });\n }\n }\n}\nflarum.reg.add('flarum-messages', 'forum/components/MessageStream', MessageStream);","import PaginatedListState from 'flarum/common/states/PaginatedListState';\nexport default class MessageStreamState extends PaginatedListState {\n constructor(params, page) {\n if (page === void 0) {\n page = 1;\n }\n super(params, page, null);\n }\n get type() {\n return 'dialog-messages';\n }\n getAllItems() {\n return super.getAllItems();\n }\n}\nflarum.reg.add('flarum-messages', 'forum/states/MessageStreamState', MessageStreamState);","import app from 'flarum/forum/app';\nimport Modal from 'flarum/common/components/Modal';\nimport ItemList from 'flarum/common/utils/ItemList';\nimport Avatar from 'flarum/common/components/Avatar';\nimport fullTime from 'flarum/common/helpers/fullTime';\nimport username from 'flarum/common/helpers/username';\nimport Link from 'flarum/common/components/Link';\nimport listItems from 'flarum/common/helpers/listItems';\nexport default class DetailsModal extends Modal {\n className() {\n return 'Modal--small Modal--flat DetailsModal';\n }\n title() {\n return app.translator.trans('flarum-messages.forum.dialog_section.details_modal.title');\n }\n content() {\n let recipients = (this.attrs.dialog.users() || []).filter(Boolean);\n return m(\"div\", {\n className: \"Modal-body DetailsModal-infoGroups\"\n }, m(\"div\", {\n className: \"DetailsModal-recipients DetailsModal-info\"\n }, m(\"div\", {\n className: \"DetailsModal-info-title\"\n }, app.translator.trans('flarum-messages.forum.dialog_section.details_modal.recipients')), m(\"div\", {\n className: \"DetailsModal-recipients-list\"\n }, recipients == null ? void 0 : recipients.map(recipient => {\n return m(\"div\", {\n className: \"DetailsModal-recipient\"\n }, m(Avatar, {\n user: recipient\n }), m(Link, {\n href: app.route('user', {\n username: recipient.slug()\n })\n }, m(\"span\", {\n className: \"DetailsModal-recipient-username\"\n }, username(recipient))), m(\"div\", {\n className: \"badges\"\n }, listItems(recipient.badges().toArray())));\n }))), this.infoItems().toArray());\n }\n infoItems() {\n const items = new ItemList();\n items.add('created', m(\"div\", {\n className: \"DetailsModal-createdAt DetailsModal-info\"\n }, m(\"div\", {\n className: \"DetailsModal-info-title\"\n }, app.translator.trans('flarum-messages.forum.dialog_section.details_modal.created_at')), m(\"div\", {\n className: \"DetailsModal-info-content\"\n }, fullTime(this.attrs.dialog.createdAt()))));\n return items;\n }\n}\nflarum.reg.add('flarum-messages', 'forum/components/DetailsModal', DetailsModal);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport Component from 'flarum/common/Component';\nimport MessageStream from './MessageStream';\nimport username from 'flarum/common/helpers/username';\nimport MessageStreamState from '../states/MessageStreamState';\nimport Avatar from 'flarum/common/components/Avatar';\nimport Link from 'flarum/common/components/Link';\nimport app from 'flarum/forum/app';\nimport ItemList from 'flarum/common/utils/ItemList';\nimport Button from 'flarum/common/components/Button';\nimport Dropdown from 'flarum/common/components/Dropdown';\nimport DetailsModal from './DetailsModal';\nimport listItems from 'flarum/common/helpers/listItems';\nexport default class DialogSection extends Component {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"loading\", false);\n _defineProperty(this, \"messages\", void 0);\n }\n oninit(vnode) {\n super.oninit(vnode);\n this.messages = new MessageStreamState({\n filter: {\n dialog: this.attrs.dialog.id()\n },\n sort: '-createdAt'\n });\n this.messages.refresh();\n }\n view() {\n const recipient = this.attrs.dialog.recipient();\n return m(\"div\", {\n className: \"DialogSection\"\n }, m(\"div\", {\n className: \"DialogSection-header\"\n }, m(Avatar, {\n user: recipient\n }), m(\"div\", {\n className: \"DialogSection-header-info\"\n }, recipient && m(Link, {\n href: app.route.user(recipient)\n }, m(\"h2\", null, username(recipient))) || m(\"h2\", null, username(recipient)), m(\"div\", {\n className: \"badges\"\n }, listItems((recipient == null ? void 0 : recipient.badges().toArray()) || []))), m(\"div\", {\n className: \"DialogSection-header-actions\"\n }, this.actionItems().toArray())), m(MessageStream, {\n dialog: this.attrs.dialog,\n state: this.messages\n }));\n }\n actionItems() {\n const items = new ItemList();\n items.add('details', m(Dropdown, {\n icon: \"fas fa-ellipsis-h\",\n className: \"DialogSection-controls\",\n buttonClassName: \"Button Button--icon\",\n accessibleToggleLabel: app.translator.trans('flarum-messages.forum.dialog_section.controls_toggle_label'),\n label: app.translator.trans('flarum-messages.forum.dialog_section.controls_toggle_label')\n }, this.controlItems().toArray()));\n return items;\n }\n controlItems() {\n const items = new ItemList();\n items.add('details', m(Button, {\n icon: \"fas fa-info-circle\",\n onclick: () => app.modal.show(DetailsModal, {\n dialog: this.attrs.dialog\n })\n }, app.translator.trans('flarum-messages.forum.dialog_section.controls.details_button')));\n return items;\n }\n}\nflarum.reg.add('flarum-messages', 'forum/components/DialogSection', DialogSection);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/forum/app';\nimport Page from 'flarum/common/components/Page';\nimport PageStructure from 'flarum/forum/components/PageStructure';\nimport Icon from 'flarum/common/components/Icon';\nimport DialogList from './DialogList';\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\nimport Stream from 'flarum/common/utils/Stream';\nimport InfoTile from 'flarum/common/components/InfoTile';\nimport MessagesSidebar from './MessagesSidebar';\nimport DialogSection from './DialogSection';\nimport listItems from 'flarum/common/helpers/listItems';\nimport ItemList from 'flarum/common/utils/ItemList';\nimport Dropdown from 'flarum/common/components/Dropdown';\nimport Button from 'flarum/common/components/Button';\nexport default class MessagesPage extends Page {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"selectedDialog\", Stream(null));\n }\n oninit(vnode) {\n super.oninit(vnode);\n if (!app.session.user) {\n m.route.set(app.route('index'));\n return;\n }\n app.current.set('noTagsList', true);\n if (!app.dialogs.hasItems()) {\n app.dialogs.refresh().then(async () => {\n if (app.dialogs.hasItems()) {\n await this.initDialog();\n }\n });\n } else {\n this.initDialog();\n }\n }\n dialogRequestParams() {\n return {\n include: 'users.groups'\n };\n }\n async initDialog() {\n const dialogId = m.route.param('id');\n const title = app.translator.trans('flarum-messages.forum.messages_page.title', {}, true);\n let dialog;\n if (dialogId) {\n dialog = app.store.getById('dialogs', dialogId) || (await app.store.find('dialogs', dialogId, this.dialogRequestParams()));\n } else {\n dialog = app.dialogs.getAllItems()[0];\n }\n this.selectedDialog(dialog);\n if (dialog) {\n app.setTitle(dialog.title());\n app.history.push('dialog', dialog.title());\n } else {\n app.setTitle(title);\n app.history.push('messages', title);\n }\n m.redraw();\n }\n onupdate(vnode) {\n super.onupdate(vnode);\n\n // Scroll the dialog list to the active dialog item if present and not visible.\n const dialogElement = this.element.querySelector('.DialogListItem.active');\n const container = this.element.querySelector('.DialogList');\n if (dialogElement && $(container).offset().top + container.clientHeight <= $(dialogElement).offset().top) {\n dialogElement.scrollIntoView();\n }\n }\n view() {\n return m(PageStructure, {\n className: \"MessagesPage Page--vertical\",\n loading: false,\n hero: this.hero.bind(this),\n sidebar: () => m(MessagesSidebar, null)\n }, app.dialogs.isLoading() ? m(LoadingIndicator, null) : !app.dialogs.hasItems() ? m(InfoTile, {\n icon: \"far fa-envelope-open\"\n }, app.translator.trans('flarum-messages.forum.messages_page.empty_text')) : m(\"div\", {\n className: \"MessagesPage-content\"\n }, m(\"div\", {\n className: \"MessagesPage-sidebar\",\n key: \"sidebar\"\n }, m(\"div\", {\n className: \"IndexPage-toolbar\",\n key: \"toolbar\"\n }, m(\"ul\", {\n className: \"IndexPage-toolbar-view\"\n }, listItems(this.viewItems().toArray())), m(\"ul\", {\n className: \"IndexPage-toolbar-action\"\n }, listItems(this.actionItems().toArray()))), m(DialogList, {\n key: \"list\",\n state: app.dialogs,\n activeDialog: this.selectedDialog()\n })), this.selectedDialog() ? m(DialogSection, {\n key: \"dialog\",\n dialog: this.selectedDialog()\n }) : m(LoadingIndicator, {\n key: \"loading\",\n display: \"block\"\n })));\n }\n hero() {\n return m(\"header\", {\n className: \"Hero MessagesPageHero\"\n }, m(\"div\", {\n className: \"container\"\n }, m(\"div\", {\n className: \"containerNarrow\"\n }, m(\"h1\", {\n className: \"Hero-title\"\n }, m(Icon, {\n name: \"fas fa-envelope\"\n }), \" \", app.translator.trans('flarum-messages.forum.messages_page.hero.title')), m(\"div\", {\n className: \"Hero-subtitle\"\n }, app.translator.trans('flarum-messages.forum.messages_page.hero.subtitle')))));\n }\n\n /**\n * Build an item list for the part of the toolbar which is concerned with how\n * the results are displayed. By default this is just a select box to change\n * the way discussions are sorted.\n */\n viewItems() {\n var _app$dialogs$getParam;\n const items = new ItemList();\n const sortMap = app.dialogs.sortMap();\n const sortOptions = Object.keys(sortMap).reduce((acc, sortId) => {\n const sort = sortMap[sortId];\n acc[sortId] = typeof sort !== 'string' ? sort.label : app.translator.trans(\"flarum-messages.forum.index_sort.\".concat(sortId, \"_button\"));\n return acc;\n }, {});\n items.add('sort', m(Dropdown, {\n buttonClassName: \"Button\",\n label: sortOptions[((_app$dialogs$getParam = app.dialogs.getParams()) == null ? void 0 : _app$dialogs$getParam.sort) || 0] || Object.values(sortOptions)[0],\n accessibleToggleLabel: app.translator.trans('core.forum.index_sort.toggle_dropdown_accessible_label')\n }, Object.keys(sortOptions).map(value => {\n const label = sortOptions[value];\n const active = (app.dialogs.getParams().sort || Object.keys(sortMap)[0]) === value;\n return m(Button, {\n icon: active ? 'fas fa-check' : true,\n onclick: () => app.dialogs.changeSort(value),\n active: active\n }, label);\n })));\n return items;\n }\n\n /**\n * Build an item list for the part of the toolbar which is about taking action\n * on the results. By default this is just a \"mark all as read\" button.\n */\n actionItems() {\n const items = new ItemList();\n items.add('refresh', m(Button, {\n title: app.translator.trans('flarum-messages.forum.messages_page.refresh_tooltip'),\n \"aria-label\": app.translator.trans('flarum-messages.forum.messages_page.refresh_tooltip'),\n icon: \"fas fa-sync\",\n className: \"Button Button--icon\",\n onclick: () => {\n app.dialogs.refresh();\n }\n }));\n if (app.session.user) {\n items.add('markAllAsRead', m(Button, {\n title: app.translator.trans('flarum-messages.forum.messages_page.mark_all_as_read_tooltip'),\n \"aria-label\": app.translator.trans('flarum-messages.forum.messages_page.mark_all_as_read_tooltip'),\n icon: \"fas fa-check\",\n className: \"Button Button--icon\",\n onclick: () => app.dialogs.markAllAsRead()\n }));\n }\n return items;\n }\n}\nflarum.reg.add('flarum-messages', 'forum/components/MessagesPage', MessagesPage);"],"names":["DialogListItem","view","vnode","_lastMessage$contentP","dialog","this","attrs","recipient","lastMessage","m","className","unreadCount","active","href","user","lastMessageAt","actions","actionItems","toArray","contentPlain","slice","items","add","icon","trans","onclick","e","_this$attrs$dialog$da","preventDefault","stopPropagation","save","lastReadMessageId","data","relationships","id","finally","_attribute","pushAttributes","messageCount","attribute","redraw","flarum","reg","DialogList","oninit","super","oncreate","onupdate","state","getAllItems","map","_this$attrs$activeDia","activeDialog","itemActions","hasNext","hideMore","loadNext","bind","MessagesSidebar","initAttrs","canSendAnyMessage","remove","itemClassName","newMessageAction","disabled","asyncModuleImport","then","load","onsubmit","refresh","show","Message","message","controls","freshness","createdByStarter","onbeforeupdate","elementAttrs","renderFailed","revealContent","editing","header","content","concat","headerItems","cardVisible","isEditing","isHidden","contentHtml","classes","existing","footerItems","sideItems","avatar","post","MessageStream","constructor","arguments","Promise","all","_ref","ReplyPlaceholder","LoadingPost","replyPlaceholderComponent","default","loadingPostComponent","scrollListener","onscroll","element","setTimeout","start","addEventListener","markAsRead","initialToBottomScroll","isLoading","scrollToBottom","checkedRead","onremove","stop","messages","sort","a","b","createdAt","getTime","firstMessage","push","key","whileMaintainingScroll","type","forEach","index","messageItem","discussion","replyingTo","composingReply","composingMessageTo","timeGap","_this$attrs$dialog$da2","lastTime","class","dt","period","dayjs","fromNow","scrollTop","clientHeight","scrollHeight","hasPrev","loadPrev","callback","result","requestAnimationFrame","lastVisibleId","Number","$","filter","_","$el","offset","top","last","markingAsRead","MessageStreamState","params","page","DetailsModal","title","recipients","users","Boolean","username","slug","badges","infoItems","DialogSection","buttonClassName","accessibleToggleLabel","label","controlItems","MessagesPage","set","hasItems","initDialog","async","route","dialogRequestParams","include","dialogId","param","getById","find","selectedDialog","dialogElement","querySelector","container","scrollIntoView","loading","hero","sidebar","viewItems","display","name","_app$dialogs$getParam","sortMap","sortOptions","Object","keys","reduce","acc","sortId","getParams","values","value","changeSort","markAllAsRead"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"forum/components/MessagesPage.js","mappings":"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","sources":["webpack://@flarum/messages/./src/forum/components/DialogListItem.tsx","webpack://@flarum/messages/./src/forum/components/DialogList.tsx","webpack://@flarum/messages/./src/forum/components/MessagesSidebar.tsx","webpack://@flarum/messages/./src/forum/components/Message.tsx","webpack://@flarum/messages/./src/forum/components/MessageStream.tsx","webpack://@flarum/messages/./src/forum/states/MessageStreamState.ts","webpack://@flarum/messages/./src/forum/components/DetailsModal.tsx","webpack://@flarum/messages/./src/forum/components/DialogSection.tsx","webpack://@flarum/messages/./src/forum/components/MessagesPage.tsx"],"sourcesContent":["import Component from 'flarum/common/Component';\nimport classList from 'flarum/common/utils/classList';\nimport Link from 'flarum/common/components/Link';\nimport app from 'flarum/forum/app';\nimport Avatar from 'flarum/common/components/Avatar';\nimport username from 'flarum/common/helpers/username';\nimport humanTime from 'flarum/common/helpers/humanTime';\nimport ItemList from 'flarum/common/utils/ItemList';\nimport Button from 'flarum/common/components/Button';\nexport default class DialogListItem extends Component {\n view(vnode) {\n var _lastMessage$contentP;\n const dialog = this.attrs.dialog;\n const recipient = dialog.recipient();\n const lastMessage = dialog.lastMessage();\n return m(\"li\", {\n className: classList('DialogListItem', {\n 'DialogListItem--unread': dialog.unreadCount(),\n active: this.attrs.active\n })\n }, m(Link, {\n href: app.route.dialog(dialog),\n className: classList('DialogListItem-button', {\n active: this.attrs.active\n })\n }, m(\"div\", {\n className: \"DialogListItem-avatar\"\n }, m(Avatar, {\n user: recipient\n }), !!dialog.unreadCount() && m(\"div\", {\n className: \"Bubble Bubble--primary\"\n }, dialog.unreadCount())), m(\"div\", {\n className: \"DialogListItem-content\"\n }, m(\"div\", {\n className: \"DialogListItem-title\"\n }, username(recipient), humanTime(dialog.lastMessageAt()), this.attrs.actions && m(\"div\", {\n className: \"DialogListItem-actions\"\n }, this.actionItems().toArray())), m(\"div\", {\n className: \"DialogListItem-lastMessage\"\n }, lastMessage ? (_lastMessage$contentP = lastMessage.contentPlain()) == null ? void 0 : _lastMessage$contentP.slice(0, 80) : ''))));\n }\n actionItems() {\n const items = new ItemList();\n items.add('markAsRead', m(Button, {\n className: \"Notification-action Button Button--link\",\n icon: \"fas fa-check\",\n \"aria-label\": app.translator.trans('flarum-messages.forum.dialog_list.mark_as_read_tooltip'),\n onclick: e => {\n var _this$attrs$dialog$da;\n e.preventDefault();\n e.stopPropagation();\n this.attrs.dialog.save({\n lastReadMessageId: ((_this$attrs$dialog$da = this.attrs.dialog.data.relationships) == null ? void 0 : _this$attrs$dialog$da.lastMessage.data).id\n }).finally(() => {\n if (this.attrs.dialog.unreadCount() === 0) {\n var _attribute;\n app.session.user.pushAttributes({\n messageCount: ((_attribute = app.session.user.attribute('messageCount')) != null ? _attribute : 1) - 1\n });\n }\n m.redraw();\n });\n }\n }), 100);\n return items;\n }\n}\nflarum.reg.add('flarum-messages', 'forum/components/DialogListItem', DialogListItem);","import app from 'flarum/forum/app';\nimport Component from 'flarum/common/Component';\nimport Button from 'flarum/common/components/Button';\nimport DialogListItem from './DialogListItem';\nexport default class DialogList extends Component {\n oninit(vnode) {\n super.oninit(vnode);\n }\n oncreate(vnode) {\n super.oncreate(vnode);\n }\n onupdate(vnode) {\n super.onupdate(vnode);\n }\n view() {\n return m(\"div\", {\n className: \"DialogList\"\n }, m(\"ul\", {\n className: \"DialogList-list\"\n }, this.attrs.state.getAllItems().map(dialog => {\n var _this$attrs$activeDia;\n return m(DialogListItem, {\n dialog: dialog,\n active: ((_this$attrs$activeDia = this.attrs.activeDialog) == null ? void 0 : _this$attrs$activeDia.id()) === dialog.id(),\n actions: this.attrs.itemActions\n });\n })), this.attrs.state.hasNext() && !this.attrs.hideMore && m(\"div\", {\n className: \"DialogList-loadMore\"\n }, m(Button, {\n className: \"Button\",\n onclick: this.attrs.state.loadNext.bind(this.attrs.state)\n }, app.translator.trans('flarum-messages.forum.dialog_list.load_more_button'))));\n }\n}\nflarum.reg.add('flarum-messages', 'forum/components/DialogList', DialogList);","import app from 'flarum/forum/app';\nimport IndexSidebar from 'flarum/forum/components/IndexSidebar';\nimport Button from 'flarum/common/components/Button';\nexport default class MessagesSidebar extends IndexSidebar {\n static initAttrs(attrs) {\n attrs.className = 'MessagesPage-nav';\n }\n items() {\n const items = super.items();\n const canSendAnyMessage = app.session.user.attribute('canSendAnyMessage');\n items.remove('newDiscussion');\n items.add('newMessage', m(Button, {\n icon: \"fas fa-edit\",\n className: \"Button Button--primary IndexPage-newDiscussion MessagesPage-newMessage\",\n itemClassName: \"App-primaryControl\",\n onclick: () => {\n return this.newMessageAction();\n },\n disabled: !canSendAnyMessage\n }, app.translator.trans('flarum-messages.forum.messages_page.new_message_button')), 10);\n return items;\n }\n\n /**\n * Open the composer for a new message.\n */\n newMessageAction() {\n return flarum.reg.asyncModuleImport('flarum/forum/components/ComposerBody').then(() => {\n app.composer.load(() => import(/* webpackChunkName: 'forum/components/MessageComposer', webpackMode: 'lazy-once' */ './MessageComposer'), {\n user: app.session.user,\n onsubmit: () => {\n app.dialogs.refresh();\n }\n }).then(() => app.composer.show());\n return app.composer;\n });\n }\n}\nflarum.reg.add('flarum-messages', 'forum/components/MessagesSidebar', MessagesSidebar);","import ItemList from 'flarum/common/utils/ItemList';\nimport AbstractPost from 'flarum/forum/components/AbstractPost';\nimport Avatar from 'flarum/common/components/Avatar';\nimport Comment from 'flarum/forum/components/Comment';\nimport PostUser from 'flarum/forum/components/PostUser';\nimport PostMeta from 'flarum/forum/components/PostMeta';\nimport classList from 'flarum/common/utils/classList';\n/**\n * The `Post` component displays a single post. The basic post template just\n * includes a controls dropdown; subclasses must implement `content` and `attrs`\n * methods.\n */\nexport default class Message extends AbstractPost {\n oninit(vnode) {\n super.oninit(vnode);\n }\n user() {\n return this.attrs.message.user();\n }\n controls() {\n return [];\n }\n freshness() {\n return this.attrs.message.freshness;\n }\n createdByStarter() {\n return false;\n }\n onbeforeupdate(vnode) {\n return super.onbeforeupdate(vnode);\n }\n onupdate(vnode) {\n super.onupdate(vnode);\n }\n elementAttrs() {\n const message = this.attrs.message;\n const attrs = super.elementAttrs();\n attrs.className = classList(attrs.className || null, 'Message', {\n 'Post--renderFailed': message.renderFailed(),\n revealContent: false,\n editing: false\n });\n return attrs;\n }\n header() {\n return super.header();\n }\n content() {\n return super.content().concat([m(Comment, {\n headerItems: this.headerItems(),\n cardVisible: false,\n isEditing: false,\n isHidden: false,\n contentHtml: this.attrs.message.contentHtml(),\n user: this.attrs.message.user()\n })]);\n }\n classes(existing) {\n return super.classes(existing);\n }\n actionItems() {\n return super.actionItems();\n }\n footerItems() {\n return super.footerItems();\n }\n sideItems() {\n return super.sideItems();\n }\n avatar() {\n return this.attrs.message.user() ? m(Avatar, {\n user: this.attrs.message.user()\n }) : '';\n }\n headerItems() {\n const items = new ItemList();\n const message = this.attrs.message;\n items.add('user', m(PostUser, {\n post: message\n }), 100);\n items.add('meta', m(PostMeta, {\n post: message\n }));\n return items;\n }\n}\nflarum.reg.add('flarum-messages', 'forum/components/Message', Message);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/forum/app';\nimport Component from 'flarum/common/Component';\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\nimport Stream from 'flarum/common/utils/Stream';\nimport Button from 'flarum/common/components/Button';\nimport ScrollListener from 'flarum/common/utils/ScrollListener';\nimport Message from './Message';\nexport default class MessageStream extends Component {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"replyPlaceholderComponent\", Stream(null));\n _defineProperty(this, \"loadingPostComponent\", Stream(null));\n _defineProperty(this, \"scrollListener\", void 0);\n _defineProperty(this, \"initialToBottomScroll\", false);\n _defineProperty(this, \"lastTime\", null);\n _defineProperty(this, \"checkedRead\", false);\n _defineProperty(this, \"markingAsRead\", false);\n }\n oninit(vnode) {\n super.oninit(vnode);\n\n // We need the lazy ReplyPlaceholder and LoadingPost components to be loaded.\n Promise.all([flarum.reg.asyncModuleImport('flarum/forum/components/ReplyPlaceholder'), flarum.reg.asyncModuleImport('flarum/forum/components/LoadingPost')]).then(_ref => {\n let [ReplyPlaceholder, LoadingPost] = _ref;\n this.replyPlaceholderComponent(ReplyPlaceholder.default);\n this.loadingPostComponent(LoadingPost.default);\n });\n }\n oncreate(vnode) {\n super.oncreate(vnode);\n this.scrollListener = new ScrollListener(this.onscroll.bind(this), this.element);\n setTimeout(() => {\n this.scrollListener.start();\n this.element.addEventListener('scrollend', this.markAsRead.bind(this));\n });\n }\n onupdate(vnode) {\n super.onupdate(vnode);\n\n // @todo: for future versions, consider using the post stream scrubber to scroll through the messages. (big task..)\n // @todo: introduce read status, to jump to the first unread message instead.\n if (!this.initialToBottomScroll && !this.attrs.state.isLoading()) {\n this.scrollToBottom();\n this.initialToBottomScroll = true;\n }\n if (this.initialToBottomScroll && !this.checkedRead) {\n this.markAsRead();\n this.checkedRead = true;\n }\n }\n onremove(vnode) {\n super.onremove(vnode);\n this.scrollListener.stop();\n }\n view() {\n return m(\"div\", {\n className: \"MessageStream\"\n }, this.attrs.state.isLoading() ? m(LoadingIndicator, null) : this.content());\n }\n content() {\n var _this$attrs$dialog$da;\n const items = [];\n const messages = this.attrs.state.getAllItems().sort((a, b) => a.createdAt().getTime() - b.createdAt().getTime());\n const ReplyPlaceholder = this.replyPlaceholderComponent();\n const LoadingPost = this.loadingPostComponent();\n if (messages[0].id() !== ((_this$attrs$dialog$da = this.attrs.dialog.data.relationships) == null ? void 0 : _this$attrs$dialog$da.firstMessage.data).id) {\n items.push(m(\"div\", {\n className: \"MessageStream-item\",\n key: \"loadPrevious\"\n }, m(Button, {\n onclick: () => this.whileMaintainingScroll(() => this.attrs.state.loadNext()),\n type: \"button\",\n className: \"Button Button--block MessageStream-loadPrev\"\n }, app.translator.trans('flarum-messages.forum.messages_page.stream.load_previous_button'))));\n if (LoadingPost) {\n items.push(m(\"div\", {\n className: \"MessageStream-item\",\n key: \"loading-prev\"\n }, m(LoadingPost, null)));\n }\n }\n messages.forEach((message, index) => items.push(this.messageItem(message, index)));\n if (ReplyPlaceholder) {\n items.push(m(\"div\", {\n className: \"MessageStream-item\",\n key: \"reply\" /*data-index={this.attrs.state.count()}*/\n }, m(ReplyPlaceholder, {\n discussion: this.attrs.dialog,\n onclick: () => {\n flarum.reg.asyncModuleImport('flarum/forum/components/ComposerBody').then(() => {\n app.composer.load(() => import(/* webpackChunkName: 'forum/components/MessageComposer', webpackMode: 'lazy-once' */ './MessageComposer'), {\n user: app.session.user,\n replyingTo: this.attrs.dialog,\n onsubmit: () => {\n this.attrs.state.refresh().then(() => setTimeout(() => this.scrollToBottom(), 50));\n }\n }).then(() => app.composer.show());\n });\n },\n composingReply: () => app.composer.composingMessageTo(this.attrs.dialog)\n })));\n }\n return items;\n }\n messageItem(message, index) {\n return m(\"div\", {\n className: \"MessageStream-item\",\n key: index,\n \"data-id\": message.id()\n }, this.timeGap(message), m(Message, {\n message: message\n }));\n }\n timeGap(message) {\n var _this$attrs$dialog$da2;\n if (message.id() === ((_this$attrs$dialog$da2 = this.attrs.dialog.data.relationships) == null ? void 0 : _this$attrs$dialog$da2.firstMessage.data).id) {\n this.lastTime = message.createdAt();\n return m(\"div\", {\n class: \"PostStream-timeGap\"\n }, m(\"span\", null, app.translator.trans('flarum-messages.forum.messages_page.stream.start_of_the_conversation')));\n }\n const lastTime = this.lastTime;\n const dt = message.createdAt().getTime() - ((lastTime == null ? void 0 : lastTime.getTime()) || 0);\n this.lastTime = message.createdAt();\n if (lastTime && dt > 1000 * 60 * 60 * 24 * 4) {\n return m(\"div\", {\n className: \"PostStream-timeGap\"\n }, m(\"span\", null, app.translator.trans('flarum-messages.forum.messages_page.stream.time_lapsed_text', {\n period: dayjs().add(dt, 'ms').fromNow(true)\n })));\n }\n return null;\n }\n onscroll() {\n this.whileMaintainingScroll(() => {\n if (this.element.scrollTop <= 80 && this.attrs.state.hasNext()) {\n return this.attrs.state.loadNext();\n }\n if (this.element.scrollTop + this.element.clientHeight === this.element.scrollHeight && this.attrs.state.hasPrev()) {\n return this.attrs.state.loadPrev();\n }\n return null;\n });\n }\n scrollToBottom() {\n this.element.scrollTop = this.element.scrollHeight;\n }\n whileMaintainingScroll(callback) {\n const scrollTop = this.element.scrollTop;\n const scrollHeight = this.element.scrollHeight;\n const result = callback();\n if (result instanceof Promise) {\n result.then(() => {\n requestAnimationFrame(() => {\n this.element.scrollTop = this.element.scrollHeight - scrollHeight + scrollTop;\n });\n });\n }\n }\n markAsRead() {\n const lastVisibleId = Number(this.$('.MessageStream-item[data-id]').filter((_, $el) => {\n if (this.element.scrollHeight <= this.element.clientHeight) {\n return true;\n }\n return this.$().offset().top + this.element.clientHeight > $($el).offset().top;\n }).last().data('id'));\n if (lastVisibleId && app.session.user && lastVisibleId > (this.attrs.dialog.lastReadMessageId() || 0) && !this.markingAsRead) {\n this.markingAsRead = true;\n this.attrs.dialog.save({\n lastReadMessageId: lastVisibleId\n }).finally(() => {\n this.markingAsRead = false;\n if (this.attrs.dialog.unreadCount() === 0) {\n var _attribute;\n app.session.user.pushAttributes({\n messageCount: ((_attribute = app.session.user.attribute('messageCount')) != null ? _attribute : 1) - 1\n });\n }\n m.redraw();\n });\n }\n }\n}\nflarum.reg.add('flarum-messages', 'forum/components/MessageStream', MessageStream);","import PaginatedListState from 'flarum/common/states/PaginatedListState';\nexport default class MessageStreamState extends PaginatedListState {\n constructor(params, page) {\n if (page === void 0) {\n page = 1;\n }\n super(params, page, null);\n }\n get type() {\n return 'dialog-messages';\n }\n getAllItems() {\n return super.getAllItems();\n }\n}\nflarum.reg.add('flarum-messages', 'forum/states/MessageStreamState', MessageStreamState);","import app from 'flarum/forum/app';\nimport Modal from 'flarum/common/components/Modal';\nimport ItemList from 'flarum/common/utils/ItemList';\nimport Avatar from 'flarum/common/components/Avatar';\nimport fullTime from 'flarum/common/helpers/fullTime';\nimport username from 'flarum/common/helpers/username';\nimport Link from 'flarum/common/components/Link';\nimport listItems from 'flarum/common/helpers/listItems';\nexport default class DetailsModal extends Modal {\n className() {\n return 'Modal--small Modal--flat DetailsModal';\n }\n title() {\n return app.translator.trans('flarum-messages.forum.dialog_section.details_modal.title');\n }\n content() {\n let recipients = (this.attrs.dialog.users() || []).filter(Boolean);\n return m(\"div\", {\n className: \"Modal-body DetailsModal-infoGroups\"\n }, m(\"div\", {\n className: \"DetailsModal-recipients DetailsModal-info\"\n }, m(\"div\", {\n className: \"DetailsModal-info-title\"\n }, app.translator.trans('flarum-messages.forum.dialog_section.details_modal.recipients')), m(\"div\", {\n className: \"DetailsModal-recipients-list\"\n }, recipients == null ? void 0 : recipients.map(recipient => {\n return m(\"div\", {\n className: \"DetailsModal-recipient\"\n }, m(Avatar, {\n user: recipient\n }), m(Link, {\n href: app.route('user', {\n username: recipient.slug()\n })\n }, m(\"span\", {\n className: \"DetailsModal-recipient-username\"\n }, username(recipient))), m(\"div\", {\n className: \"badges\"\n }, listItems(recipient.badges().toArray())));\n }))), this.infoItems().toArray());\n }\n infoItems() {\n const items = new ItemList();\n items.add('created', m(\"div\", {\n className: \"DetailsModal-createdAt DetailsModal-info\"\n }, m(\"div\", {\n className: \"DetailsModal-info-title\"\n }, app.translator.trans('flarum-messages.forum.dialog_section.details_modal.created_at')), m(\"div\", {\n className: \"DetailsModal-info-content\"\n }, fullTime(this.attrs.dialog.createdAt()))));\n return items;\n }\n}\nflarum.reg.add('flarum-messages', 'forum/components/DetailsModal', DetailsModal);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport Component from 'flarum/common/Component';\nimport MessageStream from './MessageStream';\nimport username from 'flarum/common/helpers/username';\nimport MessageStreamState from '../states/MessageStreamState';\nimport Avatar from 'flarum/common/components/Avatar';\nimport Link from 'flarum/common/components/Link';\nimport app from 'flarum/forum/app';\nimport ItemList from 'flarum/common/utils/ItemList';\nimport Button from 'flarum/common/components/Button';\nimport Dropdown from 'flarum/common/components/Dropdown';\nimport DetailsModal from './DetailsModal';\nimport listItems from 'flarum/common/helpers/listItems';\nexport default class DialogSection extends Component {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"loading\", false);\n _defineProperty(this, \"messages\", void 0);\n }\n oninit(vnode) {\n super.oninit(vnode);\n this.messages = new MessageStreamState({\n filter: {\n dialog: this.attrs.dialog.id()\n },\n sort: '-createdAt'\n });\n this.messages.refresh();\n }\n view() {\n const recipient = this.attrs.dialog.recipient();\n return m(\"div\", {\n className: \"DialogSection\"\n }, m(\"div\", {\n className: \"DialogSection-header\"\n }, m(Avatar, {\n user: recipient\n }), m(\"div\", {\n className: \"DialogSection-header-info\"\n }, recipient && m(Link, {\n href: app.route.user(recipient)\n }, m(\"h2\", null, username(recipient))) || m(\"h2\", null, username(recipient)), m(\"div\", {\n className: \"badges\"\n }, listItems((recipient == null ? void 0 : recipient.badges().toArray()) || []))), m(\"div\", {\n className: \"DialogSection-header-actions\"\n }, this.actionItems().toArray())), m(MessageStream, {\n dialog: this.attrs.dialog,\n state: this.messages\n }));\n }\n actionItems() {\n const items = new ItemList();\n items.add('details', m(Dropdown, {\n icon: \"fas fa-ellipsis-h\",\n className: \"DialogSection-controls\",\n buttonClassName: \"Button Button--icon\",\n accessibleToggleLabel: app.translator.trans('flarum-messages.forum.dialog_section.controls_toggle_label'),\n label: app.translator.trans('flarum-messages.forum.dialog_section.controls_toggle_label')\n }, this.controlItems().toArray()));\n return items;\n }\n controlItems() {\n const items = new ItemList();\n items.add('details', m(Button, {\n icon: \"fas fa-info-circle\",\n onclick: () => app.modal.show(DetailsModal, {\n dialog: this.attrs.dialog\n })\n }, app.translator.trans('flarum-messages.forum.dialog_section.controls.details_button')));\n return items;\n }\n}\nflarum.reg.add('flarum-messages', 'forum/components/DialogSection', DialogSection);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/forum/app';\nimport Page from 'flarum/common/components/Page';\nimport PageStructure from 'flarum/forum/components/PageStructure';\nimport Icon from 'flarum/common/components/Icon';\nimport DialogList from './DialogList';\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\nimport Stream from 'flarum/common/utils/Stream';\nimport InfoTile from 'flarum/common/components/InfoTile';\nimport MessagesSidebar from './MessagesSidebar';\nimport DialogSection from './DialogSection';\nimport listItems from 'flarum/common/helpers/listItems';\nimport ItemList from 'flarum/common/utils/ItemList';\nimport Dropdown from 'flarum/common/components/Dropdown';\nimport Button from 'flarum/common/components/Button';\nexport default class MessagesPage extends Page {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"selectedDialog\", Stream(null));\n }\n oninit(vnode) {\n super.oninit(vnode);\n if (!app.session.user) {\n m.route.set(app.route('index'));\n return;\n }\n app.current.set('noTagsList', true);\n if (!app.dialogs.hasItems()) {\n app.dialogs.refresh().then(async () => {\n if (app.dialogs.hasItems()) {\n await this.initDialog();\n }\n });\n } else {\n this.initDialog();\n }\n }\n dialogRequestParams() {\n return {\n include: 'users.groups'\n };\n }\n async initDialog() {\n const dialogId = m.route.param('id');\n const title = app.translator.trans('flarum-messages.forum.messages_page.title', {}, true);\n let dialog;\n if (dialogId) {\n dialog = app.store.getById('dialogs', dialogId) || (await app.store.find('dialogs', dialogId, this.dialogRequestParams()));\n } else {\n dialog = app.dialogs.getAllItems()[0];\n }\n this.selectedDialog(dialog);\n if (dialog) {\n app.setTitle(dialog.title());\n app.history.push('dialog', dialog.title());\n } else {\n app.setTitle(title);\n app.history.push('messages', title);\n }\n m.redraw();\n }\n onupdate(vnode) {\n super.onupdate(vnode);\n\n // Scroll the dialog list to the active dialog item if present and not visible.\n const dialogElement = this.element.querySelector('.DialogListItem.active');\n const container = this.element.querySelector('.DialogList');\n if (dialogElement && $(container).offset().top + container.clientHeight <= $(dialogElement).offset().top) {\n dialogElement.scrollIntoView();\n }\n }\n view() {\n return m(PageStructure, {\n className: \"MessagesPage Page--vertical\",\n loading: false,\n hero: this.hero.bind(this),\n sidebar: () => m(MessagesSidebar, null)\n }, app.dialogs.isLoading() ? m(LoadingIndicator, null) : !app.dialogs.hasItems() ? m(InfoTile, {\n icon: \"far fa-envelope-open\"\n }, app.translator.trans('flarum-messages.forum.messages_page.empty_text')) : m(\"div\", {\n className: \"MessagesPage-content\"\n }, m(\"div\", {\n className: \"MessagesPage-sidebar\",\n key: \"sidebar\"\n }, m(\"div\", {\n className: \"IndexPage-toolbar\",\n key: \"toolbar\"\n }, m(\"ul\", {\n className: \"IndexPage-toolbar-view\"\n }, listItems(this.viewItems().toArray())), m(\"ul\", {\n className: \"IndexPage-toolbar-action\"\n }, listItems(this.actionItems().toArray()))), m(DialogList, {\n key: \"list\",\n state: app.dialogs,\n activeDialog: this.selectedDialog()\n })), this.selectedDialog() ? m(DialogSection, {\n key: \"dialog\",\n dialog: this.selectedDialog()\n }) : m(LoadingIndicator, {\n key: \"loading\",\n display: \"block\"\n })));\n }\n hero() {\n return m(\"header\", {\n className: \"Hero MessagesPageHero\"\n }, m(\"div\", {\n className: \"container\"\n }, m(\"div\", {\n className: \"containerNarrow\"\n }, m(\"h1\", {\n className: \"Hero-title\"\n }, m(Icon, {\n name: \"fas fa-envelope\"\n }), \" \", app.translator.trans('flarum-messages.forum.messages_page.hero.title')), m(\"div\", {\n className: \"Hero-subtitle\"\n }, app.translator.trans('flarum-messages.forum.messages_page.hero.subtitle')))));\n }\n\n /**\n * Build an item list for the part of the toolbar which is concerned with how\n * the results are displayed. By default this is just a select box to change\n * the way discussions are sorted.\n */\n viewItems() {\n var _app$dialogs$getParam;\n const items = new ItemList();\n const sortMap = app.dialogs.sortMap();\n const sortOptions = Object.keys(sortMap).reduce((acc, sortId) => {\n const sort = sortMap[sortId];\n acc[sortId] = typeof sort !== 'string' ? sort.label : app.translator.trans(\"flarum-messages.forum.index_sort.\".concat(sortId, \"_button\"));\n return acc;\n }, {});\n items.add('sort', m(Dropdown, {\n buttonClassName: \"Button\",\n label: sortOptions[((_app$dialogs$getParam = app.dialogs.getParams()) == null ? void 0 : _app$dialogs$getParam.sort) || 0] || Object.values(sortOptions)[0],\n accessibleToggleLabel: app.translator.trans('core.forum.index_sort.toggle_dropdown_accessible_label')\n }, Object.keys(sortOptions).map(value => {\n const label = sortOptions[value];\n const active = (app.dialogs.getParams().sort || Object.keys(sortMap)[0]) === value;\n return m(Button, {\n icon: active ? 'fas fa-check' : true,\n onclick: () => app.dialogs.changeSort(value),\n active: active\n }, label);\n })));\n return items;\n }\n\n /**\n * Build an item list for the part of the toolbar which is about taking action\n * on the results. By default this is just a \"mark all as read\" button.\n */\n actionItems() {\n const items = new ItemList();\n items.add('refresh', m(Button, {\n title: app.translator.trans('flarum-messages.forum.messages_page.refresh_tooltip'),\n \"aria-label\": app.translator.trans('flarum-messages.forum.messages_page.refresh_tooltip'),\n icon: \"fas fa-sync\",\n className: \"Button Button--icon\",\n onclick: () => {\n app.dialogs.refresh();\n }\n }));\n if (app.session.user) {\n items.add('markAllAsRead', m(Button, {\n title: app.translator.trans('flarum-messages.forum.messages_page.mark_all_as_read_tooltip'),\n \"aria-label\": app.translator.trans('flarum-messages.forum.messages_page.mark_all_as_read_tooltip'),\n icon: \"fas fa-check\",\n className: \"Button Button--icon\",\n onclick: () => app.dialogs.markAllAsRead()\n }));\n }\n return items;\n }\n}\nflarum.reg.add('flarum-messages', 'forum/components/MessagesPage', MessagesPage);"],"names":["DialogListItem","view","vnode","_lastMessage$contentP","dialog","this","attrs","recipient","lastMessage","m","className","unreadCount","active","href","user","lastMessageAt","actions","actionItems","toArray","contentPlain","slice","items","add","icon","trans","onclick","e","_this$attrs$dialog$da","preventDefault","stopPropagation","save","lastReadMessageId","data","relationships","id","finally","_attribute","pushAttributes","messageCount","attribute","redraw","flarum","reg","DialogList","oninit","super","oncreate","onupdate","state","getAllItems","map","_this$attrs$activeDia","activeDialog","itemActions","hasNext","hideMore","loadNext","bind","MessagesSidebar","initAttrs","canSendAnyMessage","remove","itemClassName","newMessageAction","disabled","asyncModuleImport","then","load","onsubmit","refresh","show","Message","message","controls","freshness","createdByStarter","onbeforeupdate","elementAttrs","renderFailed","revealContent","editing","header","content","concat","headerItems","cardVisible","isEditing","isHidden","contentHtml","classes","existing","footerItems","sideItems","avatar","post","MessageStream","constructor","arguments","Promise","all","_ref","ReplyPlaceholder","LoadingPost","replyPlaceholderComponent","default","loadingPostComponent","scrollListener","onscroll","element","setTimeout","start","addEventListener","markAsRead","initialToBottomScroll","isLoading","scrollToBottom","checkedRead","onremove","stop","messages","sort","a","b","createdAt","getTime","firstMessage","push","key","whileMaintainingScroll","type","forEach","index","messageItem","discussion","replyingTo","composingReply","composingMessageTo","timeGap","_this$attrs$dialog$da2","lastTime","class","dt","period","dayjs","fromNow","scrollTop","clientHeight","scrollHeight","hasPrev","loadPrev","callback","result","requestAnimationFrame","lastVisibleId","Number","$","filter","_","$el","offset","top","last","markingAsRead","MessageStreamState","params","page","DetailsModal","title","recipients","users","Boolean","username","slug","badges","infoItems","DialogSection","buttonClassName","accessibleToggleLabel","label","controlItems","MessagesPage","set","hasItems","initDialog","async","route","dialogRequestParams","include","dialogId","param","getById","find","selectedDialog","dialogElement","querySelector","container","scrollIntoView","loading","hero","sidebar","viewItems","display","name","_app$dialogs$getParam","sortMap","sortOptions","Object","keys","reduce","acc","sortId","getParams","values","value","changeSort","markAllAsRead"],"sourceRoot":""} \ No newline at end of file