@reltio/components 1.4.1110 → 1.4.1113
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cjs/components/VerticalHeadingsTable/TableCell/TableCell.d.ts +10 -0
- package/cjs/components/VerticalHeadingsTable/TableCell/TableCell.js +15 -0
- package/cjs/components/VerticalHeadingsTable/TableCellWithDnd/TableCellWithDnd.d.ts +13 -0
- package/cjs/components/VerticalHeadingsTable/TableCellWithDnd/TableCellWithDnd.js +89 -0
- package/cjs/components/VerticalHeadingsTable/TableCellWithDnd/styles.d.ts +1 -0
- package/cjs/components/VerticalHeadingsTable/TableCellWithDnd/styles.js +29 -0
- package/cjs/components/VerticalHeadingsTable/TableColumnDragLayer/TableColumnDragLayer.d.ts +6 -0
- package/cjs/components/VerticalHeadingsTable/TableColumnDragLayer/TableColumnDragLayer.js +56 -0
- package/cjs/components/VerticalHeadingsTable/TableColumnDragLayer/TableColumnDragPreview.d.ts +12 -0
- package/cjs/components/VerticalHeadingsTable/TableColumnDragLayer/TableColumnDragPreview.js +16 -0
- package/cjs/components/VerticalHeadingsTable/TableColumnDragLayer/styles.d.ts +1 -0
- package/cjs/components/VerticalHeadingsTable/TableColumnDragLayer/styles.js +15 -0
- package/cjs/components/VerticalHeadingsTable/TableHeadCell/TableHeadCell.d.ts +16 -0
- package/cjs/components/VerticalHeadingsTable/TableHeadCell/TableHeadCell.js +31 -0
- package/cjs/components/VerticalHeadingsTable/TableHeadCell/styles.d.ts +1 -0
- package/cjs/components/VerticalHeadingsTable/TableHeadCell/styles.js +28 -0
- package/cjs/components/VerticalHeadingsTable/TableRow/TableRow.d.ts +12 -0
- package/cjs/components/VerticalHeadingsTable/TableRow/TableRow.js +22 -0
- package/cjs/components/VerticalHeadingsTable/TableRowWithDnd/TableRowWithDnd.d.ts +13 -0
- package/cjs/components/VerticalHeadingsTable/TableRowWithDnd/TableRowWithDnd.js +78 -0
- package/cjs/components/VerticalHeadingsTable/VerticalHeadingsTable.d.ts +13 -25
- package/cjs/components/VerticalHeadingsTable/VerticalHeadingsTable.js +14 -49
- package/cjs/components/VerticalHeadingsTable/helpers.d.ts +6 -0
- package/cjs/components/VerticalHeadingsTable/helpers.js +13 -0
- package/cjs/components/VerticalHeadingsTable/types.d.ts +19 -0
- package/cjs/components/VerticalHeadingsTable/types.js +8 -0
- package/cjs/components/crosswalks/CrosswalkDragLayer/styles.d.ts +1 -1
- package/cjs/hooks/index.d.ts +1 -0
- package/cjs/hooks/index.js +3 -1
- package/cjs/hooks/useSavedStateForEntityType.d.ts +14 -0
- package/cjs/hooks/useSavedStateForEntityType.js +47 -0
- package/esm/components/VerticalHeadingsTable/TableCell/TableCell.d.ts +10 -0
- package/esm/components/VerticalHeadingsTable/TableCell/TableCell.js +8 -0
- package/esm/components/VerticalHeadingsTable/TableCellWithDnd/TableCellWithDnd.d.ts +13 -0
- package/esm/components/VerticalHeadingsTable/TableCellWithDnd/TableCellWithDnd.js +63 -0
- package/esm/components/VerticalHeadingsTable/TableCellWithDnd/styles.d.ts +1 -0
- package/esm/components/VerticalHeadingsTable/TableCellWithDnd/styles.js +26 -0
- package/esm/components/VerticalHeadingsTable/TableColumnDragLayer/TableColumnDragLayer.d.ts +6 -0
- package/esm/components/VerticalHeadingsTable/TableColumnDragLayer/TableColumnDragLayer.js +33 -0
- package/esm/components/VerticalHeadingsTable/TableColumnDragLayer/TableColumnDragPreview.d.ts +12 -0
- package/esm/components/VerticalHeadingsTable/TableColumnDragLayer/TableColumnDragPreview.js +9 -0
- package/esm/components/VerticalHeadingsTable/TableColumnDragLayer/styles.d.ts +1 -0
- package/esm/components/VerticalHeadingsTable/TableColumnDragLayer/styles.js +12 -0
- package/esm/components/VerticalHeadingsTable/TableHeadCell/TableHeadCell.d.ts +16 -0
- package/esm/components/VerticalHeadingsTable/TableHeadCell/TableHeadCell.js +24 -0
- package/esm/components/VerticalHeadingsTable/TableHeadCell/styles.d.ts +1 -0
- package/esm/components/VerticalHeadingsTable/TableHeadCell/styles.js +25 -0
- package/esm/components/VerticalHeadingsTable/TableRow/TableRow.d.ts +12 -0
- package/esm/components/VerticalHeadingsTable/TableRow/TableRow.js +15 -0
- package/esm/components/VerticalHeadingsTable/TableRowWithDnd/TableRowWithDnd.d.ts +13 -0
- package/esm/components/VerticalHeadingsTable/TableRowWithDnd/TableRowWithDnd.js +55 -0
- package/esm/components/VerticalHeadingsTable/VerticalHeadingsTable.d.ts +13 -25
- package/esm/components/VerticalHeadingsTable/VerticalHeadingsTable.js +15 -47
- package/esm/components/VerticalHeadingsTable/helpers.d.ts +6 -0
- package/esm/components/VerticalHeadingsTable/helpers.js +8 -0
- package/esm/components/VerticalHeadingsTable/types.d.ts +19 -0
- package/esm/components/VerticalHeadingsTable/types.js +5 -0
- package/esm/components/crosswalks/CrosswalkDragLayer/styles.d.ts +1 -1
- package/esm/hooks/index.d.ts +1 -0
- package/esm/hooks/index.js +1 -0
- package/esm/hooks/useSavedStateForEntityType.d.ts +14 -0
- package/esm/hooks/useSavedStateForEntityType.js +43 -0
- package/package.json +3 -3
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
export declare enum DndItemTypes {
|
|
3
|
+
Column = "Column",
|
|
4
|
+
Row = "Row"
|
|
5
|
+
}
|
|
6
|
+
export declare type RowData = {
|
|
7
|
+
id: string;
|
|
8
|
+
label: string;
|
|
9
|
+
cellRenderer?: (props: {
|
|
10
|
+
value: unknown;
|
|
11
|
+
}) => JSX.Element;
|
|
12
|
+
headCellRenderer?: (props: Pick<RowData, 'label' | 'attributeType'>) => JSX.Element;
|
|
13
|
+
[key: string]: unknown;
|
|
14
|
+
};
|
|
15
|
+
export declare type ColumnData = {
|
|
16
|
+
id: string;
|
|
17
|
+
isDraggable?: boolean;
|
|
18
|
+
[key: string]: any;
|
|
19
|
+
};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DndItemTypes = void 0;
|
|
4
|
+
var DndItemTypes;
|
|
5
|
+
(function (DndItemTypes) {
|
|
6
|
+
DndItemTypes["Column"] = "Column";
|
|
7
|
+
DndItemTypes["Row"] = "Row";
|
|
8
|
+
})(DndItemTypes = exports.DndItemTypes || (exports.DndItemTypes = {}));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const useStyles: (props?: any) => import("@material-ui/core/styles/withStyles").ClassNameMap<"
|
|
1
|
+
export declare const useStyles: (props?: any) => import("@material-ui/core/styles/withStyles").ClassNameMap<"dragLayer" | "sourceIcon" | "crosswalkPreview" | "sourceLabel">;
|
package/cjs/hooks/index.d.ts
CHANGED
|
@@ -21,4 +21,5 @@ export { useMarkAsNotMatchRequest } from './useMarkAsNotMatchRequest';
|
|
|
21
21
|
export { useCustomScripts } from './useCustomScripts';
|
|
22
22
|
export { useEditableConnection } from './useEditableConnection';
|
|
23
23
|
export { useReadableSearchState } from './useReadableSearchState';
|
|
24
|
+
export { useSavedStateForEntityType } from './useSavedStateForEntityType';
|
|
24
25
|
export { useSnackbar } from './useSnackbar';
|
package/cjs/hooks/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.useSnackbar = exports.useReadableSearchState = exports.useEditableConnection = exports.useCustomScripts = exports.useMarkAsNotMatchRequest = exports.useMergeAllRequest = exports.usePagingSimulator = exports.useMatchesLoader = exports.useConfigPermissions = exports.useWhyDidYouUpdate = exports.useUsers = exports.useSavedState = exports.useSafePromise = exports.useRunOnceAfterValueInitialization = exports.useRelationsLoader = exports.useRelationTypeSelector = exports.usePrevious = exports.useDidUpdateEffect = exports.useCommentsEntitiesMap = exports.useCollaboration = exports.useAsyncMount = exports.CustomAction = exports.useAPI = exports.useActions = void 0;
|
|
3
|
+
exports.useSnackbar = exports.useSavedStateForEntityType = exports.useReadableSearchState = exports.useEditableConnection = exports.useCustomScripts = exports.useMarkAsNotMatchRequest = exports.useMergeAllRequest = exports.usePagingSimulator = exports.useMatchesLoader = exports.useConfigPermissions = exports.useWhyDidYouUpdate = exports.useUsers = exports.useSavedState = exports.useSafePromise = exports.useRunOnceAfterValueInitialization = exports.useRelationsLoader = exports.useRelationTypeSelector = exports.usePrevious = exports.useDidUpdateEffect = exports.useCommentsEntitiesMap = exports.useCollaboration = exports.useAsyncMount = exports.CustomAction = exports.useAPI = exports.useActions = void 0;
|
|
4
4
|
var useActions_1 = require("./useActions");
|
|
5
5
|
Object.defineProperty(exports, "useActions", { enumerable: true, get: function () { return useActions_1.useActions; } });
|
|
6
6
|
var useAPI_1 = require("./useAPI");
|
|
@@ -46,5 +46,7 @@ var useEditableConnection_1 = require("./useEditableConnection");
|
|
|
46
46
|
Object.defineProperty(exports, "useEditableConnection", { enumerable: true, get: function () { return useEditableConnection_1.useEditableConnection; } });
|
|
47
47
|
var useReadableSearchState_1 = require("./useReadableSearchState");
|
|
48
48
|
Object.defineProperty(exports, "useReadableSearchState", { enumerable: true, get: function () { return useReadableSearchState_1.useReadableSearchState; } });
|
|
49
|
+
var useSavedStateForEntityType_1 = require("./useSavedStateForEntityType");
|
|
50
|
+
Object.defineProperty(exports, "useSavedStateForEntityType", { enumerable: true, get: function () { return useSavedStateForEntityType_1.useSavedStateForEntityType; } });
|
|
49
51
|
var useSnackbar_1 = require("./useSnackbar");
|
|
50
52
|
Object.defineProperty(exports, "useSnackbar", { enumerable: true, get: function () { return useSnackbar_1.useSnackbar; } });
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
declare type SavedState<T> = {
|
|
2
|
+
[entityType: string]: T;
|
|
3
|
+
};
|
|
4
|
+
declare type Props<T> = {
|
|
5
|
+
getSavedState: () => Promise<SavedState<T>>;
|
|
6
|
+
saveState: (state: SavedState<T>) => void;
|
|
7
|
+
entityTypeUri: string;
|
|
8
|
+
};
|
|
9
|
+
export declare const useSavedStateForEntityType: <T>({ getSavedState, saveState, entityTypeUri }: Props<T>) => {
|
|
10
|
+
isLoaded: boolean;
|
|
11
|
+
savedState: T;
|
|
12
|
+
updateSavedState: (stateToSave: T) => void;
|
|
13
|
+
};
|
|
14
|
+
export {};
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
|
3
|
+
__assign = Object.assign || function(t) {
|
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
+
s = arguments[i];
|
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
+
t[p] = s[p];
|
|
8
|
+
}
|
|
9
|
+
return t;
|
|
10
|
+
};
|
|
11
|
+
return __assign.apply(this, arguments);
|
|
12
|
+
};
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
exports.useSavedStateForEntityType = void 0;
|
|
15
|
+
var react_1 = require("react");
|
|
16
|
+
var useDidUpdateEffect_1 = require("./useDidUpdateEffect");
|
|
17
|
+
var useSavedStateForEntityType = function (_a) {
|
|
18
|
+
var getSavedState = _a.getSavedState, saveState = _a.saveState, entityTypeUri = _a.entityTypeUri;
|
|
19
|
+
var _b = react_1.useState({}), savedState = _b[0], setSavedState = _b[1];
|
|
20
|
+
var _c = react_1.useState(null), changedState = _c[0], setChangedState = _c[1];
|
|
21
|
+
var _d = react_1.useState(false), isLoaded = _d[0], setIsLoaded = _d[1];
|
|
22
|
+
var saveChangesLocallyForPrevEntityType = function () {
|
|
23
|
+
if (changedState) {
|
|
24
|
+
setSavedState(__assign(__assign({}, savedState), changedState));
|
|
25
|
+
setChangedState(null);
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
useDidUpdateEffect_1.useDidUpdateEffect(saveChangesLocallyForPrevEntityType, [entityTypeUri]);
|
|
29
|
+
var updateSavedState = function (stateToSave) {
|
|
30
|
+
var _a;
|
|
31
|
+
var changedState = (_a = {},
|
|
32
|
+
_a[entityTypeUri] = stateToSave,
|
|
33
|
+
_a);
|
|
34
|
+
setChangedState(changedState);
|
|
35
|
+
saveState(__assign(__assign({}, savedState), changedState));
|
|
36
|
+
};
|
|
37
|
+
react_1.useEffect(function () {
|
|
38
|
+
getSavedState()
|
|
39
|
+
.then(function (savedState) {
|
|
40
|
+
setSavedState(savedState || {});
|
|
41
|
+
})
|
|
42
|
+
.then(function (_) { return setIsLoaded(true); })
|
|
43
|
+
.catch(function (_) { return setIsLoaded(true); });
|
|
44
|
+
}, []); // eslint-disable-line
|
|
45
|
+
return { isLoaded: isLoaded, savedState: savedState[entityTypeUri], updateSavedState: updateSavedState };
|
|
46
|
+
};
|
|
47
|
+
exports.useSavedStateForEntityType = useSavedStateForEntityType;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { ColumnData, RowData } from '../types';
|
|
3
|
+
declare type Props = {
|
|
4
|
+
columnValue: ColumnData;
|
|
5
|
+
rowData: RowData;
|
|
6
|
+
setHoveredColumn: (columnValue: ColumnData) => void;
|
|
7
|
+
resetHoveredColumn: () => void;
|
|
8
|
+
};
|
|
9
|
+
export declare const TableCell: ({ columnValue, rowData, setHoveredColumn, resetHoveredColumn }: Props) => JSX.Element;
|
|
10
|
+
export {};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { DefaultCellRenderer } from '../helpers';
|
|
3
|
+
export var TableCell = function (_a) {
|
|
4
|
+
var columnValue = _a.columnValue, rowData = _a.rowData, setHoveredColumn = _a.setHoveredColumn, resetHoveredColumn = _a.resetHoveredColumn;
|
|
5
|
+
var CellRenderer = rowData.cellRenderer || DefaultCellRenderer;
|
|
6
|
+
return (React.createElement("td", { onMouseOver: function () { return setHoveredColumn(columnValue); }, onMouseLeave: resetHoveredColumn },
|
|
7
|
+
React.createElement(CellRenderer, { value: columnValue[rowData.id] })));
|
|
8
|
+
};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { RowData, ColumnData } from '../types';
|
|
3
|
+
declare type Props = {
|
|
4
|
+
columnValue: ColumnData;
|
|
5
|
+
rowData: RowData;
|
|
6
|
+
index: number;
|
|
7
|
+
onMoveColumn: (dragId: string, hoverId: string) => void;
|
|
8
|
+
shouldRenderDragIndicator: boolean;
|
|
9
|
+
setHoveredColumn: (columnValue: ColumnData) => void;
|
|
10
|
+
resetHoveredColumn: () => void;
|
|
11
|
+
};
|
|
12
|
+
export declare const TableCellWithDnd: ({ columnValue, rowData, index, onMoveColumn, shouldRenderDragIndicator, setHoveredColumn, resetHoveredColumn }: Props) => JSX.Element;
|
|
13
|
+
export {};
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import React, { useEffect } from 'react';
|
|
2
|
+
import DragIndicatorIcon from '@material-ui/icons/DragIndicator';
|
|
3
|
+
import { useDrag, useDrop } from 'react-dnd';
|
|
4
|
+
import { getEmptyImage } from 'react-dnd-html5-backend';
|
|
5
|
+
import { DndItemTypes } from '../types';
|
|
6
|
+
import { DefaultCellRenderer } from '../helpers';
|
|
7
|
+
import { useStyles } from './styles';
|
|
8
|
+
export var TableCellWithDnd = function (_a) {
|
|
9
|
+
var columnValue = _a.columnValue, rowData = _a.rowData, index = _a.index, onMoveColumn = _a.onMoveColumn, shouldRenderDragIndicator = _a.shouldRenderDragIndicator, setHoveredColumn = _a.setHoveredColumn, resetHoveredColumn = _a.resetHoveredColumn;
|
|
10
|
+
var styles = useStyles();
|
|
11
|
+
var dropRef = React.useRef(null);
|
|
12
|
+
var dragRef = React.useRef(null);
|
|
13
|
+
var getColumnWidth = function () { var _a; return (_a = dropRef === null || dropRef === void 0 ? void 0 : dropRef.current) === null || _a === void 0 ? void 0 : _a.offsetWidth; };
|
|
14
|
+
var CellRenderer = rowData.cellRenderer || DefaultCellRenderer;
|
|
15
|
+
var _b = useDrop({
|
|
16
|
+
accept: DndItemTypes.Column,
|
|
17
|
+
hover: function (item, monitor) {
|
|
18
|
+
var _a;
|
|
19
|
+
if (!dropRef.current) {
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
var dragIndex = item.index;
|
|
23
|
+
var hoverIndex = index;
|
|
24
|
+
if (dragIndex === hoverIndex) {
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
var hoverBoundingRect = (_a = dropRef.current) === null || _a === void 0 ? void 0 : _a.getBoundingClientRect();
|
|
28
|
+
var hoverMiddleX = (hoverBoundingRect.right - hoverBoundingRect.left) / 2;
|
|
29
|
+
var clientOffset = monitor.getClientOffset();
|
|
30
|
+
var hoverClientX = clientOffset.x - hoverBoundingRect.left;
|
|
31
|
+
if (dragIndex < hoverIndex && hoverClientX < hoverMiddleX) {
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
if (dragIndex > hoverIndex && hoverClientX > hoverMiddleX) {
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
onMoveColumn(item.columnValue.id, columnValue.id);
|
|
38
|
+
item.index = hoverIndex;
|
|
39
|
+
},
|
|
40
|
+
collect: function (monitor) { return ({
|
|
41
|
+
targetId: monitor.getHandlerId()
|
|
42
|
+
}); }
|
|
43
|
+
}), targetId = _b[0].targetId, drop = _b[1];
|
|
44
|
+
var _c = useDrag({
|
|
45
|
+
item: { type: DndItemTypes.Column, index: index, getColumnWidth: getColumnWidth, columnValue: columnValue, rowData: rowData },
|
|
46
|
+
isDragging: function (monitor) {
|
|
47
|
+
return monitor.getItem().index === index;
|
|
48
|
+
},
|
|
49
|
+
collect: function (monitor) { return ({
|
|
50
|
+
opacity: monitor.isDragging() ? 0 : 1,
|
|
51
|
+
sourceId: monitor.getHandlerId()
|
|
52
|
+
}); }
|
|
53
|
+
}), _d = _c[0], opacity = _d.opacity, sourceId = _d.sourceId, drag = _c[1], preview = _c[2];
|
|
54
|
+
useEffect(function () {
|
|
55
|
+
preview(getEmptyImage(), { captureDraggingState: true });
|
|
56
|
+
drop(dropRef);
|
|
57
|
+
drag(dragRef);
|
|
58
|
+
}, []);
|
|
59
|
+
return (React.createElement("td", { style: { opacity: opacity }, ref: dropRef, className: styles.tableData, "data-source-id": sourceId, "data-target-id": targetId, onMouseOver: function () { return setHoveredColumn(columnValue); }, onMouseLeave: resetHoveredColumn },
|
|
60
|
+
shouldRenderDragIndicator && (React.createElement("div", { ref: dragRef, className: styles.dragIndicator },
|
|
61
|
+
React.createElement(DragIndicatorIcon, { className: styles.dragIndicatorIcon }))),
|
|
62
|
+
React.createElement(CellRenderer, { value: columnValue[rowData.id] })));
|
|
63
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const useStyles: (props?: any) => import("@material-ui/core/styles/withStyles").ClassNameMap<"tableData" | "dragIndicator" | "dragIndicatorIcon">;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { makeStyles } from '@material-ui/core/styles';
|
|
2
|
+
export var useStyles = makeStyles(function (theme) { return ({
|
|
3
|
+
tableData: {
|
|
4
|
+
position: 'relative',
|
|
5
|
+
'&:hover': {
|
|
6
|
+
'& $dragIndicator': {
|
|
7
|
+
opacity: 1
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
},
|
|
11
|
+
dragIndicator: {
|
|
12
|
+
opacity: 0,
|
|
13
|
+
position: 'absolute',
|
|
14
|
+
top: 0,
|
|
15
|
+
left: '50%',
|
|
16
|
+
cursor: 'move',
|
|
17
|
+
transition: 'opacity 0.3s',
|
|
18
|
+
transform: 'translateX(-50%) rotate(90deg)',
|
|
19
|
+
zIndex: 5
|
|
20
|
+
},
|
|
21
|
+
dragIndicatorIcon: {
|
|
22
|
+
width: '14.4px',
|
|
23
|
+
height: '18px',
|
|
24
|
+
color: theme.palette.text.secondary
|
|
25
|
+
}
|
|
26
|
+
}); });
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import React, { useRef } from 'react';
|
|
2
|
+
import { useDragLayer } from 'react-dnd';
|
|
3
|
+
import { TableColumnDragPreview } from './TableColumnDragPreview';
|
|
4
|
+
import { DndItemTypes } from '../types';
|
|
5
|
+
import { useStyles } from './styles';
|
|
6
|
+
var getItemStyles = function (dragLayerEl, clientOffset, columnWidth) {
|
|
7
|
+
var dragLayerRect = (dragLayerEl === null || dragLayerEl === void 0 ? void 0 : dragLayerEl.getBoundingClientRect()) || { x: 0, y: 0 };
|
|
8
|
+
var dragItemX = (clientOffset === null || clientOffset === void 0 ? void 0 : clientOffset.x) - (dragLayerRect === null || dragLayerRect === void 0 ? void 0 : dragLayerRect.x) - columnWidth / 2;
|
|
9
|
+
var dragItemY = (clientOffset === null || clientOffset === void 0 ? void 0 : clientOffset.y) - (dragLayerRect === null || dragLayerRect === void 0 ? void 0 : dragLayerRect.y);
|
|
10
|
+
var dragItemTransform = "translate(" + dragItemX + "px, " + dragItemY + "px";
|
|
11
|
+
return {
|
|
12
|
+
display: 'flex',
|
|
13
|
+
transform: dragItemTransform,
|
|
14
|
+
WebkitTransform: dragItemTransform
|
|
15
|
+
};
|
|
16
|
+
};
|
|
17
|
+
export var TableColumnDragLayer = function (_a) {
|
|
18
|
+
var _b;
|
|
19
|
+
var columnHeight = _a.columnHeight;
|
|
20
|
+
var styles = useStyles();
|
|
21
|
+
var dragLayerRef = useRef();
|
|
22
|
+
var _c = useDragLayer(function (monitor) { return ({
|
|
23
|
+
isDragging: monitor.isDragging(),
|
|
24
|
+
clientOffset: monitor.getClientOffset(),
|
|
25
|
+
item: monitor.getItem()
|
|
26
|
+
}); }), isDragging = _c.isDragging, clientOffset = _c.clientOffset, item = _c.item;
|
|
27
|
+
if (!isDragging || !item) {
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
var columnWidth = (_b = item.getColumnWidth) === null || _b === void 0 ? void 0 : _b.call(item);
|
|
31
|
+
return (React.createElement("div", { className: styles.dragLayer, ref: dragLayerRef },
|
|
32
|
+
React.createElement("div", { style: getItemStyles(dragLayerRef.current, clientOffset, columnWidth) }, item.type === DndItemTypes.Column && (React.createElement(TableColumnDragPreview, { columnWidth: columnWidth, columnHeight: columnHeight, item: item })))));
|
|
33
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { ColumnData, RowData } from '../types';
|
|
3
|
+
declare type Props = {
|
|
4
|
+
columnWidth: number;
|
|
5
|
+
columnHeight: number;
|
|
6
|
+
item: {
|
|
7
|
+
rowData: RowData;
|
|
8
|
+
columnValue: ColumnData;
|
|
9
|
+
};
|
|
10
|
+
};
|
|
11
|
+
export declare const TableColumnDragPreview: ({ columnWidth, columnHeight, item }: Props) => JSX.Element;
|
|
12
|
+
export {};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { DefaultCellRenderer } from '../helpers';
|
|
3
|
+
export var TableColumnDragPreview = function (_a) {
|
|
4
|
+
var columnWidth = _a.columnWidth, columnHeight = _a.columnHeight, item = _a.item;
|
|
5
|
+
var rowData = item.rowData, columnValue = item.columnValue;
|
|
6
|
+
var CellRenderer = rowData.cellRenderer || DefaultCellRenderer;
|
|
7
|
+
return (React.createElement("div", { style: { width: columnWidth, height: columnHeight, background: 'rgba(245,245,245, .5)' } },
|
|
8
|
+
React.createElement(CellRenderer, { value: columnValue[rowData.id] })));
|
|
9
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const useStyles: (props?: any) => import("@material-ui/core/styles/withStyles").ClassNameMap<"dragLayer">;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { RowData } from '../types';
|
|
3
|
+
declare type BasicProps = {
|
|
4
|
+
rowData: RowData;
|
|
5
|
+
};
|
|
6
|
+
declare type PropsWithDnd = BasicProps & {
|
|
7
|
+
isDraggable: true;
|
|
8
|
+
dragRef: React.Ref<HTMLDivElement>;
|
|
9
|
+
};
|
|
10
|
+
declare type PropsWithoutDnd = BasicProps & {
|
|
11
|
+
isDraggable?: false;
|
|
12
|
+
dragRef?: React.Ref<HTMLDivElement>;
|
|
13
|
+
};
|
|
14
|
+
declare type Props = PropsWithDnd | PropsWithoutDnd;
|
|
15
|
+
export declare const TableHeadCell: ({ rowData, isDraggable, dragRef }: Props) => JSX.Element;
|
|
16
|
+
export {};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
var __assign = (this && this.__assign) || function () {
|
|
2
|
+
__assign = Object.assign || function(t) {
|
|
3
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
4
|
+
s = arguments[i];
|
|
5
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
6
|
+
t[p] = s[p];
|
|
7
|
+
}
|
|
8
|
+
return t;
|
|
9
|
+
};
|
|
10
|
+
return __assign.apply(this, arguments);
|
|
11
|
+
};
|
|
12
|
+
import React from 'react';
|
|
13
|
+
import DragIndicatorIcon from '@material-ui/icons/DragIndicator';
|
|
14
|
+
import { DefaultHeadCellRenderer } from '../helpers';
|
|
15
|
+
import { useStyles } from './styles';
|
|
16
|
+
export var TableHeadCell = function (_a) {
|
|
17
|
+
var rowData = _a.rowData, isDraggable = _a.isDraggable, dragRef = _a.dragRef;
|
|
18
|
+
var styles = useStyles();
|
|
19
|
+
var HeadCellRenderer = rowData.headCellRenderer || DefaultHeadCellRenderer;
|
|
20
|
+
return (React.createElement("th", { className: styles.tableHead },
|
|
21
|
+
isDraggable && (React.createElement("div", { ref: dragRef, className: styles.dragIndicator },
|
|
22
|
+
React.createElement(DragIndicatorIcon, { className: styles.dragIndicatorIcon }))),
|
|
23
|
+
React.createElement(HeadCellRenderer, __assign({}, rowData))));
|
|
24
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const useStyles: (props?: any) => import("@material-ui/core/styles/withStyles").ClassNameMap<"dragIndicator" | "dragIndicatorIcon" | "tableHead">;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { makeStyles } from '@material-ui/core/styles';
|
|
2
|
+
export var useStyles = makeStyles(function (theme) { return ({
|
|
3
|
+
tableHead: {
|
|
4
|
+
position: 'relative',
|
|
5
|
+
'&:hover': {
|
|
6
|
+
'& $dragIndicator': {
|
|
7
|
+
opacity: 1
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
},
|
|
11
|
+
dragIndicator: {
|
|
12
|
+
opacity: 0,
|
|
13
|
+
position: 'absolute',
|
|
14
|
+
top: '50%',
|
|
15
|
+
left: 0,
|
|
16
|
+
transform: 'translateY(-50%)',
|
|
17
|
+
cursor: 'move',
|
|
18
|
+
transition: 'opacity 0.3s'
|
|
19
|
+
},
|
|
20
|
+
dragIndicatorIcon: {
|
|
21
|
+
width: '14.4px',
|
|
22
|
+
height: '18px',
|
|
23
|
+
color: theme.palette.text.secondary
|
|
24
|
+
}
|
|
25
|
+
}); });
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { RowData, ColumnData } from '../types';
|
|
3
|
+
declare type Props = {
|
|
4
|
+
rowData: RowData;
|
|
5
|
+
columnsData: ColumnData[];
|
|
6
|
+
index: number;
|
|
7
|
+
onMoveColumn?: (dragId: string, hoverId: string) => void;
|
|
8
|
+
setHoveredColumn: (columnValue: ColumnData) => void;
|
|
9
|
+
resetHoveredColumn: () => void;
|
|
10
|
+
};
|
|
11
|
+
export declare const TableRow: ({ rowData, columnsData, index, onMoveColumn, setHoveredColumn, resetHoveredColumn }: Props) => JSX.Element;
|
|
12
|
+
export {};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { TableCell } from '../TableCell/TableCell';
|
|
3
|
+
import { TableCellWithDnd } from '../TableCellWithDnd/TableCellWithDnd';
|
|
4
|
+
import { TableHeadCell } from '../TableHeadCell/TableHeadCell';
|
|
5
|
+
export var TableRow = function (_a) {
|
|
6
|
+
var rowData = _a.rowData, columnsData = _a.columnsData, index = _a.index, onMoveColumn = _a.onMoveColumn, setHoveredColumn = _a.setHoveredColumn, resetHoveredColumn = _a.resetHoveredColumn;
|
|
7
|
+
var isFirstRow = index === 0;
|
|
8
|
+
return (React.createElement("tr", null,
|
|
9
|
+
React.createElement(TableHeadCell, { rowData: rowData, isDraggable: false }),
|
|
10
|
+
columnsData.map(function (columnValue, index) {
|
|
11
|
+
var isDraggableColumn = columnValue.isDraggable;
|
|
12
|
+
var shouldRenderDragIndicator = isFirstRow && isDraggableColumn;
|
|
13
|
+
return onMoveColumn ? (React.createElement(TableCellWithDnd, { key: columnValue.id, columnValue: columnValue, rowData: rowData, index: index, onMoveColumn: onMoveColumn, shouldRenderDragIndicator: shouldRenderDragIndicator, setHoveredColumn: setHoveredColumn, resetHoveredColumn: resetHoveredColumn })) : (React.createElement(TableCell, { key: columnValue.id, rowData: rowData, columnValue: columnValue, setHoveredColumn: setHoveredColumn, resetHoveredColumn: resetHoveredColumn }));
|
|
14
|
+
})));
|
|
15
|
+
};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { RowData, ColumnData } from '../types';
|
|
3
|
+
declare type Props = {
|
|
4
|
+
rowData: RowData;
|
|
5
|
+
index: number;
|
|
6
|
+
columnsData: ColumnData[];
|
|
7
|
+
onMoveRow: (dragId: string, hoverId: string) => void;
|
|
8
|
+
onMoveColumn?: (dragId: string, hoverId: string) => void;
|
|
9
|
+
setHoveredColumn: (columnValue: ColumnData) => void;
|
|
10
|
+
resetHoveredColumn: () => void;
|
|
11
|
+
};
|
|
12
|
+
export declare const TableRowWithDnd: ({ rowData, index, columnsData, onMoveRow, onMoveColumn, setHoveredColumn, resetHoveredColumn }: Props) => JSX.Element;
|
|
13
|
+
export {};
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import React, { useEffect } from 'react';
|
|
2
|
+
import { useDrag, useDrop } from 'react-dnd';
|
|
3
|
+
import { TableHeadCell } from '../TableHeadCell/TableHeadCell';
|
|
4
|
+
import { TableCell } from '../TableCell/TableCell';
|
|
5
|
+
import { TableCellWithDnd } from '../TableCellWithDnd/TableCellWithDnd';
|
|
6
|
+
import { DndItemTypes } from '../types';
|
|
7
|
+
export var TableRowWithDnd = function (_a) {
|
|
8
|
+
var rowData = _a.rowData, index = _a.index, columnsData = _a.columnsData, onMoveRow = _a.onMoveRow, onMoveColumn = _a.onMoveColumn, setHoveredColumn = _a.setHoveredColumn, resetHoveredColumn = _a.resetHoveredColumn;
|
|
9
|
+
var dropRef = React.useRef(null);
|
|
10
|
+
var dragRef = React.useRef(null);
|
|
11
|
+
var _b = useDrop({
|
|
12
|
+
accept: DndItemTypes.Row,
|
|
13
|
+
hover: function (item, monitor) {
|
|
14
|
+
if (!dropRef.current) {
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
var dragIndex = item.index;
|
|
18
|
+
var hoverIndex = index;
|
|
19
|
+
if (dragIndex === hoverIndex) {
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
var hoverBoundingRect = dropRef.current.getBoundingClientRect();
|
|
23
|
+
var hoverMiddleY = (hoverBoundingRect.bottom - hoverBoundingRect.top) / 2;
|
|
24
|
+
var clientOffset = monitor.getClientOffset();
|
|
25
|
+
var hoverClientY = clientOffset.y - hoverBoundingRect.top;
|
|
26
|
+
if (dragIndex < hoverIndex && hoverClientY < hoverMiddleY) {
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
if (dragIndex > hoverIndex && hoverClientY > hoverMiddleY) {
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
onMoveRow(item.id, rowData.id);
|
|
33
|
+
item.index = hoverIndex;
|
|
34
|
+
},
|
|
35
|
+
collect: function (monitor) { return ({
|
|
36
|
+
targetId: monitor.getHandlerId()
|
|
37
|
+
}); }
|
|
38
|
+
}), targetId = _b[0].targetId, drop = _b[1];
|
|
39
|
+
var _c = useDrag({
|
|
40
|
+
item: { type: DndItemTypes.Row, index: index, id: rowData.id },
|
|
41
|
+
collect: function (monitor) { return ({
|
|
42
|
+
opacity: monitor.isDragging() ? 0 : 1,
|
|
43
|
+
sourceId: monitor.getHandlerId()
|
|
44
|
+
}); }
|
|
45
|
+
}), _d = _c[0], opacity = _d.opacity, sourceId = _d.sourceId, drag = _c[1], preview = _c[2];
|
|
46
|
+
useEffect(function () {
|
|
47
|
+
preview(drop(dropRef));
|
|
48
|
+
drag(dragRef);
|
|
49
|
+
}, []);
|
|
50
|
+
return (React.createElement("tr", { style: { opacity: opacity }, ref: dropRef, "data-target-id": targetId, "data-source-id": sourceId },
|
|
51
|
+
React.createElement(TableHeadCell, { rowData: rowData, isDraggable: true, dragRef: dragRef }),
|
|
52
|
+
columnsData.map(function (columnValue, index) {
|
|
53
|
+
return onMoveColumn ? (React.createElement(TableCellWithDnd, { key: columnValue.id, columnValue: columnValue, rowData: rowData, index: index, onMoveColumn: onMoveColumn, shouldRenderDragIndicator: false, setHoveredColumn: setHoveredColumn, resetHoveredColumn: resetHoveredColumn })) : (React.createElement(TableCell, { key: columnValue.id, columnValue: columnValue, rowData: rowData, setHoveredColumn: setHoveredColumn, resetHoveredColumn: resetHoveredColumn }));
|
|
54
|
+
})));
|
|
55
|
+
};
|
|
@@ -1,26 +1,14 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
headCellRenderer: PropTypes.Requireable<(...args: any[]) => any>;
|
|
15
|
-
cellRenderer: PropTypes.Requireable<(...args: any[]) => any>;
|
|
16
|
-
}>[]>;
|
|
17
|
-
columnsData: PropTypes.Requireable<object[]>;
|
|
18
|
-
theadRowsNumber: PropTypes.Requireable<number>;
|
|
19
|
-
className: PropTypes.Requireable<string>;
|
|
20
|
-
setHoveredColumn: PropTypes.Requireable<(...args: any[]) => any>;
|
|
21
|
-
resetHoveredColumn: PropTypes.Requireable<(...args: any[]) => any>;
|
|
22
|
-
};
|
|
23
|
-
}>;
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { RowData, ColumnData } from './types';
|
|
3
|
+
declare type Props = {
|
|
4
|
+
className?: string;
|
|
5
|
+
rowsData: RowData[];
|
|
6
|
+
columnsData: ColumnData[];
|
|
7
|
+
theadRowsNumber?: number;
|
|
8
|
+
onMoveRow?: (dragId: string, hoverId: string) => void;
|
|
9
|
+
onMoveColumn?: (dragId: string, hoverId: string) => void;
|
|
10
|
+
setHoveredColumn?: (columnValue: ColumnData) => void;
|
|
11
|
+
resetHoveredColumn?: () => void;
|
|
12
|
+
};
|
|
13
|
+
declare const _default: React.MemoExoticComponent<({ className, rowsData, columnsData, theadRowsNumber, onMoveRow, onMoveColumn, setHoveredColumn, resetHoveredColumn }: Props) => JSX.Element>;
|
|
24
14
|
export default _default;
|
|
25
|
-
import PropTypes from "prop-types";
|
|
26
|
-
import React from "react";
|
|
@@ -1,50 +1,18 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
6
|
-
t[p] = s[p];
|
|
7
|
-
}
|
|
8
|
-
return t;
|
|
9
|
-
};
|
|
10
|
-
return __assign.apply(this, arguments);
|
|
11
|
-
};
|
|
12
|
-
import React, { memo } from 'react';
|
|
13
|
-
import PropTypes from 'prop-types';
|
|
14
|
-
var DefaultHeadCellRenderer = function (_a) {
|
|
15
|
-
var label = _a.label;
|
|
16
|
-
return label || null;
|
|
17
|
-
};
|
|
18
|
-
var DefaultCellRenderer = function (_a) {
|
|
19
|
-
var value = _a.value;
|
|
20
|
-
return value || null;
|
|
21
|
-
};
|
|
1
|
+
import React, { memo, useRef } from 'react';
|
|
2
|
+
import { TableRow } from './TableRow/TableRow';
|
|
3
|
+
import { TableRowWithDnd } from './TableRowWithDnd/TableRowWithDnd';
|
|
4
|
+
import { TableColumnDragLayer } from './TableColumnDragLayer/TableColumnDragLayer';
|
|
22
5
|
var VerticalHeadingsTable = function (_a) {
|
|
23
|
-
var
|
|
24
|
-
var
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
theadRowsNumber > 0 && React.createElement("thead", null, rowsData.slice(0, theadRowsNumber).map(renderRow)),
|
|
35
|
-
React.createElement("tbody", null, rowsData.slice(theadRowsNumber).map(renderRow))));
|
|
36
|
-
};
|
|
37
|
-
VerticalHeadingsTable.propTypes = {
|
|
38
|
-
rowsData: PropTypes.arrayOf(PropTypes.shape({
|
|
39
|
-
id: PropTypes.string,
|
|
40
|
-
label: PropTypes.string,
|
|
41
|
-
headCellRenderer: PropTypes.func,
|
|
42
|
-
cellRenderer: PropTypes.func
|
|
43
|
-
})),
|
|
44
|
-
columnsData: PropTypes.arrayOf(PropTypes.object),
|
|
45
|
-
theadRowsNumber: PropTypes.number,
|
|
46
|
-
className: PropTypes.string,
|
|
47
|
-
setHoveredColumn: PropTypes.func,
|
|
48
|
-
resetHoveredColumn: PropTypes.func
|
|
6
|
+
var _b;
|
|
7
|
+
var className = _a.className, rowsData = _a.rowsData, columnsData = _a.columnsData, _c = _a.theadRowsNumber, theadRowsNumber = _c === void 0 ? 0 : _c, onMoveRow = _a.onMoveRow, onMoveColumn = _a.onMoveColumn, setHoveredColumn = _a.setHoveredColumn, resetHoveredColumn = _a.resetHoveredColumn;
|
|
8
|
+
var tableRef = useRef(null);
|
|
9
|
+
var tableHeight = (_b = tableRef === null || tableRef === void 0 ? void 0 : tableRef.current) === null || _b === void 0 ? void 0 : _b.offsetHeight;
|
|
10
|
+
return (React.createElement(React.Fragment, null,
|
|
11
|
+
React.createElement(TableColumnDragLayer, { columnHeight: tableHeight }),
|
|
12
|
+
React.createElement("table", { ref: tableRef, className: className },
|
|
13
|
+
theadRowsNumber > 0 && (React.createElement("thead", null, rowsData.slice(0, theadRowsNumber).map(function (rowData, index) { return (React.createElement(TableRow, { key: rowData.id, rowData: rowData, columnsData: columnsData, index: index, onMoveColumn: onMoveColumn, setHoveredColumn: setHoveredColumn, resetHoveredColumn: resetHoveredColumn })); }))),
|
|
14
|
+
React.createElement("tbody", null, rowsData.slice(theadRowsNumber).map(function (rowData, index) {
|
|
15
|
+
return onMoveRow ? (React.createElement(TableRowWithDnd, { key: rowData.id, index: index + theadRowsNumber, rowData: rowData, columnsData: columnsData, onMoveRow: onMoveRow, onMoveColumn: onMoveColumn, setHoveredColumn: setHoveredColumn, resetHoveredColumn: resetHoveredColumn })) : (React.createElement(TableRow, { key: rowData.id, index: index + theadRowsNumber, rowData: rowData, columnsData: columnsData, onMoveColumn: onMoveColumn, setHoveredColumn: setHoveredColumn, resetHoveredColumn: resetHoveredColumn }));
|
|
16
|
+
})))));
|
|
49
17
|
};
|
|
50
18
|
export default memo(VerticalHeadingsTable);
|