UNPKG

devextreme

Version:

HTML5 JavaScript Component Suite for Responsive Web Development

188 lines (186 loc) • 7.57 kB
/** * DevExtreme (cjs/__internal/grids/grid_core/selection/m_selection.integration.test.js) * Version: 25.1.5 * Build date: Wed Sep 03 2025 * * Copyright (c) 2012 - 2025 Developer Express Inc. ALL RIGHTS RESERVED * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/ */ "use strict"; var _globals = require("@jest/globals"); var _data = require("../../../../common/data"); var _renderer = _interopRequireDefault(require("../../../../core/renderer")); var _data_grid = _interopRequireDefault(require("../../../../ui/data_grid")); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e } } const SELECTORS = { gridContainer: "#gridContainer", detailCell: "dx-master-detail-cell", detailContainer: "dx-datagrid-master-detail-container" }; const GRID_CONTAINER_ID = "gridContainer"; const createDataGrid = async function() { let options = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}; return new Promise((resolve => { const $container = (0, _renderer.default)("<div>").attr("id", "gridContainer").appendTo(document.body); const instance = new _data_grid.default($container.get(0), options); const contentReadyHandler = () => { resolve({ $container: $container, instance: instance }); instance.off("contentReady", contentReadyHandler) }; instance.on("contentReady", contentReadyHandler) })) }; (0, _globals.describe)("GridCore selection", (() => { (0, _globals.afterEach)((() => { const $container = (0, _renderer.default)(SELECTORS.gridContainer); const dataGrid = $container.dxDataGrid("instance"); dataGrid.dispose(); $container.remove() })); (0, _globals.describe)("selectionChanged handler", (() => { [true, false].forEach((repaintChangesOnly => { (0, _globals.it)(`selectRowKeys are updated after refresh if selectedItem is not in dataSource anymore with repaintChangesOnly=${repaintChangesOnly}`, (async () => { const dataSource = [{ id: 1, name: "Item 1" }, { id: 2, name: "Item 2" }]; const { instance: instance } = await createDataGrid({ dataSource: dataSource, columns: ["id", "name"], keyExpr: "id", selection: { mode: "single" }, repaintChangesOnly: repaintChangesOnly }); await instance.selectRows([2], false); (0, _globals.expect)(instance.getSelectedRowKeys()).toEqual([2]); dataSource.splice(1, 1); await instance.refresh(repaintChangesOnly); (0, _globals.expect)(instance.getSelectedRowKeys()).toEqual([]) })); (0, _globals.it)(`selectionChanged handler is not called after refresh if selectedItem still present in dataSource with repaintChangesOnly=${repaintChangesOnly}`, (async () => { const dataSource = [{ id: 1, name: "Item 1" }, { id: 2, name: "Item 2" }]; let selectionChangedCount = 0; const { instance: instance } = await createDataGrid({ dataSource: dataSource, columns: ["id", "name"], keyExpr: "id", selection: { mode: "single" }, repaintChangesOnly: repaintChangesOnly, onSelectionChanged: () => { selectionChangedCount += 1 } }); await instance.selectRows([1], false); (0, _globals.expect)(instance.getSelectedRowKeys()).toEqual([1]); (0, _globals.expect)(selectionChangedCount).toBe(1); dataSource.splice(1, 1); await instance.refresh(repaintChangesOnly); (0, _globals.expect)(instance.getSelectedRowKeys()).toEqual([1]); (0, _globals.expect)(selectionChangedCount).toBe(1) })) })) })); (0, _globals.describe)("remote dataSource", (() => { [{ refreshMode: "full", expectedCallCount: 2 }, { refreshMode: "reshape", expectedCallCount: 1 }, { refreshMode: "repaint", expectedCallCount: 0 }].forEach((_ref => { let { refreshMode: refreshMode, expectedCallCount: expectedCallCount } = _ref; (0, _globals.it)(`dataSource.load is not called to load selectedRow after data save with editing.refreshMode=${refreshMode}`, (async () => { let data = [{ id: 1, name: "Item 1" }, { id: 2, name: "Item 2" }, { id: 3, name: "Item 3" }, { id: 4, name: "Item 4" }]; const store = new _data.CustomStore({ key: "id", load: e => { const skip = e.skip ?? 0; const take = e.take ?? data.length; const pageData = data.slice(skip, skip + take); return Promise.resolve({ data: pageData, totalCount: data.length }) }, remove(key) { data = data.filter((item => item.id !== key)); return Promise.resolve() } }); const { instance: instance } = await createDataGrid({ dataSource: store, editing: { mode: "batch", refreshMode: refreshMode, allowDeleting: true }, remoteOperations: true, paging: { pageSize: 2 }, columns: ["id", "name"], keyExpr: "id", selection: { mode: "multiple", showCheckBoxesMode: "always" } }); await instance.selectRows([4], false); let callCount = 0; store.on("loading", (() => { callCount += 1 })); instance.option("editing.changes", [{ type: "remove", key: 1 }]); await instance.saveEditData(); (0, _globals.expect)(callCount).toBe(expectedCallCount) })) })) })) }));