diff --git a/app/lib/realm.js b/app/lib/realm.js index 17d30e26a72a48a3200b77b194cb4fb7ccf49854..b67661669d5ffb2d1a3697acbf8f590e6cde47ee 100644 --- a/app/lib/realm.js +++ b/app/lib/realm.js @@ -49,6 +49,7 @@ const roomsSchema = { properties: { _id: 'string', t: 'string', + lastMessage: 'messages', _updatedAt: { type: 'date', optional: true } } }; diff --git a/app/lib/rocketchat.js b/app/lib/rocketchat.js index dc0bf1bd64cefd74bc3c24a74e4e53dd711641ff..188178a8f99c98096b2bfbb2b3a2b445619ecef6 100644 --- a/app/lib/rocketchat.js +++ b/app/lib/rocketchat.js @@ -432,10 +432,17 @@ const RocketChat = { } return subscription; }); + database.write(() => { data.forEach(subscription => database.create('subscriptions', subscription, true)); }); + + database.write(() => { + rooms.forEach(room => + database.create('rooms', room, true)); + }); + this.ddp.subscribe('stream-notify-user', `${ login.user.id }/subscriptions-changed`, false); this.ddp.subscribe('stream-notify-user', `${ login.user.id }/rooms-changed`, false); return data; diff --git a/app/presentation/RoomItem.js b/app/presentation/RoomItem.js index d198f91fcae28942ca57e143bb6edd168cace6d2..82bd362a0de4af97237191efd1278fe3365c79cb 100644 --- a/app/presentation/RoomItem.js +++ b/app/presentation/RoomItem.js @@ -52,6 +52,7 @@ export default class RoomItem extends React.PureComponent { type: PropTypes.string.isRequired, name: PropTypes.string.isRequired, _updatedAt: PropTypes.instanceOf(Date), + lastMessage: PropTypes.object, favorite: PropTypes.bool, alert: PropTypes.bool, unread: PropTypes.number, @@ -94,11 +95,13 @@ export default class RoomItem extends React.PureComponent { render() { const { - favorite, alert, unread, userMentions, name, _updatedAt + favorite, alert, unread, userMentions, name, lastMessage, _updatedAt } = this.props; const date = this.formatDate(_updatedAt); + console.log("do we have a last message?", lastMessage); + let accessibilityLabel = name; if (unread === 1) { accessibilityLabel += `, ${ unread } alert`; @@ -118,6 +121,7 @@ export default class RoomItem extends React.PureComponent { {this.icon} <View style={styles.roomNameView}> <Text style={[styles.roomName, alert && styles.alert]} ellipsizeMode='tail' numberOfLines={1}>{ name }</Text> + {lastMessage ? <Text>{lastMessage.u.username}: {lastMessage.msg}</Text> : <Text>No Message</Text>} {_updatedAt ? <Text style={styles.update} ellipsizeMode='tail' numberOfLines={1}>{ date }</Text> : null} </View> {this.renderNumber(unread, userMentions)} diff --git a/app/views/RoomsListView/index.js b/app/views/RoomsListView/index.js index f229267231263ea0ba53e5f25751f220ca9725ed..c1d63f6ec6ffd23108844e12b346099cb00fa499 100644 --- a/app/views/RoomsListView/index.js +++ b/app/views/RoomsListView/index.js @@ -48,6 +48,7 @@ export default class RoomsListView extends React.Component { searchText: '' }; this.data = database.objects('subscriptions').sorted('roomUpdatedAt', true); + } componentDidMount() { @@ -79,6 +80,12 @@ export default class RoomsListView extends React.Component { this.search(text); } + getLastMessage = (subscription) => { + const room = database.objects('rooms').sorted('_updatedAt', true).slice().find(({ _id }) => _id === subscription.rid); + console.log('ROOM', room); + return room.lastMessage; + } + search(text) { const searchText = text.trim(); if (searchText === '') { @@ -202,6 +209,7 @@ export default class RoomsListView extends React.Component { alert={item.alert} unread={item.unread} userMentions={item.userMentions} + lastMessage={this.getLastMessage(item)} favorite={item.f} name={item.name} _updatedAt={item.roomUpdatedAt}