From 537239d1c2ed804aceeeba9486803327b9d46502 Mon Sep 17 00:00:00 2001 From: Santiago Caro Duque Date: Wed, 28 Feb 2024 10:24:06 +0100 Subject: [PATCH] Toggle all direct children from folder #1188 --- .../desktop/src/renderer/app/app.component.ts | 3 + .../components/context-menu/context-menus.ts | 10 ++ .../app/services/environments.service.ts | 15 +++ .../data/mock-envs/basic-folder-2-routes.json | 124 ++++++++++++++++++ packages/desktop/test/libs/context-menu.ts | 3 +- packages/desktop/test/specs/folders.spec.ts | 20 +++ 6 files changed, 174 insertions(+), 1 deletion(-) create mode 100644 packages/desktop/test/data/mock-envs/basic-folder-2-routes.json diff --git a/packages/desktop/src/renderer/app/app.component.ts b/packages/desktop/src/renderer/app/app.component.ts index 135ff286c..a7c242210 100644 --- a/packages/desktop/src/renderer/app/app.component.ts +++ b/packages/desktop/src/renderer/app/app.component.ts @@ -214,6 +214,9 @@ export class AppComponent extends Logger implements OnInit { if (payload.subject === 'route') { this.environmentsService.toggleRoute(payload.subjectUUID); } + if (payload.subject === 'folder') { + this.environmentsService.toggleFolder(payload.subjectUUID); + } break; case 'duplicateToEnv': this.startEntityDuplicationToAnotherEnvironment( diff --git a/packages/desktop/src/renderer/app/components/context-menu/context-menus.ts b/packages/desktop/src/renderer/app/components/context-menu/context-menus.ts index 86ee61e74..ba266fb11 100644 --- a/packages/desktop/src/renderer/app/components/context-menu/context-menus.ts +++ b/packages/desktop/src/renderer/app/components/context-menu/context-menus.ts @@ -87,6 +87,16 @@ export const FoldersContextMenu = (folderUUID: string): ContextMenuItem[] => [ icon: 'folder', disabled: false }, + { + payload: { + subject: 'folder', + action: 'toggle', + subjectUUID: folderUUID + }, + label: 'Toggle folder', + icon: 'power_settings_new', + disabled: false + }, { payload: { subject: 'folder', diff --git a/packages/desktop/src/renderer/app/services/environments.service.ts b/packages/desktop/src/renderer/app/services/environments.service.ts index e3e8f50ec..6c272d24a 100644 --- a/packages/desktop/src/renderer/app/services/environments.service.ts +++ b/packages/desktop/src/renderer/app/services/environments.service.ts @@ -665,6 +665,21 @@ export class EnvironmentsService extends Logger { } } + /** + * Enable and disable routes in a folder + */ + public toggleFolder(folderId: string | 'root') { + const activeEnvironment = this.store.getActiveEnvironment(); + const selectedFolder = activeEnvironment.folders.find( + (folder) => folder.uuid === folderId + ); + for (const child of selectedFolder.children) { + if (child.type === 'route') { + this.toggleRoute(child.uuid); + } + } + } + /** * Update a folder and save it in the store */ diff --git a/packages/desktop/test/data/mock-envs/basic-folder-2-routes.json b/packages/desktop/test/data/mock-envs/basic-folder-2-routes.json new file mode 100644 index 000000000..2fbcd65b7 --- /dev/null +++ b/packages/desktop/test/data/mock-envs/basic-folder-2-routes.json @@ -0,0 +1,124 @@ +{ + "uuid": "c8cdc030-344f-452f-aec4-56ded95b440c", + "lastMigration": 32, + "name": "Basic folder 2 routes", + "endpointPrefix": "", + "latency": 0, + "port": 3003, + "hostname": "", + "folders": [ + { + "uuid": "1a84ec8b-0179-437c-954d-1fe0ca5e08fc", + "name": "New folder", + "children": [ + { + "type": "route", + "uuid": "8745c4cf-88bd-4960-8353-858ae80623a5" + }, + { + "type": "route", + "uuid": "7cad788c-433f-404e-bd0f-ca0bef288492" + } + ] + } + ], + "routes": [ + { + "uuid": "8745c4cf-88bd-4960-8353-858ae80623a5", + "type": "http", + "documentation": "", + "method": "get", + "endpoint": "test1", + "responses": [ + { + "uuid": "6e9b4207-1aa4-4103-a051-9f50bb9a5b45", + "body": "{}", + "latency": 0, + "statusCode": 200, + "label": "", + "headers": [], + "bodyType": "INLINE", + "filePath": "", + "databucketID": "", + "sendFileAsBody": false, + "rules": [], + "rulesOperator": "OR", + "disableTemplating": false, + "fallbackTo404": false, + "default": true, + "crudKey": "id", + "callbacks": [] + } + ], + "responseMode": null + }, + { + "uuid": "7cad788c-433f-404e-bd0f-ca0bef288492", + "type": "http", + "documentation": "", + "method": "get", + "endpoint": "test2", + "responses": [ + { + "uuid": "637e0e82-682a-4735-8f82-384d340a33a4", + "body": "{}", + "latency": 0, + "statusCode": 200, + "label": "", + "headers": [], + "bodyType": "INLINE", + "filePath": "", + "databucketID": "", + "sendFileAsBody": false, + "rules": [], + "rulesOperator": "OR", + "disableTemplating": false, + "fallbackTo404": false, + "default": true, + "crudKey": "id", + "callbacks": [] + } + ], + "responseMode": null + } + ], + "rootChildren": [ + { + "type": "folder", + "uuid": "1a84ec8b-0179-437c-954d-1fe0ca5e08fc" + } + ], + "proxyMode": false, + "proxyHost": "", + "proxyRemovePrefix": false, + "tlsOptions": { + "enabled": false, + "type": "CERT", + "pfxPath": "", + "certPath": "", + "keyPath": "", + "caPath": "", + "passphrase": "" + }, + "cors": true, + "headers": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "proxyReqHeaders": [ + { + "key": "", + "value": "" + } + ], + "proxyResHeaders": [ + { + "key": "", + "value": "" + } + ], + "data": [], + "callbacks": [] +} \ No newline at end of file diff --git a/packages/desktop/test/libs/context-menu.ts b/packages/desktop/test/libs/context-menu.ts index f1003fefb..151cb4033 100644 --- a/packages/desktop/test/libs/context-menu.ts +++ b/packages/desktop/test/libs/context-menu.ts @@ -37,7 +37,8 @@ export enum ContextMenuFolderActions { ADD_CRUD = 1, ADD_HTTP = 2, ADD_FOLDER = 3, - DELETE = 4 + TOGGLE_FOLDER = 4, + DELETE = 5 } class ContextMenu { diff --git a/packages/desktop/test/specs/folders.spec.ts b/packages/desktop/test/specs/folders.spec.ts index 6fe9d8c3a..bc3ef7344 100644 --- a/packages/desktop/test/specs/folders.spec.ts +++ b/packages/desktop/test/specs/folders.spec.ts @@ -131,4 +131,24 @@ describe('Folders', () => { await routes.assertRoutePaddingLevel(2, 1); await routes.assertRoutePaddingLevel(3, 1); }); + + it('should toggle all the routes inside the folder', async () => { + await environments.open('basic-folder-2-routes'); + await contextMenu.open('routes', 1); + await contextMenu.getItem(4).click(); + await $( + '.routes-menu .menu-list .nav-item .nav-link.active.route-disabled' + ).waitForExist(); + await utils.waitForAutosave(); + await file.verifyObjectPropertyInFile( + './tmp/storage/settings.json', + ['disabledRoutes.c8cdc030-344f-452f-aec4-56ded95b440c.0'], + ['8745c4cf-88bd-4960-8353-858ae80623a5'] + ); + await file.verifyObjectPropertyInFile( + './tmp/storage/settings.json', + ['disabledRoutes.c8cdc030-344f-452f-aec4-56ded95b440c.1'], + ['7cad788c-433f-404e-bd0f-ca0bef288492'] + ); + }); });