react-native-drax 0.10.3 → 0.11.0-alpha.2
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/.eslintrc.js +2 -73
- package/.prettierrc +16 -0
- package/README.md +81 -1
- package/build/AllHoverViews.d.ts +0 -0
- package/build/AllHoverViews.js +30 -0
- package/build/DraxContext.d.ts +0 -1
- package/build/DraxList.d.ts +3 -3
- package/build/DraxList.js +231 -216
- package/build/DraxListItem.d.ts +7 -0
- package/build/DraxListItem.js +121 -0
- package/build/DraxProvider.d.ts +1 -3
- package/build/DraxProvider.js +322 -259
- package/build/DraxScrollView.d.ts +1 -1
- package/build/DraxScrollView.js +29 -90
- package/build/DraxSubprovider.d.ts +2 -2
- package/build/DraxSubprovider.js +1 -1
- package/build/DraxView.d.ts +7 -2
- package/build/DraxView.js +60 -383
- package/build/HoverView.d.ts +8 -0
- package/build/HoverView.js +40 -0
- package/build/PanGestureDetector.d.ts +3 -0
- package/build/PanGestureDetector.js +49 -0
- package/build/hooks/useContent.d.ts +23 -0
- package/build/hooks/useContent.js +212 -0
- package/build/hooks/useDraxProtocol.d.ts +5 -0
- package/build/hooks/useDraxProtocol.js +32 -0
- package/build/hooks/useDraxRegistry.d.ts +21 -20
- package/build/hooks/useDraxRegistry.js +195 -182
- package/build/hooks/useDraxScrollHandler.d.ts +25 -0
- package/build/hooks/useDraxScrollHandler.js +89 -0
- package/build/hooks/useDraxState.d.ts +1 -1
- package/build/hooks/useDraxState.js +9 -6
- package/build/hooks/useMeasurements.d.ts +9 -0
- package/build/hooks/useMeasurements.js +119 -0
- package/build/hooks/useStatus.d.ts +11 -0
- package/build/hooks/useStatus.js +96 -0
- package/build/index.d.ts +2 -0
- package/build/index.js +4 -1
- package/build/math.d.ts +2 -2
- package/build/math.js +10 -6
- package/build/params.d.ts +9 -0
- package/build/params.js +7 -1
- package/build/transform.d.ts +11 -4
- package/build/transform.js +50 -8
- package/build/types.d.ts +238 -87
- package/build/types.js +10 -7
- package/package.json +43 -45
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.DraxListItem = void 0;
|
|
27
|
+
const react_1 = __importStar(require("react"));
|
|
28
|
+
const react_native_reanimated_1 = require("react-native-reanimated");
|
|
29
|
+
const DraxView_1 = require("./DraxView");
|
|
30
|
+
// const defaultStyles = StyleSheet.create({
|
|
31
|
+
// draggingStyle: { opacity: 0 },
|
|
32
|
+
// dragReleasedStyle: { opacity: 0.5 },
|
|
33
|
+
// });
|
|
34
|
+
const RenderItemComponent = ({ itemProps: { index, item, originalIndex, horizontal, lockItemDragsToMainAxis, draggedItem, shiftsRef, itemMeasurementsRef, prevItemMeasurementsRef, resetDraggedItem, keyExtractor, previousShiftsRef, registrationsRef, data, }, ...draxViewProps }) => {
|
|
35
|
+
const animatedValueX = (0, react_native_reanimated_1.useSharedValue)(0);
|
|
36
|
+
const animatedValueY = (0, react_native_reanimated_1.useSharedValue)(0);
|
|
37
|
+
const itemKey = (item && keyExtractor?.(item, index)) ?? item?.key ?? item?.id;
|
|
38
|
+
const shiftTransformStyle = (0, react_native_reanimated_1.useAnimatedStyle)(() => {
|
|
39
|
+
return {
|
|
40
|
+
transform: [{ translateX: animatedValueX.value }, { translateY: animatedValueY.value }],
|
|
41
|
+
};
|
|
42
|
+
});
|
|
43
|
+
(0, react_native_reanimated_1.useAnimatedReaction)(() => shiftsRef.value[originalIndex], shift => {
|
|
44
|
+
const isDragged = typeof draggedItem.value === 'number';
|
|
45
|
+
/** Apply reordering animations by shifting items between them */
|
|
46
|
+
if (isDragged) {
|
|
47
|
+
animatedValueX.value = (0, react_native_reanimated_1.withTiming)(shift.x, {
|
|
48
|
+
duration: 200,
|
|
49
|
+
});
|
|
50
|
+
animatedValueY.value = (0, react_native_reanimated_1.withTiming)(shift.y, {
|
|
51
|
+
duration: 200,
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
(0, react_1.useLayoutEffect)(() => {
|
|
56
|
+
/** Reset the shift when the item moves to a new index. */
|
|
57
|
+
animatedValueX.value = 0;
|
|
58
|
+
animatedValueY.value = 0;
|
|
59
|
+
}, [index]);
|
|
60
|
+
(0, react_1.useLayoutEffect)(() => {
|
|
61
|
+
const measurements = itemMeasurementsRef.current[originalIndex];
|
|
62
|
+
const previousMeasurementsIndex = prevItemMeasurementsRef.current.findIndex(item => item?.key === itemKey);
|
|
63
|
+
const previousMeasurements = prevItemMeasurementsRef.current[previousMeasurementsIndex];
|
|
64
|
+
const isLayoutShifted = previousShiftsRef.value.some(item => item.x || item.y);
|
|
65
|
+
/**
|
|
66
|
+
* Animate as items are added/removed from the list.
|
|
67
|
+
* For newly added items, if layout is shifted, it's most probably an external drag that was dropped in the list
|
|
68
|
+
* and it skips list layout animation.
|
|
69
|
+
*
|
|
70
|
+
* @todo implement animations even for this described scenario
|
|
71
|
+
* by applying the shift offset.
|
|
72
|
+
*/
|
|
73
|
+
if (previousMeasurements && measurements && !isLayoutShifted) {
|
|
74
|
+
const offsetX = previousMeasurements.x - measurements.x;
|
|
75
|
+
const offsetY = previousMeasurements.y - measurements.y;
|
|
76
|
+
/** Start from previous values before the items data (order) changed */
|
|
77
|
+
animatedValueX.value = offsetX;
|
|
78
|
+
animatedValueY.value = offsetY;
|
|
79
|
+
animatedValueX.value = (0, react_native_reanimated_1.withTiming)(0, {
|
|
80
|
+
duration: 200,
|
|
81
|
+
});
|
|
82
|
+
animatedValueY.value = (0, react_native_reanimated_1.withTiming)(0, {
|
|
83
|
+
duration: 200,
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
}, [itemKey, originalIndex, horizontal, itemMeasurementsRef, prevItemMeasurementsRef, previousShiftsRef]);
|
|
87
|
+
return (react_1.default.createElement(DraxView_1.DraxView, { lockDragXPosition: lockItemDragsToMainAxis && !horizontal, lockDragYPosition: lockItemDragsToMainAxis && horizontal, ...draxViewProps, style: [shiftTransformStyle, draxViewProps.style], payload: { ...draxViewProps.payload, index, originalIndex, item: data?.[index] }, onDragEnd: event => {
|
|
88
|
+
draxViewProps.onDragEnd?.(event);
|
|
89
|
+
resetDraggedItem();
|
|
90
|
+
}, onDragDrop: event => {
|
|
91
|
+
draxViewProps.onDragDrop?.(event);
|
|
92
|
+
resetDraggedItem();
|
|
93
|
+
}, onMeasure: measurements => {
|
|
94
|
+
draxViewProps.onMeasure?.(measurements);
|
|
95
|
+
if (originalIndex !== undefined && measurements) {
|
|
96
|
+
/**
|
|
97
|
+
* @todo 🪲 BUG
|
|
98
|
+
* @platform web
|
|
99
|
+
* @summary Somehow the measurements for the same item are getting duplicated.
|
|
100
|
+
*/
|
|
101
|
+
// Clear any duplicate measurements
|
|
102
|
+
const duplicateIndex = itemMeasurementsRef.current.findIndex((item, idx) => idx !== originalIndex && item?.key === itemKey);
|
|
103
|
+
if (duplicateIndex !== -1) {
|
|
104
|
+
itemMeasurementsRef.current[duplicateIndex] = undefined;
|
|
105
|
+
}
|
|
106
|
+
// Store the new measurement
|
|
107
|
+
itemMeasurementsRef.current[originalIndex] = {
|
|
108
|
+
...measurements,
|
|
109
|
+
key: itemKey,
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
}, registration: registration => {
|
|
113
|
+
draxViewProps.registration?.(registration);
|
|
114
|
+
if (registration && originalIndex !== undefined) {
|
|
115
|
+
// console.log(`registering [${index}, ${originalIndex}], ${registration.id}`);
|
|
116
|
+
registrationsRef.current[originalIndex] = registration;
|
|
117
|
+
registration.measure();
|
|
118
|
+
}
|
|
119
|
+
} }));
|
|
120
|
+
};
|
|
121
|
+
exports.DraxListItem = (0, react_1.memo)(RenderItemComponent);
|
package/build/DraxProvider.d.ts
CHANGED
|
@@ -1,4 +1,2 @@
|
|
|
1
|
-
/// <reference types="react" />
|
|
2
|
-
/// <reference types="react" />
|
|
3
1
|
import { DraxProviderProps } from './types';
|
|
4
|
-
export declare const DraxProvider: ({ debug, style, children
|
|
2
|
+
export declare const DraxProvider: ({ debug, style, children }: DraxProviderProps) => JSX.Element;
|