From d3707f30e30bb717e95b27cc83a1121815b475b5 Mon Sep 17 00:00:00 2001 From: Paul Frazee Date: Thu, 10 Nov 2022 16:30:14 -0600 Subject: Implement scene invitation and membership controls --- src/view/com/notifications/InviteAccepter.tsx | 96 +++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 src/view/com/notifications/InviteAccepter.tsx (limited to 'src/view/com/notifications/InviteAccepter.tsx') diff --git a/src/view/com/notifications/InviteAccepter.tsx b/src/view/com/notifications/InviteAccepter.tsx new file mode 100644 index 000000000..7d735a66b --- /dev/null +++ b/src/view/com/notifications/InviteAccepter.tsx @@ -0,0 +1,96 @@ +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', + }, +}) -- cgit 1.4.1