From 449e335abc164027bafc570f8f3efd2fedcee003 Mon Sep 17 00:00:00 2001 From: Florian Schade Date: Sun, 28 Nov 2021 22:50:28 +0100 Subject: [PATCH 1/4] refactor pagination into composable and cleanup store, views and tests --- .../src/components/AppBar/ViewOptions.vue | 51 ++----- .../src/components/FilesList/Pagination.vue | 21 --- .../src/components/Search/List.vue | 52 ++++--- .../web-app-files/src/composables/index.ts | 5 +- .../src/composables/router/index.ts | 2 + .../src/composables/router/useRouteQuery.ts | 25 ++++ .../src/composables/router/useRouter.ts | 6 + .../src/composables/store/index.ts | 4 +- ...cription.ts => useMutationSubscription.ts} | 2 +- .../store/{store.ts => useStore.ts} | 0 .../src/composables/useDefaults/index.ts | 38 +++++ .../src/composables/usePagination/index.ts | 34 +++++ .../src/composables/utils/index.ts | 1 + .../src/composables/utils/types.ts | 3 + .../src/mixins/actions/emptyTrashBin.js | 4 +- .../src/mixins/filesListFilter.js | 20 +-- .../src/mixins/filesListPagination.js | 13 -- packages/web-app-files/src/store/getters.js | 8 -- packages/web-app-files/src/store/index.js | 4 +- .../src/store/modules/pagination.js | 27 ---- .../web-app-files/src/views/Favorites.vue | 56 +++++--- .../src/views/LocationPicker.vue | 64 ++++++--- packages/web-app-files/src/views/Personal.vue | 59 +++++--- .../web-app-files/src/views/PublicFiles.vue | 60 +++++--- .../web-app-files/src/views/SharedViaLink.vue | 69 +++++---- .../src/views/SharedWithOthers.vue | 69 +++++---- packages/web-app-files/src/views/Trashbin.vue | 64 +++++---- .../integration/specs/pagination.spec.js | 35 ++--- .../components/AppBar/ViewOptions.spec.js | 25 ++-- .../components/FilesList/Pagination.spec.js | 113 --------------- .../tests/unit/components/Search/List.spec.js | 43 ++---- .../Search/__snapshots__/List.spec.js.snap | 2 +- .../unit/composables/router/spec/index.ts | 23 +++ .../composables/router/useRouteQuery.spec.ts | 131 +++++++++++++++++ .../unit/composables/router/useRouter.spec.ts | 16 +++ ...pec.ts => useMutationSubscription.spec.ts} | 0 .../store/{store.spec.ts => useStore.spec.ts} | 0 .../composables/usePagination/index.spec.ts | 89 ++++++++++++ .../composables/usePagination/spec/index.ts | 19 +++ .../tests/unit/store/getters.spec.js | 39 +---- .../unit/store/modules/pagination.spec.js | 29 ---- .../tests/unit/views/Favorites.spec.js | 134 ++++++++++++------ .../tests/unit/views/Personal.spec.js | 16 +-- .../tests/unit/views/PublicFiles.spec.ts | 12 ++ .../tests/unit/views/views.setup.js | 3 +- .../tests/unit/views/views.shared.ts | 34 ++++- 46 files changed, 892 insertions(+), 632 deletions(-) delete mode 100644 packages/web-app-files/src/components/FilesList/Pagination.vue create mode 100644 packages/web-app-files/src/composables/router/index.ts create mode 100644 packages/web-app-files/src/composables/router/useRouteQuery.ts create mode 100644 packages/web-app-files/src/composables/router/useRouter.ts rename packages/web-app-files/src/composables/store/{mutationSubscription.ts => useMutationSubscription.ts} (93%) rename packages/web-app-files/src/composables/store/{store.ts => useStore.ts} (100%) create mode 100644 packages/web-app-files/src/composables/useDefaults/index.ts create mode 100644 packages/web-app-files/src/composables/usePagination/index.ts create mode 100644 packages/web-app-files/src/composables/utils/index.ts create mode 100644 packages/web-app-files/src/composables/utils/types.ts delete mode 100644 packages/web-app-files/src/mixins/filesListPagination.js delete mode 100644 packages/web-app-files/src/store/modules/pagination.js delete mode 100644 packages/web-app-files/tests/unit/components/FilesList/Pagination.spec.js create mode 100644 packages/web-app-files/tests/unit/composables/router/spec/index.ts create mode 100644 packages/web-app-files/tests/unit/composables/router/useRouteQuery.spec.ts create mode 100644 packages/web-app-files/tests/unit/composables/router/useRouter.spec.ts rename packages/web-app-files/tests/unit/composables/store/{mutationSubscription.spec.ts => useMutationSubscription.spec.ts} (100%) rename packages/web-app-files/tests/unit/composables/store/{store.spec.ts => useStore.spec.ts} (100%) create mode 100644 packages/web-app-files/tests/unit/composables/usePagination/index.spec.ts create mode 100644 packages/web-app-files/tests/unit/composables/usePagination/spec/index.ts delete mode 100644 packages/web-app-files/tests/unit/store/modules/pagination.spec.js diff --git a/packages/web-app-files/src/components/AppBar/ViewOptions.vue b/packages/web-app-files/src/components/AppBar/ViewOptions.vue index 4eef7af04c3..c7dba42825e 100644 --- a/packages/web-app-files/src/components/AppBar/ViewOptions.vue +++ b/packages/web-app-files/src/components/AppBar/ViewOptions.vue @@ -39,7 +39,7 @@
  • import { mapMutations, mapState, mapActions } from 'vuex' +import { watch } from '@vue/composition-api' +import { useRouteQuery, useDefaults } from '../../composables' export default { + setup() { + const { pagination: paginationDefaults } = useDefaults() + const itemsPerPage = useRouteQuery('items-per-page', paginationDefaults.perPage.value) + watch(itemsPerPage, (v) => { + paginationDefaults.perPage.value = v + }) + + return { + itemsPerPage + } + }, computed: { ...mapState('Files', ['areHiddenFilesShown']), ...mapState('Files/sidebar', { sidebarClosed: 'closed' }), - ...mapState('Files/pagination', ['itemsPerPage']), viewOptionsButtonLabel() { return this.$gettext('Display customization options of the files list') @@ -81,44 +93,11 @@ export default { set(value) { this.SET_HIDDEN_FILES_VISIBILITY(value) } - }, - - itemsPerPageModel: { - get() { - return this.itemsPerPage - }, - - set(value) { - this.updateQuery(value) - } - } - }, - - watch: { - $route: { - handler(route) { - if (Object.prototype.hasOwnProperty.call(route.query, 'items-per-page')) { - this.SET_ITEMS_PER_PAGE(route.query['items-per-page']) - - return - } - - this.updateQuery() - }, - immediate: true } }, methods: { ...mapMutations('Files', ['SET_HIDDEN_FILES_VISIBILITY']), - ...mapActions('Files/sidebar', { toggleSidebar: 'toggle' }), - ...mapMutations('Files/pagination', ['SET_ITEMS_PER_PAGE']), - - updateQuery(limit = this.itemsPerPageModel) { - const query = { ...this.$route.query, 'items-per-page': limit } - - this.SET_ITEMS_PER_PAGE(limit) - this.$router.replace({ query }).catch(() => {}) - } + ...mapActions('Files/sidebar', { toggleSidebar: 'toggle' }) } } diff --git a/packages/web-app-files/src/components/FilesList/Pagination.vue b/packages/web-app-files/src/components/FilesList/Pagination.vue deleted file mode 100644 index 6465443d32b..00000000000 --- a/packages/web-app-files/src/components/FilesList/Pagination.vue +++ /dev/null @@ -1,21 +0,0 @@ - - - diff --git a/packages/web-app-files/src/components/Search/List.vue b/packages/web-app-files/src/components/Search/List.vue index 4f8b9d9f137..6e828639f70 100644 --- a/packages/web-app-files/src/components/Search/List.vue +++ b/packages/web-app-files/src/components/Search/List.vue @@ -1,6 +1,6 @@