fixed saving page item number in model list

This commit is contained in:
vabene1111
2024-10-08 07:09:43 +02:00
parent 25de4326d2
commit b857c9e4d9
3 changed files with 8 additions and 20 deletions

View File

@@ -25,8 +25,6 @@
<script setup lang="ts"> <script setup lang="ts">
import FoodEditor from "@/components/model_editors/FoodEditor.vue"; import FoodEditor from "@/components/model_editors/FoodEditor.vue";
import {onMounted, ref} from "vue";
import {ApiApi, Food} from "@/openapi";
import {useRouter} from "vue-router"; import {useRouter} from "vue-router";
import UnitEditor from "@/components/model_editors/UnitEditor.vue"; import UnitEditor from "@/components/model_editors/UnitEditor.vue";
import KeywordEditor from "@/components/model_editors/KeywordEditor.vue"; import KeywordEditor from "@/components/model_editors/KeywordEditor.vue";

View File

@@ -23,7 +23,7 @@
{{ $t(genericModel.model.localizationKey) }}</span> {{ $t(genericModel.model.localizationKey) }}</span>
<v-btn class="float-right" icon="$create" color="create"> <v-btn class="float-right" icon="$create" color="create">
<i class="fa-solid fa-plus"></i> <i class="fa-solid fa-plus"></i>
<model-edit-dialog :close-after-create="false" :model="model" @create="loadItems({tablePage, tablePageSize})"></model-edit-dialog> <model-edit-dialog :close-after-create="false" :model="model" @create="loadItems({page: tablePage, itemsPerPage: useUserPreferenceStore().deviceSettings.general_tableItemsPerPage})"></model-edit-dialog>
</v-btn> </v-btn>
</v-col> </v-col>
</v-row> </v-row>
@@ -40,7 +40,7 @@
:items-per-page-options="itemsPerPageOptions" :items-per-page-options="itemsPerPageOptions"
:show-select="tableShowSelect" :show-select="tableShowSelect"
:page="tablePage" :page="tablePage"
:items-per-page="tablePageSize" :items-per-page="useUserPreferenceStore().deviceSettings.general_tableItemsPerPage"
> >
<template v-slot:item.action="{ item }"> <template v-slot:item.action="{ item }">
<v-btn color="edit" :to="{name: 'ModelEditPage', params: {model: model, id: item.id}}"> <v-btn color="edit" :to="{name: 'ModelEditPage', params: {model: model, id: item.id}}">
@@ -76,6 +76,7 @@ import {VDataTable} from "vuetify/components";
import {useUrlSearchParams} from "@vueuse/core"; import {useUrlSearchParams} from "@vueuse/core";
import ModelEditDialog from "@/components/dialogs/ModelEditDialog.vue"; import ModelEditDialog from "@/components/dialogs/ModelEditDialog.vue";
import {useRouter} from "vue-router"; import {useRouter} from "vue-router";
import {useUserPreferenceStore} from "@/stores/UserPreferenceStore";
type VDataTableProps = InstanceType<typeof VDataTable>['$props'] type VDataTableProps = InstanceType<typeof VDataTable>['$props']
@@ -106,7 +107,6 @@ const tableHeaders: VDataTableProps['headers'] = [
const tablePage = ref(1) const tablePage = ref(1)
const tablePageInitialized = ref(false) // TODO workaround until vuetify bug is fixed const tablePageInitialized = ref(false) // TODO workaround until vuetify bug is fixed
const tablePageSize = ref(10)
const tableShowSelect = ref(true) const tableShowSelect = ref(true)
@@ -121,19 +121,14 @@ const genericModel = ref({} as GenericModel)
// when navigating to ModelListPage from ModelListPage with a different model lifecycle hooks are not called so watch for change here // when navigating to ModelListPage from ModelListPage with a different model lifecycle hooks are not called so watch for change here
watch(() => props.model, () => { watch(() => props.model, () => {
console.log('PAGE SIZE in watch params is ', params.pageSize)
genericModel.value = getGenericModelFromString(props.model, t) genericModel.value = getGenericModelFromString(props.model, t)
loadItems({page: 1, itemsPerPage: Number(params.pageSize)}) loadItems({page: 1, itemsPerPage: useUserPreferenceStore().deviceSettings.general_tableItemsPerPage})
}) })
/** /**
* select model class before mount because template renders (and requests item load) before onMounted is called * select model class before mount because template renders (and requests item load) before onMounted is called
*/ */
onBeforeMount(() => { onBeforeMount(() => {
// TODO this whole params thing is strange, properly review the code once vuetify fixes their table (see below)
if (Number(params.pageSize) != tablePageSize.value) {
tablePageSize.value = Number(params.pageSize)
}
try { try {
genericModel.value = getGenericModelFromString(props.model, t) genericModel.value = getGenericModelFromString(props.model, t)
} catch (Error) { } catch (Error) {
@@ -151,6 +146,7 @@ onBeforeMount(() => {
* @param sortBy * @param sortBy
* @param groupBy * @param groupBy
*/ */
// TODO proper typescript signature, this is just taken from vuetify example, must be a better solution
function loadItems({page, itemsPerPage, search, sortBy, groupBy}) { function loadItems({page, itemsPerPage, search, sortBy, groupBy}) {
console.log('load items called', page, params.page, itemsPerPage, params.pageSize) console.log('load items called', page, params.page, itemsPerPage, params.pageSize)
loading.value = true loading.value = true
@@ -159,7 +155,7 @@ function loadItems({page, itemsPerPage, search, sortBy, groupBy}) {
page = Number(params.page) page = Number(params.page)
} }
tablePageInitialized.value = true tablePageInitialized.value = true
params.page = page.toString()
genericModel.value.list({page: page, pageSize: itemsPerPage, query: search}).then((r: any) => { genericModel.value.list({page: page, pageSize: itemsPerPage, query: search}).then((r: any) => {
items.value = r.results items.value = r.results
itemCount.value = r.count itemCount.value = r.count
@@ -167,14 +163,6 @@ function loadItems({page, itemsPerPage, search, sortBy, groupBy}) {
useMessageStore().addError(ErrorMessageType.FETCH_ERROR, err) useMessageStore().addError(ErrorMessageType.FETCH_ERROR, err)
}).finally(() => { }).finally(() => {
loading.value = false loading.value = false
nextTick(() => {
console.log('setting parameters to ', page.toString(), itemsPerPage.toString())
params.page = page.toString()
params.pageSize = itemsPerPage.toString()
})
tablePage.value = page // TODO remove once page bug is fixed tablePage.value = page // TODO remove once page bug is fixed
}) })
} }

View File

@@ -24,6 +24,8 @@ class DeviceSettings {
mealplan_startingDayOfWeek = 1 mealplan_startingDayOfWeek = 1
mealplan_displayWeekNumbers = true mealplan_displayWeekNumbers = true
general_tableItemsPerPage = 10
} }
export const useUserPreferenceStore = defineStore('user_preference_store', () => { export const useUserPreferenceStore = defineStore('user_preference_store', () => {