forked from AkkomaGang/akkoma-fe
Merge branch 'fix/block-misclicks-when-timeline-shifts' into 'develop'
block clicks for a second on timeline when timeline moves See merge request pleroma/pleroma-fe!1266
This commit is contained in:
commit
40ce3a9bd8
3 changed files with 25 additions and 5 deletions
|
@ -13,6 +13,9 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
||||||
- Fixed chat messages sometimes getting lost when you receive a message at the same time
|
- Fixed chat messages sometimes getting lost when you receive a message at the same time
|
||||||
- Fixed clicking NSFW hider through status popover
|
- Fixed clicking NSFW hider through status popover
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- Clicking immediately when timeline shifts is now blocked to prevent misclicks
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
- Import/export a muted users
|
- Import/export a muted users
|
||||||
- Proper handling of deletes when using websocket streaming
|
- Proper handling of deletes when using websocket streaming
|
||||||
|
|
|
@ -2,7 +2,7 @@ import Status from '../status/status.vue'
|
||||||
import timelineFetcher from '../../services/timeline_fetcher/timeline_fetcher.service.js'
|
import timelineFetcher from '../../services/timeline_fetcher/timeline_fetcher.service.js'
|
||||||
import Conversation from '../conversation/conversation.vue'
|
import Conversation from '../conversation/conversation.vue'
|
||||||
import TimelineMenu from '../timeline_menu/timeline_menu.vue'
|
import TimelineMenu from '../timeline_menu/timeline_menu.vue'
|
||||||
import { throttle, keyBy } from 'lodash'
|
import { debounce, throttle, keyBy } from 'lodash'
|
||||||
import { library } from '@fortawesome/fontawesome-svg-core'
|
import { library } from '@fortawesome/fontawesome-svg-core'
|
||||||
import { faCircleNotch } from '@fortawesome/free-solid-svg-icons'
|
import { faCircleNotch } from '@fortawesome/free-solid-svg-icons'
|
||||||
|
|
||||||
|
@ -40,7 +40,8 @@ const Timeline = {
|
||||||
paused: false,
|
paused: false,
|
||||||
unfocused: false,
|
unfocused: false,
|
||||||
bottomedOut: false,
|
bottomedOut: false,
|
||||||
virtualScrollIndex: 0
|
virtualScrollIndex: 0,
|
||||||
|
blockingClicks: false
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
components: {
|
components: {
|
||||||
|
@ -70,8 +71,10 @@ const Timeline = {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
classes () {
|
classes () {
|
||||||
|
let rootClasses = !this.embedded ? ['panel', 'panel-default'] : []
|
||||||
|
if (this.blockingClicks) rootClasses = rootClasses.concat(['-blocked'])
|
||||||
return {
|
return {
|
||||||
root: ['timeline'].concat(!this.embedded ? ['panel', 'panel-default'] : []),
|
root: rootClasses,
|
||||||
header: ['timeline-heading'].concat(!this.embedded ? ['panel-heading'] : []),
|
header: ['timeline-heading'].concat(!this.embedded ? ['panel-heading'] : []),
|
||||||
body: ['timeline-body'].concat(!this.embedded ? ['panel-body'] : []),
|
body: ['timeline-body'].concat(!this.embedded ? ['panel-body'] : []),
|
||||||
footer: ['timeline-footer'].concat(!this.embedded ? ['panel-footer'] : [])
|
footer: ['timeline-footer'].concat(!this.embedded ? ['panel-footer'] : [])
|
||||||
|
@ -130,6 +133,15 @@ const Timeline = {
|
||||||
this.$store.commit('setLoading', { timeline: this.timelineName, value: false })
|
this.$store.commit('setLoading', { timeline: this.timelineName, value: false })
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
stopBlockingClicks: debounce(function () {
|
||||||
|
this.blockingClicks = false
|
||||||
|
}, 1000),
|
||||||
|
blockClicksTemporarily () {
|
||||||
|
if (!this.blockingClicks) {
|
||||||
|
this.blockingClicks = true
|
||||||
|
}
|
||||||
|
this.stopBlockingClicks()
|
||||||
|
},
|
||||||
handleShortKey (e) {
|
handleShortKey (e) {
|
||||||
// Ignore when input fields are focused
|
// Ignore when input fields are focused
|
||||||
if (['textarea', 'input'].includes(e.target.tagName.toLowerCase())) return
|
if (['textarea', 'input'].includes(e.target.tagName.toLowerCase())) return
|
||||||
|
@ -141,6 +153,7 @@ const Timeline = {
|
||||||
this.$store.commit('queueFlush', { timeline: this.timelineName, id: 0 })
|
this.$store.commit('queueFlush', { timeline: this.timelineName, id: 0 })
|
||||||
this.fetchOlderStatuses()
|
this.fetchOlderStatuses()
|
||||||
} else {
|
} else {
|
||||||
|
this.blockClicksTemporarily()
|
||||||
this.$store.commit('showNewStatuses', { timeline: this.timelineName })
|
this.$store.commit('showNewStatuses', { timeline: this.timelineName })
|
||||||
this.paused = false
|
this.paused = false
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
<template>
|
<template>
|
||||||
<div :class="[classes.root, 'timeline']">
|
<div :class="[classes.root, 'Timeline']">
|
||||||
<div :class="classes.header">
|
<div :class="classes.header">
|
||||||
<TimelineMenu v-if="!embedded" />
|
<TimelineMenu v-if="!embedded" />
|
||||||
<div
|
<div
|
||||||
|
@ -107,10 +107,14 @@
|
||||||
<style lang="scss">
|
<style lang="scss">
|
||||||
@import '../../_variables.scss';
|
@import '../../_variables.scss';
|
||||||
|
|
||||||
.timeline {
|
.Timeline {
|
||||||
.loadmore-text {
|
.loadmore-text {
|
||||||
opacity: 1;
|
opacity: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
&.-blocked {
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.timeline-heading {
|
.timeline-heading {
|
||||||
|
|
Loading…
Reference in a new issue