import React, {useState, useEffect} from 'react' import {observer} from 'mobx-react-lite' import { ActivityIndicator, FlatList, Image, StyleSheet, Text, TouchableOpacity, View, } from 'react-native' import { LikedByViewModel, LikedByViewItemModel, } from '../../../state/models/liked-by-view' import {Link} from '../util/Link' import {useStores} from '../../../state' import {s, colors} from '../../lib/styles' import {AVIS} from '../../lib/assets' export const PostLikedBy = observer(function PostLikedBy({uri}: {uri: string}) { const store = useStores() const [view, setView] = useState() useEffect(() => { if (view?.params.uri === uri) { console.log('Liked by doing nothing') return // no change needed? or trigger refresh? } console.log('Fetching Liked by', uri) const newView = new LikedByViewModel(store, {uri}) setView(newView) newView.setup().catch(err => console.error('Failed to fetch liked by', err)) }, [uri, view?.params.uri, store]) // loading // = if ( !view || (view.isLoading && !view.isRefreshing) || view.params.uri !== uri ) { return ( ) } // error // = if (view.hasError) { return ( {view.error} ) } // loaded // = const renderItem = ({item}: {item: LikedByViewItemModel}) => ( ) return ( item._reactKey} renderItem={renderItem} /> ) }) const LikedByItem = ({item}: {item: LikedByViewItemModel}) => { return ( {item.displayName} @{item.name} ) } const styles = StyleSheet.create({ outer: { marginTop: 1, backgroundColor: colors.white, }, layout: { flexDirection: 'row', }, layoutAvi: { width: 60, paddingLeft: 10, paddingTop: 10, paddingBottom: 10, }, avi: { width: 40, height: 40, borderRadius: 20, resizeMode: 'cover', }, layoutContent: { flex: 1, paddingRight: 10, paddingTop: 10, paddingBottom: 10, }, })