in frontend/apps/quantgrid/src/app/hooks/ManualEditDSL/useManualAddTableRowDSL.ts [9:136]
export function useManualAddTableRowDSL() {
const { sheetContent } = useContext(ProjectContext);
const gridApi = useGridApi();
const { findTable } = useDSLUtils();
const { createSingleValueManualTable } = useManualCreateEntityDSL();
const { addOverride } = useOverridesManualEditDSL();
const addTableRow = useCallback(
(col: number, row: number, tableName: string, value: string) => {
if (!sheetContent) return;
const targetTable = findTable(tableName);
if (!targetTable || !targetTable.isManual())
return createSingleValueManualTable(col, row, value);
const [startRow, startCol] = targetTable.getPlacement();
const isHorizontal = targetTable.getIsTableDirectionHorizontal();
const offset = targetTable.getIsTableHeaderHidden() ? 0 : 1;
const cell = gridApi?.getCell(
isHorizontal ? startCol : col,
isHorizontal ? row : startRow + offset
);
const targetField = targetTable.fields.find(
(f) =>
f.key.fieldName === cell?.field?.fieldName &&
f.key.tableName === cell.table?.tableName
);
if (!targetField) return;
return addOverride(col, row, tableName, value);
},
[
addOverride,
createSingleValueManualTable,
findTable,
gridApi,
sheetContent,
]
);
const addTableRowToEnd = useCallback(
(tableName: string, value: string) => {
if (!sheetContent) return;
const targetTable = findTable(tableName);
if (!targetTable || !targetTable.isManual()) return;
const [startRow, startCol] = targetTable.getPlacement();
const cell = gridApi?.getCell(startCol, startRow);
const table = cell?.table;
if (!table?.endCol || !table?.endRow) return;
const isHorizontal = targetTable.getIsTableDirectionHorizontal();
return addOverride(
isHorizontal ? table.endCol + 1 : table.endCol,
isHorizontal ? table.endRow : table.endRow + 1,
tableName,
value
);
},
[addOverride, findTable, gridApi, sheetContent]
);
const insertTableRowBefore = useCallback(
(col: number, row: number, tableName: string, value: string) => {
if (!sheetContent) return;
const targetTable = findTable(tableName);
if (!targetTable || !targetTable.isManual()) return;
const cell = gridApi?.getCell(col, row);
const targetField = targetTable.fields.find(
(f) =>
f.key.fieldName === cell?.field?.fieldName &&
f.key.tableName === cell.table?.tableName
);
if (!targetField) return;
return addOverride(col, row, tableName, value, true);
},
[addOverride, findTable, gridApi, sheetContent]
);
const insertTableRowAfter = useCallback(
(col: number, row: number, tableName: string, value: string) => {
if (!sheetContent) return;
const targetTable = findTable(tableName);
if (!targetTable || !targetTable.isManual()) return;
const isHorizontal = targetTable.getIsTableDirectionHorizontal();
const cell = gridApi?.getCell(col, row);
const targetField = targetTable.fields.find(
(f) =>
f.key.fieldName === cell?.field?.fieldName &&
f.key.tableName === cell.table?.tableName
);
if (!targetField) return;
return addOverride(
isHorizontal ? col + 1 : col,
isHorizontal ? row : row + 1,
tableName,
value,
true
);
},
[addOverride, findTable, gridApi, sheetContent]
);
return {
addTableRow,
addTableRowToEnd,
insertTableRowBefore,
insertTableRowAfter,
};
}