Show "waiting for media..." when no participant

This commit is contained in:
Hugh Nimmo-Smith
2024-11-25 21:17:20 +00:00
parent b819a72c57
commit 4f2591feae
4 changed files with 29 additions and 9 deletions

View File

@@ -191,6 +191,7 @@
"expand": "Expand", "expand": "Expand",
"mute_for_me": "Mute for me", "mute_for_me": "Mute for me",
"muted_for_me": "Muted for me", "muted_for_me": "Muted for me",
"volume": "Volume" "volume": "Volume",
"waiting_for_media": "Waiting for media..."
} }
} }

View File

@@ -74,9 +74,9 @@ unconditionally select the container so we can use cqmin units */
calc(var(--media-view-border-radius) - var(--cpd-space-3x)) calc(var(--media-view-border-radius) - var(--cpd-space-3x))
); );
display: grid; display: grid;
grid-template-columns: 1fr auto; grid-template-columns: 30px 1fr 30px;
grid-template-rows: 1fr auto; grid-template-rows: 1fr auto;
grid-template-areas: "status status" "nameTag button"; grid-template-areas: "reactions status ." "nameTag nameTag button";
gap: var(--cpd-space-1x); gap: var(--cpd-space-1x);
place-items: start; place-items: start;
} }
@@ -101,8 +101,8 @@ unconditionally select the container so we can use cqmin units */
grid-area: status; grid-area: status;
justify-self: center; justify-self: center;
align-self: start; align-self: start;
padding: var(--cpd-space-1x); padding: var(--cpd-space-2x);
padding-block: var(--cpd-space-1x); padding-block: var(--cpd-space-2x);
color: var(--cpd-color-text-primary); color: var(--cpd-color-text-primary);
background-color: var(--cpd-color-bg-canvas-default); background-color: var(--cpd-color-bg-canvas-default);
display: flex; display: flex;
@@ -116,6 +116,12 @@ unconditionally select the container so we can use cqmin units */
text-align: center; text-align: center;
} }
.reactions {
grid-area: reactions;
display: flex;
gap: var(--cpd-space-1x);
}
.nameTag > svg, .nameTag > svg,
.nameTag > span { .nameTag > span {
flex-shrink: 0; flex-shrink: 0;

View File

@@ -5,7 +5,7 @@ SPDX-License-Identifier: AGPL-3.0-only
Please see LICENSE in the repository root for full details. Please see LICENSE in the repository root for full details.
*/ */
import { describe, expect, test } from "vitest"; import { describe, expect, it, test } from "vitest";
import { render, screen } from "@testing-library/react"; import { render, screen } from "@testing-library/react";
import { axe } from "vitest-axe"; import { axe } from "vitest-axe";
import { TooltipProvider } from "@vector-im/compound-web"; import { TooltipProvider } from "@vector-im/compound-web";
@@ -59,6 +59,14 @@ describe("MediaView", () => {
}); });
}); });
describe("with no participant", () => {
it("shows avatar", () => {
render(<MediaView {...baseProps} video={undefined} />);
expect(screen.getByRole("img", { name: "some name" })).toBeVisible();
expect(screen.getByText("video_tile.waiting_for_media")).toBeVisible();
});
});
describe("name tag", () => { describe("name tag", () => {
test("is shown with name", () => { test("is shown with name", () => {
render(<MediaView {...baseProps} displayName="Bob" />); render(<MediaView {...baseProps} displayName="Bob" />);

View File

@@ -90,7 +90,7 @@ export const MediaView = forwardRef<HTMLDivElement, Props>(
size={avatarSize} size={avatarSize}
src={member?.getMxcAvatarUrl()} src={member?.getMxcAvatarUrl()}
className={styles.avatar} className={styles.avatar}
style={{ display: videoEnabled ? "none" : "initial" }} style={{ display: video && videoEnabled ? "none" : "initial" }}
/> />
{video?.publication !== undefined && ( {video?.publication !== undefined && (
<VideoTrack <VideoTrack
@@ -98,13 +98,13 @@ export const MediaView = forwardRef<HTMLDivElement, Props>(
// There's no reason for this to be focusable // There's no reason for this to be focusable
tabIndex={-1} tabIndex={-1}
disablePictureInPicture disablePictureInPicture
style={{ display: videoEnabled ? "block" : "none" }} style={{ display: video && videoEnabled ? "block" : "none" }}
data-testid="video" data-testid="video"
/> />
)} )}
</div> </div>
<div className={styles.fg}> <div className={styles.fg}>
<div style={{ display: "flex", gap: "var(--cpd-space-1x)" }}> <div className={styles.reactions}>
<RaisedHandIndicator <RaisedHandIndicator
raisedHandTime={raisedHandTime} raisedHandTime={raisedHandTime}
miniature={avatarSize < 96} miniature={avatarSize < 96}
@@ -118,6 +118,11 @@ export const MediaView = forwardRef<HTMLDivElement, Props>(
/> />
)} )}
</div> </div>
{!video && (
<div className={styles.status}>
{t("video_tile.waiting_for_media")}
</div>
)}
{/* TODO: Bring this back once encryption status is less broken */} {/* TODO: Bring this back once encryption status is less broken */}
{/*encryptionStatus !== EncryptionStatus.Okay && ( {/*encryptionStatus !== EncryptionStatus.Okay && (
<div className={styles.status}> <div className={styles.status}>