diff --git a/packages/datalib/src/GridDisplay.ts b/packages/datalib/src/GridDisplay.ts index 714da9384..c3aba307e 100644 --- a/packages/datalib/src/GridDisplay.ts +++ b/packages/datalib/src/GridDisplay.ts @@ -115,6 +115,10 @@ export abstract class GridDisplay { return this.getColumns(null).filter(col => col.isChecked || col.uniquePath.length == 1); } + getFkTarget(column: DisplayColumn): TableInfo { + return null; + } + reload() { this.setCache(reloadDataCacheFunc); } diff --git a/packages/web/src/datagrid/DataGridCore.svelte b/packages/web/src/datagrid/DataGridCore.svelte index 15aa8aae0..1ed050ad3 100644 --- a/packages/web/src/datagrid/DataGridCore.svelte +++ b/packages/web/src/datagrid/DataGridCore.svelte @@ -453,13 +453,37 @@ }, }); } + for (const column of display.columns) { + if (column.uniquePath.length > 1) continue; + if (column.isExpandable) { + const table = display.getFkTarget(column); + if (!table) continue; + + for (const childColumn of table.columns) { + res.push({ + text: `${column.columnName}.${childColumn.columnName}`, + onClick: async () => { + const uniquePath = [...column.uniquePath, childColumn.columnName]; + display.setColumnVisibility(uniquePath, true); + display.toggleExpandedColumn(column.uniqueName, true); + await tick(); + const invMap = _.invert(realColumnUniqueNames); + const colIndex = invMap[uniquePath.join('.')]; + scrollIntoView([null, colIndex]); + + currentCell = [currentCell[0], parseInt(colIndex)]; + selectedCells = [currentCell]; + }, + }); + } + } + } return res; } export function hideColumn() { const columnIndexes = _.uniq(selectedCells.map(x => x[1])); for (const index of columnIndexes) { - console.log('visibleRealColumns[index].uniquePath', visibleRealColumns[index].uniquePath); display.setColumnVisibility(visibleRealColumns[index].uniquePath, false); } // selectedCells = [currentCell];