@reltio/components 1.4.1110 → 1.4.1111

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.
Files changed (63) hide show
  1. package/cjs/components/VerticalHeadingsTable/TableCell/TableCell.d.ts +10 -0
  2. package/cjs/components/VerticalHeadingsTable/TableCell/TableCell.js +15 -0
  3. package/cjs/components/VerticalHeadingsTable/TableCellWithDnd/TableCellWithDnd.d.ts +13 -0
  4. package/cjs/components/VerticalHeadingsTable/TableCellWithDnd/TableCellWithDnd.js +89 -0
  5. package/cjs/components/VerticalHeadingsTable/TableCellWithDnd/styles.d.ts +1 -0
  6. package/cjs/components/VerticalHeadingsTable/TableCellWithDnd/styles.js +29 -0
  7. package/cjs/components/VerticalHeadingsTable/TableColumnDragLayer/TableColumnDragLayer.d.ts +6 -0
  8. package/cjs/components/VerticalHeadingsTable/TableColumnDragLayer/TableColumnDragLayer.js +56 -0
  9. package/cjs/components/VerticalHeadingsTable/TableColumnDragLayer/TableColumnDragPreview.d.ts +12 -0
  10. package/cjs/components/VerticalHeadingsTable/TableColumnDragLayer/TableColumnDragPreview.js +16 -0
  11. package/cjs/components/VerticalHeadingsTable/TableColumnDragLayer/styles.d.ts +1 -0
  12. package/cjs/components/VerticalHeadingsTable/TableColumnDragLayer/styles.js +15 -0
  13. package/cjs/components/VerticalHeadingsTable/TableHeadCell/TableHeadCell.d.ts +16 -0
  14. package/cjs/components/VerticalHeadingsTable/TableHeadCell/TableHeadCell.js +31 -0
  15. package/cjs/components/VerticalHeadingsTable/TableHeadCell/styles.d.ts +1 -0
  16. package/cjs/components/VerticalHeadingsTable/TableHeadCell/styles.js +28 -0
  17. package/cjs/components/VerticalHeadingsTable/TableRow/TableRow.d.ts +12 -0
  18. package/cjs/components/VerticalHeadingsTable/TableRow/TableRow.js +22 -0
  19. package/cjs/components/VerticalHeadingsTable/TableRowWithDnd/TableRowWithDnd.d.ts +13 -0
  20. package/cjs/components/VerticalHeadingsTable/TableRowWithDnd/TableRowWithDnd.js +78 -0
  21. package/cjs/components/VerticalHeadingsTable/VerticalHeadingsTable.d.ts +13 -25
  22. package/cjs/components/VerticalHeadingsTable/VerticalHeadingsTable.js +14 -49
  23. package/cjs/components/VerticalHeadingsTable/helpers.d.ts +6 -0
  24. package/cjs/components/VerticalHeadingsTable/helpers.js +13 -0
  25. package/cjs/components/VerticalHeadingsTable/types.d.ts +19 -0
  26. package/cjs/components/VerticalHeadingsTable/types.js +8 -0
  27. package/cjs/components/crosswalks/CrosswalkDragLayer/styles.d.ts +1 -1
  28. package/cjs/hooks/index.d.ts +1 -0
  29. package/cjs/hooks/index.js +3 -1
  30. package/cjs/hooks/useSavedStateForEntityType.d.ts +14 -0
  31. package/cjs/hooks/useSavedStateForEntityType.js +47 -0
  32. package/esm/components/VerticalHeadingsTable/TableCell/TableCell.d.ts +10 -0
  33. package/esm/components/VerticalHeadingsTable/TableCell/TableCell.js +8 -0
  34. package/esm/components/VerticalHeadingsTable/TableCellWithDnd/TableCellWithDnd.d.ts +13 -0
  35. package/esm/components/VerticalHeadingsTable/TableCellWithDnd/TableCellWithDnd.js +63 -0
  36. package/esm/components/VerticalHeadingsTable/TableCellWithDnd/styles.d.ts +1 -0
  37. package/esm/components/VerticalHeadingsTable/TableCellWithDnd/styles.js +26 -0
  38. package/esm/components/VerticalHeadingsTable/TableColumnDragLayer/TableColumnDragLayer.d.ts +6 -0
  39. package/esm/components/VerticalHeadingsTable/TableColumnDragLayer/TableColumnDragLayer.js +33 -0
  40. package/esm/components/VerticalHeadingsTable/TableColumnDragLayer/TableColumnDragPreview.d.ts +12 -0
  41. package/esm/components/VerticalHeadingsTable/TableColumnDragLayer/TableColumnDragPreview.js +9 -0
  42. package/esm/components/VerticalHeadingsTable/TableColumnDragLayer/styles.d.ts +1 -0
  43. package/esm/components/VerticalHeadingsTable/TableColumnDragLayer/styles.js +12 -0
  44. package/esm/components/VerticalHeadingsTable/TableHeadCell/TableHeadCell.d.ts +16 -0
  45. package/esm/components/VerticalHeadingsTable/TableHeadCell/TableHeadCell.js +24 -0
  46. package/esm/components/VerticalHeadingsTable/TableHeadCell/styles.d.ts +1 -0
  47. package/esm/components/VerticalHeadingsTable/TableHeadCell/styles.js +25 -0
  48. package/esm/components/VerticalHeadingsTable/TableRow/TableRow.d.ts +12 -0
  49. package/esm/components/VerticalHeadingsTable/TableRow/TableRow.js +15 -0
  50. package/esm/components/VerticalHeadingsTable/TableRowWithDnd/TableRowWithDnd.d.ts +13 -0
  51. package/esm/components/VerticalHeadingsTable/TableRowWithDnd/TableRowWithDnd.js +55 -0
  52. package/esm/components/VerticalHeadingsTable/VerticalHeadingsTable.d.ts +13 -25
  53. package/esm/components/VerticalHeadingsTable/VerticalHeadingsTable.js +15 -47
  54. package/esm/components/VerticalHeadingsTable/helpers.d.ts +6 -0
  55. package/esm/components/VerticalHeadingsTable/helpers.js +8 -0
  56. package/esm/components/VerticalHeadingsTable/types.d.ts +19 -0
  57. package/esm/components/VerticalHeadingsTable/types.js +5 -0
  58. package/esm/components/crosswalks/CrosswalkDragLayer/styles.d.ts +1 -1
  59. package/esm/hooks/index.d.ts +1 -0
  60. package/esm/hooks/index.js +1 -0
  61. package/esm/hooks/useSavedStateForEntityType.d.ts +14 -0
  62. package/esm/hooks/useSavedStateForEntityType.js +43 -0
  63. 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<"sourceIcon" | "dragLayer" | "crosswalkPreview" | "sourceLabel">;
