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,
},
})