import {View} from 'react-native' import { type ChatBskyGroupDefs, ChatBskyGroupWithdrawJoinRequest, } from '@atproto/api' import {Trans, useLingui} from '@lingui/react/macro' import {isNetworkError} from '#/lib/strings/errors' import {useWithdrawJoinGroupChatRequest} from '#/state/queries/messages/withdraw-join-group-chat' import {TimeElapsed} from '#/view/com/util/TimeElapsed' import {atoms as a, useTheme, web} from '#/alf' import {AvatarBubbles} from '#/components/AvatarBubbles' import {createStaticClick, Link} from '#/components/Link' import * as Prompt from '#/components/Prompt' import * as Toast from '#/components/Toast' import {Text} from '#/components/Typography' export function OutgoingRequestListItem({ convo: convoView, }: { convo: ChatBskyGroupDefs.JoinRequestConvoView }) { const t = useTheme() const {t: l} = useLingui() const prompt = Prompt.usePromptControl() const {mutate: withdrawRequest, isPending: isWithdrawPending} = useWithdrawJoinGroupChatRequest({ onSuccess: () => { Toast.show(l`Join request rescinded.`) }, onError: error => { let errorMessage = l`Failed to rescind your request. Please try again.` if (isNetworkError(error)) { errorMessage = l`There was a problem with your internet connection, please try again` } else if ( error instanceof ChatBskyGroupWithdrawJoinRequest.InvalidJoinRequestError ) { errorMessage = l`Invalid rescind request.` } Toast.show(errorMessage) }, }) return ( <> { prompt.open() })}> {({hovered, pressed, focused}) => ( {convoView.name} {convoView.viewer?.requestedAt ? ( {({timeElapsed}) => ( {timeElapsed} )} ) : null} You requested to join )} { prompt.close(() => { if (isWithdrawPending) return withdrawRequest({convoId: convoView.convoId}) }) }} /> ) }