@draftbit/core 47.2.13 → 47.2.14-76dc6c.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.
Files changed (59) hide show
  1. package/lib/src/components/SwipeableItem/SwipeableItem.d.ts +43 -0
  2. package/lib/src/components/SwipeableItem/SwipeableItem.js +114 -0
  3. package/lib/src/components/SwipeableItem/SwipeableItem.js.map +1 -0
  4. package/lib/src/components/SwipeableItem/SwipeableItemButton.d.ts +5 -0
  5. package/lib/src/components/SwipeableItem/SwipeableItemButton.js +6 -0
  6. package/lib/src/components/SwipeableItem/SwipeableItemButton.js.map +1 -0
  7. package/lib/src/components/SwipeableItem/SwipeableItemCommon.d.ts +30 -0
  8. package/lib/src/components/SwipeableItem/SwipeableItemCommon.js +44 -0
  9. package/lib/src/components/SwipeableItem/SwipeableItemCommon.js.map +1 -0
  10. package/lib/src/components/SwipeableItem/SwipeableList.d.ts +17 -0
  11. package/lib/src/components/SwipeableItem/SwipeableList.js +29 -0
  12. package/lib/src/components/SwipeableItem/SwipeableList.js.map +1 -0
  13. package/lib/src/components/SwipeableItem/index.d.ts +3 -0
  14. package/lib/src/components/SwipeableItem/index.js +4 -0
  15. package/lib/src/components/{SwipeableView → SwipeableItem}/index.js.map +1 -1
  16. package/lib/src/index.d.ts +1 -1
  17. package/lib/src/index.js +1 -1
  18. package/lib/src/index.js.map +1 -1
  19. package/lib/tsconfig.tsbuildinfo +1 -1
  20. package/package.json +3 -3
  21. package/src/components/SwipeableItem/SwipeableItem.js +114 -0
  22. package/src/components/SwipeableItem/SwipeableItem.js.map +1 -0
  23. package/src/components/{SwipeableView/SwipeableView.tsx → SwipeableItem/SwipeableItem.tsx} +95 -88
  24. package/src/components/SwipeableItem/SwipeableItemButton.js +6 -0
  25. package/src/components/SwipeableItem/SwipeableItemButton.js.map +1 -0
  26. package/src/components/SwipeableItem/SwipeableItemButton.tsx +11 -0
  27. package/src/components/SwipeableItem/SwipeableItemCommon.js +44 -0
  28. package/src/components/SwipeableItem/SwipeableItemCommon.js.map +1 -0
  29. package/src/components/SwipeableItem/SwipeableItemCommon.ts +80 -0
  30. package/src/components/SwipeableItem/SwipeableList.js +29 -0
  31. package/src/components/SwipeableItem/SwipeableList.js.map +1 -0
  32. package/src/components/SwipeableItem/SwipeableList.tsx +62 -0
  33. package/src/components/SwipeableItem/index.js +4 -0
  34. package/src/components/{SwipeableView → SwipeableItem}/index.js.map +1 -1
  35. package/src/components/SwipeableItem/index.tsx +3 -0
  36. package/src/index.js +1 -1
  37. package/src/index.js.map +1 -1
  38. package/src/index.tsx +4 -4
  39. package/lib/src/components/SwipeableView/SwipeableView.d.ts +0 -28
  40. package/lib/src/components/SwipeableView/SwipeableView.js +0 -119
  41. package/lib/src/components/SwipeableView/SwipeableView.js.map +0 -1
  42. package/lib/src/components/SwipeableView/SwipeableViewButton.d.ts +0 -12
  43. package/lib/src/components/SwipeableView/SwipeableViewButton.js +0 -6
  44. package/lib/src/components/SwipeableView/SwipeableViewButton.js.map +0 -1
  45. package/lib/src/components/SwipeableView/SwipeableViewSwipeHandler.d.ts +0 -12
  46. package/lib/src/components/SwipeableView/SwipeableViewSwipeHandler.js +0 -6
  47. package/lib/src/components/SwipeableView/SwipeableViewSwipeHandler.js.map +0 -1
  48. package/lib/src/components/SwipeableView/index.d.ts +0 -3
  49. package/lib/src/components/SwipeableView/index.js +0 -4
  50. package/src/components/SwipeableView/SwipeableView.js +0 -119
  51. package/src/components/SwipeableView/SwipeableView.js.map +0 -1
  52. package/src/components/SwipeableView/SwipeableViewButton.js +0 -6
  53. package/src/components/SwipeableView/SwipeableViewButton.js.map +0 -1
  54. package/src/components/SwipeableView/SwipeableViewButton.tsx +0 -18
  55. package/src/components/SwipeableView/SwipeableViewSwipeHandler.js +0 -6
  56. package/src/components/SwipeableView/SwipeableViewSwipeHandler.js.map +0 -1
  57. package/src/components/SwipeableView/SwipeableViewSwipeHandler.tsx +0 -20
  58. package/src/components/SwipeableView/index.js +0 -4
  59. package/src/components/SwipeableView/index.tsx +0 -3
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@draftbit/core",
3
- "version": "47.2.13",
3
+ "version": "47.2.14-76dc6c.2+76dc6c6",
4
4
  "description": "Core (non-native) Components",
5
5
  "main": "lib/src/index.js",
6
6
  "types": "lib/src/index.d.ts",
@@ -39,7 +39,7 @@
39
39
  "dependencies": {
40
40
  "@date-io/date-fns": "^1.3.13",
41
41
  "@draftbit/react-theme-provider": "^2.1.1",
42
- "@draftbit/types": "47.2.13",
42
+ "@draftbit/types": "^47.2.14-76dc6c.2+76dc6c6",
43
43
  "@material-ui/core": "^4.11.0",
44
44
  "@material-ui/pickers": "^3.2.10",
45
45
  "@react-native-community/slider": "4.2.4",
@@ -77,5 +77,5 @@
77
77
  "node_modules/",
78
78
  "lib/"
79
79
  ],
80
- "gitHead": "6cc1db6c08bbb09546c4540c55c20be8ab46673b"
80
+ "gitHead": "76dc6c64290b8b38fb6b0728b0b862fa7db7d547"
81
81
  }
