Browse Source
refactor: use eventbus for updated filters
prevent filters not applied if `filtersChanged` was set before file list
mounted.
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
pull/50919/head
Ferdinand Thiessen
1 year ago
No known key found for this signature in database
GPG Key ID: 45FAE7268762B400
3 changed files with
7 additions and
15 deletions
-
apps/files/src/eventbus.d.ts
-
apps/files/src/store/filters.ts
-
apps/files/src/views/FilesList.vue
|
|
|
@ -13,6 +13,8 @@ declare module '@nextcloud/event-bus' { |
|
|
|
'files:favorites:removed': Node |
|
|
|
'files:favorites:added': Node |
|
|
|
|
|
|
|
'files:filters:changed': undefined |
|
|
|
|
|
|
|
'files:node:created': Node |
|
|
|
'files:node:deleted': Node |
|
|
|
'files:node:updated': Node |
|
|
|
|
|
|
|
@ -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<IFile |
|
|
|
export const useFiltersStore = defineStore('filters', () => { |
|
|
|
const chips = ref<Record<string, IFileListFilterChip[]>>({}) |
|
|
|
const filters = ref<IFileListFilter[]>([]) |
|
|
|
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, |
|
|
|
|
|
|
|
@ -432,10 +432,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 |
|
|
|
}, |
|
|
|
@ -516,13 +512,6 @@ export default defineComponent({ |
|
|
|
// Also refresh the filtered content |
|
|
|
this.filterDirContent() |
|
|
|
}, |
|
|
|
|
|
|
|
filtersChanged() { |
|
|
|
if (this.filtersChanged) { |
|
|
|
this.filterDirContent() |
|
|
|
this.filtersStore.filtersChanged = false |
|
|
|
} |
|
|
|
}, |
|
|
|
}, |
|
|
|
|
|
|
|
async mounted() { |
|
|
|
@ -532,6 +521,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) { |
|
|
|
|