fix(desktop): hide terminally unresolved link previews

Co-authored-by: Taylor Ho <taylorkmho@gmail.com>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
This commit is contained in:
Taylor Ho
2026-08-04 22:06:31 -07:00
committed by Carl
parent b0d1c7edaf
commit a46b50be71
2 changed files with 29 additions and 7 deletions

View File

@@ -376,12 +376,10 @@ export function useResolvedLinkPreviews(
return React.useMemo(
() =>
previews.map((preview) =>
resolveLinkPreview(
preview,
resolvedMetadata[metadataCacheKey(preview.href)],
),
),
previews.flatMap((preview) => {
const metadata = resolvedMetadata[metadataCacheKey(preview.href)];
return metadata === null ? [] : [resolveLinkPreview(preview, metadata)];
}),
[previews, resolvedMetadata],
);
}

View File

@@ -104,7 +104,7 @@ async function measureThreadSummaryGeometry(summaryRow: Locator) {
}
test.beforeEach(async ({ page }, testInfo) => {
const mock = testInfo.title.includes("agent owner label")
const baseMock = testInfo.title.includes("agent owner label")
? {
searchProfiles: [
{
@@ -232,6 +232,9 @@ test.beforeEach(async ({ page }, testInfo) => {
: undefined,
}
: undefined;
const mock = testInfo.title.includes("unresolvable preview")
? { linkPreviewMetadata: null, linkPreviewMetadataDelayMs: 150 }
: baseMock;
await installMockBridge(page, mock);
});
@@ -586,6 +589,27 @@ test("completed link previews send when one URL has an unsnapshotable fragment",
).toEqual(previewUrls.slice(0, 2));
});
test("unresolvable preview disappears after the terminal miss", async ({
page,
}) => {
const previewUrl = "https://x.com/tellaho/status";
await page.goto("/");
await page.getByTestId("channel-general").click();
await page.getByTestId("message-input").fill(previewUrl);
const composerPreviews = page.locator("[data-composer-link-previews]");
await expect(composerPreviews).toBeVisible();
await expect(
composerPreviews.locator("[data-link-preview-composer-card]"),
).toHaveAttribute("data-image-state", "pending");
await expect(composerPreviews).toHaveCount(0);
await page.getByTestId("send-message").click();
const row = page.getByTestId("message-row").last();
await expect(row).toContainText(previewUrl);
await expect(row.locator("[data-link-preview]")).toHaveCount(0);
});
test("send does not wait for a pending link preview snapshot", async ({
page,
}) => {