diff --git a/changelog.md b/changelog.md index 72a34c5a4..f805052c2 100644 --- a/changelog.md +++ b/changelog.md @@ -12,6 +12,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 * Hide component detail panel when deleting corresponding component. * Autosave on component detail panel. * Debounce of 1 second on file auto-save. +* Add 'Rename' action in FileExplorer file/folder menu. * Setup conditional features: * `CF_createDiagram`: allows or prevents user to create a diagram. * `CF_createDiagramFromTemplate`: allows or prevents user to create a diagram from a template. diff --git a/cypress/e2e/DiagramsPage/DisplayDiagrams.feature b/cypress/e2e/DiagramsPage/DisplayDiagrams.feature index 5e552fc75..48b388624 100644 --- a/cypress/e2e/DiagramsPage/DisplayDiagrams.feature +++ b/cypress/e2e/DiagramsPage/DisplayDiagrams.feature @@ -47,7 +47,7 @@ Feature: Test diagrams page: display all diagrams When I click on '[data-cy="component-definitions-item_terrator-plugin"]' And I click on '[data-cy="component-definition_aws"]' - And I wait 1 second + And I wait 2 seconds Then I expect '[data-cy="draw-container"]' exists And I expect '[id^="aws"]' exists diff --git a/cypress/e2e/RoundTrips/TextEditor.feature b/cypress/e2e/RoundTrips/TextEditor.feature index 80608c4de..f63e41ea2 100644 --- a/cypress/e2e/RoundTrips/TextEditor.feature +++ b/cypress/e2e/RoundTrips/TextEditor.feature @@ -587,6 +587,7 @@ Feature: Test roundtrip of the application: text editor # Go back to the draw view When I click on '[data-cy="navigation-bar"] [data-cy="modelizer-switch-button"] [aria-pressed="false"]' + And I wait 2 seconds Then I expect current url is '{{ projectName }}/modelizer/draw\?plugin=terrator-plugin&path=infra' # Add component @@ -594,7 +595,7 @@ Feature: Test roundtrip of the application: text editor Then I expect '[data-cy="component-definition_aws"]' exists When I click on '[data-cy="component-definition_aws"]' - And I wait 1 second + And I wait 2 seconds Then I expect '[data-cy="draw-container"] [id^="aws"]' exists # Go back to the text view @@ -603,3 +604,30 @@ Feature: Test roundtrip of the application: text editor Then I expect '[data-cy="file-tabs-container"] [data-cy="active-tab"]' is 'new_file.tf' And I expect '[data-cy="file_infra/new_file.tf"]' exists And I expect active file content to contain 'provider.*"aws".*{}' + + ## Rename a folder + When I hover '[data-cy="file-explorer"] [data-cy="folder-button_infra"]' to make it visible + And I click on '[data-cy="file-explorer"] [data-cy="folder-button_infra"]' + Then I expect '[data-cy="file-explorer-action-menu"]' exists + + When I click on '[data-cy="file-explorer-action-menu"] [data-cy="rename-file-action-item"]' + Then I expect '[data-cy="rename-file-dialog"]' exists + + When I set on '[data-cy="rename-file-form"] [data-cy="name-input"]' text '' + And I click on '[data-cy="rename-file-form"] [data-cy="submit-button"]' + Then I expect '[data-cy="rename-file-form"] [role="alert"]' is 'Please type something' + + When I set on '[data-cy="rename-file-form"] [data-cy="name-input"]' text 'newFile' + And I click on '[data-cy="rename-file-form"] [data-cy="submit-button"]' + Then I expect '[data-cy="rename-file-form"] [role="alert"]' is 'This name already exists.' + + When I set on '[data-cy="rename-file-form"] [data-cy="name-input"]' text 'coucou/infra' + And I click on '[data-cy="rename-file-form"] [data-cy="submit-button"]' + Then I expect '[data-cy="rename-file-form"] [role="alert"]' is 'The name must not contain any \'/\' characters.' + + When I set on '[data-cy="rename-file-form"] [data-cy="name-input"]' text 'infra-rename' + And I click on '[data-cy="rename-file-form"] [data-cy="submit-button"]' + Then I expect 'positive' toast to appear with text 'Folder is renamed.' + And I expect '[data-cy="file-explorer"] [data-cy="folder_infra-rename"]' exists + And I expect '[data-cy="file-explorer"] [data-cy="folder_infra"]' not exists + And I expect '[data-cy="file-tabs-container"] [role="tab"]' appear 0 time on screen diff --git a/package-lock.json b/package-lock.json index e99a6b8b7..50bd4164f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,7 @@ "version": "1.3.0", "dependencies": { "@quasar/extras": "=1.16.8", - "axios": "=1.6.1", + "axios": "=1.6.2", "browserfs": "=1.4.3", "core-js": "=3.33.2", "isomorphic-git": "=1.25.0", @@ -20,9 +20,9 @@ "quasar": "=2.13.0", "rxjs": "=7.8.1", "v-viewer": "=3.0.11", - "vue": "=3.3.4", + "vue": "=3.3.8", "vue-3-sanitize": "=0.1.4", - "vue-i18n": "=9.6.5", + "vue-i18n": "=9.7.0", "vue-router": "=4.2.5", "vue-simple-acl": "^2.0.2" }, @@ -31,18 +31,18 @@ "@babel/core": "=7.23.3", "@babel/eslint-parser": "=7.23.3", "@babel/preset-env": "=7.23.3", - "@badeball/cypress-cucumber-preprocessor": "=19.1.0", + "@badeball/cypress-cucumber-preprocessor": "=19.1.1", "@cypress/browserify-preprocessor": "=3.0.2", "@pinia/testing": "^0.1.3", "@quasar/app-webpack": "=3.9.6", "@quasar/quasar-app-extension-testing": "=2.1.1", "@quasar/quasar-app-extension-testing-unit-jest": "=3.0.0-alpha.10", - "@vue/test-utils": "=2.4.1", + "@vue/test-utils": "=2.4.2", "@vue/vue3-jest": "=29.2.6", "babel-jest": "=29.7.0", "babel-loader": "=9.1.3", "better-docs": "=2.7.2", - "cypress": "=13.5.0", + "cypress": "=13.5.1", "cypress-real-events": "=1.11.0", "eslint": "=8.53.0", "eslint-config-airbnb-base": "=15.0.0", @@ -2190,9 +2190,9 @@ } }, "node_modules/@badeball/cypress-cucumber-preprocessor": { - "version": "19.1.0", - "resolved": "https://registry.npmjs.org/@badeball/cypress-cucumber-preprocessor/-/cypress-cucumber-preprocessor-19.1.0.tgz", - "integrity": "sha512-pymOmG8yzyUbuFyIieLgKBTPPvdPVUKf3e19F4BejBpm+JTJbqS2ZBRxfJQ1LyQoKi6c0NbFboz6SJS1vV/Qbw==", + "version": "19.1.1", + "resolved": "https://registry.npmjs.org/@badeball/cypress-cucumber-preprocessor/-/cypress-cucumber-preprocessor-19.1.1.tgz", + "integrity": "sha512-10Err2q+naGjV49xzpW+g5ovxJzC62WM+dG0+/3DmSREVDjgK+fo8szRymJzhRRcdPhGNplQ+Drl/LbtaQHIFQ==", "dev": true, "funding": [ { @@ -3260,12 +3260,12 @@ "dev": true }, "node_modules/@intlify/core-base": { - "version": "9.6.5", - "resolved": "https://registry.npmjs.org/@intlify/core-base/-/core-base-9.6.5.tgz", - "integrity": "sha512-LzbGXiZkMWPIHnHI0g6q554S87Cmh2mmCmjytK/3pDQfjI84l+dgGoeQuKj02q7EbULRuUUgYVZVqAwEUawXGg==", + "version": "9.7.0", + "resolved": "https://registry.npmjs.org/@intlify/core-base/-/core-base-9.7.0.tgz", + "integrity": "sha512-1tBnfnCI23jXqGW15cagCjn2GgD487VST1dMG8P5LRzrSfx+kUzqFyTrjMNIwgq1tVaF4HnDpFMUuyrzTLKphw==", "dependencies": { - "@intlify/message-compiler": "9.6.5", - "@intlify/shared": "9.6.5" + "@intlify/message-compiler": "9.7.0", + "@intlify/shared": "9.7.0" }, "engines": { "node": ">= 16" @@ -3275,11 +3275,11 @@ } }, "node_modules/@intlify/message-compiler": { - "version": "9.6.5", - "resolved": "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-9.6.5.tgz", - "integrity": "sha512-WeJ499thIj0p7JaIO1V3JaJbqdqfBykS5R8fElFs5hNeotHtPAMBs4IiA+8/KGFkAbjJusgFefCq6ajP7F7+4Q==", + "version": "9.7.0", + "resolved": "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-9.7.0.tgz", + "integrity": "sha512-/YdZCio2L2tCM5bZ2eMHbSEIQNPh1QqvZIOLI/yCVKXLscis7O0SsR2nmuU/DfCJ3iSeI8juw82C2wLvfsAeww==", "dependencies": { - "@intlify/shared": "9.6.5", + "@intlify/shared": "9.7.0", "source-map-js": "^1.0.2" }, "engines": { @@ -3290,9 +3290,9 @@ } }, "node_modules/@intlify/shared": { - "version": "9.6.5", - "resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-9.6.5.tgz", - "integrity": "sha512-gD7Ey47Xi4h/t6P+S04ymMSoA3wVRxGqjxuIMglwRO8POki9h164Epu2N8wk/GHXM/hR6ZGcsx2HArCCENjqSQ==", + "version": "9.7.0", + "resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-9.7.0.tgz", + "integrity": "sha512-PUkEuk//YKu4CHS5ah3mNa3XL/+TZj6rAY/6yYN+GCNFd2u+uWUkeuwE4Q6t8dydRWlErOePHHS0KyNoof/oBw==", "engines": { "node": ">= 16" }, @@ -7121,49 +7121,49 @@ "dev": true }, "node_modules/@vue/compiler-core": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.3.4.tgz", - "integrity": "sha512-cquyDNvZ6jTbf/+x+AgM2Arrp6G4Dzbb0R64jiG804HRMfRiFXWI6kqUVqZ6ZR0bQhIoQjB4+2bhNtVwndW15g==", + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.3.8.tgz", + "integrity": "sha512-hN/NNBUECw8SusQvDSqqcVv6gWq8L6iAktUR0UF3vGu2OhzRqcOiAno0FmBJWwxhYEXRlQJT5XnoKsVq1WZx4g==", "dependencies": { - "@babel/parser": "^7.21.3", - "@vue/shared": "3.3.4", + "@babel/parser": "^7.23.0", + "@vue/shared": "3.3.8", "estree-walker": "^2.0.2", "source-map-js": "^1.0.2" } }, "node_modules/@vue/compiler-dom": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.3.4.tgz", - "integrity": "sha512-wyM+OjOVpuUukIq6p5+nwHYtj9cFroz9cwkfmP9O1nzH68BenTTv0u7/ndggT8cIQlnBeOo6sUT/gvHcIkLA5w==", + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.3.8.tgz", + "integrity": "sha512-+PPtv+p/nWDd0AvJu3w8HS0RIm/C6VGBIRe24b9hSyNWOAPEUosFZ5diwawwP8ip5sJ8n0Pe87TNNNHnvjs0FQ==", "dependencies": { - "@vue/compiler-core": "3.3.4", - "@vue/shared": "3.3.4" + "@vue/compiler-core": "3.3.8", + "@vue/shared": "3.3.8" } }, "node_modules/@vue/compiler-sfc": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.3.4.tgz", - "integrity": "sha512-6y/d8uw+5TkCuzBkgLS0v3lSM3hJDntFEiUORM11pQ/hKvkhSKZrXW6i69UyXlJQisJxuUEJKAWEqWbWsLeNKQ==", - "dependencies": { - "@babel/parser": "^7.20.15", - "@vue/compiler-core": "3.3.4", - "@vue/compiler-dom": "3.3.4", - "@vue/compiler-ssr": "3.3.4", - "@vue/reactivity-transform": "3.3.4", - "@vue/shared": "3.3.4", + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.3.8.tgz", + "integrity": "sha512-WMzbUrlTjfYF8joyT84HfwwXo+8WPALuPxhy+BZ6R4Aafls+jDBnSz8PDz60uFhuqFbl3HxRfxvDzrUf3THwpA==", + "dependencies": { + "@babel/parser": "^7.23.0", + "@vue/compiler-core": "3.3.8", + "@vue/compiler-dom": "3.3.8", + "@vue/compiler-ssr": "3.3.8", + "@vue/reactivity-transform": "3.3.8", + "@vue/shared": "3.3.8", "estree-walker": "^2.0.2", - "magic-string": "^0.30.0", - "postcss": "^8.1.10", + "magic-string": "^0.30.5", + "postcss": "^8.4.31", "source-map-js": "^1.0.2" } }, "node_modules/@vue/compiler-ssr": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.3.4.tgz", - "integrity": "sha512-m0v6oKpup2nMSehwA6Uuu+j+wEwcy7QmwMkVNVfrV9P2qE5KshC6RwOCq8fjGS/Eak/uNb8AaWekfiXxbBB6gQ==", + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.3.8.tgz", + "integrity": "sha512-hXCqQL/15kMVDBuoBYpUnSYT8doDNwsjvm3jTefnXr+ytn294ySnT8NlsFHmTgKNjwpuFy7XVV8yTeLtNl/P6w==", "dependencies": { - "@vue/compiler-dom": "3.3.4", - "@vue/shared": "3.3.4" + "@vue/compiler-dom": "3.3.8", + "@vue/shared": "3.3.8" } }, "node_modules/@vue/devtools-api": { @@ -7172,69 +7172,69 @@ "integrity": "sha512-+KpckaAQyfbvshdDW5xQylLni1asvNSGme1JFs8I1+/H5pHEhqUKMEQD/qn3Nx5+/nycBq11qAEi8lk+LXI2dA==" }, "node_modules/@vue/reactivity": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.3.4.tgz", - "integrity": "sha512-kLTDLwd0B1jG08NBF3R5rqULtv/f8x3rOFByTDz4J53ttIQEDmALqKqXY0J+XQeN0aV2FBxY8nJDf88yvOPAqQ==", + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.3.8.tgz", + "integrity": "sha512-ctLWitmFBu6mtddPyOKpHg8+5ahouoTCRtmAHZAXmolDtuZXfjL2T3OJ6DL6ezBPQB1SmMnpzjiWjCiMYmpIuw==", "dependencies": { - "@vue/shared": "3.3.4" + "@vue/shared": "3.3.8" } }, "node_modules/@vue/reactivity-transform": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.3.4.tgz", - "integrity": "sha512-MXgwjako4nu5WFLAjpBnCj/ieqcjE2aJBINUNQzkZQfzIZA4xn+0fV1tIYBJvvva3N3OvKGofRLvQIwEQPpaXw==", + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.3.8.tgz", + "integrity": "sha512-49CvBzmZNtcHua0XJ7GdGifM8GOXoUMOX4dD40Y5DxI3R8OUhMlvf2nvgUAcPxaXiV5MQQ1Nwy09ADpnLQUqRw==", "dependencies": { - "@babel/parser": "^7.20.15", - "@vue/compiler-core": "3.3.4", - "@vue/shared": "3.3.4", + "@babel/parser": "^7.23.0", + "@vue/compiler-core": "3.3.8", + "@vue/shared": "3.3.8", "estree-walker": "^2.0.2", - "magic-string": "^0.30.0" + "magic-string": "^0.30.5" } }, "node_modules/@vue/runtime-core": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.3.4.tgz", - "integrity": "sha512-R+bqxMN6pWO7zGI4OMlmvePOdP2c93GsHFM/siJI7O2nxFRzj55pLwkpCedEY+bTMgp5miZ8CxfIZo3S+gFqvA==", + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.3.8.tgz", + "integrity": "sha512-qurzOlb6q26KWQ/8IShHkMDOuJkQnQcTIp1sdP4I9MbCf9FJeGVRXJFr2mF+6bXh/3Zjr9TDgURXrsCr9bfjUw==", "dependencies": { - "@vue/reactivity": "3.3.4", - "@vue/shared": "3.3.4" + "@vue/reactivity": "3.3.8", + "@vue/shared": "3.3.8" } }, "node_modules/@vue/runtime-dom": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.3.4.tgz", - "integrity": "sha512-Aj5bTJ3u5sFsUckRghsNjVTtxZQ1OyMWCr5dZRAPijF/0Vy4xEoRCwLyHXcj4D0UFbJ4lbx3gPTgg06K/GnPnQ==", + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.3.8.tgz", + "integrity": "sha512-Noy5yM5UIf9UeFoowBVgghyGGPIDPy1Qlqt0yVsUdAVbqI8eeMSsTqBtauaEoT2UFXUk5S64aWVNJN4MJ2vRdA==", "dependencies": { - "@vue/runtime-core": "3.3.4", - "@vue/shared": "3.3.4", - "csstype": "^3.1.1" + "@vue/runtime-core": "3.3.8", + "@vue/shared": "3.3.8", + "csstype": "^3.1.2" } }, "node_modules/@vue/server-renderer": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.3.4.tgz", - "integrity": "sha512-Q6jDDzR23ViIb67v+vM1Dqntu+HUexQcsWKhhQa4ARVzxOY2HbC7QRW/ggkDBd5BU+uM1sV6XOAP0b216o34JQ==", + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.3.8.tgz", + "integrity": "sha512-zVCUw7RFskvPuNlPn/8xISbrf0zTWsTSdYTsUTN1ERGGZGVnRxM2QZ3x1OR32+vwkkCm0IW6HmJ49IsPm7ilLg==", "dependencies": { - "@vue/compiler-ssr": "3.3.4", - "@vue/shared": "3.3.4" + "@vue/compiler-ssr": "3.3.8", + "@vue/shared": "3.3.8" }, "peerDependencies": { - "vue": "3.3.4" + "vue": "3.3.8" } }, "node_modules/@vue/shared": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.3.4.tgz", - "integrity": "sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ==" + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.3.8.tgz", + "integrity": "sha512-8PGwybFwM4x8pcfgqEQFy70NaQxASvOC5DJwLQfpArw1UDfUXrJkdxD3BhVTMS+0Lef/TU7YO0Jvr0jJY8T+mw==" }, "node_modules/@vue/test-utils": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@vue/test-utils/-/test-utils-2.4.1.tgz", - "integrity": "sha512-VO8nragneNzUZUah6kOjiFmD/gwRjUauG9DROh6oaOeFwX1cZRUNHhdeogE8635cISigXFTtGLUQWx5KCb0xeg==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@vue/test-utils/-/test-utils-2.4.2.tgz", + "integrity": "sha512-07lLjpG1o9tEBoWQfVOFhDT7+WFCdDeECoeSdzOuVgIi6nxb2JDLGNNOV6+3crPpyg/jMlIocj96UROcgomiGg==", "dev": true, "dependencies": { - "js-beautify": "1.14.9", - "vue-component-type-helpers": "1.8.4" + "js-beautify": "^1.14.9", + "vue-component-type-helpers": "^1.8.21" }, "peerDependencies": { "@vue/server-renderer": "^3.0.1", @@ -8223,9 +8223,9 @@ "dev": true }, "node_modules/axios": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.1.tgz", - "integrity": "sha512-vfBmhDpKafglh0EldBEbVuoe7DyAavGSLWhuSm5ZSEKQnHhBf0xAAwybbNH1IkrJNGnS/VG4I5yxig1pCEXE4g==", + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.2.tgz", + "integrity": "sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==", "dependencies": { "follow-redirects": "^1.15.0", "form-data": "^4.0.0", @@ -11194,9 +11194,9 @@ } }, "node_modules/cypress": { - "version": "13.5.0", - "resolved": "https://registry.npmjs.org/cypress/-/cypress-13.5.0.tgz", - "integrity": "sha512-oh6U7h9w8wwHfzNDJQ6wVcAeXu31DlIYlNOBvfd6U4CcB8oe4akawQmH+QJVOMZlM42eBoCne015+svVqdwdRQ==", + "version": "13.5.1", + "resolved": "https://registry.npmjs.org/cypress/-/cypress-13.5.1.tgz", + "integrity": "sha512-yqLViT0D/lPI8Kkm7ciF/x/DCK/H/DnogdGyiTnQgX4OVR2aM30PtK+kvklTOD1u3TuItiD9wUQAF8EYWtyZug==", "dev": true, "hasInstallScript": true, "dependencies": { @@ -28186,15 +28186,23 @@ } }, "node_modules/vue": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/vue/-/vue-3.3.4.tgz", - "integrity": "sha512-VTyEYn3yvIeY1Py0WaYGZsXnz3y5UnGi62GjVEqvEGPl6nxbOrCXbVOTQWBEJUqAyTUk2uJ5JLVnYJ6ZzGbrSw==", + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.3.8.tgz", + "integrity": "sha512-5VSX/3DabBikOXMsxzlW8JyfeLKlG9mzqnWgLQLty88vdZL7ZJgrdgBOmrArwxiLtmS+lNNpPcBYqrhE6TQW5w==", "dependencies": { - "@vue/compiler-dom": "3.3.4", - "@vue/compiler-sfc": "3.3.4", - "@vue/runtime-dom": "3.3.4", - "@vue/server-renderer": "3.3.4", - "@vue/shared": "3.3.4" + "@vue/compiler-dom": "3.3.8", + "@vue/compiler-sfc": "3.3.8", + "@vue/runtime-dom": "3.3.8", + "@vue/server-renderer": "3.3.8", + "@vue/shared": "3.3.8" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, "node_modules/vue-3-sanitize": { @@ -28206,9 +28214,9 @@ } }, "node_modules/vue-component-type-helpers": { - "version": "1.8.4", - "resolved": "https://registry.npmjs.org/vue-component-type-helpers/-/vue-component-type-helpers-1.8.4.tgz", - "integrity": "sha512-6bnLkn8O0JJyiFSIF0EfCogzeqNXpnjJ0vW/SZzNHfe6sPx30lTtTXlE5TFs2qhJlAtDFybStVNpL73cPe3OMQ==", + "version": "1.8.22", + "resolved": "https://registry.npmjs.org/vue-component-type-helpers/-/vue-component-type-helpers-1.8.22.tgz", + "integrity": "sha512-LK3wJHs3vJxHG292C8cnsRusgyC5SEZDCzDCD01mdE/AoREFMl2tzLRuzwyuEsOIz13tqgBcnvysN3Lxsa14Fw==", "dev": true }, "node_modules/vue-docgen-api": { @@ -28368,12 +28376,12 @@ "dev": true }, "node_modules/vue-i18n": { - "version": "9.6.5", - "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-9.6.5.tgz", - "integrity": "sha512-dpUEjKHg7pEsaS7ZPPxp1CflaR7bGmsvZJEhnszHPKl9OTNyno5j/DvMtMSo41kpddq4felLA7GK2prjpnXVlw==", + "version": "9.7.0", + "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-9.7.0.tgz", + "integrity": "sha512-8Z8kSz9U2juzuAf+6mjW1HTd5pIlYuFJZkC+HvYOglFdpzwc2rTUGjxKwN8xGdtGur1MFnyJ44TSr+TksJtY8A==", "dependencies": { - "@intlify/core-base": "9.6.5", - "@intlify/shared": "9.6.5", + "@intlify/core-base": "9.7.0", + "@intlify/shared": "9.7.0", "@vue/devtools-api": "^6.5.0" }, "engines": { @@ -31187,9 +31195,9 @@ } }, "@badeball/cypress-cucumber-preprocessor": { - "version": "19.1.0", - "resolved": "https://registry.npmjs.org/@badeball/cypress-cucumber-preprocessor/-/cypress-cucumber-preprocessor-19.1.0.tgz", - "integrity": "sha512-pymOmG8yzyUbuFyIieLgKBTPPvdPVUKf3e19F4BejBpm+JTJbqS2ZBRxfJQ1LyQoKi6c0NbFboz6SJS1vV/Qbw==", + "version": "19.1.1", + "resolved": "https://registry.npmjs.org/@badeball/cypress-cucumber-preprocessor/-/cypress-cucumber-preprocessor-19.1.1.tgz", + "integrity": "sha512-10Err2q+naGjV49xzpW+g5ovxJzC62WM+dG0+/3DmSREVDjgK+fo8szRymJzhRRcdPhGNplQ+Drl/LbtaQHIFQ==", "dev": true, "requires": { "@badeball/cypress-configuration": "^6.1.0", @@ -31907,27 +31915,27 @@ "dev": true }, "@intlify/core-base": { - "version": "9.6.5", - "resolved": "https://registry.npmjs.org/@intlify/core-base/-/core-base-9.6.5.tgz", - "integrity": "sha512-LzbGXiZkMWPIHnHI0g6q554S87Cmh2mmCmjytK/3pDQfjI84l+dgGoeQuKj02q7EbULRuUUgYVZVqAwEUawXGg==", + "version": "9.7.0", + "resolved": "https://registry.npmjs.org/@intlify/core-base/-/core-base-9.7.0.tgz", + "integrity": "sha512-1tBnfnCI23jXqGW15cagCjn2GgD487VST1dMG8P5LRzrSfx+kUzqFyTrjMNIwgq1tVaF4HnDpFMUuyrzTLKphw==", "requires": { - "@intlify/message-compiler": "9.6.5", - "@intlify/shared": "9.6.5" + "@intlify/message-compiler": "9.7.0", + "@intlify/shared": "9.7.0" } }, "@intlify/message-compiler": { - "version": "9.6.5", - "resolved": "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-9.6.5.tgz", - "integrity": "sha512-WeJ499thIj0p7JaIO1V3JaJbqdqfBykS5R8fElFs5hNeotHtPAMBs4IiA+8/KGFkAbjJusgFefCq6ajP7F7+4Q==", + "version": "9.7.0", + "resolved": "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-9.7.0.tgz", + "integrity": "sha512-/YdZCio2L2tCM5bZ2eMHbSEIQNPh1QqvZIOLI/yCVKXLscis7O0SsR2nmuU/DfCJ3iSeI8juw82C2wLvfsAeww==", "requires": { - "@intlify/shared": "9.6.5", + "@intlify/shared": "9.7.0", "source-map-js": "^1.0.2" } }, "@intlify/shared": { - "version": "9.6.5", - "resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-9.6.5.tgz", - "integrity": "sha512-gD7Ey47Xi4h/t6P+S04ymMSoA3wVRxGqjxuIMglwRO8POki9h164Epu2N8wk/GHXM/hR6ZGcsx2HArCCENjqSQ==" + "version": "9.7.0", + "resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-9.7.0.tgz", + "integrity": "sha512-PUkEuk//YKu4CHS5ah3mNa3XL/+TZj6rAY/6yYN+GCNFd2u+uWUkeuwE4Q6t8dydRWlErOePHHS0KyNoof/oBw==" }, "@isaacs/cliui": { "version": "8.0.2", @@ -34937,49 +34945,49 @@ "dev": true }, "@vue/compiler-core": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.3.4.tgz", - "integrity": "sha512-cquyDNvZ6jTbf/+x+AgM2Arrp6G4Dzbb0R64jiG804HRMfRiFXWI6kqUVqZ6ZR0bQhIoQjB4+2bhNtVwndW15g==", + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.3.8.tgz", + "integrity": "sha512-hN/NNBUECw8SusQvDSqqcVv6gWq8L6iAktUR0UF3vGu2OhzRqcOiAno0FmBJWwxhYEXRlQJT5XnoKsVq1WZx4g==", "requires": { - "@babel/parser": "^7.21.3", - "@vue/shared": "3.3.4", + "@babel/parser": "^7.23.0", + "@vue/shared": "3.3.8", "estree-walker": "^2.0.2", "source-map-js": "^1.0.2" } }, "@vue/compiler-dom": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.3.4.tgz", - "integrity": "sha512-wyM+OjOVpuUukIq6p5+nwHYtj9cFroz9cwkfmP9O1nzH68BenTTv0u7/ndggT8cIQlnBeOo6sUT/gvHcIkLA5w==", + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.3.8.tgz", + "integrity": "sha512-+PPtv+p/nWDd0AvJu3w8HS0RIm/C6VGBIRe24b9hSyNWOAPEUosFZ5diwawwP8ip5sJ8n0Pe87TNNNHnvjs0FQ==", "requires": { - "@vue/compiler-core": "3.3.4", - "@vue/shared": "3.3.4" + "@vue/compiler-core": "3.3.8", + "@vue/shared": "3.3.8" } }, "@vue/compiler-sfc": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.3.4.tgz", - "integrity": "sha512-6y/d8uw+5TkCuzBkgLS0v3lSM3hJDntFEiUORM11pQ/hKvkhSKZrXW6i69UyXlJQisJxuUEJKAWEqWbWsLeNKQ==", - "requires": { - "@babel/parser": "^7.20.15", - "@vue/compiler-core": "3.3.4", - "@vue/compiler-dom": "3.3.4", - "@vue/compiler-ssr": "3.3.4", - "@vue/reactivity-transform": "3.3.4", - "@vue/shared": "3.3.4", + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.3.8.tgz", + "integrity": "sha512-WMzbUrlTjfYF8joyT84HfwwXo+8WPALuPxhy+BZ6R4Aafls+jDBnSz8PDz60uFhuqFbl3HxRfxvDzrUf3THwpA==", + "requires": { + "@babel/parser": "^7.23.0", + "@vue/compiler-core": "3.3.8", + "@vue/compiler-dom": "3.3.8", + "@vue/compiler-ssr": "3.3.8", + "@vue/reactivity-transform": "3.3.8", + "@vue/shared": "3.3.8", "estree-walker": "^2.0.2", - "magic-string": "^0.30.0", - "postcss": "^8.1.10", + "magic-string": "^0.30.5", + "postcss": "^8.4.31", "source-map-js": "^1.0.2" } }, "@vue/compiler-ssr": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.3.4.tgz", - "integrity": "sha512-m0v6oKpup2nMSehwA6Uuu+j+wEwcy7QmwMkVNVfrV9P2qE5KshC6RwOCq8fjGS/Eak/uNb8AaWekfiXxbBB6gQ==", + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.3.8.tgz", + "integrity": "sha512-hXCqQL/15kMVDBuoBYpUnSYT8doDNwsjvm3jTefnXr+ytn294ySnT8NlsFHmTgKNjwpuFy7XVV8yTeLtNl/P6w==", "requires": { - "@vue/compiler-dom": "3.3.4", - "@vue/shared": "3.3.4" + "@vue/compiler-dom": "3.3.8", + "@vue/shared": "3.3.8" } }, "@vue/devtools-api": { @@ -34988,66 +34996,66 @@ "integrity": "sha512-+KpckaAQyfbvshdDW5xQylLni1asvNSGme1JFs8I1+/H5pHEhqUKMEQD/qn3Nx5+/nycBq11qAEi8lk+LXI2dA==" }, "@vue/reactivity": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.3.4.tgz", - "integrity": "sha512-kLTDLwd0B1jG08NBF3R5rqULtv/f8x3rOFByTDz4J53ttIQEDmALqKqXY0J+XQeN0aV2FBxY8nJDf88yvOPAqQ==", + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.3.8.tgz", + "integrity": "sha512-ctLWitmFBu6mtddPyOKpHg8+5ahouoTCRtmAHZAXmolDtuZXfjL2T3OJ6DL6ezBPQB1SmMnpzjiWjCiMYmpIuw==", "requires": { - "@vue/shared": "3.3.4" + "@vue/shared": "3.3.8" } }, "@vue/reactivity-transform": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.3.4.tgz", - "integrity": "sha512-MXgwjako4nu5WFLAjpBnCj/ieqcjE2aJBINUNQzkZQfzIZA4xn+0fV1tIYBJvvva3N3OvKGofRLvQIwEQPpaXw==", + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.3.8.tgz", + "integrity": "sha512-49CvBzmZNtcHua0XJ7GdGifM8GOXoUMOX4dD40Y5DxI3R8OUhMlvf2nvgUAcPxaXiV5MQQ1Nwy09ADpnLQUqRw==", "requires": { - "@babel/parser": "^7.20.15", - "@vue/compiler-core": "3.3.4", - "@vue/shared": "3.3.4", + "@babel/parser": "^7.23.0", + "@vue/compiler-core": "3.3.8", + "@vue/shared": "3.3.8", "estree-walker": "^2.0.2", - "magic-string": "^0.30.0" + "magic-string": "^0.30.5" } }, "@vue/runtime-core": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.3.4.tgz", - "integrity": "sha512-R+bqxMN6pWO7zGI4OMlmvePOdP2c93GsHFM/siJI7O2nxFRzj55pLwkpCedEY+bTMgp5miZ8CxfIZo3S+gFqvA==", + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.3.8.tgz", + "integrity": "sha512-qurzOlb6q26KWQ/8IShHkMDOuJkQnQcTIp1sdP4I9MbCf9FJeGVRXJFr2mF+6bXh/3Zjr9TDgURXrsCr9bfjUw==", "requires": { - "@vue/reactivity": "3.3.4", - "@vue/shared": "3.3.4" + "@vue/reactivity": "3.3.8", + "@vue/shared": "3.3.8" } }, "@vue/runtime-dom": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.3.4.tgz", - "integrity": "sha512-Aj5bTJ3u5sFsUckRghsNjVTtxZQ1OyMWCr5dZRAPijF/0Vy4xEoRCwLyHXcj4D0UFbJ4lbx3gPTgg06K/GnPnQ==", + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.3.8.tgz", + "integrity": "sha512-Noy5yM5UIf9UeFoowBVgghyGGPIDPy1Qlqt0yVsUdAVbqI8eeMSsTqBtauaEoT2UFXUk5S64aWVNJN4MJ2vRdA==", "requires": { - "@vue/runtime-core": "3.3.4", - "@vue/shared": "3.3.4", - "csstype": "^3.1.1" + "@vue/runtime-core": "3.3.8", + "@vue/shared": "3.3.8", + "csstype": "^3.1.2" } }, "@vue/server-renderer": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.3.4.tgz", - "integrity": "sha512-Q6jDDzR23ViIb67v+vM1Dqntu+HUexQcsWKhhQa4ARVzxOY2HbC7QRW/ggkDBd5BU+uM1sV6XOAP0b216o34JQ==", + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.3.8.tgz", + "integrity": "sha512-zVCUw7RFskvPuNlPn/8xISbrf0zTWsTSdYTsUTN1ERGGZGVnRxM2QZ3x1OR32+vwkkCm0IW6HmJ49IsPm7ilLg==", "requires": { - "@vue/compiler-ssr": "3.3.4", - "@vue/shared": "3.3.4" + "@vue/compiler-ssr": "3.3.8", + "@vue/shared": "3.3.8" } }, "@vue/shared": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.3.4.tgz", - "integrity": "sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ==" + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.3.8.tgz", + "integrity": "sha512-8PGwybFwM4x8pcfgqEQFy70NaQxASvOC5DJwLQfpArw1UDfUXrJkdxD3BhVTMS+0Lef/TU7YO0Jvr0jJY8T+mw==" }, "@vue/test-utils": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@vue/test-utils/-/test-utils-2.4.1.tgz", - "integrity": "sha512-VO8nragneNzUZUah6kOjiFmD/gwRjUauG9DROh6oaOeFwX1cZRUNHhdeogE8635cISigXFTtGLUQWx5KCb0xeg==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@vue/test-utils/-/test-utils-2.4.2.tgz", + "integrity": "sha512-07lLjpG1o9tEBoWQfVOFhDT7+WFCdDeECoeSdzOuVgIi6nxb2JDLGNNOV6+3crPpyg/jMlIocj96UROcgomiGg==", "dev": true, "requires": { - "js-beautify": "1.14.9", - "vue-component-type-helpers": "1.8.4" + "js-beautify": "^1.14.9", + "vue-component-type-helpers": "^1.8.21" } }, "@vue/vue3-jest": { @@ -35810,9 +35818,9 @@ "dev": true }, "axios": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.1.tgz", - "integrity": "sha512-vfBmhDpKafglh0EldBEbVuoe7DyAavGSLWhuSm5ZSEKQnHhBf0xAAwybbNH1IkrJNGnS/VG4I5yxig1pCEXE4g==", + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.2.tgz", + "integrity": "sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==", "requires": { "follow-redirects": "^1.15.0", "form-data": "^4.0.0", @@ -38156,9 +38164,9 @@ } }, "cypress": { - "version": "13.5.0", - "resolved": "https://registry.npmjs.org/cypress/-/cypress-13.5.0.tgz", - "integrity": "sha512-oh6U7h9w8wwHfzNDJQ6wVcAeXu31DlIYlNOBvfd6U4CcB8oe4akawQmH+QJVOMZlM42eBoCne015+svVqdwdRQ==", + "version": "13.5.1", + "resolved": "https://registry.npmjs.org/cypress/-/cypress-13.5.1.tgz", + "integrity": "sha512-yqLViT0D/lPI8Kkm7ciF/x/DCK/H/DnogdGyiTnQgX4OVR2aM30PtK+kvklTOD1u3TuItiD9wUQAF8EYWtyZug==", "dev": true, "requires": { "@cypress/request": "^3.0.0", @@ -50968,15 +50976,15 @@ "dev": true }, "vue": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/vue/-/vue-3.3.4.tgz", - "integrity": "sha512-VTyEYn3yvIeY1Py0WaYGZsXnz3y5UnGi62GjVEqvEGPl6nxbOrCXbVOTQWBEJUqAyTUk2uJ5JLVnYJ6ZzGbrSw==", + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.3.8.tgz", + "integrity": "sha512-5VSX/3DabBikOXMsxzlW8JyfeLKlG9mzqnWgLQLty88vdZL7ZJgrdgBOmrArwxiLtmS+lNNpPcBYqrhE6TQW5w==", "requires": { - "@vue/compiler-dom": "3.3.4", - "@vue/compiler-sfc": "3.3.4", - "@vue/runtime-dom": "3.3.4", - "@vue/server-renderer": "3.3.4", - "@vue/shared": "3.3.4" + "@vue/compiler-dom": "3.3.8", + "@vue/compiler-sfc": "3.3.8", + "@vue/runtime-dom": "3.3.8", + "@vue/server-renderer": "3.3.8", + "@vue/shared": "3.3.8" } }, "vue-3-sanitize": { @@ -50988,9 +50996,9 @@ } }, "vue-component-type-helpers": { - "version": "1.8.4", - "resolved": "https://registry.npmjs.org/vue-component-type-helpers/-/vue-component-type-helpers-1.8.4.tgz", - "integrity": "sha512-6bnLkn8O0JJyiFSIF0EfCogzeqNXpnjJ0vW/SZzNHfe6sPx30lTtTXlE5TFs2qhJlAtDFybStVNpL73cPe3OMQ==", + "version": "1.8.22", + "resolved": "https://registry.npmjs.org/vue-component-type-helpers/-/vue-component-type-helpers-1.8.22.tgz", + "integrity": "sha512-LK3wJHs3vJxHG292C8cnsRusgyC5SEZDCzDCD01mdE/AoREFMl2tzLRuzwyuEsOIz13tqgBcnvysN3Lxsa14Fw==", "dev": true }, "vue-docgen-api": { @@ -51111,12 +51119,12 @@ } }, "vue-i18n": { - "version": "9.6.5", - "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-9.6.5.tgz", - "integrity": "sha512-dpUEjKHg7pEsaS7ZPPxp1CflaR7bGmsvZJEhnszHPKl9OTNyno5j/DvMtMSo41kpddq4felLA7GK2prjpnXVlw==", + "version": "9.7.0", + "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-9.7.0.tgz", + "integrity": "sha512-8Z8kSz9U2juzuAf+6mjW1HTd5pIlYuFJZkC+HvYOglFdpzwc2rTUGjxKwN8xGdtGur1MFnyJ44TSr+TksJtY8A==", "requires": { - "@intlify/core-base": "9.6.5", - "@intlify/shared": "9.6.5", + "@intlify/core-base": "9.7.0", + "@intlify/shared": "9.7.0", "@vue/devtools-api": "^6.5.0" } }, diff --git a/package.json b/package.json index efe2a2c09..1917e4f08 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,7 @@ }, "dependencies": { "@quasar/extras": "=1.16.8", - "axios": "=1.6.1", + "axios": "=1.6.2", "browserfs": "=1.4.3", "core-js": "=3.33.2", "isomorphic-git": "=1.25.0", @@ -32,9 +32,9 @@ "quasar": "=2.13.0", "rxjs": "=7.8.1", "v-viewer": "=3.0.11", - "vue": "=3.3.4", + "vue": "=3.3.8", "vue-3-sanitize": "=0.1.4", - "vue-i18n": "=9.6.5", + "vue-i18n": "=9.7.0", "vue-router": "=4.2.5", "vue-simple-acl": "^2.0.2" }, @@ -43,18 +43,18 @@ "@babel/core": "=7.23.3", "@babel/eslint-parser": "=7.23.3", "@babel/preset-env": "=7.23.3", - "@badeball/cypress-cucumber-preprocessor": "=19.1.0", + "@badeball/cypress-cucumber-preprocessor": "=19.1.1", "@cypress/browserify-preprocessor": "=3.0.2", "@pinia/testing": "^0.1.3", "@quasar/app-webpack": "=3.9.6", "@quasar/quasar-app-extension-testing": "=2.1.1", "@quasar/quasar-app-extension-testing-unit-jest": "=3.0.0-alpha.10", - "@vue/test-utils": "=2.4.1", + "@vue/test-utils": "=2.4.2", "@vue/vue3-jest": "=29.2.6", "babel-jest": "=29.7.0", "babel-loader": "=9.1.3", "better-docs": "=2.7.2", - "cypress": "=13.5.0", + "cypress": "=13.5.1", "cypress-real-events": "=1.11.0", "eslint": "=8.53.0", "eslint-config-airbnb-base": "=15.0.0", diff --git a/src/components/FileExplorer.vue b/src/components/FileExplorer.vue index ded2cd64c..dedc09d29 100644 --- a/src/components/FileExplorer.vue +++ b/src/components/FileExplorer.vue @@ -42,11 +42,10 @@
-
@@ -64,7 +63,7 @@ import { toRef, } from 'vue'; import GitEvent from 'src/composables/events/GitEvent'; -import FileExplorerActionCard from 'src/components/card/FileExplorerActionCard.vue'; +import FileExplorerActionButton from 'src/components/FileExplorerActionButton.vue'; import FileName from 'src/components/FileName.vue'; import { getTree, updateFileInformation } from 'src/composables/FileExplorer'; import { getProjectFiles, getStatus } from 'src/composables/Project'; @@ -96,6 +95,7 @@ const filterTrigger = ref(toRef(props, 'showParsableFiles').value.toString()); let selectFileTabSubscription; let createFileSubscription; +let renameFileSubscription; let deleteFileSubscription; let updateEditorContentSubscription; let addRemoteSubscription; @@ -328,9 +328,10 @@ async function openModelFiles() { /** * Update localFileInformations and nodes of the tree then update all status. * Also, expand model folders and open parsable files. + * @param {boolean} avoidOpening - Avoid automatic model file(s) opening. * @returns {Promise} Promise with nothing on success otherwise an error. */ -async function initTreeNodes() { +async function initTreeNodes(avoidOpening = false) { localFileInformations.value = await getProjectFiles(props.projectName); nodes.value = getTree(props.projectName, localFileInformations.value); @@ -338,7 +339,7 @@ async function initTreeNodes() { await updateAllFilesStatus(); // TODO: Find a better way to stub it on shallowMount. - if (fileExplorerRef.value.getNodeByKey) { + if (fileExplorerRef.value.getNodeByKey && !avoidOpening) { openModelFiles(); } } @@ -350,6 +351,9 @@ onMounted(async () => { createFileSubscription = FileEvent.CreateFileEvent.subscribe((event) => { onCreateFile(event); }); + renameFileSubscription = FileEvent.RenameFileEvent.subscribe(() => { + initTreeNodes(true); + }); deleteFileSubscription = FileEvent.DeleteFileEvent.subscribe(onDeleteFile); updateEditorContentSubscription = FileEvent.UpdateEditorContentEvent.subscribe((event) => { updateFileStatus(event); @@ -379,6 +383,7 @@ onMounted(async () => { onUnmounted(() => { selectFileTabSubscription.unsubscribe(); createFileSubscription.unsubscribe(); + renameFileSubscription.unsubscribe(); deleteFileSubscription.unsubscribe(); updateEditorContentSubscription.unsubscribe(); addRemoteSubscription.unsubscribe(); @@ -411,12 +416,12 @@ onUnmounted(() => { background: rgba($primary, 0.1); border-radius: 4px; - .file-explorer-button { + .file-explorer-action-button { display: inline-block } } } -.file-explorer-button { +.file-explorer-action-button { display: none } diff --git a/src/components/card/FileExplorerActionCard.vue b/src/components/FileExplorerActionButton.vue similarity index 93% rename from src/components/card/FileExplorerActionCard.vue rename to src/components/FileExplorerActionButton.vue index 6e4d8f1d8..17b42c7a0 100644 --- a/src/components/card/FileExplorerActionCard.vue +++ b/src/components/FileExplorerActionButton.vue @@ -8,6 +8,7 @@ :class="['tree-action-button', { 'inline-block' : isActionMenuOpen }]" color="primary" icon="fa-solid fa-ellipsis-vertical" + :data-cy="`${file.isFolder ? 'folder': 'file'}-button_${file.id}`" @click.stop="isActionMenuOpen = true" > + + + + + + + diff --git a/src/components/form/RenameFileForm.vue b/src/components/form/RenameFileForm.vue new file mode 100644 index 000000000..a1ca844a5 --- /dev/null +++ b/src/components/form/RenameFileForm.vue @@ -0,0 +1,132 @@ + + + + + diff --git a/src/components/menu/FileExplorerActionMenu.vue b/src/components/menu/FileExplorerActionMenu.vue index 218d58c5e..4e95816a4 100644 --- a/src/components/menu/FileExplorerActionMenu.vue +++ b/src/components/menu/FileExplorerActionMenu.vue @@ -6,6 +6,23 @@ @hide="emit('hide:menu')" > + + + + + + {{ $t('actions.default.rename') }} + +