Browse Source

fix(files): Ensure that focussed file is always scrolled right

Ensure the correct file is scrolled if the content changes,
this also sets a minimal height to the virtual scrolling area
so that the `scrollTop` can be set.

Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
pull/45611/head
Ferdinand Thiessen 1 year ago
parent
commit
75dcf901ff
No known key found for this signature in database GPG Key ID: 45FAE7268762B400
  1. 24
      apps/files/src/components/VirtualList.vue

24
apps/files/src/components/VirtualList.vue

@ -146,9 +146,17 @@ export default Vue.extend({
return Math.floor(this.filesListWidth / this.itemWidth)
},
/**
* Index of the first item to be rendered
*/
startIndex() {
return Math.max(0, this.index - this.bufferItems)
},
/**
* Number of items to be rendered at the same time
* For list view this is the same as `rowCount`, for grid view this is `rowCount` * `columnCount`
*/
shownItems() {
// If in grid mode, we need to multiply the number of rows by the number of columns
if (this.gridMode) {
@ -157,6 +165,7 @@ export default Vue.extend({
return this.rowCount
},
renderedItems(): RecycledPoolItem[] {
if (!this.isReady) {
return []
@ -185,6 +194,13 @@ export default Vue.extend({
})
},
/**
* The total number of rows that are available
*/
totalRowCount() {
return Math.floor(this.dataSources.length / this.columnCount)
},
tbodyStyle() {
const isOverScrolled = this.startIndex + this.rowCount > this.dataSources.length
const lastIndex = this.dataSources.length - this.startIndex - this.shownItems
@ -192,6 +208,7 @@ export default Vue.extend({
return {
paddingTop: `${Math.floor(this.startIndex / this.columnCount) * this.itemHeight}px`,
paddingBottom: isOverScrolled ? 0 : `${hiddenAfterItems * this.itemHeight}px`,
minHeight: `${this.totalRowCount * this.itemHeight + this.beforeHeight}px`,
}
},
},
@ -199,6 +216,13 @@ export default Vue.extend({
scrollToIndex(index) {
this.scrollTo(index)
},
totalRowCount() {
if (this.scrollToIndex) {
this.$nextTick(() => this.scrollTo(this.scrollToIndex))
}
},
columnCount(columnCount, oldColumnCount) {
if (oldColumnCount === 0) {
// We're initializing, the scroll position

Loading…
Cancel
Save