diff options
Diffstat (limited to 'src/view/screens/Profile.tsx')
-rw-r--r-- | src/view/screens/Profile.tsx | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/src/view/screens/Profile.tsx b/src/view/screens/Profile.tsx index 7fb3a5fb7..5dbe29060 100644 --- a/src/view/screens/Profile.tsx +++ b/src/view/screens/Profile.tsx @@ -1,15 +1,19 @@ import React, {useEffect, useState, useMemo} from 'react' import {StyleSheet, Text, View} from 'react-native' import {observer} from 'mobx-react-lite' +import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome' import {ViewSelector} from '../com/util/ViewSelector' import {ScreenParams} from '../routes' import {ProfileUiModel, Sections} from '../../state/models/profile-ui' +import {MembershipItem} from '../../state/models/memberships-view' import {useStores} from '../../state' +import {ConfirmModel} from '../../state/models/shell-ui' import {ProfileHeader} from '../com/profile/ProfileHeader' import {FeedItem} from '../com/posts/FeedItem' import {ProfileCard} from '../com/profile/ProfileCard' import {ErrorScreen} from '../com/util/ErrorScreen' import {ErrorMessage} from '../com/util/ErrorMessage' +import Toast from '../com/util/Toast' import {s, colors} from '../lib/styles' import {UserGroupIcon} from '../lib/icons' @@ -65,10 +69,28 @@ export const Profile = observer(({visible, params}: ScreenParams) => { const onPressTryAgain = () => { uiState.setup() } + const onPressRemoveMember = (membership: MembershipItem) => { + store.shell.openModal( + new ConfirmModel( + `Remove ${membership.displayName || membership.handle}?`, + `You'll be able to invite them again if you change your mind.`, + async () => { + await uiState.members.removeMember(membership.did) + Toast.show(`User removed`, { + duration: Toast.durations.LONG, + position: Toast.positions.TOP, + }) + }, + ), + ) + } // rendering // = + const isSceneCreator = + uiState.isScene && store.me.did === uiState.profile.creator + const renderHeader = () => { if (!uiState) { return <View /> @@ -155,11 +177,26 @@ export const Profile = observer(({visible, params}: ScreenParams) => { if (uiState.members.hasContent) { items = uiState.members.members.slice() renderItem = (item: any) => { + const shouldAdmin = isSceneCreator && item.did !== store.me.did + const renderButton = shouldAdmin + ? () => ( + <> + <FontAwesomeIcon + icon="user-xmark" + style={[s.mr5]} + size={14} + /> + <Text style={[s.fw400, s.f14]}>Remove</Text> + </> + ) + : undefined return ( <ProfileCard did={item.did} handle={item.handle} displayName={item.displayName} + renderButton={renderButton} + onPressButton={() => onPressRemoveMember(item)} /> ) } |