feat(web): shuffle slideshow order (#4277)

* feat(web): shuffle slideshow order

* Fix play/stop issues

* Enter/exit fullscreen mode
* Prevent navigation to the next asset after exiting slideshow mode

* Fix entering the slideshow mode from an album page

* Simplify markup of the AssetViewer

Group viewer area and navigation (prev/next/slideshow bar) controls together

* Select a random asset from a random bucket

* Preserve assets order in random mode

* Exit fullscreen mode only if it is active

* Extract SlideshowHistory class

* Use traditional functions instead of arrow functions

* Refactor SlideshowHistory class

* Extract SlideshowBar component

* Fix comments

* Hide Say something in slideshow mode

---------

Co-authored-by: brighteyed <sergey.kondrikov@gmail.com>
This commit is contained in:
Jason Rasmussen 2023-11-01 21:34:30 -04:00 committed by GitHub
parent 309bf1ad22
commit 1d35965d03
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 298 additions and 59 deletions

View file

@ -0,0 +1,40 @@
export class SlideshowHistory {
private history: string[] = [];
private index = 0;
constructor(private onChange: (assetId: string) => void) {}
reset() {
this.history = [];
this.index = 0;
}
queue(assetId: string) {
this.history.push(assetId);
// If we were at the end of the slideshow history, move the index to the new end
if (this.index === this.history.length - 2) {
this.index++;
}
}
next(): boolean {
if (this.index === this.history.length - 1) {
return false;
}
this.index++;
this.onChange(this.history[this.index]);
return true;
}
previous(): boolean {
if (this.index === 0) {
return false;
}
this.index--;
this.onChange(this.history[this.index]);
return true;
}
}