react-native-sortable-dynamic 0.1.1 → 0.2.1

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 (44) hide show
  1. package/README.md +54 -50
  2. package/lib/commonjs/Config.js +12 -12
  3. package/lib/commonjs/Config.js.map +1 -1
  4. package/lib/commonjs/SortableContainer.js +115 -0
  5. package/lib/commonjs/SortableContainer.js.map +1 -0
  6. package/lib/commonjs/SortableItem.js +61 -0
  7. package/lib/commonjs/SortableItem.js.map +1 -0
  8. package/lib/commonjs/{Item.js → SortableItemWrapper.js} +31 -16
  9. package/lib/commonjs/SortableItemWrapper.js.map +1 -0
  10. package/lib/commonjs/SortableView.js +70 -0
  11. package/lib/commonjs/SortableView.js.map +1 -0
  12. package/lib/commonjs/index.js +3 -17
  13. package/lib/commonjs/index.js.map +1 -1
  14. package/lib/module/Config.js +12 -12
  15. package/lib/module/Config.js.map +1 -1
  16. package/lib/module/SortableContainer.js +110 -0
  17. package/lib/module/SortableContainer.js.map +1 -0
  18. package/lib/module/SortableItem.js +58 -0
  19. package/lib/module/SortableItem.js.map +1 -0
  20. package/lib/module/{Item.js → SortableItemWrapper.js} +31 -16
  21. package/lib/module/SortableItemWrapper.js.map +1 -0
  22. package/lib/module/SortableView.js +67 -0
  23. package/lib/module/SortableView.js.map +1 -0
  24. package/lib/module/index.js +1 -3
  25. package/lib/module/index.js.map +1 -1
  26. package/package.json +6 -6
  27. package/src/Config.js +12 -12
  28. package/src/SortableContainer.js +110 -0
  29. package/src/SortableItem.js +57 -0
  30. package/src/{Item.js → SortableItemWrapper.js} +30 -16
  31. package/src/SortableView.js +65 -0
  32. package/src/index.js +1 -3
  33. package/lib/commonjs/Item.js.map +0 -1
  34. package/lib/commonjs/SortableList.js +0 -91
  35. package/lib/commonjs/SortableList.js.map +0 -1
  36. package/lib/commonjs/Tile.js +0 -56
  37. package/lib/commonjs/Tile.js.map +0 -1
  38. package/lib/module/Item.js.map +0 -1
  39. package/lib/module/SortableList.js +0 -86
  40. package/lib/module/SortableList.js.map +0 -1
  41. package/lib/module/Tile.js +0 -53
  42. package/lib/module/Tile.js.map +0 -1
  43. package/src/SortableList.js +0 -86
  44. package/src/Tile.js +0 -47
