diff --git a/template/src/common/helpers/logUtil.ts b/template/src/common/helpers/logUtil.ts new file mode 100644 index 0000000..48f9568 --- /dev/null +++ b/template/src/common/helpers/logUtil.ts @@ -0,0 +1,19 @@ +import { captureMessage } from "@sentry/react-native" + +/** + * Send to Sentry + */ +const captureLog = (msg: any) => { + if (msg) { + if (typeof msg === "object") { + captureMessage(JSON.stringify(msg)) + } else { + captureMessage(msg) + } + } +} + + +export const logUtil = { + captureLog, +} diff --git a/template/src/common/hooks/useBackgroundOverlay.tsx b/template/src/common/hooks/useBackgroundOverlay.tsx new file mode 100644 index 0000000..33a3442 --- /dev/null +++ b/template/src/common/hooks/useBackgroundOverlay.tsx @@ -0,0 +1,70 @@ +import React, { useMemo, useRef, useEffect } from "react" +import { StyleSheet, StatusBar, BackHandler, Keyboard } from "react-native" +import Animated from "react-native-reanimated" +import { timing } from "react-native-redash" +import { useFocusEffect } from "@react-navigation/native" + +function useBackgroundOverlay(visible: boolean, onTouchStart: () => void) { + const isFirstRender = useRef(true) + const opacity = useMemo( + () => + isFirstRender.current + ? 0 + : timing({ + from: visible ? 0 : 0.2, + to: visible ? 0.2 : 0, + }), + [visible] + ) + + useEffect(() => { + isFirstRender.current = false + }, []) + + useFocusEffect( + React.useCallback(() => { + const onBackPress = () => { + if (visible) { + onTouchStart() + return true + } else { + return false + } + } + BackHandler.addEventListener("hardwareBackPress", onBackPress) + + return () => + BackHandler.removeEventListener("hardwareBackPress", onBackPress) + }, [onTouchStart, visible]) + ) + + return ( + <> + {visible && } + { + Keyboard.dismiss() + onTouchStart() + }} + style={[ + styles.overlay, + { + opacity, + }, + ]} + /> + + ) +} + +const styles = StyleSheet.create({ + overlay: { + ...StyleSheet.absoluteFillObject, + zIndex: 1, + elevation: 1, + backgroundColor: "black", + }, +}) + +export default useBackgroundOverlay