Add a drag&drop delay on playlist videos to allow user scroll on small screens (#2154)
* Add delay on playlist element reordering to fix user scroll on mobile Signed-off-by: Julien Maulny <julien.maulny@protonmail.com> * Upgrade @angular/cdk to include bugfix about drag&drop Signed-off-by: Julien Maulny <julien.maulny@protonmail.com> * add delay on playlist drag&drop on all touch screens Signed-off-by: Julien Maulny <julien.maulny@protonmail.com>
This commit is contained in:
parent
34398be429
commit
0c695c5c96
|
@ -33,7 +33,7 @@
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@angular-devkit/build-angular": "~0.803.12",
|
"@angular-devkit/build-angular": "~0.803.12",
|
||||||
"@angular/animations": "~8.2.0",
|
"@angular/animations": "~8.2.0",
|
||||||
"@angular/cdk": "^8.1.1",
|
"@angular/cdk": "^8.2.3",
|
||||||
"@angular/cli": "~8.3.0",
|
"@angular/cli": "~8.3.0",
|
||||||
"@angular/common": "~8.2.0",
|
"@angular/common": "~8.2.0",
|
||||||
"@angular/compiler": "~8.2.0",
|
"@angular/compiler": "~8.2.0",
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
class="videos" myInfiniteScroller [autoInit]="true" (nearOfBottom)="onNearOfBottom()"
|
class="videos" myInfiniteScroller [autoInit]="true" (nearOfBottom)="onNearOfBottom()"
|
||||||
cdkDropList (cdkDropListDropped)="drop($event)" [dataObservable]="onDataSubject.asObservable()"
|
cdkDropList (cdkDropListDropped)="drop($event)" [dataObservable]="onDataSubject.asObservable()"
|
||||||
>
|
>
|
||||||
<div class="video" *ngFor="let playlistElement of playlistElements; trackBy: trackByFn" cdkDrag>
|
<div class="video" *ngFor="let playlistElement of playlistElements; trackBy: trackByFn" cdkDrag [cdkDragStartDelay]="getDragStartDelay()">
|
||||||
<my-video-playlist-element-miniature
|
<my-video-playlist-element-miniature
|
||||||
[playlistElement]="playlistElement" [playlist]="playlist" [owned]="true" (elementRemoved)="onElementRemoved($event)"
|
[playlistElement]="playlistElement" [playlist]="playlist" [owned]="true" (elementRemoved)="onElementRemoved($event)"
|
||||||
[position]="playlistElement.position"
|
[position]="playlistElement.position"
|
||||||
|
|
|
@ -8,6 +8,7 @@ import { ActivatedRoute } from '@angular/router'
|
||||||
import { VideoPlaylistService } from '@app/shared/video-playlist/video-playlist.service'
|
import { VideoPlaylistService } from '@app/shared/video-playlist/video-playlist.service'
|
||||||
import { VideoPlaylist } from '@app/shared/video-playlist/video-playlist.model'
|
import { VideoPlaylist } from '@app/shared/video-playlist/video-playlist.model'
|
||||||
import { I18n } from '@ngx-translate/i18n-polyfill'
|
import { I18n } from '@ngx-translate/i18n-polyfill'
|
||||||
|
import { ScreenService } from '@app/shared/misc/screen.service'
|
||||||
import { CdkDragDrop } from '@angular/cdk/drag-drop'
|
import { CdkDragDrop } from '@angular/cdk/drag-drop'
|
||||||
import { VideoPlaylistElement } from '@app/shared/video-playlist/video-playlist-element.model'
|
import { VideoPlaylistElement } from '@app/shared/video-playlist/video-playlist-element.model'
|
||||||
|
|
||||||
|
@ -38,6 +39,7 @@ export class MyAccountVideoPlaylistElementsComponent implements OnInit, OnDestro
|
||||||
private confirmService: ConfirmService,
|
private confirmService: ConfirmService,
|
||||||
private route: ActivatedRoute,
|
private route: ActivatedRoute,
|
||||||
private i18n: I18n,
|
private i18n: I18n,
|
||||||
|
private screenService: ScreenService,
|
||||||
private videoPlaylistService: VideoPlaylistService
|
private videoPlaylistService: VideoPlaylistService
|
||||||
) {}
|
) {}
|
||||||
|
|
||||||
|
@ -99,6 +101,23 @@ export class MyAccountVideoPlaylistElementsComponent implements OnInit, OnDestro
|
||||||
return elem.id
|
return elem.id
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns null to not have drag and drop delay.
|
||||||
|
* In small views, where elements are about 100% wide,
|
||||||
|
* we add a delay to prevent unwanted drag&drop.
|
||||||
|
*
|
||||||
|
* @see {@link https://github.com/Chocobozzz/PeerTube/issues/2078}
|
||||||
|
*
|
||||||
|
* @returns {null|number} Null for no delay, or a number in milliseconds.
|
||||||
|
*/
|
||||||
|
getDragStartDelay (): null | number {
|
||||||
|
if (this.screenService.isInTouchScreen()) {
|
||||||
|
return 500
|
||||||
|
}
|
||||||
|
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
private loadElements () {
|
private loadElements () {
|
||||||
this.videoPlaylistService.getPlaylistVideos(this.videoPlaylistId, this.pagination)
|
this.videoPlaylistService.getPlaylistVideos(this.videoPlaylistId, this.pagination)
|
||||||
.subscribe(({ total, data }) => {
|
.subscribe(({ total, data }) => {
|
||||||
|
|
|
@ -118,7 +118,7 @@
|
||||||
dependencies:
|
dependencies:
|
||||||
tslib "^1.9.0"
|
tslib "^1.9.0"
|
||||||
|
|
||||||
"@angular/cdk@^8.1.1":
|
"@angular/cdk@^8.2.3":
|
||||||
version "8.2.3"
|
version "8.2.3"
|
||||||
resolved "https://registry.yarnpkg.com/@angular/cdk/-/cdk-8.2.3.tgz#16b96ffa935cbf5a646757ecaf2b19c434678f72"
|
resolved "https://registry.yarnpkg.com/@angular/cdk/-/cdk-8.2.3.tgz#16b96ffa935cbf5a646757ecaf2b19c434678f72"
|
||||||
integrity sha512-ZwO5Sn720RA2YvBqud0JAHkZXjmjxM0yNzCO8RVtRE9i8Gl26Wk0j0nQeJkVm4zwv2QO8MwbKUKGTMt8evsokA==
|
integrity sha512-ZwO5Sn720RA2YvBqud0JAHkZXjmjxM0yNzCO8RVtRE9i8Gl26Wk0j0nQeJkVm4zwv2QO8MwbKUKGTMt8evsokA==
|
||||||
|
|
Loading…
Reference in New Issue