1
+ export declare const useStyles: (props?: any) => import("@material-ui/core/styles/withStyles").ClassNameMap<"dragLayer" | "sourceIcon" | "crosswalkPreview" | "sourceLabel">;
@@ -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';
@@ -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,6 @@
1
+ /// <reference types="react" />
2
+ declare type Props = {
3
+ columnHeight: number;
4
+ };
5
+ export declare const TableColumnDragLayer: ({ columnHeight }: Props) => JSX.Element;
6
+ export {};
@@ -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,12 @@
1
+ import { makeStyles } from '@material-ui/core/styles';
2
+ export var useStyles = makeStyles({
3
+ dragLayer: {
4
+ position: 'fixed',
5
+ top: 0,
6
+ left: 0,
7
+ width: '100%',
8
+ height: '100%',
9
+ zIndex: 1300,
10
+ pointerEvents: 'none'
11
+ }
12
+ });
@@ -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
- declare var _default: React.MemoExoticComponent<{
2
- ({ className, rowsData, columnsData, theadRowsNumber, setHoveredColumn, resetHoveredColumn }: {
3
- className: any;
4
- rowsData: any;
5
- columnsData: any;
6
- theadRowsNumber?: number;
7
- setHoveredColumn: any;
8
- resetHoveredColumn: any;
9
- }): JSX.Element;
10
- propTypes: {
11
- rowsData: PropTypes.Requireable<PropTypes.InferProps<{
12
- id: PropTypes.Requireable<string>;
13
- label: PropTypes.Requireable<string>;
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
- 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, { 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 className = _a.className, rowsData = _a.rowsData, columnsData = _a.columnsData, _b = _a.theadRowsNumber, theadRowsNumber = _b === void 0 ? 0 : _b, setHoveredColumn = _a.setHoveredColumn, resetHoveredColumn = _a.resetHoveredColumn;
24
- var renderRow = function (rowData) {
25
- var CellRenderer = rowData.cellRenderer || DefaultCellRenderer;
26
- var HeadCellRenderer = rowData.headCellRenderer || DefaultHeadCellRenderer;
27
- return (React.createElement("tr", { key: rowData.id },
28
- React.createElement("th", { key: rowData.id },
29
- React.createElement(HeadCellRenderer, __assign({}, rowData))),
30
- columnsData.map(function (columnValue, index) { return (React.createElement("td", { key: index, onMouseOver: function () { return setHoveredColumn(columnValue); }, onMouseLeave: resetHoveredColumn },
31
- React.createElement(CellRenderer, { value: columnValue[rowData.id], columnValue: columnValue, rowData: rowData }))); })));
32
- };
33
- return (React.createElement("table", { className: className },
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);
@@ -0,0 +1,6 @@
1
+ export declare const DefaultCellRenderer: ({ value }: {
2
+ value: any;
3
+ }) => any;
4
+ export declare const DefaultHeadCellRenderer: ({ label }: {
5
+ label: any;
6
+ }) => any;