import React from 'react' import {observer} from 'mobx-react-lite' import { ActivityIndicator, Image, StyleSheet, Text, TouchableOpacity, View, } from 'react-native' import LinearGradient from 'react-native-linear-gradient' import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome' import {ProfileViewModel} from '../../../state/models/profile-view' import {useStores} from '../../../state' import {EditProfileModel} from '../../../state/models/shell' import {pluralize} from '../../lib/strings' import {s, gradients, colors} from '../../lib/styles' import {BANNER} from '../../lib/assets' import Toast from '../util/Toast' import {UserAvatar} from '../util/UserAvatar' import {Link} from '../util/Link' export const ProfileHeader = observer(function ProfileHeader({ view, }: { view: ProfileViewModel }) { const store = useStores() const onPressBack = () => { store.nav.tab.goBack() } const onPressToggleFollow = () => { view?.toggleFollowing().then( () => { Toast.show( `${view.myState.follow ? 'Following' : 'No longer following'} ${ view.displayName || view.name }`, { duration: Toast.durations.LONG, position: Toast.positions.TOP, }, ) }, err => console.error('Failed to toggle follow', err), ) } const onPressEditProfile = () => { store.shell.openModal(new EditProfileModel(view)) } const onPressMenu = () => { // TODO } const onPressFollowers = () => { store.nav.navigate(`/profile/${view.name}/followers`) } const onPressFollows = () => { store.nav.navigate(`/profile/${view.name}/follows`) } // loading // = if (!view || (view.isLoading && !view.isRefreshing)) { return ( ) } // error // = if (view.hasError) { return ( {view.error} ) } // loaded // = const isMe = store.me.did === view.did return ( {store.nav.tab.canGoBack ? ( ) : undefined} {view.displayName} { undefined /* Employee @blueskyweb.xyz */ } {isMe ? ( Edit Profile ) : ( <> {view.myState.follow ? ( Following ) : ( Follow )} )} {view.followersCount} {pluralize(view.followersCount, 'follower')} {view.followsCount} following {view.postsCount} {pluralize(view.postsCount, 'post')} {view.description && ( {view.description} )} ) }) const styles = StyleSheet.create({ outer: { backgroundColor: colors.white, }, banner: { width: '100%', height: 120, }, backButton: { position: 'absolute', top: 6, left: 8, backgroundColor: '#000a', padding: 6, borderRadius: 30, }, backIcon: { width: 14, height: 14, color: colors.white, }, avi: { position: 'absolute', top: 80, left: 10, width: 84, height: 84, borderRadius: 42, borderWidth: 2, borderColor: colors.white, backgroundColor: colors.white, }, content: { paddingTop: 8, paddingHorizontal: 14, paddingBottom: 4, }, displayNameLine: { paddingLeft: 86, marginBottom: 14, }, displayName: { fontSize: 24, fontWeight: 'bold', }, badgesLine: { flexDirection: 'row', alignItems: 'center', marginBottom: 10, }, buttonsLine: { flexDirection: 'row', marginBottom: 12, }, followBtn: { flexDirection: 'row', alignItems: 'center', justifyContent: 'center', paddingVertical: 6, borderRadius: 6, marginRight: 6, }, btn: { flex: 1, alignItems: 'center', justifyContent: 'center', paddingVertical: 7, borderRadius: 4, backgroundColor: colors.gray1, marginRight: 6, }, mainBtn: { flexDirection: 'row', }, secondaryBtn: { flex: 0, paddingHorizontal: 14, marginRight: 0, }, })