Merge pull request #67 from RocketChat/update

Init support to iPhone X
This commit is contained in:
Diego Mello 2017-11-13 14:40:00 -02:00 committed by GitHub
commit c2ecdd5151
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
30 changed files with 2278 additions and 2218 deletions

View File

@ -50,7 +50,6 @@ exports[`render channel 1`] = `
<Text <Text
accessible={true} accessible={true}
allowFontScaling={false} allowFontScaling={false}
disabled={false}
ellipsizeMode="tail" ellipsizeMode="tail"
style={ style={
Array [ Array [
@ -85,7 +84,6 @@ exports[`render channel 1`] = `
<Text <Text
accessible={true} accessible={true}
allowFontScaling={true} allowFontScaling={true}
disabled={false}
ellipsizeMode="tail" ellipsizeMode="tail"
numberOfLines={1} numberOfLines={1}
style={ style={
@ -103,7 +101,6 @@ exports[`render channel 1`] = `
<Text <Text
accessible={true} accessible={true}
allowFontScaling={true} allowFontScaling={true}
disabled={false}
ellipsizeMode="tail" ellipsizeMode="tail"
numberOfLines={1} numberOfLines={1}
style={ style={
@ -163,7 +160,6 @@ exports[`render no icon 1`] = `
<Text <Text
accessible={true} accessible={true}
allowFontScaling={true} allowFontScaling={true}
disabled={false}
ellipsizeMode="tail" ellipsizeMode="tail"
numberOfLines={1} numberOfLines={1}
style={ style={
@ -181,7 +177,6 @@ exports[`render no icon 1`] = `
<Text <Text
accessible={true} accessible={true}
allowFontScaling={true} allowFontScaling={true}
disabled={false}
ellipsizeMode="tail" ellipsizeMode="tail"
numberOfLines={1} numberOfLines={1}
style={ style={
@ -241,7 +236,6 @@ exports[`render private group 1`] = `
<Text <Text
accessible={true} accessible={true}
allowFontScaling={true} allowFontScaling={true}
disabled={false}
ellipsizeMode="tail" ellipsizeMode="tail"
numberOfLines={1} numberOfLines={1}
style={ style={
@ -259,7 +253,6 @@ exports[`render private group 1`] = `
<Text <Text
accessible={true} accessible={true}
allowFontScaling={true} allowFontScaling={true}
disabled={false}
ellipsizeMode="tail" ellipsizeMode="tail"
numberOfLines={1} numberOfLines={1}
style={ style={
@ -328,7 +321,6 @@ exports[`render unread +999 1`] = `
<Text <Text
accessible={true} accessible={true}
allowFontScaling={true} allowFontScaling={true}
disabled={false}
ellipsizeMode="tail" ellipsizeMode="tail"
style={ style={
Array [ Array [
@ -356,7 +348,6 @@ exports[`render unread +999 1`] = `
<Text <Text
accessible={true} accessible={true}
allowFontScaling={true} allowFontScaling={true}
disabled={false}
ellipsizeMode="tail" ellipsizeMode="tail"
numberOfLines={1} numberOfLines={1}
style={ style={
@ -374,7 +365,6 @@ exports[`render unread +999 1`] = `
<Text <Text
accessible={true} accessible={true}
allowFontScaling={true} allowFontScaling={true}
disabled={false}
ellipsizeMode="tail" ellipsizeMode="tail"
numberOfLines={1} numberOfLines={1}
style={ style={
@ -392,7 +382,6 @@ exports[`render unread +999 1`] = `
<Text <Text
accessible={true} accessible={true}
allowFontScaling={true} allowFontScaling={true}
disabled={false}
ellipsizeMode="tail" ellipsizeMode="tail"
style={ style={
Object { Object {
@ -464,7 +453,6 @@ exports[`render unread 1`] = `
<Text <Text
accessible={true} accessible={true}
allowFontScaling={true} allowFontScaling={true}
disabled={false}
ellipsizeMode="tail" ellipsizeMode="tail"
style={ style={
Array [ Array [
@ -492,7 +480,6 @@ exports[`render unread 1`] = `
<Text <Text
accessible={true} accessible={true}
allowFontScaling={true} allowFontScaling={true}
disabled={false}
ellipsizeMode="tail" ellipsizeMode="tail"
numberOfLines={1} numberOfLines={1}
style={ style={
@ -510,7 +497,6 @@ exports[`render unread 1`] = `
<Text <Text
accessible={true} accessible={true}
allowFontScaling={true} allowFontScaling={true}
disabled={false}
ellipsizeMode="tail" ellipsizeMode="tail"
numberOfLines={1} numberOfLines={1}
style={ style={
@ -528,7 +514,6 @@ exports[`render unread 1`] = `
<Text <Text
accessible={true} accessible={true}
allowFontScaling={true} allowFontScaling={true}
disabled={false}
ellipsizeMode="tail" ellipsizeMode="tail"
style={ style={
Object { Object {
@ -600,7 +585,6 @@ exports[`renders correctly 1`] = `
<Text <Text
accessible={true} accessible={true}
allowFontScaling={true} allowFontScaling={true}
disabled={false}
ellipsizeMode="tail" ellipsizeMode="tail"
style={ style={
Array [ Array [
@ -628,7 +612,6 @@ exports[`renders correctly 1`] = `
<Text <Text
accessible={true} accessible={true}
allowFontScaling={true} allowFontScaling={true}
disabled={false}
ellipsizeMode="tail" ellipsizeMode="tail"
numberOfLines={1} numberOfLines={1}
style={ style={
@ -646,7 +629,6 @@ exports[`renders correctly 1`] = `
<Text <Text
accessible={true} accessible={true}
allowFontScaling={true} allowFontScaling={true}
disabled={false}
ellipsizeMode="tail" ellipsizeMode="tail"
numberOfLines={1} numberOfLines={1}
style={ style={

View File

@ -24,7 +24,6 @@ exports[`Storyshots Avatar avatar 1`] = `
<Text <Text
accessible={true} accessible={true}
allowFontScaling={true} allowFontScaling={true}
disabled={false}
ellipsizeMode="tail" ellipsizeMode="tail"
style={ style={
Array [ Array [
@ -61,7 +60,6 @@ exports[`Storyshots Avatar avatar 1`] = `
<Text <Text
accessible={true} accessible={true}
allowFontScaling={true} allowFontScaling={true}
disabled={false}
ellipsizeMode="tail" ellipsizeMode="tail"
style={ style={
Array [ Array [
@ -98,7 +96,6 @@ exports[`Storyshots Avatar avatar 1`] = `
<Text <Text
accessible={true} accessible={true}
allowFontScaling={true} allowFontScaling={true}
disabled={false}
ellipsizeMode="tail" ellipsizeMode="tail"
style={ style={
Array [ Array [
@ -135,7 +132,6 @@ exports[`Storyshots Avatar avatar 1`] = `
<Text <Text
accessible={true} accessible={true}
allowFontScaling={true} allowFontScaling={true}
disabled={false}
ellipsizeMode="tail" ellipsizeMode="tail"
style={ style={
Array [ Array [
@ -208,7 +204,6 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
<Text <Text
accessible={true} accessible={true}
allowFontScaling={true} allowFontScaling={true}
disabled={false}
ellipsizeMode="tail" ellipsizeMode="tail"
style={ style={
Array [ Array [
@ -255,7 +250,6 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
<Text <Text
accessible={true} accessible={true}
allowFontScaling={true} allowFontScaling={true}
disabled={false}
ellipsizeMode="tail" ellipsizeMode="tail"
numberOfLines={1} numberOfLines={1}
style={ style={
@ -273,7 +267,6 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
<Text <Text
accessible={true} accessible={true}
allowFontScaling={true} allowFontScaling={true}
disabled={false}
ellipsizeMode="tail" ellipsizeMode="tail"
numberOfLines={1} numberOfLines={1}
style={ style={
@ -339,7 +332,6 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
<Text <Text
accessible={true} accessible={true}
allowFontScaling={true} allowFontScaling={true}
disabled={false}
ellipsizeMode="tail" ellipsizeMode="tail"
style={ style={
Array [ Array [
@ -386,7 +378,6 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
<Text <Text
accessible={true} accessible={true}
allowFontScaling={true} allowFontScaling={true}
disabled={false}
ellipsizeMode="tail" ellipsizeMode="tail"
numberOfLines={1} numberOfLines={1}
style={ style={
@ -404,7 +395,6 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
<Text <Text
accessible={true} accessible={true}
allowFontScaling={true} allowFontScaling={true}
disabled={false}
ellipsizeMode="tail" ellipsizeMode="tail"
numberOfLines={1} numberOfLines={1}
style={ style={
@ -470,7 +460,6 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
<Text <Text
accessible={true} accessible={true}
allowFontScaling={true} allowFontScaling={true}
disabled={false}
ellipsizeMode="tail" ellipsizeMode="tail"
style={ style={
Array [ Array [
@ -517,7 +506,6 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
<Text <Text
accessible={true} accessible={true}
allowFontScaling={true} allowFontScaling={true}
disabled={false}
ellipsizeMode="tail" ellipsizeMode="tail"
numberOfLines={1} numberOfLines={1}
style={ style={
@ -535,7 +523,6 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
<Text <Text
accessible={true} accessible={true}
allowFontScaling={true} allowFontScaling={true}
disabled={false}
ellipsizeMode="tail" ellipsizeMode="tail"
numberOfLines={1} numberOfLines={1}
style={ style={
@ -553,7 +540,6 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
<Text <Text
accessible={true} accessible={true}
allowFontScaling={true} allowFontScaling={true}
disabled={false}
ellipsizeMode="tail" ellipsizeMode="tail"
style={ style={
Object { Object {
@ -622,7 +608,6 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
<Text <Text
accessible={true} accessible={true}
allowFontScaling={true} allowFontScaling={true}
disabled={false}
ellipsizeMode="tail" ellipsizeMode="tail"
style={ style={
Array [ Array [
@ -669,7 +654,6 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
<Text <Text
accessible={true} accessible={true}
allowFontScaling={true} allowFontScaling={true}
disabled={false}
ellipsizeMode="tail" ellipsizeMode="tail"
numberOfLines={1} numberOfLines={1}
style={ style={
@ -687,7 +671,6 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
<Text <Text
accessible={true} accessible={true}
allowFontScaling={true} allowFontScaling={true}
disabled={false}
ellipsizeMode="tail" ellipsizeMode="tail"
numberOfLines={1} numberOfLines={1}
style={ style={
@ -705,7 +688,6 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
<Text <Text
accessible={true} accessible={true}
allowFontScaling={true} allowFontScaling={true}
disabled={false}
ellipsizeMode="tail" ellipsizeMode="tail"
style={ style={
Object { Object {
@ -774,7 +756,6 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
<Text <Text
accessible={true} accessible={true}
allowFontScaling={true} allowFontScaling={true}
disabled={false}
ellipsizeMode="tail" ellipsizeMode="tail"
style={ style={
Array [ Array [
@ -821,7 +802,6 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
<Text <Text
accessible={true} accessible={true}
allowFontScaling={true} allowFontScaling={true}
disabled={false}
ellipsizeMode="tail" ellipsizeMode="tail"
numberOfLines={1} numberOfLines={1}
style={ style={
@ -839,7 +819,6 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
<Text <Text
accessible={true} accessible={true}
allowFontScaling={true} allowFontScaling={true}
disabled={false}
ellipsizeMode="tail" ellipsizeMode="tail"
numberOfLines={1} numberOfLines={1}
style={ style={
@ -857,7 +836,6 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
<Text <Text
accessible={true} accessible={true}
allowFontScaling={true} allowFontScaling={true}
disabled={false}
ellipsizeMode="tail" ellipsizeMode="tail"
style={ style={
Object { Object {
@ -926,7 +904,6 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
<Text <Text
accessible={true} accessible={true}
allowFontScaling={true} allowFontScaling={true}
disabled={false}
ellipsizeMode="tail" ellipsizeMode="tail"
style={ style={
Array [ Array [
@ -973,7 +950,6 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
<Text <Text
accessible={true} accessible={true}
allowFontScaling={true} allowFontScaling={true}
disabled={false}
ellipsizeMode="tail" ellipsizeMode="tail"
numberOfLines={1} numberOfLines={1}
style={ style={
@ -991,7 +967,6 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
<Text <Text
accessible={true} accessible={true}
allowFontScaling={true} allowFontScaling={true}
disabled={false}
ellipsizeMode="tail" ellipsizeMode="tail"
numberOfLines={1} numberOfLines={1}
style={ style={
@ -1009,7 +984,6 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
<Text <Text
accessible={true} accessible={true}
allowFontScaling={true} allowFontScaling={true}
disabled={false}
ellipsizeMode="tail" ellipsizeMode="tail"
style={ style={
Object { Object {
@ -1078,7 +1052,6 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
<Text <Text
accessible={true} accessible={true}
allowFontScaling={true} allowFontScaling={true}
disabled={false}
ellipsizeMode="tail" ellipsizeMode="tail"
style={ style={
Array [ Array [
@ -1125,7 +1098,6 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
<Text <Text
accessible={true} accessible={true}
allowFontScaling={true} allowFontScaling={true}
disabled={false}
ellipsizeMode="tail" ellipsizeMode="tail"
numberOfLines={1} numberOfLines={1}
style={ style={
@ -1143,7 +1115,6 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
<Text <Text
accessible={true} accessible={true}
allowFontScaling={true} allowFontScaling={true}
disabled={false}
ellipsizeMode="tail" ellipsizeMode="tail"
numberOfLines={1} numberOfLines={1}
style={ style={
@ -1161,7 +1132,6 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
<Text <Text
accessible={true} accessible={true}
allowFontScaling={true} allowFontScaling={true}
disabled={false}
ellipsizeMode="tail" ellipsizeMode="tail"
style={ style={
Object { Object {
@ -1230,7 +1200,6 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
<Text <Text
accessible={true} accessible={true}
allowFontScaling={true} allowFontScaling={true}
disabled={false}
ellipsizeMode="tail" ellipsizeMode="tail"
style={ style={
Array [ Array [
@ -1258,7 +1227,6 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
<Text <Text
accessible={true} accessible={true}
allowFontScaling={true} allowFontScaling={true}
disabled={false}
ellipsizeMode="tail" ellipsizeMode="tail"
numberOfLines={1} numberOfLines={1}
style={ style={
@ -1276,7 +1244,6 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
<Text <Text
accessible={true} accessible={true}
allowFontScaling={true} allowFontScaling={true}
disabled={false}
ellipsizeMode="tail" ellipsizeMode="tail"
numberOfLines={1} numberOfLines={1}
style={ style={
@ -1342,7 +1309,6 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
<Text <Text
accessible={true} accessible={true}
allowFontScaling={true} allowFontScaling={true}
disabled={false}
ellipsizeMode="tail" ellipsizeMode="tail"
style={ style={
Array [ Array [
@ -1370,7 +1336,6 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
<Text <Text
accessible={true} accessible={true}
allowFontScaling={true} allowFontScaling={true}
disabled={false}
ellipsizeMode="tail" ellipsizeMode="tail"
numberOfLines={1} numberOfLines={1}
style={ style={
@ -1388,7 +1353,6 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
<Text <Text
accessible={true} accessible={true}
allowFontScaling={true} allowFontScaling={true}
disabled={false}
ellipsizeMode="tail" ellipsizeMode="tail"
numberOfLines={1} numberOfLines={1}
style={ style={
@ -1454,7 +1418,6 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
<Text <Text
accessible={true} accessible={true}
allowFontScaling={true} allowFontScaling={true}
disabled={false}
ellipsizeMode="tail" ellipsizeMode="tail"
style={ style={
Array [ Array [
@ -1482,7 +1445,6 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
<Text <Text
accessible={true} accessible={true}
allowFontScaling={true} allowFontScaling={true}
disabled={false}
ellipsizeMode="tail" ellipsizeMode="tail"
numberOfLines={1} numberOfLines={1}
style={ style={
@ -1500,7 +1462,6 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
<Text <Text
accessible={true} accessible={true}
allowFontScaling={true} allowFontScaling={true}
disabled={false}
ellipsizeMode="tail" ellipsizeMode="tail"
numberOfLines={1} numberOfLines={1}
style={ style={

View File

@ -20,7 +20,9 @@ const styles = StyleSheet.create({
class Avatar extends React.PureComponent { class Avatar extends React.PureComponent {
render() { render() {
const { text = '', size = 25, baseUrl, borderRadius = 5, style, avatar } = this.props; const {
text = '', size = 25, baseUrl, borderRadius = 5, style, avatar
} = this.props;
const { initials, color } = avatarInitialsAndColor(`${ text }`); const { initials, color } = avatarInitialsAndColor(`${ text }`);
const iconContainerStyle = { const iconContainerStyle = {

View File

@ -31,9 +31,9 @@ export default class Banner extends React.PureComponent {
offline: PropTypes.bool offline: PropTypes.bool
} }
componentWillMount() { componentWillMount() {
this.state = { this.setState({
slow: false slow: false
}; });
this.timer = setTimeout(() => this.setState({ slow: true }), 5000); this.timer = setTimeout(() => this.setState({ slow: true }), 5000);
} }
componentWillUnmount() { componentWillUnmount() {

View File

@ -1,6 +1,6 @@
import React from 'react'; import React from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import { View, TextInput, StyleSheet } from 'react-native'; import { View, TextInput, StyleSheet, SafeAreaView } from 'react-native';
import Icon from 'react-native-vector-icons/MaterialIcons'; import Icon from 'react-native-vector-icons/MaterialIcons';
import ImagePicker from 'react-native-image-picker'; import ImagePicker from 'react-native-image-picker';
import RocketChat from '../lib/rocketchat'; import RocketChat from '../lib/rocketchat';
@ -10,7 +10,9 @@ const styles = StyleSheet.create({
paddingTop: 1, paddingTop: 1,
borderTopWidth: 1, borderTopWidth: 1,
borderTopColor: '#ccc', borderTopColor: '#ccc',
backgroundColor: '#fff', backgroundColor: '#fff'
},
safeAreaView: {
flexDirection: 'row', flexDirection: 'row',
alignItems: 'center' alignItems: 'center'
}, },
@ -77,17 +79,19 @@ export default class MessageBox extends React.PureComponent {
render() { render() {
return ( return (
<View style={styles.textBox}> <View style={styles.textBox}>
<Icon style={styles.fileButton} name='add-circle-outline' onPress={this.addFile} /> <SafeAreaView style={styles.safeAreaView}>
<TextInput <Icon style={styles.fileButton} name='add-circle-outline' onPress={this.addFile} />
ref={component => this.component = component} <TextInput
style={styles.textBoxInput} ref={component => this.component = component}
returnKeyType='send' style={styles.textBoxInput}
onSubmitEditing={event => this.submit(event.nativeEvent.text)} returnKeyType='send'
blurOnSubmit={false} onSubmitEditing={event => this.submit(event.nativeEvent.text)}
placeholder='New message' blurOnSubmit={false}
underlineColorAndroid='transparent' placeholder='New message'
defaultValue={''} underlineColorAndroid='transparent'
/> defaultValue=''
/>
</SafeAreaView>
</View> </View>
); );
} }

View File

@ -55,7 +55,7 @@ export default class Sidebar extends Component {
componentWillMount() { componentWillMount() {
realm.addListener('change', this.updateState); realm.addListener('change', this.updateState);
this.state = this.getState(); this.setState(this.getState());
} }
componentWillUnmount() { componentWillUnmount() {

View File

@ -34,7 +34,9 @@ export default class extends React.PureComponent {
onClose: PropTypes.func.isRequired onClose: PropTypes.func.isRequired
} }
render() { render() {
const { image, isVisible, onClose, title } = this.props; const {
image, isVisible, onClose, title
} = this.props;
return ( return (
<Modal <Modal
isVisible={isVisible} isVisible={isVisible}
@ -50,7 +52,7 @@ export default class extends React.PureComponent {
style={styles.image} style={styles.image}
source={{ uri: encodeURI(image) }} source={{ uri: encodeURI(image) }}
mutable mutable
resizeMode={'contain'} resizeMode='contain'
/> />
</ScrollView> </ScrollView>
</View> </View>

View File

@ -38,7 +38,7 @@ const AuthRoutes = StackNavigator(
title: navigation.state.params.title || 'Room', title: navigation.state.params.title || 'Room',
headerLeft: ( headerLeft: (
<HeaderBackButton <HeaderBackButton
title={'Back'} title='Back'
onPress={() => backToScreen(navigation, 'RoomsList')} onPress={() => backToScreen(navigation, 'RoomsList')}
/> />
) )

View File

@ -18,9 +18,7 @@ if (__DEV__) {
applyMiddleware(logger) applyMiddleware(logger)
); );
} else { } else {
enhacers = composeWithDevTools( enhacers = composeWithDevTools(applyMiddleware(sagaMiddleware));
applyMiddleware(sagaMiddleware)
);
} }
const store = enhacers(createStore)(reducers); const store = enhacers(createStore)(reducers);

View File

@ -45,14 +45,16 @@ export default class Loading extends Component {
toValue: 0.8, toValue: 0.8,
duration: 1000, duration: 1000,
useNativeDriver: true useNativeDriver: true
}), }
),
Animated.timing( Animated.timing(
this.scale, this.scale,
{ {
toValue: 1, toValue: 1,
duration: 1000, duration: 1000,
useNativeDriver: true useNativeDriver: true
}) }
)
]).start(() => { ]).start(() => {
this.animate(); this.animate();
}); });

View File

@ -76,7 +76,7 @@ export default class RoomItem extends React.PureComponent {
unread: PropTypes.number, unread: PropTypes.number,
baseUrl: PropTypes.string, baseUrl: PropTypes.string,
onPress: PropTypes.func, onPress: PropTypes.func,
dateFormat: PropTypes.string.isRequired dateFormat: PropTypes.string
} }
get icon() { get icon() {
@ -126,12 +126,24 @@ export default class RoomItem extends React.PureComponent {
render() { render() {
const { unread, name, _updatedAt } = this.props; const { unread, name, _updatedAt } = this.props;
if (_updatedAt) {
return (
<TouchableOpacity onPress={this.props.onPress} style={styles.container}>
{this.icon}
<View style={styles.roomNameView}>
<Text style={styles.roomName} ellipsizeMode='tail' numberOfLines={1}>{ name }</Text>
<Text style={styles.update} ellipsizeMode='tail' numberOfLines={1}>{ moment(_updatedAt).format(this.props.dateFormat) }</Text>
</View>
{this.renderNumber(unread)}
</TouchableOpacity>
);
}
return ( return (
<TouchableOpacity onPress={this.props.onPress} style={styles.container}> <TouchableOpacity onPress={this.props.onPress} style={styles.container}>
{this.icon} {this.icon}
<View style={styles.roomNameView}> <View style={styles.roomNameView}>
<Text style={styles.roomName} ellipsizeMode='tail' numberOfLines={1}>{ name }</Text> <Text style={styles.roomName} ellipsizeMode='tail' numberOfLines={1}>{ name }</Text>
<Text style={styles.update} ellipsizeMode='tail' numberOfLines={1}>{ moment(_updatedAt).format(this.props.dateFormat) }</Text>
</View> </View>
{this.renderNumber(unread)} {this.renderNumber(unread)}
</TouchableOpacity> </TouchableOpacity>

View File

@ -10,17 +10,20 @@ const initialState = {
export default function connect(state = initialState, action) { export default function connect(state = initialState, action) {
switch (action.type) { switch (action.type) {
case METEOR.REQUEST: case METEOR.REQUEST:
return { ...state, return {
...state,
connecting: true connecting: true
}; };
case METEOR.SUCCESS: case METEOR.SUCCESS:
return { ...state, return {
...state,
connecting: false, connecting: false,
connected: true, connected: true,
failure: false failure: false
}; };
case METEOR.FAILURE: case METEOR.FAILURE:
return { ...state, return {
...state,
connecting: false, connecting: false,
connected: false, connected: false,
failure: true, failure: true,

View File

@ -12,14 +12,16 @@ const initialState = {
export default function login(state = initialState, action) { export default function login(state = initialState, action) {
switch (action.type) { switch (action.type) {
case types.LOGIN.REQUEST: case types.LOGIN.REQUEST:
return { ...state, return {
...state,
isFetching: true, isFetching: true,
isAuthenticated: false, isAuthenticated: false,
failure: false, failure: false,
error: '' error: ''
}; };
case types.LOGIN.SUCCESS: case types.LOGIN.SUCCESS:
return { ...state, return {
...state,
isFetching: false, isFetching: false,
isAuthenticated: true, isAuthenticated: true,
user: action.user, user: action.user,
@ -28,7 +30,8 @@ export default function login(state = initialState, action) {
error: '' error: ''
}; };
case types.LOGIN.FAILURE: case types.LOGIN.FAILURE:
return { ...state, return {
...state,
isFetching: false, isFetching: false,
isAuthenticated: false, isAuthenticated: false,
failure: true, failure: true,
@ -37,7 +40,8 @@ export default function login(state = initialState, action) {
case types.LOGOUT: case types.LOGOUT:
return initialState; return initialState;
case types.LOGIN.SET_TOKEN: case types.LOGIN.SET_TOKEN:
return { ...state, return {
...state,
token: action.token, token: action.token,
user: action.user user: action.user
}; };

View File

@ -8,15 +8,18 @@ const initialState = {
export default function messages(state = initialState, action) { export default function messages(state = initialState, action) {
switch (action.type) { switch (action.type) {
case types.MESSAGES.REQUEST: case types.MESSAGES.REQUEST:
return { ...state, return {
...state,
isFetching: true isFetching: true
}; };
case types.MESSAGES.SUCCESS: case types.MESSAGES.SUCCESS:
return { ...state, return {
...state,
isFetching: false isFetching: false
}; };
case types.LOGIN.FAILURE: case types.LOGIN.FAILURE:
return { ...state, return {
...state,
isFetching: false, isFetching: false,
failure: true, failure: true,
errorMessage: action.err errorMessage: action.err

View File

@ -5,8 +5,7 @@ const initialState = {};
export default function navigations(state = initialState, action) { export default function navigations(state = initialState, action) {
switch (action.type) { switch (action.type) {
case types.NAVIGATION.SET: case types.NAVIGATION.SET:
return action.navigator return action.navigator;
;
default: default:
return state; return state;
} }

View File

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

View File

@ -8,15 +8,18 @@ const initialState = {
export default function login(state = initialState, action) { export default function login(state = initialState, action) {
switch (action.type) { switch (action.type) {
case types.ROOMS.REQUEST: case types.ROOMS.REQUEST:
return { ...state, return {
...state,
isFetching: true isFetching: true
}; };
case types.ROOMS.SUCCESS: case types.ROOMS.SUCCESS:
return { ...state, return {
...state,
isFetching: false isFetching: false
}; };
case types.ROOMS.FAILURE: case types.ROOMS.FAILURE:
return { ...state, return {
...state,
isFetching: false, isFetching: false,
failure: true, failure: true,
errorMessage: action.err errorMessage: action.err

View File

@ -12,18 +12,21 @@ const initialState = {
export default function server(state = initialState, action) { export default function server(state = initialState, action) {
switch (action.type) { switch (action.type) {
case SERVER.REQUEST: case SERVER.REQUEST:
return { ...state, return {
...state,
connecting: true, connecting: true,
failure: false failure: false
}; };
case SERVER.SUCCESS: case SERVER.SUCCESS:
return { ...state, return {
...state,
connecting: false, connecting: false,
connected: true, connected: true,
failure: false failure: false
}; };
case SERVER.FAILURE: case SERVER.FAILURE:
return { ...state, return {
...state,
connecting: false, connecting: false,
connected: false, connected: false,
failure: true, failure: true,

View File

@ -1,7 +1,7 @@
import React from 'react'; import React from 'react';
import { connect } from 'react-redux'; import { connect } from 'react-redux';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import { TextInput, View, Text, Switch, TouchableOpacity } from 'react-native'; import { TextInput, View, Text, Switch, TouchableOpacity, SafeAreaView } from 'react-native';
import { createChannelRequest } from '../actions/createChannel'; import { createChannelRequest } from '../actions/createChannel';
import styles from './Styles'; import styles from './Styles';
import KeyboardView from '../presentation/KeyboardView'; import KeyboardView from '../presentation/KeyboardView';
@ -94,7 +94,7 @@ export default class CreateChannelView extends React.Component {
style={[styles.defaultViewBackground, { flex: 1 }]} style={[styles.defaultViewBackground, { flex: 1 }]}
contentContainerStyle={styles.defaultView} contentContainerStyle={styles.defaultView}
> >
<View style={styles.formContainer}> <SafeAreaView style={styles.formContainer}>
<Text style={styles.label_white}>Channel Name</Text> <Text style={styles.label_white}>Channel Name</Text>
<TextInput <TextInput
value={this.state.channelName} value={this.state.channelName}
@ -139,7 +139,7 @@ export default class CreateChannelView extends React.Component {
{this.props.result.isFetching ? 'LOADING' : 'CREATE'}! {this.props.result.isFetching ? 'LOADING' : 'CREATE'}!
</Text> </Text>
</TouchableOpacity> </TouchableOpacity>
</View> </SafeAreaView>
</KeyboardView> </KeyboardView>
); );
} }

View File

@ -1,7 +1,7 @@
import React from 'react'; import React from 'react';
import Spinner from 'react-native-loading-spinner-overlay'; import Spinner from 'react-native-loading-spinner-overlay';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import { Text, TextInput, View, TouchableOpacity, Alert } from 'react-native'; import { Text, TextInput, View, TouchableOpacity, Alert, SafeAreaView } from 'react-native';
import { connect } from 'react-redux'; import { connect } from 'react-redux';
import { bindActionCreators } from 'redux'; import { bindActionCreators } from 'redux';
import * as loginActions from '../actions/login'; import * as loginActions from '../actions/login';
@ -72,32 +72,34 @@ class ForgotPasswordView extends React.Component {
contentContainerStyle={styles.container} contentContainerStyle={styles.container}
keyboardVerticalOffset={128} keyboardVerticalOffset={128}
> >
<View style={styles.loginView}> <SafeAreaView>
<View style={styles.formContainer}> <View style={styles.loginView}>
<TextInput <View style={styles.formContainer}>
style={[styles.input_white, this.state.invalidEmail ? { borderColor: 'red' } : {}]} <TextInput
onChangeText={email => this.validate(email)} style={[styles.input_white, this.state.invalidEmail ? { borderColor: 'red' } : {}]}
keyboardType='email-address' onChangeText={email => this.validate(email)}
autoCorrect={false} keyboardType='email-address'
returnKeyType='next' autoCorrect={false}
autoCapitalize='none' returnKeyType='next'
underlineColorAndroid='transparent' autoCapitalize='none'
onSubmitEditing={() => this.resetPassword()} underlineColorAndroid='transparent'
placeholder='Email' onSubmitEditing={() => this.resetPassword()}
/> placeholder='Email'
/>
<TouchableOpacity style={styles.buttonContainer} onPress={this.resetPassword}> <TouchableOpacity style={styles.buttonContainer} onPress={this.resetPassword}>
<Text style={styles.button}>RESET PASSWORD</Text> <Text style={styles.button}>RESET PASSWORD</Text>
</TouchableOpacity> </TouchableOpacity>
<TouchableOpacity style={styles.buttonContainer} onPress={this.backLogin}> <TouchableOpacity style={styles.buttonContainer} onPress={this.backLogin}>
<Text style={styles.button}>BACK TO LOGIN</Text> <Text style={styles.button}>BACK TO LOGIN</Text>
</TouchableOpacity> </TouchableOpacity>
{this.props.login.failure && <Text style={styles.error}>{this.props.login.error.reason}</Text>} {this.props.login.failure && <Text style={styles.error}>{this.props.login.error.reason}</Text>}
</View>
<Spinner visible={this.props.login.isFetching} textContent='Loading...' textStyle={{ color: '#FFF' }} />
</View> </View>
<Spinner visible={this.props.login.isFetching} textContent={'Loading...'} textStyle={{ color: '#FFF' }} /> </SafeAreaView>
</View>
</KeyboardView> </KeyboardView>
); );
} }

View File

@ -3,7 +3,7 @@ import React from 'react';
import Icon from 'react-native-vector-icons/Ionicons'; import Icon from 'react-native-vector-icons/Ionicons';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import Zeroconf from 'react-native-zeroconf'; import Zeroconf from 'react-native-zeroconf';
import { View, Text, SectionList, StyleSheet } from 'react-native'; import { View, Text, SectionList, StyleSheet, SafeAreaView } from 'react-native';
import { connect } from 'react-redux'; import { connect } from 'react-redux';
import { setServer } from '../actions/server'; import { setServer } from '../actions/server';
import realm from '../lib/realm'; import realm from '../lib/realm';
@ -93,7 +93,7 @@ export default class ListServerView extends React.Component {
zeroconf.scan('http', 'tcp', 'local.'); zeroconf.scan('http', 'tcp', 'local.');
this.state = this.getState(); this.setState(this.getState());
} }
componentDidUpdate() { componentDidUpdate() {
@ -184,14 +184,16 @@ export default class ListServerView extends React.Component {
return ( return (
<View style={styles.view}> <View style={styles.view}>
<Banner /> <Banner />
<SectionList <SafeAreaView style={styles.view}>
style={styles.list} <SectionList
sections={this.state.sections} style={styles.list}
renderItem={this.renderItem} sections={this.state.sections}
renderSectionHeader={this.renderSectionHeader} renderItem={this.renderItem}
keyExtractor={item => item.id} renderSectionHeader={this.renderSectionHeader}
ItemSeparatorComponent={this.renderSeparator} keyExtractor={item => item.id}
/> ItemSeparatorComponent={this.renderSeparator}
/>
</SafeAreaView>
</View> </View>
); );
} }

View File

@ -1,9 +1,9 @@
import React from 'react'; import React from 'react';
import Spinner from 'react-native-loading-spinner-overlay'; // import Spinner from 'react-native-loading-spinner-overlay';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import { Keyboard, Text, TextInput, View, TouchableOpacity } from 'react-native'; import { Keyboard, Text, TextInput, View, TouchableOpacity, SafeAreaView } from 'react-native';
import { connect } from 'react-redux'; import { connect } from 'react-redux';
import { bindActionCreators } from 'redux'; import { bindActionCreators } from 'redux';
// import * as actions from '../actions'; // import * as actions from '../actions';
@ -87,58 +87,59 @@ class LoginView extends React.Component {
keyboardVerticalOffset={128} keyboardVerticalOffset={128}
> >
<View style={styles.loginView}> <View style={styles.loginView}>
<View style={styles.formContainer}> <SafeAreaView>
<TextInput <View style={styles.formContainer}>
style={styles.input_white} <TextInput
onChangeText={username => this.setState({ username })} style={styles.input_white}
keyboardType='email-address' onChangeText={username => this.setState({ username })}
autoCorrect={false} keyboardType='email-address'
returnKeyType='next' autoCorrect={false}
autoCapitalize='none' returnKeyType='next'
underlineColorAndroid='transparent' autoCapitalize='none'
onSubmitEditing={() => { this.password.focus(); }} underlineColorAndroid='transparent'
placeholder={this.props.Accounts_EmailOrUsernamePlaceholder || 'Email or username'} onSubmitEditing={() => { this.password.focus(); }}
/> placeholder={this.props.Accounts_EmailOrUsernamePlaceholder || 'Email or username'}
<TextInput />
ref={(e) => { this.password = e; }} <TextInput
style={styles.input_white} ref={(e) => { this.password = e; }}
onChangeText={password => this.setState({ password })} style={styles.input_white}
secureTextEntry onChangeText={password => this.setState({ password })}
autoCorrect={false} secureTextEntry
returnKeyType='done' autoCorrect={false}
autoCapitalize='none' returnKeyType='done'
underlineColorAndroid='transparent' autoCapitalize='none'
onSubmitEditing={this.submit} underlineColorAndroid='transparent'
placeholder={this.props.Accounts_PasswordPlaceholder || 'Password'} onSubmitEditing={this.submit}
/> placeholder={this.props.Accounts_PasswordPlaceholder || 'Password'}
/>
{this.renderTOTP()} {this.renderTOTP()}
<TouchableOpacity <TouchableOpacity
style={styles.buttonContainer} style={styles.buttonContainer}
onPress={this.submit} onPress={this.submit}
> >
<Text style={styles.button}>LOGIN</Text> <Text style={styles.button}>LOGIN</Text>
</TouchableOpacity> </TouchableOpacity>
<TouchableOpacity style={styles.buttonContainer} onPress={this.register}> <TouchableOpacity style={styles.buttonContainer} onPress={this.register}>
<Text style={styles.button}>REGISTER</Text> <Text style={styles.button}>REGISTER</Text>
</TouchableOpacity> </TouchableOpacity>
<TouchableOpacity style={styles.buttonContainer} onPress={this.termsService}> <TouchableOpacity style={styles.buttonContainer} onPress={this.termsService}>
<Text style={styles.button}>TERMS OF SERVICE</Text> <Text style={styles.button}>TERMS OF SERVICE</Text>
</TouchableOpacity> </TouchableOpacity>
<TouchableOpacity style={styles.buttonContainer} onPress={this.privacyPolicy}> <TouchableOpacity style={styles.buttonContainer} onPress={this.privacyPolicy}>
<Text style={styles.button}>PRIVACY POLICY</Text> <Text style={styles.button}>PRIVACY POLICY</Text>
</TouchableOpacity> </TouchableOpacity>
<TouchableOpacity style={styles.buttonContainer} onPress={this.forgotPassword}> <TouchableOpacity style={styles.buttonContainer} onPress={this.forgotPassword}>
<Text style={styles.button}>FORGOT MY PASSWORD</Text> <Text style={styles.button}>FORGOT MY PASSWORD</Text>
</TouchableOpacity> </TouchableOpacity>
{this.props.login.failure && <Text style={styles.error}>{this.props.login.error.reason}</Text>} {this.props.login.failure && <Text style={styles.error}>{this.props.login.error.reason}</Text>}
</View> </View>
<Spinner visible={this.props.login.isFetching} textContent={'Loading...'} textStyle={{ color: '#FFF' }} /> </SafeAreaView>
</View> </View>
</KeyboardView> </KeyboardView>
); );

View File

@ -27,7 +27,7 @@ export default class extends React.PureComponent {
style={{ ...styles.image }} style={{ ...styles.image }}
source={{ uri: encodeURI(image) }} source={{ uri: encodeURI(image) }}
mutable mutable
resizeMode={'contain'} resizeMode='contain'
/> />
</ScrollView> </ScrollView>
</View> </View>

View File

@ -3,7 +3,7 @@ import React from 'react';
import Spinner from 'react-native-loading-spinner-overlay'; import Spinner from 'react-native-loading-spinner-overlay';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import { Keyboard, Text, TextInput, View, TouchableOpacity } from 'react-native'; import { Keyboard, Text, TextInput, View, TouchableOpacity, SafeAreaView } from 'react-native';
import { connect } from 'react-redux'; import { connect } from 'react-redux';
import { bindActionCreators } from 'redux'; import { bindActionCreators } from 'redux';
import * as loginActions from '../actions/login'; import * as loginActions from '../actions/login';
@ -37,7 +37,9 @@ class RegisterView extends React.Component {
} }
_valid() { _valid() {
const { name, email, password, confirmPassword } = this.state; const {
name, email, password, confirmPassword
} = this.state;
return name.trim() && email.trim() && return name.trim() && email.trim() &&
password && confirmPassword && password === confirmPassword; password && confirmPassword && password === confirmPassword;
} }
@ -45,12 +47,16 @@ class RegisterView extends React.Component {
return this.props.login.failure && /Email/.test(this.props.login.error.reason); return this.props.login.failure && /Email/.test(this.props.login.error.reason);
} }
submit = () => { submit = () => {
const { name, email, password, code } = this.state; const {
name, email, password, code
} = this.state;
if (!this._valid()) { if (!this._valid()) {
return; return;
} }
this.props.registerSubmit({ name, email, pass: password, code }); this.props.registerSubmit({
name, email, pass: password, code
});
Keyboard.dismiss(); Keyboard.dismiss();
} }
usernameSubmit = () => { usernameSubmit = () => {
@ -127,7 +133,8 @@ class RegisterView extends React.Component {
style={[styles.button, this._valid() ? {} style={[styles.button, this._valid() ? {}
: { color: placeholderTextColor } : { color: placeholderTextColor }
]} ]}
>REGISTER</Text> >REGISTER
</Text>
</TouchableOpacity> </TouchableOpacity>
{this.props.login.failure && <Text style={styles.error}>{this.props.login.error.reason}</Text>} {this.props.login.failure && <Text style={styles.error}>{this.props.login.error.reason}</Text>}
@ -168,11 +175,13 @@ class RegisterView extends React.Component {
render() { render() {
return ( return (
<KeyboardView contentContainerStyle={styles.container}> <KeyboardView contentContainerStyle={styles.container}>
<View style={styles.loginView}> <SafeAreaView>
{this._renderRegister()} <View style={styles.loginView}>
{this._renderUsername()} {this._renderRegister()}
<Spinner visible={this.props.login.isFetching} textContent={'Loading...'} textStyle={{ color: '#FFF' }} /> {this._renderUsername()}
</View> <Spinner visible={this.props.login.isFetching} textContent='Loading...' textStyle={{ color: '#FFF' }} />
</View>
</SafeAreaView>
</KeyboardView> </KeyboardView>
); );
} }

View File

@ -1,6 +1,6 @@
import React from 'react'; import React from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import { Text, View, StyleSheet, Button, InteractionManager } from 'react-native'; import { Text, View, StyleSheet, Button, InteractionManager, SafeAreaView } from 'react-native';
import { ListView } from 'realm/react-native'; import { ListView } from 'realm/react-native';
import { connect } from 'react-redux'; import { connect } from 'react-redux';
import { bindActionCreators } from 'redux'; import { bindActionCreators } from 'redux';
@ -19,6 +19,9 @@ const styles = StyleSheet.create({
flex: 1, flex: 1,
backgroundColor: '#fff' backgroundColor: '#fff'
}, },
safeAreaView: {
flex: 1
},
list: { list: {
flex: 1, flex: 1,
transform: [{ scaleY: -1 }] transform: [{ scaleY: -1 }]
@ -195,16 +198,18 @@ export default class RoomView extends React.Component {
return ( return (
<KeyboardView contentContainerStyle={styles.container} keyboardVerticalOffset={64}> <KeyboardView contentContainerStyle={styles.container} keyboardVerticalOffset={64}>
{this.renderBanner()} {this.renderBanner()}
<ListView <SafeAreaView style={styles.safeAreaView}>
enableEmptySections <ListView
style={styles.list} enableEmptySections
onEndReachedThreshold={10} style={styles.list}
renderFooter={this.renderHeader} onEndReachedThreshold={10}
onEndReached={this.onEndReached} renderFooter={this.renderHeader}
dataSource={this.state.dataSource} onEndReached={this.onEndReached}
renderRow={item => this.renderItem({ item })} dataSource={this.state.dataSource}
initialListSize={10} renderRow={item => this.renderItem({ item })}
/> initialListSize={10}
/>
</SafeAreaView>
{this.renderFooter()} {this.renderFooter()}
</KeyboardView> </KeyboardView>
); );

View File

@ -3,7 +3,7 @@ import { ListView } from 'realm/react-native';
import React from 'react'; import React from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import Icon from 'react-native-vector-icons/Ionicons'; import Icon from 'react-native-vector-icons/Ionicons';
import { View, StyleSheet, TextInput } from 'react-native'; import { View, StyleSheet, TextInput, SafeAreaView } from 'react-native';
import { connect } from 'react-redux'; import { connect } from 'react-redux';
import * as actions from '../actions'; import * as actions from '../actions';
import * as server from '../actions/connect'; import * as server from '../actions/connect';
@ -51,6 +51,10 @@ const styles = StyleSheet.create({
padding: 5, padding: 5,
paddingLeft: 10, paddingLeft: 10,
color: '#aaa' color: '#aaa'
},
safeAreaView: {
flex: 1,
backgroundColor: '#fff'
} }
}); });
@ -90,10 +94,10 @@ export default class RoomsListView extends React.Component {
componentWillMount() { componentWillMount() {
this.data.addListener(this.updateState); this.data.addListener(this.updateState);
this.state = { this.setState({
...this.state, ...this.state,
dataSource: ds.cloneWithRows(this.data) dataSource: ds.cloneWithRows(this.data)
}; });
} }
componentWillReceiveProps(props) { componentWillReceiveProps(props) {
@ -243,7 +247,7 @@ export default class RoomsListView extends React.Component {
key={item._id} key={item._id}
type={item.t} type={item.t}
baseUrl={this.props.Site_Url} baseUrl={this.props.Site_Url}
dateFormat={'MM-DD-YYYY HH:mm:ss'} dateFormat='MM-DD-YYYY HH:mm:ss'
onPress={() => this._onPressItem(item._id, item)} onPress={() => this._onPressItem(item._id, item)}
/> />
) )
@ -271,7 +275,9 @@ export default class RoomsListView extends React.Component {
render = () => ( render = () => (
<View style={styles.container}> <View style={styles.container}>
<Banner /> <Banner />
{this.renderList()} <SafeAreaView style={styles.safeAreaView}>
{this.renderCreateButtons()} {this.renderList()}
{this.renderCreateButtons()}
</SafeAreaView>
</View>) </View>)
} }

View File

@ -3,7 +3,7 @@ import { ListView } from 'realm/react-native';
import React from 'react'; import React from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import Icon from 'react-native-vector-icons/Ionicons'; import Icon from 'react-native-vector-icons/Ionicons';
import { View, StyleSheet, TextInput, Text, TouchableOpacity } from 'react-native'; import { View, StyleSheet, TextInput, Text, TouchableOpacity, SafeAreaView } from 'react-native';
import { connect } from 'react-redux'; import { connect } from 'react-redux';
import * as actions from '../actions'; import * as actions from '../actions';
import * as server from '../actions/connect'; import * as server from '../actions/connect';
@ -20,6 +20,10 @@ const styles = StyleSheet.create({
alignItems: 'stretch', alignItems: 'stretch',
justifyContent: 'center' justifyContent: 'center'
}, },
safeAreaView: {
flex: 1,
backgroundColor: '#FFFFFF'
},
list: { list: {
width: '100%', width: '100%',
backgroundColor: '#FFFFFF' backgroundColor: '#FFFFFF'
@ -84,10 +88,10 @@ export default class RoomsListView extends React.Component {
.filtered('_server.id = $0 AND t = $1', this.props.server, 'd'); .filtered('_server.id = $0 AND t = $1', this.props.server, 'd');
this.state = { this.state = {
dataSource: ds.cloneWithRows(this.data), dataSource: ds.cloneWithRows(this.data),
searching: false, // searching: false,
searchDataSource: [], // searchDataSource: [],
searchText: '', searchText: ''
login: false // login: false
}; };
this.data.addListener(this.updateState); this.data.addListener(this.updateState);
} }
@ -100,8 +104,8 @@ export default class RoomsListView extends React.Component {
onSearchChangeText = (text) => { onSearchChangeText = (text) => {
const searchText = text.trim(); const searchText = text.trim();
this.setState({ this.setState({
searchText: text, searchText: text
searching: searchText !== '' // searching: searchText !== ''
}); });
if (searchText === '') { if (searchText === '') {
return this.setState({ return this.setState({
@ -264,8 +268,10 @@ export default class RoomsListView extends React.Component {
render = () => ( render = () => (
<View style={styles.container}> <View style={styles.container}>
<Banner /> <Banner />
{this.renderList()} <SafeAreaView style={styles.safeAreaView}>
{this.renderCreateButton()} {this.renderList()}
{this.renderCreateButton()}
</SafeAreaView>
</View> </View>
); );
} }

3954
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -5,7 +5,7 @@
"scripts": { "scripts": {
"start": "node node_modules/react-native/local-cli/cli.js start", "start": "node node_modules/react-native/local-cli/cli.js start",
"test": "jest", "test": "jest",
"updateSnapshot": "jest --updateSnapshot", "test-update": "jest --updateSnapshot",
"lint": "eslint .", "lint": "eslint .",
"ci": "eslint . && jest && codecov", "ci": "eslint . && jest && codecov",
"ios": "react-native run-ios", "ios": "react-native run-ios",
@ -16,60 +16,64 @@
"dependencies": { "dependencies": {
"babel-plugin-transform-decorators-legacy": "^1.3.4", "babel-plugin-transform-decorators-legacy": "^1.3.4",
"babel-polyfill": "^6.26.0", "babel-polyfill": "^6.26.0",
"moment": "^2.18.1", "moment": "^2.19.2",
"prop-types": "^15.5.10", "prop-types": "^15.6.0",
"react": "16.0.0-alpha.12", "react": "16.1.0",
"react-emojione": "^3.1.10", "react-emojione": "^3.1.10",
"react-native": "0.46.1", "react-native": "0.50.3",
"react-native-action-button": "^2.7.2", "react-native-action-button": "^2.8.1",
"react-native-animatable": "^1.2.3", "react-native-animatable": "^1.2.4",
"react-native-card-view": "0.0.3", "react-native-card-view": "0.0.3",
"react-native-easy-markdown": "git+https://github.com/lappalj4/react-native-easy-markdown.git", "react-native-easy-markdown": "git+https://github.com/lappalj4/react-native-easy-markdown.git",
"react-native-fetch-blob": "^0.10.8", "react-native-fetch-blob": "^0.10.8",
"react-native-image-picker": "^0.26.4", "react-native-image-picker": "^0.26.7",
"react-native-img-cache": "^1.4.0", "react-native-img-cache": "^1.5.0",
"react-native-keyboard-aware-scroll-view": "^0.3.0", "react-native-keyboard-aware-scroll-view": "^0.4.1",
"react-native-loading-spinner-overlay": "^0.5.2", "react-native-loading-spinner-overlay": "^0.5.2",
"react-native-meteor": "^1.1.0", "react-native-meteor": "^1.2.0",
"react-native-modal": "^3.1.0", "react-native-modal": "^4.1.1",
"react-native-optimized-flatlist": "^1.0.1", "react-native-optimized-flatlist": "^1.0.3",
"react-native-svg": "^5.4.1", "react-native-svg": "^6.0.0",
"react-native-svg-image": "^1.1.4", "react-native-svg-image": "^2.0.1",
"react-native-vector-icons": "^4.3.0", "react-native-vector-icons": "^4.4.2",
"react-native-zeroconf": "^0.8.1", "react-native-zeroconf": "^0.8.3",
"react-navigation": "^1.0.0-beta.11", "react-navigation": "^1.0.0-beta.19",
"react-redux": "^5.0.6", "react-redux": "^5.0.6",
"realm": "^1.10.1", "realm": "^1.10.1",
"redux": "^3.7.2", "redux": "^3.7.2",
"redux-immutable-state-invariant": "^2.0.0", "redux-immutable-state-invariant": "^2.1.0",
"redux-logger": "^3.0.6", "redux-logger": "^3.0.6",
"redux-saga": "^0.15.6", "redux-saga": "^0.16.0",
"regenerator-runtime": "^0.11.0", "regenerator-runtime": "^0.11.0",
"remote-redux-devtools": "^0.5.12", "remote-redux-devtools": "^0.5.12",
"strip-ansi": "^4.0.0" "strip-ansi": "^4.0.0"
}, },
"devDependencies": { "devDependencies": {
"@storybook/addon-storyshots": "^3.2.6", "@storybook/addon-storyshots": "^3.2.15",
"@storybook/react-native": "^3.2.4", "@storybook/react-native": "^3.2.15",
"babel-eslint": "^7.2.3", "babel-eslint": "^8.0.2",
"babel-jest": "20.0.3", "babel-jest": "21.2.0",
"babel-preset-react-native": "2.1.0", "babel-preset-react-native": "4.0.0",
"codecov": "^2.3.0", "codecov": "^3.0.0",
"eslint": "^4.4.0", "eslint": "^4.11.0",
"eslint-config-airbnb": "^15.1.0", "eslint-config-airbnb": "^16.1.0",
"eslint-plugin-import": "^2.7.0", "eslint-plugin-import": "^2.8.0",
"eslint-plugin-jsx-a11y": "^6.0.2", "eslint-plugin-jsx-a11y": "^6.0.2",
"eslint-plugin-react": "^7.1.0", "eslint-plugin-react": "^7.4.0",
"eslint-plugin-react-native": "^3.0.1", "eslint-plugin-react-native": "^3.1.0",
"jest": "20.0.4", "identity-obj-proxy": "^3.0.0",
"jest-cli": "^20.0.4", "jest": "21.2.1",
"react-dom": "16.0.0-alpha.12", "jest-cli": "^21.2.1",
"react-test-renderer": "16.0.0-alpha.12" "react-dom": "16.1.0",
"react-test-renderer": "16.1.0"
}, },
"jest": { "jest": {
"preset": "react-native", "preset": "react-native",
"coverageDirectory": "./coverage/", "coverageDirectory": "./coverage/",
"collectCoverage": true "collectCoverage": true,
"moduleNameMapper": {
".+\\.(css|styl|less|sass|scss|png|jpg|ttf|woff|woff2)$": "identity-obj-proxy"
}
}, },
"engines": { "engines": {
"node": ">=8.x", "node": ">=8.x",

View File

@ -5,9 +5,9 @@ import Avatar from '../../app/containers/Avatar';
export default ( export default (
<ScrollView> <ScrollView>
<Avatar text={'test'} /> <Avatar text='test' />
<Avatar size={40} text={'aa'} /> <Avatar size={40} text='aa' />
<Avatar size={30} text={'bb'} /> <Avatar size={30} text='bb' />
<Avatar text={'test'} borderRadius={2} /> <Avatar text='test' borderRadius={2} />
</ScrollView> </ScrollView>
); );