mirror of
https://github.com/TandoorRecipes/recipes.git
synced 2026-01-03 05:11:31 -05:00
fixed saving page item number in model list
This commit is contained in:
@@ -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";
|
||||||
|
|||||||
@@ -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
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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', () => {
|
||||||
|
|||||||
Reference in New Issue
Block a user