From 324f4b1ffa1c0d46715a22fe28060af7777f0599 Mon Sep 17 00:00:00 2001 From: Milos Holba Date: Fri, 13 Nov 2020 19:10:36 +0100 Subject: [PATCH] bulk-operations v0.1 setup bulk delete,move items and FileInfoPanel --- public/mix-manifest.json | 11 +- .../js/components/FilesView/ContextMenu.vue | 13 +++ .../js/components/FilesView/FileBrowser.vue | 8 +- .../js/components/FilesView/FileInfoPanel.vue | 34 +++--- .../js/components/FilesView/FileItemGrid.vue | 9 +- .../js/components/FilesView/FileItemList.vue | 12 +- .../js/components/FilesView/FilePreview.vue | 12 +- .../js/components/FilesView/MultiSelected.vue | 74 ++++++++++++ resources/js/store/modules/fileFunctions.js | 107 ++++++++++++------ 9 files changed, 210 insertions(+), 70 deletions(-) create mode 100644 resources/js/components/FilesView/MultiSelected.vue diff --git a/public/mix-manifest.json b/public/mix-manifest.json index 827f9bda..1904f020 100644 --- a/public/mix-manifest.json +++ b/public/mix-manifest.json @@ -29,7 +29,7 @@ "/chunks/environment-setup.js": "/chunks/environment-setup.js?id=405847df44edd86e301a", "/chunks/files.js": "/chunks/files.js?id=e0e01c40a7c37f170270", "/chunks/files~chunks/settings-subscription~chunks/shared-files~chunks/shared-page~chunks/trash~chunks~3ea7670b.js": "/chunks/files~chunks/settings-subscription~chunks/shared-files~chunks/shared-page~chunks/trash~chunks~3ea7670b.js?id=6cafd70cb9e5ae25f02a", - "/chunks/files~chunks/shared-files~chunks/shared-page~chunks/trash.js": "/chunks/files~chunks/shared-files~chunks/shared-page~chunks/trash.js?id=4663bca7e1ed60adb774", + "/chunks/files~chunks/shared-files~chunks/shared-page~chunks/trash.js": "/chunks/files~chunks/shared-files~chunks/shared-page~chunks/trash.js?id=8c15cc5895d59467a5a5", "/chunks/forgotten-password.js": "/chunks/forgotten-password.js?id=aba8c662fbc234892216", "/chunks/installation-disclaimer.js": "/chunks/installation-disclaimer.js?id=ecceaa6cdf5768826b36", "/chunks/invoices.js": "/chunks/invoices.js?id=248503ac5967fe8370f9", @@ -179,5 +179,12 @@ "/chunks/files~chunks/shared-files~chunks/shared-page~chunks/trash.e9a41033e7b11fab8d60.hot-update.js": "/chunks/files~chunks/shared-files~chunks/shared-page~chunks/trash.e9a41033e7b11fab8d60.hot-update.js", "/js/main.8e5724e1bf2542aefedb.hot-update.js": "/js/main.8e5724e1bf2542aefedb.hot-update.js", "/chunks/files~chunks/shared-files~chunks/shared-page~chunks/trash.8e5724e1bf2542aefedb.hot-update.js": "/chunks/files~chunks/shared-files~chunks/shared-page~chunks/trash.8e5724e1bf2542aefedb.hot-update.js", - "/chunks/files~chunks/shared-files~chunks/shared-page~chunks/trash.6e05a68f5ae202d91bc4.hot-update.js": "/chunks/files~chunks/shared-files~chunks/shared-page~chunks/trash.6e05a68f5ae202d91bc4.hot-update.js" + "/chunks/files~chunks/shared-files~chunks/shared-page~chunks/trash.6e05a68f5ae202d91bc4.hot-update.js": "/chunks/files~chunks/shared-files~chunks/shared-page~chunks/trash.6e05a68f5ae202d91bc4.hot-update.js", + "/js/main.e36c6dc8382e3d5fe133.hot-update.js": "/js/main.e36c6dc8382e3d5fe133.hot-update.js", + "/chunks/files~chunks/shared-files~chunks/shared-page~chunks/trash.e36c6dc8382e3d5fe133.hot-update.js": "/chunks/files~chunks/shared-files~chunks/shared-page~chunks/trash.e36c6dc8382e3d5fe133.hot-update.js", + "/chunks/settings-subscription.e36c6dc8382e3d5fe133.hot-update.js": "/chunks/settings-subscription.e36c6dc8382e3d5fe133.hot-update.js", + "/chunks/settings-subscription~chunks/user-subscription.js": "/chunks/settings-subscription~chunks/user-subscription.js?id=d58c4e02afae33b7cc85", + "/chunks/user-subscription.e36c6dc8382e3d5fe133.hot-update.js": "/chunks/user-subscription.e36c6dc8382e3d5fe133.hot-update.js", + "/js/main.1c56b7e701300e0d9ed4.hot-update.js": "/js/main.1c56b7e701300e0d9ed4.hot-update.js", + "/chunks/files~chunks/shared-files~chunks/shared-page~chunks/trash.1c56b7e701300e0d9ed4.hot-update.js": "/chunks/files~chunks/shared-files~chunks/shared-page~chunks/trash.1c56b7e701300e0d9ed4.hot-update.js" } diff --git a/resources/js/components/FilesView/ContextMenu.vue b/resources/js/components/FilesView/ContextMenu.vue index e78bfb16..fb8cee4d 100644 --- a/resources/js/components/FilesView/ContextMenu.vue +++ b/resources/js/components/FilesView/ContextMenu.vue @@ -321,6 +321,7 @@ import { import { mapGetters } from 'vuex' import { events } from '@/bus' +<<<<<<< HEAD export default { name: 'ContextMenu', components: { @@ -334,6 +335,18 @@ export default { LinkIcon, StarIcon, EyeIcon +======= + // Show panel if is not open + this.$store.dispatch("fileInfoToggle", true); + }, + deleteItem() { + // Dispatch remove item + this.$store.dispatch("deleteItem"); + }, + createFolder() { + // Create folder + this.$createFolder(this.$t("popup_create_folder.folder_default_name")); +>>>>>>> 559bee6 (bulk-operations v0.1 setup bulk delete,move items and FileInfoPanel) }, computed: { ...mapGetters(['user']), diff --git a/resources/js/components/FilesView/FileBrowser.vue b/resources/js/components/FilesView/FileBrowser.vue index 42c68eca..be36df2c 100644 --- a/resources/js/components/FilesView/FileBrowser.vue +++ b/resources/js/components/FilesView/FileBrowser.vue @@ -74,10 +74,12 @@
- + + + - +
@@ -85,6 +87,7 @@ + + diff --git a/resources/js/store/modules/fileFunctions.js b/resources/js/store/modules/fileFunctions.js index 4c848ca9..39c5c4a4 100644 --- a/resources/js/store/modules/fileFunctions.js +++ b/resources/js/store/modules/fileFunctions.js @@ -3,28 +3,40 @@ import router from '@/router' import {events} from '@/bus' import {last} from 'lodash' import axios from 'axios' +import { Store } from 'vuex' const actions = { - moveItem: ({commit, getters, dispatch}, [item_from, to_item]) => { + moveItem: ({commit, getters, dispatch}, [undefined, to_item]) => { + + let items = [] + + getters.fileInfoDetail.forEach((data) => { + items.push({ + 'force_delete': data.deleted_at ? true : false, + 'type': data.type, + "unique_id": data.unique_id + }) + }) // Get route let route = getters.sharedDetail && ! getters.sharedDetail.protected - ? '/api/move/' + item_from.unique_id + '/public/' + router.currentRoute.params.token - : '/api/move/' + item_from.unique_id + ? '/api/move/public' + router.currentRoute.params.token + : '/api/move' axios .post(route, { - from_type: item_from.type, - to_unique_id: to_item.unique_id, - _method: 'patch' + _method: 'post', + to_unique_id:to_item.unique_id, + items: items }) .then(() => { - commit('REMOVE_ITEM', item_from.unique_id) - commit('INCREASE_FOLDER_ITEM', to_item.unique_id) - - if (item_from.type === 'folder' && getters.currentFolder.location !== 'public') - dispatch('getAppData') + items.forEach(item=> { + commit('REMOVE_ITEM', item.unique_id) + commit('INCREASE_FOLDER_ITEM', to_item.unique_id) + if (item.type === 'folder' && getters.currentFolder.location !== 'public') + dispatch('getAppData') + }) }) .catch(() => isSomethingWrong()) }, @@ -171,51 +183,72 @@ const actions = { }) .catch(() => isSomethingWrong()) }, - deleteItem: ({commit, getters, dispatch}, data) => { + deleteItem: ({commit, getters, dispatch}) => { - // Remove file - commit('REMOVE_ITEM', data.unique_id) + let items = [] - // Remove item from sidebar - if (getters.permission === 'master') { + getters.fileInfoDetail.forEach((data) => { + items.push({ + 'force_delete': data.deleted_at ? true : false, + 'type': data.type, + "unique_id": data.unique_id + }) + + // Remove file + commit('REMOVE_ITEM', data.unique_id) - if (data.type === 'folder') - commit('REMOVE_ITEM_FROM_FAVOURITES', data) - } + // Remove item from sidebar + if (getters.permission === 'master') { + if (data.type === 'folder') + commit('REMOVE_ITEM_FROM_FAVOURITES', data) + } + + // Remove file + commit('REMOVE_ITEM', data.unique_id) + + // Remove item from sidebar + if (getters.permission === 'master') { + + if (data.type === 'folder') + commit('REMOVE_ITEM_FROM_FAVOURITES', data) + } + + }) + // Remove file preview commit('CLEAR_FILEINFO_DETAIL') // Get route let route = getters.sharedDetail && ! getters.sharedDetail.protected - ? '/api/remove-item/' + data.unique_id + '/public/' + router.currentRoute.params.token - : '/api/remove-item/' + data.unique_id + ? '/api/remove-item/public/' + router.currentRoute.params.token + : '/api/remove-item' axios .post(route, { - _method: 'delete', - data: { - type: data.type, - force_delete: data.deleted_at ? true : false, - }, + _method: 'post', + data: items }) .then(() => { - // If is folder, update app data - if (data.type === 'folder') { + items.forEach(data => { + + // If is folder, update app data + if (data.type === 'folder') { - if (data.unique_id === getters.currentFolder.unique_id) { + if (data.unique_id === getters.currentFolder.unique_id) { - if ( getters.currentFolder.location === 'public' ) { - dispatch('browseShared', [{folder: last(getters.browseHistory), back: true, init: false}]) - } else { - dispatch('getFolder', [{folder: last(getters.browseHistory), back: true, init: false}]) + if ( getters.currentFolder.location === 'public' ) { + dispatch('browseShared', [{folder: last(getters.browseHistory), back: true, init: false}]) + } else { + dispatch('getFolder', [{folder: last(getters.browseHistory), back: true, init: false}]) + } } - } - if ( getters.currentFolder.location !== 'public' ) - dispatch('getAppData') - } + if ( getters.currentFolder.location !== 'public' ) + dispatch('getAppData') + } + }) }) .catch(() => isSomethingWrong()) },