diff --git a/vue3/src/pages/ModelListPage.vue b/vue3/src/pages/ModelListPage.vue
index 16d666e30..9e6b214d0 100644
--- a/vue3/src/pages/ModelListPage.vue
+++ b/vue3/src/pages/ModelListPage.vue
@@ -22,9 +22,9 @@
+ @create="loadItems({page: page})"
+ @save="loadItems({page: page })"
+ @delete="loadItems({page: page})">
@@ -35,7 +35,7 @@
-
+
@@ -79,7 +79,7 @@
{{ $t('Merge') }}
+ @change="loadItems({page: page, itemsPerPage: pageSize, search: query})">
@@ -105,10 +105,10 @@
+ @change="loadItems({page: page, itemsPerPage: pageSize, search: query})">
+ @change="loadItems({page: page, itemsPerPage: pageSize, search: query})">
@@ -126,11 +126,12 @@ import {useUserPreferenceStore} from "@/stores/UserPreferenceStore";
import ModelMergeDialog from "@/components/dialogs/ModelMergeDialog.vue";
import {VDataTableUpdateOptions} from "@/vuetify";
import SyncDialog from "@/components/dialogs/SyncDialog.vue";
-import {ApiApi, RecipeImport} from "@/openapi";
+import {ApiApi, ApiRecipeListRequest, RecipeImport} from "@/openapi";
import {useTitle} from "@vueuse/core";
import RecipeShareDialog from "@/components/dialogs/RecipeShareDialog.vue";
import AddToShoppingDialog from "@/components/dialogs/AddToShoppingDialog.vue";
import BatchDeleteDialog from "@/components/dialogs/BatchDeleteDialog.vue";
+import {useRouteQuery} from "@vueuse/router";
const {t} = useI18n()
const router = useRouter()
@@ -151,7 +152,9 @@ const itemsPerPageOptions = [
{value: 50, title: '50'},
]
-const tablePage = ref(1)
+const query = useRouteQuery('query', "")
+const page = useRouteQuery('page', 1, {transform: Number})
+const pageSize = useRouteQuery('pageSize', useUserPreferenceStore().deviceSettings.general_tableItemsPerPage, {transform: Number})
const selectedItems = ref([] as EditorSupportedTypes[])
@@ -162,25 +165,14 @@ const batchMergeDialog = ref(false)
const loading = ref(false);
const items = ref([] as Array)
const itemCount = ref(0)
-const searchQuery = ref('')
const genericModel = ref({} as GenericModel)
-/**
- * watch route changes (trough navigation) and set table page accordingly
- */
-watch(() => route.query.page, () => {
- if (!loading.value && typeof route.query.page == "string" && !isNaN(parseInt(route.query.page))) {
- tablePage.value = parseInt(route.query.page)
- }
-})
-
// when navigating to ModelListPage from ModelListPage with a different model lifecycle hooks are not called so watch for change here
watch(() => props.model, (newValue, oldValue) => {
if (newValue != oldValue) {
genericModel.value = getGenericModelFromString(props.model, t)
- tablePage.value = 1
- loadItems({page: 1, itemsPerPage: useUserPreferenceStore().deviceSettings.general_tableItemsPerPage, search: searchQuery.value})
+ loadItems({page: 1})
}
})
@@ -196,10 +188,6 @@ onBeforeMount(() => {
}
title.value = t(genericModel.value.model.localizationKey)
-
- if (typeof route.query.page == "string" && !isNaN(parseInt(route.query.page))) {
- tablePage.value = parseInt(route.query.page)
- }
})
/**
@@ -208,23 +196,14 @@ onBeforeMount(() => {
* @param options
*/
function loadItems(options: VDataTableUpdateOptions) {
-
loading.value = true
selectedItems.value = []
window.scrollTo({top: 0, behavior: 'smooth'})
- if (tablePage.value != options.page) {
- tablePage.value = options.page
- }
- if (route.query.page == undefined) {
- router.replace({name: 'ModelListPage', params: {model: props.model}, query: {page: options.page}})
- } else {
- router.push({name: 'ModelListPage', params: {model: props.model}, query: {page: options.page}})
- }
+ page.value = options.page
+ pageSize.value = options.itemsPerPage
- useUserPreferenceStore().deviceSettings.general_tableItemsPerPage = options.itemsPerPage
-
- genericModel.value.list({page: options.page, pageSize: options.itemsPerPage, query: options.search}).then((r: any) => {
+ genericModel.value.list({ query: query.value, page: options.page, pageSize: pageSize.value }).then((r: any) => {
items.value = r.results
itemCount.value = r.count
}).catch((err: any) => {
@@ -234,16 +213,6 @@ function loadItems(options: VDataTableUpdateOptions) {
})
}
-/**
- * change models and reset page/scroll
- * @param m
- */
-function changeModel(m: Model) {
- tablePage.value = 1
- router.push({name: 'ModelListPage', params: {model: m.name.toLowerCase()}, query: {page: 1}})
- window.scrollTo({top: 0, behavior: 'smooth'})
-}
-
// model specific functions
/**
@@ -253,7 +222,7 @@ function changeModel(m: Model) {
function importRecipe(item: RecipeImport) {
let api = new ApiApi()
api.apiRecipeImportImportRecipeCreate({id: item.id!, recipeImport: item}).then(r => {
- loadItems({page: 1, itemsPerPage: useUserPreferenceStore().deviceSettings.general_tableItemsPerPage, search: searchQuery.value})
+ loadItems({page: 1})
}).catch(err => {
useMessageStore().addError(ErrorMessageType.CREATE_ERROR, err)
})
@@ -266,7 +235,7 @@ function importAllRecipes() {
let api = new ApiApi()
api.apiRecipeImportImportAllCreate({recipeImport: {} as RecipeImport}).then(r => {
- loadItems({page: 1, itemsPerPage: useUserPreferenceStore().deviceSettings.general_tableItemsPerPage, search: searchQuery.value})
+ loadItems({page: 1})
}).catch(err => {
useMessageStore().addError(ErrorMessageType.CREATE_ERROR, err)
})