diff --git a/cypress/e2e/builder/fixtures/apps.ts b/cypress/e2e/builder/fixtures/apps.ts index f88fb9cc2..815455cc1 100644 --- a/cypress/e2e/builder/fixtures/apps.ts +++ b/cypress/e2e/builder/fixtures/apps.ts @@ -1,10 +1,11 @@ import { - AppItemType, FolderItemType, PackedAppItemFactory, PackedFolderItemFactory, } from '@graasp/sdk'; +import { AppItem } from '@/openapi/client'; + import { APPS_LIST } from '../../../fixtures/apps/apps'; import { CURRENT_MEMBER } from '../../../fixtures/members'; @@ -15,14 +16,14 @@ export const buildGetAppData = (id: string): string => export const buildAppItemLinkForTest = (filename = '.*'): string => `apps/${filename}`; -export const GRAASP_APP_ITEM: AppItemType = PackedAppItemFactory({ +export const GRAASP_APP_ITEM: AppItem = PackedAppItemFactory({ name: 'test app', extra: { app: { url: APPS_LIST[0].url }, }, creator: CURRENT_MEMBER, }); -export const GRAASP_CUSTOM_APP_ITEM: AppItemType = PackedAppItemFactory({ +export const GRAASP_CUSTOM_APP_ITEM: AppItem = PackedAppItemFactory({ name: 'Add Your Custom App', extra: { app: { url: APPS_LIST[0].url }, @@ -36,7 +37,7 @@ export const GRAASP_APP_PARENT_FOLDER: FolderItemType = PackedFolderItemFactory( }, ); -export const GRAASP_APP_CHILDREN_ITEM: AppItemType = PackedAppItemFactory({ +export const GRAASP_APP_CHILDREN_ITEM: AppItem = PackedAppItemFactory({ name: 'my app', extra: { app: { diff --git a/cypress/e2e/builder/fixtures/chatbox.ts b/cypress/e2e/builder/fixtures/chatbox.ts index c42f625fd..d2ff79bb4 100644 --- a/cypress/e2e/builder/fixtures/chatbox.ts +++ b/cypress/e2e/builder/fixtures/chatbox.ts @@ -1,17 +1,17 @@ import { ChatMention, - DiscriminatedItem, FolderItemFactory, - FolderItemType, MentionStatus, PackedFolderItemFactory, } from '@graasp/sdk'; +import type { FolderItem, PackedItem } from '@/openapi/client'; + import { DEFAULT_FOLDER_ITEM } from '../../../fixtures/items'; import { CURRENT_MEMBER, MEMBERS } from '../../../fixtures/members'; import { ItemForTest } from '../../../support/types'; -const item: FolderItemType = FolderItemFactory({ +const item: FolderItem = FolderItemFactory({ ...DEFAULT_FOLDER_ITEM, id: 'adf09f5a-5688-11eb-ae93-0242ac130004', path: 'adf09f5a_5688_11eb_ae93_0242ac130004', @@ -22,7 +22,8 @@ const item: FolderItemType = FolderItemFactory({ // warning: permission admin by default export const ITEM_WITH_CHATBOX_MESSAGES: ItemForTest = { - ...PackedFolderItemFactory(item), + // eslint-disable-next-line @typescript-eslint/no-explicit-any + ...PackedFolderItemFactory(item as any), memberships: [ { item, @@ -54,13 +55,13 @@ export const ITEM_WITH_CHATBOX_MESSAGES: ItemForTest = { ], }; -const items: DiscriminatedItem[] = [ - { +const items = [ + PackedFolderItemFactory({ ...DEFAULT_FOLDER_ITEM, id: '78ad1166-3862-4593-a10c-d380e7b66674', path: '78ad1166-3862-4593-a10c-d380e7b66674', name: 'item with chatbox messages', - }, + }) as PackedItem, ]; const ITEM_WITH_CHATBOX_MESSAGES_AND_ADMIN: ItemForTest = { diff --git a/cypress/e2e/builder/fixtures/files.ts b/cypress/e2e/builder/fixtures/files.ts index 1259364e0..07b2377c7 100644 --- a/cypress/e2e/builder/fixtures/files.ts +++ b/cypress/e2e/builder/fixtures/files.ts @@ -1,5 +1,4 @@ import { - FileItemFactory, MaxWidth, MimeTypes, PackedFileItemFactory, @@ -41,7 +40,7 @@ export const IMAGE_ITEM_DEFAULT: FileItemForTest = { }; export const IMAGE_ITEM_DEFAULT_WITH_MAX_WIDTH: FileItemForTest = { - ...FileItemFactory({ + ...PackedFileItemFactory({ id: 'bd5519a2-5ba9-4305-b221-185facbe6a29', name: 'icon.png', description: 'a default image description', diff --git a/cypress/e2e/builder/fixtures/invitations.ts b/cypress/e2e/builder/fixtures/invitations.ts index 0dc0bd1c5..dde58f0b6 100644 --- a/cypress/e2e/builder/fixtures/invitations.ts +++ b/cypress/e2e/builder/fixtures/invitations.ts @@ -1,18 +1,19 @@ -import { - DiscriminatedItem, - Invitation, - PackedFolderItemFactory, -} from '@graasp/sdk'; +import { PackedFolderItemFactory } from '@graasp/sdk'; import { v4 } from 'uuid'; -import type { PermissionLevel } from '@/openapi/client'; +import type { + GenericItem, + Invitation, + PackedItem, + PermissionLevel, +} from '@/openapi/client'; import { MEMBERS } from '../../../fixtures/members'; import { ApiConfig } from '../../../support/types'; export const buildInvitation = (args: { - item: DiscriminatedItem; + item: GenericItem; email?: string; permission?: PermissionLevel; }): Invitation => { @@ -24,32 +25,30 @@ export const buildInvitation = (args: { permission: permission ?? 'read', createdAt: '2021-08-11T12:56:36.834Z', updatedAt: '2021-08-11T12:56:36.834Z', - creator: MEMBERS.ANNA, item, }; }; // warning: default permission admin -const itemsWithInvitations: DiscriminatedItem[] = [ +const itemsWithInvitations = [ PackedFolderItemFactory({ id: 'bcafbd2a-5688-11eb-ae93-0242ac130002', name: 'parent', path: 'bcafbd2a_5688_11eb_ae93_0242ac130002', - }), + }) as PackedItem, PackedFolderItemFactory({ id: 'ecafbd2a-5688-11eb-ae93-0242ac130002', name: 'own_item_name1', creator: MEMBERS.BOB, path: 'bcafbd2a_5688_11eb_ae93_0242ac130002.ecafbd2a_5688_11eb_ae93_0242ac130002', - }), + }) as PackedItem, ]; export const ITEMS_WITH_INVITATIONS = { items: [ - { ...itemsWithInvitations[0], permission: 'admin' }, + itemsWithInvitations[0], { ...itemsWithInvitations[1], - permission: 'admin', // for tests only memberships: [ @@ -80,7 +79,6 @@ export const ITEMS_WITH_INVITATIONS = { email: MEMBERS.BOB.email, createdAt: '2021-08-11T12:56:36.834Z', updatedAt: '2021-08-11T12:56:36.834Z', - creator: MEMBERS.ANNA, }, { id: 'ecafbd1a-5688-11eb-be93-0242ac130006', @@ -89,7 +87,6 @@ export const ITEMS_WITH_INVITATIONS = { email: MEMBERS.CEDRIC.email, createdAt: '2021-08-11T12:56:36.834Z', updatedAt: '2021-08-11T12:56:36.834Z', - creator: MEMBERS.ANNA, }, { id: 'ecbfbd2a-5688-11eb-be93-0242ac130007', @@ -98,7 +95,6 @@ export const ITEMS_WITH_INVITATIONS = { email: MEMBERS.DAVID.email, createdAt: '2021-08-11T12:56:36.834Z', updatedAt: '2021-08-11T12:56:36.834Z', - creator: MEMBERS.ANNA, }, ] as const, }, @@ -107,14 +103,14 @@ export const ITEMS_WITH_INVITATIONS = { } as const satisfies ApiConfig; // warning: default permission admin -const itemsWithInvitationsWriteAccess: DiscriminatedItem[] = [ +const itemsWithInvitationsWriteAccess = [ PackedFolderItemFactory( { id: 'bcafbd2a-5688-11eb-ae93-0242ac130002', path: 'bcafbd2a_5688_11eb_ae93_0242ac130002', }, { permission: 'write' }, - ), + ) as PackedItem, PackedFolderItemFactory( { id: 'ecafbd2a-5688-11eb-ae93-0242ac130002', @@ -122,7 +118,7 @@ const itemsWithInvitationsWriteAccess: DiscriminatedItem[] = [ path: 'bcafbd2a_5688_11eb_ae93_0242ac130002.ecafbd2a_5688_11eb_ae93_0242ac130002', }, { permission: 'write' }, - ), + ) as PackedItem, ]; export const ITEM_WITH_INVITATIONS_WRITE_ACCESS: ApiConfig = { items: [ @@ -149,7 +145,6 @@ export const ITEM_WITH_INVITATIONS_WRITE_ACCESS: ApiConfig = { email: MEMBERS.CEDRIC.email, createdAt: '2021-08-11T12:56:36.834Z', updatedAt: '2021-08-11T12:56:36.834Z', - creator: MEMBERS.ANNA, }, { id: 'ecafbd1a-5688-11eb-be93-0242ac130006', @@ -158,7 +153,6 @@ export const ITEM_WITH_INVITATIONS_WRITE_ACCESS: ApiConfig = { email: MEMBERS.DAVID.email, createdAt: '2021-08-11T12:56:36.834Z', updatedAt: '2021-08-11T12:56:36.834Z', - creator: MEMBERS.ANNA, }, ], }, diff --git a/cypress/e2e/builder/fixtures/items.ts b/cypress/e2e/builder/fixtures/items.ts index 63d379adc..a87992c6a 100644 --- a/cypress/e2e/builder/fixtures/items.ts +++ b/cypress/e2e/builder/fixtures/items.ts @@ -1,12 +1,12 @@ import { - DiscriminatedItem, ItemValidation, - ItemValidationGroup, ItemValidationProcess, ItemValidationStatus, - PackedItem, + PackedFolderItemFactory, } from '@graasp/sdk'; +import type { ItemValidationGroup, PackedItem } from '@/openapi/client'; + import { DEFAULT_FOLDER_ITEM } from '../../../fixtures/items'; import { MEMBERS } from '../../../fixtures/members'; import { ApiConfig, ItemForTest } from '../../../support/types'; @@ -19,12 +19,11 @@ export const generateOwnItems = (number: number): ItemForTest[] => { const path = (i: number) => id(i).replaceAll('-', '_'); return new Array(number).fill(null).map((_, i) => { - const item = { - ...DEFAULT_FOLDER_ITEM, + const item = PackedFolderItemFactory({ id: id(i), name: `item ${i}`, path: path(i), - }; + }) as PackedItem; const paddedI = `${i}`.padStart(12, '0'); const mId = `dafebabe-dead-beef-1234-${paddedI}`; @@ -230,12 +229,11 @@ export const PublishedItemFactory = ( item: itemToPublish, createdAt: new Date().toISOString(), creator: itemToPublish.creator, - totalViews: 0, }, }); export const ItemValidationGroupFactory = ( - validatedItem: DiscriminatedItem, + validatedItem: PackedItem, { status = ItemValidationStatus.Success, isOutDated = false, diff --git a/cypress/e2e/builder/fixtures/links.ts b/cypress/e2e/builder/fixtures/links.ts index 42d02e72c..32a6c4fb1 100644 --- a/cypress/e2e/builder/fixtures/links.ts +++ b/cypress/e2e/builder/fixtures/links.ts @@ -1,12 +1,8 @@ -import { - LinkItemType, - PackedLinkItemFactory, - buildLinkExtra, -} from '@graasp/sdk'; +import { PackedLinkItemFactory, buildLinkExtra } from '@graasp/sdk'; import { CURRENT_MEMBER } from '../../../fixtures/members'; -export const GRAASP_LINK_ITEM: LinkItemType = PackedLinkItemFactory({ +export const GRAASP_LINK_ITEM = PackedLinkItemFactory({ creator: CURRENT_MEMBER, extra: buildLinkExtra({ url: 'https://graasp.eu', @@ -18,19 +14,16 @@ export const GRAASP_LINK_ITEM: LinkItemType = PackedLinkItemFactory({ }), }); -export const GRAASP_LINK_ITEM_IFRAME_ONLY: LinkItemType = PackedLinkItemFactory( - { - ...GRAASP_LINK_ITEM, - id: 'ecafbd2a-5688-11eb-ae91-0242ac130122', - settings: { - showLinkIframe: true, - showLinkButton: false, - }, +export const GRAASP_LINK_ITEM_IFRAME_ONLY = PackedLinkItemFactory({ + ...GRAASP_LINK_ITEM, + id: 'ecafbd2a-5688-11eb-ae91-0242ac130122', + settings: { + showLinkIframe: true, + showLinkButton: false, }, -); +}); -export const YOUTUBE_LINK_ITEM: LinkItemType = PackedLinkItemFactory({ - type: 'embeddedLink', +export const YOUTUBE_LINK_ITEM = PackedLinkItemFactory({ name: 'graasp youtube link', description: 'a description for graasp youtube link', creator: CURRENT_MEMBER, diff --git a/cypress/e2e/builder/fixtures/memberships.ts b/cypress/e2e/builder/fixtures/memberships.ts index 94e47feef..6f7504300 100644 --- a/cypress/e2e/builder/fixtures/memberships.ts +++ b/cypress/e2e/builder/fixtures/memberships.ts @@ -1,7 +1,5 @@ import { Account, - DiscriminatedItem, - ItemMembership, Member, MemberFactory, PackedFolderItemFactory, @@ -9,14 +7,19 @@ import { import { v4 } from 'uuid'; -import type { PermissionLevel } from '@/openapi/client'; +import type { + GenericItem, + ItemMembership, + PackedItem, + PermissionLevel, +} from '@/openapi/client'; import { MEMBERS } from '../../../fixtures/members'; import { ApiConfig } from '../../../support/types'; export const buildItemMembership = (args: { permission?: PermissionLevel; - item: DiscriminatedItem; + item: GenericItem; account: Partial; creator?: Member; }): ItemMembership => ({ @@ -29,7 +32,7 @@ export const buildItemMembership = (args: { id: v4(), }); -const sampleItems: DiscriminatedItem[] = [ +const sampleItems: PackedItem[] = [ PackedFolderItemFactory({ id: 'ecafbd2a-5688-11eb-ae93-0242ac130002', name: 'own_item_name1', diff --git a/cypress/e2e/builder/fixtures/validations.ts b/cypress/e2e/builder/fixtures/validations.ts index d3cfa0e8f..e4c6ee949 100644 --- a/cypress/e2e/builder/fixtures/validations.ts +++ b/cypress/e2e/builder/fixtures/validations.ts @@ -1,15 +1,15 @@ import { - DiscriminatedItem, ItemValidation, - ItemValidationGroup, ItemValidationProcess, ItemValidationStatus, } from '@graasp/sdk'; +import type { ItemValidationGroup, PackedItem } from '@/openapi/client'; + import { ApiConfig } from '../../../support/types'; import { SAMPLE_PUBLIC_ITEMS } from './items'; -export const VALIDATED_ITEM: DiscriminatedItem = { +export const VALIDATED_ITEM: PackedItem = { ...SAMPLE_PUBLIC_ITEMS.items[0], updatedAt: '2019-07-27T07:45:00Z', }; diff --git a/cypress/e2e/builder/invitations/createInvitation.cy.ts b/cypress/e2e/builder/invitations/createInvitation.cy.ts index 00312b1ce..7db35388f 100644 --- a/cypress/e2e/builder/invitations/createInvitation.cy.ts +++ b/cypress/e2e/builder/invitations/createInvitation.cy.ts @@ -1,6 +1,6 @@ import { PackedFolderItemFactory } from '@graasp/sdk'; -import type { PermissionLevel } from '@/openapi/client'; +import type { PackedItem, PermissionLevel } from '@/openapi/client'; import { CREATE_MEMBERSHIP_FORM_ID, @@ -57,7 +57,9 @@ describe('Create Invitation', () => { }); it('cannot invite member with membership', () => { - const item = PackedFolderItemFactory({ creator: MEMBERS.ANNA }); + const item = PackedFolderItemFactory({ + creator: MEMBERS.ANNA, + }) as PackedItem; const items = [ { ...item, diff --git a/cypress/e2e/builder/invitations/viewInvitation.cy.ts b/cypress/e2e/builder/invitations/viewInvitation.cy.ts index f638b7973..9fe62e385 100644 --- a/cypress/e2e/builder/invitations/viewInvitation.cy.ts +++ b/cypress/e2e/builder/invitations/viewInvitation.cy.ts @@ -1,5 +1,7 @@ import { PackedFolderItemFactory } from '@graasp/sdk'; +import type { PackedItem } from '@/openapi/client'; + import { ITEM_RESEND_INVITATION_BUTTON_CLASS, buildInvitationTableRowId, @@ -43,7 +45,10 @@ 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: 'write' }); + const item = PackedFolderItemFactory( + {}, + { permission: 'write' }, + ) as PackedItem; const invitations = [ { id: 'ecafbd2a-5688-11eb-be92-0242ac130005', @@ -52,7 +57,6 @@ describe('Cannot view Invitations for writers and readers', () => { email: MEMBERS.CEDRIC.email, createdAt: '2021-08-11T12:56:36.834Z', updatedAt: '2021-08-11T12:56:36.834Z', - creator: MEMBERS.ANNA, }, { id: 'ecafbd1a-5688-11eb-be93-0242ac130006', @@ -61,7 +65,6 @@ describe('Cannot view Invitations for writers and readers', () => { email: MEMBERS.DAVID.email, createdAt: '2021-08-11T12:56:36.834Z', updatedAt: '2021-08-11T12:56:36.834Z', - creator: MEMBERS.ANNA, }, ]; cy.setUpApi({ items: [{ ...item, invitations }] }); diff --git a/cypress/e2e/builder/item/authorization/itemLogin/utils.ts b/cypress/e2e/builder/item/authorization/itemLogin/utils.ts index becc4b23c..00a3201eb 100644 --- a/cypress/e2e/builder/item/authorization/itemLogin/utils.ts +++ b/cypress/e2e/builder/item/authorization/itemLogin/utils.ts @@ -3,9 +3,10 @@ import { ItemLoginSchemaFactory, ItemLoginSchemaStatus, ItemLoginSchemaType, - PackedItem, } from '@graasp/sdk'; +import type { PackedItem } from '@/openapi/client'; + export const addItemLoginSchema = ( item: PackedItem, itemLoginSchemaType: ItemLoginSchemaType, @@ -13,7 +14,7 @@ export const addItemLoginSchema = ( ): PackedItem & { itemLoginSchema: ItemLoginSchema } => ({ ...item, itemLoginSchema: ItemLoginSchemaFactory({ - item, + item: item as unknown as ItemLoginSchema['item'], type: itemLoginSchemaType, status, }), diff --git a/cypress/e2e/builder/item/authorization/membershipRequest/membershipRequest.cy.ts b/cypress/e2e/builder/item/authorization/membershipRequest/membershipRequest.cy.ts index 32a27142b..6078388a3 100644 --- a/cypress/e2e/builder/item/authorization/membershipRequest/membershipRequest.cy.ts +++ b/cypress/e2e/builder/item/authorization/membershipRequest/membershipRequest.cy.ts @@ -1,4 +1,6 @@ -import { FolderItemFactory, MembershipRequestStatus } from '@graasp/sdk'; +import { MembershipRequestStatus, PackedFolderItemFactory } from '@graasp/sdk'; + +import { v4 } from 'uuid'; import { ITEM_LOGIN_SCREEN_FORBIDDEN_ID, @@ -7,11 +9,10 @@ import { buildDataCyWrapper, } from '../../../../../../src/config/selectors'; import { CURRENT_MEMBER } from '../../../../../fixtures/members'; -import { ItemForTest } from '../../../../../support/types'; import { buildItemPath } from '../../../utils'; it('Request membership when signed in', () => { - const item = FolderItemFactory(); + const item = PackedFolderItemFactory({}, { permission: null }); cy.setUpApi({ items: [item], }); @@ -30,29 +31,17 @@ it('Request membership when signed in', () => { cy.get(`#${REQUEST_MEMBERSHIP_BUTTON_ID}`).should('be.disabled'); }); it('Cannot request membership if item is hidden', () => { - const tmp = FolderItemFactory(); - const item: ItemForTest = { - ...tmp, - visibilities: [ - { - type: 'hidden', - itemPath: tmp.path, - createdAt: '2021-08-11T12:56:36.834Z', - id: 'ecbfbd2a-9644-12db-ae93-0242ac130002', - }, - ], - }; cy.setUpApi({ - items: [item], + items: [], }); - cy.visit(buildItemPath(item.id)); + cy.visit(buildItemPath(v4())); cy.get(`#${ITEM_LOGIN_SCREEN_FORBIDDEN_ID}`).should('be.visible'); }); it('Membership request is already sent', () => { - const item = FolderItemFactory(); + const item = PackedFolderItemFactory({}, { permission: null }); cy.setUpApi({ items: [item], membershipRequests: [ diff --git a/cypress/e2e/builder/item/capsules/navigation.cy.ts b/cypress/e2e/builder/item/capsules/navigation.cy.ts index 88566b849..c082f33b2 100644 --- a/cypress/e2e/builder/item/capsules/navigation.cy.ts +++ b/cypress/e2e/builder/item/capsules/navigation.cy.ts @@ -1,10 +1,10 @@ -import { CapsuleItemFactory, PackedFolderItemFactory } from '@graasp/sdk'; +import { PackedCapsuleItemFactory, PackedFolderItemFactory } from '@graasp/sdk'; import { buildItemCard } from '../../../../../src/config/selectors'; import { HOME_PATH, buildItemPath } from '../../utils'; it('capsule navigates to player from home', () => { - const capsule = CapsuleItemFactory(); + const capsule = PackedCapsuleItemFactory(); cy.setUpApi({ items: [capsule] }); cy.visit(HOME_PATH); @@ -22,7 +22,7 @@ it('capsule navigates to player from home', () => { it('capsule navigates to player from parent folder', () => { const parentItem = PackedFolderItemFactory(); - const capsule = CapsuleItemFactory({ parentItem }); + const capsule = PackedCapsuleItemFactory({ parentItem }); cy.setUpApi({ items: [parentItem, capsule] }); cy.visit(buildItemPath(parentItem.id)); diff --git a/cypress/e2e/builder/item/hide/hideItem.cy.ts b/cypress/e2e/builder/item/hide/hideItem.cy.ts index 8e0084f78..a2e014b0c 100644 --- a/cypress/e2e/builder/item/hide/hideItem.cy.ts +++ b/cypress/e2e/builder/item/hide/hideItem.cy.ts @@ -1,5 +1,7 @@ import { PackedFolderItemFactory } from '@graasp/sdk'; +import type { PackedItem } from '@/openapi/client'; + import { HIDDEN_ITEM_BUTTON_CLASS, SETTINGS_HIDE_ITEM_ID, @@ -18,7 +20,7 @@ import { const hiddenItem = PackedFolderItemFactory( {}, { hiddenVisibility: { type: 'hidden' } }, -); +) as PackedItem; const HIDDEN_ITEM: ItemForTest = { ...hiddenItem, memberships: [ diff --git a/cypress/e2e/builder/item/page/editor.cy.ts b/cypress/e2e/builder/item/page/editor.cy.ts index 45b104971..4a719033d 100644 --- a/cypress/e2e/builder/item/page/editor.cy.ts +++ b/cypress/e2e/builder/item/page/editor.cy.ts @@ -1,4 +1,4 @@ -import { PackedFolderItemFactory, PageItemType } from '@graasp/sdk'; +import { PackedFolderItemFactory } from '@graasp/sdk'; import { ITEM_FORM_LINK_INPUT_ID, @@ -8,9 +8,9 @@ import { buildItemPath } from '../../utils'; const page = { ...PackedFolderItemFactory(), - type: 'page', + type: 'page' as const, extra: {} as never, -} as PageItemType; +}; describe('Pages', () => { it('Click on link card show options', () => { diff --git a/cypress/e2e/builder/item/publish/ccLicense.cy.ts b/cypress/e2e/builder/item/publish/ccLicense.cy.ts index 258c6f320..dc2475181 100644 --- a/cypress/e2e/builder/item/publish/ccLicense.cy.ts +++ b/cypress/e2e/builder/item/publish/ccLicense.cy.ts @@ -1,5 +1,7 @@ import { CCLicenseAdaptions, PackedFolderItemFactory } from '@graasp/sdk'; +import type { PackedItem } from '@/openapi/client'; + import { CC_ALLOW_COMMERCIAL_CONTROL_ID, CC_CC0_CONTROL_ID, @@ -27,22 +29,22 @@ const itemCCLicenseCCBY = PackedFolderItemFactory({ name: 'public item with cc by', settings: { ccLicenseAdaption: 'CC BY' }, description: EMPTY_DESCRIPTION, -}); +}) as PackedItem; const itemCCLicenseCCBYNC = PackedFolderItemFactory({ name: 'public item with cc by nc', settings: { ccLicenseAdaption: 'CC BY-NC' }, description: EMPTY_DESCRIPTION, -}); +}) as PackedItem; const itemCCLicenseCCBYSA = PackedFolderItemFactory({ name: 'public item with cc by sa', settings: { ccLicenseAdaption: 'CC BY-SA' }, description: EMPTY_DESCRIPTION, -}); +}) as PackedItem; const itemCCLicenseCCBYNCND = PackedFolderItemFactory({ name: 'public item with cc by nc nd', settings: { ccLicenseAdaption: 'CC BY-NC-ND' }, description: EMPTY_DESCRIPTION, -}); +}) as PackedItem; const itemWithoutLicense = PackedFolderItemFactory({ name: 'public item without license', @@ -67,7 +69,6 @@ const PUBLISHED_ITEMS_WITH_CC_LICENSE: ItemForTest[] = [ item: itemCCLicenseCCBY, createdAt: '2021-08-11T12:56:36.834Z', creator: MEMBERS.ANNA, - totalViews: 0, }, }, { @@ -78,7 +79,6 @@ const PUBLISHED_ITEMS_WITH_CC_LICENSE: ItemForTest[] = [ type: 'public', itemPath: itemCCLicenseCCBYNC.path, createdAt: '2021-08-11T12:56:36.834Z', - // creator: MEMBERS.ANNA, }, ], published: { @@ -86,7 +86,6 @@ const PUBLISHED_ITEMS_WITH_CC_LICENSE: ItemForTest[] = [ item: itemCCLicenseCCBYNC, createdAt: '2021-08-11T12:56:36.834Z', creator: MEMBERS.ANNA, - totalViews: 0, }, }, { @@ -105,7 +104,6 @@ const PUBLISHED_ITEMS_WITH_CC_LICENSE: ItemForTest[] = [ item: itemCCLicenseCCBYSA, createdAt: '2021-08-11T12:56:36.834Z', creator: MEMBERS.ANNA, - totalViews: 0, }, }, { @@ -124,7 +122,6 @@ const PUBLISHED_ITEMS_WITH_CC_LICENSE: ItemForTest[] = [ item: itemCCLicenseCCBYNCND, createdAt: '2021-08-11T12:56:36.834Z', creator: MEMBERS.ANNA, - totalViews: 0, }, }, ]; diff --git a/cypress/e2e/builder/item/publish/publishedItem.cy.ts b/cypress/e2e/builder/item/publish/publishedItem.cy.ts index 40c80c208..009a5816b 100644 --- a/cypress/e2e/builder/item/publish/publishedItem.cy.ts +++ b/cypress/e2e/builder/item/publish/publishedItem.cy.ts @@ -1,11 +1,11 @@ import { - ItemValidationGroup, ItemValidationStatus, PackedFolderItemFactory, - PackedItem, PublicationStatus, } from '@graasp/sdk'; +import type { ItemValidationGroup, PackedItem } from '@/openapi/client'; + import { EMAIL_NOTIFICATION_CHECKBOX, PUBLIC_VISIBILITY_MODAL_VALIDATE_BUTTON, @@ -149,7 +149,9 @@ describe('Private Item', () => { describe('Ready to Publish Item', () => { const status = PublicationStatus.ReadyToPublish; - const itemValidationGroup = ItemValidationGroupFactory(privateItem); + const itemValidationGroup = ItemValidationGroupFactory( + privateItem, + ) as ItemValidationGroup; beforeEach(() => { setUpAndVisitItemPage(privateItem, { @@ -177,7 +179,7 @@ describe('Private Item', () => { const status = PublicationStatus.Invalid; const itemValidationGroup = ItemValidationGroupFactory(privateItem, { status: ItemValidationStatus.Failure, - }); + }) as ItemValidationGroup; beforeEach(() => { setUpAndVisitItemPage(privateItem, { @@ -229,7 +231,7 @@ describe('Public Item', () => { const status = PublicationStatus.Pending; const itemValidationGroup = ItemValidationGroupFactory(publicItem, { status: ItemValidationStatus.Pending, - }); + }) as ItemValidationGroup; beforeEach(() => { setUpAndVisitItemPage(PublishedItemFactory(publicItem), { @@ -254,7 +256,9 @@ describe('Public Item', () => { describe('Ready to Publish Item', () => { const status = PublicationStatus.ReadyToPublish; - const itemValidationGroup = ItemValidationGroupFactory(publicItem); + const itemValidationGroup = ItemValidationGroupFactory( + publicItem, + ) as ItemValidationGroup; beforeEach(() => { setUpAndVisitItemPage(publicItem, { @@ -284,7 +288,9 @@ describe('Public Item', () => { describe('Published Item', () => { const status = PublicationStatus.Published; - const itemValidationGroup = ItemValidationGroupFactory(publicItem); + const itemValidationGroup = ItemValidationGroupFactory( + publicItem, + ) as ItemValidationGroup; beforeEach(() => { setUpAndVisitItemPage(PublishedItemFactory(publicItem), { diff --git a/cypress/e2e/builder/item/publish/tags.cy.ts b/cypress/e2e/builder/item/publish/tags.cy.ts index 9ab7dbdc1..713a15e71 100644 --- a/cypress/e2e/builder/item/publish/tags.cy.ts +++ b/cypress/e2e/builder/item/publish/tags.cy.ts @@ -1,5 +1,7 @@ import { PackedFolderItemFactory, TagCategory } from '@graasp/sdk'; +import type { PackedItem } from '@/openapi/client'; + import { ITEM_HEADER_ID, ITEM_TAGS_OPEN_MODAL_BUTTON_CY, @@ -44,7 +46,7 @@ describe('Customized Tags', () => { permission: 'admin', publicVisibility: { type: 'public' }, }, - ); + ) as PackedItem; const item = { ...packedItem, published: { @@ -163,7 +165,7 @@ describe('Tags permissions', () => { const item = PackedFolderItemFactory( {}, { permission: null, publicVisibility: {} }, - ); + ) as PackedItem; const publishedItem: ItemForTest = { ...item, visibilities: [ @@ -179,7 +181,6 @@ describe('Tags permissions', () => { item, createdAt: '2021-08-11T12:56:36.834Z', creator: MEMBERS.ANNA, - totalViews: 0, }, }; cy.setUpApi({ @@ -197,7 +198,7 @@ describe('Tags permissions', () => { const item = PackedFolderItemFactory( {}, { permission: 'read', publicVisibility: {} }, - ); + ) as PackedItem; const publishedItem: ItemForTest = { ...item, visibilities: [ @@ -213,7 +214,6 @@ describe('Tags permissions', () => { item, createdAt: '2021-08-11T12:56:36.834Z', creator: MEMBERS.ANNA, - totalViews: 0, }, }; cy.setUpApi({ diff --git a/cypress/e2e/builder/item/settings/itemSettings.cy.ts b/cypress/e2e/builder/item/settings/itemSettings.cy.ts index 0c6b52a17..047504a21 100644 --- a/cypress/e2e/builder/item/settings/itemSettings.cy.ts +++ b/cypress/e2e/builder/item/settings/itemSettings.cy.ts @@ -59,7 +59,9 @@ describe('Item Settings', () => { describe('admin rights', () => { it('setting button opens settings page', () => { - const item = PackedFolderItemFactory({ settings: { showChatbox: true } }); + const item = PackedFolderItemFactory({ + settings: { showChatbox: true }, + }); cy.setUpApi({ items: [item] }); // manual click to verify settings button works correctly cy.visit(buildItemPath(item.id)); @@ -70,7 +72,9 @@ describe('Item Settings', () => { describe('Metadata table', () => { it('folder', () => { - const item = PackedFolderItemFactory({ creator: MEMBERS.BOB }); + const item = PackedFolderItemFactory({ + creator: MEMBERS.BOB, + }); const { id, name, type, creator } = item; cy.setUpApi({ items: [item] }); @@ -85,7 +89,9 @@ describe('Item Settings', () => { }); it('file', () => { - const FILE = PackedFileItemFactory({ creator: MEMBERS.BOB }); + const FILE = PackedFileItemFactory({ + creator: MEMBERS.BOB, + }); cy.setUpApi({ items: [FILE] }); const { id, name, type, extra, creator } = FILE; diff --git a/cypress/e2e/builder/item/settings/thumbnail.cy.ts b/cypress/e2e/builder/item/settings/thumbnail.cy.ts index 32490b09e..90e7dae96 100644 --- a/cypress/e2e/builder/item/settings/thumbnail.cy.ts +++ b/cypress/e2e/builder/item/settings/thumbnail.cy.ts @@ -1,4 +1,6 @@ -import { PackedFolderItemFactory, PackedItem } from '@graasp/sdk'; +import { PackedFolderItemFactory } from '@graasp/sdk'; + +import type { PackedItem } from '@/openapi/client'; import { CROP_MODAL_CONFIRM_BUTTON_ID, diff --git a/cypress/e2e/builder/item/view/viewDocument.cy.ts b/cypress/e2e/builder/item/view/viewDocument.cy.ts index c13228ed3..7fbd5ac61 100644 --- a/cypress/e2e/builder/item/view/viewDocument.cy.ts +++ b/cypress/e2e/builder/item/view/viewDocument.cy.ts @@ -1,11 +1,13 @@ import { PackedDocumentItemFactory } from '@graasp/sdk'; +import type { DocumentItem, PackedItem } from '@/openapi/client'; + import { CURRENT_MEMBER } from '../../../../fixtures/members'; import { expectDocumentViewScreenLayout } from '../../../../support/viewUtils'; import { buildItemMembership } from '../../fixtures/memberships'; import { buildItemPath } from '../../utils'; -const DOCUMENT = PackedDocumentItemFactory(); +const DOCUMENT = PackedDocumentItemFactory() as PackedItem & DocumentItem; describe('View Document', () => { describe('Grid', () => { diff --git a/cypress/e2e/builder/item/view/viewLink.cy.ts b/cypress/e2e/builder/item/view/viewLink.cy.ts index e8936485f..fe8479b92 100644 --- a/cypress/e2e/builder/item/view/viewLink.cy.ts +++ b/cypress/e2e/builder/item/view/viewLink.cy.ts @@ -1,3 +1,7 @@ +import { PackedLinkItemFactory } from '@graasp/sdk'; + +import type { PackedItem } from '@/openapi/client'; + import { CURRENT_MEMBER } from '../../../../fixtures/members'; import { expectLinkViewScreenLayout } from '../../../../support/viewUtils'; import { @@ -8,38 +12,46 @@ import { import { buildItemMembership } from '../../fixtures/memberships'; import { HOME_PATH, buildItemPath } from '../../utils'; +const linkItem = PackedLinkItemFactory(GRAASP_LINK_ITEM) as PackedItem; +const linkItemIframeOnly = PackedLinkItemFactory( + GRAASP_LINK_ITEM_IFRAME_ONLY, +) as PackedItem; +const linkItemYoutube = PackedLinkItemFactory(YOUTUBE_LINK_ITEM) as PackedItem; + +const items = [ + { + ...linkItem, + memberships: [ + buildItemMembership({ + item: linkItem, + account: CURRENT_MEMBER, + }), + ], + }, + { + ...linkItemIframeOnly, + memberships: [ + buildItemMembership({ + item: linkItemIframeOnly, + account: CURRENT_MEMBER, + }), + ], + }, + { + ...linkItemYoutube, + memberships: [ + buildItemMembership({ + item: linkItemYoutube, + account: CURRENT_MEMBER, + }), + ], + }, +]; + describe('Links', () => { beforeEach(() => { cy.setUpApi({ - items: [ - { - ...GRAASP_LINK_ITEM, - memberships: [ - buildItemMembership({ - item: GRAASP_LINK_ITEM, - account: CURRENT_MEMBER, - }), - ], - }, - { - ...GRAASP_LINK_ITEM_IFRAME_ONLY, - memberships: [ - buildItemMembership({ - item: GRAASP_LINK_ITEM_IFRAME_ONLY, - account: CURRENT_MEMBER, - }), - ], - }, - { - ...YOUTUBE_LINK_ITEM, - memberships: [ - buildItemMembership({ - item: YOUTUBE_LINK_ITEM, - account: CURRENT_MEMBER, - }), - ], - }, - ], + items, }); }); diff --git a/cypress/e2e/builder/item/view/viewThumbnails.cy.ts b/cypress/e2e/builder/item/view/viewThumbnails.cy.ts index 1d073a302..360bd17bb 100644 --- a/cypress/e2e/builder/item/view/viewThumbnails.cy.ts +++ b/cypress/e2e/builder/item/view/viewThumbnails.cy.ts @@ -1,4 +1,6 @@ -import { PackedFolderItemFactory, PackedItem } from '@graasp/sdk'; +import { PackedFolderItemFactory } from '@graasp/sdk'; + +import type { PackedItem } from '@/openapi/client'; import { HEADER_MEMBER_MENU_BUTTON_ID, diff --git a/cypress/e2e/builder/memberships/createItemMembership.cy.ts b/cypress/e2e/builder/memberships/createItemMembership.cy.ts index f0bd92d5a..baec1e953 100644 --- a/cypress/e2e/builder/memberships/createItemMembership.cy.ts +++ b/cypress/e2e/builder/memberships/createItemMembership.cy.ts @@ -1,6 +1,6 @@ import { PackedFileItemFactory, PackedFolderItemFactory } from '@graasp/sdk'; -import type { PermissionLevel } from '@/openapi/client'; +import type { PackedItem, PermissionLevel } from '@/openapi/client'; import { CREATE_MEMBERSHIP_FORM_ID, @@ -136,7 +136,7 @@ describe('Create Membership', () => { }); it('cannot add membership item twice', () => { - const ITEM = PackedFolderItemFactory(); + const ITEM = PackedFolderItemFactory() as PackedItem; const account = MEMBERS.ANNA; cy.setUpApi({ items: [ diff --git a/cypress/e2e/builder/memberships/deleteItemMembership.cy.ts b/cypress/e2e/builder/memberships/deleteItemMembership.cy.ts index 3e46db221..534bc73b9 100644 --- a/cypress/e2e/builder/memberships/deleteItemMembership.cy.ts +++ b/cypress/e2e/builder/memberships/deleteItemMembership.cy.ts @@ -1,4 +1,4 @@ -import { ItemMembership, PackedFolderItemFactory } from '@graasp/sdk'; +import { PackedFolderItemFactory } from '@graasp/sdk'; import { v4 } from 'uuid'; @@ -63,16 +63,20 @@ describe('Delete Membership', () => { memberships: [ { id: v4(), - permission: 'admin', + permission: 'admin' as const, account: CURRENT_MEMBER, item, - } as unknown as ItemMembership, + updatedAt: new Date().toISOString(), + createdAt: new Date().toISOString(), + }, { id: v4(), - permission: 'read', + permission: 'read' as const, account: MEMBERS.BOB, item, - } as unknown as ItemMembership, + updatedAt: new Date().toISOString(), + createdAt: new Date().toISOString(), + }, ], }, ]; diff --git a/cypress/e2e/builder/memberships/viewMemberships.cy.ts b/cypress/e2e/builder/memberships/viewMemberships.cy.ts index 63e735be9..f50ea0720 100644 --- a/cypress/e2e/builder/memberships/viewMemberships.cy.ts +++ b/cypress/e2e/builder/memberships/viewMemberships.cy.ts @@ -1,5 +1,6 @@ import { GuestFactory, + ItemLoginSchema, ItemLoginSchemaFactory, ItemLoginSchemaStatus, ItemLoginSchemaType, @@ -7,7 +8,7 @@ import { PackedFolderItemFactory, } from '@graasp/sdk'; -import type { PermissionLevel } from '@/openapi/client'; +import type { PackedItem, PermissionLevel } from '@/openapi/client'; import { buildDataCyWrapper, @@ -21,7 +22,7 @@ import { CURRENT_MEMBER, MEMBERS } from '../../../fixtures/members'; import { buildItemMembership } from '../fixtures/memberships'; import { buildItemPath, buildItemSharePath } from '../utils'; -const itemWithAdmin = { ...PackedFolderItemFactory() }; +const itemWithAdmin = { ...PackedFolderItemFactory() } as PackedItem; const adminMembership = buildItemMembership({ item: itemWithAdmin, permission: 'admin', @@ -122,7 +123,10 @@ describe('View Memberships - Individual', () => { describe('View Memberships - Hidden item', () => { it('view disabled memberships for hidden item', () => { - const hiddenItem = PackedFolderItemFactory({}, { hiddenVisibility: {} }); + const hiddenItem = PackedFolderItemFactory( + {}, + { hiddenVisibility: {} }, + ) as PackedItem; const adminHiddenMembership = buildItemMembership({ item: hiddenItem, permission: 'admin', @@ -143,7 +147,7 @@ describe('View Memberships - Hidden item', () => { }); const itemLoginSchema = ItemLoginSchemaFactory({ type: ItemLoginSchemaType.Username, - item: hiddenItem, + item: hiddenItem as unknown as ItemLoginSchema['item'], }); const guestMemberships = [ buildItemMembership({ @@ -218,7 +222,7 @@ describe('View Memberships - Hidden item', () => { it('view frozen guest membership', () => { const itemLoginSchema = ItemLoginSchemaFactory({ type: ItemLoginSchemaType.Username, - item: itemWithAdmin, + item: itemWithAdmin as unknown as ItemLoginSchema['item'], status: ItemLoginSchemaStatus.Freeze, }); const guestMemberships = [ @@ -269,7 +273,7 @@ describe('View Memberships - Hidden item', () => { it('view disabled guest membership', () => { const itemLoginSchema = ItemLoginSchemaFactory({ type: ItemLoginSchemaType.Username, - item: itemWithAdmin, + item: itemWithAdmin as unknown as ItemLoginSchema['item'], status: ItemLoginSchemaStatus.Disabled, }); const guestMemberships = [ @@ -323,7 +327,7 @@ describe('View Memberships - Guest', () => { it('view guest membership', () => { const itemLoginSchema = ItemLoginSchemaFactory({ type: ItemLoginSchemaType.Username, - item: itemWithAdmin, + item: itemWithAdmin as unknown as ItemLoginSchema['item'], }); const guestMemberships = [ buildItemMembership({ @@ -372,7 +376,7 @@ describe('View Memberships - Guest', () => { it('view frozen guest membership', () => { const itemLoginSchema = ItemLoginSchemaFactory({ type: ItemLoginSchemaType.Username, - item: itemWithAdmin, + item: itemWithAdmin as unknown as ItemLoginSchema['item'], status: ItemLoginSchemaStatus.Freeze, }); const guestMemberships = [ @@ -423,7 +427,7 @@ describe('View Memberships - Guest', () => { it('view disabled guest membership', () => { const itemLoginSchema = ItemLoginSchemaFactory({ type: ItemLoginSchemaType.Username, - item: itemWithAdmin, + item: itemWithAdmin as unknown as ItemLoginSchema['item'], status: ItemLoginSchemaStatus.Disabled, }); const guestMemberships = [ @@ -475,7 +479,10 @@ describe('View Memberships - Guest', () => { describe('View Memberships Read-Only Mode', () => { it('view membership in settings read-only mode', () => { - const item = PackedFolderItemFactory({}, { permission: 'write' }); + const item = PackedFolderItemFactory( + {}, + { permission: 'write' }, + ) as PackedItem; const ownMembership = buildItemMembership({ item, permission: 'write', diff --git a/cypress/e2e/player/autoLogin.cy.ts b/cypress/e2e/player/autoLogin.cy.ts index 1a8860081..5f6c94a98 100644 --- a/cypress/e2e/player/autoLogin.cy.ts +++ b/cypress/e2e/player/autoLogin.cy.ts @@ -1,10 +1,13 @@ import { - FolderItemFactory, GuestFactory, + ItemLoginSchema, ItemLoginSchemaFactory, ItemLoginSchemaType, + PackedFolderItemFactory, } from '@graasp/sdk'; +import type { PackedItem } from '@/openapi/client'; + import { AUTO_LOGIN_CONTAINER_ID, AUTO_LOGIN_ERROR_CONTAINER_ID, @@ -25,12 +28,14 @@ const buildAutoLoginPath = ({ return url; }; -const pseudonimizedItem = FolderItemFactory({ name: 'Pseudo Item' }); +const pseudonimizedItem = PackedFolderItemFactory({ + name: 'Pseudo Item', +}) as PackedItem; const pseudoMember = GuestFactory({ name: 'bob-guest', itemLoginSchema: ItemLoginSchemaFactory({ type: ItemLoginSchemaType.Username, - item: pseudonimizedItem, + item: pseudonimizedItem as unknown as ItemLoginSchema['item'], }), }); diff --git a/cypress/e2e/player/hidden.cy.ts b/cypress/e2e/player/hidden.cy.ts index 02d4f7c4a..c6366dad2 100644 --- a/cypress/e2e/player/hidden.cy.ts +++ b/cypress/e2e/player/hidden.cy.ts @@ -1,5 +1,4 @@ import { - DocumentItemFactory, PackedDocumentItemFactory, PackedFolderItemFactory, } from '@graasp/sdk'; @@ -18,7 +17,7 @@ const parentItem = PackedFolderItemFactory({ }); const FOLDER_WITH_HIDDEN_ITEMS: ItemForTest[] = [ parentItem, - DocumentItemFactory({ parentItem, settings: { isCollapsible: false } }), + PackedDocumentItemFactory({ parentItem, settings: { isCollapsible: false } }), PackedDocumentItemFactory( { parentItem, settings: { isCollapsible: false } }, { hiddenVisibility: {} }, diff --git a/cypress/e2e/player/main.cy.ts b/cypress/e2e/player/main.cy.ts index 77af568fa..2d689d506 100644 --- a/cypress/e2e/player/main.cy.ts +++ b/cypress/e2e/player/main.cy.ts @@ -1,4 +1,4 @@ -import { DiscriminatedItem, DocumentItemFactory } from '@graasp/sdk'; +import { PackedDocumentItemFactory } from '@graasp/sdk'; import { FOLDER_NAME_TITLE_CLASS, @@ -34,7 +34,7 @@ import { expectLinkViewScreenLayout, } from './utils'; -const GRAASP_DOCUMENT_ITEM = DocumentItemFactory(); +const GRAASP_DOCUMENT_ITEM = PackedDocumentItemFactory(); const items = [ { ...GRAASP_LINK_ITEM, permission: 'admin' as const }, { @@ -158,14 +158,13 @@ describe('Main Screen', () => { expectFolderLayout({ rootId, - items: STATIC_ELECTRICITY.items as DiscriminatedItem[], + items: STATIC_ELECTRICITY.items, }); }); it(`Cannot display ${STATIC_ELECTRICITY.items[0].name} if does not have membership`, () => { cy.setUpApi({ items: STATIC_ELECTRICITY.items.map((i) => { - const { permission: _permission, ...item } = i; - return item; + return { ...i, permission: null }; }), currentMember: MEMBERS.BOB, }); @@ -182,7 +181,7 @@ describe('Main Screen', () => { expectFolderLayout({ rootId, - items: PUBLIC_STATIC_ELECTRICITY.items as DiscriminatedItem[], + items: PUBLIC_STATIC_ELECTRICITY.items, }); }); }); diff --git a/cypress/e2e/player/navigation.cy.ts b/cypress/e2e/player/navigation.cy.ts index e1f54bc7e..4eb6fe770 100644 --- a/cypress/e2e/player/navigation.cy.ts +++ b/cypress/e2e/player/navigation.cy.ts @@ -1,4 +1,4 @@ -import { LinkItemFactory, PackedFolderItemFactory } from '@graasp/sdk'; +import { PackedFolderItemFactory, PackedLinkItemFactory } from '@graasp/sdk'; import { NEXT_ITEM_NAV_BUTTON_ID, @@ -100,7 +100,7 @@ describe('Internal navigation', () => { `/player/${target.id}`, window.location.origin, ).toString(); - const link = LinkItemFactory({ + const link = PackedLinkItemFactory({ name: 'Link to target', extra: { embeddedLink: { diff --git a/cypress/e2e/player/pseudonimized.cy.ts b/cypress/e2e/player/pseudonimized.cy.ts index 1ec701274..3716af6b5 100644 --- a/cypress/e2e/player/pseudonimized.cy.ts +++ b/cypress/e2e/player/pseudonimized.cy.ts @@ -1,4 +1,4 @@ -import { FolderItemFactory, ItemLoginSchemaType } from '@graasp/sdk'; +import { ItemLoginSchemaType, PackedFolderItemFactory } from '@graasp/sdk'; import { ENROLL_BUTTON_SELECTOR, @@ -11,7 +11,7 @@ import { buildContentPagePath } from './utils'; describe('Pseudonimized access', () => { it('Logged out', () => { const rootItem: ItemForTest = { - ...FolderItemFactory({ name: 'pseudo' }), + ...PackedFolderItemFactory({ name: 'pseudo' }, { permission: null }), itemLoginSchema: { type: `${ItemLoginSchemaType.Username}` }, }; const items = [rootItem]; @@ -37,7 +37,7 @@ describe('Pseudonimized access', () => { it('Enroll', () => { const rootItem: ItemForTest = { - ...FolderItemFactory({ name: 'pseudo' }), + ...PackedFolderItemFactory({ name: 'pseudo' }, { permission: null }), itemLoginSchema: { type: `${ItemLoginSchemaType.Username}` }, }; const items = [rootItem]; diff --git a/cypress/e2e/player/redirections.cy.ts b/cypress/e2e/player/redirections.cy.ts index 254fdf53d..4f24f644e 100644 --- a/cypress/e2e/player/redirections.cy.ts +++ b/cypress/e2e/player/redirections.cy.ts @@ -1,20 +1,23 @@ import { FolderItemFactory, GuestFactory, + ItemLoginSchema, ItemLoginSchemaFactory, ItemLoginSchemaType, } from '@graasp/sdk'; +import type { FolderItem } from '@/openapi/client'; + import { FORBIDDEN_CONTENT_CONTAINER_ID } from '../../../src/config/selectors'; import { FOLDER_WITH_SUBFOLDER_ITEM } from '../../fixtures/items'; import { TestHelper, buildContentPagePath, buildMainPath } from './utils'; -const item = FolderItemFactory({ name: 'Pseudo Item' }); +const item = FolderItemFactory({ name: 'Pseudo Item' }) as FolderItem; const pseudoMember = GuestFactory({ name: 'bob-guest', itemLoginSchema: ItemLoginSchemaFactory({ type: ItemLoginSchemaType.Username, - item, + item: item as unknown as ItemLoginSchema['item'], }), }); diff --git a/cypress/e2e/player/shuffle.cy.ts b/cypress/e2e/player/shuffle.cy.ts index 8aed2f786..03df1b2fd 100644 --- a/cypress/e2e/player/shuffle.cy.ts +++ b/cypress/e2e/player/shuffle.cy.ts @@ -1,5 +1,3 @@ -import { DiscriminatedItem } from '@graasp/sdk'; - import { FOLDER_NAME_TITLE_CLASS, buildTreeItemClass, @@ -35,8 +33,7 @@ describe.skip('Shuffle', () => { expectFolderLayout({ rootId: root.id, - items: - FOLDER_WITH_FIVE_ORDERED_SUBFOLDER_ITEMS.items as DiscriminatedItem[], + items: FOLDER_WITH_FIVE_ORDERED_SUBFOLDER_ITEMS.items, }); cy.get(`.${buildTreeItemClass(root.id)}`) @@ -65,8 +62,7 @@ describe.skip('Shuffle', () => { expectFolderLayout({ rootId: root.id, - items: - FOLDER_WITH_FIVE_ORDERED_SUBFOLDER_ITEMS.items as DiscriminatedItem[], + items: FOLDER_WITH_FIVE_ORDERED_SUBFOLDER_ITEMS.items, }); // shuffled order is always the same for a given member + item id @@ -102,8 +98,7 @@ describe.skip('Shuffle', () => { expectFolderLayout({ rootId: root.id, - items: - FOLDER_WITH_FIVE_ORDERED_SUBFOLDER_ITEMS.items as DiscriminatedItem[], + items: FOLDER_WITH_FIVE_ORDERED_SUBFOLDER_ITEMS.items, }); // shuffled order is always the same for a given member + item id @@ -139,8 +134,7 @@ describe.skip('Shuffle', () => { expectFolderLayout({ rootId: root.id, - items: - FOLDER_WITH_FIVE_ORDERED_SUBFOLDER_ITEMS.items as DiscriminatedItem[], + items: FOLDER_WITH_FIVE_ORDERED_SUBFOLDER_ITEMS.items, }); // shuffled order is always the same for a given member + item id @@ -176,8 +170,7 @@ describe.skip('Shuffle', () => { expectFolderLayout({ rootId: root.id, - items: - ANOTHER_FOLDER_WITH_FIVE_ORDERED_SUBFOLDER_ITEMS.items as DiscriminatedItem[], + items: ANOTHER_FOLDER_WITH_FIVE_ORDERED_SUBFOLDER_ITEMS.items, }); // shuffled order is always the same for a given member + item id @@ -227,8 +220,7 @@ describe.skip('Shuffle', () => { expectFolderLayout({ rootId: root.id, - items: - FOLDER_WITH_FIVE_ORDERED_SUBFOLDER_ITEMS.items as DiscriminatedItem[], + items: FOLDER_WITH_FIVE_ORDERED_SUBFOLDER_ITEMS.items, }); // shuffled order is always the same for a given member + item id @@ -265,8 +257,7 @@ describe.skip('Shuffle', () => { expectFolderLayout({ rootId: root.id, - items: - ANOTHER_FOLDER_WITH_FIVE_ORDERED_SUBFOLDER_ITEMS.items as DiscriminatedItem[], + items: ANOTHER_FOLDER_WITH_FIVE_ORDERED_SUBFOLDER_ITEMS.items, }); // shuffled order is always the same for a given member + item id @@ -318,8 +309,7 @@ describe.skip('Shuffle', () => { expectFolderLayout({ rootId: root.id, - items: - FOLDER_WITH_FIVE_ORDERED_SUBFOLDER_ITEMS.items as DiscriminatedItem[], + items: FOLDER_WITH_FIVE_ORDERED_SUBFOLDER_ITEMS.items, }); // shuffled order is always the same for a given member + item id @@ -357,8 +347,7 @@ describe.skip('Shuffle', () => { expectFolderLayout({ rootId: root.id, - items: - ANOTHER_FOLDER_WITH_FIVE_ORDERED_SUBFOLDER_ITEMS.items as DiscriminatedItem[], + items: ANOTHER_FOLDER_WITH_FIVE_ORDERED_SUBFOLDER_ITEMS.items, }); // shuffled order is always the same for a given member + item id @@ -397,8 +386,7 @@ describe.skip('Shuffle', () => { expectFolderLayout({ rootId: root.id, - items: - YET_ANOTHER_FOLDER_WITH_FIVE_ORDERED_SUBFOLDER_ITEMS.items as DiscriminatedItem[], + items: YET_ANOTHER_FOLDER_WITH_FIVE_ORDERED_SUBFOLDER_ITEMS.items, }); // shuffled order is always the same for a given member + item id diff --git a/cypress/e2e/player/utils.ts b/cypress/e2e/player/utils.ts index 910495c08..720b4e038 100644 --- a/cypress/e2e/player/utils.ts +++ b/cypress/e2e/player/utils.ts @@ -1,11 +1,6 @@ import { - AppItemType, CompleteGuest, - DiscriminatedItem, - DocumentItemType, - FileItemType, HttpMethod, - LinkItemType, MimeTypes, appendQueryParamToUrl, getDocumentExtra, @@ -16,6 +11,15 @@ import { import { StatusCodes } from 'http-status-codes'; +import type { + AppItem, + DocumentItem, + EmbeddedLinkItem, + FileItem, + GenericItem, + Item, +} from '@/openapi/client'; + import { DEFAULT_LINK_SHOW_BUTTON } from '../../../src/config/constants'; import { MAIN_MENU_ID, @@ -48,7 +52,7 @@ export const expectLinkViewScreenLayout = ({ id, extra, settings, -}: LinkItemType): void => { +}: EmbeddedLinkItem): void => { const { url, html } = getLinkExtra(extra) || {}; // embedded element @@ -81,7 +85,7 @@ export const expectLinkViewScreenLayout = ({ } }; -export const expectAppViewScreenLayout = ({ id, extra }: AppItemType): void => { +export const expectAppViewScreenLayout = ({ id, extra }: AppItem): void => { const { url } = extra.app; const appUrl = appendQueryParamToUrl(url, { itemId: id }); @@ -91,10 +95,7 @@ export const expectAppViewScreenLayout = ({ id, extra }: AppItemType): void => { .should('contain', appUrl); }; -export const expectFileViewScreenLayout = ({ - id, - extra, -}: FileItemType): void => { +export const expectFileViewScreenLayout = ({ id, extra }: FileItem): void => { const mimetype = getFileExtra(extra)?.mimetype ?? ''; // embedded element let selector = ''; @@ -111,7 +112,7 @@ export const expectFileViewScreenLayout = ({ export const expectDocumentViewScreenLayout = ({ id, extra, -}: DocumentItemType): void => { +}: DocumentItem): void => { cy.get(`#${buildDocumentId(id)}`).then((editor) => { expect(editor.html()).to.contain(getDocumentExtra(extra)?.content); }); @@ -126,7 +127,7 @@ export const expectFolderLayout = ({ items, }: { rootId: string; - items: DiscriminatedItem[]; + items: Item[]; }): void => { const children = items.filter( (item) => getParentFromPath(item.path) === rootId, @@ -176,12 +177,12 @@ export class TestHelper { private isLoggedIn: boolean = false; private readonly hasAccessToItem: boolean = true; private readonly pseudoMember: CompleteGuest; - private readonly item: DiscriminatedItem; + private readonly item: GenericItem; private readonly returnItemLoginSchemaType: boolean = true; constructor(args: { pseudoMember: CompleteGuest; - item: DiscriminatedItem; + item: GenericItem; initiallyIsLoggedIn?: boolean; returnItemLoginSchemaType?: boolean; hasAccessToItem?: boolean; diff --git a/cypress/fixtures/analytics/items.ts b/cypress/fixtures/analytics/items.ts index 83b10d609..16fa9dc2e 100644 --- a/cypress/fixtures/analytics/items.ts +++ b/cypress/fixtures/analytics/items.ts @@ -1,27 +1,25 @@ import { - DiscriminatedItem, - DocumentItemFactory, - FolderItemFactory, PackedAppItemFactory, + PackedDocumentItemFactory, PackedFolderItemFactory, } from '@graasp/sdk'; import { CURRENT_MEMBER, MEMBERS } from '../members'; -const MOCK_ITEMS: DiscriminatedItem[] = [ - FolderItemFactory({ +const MOCK_ITEMS = [ + PackedFolderItemFactory({ id: '2162f6ec-60f3-4339-be17-765a49d638c3', name: 'folder1', path: '2162f6ec_60f3_4339_be17_765a49d638c3', creator: CURRENT_MEMBER, }), - FolderItemFactory({ + PackedFolderItemFactory({ id: '81950088-ec8b-4afc-a8d2-4c6ddffdc497', name: 'folder2', path: '2162f6ec_60f3_4339_be17_765a49d638c3.81950088_ec8b_4afc_a8d2_4c6ddffdc497', creator: CURRENT_MEMBER, }), - DocumentItemFactory({ + PackedDocumentItemFactory({ id: '865fad9a-a6e8-4c5f-899d-7f845bf37a1d', name: 'document1', path: '865fad9a_a6e8_4c5f_899d_7f845bf37a1d', @@ -32,7 +30,7 @@ const MOCK_ITEMS: DiscriminatedItem[] = [ }, creator: CURRENT_MEMBER, }), - DocumentItemFactory({ + PackedDocumentItemFactory({ id: '02ae7c43-aaf8-45b7-a665-829fcf160550', name: 'document2', path: '2162f6ec_60f3_4339_be17_765a49d638c3.81950088_ec8b_4afc_a8d2_4c6ddffdc497.02ae7c43_aaf8_45b7_a665_829fcf160550', @@ -43,19 +41,19 @@ const MOCK_ITEMS: DiscriminatedItem[] = [ }, creator: CURRENT_MEMBER, }), - FolderItemFactory({ + PackedFolderItemFactory({ id: 'c884c33a-f8db-4a20-9935-d10b8ca758a4', name: 'folder3', path: 'c884c33a_f8db_4a20_9935_d10b8ca758a4', creator: MEMBERS.BOB, }), - FolderItemFactory({ + PackedFolderItemFactory({ id: '5dd7ed57-59b2-4058-9e70-b171a5c50be9', name: 'sharedFolder1', path: 'c884c33a_f8db_4a20_9935_d10b8ca758a4.5dd7ed57_59b2_4058_9e70_b171a5c50be9', creator: MEMBERS.BOB, }), - DocumentItemFactory({ + PackedDocumentItemFactory({ id: '676d82b9-5a4c-4127-9807-2ad19b073526', name: 'sharedDocument1', path: 'c884c33a_f8db_4a20_9935_d10b8ca758a4.5dd7ed57_59b2_4058_9e70_b171a5c50be9.676d82b9_5a4c_4127_9807_2ad19b073526', diff --git a/cypress/fixtures/apps.ts b/cypress/fixtures/apps.ts index 134141303..82979beee 100644 --- a/cypress/fixtures/apps.ts +++ b/cypress/fixtures/apps.ts @@ -1,13 +1,12 @@ -import { AppItemFactory, AppItemType, PackedAppItemFactory } from '@graasp/sdk'; +import { AppItemFactory, PackedAppItemFactory } from '@graasp/sdk'; import { API_HOST } from '../support/env'; -import { ItemForTest } from '../support/types'; import { APP_NAME } from './apps/apps'; import { DEFAULT_FOLDER_ITEM } from './items'; import { CURRENT_MEMBER, MEMBERS } from './members'; // mock an app with the graasp link -export const GRAASP_APP_ITEM: AppItemType = AppItemFactory({ +export const GRAASP_APP_ITEM = AppItemFactory({ id: 'baefbd2a-5688-11eb-ae91-0242ac130002', name: 'graasp app', description: 'a description for graasp app', @@ -54,7 +53,7 @@ export const GRAASP_APP_CHILDREN_ITEM = AppItemFactory({ creator: CURRENT_MEMBER, }); -export const APP_USING_CONTEXT_ITEM: ItemForTest = PackedAppItemFactory( +export const APP_USING_CONTEXT_ITEM = PackedAppItemFactory( { id: 'ecafbd2a-5688-12eb-ae91-0272ac130002', path: 'ecafbd2a_5688_12eb_ae91_0272ac130002', @@ -74,7 +73,7 @@ export const APP_USING_CONTEXT_ITEM: ItemForTest = PackedAppItemFactory( }, ); -export const PUBLIC_APP_USING_CONTEXT_ITEM: ItemForTest = { +export const PUBLIC_APP_USING_CONTEXT_ITEM = { ...PackedAppItemFactory( { id: 'ecafbd2a-5688-12eb-ae91-0272ac130003', diff --git a/cypress/fixtures/files.ts b/cypress/fixtures/files.ts index c17030579..883be12e5 100644 --- a/cypress/fixtures/files.ts +++ b/cypress/fixtures/files.ts @@ -1,9 +1,6 @@ -import { - FileItemType, - MimeTypes, - PackedFileItemFactory, - buildFileExtra, -} from '@graasp/sdk'; +import { MimeTypes, PackedFileItemFactory, buildFileExtra } from '@graasp/sdk'; + +import type { FileItem } from '@/openapi/client'; import { MOCK_IMAGE_URL, MOCK_PDF_URL, MOCK_VIDEO_URL } from './fileLinks'; import { CURRENT_MEMBER } from './members'; @@ -11,7 +8,7 @@ import { CURRENT_MEMBER } from './members'; export const ICON_FILEPATH = 'files/icon.png'; export const TEXT_FILEPATH = 'files/sometext.txt'; -export const IMAGE_ITEM_DEFAULT: FileItemType & { readFilepath: string } = { +export const IMAGE_ITEM_DEFAULT: FileItem & { readFilepath: string } = { id: 'bd5519a2-5ba9-4305-b221-185facbe6a99', name: 'icon.png', description: 'a default image description', @@ -36,7 +33,7 @@ export const IMAGE_ITEM_DEFAULT: FileItemType & { readFilepath: string } = { lang: 'en', }; -export const VIDEO_ITEM_DEFAULT: FileItemType & { readFilepath: string } = { +export const VIDEO_ITEM_DEFAULT: FileItem & { readFilepath: string } = { id: 'qd5519a2-5ba9-4305-b221-185facbe6a99', name: 'video.mp4', description: 'a default video description', @@ -61,7 +58,7 @@ export const VIDEO_ITEM_DEFAULT: FileItemType & { readFilepath: string } = { lang: 'en', }; -export const PDF_ITEM_DEFAULT: FileItemType & { readFilepath: string } = { +export const PDF_ITEM_DEFAULT: FileItem & { readFilepath: string } = { id: 'cd5519a2-5ba9-4305-b221-185facbe6a99', name: 'doc.pdf', description: 'a default pdf description', diff --git a/cypress/fixtures/items.ts b/cypress/fixtures/items.ts index 52faa955b..bffefd8a9 100644 --- a/cypress/fixtures/items.ts +++ b/cypress/fixtures/items.ts @@ -1,9 +1,7 @@ import { - DocumentItemFactory, - FolderItemFactory, PackedDocumentItemFactory, PackedFolderItemFactory, - ShortcutItemFactory, + PackedShortcutItemFactory, buildPathFromIds, } from '@graasp/sdk'; @@ -266,14 +264,14 @@ const getPinnedElementWithoutInheritance = (): ItemForTest[] => { ), ]; const childrenOfChildren = [ - DocumentItemFactory({ + PackedDocumentItemFactory({ name: 'text in children 1', extra: { document: { content: 'Not pinned' } }, settings: { isPinned: false }, parentItem: children[1], creator: CURRENT_MEMBER, }), - DocumentItemFactory({ + PackedDocumentItemFactory({ name: 'pinned text in children 2', extra: { document: { content: 'I am pinned from child 2' } }, parentItem: children[2], @@ -317,11 +315,10 @@ export const PINNED_AND_HIDDEN_ITEM: { items: ItemForTest[] } = { }, ), }, - { + PackedDocumentItemFactory({ id: 'fdf09f5a-5688-11eb-ae93-0242ac130008', name: 'Normal child', description: 'I am a normal item', - type: 'document', extra: { document: { content: 'hello' } }, path: 'ecafbd2a_5688_11eb_ae93_0242ac130005.fdf09f5a_5688_11eb_ae93_0242ac130008', settings: { @@ -332,7 +329,7 @@ export const PINNED_AND_HIDDEN_ITEM: { items: ItemForTest[] } = { creator: CURRENT_MEMBER, createdAt: new Date().toISOString(), updatedAt: new Date().toISOString(), - }, + }), ], }; @@ -393,7 +390,7 @@ export const FOLDER_WITH_HIDDEN_ITEMS: { items: ItemForTest[] } = { showChatbox: false, }, }, - DocumentItemFactory(), + PackedDocumentItemFactory(), PackedDocumentItemFactory({}, { hiddenVisibility: {} }), PackedDocumentItemFactory( { @@ -411,13 +408,16 @@ export const FOLDER_WITH_HIDDEN_ITEMS: { items: ItemForTest[] } = { }; export const getFolderWithShortcutFixture = (): ItemForTest[] => { - const parent = FolderItemFactory({ name: 'Lesson', creator: CURRENT_MEMBER }); - const child = FolderItemFactory({ + const parent = PackedFolderItemFactory({ + name: 'Lesson', + creator: CURRENT_MEMBER, + }); + const child = PackedFolderItemFactory({ parentItem: parent, name: 'Part 1', creator: CURRENT_MEMBER, }); - const documentItem = DocumentItemFactory({ + const documentItem = PackedDocumentItemFactory({ extra: { document: { content: 'I am a document' } }, creator: CURRENT_MEMBER, }); @@ -425,8 +425,8 @@ export const getFolderWithShortcutFixture = (): ItemForTest[] => { parent, documentItem, child, - DocumentItemFactory({ parentItem: parent, creator: CURRENT_MEMBER }), - ShortcutItemFactory({ + PackedDocumentItemFactory({ parentItem: parent, creator: CURRENT_MEMBER }), + PackedShortcutItemFactory({ parentItem: parent, creator: CURRENT_MEMBER, extra: { shortcut: { target: documentItem.id } }, @@ -434,7 +434,7 @@ export const getFolderWithShortcutFixture = (): ItemForTest[] => { ]; }; -const tmpDocument = DocumentItemFactory(); +const tmpDocument = PackedDocumentItemFactory(); export const FOLDER_WITH_COLLAPSIBLE_SHORTCUT_ITEMS: { items: ItemForTest[] } = { items: [ @@ -451,10 +451,9 @@ export const FOLDER_WITH_COLLAPSIBLE_SHORTCUT_ITEMS: { items: ItemForTest[] } = }, }, // shortcut with collapse enabled - ShortcutItemFactory({ + PackedShortcutItemFactory({ name: 'Shortcut to original document', path: 'ecafbd2a_5688_11eb_ae93_0242ac130008.ecafbd2a_5688_11eb_ae93_0242ac130012', - type: 'shortcut', extra: { shortcut: { target: tmpDocument.id }, }, @@ -583,7 +582,7 @@ export const FOLDER_WITH_FIVE_ORDERED_SUBFOLDER_ITEMS: { } = { items: [ // root - FolderItemFactory({ + PackedFolderItemFactory({ ...DEFAULT_FOLDER_ITEM, id: 'ecafbd2a-5688-11eb-ae93-0242ac130002', name: 'parent folder', @@ -594,7 +593,7 @@ export const FOLDER_WITH_FIVE_ORDERED_SUBFOLDER_ITEMS: { }, }), // children (need to be in order to respect test) - FolderItemFactory({ + PackedFolderItemFactory({ ...DEFAULT_FOLDER_ITEM, id: 'fdf09f5a-5688-11eb-ae93-0242ac130003', name: 'child folder 1', @@ -604,7 +603,7 @@ export const FOLDER_WITH_FIVE_ORDERED_SUBFOLDER_ITEMS: { showChatbox: false, }, }), - FolderItemFactory({ + PackedFolderItemFactory({ ...DEFAULT_FOLDER_ITEM, id: 'fdf09f5a-5688-11eb-ae93-0242ac130004', name: 'child folder 2', @@ -614,7 +613,7 @@ export const FOLDER_WITH_FIVE_ORDERED_SUBFOLDER_ITEMS: { showChatbox: false, }, }), - FolderItemFactory({ + PackedFolderItemFactory({ ...DEFAULT_FOLDER_ITEM, id: 'fdf09f5a-5688-11eb-ae93-0242ac130007', name: 'child folder 3', @@ -624,7 +623,7 @@ export const FOLDER_WITH_FIVE_ORDERED_SUBFOLDER_ITEMS: { showChatbox: false, }, }), - FolderItemFactory({ + PackedFolderItemFactory({ ...DEFAULT_FOLDER_ITEM, id: 'fdf09f5a-5688-11eb-ae93-0242ac130008', name: 'child folder 4', @@ -634,7 +633,7 @@ export const FOLDER_WITH_FIVE_ORDERED_SUBFOLDER_ITEMS: { showChatbox: false, }, }), - FolderItemFactory({ + PackedFolderItemFactory({ ...DEFAULT_FOLDER_ITEM, id: 'fdf09f5a-5688-11eb-ae93-0242ac130009', name: 'child folder 5', @@ -652,7 +651,7 @@ export const ANOTHER_FOLDER_WITH_FIVE_ORDERED_SUBFOLDER_ITEMS: { } = { items: [ // root - FolderItemFactory({ + PackedFolderItemFactory({ ...DEFAULT_FOLDER_ITEM, id: 'acafbd2a-5688-11eb-ae93-0242ac130002', name: 'parent folder', @@ -663,7 +662,7 @@ export const ANOTHER_FOLDER_WITH_FIVE_ORDERED_SUBFOLDER_ITEMS: { }, }), // children (need to be in order to respect test) - FolderItemFactory({ + PackedFolderItemFactory({ ...DEFAULT_FOLDER_ITEM, id: 'fdf09f5a-5688-11eb-ae93-0242ac130003', name: 'child folder 1', @@ -673,7 +672,7 @@ export const ANOTHER_FOLDER_WITH_FIVE_ORDERED_SUBFOLDER_ITEMS: { showChatbox: false, }, }), - FolderItemFactory({ + PackedFolderItemFactory({ ...DEFAULT_FOLDER_ITEM, id: 'fdf09f5a-5688-11eb-ae93-0242ac130004', name: 'child folder 2', @@ -683,7 +682,7 @@ export const ANOTHER_FOLDER_WITH_FIVE_ORDERED_SUBFOLDER_ITEMS: { showChatbox: false, }, }), - FolderItemFactory({ + PackedFolderItemFactory({ ...DEFAULT_FOLDER_ITEM, id: 'fdf09f5a-5688-11eb-ae93-0242ac130007', name: 'child folder 3', @@ -693,7 +692,7 @@ export const ANOTHER_FOLDER_WITH_FIVE_ORDERED_SUBFOLDER_ITEMS: { showChatbox: false, }, }), - FolderItemFactory({ + PackedFolderItemFactory({ ...DEFAULT_FOLDER_ITEM, id: 'fdf09f5a-5688-11eb-ae93-0242ac130008', name: 'child folder 4', @@ -703,7 +702,7 @@ export const ANOTHER_FOLDER_WITH_FIVE_ORDERED_SUBFOLDER_ITEMS: { showChatbox: false, }, }), - FolderItemFactory({ + PackedFolderItemFactory({ ...DEFAULT_FOLDER_ITEM, id: 'fdf09f5a-5688-11eb-ae93-0242ac130009', name: 'child folder 5', @@ -721,7 +720,7 @@ export const YET_ANOTHER_FOLDER_WITH_FIVE_ORDERED_SUBFOLDER_ITEMS: { } = { items: [ // root - FolderItemFactory({ + PackedFolderItemFactory({ ...DEFAULT_FOLDER_ITEM, id: 'acafbd2a-5688-11eb-ae93-0242ac130012', name: 'parent folder', @@ -732,7 +731,7 @@ export const YET_ANOTHER_FOLDER_WITH_FIVE_ORDERED_SUBFOLDER_ITEMS: { }, }), // children (need to be in order to respect test) - FolderItemFactory({ + PackedFolderItemFactory({ ...DEFAULT_FOLDER_ITEM, id: 'fdf09f5a-5688-11eb-ae93-0242ac130013', name: 'child folder 1', @@ -742,7 +741,7 @@ export const YET_ANOTHER_FOLDER_WITH_FIVE_ORDERED_SUBFOLDER_ITEMS: { showChatbox: false, }, }), - FolderItemFactory({ + PackedFolderItemFactory({ ...DEFAULT_FOLDER_ITEM, id: 'fdf09f5a-5688-11eb-ae93-0242ac130014', name: 'child folder 2', @@ -752,7 +751,7 @@ export const YET_ANOTHER_FOLDER_WITH_FIVE_ORDERED_SUBFOLDER_ITEMS: { showChatbox: false, }, }), - FolderItemFactory({ + PackedFolderItemFactory({ ...DEFAULT_FOLDER_ITEM, id: 'fdf09f5a-5688-11eb-ae93-0242ac130017', name: 'child folder 3', @@ -762,7 +761,7 @@ export const YET_ANOTHER_FOLDER_WITH_FIVE_ORDERED_SUBFOLDER_ITEMS: { showChatbox: false, }, }), - FolderItemFactory({ + PackedFolderItemFactory({ ...DEFAULT_FOLDER_ITEM, id: 'fdf09f5a-5688-11eb-ae93-0242ac130018', name: 'child folder 4', @@ -772,7 +771,7 @@ export const YET_ANOTHER_FOLDER_WITH_FIVE_ORDERED_SUBFOLDER_ITEMS: { showChatbox: false, }, }), - FolderItemFactory({ + PackedFolderItemFactory({ ...DEFAULT_FOLDER_ITEM, id: 'fdf09f5a-5688-11eb-ae93-0242ac130019', name: 'child folder 5', diff --git a/cypress/support/commands.ts b/cypress/support/commands.ts index 92dbb6341..99c6443cd 100644 --- a/cypress/support/commands.ts +++ b/cypress/support/commands.ts @@ -1,7 +1,6 @@ import { AppItemExtra, CookieKeys, - DiscriminatedItem, DocumentItemExtra, Member, PublicationStatus, @@ -10,7 +9,7 @@ import { getIdsFromPath, } from '@graasp/sdk'; -import type { PermissionLevel } from '@/openapi/client'; +import type { GenericItem, PermissionLevel } from '@/openapi/client'; import { CUSTOM_APP_CYPRESS_ID, @@ -262,7 +261,7 @@ declare global { dragAndDrop(subject: string, x: number, y: number): void; - selectItem(id: DiscriminatedItem['id']): void; + selectItem(id: GenericItem['id']): void; setUpApi(args?: ApiConfig): void; @@ -714,7 +713,7 @@ Cypress.Commands.add('dragAndDrop', (subject, x, y) => { }); }); -Cypress.Commands.add('selectItem', (id: DiscriminatedItem['id']) => { +Cypress.Commands.add('selectItem', (id: GenericItem['id']) => { cy.get(buildFolderItemCardThumbnail(id)).click(); }); diff --git a/cypress/support/createUtils.ts b/cypress/support/createUtils.ts index a195c82ea..ed9924c2d 100644 --- a/cypress/support/createUtils.ts +++ b/cypress/support/createUtils.ts @@ -1,4 +1,4 @@ -import { AppItemType, DiscriminatedItem, DocumentItemType } from '@graasp/sdk'; +import type { AppItem, DocumentItem, PackedItem } from '@/openapi/client'; import { ADD_FOLDER_BUTTON_CY, @@ -19,7 +19,7 @@ import { ZIPInternalItem } from '../e2e/builder/fixtures/files'; import { FileItemForTest } from './types'; export const createApp = ( - payload: AppItemType, + payload: AppItem, options?: { confirm?: boolean; custom?: boolean; id?: string }, ): void => { cy.get(`#${CREATE_ITEM_BUTTON_ID}`).click(); @@ -28,7 +28,7 @@ export const createApp = ( }; export const createDocument = ( - payload: DocumentItemType, + payload: DocumentItem, options?: { confirm?: boolean }, ): void => { cy.get(`#${CREATE_ITEM_BUTTON_ID}`).click(); @@ -68,10 +68,7 @@ export const createFile = ( // todo: question: only used by import zip ?? export const createItem = ( - payload: - | DiscriminatedItem - | ZIPInternalItem - | { type: 'h5p'; filepath: string }, + payload: PackedItem | ZIPInternalItem | { type: 'h5p'; filepath: string }, options?: { confirm?: boolean }, ): void => { cy.get(`#${CREATE_ITEM_BUTTON_ID}`).click(); diff --git a/cypress/support/server.ts b/cypress/support/server.ts index 5f2e12af8..0f1334a9e 100644 --- a/cypress/support/server.ts +++ b/cypress/support/server.ts @@ -7,11 +7,7 @@ import { CompleteMembershipRequest, DEFAULT_LANG, HttpMethod, - Invitation, - ItemBookmark, ItemGeolocation, - ItemPublished, - ItemValidationGroup, ItemVisibilityOptionsType, ItemVisibilityType, Member, @@ -31,7 +27,14 @@ import { CyHttpMessages } from 'cypress/types/net-stubbing'; import { StatusCodes } from 'http-status-codes'; import { v4 } from 'uuid'; -import { CurrentSettings, Profile } from '@/openapi/client/types.gen'; +import type { + CurrentSettings, + Invitation, + ItemPublished, + ItemValidationGroup, + PackedBookmark, + Profile, +} from '@/openapi/client'; import { ITEM_PAGE_SIZE, SETTINGS } from '../../src/modules/builder/constants'; import { API_ROUTES } from '../../src/query/routes'; @@ -1334,7 +1337,7 @@ export const mockGetLatestValidationGroup = ( }; export const mockGetItemBookmarks = ( - itemBookmarks: ItemBookmark[], + itemBookmarks: PackedBookmark[], shouldThrowError: boolean, ): void => { cy.intercept( diff --git a/cypress/support/types.ts b/cypress/support/types.ts index 981f89a9b..b5ac361fc 100644 --- a/cypress/support/types.ts +++ b/cypress/support/types.ts @@ -4,15 +4,8 @@ import type { CompleteGuest, CompleteMember, CompleteMembershipRequest, - DiscriminatedItem, - FileItemType, - Invitation, - ItemBookmark, ItemGeolocation, ItemLoginSchema, - ItemMembership, - ItemPublished, - ItemValidationGroup, MemberStorageItem, MembershipRequestStatus, PublicationStatus, @@ -24,12 +17,17 @@ import type { import type { CurrentSettings, + Invitation, + ItemMembership, + ItemPublished, + ItemValidationGroup, ItemVisibility, - PermissionLevel, + PackedBookmark, + PackedItem, Profile, } from '@/openapi/client'; -export type ItemForTest = DiscriminatedItem & { +export type ItemForTest = PackedItem & { geolocation?: Partial; tags?: Tag[]; thumbnails?: ThumbnailsBySize; @@ -40,13 +38,12 @@ export type ItemForTest = DiscriminatedItem & { memberships?: ItemMembership[]; invitations?: Partial[]; published?: ItemPublished; - permission?: PermissionLevel | null; public?: ItemVisibility; }; export type MemberForTest = CompleteMember & { thumbnails?: string }; -export type FileItemForTest = FileItemType & { +export type FileItemForTest = PackedItem & { createFilepath: string; readFilepath: string; }; @@ -58,12 +55,12 @@ export type ApiConfig = { getCurrentProfileError?: boolean; editPublicProfileError?: boolean; items?: ItemForTest[]; - recycledItems?: DiscriminatedItem[]; + recycledItems?: PackedItem[]; members?: MemberForTest[]; currentMember?: MemberForTest | null; mentions?: ChatMention[]; shortLinks?: ShortLink[]; - bookmarkedItems?: ItemBookmark[]; + bookmarkedItems?: PackedBookmark[]; recycledItemData?: RecycledItemData[]; itemPublicationStatus?: PublicationStatus; publishedItemData?: ItemPublished[]; diff --git a/cypress/support/utils.ts b/cypress/support/utils.ts index 8d2d87fe2..4f4a7d178 100644 --- a/cypress/support/utils.ts +++ b/cypress/support/utils.ts @@ -1,7 +1,5 @@ import { ChatMessage, - DiscriminatedItem, - ItemMembership, Member, PermissionLevelCompare, isChildOf, @@ -10,6 +8,8 @@ import { import { StatusCodes } from 'http-status-codes'; import { validate as uuidValidate, version as uuidVersion } from 'uuid'; +import type { GenericItem, ItemMembership } from '@/openapi/client'; + import { ItemForTest } from './types'; // use simple id format for tests @@ -216,7 +216,7 @@ export const getHighestPermissionForMemberFromMemberships = ({ }: { memberships?: ItemMembership[]; memberId?: string; - itemPath: DiscriminatedItem['path']; + itemPath: GenericItem['path']; }): null | ItemMembership => { if (!memberId) { return null; diff --git a/cypress/support/viewUtils.ts b/cypress/support/viewUtils.ts index b7264dd60..27947f2d3 100644 --- a/cypress/support/viewUtils.ts +++ b/cypress/support/viewUtils.ts @@ -1,12 +1,12 @@ import { CompleteMember, - DocumentItemType, - LinkItemType, PermissionLevelCompare, getDocumentExtra, getLinkExtra, } from '@graasp/sdk'; +import type { DocumentItem, PackedItem } from '@/openapi/client'; + import { DOCUMENT_ITEM_TEXT_EDITOR_SELECTOR, ITEM_HEADER_ID, @@ -52,7 +52,7 @@ export const expectDocumentViewScreenLayout = ({ item, currentMember = CURRENT_MEMBER, }: { - item: DocumentItemType; + item: PackedItem & DocumentItem; currentMember?: MemberForTest; }): void => { cy.get(DOCUMENT_ITEM_TEXT_EDITOR_SELECTOR).then((editor) => { @@ -81,10 +81,15 @@ export const expectLinkViewScreenLayout = ({ item, currentMember = CURRENT_MEMBER, }: { - item: LinkItemType; + item: ItemForTest; currentMember?: MemberForTest; }): void => { const { id, description, settings } = item; + if (item.type !== 'embeddedLink') { + throw new Error( + 'expectLinkViewScreenLayout should not be used for embedded link items', + ); + } const { url, html } = getLinkExtra(item.extra) || {}; // embedded element diff --git a/package.json b/package.json index 22f04e3d7..4c56eb72c 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,7 @@ "@emotion/react": "11.14.0", "@emotion/styled": "11.14.1", "@fontsource-variable/nunito": "5.2.7", - "@graasp/sdk": "5.18.0", + "@graasp/sdk": "github:graasp/graasp-sdk#factories", "@graasp/stylis-plugin-rtl": "2.2.0", "@lexical/link": "0.33.1", "@lexical/react": "0.33.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c3834d224..fefe401db 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -27,8 +27,8 @@ importers: specifier: 5.2.7 version: 5.2.7 '@graasp/sdk': - specifier: 5.18.0 - version: 5.18.0(date-fns@4.1.0)(uuid@11.1.0) + specifier: github:graasp/graasp-sdk#factories + version: https://codeload.github.com/graasp/graasp-sdk/tar.gz/2fa699e3f2b98708b92d82cda3c080db01a7b073(date-fns@4.1.0)(uuid@11.1.0) '@graasp/stylis-plugin-rtl': specifier: 2.2.0 version: 2.2.0(stylis@4.3.6) @@ -1597,8 +1597,9 @@ packages: '@fontsource-variable/nunito@5.2.7': resolution: {integrity: sha512-2N8QhatkyKgSUbAGZO2FYLioxA32+RyI1EplVLawbpkGjUeui9Qg9VMrpkCaik1ydjFjfLV+kzQ0cGEsMrMenQ==} - '@graasp/sdk@5.18.0': - resolution: {integrity: sha512-pTTALeQSUCudleKYH6uTnmORzZEGCDP9PPJVW+rBvdhbV9jvtUamg1PGp8+Gr0AHwTIgbCZ44LNPHwzUNzjjgA==} + '@graasp/sdk@https://codeload.github.com/graasp/graasp-sdk/tar.gz/2fa699e3f2b98708b92d82cda3c080db01a7b073': + resolution: {tarball: https://codeload.github.com/graasp/graasp-sdk/tar.gz/2fa699e3f2b98708b92d82cda3c080db01a7b073} + version: 5.18.0 peerDependencies: date-fns: ^4 uuid: ^11.0.0 @@ -8084,7 +8085,7 @@ snapshots: '@fontsource-variable/nunito@5.2.7': {} - '@graasp/sdk@5.18.0(date-fns@4.1.0)(uuid@11.1.0)': + '@graasp/sdk@https://codeload.github.com/graasp/graasp-sdk/tar.gz/2fa699e3f2b98708b92d82cda3c080db01a7b073(date-fns@4.1.0)(uuid@11.1.0)': dependencies: '@faker-js/faker': 9.9.0 date-fns: 4.1.0 diff --git a/src/AuthContext.tsx b/src/AuthContext.tsx index 2c9324d9f..70e1d672e 100644 --- a/src/AuthContext.tsx +++ b/src/AuthContext.tsx @@ -8,15 +8,13 @@ import { useMemo, } from 'react'; -import { - AccountType, - DiscriminatedItem, - getCurrentAccountLang, -} from '@graasp/sdk'; +import { AccountType, getCurrentAccountLang } from '@graasp/sdk'; import * as Sentry from '@sentry/react'; import { useMutation, useQueryClient } from '@tanstack/react-query'; +import type { GenericItem } from '@/openapi/client'; + import { DEFAULT_LANG } from './config/constants'; import { LocalStorage } from './config/localStorage'; import { hooks } from './config/queryClient'; @@ -43,7 +41,7 @@ export type AuthenticatedGuest = { id: string; lang: string; type: AccountType.Guest; - item: DiscriminatedItem; + item: GenericItem; }; export type AuthenticatedUser = AuthenticatedMember | AuthenticatedGuest; type AuthContextLoggedMember = { @@ -133,7 +131,7 @@ export function AuthProvider({ id: currentMember.id, lang: getCurrentAccountLang(currentMember, DEFAULT_LANG), type: AccountType.Guest as const, - item: currentMember.itemLoginSchema.item, + item: currentMember.itemLoginSchema.item as GenericItem, }, logout, login: null, diff --git a/src/components/SectionHeader.tsx b/src/components/SectionHeader.tsx index 62877e476..7fff37409 100644 --- a/src/components/SectionHeader.tsx +++ b/src/components/SectionHeader.tsx @@ -3,10 +3,9 @@ import { useTranslation } from 'react-i18next'; import { Stack, Typography, useMediaQuery } from '@mui/material'; -import { PackedItem } from '@graasp/sdk'; - import { NS } from '@/config/constants'; import { FOLDER_NAME_TITLE_CLASS } from '@/config/selectors'; +import type { PackedItem } from '@/openapi/client'; import TextDisplay from '@/ui/TextDisplay/TextDisplay'; import Thumbnail from '@/ui/Thumbnail/Thumbnail'; import { theme } from '@/ui/theme'; diff --git a/src/components/chatbox/Chatbox/Chatbox.tsx b/src/components/chatbox/Chatbox/Chatbox.tsx index 0ba306c04..f351bc723 100644 --- a/src/components/chatbox/Chatbox/Chatbox.tsx +++ b/src/components/chatbox/Chatbox/Chatbox.tsx @@ -6,7 +6,7 @@ import { WS_CLIENT } from '@/config/queryClient.js'; import type { ChatMessageWithCreator, NullableCurrentAccount, -} from '@/openapi/client/types.gen.js'; +} from '@/openapi/client'; import { CONTAINER_HEIGHT_SAFETY_MARGIN } from '../constants.js'; import { EditingContextProvider } from '../context/EditingContext.js'; diff --git a/src/components/chatbox/Chatbox/Input.tsx b/src/components/chatbox/Chatbox/Input.tsx index 34ba3e729..0968fa584 100644 --- a/src/components/chatbox/Chatbox/Input.tsx +++ b/src/components/chatbox/Chatbox/Input.tsx @@ -20,8 +20,8 @@ import { Box, IconButton, Typography, styled, useTheme } from '@mui/material'; import { useQuery } from '@tanstack/react-query'; import { NS } from '@/config/constants.js'; +import type { CreateChatMessageData } from '@/openapi/client'; import { getCurrentAccountOptions } from '@/openapi/client/@tanstack/react-query.gen.js'; -import type { CreateChatMessageData } from '@/openapi/client/types.gen.js'; import { ALL_MEMBERS_ID, diff --git a/src/components/chatbox/Chatbox/InputBar.tsx b/src/components/chatbox/Chatbox/InputBar.tsx index ae896d668..01f301e6f 100644 --- a/src/components/chatbox/Chatbox/InputBar.tsx +++ b/src/components/chatbox/Chatbox/InputBar.tsx @@ -3,7 +3,7 @@ import { useEffect, useRef, useState } from 'react'; import { Box } from '@mui/material'; import { useChatboxProvider } from '@/components/chatbox/Chatbox/chatbox.hook.js'; -import type { CreateChatMessageData } from '@/openapi/client/types.gen.js'; +import type { CreateChatMessageData } from '@/openapi/client'; import { useEditingContext } from '../context/EditingContext.js'; import { useMessagesContext } from '../context/MessagesContext.js'; diff --git a/src/components/chatbox/Chatbox/Message.tsx b/src/components/chatbox/Chatbox/Message.tsx index 2c1fe8d4f..33807427c 100644 --- a/src/components/chatbox/Chatbox/Message.tsx +++ b/src/components/chatbox/Chatbox/Message.tsx @@ -8,7 +8,7 @@ import truncate from 'lodash.truncate'; import { NS } from '@/config/constants.js'; import { getLocalForDateFns } from '@/config/langs.js'; import { hooks } from '@/config/queryClient.js'; -import type { ChatMessageWithCreator } from '@/openapi/client/types.gen.js'; +import type { ChatMessageWithCreator } from '@/openapi/client'; import Avatar from '@/ui/Avatar/Avatar.js'; import { diff --git a/src/components/chatbox/Chatbox/MessageActions.tsx b/src/components/chatbox/Chatbox/MessageActions.tsx index 57ccbc160..3105b46b3 100644 --- a/src/components/chatbox/Chatbox/MessageActions.tsx +++ b/src/components/chatbox/Chatbox/MessageActions.tsx @@ -13,7 +13,7 @@ import { import { useChatboxProvider } from '@/components/chatbox/Chatbox/chatbox.hook.js'; import { NS } from '@/config/constants.js'; -import type { ChatMessageWithCreator } from '@/openapi/client/types.gen.js'; +import type { ChatMessageWithCreator } from '@/openapi/client'; import { LIST_ICON_MIN_WIDTH } from '../constants.js'; import { useEditingContext } from '../context/EditingContext.js'; diff --git a/src/components/chatbox/Chatbox/Messages.tsx b/src/components/chatbox/Chatbox/Messages.tsx index 997fcc8bf..b1cc8349c 100644 --- a/src/components/chatbox/Chatbox/Messages.tsx +++ b/src/components/chatbox/Chatbox/Messages.tsx @@ -10,8 +10,8 @@ import groupBy from 'lodash.groupby'; import { useChatboxProvider } from '@/components/chatbox/Chatbox/chatbox.hook.js'; import { NS } from '@/config/constants.js'; import { getLocalForDateFns } from '@/config/langs.js'; +import type { ChatMessageWithCreator } from '@/openapi/client'; import { getCurrentAccountOptions } from '@/openapi/client/@tanstack/react-query.gen.js'; -import type { ChatMessageWithCreator } from '@/openapi/client/types.gen.js'; import { DEFAULT_DATE_FORMAT, SCROLL_SAFETY_MARGIN } from '../constants.js'; import { useEditingContext } from '../context/EditingContext.js'; diff --git a/src/components/chatbox/context/MessagesContext.tsx b/src/components/chatbox/context/MessagesContext.tsx index 96b022798..52061639e 100644 --- a/src/components/chatbox/context/MessagesContext.tsx +++ b/src/components/chatbox/context/MessagesContext.tsx @@ -1,10 +1,7 @@ import { type JSX, type ReactNode, createContext, useContext } from 'react'; import { hooks } from '@/config/queryClient'; -import type { - ChatMessageWithCreator, - MinimalAccount, -} from '@/openapi/client/types.gen'; +import type { ChatMessageWithCreator, MinimalAccount } from '@/openapi/client'; export type MessagesContextType = { messages?: ChatMessageWithCreator[]; diff --git a/src/components/page/Editor.tsx b/src/components/page/Editor.tsx index 05ff819ff..385c79f32 100644 --- a/src/components/page/Editor.tsx +++ b/src/components/page/Editor.tsx @@ -3,8 +3,6 @@ import { useTranslation } from 'react-i18next'; import { Alert, Button } from '@mui/material'; -import { PageItemType } from '@graasp/sdk'; - import { AutoFocusPlugin } from '@lexical/react/LexicalAutoFocusPlugin'; import { CollaborationPlugin } from '@lexical/react/LexicalCollaborationPlugin'; import { @@ -17,6 +15,7 @@ import { RichTextPlugin } from '@lexical/react/LexicalRichTextPlugin'; import { ParagraphNode, TextNode } from 'lexical'; import { NS } from '@/config/constants'; +import { PageItem } from '@/openapi/client'; import { stringToColor } from '@/ui/Avatar/stringToColor'; import { StatusToolbar } from './StatusToolbar'; @@ -37,7 +36,7 @@ function onError(error: Error) { } type Props = { - item: PageItemType; + item: PageItem; currentAccount?: { name: string; id: string }; }; diff --git a/src/components/page/PageReader.tsx b/src/components/page/PageReader.tsx index c6dd97eca..935d3469f 100644 --- a/src/components/page/PageReader.tsx +++ b/src/components/page/PageReader.tsx @@ -1,7 +1,5 @@ import { useRef } from 'react'; -import { PageItemType } from '@graasp/sdk'; - import { CollaborationPlugin } from '@lexical/react/LexicalCollaborationPlugin'; import { InitialConfigType, @@ -12,6 +10,8 @@ import { LexicalErrorBoundary } from '@lexical/react/LexicalErrorBoundary'; import { RichTextPlugin } from '@lexical/react/LexicalRichTextPlugin'; import { ParagraphNode, TextNode } from 'lexical'; +import { PageItem } from '@/openapi/client'; + import { LinkItemNode } from './plugins/linkItem/LinkItemNode'; import { LinkItemPlugin } from './plugins/linkItem/LinkItemPlugin'; import './styles.css'; @@ -26,7 +26,7 @@ function onError(error: Error) { } type Props = { - item: PageItemType; + item: PageItem; }; export function PageReader({ item }: Readonly) { diff --git a/src/components/tree/TreeView.tsx b/src/components/tree/TreeView.tsx index 4560fb42c..550719ba6 100644 --- a/src/components/tree/TreeView.tsx +++ b/src/components/tree/TreeView.tsx @@ -2,12 +2,12 @@ import { type JSX, useState } from 'react'; import { Collapse, List, ListItemButton, Typography } from '@mui/material'; -import { DiscriminatedItem, getIdsFromPath } from '@graasp/sdk'; +import { getIdsFromPath } from '@graasp/sdk'; import { ErrorBoundary } from '@sentry/react'; import { buildTreeItemClass } from '@/config/selectors'; -import { ItemType } from '@/openapi/client'; +import type { GenericItem, ItemType } from '@/openapi/client'; import { ExpandButton } from './ExpandButton'; import { TreeErrorBoundary } from './TreeErrorBoundary'; @@ -84,8 +84,8 @@ function ListItem({ type TreeViewProps = { id: string; header?: string; - rootItems: (DiscriminatedItem & { children?: DiscriminatedItem[] })[]; - items?: (DiscriminatedItem & { children?: DiscriminatedItem[] })[]; + rootItems: (GenericItem & { children?: GenericItem[] })[]; + items?: (GenericItem & { children?: GenericItem[] })[]; onTreeItemSelect?: (value: string) => void; itemId: string; /** diff --git a/src/components/tree/utils.ts b/src/components/tree/utils.ts index f73943824..28d6cea07 100644 --- a/src/components/tree/utils.ts +++ b/src/components/tree/utils.ts @@ -1,16 +1,16 @@ -import { DiscriminatedItem, getMimetype, getParentFromPath } from '@graasp/sdk'; +import { getMimetype, getParentFromPath } from '@graasp/sdk'; -import { ItemType } from '@/openapi/client'; +import type { GenericItem, ItemType } from '@/openapi/client'; type ItemIdToDirectChildren = { - [nodeId: string]: DiscriminatedItem[]; + [nodeId: string]: GenericItem[]; }; /** * build parent -> children map * items without parent are not in the map */ -const createMapTree = (data: DiscriminatedItem[]): ItemIdToDirectChildren => +const createMapTree = (data: GenericItem[]): ItemIdToDirectChildren => data.reduce((treeMap, elem) => { const parentId = getParentFromPath(elem.path); if (parentId) { @@ -40,8 +40,8 @@ type TreeNode = { // handle item children tree export const buildItemsTree = ( - data: DiscriminatedItem[], - rootItems: DiscriminatedItem[], + data: GenericItem[], + rootItems: GenericItem[], ) => { const tree: TreeNode = {}; if (data.length === 1) { @@ -49,13 +49,17 @@ export const buildItemsTree = ( tree[data[0].id] = { id: data[0].id, name: data[0].name, - metadata: { type: data[0].type, mimetype: getMimetype(data[0].extra) }, + metadata: { + type: data[0].type, + // eslint-disable-next-line @typescript-eslint/no-explicit-any + mimetype: getMimetype(data[0].extra as any), + }, children: [], }; } const mapTree = createMapTree(data); - const buildTree = (node: DiscriminatedItem) => { + const buildTree = (node: GenericItem) => { if (node.type === 'folder' && mapTree[node.id]) { const children = mapTree[node.id] ?? []; @@ -73,7 +77,8 @@ export const buildItemsTree = ( name: node.name, metadata: { type: node.type, - mimetype: getMimetype(node.extra), + // eslint-disable-next-line @typescript-eslint/no-explicit-any + mimetype: getMimetype(node.extra as any), }, }; }; diff --git a/src/components/ui/Navigator/CurrentItemNavigation.tsx b/src/components/ui/Navigator/CurrentItemNavigation.tsx index 2655c911e..f23e745c3 100644 --- a/src/components/ui/Navigator/CurrentItemNavigation.tsx +++ b/src/components/ui/Navigator/CurrentItemNavigation.tsx @@ -2,13 +2,13 @@ import type { JSX } from 'react'; import { Stack } from '@mui/material'; -import { DiscriminatedItem } from '@graasp/sdk'; +import type { GenericItem } from '@/openapi/client'; import { TypographyLink } from '../TypographyLink.js'; import ItemMenu, { ItemMenuProps } from './ItemMenu.js'; export type CurrentItemProps = { - item: DiscriminatedItem; + item: GenericItem; buildBreadcrumbsItemLinkId?: (id: string) => string; buildIconId?: (id: string) => string; buildMenuId?: (id: string) => string; diff --git a/src/components/ui/Navigator/ItemMenu.tsx b/src/components/ui/Navigator/ItemMenu.tsx index cb780d0e5..f1fa64adf 100644 --- a/src/components/ui/Navigator/ItemMenu.tsx +++ b/src/components/ui/Navigator/ItemMenu.tsx @@ -2,11 +2,11 @@ import { type JSX, useState } from 'react'; import { IconButton, IconButtonProps, Menu, Typography } from '@mui/material'; -import { DiscriminatedItem } from '@graasp/sdk'; - import { type UseQueryResult } from '@tanstack/react-query'; import { ChevronRightIcon } from 'lucide-react'; +import type { GenericItem } from '@/openapi/client'; + import { MenuItemLink } from '../MenuItemLink'; export const Separator = ; @@ -17,7 +17,7 @@ export type ItemMenuProps = { buildMenuItemId?: (itemId: string) => string; icon?: JSX.Element; itemId: string; - useChildren: (itemId: string) => UseQueryResult; + useChildren: (itemId: string) => UseQueryResult; renderArrow?: boolean; }; diff --git a/src/components/ui/Navigator/Navigator.tsx b/src/components/ui/Navigator/Navigator.tsx index 5572032c7..2dac88b7c 100644 --- a/src/components/ui/Navigator/Navigator.tsx +++ b/src/components/ui/Navigator/Navigator.tsx @@ -2,7 +2,7 @@ import type { JSX } from 'react'; import { Breadcrumbs, SxProps, styled } from '@mui/material'; -import { DiscriminatedItem } from '@graasp/sdk'; +import type { GenericItem } from '@/openapi/client'; import { CurrentItemNavigation } from './CurrentItemNavigation'; import { ExtraItem, ExtraItemsNavigation } from './ExtraItemsNavigation'; @@ -22,7 +22,7 @@ export type NavigationProps = { buildMenuItemId?: (id: string) => string; buildMenuId?: (id: string) => string; id?: string; - item?: DiscriminatedItem; + item?: GenericItem; parents?: { name: string; id: string }[]; sx?: SxProps; useChildren: ItemMenuProps['useChildren']; diff --git a/src/modules/analytics/context/DataProvider.tsx b/src/modules/analytics/context/DataProvider.tsx index f4fde4743..486633c84 100644 --- a/src/modules/analytics/context/DataProvider.tsx +++ b/src/modules/analytics/context/DataProvider.tsx @@ -8,11 +8,12 @@ import { useState, } from 'react'; -import { Context, DiscriminatedItem, Member, PackedItem } from '@graasp/sdk'; +import { Context, Member } from '@graasp/sdk'; import { addDays } from 'date-fns/addDays'; import { hooks } from '@/config/queryClient'; +import type { GenericItem, PackedItem } from '@/openapi/client'; import { useDescendants } from '@/query/item/descendants/hooks'; import { DateRange } from '~analytics/config/type'; @@ -27,8 +28,8 @@ const defaultValue: { selectedActionTypes: string[]; setSelectedActionTypes: Dispatch; error: boolean; - itemData?: DiscriminatedItem; - itemChildren?: DiscriminatedItem[]; + itemData?: GenericItem; + itemChildren?: GenericItem[]; isLoading: boolean; requestedSampleSize: number; descendantApps: PackedItem[]; @@ -132,7 +133,7 @@ const DataProvider = ({ children, itemId }: Props): JSX.Element => { selectedActionTypes, setSelectedActionTypes, error, - itemData, + itemData: itemData, itemChildren, isLoading: itemIsLoading, requestedSampleSize, @@ -142,7 +143,6 @@ const DataProvider = ({ children, itemId }: Props): JSX.Element => { itemId, }), [ - // allMembers, error, selectedUsers, selectedActionTypes, diff --git a/src/modules/builder/components/common/BookmarkButton.tsx b/src/modules/builder/components/common/BookmarkButton.tsx index 13bdf7fc9..6dba23281 100644 --- a/src/modules/builder/components/common/BookmarkButton.tsx +++ b/src/modules/builder/components/common/BookmarkButton.tsx @@ -3,11 +3,10 @@ import { useTranslation } from 'react-i18next'; import { IconButtonProps } from '@mui/material'; -import { DiscriminatedItem } from '@graasp/sdk'; - import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; import { NS } from '@/config/constants'; +import type { GenericItem } from '@/openapi/client'; import { PackedBookmark } from '@/openapi/client'; import { createBookmarkMutation, @@ -21,7 +20,7 @@ import { ActionButtonVariant } from '@/ui/types'; import { BUILDER } from '../../langs'; type Props = { - item: DiscriminatedItem; + item: GenericItem; type?: ActionButtonVariant; onClick?: () => void; size?: IconButtonProps['size']; @@ -29,9 +28,9 @@ type Props = { }; const isItemBookmarked = ( - item: DiscriminatedItem, + itemId: GenericItem['id'], bookmarks?: PackedBookmark[], -): boolean => bookmarks?.some((f) => f.item.id === item.id) || false; +): boolean => bookmarks?.some((f) => f.item.id === itemId) || false; const BookmarkButton = ({ item, @@ -56,7 +55,7 @@ const BookmarkButton = ({ }, }); - const isFavorite = isItemBookmarked(item, bookmarks); + const isFavorite = isItemBookmarked(item.id, bookmarks); const handleFavorite = () => { addFavorite.mutate({ path: { itemId: item.id } }); diff --git a/src/modules/builder/components/common/Chatbox.tsx b/src/modules/builder/components/common/Chatbox.tsx index eb693c75a..a6018c4fd 100644 --- a/src/modules/builder/components/common/Chatbox.tsx +++ b/src/modules/builder/components/common/Chatbox.tsx @@ -1,12 +1,11 @@ import type { JSX } from 'react'; -import { PackedItem } from '@graasp/sdk'; - import { useQuery } from '@tanstack/react-query'; import { Chatbox as GraaspChatbox } from '@/components/chatbox/Chatbox/Chatbox'; import { useChatboxProvider } from '@/components/chatbox/Chatbox/chatbox.hook'; import { CHATBOX_ID, CHATBOX_INPUT_BOX_ID } from '@/config/selectors'; +import type { PackedItem } from '@/openapi/client'; import { getCurrentAccountOptions } from '@/openapi/client/@tanstack/react-query.gen'; import Loader from '@/ui/Loader/Loader'; diff --git a/src/modules/builder/components/common/CollapseButton.tsx b/src/modules/builder/components/common/CollapseButton.tsx index 1bd45651c..1967492c8 100644 --- a/src/modules/builder/components/common/CollapseButton.tsx +++ b/src/modules/builder/components/common/CollapseButton.tsx @@ -3,19 +3,18 @@ import { useTranslation } from 'react-i18next'; import { IconButton, ListItemIcon, MenuItem, Tooltip } from '@mui/material'; -import { DiscriminatedItem } from '@graasp/sdk'; - import { ChevronsDownUpIcon, ChevronsUpDownIcon } from 'lucide-react'; import { NS } from '@/config/constants'; import { mutations } from '@/config/queryClient'; import { COLLAPSE_ITEM_BUTTON_CLASS } from '@/config/selectors'; +import type { GenericItem } from '@/openapi/client'; import { ActionButton, ActionButtonVariant } from '@/ui/types'; import { BUILDER } from '../../langs'; type Props = { - item: DiscriminatedItem; + item: GenericItem; type?: ActionButtonVariant; onClick?: () => void; }; diff --git a/src/modules/builder/components/common/DeleteButton.tsx b/src/modules/builder/components/common/DeleteButton.tsx index 6b0e55013..a1511b1aa 100644 --- a/src/modules/builder/components/common/DeleteButton.tsx +++ b/src/modules/builder/components/common/DeleteButton.tsx @@ -1,10 +1,9 @@ import { type JSX, useState } from 'react'; import { useTranslation } from 'react-i18next'; -import { DiscriminatedItem } from '@graasp/sdk'; - import { NS } from '@/config/constants'; import { ITEM_DELETE_BUTTON_CLASS } from '@/config/selectors'; +import type { GenericItem } from '@/openapi/client'; import GraaspDeleteButton from '@/ui/buttons/DeleteButton/DeleteButton'; import { ActionButtonVariant, ColorVariantsType } from '@/ui/types'; @@ -12,7 +11,7 @@ import { BUILDER } from '../../langs'; import DeleteItemDialog from '../main/DeleteItemDialog'; type Props = { - items: DiscriminatedItem[]; + items: GenericItem[]; color?: ColorVariantsType; id?: string; type?: ActionButtonVariant; diff --git a/src/modules/builder/components/common/DuplicateButton.tsx b/src/modules/builder/components/common/DuplicateButton.tsx index c8ee607ad..44917bca2 100644 --- a/src/modules/builder/components/common/DuplicateButton.tsx +++ b/src/modules/builder/components/common/DuplicateButton.tsx @@ -3,13 +3,14 @@ import { useTranslation } from 'react-i18next'; import { ListItemIcon, MenuItem } from '@mui/material'; -import { DiscriminatedItem, getParentFromPath } from '@graasp/sdk'; +import { getParentFromPath } from '@graasp/sdk'; import { CopyIcon } from 'lucide-react'; import { NS } from '@/config/constants'; import { mutations } from '@/config/queryClient'; import { ITEM_MENU_DUPLICATE_BUTTON_CLASS } from '@/config/selectors'; +import type { GenericItem } from '@/openapi/client'; import { BUILDER } from '~builder/langs'; @@ -18,7 +19,7 @@ const DuplicateButton = ({ onClick, }: { onClick?: () => void; - item: DiscriminatedItem; + item: GenericItem; }): JSX.Element => { const { mutate: copyItems } = mutations.useCopyItems(); const { t: translateBuilder } = useTranslation(NS.Builder); diff --git a/src/modules/builder/components/common/ExportRawZipButton.tsx b/src/modules/builder/components/common/ExportRawZipButton.tsx index 5439f292b..9e9f3a6cb 100644 --- a/src/modules/builder/components/common/ExportRawZipButton.tsx +++ b/src/modules/builder/components/common/ExportRawZipButton.tsx @@ -4,17 +4,16 @@ import { toast } from 'react-toastify'; import { ListItemIcon, MenuItem } from '@mui/material'; -import { PackedItem } from '@graasp/sdk'; - import { useMutation } from '@tanstack/react-query'; import { PackageIcon } from 'lucide-react'; import { NS } from '@/config/constants'; import { buildExportAsZipButtonId } from '@/config/selectors'; +import type { GenericItem } from '@/openapi/client'; import { exportZipMutation } from '@/openapi/client/@tanstack/react-query.gen'; type Props = { - item: PackedItem; + itemId: GenericItem['id']; /** * ui context the button is located @@ -26,7 +25,10 @@ type Props = { * Export folder as zip * This button cannot be for other item types */ -const ExportRawZipButton = ({ item, dataUmamiContext }: Props): JSX.Element => { +const ExportRawZipButton = ({ + itemId, + dataUmamiContext, +}: Props): JSX.Element => { const { t: translateBuilder } = useTranslation(NS.Builder); const { t: translateMessage } = useTranslation(NS.Messages); @@ -42,8 +44,8 @@ const ExportRawZipButton = ({ item, dataUmamiContext }: Props): JSX.Element => { return ( exportZip({ path: { itemId: item.id } })} + id={buildExportAsZipButtonId(itemId)} + onClick={() => exportZip({ path: { itemId } })} data-umami-event="export-zip" data-umami-event-context={dataUmamiContext} > diff --git a/src/modules/builder/components/common/FlagButton.tsx b/src/modules/builder/components/common/FlagButton.tsx index e3a4c0516..d2272101f 100644 --- a/src/modules/builder/components/common/FlagButton.tsx +++ b/src/modules/builder/components/common/FlagButton.tsx @@ -3,21 +3,20 @@ import { useTranslation } from 'react-i18next'; import { ListItemIcon, MenuItem } from '@mui/material'; -import { PackedItem } from '@graasp/sdk'; - import { FlagIcon } from 'lucide-react'; import { NS } from '@/config/constants'; import { ITEM_MENU_FLAG_BUTTON_CLASS } from '@/config/selectors'; +import type { GenericItem } from '@/openapi/client'; import { FlagItemModalContext } from '../context/FlagItemModalContext'; -const FlagButton = ({ item }: { item: PackedItem }): JSX.Element => { +const FlagButton = ({ itemId }: { itemId: GenericItem['id'] }): JSX.Element => { const { t: translateBuilder } = useTranslation(NS.Builder); const { openModal: openFlagModal } = useContext(FlagItemModalContext); const handleFlag = () => { - openFlagModal?.(item.id); + openFlagModal?.(itemId); }; return ( diff --git a/src/modules/builder/components/common/HideButton.tsx b/src/modules/builder/components/common/HideButton.tsx index e6822eda5..303c0e769 100644 --- a/src/modules/builder/components/common/HideButton.tsx +++ b/src/modules/builder/components/common/HideButton.tsx @@ -3,7 +3,7 @@ import { useTranslation } from 'react-i18next'; import { IconButton, ListItemIcon, MenuItem, Tooltip } from '@mui/material'; -import { PackedItem, getParentFromPath } from '@graasp/sdk'; +import { getParentFromPath } from '@graasp/sdk'; import { useQueryClient } from '@tanstack/react-query'; import { EyeIcon, EyeOffIcon } from 'lucide-react'; @@ -14,6 +14,7 @@ import { HIDDEN_ITEM_BUTTON_CLASS, buildHideButtonId, } from '@/config/selectors'; +import type { PackedItem } from '@/openapi/client'; import { itemKeys } from '@/query/keys'; import { ActionButton, ActionButtonVariant } from '@/ui/types'; diff --git a/src/modules/builder/components/common/PinButton.tsx b/src/modules/builder/components/common/PinButton.tsx index cfe23760b..3e74b2790 100644 --- a/src/modules/builder/components/common/PinButton.tsx +++ b/src/modules/builder/components/common/PinButton.tsx @@ -1,11 +1,10 @@ import { type JSX, useState } from 'react'; import { useTranslation } from 'react-i18next'; -import { DiscriminatedItem } from '@graasp/sdk'; - import { NS } from '@/config/constants'; import { mutations } from '@/config/queryClient'; import { PIN_ITEM_BUTTON_CLASS } from '@/config/selectors'; +import type { GenericItem } from '@/openapi/client'; import GraaspPinButton from '@/ui/buttons/PinButton/PinButton'; import { ActionButtonVariant } from '@/ui/types'; @@ -13,7 +12,7 @@ import { BUILDER } from '../../langs'; type Props = { type?: ActionButtonVariant; - item: DiscriminatedItem; + item: GenericItem; onClick?: () => void; }; diff --git a/src/modules/builder/components/common/ShowChatboxButton.tsx b/src/modules/builder/components/common/ShowChatboxButton.tsx index c51a8b157..b7b8cdba8 100644 --- a/src/modules/builder/components/common/ShowChatboxButton.tsx +++ b/src/modules/builder/components/common/ShowChatboxButton.tsx @@ -1,16 +1,15 @@ import type { JSX } from 'react'; import { useTranslation } from 'react-i18next'; -import { DiscriminatedItem } from '@graasp/sdk'; - import { NS } from '@/config/constants'; import { mutations } from '@/config/queryClient'; +import type { GenericItem } from '@/openapi/client'; import ChatboxButton from '@/ui/buttons/ChatboxButton/ChatboxButton'; import { ActionButtonVariant } from '@/ui/types'; type Props = { type?: ActionButtonVariant; - item: DiscriminatedItem; + item: GenericItem; }; const ShowChatboxButton = ({ item, type }: Props): JSX.Element => { diff --git a/src/modules/builder/components/file/FileUploader.tsx b/src/modules/builder/components/file/FileUploader.tsx index 4363e2ab9..08714e704 100644 --- a/src/modules/builder/components/file/FileUploader.tsx +++ b/src/modules/builder/components/file/FileUploader.tsx @@ -3,7 +3,7 @@ import { useTranslation } from 'react-i18next'; import { Box, Stack, Typography } from '@mui/material'; -import { DiscriminatedItem, MAX_NUMBER_OF_FILES_UPLOAD } from '@graasp/sdk'; +import { MAX_NUMBER_OF_FILES_UPLOAD } from '@graasp/sdk'; import { useParams } from '@tanstack/react-router'; import { AxiosProgressEvent } from 'axios'; @@ -13,6 +13,7 @@ import { CustomLink } from '@/components/ui/CustomLink'; import { NS } from '@/config/constants'; import { getErrorMessage } from '@/config/notifier'; import { mutations } from '@/config/queryClient'; +import type { GenericItem } from '@/openapi/client'; import { useButtonColor } from '@/ui/buttons/hooks'; import FileDropper from '@/ui/upload/FileDropper/FileDropper'; @@ -24,7 +25,7 @@ type Props = { onStart?: () => void; /** id of the component */ id?: string; - previousItemId?: DiscriminatedItem['id']; + previousItemId?: GenericItem['id']; }; export function FileUploader({ diff --git a/src/modules/builder/components/hooks/useGuestMemberships.tsx b/src/modules/builder/components/hooks/useGuestMemberships.tsx index de4452549..00a675a29 100644 --- a/src/modules/builder/components/hooks/useGuestMemberships.tsx +++ b/src/modules/builder/components/hooks/useGuestMemberships.tsx @@ -1,9 +1,9 @@ -import { AccountType, type DiscriminatedItem } from '@graasp/sdk'; +import { AccountType } from '@graasp/sdk'; import { hooks } from '@/config/queryClient'; -import { ItemMembership } from '@/openapi/client'; +import type { GenericItem, ItemMembership } from '@/openapi/client'; -export function useGuestMemberships(itemId: DiscriminatedItem['id']): { +export function useGuestMemberships(itemId: GenericItem['id']): { isLoading: boolean; data?: ItemMembership[]; } { diff --git a/src/modules/builder/components/hooks/useItemLicense.tsx b/src/modules/builder/components/hooks/useItemLicense.tsx index 7aec45ee3..6ea58669e 100644 --- a/src/modules/builder/components/hooks/useItemLicense.tsx +++ b/src/modules/builder/components/hooks/useItemLicense.tsx @@ -2,9 +2,8 @@ import { type JSX, useEffect, useState } from 'react'; import { SxProps } from '@mui/material'; -import { DiscriminatedItem } from '@graasp/sdk'; - import { mutations } from '@/config/queryClient'; +import type { GenericItem } from '@/openapi/client'; import CreativeCommons from '@/ui/CreativeCommons/CreativeCommons'; import { CCSharingVariant } from '@/ui/types'; @@ -44,7 +43,7 @@ const useItemLicense = ({ commonsSx, enableNotifications = true, }: { - item: DiscriminatedItem; + item: GenericItem; iconSize?: number; disabled?: boolean; commonsSx?: SxProps; diff --git a/src/modules/builder/components/hooks/useVisibility.tsx b/src/modules/builder/components/hooks/useVisibility.tsx index b8833301c..bfa116ba2 100644 --- a/src/modules/builder/components/hooks/useVisibility.tsx +++ b/src/modules/builder/components/hooks/useVisibility.tsx @@ -6,10 +6,10 @@ import { ItemLoginSchemaType, ItemPublished, ItemVisibility, - PackedItem, } from '@graasp/sdk'; import { hooks, mutations } from '@/config/queryClient'; +import type { PackedItem } from '@/openapi/client'; import { SETTINGS } from '~builder/constants'; diff --git a/src/modules/builder/components/input/MultiSelectTagChipInput.tsx b/src/modules/builder/components/input/MultiSelectTagChipInput.tsx index c4f531030..dd996090b 100644 --- a/src/modules/builder/components/input/MultiSelectTagChipInput.tsx +++ b/src/modules/builder/components/input/MultiSelectTagChipInput.tsx @@ -12,7 +12,7 @@ import { TextField, } from '@mui/material'; -import { DiscriminatedItem, TagCategoryType } from '@graasp/sdk'; +import { TagCategoryType } from '@graasp/sdk'; import { useQuery } from '@tanstack/react-query'; @@ -22,12 +22,13 @@ import { buildMultiSelectChipInputId, buildMultiSelectChipsSelector, } from '@/config/selectors'; +import type { GenericItem } from '@/openapi/client'; import { getCountForTagsOptions } from '@/openapi/client/@tanstack/react-query.gen'; import useTagsManager from '../item/publish/customizedTags/useTagsManager'; type Props = { - itemId: DiscriminatedItem['id']; + itemId: GenericItem['id']; tagCategory: TagCategoryType; helpertext?: string; }; diff --git a/src/modules/builder/components/item/FolderContent.tsx b/src/modules/builder/components/item/FolderContent.tsx index b6b3cb015..943a08381 100644 --- a/src/modules/builder/components/item/FolderContent.tsx +++ b/src/modules/builder/components/item/FolderContent.tsx @@ -10,7 +10,7 @@ import { useTheme, } from '@mui/material'; -import { PackedItem, PermissionLevelCompare } from '@graasp/sdk'; +import { PermissionLevelCompare } from '@graasp/sdk'; import { SectionHeader } from '@/components/SectionHeader'; import { NS } from '@/config/constants'; @@ -19,6 +19,7 @@ import { ITEM_SCREEN_ERROR_ALERT_ID, buildItemsTableId, } from '@/config/selectors'; +import type { PackedItem } from '@/openapi/client'; import Loader from '@/ui/Loader/Loader'; import { useOutletContext } from '~builder/contexts/OutletContext'; diff --git a/src/modules/builder/components/item/FolderSelectionToolbar.tsx b/src/modules/builder/components/item/FolderSelectionToolbar.tsx index 47f557dcc..5633cc587 100644 --- a/src/modules/builder/components/item/FolderSelectionToolbar.tsx +++ b/src/modules/builder/components/item/FolderSelectionToolbar.tsx @@ -1,6 +1,6 @@ import type { JSX } from 'react'; -import { PackedItem } from '@graasp/sdk'; +import type { PackedItem } from '@/openapi/client'; import RecycleButton from '~builder/components/common/RecycleButton'; import useModalStatus from '~builder/components/hooks/useModalStatus'; diff --git a/src/modules/builder/components/item/ItemContent.tsx b/src/modules/builder/components/item/ItemContent.tsx index 196ceef30..c8eae4401 100644 --- a/src/modules/builder/components/item/ItemContent.tsx +++ b/src/modules/builder/components/item/ItemContent.tsx @@ -4,16 +4,7 @@ import { Trans, useTranslation } from 'react-i18next'; import { Alert, Container, Skeleton, Stack, styled } from '@mui/material'; import { - AppItemType, Context, - DocumentItemType, - EtherpadItemType, - FileItemType, - H5PItemType, - LinkItemType, - PackedItem, - PageItemType, - ShortcutItemType, buildPdfViewerLink, getH5PExtra, getLinkThumbnailUrl, @@ -31,7 +22,18 @@ import { ITEM_SCREEN_ERROR_ALERT_ID, buildFileItemId, } from '@/config/selectors'; -import type { PermissionLevel } from '@/openapi/client'; +import type { + AppItem as AppItemType, + DocumentItem as DocumentItemType, + EtherpadItem as EtherpadItemType, + FileItem as FileItemType, + H5pItem as H5PItemType, + EmbeddedLinkItem as LinkItemType, + PackedItem, + PageItem as PageItemType, + PermissionLevel, + ShortcutItem as ShortcutItemType, +} from '@/openapi/client'; import { Api } from '@/query'; import Loader from '@/ui/Loader/Loader'; import AppItem from '@/ui/items/AppItem'; diff --git a/src/modules/builder/components/item/MapView.tsx b/src/modules/builder/components/item/MapView.tsx index 210a763a6..055c129b0 100644 --- a/src/modules/builder/components/item/MapView.tsx +++ b/src/modules/builder/components/item/MapView.tsx @@ -2,10 +2,11 @@ import { type JSX, useState } from 'react'; import { Skeleton, Stack, Typography } from '@mui/material'; -import { type DiscriminatedItem, ItemGeolocation } from '@graasp/sdk'; +import { ItemGeolocation } from '@graasp/sdk'; import { hooks, mutations } from '@/config/queryClient'; import { buildMapViewId } from '@/config/selectors'; +import type { GenericItem } from '@/openapi/client'; import { useAddressFromGeolocation, useItemsInMap, @@ -19,10 +20,10 @@ import NewItemModal from '../main/NewItemModal'; import { useCurrentLocation } from '../map/useCurrentLocation'; type Props = { - viewItem: (item: DiscriminatedItem) => void; - viewItemInBuilder: (item: DiscriminatedItem) => void; + viewItem: (itemId: GenericItem['id']) => void; + viewItemInBuilder: (itemId: GenericItem['id']) => void; enableGeolocation?: boolean; - parentId?: DiscriminatedItem['id']; + parentId?: GenericItem['id']; title?: string; height?: string; }; diff --git a/src/modules/builder/components/item/copy/CopyModal.tsx b/src/modules/builder/components/item/copy/CopyModal.tsx index 44ff69105..19e3f3f2c 100644 --- a/src/modules/builder/components/item/copy/CopyModal.tsx +++ b/src/modules/builder/components/item/copy/CopyModal.tsx @@ -1,10 +1,9 @@ import type { JSX } from 'react'; import { useTranslation } from 'react-i18next'; -import { DiscriminatedItem } from '@graasp/sdk'; - import { NS } from '@/config/constants'; import { mutations } from '@/config/queryClient'; +import type { GenericItem } from '@/openapi/client'; import { BUILDER } from '../../../langs'; import ItemSelectionModal, { @@ -18,7 +17,7 @@ export const CopyModal = ({ }: { open: boolean; onClose: () => void; - items: DiscriminatedItem[]; + items: GenericItem[]; }): JSX.Element | null => { const { mutate: copyItems } = mutations.useCopyItems(); const { t: translateBuilder } = useTranslation(NS.Builder); diff --git a/src/modules/builder/components/item/edit/EditButton.tsx b/src/modules/builder/components/item/edit/EditButton.tsx index cb2b94c19..3bd874a89 100644 --- a/src/modules/builder/components/item/edit/EditButton.tsx +++ b/src/modules/builder/components/item/edit/EditButton.tsx @@ -1,17 +1,16 @@ import { type JSX, MouseEventHandler } from 'react'; import { useTranslation } from 'react-i18next'; -import { DiscriminatedItem } from '@graasp/sdk'; - import { NS } from '@/config/constants'; import { EDIT_ITEM_BUTTON_CLASS, buildEditButtonId } from '@/config/selectors'; +import type { GenericItem } from '@/openapi/client'; import GraaspEditButton from '@/ui/buttons/EditButton/EditButton'; import { ActionButtonVariant } from '@/ui/types'; import { BUILDER } from '../../../langs'; type Props = { - itemId: DiscriminatedItem['id']; + itemId: GenericItem['id']; type?: ActionButtonVariant; onClick?: MouseEventHandler; }; diff --git a/src/modules/builder/components/item/edit/EditModal.tsx b/src/modules/builder/components/item/edit/EditModal.tsx index 3b0162080..456b6f904 100644 --- a/src/modules/builder/components/item/edit/EditModal.tsx +++ b/src/modules/builder/components/item/edit/EditModal.tsx @@ -4,10 +4,9 @@ import { toast } from 'react-toastify'; import { Dialog, DialogTitle } from '@mui/material'; -import { DiscriminatedItem } from '@graasp/sdk'; - import { NS } from '@/config/constants'; import { EDIT_MODAL_ID } from '@/config/selectors'; +import type { Item } from '@/openapi/client'; import { BUILDER } from '../../../langs'; import BaseItemForm from '../form/BaseItemForm'; @@ -20,7 +19,7 @@ import { EditPageForm } from '../form/page/EditPageForm'; import EditShortcutForm from '../shortcut/EditShortcutForm'; type Props = { - item: DiscriminatedItem; + item: Item; onClose: () => void; open: boolean; }; @@ -35,7 +34,7 @@ export function EditModal({ // updated properties are separated from the original item // so only necessary properties are sent when editing - const [updatedItem, setUpdatedItem] = useState(item); + const [updatedItem, setUpdatedItem] = useState(item); useEffect(() => { if (item.id !== updatedItem.id) { diff --git a/src/modules/builder/components/item/form/BaseItemForm.tsx b/src/modules/builder/components/item/form/BaseItemForm.tsx index 519c1bf5c..644c5cb84 100644 --- a/src/modules/builder/components/item/form/BaseItemForm.tsx +++ b/src/modules/builder/components/item/form/BaseItemForm.tsx @@ -4,7 +4,7 @@ import { useTranslation } from 'react-i18next'; import { Box, Button, DialogActions, DialogContent } from '@mui/material'; -import { DescriptionPlacementType, DiscriminatedItem } from '@graasp/sdk'; +import { DescriptionPlacementType } from '@graasp/sdk'; import { NS } from '@/config/constants'; import { mutations } from '@/config/queryClient'; @@ -12,6 +12,7 @@ import { EDIT_ITEM_MODAL_CANCEL_BUTTON_ID, ITEM_FORM_CONFIRM_BUTTON_ID, } from '@/config/selectors'; +import type { GenericItem } from '@/openapi/client'; import CancelButton from '~builder/components/common/CancelButton'; @@ -28,7 +29,7 @@ const BaseItemForm = ({ item, onClose, }: { - item: DiscriminatedItem; + item: GenericItem; onClose: () => void; }): JSX.Element => { const { t: translateCommon } = useTranslation(NS.Common); diff --git a/src/modules/builder/components/item/form/app/AppForm.tsx b/src/modules/builder/components/item/form/app/AppForm.tsx index 509ce4412..cd4523fe5 100644 --- a/src/modules/builder/components/item/form/app/AppForm.tsx +++ b/src/modules/builder/components/item/form/app/AppForm.tsx @@ -4,11 +4,12 @@ import { useTranslation } from 'react-i18next'; import { Box, DialogActions, DialogTitle, Stack } from '@mui/material'; -import { DiscriminatedItem, ItemGeolocation, buildAppExtra } from '@graasp/sdk'; +import { ItemGeolocation, buildAppExtra } from '@graasp/sdk'; import { NS } from '@/config/constants'; import { mutations } from '@/config/queryClient'; import { ITEM_FORM_CONFIRM_BUTTON_ID } from '@/config/selectors'; +import type { GenericItem } from '@/openapi/client'; import Button from '@/ui/buttons/Button/Button'; import CancelButton from '~builder/components/common/CancelButton'; @@ -18,9 +19,9 @@ import { CustomAppForm } from './CustomAppForm'; type Props = { onClose: () => void; - parentId?: DiscriminatedItem['id']; + parentId?: GenericItem['id']; geolocation?: Pick; - previousItemId?: DiscriminatedItem['id']; + previousItemId?: GenericItem['id']; }; type Inputs = { diff --git a/src/modules/builder/components/item/form/document/DocumentCreateForm.tsx b/src/modules/builder/components/item/form/document/DocumentCreateForm.tsx index 0f0d9994b..a1a797f70 100644 --- a/src/modules/builder/components/item/form/document/DocumentCreateForm.tsx +++ b/src/modules/builder/components/item/form/document/DocumentCreateForm.tsx @@ -5,7 +5,6 @@ import { useTranslation } from 'react-i18next'; import { Box, DialogActions, DialogContent, DialogTitle } from '@mui/material'; import { - DiscriminatedItem, DocumentItemExtraFlavor, ItemGeolocation, buildDocumentExtra, @@ -17,6 +16,7 @@ import { ITEM_FORM_CONFIRM_BUTTON_ID, ITEM_FORM_DOCUMENT_TEXT_ID, } from '@/config/selectors'; +import type { GenericItem } from '@/openapi/client'; import Button from '@/ui/buttons/Button/Button'; import { CancelButton } from '~builder/components/common/CancelButton'; @@ -30,9 +30,9 @@ import { DocumentFlavorSelect } from './DocumentFlavorSelect'; type Props = { onClose: () => void; - parentId?: DiscriminatedItem['id']; + parentId?: GenericItem['id']; geolocation?: Pick; - previousItemId?: DiscriminatedItem['id']; + previousItemId?: GenericItem['id']; }; type Inputs = { diff --git a/src/modules/builder/components/item/form/document/DocumentEditForm.tsx b/src/modules/builder/components/item/form/document/DocumentEditForm.tsx index 0252df6f6..22c39efcc 100644 --- a/src/modules/builder/components/item/form/document/DocumentEditForm.tsx +++ b/src/modules/builder/components/item/form/document/DocumentEditForm.tsx @@ -4,11 +4,7 @@ import { useTranslation } from 'react-i18next'; import { Box, DialogActions, DialogContent } from '@mui/material'; -import { - DocumentItemExtraFlavor, - DocumentItemType, - buildDocumentExtra, -} from '@graasp/sdk'; +import { DocumentItemExtraFlavor, buildDocumentExtra } from '@graasp/sdk'; import { NS } from '@/config/constants'; import { mutations } from '@/config/queryClient'; @@ -16,6 +12,7 @@ import { ITEM_FORM_CONFIRM_BUTTON_ID, ITEM_FORM_DOCUMENT_TEXT_ID, } from '@/config/selectors'; +import type { DocumentItem } from '@/openapi/client'; import Button from '@/ui/buttons/Button/Button'; import CancelButton from '~builder/components/common/CancelButton'; @@ -30,7 +27,7 @@ import { DocumentFlavorSelect } from './DocumentFlavorSelect'; type Props = { onClose: () => void; - item: DocumentItemType; + item: DocumentItem; }; type Inputs = { diff --git a/src/modules/builder/components/item/form/etherpad/EtherpadEditForm.tsx b/src/modules/builder/components/item/form/etherpad/EtherpadEditForm.tsx index 83a13ac05..0b4409d34 100644 --- a/src/modules/builder/components/item/form/etherpad/EtherpadEditForm.tsx +++ b/src/modules/builder/components/item/form/etherpad/EtherpadEditForm.tsx @@ -4,16 +4,13 @@ import { useTranslation } from 'react-i18next'; import { DialogActions, DialogContent, Stack } from '@mui/material'; -import { - EtherpadItemType, - EtherpadPermission, - getParentFromPath, -} from '@graasp/sdk'; +import { EtherpadPermission, getParentFromPath } from '@graasp/sdk'; import { useMutation, useQueryClient } from '@tanstack/react-query'; import { NS } from '@/config/constants'; import { ITEM_FORM_CONFIRM_BUTTON_ID } from '@/config/selectors'; +import type { EtherpadItem } from '@/openapi/client'; import { updateEtherpadMutation } from '@/openapi/client/@tanstack/react-query.gen'; import { getKeyForParentId, itemKeys } from '@/query/keys'; import Button from '@/ui/buttons/Button/Button'; @@ -29,7 +26,7 @@ export function EtherpadEditForm({ item, onClose, }: Readonly<{ - item: EtherpadItemType; + item: EtherpadItem; onClose: () => void; }>): JSX.Element { const queryClient = useQueryClient(); diff --git a/src/modules/builder/components/item/form/etherpad/EtherpadForm.tsx b/src/modules/builder/components/item/form/etherpad/EtherpadForm.tsx index 6c0a65e62..5c1ef427d 100644 --- a/src/modules/builder/components/item/form/etherpad/EtherpadForm.tsx +++ b/src/modules/builder/components/item/form/etherpad/EtherpadForm.tsx @@ -10,12 +10,13 @@ import { Typography, } from '@mui/material'; -import { DiscriminatedItem, EtherpadPermission } from '@graasp/sdk'; +import { EtherpadPermission } from '@graasp/sdk'; import { useMutation, useQueryClient } from '@tanstack/react-query'; import { NS } from '@/config/constants'; import { ITEM_FORM_CONFIRM_BUTTON_ID } from '@/config/selectors'; +import type { GenericItem } from '@/openapi/client'; import { createEtherpadMutation } from '@/openapi/client/@tanstack/react-query.gen'; import { getKeyForParentId } from '@/query/keys'; import Button from '@/ui/buttons/Button/Button'; @@ -32,7 +33,7 @@ export function EtherpadForm({ parentId, onClose, }: Readonly<{ - parentId?: DiscriminatedItem['id']; + parentId?: GenericItem['id']; onClose: () => void; }>): JSX.Element { const queryClient = useQueryClient(); diff --git a/src/modules/builder/components/item/form/file/FileForm.tsx b/src/modules/builder/components/item/form/file/FileForm.tsx index 3bac61b01..3de860b61 100644 --- a/src/modules/builder/components/item/form/file/FileForm.tsx +++ b/src/modules/builder/components/item/form/file/FileForm.tsx @@ -12,7 +12,6 @@ import { import { DescriptionPlacementType, FileItemExtra, - FileItemType, MimeTypes, } from '@graasp/sdk'; @@ -23,6 +22,7 @@ import { ITEM_FORM_CONFIRM_BUTTON_ID, ITEM_FORM_IMAGE_ALT_TEXT_EDIT_FIELD_ID, } from '@/config/selectors'; +import type { FileItem } from '@/openapi/client'; import CancelButton from '~builder/components/common/CancelButton'; @@ -41,7 +41,7 @@ export function FileForm({ item, onClose, }: Readonly<{ - item: FileItemType; + item: FileItem; onClose: () => void; }>) { const { t: translateBuilder } = useTranslation(NS.Builder); diff --git a/src/modules/builder/components/item/form/file/UploadFileModalContent.tsx b/src/modules/builder/components/item/form/file/UploadFileModalContent.tsx index 4a6f4979a..b5dd823f0 100644 --- a/src/modules/builder/components/item/form/file/UploadFileModalContent.tsx +++ b/src/modules/builder/components/item/form/file/UploadFileModalContent.tsx @@ -3,16 +3,15 @@ import { useTranslation } from 'react-i18next'; import { DialogActions, DialogContent, DialogTitle } from '@mui/material'; -import { DiscriminatedItem } from '@graasp/sdk'; - import { NS } from '@/config/constants'; import { EDIT_ITEM_MODAL_CANCEL_BUTTON_ID } from '@/config/selectors'; +import type { GenericItem } from '@/openapi/client'; import CancelButton from '~builder/components/common/CancelButton'; import { FileUploader } from '~builder/components/file/FileUploader'; type UploadFileModalContentProps = { - previousItemId?: DiscriminatedItem['id']; + previousItemId?: GenericItem['id']; onClose: () => void; }; diff --git a/src/modules/builder/components/item/form/folder/FolderCreateForm.tsx b/src/modules/builder/components/item/form/folder/FolderCreateForm.tsx index ff43292ae..89b9cae3d 100644 --- a/src/modules/builder/components/item/form/folder/FolderCreateForm.tsx +++ b/src/modules/builder/components/item/form/folder/FolderCreateForm.tsx @@ -9,7 +9,7 @@ import { Stack, } from '@mui/material'; -import { DiscriminatedItem, ItemGeolocation } from '@graasp/sdk'; +import { ItemGeolocation } from '@graasp/sdk'; import { useMutation, useQueryClient } from '@tanstack/react-query'; import { useParams, useRouter } from '@tanstack/react-router'; @@ -20,6 +20,7 @@ import { FOLDER_FORM_DESCRIPTION_ID, ITEM_FORM_CONFIRM_BUTTON_ID, } from '@/config/selectors'; +import type { GenericItem } from '@/openapi/client'; import { createPageMutation } from '@/openapi/client/@tanstack/react-query.gen'; import { itemKeys } from '@/query/keys'; import Button from '@/ui/buttons/Button/Button'; @@ -37,9 +38,9 @@ type Inputs = { type FolderCreateFormProps = { onClose: () => void; - parentId?: DiscriminatedItem['id']; + parentId?: GenericItem['id']; geolocation?: Pick; - previousItemId?: DiscriminatedItem['id']; + previousItemId?: GenericItem['id']; }; export function FolderCreateForm({ diff --git a/src/modules/builder/components/item/form/folder/FolderEditForm.tsx b/src/modules/builder/components/item/form/folder/FolderEditForm.tsx index c3f1027a2..6909e02b4 100644 --- a/src/modules/builder/components/item/form/folder/FolderEditForm.tsx +++ b/src/modules/builder/components/item/form/folder/FolderEditForm.tsx @@ -4,8 +4,6 @@ import { useTranslation } from 'react-i18next'; import { Box, DialogActions, DialogContent } from '@mui/material'; -import { DiscriminatedItem } from '@graasp/sdk'; - import { NS } from '@/config/constants'; import { mutations } from '@/config/queryClient'; import { @@ -13,6 +11,7 @@ import { FOLDER_FORM_DESCRIPTION_ID, ITEM_FORM_CONFIRM_BUTTON_ID, } from '@/config/selectors'; +import type { GenericItem } from '@/openapi/client'; import Button from '@/ui/buttons/Button/Button'; import CancelButton from '~builder/components/common/CancelButton'; @@ -21,7 +20,7 @@ import { ItemNameField } from '../ItemNameField'; import { DescriptionForm } from '../description/DescriptionForm'; type FolderEditFormProps = { - item: DiscriminatedItem; + item: GenericItem; onClose: () => void; }; diff --git a/src/modules/builder/components/item/form/folder/NewFolderButton.tsx b/src/modules/builder/components/item/form/folder/NewFolderButton.tsx index 916b203ff..3224ca96a 100644 --- a/src/modules/builder/components/item/form/folder/NewFolderButton.tsx +++ b/src/modules/builder/components/item/form/folder/NewFolderButton.tsx @@ -3,12 +3,13 @@ import { useTranslation } from 'react-i18next'; import { ButtonProps, Dialog, IconButton, useTheme } from '@mui/material'; -import { DiscriminatedItem, ItemGeolocation } from '@graasp/sdk'; +import { ItemGeolocation } from '@graasp/sdk'; import { FolderPlus } from 'lucide-react'; import { NS } from '@/config/constants'; import { ADD_FOLDER_BUTTON_CY } from '@/config/selectors'; +import type { GenericItem } from '@/openapi/client'; import Button from '@/ui/buttons/Button/Button'; import useModalStatus from '~builder/components/hooks/useModalStatus'; @@ -16,8 +17,8 @@ import useModalStatus from '~builder/components/hooks/useModalStatus'; import { FolderCreateForm } from './FolderCreateForm'; type Props = { - previousItemId?: DiscriminatedItem['id']; - parentId?: DiscriminatedItem['id']; + previousItemId?: GenericItem['id']; + parentId?: GenericItem['id']; geolocation?: Pick; size?: ButtonProps['size']; type?: 'button' | 'icon'; diff --git a/src/modules/builder/components/item/form/link/LinkEditForm.tsx b/src/modules/builder/components/item/form/link/LinkEditForm.tsx index 2d315925d..fed742b7c 100644 --- a/src/modules/builder/components/item/form/link/LinkEditForm.tsx +++ b/src/modules/builder/components/item/form/link/LinkEditForm.tsx @@ -11,7 +11,6 @@ import { import { DescriptionPlacementType, - LinkItemType, UnionOfConst, getParentFromPath, } from '@graasp/sdk'; @@ -23,6 +22,7 @@ import { EDIT_ITEM_MODAL_CANCEL_BUTTON_ID, ITEM_FORM_CONFIRM_BUTTON_ID, } from '@/config/selectors'; +import type { EmbeddedLinkItem } from '@/openapi/client'; import { updateLinkMutation } from '@/openapi/client/@tanstack/react-query.gen'; import { getKeyForParentId, itemKeys } from '@/query/keys'; @@ -51,7 +51,7 @@ export function LinkEditForm({ item, onClose, }: Readonly<{ - item: LinkItemType; + item: EmbeddedLinkItem; onClose: () => void; }>) { const queryClient = useQueryClient(); diff --git a/src/modules/builder/components/item/form/link/LinkForm.tsx b/src/modules/builder/components/item/form/link/LinkForm.tsx index 18a96d308..05e052728 100644 --- a/src/modules/builder/components/item/form/link/LinkForm.tsx +++ b/src/modules/builder/components/item/form/link/LinkForm.tsx @@ -12,7 +12,6 @@ import { import { DescriptionPlacementType, - DiscriminatedItem, ItemGeolocation, UnionOfConst, } from '@graasp/sdk'; @@ -21,6 +20,7 @@ import { useMutation, useQueryClient } from '@tanstack/react-query'; import { NS } from '@/config/constants'; import { ITEM_FORM_CONFIRM_BUTTON_ID } from '@/config/selectors'; +import type { GenericItem } from '@/openapi/client'; import { createLinkMutation } from '@/openapi/client/@tanstack/react-query.gen'; import { getKeyForParentId, itemsWithGeolocationKeys } from '@/query/keys'; import Button from '@/ui/buttons/Button/Button'; @@ -36,9 +36,9 @@ import { LinkType, getSettingsFromLinkType, normalizeURL } from './linkUtils'; type Props = { onClose: () => void; - parentId?: DiscriminatedItem['id']; + parentId?: GenericItem['id']; geolocation?: Pick; - previousItemId?: DiscriminatedItem['id']; + previousItemId?: GenericItem['id']; }; type Inputs = { diff --git a/src/modules/builder/components/item/form/page/EditPageForm.tsx b/src/modules/builder/components/item/form/page/EditPageForm.tsx index a614c277e..98f51c4e5 100644 --- a/src/modules/builder/components/item/form/page/EditPageForm.tsx +++ b/src/modules/builder/components/item/form/page/EditPageForm.tsx @@ -4,7 +4,7 @@ import { useTranslation } from 'react-i18next'; import { Box, Button, DialogActions, DialogContent } from '@mui/material'; -import { DescriptionPlacementType, PageItemType } from '@graasp/sdk'; +import { DescriptionPlacementType } from '@graasp/sdk'; import { NS } from '@/config/constants'; import { mutations } from '@/config/queryClient'; @@ -12,6 +12,7 @@ import { EDIT_ITEM_MODAL_CANCEL_BUTTON_ID, ITEM_FORM_CONFIRM_BUTTON_ID, } from '@/config/selectors'; +import type { PageItem } from '@/openapi/client'; import CancelButton from '~builder/components/common/CancelButton'; @@ -27,7 +28,7 @@ export const EditPageForm = ({ item, onClose, }: { - item: PageItemType; + item: PageItem; onClose: () => void; }): JSX.Element => { const { t: translateCommon } = useTranslation(NS.Common); diff --git a/src/modules/builder/components/item/header/Actions.tsx b/src/modules/builder/components/item/header/Actions.tsx index e242bd7ad..04d025d28 100644 --- a/src/modules/builder/components/item/header/Actions.tsx +++ b/src/modules/builder/components/item/header/Actions.tsx @@ -3,7 +3,7 @@ import { useTranslation } from 'react-i18next'; import { Divider, IconButton, Menu } from '@mui/material'; -import { AccountType, PackedItem, PermissionLevelCompare } from '@graasp/sdk'; +import { AccountType, PermissionLevelCompare } from '@graasp/sdk'; import { useSearch } from '@tanstack/react-router'; import { MoreVerticalIcon } from 'lucide-react'; @@ -11,6 +11,7 @@ import { MoreVerticalIcon } from 'lucide-react'; import { NS } from '@/config/constants'; import { hooks } from '@/config/queryClient'; import { ITEM_MENU_BOOKMARK_BUTTON_CLASS } from '@/config/selectors'; +import type { PackedItem } from '@/openapi/client'; import { ActionButton } from '@/ui/types'; import ExportRawZipButton from '~builder/components/common/ExportRawZipButton'; @@ -75,7 +76,7 @@ const Actions = ({ item }: Props): JSX.Element[] | null => { item.type === 'folder' ? ( ) : ( @@ -160,7 +161,7 @@ const Actions = ({ item }: Props): JSX.Element[] | null => { , ] : null} - + {canAdmin && ( void; }; diff --git a/src/modules/builder/components/item/move/MoveModal.tsx b/src/modules/builder/components/item/move/MoveModal.tsx index ee5ea4c25..e414cf518 100644 --- a/src/modules/builder/components/item/move/MoveModal.tsx +++ b/src/modules/builder/components/item/move/MoveModal.tsx @@ -1,10 +1,11 @@ import type { JSX } from 'react'; import { useTranslation } from 'react-i18next'; -import { DiscriminatedItem, PackedItem, getParentFromPath } from '@graasp/sdk'; +import { getParentFromPath } from '@graasp/sdk'; import { NS } from '@/config/constants'; import { mutations } from '@/config/queryClient'; +import type { GenericItem, PackedItem } from '@/openapi/client'; import type { NavigationElement } from '@/ui/Tree/types'; import { BUILDER } from '../../../langs'; @@ -36,7 +37,7 @@ export const MoveModal = ({ }; const isDisabled = ( - itemsArray: DiscriminatedItem[], + itemsArray: GenericItem[], item: NavigationElement, homeId: string, ) => { diff --git a/src/modules/builder/components/item/publish/CoEditorsContainer.tsx b/src/modules/builder/components/item/publish/CoEditorsContainer.tsx index d616ea6fe..04980df91 100644 --- a/src/modules/builder/components/item/publish/CoEditorsContainer.tsx +++ b/src/modules/builder/components/item/publish/CoEditorsContainer.tsx @@ -3,7 +3,7 @@ import { useTranslation } from 'react-i18next'; import { Checkbox, FormControlLabel, Stack, Typography } from '@mui/material'; -import { PackedItem, PublicationStatus } from '@graasp/sdk'; +import { PublicationStatus } from '@graasp/sdk'; import { NS } from '@/config/constants'; import { mutations } from '@/config/queryClient'; @@ -11,6 +11,7 @@ import { CO_EDITOR_SETTINGS_CHECKBOX_ID, EMAIL_NOTIFICATION_CHECKBOX, } from '@/config/selectors'; +import type { GenericItem } from '@/openapi/client'; import { usePublicationStatus } from '@/query/item/publication/hooks'; import { useDataSyncContext } from '~builder/components/context/DataSyncContext'; @@ -19,7 +20,7 @@ import { BUILDER } from '~builder/langs'; const SYNC_STATUS_KEY = 'PublishCoEditors'; type Props = { - item: PackedItem; + item: GenericItem; notifyCoEditors: boolean; onNotificationChanged: (enabled: boolean) => void; }; diff --git a/src/modules/builder/components/item/publish/EditItemDescription.tsx b/src/modules/builder/components/item/publish/EditItemDescription.tsx index 0098f3d76..e22bc3178 100644 --- a/src/modules/builder/components/item/publish/EditItemDescription.tsx +++ b/src/modules/builder/components/item/publish/EditItemDescription.tsx @@ -5,10 +5,9 @@ import EditIcon from '@mui/icons-material/Edit'; import WarningIcon from '@mui/icons-material/Warning'; import { IconButton, Stack, Tooltip, Typography } from '@mui/material'; -import { DiscriminatedItem } from '@graasp/sdk'; - import { NS } from '@/config/constants'; import { mutations } from '@/config/queryClient'; +import type { GenericItem } from '@/openapi/client'; import TextDisplay from '@/ui/TextDisplay/TextDisplay'; import { useButtonColor } from '@/ui/buttons/hooks'; @@ -22,7 +21,7 @@ import PublicationModal from './PublicationModal'; const SYNC_STATUS_KEY = 'PublishItemDescription'; type Props = { - item: DiscriminatedItem; + item: GenericItem; }; export const EditItemDescription = ({ item }: Props): JSX.Element => { diff --git a/src/modules/builder/components/item/publish/EditItemName.tsx b/src/modules/builder/components/item/publish/EditItemName.tsx index de0541614..382cf068a 100644 --- a/src/modules/builder/components/item/publish/EditItemName.tsx +++ b/src/modules/builder/components/item/publish/EditItemName.tsx @@ -4,10 +4,9 @@ import { useTranslation } from 'react-i18next'; import EditIcon from '@mui/icons-material/Edit'; import { IconButton, Stack, Typography } from '@mui/material'; -import { DiscriminatedItem } from '@graasp/sdk'; - import { NS } from '@/config/constants'; import { mutations } from '@/config/queryClient'; +import type { GenericItem } from '@/openapi/client'; import { useDataSyncContext } from '~builder/components/context/DataSyncContext'; import useModalStatus from '~builder/components/hooks/useModalStatus'; @@ -19,7 +18,7 @@ import PublicationModal from './PublicationModal'; const SYNC_STATUS_KEY = 'PublishItemTitle'; type Props = { - item: DiscriminatedItem; + item: GenericItem; }; export const EditItemName = ({ item }: Props): JSX.Element => { diff --git a/src/modules/builder/components/item/publish/LanguageContainer.tsx b/src/modules/builder/components/item/publish/LanguageContainer.tsx index 9a0efe372..191035a5f 100644 --- a/src/modules/builder/components/item/publish/LanguageContainer.tsx +++ b/src/modules/builder/components/item/publish/LanguageContainer.tsx @@ -3,11 +3,10 @@ import { useTranslation } from 'react-i18next'; import { Button, Chip, Stack, Typography } from '@mui/material'; -import { PackedItem } from '@graasp/sdk'; - import { DEFAULT_LANG, NS } from '@/config/constants'; import { LANGS } from '@/config/langs'; import { LIBRARY_SETTINGS_LANGUAGES_ID } from '@/config/selectors'; +import type { PackedItem } from '@/openapi/client'; import useModalStatus from '~builder/components/hooks/useModalStatus'; import { BUILDER } from '~builder/langs'; diff --git a/src/modules/builder/components/item/publish/LicenseContainer.tsx b/src/modules/builder/components/item/publish/LicenseContainer.tsx index 68d6f4d70..f9e9ebced 100644 --- a/src/modules/builder/components/item/publish/LicenseContainer.tsx +++ b/src/modules/builder/components/item/publish/LicenseContainer.tsx @@ -14,8 +14,6 @@ import { useTheme, } from '@mui/material'; -import { DiscriminatedItem } from '@graasp/sdk'; - import { NS } from '@/config/constants'; import { CC_DELETE_BUTTON_HEADER, @@ -23,6 +21,7 @@ import { CC_SAVE_BUTTON, LIBRARY_SETTINGS_CC_SETTINGS_ID, } from '@/config/selectors'; +import type { GenericItem } from '@/openapi/client'; import { useDataSyncContext } from '~builder/components/context/DataSyncContext'; import { CC_LICENSE_ABOUT_URL } from '~builder/constants'; @@ -35,7 +34,7 @@ import PublicationModal from './PublicationModal'; const SYNC_STATUS_KEY = 'PublishLicense'; type Props = { - item: DiscriminatedItem; + item: GenericItem; }; export const LicenseContainer = ({ item }: Props): JSX.Element => { diff --git a/src/modules/builder/components/item/publish/PublicVisibilityModal.tsx b/src/modules/builder/components/item/publish/PublicVisibilityModal.tsx index 1a03480a7..eed4dc9cd 100644 --- a/src/modules/builder/components/item/publish/PublicVisibilityModal.tsx +++ b/src/modules/builder/components/item/publish/PublicVisibilityModal.tsx @@ -10,10 +10,9 @@ import { Typography, } from '@mui/material'; -import { PackedItem } from '@graasp/sdk'; - import { NS } from '@/config/constants'; import { PUBLIC_VISIBILITY_MODAL_VALIDATE_BUTTON } from '@/config/selectors'; +import type { PackedItem } from '@/openapi/client'; import { SETTINGS } from '~builder/constants'; import { BUILDER } from '~builder/langs'; diff --git a/src/modules/builder/components/item/publish/PublicationStatusComponent.tsx b/src/modules/builder/components/item/publish/PublicationStatusComponent.tsx index e56b3f3cc..a6950c4ad 100644 --- a/src/modules/builder/components/item/publish/PublicationStatusComponent.tsx +++ b/src/modules/builder/components/item/publish/PublicationStatusComponent.tsx @@ -8,10 +8,11 @@ import InfoIcon from '@mui/icons-material/Info'; import PendingActionsIcon from '@mui/icons-material/PendingActions'; import { Chip, ChipProps, CircularProgress } from '@mui/material'; -import { PackedItem, PublicationStatus } from '@graasp/sdk'; +import { PublicationStatus } from '@graasp/sdk'; import { NS } from '@/config/constants'; import { buildPublicationStatus } from '@/config/selectors'; +import type { PackedItem } from '@/openapi/client'; import { usePublicationStatus } from '@/query/item/publication/hooks'; import { BUILDER } from '~builder/langs'; diff --git a/src/modules/builder/components/item/publish/PublicationThumbnail.tsx b/src/modules/builder/components/item/publish/PublicationThumbnail.tsx index 1fe217d76..ca056b2ed 100644 --- a/src/modules/builder/components/item/publish/PublicationThumbnail.tsx +++ b/src/modules/builder/components/item/publish/PublicationThumbnail.tsx @@ -4,10 +4,9 @@ import { useTranslation } from 'react-i18next'; import WarningIcon from '@mui/icons-material/Warning'; import { Tooltip } from '@mui/material'; -import { PackedItem } from '@graasp/sdk'; - import { NS } from '@/config/constants'; import { buildPublishWarningIcon } from '@/config/selectors'; +import type { PackedItem } from '@/openapi/client'; import { useButtonColor } from '@/ui/buttons/hooks'; import ThumbnailUploader, { diff --git a/src/modules/builder/components/item/publish/customizedTags/CustomizedTags.tsx b/src/modules/builder/components/item/publish/customizedTags/CustomizedTags.tsx index f3c5a1cfb..b8aa3efc9 100644 --- a/src/modules/builder/components/item/publish/customizedTags/CustomizedTags.tsx +++ b/src/modules/builder/components/item/publish/customizedTags/CustomizedTags.tsx @@ -4,13 +4,14 @@ import { Trans, useTranslation } from 'react-i18next'; import EditIcon from '@mui/icons-material/Edit'; import { Chip, Stack, Typography } from '@mui/material'; -import { DiscriminatedItem, TagCategory } from '@graasp/sdk'; +import { TagCategory } from '@graasp/sdk'; import { NS } from '@/config/constants'; import { ITEM_TAGS_OPEN_MODAL_BUTTON_CY, buildCustomizedTagsSelector, } from '@/config/selectors'; +import type { GenericItem } from '@/openapi/client'; import { MultiSelectTagChipInput } from '~builder/components/input/MultiSelectTagChipInput'; import { TAGS_DOCUMENTATION } from '~builder/constants'; @@ -21,15 +22,15 @@ import PublicationModal from '../PublicationModal'; import { useTagsManager } from './useTagsManager'; type Props = { - item: DiscriminatedItem; + itemId: GenericItem['id']; }; -export const CustomizedTags = ({ item }: Props): JSX.Element => { +export const CustomizedTags = ({ itemId }: Props): JSX.Element => { const { t } = useTranslation(NS.Builder); - const { deleteValue } = useTagsManager({ itemId: item.id }); + const { deleteValue } = useTagsManager({ itemId }); const { isOpen, openModal, closeModal } = useModalStatus(); const { tags } = useTagsManager({ - itemId: item.id, + itemId, }); const chipTags = tags?.map(({ name, id }) => ( @@ -64,17 +65,17 @@ export const CustomizedTags = ({ item }: Props): JSX.Element => { /> diff --git a/src/modules/builder/components/item/publish/customizedTags/PublishCustomizedTags.tsx b/src/modules/builder/components/item/publish/customizedTags/PublishCustomizedTags.tsx index f85e23354..c0a4825a2 100644 --- a/src/modules/builder/components/item/publish/customizedTags/PublishCustomizedTags.tsx +++ b/src/modules/builder/components/item/publish/customizedTags/PublishCustomizedTags.tsx @@ -4,9 +4,8 @@ import { useTranslation } from 'react-i18next'; import WarningIcon from '@mui/icons-material/Warning'; import { Tooltip } from '@mui/material'; -import { DiscriminatedItem } from '@graasp/sdk'; - import { NS } from '@/config/constants'; +import type { GenericItem } from '@/openapi/client'; import { useButtonColor } from '@/ui/buttons/hooks'; import { useDataSyncContext } from '~builder/components/context/DataSyncContext'; @@ -16,7 +15,7 @@ import CustomizedTags from './CustomizedTags'; import { useTagsManager } from './useTagsManager'; type Props = { - item: DiscriminatedItem; + item: GenericItem; onChange?: (args: { isLoading: boolean; isSuccess: boolean; @@ -44,7 +43,7 @@ export const PublishCustomizedTags = ({ return ( <> - + {showWarning && ( diff --git a/src/modules/builder/components/item/publish/customizedTags/useTagsManager.tsx b/src/modules/builder/components/item/publish/customizedTags/useTagsManager.tsx index aed045ff9..ce4f2034a 100644 --- a/src/modules/builder/components/item/publish/customizedTags/useTagsManager.tsx +++ b/src/modules/builder/components/item/publish/customizedTags/useTagsManager.tsx @@ -2,13 +2,14 @@ import { useState } from 'react'; import { useTranslation } from 'react-i18next'; import { toast } from 'react-toastify'; -import { DiscriminatedItem, Tag, TagCategoryType } from '@graasp/sdk'; +import { Tag, TagCategoryType } from '@graasp/sdk'; import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; import groupBy from 'lodash.groupby'; import { NS } from '@/config/constants'; import { hooks } from '@/config/queryClient'; +import type { GenericItem } from '@/openapi/client'; import { createTagForItemMutation, deleteTagForItemMutation, @@ -18,7 +19,7 @@ import { const EMPTY_STRING = ''; type Props = { - itemId: DiscriminatedItem['id']; + itemId: GenericItem['id']; }; type UseMultiSelectChipInput = { diff --git a/src/modules/builder/components/item/publish/publicationButtons/InvalidButton.tsx b/src/modules/builder/components/item/publish/publicationButtons/InvalidButton.tsx index d015df434..50834f0a0 100644 --- a/src/modules/builder/components/item/publish/publicationButtons/InvalidButton.tsx +++ b/src/modules/builder/components/item/publish/publicationButtons/InvalidButton.tsx @@ -3,11 +3,12 @@ import { useTranslation } from 'react-i18next'; import { Alert, Button } from '@mui/material'; -import { PackedItem, PublicationStatus } from '@graasp/sdk'; +import { PublicationStatus } from '@graasp/sdk'; import { ADMIN_CONTACT, NS } from '@/config/constants'; import { mutations } from '@/config/queryClient'; import { buildItemPublicationButton } from '@/config/selectors'; +import type { PackedItem } from '@/openapi/client'; import useModalStatus from '~builder/components/hooks/useModalStatus'; import { BUILDER } from '~builder/langs'; diff --git a/src/modules/builder/components/item/publish/publicationButtons/PublicationButtonSelector.tsx b/src/modules/builder/components/item/publish/publicationButtons/PublicationButtonSelector.tsx index ec332e500..a663a51ae 100644 --- a/src/modules/builder/components/item/publish/publicationButtons/PublicationButtonSelector.tsx +++ b/src/modules/builder/components/item/publish/publicationButtons/PublicationButtonSelector.tsx @@ -1,7 +1,8 @@ import type { ReactNode } from 'react'; -import { PackedItem, PublicationStatus } from '@graasp/sdk'; +import { PublicationStatus } from '@graasp/sdk'; +import type { PackedItem } from '@/openapi/client'; import { usePublicationStatus } from '@/query/item/publication/hooks'; import InvalidButton from './InvalidButton'; diff --git a/src/modules/builder/components/item/publish/publicationButtons/PublishedButton.tsx b/src/modules/builder/components/item/publish/publicationButtons/PublishedButton.tsx index 03aa03f52..de36e5df0 100644 --- a/src/modules/builder/components/item/publish/publicationButtons/PublishedButton.tsx +++ b/src/modules/builder/components/item/publish/publicationButtons/PublishedButton.tsx @@ -3,7 +3,7 @@ import { useTranslation } from 'react-i18next'; import { Alert, Button } from '@mui/material'; -import { Context, PackedItem, PublicationStatus } from '@graasp/sdk'; +import { Context, PublicationStatus } from '@graasp/sdk'; import { LinkIcon } from 'lucide-react'; @@ -11,6 +11,7 @@ import { NS } from '@/config/constants'; import { mutations } from '@/config/queryClient'; import { buildItemPublicationButton } from '@/config/selectors'; import { ClientManager } from '@/lib/ClientManager'; +import type { PackedItem } from '@/openapi/client'; import PublicationButton from './PublicationButton'; diff --git a/src/modules/builder/components/item/publish/publicationButtons/ReadyToPublishButton.tsx b/src/modules/builder/components/item/publish/publicationButtons/ReadyToPublishButton.tsx index af6e6210a..f32f09b41 100644 --- a/src/modules/builder/components/item/publish/publicationButtons/ReadyToPublishButton.tsx +++ b/src/modules/builder/components/item/publish/publicationButtons/ReadyToPublishButton.tsx @@ -3,11 +3,12 @@ import { useTranslation } from 'react-i18next'; import { Button, Typography } from '@mui/material'; -import { PackedItem, PublicationStatus } from '@graasp/sdk'; +import { PublicationStatus } from '@graasp/sdk'; import { NS } from '@/config/constants'; import { mutations } from '@/config/queryClient'; import { buildItemPublicationButton } from '@/config/selectors'; +import type { PackedItem } from '@/openapi/client'; import useModalStatus from '~builder/components/hooks/useModalStatus'; import { BUILDER } from '~builder/langs'; diff --git a/src/modules/builder/components/item/publish/publicationButtons/UnpublishedButton.tsx b/src/modules/builder/components/item/publish/publicationButtons/UnpublishedButton.tsx index 53819506b..aaff829e7 100644 --- a/src/modules/builder/components/item/publish/publicationButtons/UnpublishedButton.tsx +++ b/src/modules/builder/components/item/publish/publicationButtons/UnpublishedButton.tsx @@ -3,11 +3,12 @@ import { useTranslation } from 'react-i18next'; import { Button } from '@mui/material'; -import { PackedItem, PublicationStatus } from '@graasp/sdk'; +import { PublicationStatus } from '@graasp/sdk'; import { NS } from '@/config/constants'; import { mutations } from '@/config/queryClient'; import { buildItemPublicationButton } from '@/config/selectors'; +import type { PackedItem } from '@/openapi/client'; import useModalStatus from '~builder/components/hooks/useModalStatus'; import { BUILDER } from '~builder/langs'; diff --git a/src/modules/builder/components/item/settings/AdminChatSettings.tsx b/src/modules/builder/components/item/settings/AdminChatSettings.tsx index b0da3778b..e353eadda 100644 --- a/src/modules/builder/components/item/settings/AdminChatSettings.tsx +++ b/src/modules/builder/components/item/settings/AdminChatSettings.tsx @@ -1,12 +1,11 @@ import type { JSX } from 'react'; import { useTranslation } from 'react-i18next'; -import { PackedItem } from '@graasp/sdk'; - import { MessageSquareTextIcon } from 'lucide-react'; import { NS } from '@/config/constants'; import { hooks } from '@/config/queryClient'; +import type { PackedItem } from '@/openapi/client'; import { BUILDER } from '~builder/langs'; diff --git a/src/modules/builder/components/item/settings/CustomizedTagsSettings.tsx b/src/modules/builder/components/item/settings/CustomizedTagsSettings.tsx index 8a58e9011..8387d0491 100644 --- a/src/modules/builder/components/item/settings/CustomizedTagsSettings.tsx +++ b/src/modules/builder/components/item/settings/CustomizedTagsSettings.tsx @@ -3,16 +3,15 @@ import { useTranslation } from 'react-i18next'; import { Stack, Typography } from '@mui/material'; -import { DiscriminatedItem } from '@graasp/sdk'; - import { NS } from '@/config/constants'; +import type { GenericItem } from '@/openapi/client'; import { BUILDER } from '~builder/langs'; import CustomizedTags from '../publish/customizedTags/CustomizedTags'; type Props = { - item: DiscriminatedItem; + item: GenericItem; }; export const CustomizedTagsSettings = ({ item }: Props): JSX.Element => { @@ -22,7 +21,7 @@ export const CustomizedTagsSettings = ({ item }: Props): JSX.Element => { {t(BUILDER.ITEM_TAGS_TITLE)} {t(BUILDER.ITEM_TAGS_PLACEHOLDER)} - + ); }; diff --git a/src/modules/builder/components/item/settings/GeolocationModalButton.tsx b/src/modules/builder/components/item/settings/GeolocationModalButton.tsx index 237d035a5..ab5692786 100644 --- a/src/modules/builder/components/item/settings/GeolocationModalButton.tsx +++ b/src/modules/builder/components/item/settings/GeolocationModalButton.tsx @@ -11,25 +11,24 @@ import { import Dialog from '@mui/material/Dialog'; import DialogTitle from '@mui/material/DialogTitle'; -import { DiscriminatedItem } from '@graasp/sdk'; - import { NS } from '@/config/constants'; import notifier from '@/config/notifier'; import { mutations } from '@/config/queryClient'; +import type { GenericItem } from '@/openapi/client'; import { useItemGeolocation } from '@/query/hooks/itemGeolocation'; import Button from '@/ui/buttons/Button/Button'; import { BUILDER } from '~builder/langs'; type Props = { - item: DiscriminatedItem; + itemId: GenericItem['id']; }; -export const GeolocationModalButton = ({ item }: Props): JSX.Element => { +export const GeolocationModalButton = ({ itemId }: Props): JSX.Element => { const { t } = useTranslation(NS.Builder); const { t: commonT } = useTranslation(NS.Common); const [open, setOpen] = useState(false); - const { data: geoloc } = useItemGeolocation(item.id); + const { data: geoloc } = useItemGeolocation(itemId); const { mutate: saveGeoloc } = mutations.usePutItemGeolocation(); const helperLabelRef = useRef(null); @@ -60,7 +59,7 @@ export const GeolocationModalButton = ({ item }: Props): JSX.Element => { } saveGeoloc({ - itemId: item.id, + itemId: itemId, geolocation: { helperLabel: helperLabelRef.current?.value ?? geoloc?.helperLabel, addressLabel: addressLabelRef.current?.value ?? geoloc?.addressLabel, diff --git a/src/modules/builder/components/item/settings/GeolocationPicker.tsx b/src/modules/builder/components/item/settings/GeolocationPicker.tsx index 5ba3f0855..ece39b435 100644 --- a/src/modules/builder/components/item/settings/GeolocationPicker.tsx +++ b/src/modules/builder/components/item/settings/GeolocationPicker.tsx @@ -4,10 +4,9 @@ import { useTranslation } from 'react-i18next'; import Clear from '@mui/icons-material/Clear'; import { Box, IconButton, Stack, Tooltip, Typography } from '@mui/material'; -import { DiscriminatedItem } from '@graasp/sdk'; - import { NS } from '@/config/constants'; import { mutations } from '@/config/queryClient'; +import type { GenericItem } from '@/openapi/client'; import { useItemGeolocation, useSuggestionsForAddress, @@ -21,12 +20,12 @@ import MapGeolocationPicker, { import GeolocationModalButton from './GeolocationModalButton'; const GeolocationPicker = ({ - item, + itemId, }: { - item: DiscriminatedItem; + itemId: GenericItem['id']; }): JSX.Element => { const { t } = useTranslation(NS.Builder); - const { data: geoloc } = useItemGeolocation(item.id); + const { data: geoloc } = useItemGeolocation(itemId); const { mutate: putGeoloc } = mutations.usePutItemGeolocation(); const { mutate: deleteGeoloc } = mutations.useDeleteItemGeolocation(); @@ -38,7 +37,7 @@ const GeolocationPicker = ({ }): void => { const { addressLabel, lat, lng, country } = option; putGeoloc({ - itemId: item.id, + itemId: itemId, geolocation: { addressLabel, lat, @@ -49,12 +48,12 @@ const GeolocationPicker = ({ }; const clearGeoloc = () => { - deleteGeoloc({ itemId: item.id }); + deleteGeoloc({ itemId: itemId }); }; // the input is disabled if the geoloc is defined in parent // but it should be enabled if the geoloc is not defined - const isDisabled = Boolean(geoloc && geoloc?.item?.id !== item.id); + const isDisabled = Boolean(geoloc && geoloc?.item?.id !== itemId); return ( @@ -87,7 +86,7 @@ const GeolocationPicker = ({ {t(BUILDER.ITEM_SETTINGS_GEOLOCATION_INHERITED_EXPLANATION)} )} - + ); }; diff --git a/src/modules/builder/components/item/settings/ItemMetadataContent.tsx b/src/modules/builder/components/item/settings/ItemMetadataContent.tsx index 421552370..d70b52a75 100644 --- a/src/modules/builder/components/item/settings/ItemMetadataContent.tsx +++ b/src/modules/builder/components/item/settings/ItemMetadataContent.tsx @@ -84,7 +84,9 @@ const ItemMetadataContent = (): JSX.Element => { {mimetype ?? getItemType(item)} {item.type === 'folder' && - (isCapsule(item) ? ( + // TODO: fix any + // eslint-disable-next-line @typescript-eslint/no-explicit-any + (isCapsule(item as any) ? ( { const { t: translateBuilder } = useTranslation(NS.Builder); diff --git a/src/modules/builder/components/item/settings/LanguageSelect.tsx b/src/modules/builder/components/item/settings/LanguageSelect.tsx index 3ecd77e5c..26d184206 100644 --- a/src/modules/builder/components/item/settings/LanguageSelect.tsx +++ b/src/modules/builder/components/item/settings/LanguageSelect.tsx @@ -2,11 +2,12 @@ import type { JSX } from 'react'; import { SelectProps } from '@mui/material'; -import { PackedItem, PermissionLevelCompare } from '@graasp/sdk'; +import { PermissionLevelCompare } from '@graasp/sdk'; import { LANGS } from '@/config/langs'; import { mutations } from '@/config/queryClient'; import { LANGUAGE_SELECTOR_ID } from '@/config/selectors'; +import type { PackedItem } from '@/openapi/client'; import Select from '@/ui/Select/Select'; const LanguageSelect = ({ item }: { item: PackedItem }): JSX.Element => { diff --git a/src/modules/builder/components/item/settings/LinkSettings.tsx b/src/modules/builder/components/item/settings/LinkSettings.tsx index 25af215c5..13c1ff1af 100644 --- a/src/modules/builder/components/item/settings/LinkSettings.tsx +++ b/src/modules/builder/components/item/settings/LinkSettings.tsx @@ -3,8 +3,6 @@ import { useTranslation } from 'react-i18next'; import { FormControlLabel, FormGroup, Switch, Typography } from '@mui/material'; -import { LinkItemType } from '@graasp/sdk'; - import { DEFAULT_LINK_SHOW_BUTTON, DEFAULT_LINK_SHOW_IFRAME, @@ -15,11 +13,12 @@ import { SETTINGS_LINK_SHOW_BUTTON_ID, SETTINGS_LINK_SHOW_IFRAME_ID, } from '@/config/selectors'; +import { EmbeddedLinkItem } from '@/openapi/client'; import { BUILDER } from '../../../langs'; type Props = { - item: LinkItemType; + item: EmbeddedLinkItem; }; const LinkSettings = ({ item }: Props): JSX.Element => { diff --git a/src/modules/builder/components/item/settings/ThumbnailSetting.tsx b/src/modules/builder/components/item/settings/ThumbnailSetting.tsx index 423908017..8fb95acaf 100644 --- a/src/modules/builder/components/item/settings/ThumbnailSetting.tsx +++ b/src/modules/builder/components/item/settings/ThumbnailSetting.tsx @@ -3,9 +3,8 @@ import { useTranslation } from 'react-i18next'; import { Stack, Typography } from '@mui/material'; -import { PackedItem } from '@graasp/sdk'; - import { NS } from '@/config/constants'; +import type { PackedItem } from '@/openapi/client'; import ThumbnailUploader, { EventChanges, diff --git a/src/modules/builder/components/item/settings/UpdateLicenseDialog.tsx b/src/modules/builder/components/item/settings/UpdateLicenseDialog.tsx index c96c68e96..9ee689a79 100644 --- a/src/modules/builder/components/item/settings/UpdateLicenseDialog.tsx +++ b/src/modules/builder/components/item/settings/UpdateLicenseDialog.tsx @@ -10,9 +10,8 @@ import { DialogTitle, } from '@mui/material'; -import { DiscriminatedItem } from '@graasp/sdk'; - import { NS } from '@/config/constants'; +import type { GenericItem } from '@/openapi/client'; import ConfirmLicenseDialogContent from '../../common/ConfirmLicenseDialogContent'; import useItemLicense from '../../hooks/useItemLicense'; @@ -20,7 +19,7 @@ import useItemLicense from '../../hooks/useItemLicense'; type Props = { open: boolean; setOpen: (b: boolean) => void; - item: DiscriminatedItem; + item: GenericItem; }; const commonsSx = { diff --git a/src/modules/builder/components/item/settings/file/FileAlignmentSetting.tsx b/src/modules/builder/components/item/settings/file/FileAlignmentSetting.tsx index 5a2171798..9c303b3a5 100644 --- a/src/modules/builder/components/item/settings/file/FileAlignmentSetting.tsx +++ b/src/modules/builder/components/item/settings/file/FileAlignmentSetting.tsx @@ -9,7 +9,7 @@ import { toggleButtonGroupClasses, } from '@mui/material'; -import { Alignment, AlignmentType, FileItemType } from '@graasp/sdk'; +import { Alignment, AlignmentType } from '@graasp/sdk'; import { AlignCenterIcon, @@ -20,6 +20,7 @@ import { import { NS } from '@/config/constants'; import { mutations } from '@/config/queryClient'; +import type { FileItem } from '@/openapi/client'; import { DEFAULT_LIGHT_PRIMARY_COLOR } from '@/ui/theme'; import ItemSettingProperty from '../ItemSettingProperty'; @@ -54,7 +55,7 @@ export const FileAlignmentSetting = ({ item, }: { variant: SettingVariantType; - item: FileItemType; + item: FileItem; }): JSX.Element => { const { t: translateBuilder } = useTranslation(NS.Builder); const { mutate: editItem } = mutations.useEditItem(); diff --git a/src/modules/builder/components/item/settings/file/FileMaxWidthSetting.tsx b/src/modules/builder/components/item/settings/file/FileMaxWidthSetting.tsx index 5e3272052..216245de6 100644 --- a/src/modules/builder/components/item/settings/file/FileMaxWidthSetting.tsx +++ b/src/modules/builder/components/item/settings/file/FileMaxWidthSetting.tsx @@ -3,13 +3,14 @@ import { useTranslation } from 'react-i18next'; import { SelectChangeEvent } from '@mui/material'; -import { FileItemType, MaxWidth } from '@graasp/sdk'; +import { MaxWidth } from '@graasp/sdk'; import { ExpandIcon } from 'lucide-react'; import { NS } from '@/config/constants'; import { mutations } from '@/config/queryClient'; import { FILE_SETTING_MAX_WIDTH_ID } from '@/config/selectors'; +import type { FileItem } from '@/openapi/client'; import Select from '@/ui/Select/Select'; import ItemSettingProperty from '../ItemSettingProperty'; @@ -22,7 +23,7 @@ export const FileMaxWidthSetting = ({ item, }: { variant: SettingVariantType; - item: FileItemType; + item: FileItem; }): JSX.Element => { const { t } = useTranslation(NS.Builder); const { t: translateEnum } = useTranslation(NS.Enums); diff --git a/src/modules/builder/components/item/sharing/DeleteItemLoginSchemaButton.tsx b/src/modules/builder/components/item/sharing/DeleteItemLoginSchemaButton.tsx index 22c711e0f..a4006bdea 100644 --- a/src/modules/builder/components/item/sharing/DeleteItemLoginSchemaButton.tsx +++ b/src/modules/builder/components/item/sharing/DeleteItemLoginSchemaButton.tsx @@ -11,11 +11,12 @@ import { Typography, } from '@mui/material'; -import { DiscriminatedItem, ItemLoginSchemaStatus } from '@graasp/sdk'; +import { ItemLoginSchemaStatus } from '@graasp/sdk'; import { NS } from '@/config/constants'; import { hooks, mutations } from '@/config/queryClient'; import { DELETE_GUEST_CONFIRM_BUTTON_ID } from '@/config/selectors'; +import type { GenericItem } from '@/openapi/client'; import { useGuestMemberships } from '~builder/components/hooks/useGuestMemberships'; import useModalStatus from '~builder/components/hooks/useModalStatus'; @@ -24,7 +25,7 @@ import { BUILDER } from '~builder/langs'; function DeleteItemLoginSchemaButton({ itemId, }: Readonly<{ - itemId: DiscriminatedItem['id']; + itemId: GenericItem['id']; }>): JSX.Element | null { const { data: itemLoginSchema } = hooks.useItemLoginSchema({ itemId }); const { mutate: deleteItemLoginSchema, isPending } = diff --git a/src/modules/builder/components/item/sharing/HideSettingCheckbox.tsx b/src/modules/builder/components/item/sharing/HideSettingCheckbox.tsx index 76317cc7b..cff755f35 100644 --- a/src/modules/builder/components/item/sharing/HideSettingCheckbox.tsx +++ b/src/modules/builder/components/item/sharing/HideSettingCheckbox.tsx @@ -1,13 +1,14 @@ import type { JSX } from 'react'; import { useTranslation } from 'react-i18next'; -import { PackedItem, getIdsFromPath } from '@graasp/sdk'; +import { getIdsFromPath } from '@graasp/sdk'; import { EyeIcon, EyeOffIcon } from 'lucide-react'; import { NS } from '@/config/constants'; import { mutations } from '@/config/queryClient'; import { SETTINGS_HIDE_ITEM_ID } from '@/config/selectors'; +import type { PackedItem } from '@/openapi/client'; import { BUILDER } from '~builder/langs'; diff --git a/src/modules/builder/components/item/sharing/VisibilitySelect.tsx b/src/modules/builder/components/item/sharing/VisibilitySelect.tsx index 0942c8be0..2c992ceaa 100644 --- a/src/modules/builder/components/item/sharing/VisibilitySelect.tsx +++ b/src/modules/builder/components/item/sharing/VisibilitySelect.tsx @@ -3,10 +3,9 @@ import { useTranslation } from 'react-i18next'; import { Alert, MenuItem, Select, Stack } from '@mui/material'; -import { PackedItem } from '@graasp/sdk'; - import { NS } from '@/config/constants'; import { SHARE_ITEM_VISIBILITY_SELECT_ID } from '@/config/selectors'; +import type { PackedItem } from '@/openapi/client'; import Loader from '@/ui/Loader/Loader'; import useVisibility from '~builder/components/hooks/useVisibility'; diff --git a/src/modules/builder/components/item/sharing/csvImport/ImportUsersDialogContent.tsx b/src/modules/builder/components/item/sharing/csvImport/ImportUsersDialogContent.tsx index 1122befbc..9800572ae 100644 --- a/src/modules/builder/components/item/sharing/csvImport/ImportUsersDialogContent.tsx +++ b/src/modules/builder/components/item/sharing/csvImport/ImportUsersDialogContent.tsx @@ -13,8 +13,6 @@ import { Typography, } from '@mui/material'; -import { DiscriminatedItem } from '@graasp/sdk'; - import { Table2 } from 'lucide-react'; import Papa from 'papaparse'; @@ -27,6 +25,7 @@ import { SHARE_ITEM_FROM_CSV_CANCEL_BUTTON_ID, SHARE_ITEM_FROM_CSV_CONFIRM_BUTTON_ID, } from '@/config/selectors'; +import type { GenericItem } from '@/openapi/client'; import ChoiceDisplay from './ChoiceDisplay'; import DisplayInvitationSummary from './DisplayInvitationSummary'; @@ -78,7 +77,7 @@ const CSVFileSelectionButton = ({ }; type ImportUsersDialogContentProps = { - item: DiscriminatedItem; + item: GenericItem; isFolder: boolean; handleClose: () => void; }; diff --git a/src/modules/builder/components/item/sharing/csvImport/ImportUsersWithCSVDialog.tsx b/src/modules/builder/components/item/sharing/csvImport/ImportUsersWithCSVDialog.tsx index 3cf488178..ed6ffe95d 100644 --- a/src/modules/builder/components/item/sharing/csvImport/ImportUsersWithCSVDialog.tsx +++ b/src/modules/builder/components/item/sharing/csvImport/ImportUsersWithCSVDialog.tsx @@ -2,14 +2,14 @@ import type { JSX } from 'react'; import { Dialog } from '@mui/material'; -import { DiscriminatedItem } from '@graasp/sdk'; +import type { GenericItem } from '@/openapi/client'; import ImportUsersDialogContent, { DIALOG_ID_LABEL, } from './ImportUsersDialogContent'; type ImportUsersWithCSVDialogProps = { - item: DiscriminatedItem; + item: GenericItem; handleCloseModal: () => void; open: boolean; }; diff --git a/src/modules/builder/components/item/sharing/membershipTable/DeleteItemMembershipButton.tsx b/src/modules/builder/components/item/sharing/membershipTable/DeleteItemMembershipButton.tsx index e9aafb889..a21d4e275 100644 --- a/src/modules/builder/components/item/sharing/membershipTable/DeleteItemMembershipButton.tsx +++ b/src/modules/builder/components/item/sharing/membershipTable/DeleteItemMembershipButton.tsx @@ -1,10 +1,9 @@ import type { JSX } from 'react'; import { useTranslation } from 'react-i18next'; -import { DiscriminatedItem } from '@graasp/sdk'; - import { NS } from '@/config/constants'; import { buildItemMembershipRowDeleteButtonId } from '@/config/selectors'; +import type { GenericItem } from '@/openapi/client'; import { ItemMembership } from '@/openapi/client'; import useModalStatus from '~builder/components/hooks/useModalStatus'; @@ -18,7 +17,7 @@ const DeleteItemMembershipButton = ({ itemId, }: { data: ItemMembership; - itemId: DiscriminatedItem['id']; + itemId: GenericItem['id']; }): JSX.Element => { const { isOpen, closeModal, openModal } = useModalStatus(); const { t: translateBuilder } = useTranslation(NS.Builder); diff --git a/src/modules/builder/components/item/sharing/membershipTable/DeleteItemMembershipDialog.tsx b/src/modules/builder/components/item/sharing/membershipTable/DeleteItemMembershipDialog.tsx index bdf1f15e1..521e3b7b8 100644 --- a/src/modules/builder/components/item/sharing/membershipTable/DeleteItemMembershipDialog.tsx +++ b/src/modules/builder/components/item/sharing/membershipTable/DeleteItemMembershipDialog.tsx @@ -10,14 +10,13 @@ import { DialogTitle, } from '@mui/material'; -import { DiscriminatedItem } from '@graasp/sdk'; - import { useMutation, useQueryClient } from '@tanstack/react-query'; import { useNavigate } from '@tanstack/react-router'; import { NS } from '@/config/constants'; import { hooks } from '@/config/queryClient'; import { CONFIRM_MEMBERSHIP_DELETE_BUTTON_ID } from '@/config/selectors'; +import type { GenericItem } from '@/openapi/client'; import { ItemMembership } from '@/openapi/client'; import { deleteItemMembershipMutation } from '@/openapi/client/@tanstack/react-query.gen'; import { itemKeys } from '@/query/keys'; @@ -32,7 +31,7 @@ const descriptionId = 'alert-dialog-description'; type Props = { open?: boolean; handleClose: () => void; - itemId: DiscriminatedItem['id']; + itemId: GenericItem['id']; membershipToDelete: Pick; hasOnlyOneAdmin?: boolean; }; diff --git a/src/modules/builder/components/item/sharing/membershipTable/GuestItemMembershipTableRow.tsx b/src/modules/builder/components/item/sharing/membershipTable/GuestItemMembershipTableRow.tsx index e161cb1a5..c47c3954c 100644 --- a/src/modules/builder/components/item/sharing/membershipTable/GuestItemMembershipTableRow.tsx +++ b/src/modules/builder/components/item/sharing/membershipTable/GuestItemMembershipTableRow.tsx @@ -3,11 +3,11 @@ import { useTranslation } from 'react-i18next'; import { TableCell, Tooltip, Typography } from '@mui/material'; -import { DiscriminatedItem, ItemLoginSchemaStatus } from '@graasp/sdk'; +import { ItemLoginSchemaStatus } from '@graasp/sdk'; import { NS } from '@/config/constants'; import { buildItemMembershipRowId } from '@/config/selectors'; -import { ItemMembership } from '@/openapi/client'; +import type { GenericItem, ItemMembership } from '@/openapi/client'; import { BUILDER } from '~builder/langs'; @@ -20,7 +20,7 @@ const GuestItemMembershipTableRow = ({ isDisabled, }: { data: ItemMembership; - itemId: DiscriminatedItem['id']; + itemId: GenericItem['id']; isDisabled?: boolean; }): JSX.Element => { const { t: translateEnums } = useTranslation(NS.Enums); diff --git a/src/modules/builder/components/item/sharing/membershipTable/InvitationTableRow.tsx b/src/modules/builder/components/item/sharing/membershipTable/InvitationTableRow.tsx index a98a3cd20..95aad1b02 100644 --- a/src/modules/builder/components/item/sharing/membershipTable/InvitationTableRow.tsx +++ b/src/modules/builder/components/item/sharing/membershipTable/InvitationTableRow.tsx @@ -3,7 +3,7 @@ import { useTranslation } from 'react-i18next'; import { TableCell, Typography } from '@mui/material'; -import { DiscriminatedItem, Invitation } from '@graasp/sdk'; +import { Invitation } from '@graasp/sdk'; import { NS } from '@/config/constants'; import { mutations } from '@/config/queryClient'; @@ -11,7 +11,7 @@ import { buildInvitationTableRowId, buildItemInvitationRowDeleteButtonId, } from '@/config/selectors'; -import type { PermissionLevel } from '@/openapi/client'; +import type { GenericItem, PermissionLevel } from '@/openapi/client'; import { BUILDER } from '~builder/langs'; @@ -24,7 +24,7 @@ const InvitationTableRow = ({ data, item, }: { - item: DiscriminatedItem; + item: GenericItem; data: Invitation; }): JSX.Element => { const { t: translateEnums } = useTranslation(NS.Enums); diff --git a/src/modules/builder/components/item/sharing/membershipTable/ItemMembershipTableRow.tsx b/src/modules/builder/components/item/sharing/membershipTable/ItemMembershipTableRow.tsx index ce0c17613..899491a65 100644 --- a/src/modules/builder/components/item/sharing/membershipTable/ItemMembershipTableRow.tsx +++ b/src/modules/builder/components/item/sharing/membershipTable/ItemMembershipTableRow.tsx @@ -3,18 +3,14 @@ import { useTranslation } from 'react-i18next'; import { TableCell, Typography } from '@mui/material'; -import { - AccountType, - DiscriminatedItem, - ItemLoginSchemaStatus, -} from '@graasp/sdk'; +import { AccountType, ItemLoginSchemaStatus } from '@graasp/sdk'; import { NS } from '@/config/constants'; import { buildItemMembershipRowEditButtonId, buildItemMembershipRowId, } from '@/config/selectors'; -import { ItemMembership } from '@/openapi/client'; +import type { GenericItem, ItemMembership } from '@/openapi/client'; import { DEFAULT_TEXT_DISABLED_COLOR } from '@/ui/theme'; import DeleteItemMembershipButton from './DeleteItemMembershipButton'; @@ -30,7 +26,7 @@ const ItemMembershipTableRow = ({ isDisabled, }: { data: ItemMembership; - item: DiscriminatedItem; + item: GenericItem; allowDowngrade?: boolean; isOnlyAdmin?: boolean; isDisabled: boolean; diff --git a/src/modules/builder/components/item/sharing/membershipTable/useChangePermission.ts b/src/modules/builder/components/item/sharing/membershipTable/useChangePermission.ts index 5d6c75efb..43a794448 100644 --- a/src/modules/builder/components/item/sharing/membershipTable/useChangePermission.ts +++ b/src/modules/builder/components/item/sharing/membershipTable/useChangePermission.ts @@ -1,8 +1,10 @@ -import { DiscriminatedItem } from '@graasp/sdk'; - import { useMutation, useQueryClient } from '@tanstack/react-query'; -import type { ItemMembership, PermissionLevel } from '@/openapi/client'; +import type { + GenericItem, + ItemMembership, + PermissionLevel, +} from '@/openapi/client'; import { createItemMembershipMutation, updateItemMembershipMutation, @@ -13,8 +15,8 @@ export function useChangePermission({ itemPath, itemId, }: { - itemId: DiscriminatedItem['id']; - itemPath: DiscriminatedItem['path']; + itemId: GenericItem['id']; + itemPath: GenericItem['path']; }) { const queryClient = useQueryClient(); const { diff --git a/src/modules/builder/components/item/sharing/membershipTable/useHighestMemberships.tsx b/src/modules/builder/components/item/sharing/membershipTable/useHighestMemberships.tsx index d3d8ff6ba..318b4d9c8 100644 --- a/src/modules/builder/components/item/sharing/membershipTable/useHighestMemberships.tsx +++ b/src/modules/builder/components/item/sharing/membershipTable/useHighestMemberships.tsx @@ -1,7 +1,7 @@ -import { AccountType, DiscriminatedItem } from '@graasp/sdk'; +import { AccountType } from '@graasp/sdk'; import { hooks } from '@/config/queryClient'; -import { ItemMembership } from '@/openapi/client'; +import type { GenericItem, ItemMembership } from '@/openapi/client'; import { selectHighestMemberships } from '~builder/utils/membership'; @@ -10,7 +10,7 @@ export const useHighestMemberships = ({ item, }: { canAdmin: boolean; - item: DiscriminatedItem; + item: GenericItem; }): { data?: ItemMembership[]; isPending: boolean; diff --git a/src/modules/builder/components/item/sharing/shareButton/CreateItemMembershipForm.tsx b/src/modules/builder/components/item/sharing/shareButton/CreateItemMembershipForm.tsx index b5de9ac88..0219bca60 100644 --- a/src/modules/builder/components/item/sharing/shareButton/CreateItemMembershipForm.tsx +++ b/src/modules/builder/components/item/sharing/shareButton/CreateItemMembershipForm.tsx @@ -13,7 +13,7 @@ import { Typography, } from '@mui/material'; -import { AccountType, DiscriminatedItem, isEmail } from '@graasp/sdk'; +import { AccountType, isEmail } from '@graasp/sdk'; import { useMutation, useQueryClient } from '@tanstack/react-query'; import truncate from 'lodash.truncate'; @@ -26,7 +26,7 @@ import { SHARE_ITEM_EMAIL_INPUT_ID, SHARE_ITEM_SHARE_BUTTON_ID, } from '@/config/selectors'; -import type { PermissionLevel } from '@/openapi/client'; +import type { GenericItem, PermissionLevel } from '@/openapi/client'; import { createInvitationMutation } from '@/openapi/client/@tanstack/react-query.gen'; import { useItemInvitations } from '@/query/hooks/invitation'; import { itemKeys } from '@/query/keys'; @@ -36,7 +36,7 @@ import { BUILDER } from '../../../../langs'; import ItemMembershipSelect from '../ItemMembershipSelect'; type ContentProps = { - item: DiscriminatedItem; + item: GenericItem; handleClose: () => void; }; diff --git a/src/modules/builder/components/item/sharing/shareButton/ShareButton.tsx b/src/modules/builder/components/item/sharing/shareButton/ShareButton.tsx index a0f7f7891..aa782e97f 100644 --- a/src/modules/builder/components/item/sharing/shareButton/ShareButton.tsx +++ b/src/modules/builder/components/item/sharing/shareButton/ShareButton.tsx @@ -10,8 +10,6 @@ import MenuList from '@mui/material/MenuList'; import Paper from '@mui/material/Paper'; import Popper from '@mui/material/Popper'; -import { DiscriminatedItem } from '@graasp/sdk'; - import { ChevronDown } from 'lucide-react'; import { NS } from '@/config/constants'; @@ -20,6 +18,7 @@ import { SHARE_BUTTON_SELECTOR, SHARE_ITEM_CSV_PARSER_BUTTON_ID, } from '@/config/selectors'; +import type { GenericItem } from '@/openapi/client'; import useModalStatus from '~builder/components/hooks/useModalStatus'; import { BUILDER } from '~builder/langs'; @@ -28,7 +27,7 @@ import ImportUsersWithCSVDialog from '../csvImport/ImportUsersWithCSVDialog'; import CreateItemMembershipForm from './CreateItemMembershipForm'; type Props = { - item: DiscriminatedItem; + item: GenericItem; }; const ShareButton = ({ item }: Props): JSX.Element => { diff --git a/src/modules/builder/components/item/shortcut/CreateShortcutModal.tsx b/src/modules/builder/components/item/shortcut/CreateShortcutModal.tsx index 7a961a8ac..5f7280661 100644 --- a/src/modules/builder/components/item/shortcut/CreateShortcutModal.tsx +++ b/src/modules/builder/components/item/shortcut/CreateShortcutModal.tsx @@ -1,14 +1,11 @@ import { type JSX, useState } from 'react'; import { useTranslation } from 'react-i18next'; -import { - DiscriminatedItem, - ShortcutItemType, - buildShortcutExtra, -} from '@graasp/sdk'; +import { ShortcutItemType, buildShortcutExtra } from '@graasp/sdk'; import { NS } from '@/config/constants'; import { mutations } from '@/config/queryClient'; +import type { GenericItem } from '@/openapi/client'; import { BUILDER } from '../../../langs'; import ItemSelectionModal, { @@ -16,7 +13,7 @@ import ItemSelectionModal, { } from '../../main/itemSelectionModal/ItemSelectionModal'; export type Props = { - item: DiscriminatedItem; + item: GenericItem; onClose: () => void; open: boolean; }; @@ -28,13 +25,13 @@ const CreateShortcutModal = ({ }: Props): JSX.Element | null => { const { t: translateBuilder } = useTranslation(NS.Builder); const { mutate: createShortcut } = mutations.usePostItem(); - const [item] = useState(defaultItem); + const [item] = useState(defaultItem); const onConfirm: ItemSelectionModalProps['onConfirm'] = (destination) => { const target = item.id; // id of the item where the shortcut is pointing const shortcut: Partial & - Pick & { + Pick & { parentId?: string; } = { name: translateBuilder(BUILDER.CREATE_SHORTCUT_DEFAULT_NAME, { diff --git a/src/modules/builder/components/item/shortcut/EditShortcutForm.tsx b/src/modules/builder/components/item/shortcut/EditShortcutForm.tsx index 1a9862f69..588e6ed0d 100644 --- a/src/modules/builder/components/item/shortcut/EditShortcutForm.tsx +++ b/src/modules/builder/components/item/shortcut/EditShortcutForm.tsx @@ -4,14 +4,13 @@ import { useTranslation } from 'react-i18next'; import { Box, Button, DialogActions, DialogContent } from '@mui/material'; -import { DiscriminatedItem } from '@graasp/sdk'; - import { NS } from '@/config/constants'; import { mutations } from '@/config/queryClient'; import { EDIT_ITEM_MODAL_CANCEL_BUTTON_ID, ITEM_FORM_CONFIRM_BUTTON_ID, } from '@/config/selectors'; +import type { GenericItem } from '@/openapi/client'; import CancelButton from '~builder/components/common/CancelButton'; @@ -25,7 +24,7 @@ function EditShortcutForm({ item, onClose, }: Readonly<{ - item: DiscriminatedItem; + item: GenericItem; onClose: () => void; }>): ReactNode { const { t: translateCommon } = useTranslation(NS.Common); diff --git a/src/modules/builder/components/main/DeleteItemDialog.tsx b/src/modules/builder/components/main/DeleteItemDialog.tsx index d98b23662..2227aa0cb 100644 --- a/src/modules/builder/components/main/DeleteItemDialog.tsx +++ b/src/modules/builder/components/main/DeleteItemDialog.tsx @@ -9,11 +9,10 @@ import { DialogTitle, } from '@mui/material'; -import { DiscriminatedItem } from '@graasp/sdk'; - import { NS } from '@/config/constants'; import { mutations } from '@/config/queryClient'; import { CONFIRM_DELETE_BUTTON_ID } from '@/config/selectors'; +import type { GenericItem } from '@/openapi/client'; import Button from '@/ui/buttons/Button/Button'; import { BUILDER } from '../../langs'; @@ -25,7 +24,7 @@ const descriptionId = 'alert-dialog-description'; type Props = { open?: boolean; handleClose: () => void; - items: DiscriminatedItem[]; + items: GenericItem[]; onConfirm?: () => void; }; diff --git a/src/modules/builder/components/main/DownloadButton.tsx b/src/modules/builder/components/main/DownloadButton.tsx index 205f11f74..1bc5b0116 100644 --- a/src/modules/builder/components/main/DownloadButton.tsx +++ b/src/modules/builder/components/main/DownloadButton.tsx @@ -1,17 +1,16 @@ import { type JSX } from 'react'; import { useTranslation } from 'react-i18next'; -import { DiscriminatedItem } from '@graasp/sdk'; - import { NS } from '@/config/constants'; import { buildDownloadButtonId } from '@/config/selectors'; +import type { GenericItem } from '@/openapi/client'; import GraaspDownloadButton from '@/ui/buttons/DownloadButton/DownloadButton'; import { ActionButton, ActionButtonVariant } from '@/ui/types'; import { BUILDER } from '../../langs'; type Props = { - item: DiscriminatedItem; + item: GenericItem; type?: ActionButtonVariant; }; diff --git a/src/modules/builder/components/main/ImportH5P.tsx b/src/modules/builder/components/main/ImportH5P.tsx index fc8efb4ed..329106515 100644 --- a/src/modules/builder/components/main/ImportH5P.tsx +++ b/src/modules/builder/components/main/ImportH5P.tsx @@ -9,11 +9,7 @@ import { Typography, } from '@mui/material'; -import { - DiscriminatedItem, - MAX_ZIP_FILE_SIZE, - formatFileSize, -} from '@graasp/sdk'; +import { MAX_ZIP_FILE_SIZE, formatFileSize } from '@graasp/sdk'; import { useParams } from '@tanstack/react-router'; @@ -23,6 +19,7 @@ import { CREATE_ITEM_CLOSE_BUTTON_ID, H5P_DASHBOARD_UPLOADER_ID, } from '@/config/selectors'; +import type { GenericItem } from '@/openapi/client'; import Button from '@/ui/buttons/Button/Button'; import UploadFileButton from '@/ui/upload/UploadFileButton/UploadFileButton'; @@ -34,7 +31,7 @@ const ImportH5P = ({ previousItemId, }: { onClose?: () => void; - previousItemId?: DiscriminatedItem['id']; + previousItemId?: GenericItem['id']; }): JSX.Element => { const { itemId } = useParams({ strict: false }); const { mutateAsync: importH5P, isPending: isLoading } = diff --git a/src/modules/builder/components/main/ItemMenuContent.tsx b/src/modules/builder/components/main/ItemMenuContent.tsx index 815b268ee..2a29973f4 100644 --- a/src/modules/builder/components/main/ItemMenuContent.tsx +++ b/src/modules/builder/components/main/ItemMenuContent.tsx @@ -3,14 +3,14 @@ import { useTranslation } from 'react-i18next'; import { Divider, IconButton, Menu } from '@mui/material'; -import { AccountType, PackedItem, PermissionLevelCompare } from '@graasp/sdk'; +import { AccountType, PermissionLevelCompare } from '@graasp/sdk'; import { useQuery } from '@tanstack/react-query'; import { MoreVerticalIcon } from 'lucide-react'; import { NS } from '@/config/constants'; import { buildItemMenuDataCy, buildItemMenuId } from '@/config/selectors'; -import { NullableAugmentedAccount } from '@/openapi/client'; +import { NullableAugmentedAccount, PackedItem } from '@/openapi/client'; import { getCurrentAccountOptions } from '@/openapi/client/@tanstack/react-query.gen'; import { ActionButton } from '@/ui/types'; @@ -75,7 +75,7 @@ function GuestAndPublicMenu({ {item.type !== 'folder' && ( )} - {account?.id ? : false} + {account?.id ? : false} ); @@ -183,7 +183,7 @@ const ItemMenuContent = ({ item }: Props): JSX.Element | null => { item.type === 'folder' ? ( ) : ( @@ -244,7 +244,7 @@ const ItemMenuContent = ({ item }: Props): JSX.Element | null => { ].filter(Boolean) as JSX.Element[]; const destructiveMenus = [ - , + , canAdmin ? ( void; geolocation?: Pick; - previousItemId?: DiscriminatedItem['id']; + previousItemId?: GenericItem['id']; }; function NewItemModalContent({ diff --git a/src/modules/builder/components/main/itemSelectionModal/ItemSelectionModal.tsx b/src/modules/builder/components/main/itemSelectionModal/ItemSelectionModal.tsx index 3e499bf40..ab1ea5795 100644 --- a/src/modules/builder/components/main/itemSelectionModal/ItemSelectionModal.tsx +++ b/src/modules/builder/components/main/itemSelectionModal/ItemSelectionModal.tsx @@ -12,8 +12,6 @@ import { Stack, } from '@mui/material'; -import { DiscriminatedItem } from '@graasp/sdk'; - import { NS } from '@/config/constants'; import { hooks } from '@/config/queryClient'; import { @@ -21,6 +19,7 @@ import { MY_GRAASP_ITEM_PATH, TREE_MODAL_CONFIRM_BUTTON_ID, } from '@/config/selectors'; +import type { GenericItem } from '@/openapi/client'; import Breadcrumbs from '@/ui/Tree/Breadcrumbs'; import type { NavigationElement } from '@/ui/Tree/types'; @@ -38,12 +37,12 @@ export type ItemSelectionModalProps = { /** disabled rows * */ isDisabled?: ( - items: DiscriminatedItem[], + items: GenericItem[], item: NavigationElement, homeId: string, ) => boolean; // items can be undefined because "many" operations start empty - items?: DiscriminatedItem[]; + items?: GenericItem[]; onClose: (args: { id: string | null; open: boolean }) => void; onConfirm: (destination: string | undefined) => void; open?: boolean; diff --git a/src/modules/builder/components/main/itemSelectionModal/RootNavigationTree.tsx b/src/modules/builder/components/main/itemSelectionModal/RootNavigationTree.tsx index 2dcd9e1aa..c7c0cec84 100644 --- a/src/modules/builder/components/main/itemSelectionModal/RootNavigationTree.tsx +++ b/src/modules/builder/components/main/itemSelectionModal/RootNavigationTree.tsx @@ -3,14 +3,13 @@ import { useTranslation } from 'react-i18next'; import { Alert, Skeleton, Typography } from '@mui/material'; -import { DiscriminatedItem } from '@graasp/sdk'; - import { NS } from '@/config/constants'; import { hooks } from '@/config/queryClient'; import { buildItemRowArrowId, buildNavigationModalItemId, } from '@/config/selectors'; +import type { GenericItem } from '@/openapi/client'; import type { RowMenuProps } from '@/ui/Tree/RowMenu'; import RowMenu from '@/ui/Tree/RowMenu'; import RowMenus from '@/ui/Tree/RowMenus'; @@ -18,7 +17,7 @@ import type { NavigationElement } from '@/ui/Tree/types'; interface RootNavigationTreeProps { isDisabled?: RowMenuProps['isDisabled']; - items: DiscriminatedItem[]; + items: GenericItem[]; onClick: RowMenuProps['onClick']; onNavigate: RowMenuProps['onNavigate']; rootMenuItems: NavigationElement[]; diff --git a/src/modules/builder/components/main/list/ItemsTable.tsx b/src/modules/builder/components/main/list/ItemsTable.tsx index f0b77c43b..113522509 100644 --- a/src/modules/builder/components/main/list/ItemsTable.tsx +++ b/src/modules/builder/components/main/list/ItemsTable.tsx @@ -10,12 +10,11 @@ import { Skeleton, } from '@mui/material'; -import { DiscriminatedItem, PackedItem } from '@graasp/sdk'; - import { useParams } from '@tanstack/react-router'; import { NS } from '@/config/constants'; import { hooks, mutations } from '@/config/queryClient'; +import type { GenericItem, PackedItem } from '@/openapi/client'; import Button from '@/ui/buttons/Button/Button'; import DraggingWrapper from '@/ui/draggable/DraggingWrapper'; @@ -31,7 +30,7 @@ export type ItemsTableProps = { showThumbnail?: boolean; canMove?: boolean; enableMoveInBetween?: boolean; - onCardClick?: (id: DiscriminatedItem['id']) => void; + onCardClick?: (id: GenericItem['id']) => void; selectedIds?: string[]; onMove?: () => void; }; diff --git a/src/modules/builder/components/main/list/ItemsTableCard.tsx b/src/modules/builder/components/main/list/ItemsTableCard.tsx index dd8342af8..6ac289508 100644 --- a/src/modules/builder/components/main/list/ItemsTableCard.tsx +++ b/src/modules/builder/components/main/list/ItemsTableCard.tsx @@ -3,13 +3,11 @@ import { useTranslation } from 'react-i18next'; import { Box, Stack } from '@mui/material'; -import { PackedItem } from '@graasp/sdk'; - import { useLocation } from '@tanstack/react-router'; import { CustomLink } from '@/components/ui/CustomLink'; import { NS } from '@/config/constants'; -import { ItemType } from '@/openapi/client'; +import { ItemType, PackedItem } from '@/openapi/client'; import type { DroppedFile } from '@/ui/draggable/types'; import SmallUploadFile from '~builder/components/file/SmallUploadFile'; diff --git a/src/modules/builder/components/map/DesktopMap.tsx b/src/modules/builder/components/map/DesktopMap.tsx index 5e23d6e60..3bf61d556 100644 --- a/src/modules/builder/components/map/DesktopMap.tsx +++ b/src/modules/builder/components/map/DesktopMap.tsx @@ -1,29 +1,29 @@ import type { JSX } from 'react'; -import { DiscriminatedItem } from '@graasp/sdk'; - import { useNavigate } from '@tanstack/react-router'; +import type { GenericItem } from '@/openapi/client'; + import MapView from '../item/MapView'; type Props = { - parentId?: DiscriminatedItem['id']; + parentId?: GenericItem['id']; }; export const DesktopMap = ({ parentId }: Props): JSX.Element => { const navigate = useNavigate(); - const viewItem = (item: DiscriminatedItem) => { + const viewItem = (itemId: GenericItem['id']) => { navigate({ to: '/player/$rootId/$itemId', - params: { rootId: item.id, itemId: item.id }, + params: { rootId: itemId, itemId }, }); }; - const viewItemInBuilder = (item: DiscriminatedItem) => { + const viewItemInBuilder = (itemId: GenericItem['id']) => { navigate({ to: '/builder/items/$itemId', - params: { itemId: item.id }, + params: { itemId }, }); }; diff --git a/src/modules/builder/components/pages/home/HomeScreenContent.tsx b/src/modules/builder/components/pages/home/HomeScreenContent.tsx index 08fb1c26b..1d1e30274 100644 --- a/src/modules/builder/components/pages/home/HomeScreenContent.tsx +++ b/src/modules/builder/components/pages/home/HomeScreenContent.tsx @@ -3,7 +3,7 @@ import { useTranslation } from 'react-i18next'; import { Alert, Box, Button, LinearProgress, Stack } from '@mui/material'; -import { PackedItem, Paginated } from '@graasp/sdk'; +import { Paginated } from '@graasp/sdk'; import { InfiniteData } from '@tanstack/react-query'; @@ -11,6 +11,7 @@ import { useAuth } from '@/AuthContext'; import { NS } from '@/config/constants'; import { hooks } from '@/config/queryClient'; import { ACCESSIBLE_ITEMS_TABLE_ID } from '@/config/selectors'; +import type { PackedItem } from '@/openapi/client'; import SelectTypes from '~builder/components/common/SelectTypes'; import { useFilterItemsContext } from '~builder/components/context/FilterItemsContext'; diff --git a/src/modules/builder/components/pages/home/HomeSelectionToolbar.tsx b/src/modules/builder/components/pages/home/HomeSelectionToolbar.tsx index da49354c5..9e7b55a2a 100644 --- a/src/modules/builder/components/pages/home/HomeSelectionToolbar.tsx +++ b/src/modules/builder/components/pages/home/HomeSelectionToolbar.tsx @@ -1,6 +1,6 @@ import type { JSX } from 'react'; -import { PackedItem } from '@graasp/sdk'; +import type { PackedItem } from '@/openapi/client'; import RecycleButton from '~builder/components/common/RecycleButton'; import useModalStatus from '~builder/components/hooks/useModalStatus'; diff --git a/src/modules/builder/components/pages/recycleBin/RecycleBinSelectionToolbar.tsx b/src/modules/builder/components/pages/recycleBin/RecycleBinSelectionToolbar.tsx index b18b342dd..2d61c36bd 100644 --- a/src/modules/builder/components/pages/recycleBin/RecycleBinSelectionToolbar.tsx +++ b/src/modules/builder/components/pages/recycleBin/RecycleBinSelectionToolbar.tsx @@ -1,11 +1,10 @@ import type { JSX } from 'react'; -import { DiscriminatedItem } from '@graasp/sdk'; - import { RECYCLE_BIN_DELETE_MANY_ITEMS_BUTTON_ID, RECYCLE_BIN_RESTORE_MANY_ITEMS_BUTTON_ID, } from '@/config/selectors'; +import type { GenericItem } from '@/openapi/client'; import DeleteButton from '~builder/components/common/DeleteButton'; import RestoreButton from '~builder/components/common/RestoreButton'; @@ -15,7 +14,7 @@ import SelectionToolbar from '~builder/components/main/list/SelectionToolbar'; const RecycleBinSelectionToolbar = ({ items, }: { - items: DiscriminatedItem[]; + items: GenericItem[]; }): JSX.Element => { const { selectedIds, clearSelection } = useSelectionContext(); diff --git a/src/modules/builder/components/table/Badges.tsx b/src/modules/builder/components/table/Badges.tsx index ddc552ebb..919bab572 100644 --- a/src/modules/builder/components/table/Badges.tsx +++ b/src/modules/builder/components/table/Badges.tsx @@ -1,9 +1,8 @@ import type { JSX } from 'react'; import { useTranslation } from 'react-i18next'; -import { DiscriminatedItem, PackedItem } from '@graasp/sdk'; - import { NS } from '@/config/constants'; +import type { GenericItem, PackedItem } from '@/openapi/client'; import ItemBadges from '@/ui/ItemBadges/ItemBadges'; type ItemStatuses = { @@ -22,10 +21,10 @@ const DEFAULT_ITEM_STATUSES: ItemStatuses = { isPublic: false, }; -export type ItemsStatuses = { [key: DiscriminatedItem['id']]: ItemStatuses }; +export type ItemsStatuses = { [key: GenericItem['id']]: ItemStatuses }; type ChildCompProps = { - data: DiscriminatedItem; + data: GenericItem; itemsStatuses?: ItemsStatuses; }; diff --git a/src/modules/builder/components/table/ItemActions.tsx b/src/modules/builder/components/table/ItemActions.tsx index 07b274e63..eb9156831 100644 --- a/src/modules/builder/components/table/ItemActions.tsx +++ b/src/modules/builder/components/table/ItemActions.tsx @@ -2,14 +2,15 @@ import type { JSX } from 'react'; import { Stack } from '@mui/material'; -import { AccountType, DiscriminatedItem } from '@graasp/sdk'; +import { AccountType } from '@graasp/sdk'; import { hooks } from '@/config/queryClient'; +import type { GenericItem } from '@/openapi/client'; import BookmarkButton from '../common/BookmarkButton'; type Props = { - data: DiscriminatedItem; + data: GenericItem; }; // items and memberships match by index diff --git a/src/modules/builder/components/table/ItemCard.tsx b/src/modules/builder/components/table/ItemCard.tsx index 780d9d4c8..27ce460b0 100644 --- a/src/modules/builder/components/table/ItemCard.tsx +++ b/src/modules/builder/components/table/ItemCard.tsx @@ -3,21 +3,18 @@ import { useTranslation } from 'react-i18next'; import { Box, Grid, Typography } from '@mui/material'; -import { - DiscriminatedItem, - formatDate, - getLinkThumbnailUrl, -} from '@graasp/sdk'; +import { formatDate, getLinkThumbnailUrl } from '@graasp/sdk'; import { NS } from '@/config/constants'; import { ITEM_CARD_CLASS, buildItemCard } from '@/config/selectors'; +import type { Item } from '@/openapi/client'; import { Card, type CardProps } from '@/ui/Card/Card'; import TextDisplay from '@/ui/TextDisplay/TextDisplay'; import { getItemType } from '~builder/utils/capsule'; type Props = { - item: DiscriminatedItem; + item: Item; dense?: boolean; footer: JSX.Element; isOver?: boolean; diff --git a/src/modules/builder/components/table/useSorting.tsx b/src/modules/builder/components/table/useSorting.tsx index 5eeea8f06..110668da1 100644 --- a/src/modules/builder/components/table/useSorting.tsx +++ b/src/modules/builder/components/table/useSorting.tsx @@ -1,9 +1,8 @@ import { Dispatch, useState } from 'react'; import { useTranslation } from 'react-i18next'; -import { DiscriminatedItem } from '@graasp/sdk'; - import { NS } from '@/config/constants'; +import type { GenericItem } from '@/openapi/client'; import { Ordering, OrderingType } from '~builder/enums'; @@ -25,14 +24,14 @@ export const useSorting = ({ ordering: OrderingType; setSortBy: Dispatch; setOrdering: Dispatch; - sortFn: (a: DiscriminatedItem, b: DiscriminatedItem) => number; + sortFn: (a: GenericItem, b: GenericItem) => number; } => { const [sortBy, setSortBy] = useState( s ?? SortingOptions.ItemUpdatedAt, ); const [ordering, setOrdering] = useState(o); - const sortFn = (a: DiscriminatedItem, b: DiscriminatedItem) => { + const sortFn = (a: GenericItem, b: GenericItem) => { const f = ordering === Ordering.ASC ? 1 : -1; let value = 0; switch (sortBy) { diff --git a/src/modules/builder/components/thumbnails/ThumbnailUploader.hook.tsx b/src/modules/builder/components/thumbnails/ThumbnailUploader.hook.tsx index ddc424391..51d28cb7c 100644 --- a/src/modules/builder/components/thumbnails/ThumbnailUploader.hook.tsx +++ b/src/modules/builder/components/thumbnails/ThumbnailUploader.hook.tsx @@ -1,10 +1,11 @@ import { useEffect, useState } from 'react'; -import { PackedItem, ThumbnailSize, ThumbnailsBySize } from '@graasp/sdk'; +import { ThumbnailSize, ThumbnailsBySize } from '@graasp/sdk'; import { AxiosProgressEvent } from 'axios'; import { mutations } from '@/config/queryClient'; +import type { PackedItem } from '@/openapi/client'; import { useUploadWithProgress } from '../hooks/uploadWithProgress'; diff --git a/src/modules/builder/components/thumbnails/ThumbnailUploader.tsx b/src/modules/builder/components/thumbnails/ThumbnailUploader.tsx index c94fedb7d..5b45da2bd 100644 --- a/src/modules/builder/components/thumbnails/ThumbnailUploader.tsx +++ b/src/modules/builder/components/thumbnails/ThumbnailUploader.tsx @@ -2,7 +2,9 @@ import { type JSX, useEffect } from 'react'; import { Box, CircularProgress, useTheme } from '@mui/material'; -import { PackedItem, UnionOfConst } from '@graasp/sdk'; +import { UnionOfConst } from '@graasp/sdk'; + +import type { PackedItem } from '@/openapi/client'; import { useDataSyncContext } from '../context/DataSyncContext'; import ThumbnailCrop from './ThumbnailCrop'; diff --git a/src/modules/builder/contexts/OutletContext.tsx b/src/modules/builder/contexts/OutletContext.tsx index 22a95afbe..9038879ca 100644 --- a/src/modules/builder/contexts/OutletContext.tsx +++ b/src/modules/builder/contexts/OutletContext.tsx @@ -1,8 +1,6 @@ import { createContext, useContext } from 'react'; -import type { PackedItem } from '@graasp/sdk'; - -import type { PermissionLevel } from '@/openapi/client'; +import type { PackedItem, PermissionLevel } from '@/openapi/client'; type OutletContextType = { item: PackedItem; diff --git a/src/modules/builder/map/components/context/QueryClientContext.tsx b/src/modules/builder/map/components/context/QueryClientContext.tsx index 2baadfe34..2663e22e7 100644 --- a/src/modules/builder/map/components/context/QueryClientContext.tsx +++ b/src/modules/builder/map/components/context/QueryClientContext.tsx @@ -1,12 +1,8 @@ import { type JSX, createContext, useContext, useMemo } from 'react'; -import { - CurrentAccount, - DiscriminatedItem, - ItemGeolocation, - PackedItem, -} from '@graasp/sdk'; +import { CurrentAccount, ItemGeolocation } from '@graasp/sdk'; +import type { GenericItem, PackedItem } from '@/openapi/client'; import type { configureQueryClient } from '@/query'; import { type useAddressFromGeolocation, @@ -28,8 +24,8 @@ export interface QueryClientContextInterface { useRecycleItems: QueryClientMutations['useRecycleItems']; usePostItem: QueryClientMutations['usePostItem']; useDeleteItemGeolocation: QueryClientMutations['useDeleteItemGeolocation']; - viewItem: (item: DiscriminatedItem) => void; - viewItemInBuilder: (item: DiscriminatedItem) => void; + viewItem: (itemId: GenericItem['id']) => void; + viewItemInBuilder: (itemId: GenericItem['id']) => void; handleAddOnClick?: ({ location, }: { diff --git a/src/modules/builder/map/components/map/DeleteItemButton.tsx b/src/modules/builder/map/components/map/DeleteItemButton.tsx index d9a03ffb2..27cc25efa 100644 --- a/src/modules/builder/map/components/map/DeleteItemButton.tsx +++ b/src/modules/builder/map/components/map/DeleteItemButton.tsx @@ -5,9 +5,8 @@ import { DialogActions, DialogContent } from '@mui/material'; import Dialog from '@mui/material/Dialog'; import DialogTitle from '@mui/material/DialogTitle'; -import { DiscriminatedItem } from '@graasp/sdk'; - import { NS } from '@/config/constants'; +import type { Item } from '@/openapi/client'; import Button from '@/ui/buttons/Button/Button'; import DeleteButton from '@/ui/buttons/DeleteButton/DeleteButton'; @@ -15,7 +14,7 @@ import { MAP } from '../../constants'; import { useQueryClientContext } from '../context/QueryClientContext'; type Props = { - item: DiscriminatedItem; + item: Item; }; const DeleteItemButton = ({ item }: Props): JSX.Element => { diff --git a/src/modules/builder/map/components/map/DeleteLocationButton.tsx b/src/modules/builder/map/components/map/DeleteLocationButton.tsx index e2c580f83..6bc1634ef 100644 --- a/src/modules/builder/map/components/map/DeleteLocationButton.tsx +++ b/src/modules/builder/map/components/map/DeleteLocationButton.tsx @@ -11,16 +11,15 @@ import { import Dialog from '@mui/material/Dialog'; import DialogTitle from '@mui/material/DialogTitle'; -import { DiscriminatedItem } from '@graasp/sdk'; - import { NS } from '@/config/constants'; +import type { Item } from '@/openapi/client'; import Button from '@/ui/buttons/Button/Button'; import { MAP } from '../../constants'; import { useQueryClientContext } from '../context/QueryClientContext'; export interface Props { - item: DiscriminatedItem; + item: Item; } const DeleteLocationButton = ({ item }: Props): JSX.Element => { diff --git a/src/modules/builder/map/components/map/MarkerPopup.tsx b/src/modules/builder/map/components/map/MarkerPopup.tsx index 444812d9c..4671c21cf 100644 --- a/src/modules/builder/map/components/map/MarkerPopup.tsx +++ b/src/modules/builder/map/components/map/MarkerPopup.tsx @@ -33,7 +33,7 @@ const MarkerPopup = ({ {/* eslint-disable-next-line jsx-a11y/anchor-is-valid */} viewItemInBuilder(item)} + onClick={() => viewItemInBuilder(item.id)} variant="h5" sx={{ margin: '0 !important', @@ -63,7 +63,7 @@ const MarkerPopup = ({ ))} - + {item?.permission && PermissionLevelCompare.gte(item.permission, 'admin') && ( <> diff --git a/src/modules/builder/map/components/map/ViewButton.tsx b/src/modules/builder/map/components/map/ViewButton.tsx index d62edc319..cafab313b 100644 --- a/src/modules/builder/map/components/map/ViewButton.tsx +++ b/src/modules/builder/map/components/map/ViewButton.tsx @@ -4,17 +4,16 @@ import { useTranslation } from 'react-i18next'; import VisibilityIcon from '@mui/icons-material/Visibility'; import { IconButton, Tooltip } from '@mui/material'; -import { DiscriminatedItem } from '@graasp/sdk'; - import { NS } from '@/config/constants'; +import type { GenericItem } from '@/openapi/client'; import { useQueryClientContext } from '../context/QueryClientContext'; type Props = { - item: DiscriminatedItem; + itemId: GenericItem['id']; }; -const ViewButton = ({ item }: Props): JSX.Element => { +const ViewButton = ({ itemId }: Props): JSX.Element => { const { viewItem } = useQueryClientContext(); const { t } = useTranslation(NS.Map); @@ -22,7 +21,7 @@ const ViewButton = ({ item }: Props): JSX.Element => { { - viewItem(item); + viewItem(itemId); }} > diff --git a/src/modules/builder/utils/capsule.ts b/src/modules/builder/utils/capsule.ts index db8e196f3..4220985cf 100644 --- a/src/modules/builder/utils/capsule.ts +++ b/src/modules/builder/utils/capsule.ts @@ -1,12 +1,19 @@ -import { DiscriminatedItem, ItemType, isCapsule } from '@graasp/sdk'; +import { ItemType, isCapsule } from '@graasp/sdk'; + +import type { GenericItem } from '@/openapi/client'; /** * Utility function to get the item's type, including capsule * @param item * @returns type of the item */ -export function getItemType(item: DiscriminatedItem) { - if (item.type === ItemType.FOLDER && isCapsule(item)) { +export function getItemType(item: GenericItem) { + if ( + item.type === ItemType.FOLDER && + // TODO: fix typing issue + // eslint-disable-next-line @typescript-eslint/no-explicit-any + isCapsule(item as any) + ) { return 'capsule'; } return item.type; diff --git a/src/modules/home/bookmarks/BookmarkCard.tsx b/src/modules/home/bookmarks/BookmarkCard.tsx index 979265f6c..a784c6174 100644 --- a/src/modules/home/bookmarks/BookmarkCard.tsx +++ b/src/modules/home/bookmarks/BookmarkCard.tsx @@ -8,7 +8,7 @@ import { ShortcutItemType, formatDate, getShortcutExtra } from '@graasp/sdk'; import { CardActionAreaLink } from '@/components/ui/CardActionAreaLink'; import { NS } from '@/config/constants'; import { buildItemBookmarkCard } from '@/config/selectors'; -import { PackedItem } from '@/openapi/client/types.gen'; +import type { PackedItem } from '@/openapi/client'; import ItemThumbnail from '../../player/common/ItemThumbnail'; diff --git a/src/modules/home/bookmarks/BookmarkCardEdit.tsx b/src/modules/home/bookmarks/BookmarkCardEdit.tsx index b4dbe5a39..9af742479 100644 --- a/src/modules/home/bookmarks/BookmarkCardEdit.tsx +++ b/src/modules/home/bookmarks/BookmarkCardEdit.tsx @@ -18,11 +18,11 @@ import { XIcon } from 'lucide-react'; import { NS } from '@/config/constants'; import { buildBookmarkCardEditClassName } from '@/config/selectors'; +import type { PackedItem } from '@/openapi/client'; import { deleteBookmarkMutation, getOwnBookmarkQueryKey, } from '@/openapi/client/@tanstack/react-query.gen'; -import { PackedItem } from '@/openapi/client/types.gen'; import { useButtonColor } from '@/ui/buttons/hooks'; import ItemThumbnail from '../../player/common/ItemThumbnail'; diff --git a/src/modules/landing/header/RightHeader.stories.tsx b/src/modules/landing/header/RightHeader.stories.tsx index 8dfa1c4e4..701c39a07 100644 --- a/src/modules/landing/header/RightHeader.stories.tsx +++ b/src/modules/landing/header/RightHeader.stories.tsx @@ -1,11 +1,12 @@ import { ComponentProps } from 'react'; -import { AccountType, DiscriminatedItem } from '@graasp/sdk'; +import { AccountType } from '@graasp/sdk'; import { Meta, StoryObj } from '@storybook/react'; import { fn } from 'storybook/test'; import { AuthContext } from '@/AuthContext'; +import type { GenericItem } from '@/openapi/client'; import { RightHeader } from './RightHeader'; @@ -27,7 +28,7 @@ function getUser(userType: AccountType) { name: 'Bob', lang: 'en', type: AccountType.Guest as const, - item: {} as DiscriminatedItem, + item: {} as GenericItem, }; } diff --git a/src/modules/player/access/RequestAccessContent.tsx b/src/modules/player/access/RequestAccessContent.tsx index 2ee09b4cc..eb59689c0 100644 --- a/src/modules/player/access/RequestAccessContent.tsx +++ b/src/modules/player/access/RequestAccessContent.tsx @@ -3,11 +3,7 @@ import { useTranslation } from 'react-i18next'; import { Button, Stack, Typography } from '@mui/material'; -import { - DiscriminatedItem, - Member, - MembershipRequestStatus, -} from '@graasp/sdk'; +import { Member, MembershipRequestStatus } from '@graasp/sdk'; import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; import { Check, Lock } from 'lucide-react'; @@ -17,6 +13,7 @@ import { MEMBERSHIP_REQUEST_PENDING_SCREEN_SELECTOR, REQUEST_MEMBERSHIP_BUTTON_ID, } from '@/config/selectors'; +import type { GenericItem } from '@/openapi/client'; import { createMembershipRequestMutation, getOwnMembershipRequestByItemIdOptions, @@ -28,7 +25,7 @@ export function RequestAccessContent({ itemId, }: Readonly<{ member: Member; - itemId: DiscriminatedItem['id']; + itemId: GenericItem['id']; }>): JSX.Element { const { t: translatePlayer } = useTranslation(NS.Player); const queryClient = useQueryClient(); diff --git a/src/modules/player/common/ItemThumbnail.tsx b/src/modules/player/common/ItemThumbnail.tsx index f7b15fbac..b24c0f7c0 100644 --- a/src/modules/player/common/ItemThumbnail.tsx +++ b/src/modules/player/common/ItemThumbnail.tsx @@ -1,11 +1,6 @@ import type { JSX } from 'react'; -import { - DiscriminatedItem, - ThumbnailSize, - ThumbnailsBySize, - getMimetype, -} from '@graasp/sdk'; +import { ThumbnailSize, ThumbnailsBySize, getMimetype } from '@graasp/sdk'; import { type PackedItem } from '@/openapi/client'; import ItemIcon from '@/ui/icons/ItemIcon'; @@ -25,7 +20,8 @@ const ItemThumbnail = ({ diff --git a/src/modules/player/item/Item.tsx b/src/modules/player/item/Item.tsx index 6f1e7030d..8b713258c 100644 --- a/src/modules/player/item/Item.tsx +++ b/src/modules/player/item/Item.tsx @@ -12,19 +12,7 @@ import { Stack, } from '@mui/material'; -import { - ActionTriggers, - AppItemType, - Context, - DocumentItemType, - EtherpadItemType, - FileItemType, - H5PItemType, - LinkItemType, - PackedItem, - ShortcutItemType, - buildPdfViewerURL, -} from '@graasp/sdk'; +import { ActionTriggers, Context, buildPdfViewerURL } from '@graasp/sdk'; import { getRouteApi } from '@tanstack/react-router'; @@ -42,6 +30,16 @@ import { buildFolderButtonId, buildLinkItemId, } from '@/config/selectors'; +import type { + AppItem as AppItemType, + DocumentItem as DocumentItemType, + EtherpadItem as EtherpadItemType, + FileItem as FileItemType, + H5pItem as H5PItemType, + EmbeddedLinkItem as LinkItemType, + PackedItem, + ShortcutItem as ShortcutItemType, +} from '@/openapi/client'; import { Api } from '@/query'; import withCollapse from '@/ui/Collapse/withCollapse'; import TextDisplay from '@/ui/TextDisplay/TextDisplay'; diff --git a/src/modules/player/navigationIsland/PreviousNextButtons.tsx b/src/modules/player/navigationIsland/PreviousNextButtons.tsx index 54d224cf3..2c028ed73 100644 --- a/src/modules/player/navigationIsland/PreviousNextButtons.tsx +++ b/src/modules/player/navigationIsland/PreviousNextButtons.tsx @@ -1,7 +1,5 @@ import type { JSX } from 'react'; -import { DiscriminatedItem } from '@graasp/sdk'; - import { useParams, useSearch } from '@tanstack/react-router'; import { ChevronLeft, ChevronRight } from 'lucide-react'; @@ -15,14 +13,15 @@ import { NEXT_ITEM_NAV_BUTTON_ID, PREVIOUS_ITEM_NAV_BUTTON_ID, } from '@/config/selectors'; +import type { GenericItem } from '@/openapi/client'; import { LoadingButton, NavigationButton } from './customButtons'; function getPrevious( itemId: string, // includes the rootItem - folderHierarchy: DiscriminatedItem[], -): DiscriminatedItem | null { + folderHierarchy: GenericItem[], +): GenericItem | null { const idx = folderHierarchy.findIndex(({ id }) => id === itemId); if (idx < 0) { return null; @@ -32,8 +31,8 @@ function getPrevious( function getNext( itemId: string, - folderHierarchy: DiscriminatedItem[], -): DiscriminatedItem | null { + folderHierarchy: GenericItem[], +): GenericItem | null { const idx = folderHierarchy.findIndex(({ id }) => id === itemId); if (idx < 0 || idx + 1 > folderHierarchy.length) { return null; diff --git a/src/modules/player/rightPanel/SideContent.tsx b/src/modules/player/rightPanel/SideContent.tsx index 82f600da2..e87a7be31 100644 --- a/src/modules/player/rightPanel/SideContent.tsx +++ b/src/modules/player/rightPanel/SideContent.tsx @@ -4,8 +4,6 @@ import { useTranslation } from 'react-i18next'; import { IconButton, Stack, Tooltip, styled } from '@mui/material'; -import { DiscriminatedItem } from '@graasp/sdk'; - import { useParams, useSearch } from '@tanstack/react-router'; import { ExpandIcon, ShrinkIcon } from 'lucide-react'; @@ -18,6 +16,7 @@ import { ITEM_FULLSCREEN_BUTTON_ID, ITEM_PINNED_ID, } from '@/config/selectors'; +import type { GenericItem } from '@/openapi/client'; import { DRAWER_WIDTH } from '@/ui/constants'; import { useMobileView } from '@/ui/hooks/useMobileView'; @@ -59,7 +58,7 @@ const StyledIconButton = styled(IconButton)({ }); type Props = { - item: DiscriminatedItem; + item: GenericItem; content: JSX.Element; }; diff --git a/src/openapi/client/@tanstack/react-query.gen.ts b/src/openapi/client/@tanstack/react-query.gen.ts index 0cdd0ff6d..5a63984e3 100644 --- a/src/openapi/client/@tanstack/react-query.gen.ts +++ b/src/openapi/client/@tanstack/react-query.gen.ts @@ -3,8 +3,8 @@ import { type DefaultError, type InfiniteData, infiniteQueryOptions, queryOptions, type UseMutationOptions } from '@tanstack/react-query'; import { client } from '../client.gen'; -import { authenticate, clearAllMentions, clearChatMessage, collectionSearch, convertCapsuleToFolder, convertFolderToCapsule, copyManyItems, createApp, createAppAction, createAppData, createAppDataFile, createAppSetting, createAppSettingFile, createBookmark, createCapsule, createChatbotCompletionPrompt, createChatMessage, createDocument, createEtherpad, createFolder, createFolderWithThumbnail, createInvitation, createItem, createItemFlag, createItemLike, createItemMembership, createItemWithThumbnail, createLink, createMembershipRequest, createOwnProfile, createPage, createPassword, createShortcut, createShortLink, createTagForItem, createVisibility, deleteAlias, deleteApiItemsByIdThumbnails, deleteApiMembersMembersByIdDelete, deleteAppData, deleteAppSetting, deleteBookmark, deleteChatMessage, deleteCurrentAccount, deleteGeolocation, deleteInvitation, deleteItemLike, deleteItemLoginSchema, deleteItemMembership, deleteManyItems, deleteMembershipRequest, deleteMention, deleteTagForItem, deleteVisibility, downloadAppDataFile, downloadAppSettingFile, downloadAvatar, downloadFile, downloadItemThumbnail, enroll, exportActions, exportMemberData, exportZip, generateAppToken, geolocationReverse, geolocationSearch, getAccessibleItems, getApiItemsCollectionsSearchRebuild, getApiItemsH5pAssetsIntegrationHtml, getApiItemsPublicationByItemIdStatus, getApiStatus, getApiVersion, getApiWs, getAppActionsForApp, getAppContext, getAppDataForApp, getAppList, getAppSettingsForApp, getChat, getChildren, getCollectionInformations, getCollectionsForMember, getCountForTags, getCurrentAccount, getCurrentSettings, getDescendantItems, getEtherpadFromItem, getFacetsForName, getFeaturedCollections, getFlagTypes, getGeolocationByItem, getInvitationById, getInvitationForItem, getItem, getItemActionsByDay, getItemActionsByHour, getItemActionsByWeekday, getItemLoginSchema, getItemLoginSchemaType, getItemMembershipsForItem, getItemsInBox, getLatestItemValidationGroup, getLikesForCurrentMember, getLikesForItem, getLinkMetadata, getMemberProfile, getMembersActions, getMembershipRequestsByItemId, getMostLikedCollections, getMostRecentCollections, getNextMaintenance, getOneMember, getOwnBookmark, getOwnMembershipRequestByItemId, getOwnMentions, getOwnMostUsedApps, getOwnPasswordStatus, getOwnProfile, getOwnRecycledItems, getParentItems, getShortLinkAvailability, getShortLinkRedirection, getShortLinksForItem, getStorage, getStorageFiles, getTagsForItem, getUrl, graaspZipExport, health, importH5P, importZip, inviteFromCsv, inviteFromCsvWithTemplate, login, loginOrRegisterAsGuest, marketingEmailsSubscribe, marketingEmailsUnsubscribe, moveManyItems, type Options, pagesWebsockets, pagesWebsockets2, patchChangeEmail, patchChatMessage, patchMention, postAction, postApiItemsByIdThumbnails, postApiMembersAvatar, postChangeEmail, publishItem, putGeolocation, recycleManyItems, register, reorderItem, requestPasswordResetLink, resetPassword, restoreManyItems, sendInvitation, signInWithPassword, signOut, unpublishItem, updateApp, updateAppData, updateAppSetting, updateCurrentAccount, updateDocument, updateEtherpad, updateFile, updateFolder, updateInvitation, updateItem, updateItemLoginSchema, updateItemMembership, updateLink, updateOwnProfile, updatePassword, updateShortcut, updateShortLink, uploadFile, validateItem } from '../sdk.gen'; -import type { AuthenticateData, ClearAllMentionsData, ClearAllMentionsError, ClearAllMentionsResponse, ClearChatMessageData, ClearChatMessageError, ClearChatMessageResponse, CollectionSearchData, CollectionSearchError, CollectionSearchResponse, ConvertCapsuleToFolderData, ConvertCapsuleToFolderError, ConvertCapsuleToFolderResponse, ConvertFolderToCapsuleData, ConvertFolderToCapsuleError, ConvertFolderToCapsuleResponse, CopyManyItemsData, CopyManyItemsError, CopyManyItemsResponse, CreateAppActionData, CreateAppActionError, CreateAppActionResponse, CreateAppData, CreateAppDataData, CreateAppDataError, CreateAppDataFileData, CreateAppDataFileError, CreateAppDataFileResponse, CreateAppDataResponse, CreateAppError, CreateAppResponse, CreateAppSettingData, CreateAppSettingError, CreateAppSettingFileData, CreateAppSettingFileError, CreateAppSettingFileResponse, CreateAppSettingResponse, CreateBookmarkData, CreateBookmarkError, CreateBookmarkResponse, CreateCapsuleData, CreateCapsuleError, CreateCapsuleResponse, CreateChatbotCompletionPromptData, CreateChatbotCompletionPromptError, CreateChatbotCompletionPromptResponse, CreateChatMessageData, CreateChatMessageError, CreateChatMessageResponse, CreateDocumentData, CreateDocumentError, CreateDocumentResponse, CreateEtherpadData, CreateEtherpadError, CreateEtherpadResponse, CreateFolderData, CreateFolderError, CreateFolderResponse, CreateFolderWithThumbnailData, CreateFolderWithThumbnailError, CreateFolderWithThumbnailResponse, CreateInvitationData, CreateInvitationError, CreateInvitationResponse, CreateItemData, CreateItemError, CreateItemFlagData, CreateItemFlagError, CreateItemFlagResponse, CreateItemLikeData, CreateItemLikeError, CreateItemLikeResponse, CreateItemMembershipData, CreateItemMembershipError, CreateItemMembershipResponse, CreateItemResponse, CreateItemWithThumbnailData, CreateItemWithThumbnailError, CreateItemWithThumbnailResponse, CreateLinkData, CreateLinkError, CreateLinkResponse, CreateMembershipRequestData, CreateMembershipRequestResponse, CreateOwnProfileData, CreateOwnProfileError, CreateOwnProfileResponse, CreatePageData, CreatePageError, CreatePageResponse, CreatePasswordData, CreatePasswordError, CreatePasswordResponse, CreateShortcutData, CreateShortcutError, CreateShortcutResponse, CreateShortLinkData, CreateShortLinkError, CreateShortLinkResponse, CreateTagForItemData, CreateTagForItemError, CreateTagForItemResponse, CreateVisibilityData, CreateVisibilityError, CreateVisibilityResponse, DeleteAliasData, DeleteAliasError, DeleteAliasResponse, DeleteApiItemsByIdThumbnailsData, DeleteApiMembersMembersByIdDeleteData, DeleteAppDataData, DeleteAppDataError, DeleteAppDataResponse, DeleteAppSettingData, DeleteAppSettingError, DeleteAppSettingResponse, DeleteBookmarkData, DeleteBookmarkError, DeleteBookmarkResponse, DeleteChatMessageData, DeleteChatMessageError, DeleteChatMessageResponse, DeleteCurrentAccountData, DeleteCurrentAccountError, DeleteCurrentAccountResponse, DeleteGeolocationData, DeleteGeolocationError, DeleteGeolocationResponse, DeleteInvitationData, DeleteInvitationError, DeleteInvitationResponse, DeleteItemLikeData, DeleteItemLikeError, DeleteItemLikeResponse, DeleteItemLoginSchemaData, DeleteItemLoginSchemaError, DeleteItemMembershipData, DeleteItemMembershipError, DeleteItemMembershipResponse, DeleteManyItemsData, DeleteManyItemsError, DeleteManyItemsResponse, DeleteMembershipRequestData, DeleteMembershipRequestResponse, DeleteMentionData, DeleteMentionError, DeleteMentionResponse, DeleteTagForItemData, DeleteTagForItemError, DeleteTagForItemResponse, DeleteVisibilityData, DeleteVisibilityError, DeleteVisibilityResponse, DownloadAppDataFileData, DownloadAppSettingFileData, DownloadAvatarData, DownloadFileData, DownloadFileError, DownloadItemThumbnailData, EnrollData, EnrollResponse, ExportActionsData, ExportActionsError, ExportActionsResponse, ExportMemberDataData, ExportMemberDataError, ExportMemberDataResponse, ExportZipData, ExportZipError, GenerateAppTokenData, GenerateAppTokenError, GenerateAppTokenResponse, GeolocationReverseData, GeolocationSearchData, GetAccessibleItemsData, GetAccessibleItemsError, GetAccessibleItemsResponse, GetApiItemsCollectionsSearchRebuildData, GetApiItemsH5pAssetsIntegrationHtmlData, GetApiItemsPublicationByItemIdStatusData, GetApiStatusData, GetApiVersionData, GetApiWsData, GetAppActionsForAppData, GetAppContextData, GetAppDataForAppData, GetAppListData, GetAppSettingsForAppData, GetChatData, GetChildrenData, GetCollectionInformationsData, GetCollectionsForMemberData, GetCountForTagsData, GetCurrentAccountData, GetCurrentSettingsData, GetDescendantItemsData, GetEtherpadFromItemData, GetFacetsForNameData, GetFacetsForNameError, GetFacetsForNameResponse, GetFeaturedCollectionsData, GetFlagTypesData, GetGeolocationByItemData, GetInvitationByIdData, GetInvitationForItemData, GetItemActionsByDayData, GetItemActionsByHourData, GetItemActionsByWeekdayData, GetItemData, GetItemLoginSchemaData, GetItemLoginSchemaTypeData, GetItemMembershipsForItemData, GetItemsInBoxData, GetLatestItemValidationGroupData, GetLikesForCurrentMemberData, GetLikesForItemData, GetLinkMetadataData, GetMemberProfileData, GetMembersActionsData, GetMembershipRequestsByItemIdData, GetMostLikedCollectionsData, GetMostRecentCollectionsData, GetNextMaintenanceData, GetOneMemberData, GetOwnBookmarkData, GetOwnMembershipRequestByItemIdData, GetOwnMentionsData, GetOwnMostUsedAppsData, GetOwnPasswordStatusData, GetOwnProfileData, GetOwnRecycledItemsData, GetOwnRecycledItemsError, GetOwnRecycledItemsResponse, GetParentItemsData, GetShortLinkAvailabilityData, GetShortLinkRedirectionData, GetShortLinksForItemData, GetStorageData, GetStorageFilesData, GetStorageFilesError, GetStorageFilesResponse, GetTagsForItemData, GetUrlData, GraaspZipExportData, GraaspZipExportError, HealthData, ImportH5pData, ImportH5pError, ImportH5pResponse, ImportZipData, ImportZipError, InviteFromCsvData, InviteFromCsvError, InviteFromCsvResponse, InviteFromCsvWithTemplateData, InviteFromCsvWithTemplateError, InviteFromCsvWithTemplateResponse, LoginData, LoginError, LoginOrRegisterAsGuestData, LoginOrRegisterAsGuestError, LoginOrRegisterAsGuestResponse, LoginResponse, MarketingEmailsSubscribeData, MarketingEmailsSubscribeError, MarketingEmailsSubscribeResponse, MarketingEmailsUnsubscribeData, MarketingEmailsUnsubscribeError, MarketingEmailsUnsubscribeResponse, MoveManyItemsData, MoveManyItemsError, MoveManyItemsResponse, PagesWebsockets2Data, PagesWebsocketsData, PatchChangeEmailData, PatchChangeEmailError, PatchChangeEmailResponse, PatchChatMessageData, PatchChatMessageError, PatchChatMessageResponse, PatchMentionData, PatchMentionError, PatchMentionResponse, PostActionData, PostActionError, PostActionResponse, PostApiItemsByIdThumbnailsData, PostApiItemsByIdThumbnailsError, PostApiItemsByIdThumbnailsResponse, PostApiMembersAvatarData, PostApiMembersAvatarResponse, PostChangeEmailData, PostChangeEmailError, PostChangeEmailResponse, PublishItemData, PublishItemError, PublishItemResponse, PutGeolocationData, PutGeolocationError, PutGeolocationResponse, RecycleManyItemsData, RecycleManyItemsError, RecycleManyItemsResponse, RegisterData, RegisterError, RegisterResponse, ReorderItemData, ReorderItemError, ReorderItemResponse, RequestPasswordResetLinkData, ResetPasswordData, RestoreManyItemsData, RestoreManyItemsError, RestoreManyItemsResponse, SendInvitationData, SendInvitationError, SendInvitationResponse, SignInWithPasswordData, SignInWithPasswordError, SignInWithPasswordResponse, SignOutData, SignOutError, SignOutResponse, UnpublishItemData, UnpublishItemError, UnpublishItemResponse, UpdateAppData, UpdateAppDataData, UpdateAppDataError, UpdateAppDataResponse, UpdateAppError, UpdateAppResponse, UpdateAppSettingData, UpdateAppSettingError, UpdateAppSettingResponse, UpdateCurrentAccountData, UpdateCurrentAccountError, UpdateDocumentData, UpdateDocumentError, UpdateDocumentResponse, UpdateEtherpadData, UpdateEtherpadError, UpdateEtherpadResponse, UpdateFileData, UpdateFileError, UpdateFolderData, UpdateFolderError, UpdateFolderResponse, UpdateInvitationData, UpdateInvitationError, UpdateInvitationResponse, UpdateItemData, UpdateItemError, UpdateItemLoginSchemaData, UpdateItemLoginSchemaError, UpdateItemMembershipData, UpdateItemMembershipError, UpdateItemMembershipResponse, UpdateItemResponse, UpdateLinkData, UpdateLinkError, UpdateLinkResponse, UpdateOwnProfileData, UpdateOwnProfileError, UpdateOwnProfileResponse, UpdatePasswordData, UpdatePasswordError, UpdatePasswordResponse, UpdateShortcutData, UpdateShortcutError, UpdateShortcutResponse, UpdateShortLinkData, UpdateShortLinkError, UpdateShortLinkResponse, UploadFileData, UploadFileError, UploadFileResponse, ValidateItemData, ValidateItemError, ValidateItemResponse } from '../types.gen'; +import { authenticate, clearAllMentions, clearChatMessage, collectionSearch, convertCapsuleToFolder, convertFolderToCapsule, copyManyItems, createApp, createAppAction, createAppData, createAppDataFile, createAppSetting, createAppSettingFile, createBookmark, createCapsule, createChatbotCompletionPrompt, createChatMessage, createDocument, createEtherpad, createFolder, createFolderWithThumbnail, createInvitation, createItem, createItemFlag, createItemLike, createItemMembership, createItemWithThumbnail, createLink, createMembershipRequest, createOwnProfile, createPage, createPassword, createShortcut, createShortLink, createTagForItem, createVisibility, deleteAlias, deleteApiItemsByIdThumbnails, deleteApiMembersMembersByIdDelete, deleteAppData, deleteAppSetting, deleteBookmark, deleteChatMessage, deleteCurrentAccount, deleteGeolocation, deleteInvitation, deleteItemLike, deleteItemLoginSchema, deleteItemMembership, deleteManyItems, deleteMembershipRequest, deleteMention, deleteTagForItem, deleteVisibility, downloadAppDataFile, downloadAppSettingFile, downloadAvatar, downloadFile, downloadItemThumbnail, enroll, exportActions, exportMemberData, exportZip, generateAppToken, geolocationReverse, geolocationSearch, getAccessibleItems, getApiItemsCollectionsSearchRebuild, getApiItemsPublicationByItemIdStatus, getApiStatus, getApiVersion, getApiWs, getAppActionsForApp, getAppContext, getAppDataForApp, getAppList, getAppSettingsForApp, getChat, getChildren, getCollectionInformations, getCollectionsForMember, getCountForTags, getCurrentAccount, getCurrentSettings, getDescendantItems, getEtherpadFromItem, getFacetsForName, getFeaturedCollections, getFlagTypes, getGeolocationByItem, getInvitationById, getInvitationForItem, getItem, getItemActionsByDay, getItemActionsByHour, getItemActionsByWeekday, getItemLoginSchema, getItemLoginSchemaType, getItemMembershipsForItem, getItemsInBox, getLatestItemValidationGroup, getLikesForCurrentMember, getLikesForItem, getLinkMetadata, getMemberProfile, getMembersActions, getMembershipRequestsByItemId, getMostLikedCollections, getMostRecentCollections, getNextMaintenance, getOneMember, getOwnBookmark, getOwnMembershipRequestByItemId, getOwnMentions, getOwnMostUsedApps, getOwnPasswordStatus, getOwnProfile, getOwnRecycledItems, getParentItems, getShortLinkAvailability, getShortLinkRedirection, getShortLinksForItem, getStorage, getStorageFiles, getTagsForItem, getUrl, graaspZipExport, health, importH5P, importZip, inviteFromCsv, inviteFromCsvWithTemplate, login, loginOrRegisterAsGuest, marketingEmailsSubscribe, marketingEmailsUnsubscribe, moveManyItems, type Options, pagesWebsockets, pagesWebsockets2, patchChangeEmail, patchChatMessage, patchMention, postAction, postApiItemsByIdThumbnails, postApiMembersAvatar, postChangeEmail, publishItem, putGeolocation, recycleManyItems, register, reorderItem, requestPasswordResetLink, resetPassword, restoreManyItems, sendInvitation, signInWithPassword, signOut, unpublishItem, updateApp, updateAppData, updateAppSetting, updateCurrentAccount, updateDocument, updateEtherpad, updateFile, updateFolder, updateInvitation, updateItem, updateItemLoginSchema, updateItemMembership, updateLink, updateOwnProfile, updatePassword, updateShortcut, updateShortLink, uploadFile, validateItem } from '../sdk.gen'; +import type { AuthenticateData, ClearAllMentionsData, ClearAllMentionsError, ClearAllMentionsResponse, ClearChatMessageData, ClearChatMessageError, ClearChatMessageResponse, CollectionSearchData, CollectionSearchError, CollectionSearchResponse, ConvertCapsuleToFolderData, ConvertCapsuleToFolderError, ConvertCapsuleToFolderResponse, ConvertFolderToCapsuleData, ConvertFolderToCapsuleError, ConvertFolderToCapsuleResponse, CopyManyItemsData, CopyManyItemsError, CopyManyItemsResponse, CreateAppActionData, CreateAppActionError, CreateAppActionResponse, CreateAppData, CreateAppDataData, CreateAppDataError, CreateAppDataFileData, CreateAppDataFileError, CreateAppDataFileResponse, CreateAppDataResponse, CreateAppError, CreateAppResponse, CreateAppSettingData, CreateAppSettingError, CreateAppSettingFileData, CreateAppSettingFileError, CreateAppSettingFileResponse, CreateAppSettingResponse, CreateBookmarkData, CreateBookmarkError, CreateBookmarkResponse, CreateCapsuleData, CreateCapsuleError, CreateCapsuleResponse, CreateChatbotCompletionPromptData, CreateChatbotCompletionPromptError, CreateChatbotCompletionPromptResponse, CreateChatMessageData, CreateChatMessageError, CreateChatMessageResponse, CreateDocumentData, CreateDocumentError, CreateDocumentResponse, CreateEtherpadData, CreateEtherpadError, CreateEtherpadResponse, CreateFolderData, CreateFolderError, CreateFolderResponse, CreateFolderWithThumbnailData, CreateFolderWithThumbnailError, CreateFolderWithThumbnailResponse, CreateInvitationData, CreateInvitationError, CreateInvitationResponse, CreateItemData, CreateItemError, CreateItemFlagData, CreateItemFlagError, CreateItemFlagResponse, CreateItemLikeData, CreateItemLikeError, CreateItemLikeResponse, CreateItemMembershipData, CreateItemMembershipError, CreateItemMembershipResponse, CreateItemResponse, CreateItemWithThumbnailData, CreateItemWithThumbnailError, CreateItemWithThumbnailResponse, CreateLinkData, CreateLinkError, CreateLinkResponse, CreateMembershipRequestData, CreateMembershipRequestResponse, CreateOwnProfileData, CreateOwnProfileError, CreateOwnProfileResponse, CreatePageData, CreatePageError, CreatePageResponse, CreatePasswordData, CreatePasswordError, CreatePasswordResponse, CreateShortcutData, CreateShortcutError, CreateShortcutResponse, CreateShortLinkData, CreateShortLinkError, CreateShortLinkResponse, CreateTagForItemData, CreateTagForItemError, CreateTagForItemResponse, CreateVisibilityData, CreateVisibilityError, CreateVisibilityResponse, DeleteAliasData, DeleteAliasError, DeleteAliasResponse, DeleteApiItemsByIdThumbnailsData, DeleteApiMembersMembersByIdDeleteData, DeleteAppDataData, DeleteAppDataError, DeleteAppDataResponse, DeleteAppSettingData, DeleteAppSettingError, DeleteAppSettingResponse, DeleteBookmarkData, DeleteBookmarkError, DeleteBookmarkResponse, DeleteChatMessageData, DeleteChatMessageError, DeleteChatMessageResponse, DeleteCurrentAccountData, DeleteCurrentAccountError, DeleteCurrentAccountResponse, DeleteGeolocationData, DeleteGeolocationError, DeleteGeolocationResponse, DeleteInvitationData, DeleteInvitationError, DeleteInvitationResponse, DeleteItemLikeData, DeleteItemLikeError, DeleteItemLikeResponse, DeleteItemLoginSchemaData, DeleteItemLoginSchemaError, DeleteItemMembershipData, DeleteItemMembershipError, DeleteItemMembershipResponse, DeleteManyItemsData, DeleteManyItemsError, DeleteManyItemsResponse, DeleteMembershipRequestData, DeleteMembershipRequestResponse, DeleteMentionData, DeleteMentionError, DeleteMentionResponse, DeleteTagForItemData, DeleteTagForItemError, DeleteTagForItemResponse, DeleteVisibilityData, DeleteVisibilityError, DeleteVisibilityResponse, DownloadAppDataFileData, DownloadAppSettingFileData, DownloadAvatarData, DownloadFileData, DownloadItemThumbnailData, EnrollData, EnrollResponse, ExportActionsData, ExportActionsError, ExportActionsResponse, ExportMemberDataData, ExportMemberDataError, ExportMemberDataResponse, ExportZipData, ExportZipError, GenerateAppTokenData, GenerateAppTokenError, GenerateAppTokenResponse, GeolocationReverseData, GeolocationSearchData, GetAccessibleItemsData, GetAccessibleItemsError, GetAccessibleItemsResponse, GetApiItemsCollectionsSearchRebuildData, GetApiItemsPublicationByItemIdStatusData, GetApiStatusData, GetApiVersionData, GetApiWsData, GetAppActionsForAppData, GetAppContextData, GetAppDataForAppData, GetAppListData, GetAppSettingsForAppData, GetChatData, GetChildrenData, GetCollectionInformationsData, GetCollectionsForMemberData, GetCountForTagsData, GetCurrentAccountData, GetCurrentSettingsData, GetDescendantItemsData, GetEtherpadFromItemData, GetFacetsForNameData, GetFacetsForNameError, GetFacetsForNameResponse, GetFeaturedCollectionsData, GetFlagTypesData, GetGeolocationByItemData, GetInvitationByIdData, GetInvitationForItemData, GetItemActionsByDayData, GetItemActionsByHourData, GetItemActionsByWeekdayData, GetItemData, GetItemLoginSchemaData, GetItemLoginSchemaTypeData, GetItemMembershipsForItemData, GetItemsInBoxData, GetLatestItemValidationGroupData, GetLikesForCurrentMemberData, GetLikesForItemData, GetLinkMetadataData, GetMemberProfileData, GetMembersActionsData, GetMembershipRequestsByItemIdData, GetMostLikedCollectionsData, GetMostRecentCollectionsData, GetNextMaintenanceData, GetOneMemberData, GetOwnBookmarkData, GetOwnMembershipRequestByItemIdData, GetOwnMentionsData, GetOwnMostUsedAppsData, GetOwnPasswordStatusData, GetOwnProfileData, GetOwnRecycledItemsData, GetOwnRecycledItemsError, GetOwnRecycledItemsResponse, GetParentItemsData, GetShortLinkAvailabilityData, GetShortLinkRedirectionData, GetShortLinksForItemData, GetStorageData, GetStorageFilesData, GetStorageFilesError, GetStorageFilesResponse, GetTagsForItemData, GetUrlData, GraaspZipExportData, GraaspZipExportError, HealthData, ImportH5pData, ImportH5pError, ImportH5pResponse, ImportZipData, ImportZipError, InviteFromCsvData, InviteFromCsvError, InviteFromCsvResponse, InviteFromCsvWithTemplateData, InviteFromCsvWithTemplateError, InviteFromCsvWithTemplateResponse, LoginData, LoginError, LoginOrRegisterAsGuestData, LoginOrRegisterAsGuestError, LoginOrRegisterAsGuestResponse, LoginResponse, MarketingEmailsSubscribeData, MarketingEmailsSubscribeError, MarketingEmailsSubscribeResponse, MarketingEmailsUnsubscribeData, MarketingEmailsUnsubscribeError, MarketingEmailsUnsubscribeResponse, MoveManyItemsData, MoveManyItemsError, MoveManyItemsResponse, PagesWebsockets2Data, PagesWebsocketsData, PatchChangeEmailData, PatchChangeEmailError, PatchChangeEmailResponse, PatchChatMessageData, PatchChatMessageError, PatchChatMessageResponse, PatchMentionData, PatchMentionError, PatchMentionResponse, PostActionData, PostActionError, PostActionResponse, PostApiItemsByIdThumbnailsData, PostApiItemsByIdThumbnailsError, PostApiItemsByIdThumbnailsResponse, PostApiMembersAvatarData, PostApiMembersAvatarResponse, PostChangeEmailData, PostChangeEmailError, PostChangeEmailResponse, PublishItemData, PublishItemError, PublishItemResponse, PutGeolocationData, PutGeolocationError, PutGeolocationResponse, RecycleManyItemsData, RecycleManyItemsError, RecycleManyItemsResponse, RegisterData, RegisterError, RegisterResponse, ReorderItemData, ReorderItemError, ReorderItemResponse, RequestPasswordResetLinkData, ResetPasswordData, RestoreManyItemsData, RestoreManyItemsError, RestoreManyItemsResponse, SendInvitationData, SendInvitationError, SendInvitationResponse, SignInWithPasswordData, SignInWithPasswordError, SignInWithPasswordResponse, SignOutData, SignOutError, SignOutResponse, UnpublishItemData, UnpublishItemError, UnpublishItemResponse, UpdateAppData, UpdateAppDataData, UpdateAppDataError, UpdateAppDataResponse, UpdateAppError, UpdateAppResponse, UpdateAppSettingData, UpdateAppSettingError, UpdateAppSettingResponse, UpdateCurrentAccountData, UpdateCurrentAccountError, UpdateDocumentData, UpdateDocumentError, UpdateDocumentResponse, UpdateEtherpadData, UpdateEtherpadError, UpdateEtherpadResponse, UpdateFileData, UpdateFileError, UpdateFolderData, UpdateFolderError, UpdateFolderResponse, UpdateInvitationData, UpdateInvitationError, UpdateInvitationResponse, UpdateItemData, UpdateItemError, UpdateItemLoginSchemaData, UpdateItemLoginSchemaError, UpdateItemMembershipData, UpdateItemMembershipError, UpdateItemMembershipResponse, UpdateItemResponse, UpdateLinkData, UpdateLinkError, UpdateLinkResponse, UpdateOwnProfileData, UpdateOwnProfileError, UpdateOwnProfileResponse, UpdatePasswordData, UpdatePasswordError, UpdatePasswordResponse, UpdateShortcutData, UpdateShortcutError, UpdateShortcutResponse, UpdateShortLinkData, UpdateShortLinkError, UpdateShortLinkResponse, UploadFileData, UploadFileError, UploadFileResponse, ValidateItemData, ValidateItemError, ValidateItemResponse } from '../types.gen'; export type QueryKey = [ Pick & { @@ -2057,23 +2057,6 @@ export const getApiItemsPublicationByItemIdStatusOptions = (options: Options) => createQueryKey('getApiItemsH5pAssetsIntegrationHtml', options); - -export const getApiItemsH5pAssetsIntegrationHtmlOptions = (options?: Options) => { - return queryOptions({ - queryFn: async ({ queryKey, signal }) => { - const { data } = await getApiItemsH5pAssetsIntegrationHtml({ - ...options, - ...queryKey[0], - signal, - throwOnError: true - }); - return data; - }, - queryKey: getApiItemsH5pAssetsIntegrationHtmlQueryKey(options) - }); -}; - /** * Import H5P file * Import H5P file and create corresponding item. @@ -2167,22 +2150,25 @@ export const importZipMutation = (options?: Partial>): Us return mutationOptions; }; +export const downloadFileQueryKey = (options: Options) => createQueryKey('downloadFile', options); + /** * Download non-folder content * Download non-folder content. Return raw file for single item. */ -export const downloadFileMutation = (options?: Partial>): UseMutationOptions> => { - const mutationOptions: UseMutationOptions> = { - mutationFn: async (fnOptions) => { +export const downloadFileOptions = (options: Options) => { + return queryOptions({ + queryFn: async ({ queryKey, signal }) => { const { data } = await downloadFile({ ...options, - ...fnOptions, + ...queryKey[0], + signal, throwOnError: true }); return data; - } - }; - return mutationOptions; + }, + queryKey: downloadFileQueryKey(options) + }); }; /** diff --git a/src/openapi/client/sdk.gen.ts b/src/openapi/client/sdk.gen.ts index b0e845cb4..d9d8db94c 100644 --- a/src/openapi/client/sdk.gen.ts +++ b/src/openapi/client/sdk.gen.ts @@ -2,7 +2,7 @@ import type { Client, Options as Options2, TDataShape } from './client'; import { client } from './client.gen'; -import type { AuthenticateData, AuthenticateErrors, ClearAllMentionsData, ClearAllMentionsErrors, ClearAllMentionsResponses, ClearChatMessageData, ClearChatMessageErrors, ClearChatMessageResponses, CollectionSearchData, CollectionSearchErrors, CollectionSearchResponses, ConvertCapsuleToFolderData, ConvertCapsuleToFolderErrors, ConvertCapsuleToFolderResponses, ConvertFolderToCapsuleData, ConvertFolderToCapsuleErrors, ConvertFolderToCapsuleResponses, CopyManyItemsData, CopyManyItemsErrors, CopyManyItemsResponses, CreateAppActionData, CreateAppActionErrors, CreateAppActionResponses, CreateAppData, CreateAppDataData, CreateAppDataErrors, CreateAppDataFileData, CreateAppDataFileErrors, CreateAppDataFileResponses, CreateAppDataResponses, CreateAppErrors, CreateAppResponses, CreateAppSettingData, CreateAppSettingErrors, CreateAppSettingFileData, CreateAppSettingFileErrors, CreateAppSettingFileResponses, CreateAppSettingResponses, CreateBookmarkData, CreateBookmarkErrors, CreateBookmarkResponses, CreateCapsuleData, CreateCapsuleErrors, CreateCapsuleResponses, CreateChatbotCompletionPromptData, CreateChatbotCompletionPromptErrors, CreateChatbotCompletionPromptResponses, CreateChatMessageData, CreateChatMessageErrors, CreateChatMessageResponses, CreateDocumentData, CreateDocumentErrors, CreateDocumentResponses, CreateEtherpadData, CreateEtherpadErrors, CreateEtherpadResponses, CreateFolderData, CreateFolderErrors, CreateFolderResponses, CreateFolderWithThumbnailData, CreateFolderWithThumbnailErrors, CreateFolderWithThumbnailResponses, CreateInvitationData, CreateInvitationErrors, CreateInvitationResponses, CreateItemData, CreateItemErrors, CreateItemFlagData, CreateItemFlagErrors, CreateItemFlagResponses, CreateItemLikeData, CreateItemLikeErrors, CreateItemLikeResponses, CreateItemMembershipData, CreateItemMembershipErrors, CreateItemMembershipResponses, CreateItemResponses, CreateItemWithThumbnailData, CreateItemWithThumbnailErrors, CreateItemWithThumbnailResponses, CreateLinkData, CreateLinkErrors, CreateLinkResponses, CreateMembershipRequestData, CreateMembershipRequestResponses, CreateOwnProfileData, CreateOwnProfileErrors, CreateOwnProfileResponses, CreatePageData, CreatePageErrors, CreatePageResponses, CreatePasswordData, CreatePasswordErrors, CreatePasswordResponses, CreateShortcutData, CreateShortcutErrors, CreateShortcutResponses, CreateShortLinkData, CreateShortLinkErrors, CreateShortLinkResponses, CreateTagForItemData, CreateTagForItemErrors, CreateTagForItemResponses, CreateVisibilityData, CreateVisibilityErrors, CreateVisibilityResponses, DeleteAliasData, DeleteAliasErrors, DeleteAliasResponses, DeleteApiItemsByIdThumbnailsData, DeleteApiItemsByIdThumbnailsResponses, DeleteApiMembersMembersByIdDeleteData, DeleteApiMembersMembersByIdDeleteResponses, DeleteAppDataData, DeleteAppDataErrors, DeleteAppDataResponses, DeleteAppSettingData, DeleteAppSettingErrors, DeleteAppSettingResponses, DeleteBookmarkData, DeleteBookmarkErrors, DeleteBookmarkResponses, DeleteChatMessageData, DeleteChatMessageErrors, DeleteChatMessageResponses, DeleteCurrentAccountData, DeleteCurrentAccountErrors, DeleteCurrentAccountResponses, DeleteGeolocationData, DeleteGeolocationErrors, DeleteGeolocationResponses, DeleteInvitationData, DeleteInvitationErrors, DeleteInvitationResponses, DeleteItemLikeData, DeleteItemLikeErrors, DeleteItemLikeResponses, DeleteItemLoginSchemaData, DeleteItemLoginSchemaErrors, DeleteItemLoginSchemaResponses, DeleteItemMembershipData, DeleteItemMembershipErrors, DeleteItemMembershipResponses, DeleteManyItemsData, DeleteManyItemsErrors, DeleteManyItemsResponses, DeleteMembershipRequestData, DeleteMembershipRequestResponses, DeleteMentionData, DeleteMentionErrors, DeleteMentionResponses, DeleteTagForItemData, DeleteTagForItemErrors, DeleteTagForItemResponses, DeleteVisibilityData, DeleteVisibilityErrors, DeleteVisibilityResponses, DownloadAppDataFileData, DownloadAppDataFileErrors, DownloadAppDataFileResponses, DownloadAppSettingFileData, DownloadAppSettingFileErrors, DownloadAppSettingFileResponses, DownloadAvatarData, DownloadAvatarErrors, DownloadAvatarResponses, DownloadFileData, DownloadFileErrors, DownloadFileResponses, DownloadItemThumbnailData, DownloadItemThumbnailErrors, DownloadItemThumbnailResponses, EnrollData, EnrollResponses, ExportActionsData, ExportActionsErrors, ExportActionsResponses, ExportMemberDataData, ExportMemberDataErrors, ExportMemberDataResponses, ExportZipData, ExportZipErrors, ExportZipResponses, GenerateAppTokenData, GenerateAppTokenErrors, GenerateAppTokenResponses, GeolocationReverseData, GeolocationReverseErrors, GeolocationReverseResponses, GeolocationSearchData, GeolocationSearchErrors, GeolocationSearchResponses, GetAccessibleItemsData, GetAccessibleItemsErrors, GetAccessibleItemsResponses, GetApiItemsCollectionsSearchRebuildData, GetApiItemsCollectionsSearchRebuildResponses, GetApiItemsH5pAssetsIntegrationHtmlData, GetApiItemsH5pAssetsIntegrationHtmlResponses, GetApiItemsPublicationByItemIdStatusData, GetApiItemsPublicationByItemIdStatusResponses, GetApiStatusData, GetApiStatusResponses, GetApiVersionData, GetApiVersionResponses, GetApiWsData, GetApiWsResponses, GetAppActionsForAppData, GetAppActionsForAppErrors, GetAppActionsForAppResponses, GetAppContextData, GetAppContextResponses, GetAppDataForAppData, GetAppDataForAppErrors, GetAppDataForAppResponses, GetAppListData, GetAppListErrors, GetAppListResponses, GetAppSettingsForAppData, GetAppSettingsForAppErrors, GetAppSettingsForAppResponses, GetChatData, GetChatErrors, GetChatResponses, GetChildrenData, GetChildrenErrors, GetChildrenResponses, GetCollectionInformationsData, GetCollectionInformationsErrors, GetCollectionInformationsResponses, GetCollectionsForMemberData, GetCollectionsForMemberErrors, GetCollectionsForMemberResponses, GetCountForTagsData, GetCountForTagsErrors, GetCountForTagsResponses, GetCurrentAccountData, GetCurrentAccountErrors, GetCurrentAccountResponses, GetCurrentSettingsData, GetCurrentSettingsErrors, GetCurrentSettingsResponses, GetDescendantItemsData, GetDescendantItemsErrors, GetDescendantItemsResponses, GetEtherpadFromItemData, GetEtherpadFromItemErrors, GetEtherpadFromItemResponses, GetFacetsForNameData, GetFacetsForNameErrors, GetFacetsForNameResponses, GetFeaturedCollectionsData, GetFeaturedCollectionsErrors, GetFeaturedCollectionsResponses, GetFlagTypesData, GetFlagTypesErrors, GetFlagTypesResponses, GetGeolocationByItemData, GetGeolocationByItemErrors, GetGeolocationByItemResponses, GetInvitationByIdData, GetInvitationByIdErrors, GetInvitationByIdResponses, GetInvitationForItemData, GetInvitationForItemErrors, GetInvitationForItemResponses, GetItemActionsByDayData, GetItemActionsByDayErrors, GetItemActionsByDayResponses, GetItemActionsByHourData, GetItemActionsByHourErrors, GetItemActionsByHourResponses, GetItemActionsByWeekdayData, GetItemActionsByWeekdayErrors, GetItemActionsByWeekdayResponses, GetItemData, GetItemErrors, GetItemLoginSchemaData, GetItemLoginSchemaErrors, GetItemLoginSchemaResponses, GetItemLoginSchemaTypeData, GetItemLoginSchemaTypeErrors, GetItemLoginSchemaTypeResponses, GetItemMembershipsForItemData, GetItemMembershipsForItemErrors, GetItemMembershipsForItemResponses, GetItemResponses, GetItemsInBoxData, GetItemsInBoxErrors, GetItemsInBoxResponses, GetLatestItemValidationGroupData, GetLatestItemValidationGroupErrors, GetLatestItemValidationGroupResponses, GetLikesForCurrentMemberData, GetLikesForCurrentMemberErrors, GetLikesForCurrentMemberResponses, GetLikesForItemData, GetLikesForItemErrors, GetLikesForItemResponses, GetLinkMetadataData, GetLinkMetadataErrors, GetLinkMetadataResponses, GetMemberProfileData, GetMemberProfileErrors, GetMemberProfileResponses, GetMembersActionsData, GetMembersActionsErrors, GetMembersActionsResponses, GetMembershipRequestsByItemIdData, GetMembershipRequestsByItemIdResponses, GetMostLikedCollectionsData, GetMostLikedCollectionsErrors, GetMostLikedCollectionsResponses, GetMostRecentCollectionsData, GetMostRecentCollectionsErrors, GetMostRecentCollectionsResponses, GetNextMaintenanceData, GetNextMaintenanceErrors, GetNextMaintenanceResponses, GetOneMemberData, GetOneMemberErrors, GetOneMemberResponses, GetOwnBookmarkData, GetOwnBookmarkErrors, GetOwnBookmarkResponses, GetOwnMembershipRequestByItemIdData, GetOwnMembershipRequestByItemIdResponses, GetOwnMentionsData, GetOwnMentionsErrors, GetOwnMentionsResponses, GetOwnMostUsedAppsData, GetOwnMostUsedAppsErrors, GetOwnMostUsedAppsResponses, GetOwnPasswordStatusData, GetOwnPasswordStatusResponses, GetOwnProfileData, GetOwnProfileErrors, GetOwnProfileResponses, GetOwnRecycledItemsData, GetOwnRecycledItemsErrors, GetOwnRecycledItemsResponses, GetParentItemsData, GetParentItemsErrors, GetParentItemsResponses, GetShortLinkAvailabilityData, GetShortLinkAvailabilityErrors, GetShortLinkAvailabilityResponses, GetShortLinkRedirectionData, GetShortLinkRedirectionErrors, GetShortLinksForItemData, GetShortLinksForItemErrors, GetShortLinksForItemResponses, GetStorageData, GetStorageErrors, GetStorageFilesData, GetStorageFilesErrors, GetStorageFilesResponses, GetStorageResponses, GetTagsForItemData, GetTagsForItemErrors, GetTagsForItemResponses, GetUrlData, GetUrlErrors, GetUrlResponses, GraaspZipExportData, GraaspZipExportErrors, GraaspZipExportResponses, HealthData, HealthResponses, ImportH5pData, ImportH5pErrors, ImportH5pResponses, ImportZipData, ImportZipErrors, ImportZipResponses, InviteFromCsvData, InviteFromCsvErrors, InviteFromCsvResponses, InviteFromCsvWithTemplateData, InviteFromCsvWithTemplateErrors, InviteFromCsvWithTemplateResponses, LoginData, LoginErrors, LoginOrRegisterAsGuestData, LoginOrRegisterAsGuestErrors, LoginOrRegisterAsGuestResponses, LoginResponses, MarketingEmailsSubscribeData, MarketingEmailsSubscribeErrors, MarketingEmailsSubscribeResponses, MarketingEmailsUnsubscribeData, MarketingEmailsUnsubscribeErrors, MarketingEmailsUnsubscribeResponses, MoveManyItemsData, MoveManyItemsErrors, MoveManyItemsResponses, PagesWebsockets2Data, PagesWebsockets2Responses, PagesWebsocketsData, PagesWebsocketsResponses, PatchChangeEmailData, PatchChangeEmailErrors, PatchChangeEmailResponses, PatchChatMessageData, PatchChatMessageErrors, PatchChatMessageResponses, PatchMentionData, PatchMentionErrors, PatchMentionResponses, PostActionData, PostActionErrors, PostActionResponses, PostApiItemsByIdThumbnailsData, PostApiItemsByIdThumbnailsErrors, PostApiItemsByIdThumbnailsResponses, PostApiMembersAvatarData, PostApiMembersAvatarResponses, PostChangeEmailData, PostChangeEmailErrors, PostChangeEmailResponses, PublishItemData, PublishItemErrors, PublishItemResponses, PutGeolocationData, PutGeolocationErrors, PutGeolocationResponses, RecycleManyItemsData, RecycleManyItemsErrors, RecycleManyItemsResponses, RegisterData, RegisterErrors, RegisterResponses, ReorderItemData, ReorderItemErrors, ReorderItemResponses, RequestPasswordResetLinkData, RequestPasswordResetLinkErrors, RequestPasswordResetLinkResponses, ResetPasswordData, ResetPasswordErrors, ResetPasswordResponses, RestoreManyItemsData, RestoreManyItemsErrors, RestoreManyItemsResponses, SendInvitationData, SendInvitationErrors, SendInvitationResponses, SignInWithPasswordData, SignInWithPasswordErrors, SignInWithPasswordResponses, SignOutData, SignOutErrors, SignOutResponses, UnpublishItemData, UnpublishItemErrors, UnpublishItemResponses, UpdateAppData, UpdateAppDataData, UpdateAppDataErrors, UpdateAppDataResponses, UpdateAppErrors, UpdateAppResponses, UpdateAppSettingData, UpdateAppSettingErrors, UpdateAppSettingResponses, UpdateCurrentAccountData, UpdateCurrentAccountErrors, UpdateCurrentAccountResponses, UpdateDocumentData, UpdateDocumentErrors, UpdateDocumentResponses, UpdateEtherpadData, UpdateEtherpadErrors, UpdateEtherpadResponses, UpdateFileData, UpdateFileErrors, UpdateFileResponses, UpdateFolderData, UpdateFolderErrors, UpdateFolderResponses, UpdateInvitationData, UpdateInvitationErrors, UpdateInvitationResponses, UpdateItemData, UpdateItemErrors, UpdateItemLoginSchemaData, UpdateItemLoginSchemaErrors, UpdateItemLoginSchemaResponses, UpdateItemMembershipData, UpdateItemMembershipErrors, UpdateItemMembershipResponses, UpdateItemResponses, UpdateLinkData, UpdateLinkErrors, UpdateLinkResponses, UpdateOwnProfileData, UpdateOwnProfileErrors, UpdateOwnProfileResponses, UpdatePasswordData, UpdatePasswordErrors, UpdatePasswordResponses, UpdateShortcutData, UpdateShortcutErrors, UpdateShortcutResponses, UpdateShortLinkData, UpdateShortLinkErrors, UpdateShortLinkResponses, UploadFileData, UploadFileErrors, UploadFileResponses, ValidateItemData, ValidateItemErrors, ValidateItemResponses } from './types.gen'; +import type { AuthenticateData, AuthenticateErrors, ClearAllMentionsData, ClearAllMentionsErrors, ClearAllMentionsResponses, ClearChatMessageData, ClearChatMessageErrors, ClearChatMessageResponses, CollectionSearchData, CollectionSearchErrors, CollectionSearchResponses, ConvertCapsuleToFolderData, ConvertCapsuleToFolderErrors, ConvertCapsuleToFolderResponses, ConvertFolderToCapsuleData, ConvertFolderToCapsuleErrors, ConvertFolderToCapsuleResponses, CopyManyItemsData, CopyManyItemsErrors, CopyManyItemsResponses, CreateAppActionData, CreateAppActionErrors, CreateAppActionResponses, CreateAppData, CreateAppDataData, CreateAppDataErrors, CreateAppDataFileData, CreateAppDataFileErrors, CreateAppDataFileResponses, CreateAppDataResponses, CreateAppErrors, CreateAppResponses, CreateAppSettingData, CreateAppSettingErrors, CreateAppSettingFileData, CreateAppSettingFileErrors, CreateAppSettingFileResponses, CreateAppSettingResponses, CreateBookmarkData, CreateBookmarkErrors, CreateBookmarkResponses, CreateCapsuleData, CreateCapsuleErrors, CreateCapsuleResponses, CreateChatbotCompletionPromptData, CreateChatbotCompletionPromptErrors, CreateChatbotCompletionPromptResponses, CreateChatMessageData, CreateChatMessageErrors, CreateChatMessageResponses, CreateDocumentData, CreateDocumentErrors, CreateDocumentResponses, CreateEtherpadData, CreateEtherpadErrors, CreateEtherpadResponses, CreateFolderData, CreateFolderErrors, CreateFolderResponses, CreateFolderWithThumbnailData, CreateFolderWithThumbnailErrors, CreateFolderWithThumbnailResponses, CreateInvitationData, CreateInvitationErrors, CreateInvitationResponses, CreateItemData, CreateItemErrors, CreateItemFlagData, CreateItemFlagErrors, CreateItemFlagResponses, CreateItemLikeData, CreateItemLikeErrors, CreateItemLikeResponses, CreateItemMembershipData, CreateItemMembershipErrors, CreateItemMembershipResponses, CreateItemResponses, CreateItemWithThumbnailData, CreateItemWithThumbnailErrors, CreateItemWithThumbnailResponses, CreateLinkData, CreateLinkErrors, CreateLinkResponses, CreateMembershipRequestData, CreateMembershipRequestResponses, CreateOwnProfileData, CreateOwnProfileErrors, CreateOwnProfileResponses, CreatePageData, CreatePageErrors, CreatePageResponses, CreatePasswordData, CreatePasswordErrors, CreatePasswordResponses, CreateShortcutData, CreateShortcutErrors, CreateShortcutResponses, CreateShortLinkData, CreateShortLinkErrors, CreateShortLinkResponses, CreateTagForItemData, CreateTagForItemErrors, CreateTagForItemResponses, CreateVisibilityData, CreateVisibilityErrors, CreateVisibilityResponses, DeleteAliasData, DeleteAliasErrors, DeleteAliasResponses, DeleteApiItemsByIdThumbnailsData, DeleteApiItemsByIdThumbnailsResponses, DeleteApiMembersMembersByIdDeleteData, DeleteApiMembersMembersByIdDeleteResponses, DeleteAppDataData, DeleteAppDataErrors, DeleteAppDataResponses, DeleteAppSettingData, DeleteAppSettingErrors, DeleteAppSettingResponses, DeleteBookmarkData, DeleteBookmarkErrors, DeleteBookmarkResponses, DeleteChatMessageData, DeleteChatMessageErrors, DeleteChatMessageResponses, DeleteCurrentAccountData, DeleteCurrentAccountErrors, DeleteCurrentAccountResponses, DeleteGeolocationData, DeleteGeolocationErrors, DeleteGeolocationResponses, DeleteInvitationData, DeleteInvitationErrors, DeleteInvitationResponses, DeleteItemLikeData, DeleteItemLikeErrors, DeleteItemLikeResponses, DeleteItemLoginSchemaData, DeleteItemLoginSchemaErrors, DeleteItemLoginSchemaResponses, DeleteItemMembershipData, DeleteItemMembershipErrors, DeleteItemMembershipResponses, DeleteManyItemsData, DeleteManyItemsErrors, DeleteManyItemsResponses, DeleteMembershipRequestData, DeleteMembershipRequestResponses, DeleteMentionData, DeleteMentionErrors, DeleteMentionResponses, DeleteTagForItemData, DeleteTagForItemErrors, DeleteTagForItemResponses, DeleteVisibilityData, DeleteVisibilityErrors, DeleteVisibilityResponses, DownloadAppDataFileData, DownloadAppDataFileErrors, DownloadAppDataFileResponses, DownloadAppSettingFileData, DownloadAppSettingFileErrors, DownloadAppSettingFileResponses, DownloadAvatarData, DownloadAvatarErrors, DownloadAvatarResponses, DownloadFileData, DownloadFileErrors, DownloadFileResponses, DownloadItemThumbnailData, DownloadItemThumbnailErrors, DownloadItemThumbnailResponses, EnrollData, EnrollResponses, ExportActionsData, ExportActionsErrors, ExportActionsResponses, ExportMemberDataData, ExportMemberDataErrors, ExportMemberDataResponses, ExportZipData, ExportZipErrors, ExportZipResponses, GenerateAppTokenData, GenerateAppTokenErrors, GenerateAppTokenResponses, GeolocationReverseData, GeolocationReverseErrors, GeolocationReverseResponses, GeolocationSearchData, GeolocationSearchErrors, GeolocationSearchResponses, GetAccessibleItemsData, GetAccessibleItemsErrors, GetAccessibleItemsResponses, GetApiItemsCollectionsSearchRebuildData, GetApiItemsCollectionsSearchRebuildResponses, GetApiItemsPublicationByItemIdStatusData, GetApiItemsPublicationByItemIdStatusResponses, GetApiStatusData, GetApiStatusResponses, GetApiVersionData, GetApiVersionResponses, GetApiWsData, GetApiWsResponses, GetAppActionsForAppData, GetAppActionsForAppErrors, GetAppActionsForAppResponses, GetAppContextData, GetAppContextResponses, GetAppDataForAppData, GetAppDataForAppErrors, GetAppDataForAppResponses, GetAppListData, GetAppListErrors, GetAppListResponses, GetAppSettingsForAppData, GetAppSettingsForAppErrors, GetAppSettingsForAppResponses, GetChatData, GetChatErrors, GetChatResponses, GetChildrenData, GetChildrenErrors, GetChildrenResponses, GetCollectionInformationsData, GetCollectionInformationsErrors, GetCollectionInformationsResponses, GetCollectionsForMemberData, GetCollectionsForMemberErrors, GetCollectionsForMemberResponses, GetCountForTagsData, GetCountForTagsErrors, GetCountForTagsResponses, GetCurrentAccountData, GetCurrentAccountErrors, GetCurrentAccountResponses, GetCurrentSettingsData, GetCurrentSettingsErrors, GetCurrentSettingsResponses, GetDescendantItemsData, GetDescendantItemsErrors, GetDescendantItemsResponses, GetEtherpadFromItemData, GetEtherpadFromItemErrors, GetEtherpadFromItemResponses, GetFacetsForNameData, GetFacetsForNameErrors, GetFacetsForNameResponses, GetFeaturedCollectionsData, GetFeaturedCollectionsErrors, GetFeaturedCollectionsResponses, GetFlagTypesData, GetFlagTypesErrors, GetFlagTypesResponses, GetGeolocationByItemData, GetGeolocationByItemErrors, GetGeolocationByItemResponses, GetInvitationByIdData, GetInvitationByIdErrors, GetInvitationByIdResponses, GetInvitationForItemData, GetInvitationForItemErrors, GetInvitationForItemResponses, GetItemActionsByDayData, GetItemActionsByDayErrors, GetItemActionsByDayResponses, GetItemActionsByHourData, GetItemActionsByHourErrors, GetItemActionsByHourResponses, GetItemActionsByWeekdayData, GetItemActionsByWeekdayErrors, GetItemActionsByWeekdayResponses, GetItemData, GetItemErrors, GetItemLoginSchemaData, GetItemLoginSchemaErrors, GetItemLoginSchemaResponses, GetItemLoginSchemaTypeData, GetItemLoginSchemaTypeErrors, GetItemLoginSchemaTypeResponses, GetItemMembershipsForItemData, GetItemMembershipsForItemErrors, GetItemMembershipsForItemResponses, GetItemResponses, GetItemsInBoxData, GetItemsInBoxErrors, GetItemsInBoxResponses, GetLatestItemValidationGroupData, GetLatestItemValidationGroupErrors, GetLatestItemValidationGroupResponses, GetLikesForCurrentMemberData, GetLikesForCurrentMemberErrors, GetLikesForCurrentMemberResponses, GetLikesForItemData, GetLikesForItemErrors, GetLikesForItemResponses, GetLinkMetadataData, GetLinkMetadataErrors, GetLinkMetadataResponses, GetMemberProfileData, GetMemberProfileErrors, GetMemberProfileResponses, GetMembersActionsData, GetMembersActionsErrors, GetMembersActionsResponses, GetMembershipRequestsByItemIdData, GetMembershipRequestsByItemIdResponses, GetMostLikedCollectionsData, GetMostLikedCollectionsErrors, GetMostLikedCollectionsResponses, GetMostRecentCollectionsData, GetMostRecentCollectionsErrors, GetMostRecentCollectionsResponses, GetNextMaintenanceData, GetNextMaintenanceErrors, GetNextMaintenanceResponses, GetOneMemberData, GetOneMemberErrors, GetOneMemberResponses, GetOwnBookmarkData, GetOwnBookmarkErrors, GetOwnBookmarkResponses, GetOwnMembershipRequestByItemIdData, GetOwnMembershipRequestByItemIdResponses, GetOwnMentionsData, GetOwnMentionsErrors, GetOwnMentionsResponses, GetOwnMostUsedAppsData, GetOwnMostUsedAppsErrors, GetOwnMostUsedAppsResponses, GetOwnPasswordStatusData, GetOwnPasswordStatusResponses, GetOwnProfileData, GetOwnProfileErrors, GetOwnProfileResponses, GetOwnRecycledItemsData, GetOwnRecycledItemsErrors, GetOwnRecycledItemsResponses, GetParentItemsData, GetParentItemsErrors, GetParentItemsResponses, GetShortLinkAvailabilityData, GetShortLinkAvailabilityErrors, GetShortLinkAvailabilityResponses, GetShortLinkRedirectionData, GetShortLinkRedirectionErrors, GetShortLinksForItemData, GetShortLinksForItemErrors, GetShortLinksForItemResponses, GetStorageData, GetStorageErrors, GetStorageFilesData, GetStorageFilesErrors, GetStorageFilesResponses, GetStorageResponses, GetTagsForItemData, GetTagsForItemErrors, GetTagsForItemResponses, GetUrlData, GetUrlErrors, GetUrlResponses, GraaspZipExportData, GraaspZipExportErrors, GraaspZipExportResponses, HealthData, HealthResponses, ImportH5pData, ImportH5pErrors, ImportH5pResponses, ImportZipData, ImportZipErrors, ImportZipResponses, InviteFromCsvData, InviteFromCsvErrors, InviteFromCsvResponses, InviteFromCsvWithTemplateData, InviteFromCsvWithTemplateErrors, InviteFromCsvWithTemplateResponses, LoginData, LoginErrors, LoginOrRegisterAsGuestData, LoginOrRegisterAsGuestErrors, LoginOrRegisterAsGuestResponses, LoginResponses, MarketingEmailsSubscribeData, MarketingEmailsSubscribeErrors, MarketingEmailsSubscribeResponses, MarketingEmailsUnsubscribeData, MarketingEmailsUnsubscribeErrors, MarketingEmailsUnsubscribeResponses, MoveManyItemsData, MoveManyItemsErrors, MoveManyItemsResponses, PagesWebsockets2Data, PagesWebsockets2Responses, PagesWebsocketsData, PagesWebsocketsResponses, PatchChangeEmailData, PatchChangeEmailErrors, PatchChangeEmailResponses, PatchChatMessageData, PatchChatMessageErrors, PatchChatMessageResponses, PatchMentionData, PatchMentionErrors, PatchMentionResponses, PostActionData, PostActionErrors, PostActionResponses, PostApiItemsByIdThumbnailsData, PostApiItemsByIdThumbnailsErrors, PostApiItemsByIdThumbnailsResponses, PostApiMembersAvatarData, PostApiMembersAvatarResponses, PostChangeEmailData, PostChangeEmailErrors, PostChangeEmailResponses, PublishItemData, PublishItemErrors, PublishItemResponses, PutGeolocationData, PutGeolocationErrors, PutGeolocationResponses, RecycleManyItemsData, RecycleManyItemsErrors, RecycleManyItemsResponses, RegisterData, RegisterErrors, RegisterResponses, ReorderItemData, ReorderItemErrors, ReorderItemResponses, RequestPasswordResetLinkData, RequestPasswordResetLinkErrors, RequestPasswordResetLinkResponses, ResetPasswordData, ResetPasswordErrors, ResetPasswordResponses, RestoreManyItemsData, RestoreManyItemsErrors, RestoreManyItemsResponses, SendInvitationData, SendInvitationErrors, SendInvitationResponses, SignInWithPasswordData, SignInWithPasswordErrors, SignInWithPasswordResponses, SignOutData, SignOutErrors, SignOutResponses, UnpublishItemData, UnpublishItemErrors, UnpublishItemResponses, UpdateAppData, UpdateAppDataData, UpdateAppDataErrors, UpdateAppDataResponses, UpdateAppErrors, UpdateAppResponses, UpdateAppSettingData, UpdateAppSettingErrors, UpdateAppSettingResponses, UpdateCurrentAccountData, UpdateCurrentAccountErrors, UpdateCurrentAccountResponses, UpdateDocumentData, UpdateDocumentErrors, UpdateDocumentResponses, UpdateEtherpadData, UpdateEtherpadErrors, UpdateEtherpadResponses, UpdateFileData, UpdateFileErrors, UpdateFileResponses, UpdateFolderData, UpdateFolderErrors, UpdateFolderResponses, UpdateInvitationData, UpdateInvitationErrors, UpdateInvitationResponses, UpdateItemData, UpdateItemErrors, UpdateItemLoginSchemaData, UpdateItemLoginSchemaErrors, UpdateItemLoginSchemaResponses, UpdateItemMembershipData, UpdateItemMembershipErrors, UpdateItemMembershipResponses, UpdateItemResponses, UpdateLinkData, UpdateLinkErrors, UpdateLinkResponses, UpdateOwnProfileData, UpdateOwnProfileErrors, UpdateOwnProfileResponses, UpdatePasswordData, UpdatePasswordErrors, UpdatePasswordResponses, UpdateShortcutData, UpdateShortcutErrors, UpdateShortcutResponses, UpdateShortLinkData, UpdateShortLinkErrors, UpdateShortLinkResponses, UploadFileData, UploadFileErrors, UploadFileResponses, ValidateItemData, ValidateItemErrors, ValidateItemResponses } from './types.gen'; export type Options = Options2 & { /** @@ -1258,13 +1258,6 @@ export const getApiItemsPublicationByItemIdStatus = (options?: Options) => { - return (options?.client ?? client).get({ - url: '/api/items/h5p-assets/integration.html', - ...options - }); -}; - /** * Import H5P file * Import H5P file and create corresponding item. @@ -1333,7 +1326,7 @@ export const importZip = (options?: Option * Download non-folder content. Return raw file for single item. */ export const downloadFile = (options: Options) => { - return (options.client ?? client).post({ + return (options.client ?? client).get({ url: '/api/items/{itemId}/download-file', ...options }); diff --git a/src/openapi/client/types.gen.ts b/src/openapi/client/types.gen.ts index 692838199..d02a3da6e 100644 --- a/src/openapi/client/types.gen.ts +++ b/src/openapi/client/types.gen.ts @@ -85,52 +85,6 @@ export type NullableAugmentedAccount = null | { type: AccountTypeGuest; }; -/** - * Item - * Smallest unit of a learning collection - */ -export type Item = { - id: string; - name: string; - description?: null | string; - type: string; - path: string; - lang: string; - extra: { - [key: string]: unknown; - }; - /** - * Item settings - * Parameters, mostly visual, common to all types of items. - */ - settings: { - /** - * @deprecated - */ - lang?: string; - isPinned?: boolean; - /** - * @deprecated - */ - tags?: Array; - showChatbox?: boolean; - isResizable?: boolean; - hasThumbnail?: boolean; - ccLicenseAdaption?: 'CC BY' | 'CC BY-NC' | 'CC BY-SA' | 'CC BY-NC-SA' | 'CC BY-ND' | 'CC BY-NC-ND' | 'CC0'; - displayCoEditors?: boolean; - descriptionPlacement?: 'above' | 'below'; - isCollapsible?: boolean; - enableSaveActions?: boolean; - showLinkIframe?: boolean; - showLinkButton?: boolean; - maxWidth?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'; - alignment?: 'center' | 'left' | 'right'; - }; - creator?: NullableMinimalAccount; - createdAt: string; - updatedAt: string; -}; - /** * Member * Member sharable information @@ -138,7 +92,6 @@ export type Item = { export type Member = { id: string; name: string; - email: string; }; /** @@ -148,7 +101,6 @@ export type Member = { export type NullableMember = null | { id: string; name: string; - email: string; }; /** @@ -244,6 +196,404 @@ export type CurrentSettings = { enableSaveActions: boolean; }; +/** + * Generic Item + */ +export type GenericItem = { + id: string; + name: string; + description: null | string; + path: string; + lang: string; + /** + * Item settings + * Parameters, mostly visual, common to all types of items. + */ + settings: { + /** + * @deprecated + */ + lang?: string; + isPinned?: boolean; + /** + * @deprecated + */ + tags?: Array; + showChatbox?: boolean; + isResizable?: boolean; + hasThumbnail?: boolean; + ccLicenseAdaption?: 'CC BY' | 'CC BY-NC' | 'CC BY-SA' | 'CC BY-NC-SA' | 'CC BY-ND' | 'CC BY-NC-ND' | 'CC0' | null; + displayCoEditors?: boolean; + descriptionPlacement?: 'above' | 'below'; + isCollapsible?: boolean; + enableSaveActions?: boolean; + showLinkIframe?: boolean; + showLinkButton?: boolean; + maxWidth?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'; + alignment?: 'center' | 'left' | 'right'; + }; + creator?: NullableMember; + createdAt: string; + updatedAt: string; +} & { + type: ItemType; + extra: { + [key: string]: unknown; + }; +}; + +/** + * App Item + * Item of type app, represents an interactive application that can access to the app API. + */ +export type AppItem = { + id: string; + name: string; + description: null | string; + path: string; + lang: string; + /** + * Item settings + * Parameters, mostly visual, common to all types of items. + */ + settings: { + /** + * @deprecated + */ + lang?: string; + isPinned?: boolean; + /** + * @deprecated + */ + tags?: Array; + showChatbox?: boolean; + isResizable?: boolean; + hasThumbnail?: boolean; + ccLicenseAdaption?: 'CC BY' | 'CC BY-NC' | 'CC BY-SA' | 'CC BY-NC-SA' | 'CC BY-ND' | 'CC BY-NC-ND' | 'CC0' | null; + displayCoEditors?: boolean; + descriptionPlacement?: 'above' | 'below'; + isCollapsible?: boolean; + enableSaveActions?: boolean; + showLinkIframe?: boolean; + showLinkButton?: boolean; + maxWidth?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'; + alignment?: 'center' | 'left' | 'right'; + }; + creator?: NullableMember; + createdAt: string; + updatedAt: string; + type: 'app'; + extra: { + app: { + url: string; + }; + }; +}; + +/** + * Document Item + * Item of type document, represents a text. + */ +export type DocumentItem = { + id: string; + name: string; + description: null | string; + path: string; + lang: string; + /** + * Item settings + * Parameters, mostly visual, common to all types of items. + */ + settings: { + /** + * @deprecated + */ + lang?: string; + isPinned?: boolean; + /** + * @deprecated + */ + tags?: Array; + showChatbox?: boolean; + isResizable?: boolean; + hasThumbnail?: boolean; + ccLicenseAdaption?: 'CC BY' | 'CC BY-NC' | 'CC BY-SA' | 'CC BY-NC-SA' | 'CC BY-ND' | 'CC BY-NC-ND' | 'CC0' | null; + displayCoEditors?: boolean; + descriptionPlacement?: 'above' | 'below'; + isCollapsible?: boolean; + enableSaveActions?: boolean; + showLinkIframe?: boolean; + showLinkButton?: boolean; + maxWidth?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'; + alignment?: 'center' | 'left' | 'right'; + }; + creator?: NullableMember; + createdAt: string; + updatedAt: string; + type: 'document'; + extra: { + document: { + content: string; + flavor?: 'none' | 'info' | 'success' | 'warning' | 'error' | 'none' | 'info' | 'success' | 'warning' | 'error'; + isRaw?: boolean; + }; + }; +}; + +/** + * Embedded Link Item + * Item of type embedded link, represents a resource to an external website. + */ +export type EmbeddedLinkItem = { + id: string; + name: string; + description: null | string; + path: string; + lang: string; + settings: { + /** + * @deprecated + */ + lang?: string; + isPinned?: boolean; + /** + * @deprecated + */ + tags?: Array; + showChatbox?: boolean; + isResizable?: boolean; + hasThumbnail?: boolean; + ccLicenseAdaption?: 'CC BY' | 'CC BY-NC' | 'CC BY-SA' | 'CC BY-NC-SA' | 'CC BY-ND' | 'CC BY-NC-ND' | 'CC0' | null; + displayCoEditors?: boolean; + descriptionPlacement?: 'above' | 'below'; + isCollapsible?: boolean; + enableSaveActions?: boolean; + showLinkIframe?: boolean; + showLinkButton?: boolean; + maxWidth?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'; + alignment?: 'center' | 'left' | 'right'; + } & { + showLinkIframe?: boolean; + showLinkButton?: boolean; + }; + creator?: NullableMember; + createdAt: string; + updatedAt: string; + type: 'embeddedLink'; + extra: { + embeddedLink: { + url: string; + thumbnails?: Array; + icons?: Array; + html?: string; + description?: string; + title?: string; + }; + }; +}; + +/** + * Etherpad Item + */ +export type EtherpadItem = { + id: string; + name: string; + description: null | string; + path: string; + lang: string; + /** + * Item settings + * Parameters, mostly visual, common to all types of items. + */ + settings: { + /** + * @deprecated + */ + lang?: string; + isPinned?: boolean; + /** + * @deprecated + */ + tags?: Array; + showChatbox?: boolean; + isResizable?: boolean; + hasThumbnail?: boolean; + ccLicenseAdaption?: 'CC BY' | 'CC BY-NC' | 'CC BY-SA' | 'CC BY-NC-SA' | 'CC BY-ND' | 'CC BY-NC-ND' | 'CC0' | null; + displayCoEditors?: boolean; + descriptionPlacement?: 'above' | 'below'; + isCollapsible?: boolean; + enableSaveActions?: boolean; + showLinkIframe?: boolean; + showLinkButton?: boolean; + maxWidth?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'; + alignment?: 'center' | 'left' | 'right'; + }; + creator?: NullableMember; + createdAt: string; + updatedAt: string; + type: 'etherpad'; + extra: { + etherpad: { + padID: string; + groupID: string; + readerPermission?: 'read' | 'write'; + }; + }; +}; + +/** + * File Item + * Item of type file, represents a file. + */ +export type FileItem = { + id: string; + name: string; + description: null | string; + path: string; + lang: string; + /** + * Item settings + * Parameters, mostly visual, common to all types of items. + */ + settings: { + /** + * @deprecated + */ + lang?: string; + isPinned?: boolean; + /** + * @deprecated + */ + tags?: Array; + showChatbox?: boolean; + isResizable?: boolean; + hasThumbnail?: boolean; + ccLicenseAdaption?: 'CC BY' | 'CC BY-NC' | 'CC BY-SA' | 'CC BY-NC-SA' | 'CC BY-ND' | 'CC BY-NC-ND' | 'CC0' | null; + displayCoEditors?: boolean; + descriptionPlacement?: 'above' | 'below'; + isCollapsible?: boolean; + enableSaveActions?: boolean; + showLinkIframe?: boolean; + showLinkButton?: boolean; + maxWidth?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'; + alignment?: 'center' | 'left' | 'right'; + }; + creator?: NullableMember; + createdAt: string; + updatedAt: string; + type: 'file'; + extra: { + file: { + name: string; + path: string; + mimetype: string; + size: number; + altText?: string; + content: string; + }; + }; +}; + +/** + * Folder Item + */ +export type FolderItem = { + id: string; + name: string; + description: null | string; + path: string; + lang: string; + /** + * Item settings + * Parameters, mostly visual, common to all types of items. + */ + settings: { + /** + * @deprecated + */ + lang?: string; + isPinned?: boolean; + /** + * @deprecated + */ + tags?: Array; + showChatbox?: boolean; + isResizable?: boolean; + hasThumbnail?: boolean; + ccLicenseAdaption?: 'CC BY' | 'CC BY-NC' | 'CC BY-SA' | 'CC BY-NC-SA' | 'CC BY-ND' | 'CC BY-NC-ND' | 'CC0' | null; + displayCoEditors?: boolean; + descriptionPlacement?: 'above' | 'below'; + isCollapsible?: boolean; + enableSaveActions?: boolean; + showLinkIframe?: boolean; + showLinkButton?: boolean; + maxWidth?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'; + alignment?: 'center' | 'left' | 'right'; + }; + creator?: NullableMember; + createdAt: string; + updatedAt: string; + type: 'folder'; + extra: { + folder: { + isCapsule?: boolean; + /** + * @deprecated + */ + childrenOrder?: Array; + }; + }; +}; + +/** + * H5P Item + */ +export type H5pItem = { + id: string; + name: string; + description: null | string; + path: string; + lang: string; + /** + * Item settings + * Parameters, mostly visual, common to all types of items. + */ + settings: { + /** + * @deprecated + */ + lang?: string; + isPinned?: boolean; + /** + * @deprecated + */ + tags?: Array; + showChatbox?: boolean; + isResizable?: boolean; + hasThumbnail?: boolean; + ccLicenseAdaption?: 'CC BY' | 'CC BY-NC' | 'CC BY-SA' | 'CC BY-NC-SA' | 'CC BY-ND' | 'CC BY-NC-ND' | 'CC0' | null; + displayCoEditors?: boolean; + descriptionPlacement?: 'above' | 'below'; + isCollapsible?: boolean; + enableSaveActions?: boolean; + showLinkIframe?: boolean; + showLinkButton?: boolean; + maxWidth?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'; + alignment?: 'center' | 'left' | 'right'; + }; + creator?: NullableMember; + createdAt: string; + updatedAt: string; + type: 'h5p'; + extra: { + h5p: { + contentId: string; + h5pFilePath: string; + contentFilePath: string; + }; + }; +}; + /** * Item Visibility * Visibility attached to an item and its descendants. @@ -257,25 +607,107 @@ export type ItemVisibility = { }; /** - * Packed Item - * Item with additional information + * Page Item + */ +export type PageItem = { + id: string; + name: string; + description: null | string; + path: string; + lang: string; + /** + * Item settings + * Parameters, mostly visual, common to all types of items. + */ + settings: { + /** + * @deprecated + */ + lang?: string; + isPinned?: boolean; + /** + * @deprecated + */ + tags?: Array; + showChatbox?: boolean; + isResizable?: boolean; + hasThumbnail?: boolean; + ccLicenseAdaption?: 'CC BY' | 'CC BY-NC' | 'CC BY-SA' | 'CC BY-NC-SA' | 'CC BY-ND' | 'CC BY-NC-ND' | 'CC0' | null; + displayCoEditors?: boolean; + descriptionPlacement?: 'above' | 'below'; + isCollapsible?: boolean; + enableSaveActions?: boolean; + showLinkIframe?: boolean; + showLinkButton?: boolean; + maxWidth?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'; + alignment?: 'center' | 'left' | 'right'; + }; + creator?: NullableMember; + createdAt: string; + updatedAt: string; + type: 'page'; + extra: { + [key: string]: never; + }; +}; + +/** + * Shortcut Item */ -export type PackedItem = { +export type ShortcutItem = { id: string; name: string; - description?: null | string; - type: ItemType; + description: null | string; path: string; lang: string; - extra: { - [key: string]: unknown; - }; + /** + * Item settings + * Parameters, mostly visual, common to all types of items. + */ settings: { - [key: string]: unknown; + /** + * @deprecated + */ + lang?: string; + isPinned?: boolean; + /** + * @deprecated + */ + tags?: Array; + showChatbox?: boolean; + isResizable?: boolean; + hasThumbnail?: boolean; + ccLicenseAdaption?: 'CC BY' | 'CC BY-NC' | 'CC BY-SA' | 'CC BY-NC-SA' | 'CC BY-ND' | 'CC BY-NC-ND' | 'CC0' | null; + displayCoEditors?: boolean; + descriptionPlacement?: 'above' | 'below'; + isCollapsible?: boolean; + enableSaveActions?: boolean; + showLinkIframe?: boolean; + showLinkButton?: boolean; + maxWidth?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'; + alignment?: 'center' | 'left' | 'right'; }; - creator: NullableMember; + creator?: NullableMember; createdAt: string; updatedAt: string; + type: 'shortcut'; + extra: { + shortcut: { + target: string; + }; + }; +}; + +/** + * Item + */ +export type Item = AppItem | DocumentItem | EmbeddedLinkItem | EtherpadItem | FileItem | FolderItem | H5pItem | PageItem | ShortcutItem; + +/** + * Packed Item + * Item with additional information + */ +export type PackedItem = (AppItem | DocumentItem | EmbeddedLinkItem | EtherpadItem | FileItem | FolderItem | H5pItem | PageItem | ShortcutItem) & { permission: PermissionLevel | null; hidden?: ItemVisibility; public?: ItemVisibility; @@ -376,7 +808,7 @@ export type ItemLoginSchema = { * Item login status, which can be enabled, frozen, or disabled. Item login cannot be deleted, an item login can be disabled instead to prevent deleting associated guest accounts. */ status: 'active' | 'disabled' | 'freeze'; - item?: Item; + item?: GenericItem; createdAt: string; updatedAt: string; }; @@ -388,7 +820,7 @@ export type ItemLoginSchema = { export type ItemMembership = { id: string; account: AugmentedAccount; - item: Item; + item: GenericItem; permission: PermissionLevel; creator?: NullableAugmentedAccount; createdAt: string; @@ -414,7 +846,7 @@ export type RawItemMembership = { */ export type CompleteMembershipRequest = { member: Member; - item: Item; + item: GenericItem; createdAt: string; }; @@ -466,7 +898,7 @@ export type AppActionLegacy = { export type AppData = { id: string; account: MinimalAccount; - item: Item; + item: GenericItem; data: { [key: string]: unknown; }; @@ -484,7 +916,7 @@ export type AppData = { export type AppDataWithLegacyProps = { id: string; account: MinimalAccount; - item: Item; + item: GenericItem; data: { [key: string]: unknown; }; @@ -524,7 +956,7 @@ export type Invitation = { email: string; name?: null | string; permission: PermissionLevel; - item: Item; + item: GenericItem; createdAt: string; updatedAt: string; }; @@ -559,7 +991,7 @@ export type PackedBookmark = { */ export type ItemFlag = { id: string; - item: Item; + item: GenericItem; type: 'inappropriate-content' | 'hate-speech' | 'fraud-plagiarism' | 'spam' | 'targeted-harassment' | 'false-information'; creator: NullableMinimalAccount; createdAt: string; @@ -571,7 +1003,7 @@ export type ItemFlag = { */ export type ItemLike = { id: string; - item: Item; + item: GenericItem; }; /** @@ -594,6 +1026,17 @@ export type RawItemLike = { createdAt: string; }; +/** + * Item Published + * Information of a published item + */ +export type ItemPublished = { + id: string; + item: GenericItem; + creator: NullableMember; + createdAt: string; +}; + /** * Search Hit */ @@ -644,13 +1087,31 @@ export type SearchHit = { }; }; +/** + * Item Validation Group + * Group of validations for an item, without nested item + */ +export type ItemValidationGroup = { + id: string; + item: GenericItem; + createdAt: string; + itemValidations: Array<{ + id: string; + process: 'bad-words-detection' | 'image-classification'; + status: 'success' | 'failure' | 'pending' | 'pending-manual'; + result: null | string; + createdAt: string; + updatedAt: string; + }>; +}; + /** * Recycled Item Data * Instance representing a deleted item and its deleted descendants. A recycled item is not permanently deleted, it's still possible to recover it. */ export type RecycledItemData = { id: string; - item: Item; + item: GenericItem; createdAt: string; }; @@ -1721,7 +2182,7 @@ export type GetAppContextResponses = { * App context */ 200: { - item: Item; + item: AppItem; members: Array; }; }; @@ -2494,10 +2955,6 @@ export type GetCollectionInformationsResponses = { * Default Response */ 200: null | { - id: string; - item: Item; - creator: NullableMember; - createdAt: string; totalViews: number; }; }; @@ -2976,22 +3433,15 @@ export type CreateShortcutError = CreateShortcutErrors[keyof CreateShortcutError export type CreateShortcutResponses = { /** + * Shortcut Item * Default Response */ 200: { id: string; name: string; - description?: null | string; - type: string; + description: null | string; path: string; lang: string; - extra: { - [key: string]: unknown; - } & { - shortcut: { - target: string; - }; - }; /** * Item settings * Parameters, mostly visual, common to all types of items. @@ -3009,7 +3459,7 @@ export type CreateShortcutResponses = { showChatbox?: boolean; isResizable?: boolean; hasThumbnail?: boolean; - ccLicenseAdaption?: 'CC BY' | 'CC BY-NC' | 'CC BY-SA' | 'CC BY-NC-SA' | 'CC BY-ND' | 'CC BY-NC-ND' | 'CC0'; + ccLicenseAdaption?: 'CC BY' | 'CC BY-NC' | 'CC BY-SA' | 'CC BY-NC-SA' | 'CC BY-ND' | 'CC BY-NC-ND' | 'CC0' | null; displayCoEditors?: boolean; descriptionPlacement?: 'above' | 'below'; isCollapsible?: boolean; @@ -3019,15 +3469,24 @@ export type CreateShortcutResponses = { maxWidth?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'; alignment?: 'center' | 'left' | 'right'; }; - creator?: NullableMinimalAccount; + creator?: NullableMember; createdAt: string; updatedAt: string; + type: 'shortcut'; + extra: { + shortcut: { + target: string; + }; + }; }; }; export type CreateShortcutResponse = CreateShortcutResponses[keyof CreateShortcutResponses]; export type UpdateShortcutData = { + /** + * Shortcut Item + */ body?: { name?: string; description?: null | string; @@ -3050,22 +3509,15 @@ export type UpdateShortcutError = UpdateShortcutErrors[keyof UpdateShortcutError export type UpdateShortcutResponses = { /** + * Shortcut Item * Default Response */ 200: { id: string; name: string; - description?: null | string; - type: string; + description: null | string; path: string; lang: string; - extra: { - [key: string]: unknown; - } & { - shortcut: { - target: string; - }; - }; /** * Item settings * Parameters, mostly visual, common to all types of items. @@ -3083,7 +3535,7 @@ export type UpdateShortcutResponses = { showChatbox?: boolean; isResizable?: boolean; hasThumbnail?: boolean; - ccLicenseAdaption?: 'CC BY' | 'CC BY-NC' | 'CC BY-SA' | 'CC BY-NC-SA' | 'CC BY-ND' | 'CC BY-NC-ND' | 'CC0'; + ccLicenseAdaption?: 'CC BY' | 'CC BY-NC' | 'CC BY-SA' | 'CC BY-NC-SA' | 'CC BY-ND' | 'CC BY-NC-ND' | 'CC0' | null; displayCoEditors?: boolean; descriptionPlacement?: 'above' | 'below'; isCollapsible?: boolean; @@ -3093,9 +3545,15 @@ export type UpdateShortcutResponses = { maxWidth?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'; alignment?: 'center' | 'left' | 'right'; }; - creator?: NullableMinimalAccount; + creator?: NullableMember; createdAt: string; updatedAt: string; + type: 'shortcut'; + extra: { + shortcut: { + target: string; + }; + }; }; }; @@ -3243,8 +3701,8 @@ export type GetUrlResponse = GetUrlResponses[keyof GetUrlResponses]; export type UpdateFileData = { /** - * Item - * Smallest unit of a learning collection + * File Item + * Item of type file, represents a file. */ body?: { name?: string; @@ -3267,7 +3725,7 @@ export type UpdateFileData = { showChatbox?: boolean; isResizable?: boolean; hasThumbnail?: boolean; - ccLicenseAdaption?: 'CC BY' | 'CC BY-NC' | 'CC BY-SA' | 'CC BY-NC-SA' | 'CC BY-ND' | 'CC BY-NC-ND' | 'CC0'; + ccLicenseAdaption?: 'CC BY' | 'CC BY-NC' | 'CC BY-SA' | 'CC BY-NC-SA' | 'CC BY-ND' | 'CC BY-NC-ND' | 'CC0' | null; displayCoEditors?: boolean; descriptionPlacement?: 'above' | 'below'; isCollapsible?: boolean; @@ -3379,7 +3837,7 @@ export type CreateFolderData = { showChatbox?: boolean; isResizable?: boolean; hasThumbnail?: boolean; - ccLicenseAdaption?: 'CC BY' | 'CC BY-NC' | 'CC BY-SA' | 'CC BY-NC-SA' | 'CC BY-ND' | 'CC BY-NC-ND' | 'CC0'; + ccLicenseAdaption?: 'CC BY' | 'CC BY-NC' | 'CC BY-SA' | 'CC BY-NC-SA' | 'CC BY-ND' | 'CC BY-NC-ND' | 'CC0' | null; displayCoEditors?: boolean; descriptionPlacement?: 'above' | 'below'; isCollapsible?: boolean; @@ -3389,7 +3847,7 @@ export type CreateFolderData = { maxWidth?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'; alignment?: 'center' | 'left' | 'right'; }; - geolocation?: GeoCoordinate; + geolocation?: unknown; }; path?: never; query?: { @@ -3410,22 +3868,15 @@ export type CreateFolderError = CreateFolderErrors[keyof CreateFolderErrors]; export type CreateFolderResponses = { /** + * Folder Item * Default Response */ 200: { id: string; name: string; - description?: null | string; - type: string; + description: null | string; path: string; lang: string; - extra: { - [key: string]: unknown; - } & { - folder: { - isCapsule?: boolean; - }; - }; /** * Item settings * Parameters, mostly visual, common to all types of items. @@ -3443,7 +3894,7 @@ export type CreateFolderResponses = { showChatbox?: boolean; isResizable?: boolean; hasThumbnail?: boolean; - ccLicenseAdaption?: 'CC BY' | 'CC BY-NC' | 'CC BY-SA' | 'CC BY-NC-SA' | 'CC BY-ND' | 'CC BY-NC-ND' | 'CC0'; + ccLicenseAdaption?: 'CC BY' | 'CC BY-NC' | 'CC BY-SA' | 'CC BY-NC-SA' | 'CC BY-ND' | 'CC BY-NC-ND' | 'CC0' | null; displayCoEditors?: boolean; descriptionPlacement?: 'above' | 'below'; isCollapsible?: boolean; @@ -3453,15 +3904,28 @@ export type CreateFolderResponses = { maxWidth?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'; alignment?: 'center' | 'left' | 'right'; }; - creator?: NullableMinimalAccount; + creator?: NullableMember; createdAt: string; updatedAt: string; + type: 'folder'; + extra: { + folder: { + isCapsule?: boolean; + /** + * @deprecated + */ + childrenOrder?: Array; + }; + }; }; }; export type CreateFolderResponse = CreateFolderResponses[keyof CreateFolderResponses]; export type UpdateFolderData = { + /** + * Folder Item + */ body?: { name?: string; description?: null | string; @@ -3483,7 +3947,7 @@ export type UpdateFolderData = { showChatbox?: boolean; isResizable?: boolean; hasThumbnail?: boolean; - ccLicenseAdaption?: 'CC BY' | 'CC BY-NC' | 'CC BY-SA' | 'CC BY-NC-SA' | 'CC BY-ND' | 'CC BY-NC-ND' | 'CC0'; + ccLicenseAdaption?: 'CC BY' | 'CC BY-NC' | 'CC BY-SA' | 'CC BY-NC-SA' | 'CC BY-ND' | 'CC BY-NC-ND' | 'CC0' | null; displayCoEditors?: boolean; descriptionPlacement?: 'above' | 'below'; isCollapsible?: boolean; @@ -3512,22 +3976,15 @@ export type UpdateFolderError = UpdateFolderErrors[keyof UpdateFolderErrors]; export type UpdateFolderResponses = { /** + * Folder Item * Default Response */ 200: { id: string; name: string; - description?: null | string; - type: string; + description: null | string; path: string; lang: string; - extra: { - [key: string]: unknown; - } & { - folder: { - isCapsule?: boolean; - }; - }; /** * Item settings * Parameters, mostly visual, common to all types of items. @@ -3545,7 +4002,7 @@ export type UpdateFolderResponses = { showChatbox?: boolean; isResizable?: boolean; hasThumbnail?: boolean; - ccLicenseAdaption?: 'CC BY' | 'CC BY-NC' | 'CC BY-SA' | 'CC BY-NC-SA' | 'CC BY-ND' | 'CC BY-NC-ND' | 'CC0'; + ccLicenseAdaption?: 'CC BY' | 'CC BY-NC' | 'CC BY-SA' | 'CC BY-NC-SA' | 'CC BY-ND' | 'CC BY-NC-ND' | 'CC0' | null; displayCoEditors?: boolean; descriptionPlacement?: 'above' | 'below'; isCollapsible?: boolean; @@ -3555,9 +4012,19 @@ export type UpdateFolderResponses = { maxWidth?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'; alignment?: 'center' | 'left' | 'right'; }; - creator?: NullableMinimalAccount; + creator?: NullableMember; createdAt: string; updatedAt: string; + type: 'folder'; + extra: { + folder: { + isCapsule?: boolean; + /** + * @deprecated + */ + childrenOrder?: Array; + }; + }; }; }; @@ -3583,22 +4050,15 @@ export type ConvertFolderToCapsuleError = ConvertFolderToCapsuleErrors[keyof Con export type ConvertFolderToCapsuleResponses = { /** + * Folder Item * Default Response */ 200: { id: string; name: string; - description?: null | string; - type: string; + description: null | string; path: string; lang: string; - extra: { - [key: string]: unknown; - } & { - folder: { - isCapsule?: boolean; - }; - }; /** * Item settings * Parameters, mostly visual, common to all types of items. @@ -3616,7 +4076,7 @@ export type ConvertFolderToCapsuleResponses = { showChatbox?: boolean; isResizable?: boolean; hasThumbnail?: boolean; - ccLicenseAdaption?: 'CC BY' | 'CC BY-NC' | 'CC BY-SA' | 'CC BY-NC-SA' | 'CC BY-ND' | 'CC BY-NC-ND' | 'CC0'; + ccLicenseAdaption?: 'CC BY' | 'CC BY-NC' | 'CC BY-SA' | 'CC BY-NC-SA' | 'CC BY-ND' | 'CC BY-NC-ND' | 'CC0' | null; displayCoEditors?: boolean; descriptionPlacement?: 'above' | 'below'; isCollapsible?: boolean; @@ -3626,9 +4086,19 @@ export type ConvertFolderToCapsuleResponses = { maxWidth?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'; alignment?: 'center' | 'left' | 'right'; }; - creator?: NullableMinimalAccount; + creator?: NullableMember; createdAt: string; updatedAt: string; + type: 'folder'; + extra: { + folder: { + isCapsule?: boolean; + /** + * @deprecated + */ + childrenOrder?: Array; + }; + }; }; }; @@ -3654,22 +4124,15 @@ export type CreateFolderWithThumbnailError = CreateFolderWithThumbnailErrors[key export type CreateFolderWithThumbnailResponses = { /** + * Folder Item * Default Response */ 200: { id: string; name: string; - description?: null | string; - type: string; + description: null | string; path: string; lang: string; - extra: { - [key: string]: unknown; - } & { - folder: { - isCapsule?: boolean; - }; - }; /** * Item settings * Parameters, mostly visual, common to all types of items. @@ -3687,7 +4150,7 @@ export type CreateFolderWithThumbnailResponses = { showChatbox?: boolean; isResizable?: boolean; hasThumbnail?: boolean; - ccLicenseAdaption?: 'CC BY' | 'CC BY-NC' | 'CC BY-SA' | 'CC BY-NC-SA' | 'CC BY-ND' | 'CC BY-NC-ND' | 'CC0'; + ccLicenseAdaption?: 'CC BY' | 'CC BY-NC' | 'CC BY-SA' | 'CC BY-NC-SA' | 'CC BY-ND' | 'CC BY-NC-ND' | 'CC0' | null; displayCoEditors?: boolean; descriptionPlacement?: 'above' | 'below'; isCollapsible?: boolean; @@ -3697,9 +4160,19 @@ export type CreateFolderWithThumbnailResponses = { maxWidth?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'; alignment?: 'center' | 'left' | 'right'; }; - creator?: NullableMinimalAccount; + creator?: NullableMember; createdAt: string; updatedAt: string; + type: 'folder'; + extra: { + folder: { + isCapsule?: boolean; + /** + * @deprecated + */ + childrenOrder?: Array; + }; + }; }; }; @@ -3727,7 +4200,7 @@ export type CreateCapsuleData = { showChatbox?: boolean; isResizable?: boolean; hasThumbnail?: boolean; - ccLicenseAdaption?: 'CC BY' | 'CC BY-NC' | 'CC BY-SA' | 'CC BY-NC-SA' | 'CC BY-ND' | 'CC BY-NC-ND' | 'CC0'; + ccLicenseAdaption?: 'CC BY' | 'CC BY-NC' | 'CC BY-SA' | 'CC BY-NC-SA' | 'CC BY-ND' | 'CC BY-NC-ND' | 'CC0' | null; displayCoEditors?: boolean; descriptionPlacement?: 'above' | 'below'; isCollapsible?: boolean; @@ -3757,22 +4230,15 @@ export type CreateCapsuleError = CreateCapsuleErrors[keyof CreateCapsuleErrors]; export type CreateCapsuleResponses = { /** + * Folder Item * Default Response */ 200: { id: string; name: string; - description?: null | string; - type: string; + description: null | string; path: string; lang: string; - extra: { - [key: string]: unknown; - } & { - folder: { - isCapsule?: boolean; - }; - }; /** * Item settings * Parameters, mostly visual, common to all types of items. @@ -3790,7 +4256,7 @@ export type CreateCapsuleResponses = { showChatbox?: boolean; isResizable?: boolean; hasThumbnail?: boolean; - ccLicenseAdaption?: 'CC BY' | 'CC BY-NC' | 'CC BY-SA' | 'CC BY-NC-SA' | 'CC BY-ND' | 'CC BY-NC-ND' | 'CC0'; + ccLicenseAdaption?: 'CC BY' | 'CC BY-NC' | 'CC BY-SA' | 'CC BY-NC-SA' | 'CC BY-ND' | 'CC BY-NC-ND' | 'CC0' | null; displayCoEditors?: boolean; descriptionPlacement?: 'above' | 'below'; isCollapsible?: boolean; @@ -3800,9 +4266,19 @@ export type CreateCapsuleResponses = { maxWidth?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'; alignment?: 'center' | 'left' | 'right'; }; - creator?: NullableMinimalAccount; + creator?: NullableMember; createdAt: string; updatedAt: string; + type: 'folder'; + extra: { + folder: { + isCapsule?: boolean; + /** + * @deprecated + */ + childrenOrder?: Array; + }; + }; }; }; @@ -3828,22 +4304,15 @@ export type ConvertCapsuleToFolderError = ConvertCapsuleToFolderErrors[keyof Con export type ConvertCapsuleToFolderResponses = { /** + * Folder Item * Default Response */ 200: { id: string; name: string; - description?: null | string; - type: string; + description: null | string; path: string; lang: string; - extra: { - [key: string]: unknown; - } & { - folder: { - isCapsule?: boolean; - }; - }; /** * Item settings * Parameters, mostly visual, common to all types of items. @@ -3861,7 +4330,7 @@ export type ConvertCapsuleToFolderResponses = { showChatbox?: boolean; isResizable?: boolean; hasThumbnail?: boolean; - ccLicenseAdaption?: 'CC BY' | 'CC BY-NC' | 'CC BY-SA' | 'CC BY-NC-SA' | 'CC BY-ND' | 'CC BY-NC-ND' | 'CC0'; + ccLicenseAdaption?: 'CC BY' | 'CC BY-NC' | 'CC BY-SA' | 'CC BY-NC-SA' | 'CC BY-ND' | 'CC BY-NC-ND' | 'CC0' | null; displayCoEditors?: boolean; descriptionPlacement?: 'above' | 'below'; isCollapsible?: boolean; @@ -3871,9 +4340,19 @@ export type ConvertCapsuleToFolderResponses = { maxWidth?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'; alignment?: 'center' | 'left' | 'right'; }; - creator?: NullableMinimalAccount; + creator?: NullableMember; createdAt: string; updatedAt: string; + type: 'folder'; + extra: { + folder: { + isCapsule?: boolean; + /** + * @deprecated + */ + childrenOrder?: Array; + }; + }; }; }; @@ -3901,7 +4380,7 @@ export type CreateAppData = { showChatbox?: boolean; isResizable?: boolean; hasThumbnail?: boolean; - ccLicenseAdaption?: 'CC BY' | 'CC BY-NC' | 'CC BY-SA' | 'CC BY-NC-SA' | 'CC BY-ND' | 'CC BY-NC-ND' | 'CC0'; + ccLicenseAdaption?: 'CC BY' | 'CC BY-NC' | 'CC BY-SA' | 'CC BY-NC-SA' | 'CC BY-ND' | 'CC BY-NC-ND' | 'CC0' | null; displayCoEditors?: boolean; descriptionPlacement?: 'above' | 'below'; isCollapsible?: boolean; @@ -3912,7 +4391,7 @@ export type CreateAppData = { alignment?: 'center' | 'left' | 'right'; }; url: string; - geolocation?: GeoCoordinate; + geolocation?: unknown; }; path?: never; query?: { @@ -3939,17 +4418,9 @@ export type CreateAppResponses = { 200: { id: string; name: string; - description?: null | string; - type: string; + description: null | string; path: string; lang: string; - extra: { - [key: string]: unknown; - } & { - app: { - url: string; - }; - }; /** * Item settings * Parameters, mostly visual, common to all types of items. @@ -3967,7 +4438,7 @@ export type CreateAppResponses = { showChatbox?: boolean; isResizable?: boolean; hasThumbnail?: boolean; - ccLicenseAdaption?: 'CC BY' | 'CC BY-NC' | 'CC BY-SA' | 'CC BY-NC-SA' | 'CC BY-ND' | 'CC BY-NC-ND' | 'CC0'; + ccLicenseAdaption?: 'CC BY' | 'CC BY-NC' | 'CC BY-SA' | 'CC BY-NC-SA' | 'CC BY-ND' | 'CC BY-NC-ND' | 'CC0' | null; displayCoEditors?: boolean; descriptionPlacement?: 'above' | 'below'; isCollapsible?: boolean; @@ -3977,9 +4448,15 @@ export type CreateAppResponses = { maxWidth?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'; alignment?: 'center' | 'left' | 'right'; }; - creator?: NullableMinimalAccount; + creator?: NullableMember; createdAt: string; updatedAt: string; + type: 'app'; + extra: { + app: { + url: string; + }; + }; }; }; @@ -4007,7 +4484,7 @@ export type UpdateAppData = { showChatbox?: boolean; isResizable?: boolean; hasThumbnail?: boolean; - ccLicenseAdaption?: 'CC BY' | 'CC BY-NC' | 'CC BY-SA' | 'CC BY-NC-SA' | 'CC BY-ND' | 'CC BY-NC-ND' | 'CC0'; + ccLicenseAdaption?: 'CC BY' | 'CC BY-NC' | 'CC BY-SA' | 'CC BY-NC-SA' | 'CC BY-ND' | 'CC BY-NC-ND' | 'CC0' | null; displayCoEditors?: boolean; descriptionPlacement?: 'above' | 'below'; isCollapsible?: boolean; @@ -4042,17 +4519,9 @@ export type UpdateAppResponses = { 200: { id: string; name: string; - description?: null | string; - type: string; + description: null | string; path: string; lang: string; - extra: { - [key: string]: unknown; - } & { - app: { - url: string; - }; - }; /** * Item settings * Parameters, mostly visual, common to all types of items. @@ -4070,7 +4539,7 @@ export type UpdateAppResponses = { showChatbox?: boolean; isResizable?: boolean; hasThumbnail?: boolean; - ccLicenseAdaption?: 'CC BY' | 'CC BY-NC' | 'CC BY-SA' | 'CC BY-NC-SA' | 'CC BY-ND' | 'CC BY-NC-ND' | 'CC0'; + ccLicenseAdaption?: 'CC BY' | 'CC BY-NC' | 'CC BY-SA' | 'CC BY-NC-SA' | 'CC BY-ND' | 'CC BY-NC-ND' | 'CC0' | null; displayCoEditors?: boolean; descriptionPlacement?: 'above' | 'below'; isCollapsible?: boolean; @@ -4080,9 +4549,15 @@ export type UpdateAppResponses = { maxWidth?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'; alignment?: 'center' | 'left' | 'right'; }; - creator?: NullableMinimalAccount; + creator?: NullableMember; createdAt: string; updatedAt: string; + type: 'app'; + extra: { + app: { + url: string; + }; + }; }; }; @@ -4290,20 +4765,6 @@ export type GetApiItemsPublicationByItemIdStatusResponses = { 200: unknown; }; -export type GetApiItemsH5pAssetsIntegrationHtmlData = { - body?: never; - path?: never; - query?: never; - url: '/api/items/h5p-assets/integration.html'; -}; - -export type GetApiItemsH5pAssetsIntegrationHtmlResponses = { - /** - * Default Response - */ - 200: unknown; -}; - export type ImportH5pData = { body?: never; path?: never; @@ -4331,9 +4792,9 @@ export type ImportH5pError = ImportH5pErrors[keyof ImportH5pErrors]; export type ImportH5pResponses = { /** - * Smallest unit of a learning collection + * Default Response */ - 200: Item; + 200: H5pItem; }; export type ImportH5pResponse = ImportH5pResponses[keyof ImportH5pResponses]; @@ -4361,9 +4822,9 @@ export type CreateEtherpadError = CreateEtherpadErrors[keyof CreateEtherpadError export type CreateEtherpadResponses = { /** - * Smallest unit of a learning collection + * Successful Response */ - 200: Item; + 204: void; }; export type CreateEtherpadResponse = CreateEtherpadResponses[keyof CreateEtherpadResponses]; @@ -4390,7 +4851,7 @@ export type UpdateEtherpadData = { showChatbox?: boolean; isResizable?: boolean; hasThumbnail?: boolean; - ccLicenseAdaption?: 'CC BY' | 'CC BY-NC' | 'CC BY-SA' | 'CC BY-NC-SA' | 'CC BY-ND' | 'CC BY-NC-ND' | 'CC0'; + ccLicenseAdaption?: 'CC BY' | 'CC BY-NC' | 'CC BY-SA' | 'CC BY-NC-SA' | 'CC BY-ND' | 'CC BY-NC-ND' | 'CC0' | null; displayCoEditors?: boolean; descriptionPlacement?: 'above' | 'below'; isCollapsible?: boolean; @@ -4599,11 +5060,7 @@ export type CreateLinkData = { body: { name: string; description?: null | string; - lang?: string; - /** - * Item settings - * Parameters, mostly visual, common to all types of items. - */ + lang?: string; settings?: { /** * @deprecated @@ -4617,7 +5074,7 @@ export type CreateLinkData = { showChatbox?: boolean; isResizable?: boolean; hasThumbnail?: boolean; - ccLicenseAdaption?: 'CC BY' | 'CC BY-NC' | 'CC BY-SA' | 'CC BY-NC-SA' | 'CC BY-ND' | 'CC BY-NC-ND' | 'CC0'; + ccLicenseAdaption?: 'CC BY' | 'CC BY-NC' | 'CC BY-SA' | 'CC BY-NC-SA' | 'CC BY-ND' | 'CC BY-NC-ND' | 'CC0' | null; displayCoEditors?: boolean; descriptionPlacement?: 'above' | 'below'; isCollapsible?: boolean; @@ -4626,11 +5083,14 @@ export type CreateLinkData = { showLinkButton?: boolean; maxWidth?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'; alignment?: 'center' | 'left' | 'right'; + } & { + showLinkIframe?: boolean; + showLinkButton?: boolean; }; url: string; showLinkIframe?: boolean; showLinkButton?: boolean; - geolocation?: GeoCoordinate; + geolocation?: unknown; }; path?: never; query?: { @@ -4651,58 +5111,9 @@ export type CreateLinkError = CreateLinkErrors[keyof CreateLinkErrors]; export type CreateLinkResponses = { /** - * Embedded Link * Item of type embedded link, represents a resource to an external website. */ - 200: { - id: string; - name: string; - description?: null | string; - type: string; - path: string; - lang: string; - extra: { - [key: string]: unknown; - } & { - embeddedLink: { - url: string; - thumbnails?: Array; - icons?: Array; - html?: string; - description?: string; - title?: string; - }; - }; - settings: { - /** - * @deprecated - */ - lang?: string; - isPinned?: boolean; - /** - * @deprecated - */ - tags?: Array; - showChatbox?: boolean; - isResizable?: boolean; - hasThumbnail?: boolean; - ccLicenseAdaption?: 'CC BY' | 'CC BY-NC' | 'CC BY-SA' | 'CC BY-NC-SA' | 'CC BY-ND' | 'CC BY-NC-ND' | 'CC0'; - displayCoEditors?: boolean; - descriptionPlacement?: 'above' | 'below'; - isCollapsible?: boolean; - enableSaveActions?: boolean; - showLinkIframe?: boolean; - showLinkButton?: boolean; - maxWidth?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'; - alignment?: 'center' | 'left' | 'right'; - } & { - showLinkIframe?: boolean; - showLinkButton?: boolean; - }; - creator?: NullableMinimalAccount; - createdAt: string; - updatedAt: string; - }; + 200: EmbeddedLinkItem; }; export type CreateLinkResponse = CreateLinkResponses[keyof CreateLinkResponses]; @@ -4712,10 +5123,6 @@ export type UpdateLinkData = { name?: string; description?: null | string; lang?: string; - /** - * Item settings - * Parameters, mostly visual, common to all types of items. - */ settings?: { /** * @deprecated @@ -4729,7 +5136,7 @@ export type UpdateLinkData = { showChatbox?: boolean; isResizable?: boolean; hasThumbnail?: boolean; - ccLicenseAdaption?: 'CC BY' | 'CC BY-NC' | 'CC BY-SA' | 'CC BY-NC-SA' | 'CC BY-ND' | 'CC BY-NC-ND' | 'CC0'; + ccLicenseAdaption?: 'CC BY' | 'CC BY-NC' | 'CC BY-SA' | 'CC BY-NC-SA' | 'CC BY-ND' | 'CC BY-NC-ND' | 'CC0' | null; displayCoEditors?: boolean; descriptionPlacement?: 'above' | 'below'; isCollapsible?: boolean; @@ -4738,6 +5145,9 @@ export type UpdateLinkData = { showLinkButton?: boolean; maxWidth?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'; alignment?: 'center' | 'left' | 'right'; + } & { + showLinkIframe?: boolean; + showLinkButton?: boolean; }; url?: string; showLinkIframe?: boolean; @@ -4761,58 +5171,9 @@ export type UpdateLinkError = UpdateLinkErrors[keyof UpdateLinkErrors]; export type UpdateLinkResponses = { /** - * Embedded Link * Item of type embedded link, represents a resource to an external website. */ - 200: { - id: string; - name: string; - description?: null | string; - type: string; - path: string; - lang: string; - extra: { - [key: string]: unknown; - } & { - embeddedLink: { - url: string; - thumbnails?: Array; - icons?: Array; - html?: string; - description?: string; - title?: string; - }; - }; - settings: { - /** - * @deprecated - */ - lang?: string; - isPinned?: boolean; - /** - * @deprecated - */ - tags?: Array; - showChatbox?: boolean; - isResizable?: boolean; - hasThumbnail?: boolean; - ccLicenseAdaption?: 'CC BY' | 'CC BY-NC' | 'CC BY-SA' | 'CC BY-NC-SA' | 'CC BY-ND' | 'CC BY-NC-ND' | 'CC0'; - displayCoEditors?: boolean; - descriptionPlacement?: 'above' | 'below'; - isCollapsible?: boolean; - enableSaveActions?: boolean; - showLinkIframe?: boolean; - showLinkButton?: boolean; - maxWidth?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'; - alignment?: 'center' | 'left' | 'right'; - } & { - showLinkIframe?: boolean; - showLinkButton?: boolean; - }; - creator?: NullableMinimalAccount; - createdAt: string; - updatedAt: string; - }; + 200: EmbeddedLinkItem; }; export type UpdateLinkResponse = UpdateLinkResponses[keyof UpdateLinkResponses]; @@ -4820,39 +5181,10 @@ export type UpdateLinkResponse = UpdateLinkResponses[keyof UpdateLinkResponses]; export type CreateDocumentData = { body: { name: string; - description?: null | string; - lang?: string; - /** - * Item settings - * Parameters, mostly visual, common to all types of items. - */ - settings?: { - /** - * @deprecated - */ - lang?: string; - isPinned?: boolean; - /** - * @deprecated - */ - tags?: Array; - showChatbox?: boolean; - isResizable?: boolean; - hasThumbnail?: boolean; - ccLicenseAdaption?: 'CC BY' | 'CC BY-NC' | 'CC BY-SA' | 'CC BY-NC-SA' | 'CC BY-ND' | 'CC BY-NC-ND' | 'CC0'; - displayCoEditors?: boolean; - descriptionPlacement?: 'above' | 'below'; - isCollapsible?: boolean; - enableSaveActions?: boolean; - showLinkIframe?: boolean; - showLinkButton?: boolean; - maxWidth?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'; - alignment?: 'center' | 'left' | 'right'; - }; content: string; flavor?: 'none' | 'info' | 'success' | 'warning' | 'error'; isRaw?: boolean; - geolocation?: GeoCoordinate; + geolocation?: unknown; }; path?: never; query?: { @@ -4873,25 +5205,15 @@ export type CreateDocumentError = CreateDocumentErrors[keyof CreateDocumentError export type CreateDocumentResponses = { /** - * Document + * Document Item * Item of type document, represents a text. */ 200: { id: string; name: string; - description?: null | string; - type: string; + description: null | string; path: string; lang: string; - extra: { - [key: string]: unknown; - } & { - document: { - content: string; - flavor?: 'none' | 'info' | 'success' | 'warning' | 'error' | 'none' | 'info' | 'success' | 'warning' | 'error'; - isRaw?: boolean; - }; - }; /** * Item settings * Parameters, mostly visual, common to all types of items. @@ -4909,7 +5231,7 @@ export type CreateDocumentResponses = { showChatbox?: boolean; isResizable?: boolean; hasThumbnail?: boolean; - ccLicenseAdaption?: 'CC BY' | 'CC BY-NC' | 'CC BY-SA' | 'CC BY-NC-SA' | 'CC BY-ND' | 'CC BY-NC-ND' | 'CC0'; + ccLicenseAdaption?: 'CC BY' | 'CC BY-NC' | 'CC BY-SA' | 'CC BY-NC-SA' | 'CC BY-ND' | 'CC BY-NC-ND' | 'CC0' | null; displayCoEditors?: boolean; descriptionPlacement?: 'above' | 'below'; isCollapsible?: boolean; @@ -4919,9 +5241,17 @@ export type CreateDocumentResponses = { maxWidth?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'; alignment?: 'center' | 'left' | 'right'; }; - creator?: NullableMinimalAccount; + creator?: NullableMember; createdAt: string; updatedAt: string; + type: 'document'; + extra: { + document: { + content: string; + flavor?: 'none' | 'info' | 'success' | 'warning' | 'error' | 'none' | 'info' | 'success' | 'warning' | 'error'; + isRaw?: boolean; + }; + }; }; }; @@ -4949,7 +5279,7 @@ export type UpdateDocumentData = { showChatbox?: boolean; isResizable?: boolean; hasThumbnail?: boolean; - ccLicenseAdaption?: 'CC BY' | 'CC BY-NC' | 'CC BY-SA' | 'CC BY-NC-SA' | 'CC BY-ND' | 'CC BY-NC-ND' | 'CC0'; + ccLicenseAdaption?: 'CC BY' | 'CC BY-NC' | 'CC BY-SA' | 'CC BY-NC-SA' | 'CC BY-ND' | 'CC BY-NC-ND' | 'CC0' | null; displayCoEditors?: boolean; descriptionPlacement?: 'above' | 'below'; isCollapsible?: boolean; @@ -4981,25 +5311,15 @@ export type UpdateDocumentError = UpdateDocumentErrors[keyof UpdateDocumentError export type UpdateDocumentResponses = { /** - * Document + * Document Item * Item of type document, represents a text. */ 200: { id: string; name: string; - description?: null | string; - type: string; + description: null | string; path: string; lang: string; - extra: { - [key: string]: unknown; - } & { - document: { - content: string; - flavor?: 'none' | 'info' | 'success' | 'warning' | 'error' | 'none' | 'info' | 'success' | 'warning' | 'error'; - isRaw?: boolean; - }; - }; /** * Item settings * Parameters, mostly visual, common to all types of items. @@ -5017,7 +5337,7 @@ export type UpdateDocumentResponses = { showChatbox?: boolean; isResizable?: boolean; hasThumbnail?: boolean; - ccLicenseAdaption?: 'CC BY' | 'CC BY-NC' | 'CC BY-SA' | 'CC BY-NC-SA' | 'CC BY-ND' | 'CC BY-NC-ND' | 'CC0'; + ccLicenseAdaption?: 'CC BY' | 'CC BY-NC' | 'CC BY-SA' | 'CC BY-NC-SA' | 'CC BY-ND' | 'CC BY-NC-ND' | 'CC0' | null; displayCoEditors?: boolean; descriptionPlacement?: 'above' | 'below'; isCollapsible?: boolean; @@ -5027,9 +5347,17 @@ export type UpdateDocumentResponses = { maxWidth?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'; alignment?: 'center' | 'left' | 'right'; }; - creator?: NullableMinimalAccount; + creator?: NullableMember; createdAt: string; updatedAt: string; + type: 'document'; + extra: { + document: { + content: string; + flavor?: 'none' | 'info' | 'success' | 'warning' | 'error' | 'none' | 'info' | 'success' | 'warning' | 'error'; + isRaw?: boolean; + }; + }; }; }; @@ -5368,7 +5696,7 @@ export type GetOwnRecycledItemsResponses = { * Default Response */ 200: { - data: Array; + data: Array; pagination: { page: number; pageSize: number; @@ -5452,11 +5780,12 @@ export type GetLatestItemValidationGroupError = GetLatestItemValidationGroupErro export type GetLatestItemValidationGroupResponses = { /** + * Item Validation Group * Group of validations for an item, without nested item */ 200: null | { id: string; - item: Item; + item: GenericItem; createdAt: string; itemValidations: Array<{ id: string; @@ -6073,7 +6402,7 @@ export type GetGeolocationByItemResponses = { helperLabel: null | string; createdAt: string; updatedAt: string; - item: Item & PackedItem; + item: GenericItem & PackedItem; }; }; @@ -6149,7 +6478,7 @@ export type GetItemsInBoxResponses = { helperLabel: null | string; createdAt: string; updatedAt: string; - item: Item & PackedItem; + item: GenericItem & PackedItem; }>; }; @@ -6339,7 +6668,7 @@ export type CreatePageData = { showChatbox?: boolean; isResizable?: boolean; hasThumbnail?: boolean; - ccLicenseAdaption?: 'CC BY' | 'CC BY-NC' | 'CC BY-SA' | 'CC BY-NC-SA' | 'CC BY-ND' | 'CC BY-NC-ND' | 'CC0'; + ccLicenseAdaption?: 'CC BY' | 'CC BY-NC' | 'CC BY-SA' | 'CC BY-NC-SA' | 'CC BY-ND' | 'CC BY-NC-ND' | 'CC0' | null; displayCoEditors?: boolean; descriptionPlacement?: 'above' | 'below'; isCollapsible?: boolean; @@ -6349,7 +6678,7 @@ export type CreatePageData = { maxWidth?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'; alignment?: 'center' | 'left' | 'right'; }; - geolocation?: GeoCoordinate; + geolocation?: unknown; }; path?: never; query?: { @@ -6370,18 +6699,15 @@ export type CreatePageError = CreatePageErrors[keyof CreatePageErrors]; export type CreatePageResponses = { /** + * Page Item * Default Response */ 201: { id: string; name: string; - description?: null | string; - type: string; + description: null | string; path: string; lang: string; - extra: { - [key: string]: unknown; - } & {}; /** * Item settings * Parameters, mostly visual, common to all types of items. @@ -6399,7 +6725,7 @@ export type CreatePageResponses = { showChatbox?: boolean; isResizable?: boolean; hasThumbnail?: boolean; - ccLicenseAdaption?: 'CC BY' | 'CC BY-NC' | 'CC BY-SA' | 'CC BY-NC-SA' | 'CC BY-ND' | 'CC BY-NC-ND' | 'CC0'; + ccLicenseAdaption?: 'CC BY' | 'CC BY-NC' | 'CC BY-SA' | 'CC BY-NC-SA' | 'CC BY-ND' | 'CC BY-NC-ND' | 'CC0' | null; displayCoEditors?: boolean; descriptionPlacement?: 'above' | 'below'; isCollapsible?: boolean; @@ -6409,9 +6735,13 @@ export type CreatePageResponses = { maxWidth?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'; alignment?: 'center' | 'left' | 'right'; }; - creator?: NullableMinimalAccount; + creator?: NullableMember; createdAt: string; updatedAt: string; + type: 'page'; + extra: { + [key: string]: never; + }; }; }; @@ -6500,7 +6830,7 @@ export type CreateItemData = { showChatbox?: boolean; isResizable?: boolean; hasThumbnail?: boolean; - ccLicenseAdaption?: 'CC BY' | 'CC BY-NC' | 'CC BY-SA' | 'CC BY-NC-SA' | 'CC BY-ND' | 'CC BY-NC-ND' | 'CC0'; + ccLicenseAdaption?: 'CC BY' | 'CC BY-NC' | 'CC BY-SA' | 'CC BY-NC-SA' | 'CC BY-ND' | 'CC BY-NC-ND' | 'CC0' | null; displayCoEditors?: boolean; descriptionPlacement?: 'above' | 'below'; isCollapsible?: boolean; @@ -6538,7 +6868,7 @@ export type CreateItemData = { showChatbox?: boolean; isResizable?: boolean; hasThumbnail?: boolean; - ccLicenseAdaption?: 'CC BY' | 'CC BY-NC' | 'CC BY-SA' | 'CC BY-NC-SA' | 'CC BY-ND' | 'CC BY-NC-ND' | 'CC0'; + ccLicenseAdaption?: 'CC BY' | 'CC BY-NC' | 'CC BY-SA' | 'CC BY-NC-SA' | 'CC BY-ND' | 'CC BY-NC-ND' | 'CC0' | null; displayCoEditors?: boolean; descriptionPlacement?: 'above' | 'below'; isCollapsible?: boolean; @@ -6576,7 +6906,7 @@ export type CreateItemData = { showChatbox?: boolean; isResizable?: boolean; hasThumbnail?: boolean; - ccLicenseAdaption?: 'CC BY' | 'CC BY-NC' | 'CC BY-SA' | 'CC BY-NC-SA' | 'CC BY-ND' | 'CC BY-NC-ND' | 'CC0'; + ccLicenseAdaption?: 'CC BY' | 'CC BY-NC' | 'CC BY-SA' | 'CC BY-NC-SA' | 'CC BY-ND' | 'CC BY-NC-ND' | 'CC0' | null; displayCoEditors?: boolean; descriptionPlacement?: 'above' | 'below'; isCollapsible?: boolean; @@ -6621,7 +6951,7 @@ export type CreateItemData = { showChatbox?: boolean; isResizable?: boolean; hasThumbnail?: boolean; - ccLicenseAdaption?: 'CC BY' | 'CC BY-NC' | 'CC BY-SA' | 'CC BY-NC-SA' | 'CC BY-ND' | 'CC BY-NC-ND' | 'CC0'; + ccLicenseAdaption?: 'CC BY' | 'CC BY-NC' | 'CC BY-SA' | 'CC BY-NC-SA' | 'CC BY-ND' | 'CC BY-NC-ND' | 'CC0' | null; displayCoEditors?: boolean; descriptionPlacement?: 'above' | 'below'; isCollapsible?: boolean; @@ -6654,7 +6984,7 @@ export type CreateItemData = { showChatbox?: boolean; isResizable?: boolean; hasThumbnail?: boolean; - ccLicenseAdaption?: 'CC BY' | 'CC BY-NC' | 'CC BY-SA' | 'CC BY-NC-SA' | 'CC BY-ND' | 'CC BY-NC-ND' | 'CC0'; + ccLicenseAdaption?: 'CC BY' | 'CC BY-NC' | 'CC BY-SA' | 'CC BY-NC-SA' | 'CC BY-ND' | 'CC BY-NC-ND' | 'CC0' | null; displayCoEditors?: boolean; descriptionPlacement?: 'above' | 'below'; isCollapsible?: boolean; @@ -6692,7 +7022,7 @@ export type CreateItemData = { showChatbox?: boolean; isResizable?: boolean; hasThumbnail?: boolean; - ccLicenseAdaption?: 'CC BY' | 'CC BY-NC' | 'CC BY-SA' | 'CC BY-NC-SA' | 'CC BY-ND' | 'CC BY-NC-ND' | 'CC0'; + ccLicenseAdaption?: 'CC BY' | 'CC BY-NC' | 'CC BY-SA' | 'CC BY-NC-SA' | 'CC BY-ND' | 'CC BY-NC-ND' | 'CC0' | null; displayCoEditors?: boolean; descriptionPlacement?: 'above' | 'below'; isCollapsible?: boolean; @@ -6731,7 +7061,7 @@ export type CreateItemData = { showChatbox?: boolean; isResizable?: boolean; hasThumbnail?: boolean; - ccLicenseAdaption?: 'CC BY' | 'CC BY-NC' | 'CC BY-SA' | 'CC BY-NC-SA' | 'CC BY-ND' | 'CC BY-NC-ND' | 'CC0'; + ccLicenseAdaption?: 'CC BY' | 'CC BY-NC' | 'CC BY-SA' | 'CC BY-NC-SA' | 'CC BY-ND' | 'CC BY-NC-ND' | 'CC0' | null; displayCoEditors?: boolean; descriptionPlacement?: 'above' | 'below'; isCollapsible?: boolean; @@ -6771,7 +7101,7 @@ export type CreateItemData = { showChatbox?: boolean; isResizable?: boolean; hasThumbnail?: boolean; - ccLicenseAdaption?: 'CC BY' | 'CC BY-NC' | 'CC BY-SA' | 'CC BY-NC-SA' | 'CC BY-ND' | 'CC BY-NC-ND' | 'CC0'; + ccLicenseAdaption?: 'CC BY' | 'CC BY-NC' | 'CC BY-SA' | 'CC BY-NC-SA' | 'CC BY-ND' | 'CC BY-NC-ND' | 'CC0' | null; displayCoEditors?: boolean; descriptionPlacement?: 'above' | 'below'; isCollapsible?: boolean; @@ -6806,9 +7136,9 @@ export type CreateItemError = CreateItemErrors[keyof CreateItemErrors]; export type CreateItemResponses = { /** - * Smallest unit of a learning collection + * Default Response */ - 200: Item; + 200: GenericItem; }; export type CreateItemResponse = CreateItemResponses[keyof CreateItemResponses]; @@ -6862,7 +7192,7 @@ export type UpdateItemData = { showChatbox?: boolean; isResizable?: boolean; hasThumbnail?: boolean; - ccLicenseAdaption?: 'CC BY' | 'CC BY-NC' | 'CC BY-SA' | 'CC BY-NC-SA' | 'CC BY-ND' | 'CC BY-NC-ND' | 'CC0'; + ccLicenseAdaption?: 'CC BY' | 'CC BY-NC' | 'CC BY-SA' | 'CC BY-NC-SA' | 'CC BY-ND' | 'CC BY-NC-ND' | 'CC0' | null; displayCoEditors?: boolean; descriptionPlacement?: 'above' | 'below'; isCollapsible?: boolean; @@ -6918,9 +7248,51 @@ export type UpdateItemError = UpdateItemErrors[keyof UpdateItemErrors]; export type UpdateItemResponses = { /** - * Smallest unit of a learning collection + * Generic Item + * Default Response */ - 200: Item; + 200: { + id: string; + name: string; + description: null | string; + path: string; + lang: string; + /** + * Item settings + * Parameters, mostly visual, common to all types of items. + */ + settings: { + /** + * @deprecated + */ + lang?: string; + isPinned?: boolean; + /** + * @deprecated + */ + tags?: Array; + showChatbox?: boolean; + isResizable?: boolean; + hasThumbnail?: boolean; + ccLicenseAdaption?: 'CC BY' | 'CC BY-NC' | 'CC BY-SA' | 'CC BY-NC-SA' | 'CC BY-ND' | 'CC BY-NC-ND' | 'CC0' | null; + displayCoEditors?: boolean; + descriptionPlacement?: 'above' | 'below'; + isCollapsible?: boolean; + enableSaveActions?: boolean; + showLinkIframe?: boolean; + showLinkButton?: boolean; + maxWidth?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'; + alignment?: 'center' | 'left' | 'right'; + }; + creator?: NullableMember; + createdAt: string; + updatedAt: string; + } & { + type: ItemType; + extra: { + [key: string]: unknown; + }; + }; }; export type UpdateItemResponse = UpdateItemResponses[keyof UpdateItemResponses]; @@ -7084,9 +7456,51 @@ export type ReorderItemError = ReorderItemErrors[keyof ReorderItemErrors]; export type ReorderItemResponses = { /** - * Smallest unit of a learning collection + * Generic Item + * Default Response */ - 200: Item; + 200: { + id: string; + name: string; + description: null | string; + path: string; + lang: string; + /** + * Item settings + * Parameters, mostly visual, common to all types of items. + */ + settings: { + /** + * @deprecated + */ + lang?: string; + isPinned?: boolean; + /** + * @deprecated + */ + tags?: Array; + showChatbox?: boolean; + isResizable?: boolean; + hasThumbnail?: boolean; + ccLicenseAdaption?: 'CC BY' | 'CC BY-NC' | 'CC BY-SA' | 'CC BY-NC-SA' | 'CC BY-ND' | 'CC BY-NC-ND' | 'CC0' | null; + displayCoEditors?: boolean; + descriptionPlacement?: 'above' | 'below'; + isCollapsible?: boolean; + enableSaveActions?: boolean; + showLinkIframe?: boolean; + showLinkButton?: boolean; + maxWidth?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'; + alignment?: 'center' | 'left' | 'right'; + }; + creator?: NullableMember; + createdAt: string; + updatedAt: string; + } & { + type: ItemType; + extra: { + [key: string]: unknown; + }; + }; }; export type ReorderItemResponse = ReorderItemResponses[keyof ReorderItemResponses]; @@ -7181,9 +7595,9 @@ export type CreateItemWithThumbnailError = CreateItemWithThumbnailErrors[keyof C export type CreateItemWithThumbnailResponses = { /** - * Smallest unit of a learning collection + * Default Response */ - 200: Item; + 200: GenericItem; }; export type CreateItemWithThumbnailResponse = CreateItemWithThumbnailResponses[keyof CreateItemWithThumbnailResponses]; diff --git a/src/query/api/etherpad.ts b/src/query/api/etherpad.ts index c367fd418..63d906d72 100644 --- a/src/query/api/etherpad.ts +++ b/src/query/api/etherpad.ts @@ -1,10 +1,6 @@ -import { - DiscriminatedItem, - Etherpad, - EtherpadItemType, - UUID, -} from '@graasp/sdk'; +import { Etherpad, EtherpadItemType, UUID } from '@graasp/sdk'; +import type { GenericItem } from '@/openapi/client'; import { axiosClient as axios } from '@/query/api/axios.js'; import { buildGetEtherpadRoute, buildPostEtherpadRoute } from '../routes.js'; @@ -53,7 +49,7 @@ export const postEtherpad = async ( { name, parentId, - }: Pick & { + }: Pick & { parentId?: UUID; }, { API_HOST }: QueryClientConfig, diff --git a/src/query/api/itemGeolocation.ts b/src/query/api/itemGeolocation.ts index 4270b0848..cdc6204ea 100644 --- a/src/query/api/itemGeolocation.ts +++ b/src/query/api/itemGeolocation.ts @@ -1,7 +1,8 @@ -import { DiscriminatedItem, ItemGeolocation, UUID } from '@graasp/sdk'; +import { ItemGeolocation, UUID } from '@graasp/sdk'; import { DEFAULT_LANG } from '@/config/constants.js'; import { API_HOST } from '@/config/env.js'; +import type { GenericItem } from '@/openapi/client'; import { axiosClient as axios } from '@/query/api/axios.js'; import { @@ -22,7 +23,7 @@ export const getItemGeolocation = async (id: UUID) => .then(({ data }) => data); export const putItemGeolocation = async (payload: { - itemId: DiscriminatedItem['id']; + itemId: GenericItem['id']; geolocation: Pick & Pick, 'country' | 'addressLabel' | 'helperLabel'>; }) => @@ -40,7 +41,7 @@ export const getItemsInMap = async (payload: { lat2?: ItemGeolocation['lat']; lng1?: ItemGeolocation['lng']; lng2?: ItemGeolocation['lng']; - parentItemId?: DiscriminatedItem['id']; + parentItemId?: GenericItem['id']; keywords?: string[]; }) => verifyAuthentication(() => diff --git a/src/query/api/itemPublish.ts b/src/query/api/itemPublish.ts index 1f0c42043..362b66352 100644 --- a/src/query/api/itemPublish.ts +++ b/src/query/api/itemPublish.ts @@ -1,11 +1,7 @@ -import { - DiscriminatedItem, - ItemPublished, - PackedItem, - UUID, -} from '@graasp/sdk'; +import { ItemPublished, UUID } from '@graasp/sdk'; import { API_HOST } from '@/config/env.js'; +import type { GenericItem, PackedItem } from '@/openapi/client'; import { axiosClient as axios } from '@/query/api/axios.js'; import { @@ -22,21 +18,21 @@ import { verifyAuthentication } from './axios.js'; export const getAllPublishedItems = async (args: { categoryIds?: UUID[] }) => axios .get< - DiscriminatedItem[] + GenericItem[] >(`${API_HOST}/${buildGetAllPublishedItemsRoute(args?.categoryIds)}`) .then(({ data }) => data); export const getMostLikedPublishedItems = async (args: { limit?: number }) => axios .get< - DiscriminatedItem[] + GenericItem[] >(`${API_HOST}/${buildGetMostLikedPublishedItemsRoute(args?.limit)}`) .then(({ data }) => data); export const getMostRecentPublishedItems = async (args: { limit?: number }) => axios .get< - DiscriminatedItem[] + GenericItem[] >(`${API_HOST}/${buildGetMostRecentPublishedItemsRoute(args?.limit)}`) .then(({ data }) => data); diff --git a/src/query/api/membership.ts b/src/query/api/membership.ts index 99a008bef..cdff129ee 100644 --- a/src/query/api/membership.ts +++ b/src/query/api/membership.ts @@ -1,7 +1,7 @@ import { SimpleMembershipRequest, UUID } from '@graasp/sdk'; import { API_HOST } from '@/config/env.js'; -import { ItemMembership } from '@/openapi/client/types.gen.js'; +import type { ItemMembership } from '@/openapi/client'; import { axiosClient as axios } from '@/query/api/axios.js'; import { diff --git a/src/query/hooks/etherpad.ts b/src/query/hooks/etherpad.ts index 61a2401c0..a3af51070 100644 --- a/src/query/hooks/etherpad.ts +++ b/src/query/hooks/etherpad.ts @@ -1,7 +1,7 @@ -import { EtherpadItemType } from '@graasp/sdk'; - import { useQuery } from '@tanstack/react-query'; +import type { EtherpadItem } from '@/openapi/client'; + import * as Api from '../api/etherpad.js'; import { UndefinedArgument } from '../config/errors.js'; import { itemKeys } from '../keys.js'; @@ -11,7 +11,7 @@ export default (queryConfig: QueryClientConfig) => { const { defaultQueryOptions } = queryConfig; return { - useEtherpad: (item: EtherpadItemType | undefined, mode: 'read' | 'write') => + useEtherpad: (item: EtherpadItem | undefined, mode: 'read' | 'write') => useQuery({ queryKey: itemKeys.single(item?.id).etherpad, queryFn: () => { diff --git a/src/query/hooks/itemGeolocation.ts b/src/query/hooks/itemGeolocation.ts index 6f2c122c3..aec4b16ed 100644 --- a/src/query/hooks/itemGeolocation.ts +++ b/src/query/hooks/itemGeolocation.ts @@ -1,8 +1,9 @@ -import { DiscriminatedItem, ItemGeolocation } from '@graasp/sdk'; +import { ItemGeolocation } from '@graasp/sdk'; import { useQuery } from '@tanstack/react-query'; import { DEFAULT_LANG } from '@/config/constants.js'; +import type { GenericItem } from '@/openapi/client'; import * as Api from '../api/itemGeolocation.js'; import { UndefinedArgument } from '../config/errors.js'; @@ -19,7 +20,7 @@ import { } from '../routines/itemGeolocation.js'; import useDebounce from './useDebounce.js'; -export const useItemGeolocation = (id?: DiscriminatedItem['id']) => +export const useItemGeolocation = (id?: GenericItem['id']) => useQuery({ queryKey: itemKeys.single(id).geolocation, queryFn: () => { @@ -47,7 +48,7 @@ export const useItemsInMap = ({ lng1?: ItemGeolocation['lng']; lng2?: ItemGeolocation['lng']; keywords?: string[]; - parentItemId?: DiscriminatedItem['id']; + parentItemId?: GenericItem['id']; }) => { const enabled = Boolean( ((lat1 || lat1 === 0) && diff --git a/src/query/item/accessible/api.ts b/src/query/item/accessible/api.ts index 8c43b7c96..b016da0f7 100644 --- a/src/query/item/accessible/api.ts +++ b/src/query/item/accessible/api.ts @@ -1,6 +1,7 @@ -import { PackedItem, Paginated, Pagination } from '@graasp/sdk'; +import { Paginated, Pagination } from '@graasp/sdk'; import { API_HOST } from '@/config/env.js'; +import type { PackedItem } from '@/openapi/client'; import { axiosClient as axios } from '@/query/api/axios.js'; import { verifyAuthentication } from '../../api/axios.js'; diff --git a/src/query/item/accessible/hooks.test.ts b/src/query/item/accessible/hooks.test.ts index 9daa819bf..06a5fcec0 100644 --- a/src/query/item/accessible/hooks.test.ts +++ b/src/query/item/accessible/hooks.test.ts @@ -1,6 +1,6 @@ import { useState } from 'react'; -import { PackedItem, Paginated } from '@graasp/sdk'; +import { Paginated } from '@graasp/sdk'; import { waitFor } from '@testing-library/dom'; import { act, renderHook } from '@testing-library/react'; @@ -8,6 +8,8 @@ import { StatusCodes } from 'http-status-codes'; import nock from 'nock'; import { afterEach, describe, expect, it } from 'vitest'; +import type { PackedItem } from '@/openapi/client'; + import { itemKeys } from '../../keys.js'; import { UNAUTHORIZED_RESPONSE, diff --git a/src/query/item/api.ts b/src/query/item/api.ts index dd7f2b498..ebbe0f0da 100644 --- a/src/query/item/api.ts +++ b/src/query/item/api.ts @@ -1,17 +1,11 @@ -import { - DiscriminatedItem, - ItemGeolocation, - PackedItem, - ResultOf, - UUID, -} from '@graasp/sdk'; +import { ItemGeolocation, ResultOf, UUID } from '@graasp/sdk'; import { API_HOST } from '@/config/env.js'; +import type { GenericItem, PackedItem } from '@/openapi/client'; import { axiosClient as axios } from '@/query/api/axios.js'; import { verifyAuthentication } from '../api/axios.js'; import { - SHARED_ITEM_WITH_ROUTE, buildCopyItemsRoute, buildDeleteItemsRoute, buildDownloadFilesRoute, @@ -35,8 +29,8 @@ export const getItems = async (ids: UUID[]) => .get>(`${API_HOST}/${buildGetItemsRoute(ids)}`) .then(({ data }) => data); -export type PostItemPayloadType = Partial & - Pick & +export type PostItemPayloadType = Partial & + Pick & Partial<{ parentId: UUID; geolocation: Pick; @@ -57,14 +51,12 @@ export const deleteItems = async (ids: UUID[]) => // querystring = {parentId} export const editItem = async ( id: UUID, - item: Pick & - Partial< - Pick - >, -): Promise => + item: Pick & + Partial>, +): Promise => verifyAuthentication(() => axios - .patch(`${API_HOST}/${buildEditItemRoute(id)}`, { + .patch(`${API_HOST}/${buildEditItemRoute(id)}`, { ...item, name: item.name?.trim(), }) @@ -98,13 +90,6 @@ export const copyItems = async ({ ids, to }: { ids: UUID[]; to?: UUID }) => .then(({ data }) => data); }); -export const getSharedItems = async () => - verifyAuthentication(() => - axios - .get(`${API_HOST}/${SHARED_ITEM_WITH_ROUTE}`, {}) - .then(({ data }) => data), - ); - export const getFileContentUrl = async (id: UUID) => axios .get(`${API_HOST}/${buildDownloadFilesRoute(id)}`, { diff --git a/src/query/item/create/api.ts b/src/query/item/create/api.ts index e6fea199a..8ff496f97 100644 --- a/src/query/item/create/api.ts +++ b/src/query/item/create/api.ts @@ -1,8 +1,7 @@ -import { DiscriminatedItem } from '@graasp/sdk'; - import { AxiosProgressEvent } from 'axios'; import { API_HOST } from '@/config/env.js'; +import type { GenericItem } from '@/openapi/client'; import { axiosClient as axios, verifyAuthentication } from '../../api/axios.js'; import { @@ -24,10 +23,10 @@ export const postItem = async ({ geolocation, settings, previousItemId, -}: PostItemPayloadType): Promise => +}: PostItemPayloadType): Promise => verifyAuthentication(() => axios - .post( + .post( `${API_HOST}/${buildPostItemRoute(parentId, previousItemId)}`, { name: name.trim(), @@ -51,7 +50,7 @@ export const postItemWithThumbnail = async ({ settings, thumbnail, previousItemId, -}: PostItemWithThumbnailPayloadType): Promise => +}: PostItemWithThumbnailPayloadType): Promise => verifyAuthentication(() => { const itemPayload = new FormData(); // name and type are required @@ -75,7 +74,7 @@ export const postItemWithThumbnail = async ({ */ itemPayload.append('file', thumbnail); return axios - .post( + .post( `${API_HOST}/${buildPostItemWithThumbnailRoute(parentId, previousItemId)}`, itemPayload, { @@ -86,11 +85,11 @@ export const postItemWithThumbnail = async ({ }); export const uploadFiles = async (args: { - id?: DiscriminatedItem['id']; + id?: GenericItem['id']; files: File[]; - previousItemId?: DiscriminatedItem['id']; + previousItemId?: GenericItem['id']; onUploadProgress?: (progressEvent: AxiosProgressEvent) => void; -}): Promise => +}): Promise => verifyAuthentication(() => { const { id, previousItemId, files } = args; const itemPayload = new FormData(); @@ -99,7 +98,7 @@ export const uploadFiles = async (args: { itemPayload.append('files', f); } return axios - .post( + .post( `${API_HOST}/${buildUploadFilesRoute(id, previousItemId)}`, itemPayload, { diff --git a/src/query/item/create/mutations.ts b/src/query/item/create/mutations.ts index 4731751be..4e79cc8c3 100644 --- a/src/query/item/create/mutations.ts +++ b/src/query/item/create/mutations.ts @@ -1,7 +1,6 @@ // todo: remove this ignore once the queries are refactored /* eslint-disable react-hooks/rules-of-hooks */ import { - DiscriminatedItem, MAX_FILE_SIZE, MAX_NUMBER_OF_FILES_UPLOAD, partitionArray, @@ -10,6 +9,8 @@ import { import { useMutation, useQueryClient } from '@tanstack/react-query'; import { AxiosProgressEvent } from 'axios'; +import type { GenericItem } from '@/openapi/client'; + import { getKeyForParentId, itemKeys, @@ -77,9 +78,9 @@ export const useUploadFiles = (queryConfig: QueryClientConfig) => () => { const { notifier } = queryConfig; return useMutation({ mutationFn: async (args: { - id?: DiscriminatedItem['id']; + id?: GenericItem['id']; files: File[]; - previousItemId?: DiscriminatedItem['id']; + previousItemId?: GenericItem['id']; onUploadProgress?: (progressEvent: AxiosProgressEvent) => void; }) => { // filter out big files to not upload them diff --git a/src/query/item/descendants/api.ts b/src/query/item/descendants/api.ts index ab95094e7..80262bd01 100644 --- a/src/query/item/descendants/api.ts +++ b/src/query/item/descendants/api.ts @@ -1,7 +1,7 @@ -import { PackedItem, UUID } from '@graasp/sdk'; +import { UUID } from '@graasp/sdk'; import { API_HOST } from '@/config/env.js'; -import { type ItemType } from '@/openapi/client'; +import { type ItemType, type PackedItem } from '@/openapi/client'; import { axiosClient as axios } from '@/query/api/axios.js'; import { buildGetItemDescendants } from '../routes.js'; diff --git a/src/query/item/h5p/api.ts b/src/query/item/h5p/api.ts index b5b2d038c..6c8e99018 100644 --- a/src/query/item/h5p/api.ts +++ b/src/query/item/h5p/api.ts @@ -1,18 +1,17 @@ -import { DiscriminatedItem } from '@graasp/sdk'; - import { AxiosProgressEvent } from 'axios'; import { API_HOST } from '@/config/env.js'; +import type { GenericItem } from '@/openapi/client'; import { axiosClient as axios, verifyAuthentication } from '../../api/axios.js'; import { buildImportH5PRoute } from '../../routes.js'; export const importH5P = async (args: { - id?: DiscriminatedItem['id']; + id?: GenericItem['id']; file: Blob; - previousItemId?: DiscriminatedItem['id']; + previousItemId?: GenericItem['id']; onUploadProgress?: (progressEvent: AxiosProgressEvent) => void; -}): Promise => +}): Promise => verifyAuthentication(() => { const { id, previousItemId, file } = args; const itemPayload = new FormData(); @@ -23,7 +22,7 @@ export const importH5P = async (args: { */ itemPayload.append('files', file); return axios - .post( + .post( `${API_HOST}/${buildImportH5PRoute(id, previousItemId)}`, itemPayload, { diff --git a/src/query/item/h5p/mutations.ts b/src/query/item/h5p/mutations.ts index aad368ae1..bf5244624 100644 --- a/src/query/item/h5p/mutations.ts +++ b/src/query/item/h5p/mutations.ts @@ -1,9 +1,9 @@ /* eslint-disable react-hooks/rules-of-hooks */ -import { DiscriminatedItem } from '@graasp/sdk'; - import { useMutation, useQueryClient } from '@tanstack/react-query'; import { AxiosProgressEvent } from 'axios'; +import type { GenericItem } from '@/openapi/client'; + import { getKeyForParentId } from '../../keys.js'; import { type QueryClientConfig } from '../../types.js'; import { importH5PRoutine } from '../routines.js'; @@ -14,9 +14,9 @@ export const useImportH5P = (queryConfig: QueryClientConfig) => () => { const { notifier } = queryConfig; return useMutation({ mutationFn: async (args: { - id?: DiscriminatedItem['id']; + id?: GenericItem['id']; file: Blob; - previousItemId?: DiscriminatedItem['id']; + previousItemId?: GenericItem['id']; onUploadProgress?: (progressEvent: AxiosProgressEvent) => void; }) => importH5P(args), onSuccess: () => { diff --git a/src/query/item/hooks.ts b/src/query/item/hooks.ts index 9d7fcf1ab..867d48be0 100644 --- a/src/query/item/hooks.ts +++ b/src/query/item/hooks.ts @@ -1,9 +1,9 @@ /* eslint-disable react-hooks/rules-of-hooks */ -import { PackedItem, UUID, WebsocketClient } from '@graasp/sdk'; +import { UUID, WebsocketClient } from '@graasp/sdk'; import { useInfiniteQuery, useQuery } from '@tanstack/react-query'; -import { getParentItems } from '@/openapi/client/sdk.gen.js'; +import { type PackedItem, getParentItems } from '@/openapi/client'; import { CONSTANT_KEY_STALE_TIME_MILLISECONDS, @@ -21,7 +21,6 @@ import { } from './accessible/hooks.js'; import * as Api from './api.js'; import { useDescendants } from './descendants/hooks.js'; -import { useItemThumbnailUrl } from './thumbnail/hooks.js'; import { ItemChildrenParams } from './types.js'; const config = ( @@ -68,7 +67,7 @@ const config = ( ...params, ordered, keywords: debouncedKeywords, - }); + }) as Promise; }, ...defaultQueryOptions, enabled: Boolean(id) && enabled, @@ -142,7 +141,7 @@ const config = ( if (!id) { throw new UndefinedArgument(); } - return Api.getItem(id); + return Api.getItem(id) as Promise; }, enabled: Boolean(id), ...defaultQueryOptions, @@ -166,8 +165,6 @@ const config = ( }), useItemFeedbackUpdates: itemWsHooks?.useItemFeedbackUpdates, - - useItemThumbnailUrl, }; }; diff --git a/src/query/item/import-zip/api.ts b/src/query/item/import-zip/api.ts index d6a9d4f0f..f15b4eac8 100644 --- a/src/query/item/import-zip/api.ts +++ b/src/query/item/import-zip/api.ts @@ -1,18 +1,17 @@ -import { DiscriminatedItem } from '@graasp/sdk'; - import { AxiosProgressEvent } from 'axios'; import { API_HOST } from '@/config/env.js'; +import type { GenericItem } from '@/openapi/client'; import { axiosClient as axios, verifyAuthentication } from '../../api/axios.js'; import { buildImportZipRoute } from '../../routes.js'; export const importZip = async (args: { - id?: DiscriminatedItem['id']; + id?: GenericItem['id']; file: Blob; - previousItemId?: DiscriminatedItem['id']; + previousItemId?: GenericItem['id']; onUploadProgress?: (progressEvent: AxiosProgressEvent) => void; -}): Promise => +}): Promise => verifyAuthentication(() => { const { id, file } = args; const itemPayload = new FormData(); @@ -23,7 +22,7 @@ export const importZip = async (args: { */ itemPayload.append('files', file); return axios - .post( + .post( `${API_HOST}/${buildImportZipRoute(id)}`, itemPayload, { diff --git a/src/query/item/import-zip/mutations.ts b/src/query/item/import-zip/mutations.ts index bf23d4bec..8f4c094d6 100644 --- a/src/query/item/import-zip/mutations.ts +++ b/src/query/item/import-zip/mutations.ts @@ -1,9 +1,9 @@ /* eslint-disable react-hooks/rules-of-hooks */ -import { DiscriminatedItem } from '@graasp/sdk'; - import { useMutation } from '@tanstack/react-query'; import { AxiosProgressEvent } from 'axios'; +import type { GenericItem } from '@/openapi/client'; + import { type QueryClientConfig } from '../../types.js'; import { importZipRoutine } from '../routines.js'; import { importZip } from './api.js'; @@ -12,7 +12,7 @@ export const useImportZip = (queryConfig: QueryClientConfig) => () => { const { notifier } = queryConfig; return useMutation({ mutationFn: async (args: { - id?: DiscriminatedItem['id']; + id?: GenericItem['id']; file: Blob; onUploadProgress?: (progressEvent: AxiosProgressEvent) => void; }) => importZip(args), diff --git a/src/query/item/mutations.test.ts b/src/query/item/mutations.test.ts index 9ba6997e0..ae9d824d9 100644 --- a/src/query/item/mutations.test.ts +++ b/src/query/item/mutations.test.ts @@ -1,8 +1,8 @@ import { - DiscriminatedItem, FolderItemFactory, HttpMethod, MAX_TARGETS_FOR_MODIFY_REQUEST, + PackedItem, RecycledItemData, buildPathFromIds, getParentFromPath, @@ -166,9 +166,7 @@ describe('Items Mutations', () => { await expect(mockedMutation.mutateAsync(payload)).rejects.toThrow(); // item key should not be changed and should be invalidated - expect( - queryClient.getQueryData(itemKey), - ).toMatchObject(item); + expect(queryClient.getQueryData(itemKey)).toMatchObject(item); expect(queryClient.getQueryState(itemKey)?.isInvalidated).toBeTruthy(); }); }); @@ -219,7 +217,7 @@ describe('Items Mutations', () => { // original copied items path have not changed copied.forEach((item) => { const itemKey = itemKeys.single(item.id).content; - const path = queryClient.getQueryData(itemKey)?.path; + const path = queryClient.getQueryData(itemKey)?.path; expect(path).toEqual(item.path); }); @@ -273,7 +271,7 @@ describe('Items Mutations', () => { // Check new path are corrects moved.forEach((item) => { const itemKey = itemKeys.single(item.id).content; - const path = queryClient.getQueryData(itemKey)?.path; + const path = queryClient.getQueryData(itemKey)?.path; expect(path).toEqual(`${to.path}.${buildPathFromIds(item.id)}`); }); @@ -322,7 +320,7 @@ describe('Items Mutations', () => { // Check new paths are corrects moved.forEach((item) => { const itemKey = itemKeys.single(item.id).content; - const path = queryClient.getQueryData(itemKey)?.path; + const path = queryClient.getQueryData(itemKey)?.path; expect(path).toEqual(`${to.path}.${buildPathFromIds(item.id)}`); }); @@ -373,7 +371,7 @@ describe('Items Mutations', () => { // in real cases, the path should be different for (const itemId of itemIds) { const itemKey = itemKeys.single(itemId).content; - const data = queryClient.getQueryData(itemKey); + const data = queryClient.getQueryData(itemKey); expect(data).toMatchObject(items.find(({ id }) => id === itemId)!); } @@ -383,7 +381,7 @@ describe('Items Mutations', () => { const childrenKey = getKeyForParentId(null); expect( queryClient - .getQueryData(childrenKey) + .getQueryData(childrenKey) ?.filter(({ id: thisId }) => itemIds.includes(thisId)).length, ).toBeFalsy(); @@ -427,7 +425,7 @@ describe('Items Mutations', () => { // in real cases, the path should be different for (const itemId of itemIds) { const itemKey = itemKeys.single(itemId).content; - const data = queryClient.getQueryData(itemKey); + const data = queryClient.getQueryData(itemKey); expect(data).toMatchObject(toRecycle.find(({ id }) => id === itemId)!); } @@ -437,7 +435,7 @@ describe('Items Mutations', () => { expect( queryClient - .getQueryData(childrenKey) + .getQueryData(childrenKey) ?.filter(({ id }) => itemIds.includes(id)).length, ).toBeFalsy(); }); @@ -486,7 +484,7 @@ describe('Items Mutations', () => { // in real cases, the path should be different for (const itemId of itemIds) { const itemKey = itemKeys.single(itemId).content; - const state = queryClient.getQueryState(itemKey); + const state = queryClient.getQueryState(itemKey); expect(state?.isInvalidated).toBeFalsy(); } @@ -527,7 +525,7 @@ describe('Items Mutations', () => { // in real cases, the path should be different for (const itemId of itemIds) { const itemKey = itemKeys.single(itemId).content; - const state = queryClient.getQueryState(itemKey); + const state = queryClient.getQueryState(itemKey); expect(state?.isInvalidated).toBeFalsy(); } }); @@ -576,7 +574,7 @@ describe('Items Mutations', () => { // in real cases, the path should be different for (const item of items) { const itemKey = itemKeys.single(item.id).content; - const data = queryClient.getQueryData(itemKey); + const data = queryClient.getQueryData(itemKey); expect(data).toMatchObject(item); } @@ -632,7 +630,7 @@ describe('Items Mutations', () => { // in real cases, the path should be different for (const item of items) { const itemKey = itemKeys.single(item.id).content; - const data = queryClient.getQueryData(itemKey); + const data = queryClient.getQueryData(itemKey); expect(data).toMatchObject(item); } diff --git a/src/query/item/mutations.ts b/src/query/item/mutations.ts index ee59952ac..2ebd261b6 100644 --- a/src/query/item/mutations.ts +++ b/src/query/item/mutations.ts @@ -1,7 +1,5 @@ import { - DiscriminatedItem, MAX_TARGETS_FOR_MODIFY_REQUEST, - PackedItem, RecycledItemData, UUID, buildPathFromIds, @@ -14,6 +12,8 @@ import { useQueryClient, } from '@tanstack/react-query'; +import type { PackedItem } from '@/openapi/client'; + import { splitRequestByIds } from '../api/axios.js'; import { getKeyForParentId, itemKeys, memberKeys } from '../keys.js'; import { @@ -104,10 +104,10 @@ export default (queryConfig: QueryClientConfig) => { return useMutation({ mutationFn: ( - item: Pick & + item: Pick & Partial< Pick< - DiscriminatedItem, + PackedItem, 'name' | 'description' | 'extra' | 'settings' | 'lang' > >, @@ -148,14 +148,14 @@ export default (queryConfig: QueryClientConfig) => { onMutate: async (itemIds: UUID[]) => { // get path from first item and invalidate parent's children const itemKey = itemKeys.single(itemIds[0]).content; - const itemData = queryClient.getQueryData(itemKey); + const itemData = queryClient.getQueryData(itemKey); const itemPath = itemData?.path; const newParent = itemPath ? { parent: await mutateParentChildren( { childPath: itemPath, - value: (old: DiscriminatedItem[]) => + value: (old: PackedItem[]) => old.filter(({ id }) => !itemIds.includes(id)), }, queryClient, @@ -180,7 +180,7 @@ export default (queryConfig: QueryClientConfig) => { const queryClient = useQueryClient(); return useMutation({ mutationFn: (itemIds) => - splitRequestByIds( + splitRequestByIds( itemIds, MAX_TARGETS_FOR_MODIFY_REQUEST, (chunk) => Api.deleteItems(chunk), @@ -233,7 +233,7 @@ export default (queryConfig: QueryClientConfig) => { const queryClient = useQueryClient(); return useMutation({ mutationFn: ({ items, to }: { items: PackedItem[]; to?: UUID }) => - splitRequestByIds( + splitRequestByIds( items.map((i) => i.id), MAX_TARGETS_FOR_MODIFY_REQUEST, (chunk) => Api.moveItems({ ids: chunk, to }), diff --git a/src/query/item/recycled/api.ts b/src/query/item/recycled/api.ts index 8312ae159..d2f877496 100644 --- a/src/query/item/recycled/api.ts +++ b/src/query/item/recycled/api.ts @@ -1,6 +1,7 @@ -import { DiscriminatedItem, Paginated, Pagination } from '@graasp/sdk'; +import { Paginated, Pagination } from '@graasp/sdk'; import { API_HOST } from '@/config/env.js'; +import type { PackedItem } from '@/openapi/client'; import { axiosClient as axios } from '@/query/api/axios.js'; import { verifyAuthentication } from '../../api/axios.js'; @@ -10,7 +11,7 @@ export const getOwnRecycledItems = async (pagination: Partial) => verifyAuthentication(() => axios .get< - Paginated + Paginated >(`${API_HOST}/${buildGetOwnRecycledItemRoute(pagination)}`) .then(({ data }) => data), ); diff --git a/src/query/item/recycled/hooks.test.ts b/src/query/item/recycled/hooks.test.ts index f2977109a..08bb6d318 100644 --- a/src/query/item/recycled/hooks.test.ts +++ b/src/query/item/recycled/hooks.test.ts @@ -1,5 +1,5 @@ /* eslint-disable react-hooks/rules-of-hooks */ -import { DiscriminatedItem, Paginated } from '@graasp/sdk'; +import { Paginated } from '@graasp/sdk'; import { waitFor } from '@testing-library/dom'; import { act, renderHook } from '@testing-library/react'; @@ -7,6 +7,8 @@ import { StatusCodes } from 'http-status-codes'; import nock from 'nock'; import { afterEach, describe, expect, it } from 'vitest'; +import type { PackedItem } from '@/openapi/client'; + import { memberKeys } from '../../keys.js'; import { UNAUTHORIZED_RESPONSE, @@ -38,7 +40,7 @@ describe('useInfiniteOwnRecycledItems', () => { expect(data!.pages[0]).toMatchObject(response); // verify cache keys expect( - queryClient.getQueryData<{ pages: Paginated[] }>(key)! + queryClient.getQueryData<{ pages: Paginated[] }>(key)! .pages[0], ).toMatchObject(response); }); diff --git a/src/query/item/routes.ts b/src/query/item/routes.ts index a6bbef33d..bef769cad 100644 --- a/src/query/item/routes.ts +++ b/src/query/item/routes.ts @@ -5,8 +5,6 @@ import { ItemChildrenParams, ItemSearchParams } from './types'; export const ITEMS_ROUTE = 'items'; -export const SHARED_ITEM_WITH_ROUTE = `${ITEMS_ROUTE}/shared-with`; - export const setSearchQueryParams = ({ creatorId, ordering, diff --git a/src/query/item/thumbnail/api.ts b/src/query/item/thumbnail/api.ts index 891b1e61d..146cc735d 100644 --- a/src/query/item/thumbnail/api.ts +++ b/src/query/item/thumbnail/api.ts @@ -1,8 +1,9 @@ -import { DiscriminatedItem, UUID } from '@graasp/sdk'; +import { UUID } from '@graasp/sdk'; import { AxiosProgressEvent } from 'axios'; import { API_HOST } from '@/config/env.js'; +import type { GenericItem } from '@/openapi/client'; import { axiosClient as axios, verifyAuthentication, @@ -38,10 +39,10 @@ export const deleteItemThumbnail = async (id: UUID) => .then(({ data }) => data); export const uploadItemThumbnail = async (args: { - id: DiscriminatedItem['id']; + id: GenericItem['id']; file: Blob; onUploadProgress?: (progressEvent: AxiosProgressEvent) => void; -}): Promise => +}): Promise => verifyAuthentication(() => { const { id, file } = args; const itemPayload = new FormData(); @@ -52,7 +53,7 @@ export const uploadItemThumbnail = async (args: { */ itemPayload.append('file', file); return axios - .post( + .post( `${API_HOST}/${buildUploadItemThumbnailRoute(id)}`, itemPayload, { diff --git a/src/query/item/thumbnail/hooks.test.ts b/src/query/item/thumbnail/hooks.test.ts deleted file mode 100644 index 74a1091a9..000000000 --- a/src/query/item/thumbnail/hooks.test.ts +++ /dev/null @@ -1,171 +0,0 @@ -/* eslint-disable react-hooks/rules-of-hooks */ -import { FolderItemFactory, ThumbnailSize } from '@graasp/sdk'; - -import { StatusCodes } from 'http-status-codes'; -import nock from 'nock'; -import { afterEach, describe, expect, it } from 'vitest'; - -import { itemKeys } from '../../keys.js'; -import { - THUMBNAIL_URL_RESPONSE, - UNAUTHORIZED_RESPONSE, -} from '../../test/constants.js'; -import { mockHook, setUpTest } from '../../test/utils.js'; -import { buildDownloadItemThumbnailRoute } from '../routes.js'; -import { useItemThumbnailUrl } from './hooks.js'; - -const { wrapper, queryClient } = setUpTest(); - -describe('useItemThumbnailUrl', () => { - afterEach(async () => { - await queryClient.cancelQueries(); - queryClient.clear(); - nock.cleanAll(); - }); - - const item = FolderItemFactory(); - const replyUrl = true; - const key = itemKeys.single(item.id).thumbnail({ replyUrl }); - const response = THUMBNAIL_URL_RESPONSE; - const route = `/${buildDownloadItemThumbnailRoute({ - id: item.id, - replyUrl, - })}`; - const hook = () => useItemThumbnailUrl({ id: item.id }); - - it(`Receive default thumbnail`, async () => { - const endpoints = [ - { - route, - response, - }, - ]; - const { data } = await mockHook({ endpoints, hook, wrapper }); - - expect(data).toBeTruthy(); - // verify cache keys - expect(queryClient.getQueryData(key)).toBeTruthy(); - }); - - it(`Receive large thumbnail`, async () => { - const size = ThumbnailSize.Large; - const routeLarge = `/${buildDownloadItemThumbnailRoute({ - id: item.id, - size, - replyUrl, - })}`; - const hookLarge = () => useItemThumbnailUrl({ id: item.id, size }); - const keyLarge = itemKeys.single(item.id).thumbnail({ size, replyUrl }); - - const endpoints = [ - { - route: routeLarge, - response, - }, - ]; - const { data } = await mockHook({ - endpoints, - hook: hookLarge, - wrapper, - }); - - expect(data).toBeTruthy(); - // verify cache keys - expect(queryClient.getQueryData(keyLarge)).toBeTruthy(); - }); - - it(`Undefined id does not fetch`, async () => { - const endpoints = [ - { - route, - response, - }, - ]; - const { data, isFetched } = await mockHook({ - endpoints, - hook: () => useItemThumbnailUrl({ id: undefined }), - wrapper, - enabled: false, - }); - - expect(data).toBeFalsy(); - expect(isFetched).toBeFalsy(); - // verify cache keys - expect(queryClient.getQueryData(key)).toBeFalsy(); - }); - - it(`Does not fetch if item has no thumbnail with corresponding id`, async () => { - const itemWithoutThumbnail = { - ...item, - settings: { hasThumbnail: false }, - }; - queryClient.setQueryData( - itemKeys.single(itemWithoutThumbnail.id).content, - itemWithoutThumbnail, - ); - const endpoints = [ - { - route, - response, - }, - ]; - const { data, isFetched } = await mockHook({ - endpoints, - hook: () => useItemThumbnailUrl({ id: itemWithoutThumbnail.id }), - wrapper, - enabled: false, - }); - - expect(data).toBeFalsy(); - expect(isFetched).toBeFalsy(); - // verify cache keys - expect(queryClient.getQueryData(key)).toBeFalsy(); - }); - - it(`Does not fetch if item has no thumbnail with corresponding item`, async () => { - const itemWithoutThumbnail = { - ...item, - settings: { hasThumbnail: false }, - }; - queryClient.setQueryData( - itemKeys.single(itemWithoutThumbnail.id).content, - itemWithoutThumbnail, - ); - const endpoints = [ - { - route, - response, - }, - ]; - const { data, isFetched } = await mockHook({ - endpoints, - hook: () => - useItemThumbnailUrl({ - item: itemWithoutThumbnail, - }), - wrapper, - enabled: false, - }); - - expect(data).toBeFalsy(); - expect(isFetched).toBeFalsy(); - // verify cache keys - expect(queryClient.getQueryData(key)).toBeFalsy(); - }); - - it(`Unauthorized`, async () => { - const endpoints = [ - { - route, - response: UNAUTHORIZED_RESPONSE, - statusCode: StatusCodes.UNAUTHORIZED, - }, - ]; - const { data, isError } = await mockHook({ endpoints, hook, wrapper }); - - expect(data).toBeFalsy(); - expect(isError).toBeTruthy(); - // verify cache keys - expect(queryClient.getQueryData(key)).toBeFalsy(); - }); -}); diff --git a/src/query/item/thumbnail/hooks.ts b/src/query/item/thumbnail/hooks.ts deleted file mode 100644 index 49bee85c6..000000000 --- a/src/query/item/thumbnail/hooks.ts +++ /dev/null @@ -1,53 +0,0 @@ -import { DiscriminatedItem, PackedItem, UUID } from '@graasp/sdk'; - -import { useQuery, useQueryClient } from '@tanstack/react-query'; - -import { - CONSTANT_KEY_STALE_TIME_MILLISECONDS, - DEFAULT_THUMBNAIL_SIZE, -} from '../../config/constants.js'; -import { UndefinedArgument } from '../../config/errors.js'; -import { itemKeys } from '../../keys.js'; -import { downloadItemThumbnailUrl } from './api.js'; - -// create a new thumbnail hook because of key content -/** - * Fetch item's thumbnail url. At least id or item should be provided. - * @param id corresponding item's id for thumbnail - * @param item corresponding item for thumbnail, used to know if the item has a thumbnail - * @param size size of the thumbnail we want - * @returns url of the thumbnail given size - */ -export const useItemThumbnailUrl = ({ - id, - item, - size = DEFAULT_THUMBNAIL_SIZE, -}: { - id?: UUID; - item?: DiscriminatedItem; - size?: string; -}) => { - const queryClient = useQueryClient(); - let shouldFetch = true; - const itemId = id ?? item?.id; - - if (item) { - shouldFetch = item?.settings?.hasThumbnail ?? true; - } else if (itemId) { - shouldFetch = - queryClient.getQueryData(itemKeys.single(id).content) - ?.settings?.hasThumbnail ?? true; - } - - return useQuery({ - queryKey: itemKeys.single(itemId).thumbnail({ size, replyUrl: true }), - queryFn: () => { - if (!itemId) { - throw new UndefinedArgument(); - } - return downloadItemThumbnailUrl({ id: itemId, size }); - }, - enabled: Boolean(itemId) && shouldFetch, - staleTime: CONSTANT_KEY_STALE_TIME_MILLISECONDS, - }); -}; diff --git a/src/query/keys.ts b/src/query/keys.ts index 0fa40150e..10392acf5 100644 --- a/src/query/keys.ts +++ b/src/query/keys.ts @@ -1,12 +1,7 @@ -import { - DiscriminatedItem, - ItemGeolocation, - Pagination, - UUID, -} from '@graasp/sdk'; +import { ItemGeolocation, Pagination, UUID } from '@graasp/sdk'; import { DEFAULT_LANG } from '@/config/constants.js'; -import { type ItemType } from '@/openapi/client'; +import type { GenericItem, ItemType } from '@/openapi/client'; import { DEFAULT_THUMBNAIL_SIZE } from './config/constants.js'; import { ItemSearchParams } from './item/types.js'; @@ -283,7 +278,7 @@ export const itemsWithGeolocationKeys = { lat2?: ItemGeolocation['lat']; lng1?: ItemGeolocation['lng']; lng2?: ItemGeolocation['lng']; - parentItemId?: DiscriminatedItem['id']; + parentItemId?: GenericItem['id']; }) => [ ...itemsWithGeolocationKeys.allBounds, { lat1, lat2, lng1, lng2, parentItemId, keywords }, diff --git a/src/query/mutations/etherpad.ts b/src/query/mutations/etherpad.ts deleted file mode 100644 index 21ab1983a..000000000 --- a/src/query/mutations/etherpad.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { DiscriminatedItem } from '@graasp/sdk'; - -import { useMutation, useQueryClient } from '@tanstack/react-query'; - -import * as Api from '../api/etherpad.js'; -import { createEtherpadRoutine } from '../item/routines.js'; -import { getKeyForParentId } from '../keys.js'; -import { QueryClientConfig } from '../types.js'; - -export default (queryConfig: QueryClientConfig) => { - const { notifier } = queryConfig; - - const usePostEtherpad = () => { - const queryClient = useQueryClient(); - return useMutation({ - mutationFn: async ( - params: Pick & { - parentId?: string; - }, - ) => Api.postEtherpad(params, queryConfig), - // we cannot optimistically add an item because we need its id - onSuccess: () => { - notifier?.({ - type: createEtherpadRoutine.SUCCESS, - payload: { message: 'CREATE_ITEM' }, - }); - }, - onError: (error: Error) => { - notifier?.({ - type: createEtherpadRoutine.FAILURE, - payload: { error }, - }); - }, - onSettled: (_data, _error, { parentId }) => { - const key = getKeyForParentId(parentId); - queryClient.invalidateQueries({ queryKey: key }); - }, - }); - }; - return { - usePostEtherpad, - }; -}; diff --git a/src/query/mutations/index.ts b/src/query/mutations/index.ts index 54c170249..8c46e4a50 100644 --- a/src/query/mutations/index.ts +++ b/src/query/mutations/index.ts @@ -2,7 +2,6 @@ import itemMutations from '../item/mutations.js'; import memberMutations from '../member/mutations.js'; import { QueryClientConfig } from '../types.js'; import csvUserImportMutations from './csvUserImport.js'; -import etherpadMutations from './etherpad.js'; import invitationMutations from './invitation.js'; import itemGeolocationMutations from './itemGeolocation.js'; import itemLoginMutations from './itemLogin.js'; @@ -10,11 +9,9 @@ import itemPublishMutations from './itemPublish.js'; import itemValidationMutations from './itemValidation.js'; import visibilitiesMutations from './itemVisibility.js'; import mentionMutations from './mention.js'; -import shortLinksMutations from './shortLink.js'; const configureMutations = (queryConfig: QueryClientConfig) => ({ ...csvUserImportMutations(queryConfig), - ...etherpadMutations(queryConfig), ...invitationMutations(queryConfig), ...itemGeolocationMutations(queryConfig), ...itemLoginMutations(queryConfig), @@ -23,7 +20,6 @@ const configureMutations = (queryConfig: QueryClientConfig) => ({ ...itemValidationMutations(queryConfig), ...memberMutations(queryConfig), ...mentionMutations(queryConfig), - ...shortLinksMutations(queryConfig), ...visibilitiesMutations(queryConfig), }); diff --git a/src/query/mutations/itemGeolocation.ts b/src/query/mutations/itemGeolocation.ts index 0ba6f2c29..77ce93147 100644 --- a/src/query/mutations/itemGeolocation.ts +++ b/src/query/mutations/itemGeolocation.ts @@ -1,7 +1,9 @@ -import { DiscriminatedItem, ItemGeolocation } from '@graasp/sdk'; +import { ItemGeolocation } from '@graasp/sdk'; import { useMutation, useQueryClient } from '@tanstack/react-query'; +import type { GenericItem } from '@/openapi/client'; + import * as Api from '../api/itemGeolocation.js'; import { itemKeys, itemsWithGeolocationKeys } from '../keys.js'; import { @@ -15,7 +17,7 @@ export default (queryConfig: QueryClientConfig) => { const queryClient = useQueryClient(); return useMutation({ mutationFn: (payload: { - itemId: DiscriminatedItem['id']; + itemId: GenericItem['id']; geolocation: Pick & Pick< Partial, @@ -48,7 +50,7 @@ export default (queryConfig: QueryClientConfig) => { const useDeleteItemGeolocation = () => { const queryClient = useQueryClient(); return useMutation({ - mutationFn: (payload: { itemId: DiscriminatedItem['id'] }) => + mutationFn: (payload: { itemId: GenericItem['id'] }) => Api.deleteItemGeolocation(payload), onSuccess: () => { queryConfig.notifier?.({ diff --git a/src/query/mutations/shortLink.ts b/src/query/mutations/shortLink.ts deleted file mode 100644 index 4c7ab6a38..000000000 --- a/src/query/mutations/shortLink.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { useMutation, useQueryClient } from '@tanstack/react-query'; - -import * as Api from '../api/index.js'; -import { buildShortLinkKey, itemKeys } from '../keys.js'; -import { deleteShortLinkRoutine } from '../routines/index.js'; -import type { QueryClientConfig } from '../types.js'; - -export default (queryConfig: QueryClientConfig) => { - const { notifier } = queryConfig; - - const useDeleteShortLink = () => { - const queryClient = useQueryClient(); - return useMutation({ - mutationFn: async (alias: string) => Api.deleteShortLink(alias), - onSuccess: (data) => { - notifier?.({ - type: deleteShortLinkRoutine.SUCCESS, - payload: { message: 'DELETE_SHORT_LINK' }, - }); - queryClient.invalidateQueries({ - queryKey: itemKeys.single(data.itemId).shortLinks, - }); - queryClient.invalidateQueries({ - queryKey: buildShortLinkKey(data.alias), - }); - }, - onError: (error: Error) => { - notifier?.({ - type: deleteShortLinkRoutine.FAILURE, - payload: { error }, - }); - }, - }); - }; - - return { - useDeleteShortLink, - }; -}; diff --git a/src/query/routes.ts b/src/query/routes.ts index cb3372e2a..7b9e81c95 100644 --- a/src/query/routes.ts +++ b/src/query/routes.ts @@ -1,11 +1,12 @@ import { - DiscriminatedItem, ExportActionsFormatting, ItemGeolocation, ItemVisibility, UUID, } from '@graasp/sdk'; +import type { GenericItem } from '@/openapi/client'; + import * as itemRoutes from './item/routes'; import * as memberRoutes from './member/routes'; @@ -97,7 +98,7 @@ export const buildDeleteItemVisibilityRoute = ({ itemId, type, }: { - itemId: DiscriminatedItem['id']; + itemId: GenericItem['id']; type: ItemVisibility['type']; }) => `${ITEMS_ROUTE}/${itemId}/visibilities/${type}`; export const buildPostItemLoginSignInRoute = (id: UUID) => @@ -258,7 +259,7 @@ export const buildGetItemsInMapRoute = ({ lat2?: ItemGeolocation['lat']; lng1?: ItemGeolocation['lng']; lng2?: ItemGeolocation['lng']; - parentItemId?: DiscriminatedItem['id']; + parentItemId?: GenericItem['id']; }) => { const params = new URLSearchParams(); if (lat1 || lat1 === 0) { diff --git a/src/query/ws/hooks/item.test.ts b/src/query/ws/hooks/item.test.ts index 3ad37973f..bb64b8c64 100644 --- a/src/query/ws/hooks/item.test.ts +++ b/src/query/ws/hooks/item.test.ts @@ -1,5 +1,4 @@ import { - DiscriminatedItem, FolderItemFactory, ItemOpFeedbackEvent, PublicationStatus, @@ -9,6 +8,8 @@ import { import { afterEach, describe, expect, it } from 'vitest'; +import type { FolderItem, GenericItem } from '@/openapi/client'; + import { getKeyForParentId, itemKeys, memberKeys } from '../../keys.js'; import { getHandlerByChannel, @@ -29,12 +30,12 @@ describe('Ws Item Hooks', () => { }); describe('useItemFeedbackUpdates', () => { - const item = FolderItemFactory(); + const item = FolderItemFactory() as FolderItem; const itemActorId = item.creator?.id ?? 'random-id'; const channel = { name: itemActorId, topic: TOPICS.ITEM_MEMBER }; const hook = () => hooks.useItemFeedbackUpdates(itemActorId); - const handleWS = (itemEvent: ItemOpFeedbackEvent) => { + const handleWS = (itemEvent: ItemOpFeedbackEvent) => { const handler = getHandlerByChannel(handlers, channel); expect(handler).not.toBeUndefined(); handler?.handler(itemEvent); @@ -47,10 +48,7 @@ describe('Ws Item Hooks', () => { await mockWsHook({ hook, wrapper }); - const itemEvent: ItemOpFeedbackEvent< - DiscriminatedItem, - typeof OPS.DELETE - > = { + const itemEvent: ItemOpFeedbackEvent = { kind: KINDS.FEEDBACK, resource: [item.id], op: OPS.DELETE, @@ -77,9 +75,9 @@ describe('Ws Item Hooks', () => { }; const MoveItemEventFactory = ( - originalItem: DiscriminatedItem, - movedItem: DiscriminatedItem, - ): ItemOpFeedbackEvent => ({ + originalItem: GenericItem, + movedItem: GenericItem, + ): ItemOpFeedbackEvent => ({ kind: KINDS.FEEDBACK, resource: [originalItem.id], op: OPS.MOVE, @@ -172,9 +170,9 @@ describe('Ws Item Hooks', () => { }; const CopyItemEventFactory = ( - originalItem: DiscriminatedItem, - copiedItem: DiscriminatedItem, - ): ItemOpFeedbackEvent => ({ + originalItem: GenericItem, + copiedItem: GenericItem, + ): ItemOpFeedbackEvent => ({ kind: KINDS.FEEDBACK, resource: [originalItem.id], op: OPS.COPY, @@ -254,8 +252,8 @@ describe('Ws Item Hooks', () => { }; const RecycleItemEventFactory = ( - recycledItem: DiscriminatedItem, - ): ItemOpFeedbackEvent => ({ + recycledItem: GenericItem, + ): ItemOpFeedbackEvent => ({ kind: KINDS.FEEDBACK, resource: [recycledItem.id], op: OPS.RECYCLE, @@ -301,9 +299,9 @@ describe('Ws Item Hooks', () => { queryClient.setQueryData(parentItemKey, null); }; - const RestoreItemEventFactory = ( - recycledItem: DiscriminatedItem, - ): ItemOpFeedbackEvent => ({ + const RestoreItemEventFactory = (recycledItem: { + id: string; + }): ItemOpFeedbackEvent => ({ kind: KINDS.FEEDBACK, resource: [recycledItem.id], op: OPS.RESTORE, @@ -336,15 +334,13 @@ describe('Ws Item Hooks', () => { await mockWsHook({ hook, wrapper }); - const itemEvent: ItemOpFeedbackEvent< - DiscriminatedItem, - typeof OPS.VALIDATE - > = { - kind: KINDS.FEEDBACK, - resource: [item.id], - op: OPS.VALIDATE, - errors: [], - }; + const itemEvent: ItemOpFeedbackEvent = + { + kind: KINDS.FEEDBACK, + resource: [item.id], + op: OPS.VALIDATE, + errors: [], + }; handleWS(itemEvent); diff --git a/src/query/ws/hooks/item.ts b/src/query/ws/hooks/item.ts index 261945053..c8b87af9f 100644 --- a/src/query/ws/hooks/item.ts +++ b/src/query/ws/hooks/item.ts @@ -6,7 +6,6 @@ import { useEffect } from 'react'; import { Channel, - DiscriminatedItem, FeedBackOperation, FeedBackOperationType, ItemOpFeedbackEvent as OpFeedbackEvent, @@ -19,6 +18,8 @@ import { import { QueryClient, useQueryClient } from '@tanstack/react-query'; +import type { GenericItem } from '@/openapi/client'; + import { getKeyForParentId, itemKeys, memberKeys } from '../../keys.js'; import { copyItemsRoutine, @@ -49,7 +50,7 @@ const invalidateRootDescendants = ( */ type ItemOpFeedbackEvent< T extends FeedBackOperationType = FeedBackOperationType, -> = OpFeedbackEvent; +> = OpFeedbackEvent; const InvalidateItemOpFeedback = (queryClient: QueryClient) => ({ [FeedBackOperation.DELETE]: () => { diff --git a/src/routes/analytics/items/$itemId/apps.tsx b/src/routes/analytics/items/$itemId/apps.tsx index 4cc5cfe0c..ddac5e549 100644 --- a/src/routes/analytics/items/$itemId/apps.tsx +++ b/src/routes/analytics/items/$itemId/apps.tsx @@ -3,13 +3,14 @@ import { useTranslation } from 'react-i18next'; import { Box, Grid, Typography } from '@mui/material'; -import { Context, PackedItem } from '@graasp/sdk'; +import { Context } from '@graasp/sdk'; import { createFileRoute } from '@tanstack/react-router'; import { type AuthenticatedUser, useAuth } from '@/AuthContext'; import { NS } from '@/config/constants'; import { API_HOST } from '@/config/env'; +import type { PackedItem } from '@/openapi/client'; import { Api } from '@/query'; import AppItem from '@/ui/items/AppItem'; diff --git a/src/routes/builder.map.tsx b/src/routes/builder.map.tsx index f27beb619..bc6601b21 100644 --- a/src/routes/builder.map.tsx +++ b/src/routes/builder.map.tsx @@ -1,11 +1,11 @@ import type { JSX } from 'react'; -import { DiscriminatedItem } from '@graasp/sdk'; - import { createFileRoute, redirect, useNavigate } from '@tanstack/react-router'; import { zodValidator } from '@tanstack/zod-adapter'; import { z } from 'zod'; +import type { GenericItem } from '@/openapi/client'; + import MapView from '~builder/components/item/MapView'; const schema = z.object({ @@ -25,18 +25,18 @@ function MapItemScreen(): JSX.Element | null { const navigate = useNavigate(); - const viewItem = (item: DiscriminatedItem) => { + const viewItem = (itemId: GenericItem['id']) => { throw redirect({ to: '/player/$rootId/$itemId', - params: { rootId: item.id, itemId: item.id }, + params: { rootId: itemId, itemId }, }); }; - const viewItemInBuilder = (item: DiscriminatedItem) => { + const viewItemInBuilder = (itemId: GenericItem['id']) => { // navigate to item in map navigate({ to: '/builder/items/$itemId', - params: { itemId: item.id }, + params: { itemId }, }); }; diff --git a/src/routes/builder/items/$itemId/_itemPage/settings.tsx b/src/routes/builder/items/$itemId/_itemPage/settings.tsx index c19afe481..c4e77e92e 100644 --- a/src/routes/builder/items/$itemId/_itemPage/settings.tsx +++ b/src/routes/builder/items/$itemId/_itemPage/settings.tsx @@ -30,7 +30,7 @@ function RouteComponent() { - + ); } diff --git a/src/ui/Navigation/Navigation.stories.tsx b/src/ui/Navigation/Navigation.stories.tsx index ba701b4bf..6c0b1d4e5 100644 --- a/src/ui/Navigation/Navigation.stories.tsx +++ b/src/ui/Navigation/Navigation.stories.tsx @@ -1,6 +1,5 @@ import { FileItemFactory, - FileItemType, FolderItemFactory, MemberFactory, MimeTypes, @@ -10,6 +9,8 @@ import type { Meta, StoryObj } from '@storybook/react'; import { CogIcon } from 'lucide-react'; import { expect, within } from 'storybook/test'; +import type { FileItem, FolderItem } from '@/openapi/client'; + import ExtraItemsMenu from './ExtraItemsMenu.js'; import { ItemMenuProps, Navigation } from './Navigation.js'; @@ -18,7 +19,7 @@ const buildParent = (name: string) => ({ name, }); -const buildItem = (name: string): FileItemType => +const buildItem = (name: string): FileItem => FileItemFactory({ id: name, name, @@ -71,7 +72,7 @@ const folder = FolderItemFactory({ path: 'item-path', settings: {}, creator: MemberFactory(), -}); +}) as FolderItem; export const FolderWithParents = { args: { @@ -103,7 +104,6 @@ export const FileWithParents = { itemPath, useChildren, item, - parents, }, diff --git a/src/ui/Navigation/Navigation.tsx b/src/ui/Navigation/Navigation.tsx index 2999e5c87..f5bf4201c 100644 --- a/src/ui/Navigation/Navigation.tsx +++ b/src/ui/Navigation/Navigation.tsx @@ -11,8 +11,6 @@ import { styled, } from '@mui/material'; -import { DiscriminatedItem } from '@graasp/sdk'; - import truncate from 'lodash.truncate'; import { ChevronRightIcon } from 'lucide-react'; @@ -20,6 +18,7 @@ import { MenuItemLink } from '@/components/ui/MenuItemLink.js'; import { TypographyLink } from '@/components/ui/TypographyLink.js'; import { ITEM_NAME_MAX_LENGTH } from '@/config/constants'; import { hooks } from '@/config/queryClient.js'; +import type { GenericItem } from '@/openapi/client'; const StyledBreadcrumbs = styled(Breadcrumbs)(() => ({ '.MuiBreadcrumbs-separator': { @@ -37,7 +36,7 @@ export type NavigationProps = { itemPath: string; buildMenuId?: (id: string) => string; id?: string; - item?: DiscriminatedItem; + item?: GenericItem; parents?: { name: string; id: string }[]; sx?: SxProps; useChildren: UseChildrenType; @@ -139,7 +138,7 @@ function ParentsNavigation({ } type CurrentItemProps = { - item: DiscriminatedItem; + item: GenericItem; buildBreadcrumbsItemLinkId?: (id: string) => string; buildIconId?: (id: string) => string; buildMenuId?: (id: string) => string; diff --git a/src/ui/Tree/RowMenus.tsx b/src/ui/Tree/RowMenus.tsx index 5eac3d56d..8bbe3cc52 100644 --- a/src/ui/Tree/RowMenus.tsx +++ b/src/ui/Tree/RowMenus.tsx @@ -2,7 +2,7 @@ import type { JSX } from 'react'; import { Pagination, Stack } from '@mui/material'; -import { DiscriminatedItem } from '@graasp/sdk'; +import type { GenericItem } from '@/openapi/client'; import RowMenu, { RowMenuProps } from './RowMenu.js'; import { NavigationElement } from './types.js'; @@ -17,8 +17,8 @@ export type RowMenusProps = { nbPages?: number; page?: number; emptyContent?: JSX.Element; - buildRowMenuId?: (id: DiscriminatedItem['id']) => string; - buildRowMenuArrowId?: (id: DiscriminatedItem['id']) => string; + buildRowMenuId?: (id: GenericItem['id']) => string; + buildRowMenuArrowId?: (id: GenericItem['id']) => string; }; const RowMenus = ({ diff --git a/src/ui/UserPopupMenu.stories.tsx b/src/ui/UserPopupMenu.stories.tsx index e3158369e..7764d4ca6 100644 --- a/src/ui/UserPopupMenu.stories.tsx +++ b/src/ui/UserPopupMenu.stories.tsx @@ -1,8 +1,9 @@ -import { AccountType, DiscriminatedItem } from '@graasp/sdk'; +import { AccountType } from '@graasp/sdk'; import type { Meta, StoryObj } from '@storybook/react'; import { expect, fn, screen, userEvent, within } from 'storybook/test'; +import type { GenericItem } from '@/openapi/client'; import { SMALL_AVATAR_SIZE } from '@/ui/constants.js'; import Avatar from './Avatar/Avatar.js'; @@ -68,7 +69,7 @@ export const Guest = { user: { ...CURRENT_USER, type: AccountType.Guest, - item: {} as DiscriminatedItem, + item: {} as GenericItem, }, avatar: ( { +import type { GenericItem } from '@/openapi/client'; + +const getWidthFromSizing = ( + size?: GenericItem['settings']['maxWidth'], +): string => { switch (size) { case MaxWidth.ExtraSmall: return '100px'; @@ -25,7 +29,7 @@ export const SizingWrapper = ({ size = MaxWidth.ExtraLarge, children, }: { - size?: MaxWidth; + size?: GenericItem['settings']['maxWidth']; children: ReactNode; }): JSX.Element => { const width = getWidthFromSizing(size); diff --git a/src/ui/items/appItemHooks.ts b/src/ui/items/appItemHooks.ts index 5202442f4..5aa7d227b 100644 --- a/src/ui/items/appItemHooks.ts +++ b/src/ui/items/appItemHooks.ts @@ -1,6 +1,8 @@ import { RefObject, useEffect } from 'react'; -import { DiscriminatedItem, LocalContext, UUID } from '@graasp/sdk'; +import { LocalContext, UUID } from '@graasp/sdk'; + +import { AppItem } from '@/openapi/client'; export type Token = string; @@ -37,7 +39,7 @@ const useAppCommunication = ({ iFrameRef, requestApiAccessToken, }: { - item: DiscriminatedItem; + item: AppItem; appUrl: string; contextPayload: ContextPayload; iFrameRef: RefObject; diff --git a/src/ui/items/withCaption.tsx b/src/ui/items/withCaption.tsx index e6c8990aa..ee7699ad9 100644 --- a/src/ui/items/withCaption.tsx +++ b/src/ui/items/withCaption.tsx @@ -7,11 +7,11 @@ import { AlignmentType, DescriptionPlacement, DescriptionPlacementType, - DiscriminatedItem, MimeTypes, getMimetype, } from '@graasp/sdk'; +import type { GenericItem } from '@/openapi/client'; import TextDisplay from '@/ui/TextDisplay/TextDisplay.js'; export const getDefaultFileAlignmentSetting = ( @@ -66,7 +66,7 @@ type WithCaptionItem = { descriptionPlacement?: DescriptionPlacementType; alignment?: AlignmentType; }; - extra?: DiscriminatedItem['extra']; + extra?: GenericItem['extra']; }; type WithCaptionProps = { @@ -86,7 +86,8 @@ export const CaptionWrapper = ({ const alignment = item.settings?.alignment ?? getDefaultFileAlignmentSetting( - item.extra ? getMimetype(item.extra) : undefined, + // eslint-disable-next-line @typescript-eslint/no-explicit-any + item.extra ? getMimetype(item.extra as any) : undefined, ); const alignItems = getAlignItemsFromAlignmentSetting(alignment);