You've already forked joplin
mirror of
https://github.com/laurent22/joplin.git
synced 2025-08-10 22:11:50 +02:00
This commit is contained in:
@@ -1161,6 +1161,7 @@ packages/lib/models/settings/settingValidations.js
|
||||
packages/lib/models/settings/types.js
|
||||
packages/lib/models/utils/areAllFoldersCollapsed.test.js
|
||||
packages/lib/models/utils/areAllFoldersCollapsed.js
|
||||
packages/lib/models/utils/getCanBeCollapsedFolderIds.test.js
|
||||
packages/lib/models/utils/getCanBeCollapsedFolderIds.js
|
||||
packages/lib/models/utils/getCollator.js
|
||||
packages/lib/models/utils/getConflictFolderId.js
|
||||
|
1
.gitignore
vendored
1
.gitignore
vendored
@@ -1135,6 +1135,7 @@ packages/lib/models/settings/settingValidations.js
|
||||
packages/lib/models/settings/types.js
|
||||
packages/lib/models/utils/areAllFoldersCollapsed.test.js
|
||||
packages/lib/models/utils/areAllFoldersCollapsed.js
|
||||
packages/lib/models/utils/getCanBeCollapsedFolderIds.test.js
|
||||
packages/lib/models/utils/getCanBeCollapsedFolderIds.js
|
||||
packages/lib/models/utils/getCollator.js
|
||||
packages/lib/models/utils/getConflictFolderId.js
|
||||
|
28
packages/lib/models/utils/getCanBeCollapsedFolderIds.test.ts
Normal file
28
packages/lib/models/utils/getCanBeCollapsedFolderIds.test.ts
Normal file
@@ -0,0 +1,28 @@
|
||||
import { setupDatabaseAndSynchronizer, switchClient } from '../../testing/test-utils';
|
||||
import Folder from '../Folder';
|
||||
import getCanBeCollapsedFolderIds from './getCanBeCollapsedFolderIds';
|
||||
|
||||
describe('getCanBeCollapsedFolderIds', () => {
|
||||
|
||||
beforeEach(async () => {
|
||||
await setupDatabaseAndSynchronizer(1);
|
||||
await switchClient(1);
|
||||
});
|
||||
|
||||
it('should tell if trash can be collapsed too', async () => {
|
||||
const folder1 = await Folder.save({});
|
||||
await Folder.save({ parent_id: folder1.id });
|
||||
await Folder.save({ parent_id: folder1.id });
|
||||
|
||||
const folder2 = await Folder.save({ });
|
||||
const folder2a = await Folder.save({ parent_id: folder2.id });
|
||||
await Folder.save({ parent_id: folder2a.id });
|
||||
|
||||
expect(getCanBeCollapsedFolderIds(await Folder.all({ includeTrash: true }))).toHaveLength(3);
|
||||
|
||||
await Folder.delete(folder1.id, { toTrash: true, deleteChildren: true });
|
||||
|
||||
expect(getCanBeCollapsedFolderIds(await Folder.all({ includeTrash: true }))).toHaveLength(4);
|
||||
});
|
||||
|
||||
});
|
@@ -1,4 +1,5 @@
|
||||
import { FolderEntity } from '../../services/database/types';
|
||||
import { getTrashFolderId } from '../../services/trash';
|
||||
import Folder, { FolderEntityWithChildren } from '../Folder';
|
||||
|
||||
export default (folders: FolderEntity[]) => {
|
||||
@@ -17,5 +18,25 @@ export default (folders: FolderEntity[]) => {
|
||||
|
||||
processTree(tree);
|
||||
|
||||
// Logic to determine whether trash should be included in canBeCollapsedIds
|
||||
// Loops over all folders recursively in case in the future a deleted folder remains child of a not deleted folder (and hence there is no deleted folder in 'tree').
|
||||
const isTrashCollapsable = (folders: FolderEntityWithChildren[]) => {
|
||||
for (const folder of folders) {
|
||||
if (folder.deleted_time) {
|
||||
canBeCollapsedIds.push(getTrashFolderId());
|
||||
return;
|
||||
}
|
||||
|
||||
if (folder.children.length) {
|
||||
isTrashCollapsable(folder.children);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// Future proofing: if TrashFolder is already in canBeCollapsedIds do not add it again.
|
||||
if (!(getTrashFolderId() in canBeCollapsedIds)) {
|
||||
isTrashCollapsable(tree);
|
||||
}
|
||||
|
||||
return canBeCollapsedIds;
|
||||
};
|
||||
|
Reference in New Issue
Block a user