@@ -0,0 +1,114 @@
1
+ import React from "react";
2
+ import { View, StyleSheet, Text, } from "react-native";
3
+ import Pressable from "../Pressable";
4
+ import { extractBorderAndMarginStyles, extractEffectStyles, extractFlexItemStyles, extractPositionStyles, extractSizeStyles, extractStyles, } from "../../utilities";
5
+ import { SwipeRow } from "react-native-swipe-list-view";
6
+ import { withTheme } from "../../theming";
7
+ import { SwipeableListContext } from "./SwipeableList";
8
+ import { leftSwipeToSwipeableItemBehindItem, rightSwipeToSwipeableItemBehindItem, extractLeftSwipeProps, extractRightSwipeProps, } from "./SwipeableItemCommon";
9
+ const SwipeableItem = ({ theme, style, children, Icon, closeOnPress, leftOpenValue, rightOpenValue, leftActivationValue, rightActivationValue, swipeActivationPercentage = 80, stopLeftSwipe, stopRightSwipe, friction = 20, ...rest }) => {
10
+ const instanceOfSwipeableItemButtonProps = (object) => {
11
+ return "title" in object && "revealSwipeDirection" in object;
12
+ };
13
+ const isEmptyObject = (object) => {
14
+ return Object.keys(object).length === 0;
15
+ };
16
+ const { onStartSwiping, onStopSwiping } = React.useContext(SwipeableListContext);
17
+ const { viewStyles, textStyles } = extractStyles(style);
18
+ const { borderStyles, marginStyles } = extractBorderAndMarginStyles(viewStyles);
19
+ const sizeStyles = extractSizeStyles(viewStyles);
20
+ const parentContainerStyles = StyleSheet.flatten([
21
+ borderStyles,
22
+ marginStyles,
23
+ extractFlexItemStyles(viewStyles),
24
+ extractPositionStyles(viewStyles),
25
+ extractEffectStyles(viewStyles),
26
+ sizeStyles,
27
+ ]);
28
+ //Remove styles already consumed from viewStyles
29
+ Object.keys(parentContainerStyles).forEach((key) => delete viewStyles[key]);
30
+ const surfaceContainerStyles = StyleSheet.flatten([
31
+ viewStyles,
32
+ sizeStyles /* Size styles needs to be readded to surface container due to inconsistencies on web */,
33
+ ]);
34
+ const [componentWidth, setComponentWidth] = React.useState(null);
35
+ const leftSwipeButtons = React.useMemo(() => React.Children.toArray(children).filter((child) => React.isValidElement(child) &&
36
+ instanceOfSwipeableItemButtonProps(child.props) &&
37
+ child.props.revealSwipeDirection === "left"), [children]);
38
+ const rightSwipeButtons = React.useMemo(() => React.Children.toArray(children).filter((child) => React.isValidElement(child) &&
39
+ instanceOfSwipeableItemButtonProps(child.props) &&
40
+ child.props.revealSwipeDirection === "right"), [children]);
41
+ const remainingChildren = React.useMemo(() => React.Children.toArray(children).filter((child) => React.isValidElement(child) &&
42
+ !instanceOfSwipeableItemButtonProps(child.props)), [children]);
43
+ const leftSwipe = extractLeftSwipeProps(rest);
44
+ const rightSwipe = extractRightSwipeProps(rest);
45
+ const isLeftSwipeHandled = !isEmptyObject(leftSwipe);
46
+ const isRightSwipeHandled = !isEmptyObject(rightSwipe);
47
+ if (leftSwipeButtons.length > 2 || rightSwipeButtons.length > 2) {
48
+ throw Error("Cannot have more than 2 SwipeableItemButton(s) per side");
49
+ }
50
+ if ((leftSwipeButtons.length && isLeftSwipeHandled) ||
51
+ (rightSwipeButtons.length && isRightSwipeHandled)) {
52
+ throw Error("Colliding configuration in SwipeableItem. You cannot have SwipeableItemButton(s) on the side where swipe handling is configured. Either reset swipe configuration or remove the button(s).");
53
+ }
54
+ //Renders a single 'behind' item. Used for both buttons and swipe handler
55
+ const renderBehindItem = (item, index) => (React.createElement(Pressable, { key: index.toString(), onPress: item.onPress, style: [
56
+ styles.buttonContainer,
57
+ { backgroundColor: item.backgroundColor || theme.colors.primary },
58
+ ] },
59
+ item.icon && (React.createElement(Icon, { name: item.icon, size: item.iconSize || 25, color: item.color || theme.colors.surface })),
60
+ React.createElement(Text, { style: [textStyles, { color: item.color || theme.colors.surface }] }, item.title)));
61
+ const defaultLeftOpenValue = componentWidth ? componentWidth / 2 : 0;
62
+ const defaultRightOpenValue = componentWidth ? -componentWidth / 2 : 0;
63
+ return (React.createElement(View, { onLayout: (event) => {
64
+ setComponentWidth(event.nativeEvent.layout.width);
65
+ }, style: [styles.parentContainer, parentContainerStyles] },
66
+ React.createElement(SwipeRow, { leftOpenValue: isRightSwipeHandled ? 0 : leftOpenValue || defaultLeftOpenValue //If in swiping mode, don't keep open
67
+ , rightOpenValue: isLeftSwipeHandled ? 0 : rightOpenValue || defaultRightOpenValue, leftActivationValue: leftActivationValue || isRightSwipeHandled
68
+ ? defaultLeftOpenValue * (swipeActivationPercentage / 100) //When swipe passes activation percentage then it should be considered activated (call onSwipe)
69
+ : defaultLeftOpenValue, rightActivationValue: rightActivationValue || isLeftSwipeHandled
70
+ ? defaultRightOpenValue * (swipeActivationPercentage / 100)
71
+ : defaultRightOpenValue, stopLeftSwipe: stopRightSwipe || defaultLeftOpenValue, stopRightSwipe: stopLeftSwipe || defaultRightOpenValue, onLeftAction: isRightSwipeHandled ? () => { var _a; return (_a = rightSwipe.onSwipeRight) === null || _a === void 0 ? void 0 : _a.call(rightSwipe); } : undefined, onRightAction: isLeftSwipeHandled ? () => { var _a; return (_a = leftSwipe.onSwipeLeft) === null || _a === void 0 ? void 0 : _a.call(leftSwipe); } : undefined, swipeGestureBegan: onStartSwiping, swipeGestureEnded: onStopSwiping, closeOnRowPress: closeOnPress, friction: friction, ...rest },
72
+ React.createElement(View, { style: styles.behindContainer },
73
+ React.createElement(View, { style: styles.behindContainerItem }, isRightSwipeHandled
74
+ ? renderBehindItem(rightSwipeToSwipeableItemBehindItem(rightSwipe), 0)
75
+ : rightSwipeButtons.map((item, index) => renderBehindItem(item.props, index))),
76
+ React.createElement(View, { style: styles.behindContainerItem }, isLeftSwipeHandled
77
+ ? renderBehindItem(leftSwipeToSwipeableItemBehindItem(leftSwipe), 0)
78
+ : leftSwipeButtons.map((item, index) => renderBehindItem(item.props, index)))),
79
+ React.createElement(View, { style: [
80
+ styles.surfaceContainer,
81
+ {
82
+ backgroundColor: theme.colors.background,
83
+ },
84
+ surfaceContainerStyles,
85
+ ] }, remainingChildren))));
86
+ };
87
+ const styles = StyleSheet.create({
88
+ parentContainer: {
89
+ overflow: "hidden",
90
+ minHeight: 50,
91
+ },
92
+ behindContainer: {
93
+ flex: 1,
94
+ width: "100%",
95
+ height: "100%",
96
+ flexDirection: "row",
97
+ },
98
+ behindContainerItem: {
99
+ flex: 1,
100
+ flexDirection: "row",
101
+ },
102
+ buttonContainer: {
103
+ flex: 1,
104
+ alignItems: "center",
105
+ justifyContent: "center",
106
+ },
107
+ surfaceContainer: {
108
+ width: "100%",
109
+ minHeight: 50,
110
+ overflow: "hidden",
111
+ },
112
+ });
113
+ export default withTheme(SwipeableItem);
114
+ //# sourceMappingURL=SwipeableItem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SwipeableItem.js","sourceRoot":"","sources":["SwipeableItem.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EACL,IAAI,EAIJ,UAAU,EACV,IAAI,GACL,MAAM,cAAc,CAAC;AACtB,OAAO,SAAS,MAAM,cAAc,CAAC;AACrC,OAAO,EACL,4BAA4B,EAC5B,mBAAmB,EACnB,qBAAqB,EACrB,qBAAqB,EACrB,iBAAiB,EACjB,aAAa,GACd,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAGxD,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE1C,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAIL,kCAAkC,EAClC,mCAAmC,EACnC,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,uBAAuB,CAAC;AAuC/B,MAAM,aAAa,GAA6C,CAAC,EAC/D,KAAK,EACL,KAAK,EACL,QAAQ,EACR,IAAI,EACJ,YAAY,EACZ,aAAa,EACb,cAAc,EACd,mBAAmB,EACnB,oBAAoB,EACpB,yBAAyB,GAAG,EAAE,EAC9B,aAAa,EACb,cAAc,EACd,QAAQ,GAAG,EAAE,EACb,GAAG,IAAI,EACR,EAAE,EAAE;IACH,MAAM,kCAAkC,GAAG,CACzC,MAAW,EACyB,EAAE;QACtC,OAAO,OAAO,IAAI,MAAM,IAAI,sBAAsB,IAAI,MAAM,CAAC;IAC/D,CAAC,CAAC;IAEF,MAAM,aAAa,GAAG,CAAC,MAAc,EAAE,EAAE;QACvC,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;IAC1C,CAAC,CAAC;IAEF,MAAM,EAAE,cAAc,EAAE,aAAa,EAAE,GACrC,KAAK,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC;IAEzC,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IAExD,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,GAClC,4BAA4B,CAAC,UAAU,CAAC,CAAC;IAE3C,MAAM,UAAU,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAC;IAEjD,MAAM,qBAAqB,GAAG,UAAU,CAAC,OAAO,CAAC;QAC/C,YAAY;QACZ,YAAY;QACZ,qBAAqB,CAAC,UAAU,CAAC;QACjC,qBAAqB,CAAC,UAAU,CAAC;QACjC,mBAAmB,CAAC,UAAU,CAAC;QAC/B,UAAU;KACX,CAAC,CAAC;IAEH,gDAAgD;IAChD,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5E,MAAM,sBAAsB,GAAG,UAAU,CAAC,OAAO,CAAC;QAChD,UAAU;QACV,UAAU,CAAC,wFAAwF;KACpG,CAAC,CAAC;IAEH,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,KAAK,CAAC,QAAQ,CACxD,IAAI,CACL,CAAC;IACF,MAAM,gBAAgB,GAAG,KAAK,CAAC,OAAO,CACpC,GAAG,EAAE,CACH,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,CACrC,CAAC,KAAK,EAAE,EAAE,CACR,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC;QAC3B,kCAAkC,CAAC,KAAK,CAAC,KAAK,CAAC;QAC/C,KAAK,CAAC,KAAK,CAAC,oBAAoB,KAAK,MAAM,CACI,EACrD,CAAC,QAAQ,CAAC,CACX,CAAC;IAEF,MAAM,iBAAiB,GAAG,KAAK,CAAC,OAAO,CACrC,GAAG,EAAE,CACH,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,CACrC,CAAC,KAAK,EAAE,EAAE,CACR,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC;QAC3B,kCAAkC,CAAC,KAAK,CAAC,KAAK,CAAC;QAC/C,KAAK,CAAC,KAAK,CAAC,oBAAoB,KAAK,OAAO,CACG,EACrD,CAAC,QAAQ,CAAC,CACX,CAAC;IAEF,MAAM,iBAAiB,GAAG,KAAK,CAAC,OAAO,CACrC,GAAG,EAAE,CACH,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,CACrC,CAAC,KAAK,EAAE,EAAE,CACR,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC;QAC3B,CAAC,kCAAkC,CAAC,KAAK,CAAC,KAAK,CAAC,CACnD,EACH,CAAC,QAAQ,CAAC,CACX,CAAC;IAEF,MAAM,SAAS,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;IAC9C,MAAM,UAAU,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC;IAEhD,MAAM,kBAAkB,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;IACrD,MAAM,mBAAmB,GAAG,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;IAEvD,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE;QAC/D,MAAM,KAAK,CAAC,yDAAyD,CAAC,CAAC;KACxE;IAED,IACE,CAAC,gBAAgB,CAAC,MAAM,IAAI,kBAAkB,CAAC;QAC/C,CAAC,iBAAiB,CAAC,MAAM,IAAI,mBAAmB,CAAC,EACjD;QACA,MAAM,KAAK,CACT,4LAA4L,CAC7L,CAAC;KACH;IAED,yEAAyE;IACzE,MAAM,gBAAgB,GAAG,CAAC,IAA6B,EAAE,KAAa,EAAE,EAAE,CAAC,CACzE,oBAAC,SAAS,IACR,GAAG,EAAE,KAAK,CAAC,QAAQ,EAAE,EACrB,OAAO,EAAG,IAAY,CAAC,OAAO,EAC9B,KAAK,EAAE;YACL,MAAM,CAAC,eAAe;YACtB,EAAE,eAAe,EAAE,IAAI,CAAC,eAAe,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE;SAClE;QAEA,IAAI,CAAC,IAAI,IAAI,CACZ,oBAAC,IAAI,IACH,IAAI,EAAE,IAAI,CAAC,IAAI,EACf,IAAI,EAAE,IAAI,CAAC,QAAQ,IAAI,EAAE,EACzB,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,GACzC,CACH;QACD,oBAAC,IAAI,IAAC,KAAK,EAAE,CAAC,UAAU,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,IACrE,IAAI,CAAC,KAAK,CACN,CACG,CACb,CAAC;IAEF,MAAM,oBAAoB,GAAG,cAAc,CAAC,CAAC,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrE,MAAM,qBAAqB,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAEvE,OAAO,CACL,oBAAC,IAAI,IACH,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;YAClB,iBAAiB,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACpD,CAAC,EACD,KAAK,EAAE,CAAC,MAAM,CAAC,eAAe,EAAE,qBAAqB,CAAC;QAGtD,oBAAC,QAAQ,IACP,aAAa,EACX,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,IAAI,oBAAoB,CAAC,qCAAqC;cAEvG,cAAc,EACZ,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,IAAI,qBAAqB,EAElE,mBAAmB,EACjB,mBAAmB,IAAI,mBAAmB;gBACxC,CAAC,CAAC,oBAAoB,GAAG,CAAC,yBAAyB,GAAG,GAAG,CAAC,CAAC,+FAA+F;gBAC1J,CAAC,CAAC,oBAAoB,EAE1B,oBAAoB,EAClB,oBAAoB,IAAI,kBAAkB;gBACxC,CAAC,CAAC,qBAAqB,GAAG,CAAC,yBAAyB,GAAG,GAAG,CAAC;gBAC3D,CAAC,CAAC,qBAAqB,EAE3B,aAAa,EAAE,cAAc,IAAI,oBAAoB,EACrD,cAAc,EAAE,aAAa,IAAI,qBAAqB,EACtD,YAAY,EACV,mBAAmB,CAAC,CAAC,CAAC,GAAG,EAAE,WAAC,OAAA,MAAA,UAAU,CAAC,YAAY,0DAAI,CAAA,EAAA,CAAC,CAAC,CAAC,SAAS,EAErE,aAAa,EACX,kBAAkB,CAAC,CAAC,CAAC,GAAG,EAAE,WAAC,OAAA,MAAA,SAAS,CAAC,WAAW,yDAAI,CAAA,EAAA,CAAC,CAAC,CAAC,SAAS,EAElE,iBAAiB,EAAE,cAAc,EACjC,iBAAiB,EAAE,aAAa,EAChC,eAAe,EAAE,YAAY,EAC7B,QAAQ,EAAE,QAAQ,KACd,IAAI;YAER,oBAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,eAAe;gBACjC,oBAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,mBAAmB,IACpC,mBAAmB;oBAClB,CAAC,CAAC,gBAAgB,CACd,mCAAmC,CAAC,UAAU,CAAC,EAC/C,CAAC,CACF;oBACH,CAAC,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CACpC,gBAAgB,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CACpC,CACA;gBACP,oBAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,mBAAmB,IACpC,kBAAkB;oBACjB,CAAC,CAAC,gBAAgB,CACd,kCAAkC,CAAC,SAAS,CAAC,EAC7C,CAAC,CACF;oBACH,CAAC,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CACnC,gBAAgB,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CACpC,CACA,CACF;YACP,oBAAC,IAAI,IACH,KAAK,EAAE;oBACL,MAAM,CAAC,gBAAgB;oBACvB;wBACE,eAAe,EAAE,KAAK,CAAC,MAAM,CAAC,UAAU;qBACzC;oBACD,sBAAsB;iBACvB,IAEA,iBAAiB,CACb,CACE,CACN,CACR,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;IAC/B,eAAe,EAAE;QACf,QAAQ,EAAE,QAAQ;QAClB,SAAS,EAAE,EAAE;KACd;IACD,eAAe,EAAE;QACf,IAAI,EAAE,CAAC;QACP,KAAK,EAAE,MAAM;QACb,MAAM,EAAE,MAAM;QACd,aAAa,EAAE,KAAK;KACrB;IACD,mBAAmB,EAAE;QACnB,IAAI,EAAE,CAAC;QACP,aAAa,EAAE,KAAK;KACrB;IACD,eAAe,EAAE;QACf,IAAI,EAAE,CAAC;QACP,UAAU,EAAE,QAAQ;QACpB,cAAc,EAAE,QAAQ;KACzB;IACD,gBAAgB,EAAE;QAChB,KAAK,EAAE,MAAM;QACb,SAAS,EAAE,EAAE;QACb,QAAQ,EAAE,QAAQ;KACnB;CACF,CAAC,CAAC;AAEH,eAAe,SAAS,CAAC,aAAa,CAAC,CAAC"}
@@ -20,10 +20,33 @@ import { SwipeRow } from "react-native-swipe-list-view";
20
20
  import { IconSlot } from "../../interfaces/Icon";
