fix: исправлено выделение строк через чекбокс в заголовке и убрана лишняя кнопка

- Удалена кнопка "Выделить страницу" (дублирует функционал чекбокса в заголовке)
- Исправлен обработчик rowSelectionChanged - теперь корректно обрабатывает выделение через header checkbox
- Изменен подход: при каждом изменении выделения обновляется вся коллекция selectedRowsData
- Добавлена синхронизация выделенных строк между страницами
- Исправлена ошибка "строки не выбраны" при удалении после выделения через header checkbox
This commit is contained in:
2026-01-21 04:26:00 +03:00
parent 92a5c0040c
commit bd96348850
2 changed files with 14 additions and 18 deletions

View File

@@ -271,18 +271,23 @@ async function selectTable(schema, tableName) {
}; };
}, },
// Обработка выделения строк // ✅ ИСПРАВЛЕНО: Обработка выделения строк
rowSelectionChanged: function(data, rows) { rowSelectionChanged: function(data, rows) {
// Добавляем/удаляем строки из глобального хранилища // Синхронизируем selectedRowsData с текущим состоянием ВСЕХ выделенных строк
rows.forEach(row => { // data - это массив данных ВСЕХ выбранных строк
// Сначала удаляем все строки с текущей страницы из selectedRowsData
const currentPageRows = this.getRows();
currentPageRows.forEach(row => {
const rowData = row.getData(); const rowData = row.getData();
const key = getRowKey(rowData); const key = getRowKey(rowData);
if (row.isSelected()) {
selectedRowsData.set(key, rowData);
} else {
selectedRowsData.delete(key); selectedRowsData.delete(key);
} });
// Теперь добавляем все выделенные строки обратно
data.forEach(rowData => {
const key = getRowKey(rowData);
selectedRowsData.set(key, rowData);
}); });
updateSelectionCounter(); updateSelectionCounter();
@@ -341,14 +346,6 @@ async function selectTable(schema, tableName) {
document.addEventListener('keydown', enterHandler); document.addEventListener('keydown', enterHandler);
} }
// ✅ ВЫДЕЛИТЬ ВСЕ НА ТЕКУЩЕЙ СТРАНИЦЕ
document.getElementById('btnSelectPage').addEventListener('click', () => {
if (!table) return;
const rows = table.getRows();
rows.forEach(row => row.select());
});
// ✅ ВЫДЕЛИТЬ ВСЕ (НА ВСЕХ СТРАНИЦАХ) // ✅ ВЫДЕЛИТЬ ВСЕ (НА ВСЕХ СТРАНИЦАХ)
document.getElementById('btnSelectAll').addEventListener('click', async () => { document.getElementById('btnSelectAll').addEventListener('click', async () => {
if (!currentSchema || !currentTable || !table) { if (!currentSchema || !currentTable || !table) {

View File

@@ -178,7 +178,6 @@
<button id="btnInsert"> Вставить</button> <button id="btnInsert"> Вставить</button>
<button id="btnDelete">🗑️ Удалить</button> <button id="btnDelete">🗑️ Удалить</button>
<div class="toolbar-divider"></div> <div class="toolbar-divider"></div>
<button id="btnSelectPage">☑️ Выделить страницу</button>
<button id="btnSelectAll">☑️ Выделить все</button> <button id="btnSelectAll">☑️ Выделить все</button>
<button id="btnDeselectAll">⬜ Снять выделение</button> <button id="btnDeselectAll">⬜ Снять выделение</button>
<div class="toolbar-divider"></div> <div class="toolbar-divider"></div>