import React, {useState} from 'react' import {StyleSheet, Text, TouchableOpacity, View} from 'react-native' import LinearGradient from 'react-native-linear-gradient' import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome' import * as apilib from '../../../state/lib/api' import {NotificationsViewItemModel} from '../../../state/models/notifications-view' import {ConfirmModel} from '../../../state/models/shell-ui' import {useStores} from '../../../state' import {ProfileCard} from '../profile/ProfileCard' import Toast from '../util/Toast' import {s, colors, gradients} from '../../lib/styles' export function InviteAccepter({item}: {item: NotificationsViewItemModel}) { const store = useStores() const [confirmationUri, setConfirmationUri] = useState('') const isMember = confirmationUri !== '' || store.me.memberships?.isMemberOf(item.author.did) const onPressAccept = async () => { store.shell.openModal( new ConfirmModel( 'Join this scene?', () => ( ), onPressConfirmAccept, ), ) } const onPressConfirmAccept = async () => { const uri = await apilib.acceptSceneInvite(store, { originator: { did: item.author.did, declarationCid: item.author.declaration.cid, }, assertion: { uri: item.uri, cid: item.cid, }, }) store.me.refreshMemberships() Toast.show('Invite accepted', { duration: Toast.durations.LONG, position: Toast.positions.TOP, }) setConfirmationUri(uri) } return ( {!isMember ? ( Accept Invite ) : ( Invite accepted )} ) } const styles = StyleSheet.create({ container: { flexDirection: 'row', }, btn: { borderRadius: 32, paddingHorizontal: 18, paddingVertical: 8, backgroundColor: colors.gray1, }, profileCardContainer: { borderWidth: 1, borderColor: colors.gray3, borderRadius: 6, }, inviteAccepted: { flexDirection: 'row', alignItems: 'center', }, })