import React, {useEffect, useState} from 'react'; import {StyleSheet} from 'react-native'; import Animated from 'react-native-reanimated'; import {useDispatch, useSelector} from 'react-redux'; import {INTEGRATED_SOCIAL_LIST, SOCIAL_LIST} from '../../../constants'; import {getLinkedSocials} from '../../../services'; import {loadIndividualSocial, updateSocial} from '../../../store/actions'; import {RootState} from '../../../store/rootReducer'; import {ScreenType} from '../../../types'; import Tagg from '../../taggs/Tagg'; const {View, ScrollView} = Animated; interface TaggsBarProps { userXId: string | undefined; screenType: ScreenType; linkedSocials?: string[]; } const TaggsBar: React.FC = ({ userXId, screenType, linkedSocials, }) => { let [taggs, setTaggs] = useState([]); let [taggsNeedUpdate, setTaggsNeedUpdate] = useState(true); const {user} = useSelector((state: RootState) => userXId ? state.userX[screenType][userXId] : state.user, ); const dispatch = useDispatch(); /** * Updates the individual social that needs update * If username is empty, update nonintegrated socials like Snapchat and TikTok * @param socialType Type of the social that needs update */ const handleSocialUpdate = (socialType: string, username: string) => { if (username !== '') { dispatch(updateSocial(socialType, username)); } else { dispatch(loadIndividualSocial(user.userId, socialType)); } }; /** * This useEffect should be called evey time the user being viewed is changed OR * And update is triggered manually */ useEffect(() => { const loadData = async () => { const socials: string[] = linkedSocials ? linkedSocials : await getLinkedSocials(user.userId); const unlinkedSocials = SOCIAL_LIST.filter( (s) => socials.indexOf(s) === -1, ); let new_taggs = []; let i = 0; for (let social of socials) { new_taggs.push( , ); i++; } if (!userXId) { for (let social of unlinkedSocials) { new_taggs.push( , ); i++; } } setTaggs(new_taggs); setTaggsNeedUpdate(false); }; if (user.userId) { loadData(); } }, [taggsNeedUpdate, user]); return taggs.length > 0 ? ( {taggs} ) : ( <> ); }; const styles = StyleSheet.create({ spContainer: { shadowColor: '#000', shadowRadius: 10, shadowOffset: {width: 0, height: 2}, zIndex: 1, marginBottom: 25, }, contentContainer: { alignItems: 'center', paddingBottom: 5, }, }); export default TaggsBar;