Skip to content

Commit

Permalink
SURVEY-17202 adding the ability to place a cell in editing mode
Browse files Browse the repository at this point in the history
  • Loading branch information
fspringveldt committed Jun 14, 2023
1 parent 0bf87d4 commit efad21f
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 1 deletion.
4 changes: 4 additions & 0 deletions src/contexts/GridContext.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ export interface GridContextType<RowType extends GridBaseRow> {
autoSizeColumns: (props?: AutoSizeColumnsProps) => AutoSizeColumnsResult;
sizeColumnsToFit: () => void;
cancelEdit: () => void;
startEditing: ({ rowId, colId, rowPinned }: { rowId: number; colId: string; rowPinned?: "top" | "bottom" }) => void;
stopEditing: () => void;
updatingCells: (
props: { selectedRows: GridBaseRow[]; field?: string },
Expand Down Expand Up @@ -147,6 +148,9 @@ export const GridContext = createContext<GridContextType<any>>({
cancelEdit: () => {
console.error("no context provider for cancelEdit");
},
startEditing: () => {
console.error("no context provider for startEditing");
},
stopEditing: () => {
console.error("no context provider for stopEditing");
},
Expand Down
37 changes: 36 additions & 1 deletion src/contexts/GridContextProvider.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ interface GridContextProps {
* Also, make sure the provider is created in a separate component, otherwise it won't be found.
*/
export const GridContextProvider = <RowType extends GridBaseRow>(props: GridContextProps): ReactElement => {
const { modifyUpdating } = useContext(GridUpdatingContext);
const { modifyUpdating, checkUpdating } = useContext(GridUpdatingContext);
const [gridApi, setGridApi] = useState<GridApi>();
const [columnApi, setColumnApi] = useState<ColumnApi>();
const [gridReady, setGridReady] = useState(false);
Expand Down Expand Up @@ -377,6 +377,40 @@ export const GridContextProvider = <RowType extends GridBaseRow>(props: GridCont
gridApi.stopEditing();
}, [gridApi]);

const startEditing = useCallback(
async ({ rowId, colId, rowPinned }: { rowId: number; colId: string; rowPinned?: "top" | "bottom" }) => {
if (!gridApi) return;

const colDef = gridApi.getColumnDef(colId);
if (!colDef) return;

// Cell already being edited, so don't re-edit until finished
if (checkUpdating([colDef.field ?? ""], rowId)) {
return;
}

selectRowsById([rowId]);
prePopupOps();

const rowIndex = gridApi.getRowNode(`${rowId}`)?.rowIndex;
if (rowIndex != null) {
const focusAndEdit = () => {
gridApi.setFocusedCell(rowIndex, colId, rowPinned);
gridApi.startEditingCell({
rowIndex,
colKey: colId,
rowPinned,
});
};
focusAndEdit();
if (!gridApi.getEditingCells().length) {
wait(200).then(focusAndEdit);
}
}
},
[checkUpdating, gridApi, prePopupOps, selectRowsById],
);

/**
* This differs from stopEdit in that it will also invoke cellEditingCompleteCallback
*/
Expand Down Expand Up @@ -618,6 +652,7 @@ export const GridContextProvider = <RowType extends GridBaseRow>(props: GridCont
ensureSelectedRowIsVisible,
sizeColumnsToFit,
autoSizeColumns,
startEditing,
stopEditing,
cancelEdit,
updatingCells,
Expand Down

0 comments on commit efad21f

Please sign in to comment.