feat(grid): temporary page size with optional set-as-default
Refs: #9167
This commit is contained in:
16 files changed
+193
-20
No files matched your search
@@ -841,6 +841,23 @@ function currentEditorSettingsDraft(): EditorSettingsDraft {
|
||||
const editEditorSettingsBase = ref<EditorSettingsDraft>(editorSettingsDraftFromSettings(settingsStore.editorSettings));
|
||||
const hasEditorDraftChanges = computed(() => editorSettingsDraftChanged(currentEditorSettingsDraft(), editEditorSettingsBase.value));
|
||||
|
||||
// Defaults can also be changed from the result-grid menu while this dialog is
|
||||
// open. Refresh untouched draft fields so both entry points stay consistent,
|
||||
// without overwriting an edit the user is actively making here.
|
||||
watch(
|
||||
() => [settingsStore.editorSettings.pageSize, settingsStore.editorSettings.tableOpenPageSize] as const,
|
||||
([pageSize, tableOpenPageSize]) => {
|
||||
if (editPageSize.value === editEditorSettingsBase.value.pageSize) {
|
||||
editPageSize.value = pageSize;
|
||||
editEditorSettingsBase.value.pageSize = pageSize;
|
||||
}
|
||||
if (editTableOpenPageSize.value === editEditorSettingsBase.value.tableOpenPageSize) {
|
||||
editTableOpenPageSize.value = tableOpenPageSize;
|
||||
editEditorSettingsBase.value.tableOpenPageSize = tableOpenPageSize;
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
// --- Background image draft state ---
|
||||
function cloneBackgroundImageDraft(settings: BackgroundImageSettings): BackgroundImageSettings {
|
||||
return JSON.parse(JSON.stringify(settings)) as BackgroundImageSettings;
|
||||
|
||||
@@ -2934,6 +2934,7 @@ watch([localFilterScopeKey, localFilterRestoreKey], ([, restoreKey], [, previous
|
||||
|
||||
// --- Pagination ---
|
||||
const pageSizePreference = computed(() => resolveDataGridPageSizePreference(props.context, props.pageSizePreference));
|
||||
const defaultPageSize = computed(() => preferredDataGridPageSize(settingsStore.editorSettings, pageSizePreference.value));
|
||||
const pageSize = ref(preferredDataGridPageSize(settingsStore.editorSettings, pageSizePreference.value, props.pageLimit));
|
||||
const currentPage = ref(1);
|
||||
const pageSizeOptions = computed(() => resultPageSizeMenuOptions(pageSize.value));
|
||||
@@ -3356,7 +3357,6 @@ function checkInfiniteScroll(scroller: HTMLElement) {
|
||||
function changePageSize(size: number) {
|
||||
const normalizedSize = normalizeResultPageSize(size);
|
||||
pageSize.value = normalizedSize;
|
||||
settingsStore.updateEditorSettings(dataGridPageSizeSettingsPatch(pageSizePreference.value, normalizedSize));
|
||||
currentPage.value = 1;
|
||||
lastInfiniteScrollPage = 0;
|
||||
infiniteScrollAllLoaded = false;
|
||||
@@ -3365,6 +3365,15 @@ function changePageSize(size: number) {
|
||||
emit("paginate", 0, normalizedSize, currentWhereInput(), currentOrderBy());
|
||||
}
|
||||
|
||||
function setDefaultPageSize() {
|
||||
settingsStore.updateEditorSettings(dataGridPageSizeSettingsPatch(pageSizePreference.value, pageSize.value));
|
||||
}
|
||||
|
||||
function applyCustomPageSizeAndSetDefault() {
|
||||
applyCustomPageSize();
|
||||
setDefaultPageSize();
|
||||
}
|
||||
|
||||
function applyCustomPageSize() {
|
||||
changePageSize(normalizeResultPageSize(customPageSizeInput.value, pageSize.value));
|
||||
}
|
||||
@@ -13435,6 +13444,7 @@ useUpdateBlocker(() => (hasPendingChanges.value || hasPendingDataEditorDraft.val
|
||||
:infinite-scroll-enabled="infiniteScrollEnabled"
|
||||
:infinite-scroll-all-loaded="infiniteScrollAllLoaded"
|
||||
:page-size="pageSize"
|
||||
:default-page-size="defaultPageSize"
|
||||
:page-size-menu-items="pageSizeMenuItems"
|
||||
:export-menu-items="exportMenuItems"
|
||||
:current-page="currentPage"
|
||||
@@ -13443,6 +13453,7 @@ useUpdateBlocker(() => (hasPendingChanges.value || hasPendingDataEditorDraft.val
|
||||
:can-jump-last-page="canJumpLastPage"
|
||||
@select-page-size="selectPageSizeMenuItem"
|
||||
@apply-custom-page-size="applyCustomPageSize"
|
||||
@apply-custom-page-size-and-set-default="applyCustomPageSizeAndSetDefault"
|
||||
@first-page="firstPage"
|
||||
@previous-page="prevPage"
|
||||
@next-page="nextPage"
|
||||
|
||||
@@ -21,6 +21,7 @@ const props = withDefaults(
|
||||
infiniteScrollEnabled: boolean;
|
||||
infiniteScrollAllLoaded: boolean;
|
||||
pageSize: number;
|
||||
defaultPageSize: number;
|
||||
pageSizeMenuItems: LightDropdownItem[];
|
||||
exportMenuItems: LightDropdownItem[];
|
||||
currentPage: number;
|
||||
@@ -49,6 +50,7 @@ const emit = defineEmits<{
|
||||
jumpPage: [page: number];
|
||||
lastPage: [];
|
||||
selectExport: [value: string];
|
||||
applyCustomPageSizeAndSetDefault: [];
|
||||
}>();
|
||||
|
||||
watch(
|
||||
@@ -103,31 +105,36 @@ function handlePageInputKeydown(event: KeyboardEvent) {
|
||||
:items="pageSizeMenuItems"
|
||||
:trigger-label="`${pageSize}${t('grid.rowsPerPageShort')}`"
|
||||
trigger-class="inline-flex h-5 shrink-0 items-center justify-center whitespace-nowrap rounded-md px-1.5 text-xs hover:bg-accent hover:text-accent-foreground"
|
||||
content-class="w-36"
|
||||
content-class="w-52"
|
||||
:highlight-selected="false"
|
||||
check-position="none"
|
||||
align="end"
|
||||
@update:model-value="emit('selectPageSize', $event)"
|
||||
>
|
||||
<div class="bg-border -mx-1 my-1 h-px" />
|
||||
<div class="text-muted-foreground px-1.5 py-1 text-xs">{{ t("grid.customRowsPerPage") }}</div>
|
||||
<div class="flex items-center gap-1 px-1.5 pb-1" @click.stop @keydown.stop>
|
||||
<div class="px-2 pt-2 text-xs font-medium text-foreground">{{ t("grid.customRowsPerPage") }}</div>
|
||||
<div class="px-2 pb-2 text-[11px] text-muted-foreground">{{ t("grid.currentAndDefaultPageSize", { current: pageSize, default: defaultPageSize }) }}</div>
|
||||
<div class="flex items-center gap-1.5 px-2 pb-2" @pointerdown.stop @click.stop @keydown.stop>
|
||||
<Input
|
||||
v-model="customPageSizeInput"
|
||||
type="number"
|
||||
inputmode="numeric"
|
||||
:min="MIN_RESULT_PAGE_SIZE"
|
||||
:max="MAX_RESULT_PAGE_SIZE"
|
||||
class="h-6 w-20 px-1.5 text-xs tabular-nums [appearance:textfield] [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none"
|
||||
class="h-7 flex-1 px-2 text-sm tabular-nums [appearance:textfield] [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none"
|
||||
@keydown.enter.prevent.stop="emit('applyCustomPageSize')"
|
||||
/>
|
||||
<Tooltip>
|
||||
<TooltipTrigger as-child
|
||||
><Button variant="outline" size="icon" class="h-6 w-6 shrink-0" :aria-label="t('grid.applyPageSize')" @click.stop="emit('applyCustomPageSize')"><Check class="h-3 w-3" /></Button
|
||||
><Button variant="outline" size="icon" class="h-7 w-7 shrink-0" :aria-label="t('grid.applyForThisQuery')" @click.stop="emit('applyCustomPageSize')"><Check class="h-3.5 w-3.5" /></Button
|
||||
></TooltipTrigger>
|
||||
<TooltipContent side="bottom">{{ t("grid.applyPageSize") }}</TooltipContent>
|
||||
</Tooltip>
|
||||
</div>
|
||||
<div class="flex gap-1.5 border-t px-2 py-2">
|
||||
<button type="button" class="flex-1 whitespace-nowrap rounded-md border px-2 py-1.5 text-center text-xs text-muted-foreground hover:bg-accent hover:text-accent-foreground" @click.stop="emit('applyCustomPageSize')">{{ t("grid.applyForThisQuery") }}</button>
|
||||
<button type="button" class="flex-1 whitespace-nowrap rounded-md bg-primary px-2 py-1.5 text-center text-xs text-primary-foreground hover:bg-primary/90" @click.stop="emit('applyCustomPageSizeAndSetDefault')">{{ t("grid.applyAndSetDefault") }}</button>
|
||||
</div>
|
||||
</LightDropdown>
|
||||
<Button variant="ghost" size="icon" class="h-5 w-5 shrink-0" :disabled="loading || currentPage <= 1" @click="emit('firstPage')"><ChevronsLeft class="h-3 w-3" /></Button>
|
||||
<Button variant="ghost" size="icon" class="h-5 w-5 shrink-0" :disabled="loading || currentPage <= 1" @click="emit('previousPage')"><ChevronLeft class="h-3 w-3" /></Button>
|
||||
|
||||
+101
-1
@@ -65,6 +65,7 @@ function mountGrid(
|
||||
infiniteScroll?: boolean;
|
||||
empty?: boolean;
|
||||
configurePaginationShortcuts?: boolean;
|
||||
pageSizePreference?: "results" | "table-open";
|
||||
} = {},
|
||||
) {
|
||||
const pinia = createPinia();
|
||||
@@ -107,6 +108,7 @@ function mountGrid(
|
||||
result,
|
||||
databaseType: "mysql",
|
||||
context: "table-data",
|
||||
pageSizePreference: options.pageSizePreference,
|
||||
pageLimit: 100,
|
||||
pageOffset: options.pageOffset ?? 200,
|
||||
totalRowCount: options.totalRowCount ?? 500,
|
||||
@@ -125,7 +127,7 @@ function mountGrid(
|
||||
app.mount(host);
|
||||
const mounted = { app, host };
|
||||
mountedApps.push(mounted);
|
||||
return { host, paginate };
|
||||
return { host, paginate, settingsStore };
|
||||
}
|
||||
|
||||
async function settle() {
|
||||
@@ -146,6 +148,29 @@ function dispatchShortcut(target: HTMLElement, key: string): KeyboardEvent {
|
||||
return event;
|
||||
}
|
||||
|
||||
function menuActionButton(label: string): HTMLButtonElement {
|
||||
const button = Array.from(document.querySelectorAll<HTMLButtonElement>('[role="menu"] button')).find((candidate) => candidate.textContent?.trim() === label);
|
||||
if (!button) throw new Error(`Menu action button not found: ${label}`);
|
||||
return button;
|
||||
}
|
||||
|
||||
async function openCustomPageSizeMenu(host: HTMLElement): Promise<HTMLInputElement> {
|
||||
const trigger = Array.from(host.querySelectorAll<HTMLButtonElement>("button[aria-expanded]")).find((button) => button.textContent?.includes("100"));
|
||||
expect(trigger).toBeDefined();
|
||||
trigger!.click();
|
||||
await settle();
|
||||
const input = document.querySelector<HTMLInputElement>('[role="menu"] input[type="number"]');
|
||||
expect(input).not.toBeNull();
|
||||
return input!;
|
||||
}
|
||||
|
||||
async function enterCustomPageSize(host: HTMLElement, size: string): Promise<void> {
|
||||
const input = await openCustomPageSizeMenu(host);
|
||||
input.value = size;
|
||||
input.dispatchEvent(new Event("input", { bubbles: true }));
|
||||
await settle();
|
||||
}
|
||||
|
||||
afterEach(() => {
|
||||
for (const { app, host } of mountedApps.splice(0)) {
|
||||
app.unmount();
|
||||
@@ -154,6 +179,31 @@ afterEach(() => {
|
||||
});
|
||||
|
||||
describe("DataGrid pagination shortcuts", () => {
|
||||
it("allows pointer focus and editing in the custom page size input", async () => {
|
||||
const { host, paginate } = mountGrid();
|
||||
await settle();
|
||||
const trigger = Array.from(host.querySelectorAll<HTMLButtonElement>("button[aria-expanded]")).find((button) => button.textContent?.includes("100"));
|
||||
expect(trigger).toBeDefined();
|
||||
trigger!.click();
|
||||
await settle();
|
||||
|
||||
const input = document.querySelector<HTMLInputElement>('[role="menu"] input[type="number"]');
|
||||
expect(input).not.toBeNull();
|
||||
const pointer = new MouseEvent("pointerdown", { bubbles: true, cancelable: true, button: 0 });
|
||||
input!.dispatchEvent(pointer);
|
||||
// Canceling pointerdown suppresses the browser's native focus behavior.
|
||||
expect(pointer.defaultPrevented).toBe(false);
|
||||
input!.focus();
|
||||
input!.value = "250";
|
||||
input!.dispatchEvent(new Event("input", { bubbles: true }));
|
||||
await settle();
|
||||
expect(document.activeElement).toBe(input);
|
||||
input!.dispatchEvent(new KeyboardEvent("keydown", { key: "Enter", bubbles: true, cancelable: true }));
|
||||
await settle();
|
||||
expect(paginate).toHaveBeenCalledOnce();
|
||||
expect(paginate.mock.calls[0]?.slice(0, 2)).toEqual([0, 250]);
|
||||
});
|
||||
|
||||
it.each(shortcutCases)("runs $functionName through the configured $actionId shortcut", async ({ key, offset }) => {
|
||||
const { host, paginate } = mountGrid();
|
||||
await settle();
|
||||
@@ -277,3 +327,53 @@ describe("DataGrid pagination shortcuts", () => {
|
||||
expect(actionIds).toHaveLength(4);
|
||||
});
|
||||
});
|
||||
|
||||
describe("DataGrid custom page size persistence", () => {
|
||||
it("applying a custom page size is temporary and does not write editor settings", async () => {
|
||||
const { host, paginate, settingsStore } = mountGrid();
|
||||
await settle();
|
||||
const updateEditorSettings = vi.spyOn(settingsStore, "updateEditorSettings");
|
||||
|
||||
await enterCustomPageSize(host, "250");
|
||||
menuActionButton(i18n.global.t("grid.applyForThisQuery")).click();
|
||||
await settle();
|
||||
|
||||
expect(paginate).toHaveBeenCalledOnce();
|
||||
expect(paginate.mock.calls[0]?.slice(0, 2)).toEqual([0, 250]);
|
||||
expect(updateEditorSettings).not.toHaveBeenCalled();
|
||||
expect(settingsStore.editorSettings.pageSize).toBe(100);
|
||||
expect(settingsStore.editorSettings.tableOpenPageSize).toBe(100);
|
||||
});
|
||||
|
||||
it("set-as-default persists the table-open page size for table grids", async () => {
|
||||
const { host, paginate, settingsStore } = mountGrid();
|
||||
await settle();
|
||||
const updateEditorSettings = vi.spyOn(settingsStore, "updateEditorSettings");
|
||||
|
||||
await enterCustomPageSize(host, "250");
|
||||
menuActionButton(i18n.global.t("grid.applyAndSetDefault")).click();
|
||||
await settle();
|
||||
|
||||
expect(paginate).toHaveBeenCalledOnce();
|
||||
expect(paginate.mock.calls[0]?.slice(0, 2)).toEqual([0, 250]);
|
||||
expect(updateEditorSettings).toHaveBeenCalledWith({ tableOpenPageSize: 250 });
|
||||
expect(settingsStore.editorSettings.tableOpenPageSize).toBe(250);
|
||||
expect(settingsStore.editorSettings.pageSize).toBe(100);
|
||||
});
|
||||
|
||||
it("set-as-default persists the query page size for results grids", async () => {
|
||||
const { host, paginate, settingsStore } = mountGrid({ pageSizePreference: "results" });
|
||||
await settle();
|
||||
const updateEditorSettings = vi.spyOn(settingsStore, "updateEditorSettings");
|
||||
|
||||
await enterCustomPageSize(host, "250");
|
||||
menuActionButton(i18n.global.t("grid.applyAndSetDefault")).click();
|
||||
await settle();
|
||||
|
||||
expect(paginate).toHaveBeenCalledOnce();
|
||||
expect(paginate.mock.calls[0]?.slice(0, 2)).toEqual([0, 250]);
|
||||
expect(updateEditorSettings).toHaveBeenCalledWith({ pageSize: 250 });
|
||||
expect(settingsStore.editorSettings.pageSize).toBe(250);
|
||||
expect(settingsStore.editorSettings.tableOpenPageSize).toBe(100);
|
||||
});
|
||||
});
|
||||
@@ -2044,6 +2044,9 @@ export default withEnglishFallback({
|
||||
rowsPerPage: "Səhifədəki sətir sayı",
|
||||
customRowsPerPage: "Fərdi sətir sayı",
|
||||
applyPageSize: "Tətbiq et",
|
||||
currentAndDefaultPageSize: "Cari: {current} · Standart: {default}",
|
||||
applyForThisQuery: "Bu dəfə",
|
||||
applyAndSetDefault: "Standart et",
|
||||
save: "Yadda saxla",
|
||||
discard: "Dəyişiklikləri at",
|
||||
dismiss: "Bağla",
|
||||
@@ -6965,7 +6968,7 @@ export default withEnglishFallback({
|
||||
dataGridFilterViewPreviewExpand: "Təsirin önbaxışını genişləndir",
|
||||
dataGridFilterViewPreviewCollapse: "Təsirin önbaxışını yığ",
|
||||
tableOpenPageSize: "Cədvəllər açıldıqda səhifə başına standart sətir sayı",
|
||||
tableOpenPageSizeDescription: "Yeni cədvəl açıldıqda hər səhifədə yüklənən sətirlər. Cədvəldə səhifə başına sətir sayını dəyişmək gələcək cədvəl vərəqləri üçün bu standartı yeniləyir.",
|
||||
tableOpenPageSizeDescription: "Yeni cədvəl açıldıqda hər səhifədə yüklənən sətirlərin sayı. Cədvəldəki müvəqqəti dəyişikliklər bu standartı dəyişmir; yalnız “Standart et” seçildikdə yenilənir.",
|
||||
queryPageSize: "Sorğuda səhifə başına standart sətir sayı",
|
||||
queryPageSizeDescription: "Sorğu nəticəsinin hər səhifəsində yüklənən sətirlər. Dəstəklənən maksimum səhifə ölçüsü {max} təşkil edir.",
|
||||
defaultAutoKeepResults: "Sorğu nəticələrini standart olaraq avtomatik saxla",
|
||||
|
||||
@@ -2177,6 +2177,9 @@ export default {
|
||||
rowsPerPage: "Rows per page",
|
||||
customRowsPerPage: "Custom rows",
|
||||
applyPageSize: "Apply",
|
||||
currentAndDefaultPageSize: "Current: {current} · Default: {default}",
|
||||
applyForThisQuery: "For now",
|
||||
applyAndSetDefault: "Set default",
|
||||
save: "Save",
|
||||
discard: "Discard",
|
||||
dismiss: "Dismiss",
|
||||
@@ -7152,7 +7155,7 @@ export default {
|
||||
dataGridFilterViewPreviewExpand: "Expand effect preview",
|
||||
dataGridFilterViewPreviewCollapse: "Collapse effect preview",
|
||||
tableOpenPageSize: "Default rows per page when opening tables",
|
||||
tableOpenPageSizeDescription: "Rows loaded per page when opening a new table. Changing rows per page in a table updates this default for future table tabs.",
|
||||
tableOpenPageSizeDescription: "Rows loaded per page when opening a new table. Temporary changes do not update this default; only choosing “Set default” does.",
|
||||
queryPageSize: "Default query rows per page",
|
||||
queryPageSizeDescription: "Rows loaded per query result page. The maximum supported page size is {max}.",
|
||||
defaultAutoKeepResults: "Auto-keep query results by default",
|
||||
|
||||
@@ -2022,6 +2022,9 @@ export default withEnglishFallback({
|
||||
rowsPerPage: "Filas por página",
|
||||
customRowsPerPage: "Filas personalizadas",
|
||||
applyPageSize: "Aplicar",
|
||||
currentAndDefaultPageSize: "Actual: {current} · Predeterminado: {default}",
|
||||
applyForThisQuery: "Solo ahora",
|
||||
applyAndSetDefault: "Predeterminado",
|
||||
save: "Guardar",
|
||||
discard: "Descartar",
|
||||
dismiss: "Cerrar",
|
||||
@@ -6714,7 +6717,7 @@ export default withEnglishFallback({
|
||||
dataGridFilterViewPreviewExpand: "Expandir vista previa del efecto",
|
||||
dataGridFilterViewPreviewCollapse: "Contraer vista previa del efecto",
|
||||
tableOpenPageSize: "Filas predeterminadas por página al abrir tablas",
|
||||
tableOpenPageSizeDescription: "Filas cargadas por página al abrir una tabla nueva. Cambiar las filas por página actualiza este valor para futuras pestañas de tablas.",
|
||||
tableOpenPageSizeDescription: "Filas cargadas por página al abrir una nueva tabla. Los cambios temporales no modifican este valor; solo se actualiza al elegir “Predeterminado”.",
|
||||
queryPageSize: "Filas predeterminadas por página de consulta",
|
||||
queryPageSizeDescription: "Filas cargadas por página de resultados. Se admiten hasta {max} filas.",
|
||||
defaultAutoKeepResults: "Conservar resultados automáticamente por defecto",
|
||||
|
||||
@@ -2020,6 +2020,9 @@ export default withEnglishFallback({
|
||||
rowsPerPage: "Righe per pagina",
|
||||
customRowsPerPage: "Righe personalizzate",
|
||||
applyPageSize: "Applica",
|
||||
currentAndDefaultPageSize: "Attuale: {current} · Predefinito: {default}",
|
||||
applyForThisQuery: "Solo ora",
|
||||
applyAndSetDefault: "Predefinito",
|
||||
save: "Salva",
|
||||
discard: "Scarta",
|
||||
dismiss: "Ignora",
|
||||
@@ -6714,7 +6717,7 @@ export default withEnglishFallback({
|
||||
dataGridFilterViewPreviewExpand: "Espandi anteprima effetto",
|
||||
dataGridFilterViewPreviewCollapse: "Comprimi anteprima effetto",
|
||||
tableOpenPageSize: "Righe predefinite per pagina all'apertura delle tabelle",
|
||||
tableOpenPageSizeDescription: "Righe caricate per pagina quando si apre una nuova tabella. La modifica delle righe per pagina aggiorna questo valore per le future schede tabella.",
|
||||
tableOpenPageSizeDescription: "Righe caricate per pagina quando si apre una nuova tabella. Le modifiche temporanee non cambiano questo valore; viene aggiornato solo scegliendo “Predefinito”.",
|
||||
queryPageSize: "Righe predefinite per pagina di query",
|
||||
queryPageSizeDescription: "Righe caricate per pagina dei risultati. Sono supportate fino a {max} righe.",
|
||||
defaultAutoKeepResults: "Mantieni automaticamente i risultati per impostazione predefinita",
|
||||
|
||||
@@ -2032,6 +2032,9 @@ export default withEnglishFallback({
|
||||
rowsPerPage: "1ページあたりの行数",
|
||||
customRowsPerPage: "カスタム行数",
|
||||
applyPageSize: "適用",
|
||||
currentAndDefaultPageSize: "現在:{current} · デフォルト:{default}",
|
||||
applyForThisQuery: "今回のみ",
|
||||
applyAndSetDefault: "デフォルトに設定",
|
||||
save: "保存",
|
||||
discard: "破棄",
|
||||
dismiss: "閉じる",
|
||||
@@ -6748,7 +6751,7 @@ export default withEnglishFallback({
|
||||
dataGridFilterViewPreviewExpand: "効果プレビューを展開",
|
||||
dataGridFilterViewPreviewCollapse: "効果プレビューを折りたたむ",
|
||||
tableOpenPageSize: "テーブルを開くときのデフォルト行数",
|
||||
tableOpenPageSizeDescription: "新しいテーブルを開くときに 1 ページあたり読み込む行数です。テーブルで行数を変更すると、今後のテーブルタブのデフォルトも更新されます。",
|
||||
tableOpenPageSizeDescription: "新しいテーブルを開くときに1ページあたり読み込む行数です。一時的な変更では更新されず、「デフォルトに設定」を選択した場合のみ更新されます。",
|
||||
queryPageSize: "クエリ結果のデフォルト行数",
|
||||
queryPageSizeDescription: "クエリ結果の 1 ページあたりの行数です。最大 {max} 行まで指定できます。",
|
||||
defaultAutoKeepResults: "クエリ結果を既定で自動保持",
|
||||
|
||||
@@ -2013,6 +2013,9 @@ export default withEnglishFallback({
|
||||
rowsPerPage: "페이지당 행",
|
||||
customRowsPerPage: "사용자 지정 행",
|
||||
applyPageSize: "적용",
|
||||
currentAndDefaultPageSize: "현재: {current} · 기본값: {default}",
|
||||
applyForThisQuery: "이번만",
|
||||
applyAndSetDefault: "기본값 설정",
|
||||
save: "저장",
|
||||
discard: "저장 안 함",
|
||||
dismiss: "닫기",
|
||||
@@ -6464,7 +6467,7 @@ export default withEnglishFallback({
|
||||
dataGridFilterViewPreviewExpand: "효과 미리보기 펼치기",
|
||||
dataGridFilterViewPreviewCollapse: "효과 미리보기 접기",
|
||||
tableOpenPageSize: "테이블을 열 때 기본 페이지당 행 수",
|
||||
tableOpenPageSizeDescription: "새 테이블을 열 때 페이지당 로드되는 행 수입니다. 테이블에서 페이지당 행을 변경하면 향후 테이블 탭의 기본값이 업데이트됩니다.",
|
||||
tableOpenPageSizeDescription: "새 테이블을 열 때 페이지당 불러오는 행 수입니다. 임시 변경은 이 기본값에 영향을 주지 않으며, “기본값 설정”을 선택한 경우에만 변경됩니다.",
|
||||
queryPageSize: "쿼리 결과 기본 페이지당 행 수",
|
||||
queryPageSizeDescription: "쿼리 결과 페이지당 로드할 행 수입니다. 최대 {max}행을 지원합니다.",
|
||||
defaultAutoKeepResults: "기본적으로 쿼리 결과 자동 보관",
|
||||
|
||||
@@ -2022,6 +2022,9 @@ export default withEnglishFallback({
|
||||
rowsPerPage: "Linhas por página",
|
||||
customRowsPerPage: "Linhas personalizadas",
|
||||
applyPageSize: "Aplicar",
|
||||
currentAndDefaultPageSize: "Atual: {current} · Padrão: {default}",
|
||||
applyForThisQuery: "Só agora",
|
||||
applyAndSetDefault: "Definir padrão",
|
||||
save: "Salvar",
|
||||
discard: "Descartar",
|
||||
dismiss: "Dispensar",
|
||||
@@ -6716,7 +6719,7 @@ export default withEnglishFallback({
|
||||
dataGridFilterViewPreviewExpand: "Expandir prévia do efeito",
|
||||
dataGridFilterViewPreviewCollapse: "Recolher prévia do efeito",
|
||||
tableOpenPageSize: "Linhas padrão por página ao abrir tabelas",
|
||||
tableOpenPageSizeDescription: "Linhas carregadas por página ao abrir uma nova tabela. Alterar as linhas por página atualiza esse padrão para futuras abas de tabelas.",
|
||||
tableOpenPageSizeDescription: "Linhas carregadas por página ao abrir uma nova tabela. Alterações temporárias não modificam esse valor; ele só é atualizado ao escolher “Definir padrão”.",
|
||||
queryPageSize: "Linhas padrão por página de consulta",
|
||||
queryPageSizeDescription: "Linhas carregadas por página de resultados. São suportadas até {max} linhas.",
|
||||
defaultAutoKeepResults: "Manter resultados automaticamente por padrão",
|
||||
|
||||
@@ -2039,6 +2039,9 @@ export default withEnglishFallback({
|
||||
rowsPerPage: "Sayfa başına satır",
|
||||
customRowsPerPage: "Özel satır sayısı",
|
||||
applyPageSize: "Uygula",
|
||||
currentAndDefaultPageSize: "Geçerli: {current} · Varsayılan: {default}",
|
||||
applyForThisQuery: "Bu sefer",
|
||||
applyAndSetDefault: "Varsayılan yap",
|
||||
save: "Kaydet",
|
||||
discard: "Vazgeç",
|
||||
dismiss: "Kapat",
|
||||
@@ -6847,7 +6850,7 @@ export default withEnglishFallback({
|
||||
dataGridFilterViewPreviewExpand: "Etki önizlemesini genişlet",
|
||||
dataGridFilterViewPreviewCollapse: "Etki önizlemesini daralt",
|
||||
tableOpenPageSize: "Tablolar açılırken varsayılan sayfa başına satır",
|
||||
tableOpenPageSizeDescription: "Yeni bir tablo açıldığında sayfa başına yüklenen satır sayısı. Bir tabloda sayfa başına satırı değiştirmek, sonraki tablo sekmeleri için bu varsayılanı günceller.",
|
||||
tableOpenPageSizeDescription: "Yeni bir tablo açıldığında sayfa başına yüklenen satır sayısı. Geçici değişiklikler bu değeri değiştirmez; yalnızca “Varsayılan yap” seçildiğinde güncellenir.",
|
||||
queryPageSize: "Varsayılan sorgu sayfa başına satır",
|
||||
queryPageSizeDescription: "Sorgu sonucu sayfası başına yüklenen satır sayısı. Desteklenen en büyük sayfa boyutu {max}.",
|
||||
defaultAutoKeepResults: "Sorgu sonuçlarını varsayılan olarak otomatik sakla",
|
||||
|
||||
@@ -2092,6 +2092,9 @@ export default withEnglishFallback({
|
||||
rowsPerPage: "每页行数",
|
||||
customRowsPerPage: "自定义行数",
|
||||
applyPageSize: "应用",
|
||||
currentAndDefaultPageSize: "当前:{current} · 默认:{default}",
|
||||
applyForThisQuery: "仅本次",
|
||||
applyAndSetDefault: "设为默认",
|
||||
save: "保存",
|
||||
discard: "放弃",
|
||||
dismiss: "关闭",
|
||||
@@ -7126,7 +7129,7 @@ export default withEnglishFallback({
|
||||
dataGridFilterViewPreviewExpand: "展开效果预览",
|
||||
dataGridFilterViewPreviewCollapse: "收起效果预览",
|
||||
tableOpenPageSize: "打开表默认每页行数",
|
||||
tableOpenPageSizeDescription: "新打开数据表时每页加载的行数。在表数据页修改每页行数后,也会更新后续新建表标签页的默认值。",
|
||||
tableOpenPageSizeDescription: "新打开数据表时每页加载的行数。临时修改行数不会影响此默认值,仅点击“设为默认”时更新。",
|
||||
queryPageSize: "查询结果默认每页行数",
|
||||
queryPageSizeDescription: "每个查询结果分页加载的行数,最大支持 {max} 行。",
|
||||
defaultAutoKeepResults: "默认自动保留查询结果",
|
||||
|
||||
@@ -2021,6 +2021,9 @@ export default withEnglishFallback({
|
||||
rowsPerPage: "每頁筆數",
|
||||
customRowsPerPage: "自訂筆數",
|
||||
applyPageSize: "套用",
|
||||
currentAndDefaultPageSize: "目前:{current} · 預設:{default}",
|
||||
applyForThisQuery: "僅本次",
|
||||
applyAndSetDefault: "設為預設",
|
||||
save: "儲存",
|
||||
discard: "放棄",
|
||||
dismiss: "關閉",
|
||||
@@ -6029,7 +6032,7 @@ export default withEnglishFallback({
|
||||
dataGridFilterViewPreviewExpand: "展開效果預覽",
|
||||
dataGridFilterViewPreviewCollapse: "收合效果預覽",
|
||||
tableOpenPageSize: "開啟資料表預設每頁列數",
|
||||
tableOpenPageSizeDescription: "新開啟資料表時每頁載入的列數。在資料表頁面調整每頁列數後,也會更新後續新建資料表分頁的預設值。",
|
||||
tableOpenPageSizeDescription: "新開啟資料表時每頁載入的列數。暫時調整列數不會影響此預設值,僅點選「設為預設」時更新。",
|
||||
queryPageSize: "查詢結果預設每頁列數",
|
||||
queryPageSizeDescription: "每個查詢結果分頁載入的列數,最多支援 {max} 列。",
|
||||
defaultAutoKeepResults: "預設自動保留查詢結果",
|
||||
|
||||
@@ -2379,8 +2379,6 @@ export const useQueryStore = defineStore("query", () => {
|
||||
resultSortDirection: t.resultSortDirection,
|
||||
resultSortMode: t.resultSortMode,
|
||||
orderByInput: t.orderByInput,
|
||||
resultPageLimit: t.resultPageLimit,
|
||||
resultPageOffset: t.resultPageOffset,
|
||||
whereInput: t.whereInput,
|
||||
pinned: t.pinned,
|
||||
mode: t.mode,
|
||||
@@ -8072,6 +8070,8 @@ export const useQueryStore = defineStore("query", () => {
|
||||
tab.tableMetaPending = true;
|
||||
}
|
||||
tab.resultPageSql = snapshot.resultPageSql;
|
||||
// Cached rows and their pagination metadata describe the same result page.
|
||||
// Restoring this state must not change the global page-size defaults.
|
||||
tab.resultPageLimit = snapshot.resultPageLimit;
|
||||
tab.resultPageOffset = snapshot.resultPageOffset;
|
||||
tab.resultCountSql = snapshot.resultCountSql;
|
||||
|
||||
Reference in new issue
Block a user