forked from AkkomaGang/akkoma-fe
Merge branch 'chat-fix-for-vertical-screen' into 'develop'
Chat scroll fix for vertical screen Closes #997 See merge request pleroma/pleroma-fe!1277
This commit is contained in:
commit
60983ae42b
3 changed files with 17 additions and 1 deletions
|
@ -20,6 +20,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
||||||
- Fixed multiple regressions in CSS styles
|
- Fixed multiple regressions in CSS styles
|
||||||
- Fixed multiple issues with input fields when using CJK font as default
|
- Fixed multiple issues with input fields when using CJK font as default
|
||||||
- Fixed search field in navbar infringing into logo in some cases
|
- Fixed search field in navbar infringing into logo in some cases
|
||||||
|
- Fixed not being able to load the chat history in vertical screens when the message list doesn't take the full height of the scrollable container on the first fetch.
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
- Clicking immediately when timeline shifts is now blocked to prevent misclicks
|
- Clicking immediately when timeline shifts is now blocked to prevent misclicks
|
||||||
|
|
|
@ -6,7 +6,7 @@ import PostStatusForm from '../post_status_form/post_status_form.vue'
|
||||||
import ChatTitle from '../chat_title/chat_title.vue'
|
import ChatTitle from '../chat_title/chat_title.vue'
|
||||||
import chatService from '../../services/chat_service/chat_service.js'
|
import chatService from '../../services/chat_service/chat_service.js'
|
||||||
import { promiseInterval } from '../../services/promise_interval/promise_interval.js'
|
import { promiseInterval } from '../../services/promise_interval/promise_interval.js'
|
||||||
import { getScrollPosition, getNewTopPosition, isBottomedOut, scrollableContainerHeight } from './chat_layout_utils.js'
|
import { getScrollPosition, getNewTopPosition, isBottomedOut, scrollableContainerHeight, isScrollable } from './chat_layout_utils.js'
|
||||||
import { library } from '@fortawesome/fontawesome-svg-core'
|
import { library } from '@fortawesome/fontawesome-svg-core'
|
||||||
import {
|
import {
|
||||||
faChevronDown,
|
faChevronDown,
|
||||||
|
@ -287,6 +287,14 @@ const Chat = {
|
||||||
if (isFirstFetch) {
|
if (isFirstFetch) {
|
||||||
this.updateScrollableContainerHeight()
|
this.updateScrollableContainerHeight()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// In vertical screens, the first batch of fetched messages may not always take the
|
||||||
|
// full height of the scrollable container.
|
||||||
|
// If this is the case, we want to fetch the messages until the scrollable container
|
||||||
|
// is fully populated so that the user has the ability to scroll up and load the history.
|
||||||
|
if (!isScrollable(this.$refs.scrollable) && messages.length > 0) {
|
||||||
|
this.fetchChat({ maxId: this.currentChatMessageService.minId })
|
||||||
|
}
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
|
@ -24,3 +24,10 @@ export const isBottomedOut = (el, offset = 0) => {
|
||||||
export const scrollableContainerHeight = (inner, header, footer) => {
|
export const scrollableContainerHeight = (inner, header, footer) => {
|
||||||
return inner.offsetHeight - header.clientHeight - footer.clientHeight
|
return inner.offsetHeight - header.clientHeight - footer.clientHeight
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Returns whether or not the scrollbar is visible.
|
||||||
|
export const isScrollable = (el) => {
|
||||||
|
if (!el) return
|
||||||
|
|
||||||
|
return el.scrollHeight > el.clientHeight
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue