@adaptabletools/adaptable
Version:
Powerful AG Grid extension which provides advanced, cutting-edge functionality to meet all DataGrid requirements
37 lines (36 loc) • 1.47 kB
JavaScript
function insertAtCorrectIndex(result, colState, visibleColumnsIndexes, offset = 0, lastVisibleOffset = 0) {
const prevColState = result[result.length - 1 - offset];
if (!prevColState) {
result.splice(result.length - lastVisibleOffset, 0, colState);
return;
}
if (prevColState.hide) {
insertAtCorrectIndex(result, colState, visibleColumnsIndexes, offset + 1, lastVisibleOffset);
return;
}
const prevCol_visibilityIndex = visibleColumnsIndexes[prevColState.colId];
const currentCol_visibilityIndex = visibleColumnsIndexes[colState.colId];
if (currentCol_visibilityIndex < prevCol_visibilityIndex) {
insertAtCorrectIndex(result, colState, visibleColumnsIndexes, offset + 1, offset + 1);
}
else {
result.splice(result.length - lastVisibleOffset, 0, colState);
}
}
export function sortColumnStateForVisibleColumns(columnState, visibleColumns) {
const visibleColumnsIndexes = visibleColumns.reduce((acc, colId, index) => {
acc[colId] = index;
return acc;
}, {});
const result = [];
for (let i = 0, len = columnState.length; i < len; i++) {
const colState = columnState[i];
const colVisible = visibleColumnsIndexes[colState.colId] != null;
if (!colVisible) {
result.push(colState);
continue;
}
insertAtCorrectIndex(result, colState, visibleColumnsIndexes);
}
return result;
}