Inherited share UI
Signed-off-by: John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
This commit is contained in:
parent
ccf7d87c11
commit
3a86b99256
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -1,2 +1,2 @@
|
|||
!function(e){var n={};function t(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,t),o.l=!0,o.exports}t.m=e,t.c=n,t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{enumerable:!0,get:r})},t.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},t.t=function(e,n){if(1&n&&(e=t(e)),8&n)return e;if(4&n&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(t.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&n&&"string"!=typeof e)for(var o in e)t.d(r,o,function(n){return e[n]}.bind(null,o));return r},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},t.p="/js/",t(t.s=65)}({65:function(e,n,r){r.p=OC.linkTo("files_sharing","js/dist/"),r.nc=btoa(OC.requestToken),window.OCP.Collaboration.registerType("file",{action:function(){return new Promise((function(e,n){OC.dialogs.filepicker(t("files_sharing","Link to a file"),(function(t){OC.Files.getClient().getFileInfo(t).then((function(n,t){e(t.id)})).fail((function(){n(new Error("Cannot get fileinfo"))}))}),!1,null,!1,OC.dialogs.FILEPICKER_TYPE_CHOOSE,"",{allowDirectoryChooser:!0})}))},typeString:t("files_sharing","Link to a file"),typeIconClass:"icon-files-dark"})}});
|
||||
!function(e){var n={};function t(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,t),o.l=!0,o.exports}t.m=e,t.c=n,t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{enumerable:!0,get:r})},t.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},t.t=function(e,n){if(1&n&&(e=t(e)),8&n)return e;if(4&n&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(t.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&n&&"string"!=typeof e)for(var o in e)t.d(r,o,function(n){return e[n]}.bind(null,o));return r},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},t.p="/js/",t(t.s=68)}({68:function(e,n,r){r.p=OC.linkTo("files_sharing","js/dist/"),r.nc=btoa(OC.requestToken),window.OCP.Collaboration.registerType("file",{action:function(){return new Promise((function(e,n){OC.dialogs.filepicker(t("files_sharing","Link to a file"),(function(t){OC.Files.getClient().getFileInfo(t).then((function(n,t){e(t.id)})).fail((function(){n(new Error("Cannot get fileinfo"))}))}),!1,null,!1,OC.dialogs.FILEPICKER_TYPE_CHOOSE,"",{allowDirectoryChooser:!0})}))},typeString:t("files_sharing","Link to a file"),typeIconClass:"icon-files-dark"})}});
|
||||
//# sourceMappingURL=collaboration.js.map
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -1,4 +1,4 @@
|
|||
!function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="/js/",r(r.s=343)}({343:function(e,t){
|
||||
!function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="/js/",r(r.s=349)}({349:function(e,t){
|
||||
/**
|
||||
* @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>
|
||||
*
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -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 {
|
||||
|
|
|
@ -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>
|
|
@ -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 New Issue