Skip to content

Commit b093107

Browse files
committed
fix(ui): items-per-page input handling only on blur DataTable
Add reactive menu state and blur behavior to sanitize custom input only when the combobox menu closes. Prevents unnecessary page resets when value remains unchanged.
1 parent 49ca60a commit b093107

1 file changed

Lines changed: 16 additions & 1 deletion

File tree

ui/src/components/Tables/DataTable.vue

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@
9090
>
9191
<v-combobox
9292
v-model="internalItemsPerPage"
93+
v-model:menu="itemsPerPageMenuOpen"
9394
:items="itemsPerPageOptions"
9495
outlined
9596
variant="underlined"
@@ -104,6 +105,7 @@
104105
:rules="[validateItemsPerPage]"
105106
@blur="sanitizeItemsPerPage"
106107
@keydown.enter="sanitizeItemsPerPage"
108+
@update:menu="handleItemsPerPageMenuChange"
107109
@keydown="blockNonNumeric"
108110
@paste.prevent
109111
/>
@@ -175,6 +177,7 @@ const rawItemsPerPage = defineModel<number>("itemsPerPage", {
175177
});
176178
177179
const internalItemsPerPage = ref(rawItemsPerPage.value);
180+
const itemsPerPageMenuOpen = ref(false);
178181
179182
const pageQuantity = computed(() => Math.ceil(props.totalCount / rawItemsPerPage.value) || 1);
180183
@@ -216,9 +219,21 @@ const sanitizeItemsPerPage = () => {
216219
if (isNaN(num) || num < 1) num = 1;
217220
if (num > 100) num = 100;
218221
222+
const changed = rawItemsPerPage.value !== num;
223+
219224
rawItemsPerPage.value = num;
220225
internalItemsPerPage.value = num;
221226
222-
goToFirstPage();
227+
if (changed) {
228+
goToFirstPage();
229+
}
230+
};
231+
232+
const handleItemsPerPageMenuChange = (isOpen: boolean) => {
233+
itemsPerPageMenuOpen.value = isOpen;
234+
235+
if (!isOpen) {
236+
sanitizeItemsPerPage();
237+
}
223238
};
224239
</script>

0 commit comments

Comments
 (0)