mirror of
https://github.com/vector-im/element-call.git
synced 2026-03-25 06:40:26 +00:00
Fix TileStore's ability to swap spotlight speakers without a layout shift
This was regressed in 79c40f198c because of the overlooked renaming of the 'speaking' field to 'speaking$'.
This commit is contained in:
@@ -675,6 +675,21 @@ test("spotlight speakers swap places", () => {
|
||||
},
|
||||
},
|
||||
);
|
||||
|
||||
// While we expect the media on tiles to change, layout$ itself should
|
||||
// *never* meaningfully change. That is, we expect there to be no layout
|
||||
// shifts as the spotlight speaker changes; instead, the same tiles
|
||||
// should be reused for the whole duration of the test and simply have
|
||||
// their media swapped out. This is meaningful for keeping the interface
|
||||
// not too visually distracting during back-and-forth conversations,
|
||||
// while still animating tiles to express people joining, leaving, etc.
|
||||
expectObservable(
|
||||
vm.layout$.pipe(
|
||||
distinctUntilChanged(deepCompare),
|
||||
debounceTime(0),
|
||||
map(() => "x"),
|
||||
),
|
||||
).toBe("x"); // Expect just one emission
|
||||
},
|
||||
);
|
||||
});
|
||||
|
||||
@@ -118,10 +118,11 @@ export class TileStore {
|
||||
*/
|
||||
export class TileStoreBuilder {
|
||||
private spotlight: SpotlightTileData | null = null;
|
||||
private readonly prevSpotlightSpeaker =
|
||||
private readonly prevSpotlightSpeaker: UserMediaViewModel | null =
|
||||
this.prevSpotlight?.media.length === 1 &&
|
||||
"speaking" in this.prevSpotlight.media[0] &&
|
||||
this.prevSpotlight.media[0];
|
||||
"speaking$" in this.prevSpotlight.media[0]
|
||||
? this.prevSpotlight.media[0]
|
||||
: null;
|
||||
|
||||
private readonly prevGridByMedia: Map<
|
||||
MediaViewModel,
|
||||
@@ -201,7 +202,7 @@ export class TileStoreBuilder {
|
||||
if (
|
||||
media === this.prevSpotlightSpeaker &&
|
||||
this.spotlight.media.length === 1 &&
|
||||
"speaking" in this.spotlight.media[0] &&
|
||||
"speaking$" in this.spotlight.media[0] &&
|
||||
this.prevSpotlightSpeaker !== this.spotlight.media[0]
|
||||
) {
|
||||
const prev = this.prevGridByMedia.get(this.spotlight.media[0]);
|
||||
|
||||
Reference in New Issue
Block a user