diff --git a/src/view/com/composer/ComposePost.tsx b/src/view/com/composer/ComposePost.tsx index 33c86996..85a38932 100644 --- a/src/view/com/composer/ComposePost.tsx +++ b/src/view/com/composer/ComposePost.tsx @@ -1,5 +1,12 @@ import React, {useEffect, useMemo, useState} from 'react' -import {StyleSheet, Text, TextInput, TouchableOpacity, View} from 'react-native' +import { + ActivityIndicator, + StyleSheet, + Text, + TextInput, + TouchableOpacity, + View, +} from 'react-native' import LinearGradient from 'react-native-linear-gradient' import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome' import * as GetFollows from '../../../third-party/api/src/client/types/app/bsky/graph/getFollows' @@ -25,6 +32,7 @@ export function ComposePost({ onClose: () => void }) { const store = useStores() + const [isProcessing, setIsProcessing] = useState(false) const [error, setError] = useState('') const [text, setText] = useState('') const [followedUsers, setFollowedUsers] = useState< @@ -70,11 +78,15 @@ export function ComposePost({ onClose() } const onPressPublish = async () => { + if (isProcessing) { + return + } setError('') if (text.trim().length === 0) { setError('Did you want to say anything?') return false } + setIsProcessing(true) try { await apilib.post(store, text, replyTo) } catch (e: any) { @@ -82,6 +94,7 @@ export function ComposePost({ setError( 'Post failed to upload. Please check your Internet connection and try again.', ) + setIsProcessing(false) return } onPost?.() @@ -126,15 +139,21 @@ export function ComposePost({ Cancel - - - Post - - + {isProcessing ? ( + + + + ) : ( + + + Post + + + )} {error !== '' && ( diff --git a/src/view/com/modals/CreateScene.tsx b/src/view/com/modals/CreateScene.tsx index 0386370b..4cda1ad1 100644 --- a/src/view/com/modals/CreateScene.tsx +++ b/src/view/com/modals/CreateScene.tsx @@ -126,10 +126,8 @@ export function Component({}: {}) { /> {error !== '' && ( - - - - + + )} {handle.length >= 2 && !isProcessing ? ( @@ -209,9 +207,6 @@ const styles = StyleSheet.create({ height: 70, textAlignVertical: 'top', }, - errorContainer: { - height: 80, - }, btn: { flexDirection: 'row', alignItems: 'center',