Skip to content

Commit

Permalink
[useColumnReorder] Fix review comments
Browse files Browse the repository at this point in the history
  • Loading branch information
DanailH committed Aug 18, 2020
1 parent 25d8c0e commit 33f6bd5
Show file tree
Hide file tree
Showing 5 changed files with 25 additions and 8 deletions.
Expand Up @@ -38,7 +38,7 @@ export const ColumnHeaderItem = React.memo(
}

const onResize = onResizeColumn ? () => onResizeColumn(column) : undefined;
const onDragStart = onColumnDragStart ? (e) => onColumnDragStart(column, e.target) : undefined;
const onDragStart = onColumnDragStart ? (event) => onColumnDragStart(column, event.target) : undefined;
const onDragEnter = onColumnDragEnter ? () => onColumnDragEnter(column) : undefined;

const width = column.width!;
Expand Down
Expand Up @@ -155,11 +155,10 @@ export const RootStyle = styled.div<GridRootProps>`
padding: 12px;
}
.dragging {
background: gray;
color: white;
background: #f9f9f9;
padding: 0 12px;
border-radius: 10px;
opacity: 0.3;
opacity: 0.4;
}
}
&.scroll .material-col-cell:last-child {
Expand Down
3 changes: 3 additions & 0 deletions packages/grid/x-grid-modules/src/constants/eventsConstants.ts
Expand Up @@ -29,6 +29,9 @@ export const SCROLLING_STOP = 'scrolling:stop';
export const COL_RESIZE_START = 'colResizing:start';
export const COL_RESIZE_STOP = 'colResizing:stop';

export const COL_REORDER_START = 'colReordering:start';
export const COL_REORDER_STOP = 'colReordering:stop';

export const ROWS_UPDATED = 'rowsUpdated';
export const COLUMNS_UPDATED = 'columnsUpdated';

Expand Down
Expand Up @@ -2,6 +2,17 @@ import * as React from 'react';
import { ColDef } from '../../models/colDef';
import { useLogger } from '../utils';
import { ApiRef } from '../../models';
import { COL_REORDER_START, COL_REORDER_STOP } from '../../constants/eventsConstants';

const reorderColDefArray = (
columns: ColDef[],
newColIndex: number,
oldColIndex: number
): ColDef[] => {
const columnsClone = JSON.parse(JSON.stringify(columns))

return columnsClone.splice(newColIndex, 0, columnsClone.splice(oldColIndex, 1)[0]);
};

export const useColumnReorder = (
apiRef: ApiRef
Expand All @@ -14,9 +25,11 @@ export const useColumnReorder = (
const handleDragStart = React.useCallback(
(col: ColDef, htmlEl: any): void => {
logger.debug(`Start dragging col ${col.field}`);
apiRef.current.publishEvent(COL_REORDER_START);

dragCol.current = col;
dragColNode.current = htmlEl;
dragColNode.current?.addEventListener('dragend', handleDragEnd);
dragColNode.current?.addEventListener('dragend', handleDragEnd, { once: true });
dragColNode.current?.classList.add('dragging');
setTimeout(() => {
dragColNode.current?.classList.remove('dragging');
Expand All @@ -39,9 +52,9 @@ export const useColumnReorder = (
rowIndex: 0
});

columnsSnapshot.splice(targetColIndex, 0, columnsSnapshot.splice(dragColIndex, 1)[0]);
const columnsReordered = reorderColDefArray(columnsSnapshot, targetColIndex, dragColIndex);

apiRef.current.updateColumns(columnsSnapshot, true);
apiRef.current.updateColumns(columnsReordered, true);
}
},
[apiRef, logger]
Expand All @@ -50,6 +63,7 @@ export const useColumnReorder = (
const handleDragEnd = React.useCallback(
(): void => {
logger.debug(`End dragging col ${dragCol.current!.field}`);
apiRef.current.publishEvent(COL_REORDER_STOP);

dragColNode.current?.removeEventListener('dragend', handleDragEnd);
dragCol.current = null;
Expand Down
3 changes: 2 additions & 1 deletion packages/grid/x-grid-modules/src/models/api/columnApi.ts
Expand Up @@ -51,6 +51,7 @@ export interface ColumnApi {
* Allows to batch update multiple columns at the same time.
*
* @param cols [[ColDef[]]]
* @param resetState
*/
updateColumns: (cols: ColDef[], resetState: boolean) => void;
updateColumns: (cols: ColDef[], resetState?: boolean) => void;
}

0 comments on commit 33f6bd5

Please sign in to comment.