import React from 'react'; import PropTypes from 'prop-types'; import { FlatList, View, Text } from 'react-native'; import equal from 'deep-equal'; import moment from 'moment'; import { connect } from 'react-redux'; import Avatar from '../../containers/Avatar'; import styles from './styles'; import ActivityIndicator from '../../containers/ActivityIndicator'; import { CloseModalButton } from '../../containers/HeaderButton'; import I18n from '../../i18n'; import RocketChat from '../../lib/rocketchat'; import StatusBar from '../../containers/StatusBar'; import { withTheme } from '../../theme'; import { themes } from '../../constants/colors'; import { getUserSelector } from '../../selectors/login'; import SafeAreaView from '../../containers/SafeAreaView'; class ReadReceiptView extends React.Component { static navigationOptions = ({ navigation, isMasterDetail }) => { const options = { title: I18n.t('Read_Receipt') }; if (isMasterDetail) { options.headerLeft = () => ; } return options; } static propTypes = { route: PropTypes.object, Message_TimeFormat: PropTypes.string, baseUrl: PropTypes.string, user: PropTypes.object, theme: PropTypes.string } constructor(props) { super(props); this.messageId = props.route.params?.messageId; this.state = { loading: false, receipts: [] }; } componentDidMount() { this.load(); } shouldComponentUpdate(nextProps, nextState) { const { loading, receipts } = this.state; const { theme } = this.props; if (nextProps.theme !== theme) { return true; } if (nextState.loading !== loading) { return true; } if (!equal(nextState.receipts, receipts)) { return true; } return false; } load = async() => { const { loading } = this.state; if (loading) { return; } this.setState({ loading: true }); try { const result = await RocketChat.getReadReceipts(this.messageId); if (result.success) { this.setState({ receipts: result.receipts, loading: false }); } } catch (error) { this.setState({ loading: false }); console.log('err_fetch_read_receipts', error); } } renderEmpty = () => { const { theme } = this.props; return ( {I18n.t('No_Read_Receipts')} ); } renderItem = ({ item }) => { const { Message_TimeFormat, user: { id: userId, token }, baseUrl, theme } = this.props; const time = moment(item.ts).format(Message_TimeFormat); if (!item?.user?.username) { return null; } return ( {item?.user?.name} {time} {`@${ item.user.username }`} ); } renderSeparator = () => { const { theme } = this.props; return ; } render() { const { receipts, loading } = this.state; const { theme } = this.props; if (!loading && receipts.length === 0) { return this.renderEmpty(); } return ( {loading ? : ( item._id} /> )} ); } } const mapStateToProps = state => ({ Message_TimeFormat: state.settings.Message_TimeFormat, baseUrl: state.server.server, user: getUserSelector(state) }); export default connect(mapStateToProps)(withTheme(ReadReceiptView));