diff options
Diffstat (limited to 'src/view/com/post/PostText.tsx')
-rw-r--r-- | src/view/com/post/PostText.tsx | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/src/view/com/post/PostText.tsx b/src/view/com/post/PostText.tsx new file mode 100644 index 000000000..541f2fc16 --- /dev/null +++ b/src/view/com/post/PostText.tsx @@ -0,0 +1,53 @@ +import React, {useState, useEffect} from 'react' +import {observer} from 'mobx-react-lite' +import {ActivityIndicator, Text, View} from 'react-native' +import {PostModel} from '../../../state/models/post' +import {useStores} from '../../../state' + +export const PostText = observer(function PostText({ + uri, + style, +}: { + uri: string + style?: StyleProp +}) { + const store = useStores() + const [model, setModel] = useState<PostModel | undefined>() + + useEffect(() => { + if (model?.uri === uri) { + return // no change needed? or trigger refresh? + } + const newModel = new PostModel(store, uri) + setModel(newModel) + newModel.setup().catch(err => console.error('Failed to fetch post', err)) + }, [uri, model?.uri, store]) + + // loading + // = + if (!model || model.isLoading || model.uri !== uri) { + return ( + <View> + <ActivityIndicator /> + </View> + ) + } + + // error + // = + if (model.hasError) { + return ( + <View> + <Text style={style}>{model.error}</Text> + </View> + ) + } + + // loaded + // = + return ( + <View> + <Text style={style}>{model.text}</Text> + </View> + ) +}) |