import React, {useEffect} from 'react' import {observer} from 'mobx-react-lite' import { Image, StyleSheet, SafeAreaView, Text, TouchableOpacity, TouchableWithoutFeedback, View, } from 'react-native' import Animated, { useSharedValue, useAnimatedStyle, withTiming, interpolate, } from 'react-native-reanimated' import {IconProp} from '@fortawesome/fontawesome-svg-core' import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome' import {HomeIcon} from '../../lib/icons' import {useStores} from '../../../state' import {s, colors} from '../../lib/styles' import {DEF_AVATER} from '../../lib/assets' export const MainMenu = observer( ({active, onClose}: {active: boolean; onClose: () => void}) => { const store = useStores() const initInterp = useSharedValue(0) useEffect(() => { if (active) { initInterp.value = withTiming(1, {duration: 150}) } else { initInterp.value = 0 } }, [initInterp, active]) const wrapperAnimStyle = useAnimatedStyle(() => ({ opacity: interpolate(initInterp.value, [0, 1.0], [0, 1.0]), })) const menuItemsAnimStyle = useAnimatedStyle(() => ({ marginTop: interpolate(initInterp.value, [0, 1.0], [15, 0]), })) // events // = const onNavigate = (url: string) => { store.nav.navigate(url) onClose() } // rendering // = const MenuItem = ({ icon, label, url, }: { icon: IconProp label: string url: string }) => ( onNavigate(url)}> {icon === 'home' ? ( ) : ( )} {label} ) if (!active) { return } return ( <> onNavigate(`/profile/${store.me.name || ''}`)}> {store.me.displayName || store.me.name || 'My profile'} onNavigate(`/settings`)}> ) }, ) const styles = StyleSheet.create({ bg: { position: 'absolute', top: 0, right: 0, bottom: 0, left: 0, // backgroundColor: '#000', opacity: 0, }, wrapper: { position: 'absolute', top: 0, bottom: 75, width: '100%', backgroundColor: '#fff', }, topSection: { flexDirection: 'row', alignItems: 'center', paddingHorizontal: 10, paddingBottom: 10, }, section: { paddingHorizontal: 10, }, profile: { paddingVertical: 10, paddingHorizontal: 10, flexDirection: 'row', alignItems: 'center', }, profileImage: { borderRadius: 15, width: 30, height: 30, marginRight: 8, }, profileText: { fontSize: 15, fontWeight: 'bold', }, settings: {}, settingsIcon: { color: colors.gray5, marginRight: 10, }, menuItems: { flexDirection: 'row', marginTop: 10, marginBottom: 10, }, menuItem: { width: 80, alignItems: 'center', marginRight: 6, }, menuItemMargin: { marginRight: 14, }, menuItemIconWrapper: { borderRadius: 6, width: 60, height: 60, justifyContent: 'center', alignItems: 'center', marginBottom: 5, backgroundColor: colors.gray1, }, menuItemIcon: { color: colors.gray5, }, menuItemLabel: { fontSize: 13, }, })