[WIP] Abstract database calls (#157)

* Databases separated
This commit is contained in:
Diego Mello 2017-12-27 13:22:06 -02:00 committed by Guilherme Gazzo
parent f229ab730f
commit b9ca7abb52
25 changed files with 184 additions and 145 deletions

View File

@ -489,6 +489,7 @@ exports[`render unread +999 1`] = `
>
NA
</Text>
</View>
<View
style={
@ -635,6 +636,7 @@ exports[`render unread 1`] = `
>
NA
</Text>
</View>
<View
style={
@ -781,6 +783,7 @@ exports[`renders correctly 1`] = `
>
NA
</Text>
</View>
<View
style={

View File

@ -38,6 +38,7 @@ exports[`Storyshots Avatar avatar 1`] = `
>
TE
</Text>
</View>
<View
style={
@ -74,6 +75,7 @@ exports[`Storyshots Avatar avatar 1`] = `
>
AA
</Text>
</View>
<View
style={
@ -110,6 +112,7 @@ exports[`Storyshots Avatar avatar 1`] = `
>
BB
</Text>
</View>
<View
style={
@ -146,6 +149,7 @@ exports[`Storyshots Avatar avatar 1`] = `
>
TE
</Text>
</View>
</View>
</RCTScrollView>
@ -229,6 +233,7 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
>
RC
</Text>
</View>
<View
style={
@ -350,6 +355,7 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
>
RC
</Text>
</View>
<View
style={
@ -473,6 +479,7 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
>
RC
</Text>
</View>
<View
style={
@ -614,6 +621,7 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
>
LC
</Text>
</View>
<View
style={
@ -757,6 +765,7 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
>
LC
</Text>
</View>
<View
style={
@ -898,6 +907,7 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
>
LC
</Text>
</View>
<View
style={
@ -1039,6 +1049,7 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
>
LC
</Text>
</View>
<View
style={
@ -1180,6 +1191,7 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
>
LC
</Text>
</View>
<View
style={
@ -1321,6 +1333,7 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
>
W
</Text>
</View>
<View
style={
@ -1442,6 +1455,7 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
>
WW
</Text>
</View>
<View
style={
@ -1563,6 +1577,7 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
>
</Text>
</View>
<View
style={

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

View File

@ -19,6 +19,12 @@ export function setCurrentServer(server) {
};
}
export function addSettings(settings) {
return {
type: types.ADD_SETTINGS,
payload: settings
};
}
export function setAllSettings(settings) {
return {
type: types.SET_ALL_SETTINGS,

View File

@ -1,3 +1,4 @@
export const SET_CURRENT_SERVER = 'SET_CURRENT_SERVER';
export const SET_ALL_SETTINGS = 'SET_ALL_SETTINGS';
export const SET_ALL_PERMISSIONS = 'SET_ALL_PERMISSIONS';
export const ADD_SETTINGS = 'ADD_SETTINGS';

View File

@ -21,7 +21,7 @@ const styles = StyleSheet.create({
});
@connect(state => ({
baseUrl: state.settings.Site_Url
baseUrl: state.settings.Site_Url || state.server ? state.server.server : ''
}))
class Avatar extends React.PureComponent {

View File

@ -9,7 +9,7 @@ import RocketChat from '../../lib/rocketchat';
import { editRequest, editCancel, clearInput } from '../../actions/messages';
import styles from './style';
import MyIcon from '../icons';
import realm from '../../lib/realm';
import database from '../../lib/realm';
import Avatar from '../Avatar';
import AnimatedContainer from './AnimatedContainer';
@ -23,7 +23,7 @@ const onlyUnique = function onlyUnique(value, index, self) {
room: state.room,
message: state.messages.message,
editing: state.messages.editing,
baseUrl: state.settings.Site_Url
baseUrl: state.settings.Site_Url || state.server ? state.server.server : ''
}), dispatch => ({
editCancel: () => dispatch(editCancel()),
editRequest: message => dispatch(editRequest(message)),
@ -200,7 +200,7 @@ export default class MessageBox extends React.Component {
}
async _getUsers(keyword) {
this.users = realm.objects('users');
this.users = database.objects('users');
if (keyword) {
this.users = this.users.filtered('username CONTAINS[c] $0', keyword);
}
@ -222,28 +222,24 @@ export default class MessageBox extends React.Component {
RocketChat.spotlight(keyword, usernames, { users: true }),
new Promise((resolve, reject) => (this.oldPromise = reject))
]);
realm.write(() => {
database.write(() => {
results.users.forEach((user) => {
user._server = {
id: this.props.baseUrl,
current: true
};
realm.create('users', user, true);
database.create('users', user, true);
});
});
} catch (e) {
console.log('spotlight canceled');
} finally {
delete this.oldPromise;
this.users = realm.objects('users').filtered('username CONTAINS[c] $0', keyword);
this.users = database.objects('users').filtered('username CONTAINS[c] $0', keyword);
this.setState({ mentions: this.users.slice() });
}
}
async _getRooms(keyword = '') {
this.roomsCache = this.roomsCache || [];
this.rooms = realm.objects('subscriptions')
.filtered('_server.id = $0 AND t != $1', this.props.baseUrl, 'd');
this.rooms = database.objects('subscriptions')
.filtered('t != $0', 'd');
if (keyword) {
this.rooms = this.rooms.filtered('name CONTAINS[c] $0', keyword);
}

View File

@ -5,7 +5,7 @@ import ActionSheet from 'react-native-actionsheet';
import { errorActionsHide } from '../actions/messages';
import RocketChat from '../lib/rocketchat';
import realm from '../lib/realm';
import database from '../lib/realm';
@connect(
state => ({
@ -41,9 +41,9 @@ export default class MessageActions extends React.Component {
handleResend = () => RocketChat.resendMessage(this.props.actionMessage._id);
handleDelete = () => {
realm.write(() => {
const msg = realm.objects('messages').filtered('_id = $0', this.props.actionMessage._id);
realm.delete(msg);
database.write(() => {
const msg = database.objects('messages').filtered('_id = $0', this.props.actionMessage._id);
database.delete(msg);
});
}

View File

@ -31,13 +31,13 @@ export default class Routes extends React.Component {
}
componentDidMount() {
if (!this.props.app.starting) {
if (this.props.app.ready) {
SplashScreen.hide();
}
}
componentWillReceiveProps(nextProps) {
if (!nextProps.app.starting && this.props.app.starting !== nextProps.app.starting) {
if (nextProps.app.ready && this.props.app.ready !== nextProps.app.ready) {
SplashScreen.hide();
}
}
@ -49,6 +49,10 @@ export default class Routes extends React.Component {
render() {
const { login } = this.props;
if (this.props.app.starting) {
return null;
}
if (!login.token || login.isRegistering) {
return (<PublicRoutes ref={nav => this.navigator = nav} />);
}

View File

@ -4,7 +4,7 @@ import { ScrollView, Text, View, StyleSheet, FlatList, TouchableHighlight } from
import { DrawerItems } from 'react-navigation';
import { connect } from 'react-redux';
import realm from '../lib/realm';
import database from '../lib/realm';
import { setServer, gotoAddServer } from '../actions/server';
import { logout } from '../actions/login';
@ -54,12 +54,12 @@ export default class Sidebar extends Component {
}
componentWillMount() {
realm.addListener('change', this.updateState);
realm.databases.serversDB.addListener('change', this.updateState);
this.setState(this.getState());
}
componentWillUnmount() {
realm.removeListener('change', this.updateState);
realm.databases.serversDB.removeListener('change', this.updateState);
}
onItemPress = ({ route, focused }) => {
@ -75,7 +75,7 @@ export default class Sidebar extends Component {
}
getState = () => ({
servers: realm.objects('servers')
servers: realm.databases.serversDB.objects('servers')
})
updateState = () => {

View File

@ -1,5 +1,8 @@
import Realm from 'realm';
// import { AsyncStorage } from 'react-native';
// Realm.clearTestState();
// AsyncStorage.clear();
const serversSchema = {
name: 'servers',
@ -15,7 +18,6 @@ const settingsSchema = {
primaryKey: '_id',
properties: {
_id: 'string',
_server: 'servers',
valueAsString: { type: 'string', optional: true },
valueAsBoolean: { type: 'bool', optional: true },
valueAsNumber: { type: 'int', optional: true },
@ -36,7 +38,6 @@ const permissionsSchema = {
primaryKey: '_id',
properties: {
_id: 'string',
_server: 'servers',
roles: { type: 'list', objectType: 'permissionsRoles' },
_updatedAt: { type: 'date', optional: true }
}
@ -47,7 +48,6 @@ const roomsSchema = {
primaryKey: '_id',
properties: {
_id: 'string',
_server: 'servers',
t: 'string',
_updatedAt: { type: 'date', optional: true }
}
@ -65,7 +65,6 @@ const subscriptionSchema = {
primaryKey: '_id',
properties: {
_id: 'string',
_server: 'servers',
f: { type: 'bool', optional: true },
t: 'string',
ts: { type: 'date', optional: true },
@ -89,7 +88,6 @@ const usersSchema = {
primaryKey: '_id',
properties: {
_id: 'string',
_server: 'servers',
username: 'string',
name: { type: 'string', optional: true }
}
@ -157,7 +155,6 @@ const messagesSchema = {
primaryKey: '_id',
properties: {
_id: 'string',
_server: 'servers',
msg: { type: 'string', optional: true },
t: { type: 'string', optional: true },
rid: 'string',
@ -178,28 +175,56 @@ const messagesSchema = {
editedBy: 'messagesEditedBy'
}
};
//
// Realm.clearTestState();
// AsyncStorage.clear();
const realm = new Realm({
schema: [
settingsSchema,
serversSchema,
subscriptionSchema,
subscriptionRolesSchema,
messagesSchema,
usersSchema,
roomsSchema,
attachment,
attachmentFields,
messagesEditedBySchema,
permissionsSchema,
permissionsRolesSchema,
url
],
deleteRealmIfMigrationNeeded: true
});
export default realm;
const schema = [
settingsSchema,
subscriptionSchema,
subscriptionRolesSchema,
messagesSchema,
usersSchema,
roomsSchema,
attachment,
attachmentFields,
messagesEditedBySchema,
permissionsSchema,
permissionsRolesSchema,
url
];
class DB {
databases = {
serversDB: new Realm({
path: 'default.realm',
schema: [
serversSchema
],
deleteRealmIfMigrationNeeded: true
})
};
deleteAll(...args) {
return this.database.write(() => this.database.deleteAll(...args));
}
write(...args) {
return this.database.write(...args);
}
create(...args) {
return this.database.create(...args);
}
objects(...args) {
return this.database.objects(...args);
}
get database() {
return this.databases.activeDB;
}
setActiveDB(database) {
const path = database.replace(/(^\w+:|^)\/\//, '');
return this.databases.activeDB = new Realm({
path: `${ path }.realm`,
schema,
deleteRealmIfMigrationNeeded: true
});
}
}
export default new DB();
// realm.write(() => {
// realm.create('servers', { id: 'https://open.rocket.chat', current: false }, true);

View File

@ -6,7 +6,7 @@ import RNFetchBlob from 'react-native-fetch-blob';
import reduxStore from './createStore';
import settingsType from '../constants/settings';
import messagesStatus from '../constants/messagesStatus';
import realm from './realm';
import database from './realm';
import * as actions from '../actions';
import { someoneTyping } from '../actions/room';
import { setUser } from '../actions/login';
@ -77,7 +77,9 @@ const RocketChat = {
this.ddp.on('disconnected', () => {
reduxStore.dispatch(disconnect());
});
this.ddp.on('open', async() => resolve(reduxStore.dispatch(connectSuccess())));
this.ddp.on('open', async() => {
resolve(reduxStore.dispatch(connectSuccess()));
});
this.ddp.on('connected', () => {
RocketChat.getSettings();
RocketChat.getPermissions();
@ -90,16 +92,15 @@ const RocketChat = {
this.ddp.on('connected', () => this.ddp.subscribe('activeUsers', null, false));
this.ddp.on('users', (ddpMessage) => {
if (ddpMessage.collection === 'users') {
return RocketChat._setUser(ddpMessage);
}
});
this.ddp.on('stream-room-messages', ddpMessage => realm.write(() => {
this.ddp.on('stream-room-messages', ddpMessage => database.write(() => {
const message = this._buildMessage(ddpMessage.fields.args[0]);
realm.create('messages', message, true);
database.create('messages', message, true);
}));
this.ddp.on('stream-notify-room', (ddpMessage) => {
@ -117,13 +118,13 @@ const RocketChat = {
if (data.roles) {
data.roles = data.roles.map(role => ({ value: role }));
}
realm.write(() => {
realm.create('subscriptions', data, true);
database.write(() => {
database.create('subscriptions', data, true);
});
}
if (/rooms/.test(ev) && type === 'updated') {
const sub = realm.objects('subscriptions').filtered('rid == $0', data._id)[0];
realm.write(() => {
const sub = database.objects('subscriptions').filtered('rid == $0', data._id)[0];
database.write(() => {
sub.roomUpdatedAt = data._updatedAt;
});
}
@ -208,20 +209,11 @@ const RocketChat = {
},
loadSubscriptions(cb) {
const { server } = reduxStore.getState().server;
this.ddp.call('subscriptions/get').then((data) => {
if (data.length) {
realm.write(() => {
database.write(() => {
data.forEach((subscription) => {
// const subscription = {
// _id: item._id
// };
// if (typeof item.value === 'string') {
// subscription.value = item.value;
// }
subscription._server = { id: server };
// write('subscriptions', subscription);
realm.create('subscriptions', subscription, true);
database.create('subscriptions', subscription, true);
});
});
}
@ -262,9 +254,7 @@ const RocketChat = {
});
},
_buildMessage(message) {
const { server } = reduxStore.getState().server;
message.status = messagesStatus.SENT;
message._server = { id: server };
message.attachments = message.attachments || [];
if (message.urls) {
message.urls = RocketChat._parseUrls(message.urls);
@ -278,9 +268,9 @@ const RocketChat = {
return this.ddp.call('loadHistory', rid, end, 20).then((data) => {
if (data && data.messages.length) {
const messages = data.messages.map(message => this._buildMessage(message));
realm.write(() => {
database.write(() => {
messages.forEach((message) => {
realm.create('messages', message, true);
database.create('messages', message, true);
});
});
}
@ -300,7 +290,6 @@ const RocketChat = {
getMessage(rid, msg = {}) {
const _id = Random.id();
// console.log('reduxStore.getState().login.id ', reduxStore.getState().login);
const message = {
_id,
rid,
@ -308,16 +297,14 @@ const RocketChat = {
ts: new Date(),
_updatedAt: new Date(),
status: messagesStatus.TEMP,
_server: { id: reduxStore.getState().server.server },
u: {
_id: reduxStore.getState().login.user.id || '1',
username: reduxStore.getState().login.user.username
}
};
realm.write(() => {
realm.create('messages', message, true);
// write('messages', message, true);
database.write(() => {
database.create('messages', message, true);
});
return message;
},
@ -327,9 +314,9 @@ const RocketChat = {
const timeoutCall = new Promise(resolve => setTimeout(resolve, SERVER_TIMEOUT, 'timeout'));
const result = await Promise.race([sendMessageCall, timeoutCall]);
if (result === 'timeout') {
realm.write(() => {
database.write(() => {
message.status = messagesStatus.ERROR;
realm.create('messages', message, true);
database.create('messages', message, true);
});
}
},
@ -338,10 +325,10 @@ const RocketChat = {
return RocketChat._sendMessageCall(tempMessage);
},
async resendMessage(messageId) {
const message = await realm.objects('messages').filtered('_id = $0', messageId)[0];
realm.write(() => {
const message = await database.objects('messages').filtered('_id = $0', messageId)[0];
database.write(() => {
message.status = messagesStatus.TEMP;
realm.create('messages', message, true);
database.create('messages', message, true);
});
return RocketChat._sendMessageCall(message);
},
@ -413,17 +400,16 @@ const RocketChat = {
} catch (e) {
return e;
} finally {
realm.write(() => {
const msg = realm.objects('messages').filtered('_id = $0', placeholder._id);
realm.delete(msg);
database.write(() => {
const msg = database.objects('messages').filtered('_id = $0', placeholder._id);
database.delete(msg);
});
}
},
async getRooms() {
const { server, login } = reduxStore.getState();
let lastMessage = realm
const { login } = reduxStore.getState();
let lastMessage = database
.objects('subscriptions')
.filtered('_server.id = $0', server.server)
.sorted('roomUpdatedAt', true)[0];
lastMessage = lastMessage && new Date(lastMessage.roomUpdatedAt);
let [subscriptions, rooms] = await Promise.all([call('subscriptions/get', lastMessage), call('rooms/get', lastMessage)]);
@ -441,12 +427,11 @@ const RocketChat = {
if (subscription.roles) {
subscription.roles = subscription.roles.map(role => ({ value: role }));
}
subscription._server = { id: server.server };
return subscription;
});
realm.write(() => {
database.write(() => {
data.forEach(subscription =>
realm.create('subscriptions', subscription, true));
database.create('subscriptions', subscription, 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);
@ -481,20 +466,20 @@ const RocketChat = {
logout({ server }) {
if (this.ddp) {
this.ddp.logout();
// this.disconnect();
}
database.deleteAll();
AsyncStorage.removeItem(TOKEN_KEY);
AsyncStorage.removeItem(`${ TOKEN_KEY }-${ server }`);
},
async getSettings() {
const temp = realm.objects('settings').sorted('_updatedAt', true)[0];
const temp = database.objects('settings').sorted('_updatedAt', true)[0];
const result = await (!temp ? call('public-settings/get') : call('public-settings/get', new Date(temp._updatedAt)));
const settings = temp ? result.update : result;
const filteredSettings = RocketChat._prepareSettings(RocketChat._filterSettings(settings));
realm.write(() => {
filteredSettings.forEach(setting => realm.create('settings', setting, true));
database.write(() => {
filteredSettings.forEach(setting => database.create('settings', setting, true));
});
reduxStore.dispatch(actions.setAllSettings(RocketChat.parseSettings(filteredSettings)));
reduxStore.dispatch(actions.addSettings(RocketChat.parseSettings(filteredSettings)));
},
parseSettings: settings => settings.reduce((ret, item) => {
ret[item._id] = item[settingsType[item.type]] || item.valueAsString || item.valueAsNumber ||
@ -509,12 +494,12 @@ const RocketChat = {
},
_filterSettings: settings => settings.filter(setting => settingsType[setting.type] && setting.value),
async getPermissions() {
const temp = realm.objects('permissions').sorted('_updatedAt', true)[0];
const temp = database.objects('permissions').sorted('_updatedAt', true)[0];
const result = await (!temp ? call('permissions/get') : call('permissions/get', new Date(temp._updatedAt)));
let permissions = temp ? result.update : result;
permissions = RocketChat._preparePermissions(permissions);
realm.write(() => {
permissions.forEach(permission => realm.create('permissions', permission, true));
database.write(() => {
permissions.forEach(permission => database.create('permissions', permission, true));
});
reduxStore.dispatch(actions.setAllPermissions(RocketChat.parsePermissions(permissions)));
},
@ -545,7 +530,7 @@ const RocketChat = {
return call('pinMessage', message);
},
getRoom(rid) {
const result = realm.objects('subscriptions').filtered('rid = $0', rid);
const result = database.objects('subscriptions').filtered('rid = $0', rid);
if (result.length === 0) {
return Promise.reject(new Error('Room not found'));
}

View File

@ -13,5 +13,12 @@ export default function permissions(state = initialState.permissions, action) {
};
}
if (action.type === types.ADD_PERMISSIONS) {
return {
...state,
...action.payload
};
}
return state;
}

View File

@ -3,11 +3,15 @@ import initialState from './initialState';
export default function settings(state = initialState.settings, action) {
if (action.type === types.SET_ALL_SETTINGS) {
return {
...action.payload
};
}
if (action.type === types.ADD_SETTINGS) {
return {
...state,
...action.payload
};
}
return state;
}

View File

@ -5,7 +5,7 @@ const initialState = {
connected: false,
errorMessage: '',
failure: false,
server: ''
server: {}
};

View File

@ -4,7 +4,7 @@ import * as actions from '../actions';
import { setServer } from '../actions/server';
import { restoreToken } from '../actions/login';
import { APP } from '../actions/actionsTypes';
import realm from '../lib/realm';
import database from '../lib/realm';
import RocketChat from '../lib/rocketchat';
const restore = function* restore() {
@ -17,9 +17,9 @@ const restore = function* restore() {
const currentServer = yield call([AsyncStorage, 'getItem'], 'currentServer');
if (currentServer) {
yield put(setServer(currentServer));
const settings = realm.objects('settings');
const settings = database.objects('settings');
yield put(actions.setAllSettings(RocketChat.parseSettings(settings.slice(0, settings.length))));
const permissions = realm.objects('permissions');
const permissions = database.objects('permissions');
yield put(actions.setAllPermissions(RocketChat.parsePermissions(permissions.slice(0, permissions.length))));
}
yield put(actions.appReady({}));

View File

@ -2,10 +2,11 @@ import { put, call, takeLatest, race, take } from 'redux-saga/effects';
import { delay } from 'redux-saga';
import { AsyncStorage } from 'react-native';
import { SERVER } from '../actions/actionsTypes';
import * as actions from '../actions';
import { connectRequest, disconnect, disconnect_by_user } from '../actions/connect';
import { changedServer, serverSuccess, serverFailure, serverRequest, setServer } from '../actions/server';
import RocketChat from '../lib/rocketchat';
import realm from '../lib/realm';
import database from '../lib/realm';
import * as NavigationService from '../containers/routes/NavigationService';
const validate = function* validate(server) {
@ -13,10 +14,15 @@ const validate = function* validate(server) {
};
const selectServer = function* selectServer({ server }) {
yield database.setActiveDB(server);
yield put(disconnect_by_user());
yield put(disconnect());
yield put(changedServer(server));
yield call([AsyncStorage, 'setItem'], 'currentServer', server);
const settings = database.objects('settings');
yield put(actions.setAllSettings(RocketChat.parseSettings(settings.slice(0, settings.length))));
const permissions = database.objects('permissions');
yield put(actions.setAllPermissions(RocketChat.parsePermissions(permissions.slice(0, permissions.length))));
yield put(connectRequest(server));
};
@ -39,8 +45,8 @@ const addServer = function* addServer({ server }) {
success: take(SERVER.SUCCESS)
});
if (!error) {
realm.write(() => {
realm.create('servers', { id: server, current: false }, true);
database.databases.serversDB.write(() => {
database.databases.serversDB.create('servers', { id: server, current: false }, true);
});
yield put(setServer(server));
}

View File

@ -6,7 +6,7 @@ import Zeroconf from 'react-native-zeroconf';
import { View, Text, SectionList, StyleSheet, SafeAreaView } from 'react-native';
import { connect } from 'react-redux';
import { setServer } from '../actions/server';
import realm from '../lib/realm';
import database from '../lib/realm';
import Fade from '../animations/fade';
const styles = StyleSheet.create({
@ -83,8 +83,9 @@ export default class ListServerView extends React.Component {
this.state = {
sections: []
};
this.data = database.databases.serversDB.objects('servers');
this.redirected = false;
realm.addListener('change', this.updateState);
this.data.addListener(this.updateState);
}
componentWillMount() {
@ -109,7 +110,7 @@ export default class ListServerView extends React.Component {
componentWillUnmount() {
zeroconf.stop();
realm.removeListener('change', this.updateState);
this.data.removeAllListeners();
zeroconf.removeListener('update', this.updateState);
}
@ -120,7 +121,7 @@ export default class ListServerView extends React.Component {
getState = () => {
const sections = [{
title: 'My servers',
data: realm.objects('servers')
data: this.data
}];
this.state.nearBy = zeroconf.getServices();

View File

@ -1,15 +1,11 @@
import React from 'react';
import Spinner from 'react-native-loading-spinner-overlay';
import PropTypes from 'prop-types';
import { Keyboard, Text, TextInput, View, ScrollView, TouchableOpacity, SafeAreaView } from 'react-native';
import { connect } from 'react-redux';
import { bindActionCreators } from 'redux';
// import * as actions from '../actions';
import * as loginActions from '../actions/login';
import KeyboardView from '../presentation/KeyboardView';
// import { Keyboard } from 'react-native'
import styles from './Styles';
@ -81,7 +77,6 @@ class LoginView extends React.Component {
return null;
}
// {this.props.login.isFetching && <Text> LOGANDO</Text>}
render() {
return (
<KeyboardView
@ -157,7 +152,6 @@ class LoginView extends React.Component {
}
function mapStateToProps(state) {
// console.log(Object.keys(state));
return {
server: state.server.server,
Accounts_EmailOrUsernamePlaceholder: state.settings.Accounts_EmailOrUsernamePlaceholder,

View File

@ -12,7 +12,7 @@ import styles from './styles';
@connect(state => ({
user: state.login.user,
baseUrl: state.settings.Site_Url,
baseUrl: state.settings.Site_Url || state.server ? state.server.server : '',
activeUsers: state.activeUsers
}))
export default class extends React.Component {

View File

@ -8,7 +8,7 @@ import { bindActionCreators } from 'redux';
import * as actions from '../../actions';
import { openRoom } from '../../actions/room';
import { editCancel } from '../../actions/messages';
import realm from '../../lib/realm';
import database from '../../lib/realm';
import RocketChat from '../../lib/rocketchat';
import Message from '../../containers/message';
import MessageActions from '../../containers/MessageActions';
@ -25,8 +25,7 @@ const ds = new ListView.DataSource({ rowHasChanged: (r1, r2) => r1._id !== r2._i
const typing = () => <Typing />;
@connect(
state => ({
server: state.server.server,
Site_Url: state.settings.Site_Url,
Site_Url: state.settings.Site_Url || state.server ? state.server.server : '',
Message_TimeFormat: state.settings.Message_TimeFormat,
loading: state.messages.isFetching,
user: state.login.user
@ -44,7 +43,6 @@ export default class RoomView extends React.Component {
user: PropTypes.object.isRequired,
editCancel: PropTypes.func,
rid: PropTypes.string,
server: PropTypes.string,
name: PropTypes.string,
Site_Url: PropTypes.string,
Message_TimeFormat: PropTypes.string,
@ -64,11 +62,10 @@ export default class RoomView extends React.Component {
this.props.navigation.state.params.name ||
this.props.navigation.state.params.room.name;
this.data = realm
.objects('messages')
.filtered('_server.id = $0 AND rid = $1', this.props.server, this.rid)
this.data = database.objects('messages')
.filtered('rid = $0', this.rid)
.sorted('ts', true);
this.room = realm.objects('subscriptions').filtered('rid = $0', this.rid);
this.room = database.objects('subscriptions').filtered('rid = $0', this.rid);
this.state = {
dataSource: ds.cloneWithRows([]),
loaded: true,

View File

@ -16,7 +16,7 @@ import styles from './styles';
@connect(state => ({
user: state.login.user,
connected: state.meteor.connected,
baseUrl: state.settings.Site_Url
baseUrl: state.settings.Site_Url || state.server ? state.server.server : ''
}), dispatch => ({
setSearch: searchText => dispatch(setSearch(searchText))
}))

View File

@ -7,7 +7,7 @@ import { Platform, View, TextInput, SafeAreaView } from 'react-native';
import { connect } from 'react-redux';
import * as actions from '../../actions';
import * as server from '../../actions/connect';
import realm from '../../lib/realm';
import database from '../../lib/realm';
import RocketChat from '../../lib/rocketchat';
import RoomItem from '../../presentation/RoomItem';
import Banner from '../../containers/Banner';
@ -47,7 +47,7 @@ export default class RoomsListView extends React.Component {
dataSource: ds.cloneWithRows([]),
searchText: ''
};
this.data = realm.objects('subscriptions').filtered('_server.id = $0', this.props.server).sorted('roomUpdatedAt', true);
this.data = database.objects('subscriptions').sorted('roomUpdatedAt', true);
}
componentDidMount() {
@ -63,7 +63,7 @@ export default class RoomsListView extends React.Component {
componentWillReceiveProps(props) {
if (this.props.server !== props.server) {
this.data.removeListener(this.updateState);
this.data = realm.objects('subscriptions').filtered('_server.id = $0', props.server).sorted('roomUpdatedAt', true);
this.data = database.objects('subscriptions').sorted('roomUpdatedAt', true);
this.data.addListener(this.updateState);
} else if (this.props.searchText !== props.searchText) {
this.search(props.searchText);
@ -151,7 +151,8 @@ export default class RoomsListView extends React.Component {
if (item.t === 'd') {
RocketChat.createDirectMessage(item.username)
.then(room => new Promise((resolve) => {
const data = realm.objects('subscriptions').filtered('_server.id = $0 AND rid = $1', this.props.server, room.rid);
const data = database.objects('subscriptions')
.filtered('rid = $1', room.rid);
if (data.length) {
return resolve(data[0]);

View File

@ -8,7 +8,7 @@ import { connect } from 'react-redux';
import * as actions from '../actions';
import * as server from '../actions/connect';
import * as createChannelActions from '../actions/createChannel';
import realm from '../lib/realm';
import database from '../lib/realm';
import RocketChat from '../lib/rocketchat';
import RoomItem from '../presentation/RoomItem';
import Banner from '../containers/Banner';
@ -57,7 +57,6 @@ const styles = StyleSheet.create({
const ds = new ListView.DataSource({ rowHasChanged: (r1, r2) => r1 !== r2 });
@connect(
state => ({
server: state.server.server,
login: state.login,
Site_Url: state.settings.Site_Url,
users: state.createChannel.users
@ -74,7 +73,6 @@ export default class RoomsListView extends React.Component {
static propTypes = {
navigation: PropTypes.object.isRequired,
Site_Url: PropTypes.string,
server: PropTypes.string,
addUser: PropTypes.func.isRequired,
removeUser: PropTypes.func.isRequired,
resetCreateChannel: PropTypes.func.isRequired,
@ -83,15 +81,12 @@ export default class RoomsListView extends React.Component {
constructor(props) {
super(props);
this.data = realm
this.data = database
.objects('subscriptions')
.filtered('_server.id = $0 AND t = $1', this.props.server, 'd');
.filtered('t = $0', 'd');
this.state = {
dataSource: ds.cloneWithRows(this.data),
// searching: false,
// searchDataSource: [],
searchText: ''
// login: false
};
this.data.addListener(this.updateState);
}
@ -105,7 +100,6 @@ export default class RoomsListView extends React.Component {
const searchText = text.trim();
this.setState({
searchText: text
// searching: searchText !== ''
});
if (searchText === '') {
return this.setState({

View File

@ -21,7 +21,7 @@
]
},
"dependencies": {
"@storybook/addons": "^3.2.18",
"@storybook/addons": "^3.3.1",
"@storybook/react-native": "^3.2.18",
"babel-plugin-transform-decorators-legacy": "^1.3.4",
"babel-plugin-transform-remove-console": "^6.8.5",