Skip to content

Commit

Permalink
feat(sidebar): Show node owner in metadata subline
Browse files Browse the repository at this point in the history
Resolves: #46178

Signed-off-by: fenn-cs <[email protected]>
  • Loading branch information
nfebe committed Sep 26, 2024
1 parent 0451be7 commit 51d2ce5
Show file tree
Hide file tree
Showing 2 changed files with 69 additions and 12 deletions.
13 changes: 12 additions & 1 deletion apps/files/src/services/WebdavClient.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,17 @@
* SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
import { davGetClient } from '@nextcloud/files'
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)
}
68 changes: 57 additions & 11 deletions apps/files/src/views/Sidebar.vue
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,19 @@
@closing="handleClosing"
@closed="handleClosed">
<template v-if="fileInfo" #subname>
<NcIconSvgWrapper v-if="fileInfo.isFavourited"
:path="mdiStar"
:name="t('files', 'Favorite')"
inline />
{{ size }}
<NcDateTime :timestamp="fileInfo.mtime" />
<div class="sidebar__subname">
<NcIconSvgWrapper v-if="fileInfo.isFavourited"
:path="mdiStar"
:name="t('files', 'Favorite')"
inline />
<span>{{ size }}</span>
<span class="sidebar__subname-separator">•</span>
<NcDateTime :timestamp="fileInfo.mtime" />
<span class="sidebar__subname-separator">•</span>
<span>{{ t('files', 'Owner') }}</span>
<NcUserBubble :user="ownerId"
:display-name="nodeOwnerLabel" />
</div>
</template>

<!-- TODO: create a standard to allow multiple elements here? -->
Expand Down Expand Up @@ -96,6 +103,7 @@ import { encodePath } from '@nextcloud/paths'
import { generateUrl } from '@nextcloud/router'
import { ShareType } from '@nextcloud/sharing'
import { mdiStar, mdiStarOutline } from '@mdi/js'
import { fetchNode } from '../services/WebdavClient.ts'
import axios from '@nextcloud/axios'
import $ from 'jquery'
Expand All @@ -104,6 +112,7 @@ import NcActionButton from '@nextcloud/vue/dist/Components/NcActionButton.js'
import NcDateTime from '@nextcloud/vue/dist/Components/NcDateTime.js'
import NcEmptyContent from '@nextcloud/vue/dist/Components/NcEmptyContent.js'
import NcIconSvgWrapper from '@nextcloud/vue/dist/Components/NcIconSvgWrapper.js'
import NcUserBubble from '@nextcloud/vue/dist/Components/NcUserBubble.js'
import FileInfo from '../services/FileInfo.js'
import LegacyView from '../components/LegacyView.vue'
Expand All @@ -123,6 +132,7 @@ export default {
NcIconSvgWrapper,
SidebarTab,
SystemTags,
NcUserBubble,
},
setup() {
Expand All @@ -146,6 +156,7 @@ export default {
error: null,
loading: true,
fileInfo: null,
node: null,
isFullScreen: false,
hasLowHeight: false,
}
Expand Down Expand Up @@ -287,6 +298,25 @@ export default {
isSystemTagsEnabled() {
return getCapabilities()?.systemtags?.enabled === true
},
ownerId() {
return this.node?.attributes?.['owner-id'] ?? this.currentUser.uid
},
currentUserIsOwner() {
return this.ownerId === this.currentUser.uid
},
nodeOwnerLabel() {
let ownerDisplayName = this.node?.attributes?.['owner-display-name']
if (this.currentUserIsOwner) {
ownerDisplayName = `${ownerDisplayName} (${t('files', 'You')})`
}
return ownerDisplayName
},
sharedMultipleTimes() {
if (Array.isArray(node.attributes?.['share-types']) && node.attributes?.['share-types'].length > 1) {
return t('files', 'Shared multiple times with different people')
}
return null
},
},
created() {
subscribe('files:node:deleted', this.onNodeDeleted)
Expand Down Expand Up @@ -460,6 +490,7 @@ export default {
this.fileInfo = await FileInfo(this.davPath)
// adding this as fallback because other apps expect it
this.fileInfo.dir = this.file.split('/').slice(0, -1).join('/')
this.node = await fetchNode({ path: (this.fileInfo.path + '/' + this.fileInfo.name).replace('//', '/') })

// DEPRECATED legacy views
// TODO: remove
Expand Down Expand Up @@ -589,10 +620,25 @@ export default {
}
}
.sidebar__description {
display: flex;
flex-direction: column;
width: 100%;
gap: 8px 0;
.sidebar__subname {
display: flex;
align-items: center;
gap: 0 8px;
&-separator {
display: inline-block;
font-weight: bold !important;
}
.user-bubble__wrapper {
display: inline-flex;
}
}
.sidebar__description {
display: flex;
flex-direction: column;
width: 100%;
gap: 8px 0;
}
</style>

0 comments on commit 51d2ce5

Please sign in to comment.