diff options
-rw-r--r-- | apps/files/src/actions/deleteAction.ts | 5 | ||||
-rw-r--r-- | apps/files/src/store/paths.ts | 2 | ||||
-rw-r--r-- | apps/files/src/views/FilesList.vue | 36 |
3 files changed, 40 insertions, 3 deletions
diff --git a/apps/files/src/actions/deleteAction.ts b/apps/files/src/actions/deleteAction.ts index 6b4cb927b1c..23106a5d15f 100644 --- a/apps/files/src/actions/deleteAction.ts +++ b/apps/files/src/actions/deleteAction.ts @@ -126,14 +126,15 @@ export const action = new FileAction({ .every(permission => (permission & Permission.DELETE) !== 0) }, - async exec(node: Node) { + async exec(node: Node, view: View, dir: string) { try { await axios.delete(node.encodedSource) // Let's delete even if it's moved to the trashbin // since it has been removed from the current view - // and changing the view will trigger a reload anyway. + // and changing the view will trigger a reload anyway. emit('files:node:deleted', node) + return true } catch (error) { logger.error('Error while deleting a file', { error, source: node.source, node }) diff --git a/apps/files/src/store/paths.ts b/apps/files/src/store/paths.ts index 5d5d459f309..23fd69a91e6 100644 --- a/apps/files/src/store/paths.ts +++ b/apps/files/src/store/paths.ts @@ -12,7 +12,7 @@ import logger from '../logger' import { useFilesStore } from './files' export const usePathsStore = function(...args) { - const files = useFilesStore() + const files = useFilesStore(...args) const store = defineStore('paths', { state: () => ({ diff --git a/apps/files/src/views/FilesList.vue b/apps/files/src/views/FilesList.vue index 17903c5473f..e075faa9015 100644 --- a/apps/files/src/views/FilesList.vue +++ b/apps/files/src/views/FilesList.vue @@ -244,6 +244,14 @@ export default defineComponent({ }, /** + * The current file id + */ + fileId(): number | null { + const number = Number.parseInt(this.$route?.params.fileid ?? '') + return Number.isNaN(number) ? null : number + }, + + /** * The current folder. */ currentFolder(): Folder | undefined { @@ -460,6 +468,8 @@ export default defineComponent({ mounted() { this.fetchContent() + + subscribe('files:node:deleted', this.onNodeDeleted) subscribe('files:node:updated', this.onUpdatedNode) subscribe('nextcloud:unified-search.search', this.onSearch) subscribe('nextcloud:unified-search.reset', this.onSearch) @@ -469,6 +479,7 @@ export default defineComponent({ }, unmounted() { + unsubscribe('files:node:deleted', this.onNodeDeleted) unsubscribe('files:node:updated', this.onUpdatedNode) unsubscribe('nextcloud:unified-search.search', this.onSearch) unsubscribe('nextcloud:unified-search.reset', this.onSearch) @@ -546,6 +557,31 @@ export default defineComponent({ }, /** + * Handle the node deleted event to reset open file + * @param node The deleted node + */ + onNodeDeleted(node: Node) { + if (node.fileid && node.fileid === this.fileId) { + if (node.fileid === this.currentFolder?.fileid) { + // Handle the edge case that the current directory is deleted + // in this case we neeed to keept the current view but move to the parent directory + window.OCP.Files.Router.goToRoute( + null, + { view: this.$route.params.view }, + { dir: this.currentFolder?.dirname ?? '/' }, + ) + } else { + // If the currently active file is deleted we need to remove the fileid and possible the `openfile` query + window.OCP.Files.Router.goToRoute( + null, + { ...this.$route.params, fileid: undefined }, + { ...this.$route.query, openfile: undefined }, + ) + } + } + }, + + /** * The upload manager have finished handling the queue * @param {Upload} upload the uploaded data */ |