diff --git a/app/index.js b/app/index.js
index 9be8979b5..56f88def1 100644
--- a/app/index.js
+++ b/app/index.js
@@ -24,12 +24,9 @@ import RoomActionsView from './views/RoomActionsView';
import RoomInfoView from './views/RoomInfoView';
import RoomInfoEditView from './views/RoomInfoEditView';
import RoomMembersView from './views/RoomMembersView';
-import RoomFilesView from './views/RoomFilesView';
-import MentionedMessagesView from './views/MentionedMessagesView';
-import StarredMessagesView from './views/StarredMessagesView';
import SearchMessagesView from './views/SearchMessagesView';
-import PinnedMessagesView from './views/PinnedMessagesView';
import ThreadMessagesView from './views/ThreadMessagesView';
+import MessagesView from './views/MessagesView';
import SelectedUsersView from './views/SelectedUsersView';
import CreateChannelView from './views/CreateChannelView';
import LegalView from './views/LegalView';
@@ -108,13 +105,10 @@ const ChatsStack = createStackNavigator({
RoomInfoView,
RoomInfoEditView,
RoomMembersView,
- RoomFilesView,
- MentionedMessagesView,
- StarredMessagesView,
SearchMessagesView,
- PinnedMessagesView,
SelectedUsersView,
- ThreadMessagesView
+ ThreadMessagesView,
+ MessagesView
}, {
defaultNavigationOptions: defaultHeader
});
diff --git a/app/lib/methods/helpers/getFileUrlFromMessage.js b/app/lib/methods/helpers/getFileUrlFromMessage.js
new file mode 100644
index 000000000..60995aee1
--- /dev/null
+++ b/app/lib/methods/helpers/getFileUrlFromMessage.js
@@ -0,0 +1,15 @@
+export default function(message) {
+ if (/image/.test(message.type)) {
+ return { image_url: message.url };
+ }
+ if (/audio/.test(message.type)) {
+ return { audio_url: message.url };
+ }
+ if (/video/.test(message.type)) {
+ return { video_url: message.url };
+ }
+ return {
+ title_link: message.url,
+ type: 'file'
+ };
+}
diff --git a/app/views/MentionedMessagesView/index.js b/app/views/MentionedMessagesView/index.js
deleted file mode 100644
index 987e9da9d..000000000
--- a/app/views/MentionedMessagesView/index.js
+++ /dev/null
@@ -1,139 +0,0 @@
-import React from 'react';
-import PropTypes from 'prop-types';
-import { FlatList, View, Text } from 'react-native';
-import { connect } from 'react-redux';
-import { SafeAreaView } from 'react-navigation';
-import equal from 'deep-equal';
-
-import LoggedView from '../View';
-import styles from './styles';
-import Message from '../../containers/message/Message';
-import RCActivityIndicator from '../../containers/ActivityIndicator';
-import I18n from '../../i18n';
-import RocketChat from '../../lib/rocketchat';
-import StatusBar from '../../containers/StatusBar';
-
-@connect(state => ({
- baseUrl: state.settings.Site_Url || state.server ? state.server.server : '',
- customEmojis: state.customEmojis,
- user: {
- id: state.login.user && state.login.user.id,
- username: state.login.user && state.login.user.username,
- token: state.login.user && state.login.user.token
- }
-}))
-/** @extends React.Component */
-export default class MentionedMessagesView extends LoggedView {
- static navigationOptions = {
- title: I18n.t('Mentions')
- }
-
- static propTypes = {
- user: PropTypes.object,
- baseUrl: PropTypes.string,
- customEmojis: PropTypes.object,
- navigation: PropTypes.object
- }
-
- constructor(props) {
- super('MentionedMessagesView', props);
- this.state = {
- loading: false,
- messages: []
- };
- this.rid = props.navigation.getParam('rid');
- this.t = props.navigation.getParam('t');
- }
-
- componentDidMount() {
- this.load();
- }
-
- shouldComponentUpdate(nextProps, nextState) {
- const { loading, messages } = this.state;
- if (nextState.loading !== loading) {
- return true;
- }
- if (!equal(nextState.messages, messages)) {
- return true;
- }
- return false;
- }
-
- load = async() => {
- const {
- messages, total, loading
- } = this.state;
- const { user } = this.props;
- if (messages.length === total || loading) {
- return;
- }
-
- this.setState({ loading: true });
-
- try {
- const result = await RocketChat.getMessages(
- this.rid,
- this.t,
- { 'mentions._id': { $in: [user.id] } },
- messages.length
- );
- if (result.success) {
- this.setState(prevState => ({
- messages: [...prevState.messages, ...result.messages],
- total: result.total,
- loading: false
- }));
- }
- } catch (error) {
- this.setState({ loading: false });
- console.log('MentionedMessagesView -> load -> catch -> error', error);
- }
- }
-
- renderEmpty = () => (
-
- {I18n.t('No_mentioned_messages')}
-
- )
-
- renderItem = ({ item }) => {
- const { user, customEmojis, baseUrl } = this.props;
- return (
-
- );
- }
-
- render() {
- const { messages, loading } = this.state;
-
- if (!loading && messages.length === 0) {
- return this.renderEmpty();
- }
-
- return (
-
-
- item._id}
- onEndReached={this.load}
- ListFooterComponent={loading ? : null}
- />
-
- );
- }
-}
diff --git a/app/views/MessagesView/index.js b/app/views/MessagesView/index.js
new file mode 100644
index 000000000..3e7b4d236
--- /dev/null
+++ b/app/views/MessagesView/index.js
@@ -0,0 +1,255 @@
+import React from 'react';
+import PropTypes from 'prop-types';
+import { FlatList, View, Text } from 'react-native';
+import { connect } from 'react-redux';
+import { SafeAreaView } from 'react-navigation';
+import equal from 'deep-equal';
+import ActionSheet from 'react-native-action-sheet';
+
+import LoggedView from '../View';
+import styles from './styles';
+import Message from '../../containers/message/Message';
+import RCActivityIndicator from '../../containers/ActivityIndicator';
+import I18n from '../../i18n';
+import RocketChat from '../../lib/rocketchat';
+import StatusBar from '../../containers/StatusBar';
+import getFileUrlFromMessage from '../../lib/methods/helpers/getFileUrlFromMessage';
+
+const ACTION_INDEX = 0;
+const CANCEL_INDEX = 1;
+
+@connect(state => ({
+ baseUrl: state.settings.Site_Url || state.server ? state.server.server : '',
+ customEmojis: state.customEmojis,
+ user: {
+ id: state.login.user && state.login.user.id,
+ username: state.login.user && state.login.user.username,
+ token: state.login.user && state.login.user.token
+ }
+}))
+/** @extends React.Component */
+export default class MessagesView extends LoggedView {
+ static navigationOptions = ({ navigation }) => ({
+ title: navigation.state.params.name
+ });
+
+ static propTypes = {
+ user: PropTypes.object,
+ baseUrl: PropTypes.string,
+ customEmojis: PropTypes.object,
+ navigation: PropTypes.object
+ }
+
+ constructor(props) {
+ super('MessagesView', props);
+ this.state = {
+ loading: false,
+ messages: []
+ };
+ this.rid = props.navigation.getParam('rid');
+ this.t = props.navigation.getParam('t');
+ this.content = this.defineMessagesViewContent(props.navigation.getParam('name'));
+ }
+
+ componentDidMount() {
+ this.load();
+ }
+
+ shouldComponentUpdate(nextProps, nextState) {
+ const { loading, messages } = this.state;
+ if (nextState.loading !== loading) {
+ return true;
+ }
+ if (!equal(nextState.messages, messages)) {
+ return true;
+ }
+ return false;
+ }
+
+ defineMessagesViewContent = (name) => {
+ const { messages } = this.state;
+ const { user, baseUrl, customEmojis } = this.props;
+
+ const renderItemCommonProps = item => ({
+ customEmojis,
+ baseUrl,
+ user,
+ author: item.u || item.user,
+ ts: item.ts || item.uploadedAt,
+ timeFormat: 'MMM Do YYYY, h:mm:ss a',
+ edited: !!item.editedAt,
+ header: true,
+ attachments: item.attachments || []
+ });
+
+ return ({
+ // Files Messages Screen
+ Files: {
+ name: I18n.t('Files'),
+ fetchFunc: async() => {
+ const result = await RocketChat.getFiles(this.rid, this.t, messages.length);
+ return { ...result, messages: result.files };
+ },
+ noDataMsg: I18n.t('No_files'),
+ testID: 'room-files-view',
+ renderItem: (item) => {
+ const url = getFileUrlFromMessage(item);
+
+ return (
+
+ );
+ }
+ },
+ // Mentions Messages Screen
+ Mentions: {
+ name: I18n.t('Mentions'),
+ fetchFunc: () => RocketChat.getMessages(
+ this.rid,
+ this.t,
+ { 'mentions._id': { $in: [user.id] } },
+ messages.length
+ ),
+ noDataMsg: I18n.t('No_mentioned_messages'),
+ testID: 'mentioned-messages-view',
+ renderItem: item => (
+
+ )
+ },
+ // Starred Messages Screen
+ Starred: {
+ name: I18n.t('Starred'),
+ fetchFunc: () => RocketChat.getMessages(
+ this.rid,
+ this.t,
+ { 'starred._id': { $in: [user.id] } },
+ messages.length
+ ),
+ noDataMsg: I18n.t('No_starred_messages'),
+ testID: 'starred-messages-view',
+ renderItem: item => (
+ this.onLongPress(item)}
+ />
+ ),
+ actionTitle: I18n.t('Unstar'),
+ handleActionPress: message => RocketChat.toggleStarMessage(message)
+ },
+ // Pinned Messages Screen
+ Pinned: {
+ name: I18n.t('Pinned'),
+ fetchFunc: () => RocketChat.getMessages(this.rid, this.t, { pinned: true }, messages.length),
+ noDataMsg: I18n.t('No_pinned_messages'),
+ testID: 'pinned-messages-view',
+ renderItem: item => (
+ this.onLongPress(item)}
+ />
+ ),
+ actionTitle: I18n.t('Unpin'),
+ handleActionPress: message => RocketChat.togglePinMessage(message)
+ }
+ }[name]);
+ }
+
+ load = async() => {
+ const {
+ messages, total, loading
+ } = this.state;
+ if (messages.length === total || loading) {
+ return;
+ }
+
+ this.setState({ loading: true });
+
+ try {
+ const result = await this.content.fetchFunc();
+ if (result.success) {
+ this.setState({
+ messages: [...messages, ...result.messages],
+ total: result.total,
+ loading: false
+ });
+ }
+ } catch (error) {
+ this.setState({ loading: false });
+ console.warn('MessagesView -> catch -> error', error);
+ }
+ }
+
+ onLongPress = (message) => {
+ this.setState({ message });
+ this.showActionSheet();
+ }
+
+ showActionSheet = () => {
+ ActionSheet.showActionSheetWithOptions({
+ options: [this.content.actionTitle, I18n.t('Cancel')],
+ cancelButtonIndex: CANCEL_INDEX,
+ title: I18n.t('Actions')
+ }, (actionIndex) => {
+ this.handleActionPress(actionIndex);
+ });
+ }
+
+ handleActionPress = async(actionIndex) => {
+ if (actionIndex === ACTION_INDEX) {
+ const { message } = this.state;
+
+ try {
+ const result = await this.content.handleActionPress(message);
+ if (result.success) {
+ this.setState(prevState => ({
+ messages: prevState.messages.filter(item => item._id !== message._id),
+ total: prevState.total - 1
+ }));
+ }
+ } catch (error) {
+ console.warn('MessagesView -> handleActionPress -> catch -> error', error);
+ }
+ }
+ }
+
+ renderEmpty = () => (
+
+ {this.content.noDataMsg}
+
+ )
+
+ renderItem = ({ item }) => this.content.renderItem(item)
+
+ render() {
+ const { messages, loading } = this.state;
+
+ if (!loading && messages.length === 0) {
+ return this.renderEmpty();
+ }
+
+ return (
+
+
+ item._id}
+ onEndReached={this.load}
+ ListFooterComponent={loading ? : null}
+ />
+
+ );
+ }
+}
diff --git a/app/views/MentionedMessagesView/styles.js b/app/views/MessagesView/styles.js
similarity index 100%
rename from app/views/MentionedMessagesView/styles.js
rename to app/views/MessagesView/styles.js
diff --git a/app/views/PinnedMessagesView/index.js b/app/views/PinnedMessagesView/index.js
deleted file mode 100644
index 65cb15517..000000000
--- a/app/views/PinnedMessagesView/index.js
+++ /dev/null
@@ -1,178 +0,0 @@
-import React from 'react';
-import PropTypes from 'prop-types';
-import { FlatList, View, Text } from 'react-native';
-import { connect } from 'react-redux';
-import ActionSheet from 'react-native-action-sheet';
-import { SafeAreaView } from 'react-navigation';
-import equal from 'deep-equal';
-
-import LoggedView from '../View';
-import styles from './styles';
-import Message from '../../containers/message/Message';
-import RCActivityIndicator from '../../containers/ActivityIndicator';
-import I18n from '../../i18n';
-import RocketChat from '../../lib/rocketchat';
-import StatusBar from '../../containers/StatusBar';
-
-const PIN_INDEX = 0;
-const CANCEL_INDEX = 1;
-const options = [I18n.t('Unpin'), I18n.t('Cancel')];
-
-@connect(state => ({
- baseUrl: state.settings.Site_Url || state.server ? state.server.server : '',
- customEmojis: state.customEmojis,
- user: {
- id: state.login.user && state.login.user.id,
- username: state.login.user && state.login.user.username,
- token: state.login.user && state.login.user.token
- }
-}))
-/** @extends React.Component */
-export default class PinnedMessagesView extends LoggedView {
- static navigationOptions = {
- title: I18n.t('Pinned')
- }
-
- static propTypes = {
- user: PropTypes.object,
- baseUrl: PropTypes.string,
- customEmojis: PropTypes.object,
- navigation: PropTypes.object
- }
-
- constructor(props) {
- super('PinnedMessagesView', props);
- this.state = {
- loading: false,
- messages: []
- };
- this.rid = props.navigation.getParam('rid');
- this.t = props.navigation.getParam('t');
- }
-
- componentDidMount() {
- this.load();
- }
-
- shouldComponentUpdate(nextProps, nextState) {
- const { loading, messages } = this.state;
- if (nextState.loading !== loading) {
- return true;
- }
- if (!equal(nextState.messages, messages)) {
- return true;
- }
- return false;
- }
-
- onLongPress = (message) => {
- this.setState({ message });
- this.showActionSheet();
- }
-
- showActionSheet = () => {
- ActionSheet.showActionSheetWithOptions({
- options,
- cancelButtonIndex: CANCEL_INDEX,
- title: I18n.t('Actions')
- }, (actionIndex) => {
- this.handleActionPress(actionIndex);
- });
- }
-
- handleActionPress = (actionIndex) => {
- switch (actionIndex) {
- case PIN_INDEX:
- this.unPin();
- break;
- default:
- break;
- }
- }
-
- unPin = async() => {
- const { message } = this.state;
- try {
- const result = await RocketChat.togglePinMessage(message);
- if (result.success) {
- this.setState(prevState => ({
- messages: prevState.messages.filter(item => item._id !== message._id)
- }));
- }
- } catch (error) {
- console.log('PinnedMessagesView -> unPin -> catch -> error', error);
- }
- }
-
- load = async() => {
- const {
- messages, total, loading
- } = this.state;
- if (messages.length === total || loading) {
- return;
- }
-
- this.setState({ loading: true });
-
- try {
- const result = await RocketChat.getMessages(this.rid, this.t, { pinned: true }, messages.length);
- if (result.success) {
- this.setState(prevState => ({
- messages: [...prevState.messages, ...result.messages],
- total: result.total,
- loading: false
- }));
- }
- } catch (error) {
- this.setState({ loading: false });
- console.log('PinnedMessagesView -> catch -> error', error);
- }
- }
-
- renderEmpty = () => (
-
- {I18n.t('No_pinned_messages')}
-
- )
-
- renderItem = ({ item }) => {
- const { user, customEmojis, baseUrl } = this.props;
- return (
- this.onLongPress(item)}
- />
- );
- }
-
- render() {
- const { messages, loading } = this.state;
-
- if (!loading && messages.length === 0) {
- return this.renderEmpty();
- }
-
- return (
-
-
- item._id}
- onEndReached={this.load}
- ListFooterComponent={loading ? : null}
- />
-
- );
- }
-}
diff --git a/app/views/PinnedMessagesView/styles.js b/app/views/PinnedMessagesView/styles.js
deleted file mode 100644
index 9bcaa5580..000000000
--- a/app/views/PinnedMessagesView/styles.js
+++ /dev/null
@@ -1,22 +0,0 @@
-import { StyleSheet } from 'react-native';
-
-import sharedStyles from '../Styles';
-import { COLOR_WHITE } from '../../constants/colors';
-
-export default StyleSheet.create({
- list: {
- flex: 1,
- backgroundColor: COLOR_WHITE
- },
- listEmptyContainer: {
- flex: 1,
- alignItems: 'center',
- justifyContent: 'center',
- backgroundColor: COLOR_WHITE
- },
- noDataFound: {
- fontSize: 14,
- ...sharedStyles.textRegular,
- ...sharedStyles.textColorNormal
- }
-});
diff --git a/app/views/RoomActionsView/index.js b/app/views/RoomActionsView/index.js
index 31a4f3852..7e7c5e339 100644
--- a/app/views/RoomActionsView/index.js
+++ b/app/views/RoomActionsView/index.js
@@ -215,22 +215,22 @@ export default class RoomActionsView extends LoggedView {
{
icon: 'file-generic',
name: I18n.t('Files'),
- route: 'RoomFilesView',
- params: { rid, t },
+ route: 'MessagesView',
+ params: { rid, t, name: 'Files' },
testID: 'room-actions-files'
},
{
icon: 'at',
name: I18n.t('Mentions'),
- route: 'MentionedMessagesView',
- params: { rid, t },
+ route: 'MessagesView',
+ params: { rid, t, name: 'Mentions' },
testID: 'room-actions-mentioned'
},
{
icon: 'star',
name: I18n.t('Starred'),
- route: 'StarredMessagesView',
- params: { rid, t },
+ route: 'MessagesView',
+ params: { rid, t, name: 'Starred' },
testID: 'room-actions-starred'
},
{
@@ -249,8 +249,8 @@ export default class RoomActionsView extends LoggedView {
{
icon: 'pin',
name: I18n.t('Pinned'),
- route: 'PinnedMessagesView',
- params: { rid, t },
+ route: 'MessagesView',
+ params: { rid, t, name: 'Pinned' },
testID: 'room-actions-pinned'
}
],
diff --git a/app/views/RoomFilesView/index.js b/app/views/RoomFilesView/index.js
deleted file mode 100644
index aa41a302d..000000000
--- a/app/views/RoomFilesView/index.js
+++ /dev/null
@@ -1,151 +0,0 @@
-import React from 'react';
-import PropTypes from 'prop-types';
-import { FlatList, View, Text } from 'react-native';
-import { connect } from 'react-redux';
-import { SafeAreaView } from 'react-navigation';
-import equal from 'deep-equal';
-
-import LoggedView from '../View';
-import styles from './styles';
-import Message from '../../containers/message/Message';
-import RCActivityIndicator from '../../containers/ActivityIndicator';
-import I18n from '../../i18n';
-import RocketChat from '../../lib/rocketchat';
-import StatusBar from '../../containers/StatusBar';
-
-@connect(state => ({
- baseUrl: state.settings.Site_Url || state.server ? state.server.server : '',
- customEmojis: state.customEmojis,
- user: {
- id: state.login.user && state.login.user.id,
- username: state.login.user && state.login.user.username,
- token: state.login.user && state.login.user.token
- }
-}))
-/** @extends React.Component */
-export default class RoomFilesView extends LoggedView {
- static navigationOptions = {
- title: I18n.t('Files')
- }
-
- static propTypes = {
- user: PropTypes.object,
- baseUrl: PropTypes.string,
- customEmojis: PropTypes.object,
- navigation: PropTypes.object
- }
-
- constructor(props) {
- super('RoomFilesView', props);
- this.state = {
- loading: false,
- messages: []
- };
- this.rid = props.navigation.getParam('rid');
- this.t = props.navigation.getParam('t');
- }
-
- componentDidMount() {
- this.load();
- }
-
- shouldComponentUpdate(nextProps, nextState) {
- const { loading, messages } = this.state;
- if (nextState.loading !== loading) {
- return true;
- }
- if (!equal(nextState.messages, messages)) {
- return true;
- }
- return false;
- }
-
- load = async() => {
- const {
- messages, total, loading
- } = this.state;
- if (messages.length === total || loading) {
- return;
- }
-
- this.setState({ loading: true });
-
- try {
- const result = await RocketChat.getFiles(this.rid, this.t, messages.length);
- if (result.success) {
- this.setState(prevState => ({
- messages: [...prevState.messages, ...result.files],
- total: result.total,
- loading: false
- }));
- }
- } catch (error) {
- this.setState({ loading: false });
- console.log('RoomFilesView -> catch -> error', error);
- }
- }
-
- renderEmpty = () => (
-
- {I18n.t('No_files')}
-
- )
-
- renderItem = ({ item }) => {
- const { user, baseUrl, customEmojis } = this.props;
-
- let url = {};
- if (/image/.test(item.type)) {
- url = { image_url: item.url };
- } else if (/audio/.test(item.type)) {
- url = { audio_url: item.url };
- } else if (/video/.test(item.type)) {
- url = { video_url: item.url };
- } else {
- url = {
- title_link: item.url,
- type: 'file'
- };
- }
-
- return (
-
- );
- }
-
- render() {
- const { messages, loading } = this.state;
-
- if (!loading && messages.length === 0) {
- return this.renderEmpty();
- }
-
- return (
-
-
- item._id}
- onEndReached={this.load}
- ListFooterComponent={loading ? : null}
- />
-
- );
- }
-}
diff --git a/app/views/RoomFilesView/styles.js b/app/views/RoomFilesView/styles.js
deleted file mode 100644
index 9bcaa5580..000000000
--- a/app/views/RoomFilesView/styles.js
+++ /dev/null
@@ -1,22 +0,0 @@
-import { StyleSheet } from 'react-native';
-
-import sharedStyles from '../Styles';
-import { COLOR_WHITE } from '../../constants/colors';
-
-export default StyleSheet.create({
- list: {
- flex: 1,
- backgroundColor: COLOR_WHITE
- },
- listEmptyContainer: {
- flex: 1,
- alignItems: 'center',
- justifyContent: 'center',
- backgroundColor: COLOR_WHITE
- },
- noDataFound: {
- fontSize: 14,
- ...sharedStyles.textRegular,
- ...sharedStyles.textColorNormal
- }
-});
diff --git a/app/views/StarredMessagesView/index.js b/app/views/StarredMessagesView/index.js
deleted file mode 100644
index a399c3e9c..000000000
--- a/app/views/StarredMessagesView/index.js
+++ /dev/null
@@ -1,184 +0,0 @@
-import React from 'react';
-import PropTypes from 'prop-types';
-import { FlatList, View, Text } from 'react-native';
-import { connect } from 'react-redux';
-import ActionSheet from 'react-native-action-sheet';
-import { SafeAreaView } from 'react-navigation';
-import equal from 'deep-equal';
-
-import LoggedView from '../View';
-import styles from './styles';
-import Message from '../../containers/message/Message';
-import RCActivityIndicator from '../../containers/ActivityIndicator';
-import I18n from '../../i18n';
-import RocketChat from '../../lib/rocketchat';
-import StatusBar from '../../containers/StatusBar';
-
-const STAR_INDEX = 0;
-const CANCEL_INDEX = 1;
-const options = [I18n.t('Unstar'), I18n.t('Cancel')];
-
-@connect(state => ({
- baseUrl: state.settings.Site_Url || state.server ? state.server.server : '',
- customEmojis: state.customEmojis,
- user: {
- id: state.login.user && state.login.user.id,
- username: state.login.user && state.login.user.username,
- token: state.login.user && state.login.user.token
- }
-}))
-/** @extends React.Component */
-export default class StarredMessagesView extends LoggedView {
- static navigationOptions = {
- title: I18n.t('Starred')
- }
-
- static propTypes = {
- user: PropTypes.object,
- baseUrl: PropTypes.string,
- customEmojis: PropTypes.object,
- navigation: PropTypes.object
- }
-
- constructor(props) {
- super('StarredMessagesView', props);
- this.state = {
- loading: false,
- messages: []
- };
- this.rid = props.navigation.getParam('rid');
- this.t = props.navigation.getParam('t');
- }
-
- componentDidMount() {
- this.load();
- }
-
- shouldComponentUpdate(nextProps, nextState) {
- const { loading, messages } = this.state;
- if (nextState.loading !== loading) {
- return true;
- }
- if (!equal(nextState.messages, messages)) {
- return true;
- }
- return false;
- }
-
- onLongPress = (message) => {
- this.setState({ message });
- this.showActionSheet();
- }
-
- showActionSheet = () => {
- ActionSheet.showActionSheetWithOptions({
- options,
- cancelButtonIndex: CANCEL_INDEX,
- title: I18n.t('Actions')
- }, (actionIndex) => {
- this.handleActionPress(actionIndex);
- });
- }
-
- handleActionPress = (actionIndex) => {
- switch (actionIndex) {
- case STAR_INDEX:
- this.unStar();
- break;
- default:
- break;
- }
- }
-
- unStar = async() => {
- const { message } = this.state;
- try {
- const result = await RocketChat.toggleStarMessage(message);
- if (result.success) {
- this.setState(prevState => ({
- messages: prevState.messages.filter(item => item._id !== message._id)
- }));
- }
- } catch (error) {
- console.log('StarredMessagesView -> unStar -> catch -> error', error);
- }
- }
-
- load = async() => {
- const {
- messages, total, loading
- } = this.state;
- const { user } = this.props;
- if (messages.length === total || loading) {
- return;
- }
-
- this.setState({ loading: true });
-
- try {
- const result = await RocketChat.getMessages(
- this.rid,
- this.t,
- { 'starred._id': { $in: [user.id] } },
- messages.length
- );
- if (result.success) {
- this.setState(prevState => ({
- messages: [...prevState.messages, ...result.messages],
- total: result.total,
- loading: false
- }));
- }
- } catch (error) {
- this.setState({ loading: false });
- console.log('StarredMessagesView -> load -> catch -> error', error);
- }
- }
-
- renderEmpty = () => (
-
- {I18n.t('No_starred_messages')}
-
- )
-
- renderItem = ({ item }) => {
- const { user, customEmojis, baseUrl } = this.props;
- return (
- this.onLongPress(item)}
- />
- );
- }
-
- render() {
- const { messages, loading } = this.state;
-
- if (!loading && messages.length === 0) {
- return this.renderEmpty();
- }
-
- return (
-
-
- item._id}
- onEndReached={this.load}
- ListFooterComponent={loading ? : null}
- />
-
- );
- }
-}
diff --git a/app/views/StarredMessagesView/styles.js b/app/views/StarredMessagesView/styles.js
deleted file mode 100644
index 9bcaa5580..000000000
--- a/app/views/StarredMessagesView/styles.js
+++ /dev/null
@@ -1,22 +0,0 @@
-import { StyleSheet } from 'react-native';
-
-import sharedStyles from '../Styles';
-import { COLOR_WHITE } from '../../constants/colors';
-
-export default StyleSheet.create({
- list: {
- flex: 1,
- backgroundColor: COLOR_WHITE
- },
- listEmptyContainer: {
- flex: 1,
- alignItems: 'center',
- justifyContent: 'center',
- backgroundColor: COLOR_WHITE
- },
- noDataFound: {
- fontSize: 14,
- ...sharedStyles.textRegular,
- ...sharedStyles.textColorNormal
- }
-});