Skip to content

Commit 2ac4a84

Browse files
committed
feat(core): copy event for image (#8219)
fix AF-1383
1 parent b1e6124 commit 2ac4a84

File tree

2 files changed

+39
-1
lines changed

2 files changed

+39
-1
lines changed

packages/frontend/core/src/modules/peek-view/view/image-preview/index.tsx

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -265,11 +265,20 @@ const ImagePreviewModalImpl = ({
265265
event.stopPropagation();
266266
};
267267

268+
const onCopyEvent = (event: ClipboardEvent) => {
269+
event.preventDefault();
270+
event.stopPropagation();
271+
272+
copyHandler();
273+
};
274+
268275
document.addEventListener('keyup', handleKeyUp);
276+
document.addEventListener('copy', onCopyEvent);
269277
return () => {
270278
document.removeEventListener('keyup', handleKeyUp);
279+
document.removeEventListener('copy', onCopyEvent);
271280
};
272-
}, [blockModel, blocksuiteDoc, onBlockIdChange]);
281+
}, [blockModel, blocksuiteDoc, copyHandler, onBlockIdChange]);
273282

274283
useErrorBoundary(error);
275284

tests/affine-local/e2e/image-preview.spec.ts

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -375,6 +375,35 @@ test('image able to copy to clipboard', async ({ page }) => {
375375
).toBeVisible();
376376
});
377377

378+
test('image preview should be able to copy image to clipboard on copy event', async ({
379+
page,
380+
}) => {
381+
await openHomePage(page);
382+
await waitForEditorLoad(page);
383+
await clickNewPageButton(page);
384+
let blobId: string;
385+
{
386+
const title = getBlockSuiteEditorTitle(page);
387+
await title.click();
388+
await page.keyboard.press('Enter');
389+
await importImage(page, 'http://localhost:8081/large-image.png');
390+
await page.locator('affine-page-image').first().dblclick();
391+
await page.waitForTimeout(500);
392+
blobId = (await page
393+
.getByTestId('image-preview-modal')
394+
.locator('img')
395+
.first()
396+
.getAttribute('data-blob-id')) as string;
397+
expect(blobId).toBeTruthy();
398+
}
399+
const locator = page.getByTestId('image-preview-modal');
400+
await expect(locator).toBeVisible();
401+
await page.dispatchEvent('body', 'copy');
402+
await expect(
403+
page.locator('[data-testid=affine-toast]:has-text("Copied to clipboard.")')
404+
).toBeVisible();
405+
});
406+
378407
test('image able to download', async ({ page }) => {
379408
await openHomePage(page);
380409
await waitForEditorLoad(page);

0 commit comments

Comments
 (0)