From 7de08c13aac625768d44b3e3f2b419d1e8c2c3a4 Mon Sep 17 00:00:00 2001 From: kim Date: Thu, 22 Jan 2026 17:49:08 +0100 Subject: [PATCH 1/2] refactor: remove permissionleveloptions and use generated permission level --- cypress/e2e/builder/fixtures/chatbox.ts | 5 +- cypress/e2e/builder/fixtures/invitations.ts | 28 ++++----- cypress/e2e/builder/fixtures/items.ts | 15 +++-- cypress/e2e/builder/fixtures/memberships.ts | 20 +++---- .../e2e/builder/fixtures/publish/publish.ts | 3 +- .../invitations/createInvitation.cy.ts | 18 +++--- .../builder/invitations/editInvitation.cy.ts | 8 +-- .../builder/invitations/viewInvitation.cy.ts | 13 ++--- .../itemLogin/itemLoginSetting.cy.ts | 7 +-- cypress/e2e/builder/item/hide/hideItem.cy.ts | 8 +-- .../builder/item/publish/publishedItem.cy.ts | 5 +- cypress/e2e/builder/item/publish/tags.cy.ts | 12 ++-- .../builder/item/settings/itemSettings.cy.ts | 16 +----- .../builder/item/share/changeVisibility.cy.ts | 3 +- .../e2e/builder/item/share/shortLink.cy.ts | 11 +--- .../e2e/builder/item/view/viewFolder.cy.ts | 11 +--- .../memberships/createItemMembership.cy.ts | 27 ++++----- .../memberships/deleteItemMembership.cy.ts | 10 +--- .../memberships/editItemMembership.cy.ts | 25 ++++---- .../memberships/membershipRequestTable.cy.ts | 10 +--- .../builder/memberships/viewMemberships.cy.ts | 57 +++++++++---------- cypress/e2e/player/chatbox.cy.ts | 4 +- cypress/e2e/player/main.cy.ts | 24 ++++---- cypress/e2e/player/navigation.cy.ts | 10 +--- cypress/fixtures/analytics/items.ts | 7 +-- cypress/fixtures/apps.ts | 3 +- cypress/fixtures/files.ts | 7 +-- cypress/fixtures/items.ts | 11 ++-- cypress/fixtures/links.ts | 5 +- .../fixtures/useCases/staticElectricity.ts | 7 +-- cypress/support/commands.ts | 5 +- cypress/support/server.ts | 5 +- cypress/support/types.ts | 9 ++- cypress/support/utils.ts | 10 +--- cypress/support/viewUtils.ts | 3 +- src/modules/analytics/AnalyticsSidebar.tsx | 4 +- .../builder/components/common/Chatbox.tsx | 4 +- .../builder/components/item/FolderContent.tsx | 11 +--- .../builder/components/item/ItemContent.tsx | 7 +-- .../components/item/header/Actions.tsx | 7 +-- .../item/header/ItemHeaderActions.tsx | 10 +--- .../item/settings/AdminChatSettings.tsx | 6 +- .../item/settings/LanguageSelect.tsx | 8 +-- .../item/sharing/ItemMembershipSelect.tsx | 16 +++--- .../csvImport/DisplayInvitationSummary.tsx | 4 +- .../DeleteItemMembershipDialog.tsx | 4 +- .../membershipTable/EditPermissionButton.tsx | 11 ++-- .../membershipTable/InvitationTableRow.tsx | 8 +-- .../membershipTable/ItemMembershipsTable.tsx | 16 ++---- .../membershipTable/useChangePermission.ts | 4 +- .../membershipTable/useHighestMemberships.tsx | 5 +- .../membershipTable/useMembershipRequests.ts | 4 +- .../shareButton/CreateItemMembershipForm.tsx | 18 ++---- .../components/main/ItemMenuContent.tsx | 7 +-- .../AccessibleNavigationTree.tsx | 4 +- .../itemSelectionModal/RootNavigationTree.tsx | 4 +- .../builder/components/pages/item/type.ts | 4 +- .../builder/contexts/OutletContext.tsx | 4 +- .../builder/map/components/Map.stories.tsx | 8 +-- .../builder/map/components/map/MapContent.tsx | 5 +- .../map/components/map/MarkerPopup.tsx | 11 +--- src/modules/player/item/Item.tsx | 3 +- .../player/navigationIsland/ChatButton.tsx | 4 +- .../navigationIsland/PinnedItemsButton.tsx | 4 +- src/openapi/client/sdk.gen.ts | 8 +-- src/openapi/client/types.gen.ts | 17 ++++-- src/query/item/types.ts | 11 ++-- src/query/mutations/invitation.ts | 4 +- src/query/test/constants.ts | 9 ++- src/query/ws/hooks/membership.test.ts | 8 +-- src/routes/analytics/items/$itemId/apps.tsx | 4 +- src/routes/analytics/items/$itemId/export.tsx | 4 +- src/routes/builder/items/$itemId.tsx | 5 +- src/ui/items/AppItem.stories.tsx | 10 +--- 74 files changed, 284 insertions(+), 423 deletions(-) diff --git a/cypress/e2e/builder/fixtures/chatbox.ts b/cypress/e2e/builder/fixtures/chatbox.ts index 54b8eb115..94623869b 100644 --- a/cypress/e2e/builder/fixtures/chatbox.ts +++ b/cypress/e2e/builder/fixtures/chatbox.ts @@ -5,7 +5,6 @@ import { ItemType, MentionStatus, PackedFolderItemFactory, - PermissionLevel, } from '@graasp/sdk'; import { DEFAULT_FOLDER_ITEM } from '../../../fixtures/items'; @@ -29,7 +28,7 @@ export const ITEM_WITH_CHATBOX_MESSAGES: ItemForTest = { memberships: [ { item, - permission: PermissionLevel.Write, + permission: 'write', account: MEMBERS.ANNA, creator: MEMBERS.ANNA, createdAt: '2021-09-11T12:56:36.834Z', @@ -71,7 +70,7 @@ const ITEM_WITH_CHATBOX_MESSAGES_AND_ADMIN: ItemForTest = { memberships: [ { item: items[0], - permission: PermissionLevel.Admin, + permission: 'admin', account: MEMBERS.ANNA, creator: MEMBERS.ANNA, createdAt: '2021-08-11T12:56:36.834Z', diff --git a/cypress/e2e/builder/fixtures/invitations.ts b/cypress/e2e/builder/fixtures/invitations.ts index 155b5edd0..a1e759eb5 100644 --- a/cypress/e2e/builder/fixtures/invitations.ts +++ b/cypress/e2e/builder/fixtures/invitations.ts @@ -2,26 +2,26 @@ import { DiscriminatedItem, Invitation, PackedFolderItemFactory, - PermissionLevel, - PermissionLevelOptions, } from '@graasp/sdk'; import { v4 } from 'uuid'; +import type { PermissionLevel } from '@/openapi/client/types.gen'; + import { MEMBERS } from '../../../fixtures/members'; import { ApiConfig } from '../../../support/types'; export const buildInvitation = (args: { item: DiscriminatedItem; email?: string; - permission?: PermissionLevelOptions; + permission?: PermissionLevel; }): Invitation => { const { item, email, permission } = args; return { // set temporary id for react-key id: v4(), email: email ?? '', - permission: permission ?? PermissionLevel.Read, + permission: permission ?? 'read', createdAt: '2021-08-11T12:56:36.834Z', updatedAt: '2021-08-11T12:56:36.834Z', creator: MEMBERS.ANNA, @@ -56,7 +56,7 @@ export const ITEMS_WITH_INVITATIONS = { { id: 'ecafbd2a-5688-11eb-be93-0242ac130002', item: itemsWithInvitations[0], - permission: PermissionLevel.Admin, + permission: 'admin', account: MEMBERS.FANNY, createdAt: '2021-08-11T12:56:36.834Z', updatedAt: '2021-08-11T12:56:36.834Z', @@ -65,7 +65,7 @@ export const ITEMS_WITH_INVITATIONS = { { id: 'ecafbd2a-5688-11eb-be93-0212ac130002', item: itemsWithInvitations[0], - permission: PermissionLevel.Admin, + permission: 'admin', account: MEMBERS.ANNA, createdAt: '2021-08-11T12:56:36.834Z', updatedAt: '2021-08-11T12:56:36.834Z', @@ -76,7 +76,7 @@ export const ITEMS_WITH_INVITATIONS = { { id: 'ecafbd2a-5688-11eb-be92-0242ac130005', item: itemsWithInvitations[0], - permission: PermissionLevel.Write, + permission: 'write', email: MEMBERS.BOB.email, createdAt: '2021-08-11T12:56:36.834Z', updatedAt: '2021-08-11T12:56:36.834Z', @@ -85,7 +85,7 @@ export const ITEMS_WITH_INVITATIONS = { { id: 'ecafbd1a-5688-11eb-be93-0242ac130006', item: itemsWithInvitations[1], - permission: PermissionLevel.Write, + permission: 'write', email: MEMBERS.CEDRIC.email, createdAt: '2021-08-11T12:56:36.834Z', updatedAt: '2021-08-11T12:56:36.834Z', @@ -94,7 +94,7 @@ export const ITEMS_WITH_INVITATIONS = { { id: 'ecbfbd2a-5688-11eb-be93-0242ac130007', item: itemsWithInvitations[1], - permission: PermissionLevel.Read, + permission: 'read', email: MEMBERS.DAVID.email, createdAt: '2021-08-11T12:56:36.834Z', updatedAt: '2021-08-11T12:56:36.834Z', @@ -113,7 +113,7 @@ const itemsWithInvitationsWriteAccess: DiscriminatedItem[] = [ id: 'bcafbd2a-5688-11eb-ae93-0242ac130002', path: 'bcafbd2a_5688_11eb_ae93_0242ac130002', }, - { permission: PermissionLevel.Write }, + { permission: 'write' }, ), PackedFolderItemFactory( { @@ -121,7 +121,7 @@ const itemsWithInvitationsWriteAccess: DiscriminatedItem[] = [ creator: MEMBERS.BOB, path: 'bcafbd2a_5688_11eb_ae93_0242ac130002.ecafbd2a_5688_11eb_ae93_0242ac130002', }, - { permission: PermissionLevel.Write }, + { permission: 'write' }, ), ]; export const ITEM_WITH_INVITATIONS_WRITE_ACCESS: ApiConfig = { @@ -134,7 +134,7 @@ export const ITEM_WITH_INVITATIONS_WRITE_ACCESS: ApiConfig = { { id: 'ecafbd2a-5688-11eb-be93-0242ac130002', item: itemsWithInvitationsWriteAccess[0], - permission: PermissionLevel.Write, + permission: 'write', account: MEMBERS.ANNA, createdAt: '2021-08-11T12:56:36.834Z', updatedAt: '2021-08-11T12:56:36.834Z', @@ -145,7 +145,7 @@ export const ITEM_WITH_INVITATIONS_WRITE_ACCESS: ApiConfig = { { id: 'ecafbd2a-5688-11eb-be92-0242ac130005', item: itemsWithInvitationsWriteAccess[0], - permission: PermissionLevel.Write, + permission: 'write', email: MEMBERS.CEDRIC.email, createdAt: '2021-08-11T12:56:36.834Z', updatedAt: '2021-08-11T12:56:36.834Z', @@ -154,7 +154,7 @@ export const ITEM_WITH_INVITATIONS_WRITE_ACCESS: ApiConfig = { { id: 'ecafbd1a-5688-11eb-be93-0242ac130006', item: itemsWithInvitationsWriteAccess[1], - permission: PermissionLevel.Read, + permission: 'read', email: MEMBERS.DAVID.email, createdAt: '2021-08-11T12:56:36.834Z', updatedAt: '2021-08-11T12:56:36.834Z', diff --git a/cypress/e2e/builder/fixtures/items.ts b/cypress/e2e/builder/fixtures/items.ts index 0e15e7187..63d379adc 100644 --- a/cypress/e2e/builder/fixtures/items.ts +++ b/cypress/e2e/builder/fixtures/items.ts @@ -5,7 +5,6 @@ import { ItemValidationProcess, ItemValidationStatus, PackedItem, - PermissionLevel, } from '@graasp/sdk'; import { DEFAULT_FOLDER_ITEM } from '../../../fixtures/items'; @@ -34,7 +33,7 @@ export const generateOwnItems = (number: number): ItemForTest[] => { memberships: [ { item, - permission: PermissionLevel.Admin, + permission: 'admin', account: MEMBERS.ANNA, creator: MEMBERS.ANNA, createdAt: '2021-08-11T12:56:36.834Z', @@ -107,7 +106,7 @@ export const SAMPLE_PUBLIC_ITEMS: ApiConfig = { memberships: [ { item: samplePublicItems[0], - permission: PermissionLevel.Admin, + permission: 'admin', account: MEMBERS.ANNA, creator: MEMBERS.ANNA, id: 'ecbfbd2a-5688-12db-ae93-0242ac130032', @@ -116,7 +115,7 @@ export const SAMPLE_PUBLIC_ITEMS: ApiConfig = { }, { item: samplePublicItems[0], - permission: PermissionLevel.Read, + permission: 'read', account: MEMBERS.BOB, creator: MEMBERS.ANNA, id: 'ecbfbd2a-5688-12db-ae91-0242ac130002', @@ -130,7 +129,7 @@ export const SAMPLE_PUBLIC_ITEMS: ApiConfig = { memberships: [ { item: samplePublicItems[1], - permission: PermissionLevel.Admin, + permission: 'admin', account: MEMBERS.ANNA, creator: MEMBERS.ANNA, id: 'ecbfbd2a-5688-121b-ae93-0242ac130002', @@ -153,7 +152,7 @@ export const SAMPLE_PUBLIC_ITEMS: ApiConfig = { memberships: [ { item: samplePublicItems[2], - permission: PermissionLevel.Admin, + permission: 'admin', account: MEMBERS.ANNA, creator: MEMBERS.ANNA, id: 'ecbfbd1a-5688-12db-ae93-0242ac130002', @@ -176,7 +175,7 @@ export const SAMPLE_PUBLIC_ITEMS: ApiConfig = { memberships: [ { item: samplePublicItems[1], - permission: PermissionLevel.Admin, + permission: 'admin', account: MEMBERS.ANNA, creator: MEMBERS.ANNA, id: 'ecbfbd2a-5644-12db-ae93-0242ac130002', @@ -185,7 +184,7 @@ export const SAMPLE_PUBLIC_ITEMS: ApiConfig = { }, { item: samplePublicItems[1], - permission: PermissionLevel.Read, + permission: 'read', account: MEMBERS.BOB, creator: MEMBERS.ANNA, id: 'ecbfbd2a-5338-12db-ae93-0242ac130002', diff --git a/cypress/e2e/builder/fixtures/memberships.ts b/cypress/e2e/builder/fixtures/memberships.ts index e318b0b30..2e2de4220 100644 --- a/cypress/e2e/builder/fixtures/memberships.ts +++ b/cypress/e2e/builder/fixtures/memberships.ts @@ -5,22 +5,22 @@ import { Member, MemberFactory, PackedFolderItemFactory, - PermissionLevel, - PermissionLevelOptions, } from '@graasp/sdk'; import { v4 } from 'uuid'; +import type { PermissionLevel } from '@/openapi/client/types.gen'; + import { MEMBERS } from '../../../fixtures/members'; import { ApiConfig } from '../../../support/types'; export const buildItemMembership = (args: { - permission?: PermissionLevelOptions; + permission?: PermissionLevel; item: DiscriminatedItem; account: Partial; creator?: Member; }): ItemMembership => ({ - permission: args.permission ?? PermissionLevel.Admin, + permission: args.permission ?? 'admin', account: MemberFactory(args.account), item: args.item, creator: MemberFactory(args.creator ?? args.account), @@ -56,7 +56,7 @@ export const ITEMS_WITH_MEMBERSHIPS: ApiConfig = { { id: 'ecafbd2a-5688-11eb-be93-0242ac130002', item: sampleItems[0], - permission: PermissionLevel.Admin, + permission: 'admin', account: MEMBERS.ANNA, creator: MEMBERS.ANNA, updatedAt: '2021-08-11T12:56:36.834Z', @@ -65,7 +65,7 @@ export const ITEMS_WITH_MEMBERSHIPS: ApiConfig = { { id: 'ecafbd2a-5688-11eb-be92-0242ac130002', item: sampleItems[0], - permission: PermissionLevel.Write, + permission: 'write', account: MEMBERS.BOB, creator: MEMBERS.ANNA, updatedAt: '2021-08-11T12:56:36.834Z', @@ -74,7 +74,7 @@ export const ITEMS_WITH_MEMBERSHIPS: ApiConfig = { { id: 'ecafbd1a-5688-11eb-be93-0242ac130002', item: sampleItems[0], - permission: PermissionLevel.Write, + permission: 'write', account: MEMBERS.CEDRIC, updatedAt: '2021-08-11T12:56:36.834Z', createdAt: '2021-08-11T12:56:36.834Z', @@ -83,7 +83,7 @@ export const ITEMS_WITH_MEMBERSHIPS: ApiConfig = { { id: 'ecbfbd2a-5688-11eb-be93-0242ac130002', item: sampleItems[0], - permission: PermissionLevel.Read, + permission: 'read', account: MEMBERS.DAVID, creator: MEMBERS.ANNA, updatedAt: '2021-08-11T12:56:36.834Z', @@ -97,7 +97,7 @@ export const ITEMS_WITH_MEMBERSHIPS: ApiConfig = { { id: 'ecafbd2a-5688-11eb-be93-0242ac130002', item: sampleItems[1], - permission: PermissionLevel.Admin, + permission: 'admin', account: MEMBERS.ANNA, creator: MEMBERS.ANNA, updatedAt: '2021-08-11T12:56:36.834Z', @@ -106,7 +106,7 @@ export const ITEMS_WITH_MEMBERSHIPS: ApiConfig = { { id: 'ecafbd2a-5688-11eb-be92-0242ac130002', item: sampleItems[0], - permission: PermissionLevel.Write, + permission: 'write', account: MEMBERS.BOB, creator: MEMBERS.ANNA, updatedAt: '2021-08-11T12:56:36.834Z', diff --git a/cypress/e2e/builder/fixtures/publish/publish.ts b/cypress/e2e/builder/fixtures/publish/publish.ts index a24e65709..1ef507df9 100644 --- a/cypress/e2e/builder/fixtures/publish/publish.ts +++ b/cypress/e2e/builder/fixtures/publish/publish.ts @@ -8,7 +8,6 @@ import { PackedH5PItemFactory, PackedLinkItemFactory, PackedShortcutItemFactory, - PermissionLevel, } from '@graasp/sdk'; import { v4 } from 'uuid'; @@ -50,7 +49,7 @@ export const createPublicItemByType = ( extra: {} as never, settings: {}, createdAt: new Date().toISOString(), - permission: PermissionLevel.Admin, + permission: 'admin', ...publicVisibility, }; default: diff --git a/cypress/e2e/builder/invitations/createInvitation.cy.ts b/cypress/e2e/builder/invitations/createInvitation.cy.ts index 98f4f75f4..9607a4a25 100644 --- a/cypress/e2e/builder/invitations/createInvitation.cy.ts +++ b/cypress/e2e/builder/invitations/createInvitation.cy.ts @@ -1,8 +1,6 @@ -import { - PackedFolderItemFactory, - PermissionLevel, - PermissionLevelOptions, -} from '@graasp/sdk'; +import { PackedFolderItemFactory } from '@graasp/sdk'; + +import type { PermissionLevel } from '@/openapi/client/types.gen'; import { CREATE_MEMBERSHIP_FORM_ID, @@ -21,7 +19,7 @@ const inviteItem = ({ }: { id: string; email: string; - permission: PermissionLevelOptions; + permission: PermissionLevel; submit?: boolean; }) => { cy.get(`#${buildShareButtonId(id)}`).click(); @@ -44,7 +42,7 @@ describe('Create Invitation', () => { // invite const email = 'mock@email.com'; - const permission = PermissionLevel.Read; + const permission = 'read'; inviteItem({ id, email, permission }); cy.wait('@postInvitations').then(({ request: { url, body } }) => { @@ -68,7 +66,7 @@ describe('Create Invitation', () => { id: '79c25df6-8f2b-4bba-be9b-6459b2694ee7', item, account: MEMBERS.ANNA, - permission: PermissionLevel.Admin, + permission: 'admin' as PermissionLevel, createdAt: '2024-02-05T16:45:00Z', updatedAt: '2024-02-05T16:45:00Z', }, @@ -83,7 +81,7 @@ describe('Create Invitation', () => { // person to invite const { email } = MEMBERS.ANNA; - inviteItem({ id, email, permission: PermissionLevel.Read }); + inviteItem({ id, email, permission: 'read' }); cy.get(`#${SHARE_ITEM_SHARE_BUTTON_ID}`).should('be.disabled'); }); @@ -97,7 +95,7 @@ describe('Create Invitation', () => { // invite const email = 'mock'; - const permission = PermissionLevel.Read; + const permission = 'read'; inviteItem({ id, email, permission }); cy.get(`#${SHARE_ITEM_SHARE_BUTTON_ID}`).should('be.disabled'); diff --git a/cypress/e2e/builder/invitations/editInvitation.cy.ts b/cypress/e2e/builder/invitations/editInvitation.cy.ts index 9fa42ca70..106991085 100644 --- a/cypress/e2e/builder/invitations/editInvitation.cy.ts +++ b/cypress/e2e/builder/invitations/editInvitation.cy.ts @@ -1,4 +1,4 @@ -import { PermissionLevel, PermissionLevelOptions } from '@graasp/sdk'; +import type { PermissionLevel } from '@/openapi/client/types.gen'; import { ITEM_MEMBERSHIP_PERMISSION_SELECT_CLASS, @@ -16,7 +16,7 @@ const editInvitation = ({ }: { itemId: string; id: string; - permission: PermissionLevelOptions; + permission: PermissionLevel; }) => { cy.get(`#${buildShareButtonId(itemId)}`).click(); cy.get(`#${buildInvitationTableRowId(id)} [aria-label="Edit"]`).click(); @@ -34,7 +34,7 @@ describe('Edit Invitation', () => { cy.visit(buildItemPath(id)); // update membership - const permission = PermissionLevel.Read; + const permission = 'read'; const { id: iId } = invitations[1]; editInvitation({ itemId: id, id: iId, permission }); @@ -52,7 +52,7 @@ describe('Edit Invitation', () => { cy.visit(buildItemPath(id)); // update membership - const permission = PermissionLevel.Admin; + const permission = 'admin'; const { id: iId } = invitations[0]; editInvitation({ itemId: id, id: iId, permission }); diff --git a/cypress/e2e/builder/invitations/viewInvitation.cy.ts b/cypress/e2e/builder/invitations/viewInvitation.cy.ts index a95298748..352006d47 100644 --- a/cypress/e2e/builder/invitations/viewInvitation.cy.ts +++ b/cypress/e2e/builder/invitations/viewInvitation.cy.ts @@ -1,4 +1,6 @@ -import { PackedFolderItemFactory, PermissionLevel } from '@graasp/sdk'; +import { PackedFolderItemFactory } from '@graasp/sdk'; + +import type { PermissionLevel } from '@/openapi/client/types.gen'; import { ITEM_RESEND_INVITATION_BUTTON_CLASS, @@ -43,15 +45,12 @@ describe('View Invitations', () => { describe('Cannot view Invitations for writers and readers', () => { it('view invitation in share item modal write-only mode', () => { - const item = PackedFolderItemFactory( - {}, - { permission: PermissionLevel.Write }, - ); + const item = PackedFolderItemFactory({}, { permission: 'write' }); const invitations = [ { id: 'ecafbd2a-5688-11eb-be92-0242ac130005', item, - permission: PermissionLevel.Write, + permission: 'write' as PermissionLevel, email: MEMBERS.CEDRIC.email, createdAt: '2021-08-11T12:56:36.834Z', updatedAt: '2021-08-11T12:56:36.834Z', @@ -60,7 +59,7 @@ describe('Cannot view Invitations for writers and readers', () => { { id: 'ecafbd1a-5688-11eb-be93-0242ac130006', item, - permission: PermissionLevel.Read, + permission: 'read' as PermissionLevel, email: MEMBERS.DAVID.email, createdAt: '2021-08-11T12:56:36.834Z', updatedAt: '2021-08-11T12:56:36.834Z', diff --git a/cypress/e2e/builder/item/authorization/itemLogin/itemLoginSetting.cy.ts b/cypress/e2e/builder/item/authorization/itemLogin/itemLoginSetting.cy.ts index f39ae38a0..7aaeaa34f 100644 --- a/cypress/e2e/builder/item/authorization/itemLogin/itemLoginSetting.cy.ts +++ b/cypress/e2e/builder/item/authorization/itemLogin/itemLoginSetting.cy.ts @@ -3,7 +3,6 @@ import { ItemLoginSchemaStatus, ItemLoginSchemaType, PackedFolderItemFactory, - PermissionLevel, } from '@graasp/sdk'; import { @@ -83,7 +82,7 @@ describe('Item Login', () => { it('read permission', () => { const item = addItemLoginSchema( - PackedFolderItemFactory({}, { permission: PermissionLevel.Read }), + PackedFolderItemFactory({}, { permission: 'read' }), ItemLoginSchemaType.UsernameAndPassword, ); cy.setUpApi({ @@ -150,7 +149,7 @@ describe('Item Login Delete Button', () => { buildItemMembership({ item, account: guest, - permission: PermissionLevel.Read, + permission: 'read', }), ], }, @@ -184,7 +183,7 @@ describe('Item Login Delete Button', () => { buildItemMembership({ item, account: guest, - permission: PermissionLevel.Read, + permission: 'read', }), ], }, diff --git a/cypress/e2e/builder/item/hide/hideItem.cy.ts b/cypress/e2e/builder/item/hide/hideItem.cy.ts index f2e77510a..8e0084f78 100644 --- a/cypress/e2e/builder/item/hide/hideItem.cy.ts +++ b/cypress/e2e/builder/item/hide/hideItem.cy.ts @@ -1,4 +1,4 @@ -import { PackedFolderItemFactory, PermissionLevel } from '@graasp/sdk'; +import { PackedFolderItemFactory } from '@graasp/sdk'; import { HIDDEN_ITEM_BUTTON_CLASS, @@ -24,7 +24,7 @@ const HIDDEN_ITEM: ItemForTest = { memberships: [ { item: hiddenItem, - permission: PermissionLevel.Admin, + permission: 'admin', account: MEMBERS.ANNA, creator: MEMBERS.ANNA, id: 'ecbfbd2a-5688-12db-ae93-0242ac130002', @@ -33,7 +33,7 @@ const HIDDEN_ITEM: ItemForTest = { }, { item: hiddenItem, - permission: PermissionLevel.Read, + permission: 'read', account: MEMBERS.BOB, creator: MEMBERS.ANNA, id: 'ecbfbd2a-5688-12db-ae93-0242ac130002', @@ -48,7 +48,7 @@ const CHILD_HIDDEN_ITEM = PackedFolderItemFactory({ parentItem: HIDDEN_ITEM }); const ITEM = PackedFolderItemFactory( {}, { - permission: PermissionLevel.Admin, + permission: 'admin', }, ); diff --git a/cypress/e2e/builder/item/publish/publishedItem.cy.ts b/cypress/e2e/builder/item/publish/publishedItem.cy.ts index 349d7c9bc..2a9ba49e0 100644 --- a/cypress/e2e/builder/item/publish/publishedItem.cy.ts +++ b/cypress/e2e/builder/item/publish/publishedItem.cy.ts @@ -5,7 +5,6 @@ import { ItemValidationStatus, PackedFolderItemFactory, PackedItem, - PermissionLevel, PublicationStatus, PublishableItemTypeChecker, } from '@graasp/sdk'; @@ -116,12 +115,12 @@ describe('Unauthorized members should not have access to publish tab', () => { }); it('Readers should not view publish tab', () => { - item = PackedFolderItemFactory({}, { permission: PermissionLevel.Read }); + item = PackedFolderItemFactory({}, { permission: 'read' }); setUpAndVisitItemPage(item, { currentMember: MEMBERS.BOB }); }); it('Writers should not view publish tab', () => { - item = PackedFolderItemFactory({}, { permission: PermissionLevel.Write }); + item = PackedFolderItemFactory({}, { permission: 'write' }); setUpAndVisitItemPage(item, { currentMember: MEMBERS.BOB }); }); }); diff --git a/cypress/e2e/builder/item/publish/tags.cy.ts b/cypress/e2e/builder/item/publish/tags.cy.ts index 3ed6a1c33..9ab7dbdc1 100644 --- a/cypress/e2e/builder/item/publish/tags.cy.ts +++ b/cypress/e2e/builder/item/publish/tags.cy.ts @@ -1,8 +1,4 @@ -import { - PackedFolderItemFactory, - PermissionLevel, - TagCategory, -} from '@graasp/sdk'; +import { PackedFolderItemFactory, TagCategory } from '@graasp/sdk'; import { ITEM_HEADER_ID, @@ -25,7 +21,7 @@ const ITEM_WITH_TAGS = { displayCoEditors: true, }, }, - { permission: PermissionLevel.Admin }, + { permission: 'admin' }, ), tags: SAMPLE_TAGS.slice(0, 2), }; @@ -45,7 +41,7 @@ describe('Customized Tags', () => { const packedItem = PackedFolderItemFactory( {}, { - permission: PermissionLevel.Admin, + permission: 'admin', publicVisibility: { type: 'public' }, }, ); @@ -200,7 +196,7 @@ describe('Tags permissions', () => { it('Read-only user cannot edit tags', () => { const item = PackedFolderItemFactory( {}, - { permission: PermissionLevel.Read, publicVisibility: {} }, + { permission: 'read', publicVisibility: {} }, ); const publishedItem: ItemForTest = { ...item, diff --git a/cypress/e2e/builder/item/settings/itemSettings.cy.ts b/cypress/e2e/builder/item/settings/itemSettings.cy.ts index 3b92dbadd..47d8c9f84 100644 --- a/cypress/e2e/builder/item/settings/itemSettings.cy.ts +++ b/cypress/e2e/builder/item/settings/itemSettings.cy.ts @@ -5,7 +5,6 @@ import { PackedFileItemFactory, PackedFolderItemFactory, PackedLinkItemFactory, - PermissionLevel, formatFileSize, getFileExtra, } from '@graasp/sdk'; @@ -36,10 +35,7 @@ import { buildItemPath, buildItemSettingsPath } from '../../utils'; describe('Item Settings', () => { describe('read rights', () => { - const item = PackedFolderItemFactory( - {}, - { permission: PermissionLevel.Read }, - ); + const item = PackedFolderItemFactory({}, { permission: 'read' }); beforeEach(() => { cy.setUpApi({ @@ -495,10 +491,7 @@ describe('Item Settings', () => { describe('in item menu', () => { describe('read', () => { - const item = PackedFolderItemFactory( - {}, - { permission: PermissionLevel.Read }, - ); + const item = PackedFolderItemFactory({}, { permission: 'read' }); const itemId = item.id; beforeEach(() => { cy.setUpApi({ @@ -513,10 +506,7 @@ describe('Item Settings', () => { }); }); describe('admin', () => { - const item = PackedFolderItemFactory( - {}, - { permission: PermissionLevel.Admin }, - ); + const item = PackedFolderItemFactory({}, { permission: 'admin' }); const itemId = item.id; beforeEach(() => { cy.setUpApi({ diff --git a/cypress/e2e/builder/item/share/changeVisibility.cy.ts b/cypress/e2e/builder/item/share/changeVisibility.cy.ts index 18387fdb9..f5343ff0b 100644 --- a/cypress/e2e/builder/item/share/changeVisibility.cy.ts +++ b/cypress/e2e/builder/item/share/changeVisibility.cy.ts @@ -3,7 +3,6 @@ import { ItemLoginSchemaStatus, ItemLoginSchemaType, PackedFolderItemFactory, - PermissionLevel, PublicationStatus, } from '@graasp/sdk'; @@ -115,7 +114,7 @@ describe('Visibility of an Item', () => { buildItemMembership({ item, account: guest, - permission: PermissionLevel.Read, + permission: 'read', }), ], }, diff --git a/cypress/e2e/builder/item/share/shortLink.cy.ts b/cypress/e2e/builder/item/share/shortLink.cy.ts index 661554f5f..65103a70d 100644 --- a/cypress/e2e/builder/item/share/shortLink.cy.ts +++ b/cypress/e2e/builder/item/share/shortLink.cy.ts @@ -1,9 +1,4 @@ -import { - Context, - PackedFolderItemFactory, - PermissionLevel, - ShortLink, -} from '@graasp/sdk'; +import { Context, PackedFolderItemFactory, ShortLink } from '@graasp/sdk'; import { StatusCodes } from 'http-status-codes'; @@ -389,8 +384,8 @@ describe('Short links', () => { let shortLinks: ShortLink[]; const READ_ITEMS = [ - PackedFolderItemFactory({}, { permission: PermissionLevel.Read }), - PackedFolderItemFactory({}, { permission: PermissionLevel.Read }), + PackedFolderItemFactory({}, { permission: 'read' }), + PackedFolderItemFactory({}, { permission: 'read' }), ]; const itemId = READ_ITEMS[0].id; diff --git a/cypress/e2e/builder/item/view/viewFolder.cy.ts b/cypress/e2e/builder/item/view/viewFolder.cy.ts index 931b8dfdc..11ebd30c5 100644 --- a/cypress/e2e/builder/item/view/viewFolder.cy.ts +++ b/cypress/e2e/builder/item/view/viewFolder.cy.ts @@ -2,7 +2,6 @@ import { GuestFactory, ItemLoginSchemaFactory, PackedFolderItemFactory, - PermissionLevel, } from '@graasp/sdk'; import { @@ -36,10 +35,7 @@ const children = [child1, child2, child3, child4]; const items = [parentItem, item1, ...children]; describe('View folder as guest', () => { it('Show limited features', () => { - const item = PackedFolderItemFactory( - {}, - { permission: PermissionLevel.Read }, - ); + const item = PackedFolderItemFactory({}, { permission: 'read' }); const guest = GuestFactory({ itemLoginSchema: ItemLoginSchemaFactory({ item, @@ -64,10 +60,7 @@ describe('View folder as guest', () => { describe('View folder as reader', () => { it('Show limited features', () => { - const item = PackedFolderItemFactory( - {}, - { permission: PermissionLevel.Read }, - ); + const item = PackedFolderItemFactory({}, { permission: 'read' }); cy.setUpApi({ items: [item], }); diff --git a/cypress/e2e/builder/memberships/createItemMembership.cy.ts b/cypress/e2e/builder/memberships/createItemMembership.cy.ts index 8976335c3..63ba1b532 100644 --- a/cypress/e2e/builder/memberships/createItemMembership.cy.ts +++ b/cypress/e2e/builder/memberships/createItemMembership.cy.ts @@ -1,9 +1,6 @@ -import { - PackedFileItemFactory, - PackedFolderItemFactory, - PermissionLevel, - PermissionLevelOptions, -} from '@graasp/sdk'; +import { PackedFileItemFactory, PackedFolderItemFactory } from '@graasp/sdk'; + +import type { PermissionLevel } from '@/openapi/client/types.gen'; import { CREATE_MEMBERSHIP_FORM_ID, @@ -25,7 +22,7 @@ const shareItem = ({ submit, }: { email: string; - permission: PermissionLevelOptions; + permission: PermissionLevel; submit?: boolean; id: string; }) => { @@ -54,7 +51,7 @@ describe('Create Membership', () => { // share const member = MEMBERS.FANNY; - const permission = PermissionLevel.Read; + const permission = 'read'; shareItem({ id, email: member.email, permission }); cy.wait('@postInvitations').then( @@ -88,7 +85,7 @@ describe('Create Membership', () => { // share const member = MEMBERS.FANNY; - const permission = PermissionLevel.Admin; + const permission = 'admin'; cy.fillShareForm({ email: member.email, permission, @@ -100,7 +97,7 @@ describe('Create Membership', () => { cy.get(`#${SHARE_ITEM_EMAIL_INPUT_ID}`).should('be.empty'); cy.get(`.${ITEM_MEMBERSHIP_PERMISSION_SELECT_CLASS} input`).should( 'have.value', - PermissionLevel.Read, + 'read', ); }); @@ -113,7 +110,7 @@ describe('Create Membership', () => { // share const member = MEMBERS.FANNY; - const permission = PermissionLevel.Admin; + const permission = 'admin'; shareItem({ id, email: `${member.email}{Enter}`, @@ -149,7 +146,7 @@ describe('Create Membership', () => { { id: '97ebc357-5c7a-438c-b684-a34a35cf77a2', item: ITEM, - permission: PermissionLevel.Read, + permission: 'read', account, createdAt: '2021-08-11T12:56:36.834Z', updatedAt: '2021-08-11T12:56:36.834Z', @@ -165,7 +162,7 @@ describe('Create Membership', () => { cy.visit(buildItemPath(id)); // fill - const permission = PermissionLevel.Read; + const permission = 'read'; shareItem({ id, email: account.email, permission }); cy.get(`#${SHARE_ITEM_SHARE_BUTTON_ID}`).should('be.disabled'); @@ -188,7 +185,7 @@ describe('Create Membership', () => { cy.visit(buildItemPath(id)); // fill - const permission = PermissionLevel.Read; + const permission = 'read'; shareItem({ id, email, permission }); cy.get(`#${SHARE_ITEM_SHARE_BUTTON_ID}`).should('be.disabled'); @@ -202,7 +199,7 @@ describe('Create Membership', () => { cy.visit(buildItemPath(id)); // fill - const permission = PermissionLevel.Read; + const permission = 'read'; shareItem({ id, email: 'wrong', permission }); cy.get(`#${SHARE_ITEM_SHARE_BUTTON_ID}`).should('be.disabled'); diff --git a/cypress/e2e/builder/memberships/deleteItemMembership.cy.ts b/cypress/e2e/builder/memberships/deleteItemMembership.cy.ts index 6f6fc2163..3e46db221 100644 --- a/cypress/e2e/builder/memberships/deleteItemMembership.cy.ts +++ b/cypress/e2e/builder/memberships/deleteItemMembership.cy.ts @@ -1,8 +1,4 @@ -import { - ItemMembership, - PackedFolderItemFactory, - PermissionLevel, -} from '@graasp/sdk'; +import { ItemMembership, PackedFolderItemFactory } from '@graasp/sdk'; import { v4 } from 'uuid'; @@ -67,13 +63,13 @@ describe('Delete Membership', () => { memberships: [ { id: v4(), - permission: PermissionLevel.Admin, + permission: 'admin', account: CURRENT_MEMBER, item, } as unknown as ItemMembership, { id: v4(), - permission: PermissionLevel.Read, + permission: 'read', account: MEMBERS.BOB, item, } as unknown as ItemMembership, diff --git a/cypress/e2e/builder/memberships/editItemMembership.cy.ts b/cypress/e2e/builder/memberships/editItemMembership.cy.ts index 15b3f677a..8bc0221d0 100644 --- a/cypress/e2e/builder/memberships/editItemMembership.cy.ts +++ b/cypress/e2e/builder/memberships/editItemMembership.cy.ts @@ -1,9 +1,6 @@ -import { - ItemMembership, - PackedFolderItemFactory, - PermissionLevel, - PermissionLevelOptions, -} from '@graasp/sdk'; +import { ItemMembership, PackedFolderItemFactory } from '@graasp/sdk'; + +import type { PermissionLevel } from '@/openapi/client/types.gen'; import { ITEM_MEMBERSHIP_PERMISSION_SELECT_CLASS, @@ -21,7 +18,7 @@ const openPermissionSelect = ({ permission, }: { id: ItemMembership['id']; - permission: PermissionLevelOptions; + permission: PermissionLevel; }) => { cy.get(`#${buildItemMembershipRowEditButtonId(id)}`).click(); const select = cy.get(`.${ITEM_MEMBERSHIP_PERMISSION_SELECT_CLASS}`); @@ -36,7 +33,7 @@ const editItemMembership = ({ }: { id: string; itemId: string; - permission: PermissionLevelOptions; + permission: PermissionLevel; }) => { cy.get(`#${buildShareButtonId(itemId)}`).click(); openPermissionSelect({ id, permission }); @@ -52,7 +49,7 @@ describe('Edit Membership', () => { cy.visit(buildItemPath(id)); // update membership - const permission = PermissionLevel.Read; + const permission = 'read'; const { id: mId } = memberships[1]; editItemMembership({ itemId: id, id: mId, permission }); @@ -70,7 +67,7 @@ describe('Edit Membership', () => { cy.visit(buildItemPath(id)); // update membership - const permission = PermissionLevel.Admin; + const permission = 'admin'; const { id: mId } = memberships[1]; editItemMembership({ itemId: id, id: mId, permission }); @@ -86,7 +83,7 @@ describe('Edit Membership', () => { const memberships = [ { id: 'membership-0', - permission: PermissionLevel.Admin, + permission: 'admin' as PermissionLevel, account: CURRENT_MEMBER, item: child, createdAt: '2021-08-11T12:56:36.834Z', @@ -94,7 +91,7 @@ describe('Edit Membership', () => { }, { id: 'membership-1', - permission: PermissionLevel.Write, + permission: 'write' as PermissionLevel, account: MEMBERS.BOB, createdAt: '2021-08-11T12:56:36.834Z', updatedAt: '2021-08-11T12:56:36.834Z', @@ -116,8 +113,6 @@ describe('Edit Membership', () => { openPermissionSelect(m); // should not show read - cy.get(`#${buildPermissionOptionId(PermissionLevel.Read)}`).should( - 'not.exist', - ); + cy.get(`#${buildPermissionOptionId('read')}`).should('not.exist'); }); }); diff --git a/cypress/e2e/builder/memberships/membershipRequestTable.cy.ts b/cypress/e2e/builder/memberships/membershipRequestTable.cy.ts index 542f9db98..b56d9dfb6 100644 --- a/cypress/e2e/builder/memberships/membershipRequestTable.cy.ts +++ b/cypress/e2e/builder/memberships/membershipRequestTable.cy.ts @@ -1,8 +1,4 @@ -import { - MemberFactory, - PackedFolderItemFactory, - PermissionLevel, -} from '@graasp/sdk'; +import { MemberFactory, PackedFolderItemFactory } from '@graasp/sdk'; import { MEMBERSHIPS_TAB_SELECTOR, @@ -38,7 +34,7 @@ describe('Membership requests table', () => { it('Writers cannot see', () => { const itemWithWrite = PackedFolderItemFactory( { creator: CURRENT_MEMBER }, - { permission: PermissionLevel.Write }, + { permission: 'write' }, ); cy.setUpApi({ items: [itemWithWrite], membershipRequests }); cy.visit(`/builder/items/${itemWithWrite.id}/share`); @@ -83,7 +79,7 @@ describe('Membership requests table', () => { cy.wait('@postItemMembership').then(({ request: { body } }) => { expect(body.accountId).to.equal(member.id); - expect(body.permission).to.equal(PermissionLevel.Read); + expect(body.permission).to.equal('read'); }); }); it('reject membership requests', () => { diff --git a/cypress/e2e/builder/memberships/viewMemberships.cy.ts b/cypress/e2e/builder/memberships/viewMemberships.cy.ts index 8b6cdeabb..7e9f37ec1 100644 --- a/cypress/e2e/builder/memberships/viewMemberships.cy.ts +++ b/cypress/e2e/builder/memberships/viewMemberships.cy.ts @@ -5,10 +5,10 @@ import { ItemLoginSchemaType, Member, PackedFolderItemFactory, - PermissionLevel, - PermissionLevelOptions, } from '@graasp/sdk'; +import type { PermissionLevel } from '@/openapi/client/types.gen'; + import { buildDataCyWrapper, buildItemMembershipRowDeleteButtonId, @@ -24,33 +24,33 @@ import { buildItemPath, buildItemSharePath } from '../utils'; const itemWithAdmin = { ...PackedFolderItemFactory() }; const adminMembership = buildItemMembership({ item: itemWithAdmin, - permission: PermissionLevel.Admin, + permission: 'admin', account: MEMBERS.ANNA, creator: MEMBERS.ANNA, }); const membershipsWithoutAdmin = [ buildItemMembership({ item: itemWithAdmin, - permission: PermissionLevel.Write, + permission: 'write', account: MEMBERS.BOB, creator: MEMBERS.ANNA, }), buildItemMembership({ item: itemWithAdmin, - permission: PermissionLevel.Write, + permission: 'write', account: MEMBERS.CEDRIC, creator: MEMBERS.ANNA, }), buildItemMembership({ item: itemWithAdmin, - permission: PermissionLevel.Read, + permission: 'read', account: MEMBERS.DAVID, creator: MEMBERS.ANNA, }), ]; const getLocalizedPermissionText = ( - permission: 'disabled' | PermissionLevelOptions, + permission: 'disabled' | PermissionLevel, ) => { switch (permission) { case 'disabled': @@ -73,7 +73,7 @@ const checkItemMembershipRow = ({ }: { id: string; name: string; - permission: 'disabled' | PermissionLevelOptions; + permission: 'disabled' | PermissionLevel; }): void => { cy.get(buildDataCyWrapper(buildItemMembershipRowId(id))) .should('contain', name) @@ -125,19 +125,19 @@ describe('View Memberships - Hidden item', () => { const hiddenItem = PackedFolderItemFactory({}, { hiddenVisibility: {} }); const adminHiddenMembership = buildItemMembership({ item: hiddenItem, - permission: PermissionLevel.Admin, + permission: 'admin', account: MEMBERS.ANNA, creator: MEMBERS.ANNA, }); const writeHiddenMembership = buildItemMembership({ item: hiddenItem, - permission: PermissionLevel.Write, + permission: 'write', account: MEMBERS.EVAN, creator: MEMBERS.ANNA, }); const readHiddenMembership = buildItemMembership({ item: hiddenItem, - permission: PermissionLevel.Read, + permission: 'read', account: MEMBERS.GARRY, creator: MEMBERS.ANNA, }); @@ -148,7 +148,7 @@ describe('View Memberships - Hidden item', () => { const guestMemberships = [ buildItemMembership({ item: hiddenItem, - permission: PermissionLevel.Read, + permission: 'read', account: GuestFactory({ itemLoginSchema, }), @@ -156,7 +156,7 @@ describe('View Memberships - Hidden item', () => { }), buildItemMembership({ item: hiddenItem, - permission: PermissionLevel.Read, + permission: 'read', account: GuestFactory({ itemLoginSchema, }), @@ -224,7 +224,7 @@ describe('View Memberships - Hidden item', () => { const guestMemberships = [ buildItemMembership({ item: itemWithAdmin, - permission: PermissionLevel.Read, + permission: 'read', account: GuestFactory({ itemLoginSchema, }), @@ -232,7 +232,7 @@ describe('View Memberships - Hidden item', () => { }), buildItemMembership({ item: itemWithAdmin, - permission: PermissionLevel.Read, + permission: 'read', account: GuestFactory({ itemLoginSchema, }), @@ -275,7 +275,7 @@ describe('View Memberships - Hidden item', () => { const guestMemberships = [ buildItemMembership({ item: itemWithAdmin, - permission: PermissionLevel.Read, + permission: 'read', account: GuestFactory({ itemLoginSchema, }), @@ -283,7 +283,7 @@ describe('View Memberships - Hidden item', () => { }), buildItemMembership({ item: itemWithAdmin, - permission: PermissionLevel.Read, + permission: 'read', account: GuestFactory({ itemLoginSchema, }), @@ -328,7 +328,7 @@ describe('View Memberships - Guest', () => { const guestMemberships = [ buildItemMembership({ item: itemWithAdmin, - permission: PermissionLevel.Read, + permission: 'read', account: GuestFactory({ itemLoginSchema, }), @@ -336,7 +336,7 @@ describe('View Memberships - Guest', () => { }), buildItemMembership({ item: itemWithAdmin, - permission: PermissionLevel.Read, + permission: 'read', account: GuestFactory({ itemLoginSchema, }), @@ -378,7 +378,7 @@ describe('View Memberships - Guest', () => { const guestMemberships = [ buildItemMembership({ item: itemWithAdmin, - permission: PermissionLevel.Read, + permission: 'read', account: GuestFactory({ itemLoginSchema, }), @@ -386,7 +386,7 @@ describe('View Memberships - Guest', () => { }), buildItemMembership({ item: itemWithAdmin, - permission: PermissionLevel.Read, + permission: 'read', account: GuestFactory({ itemLoginSchema, }), @@ -429,7 +429,7 @@ describe('View Memberships - Guest', () => { const guestMemberships = [ buildItemMembership({ item: itemWithAdmin, - permission: PermissionLevel.Read, + permission: 'read', account: GuestFactory({ itemLoginSchema, }), @@ -437,7 +437,7 @@ describe('View Memberships - Guest', () => { }), buildItemMembership({ item: itemWithAdmin, - permission: PermissionLevel.Read, + permission: 'read', account: GuestFactory({ itemLoginSchema, }), @@ -475,26 +475,23 @@ describe('View Memberships - Guest', () => { describe('View Memberships Read-Only Mode', () => { it('view membership in settings read-only mode', () => { - const item = PackedFolderItemFactory( - {}, - { permission: PermissionLevel.Write }, - ); + const item = PackedFolderItemFactory({}, { permission: 'write' }); const ownMembership = buildItemMembership({ item, - permission: PermissionLevel.Write, + permission: 'write', account: MEMBERS.ANNA, creator: MEMBERS.ANNA, }); const memberships = [ buildItemMembership({ item, - permission: PermissionLevel.Admin, + permission: 'admin', account: MEMBERS.BOB, creator: MEMBERS.ANNA, }), buildItemMembership({ item, - permission: PermissionLevel.Read, + permission: 'read', account: MEMBERS.CEDRIC, creator: MEMBERS.ANNA, }), diff --git a/cypress/e2e/player/chatbox.cy.ts b/cypress/e2e/player/chatbox.cy.ts index a6e70b185..40a573605 100644 --- a/cypress/e2e/player/chatbox.cy.ts +++ b/cypress/e2e/player/chatbox.cy.ts @@ -1,4 +1,4 @@ -import { PackedDocumentItemFactory, PermissionLevel } from '@graasp/sdk'; +import { PackedDocumentItemFactory } from '@graasp/sdk'; import { CHATBOX_DRAWER_ID, @@ -18,7 +18,7 @@ const GRAASP_DOCUMENT_ITEM_WITH_CHAT_BOX = PackedDocumentItemFactory( showChatbox: true, }, }, - { permission: PermissionLevel.Admin }, + { permission: 'admin' }, ); describe('Chatbox', () => { diff --git a/cypress/e2e/player/main.cy.ts b/cypress/e2e/player/main.cy.ts index f3819babf..b339b2a6b 100644 --- a/cypress/e2e/player/main.cy.ts +++ b/cypress/e2e/player/main.cy.ts @@ -1,8 +1,6 @@ -import { - DiscriminatedItem, - DocumentItemFactory, - PermissionLevel, -} from '@graasp/sdk'; +import { DiscriminatedItem, DocumentItemFactory } from '@graasp/sdk'; + +import type { PermissionLevel } from '@/openapi/client/types.gen'; import { FOLDER_NAME_TITLE_CLASS, @@ -40,17 +38,17 @@ import { const GRAASP_DOCUMENT_ITEM = DocumentItemFactory(); const items = [ - { ...GRAASP_LINK_ITEM, permission: PermissionLevel.Admin }, + { ...GRAASP_LINK_ITEM, permission: 'admin' as PermissionLevel }, { ...GRAASP_LINK_ITEM_IFRAME_ONLY, - permission: PermissionLevel.Admin, + permission: 'admin' as PermissionLevel, }, - { ...YOUTUBE_LINK_ITEM, permission: PermissionLevel.Admin }, - { ...IMAGE_ITEM_DEFAULT, permission: PermissionLevel.Admin }, - { ...VIDEO_ITEM_DEFAULT, permission: PermissionLevel.Admin }, - { ...PDF_ITEM_DEFAULT, permission: PermissionLevel.Admin }, - { ...GRAASP_DOCUMENT_ITEM, permission: PermissionLevel.Admin }, - { ...GRAASP_APP_ITEM, permission: PermissionLevel.Admin }, + { ...YOUTUBE_LINK_ITEM, permission: 'admin' as PermissionLevel }, + { ...IMAGE_ITEM_DEFAULT, permission: 'admin' as PermissionLevel }, + { ...VIDEO_ITEM_DEFAULT, permission: 'admin' as PermissionLevel }, + { ...PDF_ITEM_DEFAULT, permission: 'admin' as PermissionLevel }, + { ...GRAASP_DOCUMENT_ITEM, permission: 'admin' as PermissionLevel }, + { ...GRAASP_APP_ITEM, permission: 'admin' as PermissionLevel }, ...FOLDER_WITH_SUBFOLDER_ITEM.items, ...FOLDER_WITHOUT_CHILDREN_ORDER.items, ]; diff --git a/cypress/e2e/player/navigation.cy.ts b/cypress/e2e/player/navigation.cy.ts index 75eee5d98..e1f54bc7e 100644 --- a/cypress/e2e/player/navigation.cy.ts +++ b/cypress/e2e/player/navigation.cy.ts @@ -1,8 +1,4 @@ -import { - LinkItemFactory, - PackedFolderItemFactory, - PermissionLevel, -} from '@graasp/sdk'; +import { LinkItemFactory, PackedFolderItemFactory } from '@graasp/sdk'; import { NEXT_ITEM_NAV_BUTTON_ID, @@ -91,14 +87,14 @@ describe('Internal navigation', () => { name: 'Parent', creator: CURRENT_MEMBER, }, - { permission: PermissionLevel.Admin }, + { permission: 'admin' }, ); const target = PackedFolderItemFactory( { name: 'Target', creator: CURRENT_MEMBER, }, - { permission: PermissionLevel.Admin }, + { permission: 'admin' }, ); const url = new URL( `/player/${target.id}`, diff --git a/cypress/fixtures/analytics/items.ts b/cypress/fixtures/analytics/items.ts index 8eeb97abd..882dd6031 100644 --- a/cypress/fixtures/analytics/items.ts +++ b/cypress/fixtures/analytics/items.ts @@ -5,7 +5,6 @@ import { ItemType, PackedAppItemFactory, PackedFolderItemFactory, - PermissionLevel, } from '@graasp/sdk'; import { CURRENT_MEMBER, MEMBERS } from '../members'; @@ -77,7 +76,7 @@ export const CALC_APP_ITEM = PackedAppItemFactory( path: '820fb440_66dc_44d9_b6b4_bd767ac6085f', creator: CURRENT_MEMBER, }, - { permission: PermissionLevel.Admin }, + { permission: 'admin' }, ); export const APP_ITEM_WITH_PARENT = PackedAppItemFactory( @@ -87,7 +86,7 @@ export const APP_ITEM_WITH_PARENT = PackedAppItemFactory( creator: CURRENT_MEMBER, parentItem: MOCK_ITEMS[0], }, - { permission: PermissionLevel.Admin }, + { permission: 'admin' }, ); export const CALC_APP_ITEM_WITH_PARENT = PackedAppItemFactory( @@ -97,7 +96,7 @@ export const CALC_APP_ITEM_WITH_PARENT = PackedAppItemFactory( creator: CURRENT_MEMBER, parentItem: MOCK_ITEMS[0], }, - { permission: PermissionLevel.Admin }, + { permission: 'admin' }, ); export const ITEM_TO_EXPORT = PackedFolderItemFactory({ diff --git a/cypress/fixtures/apps.ts b/cypress/fixtures/apps.ts index 6cfe537a1..b4cf8eb7f 100644 --- a/cypress/fixtures/apps.ts +++ b/cypress/fixtures/apps.ts @@ -3,7 +3,6 @@ import { AppItemType, ItemType, PackedAppItemFactory, - PermissionLevel, } from '@graasp/sdk'; import { API_HOST } from '../support/env'; @@ -76,7 +75,7 @@ export const APP_USING_CONTEXT_ITEM: ItemForTest = PackedAppItemFactory( creator: CURRENT_MEMBER, }, { - permission: PermissionLevel.Admin, + permission: 'admin', }, ); diff --git a/cypress/fixtures/files.ts b/cypress/fixtures/files.ts index 243aec65c..84bb640e8 100644 --- a/cypress/fixtures/files.ts +++ b/cypress/fixtures/files.ts @@ -3,7 +3,6 @@ import { ItemType, MimeTypes, PackedFileItemFactory, - PermissionLevel, buildFileExtra, } from '@graasp/sdk'; @@ -108,7 +107,7 @@ export const IMAGE_ITEM_S3 = PackedFileItemFactory( }, }, { - permission: PermissionLevel.Admin, + permission: 'admin', }, ); @@ -133,7 +132,7 @@ export const VIDEO_ITEM_S3 = PackedFileItemFactory( showChatbox: false, }, }, - { permission: PermissionLevel.Admin }, + { permission: 'admin' }, ); export const PDF_ITEM_S3 = PackedFileItemFactory( @@ -154,5 +153,5 @@ export const PDF_ITEM_S3 = PackedFileItemFactory( showChatbox: false, }, }, - { permission: PermissionLevel.Admin }, + { permission: 'admin' }, ); diff --git a/cypress/fixtures/items.ts b/cypress/fixtures/items.ts index b1708f1db..149e5b168 100644 --- a/cypress/fixtures/items.ts +++ b/cypress/fixtures/items.ts @@ -4,7 +4,6 @@ import { ItemType, PackedDocumentItemFactory, PackedFolderItemFactory, - PermissionLevel, ShortcutItemFactory, buildPathFromIds, } from '@graasp/sdk'; @@ -87,7 +86,7 @@ export const FOLDER_WITH_SUBFOLDER_ITEM: { items: ItemForTest[] } = { }, }, { - permission: PermissionLevel.Admin, + permission: 'admin', }, ), { @@ -234,7 +233,7 @@ const getPinnedElementWithoutInheritance = (): ItemForTest[] => { name: 'Parent folder', creator: CURRENT_MEMBER, }, - { permission: PermissionLevel.Admin }, + { permission: 'admin' }, ); const children = [ PackedDocumentItemFactory( @@ -245,7 +244,7 @@ const getPinnedElementWithoutInheritance = (): ItemForTest[] => { parentItem: parent, creator: CURRENT_MEMBER, }, - { permission: PermissionLevel.Admin }, + { permission: 'admin' }, ), PackedFolderItemFactory( { @@ -254,7 +253,7 @@ const getPinnedElementWithoutInheritance = (): ItemForTest[] => { parentItem: parent, creator: CURRENT_MEMBER, }, - { permission: PermissionLevel.Admin }, + { permission: 'admin' }, ), PackedFolderItemFactory( { @@ -263,7 +262,7 @@ const getPinnedElementWithoutInheritance = (): ItemForTest[] => { parentItem: parent, creator: CURRENT_MEMBER, }, - { permission: PermissionLevel.Admin }, + { permission: 'admin' }, ), ]; const childrenOfChildren = [ diff --git a/cypress/fixtures/links.ts b/cypress/fixtures/links.ts index eb96a0c48..2e2bd19e2 100644 --- a/cypress/fixtures/links.ts +++ b/cypress/fixtures/links.ts @@ -2,7 +2,6 @@ import { ItemType, LinkItemType, PackedLinkItemFactory, - PermissionLevel, buildLinkExtra, } from '@graasp/sdk'; @@ -29,7 +28,7 @@ export const GRAASP_LINK_ITEM = PackedLinkItemFactory( showLinkIframe: true, }, }, - { permission: PermissionLevel.Admin }, + { permission: 'admin' }, ); export const GRAASP_LINK_ITEM_IFRAME_ONLY: LinkItemType = { @@ -61,5 +60,5 @@ export const YOUTUBE_LINK_ITEM: LinkItemType = PackedLinkItemFactory( showChatbox: false, }, }, - { permission: PermissionLevel.Admin }, + { permission: 'admin' }, ); diff --git a/cypress/fixtures/useCases/staticElectricity.ts b/cypress/fixtures/useCases/staticElectricity.ts index 3ec1bf844..4dc9aa060 100644 --- a/cypress/fixtures/useCases/staticElectricity.ts +++ b/cypress/fixtures/useCases/staticElectricity.ts @@ -6,7 +6,6 @@ import { ItemType, LinkItemFactory, PackedFolderItemFactory, - PermissionLevel, buildDocumentExtra, buildFileExtra, buildLinkExtra, @@ -33,7 +32,7 @@ export const STATIC_ELECTRICITY: { [ItemType.FOLDER]: {}, }, }, - { permission: PermissionLevel.Admin }, + { permission: 'admin' }, ), FolderItemFactory({ id: 'gcafbd2a-5688-11eb-ae92-0242ac130015', @@ -220,13 +219,13 @@ export const STATIC_ELECTRICITY: { }), ].map((i) => ({ ...i, - permission: PermissionLevel.Admin, + permission: 'admin', })), }; const items: ItemForTest[] = STATIC_ELECTRICITY.items.map((i) => ({ ...i, - permission: PermissionLevel.Read, + permission: 'read', })); export const PUBLIC_STATIC_ELECTRICITY = { items, diff --git a/cypress/support/commands.ts b/cypress/support/commands.ts index 8fccf8b77..7e2859c68 100644 --- a/cypress/support/commands.ts +++ b/cypress/support/commands.ts @@ -4,13 +4,14 @@ import { DiscriminatedItem, DocumentItemExtra, Member, - PermissionLevelOptions, PublicationStatus, getAppExtra, getDocumentExtra, getIdsFromPath, } from '@graasp/sdk'; +import type { PermissionLevel } from '@/openapi/client/types.gen'; + import { CUSTOM_APP_CYPRESS_ID, CUSTOM_APP_URL_ID, @@ -209,7 +210,7 @@ declare global { fillShareForm(args: { email: string; - permission: PermissionLevelOptions; + permission: PermissionLevel; submit?: boolean; selector?: string; }): void; diff --git a/cypress/support/server.ts b/cypress/support/server.ts index 4b22ea8b3..fecdd6318 100644 --- a/cypress/support/server.ts +++ b/cypress/support/server.ts @@ -15,7 +15,6 @@ import { ItemVisibilityType, Member, MembershipRequestStatus, - PermissionLevel, PermissionLevelCompare, PublicationStatus, RecycledItemData, @@ -108,7 +107,7 @@ const { } = API_ROUTES; const checkMembership = ({ item }: { item: ItemForTest }) => { - return PermissionLevelCompare.gte(item?.permission, PermissionLevel.Read); + return PermissionLevelCompare.gte(item?.permission, 'read'); }; export const redirectionReply = { @@ -2386,7 +2385,7 @@ export const mockGetItemMembershipsForItem = ( // return defined memberships or default membership const result = memberships || [ { - permission: PermissionLevel.Admin, + permission: 'admin', account: { ...creator, type: AccountType.Individual }, item, id: v4(), diff --git a/cypress/support/types.ts b/cypress/support/types.ts index 7ab739e40..3ae07b64b 100644 --- a/cypress/support/types.ts +++ b/cypress/support/types.ts @@ -15,7 +15,6 @@ import { ItemValidationGroup, MemberStorageItem, MembershipRequestStatus, - PermissionLevelOptions, PublicationStatus, RecycledItemData, ShortLink, @@ -23,7 +22,11 @@ import { ThumbnailsBySize, } from '@graasp/sdk'; -import { ItemVisibility, Profile } from '@/openapi/client/types.gen'; +import type { + ItemVisibility, + PermissionLevel, + Profile, +} from '@/openapi/client/types.gen'; export type ItemForTest = DiscriminatedItem & { geolocation?: Partial; @@ -36,7 +39,7 @@ export type ItemForTest = DiscriminatedItem & { memberships?: ItemMembership[]; invitations?: Partial[]; published?: ItemPublished; - permission?: PermissionLevelOptions | null; + permission?: PermissionLevel | null; public?: ItemVisibility; }; diff --git a/cypress/support/utils.ts b/cypress/support/utils.ts index de7386b81..8d2d87fe2 100644 --- a/cypress/support/utils.ts +++ b/cypress/support/utils.ts @@ -3,7 +3,6 @@ import { DiscriminatedItem, ItemMembership, Member, - PermissionLevel, PermissionLevelCompare, isChildOf, } from '@graasp/sdk'; @@ -146,10 +145,7 @@ export const checkMemberHasAccess = ({ items: ItemForTest[]; member: Member | null; }): undefined | { statusCode: number } => { - if ( - item.permission && - PermissionLevelCompare.gte(item.permission, PermissionLevel.Read) - ) { + if (item.permission && PermissionLevelCompare.gte(item.permission, 'read')) { return undefined; } @@ -163,7 +159,7 @@ export const checkMemberHasAccess = ({ i.memberships?.find( ({ account, permission }) => account.id === member?.id && - PermissionLevelCompare.gte(permission, PermissionLevel.Write), + PermissionLevelCompare.gte(permission, 'write'), ), ); const haveReadMembership = @@ -173,7 +169,7 @@ export const checkMemberHasAccess = ({ i.memberships?.find( ({ account, permission }) => account.id === member?.id && - PermissionLevelCompare.lt(permission, PermissionLevel.Write), + PermissionLevelCompare.lt(permission, 'write'), ), ) ?? false; diff --git a/cypress/support/viewUtils.ts b/cypress/support/viewUtils.ts index df963f3ce..b7264dd60 100644 --- a/cypress/support/viewUtils.ts +++ b/cypress/support/viewUtils.ts @@ -2,7 +2,6 @@ import { CompleteMember, DocumentItemType, LinkItemType, - PermissionLevel, PermissionLevelCompare, getDocumentExtra, getLinkExtra, @@ -40,7 +39,7 @@ export const expectItemHeaderLayout = ({ itemPath: path, })?.permission; const canEditSettings = permission - ? PermissionLevelCompare.gte(permission, PermissionLevel.Write) + ? PermissionLevelCompare.gte(permission, 'write') : false; if (canEditSettings) { diff --git a/src/modules/analytics/AnalyticsSidebar.tsx b/src/modules/analytics/AnalyticsSidebar.tsx index 6e7461a0e..911981998 100644 --- a/src/modules/analytics/AnalyticsSidebar.tsx +++ b/src/modules/analytics/AnalyticsSidebar.tsx @@ -4,7 +4,7 @@ import { useTranslation } from 'react-i18next'; import AppsIcon from '@mui/icons-material/Apps'; import { Stack } from '@mui/material'; -import { PermissionLevel, PermissionLevelCompare } from '@graasp/sdk'; +import { PermissionLevelCompare } from '@graasp/sdk'; import { ChartPieIcon, FileChartPieIcon } from 'lucide-react'; @@ -54,7 +54,7 @@ export function AnalyticsSidebar({ // read access users don't have permission over export actions if ( item?.permission && - PermissionLevelCompare.gte(item.permission, PermissionLevel.Write) + PermissionLevelCompare.gte(item.permission, 'write') ) { menuItems.push( { } // only show export chat when user has admin right on the item - const isAdmin = item.permission === PermissionLevel.Admin; + const isAdmin = item.permission === 'admin'; return ( ( { } = useModalStatus({ isInitiallyOpen: copyOpen }); const canWrite = - item.permission && - PermissionLevelCompare.gte(item.permission, PermissionLevel.Write); + item.permission && PermissionLevelCompare.gte(item.permission, 'write'); const canAdmin = - item.permission && - PermissionLevelCompare.gte(item.permission, PermissionLevel.Admin); + item.permission && PermissionLevelCompare.gte(item.permission, 'admin'); if (!member?.id) { return null; diff --git a/src/modules/builder/components/item/header/ItemHeaderActions.tsx b/src/modules/builder/components/item/header/ItemHeaderActions.tsx index 7d6a9cfb7..4466671f4 100644 --- a/src/modules/builder/components/item/header/ItemHeaderActions.tsx +++ b/src/modules/builder/components/item/header/ItemHeaderActions.tsx @@ -3,11 +3,7 @@ import { useTranslation } from 'react-i18next'; import { Stack } from '@mui/material'; -import { - DiscriminatedItem, - PermissionLevel, - PermissionLevelCompare, -} from '@graasp/sdk'; +import { DiscriminatedItem, PermissionLevelCompare } from '@graasp/sdk'; import { NS } from '@/config/constants'; import { hooks } from '@/config/queryClient'; @@ -46,10 +42,10 @@ const ItemHeaderActions = ({ } = useModalStatus(); const canWrite = item?.permission - ? PermissionLevelCompare.gte(item.permission, PermissionLevel.Write) + ? PermissionLevelCompare.gte(item.permission, 'write') : false; const canAdmin = item?.permission - ? PermissionLevelCompare.gte(item.permission, PermissionLevel.Admin) + ? PermissionLevelCompare.gte(item.permission, 'admin') : false; // if id is defined, we are looking at an item diff --git a/src/modules/builder/components/item/settings/AdminChatSettings.tsx b/src/modules/builder/components/item/settings/AdminChatSettings.tsx index e64753fc6..b0da3778b 100644 --- a/src/modules/builder/components/item/settings/AdminChatSettings.tsx +++ b/src/modules/builder/components/item/settings/AdminChatSettings.tsx @@ -1,7 +1,7 @@ import type { JSX } from 'react'; import { useTranslation } from 'react-i18next'; -import { PackedItem, PermissionLevel } from '@graasp/sdk'; +import { PackedItem } from '@graasp/sdk'; import { MessageSquareTextIcon } from 'lucide-react'; @@ -22,9 +22,7 @@ const AdminChatSettings = ({ item }: Props): JSX.Element | null => { const { t } = useTranslation(NS.Builder); const { data: currentMember } = hooks.useCurrentMember(); // only show export chat when user has admin right on the item - const isAdmin = currentMember - ? item?.permission === PermissionLevel.Admin - : false; + const isAdmin = currentMember ? item?.permission === 'admin' : false; if (!isAdmin) { return null; diff --git a/src/modules/builder/components/item/settings/LanguageSelect.tsx b/src/modules/builder/components/item/settings/LanguageSelect.tsx index e88c39f7a..3ecd77e5c 100644 --- a/src/modules/builder/components/item/settings/LanguageSelect.tsx +++ b/src/modules/builder/components/item/settings/LanguageSelect.tsx @@ -2,11 +2,7 @@ import type { JSX } from 'react'; import { SelectProps } from '@mui/material'; -import { - PackedItem, - PermissionLevel, - PermissionLevelCompare, -} from '@graasp/sdk'; +import { PackedItem, PermissionLevelCompare } from '@graasp/sdk'; import { LANGS } from '@/config/langs'; import { mutations } from '@/config/queryClient'; @@ -17,7 +13,7 @@ const LanguageSelect = ({ item }: { item: PackedItem }): JSX.Element => { const { mutate: changeLang } = mutations.useEditItem(); const canWrite = item.permission - ? PermissionLevelCompare.gte(item.permission, PermissionLevel.Write) + ? PermissionLevelCompare.gte(item.permission, 'write') : false; const onChange: SelectProps['onChange'] = (e) => { diff --git a/src/modules/builder/components/item/sharing/ItemMembershipSelect.tsx b/src/modules/builder/components/item/sharing/ItemMembershipSelect.tsx index 53bc310fe..95ba53d2e 100644 --- a/src/modules/builder/components/item/sharing/ItemMembershipSelect.tsx +++ b/src/modules/builder/components/item/sharing/ItemMembershipSelect.tsx @@ -3,17 +3,14 @@ import { useTranslation } from 'react-i18next'; import { SelectProps } from '@mui/material'; -import { - PermissionLevel, - PermissionLevelCompare, - PermissionLevelOptions, -} from '@graasp/sdk'; +import { PermissionLevelCompare } from '@graasp/sdk'; import { NS } from '@/config/constants'; import { ITEM_MEMBERSHIP_PERMISSION_SELECT_CLASS, buildPermissionOptionId, } from '@/config/selectors'; +import type { PermissionLevel } from '@/openapi/client'; import Select from '@/ui/Select/Select'; import { BUILDER } from '../../../langs'; @@ -23,7 +20,7 @@ import { BUILDER } from '../../../langs'; * Undefined keys are considered as not disabled. */ type DisabledMap = { - [key in PermissionLevelOptions]?: boolean; + [key in PermissionLevel]?: boolean; }; const defaultDisabledMap: DisabledMap = { @@ -33,7 +30,7 @@ const defaultDisabledMap: DisabledMap = { }; export type ItemMembershipSelectProps = { - value?: PermissionLevelOptions; + value?: PermissionLevel; onChange?: SelectProps['onChange']; color?: SelectProps['color']; showLabel?: boolean; @@ -73,8 +70,9 @@ const ItemMembershipSelect = ({ // eslint-disable-next-line react-hooks/exhaustive-deps }, [value]); - const values = Object.values(PermissionLevel).filter((p) => - value ? allowDowngrade || PermissionLevelCompare.gte(p, value) : true, + const values = (['read', 'write', 'admin'] as PermissionLevel[]).filter( + (p) => + value ? allowDowngrade || PermissionLevelCompare.gte(p, value) : true, ); return ( diff --git a/src/modules/builder/components/item/sharing/csvImport/DisplayInvitationSummary.tsx b/src/modules/builder/components/item/sharing/csvImport/DisplayInvitationSummary.tsx index 38a06528a..2c8d19299 100644 --- a/src/modules/builder/components/item/sharing/csvImport/DisplayInvitationSummary.tsx +++ b/src/modules/builder/components/item/sharing/csvImport/DisplayInvitationSummary.tsx @@ -7,7 +7,7 @@ import { AccountType, Invitation, ItemMembership, - PermissionLevelOptions, + PermissionLevel, } from '@graasp/sdk'; import { AxiosError } from 'axios'; @@ -33,7 +33,7 @@ const LineDisplay = ({ permission, }: { email: string; - permission: PermissionLevelOptions; + permission: PermissionLevel; }) => ( {email} diff --git a/src/modules/builder/components/item/sharing/membershipTable/DeleteItemMembershipDialog.tsx b/src/modules/builder/components/item/sharing/membershipTable/DeleteItemMembershipDialog.tsx index a312001df..bdf1f15e1 100644 --- a/src/modules/builder/components/item/sharing/membershipTable/DeleteItemMembershipDialog.tsx +++ b/src/modules/builder/components/item/sharing/membershipTable/DeleteItemMembershipDialog.tsx @@ -10,7 +10,7 @@ import { DialogTitle, } from '@mui/material'; -import { DiscriminatedItem, PermissionLevel } from '@graasp/sdk'; +import { DiscriminatedItem } from '@graasp/sdk'; import { useMutation, useQueryClient } from '@tanstack/react-query'; import { useNavigate } from '@tanstack/react-router'; @@ -75,7 +75,7 @@ const DeleteItemMembershipDialog = ({ let dialogText = ''; const isDeletingLastAdmin = - hasOnlyOneAdmin && membershipToDelete?.permission === PermissionLevel.Admin; + hasOnlyOneAdmin && membershipToDelete?.permission === 'admin'; // incase of deleting the only admin if (isDeletingLastAdmin) { dialogText = translateBuilder(BUILDER.DELETE_LAST_ADMIN_ALERT_MESSAGE); diff --git a/src/modules/builder/components/item/sharing/membershipTable/EditPermissionButton.tsx b/src/modules/builder/components/item/sharing/membershipTable/EditPermissionButton.tsx index 9906ea5de..545229867 100644 --- a/src/modules/builder/components/item/sharing/membershipTable/EditPermissionButton.tsx +++ b/src/modules/builder/components/item/sharing/membershipTable/EditPermissionButton.tsx @@ -12,10 +12,9 @@ import { Typography, } from '@mui/material'; -import { PermissionLevel, PermissionLevelOptions } from '@graasp/sdk'; - import { NS } from '@/config/constants'; import { getErrorMessage } from '@/config/notifier'; +import type { PermissionLevel } from '@/openapi/client/types.gen'; import EditButton from '@/ui/buttons/EditButton/EditButton'; import useModalStatus from '~builder/components/hooks/useModalStatus'; @@ -27,8 +26,8 @@ type Props = { email?: string; name?: string; allowDowngrade?: boolean; - permission: PermissionLevelOptions; - handleUpdate: (p: PermissionLevelOptions) => Promise; + permission: PermissionLevel; + handleUpdate: (p: PermissionLevel) => Promise; id?: string; loading: boolean; }; @@ -50,7 +49,7 @@ const EditPermissionButton = ({ const { t: translateBuilder } = useTranslation(NS.Builder); const { t: translateMessage } = useTranslation(NS.Messages); - if (!allowDowngrade && permission === PermissionLevel.Admin) { + if (!allowDowngrade && permission === 'admin') { return null; } @@ -101,7 +100,7 @@ const EditPermissionButton = ({ - setCurrentPermission(e.target.value as PermissionLevelOptions) + setCurrentPermission(e.target.value as PermissionLevel) } size="medium" allowDowngrade={allowDowngrade} diff --git a/src/modules/builder/components/item/sharing/membershipTable/InvitationTableRow.tsx b/src/modules/builder/components/item/sharing/membershipTable/InvitationTableRow.tsx index 4d1286069..b7b48b317 100644 --- a/src/modules/builder/components/item/sharing/membershipTable/InvitationTableRow.tsx +++ b/src/modules/builder/components/item/sharing/membershipTable/InvitationTableRow.tsx @@ -3,11 +3,7 @@ import { useTranslation } from 'react-i18next'; import { TableCell, Typography } from '@mui/material'; -import { - DiscriminatedItem, - Invitation, - PermissionLevelOptions, -} from '@graasp/sdk'; +import { DiscriminatedItem, Invitation, PermissionLevel } from '@graasp/sdk'; import { NS } from '@/config/constants'; import { mutations } from '@/config/queryClient'; @@ -39,7 +35,7 @@ const InvitationTableRow = ({ mutations.usePostInvitations(); const { mutate: deleteInvitation } = mutations.useDeleteInvitation(); - const changePermission = async (permission: PermissionLevelOptions) => { + const changePermission = async (permission: PermissionLevel) => { if (data.item.path === item.path) { editInvitation({ id: data.id, diff --git a/src/modules/builder/components/item/sharing/membershipTable/ItemMembershipsTable.tsx b/src/modules/builder/components/item/sharing/membershipTable/ItemMembershipsTable.tsx index 96e13312b..5322277b0 100644 --- a/src/modules/builder/components/item/sharing/membershipTable/ItemMembershipsTable.tsx +++ b/src/modules/builder/components/item/sharing/membershipTable/ItemMembershipsTable.tsx @@ -14,7 +14,6 @@ import { import { AccountType, ItemLoginSchemaStatus, - PermissionLevel, PermissionLevelCompare, } from '@graasp/sdk'; @@ -95,16 +94,14 @@ const ItemMembershipsTable = ({ showEmail = true }: Props): JSX.Element => { key={im.id} data={im} item={item} - isOnlyAdmin={ - hasOnlyOneAdmin && im.permission === PermissionLevel.Admin - } + isOnlyAdmin={hasOnlyOneAdmin && im.permission === 'admin'} allowDowngrade={ // can downgrade for same item im.item.path === item.path } isDisabled={ Boolean(item.hidden) && - PermissionLevelCompare.lt(im.permission, PermissionLevel.Write) + PermissionLevelCompare.lt(im.permission, 'write') } /> ) : ( @@ -135,12 +132,9 @@ const ItemMembershipsTable = ({ showEmail = true }: Props): JSX.Element => { ({ permission }) => permission, ); - const adminRows = - groupedRows[PermissionLevel.Admin]?.toSorted(sortByNameAndEmail); - const writeRows = - groupedRows[PermissionLevel.Write]?.toSorted(sortByNameAndEmail); - const readRows = - groupedRows[PermissionLevel.Read]?.toSorted(sortByNameAndEmail); + const adminRows = groupedRows['admin']?.toSorted(sortByNameAndEmail); + const writeRows = groupedRows['write']?.toSorted(sortByNameAndEmail); + const readRows = groupedRows['read']?.toSorted(sortByNameAndEmail); const allRows = [adminRows, writeRows, readRows] .filter(Boolean) .flatMap((rows) => [ diff --git a/src/modules/builder/components/item/sharing/membershipTable/useChangePermission.ts b/src/modules/builder/components/item/sharing/membershipTable/useChangePermission.ts index 3c15d9da4..4e0fbcef1 100644 --- a/src/modules/builder/components/item/sharing/membershipTable/useChangePermission.ts +++ b/src/modules/builder/components/item/sharing/membershipTable/useChangePermission.ts @@ -1,4 +1,4 @@ -import { DiscriminatedItem, PermissionLevelOptions } from '@graasp/sdk'; +import { DiscriminatedItem, PermissionLevel } from '@graasp/sdk'; import { useMutation, useQueryClient } from '@tanstack/react-query'; @@ -44,7 +44,7 @@ export function useChangePermission({ const changePermission = async ( itemMembership: ItemMembership, - newPermission: PermissionLevelOptions, + newPermission: PermissionLevel, ) => { if (itemMembership.item.path === itemPath) { await editItemMembership({ diff --git a/src/modules/builder/components/item/sharing/membershipTable/useHighestMemberships.tsx b/src/modules/builder/components/item/sharing/membershipTable/useHighestMemberships.tsx index 7ff1a1252..d3d8ff6ba 100644 --- a/src/modules/builder/components/item/sharing/membershipTable/useHighestMemberships.tsx +++ b/src/modules/builder/components/item/sharing/membershipTable/useHighestMemberships.tsx @@ -1,4 +1,4 @@ -import { AccountType, DiscriminatedItem, PermissionLevel } from '@graasp/sdk'; +import { AccountType, DiscriminatedItem } from '@graasp/sdk'; import { hooks } from '@/config/queryClient'; import { ItemMembership } from '@/openapi/client'; @@ -22,8 +22,7 @@ export const useHighestMemberships = ({ hooks.useItemMemberships(item.id); const hasOnlyOneAdmin = - rawMemberships?.filter((per) => per.permission === PermissionLevel.Admin) - .length === 1; + rawMemberships?.filter((per) => per.permission === 'admin').length === 1; let memberships = rawMemberships; diff --git a/src/modules/builder/components/item/sharing/membershipTable/useMembershipRequests.ts b/src/modules/builder/components/item/sharing/membershipTable/useMembershipRequests.ts index 530addbb4..11d5ba09b 100644 --- a/src/modules/builder/components/item/sharing/membershipTable/useMembershipRequests.ts +++ b/src/modules/builder/components/item/sharing/membershipTable/useMembershipRequests.ts @@ -1,5 +1,3 @@ -import { PermissionLevel } from '@graasp/sdk'; - import { useMutation, useQueryClient } from '@tanstack/react-query'; import { hooks } from '@/config/queryClient'; @@ -45,7 +43,7 @@ export function useMembershipRequests({ path: { itemId: itemId }, body: { accountId: memberId, - permission: PermissionLevel.Read, + permission: 'read', }, }); }; diff --git a/src/modules/builder/components/item/sharing/shareButton/CreateItemMembershipForm.tsx b/src/modules/builder/components/item/sharing/shareButton/CreateItemMembershipForm.tsx index 974b01f9a..4b504ae3e 100644 --- a/src/modules/builder/components/item/sharing/shareButton/CreateItemMembershipForm.tsx +++ b/src/modules/builder/components/item/sharing/shareButton/CreateItemMembershipForm.tsx @@ -13,13 +13,7 @@ import { Typography, } from '@mui/material'; -import { - AccountType, - DiscriminatedItem, - PermissionLevel, - PermissionLevelOptions, - isEmail, -} from '@graasp/sdk'; +import { AccountType, DiscriminatedItem, isEmail } from '@graasp/sdk'; import { useMutation, useQueryClient } from '@tanstack/react-query'; import truncate from 'lodash.truncate'; @@ -33,6 +27,7 @@ import { SHARE_ITEM_SHARE_BUTTON_ID, } from '@/config/selectors'; import { createInvitationMutation } from '@/openapi/client/@tanstack/react-query.gen'; +import type { PermissionLevel } from '@/openapi/client/types.gen'; import { useItemInvitations } from '@/query/hooks/invitation'; import { itemKeys } from '@/query/keys'; import Button from '@/ui/buttons/Button/Button'; @@ -47,7 +42,7 @@ type ContentProps = { type Inputs = { email: string; - permission: PermissionLevelOptions; + permission: PermissionLevel; }; const Content = ({ handleClose, item }: ContentProps) => { @@ -76,7 +71,7 @@ const Content = ({ handleClose, item }: ContentProps) => { watch, setValue, formState: { errors }, - } = useForm({ defaultValues: { permission: PermissionLevel.Read } }); + } = useForm({ defaultValues: { permission: 'read' } }); const permission = watch('permission'); const handleShare = async (data: Inputs) => { @@ -151,10 +146,7 @@ const Content = ({ handleClose, item }: ContentProps) => { value={permission} onChange={(event) => { if (event.target.value) { - setValue( - 'permission', - event.target.value as PermissionLevelOptions, - ); + setValue('permission', event.target.value as PermissionLevel); } }} size="medium" diff --git a/src/modules/builder/components/main/ItemMenuContent.tsx b/src/modules/builder/components/main/ItemMenuContent.tsx index 593e27a9e..e95189ae4 100644 --- a/src/modules/builder/components/main/ItemMenuContent.tsx +++ b/src/modules/builder/components/main/ItemMenuContent.tsx @@ -7,7 +7,6 @@ import { AccountType, ItemType, PackedItem, - PermissionLevel, PermissionLevelCompare, } from '@graasp/sdk'; @@ -133,11 +132,9 @@ const ItemMenuContent = ({ item }: Props): JSX.Element | null => { } const canWrite = - item.permission && - PermissionLevelCompare.gte(item.permission, PermissionLevel.Write); + item.permission && PermissionLevelCompare.gte(item.permission, 'write'); const canAdmin = - item.permission && - PermissionLevelCompare.gte(item.permission, PermissionLevel.Admin); + item.permission && PermissionLevelCompare.gte(item.permission, 'admin'); const modificationMenus = [ canWrite ? ( diff --git a/src/modules/builder/components/main/itemSelectionModal/AccessibleNavigationTree.tsx b/src/modules/builder/components/main/itemSelectionModal/AccessibleNavigationTree.tsx index 806e6dd05..8e7142ea4 100644 --- a/src/modules/builder/components/main/itemSelectionModal/AccessibleNavigationTree.tsx +++ b/src/modules/builder/components/main/itemSelectionModal/AccessibleNavigationTree.tsx @@ -3,7 +3,7 @@ import { useTranslation } from 'react-i18next'; import { Alert, Button, Skeleton, Stack } from '@mui/material'; -import { ItemType, PermissionLevel } from '@graasp/sdk'; +import { ItemType } from '@graasp/sdk'; import { NS } from '@/config/constants'; import { hooks } from '@/config/queryClient'; @@ -40,7 +40,7 @@ const AccessibleNavigationTree = ({ isFetching, } = hooks.useInfiniteAccessibleItems( { - permissions: [PermissionLevel.Write, PermissionLevel.Admin], + permissions: ['write', 'admin'], types: [ItemType.FOLDER], }, { pageSize: PAGE_SIZE }, diff --git a/src/modules/builder/components/main/itemSelectionModal/RootNavigationTree.tsx b/src/modules/builder/components/main/itemSelectionModal/RootNavigationTree.tsx index a22921055..a3492fc4c 100644 --- a/src/modules/builder/components/main/itemSelectionModal/RootNavigationTree.tsx +++ b/src/modules/builder/components/main/itemSelectionModal/RootNavigationTree.tsx @@ -3,7 +3,7 @@ import { useTranslation } from 'react-i18next'; import { Alert, Skeleton, Typography } from '@mui/material'; -import { DiscriminatedItem, ItemType, PermissionLevel } from '@graasp/sdk'; +import { DiscriminatedItem, ItemType } from '@graasp/sdk'; import { NS } from '@/config/constants'; import { hooks } from '@/config/queryClient'; @@ -43,7 +43,7 @@ const RootNavigationTree = ({ } = hooks.useAccessibleItems( // you can move into an item you have at least write permission { - permissions: [PermissionLevel.Admin, PermissionLevel.Write], + permissions: ['admin', 'write'], types: [ItemType.FOLDER], }, { pageSize: 5 }, diff --git a/src/modules/builder/components/pages/item/type.ts b/src/modules/builder/components/pages/item/type.ts index c83d882f4..8ba1d4935 100644 --- a/src/modules/builder/components/pages/item/type.ts +++ b/src/modules/builder/components/pages/item/type.ts @@ -1,8 +1,8 @@ -import { PackedItem, PermissionLevelOptions } from '@graasp/sdk'; +import { PackedItem, PermissionLevel } from '@graasp/sdk'; export interface OutletType { item: PackedItem; - permission?: PermissionLevelOptions; + permission?: PermissionLevel; canWrite: boolean; canAdmin: boolean; } diff --git a/src/modules/builder/contexts/OutletContext.tsx b/src/modules/builder/contexts/OutletContext.tsx index c45599ea6..17cc5db19 100644 --- a/src/modules/builder/contexts/OutletContext.tsx +++ b/src/modules/builder/contexts/OutletContext.tsx @@ -1,12 +1,12 @@ import { createContext, useContext } from 'react'; -import { PackedItem, PermissionLevelOptions } from '@graasp/sdk'; +import { PackedItem, PermissionLevel } from '@graasp/sdk'; type OutletContextType = { item: PackedItem; canWrite: boolean; canAdmin: boolean; - permission?: PermissionLevelOptions | null; + permission?: PermissionLevel | null; }; export const OutletContext = createContext({ item: undefined!, diff --git a/src/modules/builder/map/components/Map.stories.tsx b/src/modules/builder/map/components/Map.stories.tsx index 4a82f4b75..84eee3bff 100644 --- a/src/modules/builder/map/components/Map.stories.tsx +++ b/src/modules/builder/map/components/Map.stories.tsx @@ -1,8 +1,4 @@ -import { - MemberFactory, - PackedFolderItemFactory, - PermissionLevel, -} from '@graasp/sdk'; +import { MemberFactory, PackedFolderItemFactory } from '@graasp/sdk'; import type { Meta, StoryObj } from '@storybook/react'; import { fn } from 'storybook/test'; @@ -540,7 +536,7 @@ export const MapFrench = { export const MapRead = { args: { - item: PackedFolderItemFactory({}, { permission: PermissionLevel.Read }), + item: PackedFolderItemFactory({}, { permission: 'read' }), currentMember: MemberFactory({ extra: { lang: 'fr' } }), useItemsInMap: () => ({ diff --git a/src/modules/builder/map/components/map/MapContent.tsx b/src/modules/builder/map/components/map/MapContent.tsx index 357a5920c..fd5c92234 100644 --- a/src/modules/builder/map/components/map/MapContent.tsx +++ b/src/modules/builder/map/components/map/MapContent.tsx @@ -1,6 +1,6 @@ import { type JSX, useState } from 'react'; -import { PermissionLevel, PermissionLevelCompare } from '@graasp/sdk'; +import { PermissionLevelCompare } from '@graasp/sdk'; import { useQueryClientContext } from '../context/QueryClientContext'; import CurrentLocationMarker from './CurrentLocationMarker'; @@ -26,8 +26,7 @@ const MapContent = ({ // can write in root or with right permission in item const canWrite = !item || - (item.permission && - PermissionLevelCompare.gte(item.permission, PermissionLevel.Write)); + (item.permission && PermissionLevelCompare.gte(item.permission, 'write')); return ( <> diff --git a/src/modules/builder/map/components/map/MarkerPopup.tsx b/src/modules/builder/map/components/map/MarkerPopup.tsx index 85776aac3..444812d9c 100644 --- a/src/modules/builder/map/components/map/MarkerPopup.tsx +++ b/src/modules/builder/map/components/map/MarkerPopup.tsx @@ -4,11 +4,7 @@ import { Popup } from 'react-leaflet'; import { Box, Chip, Link, Stack, Tooltip, Typography } from '@mui/material'; -import { - ItemGeolocation, - PermissionLevel, - PermissionLevelCompare, -} from '@graasp/sdk'; +import { ItemGeolocation, PermissionLevelCompare } from '@graasp/sdk'; import { NS } from '@/config/constants'; @@ -69,10 +65,7 @@ const MarkerPopup = ({ {item?.permission && - PermissionLevelCompare.gte( - item.permission, - PermissionLevel.Admin, - ) && ( + PermissionLevelCompare.gte(item.permission, 'admin') && ( <> diff --git a/src/modules/player/item/Item.tsx b/src/modules/player/item/Item.tsx index 8e3012560..732904f86 100644 --- a/src/modules/player/item/Item.tsx +++ b/src/modules/player/item/Item.tsx @@ -23,7 +23,6 @@ import { ItemType, LinkItemType, PackedItem, - PermissionLevel, ShortcutItemType, buildPdfViewerURL, } from '@graasp/sdk'; @@ -243,7 +242,7 @@ const AppContent = ({ item }: { item: AppItemType }): JSX.Element => { apiHost: API_HOST, settings: item.settings, lang: item.lang ?? user?.lang, - permission: PermissionLevel.Read, + permission: 'read', context: Context.Player, accountId: user?.id, itemId: item.id, diff --git a/src/modules/player/navigationIsland/ChatButton.tsx b/src/modules/player/navigationIsland/ChatButton.tsx index a1cd21b88..e091475f9 100644 --- a/src/modules/player/navigationIsland/ChatButton.tsx +++ b/src/modules/player/navigationIsland/ChatButton.tsx @@ -3,7 +3,7 @@ import { useTranslation } from 'react-i18next'; import { Tooltip } from '@mui/material'; -import { ItemType, PermissionLevel, PermissionLevelCompare } from '@graasp/sdk'; +import { ItemType, PermissionLevelCompare } from '@graasp/sdk'; import { useParams } from '@tanstack/react-router'; import { MessageSquareOff, MessageSquareText } from 'lucide-react'; @@ -35,7 +35,7 @@ const useChatButton = (): { chatButton: JSX.Element | null } => { if ((chatEnabledItems ?? []).length > 0 || root?.settings.showChatbox) { const canWrite = item?.permission - ? PermissionLevelCompare.gte(item?.permission, PermissionLevel.Write) + ? PermissionLevelCompare.gte(item?.permission, 'write') : false; const isDisabled = !item?.settings?.showChatbox; diff --git a/src/modules/player/navigationIsland/PinnedItemsButton.tsx b/src/modules/player/navigationIsland/PinnedItemsButton.tsx index c4e2fa956..ea10327a2 100644 --- a/src/modules/player/navigationIsland/PinnedItemsButton.tsx +++ b/src/modules/player/navigationIsland/PinnedItemsButton.tsx @@ -3,7 +3,7 @@ import { useTranslation } from 'react-i18next'; import { Tooltip } from '@mui/material'; -import { PermissionLevel, PermissionLevelCompare } from '@graasp/sdk'; +import { PermissionLevelCompare } from '@graasp/sdk'; import { useParams } from '@tanstack/react-router'; import { Pin, PinOff } from 'lucide-react'; @@ -35,7 +35,7 @@ const usePinnedItemsButton = (): { pinnedButton: JSX.Element | null } => { } const canWrite = item?.permission - ? PermissionLevelCompare.gte(item?.permission, PermissionLevel.Write) + ? PermissionLevelCompare.gte(item?.permission, 'write') : false; // we should show the icon as open if there are pinned items and the drawer is open const isOpen = isPinnedOpen && childrenPinnedCount > 0; diff --git a/src/openapi/client/sdk.gen.ts b/src/openapi/client/sdk.gen.ts index c6726d5a1..3f13439c6 100644 --- a/src/openapi/client/sdk.gen.ts +++ b/src/openapi/client/sdk.gen.ts @@ -1072,8 +1072,8 @@ export const updateFolder = (options: Opti * Switch folder item to capsule */ export const convertFolderToCapsule = (options: Options) => { - return (options.client ?? client).patch({ - url: '/api/items/folders/{id}/to-capsule', + return (options.client ?? client).post({ + url: '/api/items/folders/{id}/convert', ...options }); }; @@ -1108,8 +1108,8 @@ export const createCapsule = (options: Opt * Switch capsule item to folder */ export const convertCapsuleToFolder = (options: Options) => { - return (options.client ?? client).patch({ - url: '/api/items/capsules/{id}/to-folder', + return (options.client ?? client).post({ + url: '/api/items/capsules/{id}/convert', ...options }); }; diff --git a/src/openapi/client/types.gen.ts b/src/openapi/client/types.gen.ts index fc5d6bdfd..f9f9f02c8 100644 --- a/src/openapi/client/types.gen.ts +++ b/src/openapi/client/types.gen.ts @@ -350,6 +350,11 @@ export type ItemLoginSchema = { updatedAt: string; }; +/** + * PermissionLevel + */ +export type PermissionLevel = 'read' | 'write' | 'admin'; + /** * Item Membership * Define the permission access between account and item @@ -358,7 +363,7 @@ export type ItemMembership = { id: string; account: AugmentedAccount; item: Item; - permission: 'read' | 'write' | 'admin'; + permission: PermissionLevel; creator?: NullableAugmentedAccount; createdAt: string; updatedAt: string; @@ -372,7 +377,7 @@ export type RawItemMembership = { id: string; accountId: string; itemPath: string; - permission: 'read' | 'write' | 'admin'; + permission: PermissionLevel; creator?: string; createdAt: string; updatedAt: string; @@ -2669,7 +2674,7 @@ export type GetItemMembershipsForItemResponse = GetItemMembershipsForItemRespons export type CreateItemMembershipData = { body: { accountId: string; - permission: 'read' | 'write' | 'admin'; + permission: PermissionLevel; }; path: { itemId: string; @@ -2728,7 +2733,7 @@ export type DeleteItemMembershipResponse = DeleteItemMembershipResponses[keyof D export type UpdateItemMembershipData = { body: { - permission: 'read' | 'write' | 'admin'; + permission: PermissionLevel; }; path: { id: string; @@ -3449,7 +3454,7 @@ export type ConvertFolderToCapsuleData = { id: string; }; query?: never; - url: '/api/items/folders/{id}/to-capsule'; + url: '/api/items/folders/{id}/convert'; }; export type ConvertFolderToCapsuleErrors = { @@ -3694,7 +3699,7 @@ export type ConvertCapsuleToFolderData = { id: string; }; query?: never; - url: '/api/items/capsules/{id}/to-folder'; + url: '/api/items/capsules/{id}/convert'; }; export type ConvertCapsuleToFolderErrors = { diff --git a/src/query/item/types.ts b/src/query/item/types.ts index 9086dbf83..45c3696f5 100644 --- a/src/query/item/types.ts +++ b/src/query/item/types.ts @@ -1,9 +1,6 @@ -import { - ItemType, - Member, - PermissionLevelOptions, - UnionOfConst, -} from '@graasp/sdk'; +import { ItemType, Member, UnionOfConst } from '@graasp/sdk'; + +import type { PermissionLevel } from '@/openapi/client'; export type ItemSearchParams = { creatorId?: Member['id']; @@ -14,7 +11,7 @@ export type ItemSearchParams = { | 'item.creator.name' | 'item.created_at' | 'item.updated_at'; - permissions?: PermissionLevelOptions[]; + permissions?: PermissionLevel[]; types?: UnionOfConst[]; keywords?: string; }; diff --git a/src/query/mutations/invitation.ts b/src/query/mutations/invitation.ts index 8946adbdb..f7a50ab79 100644 --- a/src/query/mutations/invitation.ts +++ b/src/query/mutations/invitation.ts @@ -1,4 +1,4 @@ -import { Invitation, PermissionLevelOptions, UUID } from '@graasp/sdk'; +import { Invitation, PermissionLevel, UUID } from '@graasp/sdk'; import { useMutation, useQueryClient } from '@tanstack/react-query'; @@ -48,7 +48,7 @@ export default (queryConfig: QueryClientConfig) => { }: { itemId: UUID; id: UUID; - permission: PermissionLevelOptions; + permission: PermissionLevel; name?: string; }) => Api.patchInvitation({ itemId, id }, { permission, name }), onSuccess: () => { diff --git a/src/query/test/constants.ts b/src/query/test/constants.ts index 6fd295e5d..c76236f36 100644 --- a/src/query/test/constants.ts +++ b/src/query/test/constants.ts @@ -21,7 +21,6 @@ import { MemberFactory, MentionStatus, PackedFolderItemFactory, - PermissionLevel, RecycledItemData, UUID, } from '@graasp/sdk'; @@ -95,7 +94,7 @@ export const createMockMembership = ( id: membership?.id ?? v4(), account: { ...AccountFactory(), type: AccountType.Guest }, item: FolderItemFactory(), - permission: PermissionLevel.Read, + permission: 'read', createdAt: '2023-04-26T08:46:34.812Z', updatedAt: '2023-04-26T08:46:34.812Z', creator: AccountFactory(), @@ -105,13 +104,13 @@ export const createMockMembership = ( const MEMBERSHIP_1: ItemMembership = createMockMembership({ id: 'membership-id', account: { ...AccountFactory(), type: AccountType.Guest }, - permission: PermissionLevel.Read, + permission: 'read', }); const MEMBERSHIP_2: ItemMembership = createMockMembership({ id: 'membership-id1', account: { ...AccountFactory(), type: AccountType.Guest }, - permission: PermissionLevel.Admin, + permission: 'admin', }); export const ITEM_MEMBERSHIPS_RESPONSE: ItemMembership[] = [ @@ -338,7 +337,7 @@ export const buildInvitation = (values: Partial): Invitation => ({ name: 'member-name', email: 'email', creator: MemberFactory(), - permission: PermissionLevel.Read, + permission: 'read', item: FolderItemFactory(), createdAt: '2023-09-06T11:50:32.894Z', updatedAt: '2023-09-06T11:50:32.894Z', diff --git a/src/query/ws/hooks/membership.test.ts b/src/query/ws/hooks/membership.test.ts index da9674a87..03f4242c7 100644 --- a/src/query/ws/hooks/membership.test.ts +++ b/src/query/ws/hooks/membership.test.ts @@ -1,8 +1,4 @@ -import { - FolderItemFactory, - ItemMembership, - PermissionLevel, -} from '@graasp/sdk'; +import { FolderItemFactory, ItemMembership } from '@graasp/sdk'; import { afterEach, describe, expect, it } from 'vitest'; @@ -65,7 +61,7 @@ describe('Ws Membership Hooks', () => { ]); const updatedMembership = { ...newItemMembership, - permission: PermissionLevel.Write, + permission: 'write', }; await mockWsHook({ hook, wrapper }); diff --git a/src/routes/analytics/items/$itemId/apps.tsx b/src/routes/analytics/items/$itemId/apps.tsx index 144037342..7b34602d4 100644 --- a/src/routes/analytics/items/$itemId/apps.tsx +++ b/src/routes/analytics/items/$itemId/apps.tsx @@ -3,7 +3,7 @@ import { useTranslation } from 'react-i18next'; import { Box, Grid, Typography } from '@mui/material'; -import { Context, ItemType, PackedItem, PermissionLevel } from '@graasp/sdk'; +import { Context, ItemType, PackedItem } from '@graasp/sdk'; import { createFileRoute } from '@tanstack/react-router'; @@ -85,7 +85,7 @@ function AppContent({ apiHost: API_HOST, itemId: item.id, accountId: member.id, - permission: permission || PermissionLevel.Read, + permission: permission || 'read', settings: item.settings, lang: item.lang || member.lang, context: Context.Analytics, diff --git a/src/routes/analytics/items/$itemId/export.tsx b/src/routes/analytics/items/$itemId/export.tsx index 7ac21c4ee..aeaf1f350 100644 --- a/src/routes/analytics/items/$itemId/export.tsx +++ b/src/routes/analytics/items/$itemId/export.tsx @@ -11,7 +11,7 @@ import { styled, } from '@mui/material'; -import { PermissionLevel, PermissionLevelCompare } from '@graasp/sdk'; +import { PermissionLevelCompare } from '@graasp/sdk'; import { Navigate, createFileRoute } from '@tanstack/react-router'; @@ -77,7 +77,7 @@ function ExportAnalyticsPage(): JSX.Element { if ( !isLoading && item?.permission && - PermissionLevelCompare.gte(item.permission, PermissionLevel.Write) + PermissionLevelCompare.gte(item.permission, 'write') ) { return ( diff --git a/src/routes/builder/items/$itemId.tsx b/src/routes/builder/items/$itemId.tsx index 69a906fd7..bf6a0640d 100644 --- a/src/routes/builder/items/$itemId.tsx +++ b/src/routes/builder/items/$itemId.tsx @@ -7,7 +7,6 @@ import { AccountType, Context, ItemType, - PermissionLevel, PermissionLevelCompare, } from '@graasp/sdk'; @@ -97,11 +96,11 @@ function RouteComponent() { const { mutate: itemLoginSignIn } = mutations.usePostItemLogin(); const canWrite = item?.permission - ? PermissionLevelCompare.gte(item.permission, PermissionLevel.Write) + ? PermissionLevelCompare.gte(item.permission, 'write') : false; const canAdmin = item?.permission - ? PermissionLevelCompare.gte(item.permission, PermissionLevel.Admin) + ? PermissionLevelCompare.gte(item.permission, 'admin') : false; const errorStatusCode = diff --git a/src/ui/items/AppItem.stories.tsx b/src/ui/items/AppItem.stories.tsx index 6fcdf91f7..ef05f0cc7 100644 --- a/src/ui/items/AppItem.stories.tsx +++ b/src/ui/items/AppItem.stories.tsx @@ -1,10 +1,4 @@ -import { - AppItemFactory, - Context, - ItemType, - MemberFactory, - PermissionLevel, -} from '@graasp/sdk'; +import { AppItemFactory, Context, ItemType, MemberFactory } from '@graasp/sdk'; import type { Meta, StoryObj } from '@storybook/react'; import { expect, within } from 'storybook/test'; @@ -42,7 +36,7 @@ export const Example = { apiHost: 'apiHost', itemId: 'itemId', settings: {}, - permission: PermissionLevel.Read, + permission: 'read', lang: 'en', context: Context.Library, }, From cc25f22f82e1fa9fc5cbbc3ee57c9ad3a845278b Mon Sep 17 00:00:00 2001 From: kim Date: Thu, 22 Jan 2026 18:00:18 +0100 Subject: [PATCH 2/2] refactor: use as const --- .../builder/invitations/createInvitation.cy.ts | 2 +- .../builder/invitations/viewInvitation.cy.ts | 6 ++---- .../memberships/editItemMembership.cy.ts | 4 ++-- cypress/e2e/player/main.cy.ts | 18 ++++++++---------- .../item/sharing/ItemMembershipSelect.tsx | 2 +- .../membershipTable/EditPermissionButton.tsx | 4 +--- .../shareButton/CreateItemMembershipForm.tsx | 2 +- 7 files changed, 16 insertions(+), 22 deletions(-) diff --git a/cypress/e2e/builder/invitations/createInvitation.cy.ts b/cypress/e2e/builder/invitations/createInvitation.cy.ts index 9607a4a25..19d231c1d 100644 --- a/cypress/e2e/builder/invitations/createInvitation.cy.ts +++ b/cypress/e2e/builder/invitations/createInvitation.cy.ts @@ -66,7 +66,7 @@ describe('Create Invitation', () => { id: '79c25df6-8f2b-4bba-be9b-6459b2694ee7', item, account: MEMBERS.ANNA, - permission: 'admin' as PermissionLevel, + permission: 'admin' as const, createdAt: '2024-02-05T16:45:00Z', updatedAt: '2024-02-05T16:45:00Z', }, diff --git a/cypress/e2e/builder/invitations/viewInvitation.cy.ts b/cypress/e2e/builder/invitations/viewInvitation.cy.ts index 352006d47..f638b7973 100644 --- a/cypress/e2e/builder/invitations/viewInvitation.cy.ts +++ b/cypress/e2e/builder/invitations/viewInvitation.cy.ts @@ -1,7 +1,5 @@ import { PackedFolderItemFactory } from '@graasp/sdk'; -import type { PermissionLevel } from '@/openapi/client/types.gen'; - import { ITEM_RESEND_INVITATION_BUTTON_CLASS, buildInvitationTableRowId, @@ -50,7 +48,7 @@ describe('Cannot view Invitations for writers and readers', () => { { id: 'ecafbd2a-5688-11eb-be92-0242ac130005', item, - permission: 'write' as PermissionLevel, + permission: 'write' as const, email: MEMBERS.CEDRIC.email, createdAt: '2021-08-11T12:56:36.834Z', updatedAt: '2021-08-11T12:56:36.834Z', @@ -59,7 +57,7 @@ describe('Cannot view Invitations for writers and readers', () => { { id: 'ecafbd1a-5688-11eb-be93-0242ac130006', item, - permission: 'read' as PermissionLevel, + permission: 'read' as const, email: MEMBERS.DAVID.email, createdAt: '2021-08-11T12:56:36.834Z', updatedAt: '2021-08-11T12:56:36.834Z', diff --git a/cypress/e2e/builder/memberships/editItemMembership.cy.ts b/cypress/e2e/builder/memberships/editItemMembership.cy.ts index 8bc0221d0..1b033fa85 100644 --- a/cypress/e2e/builder/memberships/editItemMembership.cy.ts +++ b/cypress/e2e/builder/memberships/editItemMembership.cy.ts @@ -83,7 +83,7 @@ describe('Edit Membership', () => { const memberships = [ { id: 'membership-0', - permission: 'admin' as PermissionLevel, + permission: 'admin' as const, account: CURRENT_MEMBER, item: child, createdAt: '2021-08-11T12:56:36.834Z', @@ -91,7 +91,7 @@ describe('Edit Membership', () => { }, { id: 'membership-1', - permission: 'write' as PermissionLevel, + permission: 'write' as const, account: MEMBERS.BOB, createdAt: '2021-08-11T12:56:36.834Z', updatedAt: '2021-08-11T12:56:36.834Z', diff --git a/cypress/e2e/player/main.cy.ts b/cypress/e2e/player/main.cy.ts index b339b2a6b..77af568fa 100644 --- a/cypress/e2e/player/main.cy.ts +++ b/cypress/e2e/player/main.cy.ts @@ -1,7 +1,5 @@ import { DiscriminatedItem, DocumentItemFactory } from '@graasp/sdk'; -import type { PermissionLevel } from '@/openapi/client/types.gen'; - import { FOLDER_NAME_TITLE_CLASS, MAIN_MENU_ID, @@ -38,17 +36,17 @@ import { const GRAASP_DOCUMENT_ITEM = DocumentItemFactory(); const items = [ - { ...GRAASP_LINK_ITEM, permission: 'admin' as PermissionLevel }, + { ...GRAASP_LINK_ITEM, permission: 'admin' as const }, { ...GRAASP_LINK_ITEM_IFRAME_ONLY, - permission: 'admin' as PermissionLevel, + permission: 'admin' as const, }, - { ...YOUTUBE_LINK_ITEM, permission: 'admin' as PermissionLevel }, - { ...IMAGE_ITEM_DEFAULT, permission: 'admin' as PermissionLevel }, - { ...VIDEO_ITEM_DEFAULT, permission: 'admin' as PermissionLevel }, - { ...PDF_ITEM_DEFAULT, permission: 'admin' as PermissionLevel }, - { ...GRAASP_DOCUMENT_ITEM, permission: 'admin' as PermissionLevel }, - { ...GRAASP_APP_ITEM, permission: 'admin' as PermissionLevel }, + { ...YOUTUBE_LINK_ITEM, permission: 'admin' as const }, + { ...IMAGE_ITEM_DEFAULT, permission: 'admin' as const }, + { ...VIDEO_ITEM_DEFAULT, permission: 'admin' as const }, + { ...PDF_ITEM_DEFAULT, permission: 'admin' as const }, + { ...GRAASP_DOCUMENT_ITEM, permission: 'admin' as const }, + { ...GRAASP_APP_ITEM, permission: 'admin' as const }, ...FOLDER_WITH_SUBFOLDER_ITEM.items, ...FOLDER_WITHOUT_CHILDREN_ORDER.items, ]; diff --git a/src/modules/builder/components/item/sharing/ItemMembershipSelect.tsx b/src/modules/builder/components/item/sharing/ItemMembershipSelect.tsx index 95ba53d2e..e860a7f50 100644 --- a/src/modules/builder/components/item/sharing/ItemMembershipSelect.tsx +++ b/src/modules/builder/components/item/sharing/ItemMembershipSelect.tsx @@ -70,7 +70,7 @@ const ItemMembershipSelect = ({ // eslint-disable-next-line react-hooks/exhaustive-deps }, [value]); - const values = (['read', 'write', 'admin'] as PermissionLevel[]).filter( + const values = (['read', 'write', 'admin'] as const[]).filter( (p) => value ? allowDowngrade || PermissionLevelCompare.gte(p, value) : true, ); diff --git a/src/modules/builder/components/item/sharing/membershipTable/EditPermissionButton.tsx b/src/modules/builder/components/item/sharing/membershipTable/EditPermissionButton.tsx index 545229867..e046ee0b1 100644 --- a/src/modules/builder/components/item/sharing/membershipTable/EditPermissionButton.tsx +++ b/src/modules/builder/components/item/sharing/membershipTable/EditPermissionButton.tsx @@ -99,9 +99,7 @@ const EditPermissionButton = ({ - setCurrentPermission(e.target.value as PermissionLevel) - } + onChange={(e) => setCurrentPermission(e.target.value as const)} size="medium" allowDowngrade={allowDowngrade} /> diff --git a/src/modules/builder/components/item/sharing/shareButton/CreateItemMembershipForm.tsx b/src/modules/builder/components/item/sharing/shareButton/CreateItemMembershipForm.tsx index 4b504ae3e..788fea323 100644 --- a/src/modules/builder/components/item/sharing/shareButton/CreateItemMembershipForm.tsx +++ b/src/modules/builder/components/item/sharing/shareButton/CreateItemMembershipForm.tsx @@ -146,7 +146,7 @@ const Content = ({ handleClose, item }: ContentProps) => { value={permission} onChange={(event) => { if (event.target.value) { - setValue('permission', event.target.value as PermissionLevel); + setValue('permission', event.target.value as const); } }} size="medium"