import React, { FC, ReactNode, useState } from 'react'; import { Linking, ScrollView, Text, TouchableOpacity, View, Image } from 'react-native'; import { CommonActions, NavigationProp, useNavigation } from '@react-navigation/native'; import Modal from 'react-native-modal'; import Tooltip from 'react-native-walkthrough-tooltip'; import { type Score, type Series, type SocialData, usePostGetProfileInfoPublicQuery, usePostGetProfileInfoQuery, usePostGetProfileRegions } from '@api/user'; import { BigText, Button, PageWrapper, Loading, AvatarWithInitials, Header } from '../../../components'; import { Colors } from '../../../theme'; import { styles } from './styles'; import { ButtonVariants } from '../../../types/components'; import { API_HOST } from '../../../constants'; import { NAVIGATION_PAGES } from '../../../types'; import { storage, StoreType } from '../../../storage'; import { getFontSize, getYears } from '../../../utils'; import IconFacebook from '../../../../assets/icons/facebook.svg'; import IconInstagram from '../../../../assets/icons/instagram.svg'; import IconTwitter from '../../../../assets/icons/x(twitter).svg'; import IconYouTube from '../../../../assets/icons/youtube.svg'; import IconGlobe from '../../../../assets/icons/bottom-navigation/globe.svg'; import IconLink from '../../../../assets/icons/link.svg'; import GearIcon from '../../../../assets/icons/gear.svg'; import ArrowIcon from '../../../../assets/icons/next.svg'; import RegionsRenderer from './RegionsRenderer'; type Props = { navigation: NavigationProp; route: any; }; const ProfileScreen: FC = ({ navigation, route }) => { const isPublicView = route.name === NAVIGATION_PAGES.PUBLIC_PROFILE_VIEW; const token = storage.get('token', StoreType.STRING) as string; const currentUserId = storage.get('uid', StoreType.STRING) as string; if (!token) return ; const { data, isFetching } = isPublicView ? usePostGetProfileInfoPublicQuery(route.params?.userId, true) : usePostGetProfileInfoQuery(token, true); if (!data || isFetching) return ; const handleGoToMap = () => { isPublicView ? navigation.navigate(NAVIGATION_PAGES.USERS_MAP, { userId: route.params?.userId, data }) : navigation.dispatch( CommonActions.reset({ index: 1, routes: [{ name: NAVIGATION_PAGES.IN_APP_MAP_TAB }] }) ); }; return ( {isPublicView &&
} {data.avatar ? ( ) : ( )} {data.first_name} {data.last_name} Age: {getYears(data.date_of_birth)} {data.homebase2_flag && data.homebase2_flag !== data.homebase_flag ? ( ) : null} {!isPublicView ? ( navigation.navigate(NAVIGATION_PAGES.EDIT_PERSONAL_INFO)} > ) : null} ); }; type PersonalInfoProps = { data: { bio: string; date_of_birth: string; scores: Score[]; links: { f?: SocialData; t?: SocialData; i?: SocialData; y?: SocialData; www?: SocialData; other?: SocialData; }; homebase: string; homebase2: string; series: Series[]; }; userId: number; }; const PersonalInfo: FC = ({ data, userId }) => { const [showMoreSeries, setShowMoreSeries] = useState(false); const [type, setType] = useState('nm'); const [isModalVisible, setIsModalVisible] = useState(false); const [toolTipVisible, setToolTipVisible] = useState(null); const { data: regions } = usePostGetProfileRegions(userId, type); const scores = ['NM1301', 'DARE', 'UN', 'UN+', 'TCC', 'SLOW', 'YES', 'WHS']; const handleOpenUrl = (url: string | undefined) => { url && Linking.openURL(url); }; const hasActiveLinks = () => { return ( (data.links?.f?.link && data.links?.f?.active !== 0) || (data.links?.i?.link && data.links?.i?.active !== 0) || (data.links?.t?.link && data.links?.t?.active !== 0) || (data.links?.y?.link && data.links?.y?.active !== 0) || (data.links?.www?.link && data.links?.www?.active !== 0) || (data.links?.other?.link && data.links?.other?.active !== 0) ); }; const handleOpenModal = (type: string) => { switch (type) { case 'NM1301': setType('nm'); break; case 'DARE': setType('mqp'); break; case 'UN': setType('un'); break; case 'UN+': setType('unp'); break; case 'TCC': setType('tcc'); break; case 'SLOW': setType('slow'); break; case 'YES': setType('yes'); break; case 'WHS': setType('whs'); break; } setIsModalVisible(true); }; return ( <> {scores.map((score, index) => { let scoreRank = data.scores?.find((s) => s.name === score && s.score > 0)?.score ?? '-'; if (score === 'YES' && +scoreRank >= 4500) { scoreRank = '-'; } return ( handleOpenModal(score)} > {scoreRank} {score === 'NM1301' ? 'NM' : score} ); })} {data.series?.length > 0 && ( {data.series?.slice(0, showMoreSeries ? data.series.length : 8).map((data, index) => ( {data.name}} contentStyle={{ backgroundColor: Colors.FILL_LIGHT }} placement="top" onClose={() => setToolTipVisible(null)} key={index} backgroundColor="transparent" allowChildInteraction={false} > setToolTipVisible(index)} > {data.score} ))} )} {data.series?.length > 8 ? ( setShowMoreSeries(!showMoreSeries)}> ) : null} {/* DATE OF BIRTH {new Date(data.date_of_birth).toDateString()} REGION OF ORIGIN {data.homebase} {data.homebase2 ? ( SECOND REGION {data.homebase2} ) : null} */} {data.bio && data.bio.length > 0 && ( {data.bio} )} {hasActiveLinks() && ( {data.links?.f?.link && data.links?.f?.active !== 0 ? ( handleOpenUrl(data.links?.f?.link)}> ) : null} {data.links?.i?.link && data.links?.i?.active !== 0 ? ( handleOpenUrl(data.links?.i?.link)}> ) : null} {data.links?.t?.link && data.links?.t?.active !== 0 ? ( handleOpenUrl(data.links?.t?.link)}> ) : null} {data.links?.y?.link && data.links?.y?.active !== 0 ? ( handleOpenUrl(data.links?.y?.link)}> ) : null} {data.links?.www?.link && data.links?.www?.active !== 0 ? ( handleOpenUrl(data.links?.www?.link)}> ) : null} {data.links?.other?.link && data.links?.other?.active !== 0 ? ( handleOpenUrl(data.links?.other?.link)}> ) : null} )} setIsModalVisible(false)} onBackButtonPress={() => setIsModalVisible(false)} style={styles.modal} statusBarTranslucent={true} presentationStyle="overFullScreen" > ); }; const InfoItem: FC<{ title: string; inline?: boolean; children: ReactNode; showMore?: boolean; }> = ({ title, inline, children, showMore }) => ( {title} {children} ); const UnauthenticatedProfileScreen = () => { const navigation = useNavigation(); return ( ); }; export default ProfileScreen;