소스 검색

added municipalities field, fixed scroll form

부모
커밋
5f23dfa828

+ 26
- 5
Navigation.js 파일 보기

@@ -2,6 +2,8 @@ import React from "react";
2 2
 import { createBottomTabNavigator } from "@react-navigation/bottom-tabs";
3 3
 import { createNativeStackNavigator } from "@react-navigation/native-stack";
4 4
 import { NavigationContainer } from "@react-navigation/native";
5
+import { Entypo } from '@expo/vector-icons'; 
6
+import { Ionicons } from '@expo/vector-icons';
5 7
 
6 8
 // Import the screens to be used in the navigator
7 9
 import Denuncias from "./screens/Denuncias";
@@ -10,6 +12,7 @@ import Analisis from "./screens/Analisis";
10 12
 import Formulario from "./screens/Formulario";
11 13
 import Lista from "./screens/Lista";
12 14
 import Drna from "./screens/Drna";
15
+import { TabBarIOSItem } from "react-native";
13 16
 
14 17
 const StackDenuncias = createNativeStackNavigator();
15 18
 
@@ -28,16 +31,34 @@ const Tab = createBottomTabNavigator();
28 31
 
29 32
 function Tabs() {
30 33
   return (
31
-    <Tab.Navigator initialRouteName="Denuncias">
34
+    <Tab.Navigator initialRouteName="DenunciasIni">
32 35
       <Tab.Screen
33 36
         name="Denuncias"
34 37
         component={Stacks}
35 38
         options={{
36
-          headerShown: false,
37
-        }}
39
+                tabBarIcon: ({}) => (
40
+                    <Entypo name="megaphone" size={24} color="black" />
41
+                ),
42
+                 headerShown:false
43
+            }} 
38 44
       />
39
-      <Tab.Screen name="Derechos" component={Derechos} />
40
-      <Tab.Screen name="Analisis" component={Analisis} />
45
+      <Tab.Screen 
46
+      name="Derechos" 
47
+      component={Derechos} 
48
+      options={{
49
+      tabBarIcon: ({}) => (
50
+                    <Ionicons name="ios-newspaper-outline" size={24} color="black" />
51
+                )
52
+            }}
53
+      />
54
+      <Tab.Screen 
55
+      name="Analisis" 
56
+      component={Analisis} 
57
+      options={{
58
+                tabBarIcon: ({}) => (
59
+                    <Ionicons name="earth" size={24} color="black" />
60
+                )
61
+            }}   />
41 62
     </Tab.Navigator>
42 63
   );
43 64
 }

+ 36
- 0
package-lock.json 파일 보기

@@ -18,6 +18,7 @@
18 18
         "react-native-custom-navigation-tabs": "^3.0.1",
19 19
         "react-native-dropdown-select-list": "^2.0.2",
20 20
         "react-native-gesture-handler": "~2.8.0",
21
+        "react-native-keyboard-aware-scroll-view": "^0.9.5",
21 22
         "react-native-safe-area-context": "4.4.1",
22 23
         "react-native-screens": "~3.18.0"
23 24
       },
@@ -10285,6 +10286,26 @@
10285 10286
       "resolved": "https://registry.npmjs.org/react-native-gradle-plugin/-/react-native-gradle-plugin-0.70.3.tgz",
10286 10287
       "integrity": "sha512-oOanj84fJEXUg9FoEAQomA8ISG+DVIrTZ3qF7m69VQUJyOGYyDZmPqKcjvRku4KXlEH6hWO9i4ACLzNBh8gC0A=="
10287 10288
     },
