source: imaps-frontend/node_modules/react-tiles-dnd/esm/tile-layout/useTileTable.js

main
Last change on this file was d565449, checked in by stefan toskovski <stefantoska84@…>, 4 weeks ago

Update repo after prototype presentation

  • Property mode set to 100644
File size: 7.3 KB
Line 
1import { __read, __assign } from 'tslib';
2import { useState, useMemo } from 'react';
3import { useDrag } from '@use-gesture/react';
4import { tilesListToTable, tableToTilesList } from './table-utils/tiles-table.js';
5import dragMove from './strategies/move.js';
6import reorder from './strategies/reorder.js';
7
8var useTileTable = function (_a) {
9 var enabled = _a.enabled, strategy = _a.strategy, elementWidth = _a.elementWidth, elementHeight = _a.elementHeight, activeBorderSize = _a.activeBorderSize, columns = _a.columns, currentTiles = _a.currentTiles, canAcceptDrop = _a.canAcceptDrop, changeTilesOrder = _a.changeTilesOrder, didDrop = _a.didDrop;
10 var strategyImpl = strategy === 'reorder' ? reorder : dragMove;
11 var _b = __read(useState({
12 dragging: false,
13 droppable: false,
14 }), 2), state = _b[0], setState = _b[1];
15 //the tile layout table
16 var draggingTiles = state.tiles, dragging = state.dragging, insertionPoint = state.insertionPoint;
17 var effectiveTiles = (enabled && dragging && draggingTiles) || currentTiles;
18 var table = useMemo(function () { return tilesListToTable(effectiveTiles, columns); }, [effectiveTiles, columns]);
19 var positionedTiles = useMemo(function () { return tableToTilesList(table); }, [table]);
20 var config = {
21 elementHeight: elementHeight,
22 elementWidth: elementWidth,
23 activeBorderSize: activeBorderSize,
24 columns: columns,
25 };
26 var bind = useDrag(function (_a) {
27 var _b = __read(_a.args, 1), data = _b[0], dragging = _a.dragging, tap = _a.tap, xy = _a.xy, movement = _a.movement, event = _a.event;
28 if (dragging) {
29 if (!tap) {
30 event.preventDefault();
31 event.stopPropagation();
32 }
33 //if this is the first event, initialize the dragging
34 if (!state.dragging) {
35 var rect = event.currentTarget.getBoundingClientRect();
36 //identify the hit tile
37 var draggingTile_1 = positionedTiles.find(function (tile) { return tile.data === data; });
38 if (!draggingTile_1)
39 return;
40 setState({
41 dragging: true,
42 droppable: false,
43 tiles: positionedTiles,
44 draggingTile: draggingTile_1,
45 dragPosition: { x: xy[0] - rect.x, y: xy[1] - rect.y },
46 offset: { x: movement[0], y: movement[1] },
47 start: { col: draggingTile_1.col, row: draggingTile_1.row },
48 });
49 }
50 else {
51 var result_1 = strategyImpl.onDragMove({
52 offsetX: movement[0],
53 offsetY: movement[1],
54 canAcceptDrop: canAcceptDrop,
55 config: config,
56 state: state,
57 table: table,
58 }) || {};
59 setState(function (state) { return (__assign(__assign(__assign({}, state), { offset: { x: movement[0], y: movement[1] }, dropTargetTile: undefined, droppable: false, insertionPoint: undefined }), result_1)); });
60 }
61 }
62 else {
63 if (state.draggingTile && state.dropTargetTile && state.droppable) {
64 didDrop(state.draggingTile, state.dropTargetTile);
65 }
66 else {
67 var result = strategyImpl.onDragEnd({
68 offsetX: movement[0],
69 offsetY: movement[1],
70 canAcceptDrop: canAcceptDrop,
71 config: config,
72 state: state,
73 table: table,
74 }) || {};
75 var finalState = __assign(__assign({}, state), result);
76 finalState.tiles && changeTilesOrder(finalState.tiles);
77 }
78 setState({
79 dragging: false,
80 droppable: false,
81 });
82 }
83 }, { filterTaps: true, enabled: enabled });
84 var renderTileProps = useMemo(function () {
85 if (!enabled) {
86 return positionedTiles
87 .map(function (tile) { return (__assign(__assign({}, tile), { tileWidth: elementWidth, tileHeight: elementHeight, isDragging: false, isDropTarget: false, isDroppable: false, isDroppableAtInsertPosition: false, insertAtLeft: false, insertAtRight: false, x: tile.col * elementWidth, y: tile.row * elementHeight })); })
88 .sort(function (a, b) { return a.key - b.key; });
89 }
90 else
91 return positionedTiles
92 .map(function (tile) {
93 var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;
94 return __assign(__assign({}, tile), { tileWidth: elementWidth, tileHeight: elementHeight, isDragging: tile.data === ((_a = state.draggingTile) === null || _a === void 0 ? void 0 : _a.data), isDropTarget: tile.data === ((_b = state.dropTargetTile) === null || _b === void 0 ? void 0 : _b.data), insertAtLeft: tile.data === ((_d = (_c = state.insertionPoint) === null || _c === void 0 ? void 0 : _c.left) === null || _d === void 0 ? void 0 : _d.data), insertAtRight: tile.data === ((_f = (_e = state.insertionPoint) === null || _e === void 0 ? void 0 : _e.right) === null || _f === void 0 ? void 0 : _f.data), isDroppable: tile.data === ((_g = state.draggingTile) === null || _g === void 0 ? void 0 : _g.data) && state.droppable, isDroppableAtInsertPosition: !!(tile.data === ((_h = state.draggingTile) === null || _h === void 0 ? void 0 : _h.data) && state.insertionPoint), x: tile.data === ((_j = state.draggingTile) === null || _j === void 0 ? void 0 : _j.data)
95 ? (((_k = state.start) === null || _k === void 0 ? void 0 : _k.col) || 0) * elementWidth +
96 (((_l = state.offset) === null || _l === void 0 ? void 0 : _l.x) || 0)
97 : tile.col * elementWidth, y: tile.data === ((_m = state.draggingTile) === null || _m === void 0 ? void 0 : _m.data)
98 ? (((_o = state.start) === null || _o === void 0 ? void 0 : _o.row) || 0) * elementHeight +
99 (((_p = state.offset) === null || _p === void 0 ? void 0 : _p.y) || 0)
100 : tile.row * elementHeight });
101 })
102 .sort(function (a, b) { return a.key - b.key; });
103 }, [state, positionedTiles, elementHeight, elementWidth, enabled]);
104 var draggingTile = state.draggingTile;
105 var insertIndicatorPosition = useMemo(function () {
106 var _a = insertionPoint || {}, left = _a.left, right = _a.right;
107 if (left)
108 return {
109 x: (left.col + left.colSpan) * elementWidth,
110 y: left.row * elementHeight,
111 };
112 if (right)
113 return {
114 x: right.col * elementWidth,
115 y: right.row * elementHeight,
116 };
117 if (draggingTile)
118 return {
119 x: draggingTile.col * elementWidth,
120 y: draggingTile.row * elementHeight,
121 };
122 }, [insertionPoint, elementHeight, elementWidth, draggingTile]);
123 return {
124 table: table,
125 tableHeight: table.length * elementHeight,
126 tiles: positionedTiles,
127 insertIndicatorPosition: insertIndicatorPosition,
128 bind: bind,
129 renderTileProps: renderTileProps,
130 };
131};
132
133export { useTileTable };
134//# sourceMappingURL=useTileTable.js.map
Note: See TracBrowser for help on using the repository browser.