21
21
  import type { Theme } from "../../styles/DefaultTheme";
22
22
  import { withTheme } from "../../theming";
23
- import { SwipeableViewButtonProps } from "./SwipeableViewButton";
24
- import { SwipeableViewSwipeHandlerProps } from "./SwipeableViewSwipeHandler";
23
+ import { SwipeableItemButtonProps } from "./SwipeableItemButton";
24
+ import { SwipeableListContext } from "./SwipeableList";
25
+ import {
26
+ RightSwipeProps,
27
+ LeftSwipeProps,
28
+ SwipeableItemBehindItem,
29
+ leftSwipeToSwipeableItemBehindItem,
30
+ rightSwipeToSwipeableItemBehindItem,
31
+ extractLeftSwipeProps,
32
+ extractRightSwipeProps,
33
+ } from "./SwipeableItemCommon";
34
+
35
+ /**
36
+ * Clarification Regarding left/right directions and what they mean in the context of this component
37
+ * ------------------------------------------------------------------------------------------------------------
38
+ * Swipe Left / Left Swipe = Swiping to the left (i.e. Swiping from the right)
39
+ * Swipe Right / Right Swipe = Swiping to the right (i.e. Swiping from the left)
40
+ *
41
+ * This is only applies in the context of swipes, and not anywhere where a direction is refernced.
42
+ * For example 'rightOpenValue' referes to the open value on the right side.
43
+ * While 'stopRightSwipe' refers to the stop value of the swipe from left to right, which is on the left side.
44
+ * This is because one refers to a swipe and one does not, so the word 'right' has different meanings.
45
+ *
46
+ * This component is built around this concept to avoid confusion
47
+ */
25
48
 
