1
0
mirror of https://github.com/laurent22/joplin.git synced 2025-11-23 22:36:32 +02:00

Desktop: Add a button to collapse or expand all folders (#11905)

This commit is contained in:
Laurent Cozic
2025-03-02 22:20:47 +00:00
committed by GitHub
parent 0cc0fec8c3
commit 06359834d6
13 changed files with 144 additions and 9 deletions

View File

@@ -0,0 +1,35 @@
import { setupDatabaseAndSynchronizer, switchClient } from '../../testing/test-utils';
import Folder from '../Folder';
import areAllFoldersCollapsed from './areAllFoldersCollapsed';
describe('areAllFoldersCollapsed', () => {
beforeEach(async () => {
await setupDatabaseAndSynchronizer(1);
await switchClient(1);
});
it('should tell if all folders are collapsed', 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(areAllFoldersCollapsed(await Folder.all(), [])).toBe(false);
expect(areAllFoldersCollapsed(await Folder.all(), [
folder1.id,
folder2.id,
])).toBe(false);
expect(areAllFoldersCollapsed(await Folder.all(), [
folder1.id,
folder2.id,
folder2a.id,
])).toBe(true);
});
});

View File

@@ -0,0 +1,10 @@
import { FolderEntity } from '../../services/database/types';
import getCanBeCollapsedFolderIds from './getCanBeCollapsedFolderIds';
export default (folders: FolderEntity[], collapsedFolderIds: string[]) => {
const canBeCollapsedIds = getCanBeCollapsedFolderIds(folders);
if (collapsedFolderIds.length !== canBeCollapsedIds.length) return false;
collapsedFolderIds = collapsedFolderIds.slice().sort();
canBeCollapsedIds.sort();
return JSON.stringify(collapsedFolderIds) === JSON.stringify(canBeCollapsedIds);
};

View File

@@ -0,0 +1,21 @@
import { FolderEntity } from '../../services/database/types';
import Folder, { FolderEntityWithChildren } from '../Folder';
export default (folders: FolderEntity[]) => {
const tree = Folder.buildTree(folders);
const canBeCollapsedIds: string[] = [];
const processTree = (folders: FolderEntityWithChildren[]) => {
for (const folder of folders) {
if (folder.children.length) {
canBeCollapsedIds.push(folder.id);
processTree(folder.children);
}
}
};
processTree(tree);
return canBeCollapsedIds;
};