@@ -1 +1 @@
1
- {"version":3,"names":["_Config","_interopRequireDefault","require","_SortableList","_Tile","e","__esModule","default"],"sourceRoot":"../../src","sources":["index.js"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,OAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,aAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,KAAA,GAAAH,sBAAA,CAAAC,OAAA;AAAyC,SAAAD,uBAAAI,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA","ignoreList":[]}
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":[]}
@@ -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
- // This is used to position items in a grid layout
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
- * SortableListProvider component
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
- * <SortableListProvider config={{ MARGIN: 15, COL: 3 }}>
72
- * <YourSortableList />
73
- * </SortableListProvider>
71
+ * <SortableConfigProvider config={{ MARGIN: 15, COL: 3 }}>
72
+ * <YourSortableComponent />
73
+ * </SortableConfigProvider>
74
74
  */
75
- const SortableListProvider = ({
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 SortableListProvider;
92
+ export default SortableConfigProvider;
93
93
  //# sourceMappingURL=Config.js.map
@@ -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","SortableListProvider","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;EACR;EACAC,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,MAAMK,oBAAoB,GAAGA,CAAC;EAAEC,QAAQ;EAAEC;AAAO,CAAC,KAAK;EACrD;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,oBAAoB","ignoreList":[]}
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.toString(),
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.toString(),
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.toString()))
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","toString","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
- * Item Component
12
+ * SortableItemWrapper Component
13
13
  *
14
- * This component represents a draggable item in the sortable grid. It manages the gesture handling
15
- * and animations needed to drag and reorder the item within the grid.
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} tiles - Array of tile items used to check reorderable state.
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 Item = ({
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
- tiles
53
+ data
39
54
  }) => {
40
55
  // Get safe area insets for accurate height calculation
41
56
  const inset = useSafeAreaInsets();
@@ -50,7 +65,7 @@ const Item = ({
50
65
 
51
66
  // Calculate content height based on the number of items
52
67
  const contentHeight = Object.keys(positions.value).length / COL * SIZE;
53
- const isGestureActive = useSharedValue(false); // Whether the item is being actively dragged
68
+ const isGestureActive = useSharedValue(false); // Whether the item is actively being dragged
54
69
 
55
70
  // Calculate initial position of the item
56
71
  const position = getPosition(positions.value[id], COL, SIZE);
@@ -82,7 +97,7 @@ const Item = ({
82
97
  // Store the starting position
83
98
  ctx.x = translateX.value;
84
99
  ctx.y = translateY.value;
85
- isGestureActive.value = false; // TODO: Set to false when grouping is implemented
100
+ isGestureActive.value = false;
86
101
  }
87
102
  },
88
103
  onActive: ({
@@ -102,7 +117,7 @@ const Item = ({
102
117
  const idToSwap = Object.keys(positions.value).find(key => positions.value[key] === newOrder);
103
118
 
104
119
  // Only swap if the target item is reorderable
105
- const targetItem = tiles.find(tile => tile.id === Number(idToSwap));
120
+ const targetItem = data.find(tile => tile.id === Number(idToSwap));
106
121
  if (idToSwap && targetItem?.reorderable !== false) {
107
122
  const newPositions = {
108
123
  ...positions.value
@@ -152,7 +167,7 @@ const Item = ({
152
167
 
153
168
  // Animated style for the item
154
169
  const style = useAnimatedStyle(() => {
155
- 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
156
171
  const scale = editing && isGestureActive.value ? withSpring(1.05) : withSpring(1); // Slightly enlarge the item when dragging
157
172
  return {
158
173
  position: 'absolute',
@@ -183,5 +198,5 @@ const Item = ({
183
198
  })
184
199
  });
185
200
  };
186
- export default Item;
187
- //# sourceMappingURL=Item.js.map
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":"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","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":[]}
@@ -1,6 +1,4 @@
1
1
  "use strict";
2
2
 
3
- export { default as SortableListProvider } from "./Config.js";
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
@@ -1 +1 @@
1
- {"version":3,"names":["default","SortableListProvider","SortableList","Tile"],"sourceRoot":"../../src","sources":["index.js"],"mappings":";;AAAA,SAASA,OAAO,IAAIC,oBAAoB,QAAQ,aAAU;AAC1D,SAASD,OAAO,IAAIE,YAAY,QAAQ,mBAAgB;AACxD,SAASF,OAAO,IAAIG,IAAI,QAAQ,WAAQ","ignoreList":[]}
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.1.1",
3
+ "version": "0.2.1",
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",
@@ -72,10 +72,10 @@
72
72
  "react": "18.2.0",
73
73
  "react-native": "0.74.5",
74
74
  "react-native-builder-bob": "^0.30.2",
75
- "release-it": "^15.0.0",
76
- "typescript": "^5.2.2",
75
+ "react-native-gesture-handler": "^2.0.0",
77
76
  "react-native-reanimated": "^3.0.0",
78
- "react-native-gesture-handler": "^2.0.0"
77
+ "release-it": "^15.0.0",
78
+ "typescript": "^5.2.2"
79
79
  },
80
80
  "resolutions": {
81
81
  "@types/react": "^18.2.44"
@@ -83,8 +83,8 @@
83
83
  "peerDependencies": {
84
84
  "react": "*",
85
85
  "react-native": "*",
86
- "react-native-reanimated": "^2.0.0",
87
- "react-native-gesture-handler": "^1.10.0"
86
+ "react-native-gesture-handler": "^1.10.0",
87
+ "react-native-reanimated": "^2.0.0"
88
88
  },
89
89
  "workspaces": [
90
90
  "example"
package/src/Config.js CHANGED
@@ -5,15 +5,14 @@ import React, { createContext, useContext } from 'react';
5
5
  // Get screen width to calculate dynamic sizes
6
6
  const { width } = Dimensions.get('window');
7
7
 
8
- // Default configuration for the sortable list
8
+ // Default configuration for the sortable grid/list
9
9
  const defaultConfig = {
10
10
  MARGIN: 10, // Default margin between items
11
11
  COL: 2, // Default number of columns
12
- // Default size for each item, calculated based on the number of columns and margin
13
- SIZE: width / 2 - 10, // (width / COL - MARGIN)
12
+ SIZE: width / 2 - 10, // Default size for each item, calculated based on the number of columns and margin
14
13
  };
15
14
 
16
- // Create a Context for the sortable list configuration
15
+ // Create a Context for the sortable grid/list configuration
17
16
  const ConfigContext = createContext(defaultConfig);
18
17
 
19
18
  // Custom hook to use the sortable configuration context
@@ -26,7 +25,7 @@ export const animationConfig = {
26
25
  };
27
26
 
28
27
  // Helper function to calculate the item's position based on its index
29
- // This is used to position items in a grid layout
28
+ // Used to position items in a grid layout
30
29
  export const getPosition = (position, COL, SIZE) => {
31
30
  'worklet'; // Necessary for Reanimated 2 to run this function on the UI thread
32
31
  return {
@@ -46,9 +45,10 @@ export const getOrder = (tx, ty, max, COL, SIZE) => {
46
45
  };
47
46
 
48
47
  /**
49
- * SortableListProvider component
48
+ * SortableConfigProvider component
50
49
  *
51
- * Wrap your sortable list components with this provider to set custom configuration.
50
+ * Wrap your sortable grid/list components with this provider to set custom configuration.
51
+ * This provider allows for overriding default settings like margin and the number of columns.
52
52
  *
53
53
  * @param {Object} config - Custom configuration to override the default settings.
54
54
  * @param {number} config.MARGIN - Margin between items.
@@ -57,11 +57,11 @@ export const getOrder = (tx, ty, max, COL, SIZE) => {
57
57
  *
58
58
  * Usage:
59
59
  *
60
- * <SortableListProvider config={{ MARGIN: 15, COL: 3 }}>
61
- * <YourSortableList />
62
- * </SortableListProvider>
60
+ * <SortableConfigProvider config={{ MARGIN: 15, COL: 3 }}>
61
+ * <YourSortableComponent />
62
+ * </SortableConfigProvider>
63
63
  */
64
- const SortableListProvider = ({ children, config }) => {
64
+ const SortableConfigProvider = ({ children, config }) => {
65
65
  // Merge custom config with the default configuration
66
66
  const mergedConfig = {
67
67
  ...defaultConfig,
@@ -78,4 +78,4 @@ const SortableListProvider = ({ children, config }) => {
78
78
  );
79
79
  };
80
80
 
81
- export default SortableListProvider;
81
+ export default SortableConfigProvider;