From 69f264115958f8e86d46d82234da0c2544c43516 Mon Sep 17 00:00:00 2001 From: Anthony LC Date: Fri, 12 Jul 2024 15:00:33 +0200 Subject: [PATCH] =?UTF-8?q?=E2=99=BB=EF=B8=8F(frontend)=20list=20members?= =?UTF-8?q?=20from=20side=20modal?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We refactorize the members grid to display it inside the share side modal. It is not a member grid anymore but a member list with infinite scroll. We can directly update the role or delete a member from the each row of the list. --- CHANGELOG.md | 1 + .../apps/e2e/__tests__/app-impress/common.ts | 4 +- .../app-impress/doc-member-delete.spec.ts | 192 --------- .../app-impress/doc-member-grid.spec.ts | 112 ----- .../app-impress/doc-member-list.spec.ts | 164 ++++++++ src/frontend/apps/impress/cunningham.ts | 2 + src/frontend/apps/impress/package.json | 2 +- .../apps/impress/src/core/AppProvider.tsx | 2 - .../src/cunningham/cunningham-style.css | 7 + .../src/cunningham/cunningham-tokens.css | 2 + .../src/cunningham/cunningham-tokens.ts | 2 + .../docs/doc-header/components/DocToolBox.tsx | 23 - .../doc-management/components/ModalShare.tsx | 19 +- .../members-add/api/useCreateDocAccess.tsx | 2 +- .../members-add/components/ChooseRole.tsx | 4 +- .../members/members-add/components/index.ts | 1 + .../__tests__/MemberAction.test.tsx | 101 ----- .../__tests__/MemberGrid.test.tsx | 396 ------------------ .../members-grid/__tests__/ModalRole.test.tsx | 305 -------------- .../members-grid/components/MemberAction.tsx | 92 ---- .../members-grid/components/MemberGrid.tsx | 127 ------ .../members-grid/components/ModalDelete.tsx | 132 ------ .../components/ModalGridMembers.tsx | 47 --- .../members-grid/components/ModalRole.tsx | 129 ------ .../members/members-grid/components/index.ts | 1 - .../api/index.ts | 0 .../api/useDeleteDocAccess.ts | 0 .../api/useDocAccesses.tsx | 52 ++- .../api/useUpdateDocAccess.ts | 0 .../assets/icon-remove-member.svg | 0 .../members-list/components/MemberItem.tsx | 147 +++++++ .../members-list/components/MemberList.tsx | 122 ++++++ .../members/members-list/components/index.ts | 1 + .../{members-grid => members-list}/conf.ts | 0 .../hooks/useWhoAmI.tsx | 0 .../{members-grid => members-list}/index.ts | 0 36 files changed, 520 insertions(+), 1671 deletions(-) delete mode 100644 src/frontend/apps/e2e/__tests__/app-impress/doc-member-delete.spec.ts delete mode 100644 src/frontend/apps/e2e/__tests__/app-impress/doc-member-grid.spec.ts create mode 100644 src/frontend/apps/e2e/__tests__/app-impress/doc-member-list.spec.ts delete mode 100644 src/frontend/apps/impress/src/features/docs/members/members-grid/__tests__/MemberAction.test.tsx delete mode 100644 src/frontend/apps/impress/src/features/docs/members/members-grid/__tests__/MemberGrid.test.tsx delete mode 100644 src/frontend/apps/impress/src/features/docs/members/members-grid/__tests__/ModalRole.test.tsx delete mode 100644 src/frontend/apps/impress/src/features/docs/members/members-grid/components/MemberAction.tsx delete mode 100644 src/frontend/apps/impress/src/features/docs/members/members-grid/components/MemberGrid.tsx delete mode 100644 src/frontend/apps/impress/src/features/docs/members/members-grid/components/ModalDelete.tsx delete mode 100644 src/frontend/apps/impress/src/features/docs/members/members-grid/components/ModalGridMembers.tsx delete mode 100644 src/frontend/apps/impress/src/features/docs/members/members-grid/components/ModalRole.tsx delete mode 100644 src/frontend/apps/impress/src/features/docs/members/members-grid/components/index.ts rename src/frontend/apps/impress/src/features/docs/members/{members-grid => members-list}/api/index.ts (100%) rename src/frontend/apps/impress/src/features/docs/members/{members-grid => members-list}/api/useDeleteDocAccess.ts (100%) rename src/frontend/apps/impress/src/features/docs/members/{members-grid => members-list}/api/useDocAccesses.tsx (51%) rename src/frontend/apps/impress/src/features/docs/members/{members-grid => members-list}/api/useUpdateDocAccess.ts (100%) rename src/frontend/apps/impress/src/features/docs/members/{members-grid => members-list}/assets/icon-remove-member.svg (100%) create mode 100644 src/frontend/apps/impress/src/features/docs/members/members-list/components/MemberItem.tsx create mode 100644 src/frontend/apps/impress/src/features/docs/members/members-list/components/MemberList.tsx create mode 100644 src/frontend/apps/impress/src/features/docs/members/members-list/components/index.ts rename src/frontend/apps/impress/src/features/docs/members/{members-grid => members-list}/conf.ts (100%) rename src/frontend/apps/impress/src/features/docs/members/{members-grid => members-list}/hooks/useWhoAmI.tsx (100%) rename src/frontend/apps/impress/src/features/docs/members/{members-grid => members-list}/index.ts (100%) diff --git a/CHANGELOG.md b/CHANGELOG.md index 54bdcf29..3869f21f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,7 @@ and this project adheres to - ♻️(frontend) replace docs panel with docs grid #120 - ♻️(frontend) create a doc from a modal #132 +- ♻️(frontend) manage members from the share modal #140 ## [1.0.0] - 2024-07-02 diff --git a/src/frontend/apps/e2e/__tests__/app-impress/common.ts b/src/frontend/apps/e2e/__tests__/app-impress/common.ts index 53a88da5..e620e735 100644 --- a/src/frontend/apps/e2e/__tests__/app-impress/common.ts +++ b/src/frontend/apps/e2e/__tests__/app-impress/common.ts @@ -71,7 +71,7 @@ export const createDoc = async ( export const addNewMember = async ( page: Page, index: number, - role: 'Admin' | 'Owner' | 'Member', + role: 'Administrator' | 'Owner' | 'Member' | 'Editor' | 'Reader', fillText: string = 'user', ) => { const responsePromiseSearchUser = page.waitForResponse( @@ -80,8 +80,6 @@ export const addNewMember = async ( response.status() === 200, ); - await page.getByRole('button', { name: 'Share' }).click(); - const inputSearch = page.getByLabel(/Find a member to add to the document/); // Select a new user diff --git a/src/frontend/apps/e2e/__tests__/app-impress/doc-member-delete.spec.ts b/src/frontend/apps/e2e/__tests__/app-impress/doc-member-delete.spec.ts deleted file mode 100644 index 8a83298c..00000000 --- a/src/frontend/apps/e2e/__tests__/app-impress/doc-member-delete.spec.ts +++ /dev/null @@ -1,192 +0,0 @@ -import { expect, test } from '@playwright/test'; - -import { addNewMember, createDoc } from './common'; - -test.beforeEach(async ({ page }) => { - await page.goto('/'); -}); - -test.describe('Members Delete', () => { - test('it cannot delete himself when it is the last owner', async ({ - page, - browserName, - }) => { - await createDoc(page, 'member-delete-1', browserName, 1); - - await page.getByLabel('Open the document options').click(); - await page.getByRole('button', { name: 'Manage members' }).click(); - - const table = page.getByLabel('List members card').getByRole('table'); - - const cells = table.getByRole('row').nth(1).getByRole('cell'); - await expect(cells.nth(0)).toHaveText( - new RegExp(`user@${browserName}.e2e`, 'i'), - ); - await cells.nth(2).getByLabel('Member options').click(); - await page.getByLabel('Open the modal to delete this member').click(); - - await expect( - page.getByText( - 'You are the last owner, you cannot be removed from your document.', - ), - ).toBeVisible(); - await expect(page.getByRole('button', { name: 'Validate' })).toBeDisabled(); - }); - - test('it deletes himself when it is not the last owner', async ({ - page, - browserName, - }) => { - await createDoc(page, 'member-delete-2', browserName, 1); - - await addNewMember(page, 0, 'Owner'); - - await page.getByLabel('Open the document options').click(); - await page.getByRole('button', { name: 'Manage members' }).click(); - - const table = page.getByLabel('List members card').getByRole('table'); - - // find row where regexp match the name - const cells = table - .getByRole('row') - .filter({ hasText: new RegExp(`user@${browserName}.e2e`, 'i') }) - .getByRole('cell'); - await cells.nth(2).getByLabel('Member options').click(); - await page.getByLabel('Open the modal to delete this member').click(); - - await page.getByRole('button', { name: 'Validate' }).click(); - await expect( - page.getByText(`The member has been removed from the document`), - ).toBeVisible(); - await expect( - page.getByRole('button', { name: `Create a new document` }), - ).toBeVisible(); - }); - - test('it cannot delete owner member', async ({ page, browserName }) => { - await createDoc(page, 'member-delete-3', browserName, 1); - - const username = await addNewMember(page, 0, 'Owner'); - - await page.getByLabel('Open the document options').click(); - await page.getByRole('button', { name: 'Manage members' }).click(); - - const table = page.getByLabel('List members card').getByRole('table'); - - // find row where regexp match the name - const cells = table - .getByRole('row') - .filter({ hasText: username }) - .getByRole('cell'); - await cells.getByLabel('Member options').click(); - await page.getByLabel('Open the modal to delete this member').click(); - - await expect( - page.getByText(`You cannot remove other owner.`), - ).toBeVisible(); - await expect(page.getByRole('button', { name: 'Validate' })).toBeDisabled(); - }); - - test('it deletes admin member', async ({ page, browserName }) => { - await createDoc(page, 'member-delete-4', browserName, 1); - - const username = await addNewMember(page, 0, 'Admin'); - - await page.getByLabel('Open the document options').click(); - await page.getByRole('button', { name: 'Manage members' }).click(); - - const table = page.getByLabel('List members card').getByRole('table'); - - // find row where regexp match the name - const cells = table - .getByRole('row') - .filter({ hasText: username }) - .getByRole('cell'); - await cells.getByLabel('Member options').click(); - await page.getByLabel('Open the modal to delete this member').click(); - - await page.getByRole('button', { name: 'Validate' }).click(); - await expect( - page.getByText(`The member has been removed from the document`), - ).toBeVisible(); - await expect(table.getByText(username)).toBeHidden(); - }); - - test('it cannot delete owner member when admin', async ({ - page, - browserName, - }) => { - await createDoc(page, 'member-delete-5', browserName, 1); - - const username = await addNewMember(page, 0, 'Owner'); - - await page.getByLabel('Open the document options').click(); - await page.getByRole('button', { name: 'Manage members' }).click(); - - const table = page.getByLabel('List members card').getByRole('table'); - - // find row where regexp match the name - const myCells = table - .getByRole('row') - .filter({ hasText: new RegExp(`user@${browserName}.e2e`, 'i') }) - .getByRole('cell'); - await myCells.getByLabel('Member options').click(); - - // Change role to Admin - await page.getByText('Update role').click(); - const radioGroup = page.getByLabel('Radio buttons to update the roles'); - await radioGroup.getByRole('radio', { name: 'Administrator' }).click(); - await page.getByRole('button', { name: 'Validate' }).click(); - - const cells = table - .getByRole('row') - .filter({ hasText: username }) - .getByRole('cell'); - await expect(cells.getByLabel('Member options')).toBeHidden(); - }); - - test('it deletes admin member when admin', async ({ page, browserName }) => { - await createDoc(page, 'member-delete-6', browserName, 1); - - // To not be the only owner - await addNewMember(page, 0, 'Owner'); - - const username = await addNewMember(page, 1, 'Admin'); - - await page.getByLabel('Open the document options').click(); - await page.getByRole('button', { name: 'Manage members' }).click(); - - const table = page.getByLabel('List members card').getByRole('table'); - - // find row where regexp match the name - const myCells = table - .getByRole('row') - .filter({ hasText: new RegExp(`user@${browserName}.e2e`, 'i') }) - .getByRole('cell'); - await myCells.getByLabel('Member options').click(); - - // Change role to Admin - await page.getByText('Update role').click(); - const radioGroup = page.getByLabel('Radio buttons to update the roles'); - await radioGroup.getByRole('radio', { name: 'Administrator' }).click(); - await page.getByRole('button', { name: 'Validate' }).click(); - - await expect(page.getByText(`The role has been updated`)).toBeVisible(); - await expect(page.getByText(`The role has been updated`)).toBeHidden({ - timeout: 5000, - }); - - const cells = table - .getByRole('row') - .filter({ hasText: new RegExp(username, 'i') }) - .getByRole('cell'); - await cells.nth(2).getByLabel('Member options').click(); - await page.getByLabel('Open the modal to delete this member').click(); - - await page.getByRole('button', { name: 'Validate' }).click(); - await expect( - page.getByText(`The member has been removed from the document`), - ).toBeVisible(); - await expect(table.getByText(username)).toBeHidden(); - }); -}); diff --git a/src/frontend/apps/e2e/__tests__/app-impress/doc-member-grid.spec.ts b/src/frontend/apps/e2e/__tests__/app-impress/doc-member-grid.spec.ts deleted file mode 100644 index c0450d4d..00000000 --- a/src/frontend/apps/e2e/__tests__/app-impress/doc-member-grid.spec.ts +++ /dev/null @@ -1,112 +0,0 @@ -import { expect, test } from '@playwright/test'; - -import { createDoc, goToGridDoc } from './common'; - -test.beforeEach(async ({ page }) => { - await page.goto('/'); -}); - -test.describe('Document grid members', () => { - test('it display the grid', async ({ page, browserName }) => { - await createDoc(page, 'grid-display', browserName, 1); - - await page.getByLabel('Open the document options').click(); - await page.getByRole('button', { name: 'Manage members' }).click(); - - await expect(page.getByText('Members of the document')).toBeVisible(); - const table = page.getByLabel('List members card').getByRole('table'); - const thead = table.locator('thead'); - await expect(thead.getByText(/Emails/i)).toBeVisible(); - await expect(thead.getByText(/Roles/i)).toBeVisible(); - - const cells = table.getByRole('row').nth(1).getByRole('cell'); - await expect(cells.nth(0)).toHaveText(`user@${browserName}.e2e`); - await expect(cells.nth(1)).toHaveText(/Owner/i); - await expect(cells.nth(2)).toHaveAccessibleName( - 'Open the member options modal', - ); - }); - - test('it display the grid with many members', async ({ page }) => { - await page.route('**/documents/*/', async (route) => { - const request = route.request(); - if ( - request.method().includes('GET') && - !request.url().includes('page=') - ) { - await route.fulfill({ - json: { - id: 'b0df4343-c8bd-4c20-9ff6-fbf94fc94egg', - content: '', - title: 'Mocked document', - accesses: [], - abilities: { - destroy: true, - manage_accesses: true, - partial_update: true, - }, - is_public: false, - }, - }); - } else { - await route.continue(); - } - }); - - await page.route( - '**/documents/b0df4343-c8bd-4c20-9ff6-fbf94fc94egg/accesses/?page=*', - async (route) => { - const request = route.request(); - const url = new URL(request.url()); - const pageId = url.searchParams.get('page'); - const accesses = { - count: 100, - next: null, - previous: null, - results: Array.from({ length: 20 }, (_, i) => ({ - id: `2ff1ec07-86c1-4534-a643-f41824a6c53a-${pageId}-${i}`, - user: { - id: `fc092149-cafa-4ffa-a29d-e4b18af751-${pageId}-${i}`, - email: `impress@impress.world-page-${pageId}-${i}`, - }, - team: '', - role: 'owner', - abilities: { - destroy: false, - partial_update: true, - }, - })), - }; - - if (request.method().includes('GET')) { - await route.fulfill({ - json: accesses, - }); - } else { - await route.continue(); - } - }, - ); - - await goToGridDoc(page); - - await expect(page.locator('h2').getByText('Mocked document')).toBeVisible(); - - await page.getByLabel('Open the document options').click(); - await page.getByRole('button', { name: 'Manage members' }).click(); - - await expect( - page.getByText('impress@impress.world-page-1-19'), - ).toBeVisible(); - - await page.getByLabel('Go to page 4').click(); - - await expect( - page.getByText('impress@impress.world-page-1-19'), - ).toBeHidden(); - - await expect( - page.getByText('impress@impress.world-page-4-19'), - ).toBeVisible(); - }); -}); diff --git a/src/frontend/apps/e2e/__tests__/app-impress/doc-member-list.spec.ts b/src/frontend/apps/e2e/__tests__/app-impress/doc-member-list.spec.ts new file mode 100644 index 00000000..0949a106 --- /dev/null +++ b/src/frontend/apps/e2e/__tests__/app-impress/doc-member-list.spec.ts @@ -0,0 +1,164 @@ +import { expect, test } from '@playwright/test'; + +import { waitForElementCount } from '../helpers'; + +import { addNewMember, createDoc, goToGridDoc } from './common'; + +test.beforeEach(async ({ page }) => { + await page.goto('/'); +}); + +test.describe('Document list members', () => { + test('it checks a big list of members', async ({ page }) => { + await page.route( + /.*\/documents\/.*\/accesses\/\?page=.*/, + async (route) => { + const request = route.request(); + const url = new URL(request.url()); + const pageId = url.searchParams.get('page'); + const accesses = { + count: 100, + next: 'http://anything/?page=2', + previous: null, + results: Array.from({ length: 20 }, (_, i) => ({ + id: `2ff1ec07-86c1-4534-a643-f41824a6c53a-${pageId}-${i}`, + user: { + id: `fc092149-cafa-4ffa-a29d-e4b18af751-${pageId}-${i}`, + email: `impress@impress.world-page-${pageId}-${i}`, + }, + team: '', + role: 'editor', + abilities: { + destroy: false, + partial_update: true, + set_role_to: [], + }, + })), + }; + + if (request.method().includes('GET')) { + await route.fulfill({ + json: accesses, + }); + } else { + await route.continue(); + } + }, + ); + + await goToGridDoc(page); + + await page.getByRole('button', { name: 'Share' }).click(); + + const list = page.getByLabel('List members card').locator('ul'); + await expect(list.locator('li')).toHaveCount(20); + await list.getByText(`impress@impress.world-page-${1}-18`).hover(); + await page.mouse.wheel(0, 10); + + await waitForElementCount(list.locator('li'), 21, 10000); + + expect(await list.locator('li').count()).toBeGreaterThan(20); + await expect( + list.getByText(`impress@impress.world-page-1-16`), + ).toBeVisible(); + await expect( + list.getByText(`impress@impress.world-page-2-15`), + ).toBeVisible(); + }); + + test('it checks the role rules', async ({ page, browserName }) => { + const [docTitle] = await createDoc(page, 'Doc role rules', browserName, 1); + + await expect(page.locator('h2').getByText(docTitle)).toBeVisible(); + + await page.getByRole('button', { name: 'Share' }).click(); + + const list = page.getByLabel('List members card').locator('ul'); + + await expect(list.getByText(`user@${browserName}.e2e`)).toBeVisible(); + + const soleOwner = list.getByText( + `You are the sole owner of this group, make another member the group owner before you can change your own role or be removed from your document.`, + ); + + await expect(soleOwner).toBeVisible(); + + const username = await addNewMember(page, 0, 'Owner'); + + await expect(list.getByText(username)).toBeVisible(); + + await expect(soleOwner).toBeHidden(); + + const otherOwner = list.getByText( + `You cannot update the role or remove other owner.`, + ); + + await expect(otherOwner).toBeVisible(); + + const SelectRoleCurrentUser = list + .locator('li') + .filter({ + hasText: `user@${browserName}.e2e`, + }) + .getByRole('combobox', { name: 'Role' }); + + await SelectRoleCurrentUser.click(); + await page.getByRole('option', { name: 'Administrator' }).click(); + await expect(page.getByText('The role has been updated')).toBeVisible(); + + // Admin still have the right to share + await expect(page.locator('h3').getByText('Share')).toBeVisible(); + + await SelectRoleCurrentUser.click(); + await page.getByRole('option', { name: 'Reader' }).click(); + await expect(page.getByText('The role has been updated')).toBeVisible(); + + // Reader does not have the right to share + await expect(page.locator('h3').getByText('Share')).toBeHidden(); + }); + + test('it checks the delete members', async ({ page, browserName }) => { + const [docTitle] = await createDoc(page, 'Doc role rules', browserName, 1); + + await expect(page.locator('h2').getByText(docTitle)).toBeVisible(); + + await page.getByRole('button', { name: 'Share' }).click(); + + const list = page.getByLabel('List members card').locator('ul'); + + const nameMyself = `user@${browserName}.e2e`; + await expect(list.getByText(nameMyself)).toBeVisible(); + + const userOwner = await addNewMember(page, 0, 'Owner'); + await expect(list.getByText(userOwner)).toBeVisible(); + + const userReader = await addNewMember(page, 0, 'Reader'); + await expect(list.getByText(userReader)).toBeVisible(); + + await list + .locator('li') + .filter({ + hasText: userReader, + }) + .getByText('delete') + .click(); + + await expect(list.getByText(userReader)).toBeHidden(); + + await list + .locator('li') + .filter({ + hasText: nameMyself, + }) + .getByText('delete') + .click(); + + await expect(list.getByText(nameMyself)).toBeHidden(); + + await expect( + page.getByText('The member has been removed from the document').first(), + ).toBeVisible(); + + await expect(page.getByText('Share')).toBeHidden(); + }); +}); diff --git a/src/frontend/apps/impress/cunningham.ts b/src/frontend/apps/impress/cunningham.ts index c26185ce..04f4739a 100644 --- a/src/frontend/apps/impress/cunningham.ts +++ b/src/frontend/apps/impress/cunningham.ts @@ -344,6 +344,7 @@ const config = { 'border-color': 'var(--c--theme--colors--primary-text)', 'box-shadow-color': 'var(--c--theme--colors--primary-text)', 'value-color': 'var(--c--theme--colors--primary-text)', + 'font-size': '14px', }, 'forms-labelledbox': { 'label-color': { @@ -351,6 +352,7 @@ const config = { }, }, 'forms-select': { + 'item-font-size': '14px', 'border-radius': '4px', 'border-radius-hover': '4px', 'background-color': '#ffffff', diff --git a/src/frontend/apps/impress/package.json b/src/frontend/apps/impress/package.json index d481a76f..3233ea6a 100644 --- a/src/frontend/apps/impress/package.json +++ b/src/frontend/apps/impress/package.json @@ -6,7 +6,7 @@ "dev": "next dev", "build": "prettier --check . && yarn stylelint && next build", "build:ci": "cp .env.development .env.local && yarn build", - "build-theme": "cunningham -g css,ts -o src/cunningham --utility-classes", + "build-theme": "cunningham -g css,ts -o src/cunningham --utility-classes && yarn prettier", "start": "npx -y serve@latest out", "lint": "tsc --noEmit && next lint", "prettier": "prettier --write .", diff --git a/src/frontend/apps/impress/src/core/AppProvider.tsx b/src/frontend/apps/impress/src/core/AppProvider.tsx index 1d5fbe87..663cea2d 100644 --- a/src/frontend/apps/impress/src/core/AppProvider.tsx +++ b/src/frontend/apps/impress/src/core/AppProvider.tsx @@ -1,6 +1,5 @@ import { CunninghamProvider } from '@openfun/cunningham-react'; import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; -import { ReactQueryDevtools } from '@tanstack/react-query-devtools'; import { useCunninghamTheme } from '@/cunningham'; import '@/i18n/initI18n'; @@ -27,7 +26,6 @@ export function AppProvider({ children }: { children: React.ReactNode }) { return ( - {children} diff --git a/src/frontend/apps/impress/src/cunningham/cunningham-style.css b/src/frontend/apps/impress/src/cunningham/cunningham-style.css index 426de341..a14505d3 100644 --- a/src/frontend/apps/impress/src/cunningham/cunningham-style.css +++ b/src/frontend/apps/impress/src/cunningham/cunningham-style.css @@ -443,6 +443,13 @@ input:-webkit-autofill:focus { color: var(--c--components--button--tertiary-text--color-hover); } +.c__button--tertiary-text:disabled { + background-color: var( + --c--components--button--tertiary-text--background--color-disabled + ); + color: var(--c--components--button--tertiary-text--color-disabled); +} + .c__button--danger { background-color: var(--c--components--button--danger--background--color); } diff --git a/src/frontend/apps/impress/src/cunningham/cunningham-tokens.css b/src/frontend/apps/impress/src/cunningham/cunningham-tokens.css index 4882a329..84f8fcdf 100644 --- a/src/frontend/apps/impress/src/cunningham/cunningham-tokens.css +++ b/src/frontend/apps/impress/src/cunningham/cunningham-tokens.css @@ -469,9 +469,11 @@ --c--components--forms-input--value-color: var( --c--theme--colors--primary-text ); + --c--components--forms-input--font-size: 14px; --c--components--forms-labelledbox--label-color--big: var( --c--theme--colors--primary-text ); + --c--components--forms-select--item-font-size: 14px; --c--components--forms-select--border-radius: 4px; --c--components--forms-select--border-radius-hover: 4px; --c--components--forms-select--background-color: #fff; diff --git a/src/frontend/apps/impress/src/cunningham/cunningham-tokens.ts b/src/frontend/apps/impress/src/cunningham/cunningham-tokens.ts index b0eab19c..0dd231a3 100644 --- a/src/frontend/apps/impress/src/cunningham/cunningham-tokens.ts +++ b/src/frontend/apps/impress/src/cunningham/cunningham-tokens.ts @@ -472,11 +472,13 @@ export const tokens = { 'border-color': 'var(--c--theme--colors--primary-text)', 'box-shadow-color': 'var(--c--theme--colors--primary-text)', 'value-color': 'var(--c--theme--colors--primary-text)', + 'font-size': '14px', }, 'forms-labelledbox': { 'label-color': { big: 'var(--c--theme--colors--primary-text)' }, }, 'forms-select': { + 'item-font-size': '14px', 'border-radius': '4px', 'border-radius-hover': '4px', 'background-color': '#ffffff', diff --git a/src/frontend/apps/impress/src/features/docs/doc-header/components/DocToolBox.tsx b/src/frontend/apps/impress/src/features/docs/doc-header/components/DocToolBox.tsx index fb4ebb65..ae9c417c 100644 --- a/src/frontend/apps/impress/src/features/docs/doc-header/components/DocToolBox.tsx +++ b/src/frontend/apps/impress/src/features/docs/doc-header/components/DocToolBox.tsx @@ -9,7 +9,6 @@ import { ModalShare, ModalUpdateDoc, } from '@/features/docs/doc-management'; -import { ModalGridMembers } from '@/features/docs/members/members-grid/'; import { ModalPDF } from './ModalPDF'; @@ -19,7 +18,6 @@ interface DocToolBoxProps { export const DocToolBox = ({ doc }: DocToolBoxProps) => { const { t } = useTranslation(); - const [isModalGridMembersOpen, setIsModalGridMembersOpen] = useState(false); const [isModalShareOpen, setIsModalShareOpen] = useState(false); const [isModalUpdateOpen, setIsModalUpdateOpen] = useState(false); const [isModalRemoveOpen, setIsModalRemoveOpen] = useState(false); @@ -53,21 +51,6 @@ export const DocToolBox = ({ doc }: DocToolBoxProps) => { isOpen={isDropOpen} > - {doc.abilities.manage_accesses && ( - <> - - - )} {doc.abilities.partial_update && (