react-native-sortable-dynamic 0.1.0 → 0.2.0
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/README.md +56 -52
- package/lib/commonjs/Config.js +12 -12
- package/lib/commonjs/Config.js.map +1 -1
- package/lib/commonjs/{SortableList.js → SortableContainer.js} +55 -31
- package/lib/commonjs/SortableContainer.js.map +1 -0
- package/lib/commonjs/SortableItem.js +61 -0
- package/lib/commonjs/SortableItem.js.map +1 -0
- package/lib/commonjs/{Item.js → SortableItemWrapper.js} +34 -17
- package/lib/commonjs/SortableItemWrapper.js.map +1 -0
- package/lib/commonjs/SortableView.js +70 -0
- package/lib/commonjs/SortableView.js.map +1 -0
- package/lib/commonjs/index.js +3 -17
- package/lib/commonjs/index.js.map +1 -1
- package/lib/module/Config.js +12 -12
- package/lib/module/Config.js.map +1 -1
- package/lib/module/SortableContainer.js +110 -0
- package/lib/module/SortableContainer.js.map +1 -0
- package/lib/module/SortableItem.js +58 -0
- package/lib/module/SortableItem.js.map +1 -0
- package/lib/module/{Item.js → SortableItemWrapper.js} +34 -17
- package/lib/module/SortableItemWrapper.js.map +1 -0
- package/lib/module/SortableView.js +67 -0
- package/lib/module/SortableView.js.map +1 -0
- package/lib/module/index.js +1 -3
- package/lib/module/index.js.map +1 -1
- package/package.json +1 -1
- package/src/Config.js +12 -12
- package/src/SortableContainer.js +110 -0
- package/src/SortableItem.js +57 -0
- package/src/{Item.js → SortableItemWrapper.js} +32 -17
- package/src/SortableView.js +65 -0
- package/src/index.js +1 -3
- package/lib/commonjs/Item.js.map +0 -1
- package/lib/commonjs/SortableList.js.map +0 -1
- package/lib/commonjs/Tile.js +0 -56
- package/lib/commonjs/Tile.js.map +0 -1
- package/lib/module/Item.js.map +0 -1
- package/lib/module/SortableList.js +0 -86
- package/lib/module/SortableList.js.map +0 -1
- package/lib/module/Tile.js +0 -53
- package/lib/module/Tile.js.map +0 -1
- package/src/SortableList.js +0 -86
- package/src/Tile.js +0 -47
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _react = _interopRequireDefault(require("react"));
|
|
8
|
+
var _Config = _interopRequireDefault(require("./Config.js"));
|
|
9
|
+
var _SortableContainer = _interopRequireDefault(require("./SortableContainer.js"));
|
|
10
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
11
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
12
|
+
/**
|
|
13
|
+
* SortableView Component
|
|
14
|
+
*
|
|
15
|
+
* This component combines the configuration provider and the sortable container into a single component
|
|
16
|
+
* to simplify usage. It provides an interface for managing the layout, editing mode, and the reordering
|
|
17
|
+
* of items within a grid or list.
|
|
18
|
+
*
|
|
19
|
+
* Props:
|
|
20
|
+
* @param {object} config - Configuration options such as `MARGIN` and `COL` for customizing the layout.
|
|
21
|
+
* @param {Array} data - Array of data objects to render and reorder. Each object should have a unique `id`.
|
|
22
|
+
* @param {boolean} editing - Whether the list is in editing mode, enabling drag-and-drop functionality.
|
|
23
|
+
* @param {function} onDragEnd - Callback function called with the updated positions when the drag ends.
|
|
24
|
+
* @param {function} renderItem - Function to render each item inside the sortable view. Receives an object containing `item` and `index`.
|
|
25
|
+
* @param {function} onPress - Function to handle the press event on an item.
|
|
26
|
+
* @param {function} onLongPress - Function to handle the long press event on an item.
|
|
27
|
+
* @param {object} itemStyle - Custom style to apply to each SortableItem.
|
|
28
|
+
* @param {object} itemProps - Additional props to be passed to each SortableItem.
|
|
29
|
+
*
|
|
30
|
+
* Usage:
|
|
31
|
+
* <SortableView
|
|
32
|
+
* config={{ MARGIN: 10, COL: 2 }}
|
|
33
|
+
* data={dataArray}
|
|
34
|
+
* editing={isEditing}
|
|
35
|
+
* onDragEnd={handleDragEnd}
|
|
36
|
+
* renderItem={({ item }) => <YourCustomComponent item={item} />}
|
|
37
|
+
* onPress={handlePress}
|
|
38
|
+
* onLongPress={handleLongPress}
|
|
39
|
+
* itemStyle={{backgroundColor: 'blue'}}
|
|
40
|
+
* itemProps={{disabled: true}}
|
|
41
|
+
* />
|
|
42
|
+
*/const SortableView = ({
|
|
43
|
+
config,
|
|
44
|
+
data,
|
|
45
|
+
editing,
|
|
46
|
+
onDragEnd,
|
|
47
|
+
renderItem,
|
|
48
|
+
onPress,
|
|
49
|
+
onLongPress,
|
|
50
|
+
itemStyle,
|
|
51
|
+
itemProps
|
|
52
|
+
}) => {
|
|
53
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Config.default, {
|
|
54
|
+
config: config,
|
|
55
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_SortableContainer.default, {
|
|
56
|
+
editing: editing,
|
|
57
|
+
data: data,
|
|
58
|
+
onDragEnd: positions => {
|
|
59
|
+
onDragEnd(positions);
|
|
60
|
+
},
|
|
61
|
+
renderItem: renderItem,
|
|
62
|
+
onPress: onPress,
|
|
63
|
+
onLongPress: onLongPress,
|
|
64
|
+
style: itemStyle,
|
|
65
|
+
...itemProps
|
|
66
|
+
})
|
|
67
|
+
});
|
|
68
|
+
};
|
|
69
|
+
var _default = exports.default = SortableView;
|
|
70
|
+
//# sourceMappingURL=SortableView.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireDefault","require","_Config","_SortableContainer","_jsxRuntime","e","__esModule","default","SortableView","config","data","editing","onDragEnd","renderItem","onPress","onLongPress","itemStyle","itemProps","jsx","children","positions","style","_default","exports"],"sourceRoot":"../../src","sources":["SortableView.js"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,OAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,kBAAA,GAAAH,sBAAA,CAAAC,OAAA;AAAoD,IAAAG,WAAA,GAAAH,OAAA;AAAA,SAAAD,uBAAAK,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAEpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GACA,MAAMG,YAAY,GAAGA,CAAC;EACpBC,MAAM;EACNC,IAAI;EACJC,OAAO;EACPC,SAAS;EACTC,UAAU;EACVC,OAAO;EACPC,WAAW;EACXC,SAAS;EACTC;AACF,CAAC,KAAK;EACJ,oBACE,IAAAb,WAAA,CAAAc,GAAA,EAAChB,OAAA,CAAAK,OAAoB;IAACE,MAAM,EAAEA,MAAO;IAAAU,QAAA,eACnC,IAAAf,WAAA,CAAAc,GAAA,EAACf,kBAAA,CAAAI,OAAiB;MAChBI,OAAO,EAAEA,OAAQ;MACjBD,IAAI,EAAEA,IAAK;MACXE,SAAS,EAAGQ,SAAS,IAAK;QACxBR,SAAS,CAACQ,SAAS,CAAC;MACtB,CAAE;MACFP,UAAU,EAAEA,UAAW;MACvBC,OAAO,EAAEA,OAAQ;MACjBC,WAAW,EAAEA,WAAY;MACzBM,KAAK,EAAEL,SAAU;MAAA,GACbC;IAAS,CACd;EAAC,CACkB,CAAC;AAE3B,CAAC;AAAC,IAAAK,QAAA,GAAAC,OAAA,CAAAhB,OAAA,GAEaC,YAAY","ignoreList":[]}
|
package/lib/commonjs/index.js
CHANGED
|
@@ -3,26 +3,12 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
Object.defineProperty(exports, "
|
|
6
|
+
Object.defineProperty(exports, "SortableView", {
|
|
7
7
|
enumerable: true,
|
|
8
8
|
get: function () {
|
|
9
|
-
return
|
|
9
|
+
return _SortableView.default;
|
|
10
10
|
}
|
|
11
11
|
});
|
|
12
|
-
|
|
13
|
-
enumerable: true,
|
|
14
|
-
get: function () {
|
|
15
|
-
return _Config.default;
|
|
16
|
-
}
|
|
17
|
-
});
|
|
18
|
-
Object.defineProperty(exports, "Tile", {
|
|
19
|
-
enumerable: true,
|
|
20
|
-
get: function () {
|
|
21
|
-
return _Tile.default;
|
|
22
|
-
}
|
|
23
|
-
});
|
|
24
|
-
var _Config = _interopRequireDefault(require("./Config.js"));
|
|
25
|
-
var _SortableList = _interopRequireDefault(require("./SortableList.js"));
|
|
26
|
-
var _Tile = _interopRequireDefault(require("./Tile.js"));
|
|
12
|
+
var _SortableView = _interopRequireDefault(require("./SortableView.js"));
|
|
27
13
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
28
14
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["_SortableView","_interopRequireDefault","require","e","__esModule","default"],"sourceRoot":"../../src","sources":["index.js"],"mappings":";;;;;;;;;;;AAAA,IAAAA,aAAA,GAAAC,sBAAA,CAAAC,OAAA;AAAyD,SAAAD,uBAAAE,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA","ignoreList":[]}
|
package/lib/module/Config.js
CHANGED
|
@@ -10,17 +10,16 @@ const {
|
|
|
10
10
|
width
|
|
11
11
|
} = Dimensions.get('window');
|
|
12
12
|
|
|
13
|
-
// Default configuration for the sortable list
|
|
13
|
+
// Default configuration for the sortable grid/list
|
|
14
14
|
const defaultConfig = {
|
|
15
15
|
MARGIN: 10,
|
|
16
16
|
// Default margin between items
|
|
17
17
|
COL: 2,
|
|
18
18
|
// Default number of columns
|
|
19
|
-
// Default size for each item, calculated based on the number of columns and margin
|
|
20
|
-
SIZE: width / 2 - 10 // (width / COL - MARGIN)
|
|
19
|
+
SIZE: width / 2 - 10 // Default size for each item, calculated based on the number of columns and margin
|
|
21
20
|
};
|
|
22
21
|
|
|
23
|
-
// Create a Context for the sortable list configuration
|
|
22
|
+
// Create a Context for the sortable grid/list configuration
|
|
24
23
|
const ConfigContext = /*#__PURE__*/createContext(defaultConfig);
|
|
25
24
|
|
|
26
25
|
// Custom hook to use the sortable configuration context
|
|
@@ -33,7 +32,7 @@ export const animationConfig = {
|
|
|
33
32
|
};
|
|
34
33
|
|
|
35
34
|
// Helper function to calculate the item's position based on its index
|
|
36
|
-
//
|
|
35
|
+
// Used to position items in a grid layout
|
|
37
36
|
export const getPosition = (position, COL, SIZE) => {
|
|
38
37
|
'worklet';
|
|
39
38
|
|
|
@@ -57,9 +56,10 @@ export const getOrder = (tx, ty, max, COL, SIZE) => {
|
|
|
57
56
|
};
|
|
58
57
|
|
|
59
58
|
/**
|
|
60
|
-
*
|
|
59
|
+
* SortableConfigProvider component
|
|
61
60
|
*
|
|
62
|
-
* Wrap your sortable list components with this provider to set custom configuration.
|
|
61
|
+
* Wrap your sortable grid/list components with this provider to set custom configuration.
|
|
62
|
+
* This provider allows for overriding default settings like margin and the number of columns.
|
|
63
63
|
*
|
|
64
64
|
* @param {Object} config - Custom configuration to override the default settings.
|
|
65
65
|
* @param {number} config.MARGIN - Margin between items.
|
|
@@ -68,11 +68,11 @@ export const getOrder = (tx, ty, max, COL, SIZE) => {
|
|
|
68
68
|
*
|
|
69
69
|
* Usage:
|
|
70
70
|
*
|
|
71
|
-
* <
|
|
72
|
-
* <
|
|
73
|
-
* </
|
|
71
|
+
* <SortableConfigProvider config={{ MARGIN: 15, COL: 3 }}>
|
|
72
|
+
* <YourSortableComponent />
|
|
73
|
+
* </SortableConfigProvider>
|
|
74
74
|
*/
|
|
75
|
-
const
|
|
75
|
+
const SortableConfigProvider = ({
|
|
76
76
|
children,
|
|
77
77
|
config
|
|
78
78
|
}) => {
|
|
@@ -89,5 +89,5 @@ const SortableListProvider = ({
|
|
|
89
89
|
children: children
|
|
90
90
|
});
|
|
91
91
|
};
|
|
92
|
-
export default
|
|
92
|
+
export default SortableConfigProvider;
|
|
93
93
|
//# sourceMappingURL=Config.js.map
|
package/lib/module/Config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Dimensions","Easing","React","createContext","useContext","jsx","_jsx","width","get","defaultConfig","MARGIN","COL","SIZE","ConfigContext","useSortableConfig","animationConfig","easing","inOut","ease","duration","getPosition","position","x","y","Math","floor","getOrder","tx","ty","max","round","row","col","min","
|
|
1
|
+
{"version":3,"names":["Dimensions","Easing","React","createContext","useContext","jsx","_jsx","width","get","defaultConfig","MARGIN","COL","SIZE","ConfigContext","useSortableConfig","animationConfig","easing","inOut","ease","duration","getPosition","position","x","y","Math","floor","getOrder","tx","ty","max","round","row","col","min","SortableConfigProvider","children","config","mergedConfig","Provider","value"],"sourceRoot":"../../src","sources":["Config.js"],"mappings":";;AAAA,SAASA,UAAU,QAAQ,cAAc;AACzC,SAASC,MAAM,QAAQ,yBAAyB;AAChD,OAAOC,KAAK,IAAIC,aAAa,EAAEC,UAAU,QAAQ,OAAO;;AAExD;AAAA,SAAAC,GAAA,IAAAC,IAAA;AACA,MAAM;EAAEC;AAAM,CAAC,GAAGP,UAAU,CAACQ,GAAG,CAAC,QAAQ,CAAC;;AAE1C;AACA,MAAMC,aAAa,GAAG;EACpBC,MAAM,EAAE,EAAE;EAAE;EACZC,GAAG,EAAE,CAAC;EAAE;EACRC,IAAI,EAAEL,KAAK,GAAG,CAAC,GAAG,EAAE,CAAE;AACxB,CAAC;;AAED;AACA,MAAMM,aAAa,gBAAGV,aAAa,CAACM,aAAa,CAAC;;AAElD;AACA,OAAO,MAAMK,iBAAiB,GAAGA,CAAA,KAAMV,UAAU,CAACS,aAAa,CAAC;;AAEhE;AACA,OAAO,MAAME,eAAe,GAAG;EAC7BC,MAAM,EAAEf,MAAM,CAACgB,KAAK,CAAChB,MAAM,CAACiB,IAAI,CAAC;EACjCC,QAAQ,EAAE;AACZ,CAAC;;AAED;AACA;AACA,OAAO,MAAMC,WAAW,GAAGA,CAACC,QAAQ,EAAEV,GAAG,EAAEC,IAAI,KAAK;EAClD,SAAS;;EAAE;EACX,OAAO;IACLU,CAAC,EAAED,QAAQ,GAAGV,GAAG,KAAK,CAAC,GAAG,CAAC,GAAGC,IAAI,IAAIS,QAAQ,GAAGV,GAAG,CAAC;IACrDY,CAAC,EAAEC,IAAI,CAACC,KAAK,CAACJ,QAAQ,GAAGV,GAAG,CAAC,GAAGC;EAClC,CAAC;AACH,CAAC;;AAED;AACA,OAAO,MAAMc,QAAQ,GAAGA,CAACC,EAAE,EAAEC,EAAE,EAAEC,GAAG,EAAElB,GAAG,EAAEC,IAAI,KAAK;EAClD,SAAS;;EAAE;EACX,MAAMU,CAAC,GAAGE,IAAI,CAACM,KAAK,CAACH,EAAE,GAAGf,IAAI,CAAC,GAAGA,IAAI;EACtC,MAAMW,CAAC,GAAGC,IAAI,CAACM,KAAK,CAACF,EAAE,GAAGhB,IAAI,CAAC,GAAGA,IAAI;EACtC,MAAMmB,GAAG,GAAGP,IAAI,CAACK,GAAG,CAACN,CAAC,EAAE,CAAC,CAAC,GAAGX,IAAI;EACjC,MAAMoB,GAAG,GAAGR,IAAI,CAACK,GAAG,CAACP,CAAC,EAAE,CAAC,CAAC,GAAGV,IAAI;EACjC,OAAOY,IAAI,CAACS,GAAG,CAACF,GAAG,GAAGpB,GAAG,GAAGqB,GAAG,EAAEH,GAAG,CAAC;AACvC,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMK,sBAAsB,GAAGA,CAAC;EAAEC,QAAQ;EAAEC;AAAO,CAAC,KAAK;EACvD;EACA,MAAMC,YAAY,GAAG;IACnB,GAAG5B,aAAa;IAChB,GAAG2B;EACL,CAAC;;EAED;EACAC,YAAY,CAACzB,IAAI,GAAGL,KAAK,GAAG8B,YAAY,CAAC1B,GAAG,GAAG0B,YAAY,CAAC3B,MAAM;EAElE,oBACEJ,IAAA,CAACO,aAAa,CAACyB,QAAQ;IAACC,KAAK,EAAEF,YAAa;IAAAF,QAAA,EACzCA;EAAQ,CACa,CAAC;AAE7B,CAAC;AAED,eAAeD,sBAAsB","ignoreList":[]}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import React, { memo } from 'react';
|
|
4
|
+
import Animated, { useAnimatedRef, useAnimatedScrollHandler, useSharedValue } from 'react-native-reanimated';
|
|
5
|
+
import SortableItemWrapper from "./SortableItemWrapper.js";
|
|
6
|
+
import SortableItem from "./SortableItem.js";
|
|
7
|
+
import { useSortableConfig } from "./Config.js";
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* SortableContainer Component
|
|
11
|
+
*
|
|
12
|
+
* This component renders a scrollable grid or list of items that can be reordered using drag-and-drop gestures.
|
|
13
|
+
* It manages the layout and drag-and-drop logic for the items, providing the necessary props
|
|
14
|
+
* to each child `SortableItemWrapper` component to enable dragging, scrolling, and reordering functionality.
|
|
15
|
+
*
|
|
16
|
+
* Props:
|
|
17
|
+
* @param {Array} data - Array of data objects to render and reorder. Each object should have a unique `id`.
|
|
18
|
+
* @param {boolean} editing - Whether the container is in editing mode, enabling drag-and-drop functionality.
|
|
19
|
+
* @param {function} onDragEnd - Callback function called with the updated positions when a drag ends.
|
|
20
|
+
* @param {function} renderItem - Function to render the content of each item inside the sortable container. Receives an object containing `item` and `index`.
|
|
21
|
+
* @param {function} onPress - Function to handle the press event on a sortable item.
|
|
22
|
+
* @param {function} onLongPress - Function to handle the long press event on a sortable item.
|
|
23
|
+
* @param {object} itemStyle - Custom style to apply to each SortableItem.
|
|
24
|
+
* @param {...object} itemProps - Additional props to be passed to each SortableItem.
|
|
25
|
+
*
|
|
26
|
+
* Usage:
|
|
27
|
+
* <SortableContainer
|
|
28
|
+
* data={dataArray}
|
|
29
|
+
* editing={isEditing}
|
|
30
|
+
* onDragEnd={handleDragEnd}
|
|
31
|
+
* renderItem={({ item }) => <YourCustomComponent item={item} />}
|
|
32
|
+
* onPress={handlePress}
|
|
33
|
+
* onLongPress={handleLongPress}
|
|
34
|
+
* accessible={true}
|
|
35
|
+
* />
|
|
36
|
+
*/
|
|
37
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
38
|
+
const SortableContainer = ({
|
|
39
|
+
data,
|
|
40
|
+
editing,
|
|
41
|
+
onDragEnd,
|
|
42
|
+
renderItem,
|
|
43
|
+
onPress,
|
|
44
|
+
onLongPress,
|
|
45
|
+
itemStyle,
|
|
46
|
+
...itemProps
|
|
47
|
+
}) => {
|
|
48
|
+
// Get the configuration for columns and size from context
|
|
49
|
+
const {
|
|
50
|
+
COL,
|
|
51
|
+
SIZE
|
|
52
|
+
} = useSortableConfig();
|
|
53
|
+
|
|
54
|
+
// Shared values to track scrolling and item positions
|
|
55
|
+
const scrollY = useSharedValue(0); // Current scroll position
|
|
56
|
+
const scrollView = useAnimatedRef(); // Reference to the scroll view
|
|
57
|
+
const positions = useSharedValue(data.reduce((acc, item, index) => ({
|
|
58
|
+
...acc,
|
|
59
|
+
[item.id]: index
|
|
60
|
+
}), {}));
|
|
61
|
+
|
|
62
|
+
// Scroll event handler to update scrollY shared value
|
|
63
|
+
const onScroll = useAnimatedScrollHandler({
|
|
64
|
+
onScroll: ({
|
|
65
|
+
contentOffset: {
|
|
66
|
+
y
|
|
67
|
+
}
|
|
68
|
+
}) => {
|
|
69
|
+
scrollY.value = y;
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
return /*#__PURE__*/_jsx(Animated.ScrollView, {
|
|
73
|
+
onScroll: onScroll,
|
|
74
|
+
ref: scrollView,
|
|
75
|
+
contentContainerStyle: {
|
|
76
|
+
// Calculate the total height needed for the scroll view content
|
|
77
|
+
height: Math.ceil(data.length / COL) * SIZE
|
|
78
|
+
},
|
|
79
|
+
showsVerticalScrollIndicator: false,
|
|
80
|
+
bounces: false,
|
|
81
|
+
scrollEventThrottle: 16 // Control scroll event frequency
|
|
82
|
+
,
|
|
83
|
+
children: data.map((item, index) => /*#__PURE__*/_jsx(SortableItemWrapper, {
|
|
84
|
+
id: item.id,
|
|
85
|
+
positions: positions,
|
|
86
|
+
editing: editing,
|
|
87
|
+
draggable: item.draggable,
|
|
88
|
+
reorderable: item.reorderable,
|
|
89
|
+
data: data,
|
|
90
|
+
onDragEnd: onDragEnd,
|
|
91
|
+
scrollView: scrollView,
|
|
92
|
+
scrollY: scrollY,
|
|
93
|
+
children: /*#__PURE__*/_jsx(SortableItem, {
|
|
94
|
+
id: item.id,
|
|
95
|
+
draggable: item.draggable,
|
|
96
|
+
reorderable: item.reorderable,
|
|
97
|
+
onPress: () => onPress && onPress(item),
|
|
98
|
+
onLongPress: () => onLongPress && onLongPress(item),
|
|
99
|
+
style: itemStyle,
|
|
100
|
+
...itemProps,
|
|
101
|
+
children: renderItem({
|
|
102
|
+
item: item,
|
|
103
|
+
index
|
|
104
|
+
})
|
|
105
|
+
})
|
|
106
|
+
}, item.id))
|
|
107
|
+
});
|
|
108
|
+
};
|
|
109
|
+
export default /*#__PURE__*/memo(SortableContainer);
|
|
110
|
+
//# sourceMappingURL=SortableContainer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","memo","Animated","useAnimatedRef","useAnimatedScrollHandler","useSharedValue","SortableItemWrapper","SortableItem","useSortableConfig","jsx","_jsx","SortableContainer","data","editing","onDragEnd","renderItem","onPress","onLongPress","itemStyle","itemProps","COL","SIZE","scrollY","scrollView","positions","reduce","acc","item","index","id","onScroll","contentOffset","y","value","ScrollView","ref","contentContainerStyle","height","Math","ceil","length","showsVerticalScrollIndicator","bounces","scrollEventThrottle","children","map","draggable","reorderable","style"],"sourceRoot":"../../src","sources":["SortableContainer.js"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import React from 'react';
|
|
4
|
+
import { TouchableOpacity } from 'react-native';
|
|
5
|
+
import { useSortableConfig } from "./Config.js";
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* SortableItem Component
|
|
9
|
+
*
|
|
10
|
+
* This component represents a single item in the sortable grid or list. It is designed to be flexible
|
|
11
|
+
* and supports various user interactions, including press and long press events. The size of each item
|
|
12
|
+
* is dynamically adjusted based on the configuration provided by the `SortableConfigProvider`.
|
|
13
|
+
*
|
|
14
|
+
* Props:
|
|
15
|
+
* Accepts all TouchableOpacity props, including but not limited to:
|
|
16
|
+
* @param {function} onPress - Callback function called when the item is pressed.
|
|
17
|
+
* @param {function} onLongPress - Callback function called when the item is long-pressed.
|
|
18
|
+
* @param {number} activeOpacity - The opacity of the item when it is pressed. Default is 0.7.
|
|
19
|
+
* @param {object} style - Additional style for the item.
|
|
20
|
+
* @param {React.ReactNode} children - The content to render inside the item.
|
|
21
|
+
* @param {...object} rest - Other TouchableOpacity props such as `accessible`, `accessibilityLabel`, etc.
|
|
22
|
+
*
|
|
23
|
+
* Usage:
|
|
24
|
+
*
|
|
25
|
+
* <SortableItem onPress={handlePress} onLongPress={handleLongPress} accessibilityLabel="Custom Item">
|
|
26
|
+
* <Text>Item Content</Text>
|
|
27
|
+
* </SortableItem>
|
|
28
|
+
*/
|
|
29
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
30
|
+
const SortableItem = ({
|
|
31
|
+
onPress,
|
|
32
|
+
onLongPress,
|
|
33
|
+
activeOpacity = 0.7,
|
|
34
|
+
children,
|
|
35
|
+
style,
|
|
36
|
+
...rest
|
|
37
|
+
}) => {
|
|
38
|
+
// Get the size of the item from the sortable config context
|
|
39
|
+
const {
|
|
40
|
+
SIZE
|
|
41
|
+
} = useSortableConfig();
|
|
42
|
+
|
|
43
|
+
// Define the style for the item, ensuring that its size is consistent across the grid or list
|
|
44
|
+
const containerStyle = {
|
|
45
|
+
width: SIZE,
|
|
46
|
+
height: SIZE
|
|
47
|
+
};
|
|
48
|
+
return /*#__PURE__*/_jsx(TouchableOpacity, {
|
|
49
|
+
style: [containerStyle, style],
|
|
50
|
+
onPress: onPress,
|
|
51
|
+
onLongPress: onLongPress,
|
|
52
|
+
activeOpacity: activeOpacity,
|
|
53
|
+
...rest,
|
|
54
|
+
children: children
|
|
55
|
+
});
|
|
56
|
+
};
|
|
57
|
+
export default SortableItem;
|
|
58
|
+
//# sourceMappingURL=SortableItem.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","TouchableOpacity","useSortableConfig","jsx","_jsx","SortableItem","onPress","onLongPress","activeOpacity","children","style","rest","SIZE","containerStyle","width","height"],"sourceRoot":"../../src","sources":["SortableItem.js"],"mappings":";;AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,gBAAgB,QAAQ,cAAc;AAC/C,SAASC,iBAAiB,QAAQ,aAAU;;AAE5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AArBA,SAAAC,GAAA,IAAAC,IAAA;AAsBA,MAAMC,YAAY,GAAGA,CAAC;EACpBC,OAAO;EACPC,WAAW;EACXC,aAAa,GAAG,GAAG;EACnBC,QAAQ;EACRC,KAAK;EACL,GAAGC;AACL,CAAC,KAAK;EACJ;EACA,MAAM;IAAEC;EAAK,CAAC,GAAGV,iBAAiB,CAAC,CAAC;;EAEpC;EACA,MAAMW,cAAc,GAAG;IACrBC,KAAK,EAAEF,IAAI;IACXG,MAAM,EAAEH;EACV,CAAC;EAED,oBACER,IAAA,CAACH,gBAAgB;IACfS,KAAK,EAAE,CAACG,cAAc,EAAEH,KAAK,CAAE;IAC/BJ,OAAO,EAAEA,OAAQ;IACjBC,WAAW,EAAEA,WAAY;IACzBC,aAAa,EAAEA,aAAc;IAAA,GACzBG,IAAI;IAAAF,QAAA,EAEPA;EAAQ,CACO,CAAC;AAEvB,CAAC;AAED,eAAeJ,YAAY","ignoreList":[]}
|
|
@@ -9,24 +9,39 @@ import { animationConfig, getOrder, getPosition } from "./Config.js";
|
|
|
9
9
|
import { useSortableConfig } from "./Config.js";
|
|
10
10
|
|
|
11
11
|
/**
|
|
12
|
-
*
|
|
12
|
+
* SortableItemWrapper Component
|
|
13
13
|
*
|
|
14
|
-
* This component
|
|
15
|
-
*
|
|
14
|
+
* This component manages the gesture handling and animations for a draggable item in the sortable grid or list.
|
|
15
|
+
* It uses the Reanimated 2 and Gesture Handler libraries to provide smooth drag-and-drop functionality.
|
|
16
|
+
* The component calculates the item's position and handles reordering logic when the item is dragged.
|
|
16
17
|
*
|
|
17
18
|
* Props:
|
|
18
|
-
* @param {React.ReactNode} children - The content to render inside the item.
|
|
19
|
+
* @param {React.ReactNode} children - The content to render inside the draggable item.
|
|
19
20
|
* @param {object} positions - Shared value that contains the current positions of all items.
|
|
20
21
|
* @param {number} id - Unique identifier for the item.
|
|
21
|
-
* @param {function} onDragEnd - Callback function triggered when dragging ends.
|
|
22
|
-
* @param {object} scrollView - Reference to the scroll view for scrolling during drag.
|
|
22
|
+
* @param {function} onDragEnd - Callback function triggered when dragging ends, providing the updated item positions.
|
|
23
|
+
* @param {object} scrollView - Reference to the scroll view for scrolling the list during drag.
|
|
23
24
|
* @param {object} scrollY - Shared value representing the current scroll position.
|
|
24
|
-
* @param {boolean} editing - Whether the list is in editing mode.
|
|
25
|
+
* @param {boolean} editing - Whether the grid or list is in editing mode, enabling drag-and-drop.
|
|
25
26
|
* @param {boolean} draggable - Whether the item is draggable (default: true).
|
|
26
|
-
* @param {Array}
|
|
27
|
+
* @param {Array} data - Array of items used to determine the reorderable state of items.
|
|
28
|
+
*
|
|
29
|
+
* Usage:
|
|
30
|
+
* <SortableItemWrapper
|
|
31
|
+
* id={item.id}
|
|
32
|
+
* positions={positions}
|
|
33
|
+
* editing={isEditing}
|
|
34
|
+
* draggable={item.draggable}
|
|
35
|
+
* data={itemsArray}
|
|
36
|
+
* onDragEnd={handleDragEnd}
|
|
37
|
+
* scrollView={scrollView}
|
|
38
|
+
* scrollY={scrollY}
|
|
39
|
+
* >
|
|
40
|
+
* <YourItemComponent />
|
|
41
|
+
* </SortableItemWrapper>
|
|
27
42
|
*/
|
|
28
43
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
29
|
-
const
|
|
44
|
+
const SortableItemWrapper = ({
|
|
30
45
|
children,
|
|
31
46
|
positions,
|
|
32
47
|
id,
|
|
@@ -35,7 +50,7 @@ const Item = ({
|
|
|
35
50
|
scrollY,
|
|
36
51
|
editing,
|
|
37
52
|
draggable = true,
|
|
38
|
-
|
|
53
|
+
data
|
|
39
54
|
}) => {
|
|
40
55
|
// Get safe area insets for accurate height calculation
|
|
41
56
|
const inset = useSafeAreaInsets();
|
|
@@ -44,12 +59,13 @@ const Item = ({
|
|
|
44
59
|
// Get the configuration for columns and size
|
|
45
60
|
const {
|
|
46
61
|
COL,
|
|
47
|
-
SIZE
|
|
62
|
+
SIZE,
|
|
63
|
+
MARGIN
|
|
48
64
|
} = useSortableConfig();
|
|
49
65
|
|
|
50
66
|
// Calculate content height based on the number of items
|
|
51
67
|
const contentHeight = Object.keys(positions.value).length / COL * SIZE;
|
|
52
|
-
const isGestureActive = useSharedValue(false); // Whether the item is being
|
|
68
|
+
const isGestureActive = useSharedValue(false); // Whether the item is actively being dragged
|
|
53
69
|
|
|
54
70
|
// Calculate initial position of the item
|
|
55
71
|
const position = getPosition(positions.value[id], COL, SIZE);
|
|
@@ -81,7 +97,7 @@ const Item = ({
|
|
|
81
97
|
// Store the starting position
|
|
82
98
|
ctx.x = translateX.value;
|
|
83
99
|
ctx.y = translateY.value;
|
|
84
|
-
isGestureActive.value = false;
|
|
100
|
+
isGestureActive.value = false;
|
|
85
101
|
}
|
|
86
102
|
},
|
|
87
103
|
onActive: ({
|
|
@@ -101,7 +117,7 @@ const Item = ({
|
|
|
101
117
|
const idToSwap = Object.keys(positions.value).find(key => positions.value[key] === newOrder);
|
|
102
118
|
|
|
103
119
|
// Only swap if the target item is reorderable
|
|
104
|
-
const targetItem =
|
|
120
|
+
const targetItem = data.find(tile => tile.id === Number(idToSwap));
|
|
105
121
|
if (idToSwap && targetItem?.reorderable !== false) {
|
|
106
122
|
const newPositions = {
|
|
107
123
|
...positions.value
|
|
@@ -151,7 +167,7 @@ const Item = ({
|
|
|
151
167
|
|
|
152
168
|
// Animated style for the item
|
|
153
169
|
const style = useAnimatedStyle(() => {
|
|
154
|
-
const zIndex = isGestureActive.value ? 100 : 0; // Bring the item to front when active
|
|
170
|
+
const zIndex = isGestureActive.value ? 100 : 0; // Bring the item to the front when active
|
|
155
171
|
const scale = editing && isGestureActive.value ? withSpring(1.05) : withSpring(1); // Slightly enlarge the item when dragging
|
|
156
172
|
return {
|
|
157
173
|
position: 'absolute',
|
|
@@ -159,6 +175,7 @@ const Item = ({
|
|
|
159
175
|
left: 0,
|
|
160
176
|
width: SIZE,
|
|
161
177
|
height: SIZE,
|
|
178
|
+
margin: MARGIN,
|
|
162
179
|
zIndex,
|
|
163
180
|
transform: [{
|
|
164
181
|
translateX: translateX.value
|
|
@@ -181,5 +198,5 @@ const Item = ({
|
|
|
181
198
|
})
|
|
182
199
|
});
|
|
183
200
|
};
|
|
184
|
-
export default
|
|
185
|
-
//# sourceMappingURL=
|
|
201
|
+
export default SortableItemWrapper;
|
|
202
|
+
//# sourceMappingURL=SortableItemWrapper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","useEffect","Dimensions","StyleSheet","Animated","useAnimatedGestureHandler","useAnimatedStyle","useAnimatedReaction","withSpring","scrollTo","withTiming","useSharedValue","runOnJS","PanGestureHandler","useSafeAreaInsets","animationConfig","getOrder","getPosition","useSortableConfig","jsx","_jsx","SortableItemWrapper","children","positions","id","onDragEnd","scrollView","scrollY","editing","draggable","data","inset","containerHeight","get","height","top","bottom","COL","SIZE","MARGIN","contentHeight","Object","keys","value","length","isGestureActive","position","translateX","x","translateY","y","newOrder","pos","onGestureEvent","onStart","_","ctx","onActive","translationX","translationY","oldOrder","idToSwap","find","key","targetItem","tile","Number","reorderable","newPositions","lowerBound","upperBound","maxScroll","leftToScrollDown","diff","Math","min","onEnd","newPosition","style","zIndex","scale","left","width","margin","transform","View","enabled","absoluteFill"],"sourceRoot":"../../src","sources":["SortableItemWrapper.js"],"mappings":";;AAAA,OAAOA,KAAK,IAAIC,SAAS,QAAQ,OAAO;AACxC,SAASC,UAAU,EAAEC,UAAU,QAAQ,cAAc;AACrD,OAAOC,QAAQ,IACbC,yBAAyB,EACzBC,gBAAgB,EAChBC,mBAAmB,EACnBC,UAAU,EACVC,QAAQ,EACRC,UAAU,EACVC,cAAc,EACdC,OAAO,QACF,yBAAyB;AAChC,SAASC,iBAAiB,QAAQ,8BAA8B;AAChE,SAASC,iBAAiB,QAAQ,gCAAgC;AAClE,SAASC,eAAe,EAAEC,QAAQ,EAAEC,WAAW,QAAQ,aAAU;AACjE,SAASC,iBAAiB,QAAQ,aAAU;;AAE5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA/BA,SAAAC,GAAA,IAAAC,IAAA;AAgCA,MAAMC,mBAAmB,GAAGA,CAAC;EAC3BC,QAAQ;EACRC,SAAS;EACTC,EAAE;EACFC,SAAS;EACTC,UAAU;EACVC,OAAO;EACPC,OAAO;EACPC,SAAS,GAAG,IAAI;EAChBC;AACF,CAAC,KAAK;EACJ;EACA,MAAMC,KAAK,GAAGjB,iBAAiB,CAAC,CAAC;EACjC,MAAMkB,eAAe,GACnB9B,UAAU,CAAC+B,GAAG,CAAC,QAAQ,CAAC,CAACC,MAAM,GAAGH,KAAK,CAACI,GAAG,GAAGJ,KAAK,CAACK,MAAM;;EAE5D;EACA,MAAM;IAAEC,GAAG;IAAEC,IAAI;IAAEC;EAAO,CAAC,GAAGrB,iBAAiB,CAAC,CAAC;;EAEjD;EACA,MAAMsB,aAAa,GAAIC,MAAM,CAACC,IAAI,CAACnB,SAAS,CAACoB,KAAK,CAAC,CAACC,MAAM,GAAGP,GAAG,GAAIC,IAAI;EACxE,MAAMO,eAAe,GAAGlC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;;EAE/C;EACA,MAAMmC,QAAQ,GAAG7B,WAAW,CAACM,SAAS,CAACoB,KAAK,CAACnB,EAAE,CAAC,EAAEa,GAAG,EAAEC,IAAI,CAAC;EAC5D,MAAMS,UAAU,GAAGpC,cAAc,CAACmC,QAAQ,CAACE,CAAC,CAAC;EAC7C,MAAMC,UAAU,GAAGtC,cAAc,CAACmC,QAAQ,CAACI,CAAC,CAAC;;EAE7C;EACAjD,SAAS,CAAC,MAAM;IACd,IAAI,CAAC2B,OAAO,EAAE;MACZiB,eAAe,CAACF,KAAK,GAAG,KAAK;IAC/B;EACF,CAAC,EAAE,CAACf,OAAO,EAAEiB,eAAe,CAAC,CAAC;;EAE9B;EACAtC,mBAAmB,CACjB,MAAMgB,SAAS,CAACoB,KAAK,CAACnB,EAAE,CAAC;EAAE;EAC1B2B,QAAQ,IAAK;IACZ,IAAI,CAACN,eAAe,CAACF,KAAK,EAAE;MAC1B,MAAMS,GAAG,GAAGnC,WAAW,CAACkC,QAAQ,EAAEd,GAAG,EAAEC,IAAI,CAAC;MAC5CS,UAAU,CAACJ,KAAK,GAAGjC,UAAU,CAAC0C,GAAG,CAACJ,CAAC,EAAEjC,eAAe,CAAC;MACrDkC,UAAU,CAACN,KAAK,GAAGjC,UAAU,CAAC0C,GAAG,CAACF,CAAC,EAAEnC,eAAe,CAAC;IACvD;EACF,CACF,CAAC;;EAED;EACA,MAAMsC,cAAc,GAAGhD,yBAAyB,CAAC;IAC/CiD,OAAO,EAAEA,CAACC,CAAC,EAAEC,GAAG,KAAK;MACnB,IAAI5B,OAAO,IAAIC,SAAS,EAAE;QACxB;QACA2B,GAAG,CAACR,CAAC,GAAGD,UAAU,CAACJ,KAAK;QACxBa,GAAG,CAACN,CAAC,GAAGD,UAAU,CAACN,KAAK;QACxBE,eAAe,CAACF,KAAK,GAAG,KAAK;MAC/B;IACF,CAAC;IACDc,QAAQ,EAAEA,CAAC;MAAEC,YAAY;MAAEC;IAAa,CAAC,EAAEH,GAAG,KAAK;MACjD,IAAI5B,OAAO,IAAIC,SAAS,EAAE;QACxB;QACAkB,UAAU,CAACJ,KAAK,GAAGa,GAAG,CAACR,CAAC,GAAGU,YAAY;QACvCT,UAAU,CAACN,KAAK,GAAGa,GAAG,CAACN,CAAC,GAAGS,YAAY;;QAEvC;QACA,MAAMR,QAAQ,GAAGnC,QAAQ,CACvB+B,UAAU,CAACJ,KAAK,EAChBM,UAAU,CAACN,KAAK,EAChBF,MAAM,CAACC,IAAI,CAACnB,SAAS,CAACoB,KAAK,CAAC,CAACC,MAAM,GAAG,CAAC,EACvCP,GAAG,EACHC,IACF,CAAC;QAED,MAAMsB,QAAQ,GAAGrC,SAAS,CAACoB,KAAK,CAACnB,EAAE,CAAC;QACpC,IAAI2B,QAAQ,KAAKS,QAAQ,EAAE;UACzB;UACA,MAAMC,QAAQ,GAAGpB,MAAM,CAACC,IAAI,CAACnB,SAAS,CAACoB,KAAK,CAAC,CAACmB,IAAI,CAC/CC,GAAG,IAAKxC,SAAS,CAACoB,KAAK,CAACoB,GAAG,CAAC,KAAKZ,QACpC,CAAC;;UAED;UACA,MAAMa,UAAU,GAAGlC,IAAI,CAACgC,IAAI,CAAEG,IAAI,IAAKA,IAAI,CAACzC,EAAE,KAAK0C,MAAM,CAACL,QAAQ,CAAC,CAAC;UACpE,IAAIA,QAAQ,IAAIG,UAAU,EAAEG,WAAW,KAAK,KAAK,EAAE;YACjD,MAAMC,YAAY,GAAG;cAAE,GAAG7C,SAAS,CAACoB;YAAM,CAAC;YAC3CyB,YAAY,CAAC5C,EAAE,CAAC,GAAG2B,QAAQ;YAC3BiB,YAAY,CAACP,QAAQ,CAAC,GAAGD,QAAQ;YACjCrC,SAAS,CAACoB,KAAK,GAAGyB,YAAY;UAChC;QACF;;QAEA;QACA,MAAMC,UAAU,GAAG1C,OAAO,CAACgB,KAAK;QAChC,MAAM2B,UAAU,GAAGD,UAAU,GAAGrC,eAAe,GAAGM,IAAI;QACtD,MAAMiC,SAAS,GAAG/B,aAAa,GAAGR,eAAe;QACjD,MAAMwC,gBAAgB,GAAGD,SAAS,GAAG5C,OAAO,CAACgB,KAAK;;QAElD;QACA,IAAIM,UAAU,CAACN,KAAK,GAAG0B,UAAU,EAAE;UACjC,MAAMI,IAAI,GAAGC,IAAI,CAACC,GAAG,CAACN,UAAU,GAAGpB,UAAU,CAACN,KAAK,EAAE0B,UAAU,CAAC;UAChE1C,OAAO,CAACgB,KAAK,IAAI8B,IAAI;UACrBhE,QAAQ,CAACiB,UAAU,EAAE,CAAC,EAAEC,OAAO,CAACgB,KAAK,EAAE,KAAK,CAAC;UAC7Ca,GAAG,CAACN,CAAC,IAAIuB,IAAI;UACbxB,UAAU,CAACN,KAAK,GAAGa,GAAG,CAACN,CAAC,GAAGS,YAAY;QACzC;QACA;QACA,IAAIV,UAAU,CAACN,KAAK,GAAG2B,UAAU,EAAE;UACjC,MAAMG,IAAI,GAAGC,IAAI,CAACC,GAAG,CACnB1B,UAAU,CAACN,KAAK,GAAG2B,UAAU,EAC7BE,gBACF,CAAC;UACD7C,OAAO,CAACgB,KAAK,IAAI8B,IAAI;UACrBhE,QAAQ,CAACiB,UAAU,EAAE,CAAC,EAAEC,OAAO,CAACgB,KAAK,EAAE,KAAK,CAAC;UAC7Ca,GAAG,CAACN,CAAC,IAAIuB,IAAI;UACbxB,UAAU,CAACN,KAAK,GAAGa,GAAG,CAACN,CAAC,GAAGS,YAAY;QACzC;MACF;IACF,CAAC;IACDiB,KAAK,EAAEA,CAAA,KAAM;MACX,IAAI/C,SAAS,EAAE;QACb;QACA,MAAMgD,WAAW,GAAG5D,WAAW,CAACM,SAAS,CAACoB,KAAK,CAACnB,EAAE,CAAC,EAAEa,GAAG,EAAEC,IAAI,CAAC;QAC/DS,UAAU,CAACJ,KAAK,GAAGjC,UAAU,CAACmE,WAAW,CAAC7B,CAAC,EAAEjC,eAAe,EAAE,MAAM;UAClE8B,eAAe,CAACF,KAAK,GAAG,KAAK,CAAC,CAAC;UAC/B/B,OAAO,CAACa,SAAS,CAAC,CAACF,SAAS,CAACoB,KAAK,CAAC,CAAC,CAAC;QACvC,CAAC,CAAC;QACFM,UAAU,CAACN,KAAK,GAAGjC,UAAU,CAACmE,WAAW,CAAC3B,CAAC,EAAEnC,eAAe,CAAC;MAC/D;IACF;EACF,CAAC,CAAC;;EAEF;EACA,MAAM+D,KAAK,GAAGxE,gBAAgB,CAAC,MAAM;IACnC,MAAMyE,MAAM,GAAGlC,eAAe,CAACF,KAAK,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;IAChD,MAAMqC,KAAK,GACTpD,OAAO,IAAIiB,eAAe,CAACF,KAAK,GAAGnC,UAAU,CAAC,IAAI,CAAC,GAAGA,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;IACvE,OAAO;MACLsC,QAAQ,EAAE,UAAU;MACpBX,GAAG,EAAE,CAAC;MACN8C,IAAI,EAAE,CAAC;MACPC,KAAK,EAAE5C,IAAI;MACXJ,MAAM,EAAEI,IAAI;MACZ6C,MAAM,EAAE5C,MAAM;MACdwC,MAAM;MACNK,SAAS,EAAE,CACT;QAAErC,UAAU,EAAEA,UAAU,CAACJ;MAAM,CAAC,EAChC;QAAEM,UAAU,EAAEA,UAAU,CAACN;MAAM,CAAC,EAChC;QAAEqC;MAAM,CAAC;IAEb,CAAC;EACH,CAAC,CAAC;EAEF,oBACE5D,IAAA,CAAChB,QAAQ,CAACiF,IAAI;IAACP,KAAK,EAAEA,KAAM;IAAAxD,QAAA,eAC1BF,IAAA,CAACP,iBAAiB;MAACyE,OAAO,EAAE1D,OAAQ;MAACyB,cAAc,EAAEA,cAAe;MAAA/B,QAAA,eAClEF,IAAA,CAAChB,QAAQ,CAACiF,IAAI;QAACP,KAAK,EAAE3E,UAAU,CAACoF,YAAa;QAAAjE,QAAA,EAC3CA;MAAQ,CACI;IAAC,CACC;EAAC,CACP,CAAC;AAEpB,CAAC;AAED,eAAeD,mBAAmB","ignoreList":[]}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import React from 'react';
|
|
4
|
+
import SortableListProvider from "./Config.js";
|
|
5
|
+
import SortableContainer from "./SortableContainer.js";
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* SortableView Component
|
|
9
|
+
*
|
|
10
|
+
* This component combines the configuration provider and the sortable container into a single component
|
|
11
|
+
* to simplify usage. It provides an interface for managing the layout, editing mode, and the reordering
|
|
12
|
+
* of items within a grid or list.
|
|
13
|
+
*
|
|
14
|
+
* Props:
|
|
15
|
+
* @param {object} config - Configuration options such as `MARGIN` and `COL` for customizing the layout.
|
|
16
|
+
* @param {Array} data - Array of data objects to render and reorder. Each object should have a unique `id`.
|
|
17
|
+
* @param {boolean} editing - Whether the list is in editing mode, enabling drag-and-drop functionality.
|
|
18
|
+
* @param {function} onDragEnd - Callback function called with the updated positions when the drag ends.
|
|
19
|
+
* @param {function} renderItem - Function to render each item inside the sortable view. Receives an object containing `item` and `index`.
|
|
20
|
+
* @param {function} onPress - Function to handle the press event on an item.
|
|
21
|
+
* @param {function} onLongPress - Function to handle the long press event on an item.
|
|
22
|
+
* @param {object} itemStyle - Custom style to apply to each SortableItem.
|
|
23
|
+
* @param {object} itemProps - Additional props to be passed to each SortableItem.
|
|
24
|
+
*
|
|
25
|
+
* Usage:
|
|
26
|
+
* <SortableView
|
|
27
|
+
* config={{ MARGIN: 10, COL: 2 }}
|
|
28
|
+
* data={dataArray}
|
|
29
|
+
* editing={isEditing}
|
|
30
|
+
* onDragEnd={handleDragEnd}
|
|
31
|
+
* renderItem={({ item }) => <YourCustomComponent item={item} />}
|
|
32
|
+
* onPress={handlePress}
|
|
33
|
+
* onLongPress={handleLongPress}
|
|
34
|
+
* itemStyle={{backgroundColor: 'blue'}}
|
|
35
|
+
* itemProps={{disabled: true}}
|
|
36
|
+
* />
|
|
37
|
+
*/
|
|
38
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
39
|
+
const SortableView = ({
|
|
40
|
+
config,
|
|
41
|
+
data,
|
|
42
|
+
editing,
|
|
43
|
+
onDragEnd,
|
|
44
|
+
renderItem,
|
|
45
|
+
onPress,
|
|
46
|
+
onLongPress,
|
|
47
|
+
itemStyle,
|
|
48
|
+
itemProps
|
|
49
|
+
}) => {
|
|
50
|
+
return /*#__PURE__*/_jsx(SortableListProvider, {
|
|
51
|
+
config: config,
|
|
52
|
+
children: /*#__PURE__*/_jsx(SortableContainer, {
|
|
53
|
+
editing: editing,
|
|
54
|
+
data: data,
|
|
55
|
+
onDragEnd: positions => {
|
|
56
|
+
onDragEnd(positions);
|
|
57
|
+
},
|
|
58
|
+
renderItem: renderItem,
|
|
59
|
+
onPress: onPress,
|
|
60
|
+
onLongPress: onLongPress,
|
|
61
|
+
style: itemStyle,
|
|
62
|
+
...itemProps
|
|
63
|
+
})
|
|
64
|
+
});
|
|
65
|
+
};
|
|
66
|
+
export default SortableView;
|
|
67
|
+
//# sourceMappingURL=SortableView.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","SortableListProvider","SortableContainer","jsx","_jsx","SortableView","config","data","editing","onDragEnd","renderItem","onPress","onLongPress","itemStyle","itemProps","children","positions","style"],"sourceRoot":"../../src","sources":["SortableView.js"],"mappings":";;AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,OAAOC,oBAAoB,MAAM,aAAU;AAC3C,OAAOC,iBAAiB,MAAM,wBAAqB;;AAEnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA9BA,SAAAC,GAAA,IAAAC,IAAA;AA+BA,MAAMC,YAAY,GAAGA,CAAC;EACpBC,MAAM;EACNC,IAAI;EACJC,OAAO;EACPC,SAAS;EACTC,UAAU;EACVC,OAAO;EACPC,WAAW;EACXC,SAAS;EACTC;AACF,CAAC,KAAK;EACJ,oBACEV,IAAA,CAACH,oBAAoB;IAACK,MAAM,EAAEA,MAAO;IAAAS,QAAA,eACnCX,IAAA,CAACF,iBAAiB;MAChBM,OAAO,EAAEA,OAAQ;MACjBD,IAAI,EAAEA,IAAK;MACXE,SAAS,EAAGO,SAAS,IAAK;QACxBP,SAAS,CAACO,SAAS,CAAC;MACtB,CAAE;MACFN,UAAU,EAAEA,UAAW;MACvBC,OAAO,EAAEA,OAAQ;MACjBC,WAAW,EAAEA,WAAY;MACzBK,KAAK,EAAEJ,SAAU;MAAA,GACbC;IAAS,CACd;EAAC,CACkB,CAAC;AAE3B,CAAC;AAED,eAAeT,YAAY","ignoreList":[]}
|
package/lib/module/index.js
CHANGED
|
@@ -1,6 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
export { default as
|
|
4
|
-
export { default as SortableList } from "./SortableList.js";
|
|
5
|
-
export { default as Tile } from "./Tile.js";
|
|
3
|
+
export { default as SortableView } from "./SortableView.js";
|
|
6
4
|
//# sourceMappingURL=index.js.map
|
package/lib/module/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["default","
|
|
1
|
+
{"version":3,"names":["default","SortableView"],"sourceRoot":"../../src","sources":["index.js"],"mappings":";;AAAA,SAASA,OAAO,IAAIC,YAAY,QAAQ,mBAAgB","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-native-sortable-dynamic",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "This package provides a highly customizable, animated, and performant sortable grid list component for React Native. It allows users to easily reorder grid items through drag-and-drop gestures, with smooth animations powered by react-native-reanimated and gesture handling by react-native-gesture-handler.",
|
|
5
5
|
"source": "./src/index.js",
|
|
6
6
|
"main": "./lib/commonjs/index.js",
|