mirror of
https://github.com/nextcloud/server.git
synced 2026-06-05 23:06:48 -04:00
fix(files): Update current fileid in route if that node was deleted
We do not change the view to the trash bin but stay in the current view, so we need to update the current fileid on the route if that was deleted. Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
This commit is contained in:
parent
3c74559e4c
commit
3808a5b056
3 changed files with 40 additions and 3 deletions
|
|
@ -140,14 +140,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 })
|
||||
|
|
|
|||
|
|
@ -29,7 +29,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: () => ({
|
||||
|
|
|
|||
|
|
@ -240,6 +240,14 @@ export default defineComponent({
|
|||
return (this.$route?.query?.dir?.toString() || '/').replace(/^(.+)\/$/, '$1')
|
||||
},
|
||||
|
||||
/**
|
||||
* The current file id
|
||||
*/
|
||||
fileId(): number | null {
|
||||
const number = Number.parseInt(this.$route?.params.fileid ?? '')
|
||||
return Number.isNaN(number) ? null : number
|
||||
},
|
||||
|
||||
/**
|
||||
* The current folder.
|
||||
*/
|
||||
|
|
@ -453,6 +461,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)
|
||||
|
|
@ -462,6 +472,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)
|
||||
|
|
@ -535,6 +546,31 @@ export default defineComponent({
|
|||
return this.filesStore.getNode(fileId)
|
||||
},
|
||||
|
||||
/**
|
||||
* 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
|
||||
|
|
|
|||
Loading…
Reference in a new issue