in frontend/libs/spreadsheet/src/lib/components/contextMenu/useOnClickContextMenu.ts [21:182]
export function useOnClickContextMenu({
gridServiceRef,
gridCallbacksRef,
api,
}: Props) {
const onClickContextMenu = useCallback(
(info: MenuInfo) => {
if (!api) return;
const { action, col, row } = JSON.parse(info.key);
const currentCell = gridServiceRef.current?.getCellValue(row, col);
const headerCell = gridServiceRef.current?.getCellValue(row - 1, col);
switch (action) {
case spreadsheetMenuKeys.renameTable:
case spreadsheetMenuKeys.renameField:
api.cellEditorEvent$.next({
type: GridCellEditorEventType.Rename,
col,
row,
});
break;
case spreadsheetMenuKeys.editFormula:
api.cellEditorEvent$.next({
type: GridCellEditorEventType.Edit,
col,
row,
});
break;
case spreadsheetMenuKeys.deleteTable:
if (currentCell?.value) {
gridCallbacksRef.current.onDeleteTable?.(currentCell.value);
}
break;
case spreadsheetMenuKeys.deleteField:
if (currentCell?.value && headerCell?.value) {
gridCallbacksRef.current.onDeleteField?.(
headerCell.value,
currentCell.value
);
}
break;
case spreadsheetMenuKeys.swapLeft:
swapFields(api, gridServiceRef, gridCallbacksRef, 'left');
break;
case spreadsheetMenuKeys.swapRight:
swapFields(api, gridServiceRef, gridCallbacksRef, 'right');
break;
case spreadsheetMenuKeys.createDerivedTable:
if (currentCell?.value) {
gridCallbacksRef.current.onCreateDerivedTable?.(currentCell.value);
}
break;
case spreadsheetMenuKeys.moveTable:
if (currentCell?.table) {
const { startCol, startRow } = currentCell.table;
api.updateSelection({
startCol,
startRow,
endCol: startCol,
endRow: startRow,
});
focusSpreadsheet();
api.sendSelectionEvent({
type: GridSelectionShortcutType.SelectAll,
});
}
break;
case spreadsheetMenuKeys.addKey:
if (currentCell?.value && headerCell?.value) {
gridCallbacksRef.current.onAddKey?.(
headerCell.value,
currentCell.value
);
}
break;
case spreadsheetMenuKeys.removeKey:
if (currentCell?.value && headerCell?.value) {
gridCallbacksRef.current.onRemoveKey?.(
headerCell.value,
currentCell.value
);
}
break;
case spreadsheetMenuKeys.addDimension:
if (currentCell?.value && headerCell?.value) {
gridCallbacksRef.current.onAddDimension?.(
headerCell.value,
currentCell.value
);
}
break;
case spreadsheetMenuKeys.removeDimension:
if (currentCell?.value && headerCell?.value) {
gridCallbacksRef.current.onRemoveDimension?.(
headerCell.value,
currentCell.value
);
}
break;
case spreadsheetMenuKeys.addOverride:
case spreadsheetMenuKeys.editOverride:
if (currentCell?.field?.isKey) {
gridCallbacksRef.current.onCellEditorMessage?.(
overrideKeyFieldMessage
);
} else {
const type =
action === spreadsheetMenuKeys.addOverride
? GridCellEditorEventType.AddOverride
: GridCellEditorEventType.EditOverride;
api.cellEditorEvent$.next({
type,
col,
row,
});
}
break;
case spreadsheetMenuKeys.removeOverride:
if (
currentCell?.table?.tableName &&
currentCell?.field?.fieldName &&
currentCell.overrideIndex !== undefined &&
currentCell?.value
) {
gridCallbacksRef.current.onRemoveOverride?.(
currentCell.table.tableName,
currentCell.field?.fieldName,
currentCell.overrideIndex,
currentCell?.value
);
}
break;
case spreadsheetMenuKeys.addChart:
if (currentCell?.table?.tableName) {
gridCallbacksRef.current.onAddChart?.(currentCell.table.tableName);
}
break;
case spreadsheetMenuKeys.convertToChart:
if (currentCell?.table?.tableName) {
gridCallbacksRef.current.onConvertToChart?.(
currentCell.table.tableName
);
}
break;
case spreadsheetMenuKeys.convertToTable:
if (currentCell?.table?.tableName) {
gridCallbacksRef.current.onConvertToTable?.(
currentCell.table.tableName
);
}
break;
}
},
[api, gridCallbacksRef, gridServiceRef]
);
return {
onClickContextMenu,
};
}