diff options
author | skjnldsv <skjnldsv@protonmail.com> | 2025-03-25 15:44:17 +0100 |
---|---|---|
committer | skjnldsv <skjnldsv@protonmail.com> | 2025-03-25 15:46:05 +0100 |
commit | 540576b16959f5d86b7fb921c39077757d16d55c (patch) | |
tree | b4b33c7bfcf3b3201d982c65c860f2ca2384722b | |
parent | d1383602c767bd925c00b7642d062c06aa4012a3 (diff) | |
download | nextcloud-server-fix/quota-view-files.tar.gz nextcloud-server-fix/quota-view-files.zip |
feat(files): hide "Personal files" and "Shared with others" views if user has no quotafix/quota-view-files
Signed-off-by: skjnldsv <skjnldsv@protonmail.com>
-rw-r--r-- | apps/files/src/views/personal-files.ts | 7 | ||||
-rw-r--r-- | apps/files_sharing/src/files_views/shares.spec.ts | 25 | ||||
-rw-r--r-- | apps/files_sharing/src/files_views/shares.ts | 29 |
3 files changed, 48 insertions, 13 deletions
diff --git a/apps/files/src/views/personal-files.ts b/apps/files/src/views/personal-files.ts index 027a6cc7c56..66d4e77b376 100644 --- a/apps/files/src/views/personal-files.ts +++ b/apps/files/src/views/personal-files.ts @@ -7,8 +7,15 @@ import { View, getNavigation } from '@nextcloud/files' import { getContents } from '../services/PersonalFiles' import AccountIcon from '@mdi/svg/svg/account.svg?raw' +import { loadState } from '@nextcloud/initial-state' export default () => { + // Don't show this view if the user has no storage quota + const storageStats = loadState('files', 'storageStats', { quota: -1 }) + if (storageStats.quota === 0) { + return + } + const Navigation = getNavigation() Navigation.register(new View({ id: 'personal', diff --git a/apps/files_sharing/src/files_views/shares.spec.ts b/apps/files_sharing/src/files_views/shares.spec.ts index 79ef2a09843..7e5b59e0ad9 100644 --- a/apps/files_sharing/src/files_views/shares.spec.ts +++ b/apps/files_sharing/src/files_views/shares.spec.ts @@ -5,8 +5,10 @@ /* eslint-disable n/no-extraneous-import */ /* eslint-disable @typescript-eslint/no-explicit-any */ import type { OCSResponse } from '@nextcloud/typings/ocs' -import { Folder, Navigation, View, getNavigation } from '@nextcloud/files' + import { beforeEach, describe, expect, test, vi } from 'vitest' +import { Folder, Navigation, View, getNavigation } from '@nextcloud/files' +import * as ncInitialState from '@nextcloud/initial-state' import axios from '@nextcloud/axios' import '../main' @@ -72,6 +74,27 @@ describe('Sharing views definition', () => { expect(view?.getContents).toBeDefined() }) }) + + test('Shared with others view is not registered if user has no storage quota', () => { + vi.spyOn(Navigation, 'register') + const spy = vi.spyOn(ncInitialState, 'loadState').mockImplementationOnce(() => ({ quota: 0 })) + + expect(Navigation.views.length).toBe(0) + registerSharingViews() + expect(Navigation.register).toHaveBeenCalledTimes(6) + expect(Navigation.views.length).toBe(6) + + const shareOverviewView = Navigation.views.find(view => view.id === 'shareoverview') as View + const sharesChildViews = Navigation.views.filter(view => view.parent === 'shareoverview') as View[] + expect(shareOverviewView).toBeDefined() + expect(sharesChildViews.length).toBe(5) + + expect(spy).toHaveBeenCalled() + expect(spy).toHaveBeenCalledWith('files', 'storageStats', { quota: -1 }) + + const sharedWithOthersView = Navigation.views.find(view => view.id === 'sharingout') + expect(sharedWithOthersView).toBeUndefined() + }) }) describe('Sharing views contents', () => { diff --git a/apps/files_sharing/src/files_views/shares.ts b/apps/files_sharing/src/files_views/shares.ts index 7aec0dbeafb..297fd4796fd 100644 --- a/apps/files_sharing/src/files_views/shares.ts +++ b/apps/files_sharing/src/files_views/shares.ts @@ -14,6 +14,7 @@ import FileUploadSvg from '@mdi/svg/svg/file-upload.svg?raw' import LinkSvg from '@mdi/svg/svg/link.svg?raw' import { getContents, isFileRequest } from '../services/SharingService' +import { loadState } from '@nextcloud/initial-state' export const sharesViewId = 'shareoverview' export const sharedWithYouViewId = 'sharingin' @@ -58,22 +59,26 @@ export default () => { getContents: () => getContents(true, false, false, false), })) - Navigation.register(new View({ - id: sharedWithOthersViewId, - name: t('files_sharing', 'Shared with others'), - caption: t('files_sharing', 'List of files that you shared with others.'), + // Don't show this view if the user has no storage quota + const storageStats = loadState('files', 'storageStats', { quota: -1 }) + if (storageStats.quota !== 0) { + Navigation.register(new View({ + id: sharedWithOthersViewId, + name: t('files_sharing', 'Shared with others'), + caption: t('files_sharing', 'List of files that you shared with others.'), - emptyTitle: t('files_sharing', 'Nothing shared yet'), - emptyCaption: t('files_sharing', 'Files and folders you shared will show up here'), + emptyTitle: t('files_sharing', 'Nothing shared yet'), + emptyCaption: t('files_sharing', 'Files and folders you shared will show up here'), - icon: AccountGroupSvg, - order: 2, - parent: sharesViewId, + icon: AccountGroupSvg, + order: 2, + parent: sharesViewId, - columns: [], + columns: [], - getContents: () => getContents(false, true, false, false), - })) + getContents: () => getContents(false, true, false, false), + })) + } Navigation.register(new View({ id: sharingByLinksViewId, |