From e42a146e4f074a3fcaf87f1fe410a0e235664fc0 Mon Sep 17 00:00:00 2001 From: Rodrigo Nascimento <rodrigoknascimento@gmail.com> Date: Mon, 11 Dec 2017 18:37:33 -0200 Subject: [PATCH] Improve acessibility (#135) --- .eslintrc.js | 1 + __tests__/__snapshots__/RoomItem.js.snap | 78 +++------ .../__snapshots__/Storyshots.test.js.snap | 162 +++++++----------- app/containers/Avatar.js | 2 +- app/containers/MessageBox/index.js | 26 ++- app/containers/message/index.js | 4 + app/containers/routes/AuthRoutes.js | 6 +- app/containers/routes/PublicRoutes.js | 6 +- app/presentation/RoomItem.js | 33 ++-- app/views/ForgotPasswordView.js | 4 +- app/views/ListServerView.js | 1 + app/views/LoginView.js | 14 +- app/views/RegisterView.js | 1 + app/views/RoomView/Header/index.js | 17 +- app/views/RoomsListView/Header/index.js | 53 ++++-- app/views/Styles.js | 6 +- package-lock.json | 127 +++++++++----- 17 files changed, 296 insertions(+), 245 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index f7cb61726..d25494a16 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -37,6 +37,7 @@ module.exports = { "jsx-quotes": [2, "prefer-single"], "jsx-a11y/href-no-hash": 0, "import/prefer-default-export": 0, + "camelcase": 0, "no-underscore-dangle": 0, "no-return-assign": 0, "no-param-reassign": 0, diff --git a/__tests__/__snapshots__/RoomItem.js.snap b/__tests__/__snapshots__/RoomItem.js.snap index 3eee42a6f..17d244018 100644 --- a/__tests__/__snapshots__/RoomItem.js.snap +++ b/__tests__/__snapshots__/RoomItem.js.snap @@ -4,8 +4,8 @@ exports[`render channel 1`] = ` <View> <View accessibilityComponentType={undefined} - accessibilityLabel={undefined} - accessibilityTraits={undefined} + accessibilityLabel="general, last message Nov 10" + accessibilityTraits="selected" accessible={true} collapsable={undefined} hitSlop={undefined} @@ -22,10 +22,9 @@ exports[`render channel 1`] = ` Object { "alignItems": "center", "flexDirection": "row", - "height": 56, "opacity": 1, - "paddingLeft": 16, - "paddingRight": 16, + "paddingHorizontal": 16, + "paddingVertical": 10, } } testID={undefined} @@ -98,8 +97,6 @@ exports[`render channel 1`] = ` "color": "#444", "flex": 1, "fontSize": 16, - "height": 16, - "paddingTop": 10, }, undefined, ] @@ -117,7 +114,6 @@ exports[`render channel 1`] = ` "color": "#888", "flex": 1, "fontSize": 10, - "height": 10, } } > @@ -132,8 +128,8 @@ exports[`render no icon 1`] = ` <View> <View accessibilityComponentType={undefined} - accessibilityLabel={undefined} - accessibilityTraits={undefined} + accessibilityLabel="name, last message Nov 10" + accessibilityTraits="selected" accessible={true} collapsable={undefined} hitSlop={undefined} @@ -150,10 +146,9 @@ exports[`render no icon 1`] = ` Object { "alignItems": "center", "flexDirection": "row", - "height": 56, "opacity": 1, - "paddingLeft": 16, - "paddingRight": 16, + "paddingHorizontal": 16, + "paddingVertical": 10, } } testID={undefined} @@ -226,8 +221,6 @@ exports[`render no icon 1`] = ` "color": "#444", "flex": 1, "fontSize": 16, - "height": 16, - "paddingTop": 10, }, undefined, ] @@ -245,7 +238,6 @@ exports[`render no icon 1`] = ` "color": "#888", "flex": 1, "fontSize": 10, - "height": 10, } } > @@ -260,8 +252,8 @@ exports[`render private group 1`] = ` <View> <View accessibilityComponentType={undefined} - accessibilityLabel={undefined} - accessibilityTraits={undefined} + accessibilityLabel="private-group, last message Nov 10" + accessibilityTraits="selected" accessible={true} collapsable={undefined} hitSlop={undefined} @@ -278,10 +270,9 @@ exports[`render private group 1`] = ` Object { "alignItems": "center", "flexDirection": "row", - "height": 56, "opacity": 1, - "paddingLeft": 16, - "paddingRight": 16, + "paddingHorizontal": 16, + "paddingVertical": 10, } } testID={undefined} @@ -354,8 +345,6 @@ exports[`render private group 1`] = ` "color": "#444", "flex": 1, "fontSize": 16, - "height": 16, - "paddingTop": 10, }, undefined, ] @@ -373,7 +362,6 @@ exports[`render private group 1`] = ` "color": "#888", "flex": 1, "fontSize": 10, - "height": 10, } } > @@ -389,8 +377,8 @@ exports[`render unread +999 1`] = ` <View> <View accessibilityComponentType={undefined} - accessibilityLabel={undefined} - accessibilityTraits={undefined} + accessibilityLabel="name, 1000 alerts, last message Nov 10" + accessibilityTraits="selected" accessible={true} collapsable={undefined} hitSlop={undefined} @@ -407,10 +395,9 @@ exports[`render unread +999 1`] = ` Object { "alignItems": "center", "flexDirection": "row", - "height": 56, "opacity": 1, - "paddingLeft": 16, - "paddingRight": 16, + "paddingHorizontal": 16, + "paddingVertical": 10, } } testID={undefined} @@ -436,7 +423,7 @@ exports[`render unread +999 1`] = ` > <Text accessible={true} - allowFontScaling={true} + allowFontScaling={false} ellipsizeMode="tail" style={ Array [ @@ -472,8 +459,6 @@ exports[`render unread +999 1`] = ` "color": "#444", "flex": 1, "fontSize": 16, - "height": 16, - "paddingTop": 10, }, undefined, ] @@ -491,7 +476,6 @@ exports[`render unread +999 1`] = ` "color": "#888", "flex": 1, "fontSize": 10, - "height": 10, } } > @@ -526,8 +510,8 @@ exports[`render unread 1`] = ` <View> <View accessibilityComponentType={undefined} - accessibilityLabel={undefined} - accessibilityTraits={undefined} + accessibilityLabel="name, 1 alert, last message Nov 10" + accessibilityTraits="selected" accessible={true} collapsable={undefined} hitSlop={undefined} @@ -544,10 +528,9 @@ exports[`render unread 1`] = ` Object { "alignItems": "center", "flexDirection": "row", - "height": 56, "opacity": 1, - "paddingLeft": 16, - "paddingRight": 16, + "paddingHorizontal": 16, + "paddingVertical": 10, } } testID={undefined} @@ -573,7 +556,7 @@ exports[`render unread 1`] = ` > <Text accessible={true} - allowFontScaling={true} + allowFontScaling={false} ellipsizeMode="tail" style={ Array [ @@ -609,8 +592,6 @@ exports[`render unread 1`] = ` "color": "#444", "flex": 1, "fontSize": 16, - "height": 16, - "paddingTop": 10, }, undefined, ] @@ -628,7 +609,6 @@ exports[`render unread 1`] = ` "color": "#888", "flex": 1, "fontSize": 10, - "height": 10, } } > @@ -663,8 +643,8 @@ exports[`renders correctly 1`] = ` <View> <View accessibilityComponentType={undefined} - accessibilityLabel={undefined} - accessibilityTraits={undefined} + accessibilityLabel="name, last message Nov 10" + accessibilityTraits="selected" accessible={true} collapsable={undefined} hitSlop={undefined} @@ -681,10 +661,9 @@ exports[`renders correctly 1`] = ` Object { "alignItems": "center", "flexDirection": "row", - "height": 56, "opacity": 1, - "paddingLeft": 16, - "paddingRight": 16, + "paddingHorizontal": 16, + "paddingVertical": 10, } } testID={undefined} @@ -710,7 +689,7 @@ exports[`renders correctly 1`] = ` > <Text accessible={true} - allowFontScaling={true} + allowFontScaling={false} ellipsizeMode="tail" style={ Array [ @@ -746,8 +725,6 @@ exports[`renders correctly 1`] = ` "color": "#444", "flex": 1, "fontSize": 16, - "height": 16, - "paddingTop": 10, }, undefined, ] @@ -765,7 +742,6 @@ exports[`renders correctly 1`] = ` "color": "#888", "flex": 1, "fontSize": 10, - "height": 10, } } > diff --git a/__tests__/__snapshots__/Storyshots.test.js.snap b/__tests__/__snapshots__/Storyshots.test.js.snap index 325faeffe..b51b4c8b9 100644 --- a/__tests__/__snapshots__/Storyshots.test.js.snap +++ b/__tests__/__snapshots__/Storyshots.test.js.snap @@ -23,7 +23,7 @@ exports[`Storyshots Avatar avatar 1`] = ` > <Text accessible={true} - allowFontScaling={true} + allowFontScaling={false} ellipsizeMode="tail" style={ Array [ @@ -59,7 +59,7 @@ exports[`Storyshots Avatar avatar 1`] = ` > <Text accessible={true} - allowFontScaling={true} + allowFontScaling={false} ellipsizeMode="tail" style={ Array [ @@ -95,7 +95,7 @@ exports[`Storyshots Avatar avatar 1`] = ` > <Text accessible={true} - allowFontScaling={true} + allowFontScaling={false} ellipsizeMode="tail" style={ Array [ @@ -131,7 +131,7 @@ exports[`Storyshots Avatar avatar 1`] = ` > <Text accessible={true} - allowFontScaling={true} + allowFontScaling={false} ellipsizeMode="tail" style={ Array [ @@ -156,8 +156,8 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = ` <View> <View accessibilityComponentType={undefined} - accessibilityLabel={undefined} - accessibilityTraits={undefined} + accessibilityLabel="rocket.cat, last message Nov 10" + accessibilityTraits="selected" accessible={true} collapsable={undefined} hitSlop={undefined} @@ -174,10 +174,9 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = ` Object { "alignItems": "center", "flexDirection": "row", - "height": 56, "opacity": 1, - "paddingLeft": 16, - "paddingRight": 16, + "paddingHorizontal": 16, + "paddingVertical": 10, } } testID={undefined} @@ -203,7 +202,7 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = ` > <Text accessible={true} - allowFontScaling={true} + allowFontScaling={false} ellipsizeMode="tail" style={ Array [ @@ -239,8 +238,6 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = ` "color": "#444", "flex": 1, "fontSize": 16, - "height": 16, - "paddingTop": 10, }, undefined, ] @@ -258,7 +255,6 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = ` "color": "#888", "flex": 1, "fontSize": 10, - "height": 10, } } > @@ -268,8 +264,8 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = ` </View> <View accessibilityComponentType={undefined} - accessibilityLabel={undefined} - accessibilityTraits={undefined} + accessibilityLabel="rocket.cat, last message Nov 10" + accessibilityTraits="selected" accessible={true} collapsable={undefined} hitSlop={undefined} @@ -286,10 +282,9 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = ` Object { "alignItems": "center", "flexDirection": "row", - "height": 56, "opacity": 1, - "paddingLeft": 16, - "paddingRight": 16, + "paddingHorizontal": 16, + "paddingVertical": 10, } } testID={undefined} @@ -315,7 +310,7 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = ` > <Text accessible={true} - allowFontScaling={true} + allowFontScaling={false} ellipsizeMode="tail" style={ Array [ @@ -351,8 +346,6 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = ` "color": "#444", "flex": 1, "fontSize": 16, - "height": 16, - "paddingTop": 10, }, Object { "fontWeight": "bold", @@ -372,7 +365,6 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = ` "color": "#888", "flex": 1, "fontSize": 10, - "height": 10, } } > @@ -382,8 +374,8 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = ` </View> <View accessibilityComponentType={undefined} - accessibilityLabel={undefined} - accessibilityTraits={undefined} + accessibilityLabel="rocket.cat, 1 alert, last message Nov 10" + accessibilityTraits="selected" accessible={true} collapsable={undefined} hitSlop={undefined} @@ -400,10 +392,9 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = ` Object { "alignItems": "center", "flexDirection": "row", - "height": 56, "opacity": 1, - "paddingLeft": 16, - "paddingRight": 16, + "paddingHorizontal": 16, + "paddingVertical": 10, } } testID={undefined} @@ -429,7 +420,7 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = ` > <Text accessible={true} - allowFontScaling={true} + allowFontScaling={false} ellipsizeMode="tail" style={ Array [ @@ -465,8 +456,6 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = ` "color": "#444", "flex": 1, "fontSize": 16, - "height": 16, - "paddingTop": 10, }, undefined, ] @@ -484,7 +473,6 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = ` "color": "#888", "flex": 1, "fontSize": 10, - "height": 10, } } > @@ -514,8 +502,8 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = ` </View> <View accessibilityComponentType={undefined} - accessibilityLabel={undefined} - accessibilityTraits={undefined} + accessibilityLabel="Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, 9 alerts, last message Nov 10" + accessibilityTraits="selected" accessible={true} collapsable={undefined} hitSlop={undefined} @@ -532,10 +520,9 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = ` Object { "alignItems": "center", "flexDirection": "row", - "height": 56, "opacity": 1, - "paddingLeft": 16, - "paddingRight": 16, + "paddingHorizontal": 16, + "paddingVertical": 10, } } testID={undefined} @@ -561,7 +548,7 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = ` > <Text accessible={true} - allowFontScaling={true} + allowFontScaling={false} ellipsizeMode="tail" style={ Array [ @@ -597,8 +584,6 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = ` "color": "#444", "flex": 1, "fontSize": 16, - "height": 16, - "paddingTop": 10, }, Object { "fontWeight": "bold", @@ -618,7 +603,6 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = ` "color": "#888", "flex": 1, "fontSize": 10, - "height": 10, } } > @@ -648,8 +632,8 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = ` </View> <View accessibilityComponentType={undefined} - accessibilityLabel={undefined} - accessibilityTraits={undefined} + accessibilityLabel="Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, 99 alerts, last message Nov 10" + accessibilityTraits="selected" accessible={true} collapsable={undefined} hitSlop={undefined} @@ -666,10 +650,9 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = ` Object { "alignItems": "center", "flexDirection": "row", - "height": 56, "opacity": 1, - "paddingLeft": 16, - "paddingRight": 16, + "paddingHorizontal": 16, + "paddingVertical": 10, } } testID={undefined} @@ -695,7 +678,7 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = ` > <Text accessible={true} - allowFontScaling={true} + allowFontScaling={false} ellipsizeMode="tail" style={ Array [ @@ -731,8 +714,6 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = ` "color": "#444", "flex": 1, "fontSize": 16, - "height": 16, - "paddingTop": 10, }, undefined, ] @@ -750,7 +731,6 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = ` "color": "#888", "flex": 1, "fontSize": 10, - "height": 10, } } > @@ -780,8 +760,8 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = ` </View> <View accessibilityComponentType={undefined} - accessibilityLabel={undefined} - accessibilityTraits={undefined} + accessibilityLabel="Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, 100 alerts, last message Nov 10" + accessibilityTraits="selected" accessible={true} collapsable={undefined} hitSlop={undefined} @@ -798,10 +778,9 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = ` Object { "alignItems": "center", "flexDirection": "row", - "height": 56, "opacity": 1, - "paddingLeft": 16, - "paddingRight": 16, + "paddingHorizontal": 16, + "paddingVertical": 10, } } testID={undefined} @@ -827,7 +806,7 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = ` > <Text accessible={true} - allowFontScaling={true} + allowFontScaling={false} ellipsizeMode="tail" style={ Array [ @@ -863,8 +842,6 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = ` "color": "#444", "flex": 1, "fontSize": 16, - "height": 16, - "paddingTop": 10, }, undefined, ] @@ -882,7 +859,6 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = ` "color": "#888", "flex": 1, "fontSize": 10, - "height": 10, } } > @@ -912,8 +888,8 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = ` </View> <View accessibilityComponentType={undefined} - accessibilityLabel={undefined} - accessibilityTraits={undefined} + accessibilityLabel="Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, 100000 alerts, last message Nov 10" + accessibilityTraits="selected" accessible={true} collapsable={undefined} hitSlop={undefined} @@ -930,10 +906,9 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = ` Object { "alignItems": "center", "flexDirection": "row", - "height": 56, "opacity": 1, - "paddingLeft": 16, - "paddingRight": 16, + "paddingHorizontal": 16, + "paddingVertical": 10, } } testID={undefined} @@ -959,7 +934,7 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = ` > <Text accessible={true} - allowFontScaling={true} + allowFontScaling={false} ellipsizeMode="tail" style={ Array [ @@ -995,8 +970,6 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = ` "color": "#444", "flex": 1, "fontSize": 16, - "height": 16, - "paddingTop": 10, }, undefined, ] @@ -1014,7 +987,6 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = ` "color": "#888", "flex": 1, "fontSize": 10, - "height": 10, } } > @@ -1044,8 +1016,8 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = ` </View> <View accessibilityComponentType={undefined} - accessibilityLabel={undefined} - accessibilityTraits={undefined} + accessibilityLabel="Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, 100000 alerts, you were mentioned, last message Nov 10" + accessibilityTraits="selected" accessible={true} collapsable={undefined} hitSlop={undefined} @@ -1062,10 +1034,9 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = ` Object { "alignItems": "center", "flexDirection": "row", - "height": 56, "opacity": 1, - "paddingLeft": 16, - "paddingRight": 16, + "paddingHorizontal": 16, + "paddingVertical": 10, } } testID={undefined} @@ -1091,7 +1062,7 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = ` > <Text accessible={true} - allowFontScaling={true} + allowFontScaling={false} ellipsizeMode="tail" style={ Array [ @@ -1127,8 +1098,6 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = ` "color": "#444", "flex": 1, "fontSize": 16, - "height": 16, - "paddingTop": 10, }, undefined, ] @@ -1146,7 +1115,6 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = ` "color": "#888", "flex": 1, "fontSize": 10, - "height": 10, } } > @@ -1176,8 +1144,8 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = ` </View> <View accessibilityComponentType={undefined} - accessibilityLabel={undefined} - accessibilityTraits={undefined} + accessibilityLabel="W, last message Nov 10" + accessibilityTraits="selected" accessible={true} collapsable={undefined} hitSlop={undefined} @@ -1194,10 +1162,9 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = ` Object { "alignItems": "center", "flexDirection": "row", - "height": 56, "opacity": 1, - "paddingLeft": 16, - "paddingRight": 16, + "paddingHorizontal": 16, + "paddingVertical": 10, } } testID={undefined} @@ -1223,7 +1190,7 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = ` > <Text accessible={true} - allowFontScaling={true} + allowFontScaling={false} ellipsizeMode="tail" style={ Array [ @@ -1259,8 +1226,6 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = ` "color": "#444", "flex": 1, "fontSize": 16, - "height": 16, - "paddingTop": 10, }, undefined, ] @@ -1278,7 +1243,6 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = ` "color": "#888", "flex": 1, "fontSize": 10, - "height": 10, } } > @@ -1288,8 +1252,8 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = ` </View> <View accessibilityComponentType={undefined} - accessibilityLabel={undefined} - accessibilityTraits={undefined} + accessibilityLabel="WW, last message Nov 10" + accessibilityTraits="selected" accessible={true} collapsable={undefined} hitSlop={undefined} @@ -1306,10 +1270,9 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = ` Object { "alignItems": "center", "flexDirection": "row", - "height": 56, "opacity": 1, - "paddingLeft": 16, - "paddingRight": 16, + "paddingHorizontal": 16, + "paddingVertical": 10, } } testID={undefined} @@ -1335,7 +1298,7 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = ` > <Text accessible={true} - allowFontScaling={true} + allowFontScaling={false} ellipsizeMode="tail" style={ Array [ @@ -1371,8 +1334,6 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = ` "color": "#444", "flex": 1, "fontSize": 16, - "height": 16, - "paddingTop": 10, }, undefined, ] @@ -1390,7 +1351,6 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = ` "color": "#888", "flex": 1, "fontSize": 10, - "height": 10, } } > @@ -1400,8 +1360,8 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = ` </View> <View accessibilityComponentType={undefined} - accessibilityLabel={undefined} - accessibilityTraits={undefined} + accessibilityLabel=", last message Nov 10" + accessibilityTraits="selected" accessible={true} collapsable={undefined} hitSlop={undefined} @@ -1418,10 +1378,9 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = ` Object { "alignItems": "center", "flexDirection": "row", - "height": 56, "opacity": 1, - "paddingLeft": 16, - "paddingRight": 16, + "paddingHorizontal": 16, + "paddingVertical": 10, } } testID={undefined} @@ -1447,7 +1406,7 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = ` > <Text accessible={true} - allowFontScaling={true} + allowFontScaling={false} ellipsizeMode="tail" style={ Array [ @@ -1483,8 +1442,6 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = ` "color": "#444", "flex": 1, "fontSize": 16, - "height": 16, - "paddingTop": 10, }, undefined, ] @@ -1502,7 +1459,6 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = ` "color": "#888", "flex": 1, "fontSize": 10, - "height": 10, } } > diff --git a/app/containers/Avatar.js b/app/containers/Avatar.js index 7fe9b5ae6..4ce3e0bca 100644 --- a/app/containers/Avatar.js +++ b/app/containers/Avatar.js @@ -58,7 +58,7 @@ class Avatar extends React.PureComponent { ); return ( <View style={[styles.iconContainer, iconContainerStyle, style]}> - <Text style={[styles.avatarInitials, avatarInitialsStyle]}>{initials}</Text> + <Text style={[styles.avatarInitials, avatarInitialsStyle]} allowFontScaling={false}>{initials}</Text> {image} </View>); } diff --git a/app/containers/MessageBox/index.js b/app/containers/MessageBox/index.js index 1c585a840..6aadc3870 100644 --- a/app/containers/MessageBox/index.js +++ b/app/containers/MessageBox/index.js @@ -54,9 +54,27 @@ export default class MessageBox extends React.Component { get leftButtons() { const { editing } = this.props; if (editing) { - return <Icon style={styles.actionButtons} name='ios-close' onPress={() => this.editCancel()} />; + return (<Icon + style={styles.actionButtons} + name='ios-close' + accessibilityLabel='Cancel editing' + accessibilityTraits='button' + onPress={() => this.editCancel()} + />); } - return !this.state.emoji ? <Icon style={styles.actionButtons} onPress={() => this.openEmoji()} name='md-happy' /> : <Icon onPress={() => this.openEmoji()} style={styles.actionButtons} name='md-sad' />; + return !this.state.emoji ? (<Icon + style={styles.actionButtons} + onPress={() => this.openEmoji()} + accessibilityLabel='Open emoji selector' + accessibilityTraits='button' + name='md-happy' + />) : (<Icon + onPress={() => this.openEmoji()} + style={styles.actionButtons} + accessibilityLabel='Close emoji selector' + accessibilityTraits='button' + name='md-sad' + />); } get rightButtons() { const icons = []; @@ -66,6 +84,8 @@ export default class MessageBox extends React.Component { style={[styles.actionButtons, { color: '#1D74F5' }]} name='send' key='sendIcon' + accessibilityLabel='Send message' + accessibilityTraits='button' onPress={() => this.submit(this.component._lastNativeText)} />); } @@ -73,6 +93,8 @@ export default class MessageBox extends React.Component { style={[styles.actionButtons, { color: '#2F343D', fontSize: 16 }]} name='plus' key='fileIcon' + accessibilityLabel='Message actions' + accessibilityTraits='button' onPress={() => this.addFile()} />); return icons; diff --git a/app/containers/message/index.js b/app/containers/message/index.js index 9f4d8b9d6..f5b35e819 100644 --- a/app/containers/message/index.js +++ b/app/containers/message/index.js @@ -2,6 +2,7 @@ import React from 'react'; import PropTypes from 'prop-types'; import { View, StyleSheet, TouchableOpacity, Text } from 'react-native'; import { connect } from 'react-redux'; +import moment from 'moment'; import { actionsShow } from '../../actions/messages'; import Image from './Image'; @@ -114,11 +115,14 @@ export default class Message extends React.Component { const username = item.alias || item.u.username; const isEditing = message._id === item._id && editing; + const accessibilityLabel = `Message from ${ item.alias || item.u.username } at ${ moment(item.ts).format(this.props.Message_TimeFormat) }, ${ this.props.item.msg }`; + return ( <TouchableOpacity onLongPress={() => this.onLongPress()} disabled={this.isDeleted()} style={[styles.message, extraStyle, isEditing ? styles.editing : null]} + accessibilityLabel={accessibilityLabel} > <Avatar style={{ marginRight: 10 }} diff --git a/app/containers/routes/AuthRoutes.js b/app/containers/routes/AuthRoutes.js index a5ab0837d..eaf7e4452 100644 --- a/app/containers/routes/AuthRoutes.js +++ b/app/containers/routes/AuthRoutes.js @@ -28,7 +28,11 @@ const AuthRoutes = StackNavigator( } } }, - {} + { + navigationOptions: { + headerTitleAllowFontScaling: false + } + } ); const Routes = DrawerNavigator( diff --git a/app/containers/routes/PublicRoutes.js b/app/containers/routes/PublicRoutes.js index 41c267173..50ffc4da3 100644 --- a/app/containers/routes/PublicRoutes.js +++ b/app/containers/routes/PublicRoutes.js @@ -23,6 +23,8 @@ const PublicRoutes = StackNavigator( <TouchableOpacity onPress={() => navigation.navigate('AddServer')} style={{ width: 50, alignItems: 'center' }} + accessibilityLabel='Add server' + accessibilityTraits='button' > <Icon name='plus' size={16} /> </TouchableOpacity> @@ -68,7 +70,9 @@ const PublicRoutes = StackNavigator( } }, { - + navigationOptions: { + headerTitleAllowFontScaling: false + } } ); diff --git a/app/presentation/RoomItem.js b/app/presentation/RoomItem.js index 3cf02dd65..573e79f7c 100644 --- a/app/presentation/RoomItem.js +++ b/app/presentation/RoomItem.js @@ -6,11 +6,9 @@ import Avatar from '../containers/Avatar'; const styles = StyleSheet.create({ container: { - // flex: 1, flexDirection: 'row', - paddingLeft: 16, - paddingRight: 16, - height: 56, + paddingHorizontal: 16, + paddingVertical: 10, alignItems: 'center' }, number: { @@ -30,10 +28,8 @@ const styles = StyleSheet.create({ marginRight: 4 }, roomName: { - paddingTop: 10, flex: 1, fontSize: 16, - height: 16, color: '#444' }, alert: { @@ -45,7 +41,7 @@ const styles = StyleSheet.create({ update: { flex: 1, fontSize: 10, - height: 10, + // height: 10, color: '#888' } }); @@ -69,8 +65,8 @@ export default class RoomItem extends React.PureComponent { } formatDate = date => moment(date).calendar(null, { - lastDay: 'dddd', - sameDay: 'HH:mm', + lastDay: '[Yesterday]', + sameDay: 'h:mm A', lastWeek: 'dddd', sameElse: 'MMM D' }) @@ -100,12 +96,27 @@ export default class RoomItem extends React.PureComponent { favorite, alert, unread, userMentions, name, _updatedAt } = this.props; + const date = this.formatDate(_updatedAt); + + let accessibilityLabel = name; + if (unread === 1) { + accessibilityLabel += `, ${ unread } alert`; + } else if (unread > 1) { + accessibilityLabel += `, ${ unread } alerts`; + } + + if (userMentions > 0) { + accessibilityLabel += ', you were mentioned'; + } + + accessibilityLabel += `, last message ${ date }`; + return ( - <TouchableOpacity onPress={this.props.onPress} style={[styles.container, favorite && styles.favorite]}> + <TouchableOpacity onPress={this.props.onPress} style={[styles.container, favorite && styles.favorite]} accessibilityLabel={accessibilityLabel} accessibilityTraits='selected'> {this.icon} <View style={styles.roomNameView}> <Text style={[styles.roomName, alert && styles.alert]} ellipsizeMode='tail' numberOfLines={1}>{ name }</Text> - {_updatedAt ? <Text style={styles.update} ellipsizeMode='tail' numberOfLines={1}>{ this.formatDate(_updatedAt) }</Text> : null} + {_updatedAt ? <Text style={styles.update} ellipsizeMode='tail' numberOfLines={1}>{ date }</Text> : null} </View> {this.renderNumber(unread, userMentions)} </TouchableOpacity> diff --git a/app/views/ForgotPasswordView.js b/app/views/ForgotPasswordView.js index 92f28cbce..2f40ee9eb 100644 --- a/app/views/ForgotPasswordView.js +++ b/app/views/ForgotPasswordView.js @@ -88,11 +88,11 @@ class ForgotPasswordView extends React.Component { /> <TouchableOpacity style={styles.buttonContainer} onPress={this.resetPassword}> - <Text style={styles.button}>RESET PASSWORD</Text> + <Text style={styles.button} accessibilityTraits='button'>RESET PASSWORD</Text> </TouchableOpacity> <TouchableOpacity style={styles.buttonContainer} onPress={this.backLogin}> - <Text style={styles.button}>BACK TO LOGIN</Text> + <Text style={styles.button} accessibilityTraits='button'>BACK TO LOGIN</Text> </TouchableOpacity> {this.props.login.failure && <Text style={styles.error}>{this.props.login.error.reason}</Text>} diff --git a/app/views/ListServerView.js b/app/views/ListServerView.js index 90e4d99e4..30bf7ea43 100644 --- a/app/views/ListServerView.js +++ b/app/views/ListServerView.js @@ -158,6 +158,7 @@ export default class ListServerView extends React.Component { <Text style={[styles.listItem]} onPress={() => { this.onPressItem(item); }} + adjustsFontSizeToFit > {item.id} </Text> diff --git a/app/views/LoginView.js b/app/views/LoginView.js index ccff7a763..f1f213ca8 100644 --- a/app/views/LoginView.js +++ b/app/views/LoginView.js @@ -3,7 +3,7 @@ import React from 'react'; import Spinner from 'react-native-loading-spinner-overlay'; import PropTypes from 'prop-types'; -import { Keyboard, Text, TextInput, View, TouchableOpacity, SafeAreaView } from 'react-native'; +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'; @@ -88,7 +88,7 @@ class LoginView extends React.Component { contentContainerStyle={styles.container} keyboardVerticalOffset={128} > - <View style={styles.loginView}> + <ScrollView style={styles.loginView}> <SafeAreaView> <View style={styles.formContainer}> <TextInput @@ -121,21 +121,21 @@ class LoginView extends React.Component { style={styles.buttonContainer} onPress={this.submit} > - <Text style={styles.button}>LOGIN</Text> + <Text style={styles.button} accessibilityTraits='button'>LOGIN</Text> </TouchableOpacity> <View style={styles.loginSecondaryButtons}> <TouchableOpacity style={styles.buttonContainer_inverted} onPress={this.register}> - <Text style={styles.button_inverted}>REGISTER</Text> + <Text style={styles.button_inverted} accessibilityTraits='button'>REGISTER</Text> </TouchableOpacity> <TouchableOpacity style={styles.buttonContainer_inverted} onPress={this.forgotPassword}> - <Text style={styles.button_inverted}>FORGOT MY PASSWORD</Text> + <Text style={styles.button_inverted} accessibilityTraits='button'>FORGOT MY PASSWORD</Text> </TouchableOpacity> </View> <TouchableOpacity> - <Text style={styles.loginTermsText}> + <Text style={styles.loginTermsText} accessibilityTraits='button'> By proceeding you are agreeing to our <Text style={styles.link} onPress={this.termsService}> Terms of Service </Text> and @@ -146,7 +146,7 @@ class LoginView extends React.Component { </View> <Spinner visible={this.props.login.isFetching} textContent='Loading...' textStyle={{ color: '#FFF' }} /> </SafeAreaView> - </View> + </ScrollView> </KeyboardView> ); } diff --git a/app/views/RegisterView.js b/app/views/RegisterView.js index ed2625869..7f97e48d7 100644 --- a/app/views/RegisterView.js +++ b/app/views/RegisterView.js @@ -133,6 +133,7 @@ class RegisterView extends React.Component { style={[styles.button, this._valid() ? {} : { color: placeholderTextColor } ]} + accessibilityTraits='button' >REGISTER </Text> </TouchableOpacity> diff --git a/app/views/RoomView/Header/index.js b/app/views/RoomView/Header/index.js index 85485ac61..14492449a 100644 --- a/app/views/RoomView/Header/index.js +++ b/app/views/RoomView/Header/index.js @@ -57,14 +57,21 @@ export default class extends React.Component { isDirect = () => this.state.room && this.state.room.t === 'd'; - renderLeft = () => <HeaderBackButton onPress={() => this.props.navigation.goBack(null)} tintColor='#292E35' />; + renderLeft = () => <HeaderBackButton onPress={() => this.props.navigation.goBack(null)} tintColor='#292E35' title='Back' titleStyle={{ display: 'none' }} />; renderTitle() { if (!this.state.roomName) { return null; } + + let accessibilityLabel = this.state.roomName; + + if (this.isDirect()) { + accessibilityLabel += `, ${ this.getUserStatusLabel() }`; + } + return ( - <TouchableOpacity style={styles.titleContainer}> + <TouchableOpacity style={styles.titleContainer} accessibilityLabel={accessibilityLabel} accessibilityTraits='header'> {this.isDirect() ? <View style={[styles.status, { backgroundColor: STATUS_COLORS[this.getUserStatus()] }]} /> : null @@ -77,9 +84,9 @@ export default class extends React.Component { type={this.state.room.t} /> <View style={{ flexDirection: 'column' }}> - <Text style={styles.title}>{this.state.roomName}</Text> + <Text style={styles.title} allowFontScaling={false}>{this.state.roomName}</Text> {this.isDirect() ? - <Text style={styles.userStatus}>{this.getUserStatusLabel()}</Text> + <Text style={styles.userStatus} allowFontScaling={false}>{this.getUserStatusLabel()}</Text> : null } </View> @@ -92,6 +99,8 @@ export default class extends React.Component { <TouchableOpacity style={styles.headerButton} onPress={() => {}} + accessibilityLabel='Room actions' + accessibilityTraits='button' > <Icon name={Platform.OS === 'ios' ? 'ios-more' : 'md-more'} diff --git a/app/views/RoomsListView/Header/index.js b/app/views/RoomsListView/Header/index.js index 302fce5fe..1e5f1a4ed 100644 --- a/app/views/RoomsListView/Header/index.js +++ b/app/views/RoomsListView/Header/index.js @@ -56,6 +56,15 @@ export default class extends React.Component { }); } + getUserStatus() { + return this.props.user.status || 'offline'; + } + + getUserStatusLabel() { + const status = this.getUserStatus(); + return status.charAt(0).toUpperCase() + status.slice(1); + } + showModal() { this.setState({ isModalVisible: true }); } @@ -69,8 +78,12 @@ export default class extends React.Component { } renderLeft() { + if (this.state.searching) { + return null; + } + return ( - <View style={styles.left}> + <View style={styles.left} accessible accessibilityLabel="Server's list" accessibilityTraits='button'> <TouchableOpacity style={styles.headerButton} onPress={() => this.props.navigation.navigate('DrawerOpen')} @@ -85,30 +98,43 @@ export default class extends React.Component { } renderTitle() { + if (this.state.searching) { + return null; + } + if (!this.props.user.username) { return null; } + + const accessibilityLabel = `${ this.props.user.username }, ${ this.getUserStatusLabel() }, double tap to change status`; + return ( - <TouchableOpacity style={styles.titleContainer} onPress={() => this.showModal()}> - <View style={[styles.status, { backgroundColor: STATUS_COLORS[this.props.user.status || 'offline'] }]} /> + <TouchableOpacity style={styles.titleContainer} onPress={() => this.showModal()} accessibilityLabel={accessibilityLabel} accessibilityTraits='header'> + <View style={[styles.status, { backgroundColor: STATUS_COLORS[this.getUserStatus()] }]} /> <Avatar text={this.props.user.username} size={24} style={{ marginRight: 5 }} baseUrl={this.props.baseUrl} /> - <Text style={styles.title}>{this.props.user.username}</Text> + <Text accessible={false} style={styles.title} ellipsizeMode='tail' numberOfLines={1} allowFontScaling={false}>{this.props.user.username}</Text> </TouchableOpacity> ); } renderRight() { + if (this.state.searching) { + return null; + } + return ( <View style={styles.right}> {Platform.OS === 'android' ? <TouchableOpacity style={styles.headerButton} onPress={() => this.onPressSearchButton()} + accessibilityLabel='Search' + accessibilityTraits='button' > <Icon name='md-search' @@ -121,6 +147,8 @@ export default class extends React.Component { <TouchableOpacity style={styles.headerButton} onPress={() => this.createChannel()} + accessibilityLabel='Create channel' + accessibilityTraits='button' > <Icon name='ios-add' @@ -149,19 +177,6 @@ export default class extends React.Component { ); }; - renderHeader() { - if (this.state.searching) { - return null; - } - return ( - <View style={styles.header}> - {this.renderLeft()} - {this.renderTitle()} - {this.renderRight()} - </View> - ); - } - renderSearch() { if (!this.state.searching) { return null; @@ -188,7 +203,9 @@ export default class extends React.Component { render() { return ( <View style={styles.header}> - {this.renderHeader()} + {this.renderLeft()} + {this.renderTitle()} + {this.renderRight()} {this.renderSearch()} <Modal isVisible={this.state.isModalVisible} diff --git a/app/views/Styles.js b/app/views/Styles.js index 1bf8d7d1f..728b9e7c4 100644 --- a/app/views/Styles.js +++ b/app/views/Styles.js @@ -73,7 +73,7 @@ export default StyleSheet.create({ color: 'white' }, input_white: { - height: 45, + paddingVertical: 12, marginBottom: 20, borderRadius: 2, // padding: 14, @@ -154,7 +154,7 @@ export default StyleSheet.create({ }, loginSecondaryButtons: { flexDirection: 'row', - justifyContent: 'space-around', - alignItems: 'center' + flexWrap: 'wrap', + justifyContent: 'space-around' } }); diff --git a/package-lock.json b/package-lock.json index 6f0fe7b99..0b0350b4b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4545,9 +4545,9 @@ } }, "eslint": { - "version": "4.11.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.11.0.tgz", - "integrity": "sha512-UWbhQpaKlm8h5x/VLwm0S1kheMrDj8jPwhnBMjr/Dlo3qqT7MvcN/UfKAR3E1N4lr4YNtOvS4m3hwsrVc/ky7g==", + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.13.0.tgz", + "integrity": "sha512-1l2aVrEz9yiWsEQdL3XZEzTovHQJFZaTeIhOOilKQRiYNn1dVALoYOtn06iPoxhEwFukBPX4Ff8WoGD4r/7D2A==", "dev": true, "requires": { "ajv": "5.3.0", @@ -4556,7 +4556,7 @@ "concat-stream": "1.6.0", "cross-spawn": "5.1.0", "debug": "3.1.0", - "doctrine": "2.0.0", + "doctrine": "2.0.2", "eslint-scope": "3.7.1", "espree": "3.5.2", "esquery": "1.0.0", @@ -4565,7 +4565,7 @@ "file-entry-cache": "2.0.0", "functional-red-black-tree": "1.0.1", "glob": "7.1.2", - "globals": "9.18.0", + "globals": "11.1.0", "ignore": "3.3.7", "imurmurhash": "0.1.4", "inquirer": "3.3.0", @@ -4618,12 +4618,27 @@ "ms": "2.0.0" } }, + "doctrine": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.0.2.tgz", + "integrity": "sha512-y0tm5Pq6ywp3qSTZ1vPgVdAnbDEoeoc5wlOHXoY1c4Wug/a7JvqHIl7BTvwodaHmejWkK/9dSb3sCYfyo/om8A==", + "dev": true, + "requires": { + "esutils": "2.0.2" + } + }, "esprima": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", "dev": true }, + "globals": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.1.0.tgz", + "integrity": "sha512-uEuWt9mqTlPDwSqi+sHjD4nWU/1N+q0fiWI9T1mZpD2UENqX20CFD5T/ziLZvztPaBKl7ZylUi1q6Qfm7E2CiQ==", + "dev": true + }, "js-yaml": { "version": "3.10.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.10.0.tgz", @@ -4765,9 +4780,9 @@ } }, "eslint-plugin-react": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.4.0.tgz", - "integrity": "sha512-tvjU9u3VqmW2vVuYnE8Qptq+6ji4JltjOjJ9u7VAOxVYkUkyBZWRvNYKbDv5fN+L6wiA+4we9+qQahZ0m63XEA==", + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.5.1.tgz", + "integrity": "sha512-YGSjB9Qu6QbVTroUZi66pYky3DfoIPLdHQ/wmrBGyBRnwxQsBXAov9j2rpXt/55i8nyMv6IRWJv2s4d4YnduzQ==", "dev": true, "requires": { "doctrine": "2.0.0", @@ -4788,9 +4803,9 @@ } }, "eslint-plugin-react-native": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-native/-/eslint-plugin-react-native-3.1.0.tgz", - "integrity": "sha1-A/lflZv/eoJntUcsuH0BDjRvciQ=", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-native/-/eslint-plugin-react-native-3.2.0.tgz", + "integrity": "sha512-b/VrvsLM17FCul+RTXi4owZaP/u3Xo0IWv2ZTxgGGAyaNKscGbTvvoV/MxhYxRSuDmG7uAM9l7DN6wTGyC2U+Q==", "dev": true }, "eslint-restricted-globals": { @@ -8389,6 +8404,11 @@ "resolved": "https://registry.npmjs.org/keycode/-/keycode-2.1.9.tgz", "integrity": "sha1-lkojxU5IiUBbSGGlyfBIDUUUHfo=" }, + "keymirror": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/keymirror/-/keymirror-0.1.1.tgz", + "integrity": "sha1-kYiJ6hP40KQufFVyUO7nE63JXDU=" + }, "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", @@ -9826,9 +9846,9 @@ "integrity": "sha1-zz2C0YwMp/RY2PKiQIF7PcflSgE=" }, "moment": { - "version": "2.19.2", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.19.2.tgz", - "integrity": "sha512-Rf6jiHPEfxp9+dlzxPTmRHbvoFXsh2L/U8hOupUMpnuecHQmI6cF6lUbJl3QqKPko1u6ujO+FxtcajLVfLpAtA==" + "version": "2.19.4", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.19.4.tgz", + "integrity": "sha512-1xFTAknSLfc47DIxHDUbnJWC+UwgWxATmymaxIPQpmMh7LBm7ZbwVEsuushqwL2GYZU0jie4xO+TK44hJPjNSQ==" }, "morgan": { "version": "1.6.1", @@ -12038,9 +12058,9 @@ } }, "react": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/react/-/react-16.1.1.tgz", - "integrity": "sha512-FQfiFfk2z2Fk87OngNJHT05KyC9DOVn8LPeB7ZX+9u5+yU1JK6o5ozRlU3PeOMr0IFkWNvgn9jU8/IhRxR1F0g==", + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-16.2.0.tgz", + "integrity": "sha512-ZmIomM7EE1DvPEnSFAHZn9Vs9zJl5A9H7el0EGTE6ZbW9FKe/14IYAlPbC8iH25YarEQxZL+E8VW7Mi7kfQrDQ==", "requires": { "fbjs": "0.8.16", "loose-envify": "1.3.1", @@ -12084,9 +12104,9 @@ } }, "react-dom": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.1.1.tgz", - "integrity": "sha512-q06jiwST8SEPAMIEkAsu7BgynEZtqF87VrTc70XsW7nxVhWEu2Y4MF5UfxxHQO/mNtQHQWP0YcFxmwm9oMrMaQ==", + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.2.0.tgz", + "integrity": "sha512-zpGAdwHVn9K0091d+hr+R0qrjoJ84cIBFL2uU60KvWBPfZ7LPSrfqviTxGHWN0sjPZb2hxWzMexwrvJdKePvjg==", "dev": true, "requires": { "fbjs": "0.8.16", @@ -12161,9 +12181,9 @@ } }, "react-native": { - "version": "0.50.3", - "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.50.3.tgz", - "integrity": "sha1-kSgr1TVsx9eUlpzcRDzHZDibmvQ=", + "version": "0.50.4", + "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.50.4.tgz", + "integrity": "sha1-GU9dpJOQh7Os7nEqUDR19JQtyn4=", "requires": { "absolute-path": "0.0.0", "art": "0.10.1", @@ -12232,9 +12252,9 @@ } }, "react-native-action-button": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/react-native-action-button/-/react-native-action-button-2.8.1.tgz", - "integrity": "sha512-u5DWS2ZorgRGNNhh3H8+PKq0KHQqOIk6jr/w/qGaTrPpX4Fvg0t5WsqlSjDa4J6xrgWJ712OX3rhc56wLLSI3g==", + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/react-native-action-button/-/react-native-action-button-2.8.3.tgz", + "integrity": "sha512-Nh8EOQ8IxZPLTc2qHC8FkfbbCI4rmo9nOOs+GV7bLY4NjCGvQ/Nr92VEXIyjyeMhek+05KMKDOusF3ifTub5vQ==", "requires": { "prop-types": "15.6.0" } @@ -12252,11 +12272,6 @@ "prop-types": "15.6.0" } }, - "react-native-card-view": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/react-native-card-view/-/react-native-card-view-0.0.3.tgz", - "integrity": "sha1-jbmsSj8B0I+L2feTQwgth/3wmQc=" - }, "react-native-compat": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/react-native-compat/-/react-native-compat-1.0.0.tgz", @@ -12406,6 +12421,14 @@ "resolved": "https://registry.npmjs.org/react-native-push-notification/-/react-native-push-notification-3.0.1.tgz", "integrity": "sha1-DiPbMC0Du0o/KNwHLcryqaEXjtg=" }, + "react-native-slider": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/react-native-slider/-/react-native-slider-0.11.0.tgz", + "integrity": "sha512-jV9K87eu9uWr0uJIyrSpBLnCKvVlOySC2wynq9TFCdV9oGgjt7Niq8Q1A8R8v+5GHsuBw/s8vEj1AAkkUi+u+w==", + "requires": { + "prop-types": "15.6.0" + } + }, "react-native-svg": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/react-native-svg/-/react-native-svg-6.0.0.tgz", @@ -12464,6 +12487,23 @@ } } }, + "react-native-video": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/react-native-video/-/react-native-video-2.0.0.tgz", + "integrity": "sha1-8z+m+35+PJOrV4eUTO/Vi/c1WGc=", + "requires": { + "keymirror": "0.1.1", + "prop-types": "15.6.0" + } + }, + "react-native-video-controls": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/react-native-video-controls/-/react-native-video-controls-2.0.0.tgz", + "integrity": "sha512-dejwvoR0mL3DQtP6BSO/tlGaUzOXfGlj3kWkBJm7q3pTGsHWDGJmEtpwVhyVtJBg95O8Fb5Nz15JwRqsjonagg==", + "requires": { + "lodash": "4.17.4" + } + }, "react-native-zeroconf": { "version": "0.8.3", "resolved": "https://registry.npmjs.org/react-native-zeroconf/-/react-native-zeroconf-0.8.3.tgz", @@ -12560,9 +12600,9 @@ } }, "react-test-renderer": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-16.1.1.tgz", - "integrity": "sha512-RV0Krfuc6wDnlv5C/BJzW3e2/s7ZTMZ25gfVjdXdT3hhXNDCQlZucP83HMD8mVh1XScGx9hRaXnIRJ7mE+2N6A==", + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-16.2.0.tgz", + "integrity": "sha512-Kd4gJFtpNziR9ElOE/C23LeflKLZPRpNQYWP3nQBY43SJ5a+xyEGSeMrm2zxNKXcnCbBS/q1UpD9gqd5Dv+rew==", "dev": true, "requires": { "fbjs": "0.8.16", @@ -12718,14 +12758,14 @@ } }, "realm": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/realm/-/realm-2.0.7.tgz", - "integrity": "sha1-1SbWxzksVklafHgASDwG61hcbdY=", + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/realm/-/realm-2.0.13.tgz", + "integrity": "sha1-rE9x23J2OfZ2NjXV0wFLjGPACZo=", "requires": { "command-line-args": "4.0.7", "decompress": "4.2.0", "decompress-tarxz": "2.1.1", - "fs-extra": "4.0.2", + "fs-extra": "4.0.3", "ini": "1.3.4", "nan": "2.7.0", "node-fetch": "1.7.3", @@ -12739,9 +12779,9 @@ }, "dependencies": { "fs-extra": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.2.tgz", - "integrity": "sha1-+RcExT0bRh+JNFKwwwfZmXZHq2s=", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", + "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", "requires": { "graceful-fs": "4.1.11", "jsonfile": "4.0.0", @@ -12823,6 +12863,11 @@ "symbol-observable": "1.0.4" } }, + "redux-enhancer-react-native-appstate": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/redux-enhancer-react-native-appstate/-/redux-enhancer-react-native-appstate-0.3.0.tgz", + "integrity": "sha1-+5Fwk3WM4J9DLNCytWPRNh6PV28=" + }, "redux-immutable-state-invariant": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/redux-immutable-state-invariant/-/redux-immutable-state-invariant-2.1.0.tgz", -- GitLab