diff --git a/CHANGELOG.md b/CHANGELOG.md index 1f772649..7adc5639 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ and this project adheres to ### Added - ✨(frontend) add pdf block to the editor #1293 +- ✨List and restore deleted docs #1450 ### Changed diff --git a/src/frontend/apps/e2e/__tests__/app-impress/doc-grid.spec.ts b/src/frontend/apps/e2e/__tests__/app-impress/doc-grid.spec.ts index 0347d804..1e12421f 100644 --- a/src/frontend/apps/e2e/__tests__/app-impress/doc-grid.spec.ts +++ b/src/frontend/apps/e2e/__tests__/app-impress/doc-grid.spec.ts @@ -139,7 +139,7 @@ test.describe('Document grid item options', () => { const row = await getGridRow(page, docTitle); await row.getByText(`more_horiz`).click(); - await page.getByRole('menuitem', { name: 'Remove' }).click(); + await page.getByRole('menuitem', { name: 'Delete' }).click(); await expect( page.getByRole('heading', { name: 'Delete a doc' }), diff --git a/src/frontend/apps/e2e/__tests__/app-impress/doc-trashbin.spec.ts b/src/frontend/apps/e2e/__tests__/app-impress/doc-trashbin.spec.ts new file mode 100644 index 00000000..6f1a56da --- /dev/null +++ b/src/frontend/apps/e2e/__tests__/app-impress/doc-trashbin.spec.ts @@ -0,0 +1,55 @@ +import { expect, test } from '@playwright/test'; + +import { + clickInGridMenu, + createDoc, + getGridRow, + verifyDocName, +} from './utils-common'; +import { addNewMember } from './utils-share'; + +test.beforeEach(async ({ page }) => { + await page.goto('/'); +}); + +test.describe('Doc Trashbin', () => { + test('it controls UI and interaction from the grid page', async ({ + page, + browserName, + }) => { + const [title1] = await createDoc(page, 'my-trash-doc-1', browserName, 1); + const [title2] = await createDoc(page, 'my-trash-doc-2', browserName, 1); + await verifyDocName(page, title2); + await page.getByRole('button', { name: 'Share' }).click(); + await addNewMember(page, 0, 'Editor'); + await page.getByRole('button', { name: 'close' }).click(); + + await page.getByRole('button', { name: 'Back to homepage' }).click(); + + const row1 = await getGridRow(page, title1); + await clickInGridMenu(page, row1, 'Delete'); + await page.getByRole('button', { name: 'Delete document' }).click(); + + const row2 = await getGridRow(page, title2); + await clickInGridMenu(page, row2, 'Delete'); + await page.getByRole('button', { name: 'Delete document' }).click(); + + await page.getByRole('link', { name: 'Trashbin' }).click(); + + const docsGrid = page.getByTestId('docs-grid'); + await expect(docsGrid.getByText('Days remaining')).toBeVisible(); + await expect(row1.getByText(title1)).toBeVisible(); + await expect(row1.getByText('30 days')).toBeVisible(); + await expect(row2.getByText(title2)).toBeVisible(); + await expect( + row2.getByRole('button', { + name: 'Open the sharing settings for the document', + }), + ).toBeVisible(); + await expect( + row2.getByRole('button', { + name: 'Open the sharing settings for the document', + }), + ).toBeDisabled(); + }); +}); diff --git a/src/frontend/apps/e2e/__tests__/app-impress/utils-common.ts b/src/frontend/apps/e2e/__tests__/app-impress/utils-common.ts index 77b25f7d..cba59792 100644 --- a/src/frontend/apps/e2e/__tests__/app-impress/utils-common.ts +++ b/src/frontend/apps/e2e/__tests__/app-impress/utils-common.ts @@ -1,4 +1,4 @@ -import { Page, expect } from '@playwright/test'; +import { Locator, Page, expect } from '@playwright/test'; export type BrowserName = 'chromium' | 'firefox' | 'webkit'; export const BROWSERS: BrowserName[] = ['chromium', 'webkit', 'firefox']; @@ -326,3 +326,14 @@ export async function waitForLanguageSwitch( await page.getByRole('menuitem', { name: lang.label }).click(); } + +export const clickInGridMenu = async ( + page: Page, + row: Locator, + textButton: string, +) => { + await row + .getByRole('button', { name: /Open the menu of actions for the document/ }) + .click(); + await page.getByRole('menuitem', { name: textButton }).click(); +}; diff --git a/src/frontend/apps/impress/src/features/docs/doc-management/assets/child-document.svg b/src/frontend/apps/impress/src/features/docs/doc-management/assets/child-document.svg new file mode 100644 index 00000000..008a9add --- /dev/null +++ b/src/frontend/apps/impress/src/features/docs/doc-management/assets/child-document.svg @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/src/frontend/apps/impress/src/features/docs/doc-management/components/SimpleDocItem.tsx b/src/frontend/apps/impress/src/features/docs/doc-management/components/SimpleDocItem.tsx index 41a753a4..27b31cd1 100644 --- a/src/frontend/apps/impress/src/features/docs/doc-management/components/SimpleDocItem.tsx +++ b/src/frontend/apps/impress/src/features/docs/doc-management/components/SimpleDocItem.tsx @@ -4,9 +4,15 @@ import { css } from 'styled-components'; import { Box, Text } from '@/components'; import { useCunninghamTheme } from '@/cunningham'; -import { Doc, getEmojiAndTitle, useTrans } from '@/docs/doc-management'; +import { + Doc, + getEmojiAndTitle, + useDocUtils, + useTrans, +} from '@/docs/doc-management'; import { useResponsiveStore } from '@/stores'; +import ChildDocument from '../assets/child-document.svg'; import PinnedDocumentIcon from '../assets/pinned-document.svg'; import SimpleFileIcon from '../assets/simple-document.svg'; @@ -37,6 +43,7 @@ export const SimpleDocItem = ({ const { spacingsTokens, colorsTokens } = useCunninghamTheme(); const { isDesktop } = useResponsiveStore(); const { untitledDocument } = useTrans(); + const { isChild } = useDocUtils(doc); const { emoji, titleWithoutEmoji: displayTitle } = getEmojiAndTitle( doc.title || untitledDocument, @@ -73,11 +80,19 @@ export const SimpleDocItem = ({