diff --git a/package.deps.json b/package.deps.json index 26cadf0bde..6862115b7e 100644 --- a/package.deps.json +++ b/package.deps.json @@ -75,5 +75,9 @@ { "from": "node_modules/util", "to": "node_modules/util" + }, + { + "from": "node_modules/mime-types", + "to": "node_modules/mime-types" } ] diff --git a/package.json b/package.json index 034804336f..18c4824940 100644 --- a/package.json +++ b/package.json @@ -636,4 +636,4 @@ "pre-commit": "npm run precommit && git add licenses.json" } } -} +} \ No newline at end of file diff --git a/src/ts/component/block/chat.tsx b/src/ts/component/block/chat.tsx index eaedbdeb17..a7ba15c4ca 100644 --- a/src/ts/component/block/chat.tsx +++ b/src/ts/component/block/chat.tsx @@ -1,5 +1,6 @@ import * as React from 'react'; import $ from 'jquery'; +import raf from 'raf'; import { observer } from 'mobx-react'; import { Label, Icon } from 'Component'; import { I, C, S, U, J, keyboard, translate, Storage, Preview } from 'Lib'; @@ -179,12 +180,17 @@ const BlockChat = observer(class BlockChat extends React.Component this.scrollToMessage(id)); + win.on(`messageAdd.${ns}`, (e, message: I.ChatMessage) => { + if (message.creator != account.id) { + this.scrollToMessage(message.id); + }; + }); }; loadMessages (clear: boolean, callBack?: () => void) { @@ -441,27 +447,26 @@ const BlockChat = observer(class BlockChat extends React.Component { + const container = U.Common.getScrollContainer(this.props.isPopup); + const top = this.getMessageScrollOffset(id); - container.scrollTop(this.getMessageScrollOffset(id)); + container.get(0).scrollTo({ top, behavior: 'smooth' }); + }); }; scrollToBottom () { - const messages = this.getMessages(); - const length = messages.length; + raf(() => { + const { isPopup } = this.props; + const container = U.Common.getScrollContainer(isPopup); + const height = isPopup ? container.get(0).scrollHeight : document.body.scrollHeight; - if (!length) { - return; - }; - - const id = messages[length - 1].id; - const container = U.Common.getScrollContainer(this.props.isPopup); - - container.scrollTop(this.getMessageScrollOffset(id) + 10000); + container.get(0).scrollTo({ top: height + 10000, behavior: 'smooth' }); + }); }; onThread (id: string) { diff --git a/src/ts/component/block/chat/form.tsx b/src/ts/component/block/chat/form.tsx index bd4148744a..dead293059 100644 --- a/src/ts/component/block/chat/form.tsx +++ b/src/ts/component/block/chat/form.tsx @@ -471,7 +471,7 @@ const ChatForm = observer(class ChatForm extends React.Component { return; }; - const { rootId, scrollToMessage } = this.props; + const { rootId, scrollToMessage, scrollToBottom } = this.props; const node = $(this.node); const loader = node.find('#form-loader'); const list = this.state.files || []; @@ -505,7 +505,6 @@ const ChatForm = observer(class ChatForm extends React.Component { return; }; - scrollToMessage(this.editingId); clear(); }); }; @@ -526,7 +525,7 @@ const ChatForm = observer(class ChatForm extends React.Component { }; Storage.setLastChatMessageId(rootId, message.messageId); - scrollToMessage(message.messageId); + scrollToBottom(); clear(); }); }; diff --git a/src/ts/lib/api/dispatcher.ts b/src/ts/lib/api/dispatcher.ts index f1e23c4b6b..924e86eadc 100644 --- a/src/ts/lib/api/dispatcher.ts +++ b/src/ts/lib/api/dispatcher.ts @@ -952,7 +952,7 @@ class Dispatcher { U.Common.notification(author?.name, message.content.text); }; - $(window).trigger('messageAdd', [ message.id ]); + $(window).trigger('messageAdd', [ message ]); break; };