Inherited share UI
Signed-off-by: John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
This commit is contained in:
parent
ccf7d87c11
commit
3a86b99256
14 changed files with 284 additions and 5 deletions
BIN
apps/files_sharing/js/dist/additionalScripts.js
vendored
BIN
apps/files_sharing/js/dist/additionalScripts.js
vendored
Binary file not shown.
BIN
apps/files_sharing/js/dist/additionalScripts.js.map
vendored
BIN
apps/files_sharing/js/dist/additionalScripts.js.map
vendored
Binary file not shown.
BIN
apps/files_sharing/js/dist/collaboration.js
vendored
BIN
apps/files_sharing/js/dist/collaboration.js
vendored
Binary file not shown.
BIN
apps/files_sharing/js/dist/collaboration.js.map
vendored
BIN
apps/files_sharing/js/dist/collaboration.js.map
vendored
Binary file not shown.
BIN
apps/files_sharing/js/dist/files_sharing.js
vendored
BIN
apps/files_sharing/js/dist/files_sharing.js
vendored
Binary file not shown.
BIN
apps/files_sharing/js/dist/files_sharing.js.map
vendored
BIN
apps/files_sharing/js/dist/files_sharing.js.map
vendored
Binary file not shown.
BIN
apps/files_sharing/js/dist/files_sharing_tab.js
vendored
BIN
apps/files_sharing/js/dist/files_sharing_tab.js
vendored
Binary file not shown.
BIN
apps/files_sharing/js/dist/files_sharing_tab.js.map
vendored
BIN
apps/files_sharing/js/dist/files_sharing_tab.js.map
vendored
Binary file not shown.
BIN
apps/files_sharing/js/dist/main.js
vendored
BIN
apps/files_sharing/js/dist/main.js
vendored
Binary file not shown.
BIN
apps/files_sharing/js/dist/main.js.map
vendored
BIN
apps/files_sharing/js/dist/main.js.map
vendored
Binary file not shown.
|
@ -119,8 +119,6 @@ import ActionInput from 'nextcloud-vue/dist/Components/ActionInput'
|
|||
import ActionTextEditable from 'nextcloud-vue/dist/Components/ActionTextEditable'
|
||||
import Tooltip from 'nextcloud-vue/dist/Directives/Tooltip'
|
||||
|
||||
// eslint-disable-next-line no-unused-vars
|
||||
import Share from '../models/Share'
|
||||
import SharesMixin from '../mixins/SharesMixin'
|
||||
|
||||
export default {
|
||||
|
|
112
apps/files_sharing/src/components/SharingEntryInherited.vue
Normal file
112
apps/files_sharing/src/components/SharingEntryInherited.vue
Normal file
|
@ -0,0 +1,112 @@
|
|||
<!--
|
||||
- @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>
|
||||
-
|
||||
- @author John Molakvoæ <skjnldsv@protonmail.com>
|
||||
-
|
||||
- @license GNU AGPL version 3 or any later version
|
||||
-
|
||||
- This program is free software: you can redistribute it and/or modify
|
||||
- it under the terms of the GNU Affero General Public License as
|
||||
- published by the Free Software Foundation, either version 3 of the
|
||||
- License, or (at your option) any later version.
|
||||
-
|
||||
- This program is distributed in the hope that it will be useful,
|
||||
- but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
- GNU Affero General Public License for more details.
|
||||
-
|
||||
- You should have received a copy of the GNU Affero General Public License
|
||||
- along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
-
|
||||
-->
|
||||
|
||||
<template>
|
||||
<SharingEntrySimple
|
||||
:key="share.id"
|
||||
class="sharing-entry__inherited"
|
||||
:title="share.shareWithDisplayName">
|
||||
<template #avatar>
|
||||
<Avatar
|
||||
:user="share.shareWith"
|
||||
:display-name="share.shareWithDisplayName"
|
||||
class="sharing-entry__avatar"
|
||||
tooltip-message="" />
|
||||
</template>
|
||||
<ActionText icon="icon-user">
|
||||
{{ t('files_sharing', 'Invited by {initiator}', { initiator: share.ownerDisplayName }) }}
|
||||
</ActionText>
|
||||
<ActionLink v-if="share.fileSource"
|
||||
icon="icon-folder"
|
||||
:href="fileTargetUrl">
|
||||
{{ t('files_sharing', 'Open folder') }}
|
||||
</ActionLink>
|
||||
<ActionButton v-if="share.canDelete"
|
||||
icon="icon-delete"
|
||||
@click.prevent="onDelete">
|
||||
{{ t('files_sharing', 'Delete share') }}
|
||||
</actionbutton>
|
||||
</SharingEntrySimple>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { generateUrl } from '@nextcloud/router'
|
||||
import Avatar from 'nextcloud-vue/dist/Components/Avatar'
|
||||
import ActionButton from 'nextcloud-vue/dist/Components/ActionButton'
|
||||
import ActionLink from 'nextcloud-vue/dist/Components/ActionLink'
|
||||
import ActionText from 'nextcloud-vue/dist/Components/ActionText'
|
||||
|
||||
// eslint-disable-next-line no-unused-vars
|
||||
import Share from '../models/Share'
|
||||
import SharesMixin from '../mixins/SharesMixin'
|
||||
import SharingEntrySimple from '../components/SharingEntrySimple'
|
||||
|
||||
export default {
|
||||
name: 'SharingEntryInherited',
|
||||
|
||||
components: {
|
||||
ActionButton,
|
||||
ActionLink,
|
||||
ActionText,
|
||||
Avatar,
|
||||
SharingEntrySimple
|
||||
},
|
||||
|
||||
mixins: [SharesMixin],
|
||||
|
||||
props: {
|
||||
share: {
|
||||
type: Share,
|
||||
required: true
|
||||
}
|
||||
},
|
||||
|
||||
computed: {
|
||||
fileTargetUrl() {
|
||||
return generateUrl('/f/{fileid}', {
|
||||
fileid: this.share.fileSource
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.sharing-entry {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
height: 44px;
|
||||
&__desc {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: space-between;
|
||||
padding: 8px;
|
||||
line-height: 1.2em;
|
||||
p {
|
||||
color: var(--color-text-maxcontrast);
|
||||
}
|
||||
}
|
||||
&__actions {
|
||||
margin-left: auto;
|
||||
}
|
||||
}
|
||||
</style>
|
164
apps/files_sharing/src/views/SharingInherited.vue
Normal file
164
apps/files_sharing/src/views/SharingInherited.vue
Normal file
|
@ -0,0 +1,164 @@
|
|||
<!--
|
||||
- @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>
|
||||
-
|
||||
- @author John Molakvoæ <skjnldsv@protonmail.com>
|
||||
-
|
||||
- @license GNU AGPL version 3 or any later version
|
||||
-
|
||||
- This program is free software: you can redistribute it and/or modify
|
||||
- it under the terms of the GNU Affero General Public License as
|
||||
- published by the Free Software Foundation, either version 3 of the
|
||||
- License, or (at your option) any later version.
|
||||
-
|
||||
- This program is distributed in the hope that it will be useful,
|
||||
- but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
- GNU Affero General Public License for more details.
|
||||
-
|
||||
- You should have received a copy of the GNU Affero General Public License
|
||||
- along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
-
|
||||
-->
|
||||
|
||||
<template>
|
||||
<ul id="sharing-inherited-shares">
|
||||
<!-- Main collapsible entry -->
|
||||
<SharingEntrySimple
|
||||
class="sharing-entry__inherited"
|
||||
:title="mainTitle">
|
||||
<template #avatar>
|
||||
<div class="avatar-shared icon-more-white" />
|
||||
</template>
|
||||
<ActionButton :icon="showInheritedSharesIcon" @click.prevent.stop="toggleInheritedShares">
|
||||
{{ toggleTooltip }}
|
||||
</ActionButton>
|
||||
</SharingEntrySimple>
|
||||
|
||||
<!-- Inherited shares list -->
|
||||
<SharingEntryInherited v-for="share in shares"
|
||||
:key="share.id"
|
||||
:share="share" />
|
||||
</ul>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { generateOcsUrl } from '@nextcloud/router'
|
||||
import ActionButton from 'nextcloud-vue/dist/Components/ActionButton'
|
||||
import axios from '@nextcloud/axios'
|
||||
|
||||
import Share from '../models/Share'
|
||||
import SharingEntryInherited from '../components/SharingEntryInherited'
|
||||
import SharingEntrySimple from '../components/SharingEntrySimple'
|
||||
|
||||
export default {
|
||||
name: 'SharingInherited',
|
||||
|
||||
components: {
|
||||
ActionButton,
|
||||
SharingEntryInherited,
|
||||
SharingEntrySimple
|
||||
},
|
||||
|
||||
props: {
|
||||
fileInfo: {
|
||||
type: Object,
|
||||
default: () => {},
|
||||
required: true
|
||||
}
|
||||
},
|
||||
|
||||
data() {
|
||||
return {
|
||||
loaded: false,
|
||||
loading: false,
|
||||
showInheritedShares: false,
|
||||
shares: []
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
showInheritedSharesIcon() {
|
||||
if (this.loading) {
|
||||
return 'icon-loading-small'
|
||||
}
|
||||
if (this.showInheritedShares) {
|
||||
return 'icon-triangle-n'
|
||||
}
|
||||
return 'icon-triangle-s'
|
||||
},
|
||||
mainTitle() {
|
||||
return t('files_sharing', 'Others with access {count}', {
|
||||
count: this.loaded ? `: ${this.shares.length}` : ''
|
||||
})
|
||||
},
|
||||
toggleTooltip() {
|
||||
return this.fileInfo.type === 'dir'
|
||||
? t('files_sharing', 'Toggle list of others with access to this directory')
|
||||
: t('files_sharing', 'Toggle list of others with access to this file')
|
||||
},
|
||||
fullPath() {
|
||||
const path = `${this.fileInfo.path}/${this.fileInfo.name}`
|
||||
return path.replace('//', '/')
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
fileInfo() {
|
||||
this.resetState()
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
/**
|
||||
* Toggle the list view and fetch/reset the state
|
||||
*/
|
||||
toggleInheritedShares() {
|
||||
this.showInheritedShares = !this.showInheritedShares
|
||||
if (this.showInheritedShares) {
|
||||
this.fetchInheritedShares()
|
||||
} else {
|
||||
this.resetState()
|
||||
}
|
||||
},
|
||||
/**
|
||||
* Fetch the Inherited Shares array
|
||||
*/
|
||||
async fetchInheritedShares() {
|
||||
this.loading = true
|
||||
try {
|
||||
const url = generateOcsUrl(`apps/files_sharing/api/v1/shares/inherited?format=json&path=${this.fullPath}`, 2)
|
||||
const shares = await axios.get(url.replace(/\/$/, ''))
|
||||
this.shares = shares.data.ocs.data
|
||||
.map(share => new Share(share))
|
||||
.sort((a, b) => b.createdTime - a.createdTime)
|
||||
console.info(this.shares)
|
||||
this.loaded = true
|
||||
} catch (error) {
|
||||
OC.Notification.showTemporary(t('files_sharing', 'Unable to fetch inherited shares'), { type: 'error' })
|
||||
} finally {
|
||||
this.loading = false
|
||||
}
|
||||
},
|
||||
/**
|
||||
* Reset current component state
|
||||
*/
|
||||
resetState() {
|
||||
this.loaded = false
|
||||
this.loading = false
|
||||
this.showInheritedShares = false
|
||||
this.shares = []
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.sharing-entry__inherited {
|
||||
.avatar-shared {
|
||||
width: 32px;
|
||||
height: 32px;
|
||||
line-height: 32px;
|
||||
font-size: 18px;
|
||||
background-color: var(--color-text-maxcontrast);
|
||||
border-radius: 50%;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
}
|
||||
</style>
|
|
@ -33,7 +33,7 @@
|
|||
<!-- shared with me information -->
|
||||
<SharingEntrySimple v-if="isSharedWithMe" v-bind="sharedWithMe" class="sharing-entry__reshare">
|
||||
<template #avatar>
|
||||
<Avatar #avatar
|
||||
<Avatar
|
||||
:user="sharedWithMe.user"
|
||||
:display-name="sharedWithMe.displayName"
|
||||
class="sharing-entry__avatar"
|
||||
|
@ -61,6 +61,9 @@
|
|||
:shares="shares"
|
||||
:file-info="fileInfo" />
|
||||
|
||||
<!-- inherited shares -->
|
||||
<SharingInherited v-if="!loading" :file-info="fileInfo" />
|
||||
|
||||
<!-- internal link copy -->
|
||||
<SharingEntryInternal :file-info="fileInfo" />
|
||||
|
||||
|
@ -82,11 +85,11 @@
|
|||
</template>
|
||||
|
||||
<script>
|
||||
import { CollectionList } from 'nextcloud-vue-collections'
|
||||
import { generateOcsUrl } from '@nextcloud/router'
|
||||
import Tab from 'nextcloud-vue/dist/Components/AppSidebarTab'
|
||||
import Avatar from 'nextcloud-vue/dist/Components/Avatar'
|
||||
import axios from '@nextcloud/axios'
|
||||
import { CollectionList } from 'nextcloud-vue-collections'
|
||||
import Tab from 'nextcloud-vue/dist/Components/AppSidebarTab'
|
||||
|
||||
import { shareWithTitle } from '../utils/SharedWithMe'
|
||||
import Share from '../models/Share'
|
||||
|
@ -95,6 +98,7 @@ import SharingEntryInternal from '../components/SharingEntryInternal'
|
|||
import SharingEntrySimple from '../components/SharingEntrySimple'
|
||||
import SharingInput from '../components/SharingInput'
|
||||
|
||||
import SharingInherited from './SharingInherited'
|
||||
import SharingLinkList from './SharingLinkList'
|
||||
import SharingList from './SharingList'
|
||||
|
||||
|
@ -106,6 +110,7 @@ export default {
|
|||
CollectionList,
|
||||
SharingEntryInternal,
|
||||
SharingEntrySimple,
|
||||
SharingInherited,
|
||||
SharingInput,
|
||||
SharingLinkList,
|
||||
SharingList,
|
||||
|
|
Loading…
Reference in a new issue