Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
fix(FilesView): Update files view upon share creation/delete
Resolves : #44961

Signed-off-by: fenn-cs <[email protected]>
  • Loading branch information
nfebe committed Jul 8, 2024
commit 9d1431c38ae7200acd268b0a9bc33d403127eb08
4 changes: 4 additions & 0 deletions apps/files_sharing/src/components/SharingEntryLink.vue
Original file line number Diff line number Diff line change
Expand Up @@ -183,6 +183,7 @@
</template>

<script>
import { emit } from '@nextcloud/event-bus'
import { generateUrl } from '@nextcloud/router'
import { showError, showSuccess } from '@nextcloud/dialogs'
import { Type as ShareTypes } from '@nextcloud/sharing'
Expand Down Expand Up @@ -638,6 +639,9 @@ export default {
})
}

await this.getNode()
emit('files:node:updated', this.node)

// Execute the copy link method
// freshly created share component
// ! somehow does not works on firefox !
Expand Down
24 changes: 23 additions & 1 deletion apps/files_sharing/src/mixins/SharesMixin.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@
*
*/

import { emit } from '@nextcloud/event-bus'
import { fetchNode } from '../services/WebdavClient.ts'
import { showError, showSuccess } from '@nextcloud/dialogs'
import { getCurrentUser } from '@nextcloud/auth'
// eslint-disable-next-line import/no-unresolved, n/no-missing-import
Expand All @@ -35,6 +37,7 @@ import Share from '../models/Share.js'
import SharesRequests from './ShareRequests.js'
import ShareTypes from './ShareTypes.js'
import Config from '../services/ConfigService.js'
import logger from '../services/logger.ts'

import {
BUNDLED_PERMISSIONS,
Expand Down Expand Up @@ -62,6 +65,7 @@ export default {
data() {
return {
config: new Config(),
node: null,

// errors helpers
errors: {},
Expand All @@ -84,7 +88,9 @@ export default {
},

computed: {

path() {
return (this.fileInfo.path + '/' + this.fileInfo.name).replace('//', '/')
},
/**
* Does the current share have a note
*
Expand Down Expand Up @@ -171,6 +177,20 @@ export default {
},

methods: {
/**
* Fetch webdav node
*
* @return {Node}
*/
async getNode() {
const node = { path: this.path }
try {
this.node = await fetchNode(node)
logger.info('Fetched node:', { node: this.node })
} catch (error) {
logger.error('Error:', error)
}
},
/**
* Check if a share is valid before
* firing the request
Expand Down Expand Up @@ -269,6 +289,8 @@ export default {
: t('files_sharing', 'Folder "{path}" has been unshared', { path: this.share.path })
showSuccess(message)
this.$emit('remove:share', this.share)
await this.getNode()
emit('files:node:updated', this.node)
} catch (error) {
// re-open menu if error
this.open = true
Expand Down
18 changes: 18 additions & 0 deletions apps/files_sharing/src/services/WebdavClient.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
/**
* SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
import { davGetClient, davGetDefaultPropfind, davResultToNode, davRootPath } from '@nextcloud/files'
import type { FileStat, ResponseDataDetailed } from 'webdav'
import type { Node } from '@nextcloud/files'

export const client = davGetClient()

export const fetchNode = async (node: Node): Promise<Node> => {
const propfindPayload = davGetDefaultPropfind()
const result = await client.stat(`${davRootPath}${node.path}`, {
details: true,
data: propfindPayload,
}) as ResponseDataDetailed<FileStat>
return davResultToNode(result.data)
}
11 changes: 7 additions & 4 deletions apps/files_sharing/src/views/SharingDetailsTab.vue
Original file line number Diff line number Diff line change
Expand Up @@ -215,6 +215,7 @@
</template>

<script>
import { emit } from '@nextcloud/event-bus'
import { getLanguage } from '@nextcloud/l10n'

import NcButton from '@nextcloud/vue/dist/Components/NcButton.js'
Expand Down Expand Up @@ -243,6 +244,7 @@ import Share from '../models/Share.js'
import ShareRequests from '../mixins/ShareRequests.js'
import ShareTypes from '../mixins/ShareTypes.js'
import SharesMixin from '../mixins/SharesMixin.js'
import logger from '../services/logger.ts'

import {
ATOMIC_PERMISSIONS,
Expand Down Expand Up @@ -839,7 +841,7 @@ export default {
}

this.creating = true
const share = await this.addShare(incomingShare, this.fileInfo)
const share = await this.addShare(incomingShare)
this.creating = false
this.share = share
this.$emit('add:share', this.share)
Expand All @@ -854,12 +856,11 @@ export default {
* Process the new share request
*
* @param {Share} share incoming share object
* @param {object} fileInfo file data
*/
async addShare(share, fileInfo) {
async addShare(share) {
console.debug('Adding a new share from the input for', share)
const path = this.path
try {
const path = (fileInfo.path + '/' + fileInfo.name).replace('//', '/')
const resultingShare = await this.createShare({
path,
shareType: share.shareType,
Expand All @@ -879,6 +880,8 @@ export default {
},
async removeShare() {
await this.onDelete()
await this.getNode()
emit('files:node:updated', this.node)
this.$emit('close-sharing-details')
},
/**
Expand Down