diff --git a/mock.js b/mock.js new file mode 100644 index 000000000..d4c85a791 --- /dev/null +++ b/mock.js @@ -0,0 +1,125 @@ +/** + * Mock implementation for test runners. + * + * Example: + * + * ```js + * jest.mock('@gorhom/bottom-sheet', () => require('@gorhom/bottom-sheet/mock')); + * ``` + */ + +const React = require('react'); + +const NOOP = () => {}; +const NOOP_VALUE = { value: 0 }; + +const BottomSheetModalProvider = ({ children }) => { + return children; +}; + +const BottomSheetBackdrop = NOOP; + +const BottomSheetComponent = props => { + return props.children; +}; + +class BottomSheetModal extends React.Component { + snapToIndex() {} + snapToPosition() {} + expand() {} + collapse() {} + close() {} + forceClose() {} + present() {} + dismiss() {} + + render() { + return this.props.children; + } +} + +class BottomSheet extends React.Component { + snapToIndex() {} + snapToPosition() {} + expand() {} + collapse() {} + close() {} + forceClose() {} + + render() { + return this.props.children; + } +} + +const useBottomSheet = () => ({ + snapToIndex: NOOP, + snapToPosition: NOOP, + expand: NOOP, + collapse: NOOP, + close: NOOP, + forceClose: NOOP, + + animatedIndex: NOOP_VALUE, + animatedPosition: NOOP_VALUE, +}); + +const useBottomSheetModal = () => ({ + dismiss: NOOP, + dismissAll: NOOP, +}); + +const useBottomSheetAnimationConfigs = configs => configs; + +const bottomSheetInternal = { + stopAnimation: NOOP, + animateToPosition: NOOP, + setScrollableRef: NOOP, + removeScrollableRef: NOOP, +}; + +const bottomSheetModalInternal = { + mountSheet: NOOP, + unmountSheet: NOOP, + willUnmountSheet: NOOP, +}; + +const internalProxy = { + get(target, prop) { + return prop in target ? target[prop] : NOOP_VALUE; + }, +}; + +const useBottomSheetInternal = () => + new Proxy(bottomSheetInternal, internalProxy); + +const useBottomSheetModalInternal = () => + new Proxy(bottomSheetModalInternal, internalProxy); + +const useBottomSheetDynamicSnapPoints = () => ({ + animatedSnapPoints: NOOP_VALUE, + animatedHandleHeight: NOOP_VALUE, + animatedContentHeight: NOOP_VALUE, + handleContentLayout: NOOP, +}); + +module.exports = { + BottomSheetView: BottomSheetComponent, + BottomSheetScrollView: BottomSheetComponent, + BottomSheetSectionList: BottomSheetComponent, + BottomSheetFlatList: BottomSheetComponent, + BottomSheetVirtualizedList: BottomSheetComponent, + + BottomSheetModalProvider, + BottomSheetModal, + BottomSheetBackdrop, + + default: BottomSheet, + + useBottomSheet, + useBottomSheetModal, + useBottomSheetSpringConfigs: useBottomSheetAnimationConfigs, + useBottomSheetTimingConfigs: useBottomSheetAnimationConfigs, + useBottomSheetInternal, + useBottomSheetModalInternal, + useBottomSheetDynamicSnapPoints, +}; diff --git a/package.json b/package.json index 1577261d8..70cf66059 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,8 @@ "react-native": "src/index.ts", "files": [ "src", - "lib" + "lib", + "mock.js" ], "keywords": [ "react-native",