Merge pull request #51698 from nextcloud/fix/quota-view-files

feat(files): hide "Personal files" and "Shared with others" views if user has no quota
This commit is contained in:
Ferdinand Thiessen 2025-03-25 22:55:54 +01:00 committed by GitHub
commit d3e54997b0
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
7 changed files with 54 additions and 19 deletions

View file

@ -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',

View file

@ -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', () => {

View file

@ -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,

4
dist/files-init.js vendored

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long