10289
+    "node_modules/react-native-iphone-x-helper": {
10290
+      "version": "1.3.1",
10291
+      "resolved": "https://registry.npmjs.org/react-native-iphone-x-helper/-/react-native-iphone-x-helper-1.3.1.tgz",
10292
+      "integrity": "sha512-HOf0jzRnq2/aFUcdCJ9w9JGzN3gdEg0zFE4FyYlp4jtidqU03D5X7ZegGKfT1EWteR0gPBGp9ye5T5FvSWi9Yg==",
10293
+      "peerDependencies": {
10294
+        "react-native": ">=0.42.0"
10295
+      }
10296
+    },
10297
+    "node_modules/react-native-keyboard-aware-scroll-view": {
10298
+      "version": "0.9.5",
10299
+      "resolved": "https://registry.npmjs.org/react-native-keyboard-aware-scroll-view/-/react-native-keyboard-aware-scroll-view-0.9.5.tgz",
10300
+      "integrity": "sha512-XwfRn+T/qBH9WjTWIBiJD2hPWg0yJvtaEw6RtPCa5/PYHabzBaWxYBOl0usXN/368BL1XktnZPh8C2lmTpOREA==",
10301
+      "dependencies": {
10302
+        "prop-types": "^15.6.2",
10303
+        "react-native-iphone-x-helper": "^1.0.3"
10304
+      },
10305
+      "peerDependencies": {
10306
+        "react-native": ">=0.48.4"
10307
+      }
10308
+    },
10288 10309
     "node_modules/react-native-pose": {
10289 10310
       "version": "0.9.1",
10290 10311
       "resolved": "https://registry.npmjs.org/react-native-pose/-/react-native-pose-0.9.1.tgz",
@@ -20364,6 +20385,21 @@
20364 20385
       "resolved": "https://registry.npmjs.org/react-native-gradle-plugin/-/react-native-gradle-plugin-0.70.3.tgz",
20365 20386
       "integrity": "sha512-oOanj84fJEXUg9FoEAQomA8ISG+DVIrTZ3qF7m69VQUJyOGYyDZmPqKcjvRku4KXlEH6hWO9i4ACLzNBh8gC0A=="
20366 20387
     },
20388
+    "react-native-iphone-x-helper": {
20389
+      "version": "1.3.1",
20390
+      "resolved": "https://registry.npmjs.org/react-native-iphone-x-helper/-/react-native-iphone-x-helper-1.3.1.tgz",
20391
+      "integrity": "sha512-HOf0jzRnq2/aFUcdCJ9w9JGzN3gdEg0zFE4FyYlp4jtidqU03D5X7ZegGKfT1EWteR0gPBGp9ye5T5FvSWi9Yg==",
20392
+      "requires": {}
20393
+    },
20394
+    "react-native-keyboard-aware-scroll-view": {
20395
+      "version": "0.9.5",
20396
+      "resolved": "https://registry.npmjs.org/react-native-keyboard-aware-scroll-view/-/react-native-keyboard-aware-scroll-view-0.9.5.tgz",
20397
+      "integrity": "sha512-XwfRn+T/qBH9WjTWIBiJD2hPWg0yJvtaEw6RtPCa5/PYHabzBaWxYBOl0usXN/368BL1XktnZPh8C2lmTpOREA==",
20398
+      "requires": {
20399
+        "prop-types": "^15.6.2",
20400
+        "react-native-iphone-x-helper": "^1.0.3"
20401
+      }
20402
+    },
20367 20403
     "react-native-pose": {
20368 20404
       "version": "0.9.1",
20369 20405
       "resolved": "https://registry.npmjs.org/react-native-pose/-/react-native-pose-0.9.1.tgz",

+ 1
- 0
package.json 파일 보기

@@ -19,6 +19,7 @@
19 19
     "react-native-custom-navigation-tabs": "^3.0.1",
20 20
     "react-native-dropdown-select-list": "^2.0.2",
21 21
     "react-native-gesture-handler": "~2.8.0",
22
+    "react-native-keyboard-aware-scroll-view": "^0.9.5",
22 23
     "react-native-safe-area-context": "4.4.1",
23 24
     "react-native-screens": "~3.18.0"
24 25
   },

+ 1
- 0
screens/Analisis.js 파일 보기

@@ -3,6 +3,7 @@ import {
3 3
   View,
4 4
   Text,
5 5
   StyleSheet,
6
+  Linking
6 7
 } from "react-native";
