298 lines
8.9 KiB
Vue
Executable File
298 lines
8.9 KiB
Vue
Executable File
<template>
|
|
<article v-if="folder">
|
|
<header>
|
|
<div class="icons">
|
|
<svg
|
|
fill="currentColor"
|
|
width="16"
|
|
height="16"
|
|
v-bind:class="folder.iconColor"
|
|
>
|
|
<use v-bind:xlink:href="icon(folder.icon)" />
|
|
</svg>
|
|
</div>
|
|
<h1>{{ folder.title }}</h1>
|
|
<div class="badges">
|
|
<div
|
|
class="badge default"
|
|
v-if="folder.feed_item_states_count > 0"
|
|
>
|
|
{{ folder.feed_item_states_count }}
|
|
</div>
|
|
</div>
|
|
<div class="tools">
|
|
<button
|
|
v-if="folder.feed_item_states_count > 0"
|
|
class="info"
|
|
v-on:click="onMarkAsReadClicked"
|
|
>
|
|
<svg fill="currentColor" width="16" height="16">
|
|
<use v-bind:xlink:href="icon('unread_items')" />
|
|
</svg>
|
|
<span>
|
|
{{ __("Mark as read") }}
|
|
</span>
|
|
</button>
|
|
</div>
|
|
</header>
|
|
|
|
<div class="body">
|
|
<form
|
|
v-bind:action="route('folder.update', folder)"
|
|
v-if="can('can_update_folder') && folder.type === 'folder'"
|
|
v-on:submit.prevent="onUpdateFolder"
|
|
>
|
|
<div class="input-group">
|
|
<input
|
|
type="text"
|
|
name="title"
|
|
v-bind:value="folder.title"
|
|
v-on:input="updateFolderTitle = $event.target.value"
|
|
/>
|
|
<button type="submit" class="success">
|
|
<svg fill="currentColor" width="16" height="16">
|
|
<use v-bind:xlink:href="icon('update')" />
|
|
</svg>
|
|
<span>
|
|
{{ __("Update folder") }}
|
|
</span>
|
|
</button>
|
|
</div>
|
|
</form>
|
|
|
|
<form
|
|
v-bind:action="route('folder.store')"
|
|
v-on:submit.prevent="onAddFolder"
|
|
v-if="can('can_create_folder')"
|
|
>
|
|
<div class="input-group">
|
|
<input type="text" v-model="addFolderTitle" />
|
|
<button type="submit" class="success">
|
|
<svg fill="currentColor" width="16" height="16">
|
|
<use v-bind:xlink:href="icon('add')" />
|
|
</svg>
|
|
<span>
|
|
{{ __("Add folder") }}
|
|
</span>
|
|
</button>
|
|
</div>
|
|
</form>
|
|
|
|
<form
|
|
v-bind:action="route('document.store')"
|
|
v-on:submit.prevent="onAddDocument"
|
|
v-if="can('can_create_document')"
|
|
class="mb-6"
|
|
>
|
|
<div class="input-group">
|
|
<input type="url" v-model="addDocumentUrl" />
|
|
<button type="submit" class="success">
|
|
<svg fill="currentColor" width="16" height="16">
|
|
<use v-bind:xlink:href="icon('add')" />
|
|
</svg>
|
|
<span>
|
|
{{ __("Add document") }}
|
|
</span>
|
|
</button>
|
|
</div>
|
|
</form>
|
|
|
|
<div
|
|
v-if="folder.group && folder.group.active_users_count > 1"
|
|
class="mb-6"
|
|
>
|
|
<default-folder-permissions
|
|
class="details-block"
|
|
v-bind:folder="folder"
|
|
v-if="
|
|
can('can_change_permissions') &&
|
|
(folder.type === 'root' || folder.type === 'folder')
|
|
"
|
|
></default-folder-permissions>
|
|
|
|
<per-user-folder-permissions
|
|
class="details-block"
|
|
v-bind:folder="folder"
|
|
v-if="
|
|
can('can_change_permissions') &&
|
|
(folder.type === 'root' || folder.type === 'folder')
|
|
"
|
|
></per-user-folder-permissions>
|
|
</div>
|
|
|
|
<div v-if="can('can_delete_folder')">
|
|
<button class="danger" v-on:click="onDeleteFolder">
|
|
<svg fill="currentColor" width="16" height="16">
|
|
<use v-bind:xlink:href="icon('trash')" />
|
|
</svg>
|
|
<span>
|
|
{{ __("Delete") }}
|
|
</span>
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</article>
|
|
</template>
|
|
|
|
<script>
|
|
import { mapActions, mapGetters } from "vuex";
|
|
import DefaultFolderPermissions from "./DefaultFolderPermissions.vue";
|
|
import PerUserFolderPermissions from "./PerUserFolderPermissions.vue";
|
|
|
|
export default {
|
|
components: {
|
|
DefaultFolderPermissions,
|
|
PerUserFolderPermissions,
|
|
},
|
|
data: function () {
|
|
return {
|
|
updateFolderTitle: null,
|
|
addFolderTitle: null,
|
|
addDocumentUrl: null,
|
|
};
|
|
},
|
|
/**
|
|
* Computed properties
|
|
*/
|
|
computed: {
|
|
...mapGetters({
|
|
group: "groups/selectedGroup",
|
|
folder: "folders/selectedFolder",
|
|
}),
|
|
},
|
|
/**
|
|
* Watchers
|
|
*/
|
|
watch: {
|
|
folder: function () {
|
|
const self = this;
|
|
|
|
if (self.folder) {
|
|
self.loadDetails(self.folder).then(function () {
|
|
self.$forceUpdate();
|
|
});
|
|
}
|
|
},
|
|
},
|
|
mounted: function () {
|
|
const self = this;
|
|
|
|
if (self.folder) {
|
|
self.loadDetails(self.folder).then(function () {
|
|
self.$forceUpdate();
|
|
});
|
|
}
|
|
},
|
|
/**
|
|
* Methods
|
|
*/
|
|
methods: {
|
|
...mapActions({
|
|
update: "folders/update",
|
|
updateProperties: "folders/updateProperties",
|
|
updatePermission: "folders/updatePermission",
|
|
store: "folders/store",
|
|
destroy: "folders/destroy",
|
|
storeDocument: "documents/store",
|
|
index: "folders/index",
|
|
loadDetails: "folders/loadDetails",
|
|
}),
|
|
|
|
/**
|
|
* Mark as read button clicked
|
|
*/
|
|
onMarkAsReadClicked: function () {
|
|
const self = this;
|
|
|
|
self.$emit("feeditems-read", {
|
|
folders: [self.folder.id],
|
|
});
|
|
},
|
|
|
|
/**
|
|
* Update folder form submitted
|
|
*/
|
|
onUpdateFolder: function () {
|
|
const self = this;
|
|
|
|
if (
|
|
!self.updateFolderTitle ||
|
|
self.updateFolderTitle === self.folder.title
|
|
) {
|
|
return;
|
|
}
|
|
|
|
self.update({
|
|
folder: self.folder,
|
|
newProperties: {
|
|
...self.folder,
|
|
...{
|
|
title: self.updateFolderTitle,
|
|
},
|
|
},
|
|
});
|
|
},
|
|
/**
|
|
* Add folder form submitted
|
|
*/
|
|
onAddFolder: function () {
|
|
const self = this;
|
|
|
|
if (!self.addFolderTitle) {
|
|
return;
|
|
}
|
|
|
|
self.store({
|
|
group_id: self.group.id,
|
|
parent_id: self.folder.id,
|
|
title: self.addFolderTitle,
|
|
})
|
|
.then(function () {
|
|
self.addFolderTitle = null;
|
|
})
|
|
.catch((error) => console.error(error));
|
|
},
|
|
/**
|
|
* Delete folder button clicked
|
|
*/
|
|
onDeleteFolder: function () {
|
|
const self = this;
|
|
|
|
self.destroy(self.folder);
|
|
},
|
|
/**
|
|
* Add document form submitted
|
|
*/
|
|
onAddDocument: function () {
|
|
const self = this;
|
|
|
|
if (!self.addDocumentUrl) {
|
|
return;
|
|
}
|
|
|
|
self.storeDocument({
|
|
group_id: self.group.id,
|
|
folder_id: self.folder.id,
|
|
url: self.addDocumentUrl,
|
|
}).then(function () {
|
|
self.addDocumentUrl = null;
|
|
self.$emit("document-added");
|
|
});
|
|
},
|
|
|
|
can: function (permission) {
|
|
const self = this;
|
|
|
|
if (
|
|
"user_permissions" in self.folder &&
|
|
permission in self.folder.user_permissions
|
|
) {
|
|
return self.folder.user_permissions[permission];
|
|
}
|
|
|
|
return false;
|
|
},
|
|
},
|
|
};
|
|
</script>
|