aboutsummaryrefslogtreecommitdiffstats
path: root/apps/files/src/components/FilesListHeaderActions.vue
diff options
context:
space:
mode:
authorChristopher Ng <chrng8@gmail.com>2023-10-12 14:46:51 -0700
committerFerdinand Thiessen <opensource@fthiessen.de>2023-10-14 21:29:48 +0200
commit6a98d94e766b3af17daccdc9198c118be0d02079 (patch)
tree89be87260588cb0395adda18411b39c2c6809ca0 /apps/files/src/components/FilesListHeaderActions.vue
parent224ee07cd5bef95491c26e444ad8a7aa6f991b45 (diff)
downloadnextcloud-server-6a98d94e766b3af17daccdc9198c118be0d02079.tar.gz
nextcloud-server-6a98d94e766b3af17daccdc9198c118be0d02079.zip
chore(files): Clean up unused components
Signed-off-by: Christopher Ng <chrng8@gmail.com>
Diffstat (limited to 'apps/files/src/components/FilesListHeaderActions.vue')
-rw-r--r--apps/files/src/components/FilesListHeaderActions.vue226
1 files changed, 0 insertions, 226 deletions
diff --git a/apps/files/src/components/FilesListHeaderActions.vue b/apps/files/src/components/FilesListHeaderActions.vue
deleted file mode 100644
index 4d6dcdd0399..00000000000
--- a/apps/files/src/components/FilesListHeaderActions.vue
+++ /dev/null
@@ -1,226 +0,0 @@
-<!--
- - @copyright Copyright (c) 2023 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>
- <th class="files-list__column files-list__row-actions-batch" colspan="2">
- <NcActions ref="actionsMenu"
- :disabled="!!loading || areSomeNodesLoading"
- :force-name="true"
- :inline="inlineActions"
- :menu-name="inlineActions <= 1 ? t('files', 'Actions') : null"
- :open.sync="openedMenu">
- <NcActionButton v-for="action in enabledActions"
- :key="action.id"
- :class="'files-list__row-actions-batch-' + action.id"
- @click="onActionClick(action)">
- <template #icon>
- <NcLoadingIcon v-if="loading === action.id" :size="18" />
- <NcIconSvgWrapper v-else :svg="action.iconSvgInline(nodes, currentView)" />
- </template>
- {{ action.displayName(nodes, currentView) }}
- </NcActionButton>
- </NcActions>
- </th>
-</template>
-
-<script lang="ts">
-import { showError, showSuccess } from '@nextcloud/dialogs'
-import { translate } from '@nextcloud/l10n'
-import NcActionButton from '@nextcloud/vue/dist/Components/NcActionButton.js'
-import NcActions from '@nextcloud/vue/dist/Components/NcActions.js'
-import NcIconSvgWrapper from '@nextcloud/vue/dist/Components/NcIconSvgWrapper.js'
-import NcLoadingIcon from '@nextcloud/vue/dist/Components/NcLoadingIcon.js'
-import Vue from 'vue'
-
-import { getFileActions, useActionsMenuStore } from '../store/actionsmenu.ts'
-import { useFilesStore } from '../store/files.ts'
-import { useSelectionStore } from '../store/selection.ts'
-import filesListWidthMixin from '../mixins/filesListWidth.ts'
-import logger from '../logger.js'
-import { NodeStatus } from '@nextcloud/files'
-
-// The registered actions list
-const actions = getFileActions()
-
-export default Vue.extend({
- name: 'FilesListHeaderActions',
-
- components: {
- NcActions,
- NcActionButton,
- NcIconSvgWrapper,
- NcLoadingIcon,
- },
-
- mixins: [
- filesListWidthMixin,
- ],
-
- props: {
- currentView: {
- type: Object,
- required: true,
- },
- selectedNodes: {
- type: Array,
- default: () => ([]),
- },
- },
-
- setup() {
- const actionsMenuStore = useActionsMenuStore()
- const filesStore = useFilesStore()
- const selectionStore = useSelectionStore()
- return {
- actionsMenuStore,
- filesStore,
- selectionStore,
- }
- },
-
- data() {
- return {
- loading: null,
- }
- },
-
- computed: {
- dir() {
- // Remove any trailing slash but leave root slash
- return (this.$route?.query?.dir || '/').replace(/^(.+)\/$/, '$1')
- },
- enabledActions() {
- return actions
- .filter(action => action.execBatch)
- .filter(action => !action.enabled || action.enabled(this.nodes, this.currentView))
- .sort((a, b) => (a.order || 0) - (b.order || 0))
- },
-
- nodes() {
- return this.selectedNodes
- .map(fileid => this.getNode(fileid))
- .filter(node => node)
- },
-
- areSomeNodesLoading() {
- return this.nodes.some(node => node.status === NodeStatus.LOADING)
- },
-
- openedMenu: {
- get() {
- return this.actionsMenuStore.opened === 'global'
- },
- set(opened) {
- this.actionsMenuStore.opened = opened ? 'global' : null
- },
- },
-
- inlineActions() {
- if (this.filesListWidth < 512) {
- return 0
- }
- if (this.filesListWidth < 768) {
- return 1
- }
- if (this.filesListWidth < 1024) {
- return 2
- }
- return 3
- },
- },
-
- methods: {
- /**
- * Get a cached note from the store
- *
- * @param {number} fileId the file id to get
- * @return {Folder|File}
- */
- getNode(fileId) {
- return this.filesStore.getNode(fileId)
- },
-
- async onActionClick(action) {
- const displayName = action.displayName(this.nodes, this.currentView)
- const selectionIds = this.selectedNodes
- try {
- // Set loading markers
- this.loading = action.id
- this.nodes.forEach(node => {
- Vue.set(node, 'status', NodeStatus.LOADING)
- })
-
- // Dispatch action execution
- const results = await action.execBatch(this.nodes, this.currentView, this.dir)
-
- // Check if all actions returned null
- if (!results.some(result => result !== null)) {
- // If the actions returned null, we stay silent
- this.selectionStore.reset()
- return
- }
-
- // Handle potential failures
- if (results.some(result => result === false)) {
- // Remove the failed ids from the selection
- const failedIds = selectionIds
- .filter((fileid, index) => results[index] === false)
- this.selectionStore.set(failedIds)
-
- showError(this.t('files', '"{displayName}" failed on some elements ', { displayName }))
- return
- }
-
- // Show success message and clear selection
- showSuccess(this.t('files', '"{displayName}" batch action executed successfully', { displayName }))
- this.selectionStore.reset()
- } catch (e) {
- logger.error('Error while executing action', { action, e })
- showError(this.t('files', '"{displayName}" action failed', { displayName }))
- } finally {
- // Remove loading markers
- this.loading = null
- this.nodes.forEach(node => {
- Vue.set(node, 'status', undefined)
- })
- }
- },
-
- t: translate,
- },
-})
-</script>
-
-<style scoped lang="scss">
-.files-list__row-actions-batch {
- flex: 1 1 100% !important;
-
- // Remove when https://github.com/nextcloud/nextcloud-vue/pull/3936 is merged
- ::v-deep .button-vue__wrapper {
- width: 100%;
- span.button-vue__text {
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: nowrap;
- }
- }
-}
-</style>