diff --git a/docs/api/cozy-client/modules/models.folder.md b/docs/api/cozy-client/modules/models.folder.md index fdb7cf6bc9..11e2a37d20 100644 --- a/docs/api/cozy-client/modules/models.folder.md +++ b/docs/api/cozy-client/modules/models.folder.md @@ -25,7 +25,7 @@ *Defined in* -[packages/cozy-client/src/models/folder.js:9](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/models/folder.js#L9) +[packages/cozy-client/src/models/folder.js:11](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/models/folder.js#L11) ## Functions @@ -51,7 +51,7 @@ Folder document *Defined in* -[packages/cozy-client/src/models/folder.js:69](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/models/folder.js#L69) +[packages/cozy-client/src/models/folder.js:71](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/models/folder.js#L71) *** @@ -77,7 +77,7 @@ Folder document *Defined in* -[packages/cozy-client/src/models/folder.js:29](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/models/folder.js#L29) +[packages/cozy-client/src/models/folder.js:31](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/models/folder.js#L31) *** @@ -102,4 +102,4 @@ Folder referenced by the given document *Defined in* -[packages/cozy-client/src/models/folder.js:90](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/models/folder.js#L90) +[packages/cozy-client/src/models/folder.js:92](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/models/folder.js#L92) diff --git a/docs/api/cozy-client/modules/models.konnectorFolder.md b/docs/api/cozy-client/modules/models.konnectorFolder.md index df75686f8e..de66e0be00 100644 --- a/docs/api/cozy-client/modules/models.konnectorFolder.md +++ b/docs/api/cozy-client/modules/models.konnectorFolder.md @@ -44,7 +44,7 @@ The result path *Defined in* -[packages/cozy-client/src/models/konnectorFolder.js:115](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/models/konnectorFolder.js#L115) +[packages/cozy-client/src/models/konnectorFolder.js:154](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/models/konnectorFolder.js#L154) *** @@ -69,7 +69,7 @@ Permission object *Defined in* -[packages/cozy-client/src/models/konnectorFolder.js:227](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/models/konnectorFolder.js#L227) +[packages/cozy-client/src/models/konnectorFolder.js:266](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/models/konnectorFolder.js#L266) *** @@ -94,7 +94,7 @@ Directory attributes *Defined in* -[packages/cozy-client/src/models/konnectorFolder.js:63](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/models/konnectorFolder.js#L63) +[packages/cozy-client/src/models/konnectorFolder.js:102](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/models/konnectorFolder.js#L102) *** @@ -120,7 +120,32 @@ Ensures the destination folder of a konnector exists and is initiated with prope *Defined in* -[packages/cozy-client/src/models/konnectorFolder.js:25](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/models/konnectorFolder.js#L25) +[packages/cozy-client/src/models/konnectorFolder.js:27](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/models/konnectorFolder.js#L27) + +*** + +### findKonnectorAccountFolderByReference + +▸ **findKonnectorAccountFolderByReference**(`options`): `Promise`<`IOCozyFolder`> + +try to find a konnector account folder using file references + +*Parameters* + +| Name | Type | Description | +| :------ | :------ | :------ | +| `options` | `Object` | options object | +| `options.client` | [`CozyClient`](../classes/CozyClient.md) | CozyClient instance | +| `options.slug` | `string` | konnector slug | +| `options.sourceAccountIdentifier` | `string` | source account identifier | + +*Returns* + +`Promise`<`IOCozyFolder`> + +*Defined in* + +[packages/cozy-client/src/models/konnectorFolder.js:374](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/models/konnectorFolder.js#L374) *** @@ -147,4 +172,4 @@ Created io.cozy.files document *Defined in* -[packages/cozy-client/src/models/konnectorFolder.js:78](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/models/konnectorFolder.js#L78) +[packages/cozy-client/src/models/konnectorFolder.js:117](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/models/konnectorFolder.js#L117) diff --git a/packages/cozy-client/src/models/folder.js b/packages/cozy-client/src/models/folder.js index b03035fe28..055af3a3a7 100644 --- a/packages/cozy-client/src/models/folder.js +++ b/packages/cozy-client/src/models/folder.js @@ -2,6 +2,8 @@ import sortBy from 'lodash/sortBy' import CozyClient from '../CozyClient' import { DOCTYPE_FILES } from '../const' +import { Q } from '../queries/dsl' + const APP_DOCTYPE = 'io.cozy.apps' const administrative = 'administrative' const photos = 'photos' @@ -88,16 +90,13 @@ export const createFolderWithReference = async (client, path, document) => { * @returns {Promise} Folder referenced by the given document */ export const getReferencedFolder = async (client, document) => { - const { included } = await client - .collection(DOCTYPE_FILES) - .findReferencedBy(document) - const foldersOutsideTrash = included.filter( - folder => !/^\/\.cozy_trash/.test(folder.path) + const { included: folders } = await client.query( + Q(DOCTYPE_FILES) + .partialIndex({ type: 'directory', trashed: false }) + .referencedBy(document) ) // there can be multiple folders with the same reference in some edge cases // when this happens we return the most recent one - return foldersOutsideTrash.length > 0 - ? sortBy(foldersOutsideTrash, 'created_at').pop() - : null + return folders.length > 0 ? sortBy(folders, 'created_at').pop() : null } diff --git a/packages/cozy-client/src/models/folder.spec.js b/packages/cozy-client/src/models/folder.spec.js index d80efe83c4..0f4fe81f4e 100644 --- a/packages/cozy-client/src/models/folder.spec.js +++ b/packages/cozy-client/src/models/folder.spec.js @@ -3,6 +3,7 @@ import { MAGIC_FOLDERS, ensureMagicFolder, getReferencedFolder } from './folder' describe('Folder model', () => { const mockClient = { collection: () => mockClient, + query: jest.fn(), findReferencedBy: jest.fn(), ensureDirectoryExists: jest.fn(), addReferencesTo: jest.fn(), @@ -38,7 +39,7 @@ describe('Folder model', () => { } ] - mockClient.findReferencedBy.mockResolvedValue({ + mockClient.query.mockResolvedValueOnce({ included: existingMagicFolders }) @@ -66,10 +67,9 @@ describe('Folder model', () => { }) it('should create magic folder', async () => { - mockClient.findReferencedBy.mockResolvedValue({ + mockClient.query.mockResolvedValueOnce({ included: [] }) - mockClient.ensureDirectoryExists.mockResolvedValue('dir-id') mockClient.get.mockResolvedValue({ data: {} }) @@ -90,24 +90,6 @@ describe('Folder model', () => { }) describe('getReferencedFolder', () => { - it('should filter trashed folders', async () => { - const referencedFolder = { - path: '/Reference/Folder' - } - - const trashFolder = { - path: '/.cozy_trash/Old/Reference/Folder' - } - - mockClient.findReferencedBy.mockResolvedValue({ - included: [referencedFolder, trashFolder] - }) - - const result = await getReferencedFolder(mockClient, 'ref') - - expect(result).toBe(referencedFolder) - }) - it('should return the most recently created folder', async () => { const oldFolder = { path: '/Old/folder', @@ -118,7 +100,7 @@ describe('Folder model', () => { created_at: '2020-03-02T14:57:07.661588+01:00' } - mockClient.findReferencedBy.mockResolvedValue({ + mockClient.query.mockResolvedValueOnce({ included: [oldFolder, recentFolder] }) diff --git a/packages/cozy-client/src/models/konnectorFolder.js b/packages/cozy-client/src/models/konnectorFolder.js index d81361b308..067f54a628 100644 --- a/packages/cozy-client/src/models/konnectorFolder.js +++ b/packages/cozy-client/src/models/konnectorFolder.js @@ -6,6 +6,8 @@ import { getAccountName } from './account' import { getLocalizer } from './document/locales' +import { Q } from '../queries/dsl' + const FILES_DOCTYPE = 'io.cozy.files' const PERMISSIONS_DOCTYPE = 'io.cozy.permissions' @@ -27,7 +29,7 @@ export const ensureKonnectorFolder = async ( { konnector, account, lang } ) => { const permissions = client.collection(PERMISSIONS_DOCTYPE) - const files = client.collection(FILES_DOCTYPE) + const fileCollection = client.collection(FILES_DOCTYPE) const t = getLocalizer(lang) const [adminFolder, photosFolder] = await Promise.all([ @@ -39,6 +41,30 @@ export const ensureKonnectorFolder = async ( ensureMagicFolder(client, MAGIC_FOLDERS.PHOTOS, t('MagicFolders.photos')) ]) + const sourceAccountIdentifier = getAccountName(account) + + const alreadyExistingAccountFolder = await findKonnectorAccountFolderByReference( + { client, slug: konnector.slug, sourceAccountIdentifier } + ) + if (alreadyExistingAccountFolder) { + return alreadyExistingAccountFolder + } + + const alreadyExistingKonnectorMainFolder = await findKonnectorMainFolderByReference( + { client, slug: konnector.slug } + ) + + if (alreadyExistingKonnectorMainFolder) { + // save account folder as a child of main konnector account folder + return await saveKonnectorAccountFolder({ + client, + mainFolder: alreadyExistingKonnectorMainFolder, + konnector, + sourceAccountIdentifier + }) + } + + // if the previous shortcuts did not work, create the folders like we did before but with proper references const path = buildFolderPath(konnector, account, { administrative: adminFolder.path, photos: photosFolder.path @@ -47,8 +73,21 @@ export const ensureKonnectorFolder = async ( (await statDirectoryByPath(client, path)) || (await createDirectoryByPath(client, path)) - await permissions.add(konnector, buildFolderPermission(folder)) - await files.addReferencesTo(konnector, [folder]) + const { data: konnectorFolder } = await fileCollection.statById(folder.dir_id) + await Promise.all([ + permissions.add(konnector, buildFolderPermission(folder)), + ensureKonnectorReference({ client, folder, konnector }), + ensureSourceAccountIdentifierReference({ + client, + folder, + sourceAccountIdentifier + }), + ensureKonnectorReference({ + client, + folder: konnectorFolder, + konnector + }) + ]) return folder } @@ -228,7 +267,7 @@ export const buildFolderPermission = folder => { return { // Legacy name saveFolder: { - type: 'io.cozy.files', + type: FILES_DOCTYPE, values: [folder._id], verbs: ['GET', 'PATCH', 'POST'] } @@ -244,3 +283,157 @@ export const buildFolderPermission = folder => { */ const trim = (str, c = '\\s') => str.replace(new RegExp(`^([${c}]*)(.*?)([${c}]*)$`), '$2') + +/** + * Test if a given folder has a given konnector reference + * + * @param {import('../types').IOCozyFolder} folder - folder to test + * @param {string} slug - konnector slug + * @returns {boolean} + */ +const hasKonnectorReference = (folder, slug) => + Boolean( + folder.referenced_by?.find( + ref => + ref.type === 'io.cozy.konnectors' && + ref.id === 'io.cozy.konnectors/' + slug + ) + ) + +/** + * Test if a given folder has a given source account identifier reference + * + * @param {import('../types').IOCozyFolder} folder - folder to test + * @param {string} [sourceAccountIdentifier] - source account identifier + * @returns {boolean} + */ +const hasSourceAccountIdentifierReference = ( + folder, + sourceAccountIdentifier +) => { + return Boolean( + folder.referenced_by?.find( + ref => + ref.type === 'io.cozy.accounts.sourceAccountIdentifier' && + (sourceAccountIdentifier ? ref.id === sourceAccountIdentifier : true) + ) + ) +} + +/** + * Ensure that a given folder has the given konnector reference + * + * @param {object} options - options object + * @param {CozyClient} options.client - CozyClient instance + * @param {import('../types').IOCozyFolder} options.folder - folder to test + * @param {import('../types').IOCozyKonnector} options.konnector - konnector to which we want the reference + * @returns {Promise} + */ +const ensureKonnectorReference = async ({ client, folder, konnector }) => { + const fileCollection = client.collection(FILES_DOCTYPE) + if (!hasKonnectorReference(folder, konnector.slug)) { + await fileCollection.addReferencesTo(konnector, [folder]) + } +} + +/** + * Ensure that a given folder has the given source account identifier reference + * + * @param {object} options - options object + * @param {CozyClient} options.client - CozyClient instance + * @param {import('../types').IOCozyFolder} options.folder - folder to test + * @param {string} options.sourceAccountIdentifier - source account identifier to which we want the reference + * @returns {Promise} + */ +const ensureSourceAccountIdentifierReference = async ({ + client, + folder, + sourceAccountIdentifier +}) => { + const fileCollection = client.collection(FILES_DOCTYPE) + if (!hasSourceAccountIdentifierReference(folder, sourceAccountIdentifier)) { + await fileCollection.addReferencesTo( + { + _id: sourceAccountIdentifier, + _type: 'io.cozy.accounts.sourceAccountIdentifier' + }, + [folder] + ) + } +} + +/** + * try to find a konnector account folder using file references + * + * @param {object} options - options object + * @param {CozyClient} options.client - CozyClient instance + * @param {string} options.slug - konnector slug + * @param {string} options.sourceAccountIdentifier - source account identifier + * @returns {Promise} + */ +export const findKonnectorAccountFolderByReference = async ({ + client, + slug, + sourceAccountIdentifier +}) => { + const { included: folders } = await client.query( + Q(FILES_DOCTYPE) + .partialIndex({ type: 'directory', trashed: false }) + .referencedBy({ + _type: 'io.cozy.konnectors', + _id: `io.cozy.konnectors/${slug}` + }) + ) + return folders.find(folder => + hasSourceAccountIdentifierReference(folder, sourceAccountIdentifier) + ) +} + +/** + * try to find a konnector main folder using file references + * + * @param {object} options - options object + * @param {CozyClient} options.client - CozyClient instance + * @param {string} options.slug - konnector slug + * @returns {Promise} + */ +const findKonnectorMainFolderByReference = async ({ client, slug }) => { + const { included: files } = await client.query( + Q(FILES_DOCTYPE) + .partialIndex({ type: 'directory', trashed: false }) + .referencedBy({ + _type: 'io.cozy.konnectors', + _id: `io.cozy.konnectors/${slug}` + }) + ) + return files.find(file => !hasSourceAccountIdentifierReference(file)) +} + +/** + * Will create or update an account folder with proper references + * + * @param {object} options - options object + * @param {CozyClient} options.client - CozyClient instance + * @param {import('../types').IOCozyFolder} options.mainFolder - Main konnector folder where the account folder may be created + * @param {import('../types').IOCozyKonnector} options.konnector - Konnector associated to the main folder + * @param {string} options.sourceAccountIdentifier - source account identifier + * @returns {Promise} + */ +async function saveKonnectorAccountFolder({ + client, + mainFolder, + konnector, + sourceAccountIdentifier +}) { + const path = mainFolder.path + '/' + sourceAccountIdentifier + const folder = + (await statDirectoryByPath(client, path)) || + (await createDirectoryByPath(client, path)) + await ensureKonnectorReference({ client, folder, konnector }) + await ensureSourceAccountIdentifierReference({ + client, + folder, + sourceAccountIdentifier + }) + return folder +} diff --git a/packages/cozy-client/src/models/konnectorFolder.spec.js b/packages/cozy-client/src/models/konnectorFolder.spec.js index 73175633d1..b3bc68e311 100644 --- a/packages/cozy-client/src/models/konnectorFolder.spec.js +++ b/packages/cozy-client/src/models/konnectorFolder.spec.js @@ -3,8 +3,9 @@ import { ensureKonnectorFolder } from './konnectorFolder' describe('ensureKonnectorFolder', () => { const mockClient = { collection: () => mockClient, - findReferencedBy: jest.fn(), + query: jest.fn(), statByPath: jest.fn(), + statById: jest.fn(), add: jest.fn(), addReferencesTo: jest.fn(), createDirectoryByPath: jest.fn() @@ -17,6 +18,7 @@ describe('ensureKonnectorFolder', () => { ] const konnector = { name: 'konnectorName', + slug: 'konnectorSlug', folders: [ { defaultDir: '$administrative/$konnector/$account' @@ -26,7 +28,10 @@ describe('ensureKonnectorFolder', () => { const account = { auth: { accountName: 'testAccountName' } } beforeEach(() => { - mockClient.findReferencedBy.mockResolvedValue({ + mockClient.query.mockResolvedValueOnce({ + included: existingMagicFolder + }) + mockClient.query.mockResolvedValueOnce({ included: existingMagicFolder }) }) @@ -36,10 +41,17 @@ describe('ensureKonnectorFolder', () => { }) it('should create a folder when it does not exist and return it', async () => { + mockClient.query.mockResolvedValue({ + included: [] + }) mockClient.statByPath.mockRejectedValueOnce({ status: 404 }) + mockClient.statById.mockResolvedValueOnce({ + data: { _id: 'parentfolderid' } + }) mockClient.createDirectoryByPath.mockResolvedValueOnce({ data: { - _id: 'createdfolderid' + _id: 'createdfolderid', + dir_id: 'parentfolderid' } }) const result = await ensureKonnectorFolder(mockClient, { @@ -47,7 +59,10 @@ describe('ensureKonnectorFolder', () => { account, lang: 'fr' }) - expect(result).toStrictEqual({ _id: 'createdfolderid' }) + expect(result).toStrictEqual({ + _id: 'createdfolderid', + dir_id: 'parentfolderid' + }) expect(mockClient.statByPath).toHaveBeenCalledWith( '/Administratif/konnectorName/testAccountName' ) @@ -62,9 +77,122 @@ describe('ensureKonnectorFolder', () => { } }) expect(mockClient.addReferencesTo).toHaveBeenCalledWith(konnector, [ - { _id: 'createdfolderid' } + { _id: 'createdfolderid', dir_id: 'parentfolderid' } ]) }) + it('should not create any folder if account folder with proper references exists', async () => { + const existingAccountFolder = { + _id: 'acountFolderId', + type: 'directory', + referenced_by: [ + { + type: 'io.cozy.konnectors', + id: 'io.cozy.konnectors/konnectorSlug' + }, + { + type: 'io.cozy.accounts.sourceAccountIdentifier', + id: 'testAccountName' + } + ] + } + mockClient.query.mockResolvedValueOnce({ + included: [existingAccountFolder] + }) + const result = await ensureKonnectorFolder(mockClient, { + konnector, + account, + lang: 'fr' + }) + expect(result).toStrictEqual(existingAccountFolder) + expect(mockClient.createDirectoryByPath).not.toHaveBeenCalled() + }) + it('should create account folder as a child of folder with konnector reference if any', async () => { + const existingKonnectorFolder = { + _id: 'konnectorFolderId', + type: 'directory', + referenced_by: [ + { + type: 'io.cozy.konnectors', + id: 'io.cozy.konnectors/konnectorSlug' + } + ] + } + mockClient.query.mockResolvedValue({ + included: [existingKonnectorFolder] + }) + mockClient.statByPath.mockRejectedValueOnce({ + status: 404 + }) + const accountFolder = { + _id: 'accountFolderId', + dir_id: 'konnectorFolderId' + } + mockClient.createDirectoryByPath.mockResolvedValueOnce({ + data: accountFolder + }) + + const result = await ensureKonnectorFolder(mockClient, { + konnector, + account, + lang: 'fr' + }) + expect(result).toStrictEqual(accountFolder) + expect(mockClient.createDirectoryByPath).toHaveBeenCalledTimes(1) + expect(mockClient.addReferencesTo).toHaveBeenCalledTimes(2) + expect(mockClient.addReferencesTo).toHaveBeenNthCalledWith(1, konnector, [ + accountFolder + ]) + expect(mockClient.addReferencesTo).toHaveBeenNthCalledWith( + 2, + { + _id: 'testAccountName', + _type: 'io.cozy.accounts.sourceAccountIdentifier' + }, + [accountFolder] + ) + }) + it('should add proper references to konnector folder child with proper name if any', async () => { + const existingKonnectorFolder = { + _id: 'konnectorFolderId', + type: 'directory', + referenced_by: [ + { + type: 'io.cozy.konnectors', + id: 'io.cozy.konnectors/konnectorSlug' + } + ] + } + mockClient.query.mockResolvedValue({ + included: [existingKonnectorFolder] + }) + const accountFolder = { + _id: 'accountFolderId', + dir_id: 'konnectorFolderId' + } + mockClient.statByPath.mockResolvedValueOnce({ + data: accountFolder + }) + + const result = await ensureKonnectorFolder(mockClient, { + konnector, + account, + lang: 'fr' + }) + expect(result).toStrictEqual(accountFolder) + expect(mockClient.createDirectoryByPath).not.toHaveBeenCalled() + expect(mockClient.addReferencesTo).toHaveBeenCalledTimes(2) + expect(mockClient.addReferencesTo).toHaveBeenNthCalledWith(1, konnector, [ + accountFolder + ]) + expect(mockClient.addReferencesTo).toHaveBeenNthCalledWith( + 2, + { + _id: 'testAccountName', + _type: 'io.cozy.accounts.sourceAccountIdentifier' + }, + [accountFolder] + ) + }) it('should not create a folder if it already exist', async () => { const existingMagicFolder = [ { @@ -72,12 +200,24 @@ describe('ensureKonnectorFolder', () => { created_at: '2023-03-02T14:57:07.661588+01:00' } ] - mockClient.findReferencedBy.mockResolvedValue({ + mockClient.query.mockResolvedValueOnce({ included: existingMagicFolder }) + mockClient.query.mockResolvedValueOnce({ + included: [] + }) + mockClient.query.mockResolvedValueOnce({ + included: [] + }) + mockClient.statById.mockResolvedValueOnce({ + data: { + _id: 'parentfolderid' + } + }) mockClient.statByPath.mockResolvedValueOnce({ data: { - _id: 'alreadyexistingfolderid' + _id: 'alreadyexistingfolderid', + dir_id: 'parentfolderid' } }) const result = await ensureKonnectorFolder(mockClient, { @@ -92,22 +232,34 @@ describe('ensureKonnectorFolder', () => { account: { auth: { accountName: 'testAccountName' } }, lang: 'fr' }) - expect(result).toStrictEqual({ _id: 'alreadyexistingfolderid' }) + expect(result).toStrictEqual({ + _id: 'alreadyexistingfolderid', + dir_id: 'parentfolderid' + }) expect(mockClient.statByPath).toHaveBeenCalledWith( '/Administratif/konnectorName/testAccountName' ) expect(mockClient.createDirectoryByPath).not.toHaveBeenCalled() }) it('should recreate a folder when the destination folder is in the trash', async () => { + mockClient.query.mockResolvedValue({ + included: [] + }) mockClient.statByPath.mockResolvedValueOnce({ data: { _id: 'folderintrash', trashed: true } }) + mockClient.statById.mockResolvedValueOnce({ + data: { + _id: 'parentfolderid' + } + }) mockClient.createDirectoryByPath.mockResolvedValueOnce({ data: { - _id: 'createdfolderid' + _id: 'createdfolderid', + dir_id: 'parentfolderid' } }) const result = await ensureKonnectorFolder(mockClient, { @@ -115,7 +267,10 @@ describe('ensureKonnectorFolder', () => { account, lang: 'fr' }) - expect(result).toStrictEqual({ _id: 'createdfolderid' }) + expect(result).toStrictEqual({ + _id: 'createdfolderid', + dir_id: 'parentfolderid' + }) expect(mockClient.statByPath).toHaveBeenCalledWith( '/Administratif/konnectorName/testAccountName' ) @@ -130,7 +285,7 @@ describe('ensureKonnectorFolder', () => { } }) expect(mockClient.addReferencesTo).toHaveBeenCalledWith(konnector, [ - { _id: 'createdfolderid' } + { _id: 'createdfolderid', dir_id: 'parentfolderid' } ]) }) }) diff --git a/packages/cozy-client/src/types.js b/packages/cozy-client/src/types.js index f0edd116dc..829976f863 100644 --- a/packages/cozy-client/src/types.js +++ b/packages/cozy-client/src/types.js @@ -397,6 +397,7 @@ import { QueryDefinition } from './queries/dsl' /** * @typedef {object} FolderDocument - An io.cozy.files document * @property {string} _id - Id of the folder + * @property {string} dir_id - Parent folder * @property {FilesDoctype} _type - Doctype of the folder * @property {string} name - Name of the folder * @property {object} metadata - Metadata of the folder diff --git a/packages/cozy-client/types/models/konnectorFolder.d.ts b/packages/cozy-client/types/models/konnectorFolder.d.ts index daacf439dc..45f649636d 100644 --- a/packages/cozy-client/types/models/konnectorFolder.d.ts +++ b/packages/cozy-client/types/models/konnectorFolder.d.ts @@ -9,4 +9,9 @@ export function buildFolderPath(konnector: import('../types').IOCozyKonnector, a [x: string]: string; }): string; export function buildFolderPermission(folder: import('../types').IOCozyFolder): any; +export function findKonnectorAccountFolderByReference({ client, slug, sourceAccountIdentifier }: { + client: CozyClient; + slug: string; + sourceAccountIdentifier: string; +}): Promise; import CozyClient from "../CozyClient"; diff --git a/packages/cozy-client/types/types.d.ts b/packages/cozy-client/types/types.d.ts index d317129764..303cbd904b 100644 --- a/packages/cozy-client/types/types.d.ts +++ b/packages/cozy-client/types/types.d.ts @@ -744,6 +744,10 @@ export type FolderDocument = { * - Id of the folder */ _id: string; + /** + * - Parent folder + */ + dir_id: string; /** * - Doctype of the folder */