7 8
 
8 9
 // TOOL DESCRIPTIONS

+ 17
- 15
screens/Derechos.js 파일 보기

@@ -8,27 +8,28 @@ import {
8 8
   Pressable,
9 9
 } from "react-native";
10 10
 import { FlatList, TouchableHighlight } from "react-native-gesture-handler";
11
-import { ButtonLay } from "./Button.js";
12
-import Leyes from "./leyes.json";
13
-import LeyesPR from "./leyesPR.json";
14
-import DerechosAmb from "./derechos.json";
11
+import { ButtonLay } from "./components/Button.js";
12
+import Leyes from "./data/leyes.json";
13
+import LeyesPR from "./data/leyesPR.json";
14
+import DerechosAmb from "./data/derechos.json";
15 15
 
16 16
 const Derechos = () => {
17 17
   return (
18 18
     <>
19 19
       <View>
20 20
         <Text style={styles.container2}>1) Leyes de la Tierra</Text>
21
-        <View>
22
-          {Leyes.map((ley) => {
21
+        <View >
22
+          {Leyes.map(({id, title, link}) => {
23 23
             return (
24 24
               <>
25 25
                 <TouchableOpacity
26 26
                   style={styles.button}
27
+                  key={id}
27 28
                   onPress={() => {
28
-                    Linking.openURL(ley.link.toString());
29
+                    Linking.openURL(link.toString());
29 30
                   }}
30 31
                 >
31
-                  <Text style={styles.text}>{ley.title}</Text>
32
+                  <Text style={styles.text}>{title}</Text>
32 33
                 </TouchableOpacity>
33 34
               </>
34 35
             );
@@ -41,16 +42,17 @@ const Derechos = () => {
41 42
           2) Derechos del activista climatico
42 43
         </Text>
43 44
         <View>
44
-          {DerechosAmb.map((der) => {
45
+          {DerechosAmb.map(({id, title, link}) => {
45 46
             return (
46 47
               <>
47 48
                 <TouchableOpacity
49
+                 
48 50
                   style={styles.button}
49 51
                   onPress={() => {
50
-                    Linking.openURL(der.link.toString());
52
+                    Linking.openURL(link.toString());
51 53
                   }}
52 54
                 >
53
-                  <Text style={styles.text}>{der.title}</Text>
55
+                  <Text style={styles.text}  key={id} >{title}</Text>
54 56
                 </TouchableOpacity>
55 57
               </>
56 58
             );
@@ -58,19 +60,19 @@ const Derechos = () => {
58 60
         </View>
59 61
       </View>
60 62
 
61
-      <View>
63
+       <View>
62 64
         <Text style={styles.container2}>3) Leyes de Puerto Rico</Text>
63 65
         <View>
64
-          {LeyesPR.map((ley) => {
66
+          {LeyesPR.map(({id, title, link}) => {
65 67
             return (
66 68
               <>
67 69
                 <TouchableOpacity
68 70
                   style={styles.button}
69 71
                   onPress={() => {
70
-                    Linking.openURL(ley.link.toString());
72
+                    Linking.openURL(link.toString());
71 73
                   }}
72 74
                 >
73
-                  <Text style={styles.text}>{ley.title}</Text>
75
+                  <Text style={styles.text} key={id}>{title}</Text>
74 76
                 </TouchableOpacity>
75 77
               </>
76 78
             );

+ 103
- 82
screens/Drna.js 파일 보기

@@ -5,8 +5,13 @@ import {
5 5
   StyleSheet,
6 6
   TouchableOpacity,
7 7
   TextInput,
8
+  KeyboardAvoidingView
8 9
 } from "react-native";
9 10
 import { SelectList } from "react-native-dropdown-select-list";
11
+import {KeyboardAwareScrollView} from 'react-native-keyboard-aware-scroll-view';
12
+import leyesViolaciones from "./data/leyesViolaciones.json"
13
+import Municipalities from "./data/municipalities.json";
14
+
10 15
 
11 16
 const postData = (URL, data) => {
12 17
   fetch(URL, {
@@ -27,96 +32,112 @@ const postData = (URL, data) => {
27 32
 };
28 33
 
29 34
 const Drna = () => {
30
-  const URL = "http://192.168.7.178:5001/complaints/add";
35
+  const URL = "http://172.20.10.2:5001/complaints/add";
31 36
   const [name, onChangeName] = React.useState(null);
32 37
   const [email, onChangeEmail] = React.useState(null);
33 38
   const [place, onChangePlace] = React.useState(null);
34 39
   const [selected, setSelected] = React.useState("");
35 40
   const [description, onChangeDescription] = React.useState(null);
36
-  const leyesViolaciones = [
37
-    { key: "1", value: "Descarga de águas contaminadas" },
38
-    { key: "2", value: "Olores objetables-fuertes" },
39
-    { key: "3", value: "Tala y/o poda de árboles" },
40
-    { key: "4", value: "Rellenando un bosque" },
41
-    { key: "5", value: "Rellenando una quebrada" },
42
-    { key: "6", value: "Realizando perforaciones en el suelo" },
43
-    { key: "7", value: "Moviendo con maquinaria tierra de un lugar a otro" },
44
-    { key: "8", value: "Peces y/o otros organismos muertos" },
45
-    { key: "9", value: "Tapando la vegetación" },
46
-    { key: "10", value: "Destrucción de humedal" },
47
-    { key: "11", value: "Construcción sospechosa" },
48
-    { key: "12", value: "Otros (vertederos clandestinos, entre otros)" },
49
-  ];
41
+  const [location, onChangeLocation] = React.useState(null);
42
+  const [municipality, setMunicipality] = React.useState(null);
50 43
 
51 44
   return (
52
-    <View>
53
-      <Text
54
-        style={{
55
-          fontSize: 30,
56
-          textAlign: "center",
57
-          marginTop: "20%",
58
-        }}
59
-      >
60
-        Formulario DRNA
61
-      </Text>
45
+    <KeyboardAwareScrollView>
46
+      <View>
47
+        <Text
48
+          style={{
49
+            fontSize: 30,
50
+            textAlign: "center",
51
+            marginTop: "20%",
52
+          }}
53
+        >
54
+          Formulario DRNA
55
+        </Text>
62 56
 
63
-      <TextInput
64
-        style={styles.input}
65
-        value={name}
66
-        onChangeText={onChangeName}
67
-        placeholder="Nombre"
68
-        placeholderTextColor={"grey"}
69
-      />
70
-      <TextInput
71
-        style={styles.input}
72
-        value={email}
73
-        onChangeText={onChangeEmail}
74
-        placeholder="Email"
75
-        placeholderTextColor={"grey"}
76
-      />
77
-      {/* <TextInput
78
-            style={styles.input}
79
-            value={text}
80
-            placeholder="Fecha"
81
-            placeholderTextColor={"grey"}
82
-        /> */}
83
-      <SelectList
84
-        boxStyles={styles.input}
85
-        dropdownStyles={styles.input2}
86
-        data={leyesViolaciones}
87
-        setSelected={setSelected}
88
-        placeholder="Leyes en violacion"
89
-      />
90
-      <TextInput
91
-        style={styles.input}
92
-        value={place}
93
-        onChangeText={onChangePlace}
94
-        placeholder="Lugar de los hechos"
95
-        placeholderTextColor={"grey"}
96
-      />
97
-      <TextInput
98
-        style={styles.input2}
99
-        value={description}
100
-        placeholder="Descripcion de los hechos"
101
-        onChangeText={onChangeDescription}
102
-        placeholderTextColor={"grey"}
103
-      />
104
-      <TouchableOpacity
105
-        style={styles.button}
106
-        onPress={() =>
107
-          postData(URL, {
108
-            name: name,
109
-            email: email,
110
-            place: place,
111
-            complaint_status: "pending",
112
-            complaint_type: selected.valueOf(),
113
-            complaint_description: description,
114
-          })
115
-        }
116
-      >
117
-        <Text style={styles.text}>Someter</Text>
118
-      </TouchableOpacity>
119
-    </View>
57
+        <TextInput
58
+          style={styles.input}
59
+          value={name}
60
+          onChangeText={onChangeName}
61
+          placeholder="Nombre"
62
+          placeholderTextColor={"grey"}
63
+        />
64
+        <TextInput
65
+          style={styles.input}
66
+          value={email}
67
+          onChangeText={onChangeEmail}
68
+          placeholder="Email"
69
+          placeholderTextColor={"grey"}
70
+        />
71
+        {/* <TextInput
72
+              style={styles.input}
73
+              value={text}
74
+              placeholder="Fecha"
75
+              placeholderTextColor={"grey"}
76
+          /> */}
77
+        <SelectList
78
+          boxStyles={styles.input}
79
+          dropdownStyles={styles.input2}
80
+          data={
81
+            leyesViolaciones.map((der) => { 
82
+              return(
83
+                der.value
84
+                )
85
+                })
86
+            }
87
+          setSelected={setSelected}
88
+          placeholder="Leyes en violacion"
89
+        />
90
+        <SelectList
91
+          boxStyles={styles.input}
92
+          dropdownStyles={styles.input2}
93
+          data={
94
+            Municipalities.map((der) => { 
95
+              return(
96
+                der
97
+                )
98
+                })
99
+            }
100
+          setSelected={setMunicipality}
101
+          placeholder="Municipio donde ocurrio"
102
+        />
103
+        <TextInput
104
+          style={styles.input}
105
+          value={location}
106
+          onChangeText={onChangeLocation}
107
+          placeholder="Coordenadas de lo ocurrido"
108
+          placeholderTextColor={"grey"}
109
+        />
110
+        <TextInput
111
+          style={styles.input}
112
+          value={place}
113
+          onChangeText={onChangePlace}
114
+          placeholder="Lugar de los hechos"
115
+          placeholderTextColor={"grey"}
116
+        />
117
+        <TextInput
118
+          style={styles.input2}
119
+          value={description}
120
+          placeholder="Descripcion de los hechos"
121
+          onChangeText={onChangeDescription}
122
+          placeholderTextColor={"grey"}
123
+        />
124
+        <TouchableOpacity
125
+          style={styles.button}
126
+          onPress={() =>
127
+            postData(URL, {
128
+              name: name,
129
+              email: email,
130
+              place: place,
131
+              complaint_status: "pending",
132
+              complaint_type: selected.valueOf(),
133
+              complaint_description: description,
134
+            })
135
+          }
136
+        >
137
+          <Text style={styles.text}>Someter</Text>
138
+        </TouchableOpacity>
139
+      </View>
140
+    </KeyboardAwareScrollView>
120 141
   );
121 142
 };
122 143
 

+ 1
- 1
screens/Lista.js 파일 보기

@@ -14,7 +14,7 @@ const Lista = () => {
14 14
 
15 15
   const getComplaints = async () => {
16 16
     try {
17
-      const response = await fetch("http://192.168.7.178:5001/complaints/all");
17
+      const response = await fetch("http://172.20.10.2:5001/complaints/all");
18 18
       const json = await response.json();
19 19
       setData(json.Complaints);
20 20
     } catch (error) {

screens/Button.js → screens/components/Button.js 파일 보기


screens/analisis.json → screens/data/analisis.json 파일 보기


screens/derechos.json → screens/data/derechos.json 파일 보기


screens/leyes.json → screens/data/leyes.json 파일 보기

@@ -1,16 +1,16 @@
1 1
 [
2 2
     {
3
-        "id": 1,
3
+        "id": 2,
4 4
         "title": "Ley de Tierras de Puerto Rico",
5 5
         "link": "https://bvirtualogp.pr.gov/ogp/BVirtual/LeyesOrganicas/pdf/26-1941.pdf"
6 6
     },
7 7
     {
8
-        "id": 2,
8
+        "id": 3,
9 9
         "title": "Ley Sobre Politica Publica Ambiental",
10 10
         "link": "https://www.drna.pr.gov/wp-content/uploads/2019/12/Ley-416-2004-refrencias-LPRA-2018.pdf"
11 11
     },
12 12
     {
13
-        "id":3,
13
+        "id":4,
14 14
         "title":"La Carta de la Tierra",
15 15
         "link":"https://cartadelatierra.org/lea-la-carta-de-la-tierra/preambulo/"
16 16
     }

screens/leyesPR.json → screens/data/leyesPR.json 파일 보기


+ 14
- 0
screens/data/leyesViolaciones.json 파일 보기

@@ -0,0 +1,14 @@
1
+[
2
+    { "key": 1, "value": "Descarga de águas contaminadas" },
3
+    { "key": 2, "value": "Olores objetables-fuertes" },
4
+    { "key": 3, "value": "Tala y/o poda de árboles" },
5
+    { "key": 4, "value": "Rellenando un bosque" },
6
+    { "key": 5, "value": "Rellenando una quebrada" },
7
+    { "key": 6, "value": "Realizando perforaciones en el suelo" },
8
+    { "key": 7, "value": "Moviendo con maquinaria tierra de un lugar a otro" },
9
+    { "key": 8, "value": "Peces y/o otros organismos muertos" },
10
+    { "key": 9, "value": "Tapando la vegetación" },
11
+    { "key": 10, "value": "Destrucción de humedal" },
12
+    { "key": 11, "value": "Construcción sospechosa" },
13
+    { "key": 12, "value": "Otros (vertederos clandestinos, entre otros)" }
14
+  ]

+ 9
- 0
screens/data/municipalities.json 파일 보기

@@ -0,0 +1,9 @@
1
+["Adjuntas","Aguada","Aguadilla","Aguas Buenas","Aibonito","Arecibo","Arroyo","Añasco",
2
+"Barceloneta","Barranquitas","Bayamón","Cabo Rojo","Caguas","Camuy","Canóvanas","Carolina",
3
+"Cataño","Cayey","Ceiba","Ciales","Cidra","Coamo","Comerío","Corozal","Culebra","Dorado",
4
+"Fajardo","Florida","Guayama","Guayanilla","Guaynabo","Gurabo","Guánica","Hatillo","Hormigueros",
5
+"Humacao","Isabela","Jayuya","Juana Díaz","Juncos","Lajas","Lares","Las Marías","Las Piedras",
6
+"Loiza","Luquillo","Manatí","Maricao","Maunabo","Mayagüez","Moca","Morovis","Naguabo","Naranjito",
7
+"Orocovis","Patillas","Peñuelas","Ponce","Quebradillas","Rincón","Rio Grande","Sabana Grande"
8
+,"Salinas","San Germán","San Juan","San Lorenzo","San Sebastián","Santa Isabel","Toa Alta",
9
+"Toa Baja","Trujillo Alto","Utuado","Vega Alta","Vega Baja","Vieques","Villalba","Yabucoa","Yauco"]

+ 18
- 0
screens/data/zipcode.json 파일 보기

@@ -0,0 +1,18 @@
1
+["00601","00602","00603","00604","00605","00606","00610","00611","00611",
2
+"00612","00613","00614","00616","00617","00622","00623","00624","00627","00631",
3
+"00631","00636","00637","00638","00641","00646","00647","00650","00652","00653",
4
+"00656","00659","00660","00662","00664","00667","00669","00670","00674","00676",
5
+"00677","00678","00680","00681","00682","00683","00685","00687","00688","00690",
6
+"00692","00693","00694","00698","00703","00704","00705","00707","00714","00715",
7
+"00716","00717","00718","00719","00720","00721","00721","00723","00725","00726",
8
+"00727","00728","00729","00730","00731","00732","00733","00734","00735","00736",
9
+"00737","00738","00739","00740","00741","00742","00744","00745","00745","00751",
10
+"00754","00757","00765","00766","00767","00769","00771","00772","00773","00775",
11
+"00777","00778","00780","00782","00783","00784","00785","00786","00791","00792",
12
+"00794","00795","00901","00902","00906","00907","00908","00909","00910","00911",
13
+"00912","00913","00914","00915","00916","00917","00919","00920","00921","00923",
14
+"00924","00925","00926","00927","00928","00929","00930","00931","00933","00934",
15
+"00936","00940","00949","00950","00951","00952","00953","00954","00956","00957",
16
+"00958","00959","00960","00961","00962","00963","00965","00966","00968","00969",
17
+"00970","00971","00976","00977","00978","00979","00981","00982","00983","00984",
18
+"00985","00986","00987","00988"]

+ 15
- 2
yarn.lock 파일 보기

@@ -5348,7 +5348,7 @@
5348 5348
     "kleur" "^3.0.3"
5349 5349
     "sisteransi" "^1.0.5"
5350 5350
 
5351
-"prop-types@^15.7.2":
5351
+"prop-types@^15.6.2", "prop-types@^15.7.2":
5352 5352
   "integrity" "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg=="
5353 5353
   "resolved" "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz"
5354 5354
   "version" "15.8.1"
@@ -5491,6 +5491,19 @@
5491 5491
   "resolved" "https://registry.npmjs.org/react-native-gradle-plugin/-/react-native-gradle-plugin-0.70.3.tgz"
5492 5492
   "version" "0.70.3"
5493 5493
 
5494
+"react-native-iphone-x-helper@^1.0.3":
5495
+  "integrity" "sha512-HOf0jzRnq2/aFUcdCJ9w9JGzN3gdEg0zFE4FyYlp4jtidqU03D5X7ZegGKfT1EWteR0gPBGp9ye5T5FvSWi9Yg=="
5496
+  "resolved" "https://registry.npmjs.org/react-native-iphone-x-helper/-/react-native-iphone-x-helper-1.3.1.tgz"
5497
+  "version" "1.3.1"
5498
+
5499
+"react-native-keyboard-aware-scroll-view@^0.9.5":
5500
+  "integrity" "sha512-XwfRn+T/qBH9WjTWIBiJD2hPWg0yJvtaEw6RtPCa5/PYHabzBaWxYBOl0usXN/368BL1XktnZPh8C2lmTpOREA=="
5501
+  "resolved" "https://registry.npmjs.org/react-native-keyboard-aware-scroll-view/-/react-native-keyboard-aware-scroll-view-0.9.5.tgz"
5502
+  "version" "0.9.5"
5503
+  dependencies:
5504
+    "prop-types" "^15.6.2"
5505
+    "react-native-iphone-x-helper" "^1.0.3"
5506
+
5494 5507
 "react-native-pose@^0.9.1":
5495 5508
   "integrity" "sha512-JQ17SWXk6Hetlxfj3PO09/jYt5PMwu+MZ9YPcgRp5A//EtYXvfHS+IieXDnCg36wi74yZ80MvYx025//g/tqbQ=="
5496 5509
   "resolved" "https://registry.npmjs.org/react-native-pose/-/react-native-pose-0.9.1.tgz"
@@ -5512,7 +5525,7 @@
5512 5525
     "react-freeze" "^1.0.0"
5513 5526
     "warn-once" "^0.1.0"
5514 5527
 
5515
-"react-native@*", "react-native@>=0.54.0", "react-native@0.70.5":
5528
+"react-native@*", "react-native@>=0.42.0", "react-native@>=0.48.4", "react-native@>=0.54.0", "react-native@0.70.5":
5516 5529
   "integrity" "sha512-5NZM80LC3L+TIgQX/09yiyy48S73wMgpIgN5cCv3XTMR394+KpDI3rBZGH4aIgWWuwijz31YYVF5504+9n2Zfw=="
5517 5530
   "resolved" "https://registry.npmjs.org/react-native/-/react-native-0.70.5.tgz"
5518 5531
   "version" "0.70.5"