aboutsummaryrefslogtreecommitdiffstats
path: root/apps/files_sharing/src
diff options
context:
space:
mode:
authorskjnldsv <skjnldsv@protonmail.com>2025-03-25 15:44:17 +0100
committerFerdinand Thiessen <opensource@fthiessen.de>2025-03-25 22:02:15 +0100
commitbaeff572326dbb54c06925da7ad7a8d03cfd8bb1 (patch)
tree398f41b7c86f9a732a3d816cf6d18d48bda0cd4e /apps/files_sharing/src
parentefa5632bbabbed7d51bc7d7c8271645ea736c6c7 (diff)
downloadnextcloud-server-baeff572326dbb54c06925da7ad7a8d03cfd8bb1.tar.gz
nextcloud-server-baeff572326dbb54c06925da7ad7a8d03cfd8bb1.zip
feat(files): hide "Personal files" and "Shared with others" views if user has no quota
Signed-off-by: skjnldsv <skjnldsv@protonmail.com>
Diffstat (limited to 'apps/files_sharing/src')
-rw-r--r--apps/files_sharing/src/files_views/shares.spec.ts25
-rw-r--r--apps/files_sharing/src/files_views/shares.ts29
2 files changed, 41 insertions, 13 deletions
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,