diff --git a/app/actions/notification.js b/app/actions/notification.js index 44f03d8a0..35fc49d87 100644 --- a/app/actions/notification.js +++ b/app/actions/notification.js @@ -4,6 +4,8 @@ export function notificationReceived(params) { return { type: NOTIFICATION.RECEIVED, payload: { + title: params.title, + avatar: params.avatar, message: params.text, payload: params.payload } diff --git a/app/containers/UIKit/MultiSelect/Items.js b/app/containers/UIKit/MultiSelect/Items.js index 59075c35e..17b30a52d 100644 --- a/app/containers/UIKit/MultiSelect/Items.js +++ b/app/containers/UIKit/MultiSelect/Items.js @@ -44,7 +44,7 @@ const Items = ({ } keyExtractor={keyExtractor} diff --git a/app/containers/UIKit/MultiSelect/styles.js b/app/containers/UIKit/MultiSelect/styles.js index d9774d0f6..f0034364a 100644 --- a/app/containers/UIKit/MultiSelect/styles.js +++ b/app/containers/UIKit/MultiSelect/styles.js @@ -50,8 +50,11 @@ export default StyleSheet.create({ position: 'absolute', right: 16 }, + itemContent: { + paddingBottom: 36 + }, items: { - height: 200 + height: 226 }, chips: { flexDirection: 'row', diff --git a/app/containers/UIKit/Overflow.js b/app/containers/UIKit/Overflow.js index 8cf5ed631..6d76f6f3f 100644 --- a/app/containers/UIKit/Overflow.js +++ b/app/containers/UIKit/Overflow.js @@ -82,7 +82,7 @@ export const Overflow = ({ hitSlop={BUTTON_HIT_SLOP} style={styles.menu} > - {!loading ? : } + {!loading ? : } Navigation.navigate('TableView', { renderRows, tableWidth: getTableWidth() }); + const onPress = () => Navigation.navigate('MarkdownTableView', { renderRows, tableWidth: getTableWidth() }); return ( diff --git a/app/lib/methods/actions.js b/app/lib/methods/actions.js index 4d35e9155..e2ac96978 100644 --- a/app/lib/methods/actions.js +++ b/app/lib/methods/actions.js @@ -133,7 +133,11 @@ export function triggerAction({ try { const { type: interactionType, ...data } = await result.json(); - return resolve(handlePayloadUserInteraction(interactionType, data)); + handlePayloadUserInteraction(interactionType, data); + + if (data.success) { + return resolve(); + } } catch (e) { // modal.close has no body, so result.json will fail // but it returns ok status diff --git a/app/lib/methods/subscriptions/rooms.js b/app/lib/methods/subscriptions/rooms.js index 7a47837ee..52f527d56 100644 --- a/app/lib/methods/subscriptions/rooms.js +++ b/app/lib/methods/subscriptions/rooms.js @@ -11,6 +11,7 @@ import { roomsRequest } from '../../../actions/rooms'; import { notificationReceived } from '../../../actions/notification'; import { handlePayloadUserInteraction } from '../actions'; import buildMessage from '../helpers/buildMessage'; +import RocketChat from '../../rocketchat'; const removeListener = listener => listener.stop(); @@ -275,6 +276,15 @@ export default function subscribeRooms() { } if (/notification/.test(ev)) { const [notification] = ddpMessage.fields.args; + try { + const { payload: { rid } } = notification; + const subCollection = db.collections.get('subscriptions'); + const sub = await subCollection.find(rid); + notification.title = RocketChat.getRoomTitle(sub); + notification.avatar = RocketChat.getRoomAvatar(sub); + } catch (e) { + // do nothing + } store.dispatch(notificationReceived(notification)); } if (/uiInteraction/.test(ev)) { diff --git a/app/lib/rocketchat.js b/app/lib/rocketchat.js index ddb1dea81..b2e8edcde 100644 --- a/app/lib/rocketchat.js +++ b/app/lib/rocketchat.js @@ -1131,6 +1131,9 @@ const RocketChat = { const { UI_Use_Real_Name: useRealName } = reduxStore.getState().settings; return ((room.prid || useRealName) && room.fname) || room.name; }, + getRoomAvatar(room) { + return room.prid ? room.fname : room.name; + }, findOrCreateInvite({ rid, days, maxUses }) { // RC 2.4.0 diff --git a/app/notifications/inApp/index.js b/app/notifications/inApp/index.js index 9c5623973..4062c1fc4 100644 --- a/app/notifications/inApp/index.js +++ b/app/notifications/inApp/index.js @@ -158,15 +158,18 @@ class NotificationBadge extends React.Component { } goToRoom = async() => { - const { notification: { payload }, navigation, baseUrl } = this.props; + const { notification, navigation, baseUrl } = this.props; + const { payload } = notification; const { rid, type, prid } = payload; if (!rid) { return; } const name = type === 'd' ? payload.sender.username : payload.name; + // if sub is not on local database, title will be null, so we use payload from notification + const { title = name } = notification; await navigation.navigate('RoomsListView'); navigation.navigate('RoomView', { - rid, name, t: type, prid, baseUrl + rid, name: title, t: type, prid, baseUrl }); this.hide(); } @@ -178,6 +181,8 @@ class NotificationBadge extends React.Component { const { message, payload } = notification; const { type } = payload; const name = type === 'd' ? payload.sender.username : payload.name; + // if sub is not on local database, title and avatar will be null, so we use payload from notification + const { title = name, avatar = name } = notification; let top = 0; if (isIOS) { @@ -211,9 +216,9 @@ class NotificationBadge extends React.Component { background={Touchable.SelectableBackgroundBorderless()} > <> - + - {name} + {title} {message} diff --git a/app/views/ModalBlockView.js b/app/views/ModalBlockView.js index 53a9283d2..ba4cd963c 100644 --- a/app/views/ModalBlockView.js +++ b/app/views/ModalBlockView.js @@ -1,8 +1,9 @@ import React from 'react'; -import { StyleSheet, ScrollView, View } from 'react-native'; +import { StyleSheet, View } from 'react-native'; import PropTypes from 'prop-types'; import isEqual from 'lodash/isEqual'; import { connect } from 'react-redux'; +import { KeyboardAwareScrollView } from 'react-native-keyboard-aware-scroll-view'; import { withTheme } from '../theme'; import { themedHeader } from '../utils/navigation'; @@ -224,7 +225,7 @@ class ModalBlockView extends React.Component { const { blocks } = view; return ( - {loading ? : null} - + ); } } diff --git a/app/views/RoomsListView/index.js b/app/views/RoomsListView/index.js index 611c72d8f..e8dca1d81 100644 --- a/app/views/RoomsListView/index.js +++ b/app/views/RoomsListView/index.js @@ -491,6 +491,8 @@ class RoomsListView extends React.Component { getRoomTitle = item => RocketChat.getRoomTitle(item) + getRoomAvatar = item => RocketChat.getRoomAvatar(item) + goRoom = (item) => { this.cancelSearchingAndroid(); const { navigation } = this.props; @@ -731,7 +733,7 @@ class RoomsListView extends React.Component { userMentions={item.userMentions} isRead={this.getIsRead(item)} favorite={item.f} - avatar={item.name} + avatar={this.getRoomAvatar(item)} lastMessage={item.lastMessage} name={this.getRoomTitle(item)} _updatedAt={item.roomUpdatedAt}