diff --git a/CHANGELOG.md b/CHANGELOG.md
index ac490d64ab..4e2c6cdb9e 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -10,6 +10,7 @@ and this project adheres to
- ♿️(frontend) restore skip to content link after header redesign #2510
- 🌐(i18n) rename cn_CN to zh_CN, add eo_PL and zh_TW locales #2486
+- ✨(frontend) Add "Copy link to block" feature #2547
### Fixed
diff --git a/src/frontend/apps/e2e/__tests__/app-impress/doc-editor.spec.ts b/src/frontend/apps/e2e/__tests__/app-impress/doc-editor.spec.ts
index 0524167227..57071ab92c 100644
--- a/src/frontend/apps/e2e/__tests__/app-impress/doc-editor.spec.ts
+++ b/src/frontend/apps/e2e/__tests__/app-impress/doc-editor.spec.ts
@@ -23,12 +23,8 @@ test.describe('Doc Editor', () => {
}) => {
await createDoc(page, 'doc-toolbar', browserName, 1);
- await verifyDocName(page, 'doc-toolbar');
-
const editor = await writeInEditor({ page, text: 'test content' });
- await page.waitForTimeout(1500);
-
await editor
.getByText('test content', {
exact: true,
@@ -106,6 +102,30 @@ test.describe('Doc Editor', () => {
).toBeVisible();
});
+ test('it checks side menu buttons are displayed', async ({
+ page,
+ browserName,
+ }) => {
+ await createDoc(page, 'doc-side-menu', browserName, 1);
+
+ const { editor } = await openSuggestionMenu({ page, suggestion: 'Table' });
+
+ await editor.locator('.tableWrapper').first().hover();
+
+ await page.locator('.bn-side-menu > button').last().click();
+ await expect(page.getByRole('menuitem', { name: 'Colors' })).toBeVisible();
+ await expect(
+ page.getByRole('menuitem', { name: 'Header row' }),
+ ).toBeVisible();
+ await expect(
+ page.getByRole('menuitem', { name: 'Header column' }),
+ ).toBeVisible();
+ await expect(page.getByRole('menuitem', { name: 'Delete' })).toBeVisible();
+ await expect(
+ page.getByRole('menuitem', { name: 'Copy link to block' }),
+ ).toBeVisible();
+ });
+
test('markdown button converts from markdown to the editor syntax json', async ({
page,
browserName,
@@ -391,7 +411,7 @@ test.describe('Doc Editor', () => {
await page.keyboard.press('Escape');
await page.locator('.bn-side-menu > button').last().click();
- await page.locator('.mantine-Menu-dropdown > button').last().click();
+ await page.getByRole('menuitem', { name: 'Color' }).click();
await page.locator('.bn-color-picker-dropdown > button').last().click();
await expect(
@@ -637,4 +657,45 @@ test.describe('Doc Editor', () => {
await expect(editor.getByText('Mobile Text')).toBeVisible();
});
+
+ test('it checks "Copy link to block" feature', async ({
+ page,
+ browserName,
+ }) => {
+ await createDoc(page, 'doc-scroll', browserName, 1);
+
+ const editor = await writeInEditor({ page, text: 'First Block' });
+
+ for (let i = 0; i < 30; i++) {
+ await page.keyboard.press('Enter');
+ }
+
+ await writeInEditor({ page, text: 'My Block' });
+
+ await editor
+ .locator('.bn-block-outer')
+ .filter({ hasText: 'My Block' })
+ .first()
+ .hover();
+
+ await page.locator('.bn-side-menu > button').last().click();
+ await page.getByRole('menuitem', { name: 'Link to block' }).click();
+ await expect(page.getByText('Link Copied !')).toBeVisible();
+
+ const url = page.url();
+
+ const handle = await page.evaluateHandle(() =>
+ navigator.clipboard.readText(),
+ );
+ const clipboardContent = await handle.jsonValue();
+
+ await expect(editor.getByText('First Block')).not.toBeInViewport();
+ await page.goto(url);
+ await expect(editor.getByText('First Block')).toBeInViewport();
+ await expect(editor.getByText('My Block')).not.toBeInViewport();
+
+ await page.goto(clipboardContent);
+ await expect(editor.getByText('First Block')).not.toBeInViewport();
+ await expect(editor.getByText('My Block')).toBeInViewport();
+ });
});
diff --git a/src/frontend/apps/impress/src/assets/icons/ui-kit/color.svg b/src/frontend/apps/impress/src/assets/icons/ui-kit/color.svg
new file mode 100644
index 0000000000..e629d51d20
--- /dev/null
+++ b/src/frontend/apps/impress/src/assets/icons/ui-kit/color.svg
@@ -0,0 +1,15 @@
+
diff --git a/src/frontend/apps/impress/src/assets/icons/ui-kit/link.svg b/src/frontend/apps/impress/src/assets/icons/ui-kit/link.svg
index 787f1e16a9..d9dda38187 100644
--- a/src/frontend/apps/impress/src/assets/icons/ui-kit/link.svg
+++ b/src/frontend/apps/impress/src/assets/icons/ui-kit/link.svg
@@ -1,3 +1,17 @@
-