diff --git a/apps/files/src/eventbus.d.ts b/apps/files/src/eventbus.d.ts index 3db03d453d765..81422ef5d678f 100644 --- a/apps/files/src/eventbus.d.ts +++ b/apps/files/src/eventbus.d.ts @@ -12,6 +12,8 @@ declare module '@nextcloud/event-bus' { 'files:favorites:added': Node 'files:favorites:removed': Node + 'files:filters:changed': undefined + 'files:node:created': Node 'files:node:deleted': Node 'files:node:moved': { node: Node, oldSource: string } diff --git a/apps/files/src/filters/HiddenFilesFilter.ts b/apps/files/src/filters/HiddenFilesFilter.ts index 51d90b2efb233..e48881d4ab7e7 100644 --- a/apps/files/src/filters/HiddenFilesFilter.ts +++ b/apps/files/src/filters/HiddenFilesFilter.ts @@ -15,7 +15,7 @@ class HiddenFilesFilter extends FileListFilter { constructor() { super('files:hidden', 0) - this.showHidden = loadState('files', 'config', { show_hidden: false }).show_hidden + this.showHidden = loadState>('files', 'config', { show_hidden: false }).show_hidden subscribe('files:config:updated', ({ key, value }) => { if (key === 'show_hidden') { diff --git a/apps/files/src/filters/TypeFilter.ts b/apps/files/src/filters/TypeFilter.ts index 3955805aa5e15..94b109ea7a4eb 100644 --- a/apps/files/src/filters/TypeFilter.ts +++ b/apps/files/src/filters/TypeFilter.ts @@ -149,7 +149,12 @@ class TypeFilter extends FileListFilter { public setPresets(presets?: ITypePreset[]) { this.currentPresets = presets ?? [] - this.currentInstance!.$props.presets = presets + if (this.currentInstance !== undefined) { + // could be called before the instance was created + // (meaning the files list is not mounted yet) + this.currentInstance.$props.presets = presets + } + this.filterUpdated() const chips: IFileListFilterChip[] = [] diff --git a/apps/files/src/store/filters.ts b/apps/files/src/store/filters.ts index bc57e25a1f825..b5c1b2b6acd1b 100644 --- a/apps/files/src/store/filters.ts +++ b/apps/files/src/store/filters.ts @@ -3,7 +3,7 @@ * SPDX-License-Identifier: AGPL-3.0-or-later */ import type { FilterUpdateChipsEvent, IFileListFilter, IFileListFilterChip } from '@nextcloud/files' -import { subscribe } from '@nextcloud/event-bus' +import { emit, subscribe } from '@nextcloud/event-bus' import { getFileListFilters } from '@nextcloud/files' import { defineStore } from 'pinia' import { computed, ref } from 'vue' @@ -20,7 +20,6 @@ function isFileListFilterWithUi(value: IFileListFilter): value is Required { const chips = ref>({}) const filters = ref([]) - const filtersChanged = ref(false) /** * Currently active filter chips @@ -77,7 +76,7 @@ export const useFiltersStore = defineStore('filters', () => { * @private */ function onFilterUpdate() { - filtersChanged.value = true + emit('files:filters:changed') } /** @@ -122,7 +121,6 @@ export const useFiltersStore = defineStore('filters', () => { chips, filters, filtersWithUI, - filtersChanged, // getters / computed activeChips, diff --git a/apps/files/src/views/FilesList.vue b/apps/files/src/views/FilesList.vue index 3a5cb46460a43..cd8965c92d40b 100644 --- a/apps/files/src/views/FilesList.vue +++ b/apps/files/src/views/FilesList.vue @@ -421,10 +421,6 @@ export default defineComponent({ && this.currentFolder && (this.currentFolder.permissions & Permission.SHARE) !== 0 }, - filtersChanged() { - return this.filtersStore.filtersChanged - }, - showCustomEmptyView() { return !this.loading && this.isEmptyDir && this.currentView?.emptyView !== undefined }, @@ -484,13 +480,6 @@ export default defineComponent({ // Also refresh the filtered content this.filterDirContent() }, - - filtersChanged() { - if (this.filtersChanged) { - this.filterDirContent() - this.filtersStore.filtersChanged = false - } - }, }, async mounted() { @@ -500,6 +489,9 @@ export default defineComponent({ // reload on settings change subscribe('files:config:updated', this.fetchContent) + // filter content if filter were changed + subscribe('files:filters:changed', this.filterDirContent) + // Finally, fetch the current directory contents await this.fetchContent() if (this.fileId) {