26
- export interface SwipeableViewProps extends IconSlot {
49
+ export interface SwipeableItemProps extends IconSlot {
27
50
  closeOnPress?: boolean;
28
51
  leftOpenValue?: number;
29
52
  rightOpenValue?: number;
@@ -44,7 +67,9 @@ export interface SwipeableViewProps extends IconSlot {
44
67
  theme: Theme;
45
68
  }
46
69
 
47
- const SwipeableView: React.FC<React.PropsWithChildren<SwipeableViewProps>> = ({
70
+ type Props = SwipeableItemProps & RightSwipeProps & LeftSwipeProps;
71
+
72
+ const SwipeableItem: React.FC<React.PropsWithChildren<Props>> = ({
48
73
  theme,
49
74
  style,
50
75
  children,
@@ -60,18 +85,19 @@ const SwipeableView: React.FC<React.PropsWithChildren<SwipeableViewProps>> = ({
60
85
  friction = 20,
61
86
  ...rest
62
87
  }) => {
63
- const instanceOfSwipeableViewButtonProps = (
88
+ const instanceOfSwipeableItemButtonProps = (
64
89
  object: any
65
- ): object is SwipeableViewButtonProps => {
66
- return "title" in object && "side" in object && "onPress" in object;
90
+ ): object is SwipeableItemButtonProps => {
91
+ return "title" in object && "revealSwipeDirection" in object;
67
92
  };
68
93
 
69
- const instanceOfSwipeableViewSwipeHandlerProps = (
70
- object: any
71
- ): object is SwipeableViewSwipeHandlerProps => {
72
- return "title" in object && "side" in object && "onSwipe" in object;
94
+ const isEmptyObject = (object: object) => {
95
+ return Object.keys(object).length === 0;
73
96
  };
74
97
 
98
+ const { onStartSwiping, onStopSwiping } =
99
+ React.useContext(SwipeableListContext);
100
+
75
101
  const { viewStyles, textStyles } = extractStyles(style);
76
102
 
77
103
  const { borderStyles, marginStyles } =
@@ -98,47 +124,25 @@ const SwipeableView: React.FC<React.PropsWithChildren<SwipeableViewProps>> = ({
98
124
  const [componentWidth, setComponentWidth] = React.useState<number | null>(
99
125
  null
100
126
  );
101
- const leftButtons = React.useMemo(
102
- () =>
103
- React.Children.toArray(children).filter(
104
- (child) =>
105
- React.isValidElement(child) &&
106
- instanceOfSwipeableViewButtonProps(child.props) &&
107
- child.props.side === "left"
108
- ) as React.ReactElement<SwipeableViewButtonProps>[],
109
- [children]
110
- );
111
-
112
- const rightButtons = React.useMemo(
127
+ const leftSwipeButtons = React.useMemo(
113
128
  () =>
114
129
  React.Children.toArray(children).filter(
115
130
  (child) =>
116
131
  React.isValidElement(child) &&
117
- instanceOfSwipeableViewButtonProps(child.props) &&
118
- child.props.side === "right"
119
- ) as React.ReactElement<SwipeableViewButtonProps>[],
132
+ instanceOfSwipeableItemButtonProps(child.props) &&
133
+ child.props.revealSwipeDirection === "left"
134
+ ) as React.ReactElement<SwipeableItemButtonProps>[],
120
135
  [children]
121
136
  );
122
137
 
123
- const leftSwipeHandlers = React.useMemo(
138
+ const rightSwipeButtons = React.useMemo(
124
139
  () =>
125
140
  React.Children.toArray(children).filter(
126
141
  (child) =>
127
142
  React.isValidElement(child) &&
128
- instanceOfSwipeableViewSwipeHandlerProps(child.props) &&
129
- child.props.side === "left"
130
- ) as React.ReactElement<SwipeableViewSwipeHandlerProps>[],
131
- [children]
132
- );
133
-
134
- const rightSwipeHandlers = React.useMemo(
135
- () =>
136
- React.Children.toArray(children).filter(
137
- (child) =>
138
- React.isValidElement(child) &&
139
- instanceOfSwipeableViewSwipeHandlerProps(child.props) &&
140
- child.props.side === "right"
141
- ) as React.ReactElement<SwipeableViewSwipeHandlerProps>[],
143
+ instanceOfSwipeableItemButtonProps(child.props) &&
144
+ child.props.revealSwipeDirection === "right"
145
+ ) as React.ReactElement<SwipeableItemButtonProps>[],
142
146
  [children]
143
147
  );
144
148
 
@@ -147,58 +151,53 @@ const SwipeableView: React.FC<React.PropsWithChildren<SwipeableViewProps>> = ({
147
151
  React.Children.toArray(children).filter(
148
152
  (child) =>
149
153
  React.isValidElement(child) &&
150
- !instanceOfSwipeableViewSwipeHandlerProps(child.props) &&
151
- !instanceOfSwipeableViewButtonProps(child.props)
154
+ !instanceOfSwipeableItemButtonProps(child.props)
152
155
  ),
153
156
  [children]
154
157
  );
155
158
 
156
- if (leftButtons.length > 2 || rightButtons.length > 2) {
157
- throw Error("Cannot have more than 2 buttons per side");
158
- }
159
+ const leftSwipe = extractLeftSwipeProps(rest);
160
+ const rightSwipe = extractRightSwipeProps(rest);
161
+
162
+ const isLeftSwipeHandled = !isEmptyObject(leftSwipe);
163
+ const isRightSwipeHandled = !isEmptyObject(rightSwipe);
159
164
 
160
- if (leftSwipeHandlers.length > 1 || rightSwipeHandlers.length > 1) {
161
- throw Error("Cannot have more than 1 swiper handler per side");
165
+ if (leftSwipeButtons.length > 2 || rightSwipeButtons.length > 2) {
166
+ throw Error("Cannot have more than 2 SwipeableItemButton(s) per side");
162
167
  }
163
168
 
164
169
  if (
165
- (leftButtons.length && leftSwipeHandlers.length) ||
166
- (rightButtons.length && rightSwipeHandlers.length)
170
+ (leftSwipeButtons.length && isLeftSwipeHandled) ||
171
+ (rightSwipeButtons.length && isRightSwipeHandled)
167
172
  ) {
168
- throw Error("Cannot combine swiper handler and buttons on the same side");
173
+ throw Error(
174
+ "Colliding configuration in SwipeableItem. You cannot have SwipeableItemButton(s) on the side where swipe handling is configured. Either reset swipe configuration or remove the button(s)."
175
+ );
169
176
  }
170
177
 
171
- //Renders a single button/item. Used for both buttons and swipe handler
172
- const renderBehindItem = (
173
- props: SwipeableViewSwipeHandlerProps | SwipeableViewButtonProps,
174
- index: number
175
- ) => (
178
+ //Renders a single 'behind' item. Used for both buttons and swipe handler
179
+ const renderBehindItem = (item: SwipeableItemBehindItem, index: number) => (
176
180
  <Pressable
177
181
  key={index.toString()}
178
- onPress={(props as any).onPress}
182
+ onPress={(item as any).onPress}
179
183
  style={[
180
184
  styles.buttonContainer,
181
- { backgroundColor: props.backgroundColor || theme.colors.primary },
185
+ { backgroundColor: item.backgroundColor || theme.colors.primary },
182
186
  ]}
183
187
  >
184
- {props.icon && (
188
+ {item.icon && (
185
189
  <Icon
186
- name={props.icon}
187
- size={props.iconSize || 25}
188
- color={props.color || theme.colors.surface}
190
+ name={item.icon}
191
+ size={item.iconSize || 25}
192
+ color={item.color || theme.colors.surface}
189
193
  />
190
194
  )}
191
- <Text
192
- style={[textStyles, { color: props.color || theme.colors.surface }]}
193
- >
194
- {props.title}
195
+ <Text style={[textStyles, { color: item.color || theme.colors.surface }]}>
196
+ {item.title}
195
197
  </Text>
196
198
  </Pressable>
197
199
  );
198
200
 
199
- const isLeftSwipeHandler = !!leftSwipeHandlers.length;
200
- const isRightSwipeHandler = !!rightSwipeHandlers.length;
201
-
202
201
  const defaultLeftOpenValue = componentWidth ? componentWidth / 2 : 0;
203
202
  const defaultRightOpenValue = componentWidth ? -componentWidth / 2 : 0;
204
203
 
@@ -212,47 +211,55 @@ const SwipeableView: React.FC<React.PropsWithChildren<SwipeableViewProps>> = ({
212
211
  {/*@ts-ignore*/}
213
212
  <SwipeRow
214
213
  leftOpenValue={
215
- isLeftSwipeHandler ? 0 : leftOpenValue || defaultLeftOpenValue //If in swiping mode, don't keep open
214
+ isRightSwipeHandled ? 0 : leftOpenValue || defaultLeftOpenValue //If in swiping mode, don't keep open
216
215
  }
217
216
  rightOpenValue={
218
- isRightSwipeHandler ? 0 : rightOpenValue || defaultRightOpenValue
217
+ isLeftSwipeHandled ? 0 : rightOpenValue || defaultRightOpenValue
219
218
  }
220
219
  leftActivationValue={
221
- leftActivationValue || isLeftSwipeHandler
220
+ leftActivationValue || isRightSwipeHandled
222
221
  ? defaultLeftOpenValue * (swipeActivationPercentage / 100) //When swipe passes activation percentage then it should be considered activated (call onSwipe)
223
222
  : defaultLeftOpenValue
224
223
  }
225
224
  rightActivationValue={
226
- rightActivationValue || isRightSwipeHandler
225
+ rightActivationValue || isLeftSwipeHandled
227
226
  ? defaultRightOpenValue * (swipeActivationPercentage / 100)
228
227
  : defaultRightOpenValue
229
228
  }
230
- stopLeftSwipe={stopLeftSwipe || defaultLeftOpenValue}
231
- stopRightSwipe={stopRightSwipe || defaultRightOpenValue}
229
+ stopLeftSwipe={stopRightSwipe || defaultLeftOpenValue}
230
+ stopRightSwipe={stopLeftSwipe || defaultRightOpenValue}
232
231
  onLeftAction={
233
- isLeftSwipeHandler
234
- ? () => leftSwipeHandlers[0].props.onSwipe?.()
235
- : undefined
232
+ isRightSwipeHandled ? () => rightSwipe.onSwipeRight?.() : undefined
236
233
  }
237
234
  onRightAction={
238
- isRightSwipeHandler
239
- ? () => rightSwipeHandlers[0].props.onSwipe?.()
240
- : undefined
235
+ isLeftSwipeHandled ? () => leftSwipe.onSwipeLeft?.() : undefined
241
236
  }
237
+ swipeGestureBegan={onStartSwiping}
238
+ swipeGestureEnded={onStopSwiping}
242
239
  closeOnRowPress={closeOnPress}
243
240
  friction={friction}
244
241
  {...rest}
245
242
  >
246
243
  <View style={styles.behindContainer}>
247
244
  <View style={styles.behindContainerItem}>
248
- {(isLeftSwipeHandler ? leftSwipeHandlers : leftButtons).map(
249
- (item, index) => renderBehindItem(item.props, index)
250
- )}
245
+ {isRightSwipeHandled
246
+ ? renderBehindItem(
247
+ rightSwipeToSwipeableItemBehindItem(rightSwipe),
248
+ 0
249
+ )
250
+ : rightSwipeButtons.map((item, index) =>
251
+ renderBehindItem(item.props, index)
252
+ )}
251
253
  </View>
252
254
  <View style={styles.behindContainerItem}>
253
- {(isRightSwipeHandler ? rightSwipeHandlers : rightButtons).map(
254
- (item, index) => renderBehindItem(item.props, index)
255
- )}
255
+ {isLeftSwipeHandled
256
+ ? renderBehindItem(
257
+ leftSwipeToSwipeableItemBehindItem(leftSwipe),
258
+ 0
259
+ )
260
+ : leftSwipeButtons.map((item, index) =>
261
+ renderBehindItem(item.props, index)
262
+ )}
256
263
  </View>
257
264
  </View>
258
265
  <View
@@ -298,4 +305,4 @@ const styles = StyleSheet.create({
298
305
  },
299
306
  });
300
307
 
301
- export default withTheme(SwipeableView);
308
+ export default withTheme(SwipeableItem);
@@ -0,0 +1,6 @@
1
+ //Renders nothing, acts as a wrapper be used by SwipeableView
2
+ const SwipeableItemButton = () => {
3
+ return null;
4
+ };
5
+ export default SwipeableItemButton;
6
+ //# sourceMappingURL=SwipeableItemButton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SwipeableItemButton.js","sourceRoot":"","sources":["SwipeableItemButton.tsx"],"names":[],"mappings":"AAKA,6DAA6D;AAC7D,MAAM,mBAAmB,GAAuC,GAAG,EAAE;IACnE,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,eAAe,mBAAmB,CAAC"}
@@ -0,0 +1,11 @@
1
+ import React from "react";
2
+ import { SwipeableItemBehindItem } from "./SwipeableItemCommon";
3
+
4
+ export type SwipeableItemButtonProps = Omit<SwipeableItemBehindItem, "onSwipe">;
5
+
6
+ //Renders nothing, acts as a wrapper be used by SwipeableView
7
+ const SwipeableItemButton: React.FC<SwipeableItemButtonProps> = () => {
8
+ return null;
9
+ };
10
+
11
+ export default SwipeableItemButton;
@@ -0,0 +1,44 @@
1
+ import { pick } from "lodash";
2
+ export function extractRightSwipeProps(object) {
3
+ return pick(object, [
4
+ "onSwipeRight",
5
+ "rightSwipeTitle",
6
+ "rightSwipeIcon",
7
+ "rightSwipeIconSize",
8
+ "rightSwipeBackgroundColor",
9
+ "rightSwipeColor",
10
+ ]);
11
+ }
12
+ export function extractLeftSwipeProps(object) {
13
+ return pick(object, [
14
+ "onSwipeLeft",
15
+ "leftSwipeTitle",
16
+ "leftSwipeIcon",
17
+ "leftSwipeIconSize",
18
+ "leftSwipeBackgroundColor",
19
+ "leftSwipeColor",
20
+ ]);
21
+ }
22
+ export function rightSwipeToSwipeableItemBehindItem(swipe) {
23
+ return {
24
+ title: swipe.rightSwipeTitle || "",
25
+ revealSwipeDirection: "right",
26
+ onSwipe: swipe.onSwipeRight,
27
+ icon: swipe.rightSwipeIcon,
28
+ iconSize: swipe.rightSwipeIconSize,
29
+ backgroundColor: swipe.rightSwipeBackgroundColor,
30
+ color: swipe.rightSwipeColor,
31
+ };
32
+ }
33
+ export function leftSwipeToSwipeableItemBehindItem(swipe) {
34
+ return {
35
+ title: swipe.leftSwipeTitle || "",
36
+ revealSwipeDirection: "left",
37
+ onSwipe: swipe.onSwipeLeft,
38
+ icon: swipe.leftSwipeIcon,
39
+ iconSize: swipe.leftSwipeIconSize,
40
+ backgroundColor: swipe.leftSwipeBackgroundColor,
41
+ color: swipe.leftSwipeColor,
42
+ };
43
+ }
44
+ //# sourceMappingURL=SwipeableItemCommon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SwipeableItemCommon.js","sourceRoot":"","sources":["SwipeableItemCommon.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AA+B9B,MAAM,UAAU,sBAAsB,CAAC,MAAc;IACnD,OAAO,IAAI,CAAC,MAAM,EAAE;QAClB,cAAc;QACd,iBAAiB;QACjB,gBAAgB;QAChB,oBAAoB;QACpB,2BAA2B;QAC3B,iBAAiB;KAClB,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,MAAc;IAClD,OAAO,IAAI,CAAC,MAAM,EAAE;QAClB,aAAa;QACb,gBAAgB;QAChB,eAAe;QACf,mBAAmB;QACnB,0BAA0B;QAC1B,gBAAgB;KACjB,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,mCAAmC,CACjD,KAAsB;IAEtB,OAAO;QACL,KAAK,EAAE,KAAK,CAAC,eAAe,IAAI,EAAE;QAClC,oBAAoB,EAAE,OAAO;QAC7B,OAAO,EAAE,KAAK,CAAC,YAAY;QAC3B,IAAI,EAAE,KAAK,CAAC,cAAc;QAC1B,QAAQ,EAAE,KAAK,CAAC,kBAAkB;QAClC,eAAe,EAAE,KAAK,CAAC,yBAAyB;QAChD,KAAK,EAAE,KAAK,CAAC,eAAe;KAC7B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,kCAAkC,CAChD,KAAqB;IAErB,OAAO;QACL,KAAK,EAAE,KAAK,CAAC,cAAc,IAAI,EAAE;QACjC,oBAAoB,EAAE,MAAM;QAC5B,OAAO,EAAE,KAAK,CAAC,WAAW;QAC1B,IAAI,EAAE,KAAK,CAAC,aAAa;QACzB,QAAQ,EAAE,KAAK,CAAC,iBAAiB;QACjC,eAAe,EAAE,KAAK,CAAC,wBAAwB;QAC/C,KAAK,EAAE,KAAK,CAAC,cAAc;KAC5B,CAAC;AACJ,CAAC"}
@@ -0,0 +1,80 @@
1
+ import { pick } from "lodash";
2
+
3
+ export interface SwipeableItemBehindItem {
4
+ title: string;
5
+ revealSwipeDirection: "left" | "right";
6
+ onPress?: () => void;
7
+ onSwipe?: () => void;
8
+ icon?: string;
9
+ iconSize?: number;
10
+ backgroundColor?: string;
11
+ color?: string;
12
+ }
13
+
14
+ export interface RightSwipeProps {
15
+ onSwipeRight?: () => void;
16
+ rightSwipeTitle?: string;
17
+ rightSwipeIcon?: string;
18
+ rightSwipeIconSize?: number;
19
+ rightSwipeBackgroundColor?: string;
20
+ rightSwipeColor?: string;
21
+ }
22
+
23
+ export interface LeftSwipeProps {
24
+ onSwipeLeft?: () => void;
25
+ leftSwipeTitle?: string;
26
+ leftSwipeIcon?: string;
27
+ leftSwipeIconSize?: number;
28
+ leftSwipeBackgroundColor?: string;
29
+ leftSwipeColor?: string;
30
+ }
31
+
32
+ export function extractRightSwipeProps(object: object): RightSwipeProps {
33
+ return pick(object, [
34
+ "onSwipeRight",
35
+ "rightSwipeTitle",
36
+ "rightSwipeIcon",
37
+ "rightSwipeIconSize",
38
+ "rightSwipeBackgroundColor",
39
+ "rightSwipeColor",
40
+ ]);
41
+ }
42
+
43
+ export function extractLeftSwipeProps(object: object): LeftSwipeProps {
44
+ return pick(object, [
45
+ "onSwipeLeft",
46
+ "leftSwipeTitle",
47
+ "leftSwipeIcon",
48
+ "leftSwipeIconSize",
49
+ "leftSwipeBackgroundColor",
50
+ "leftSwipeColor",
51
+ ]);
52
+ }
53
+
54
+ export function rightSwipeToSwipeableItemBehindItem(
55
+ swipe: RightSwipeProps
56
+ ): Omit<SwipeableItemBehindItem, "onPress"> {
57
+ return {
58
+ title: swipe.rightSwipeTitle || "",
59
+ revealSwipeDirection: "right",
60
+ onSwipe: swipe.onSwipeRight,
61
+ icon: swipe.rightSwipeIcon,
62
+ iconSize: swipe.rightSwipeIconSize,
63
+ backgroundColor: swipe.rightSwipeBackgroundColor,
64
+ color: swipe.rightSwipeColor,
65
+ };
66
+ }
67
+
68
+ export function leftSwipeToSwipeableItemBehindItem(
69
+ swipe: LeftSwipeProps
70
+ ): Omit<SwipeableItemBehindItem, "onPress"> {
71
+ return {
72
+ title: swipe.leftSwipeTitle || "",
73
+ revealSwipeDirection: "left",
74
+ onSwipe: swipe.onSwipeLeft,
75
+ icon: swipe.leftSwipeIcon,
76
+ iconSize: swipe.leftSwipeIconSize,
77
+ backgroundColor: swipe.leftSwipeBackgroundColor,
78
+ color: swipe.leftSwipeColor,
79
+ };
80
+ }
@@ -0,0 +1,29 @@
1
+ import React from "react";
2
+ import { FlashList } from "@shopify/flash-list";
3
+ import { FlatList } from "react-native";
4
+ export const SwipeableListContext = React.createContext({
5
+ onStartSwiping: () => { },
6
+ onStopSwiping: () => { },
7
+ });
8
+ const SwipeableList = ({ disableScrollWhenSwiping = true, listComponent = "FlatList", ...rest }) => {
9
+ const [isSwiping, setIsSwiping] = React.useState(false);
10
+ const onStartSwiping = () => {
11
+ setIsSwiping(true);
12
+ };
13
+ const onStopSwiping = () => {
14
+ setIsSwiping(false);
15
+ };
16
+ rest.scrollEnabled = disableScrollWhenSwiping ? !isSwiping : true;
17
+ const renderListComponent = () => {
18
+ switch (listComponent) {
19
+ case "FlatList":
20
+ return React.createElement(FlatList, { ...rest });
21
+ case "FlashList":
22
+ return React.createElement(FlashList, { ...rest });
23
+ }
24
+ };
25
+ return (React.createElement(SwipeableListContext.Provider, { value: { onStartSwiping, onStopSwiping } },
26
+ React.createElement(React.Fragment, null, renderListComponent())));
27
+ };
28
+ export default SwipeableList;
29
+ //# sourceMappingURL=SwipeableList.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SwipeableList.js","sourceRoot":"","sources":["SwipeableList.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAkB,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAiB,QAAQ,EAAE,MAAM,cAAc,CAAC;AAoBvD,MAAM,CAAC,MAAM,oBAAoB,GAC/B,KAAK,CAAC,aAAa,CAA2B;IAC5C,cAAc,EAAE,GAAG,EAAE,GAAE,CAAC;IACxB,aAAa,EAAE,GAAG,EAAE,GAAE,CAAC;CACxB,CAAC,CAAC;AAEL,MAAM,aAAa,GAAG,CAAmB,EACvC,wBAAwB,GAAG,IAAI,EAC/B,aAAa,GAAG,UAAU,EAC1B,GAAG,IAAI,EACwD,EAAE,EAAE;IACnE,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAExD,MAAM,cAAc,GAAG,GAAG,EAAE;QAC1B,YAAY,CAAC,IAAI,CAAC,CAAC;IACrB,CAAC,CAAC;IAEF,MAAM,aAAa,GAAG,GAAG,EAAE;QACzB,YAAY,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC,CAAC;IAEF,IAAI,CAAC,aAAa,GAAG,wBAAwB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;IAElE,MAAM,mBAAmB,GAAG,GAAG,EAAE;QAC/B,QAAQ,aAAa,EAAE;YACrB,KAAK,UAAU;gBACb,OAAO,oBAAC,QAAQ,OAAM,IAAyB,GAAI,CAAC;YACtD,KAAK,WAAW;gBACd,OAAO,oBAAC,SAAS,OAAM,IAA0B,GAAI,CAAC;SACzD;IACH,CAAC,CAAC;IAEF,OAAO,CACL,oBAAC,oBAAoB,CAAC,QAAQ,IAAC,KAAK,EAAE,EAAE,cAAc,EAAE,aAAa,EAAE;QACrE,0CAAG,mBAAmB,EAAE,CAAI,CACE,CACjC,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,aAAa,CAAC"}