import { ImageContainer, TextContainer } from "@components/atoms"; import fontFamily from "@constants/fontFamily"; import imagePath from "@constants/imagePath"; import { useDispatch, useSelector } from "@redux/hooks"; import types from "@redux/types"; import changeLanguage from "@utils/i18nHelpers"; import { moderateScale, verticalScale } from "@utils/scaling"; import changeTheme from "@utils/themeHelpers"; import React, { ReactNode, forwardRef, useImperativeHandle, useState } from "react"; import { Modal, ModalProps, Pressable, Switch, View } from "react-native"; import { UnistylesRuntime, createStyleSheet, useStyles } from "react-native-unistyles"; import { storage } from "src/services/apiService"; const stylesheet = createStyleSheet((theme) => ({ container: { minHeight: "25%", marginTop: "auto", borderTopLeftRadius: moderateScale(24), borderTopRightRadius: moderateScale(24), shadowColor: theme.colors.background, shadowOffset: { width: 0, height: 2, }, shadowOpacity: 0.25, shadowRadius: 3.84, elevation: 5, paddingHorizontal: moderateScale(16), paddingVertical: moderateScale(8), backgroundColor: theme.colors.background, }, headerView: { flexDirection: "row", justifyContent: "space-between", }, horizontalLine: { height: moderateScale(6), width: moderateScale(80), borderRadius: moderateScale(8), alignSelf: "center", backgroundColor: theme.colors.opacity50, }, modalView: { flexDirection: "row", justifyContent: "space-between", marginTop: verticalScale(8), }, textStyle: (isSelected: boolean) => ({ fontFamily: isSelected ? fontFamily.semiBold : fontFamily.regular, color: isSelected ? theme.colors.danger : theme.colors.typography, }), logoutText: { color: theme.colors.danger, fontFamily: fontFamily.semiBold, }, })); interface ModalSheetProps extends ModalProps { children?: ReactNode; } export interface ModalSheetRef { toggleSheet: () => void; } const ModalSheet = forwardRef((props, ref) => { const [isVisible, setVisible] = useState(false); const { languages, defaultLanguage } = useSelector((state) => state.settings); const isDarkMode = UnistylesRuntime.themeName === "dark"; const dispatch = useDispatch(); const { styles } = useStyles(stylesheet); useImperativeHandle(ref, () => ({ toggleSheet: () => { setVisible(!isVisible); }, })); const onPressLogout = () => { setVisible(!isVisible); setTimeout(() => { // need time to close modal storage.clearAll(); dispatch({ type: types.CLEAR_REDUX_STATE }); }, 800); }; return ( setVisible(!isVisible)}> <> {languages.map((val) => ( changeLanguage(val)} > ))} changeTheme(isDarkMode ? "light" : "dark")} style={{ marginVertical: verticalScale(8), alignSelf: "flex-end", }} /> ); }); export default React.memo(ModalSheet);