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 {AVIS, BANNER} from '../../lib/assets' import Toast from '../util/Toast' import {Link} from '../util/Link' export const ProfileHeader = observer(function ProfileHeader({ view, }: { view: ProfileViewModel }) { const store = useStores() const onPressToggleFollow = () => { view?.toggleFollowing().then( () => { Toast.show( `${view.myState.hasFollowed ? '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 ( {view.displayName} Employee @blueskyweb.xyz {isMe ? ( Edit Profile ) : view.myState.hasFollowed ? ( 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, }, avi: { position: 'absolute', top: 80, left: 10, width: 80, height: 80, borderRadius: 40, resizeMode: 'cover', borderWidth: 2, borderColor: 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, paddingLeft: 55, paddingRight: 60, borderRadius: 30, borderWidth: 1, borderColor: 'transparent', }, btn: { alignItems: 'center', justifyContent: 'center', paddingVertical: 7, borderRadius: 30, borderWidth: 1, borderColor: colors.gray2, }, mainBtn: { paddingHorizontal: 40, }, secondaryBtn: { paddingHorizontal: 12, }, })