Skip to content

Commit 4851062

Browse files
committed
refactor: improve naming, consistency and clean up
1 parent bb74b16 commit 4851062

File tree

7 files changed

+26
-47
lines changed

7 files changed

+26
-47
lines changed

packages/pluggableWidgets/datagrid-web/src/components/ColumnContainer.tsx

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,31 +14,30 @@ export const ColumnContainer = observer(function ColumnContainer(props: ColumnCo
1414
const { columnsFilterable, id: gridId } = useDatagridConfig();
1515
const { columnFilters } = useColumnsStore();
1616
const { canSort, columnId, setHeaderElementRef, columnIndex, canResize, sortDir, header } = useColumn();
17-
const { draggableProps, dropTarget, dragging } = useColumnHeaderVM();
18-
17+
const vm = useColumnHeaderVM();
1918
const caption = header.trim();
2019

2120
return (
2221
<div
2322
aria-sort={getAriaSort(canSort, sortDir)}
2423
className={classNames("th", {
25-
[`drop-${dropTarget?.[1]}`]: columnId === dropTarget?.[0],
26-
dragging: columnId === dragging?.[1],
27-
"dragging-over-self": columnId === dragging?.[1] && !dropTarget
24+
[`drop-${vm.dropTarget?.[1]}`]: columnId === vm.dropTarget?.[0],
25+
dragging: columnId === vm.dragging?.[1],
26+
"dragging-over-self": columnId === vm.dragging?.[1] && !vm.dropTarget
2827
})}
2928
role="columnheader"
3029
style={!canSort ? { cursor: "unset" } : undefined}
3130
title={caption}
3231
ref={ref => setHeaderElementRef(ref)}
3332
data-column-id={columnId}
34-
onDrop={draggableProps.onDrop}
35-
onDragEnter={draggableProps.onDragEnter}
36-
onDragOver={draggableProps.onDragOver}
33+
onDrop={vm.handleOnDrop}
34+
onDragEnter={vm.handleDragEnter}
35+
onDragOver={vm.handleDragOver}
3736
>
3837
<div className={classNames("column-container")} id={`${gridId}-column${columnId}`}>
3938
<ColumnHeader />
4039
{columnsFilterable && (
41-
<div className="filter" style={{ pointerEvents: dragging ? "none" : undefined }}>
40+
<div className="filter" style={{ pointerEvents: vm.dragging ? "none" : undefined }}>
4241
{columnFilters[columnIndex]?.renderFilterWidgets()}
4342
</div>
4443
)}

packages/pluggableWidgets/datagrid-web/src/components/ColumnHeader.tsx

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,24 +13,20 @@ interface DragHandleProps {
1313
}
1414

1515
export const ColumnHeader = observer(function ColumnHeader(): ReactElement {
16-
const { draggableProps, dragging } = useColumnHeaderVM();
1716
const { header, canSort, alignment, toggleSort } = useColumn();
1817
const caption = header.trim();
1918
const sortProps = canSort ? getSortProps(toggleSort) : null;
19+
const vm = useColumnHeaderVM();
2020

2121
return (
2222
<div
2323
className={classNames("column-header", { clickable: canSort }, `align-column-${alignment}`)}
24-
style={{ pointerEvents: dragging ? "none" : undefined }}
24+
style={{ pointerEvents: vm.dragging ? "none" : undefined }}
2525
{...sortProps}
2626
aria-label={canSort ? "sort " + caption : caption}
2727
>
28-
{draggableProps.draggable && (
29-
<DragHandle
30-
draggable={draggableProps.draggable}
31-
onDragStart={draggableProps.onDragStart}
32-
onDragEnd={draggableProps.onDragEnd}
33-
/>
28+
{vm.isDraggable && (
29+
<DragHandle draggable={vm.isDraggable} onDragStart={vm.handleDragStart} onDragEnd={vm.handleDragEnd} />
3430
)}
3531
<span className="column-caption">{caption.length > 0 ? caption : "\u00a0"}</span>
3632
{canSort ? <SortIcon /> : null}

packages/pluggableWidgets/datagrid-web/src/features/column/HeaderDragnDrop.store.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
import { action, makeAutoObservable } from "mobx";
22
import { ColumnId } from "../../typings/GridColumn";
33

4+
/**
5+
* MobX store for managing drag & drop state of column headers.
6+
* Tracks which column is being dragged and where it can be dropped.
7+
* @injectable
8+
*/
49
export class HeaderDragnDropStore {
510
private _dragOver: [ColumnId, "before" | "after"] | undefined = undefined;
611
private _isDragging: [ColumnId | undefined, ColumnId, ColumnId | undefined] | undefined = undefined;

packages/pluggableWidgets/datagrid-web/src/features/column/HeaderDragnDrop.viewModel.ts

Lines changed: 2 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
import { makeAutoObservable } from "mobx";
2-
import { DragEvent, DragEventHandler } from "react";
2+
import { DragEvent } from "react";
33
import { HeaderDragnDropStore } from "./HeaderDragnDrop.store";
44
import { ColumnId, GridColumn } from "../../typings/GridColumn";
55
import { ColumnGroupStore } from "../../helpers/state/ColumnGroupStore";
66

77
/**
88
* View model for a single column header drag & drop interactions.
99
* Encapsulates previous `useDraggable` hook logic and uses MobX store for shared drag state.
10+
* @injectable
1011
*/
1112
export class HeaderDragnDropViewModel {
1213
constructor(
@@ -30,28 +31,6 @@ export class HeaderDragnDropViewModel {
3031
return this.config.columnsDraggable && this.column.canDrag;
3132
}
3233

33-
/** Handlers exposed to the component. */
34-
get draggableProps(): {
35-
draggable?: boolean;
36-
onDragStart?: DragEventHandler;
37-
onDragOver?: DragEventHandler;
38-
onDrop?: DragEventHandler;
39-
onDragEnter?: DragEventHandler;
40-
onDragEnd?: DragEventHandler;
41-
} {
42-
if (!this.isDraggable) {
43-
return {};
44-
}
45-
return {
46-
draggable: true,
47-
onDragStart: this.handleDragStart,
48-
onDragOver: this.handleDragOver,
49-
onDrop: this.handleOnDrop,
50-
onDragEnter: this.handleDragEnter,
51-
onDragEnd: this.handleDragEnd
52-
};
53-
}
54-
5534
handleDragStart = (e: DragEvent<HTMLDivElement>): void => {
5635
const elt = (e.target as HTMLDivElement).closest(".th") as HTMLDivElement;
5736
if (!elt) {

packages/pluggableWidgets/datagrid-web/src/model/containers/Datagrid.container.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import { createCellEventsController } from "../../features/row-interaction/CellE
2222
import { creteCheckboxEventsController } from "../../features/row-interaction/CheckboxEventsController";
2323
import { SelectAllModule } from "../../features/select-all/SelectAllModule.container";
2424
import { ColumnGroupStore } from "../../helpers/state/ColumnGroupStore";
25+
import { HeaderDragnDropStore } from "../../features/column/HeaderDragnDrop.store";
2526
import { HeaderDragnDropViewModel } from "../../features/column/HeaderDragnDrop.viewModel";
2627
import { GridBasicData } from "../../helpers/state/GridBasicData";
2728
import { GridPersonalizationStore } from "../../helpers/state/GridPersonalizationStore";
@@ -86,6 +87,7 @@ injected(
8687
);
8788

8889
// drag and drop
90+
injected(HeaderDragnDropStore);
8991
injected(HeaderDragnDropViewModel, DG.headerDragDrop, CORE.columnsStore, CORE.config, CORE.column);
9092

9193
export class DatagridContainer extends Container {
@@ -99,7 +101,9 @@ export class DatagridContainer extends Container {
99101
// Columns store
100102
this.bind(CORE.columnsStore).toInstance(ColumnGroupStore).inSingletonScope();
101103
// Drag and Drop store
102-
this.bind(DG.columnHeaderVM).toInstance(HeaderDragnDropViewModel).inSingletonScope();
104+
this.bind(DG.headerDragDrop).toInstance(HeaderDragnDropStore).inSingletonScope();
105+
// Drag and Drop view model
106+
this.bind(DG.headerDragnDropVM).toInstance(HeaderDragnDropViewModel).inSingletonScope();
103107
// Query service
104108
this.bind(DG.query).toInstance(DatasourceService).inSingletonScope();
105109
// Pagination service
@@ -170,9 +174,6 @@ export class DatagridContainer extends Container {
170174
// Config
171175
this.bind(CORE.config).toConstant(config);
172176

173-
// Columns draggable setting
174-
this.bind(DG.columnsDraggable).toConstant(config.columnsDraggable);
175-
176177
// Connect select all module
177178
this.bind(SA_TOKENS.progressService).toConstant(selectAllModule.get(SA_TOKENS.progressService));
178179
this.bind(SA_TOKENS.selectionDialogVM).toConstant(selectAllModule.get(SA_TOKENS.selectionDialogVM));

packages/pluggableWidgets/datagrid-web/src/model/hooks/injection-hooks.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ export const [useRowClass] = createInjectionHooks(DG.rowClass);
2020
export const [useDatagridRootVM] = createInjectionHooks(DG.datagridRootVM);
2121
export const [useRows] = createInjectionHooks(CORE.rows);
2222
export const [useSelectActions] = createInjectionHooks(DG.selectActions);
23-
export const [useColumnHeaderVM] = createInjectionHooks(DG.columnHeaderVM);
23+
export const [useColumnHeaderVM] = createInjectionHooks(DG.headerDragnDropVM);
2424
export const [useClickActionHelper] = createInjectionHooks(DG.clickActionHelper);
2525
export const [useFocusService] = createInjectionHooks(DG.focusService);
2626
export const [useCheckboxEventsHandler] = createInjectionHooks(DG.checkboxEventsHandler);

packages/pluggableWidgets/datagrid-web/src/model/tokens.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -134,8 +134,7 @@ export const DG_TOKENS = {
134134
focusService: token<FocusTargetController>("@service:FocusTargetController"),
135135
checkboxEventsHandler: token<CheckboxEventsController>("@service:CheckboxEventsController"),
136136
headerDragDrop: token<HeaderDragnDropStore>("@store:HeaderDragnDropStore"),
137-
columnsDraggable: token<boolean>("@const:columnsDraggable"),
138-
columnHeaderVM: token<HeaderDragnDropViewModel>("ColumnHeaderViewModel"),
137+
headerDragnDropVM: token<HeaderDragnDropViewModel>("@viewmodel:ColumnHeaderViewModel"),
139138
cellEventsHandler: token<CellEventsController>("@service:CellEventsController")
140139
};
141140

0 commit comments

Comments
 (0)