1 parent
f57cd3960b
commit
3bec5091df
5 files changed
+85
-13
No files matched your search
@@ -134,7 +134,7 @@ const documentLoadExecutionId = ref("");
|
||||
const documentLoadCancelling = ref(false);
|
||||
const documentLoadingElapsedSeconds = ref("0.0");
|
||||
const page = ref(0);
|
||||
const pageSize = ref(normalizeResultPageSize(settingsStore.editorSettings.pageSize));
|
||||
const pageSize = ref(normalizeResultPageSize(settingsStore.editorSettings.tableOpenPageSize));
|
||||
const selectedIdx = ref<number | null>(null);
|
||||
const editJson = ref("");
|
||||
const isEditing = ref(false);
|
||||
@@ -2300,6 +2300,7 @@ defineExpose({ focusSearch });
|
||||
:table-meta="props.tableMeta"
|
||||
:column-layout-scope-key="documentColumnLayoutScopeKey"
|
||||
context="results"
|
||||
page-size-preference="table-open"
|
||||
:database-type="props.databaseType"
|
||||
:mongo-update-target="mongoUpdateTarget"
|
||||
:editable="documentStoreEditable"
|
||||
|
||||
+23
-7
@@ -25,6 +25,7 @@ const dataGrid = vi.hoisted(() => ({
|
||||
appendedFromRowCount: undefined as number | undefined,
|
||||
pageOffset: undefined as number | undefined,
|
||||
pageLimit: undefined as number | undefined,
|
||||
pageSizePreference: undefined as string | undefined,
|
||||
selectionActive: false,
|
||||
editActive: false,
|
||||
fullReplaceCount: 0,
|
||||
@@ -33,6 +34,7 @@ const dataGrid = vi.hoisted(() => ({
|
||||
const settings = vi.hoisted(() => ({
|
||||
editorSettings: {
|
||||
pageSize: 2,
|
||||
tableOpenPageSize: 5,
|
||||
infiniteScroll: true,
|
||||
mongoViewMode: "table" as "document" | "table",
|
||||
columnWidthDensity: "standard" as "compact" | "standard" | "comfortable",
|
||||
@@ -87,6 +89,7 @@ vi.mock("@/components/grid/DataGrid.vue", async () => {
|
||||
customSaveHandler: { type: Object, required: false },
|
||||
pageOffset: { type: Number, required: false },
|
||||
pageLimit: { type: Number, required: false },
|
||||
pageSizePreference: { type: String, required: false },
|
||||
},
|
||||
setup(props, { attrs, expose }) {
|
||||
dataGrid.paginate = attrs.onPaginate as typeof dataGrid.paginate;
|
||||
@@ -127,6 +130,7 @@ vi.mock("@/components/grid/DataGrid.vue", async () => {
|
||||
dataGrid.appendedFromRowCount = result.appended_from_row_count;
|
||||
dataGrid.pageOffset = props.pageOffset;
|
||||
dataGrid.pageLimit = props.pageLimit;
|
||||
dataGrid.pageSizePreference = props.pageSizePreference;
|
||||
return h("div", { "data-testid": "data-grid" });
|
||||
};
|
||||
},
|
||||
@@ -182,12 +186,12 @@ async function flushUi() {
|
||||
}
|
||||
}
|
||||
|
||||
async function mountBrowser() {
|
||||
async function mountBrowser(databaseType: "mongodb" | "elasticsearch" = "mongodb") {
|
||||
app = createApp(DocumentBrowser, {
|
||||
connectionId: "mongo-1",
|
||||
database: "test",
|
||||
collection: "docs",
|
||||
databaseType: "mongodb",
|
||||
databaseType,
|
||||
});
|
||||
app.mount(root!);
|
||||
await flushUi();
|
||||
@@ -230,10 +234,12 @@ beforeEach(async () => {
|
||||
dataGrid.appendedFromRowCount = undefined;
|
||||
dataGrid.pageOffset = undefined;
|
||||
dataGrid.pageLimit = undefined;
|
||||
dataGrid.pageSizePreference = undefined;
|
||||
dataGrid.selectionActive = false;
|
||||
dataGrid.editActive = false;
|
||||
dataGrid.fullReplaceCount = 0;
|
||||
settings.editorSettings.pageSize = 2;
|
||||
settings.editorSettings.tableOpenPageSize = 5;
|
||||
settings.editorSettings.infiniteScroll = true;
|
||||
|
||||
root = document.createElement("div");
|
||||
@@ -249,6 +255,16 @@ afterEach(() => {
|
||||
});
|
||||
|
||||
describe("DocumentBrowser infinite scroll (issue #6455)", () => {
|
||||
it.each(["mongodb", "elasticsearch"] as const)("uses the table-open page-size preference for %s", async (databaseType) => {
|
||||
backend.documentFindDocuments.mockResolvedValueOnce(documentResult(1, 5, 5));
|
||||
|
||||
await mountBrowser(databaseType);
|
||||
|
||||
expect(backend.documentFindDocuments.mock.calls[0]!.slice(0, 5)).toEqual(["mongo-1", "test", "docs", 0, 5]);
|
||||
expect(dataGrid.pageLimit).toBe(5);
|
||||
expect(dataGrid.pageSizePreference).toBe("table-open");
|
||||
});
|
||||
|
||||
it("preserves existing row identity and DataGrid selection/edit state for same-column appends", async () => {
|
||||
backend.documentFindDocuments.mockResolvedValueOnce(documentResult(1, 2, 4)).mockResolvedValueOnce(documentResult(3, 2, 4));
|
||||
|
||||
@@ -310,11 +326,11 @@ describe("DocumentBrowser infinite scroll (issue #6455)", () => {
|
||||
await dataGrid.reload!();
|
||||
await flushUi();
|
||||
|
||||
expect(backend.documentFindDocuments.mock.calls[3]!.slice(0, 5)).toEqual(["mongo-1", "test", "docs", 0, 2]);
|
||||
expect(backend.documentFindDocuments.mock.calls[3]!.slice(0, 5)).toEqual(["mongo-1", "test", "docs", 0, 5]);
|
||||
expect(dataGrid.rows).toHaveLength(2);
|
||||
expect(dataGrid.appendedFromRowCount).toBeUndefined();
|
||||
expect(dataGrid.pageOffset).toBe(0);
|
||||
expect(dataGrid.pageLimit).toBe(2);
|
||||
expect(dataGrid.pageLimit).toBe(5);
|
||||
expect(dataGrid.resetInfiniteScrollState).toHaveBeenCalledTimes(1);
|
||||
});
|
||||
|
||||
@@ -341,16 +357,16 @@ describe("DocumentBrowser infinite scroll (issue #6455)", () => {
|
||||
await flushUi();
|
||||
|
||||
expect(backend.documentUpdateDocument).toHaveBeenCalledTimes(1);
|
||||
expect(backend.documentFindDocuments.mock.calls[3]!.slice(0, 5)).toEqual(["mongo-1", "test", "docs", 0, 2]);
|
||||
expect(backend.documentFindDocuments.mock.calls[3]!.slice(0, 5)).toEqual(["mongo-1", "test", "docs", 0, 5]);
|
||||
expect(dataGrid.rows).toHaveLength(2);
|
||||
expect(dataGrid.appendedFromRowCount).toBeUndefined();
|
||||
expect(dataGrid.pageOffset).toBe(0);
|
||||
expect(dataGrid.pageLimit).toBe(2);
|
||||
expect(dataGrid.pageLimit).toBe(5);
|
||||
expect(dataGrid.resetInfiniteScrollState).toHaveBeenCalledTimes(1);
|
||||
});
|
||||
|
||||
it("keeps the configured page size when the final capped segment has a smaller limit", async () => {
|
||||
settings.editorSettings.pageSize = 3;
|
||||
settings.editorSettings.tableOpenPageSize = 3;
|
||||
backend.documentFindDocuments
|
||||
.mockResolvedValueOnce(documentResult(1, 3, 11))
|
||||
.mockResolvedValueOnce(documentResult(4, 3, 11))
|
||||
|
||||
Reference in new issue
Block a user