diff options
author | skjnldsv <skjnldsv@protonmail.com> | 2025-03-28 10:16:39 +0100 |
---|---|---|
committer | skjnldsv <skjnldsv@protonmail.com> | 2025-03-28 10:16:39 +0100 |
commit | 6098dfaaa946907a53adfb20a76ce4b7fa45fd90 (patch) | |
tree | 9aaf96c101885ad0b24fa4011b5b5e92e36e27c4 | |
parent | b5291bfd4480497e706fee7c0ff48bbc8d2db3ee (diff) | |
download | nextcloud-server-fix/files-hidden-summary.tar.gz nextcloud-server-fix/files-hidden-summary.zip |
fix(files): show hidden files and folders count in summaryfix/files-hidden-summary
Signed-off-by: skjnldsv <skjnldsv@protonmail.com>
-rw-r--r-- | apps/files/src/components/FilesListVirtual.vue | 11 | ||||
-rw-r--r-- | apps/files/src/utils/fileUtils.ts | 26 | ||||
-rw-r--r-- | apps/files/src/views/FilesList.vue | 34 |
3 files changed, 43 insertions, 28 deletions
diff --git a/apps/files/src/components/FilesListVirtual.vue b/apps/files/src/components/FilesListVirtual.vue index 4af696bca49..93f567f25a4 100644 --- a/apps/files/src/components/FilesListVirtual.vue +++ b/apps/files/src/components/FilesListVirtual.vue @@ -70,13 +70,12 @@ import { useHotKey } from '@nextcloud/vue/composables/useHotKey' import { defineComponent } from 'vue' import { action as sidebarAction } from '../actions/sidebarAction.ts' +import { useActiveStore } from '../store/active.ts' import { useFileListHeaders } from '../composables/useFileListHeaders.ts' import { useFileListWidth } from '../composables/useFileListWidth.ts' import { useRouteParameters } from '../composables/useRouteParameters.ts' -import { useActiveStore } from '../store/active.ts' import { useSelectionStore } from '../store/selection.js' import { useUserConfigStore } from '../store/userconfig.ts' -import { getSummaryFor } from '../utils/fileUtils.ts' import FileEntry from './FileEntry.vue' import FileEntryGrid from './FileEntryGrid.vue' @@ -113,6 +112,10 @@ export default defineComponent({ type: Array as PropType<NcNode[]>, required: true, }, + summary: { + type: String, + required: true, + }, }, setup() { @@ -152,10 +155,6 @@ export default defineComponent({ return this.userConfigStore.userConfig }, - summary() { - return getSummaryFor(this.nodes) - }, - isMtimeAvailable() { // Hide mtime column on narrow screens if (this.fileListWidth < 768) { diff --git a/apps/files/src/utils/fileUtils.ts b/apps/files/src/utils/fileUtils.ts index 255c106740d..5a79703ceb3 100644 --- a/apps/files/src/utils/fileUtils.ts +++ b/apps/files/src/utils/fileUtils.ts @@ -21,25 +21,31 @@ export const extractFilePaths = function(path) { /** * Generate a translated summary of an array of nodes * @param {Node[]} nodes the nodes to summarize + * @param {number} hidden the number of hidden nodes * @return {string} */ -export const getSummaryFor = (nodes: Node[]): string => { +export const getSummaryFor = (nodes: Node[], hidden = 0): string => { const fileCount = nodes.filter(node => node.type === FileType.File).length const folderCount = nodes.filter(node => node.type === FileType.Folder).length + let summary = '' + if (fileCount === 0) { - return n('files', '{folderCount} folder', '{folderCount} folders', folderCount, { folderCount }) + summary = n('files', '{folderCount} folder', '{folderCount} folders', folderCount, { folderCount }) } else if (folderCount === 0) { - return n('files', '{fileCount} file', '{fileCount} files', fileCount, { fileCount }) - } - - if (fileCount === 1) { - return n('files', '1 file and {folderCount} folder', '1 file and {folderCount} folders', folderCount, { folderCount }) + summary = n('files', '{fileCount} file', '{fileCount} files', fileCount, { fileCount }) + } else if (fileCount === 1) { + summary = n('files', '1 file and {folderCount} folder', '1 file and {folderCount} folders', folderCount, { folderCount }) + } else if (folderCount === 1) { + summary = n('files', '{fileCount} file and 1 folder', '{fileCount} files and 1 folder', fileCount, { fileCount }) + } else { + summary = t('files', '{fileCount} files and {folderCount} folders', { fileCount, folderCount }) } - if (folderCount === 1) { - return n('files', '{fileCount} file and 1 folder', '{fileCount} files and 1 folder', fileCount, { fileCount }) + if (hidden > 0) { + // TRANSLATORS: This is a summary of files and folders, where {hiddenFilesAndFolders} is the number of hidden files and folders + summary += n('files', ' ({hiddenFilesAndFolders} hidden)', ' ({hiddenFilesAndFolders} hidden)', hidden, { hiddenFilesAndFolders: hidden }) } - return t('files', '{fileCount} files and {folderCount} folders', { fileCount, folderCount }) + return summary } diff --git a/apps/files/src/views/FilesList.vue b/apps/files/src/views/FilesList.vue index c582bdf4cfa..2f4439c0235 100644 --- a/apps/files/src/views/FilesList.vue +++ b/apps/files/src/views/FilesList.vue @@ -138,7 +138,8 @@ ref="filesListVirtual" :current-folder="currentFolder" :current-view="currentView" - :nodes="dirContentsSorted" /> + :nodes="dirContentsSorted" + :summary="summary" /> </NcAppContent> </template> @@ -165,35 +166,36 @@ import IconAlertCircleOutline from 'vue-material-design-icons/AlertCircleOutline import IconReload from 'vue-material-design-icons/Reload.vue' import LinkIcon from 'vue-material-design-icons/Link.vue' import ListViewIcon from 'vue-material-design-icons/FormatListBulletedSquare.vue' -import NcAppContent from '@nextcloud/vue/components/NcAppContent' -import NcActions from '@nextcloud/vue/components/NcActions' -import NcActionButton from '@nextcloud/vue/components/NcActionButton' -import NcButton from '@nextcloud/vue/components/NcButton' -import NcEmptyContent from '@nextcloud/vue/components/NcEmptyContent' -import NcIconSvgWrapper from '@nextcloud/vue/components/NcIconSvgWrapper' -import NcLoadingIcon from '@nextcloud/vue/components/NcLoadingIcon' +import NcAppContent from '@nextcloud/vue/dist/Components/NcAppContent.js' +import NcActions from '@nextcloud/vue/dist/Components/NcActions.js' +import NcActionButton from '@nextcloud/vue/dist/Components/NcActionButton.js' +import NcButton from '@nextcloud/vue/dist/Components/NcButton.js' +import NcEmptyContent from '@nextcloud/vue/dist/Components/NcEmptyContent.js' +import NcIconSvgWrapper from '@nextcloud/vue/dist/Components/NcIconSvgWrapper.js' +import NcLoadingIcon from '@nextcloud/vue/dist/Components/NcLoadingIcon.js' import AccountPlusIcon from 'vue-material-design-icons/AccountPlus.vue' import ViewGridIcon from 'vue-material-design-icons/ViewGrid.vue' import { action as sidebarAction } from '../actions/sidebarAction.ts' -import { useNavigation } from '../composables/useNavigation.ts' +import { getSummaryFor } from '../utils/fileUtils.ts' +import { humanizeWebDAVError } from '../utils/davUtils.ts' import { useFileListHeaders } from '../composables/useFileListHeaders.ts' import { useFileListWidth } from '../composables/useFileListWidth.ts' -import { useRouteParameters } from '../composables/useRouteParameters.ts' import { useFilesStore } from '../store/files.ts' import { useFiltersStore } from '../store/filters.ts' +import { useNavigation } from '../composables/useNavigation.ts' import { usePathsStore } from '../store/paths.ts' +import { useRouteParameters } from '../composables/useRouteParameters.ts' import { useSelectionStore } from '../store/selection.ts' import { useUploaderStore } from '../store/uploader.ts' import { useUserConfigStore } from '../store/userconfig.ts' import { useViewConfigStore } from '../store/viewConfig.ts' -import { humanizeWebDAVError } from '../utils/davUtils.ts' import BreadCrumbs from '../components/BreadCrumbs.vue' +import DragAndDropNotice from '../components/DragAndDropNotice.vue' import FilesListHeader from '../components/FilesListHeader.vue' import FilesListVirtual from '../components/FilesListVirtual.vue' import filesSortingMixin from '../mixins/filesSorting.ts' import logger from '../logger.ts' -import DragAndDropNotice from '../components/DragAndDropNotice.vue' const isSharingEnabled = (getCapabilities() as { files_sharing?: boolean })?.files_sharing !== undefined @@ -468,6 +470,14 @@ export default defineComponent({ .toSorted((a, b) => a.order - b.order) return enabledActions }, + + /** + * Using the filtered content if filters are active + */ + summary() { + const hidden = this.dirContents.length - this.dirContentsFiltered.length + return getSummaryFor(this.dirContentsFiltered, hidden) + }, }, watch: { |