12 Ревизии

Автор SHA1 Съобщение Дата
  Michael Terrefortes 2dc595ded6 Merge remote-tracking branch 'Aco/master' into Sprint1 преди 1 година
  Michael Terrefortes 413b069946 fix преди 1 година
  Michael Terrefortes fe45bbfb0c fix преди 1 година
  Michael Terrefortes 0ed0f48bc8 fix преди 1 година
  Michael Terrefortes e4349965ff fix преди 1 година
  Michael Terrefortes 5f23dfa828 added municipalities field, fixed scroll form преди 1 година
  andrelfuentes 976cac4540 Pantalla de analisis añadida преди 1 година
  Jasiel Rivera e5842c80e8 connected front end with backend & reformated code преди 1 година
  Michael Terrefortes Rosado 85abb2fb55 icons tab преди 2 години
  andrelfuentes 3c13f0112f pagina de analisis actualizada преди 2 години
  Michael Terrefortes Rosado 3eca99d8e7 mas screens преди 2 години
  Michael Terrefortes Rosado 47ebccf7d8 Aco app nav преди 2 години

Двоични данни
.DS_Store Целия файл


+ 0
- 14
Aco/.gitignore Целия файл

@@ -1,14 +0,0 @@
1
-node_modules/
2
-.expo/
3
-dist/
4
-npm-debug.*
5
-*.jks
6
-*.p8
7
-*.p12
8
-*.key
9
-*.mobileprovision
10
-*.orig.*
11
-web-build/
12
-
13
-# macOS
14
-.DS_Store

+ 0
- 27
Aco/Navigation.js Целия файл

@@ -1,27 +0,0 @@
1
-import React from "react";
2
-import { createBottomTabNavigator } from "@react-navigation/bottom-tabs";
3
-import { NavigationContainer } from "@react-navigation/native";
4
-
5
-import Denuncias from "./screens/Denuncias";
6
-import Derechos from "./screens/Derechos";
7
-import Analisis from "./screens/Analisis";
8
-
9
-const Tab = createBottomTabNavigator();
10
-
11
-function Tabs() {
12
-    return (
13
-        <Tab.Navigator>
14
-            <Tab.Screen name="Denuncias" component={Denuncias} />
15
-            <Tab.Screen name="Derechos" component={Derechos} />
16
-            <Tab.Screen name="Analisis" component={Analisis} />
17
-        </Tab.Navigator>
18
-    );
19
-}
20
-
21
-export default function Navigation(){
22
-    return (
23
-        <NavigationContainer>
24
-            <Tabs />
25
-        </NavigationContainer>
26
-    );
27
-}

+ 0
- 19
Aco/screens/Analisis.js Целия файл

@@ -1,19 +0,0 @@
1
-import React from "react";
2
-import { View, Text, StyleSheet, TouchableOpacity} from "react-native";
3
-
4
-const Analisis = () => {
5
-    return (
6
-        <View>
7
-            <Text
8
-                style={{
9
-                    fontSize: 30,
10
-                    textAlign: "center",
11
-                    marginTop: "20%"
12
-                }}
13
-            
14
-            >Herramientas de analisis</Text>
15
-        </View>
16
-    )
17
-}
18
-
19
-export default Analisis

+ 0
- 20
Aco/screens/Denuncias.js Целия файл

@@ -1,20 +0,0 @@
1
-import React from "react";
2
-import { View, Text, StyleSheet, TouchableOpacity} from "react-native";
3
-
4
-const Denuncias = () => {
5
-    return (
6
-        <View>
7
-            <Text
8
-                style={{
9
-                    fontSize: 30,
10
-                    textAlign: "center",
11
-                    marginTop: "20%"
12
-                }}
13
-            
14
-            >Llenar formulario y 
15
-            listado de denuncias</Text>
16
-        </View>
17
-    )
18
-}
19
-
20
-export default Denuncias

+ 0
- 19
Aco/screens/Derechos.js Целия файл

@@ -1,19 +0,0 @@
1
-import React from "react";
2
-import { View, Text, StyleSheet, TouchableOpacity} from "react-native";
3
-
4
-const Derechos = () => {
5
-    return (
6
-        <View>
7
-            <Text
8
-                style={{
9
-                    fontSize: 30,
10
-                    textAlign: "center",
11
-                    marginTop: "20%"
12
-                }}
13
-            
14
-            >Derechos</Text>
15
-        </View>
16
-    )
17
-}
18
-
19
-export default Derechos

+ 0
- 6747
Aco/yarn.lock
Файловите разлики са ограничени, защото са твърде много
Целия файл


Aco/App.js → App.js Целия файл


+ 72
- 0
Navigation.js Целия файл

@@ -0,0 +1,72 @@
1
+import React from "react";
2
+import { createBottomTabNavigator } from "@react-navigation/bottom-tabs";
3
+import { createNativeStackNavigator } from "@react-navigation/native-stack";
4
+import { NavigationContainer } from "@react-navigation/native";
5
+import { Entypo } from '@expo/vector-icons'; 
6
+import { Ionicons } from '@expo/vector-icons';
7
+
8
+// Import the screens to be used in the navigator
9
+import Denuncias from "./screens/Denuncias";
10
+import Derechos from "./screens/Derechos";
11
+import Analisis from "./screens/Analisis";
12
+import Formulario from "./screens/Formulario";
13
+import Lista from "./screens/Lista";
14
+import Drna from "./screens/Drna";
15
+import { TabBarIOSItem } from "react-native";
16
+
17
+const StackDenuncias = createNativeStackNavigator();
18
+
19
+function Stacks() {
20
+  return (
21
+    <StackDenuncias.Navigator initialRouteName="DenunciasIni">
22
+      <StackDenuncias.Screen name="Denuncias" component={Denuncias} />
23
+      <StackDenuncias.Screen name="Formulario" component={Formulario} />
24
+      <StackDenuncias.Screen name="Lista" component={Lista} />
25
+      <StackDenuncias.Screen name="Drna" component={Drna} />
26
+    </StackDenuncias.Navigator>
27
+  );
28
+}
29
+
30
+const Tab = createBottomTabNavigator();
31
+
32
+function Tabs() {
33
+  return (
34
+    <Tab.Navigator initialRouteName="DenunciasIni">
35
+      <Tab.Screen
36
+        name="Denuncias"
37
+        component={Stacks}
38
+        options={{
39
+                tabBarIcon: ({}) => (
40
+                    <Entypo name="megaphone" size={24} color="black" />
41
+                ),
42
+                 headerShown:false
43
+            }} 
44
+      />
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
+            }}   />
62
+    </Tab.Navigator>
63
+  );
64
+}
65
+
66
+export default function Navigation() {
67
+  return (
68
+    <NavigationContainer>
69
+      <Tabs />
70
+    </NavigationContainer>
71
+  );
72
+}

Aco/app.json → app.json Целия файл


Aco/assets/adaptive-icon.png → assets/adaptive-icon.png Целия файл


Aco/assets/favicon.png → assets/favicon.png Целия файл


Aco/assets/icon.png → assets/icon.png Целия файл


Aco/assets/splash.png → assets/splash.png Целия файл


Aco/babel.config.js → babel.config.js Целия файл


package-lock.json
Файловите разлики са ограничени, защото са твърде много
Целия файл


Aco/package.json → package.json Целия файл

@@ -16,7 +16,10 @@
16 16
     "expo-status-bar": "~1.4.2",
17 17
     "react": "18.1.0",
18 18
     "react-native": "0.70.5",
19
+    "react-native-custom-navigation-tabs": "^3.0.1",
20
+    "react-native-dropdown-select-list": "^2.0.2",
19 21
     "react-native-gesture-handler": "~2.8.0",
22
+    "react-native-keyboard-aware-scroll-view": "^0.9.5",
20 23
     "react-native-safe-area-context": "4.4.1",
21 24
     "react-native-screens": "~3.18.0"
22 25
   },

Двоични данни
screens/.DS_Store Целия файл


+ 149
- 0
screens/Analisis.js Целия файл

@@ -0,0 +1,149 @@
1
+import React from "react";
2
+import {
3
+  View,
4
+  Text,
5
+  StyleSheet,
6
+  Linking
7
+} from "react-native";
8
+
9
+// TOOL DESCRIPTIONS
10
+const bodyEJScreen = "EJScreen es..... Presione para ir al enlace."
11
+const bodyCEJST = "CEJST es..... Presione para ir al enlace."
12
+const bodyEJAtlas = "EJAtlas es..... Presione para ir al enlace."
13
+const bodyIPCC = "El ''Intergovernmental Panel on Climate Change'' o IPCC es..... Presione para ir al enlace."
14
+
15
+const Analisis = () => {
16
+  return (
17
+  <View>
18
+
19
+    {/* TAB TITLE CODE*/}
20
+    {/* TAB TITLE */}
21
+    <Text style={styles.Tab}> 
22
+      Enlaces a Herramientas de Análisis Externas
23
+    </Text>
24
+  
25
+    {/* FIRST TOOL CODE*/}
26
+    {/* FIRST TOOL TITLE */}
27
+    <View style={styles.Number}>
28
+      <Text style={styles.Number}>
29
+        1)
30
+      </Text>
31
+      <Text style={styles.Title} 
32
+        onPress={ ()=> Linking.openURL('https://ejscreen.epa.gov/mapper/') }>
33
+        Enlace a EJScreen
34
+      </Text>
35
+    </View>
36
+    {/* FIRST TOOL BODY */}
37
+    <View style={styles.Bullet}>
38
+      <Text style={styles.Bullet}>
39
+        {'\u002D'}
40
+      </Text>
41
+      <Text style={styles.Body}>
42
+        {bodyEJScreen}
43
+      </Text>
44
+    </View>
45
+    
46
+    {/* SECOND TOOL CODE*/}
47
+    {/* SECOND TOOL TITLE */}
48
+    <View style={styles.Number}>
49
+      <Text style={styles.Number}>
50
+        2)</Text>
51
+      <Text style={styles.Title} 
52
+        onPress={ ()=> Linking.openURL('https://screeningtool.geoplatform.gov/en/#3/33.47/-97.5') }>
53
+        Enlace a CEJST
54
+      </Text>
55
+    </View>
56
+    {/* SECOND TOOL BODY */}
57
+    <View style={styles.Bullet}>
58
+      <Text style={styles.Bullet}>
59
+        {'\u002D'}
60
+      </Text>
61
+      <Text style={styles.Body}>
62
+        {bodyCEJST}
63
+      </Text>
64
+    </View>
65
+  
66
+    {/* THIRD TOOL CODE*/}
67
+    {/* THIRD TOOL TITLE */}
68
+    <View style={styles.Number}>
69
+      <Text style={styles.Number}>
70
+        3)
71
+      </Text>
72
+      <Text style={styles.Title} 
73
+        onPress={ ()=> Linking.openURL('https://ejatlas.org/') }>
74
+        Enlace a EJAtlas
75
+      </Text>
76
+    </View>
77
+    {/* THIRD TOOL BODY */}
78
+    <View style={styles.Bullet}>
79
+      <Text style={styles.Bullet}>
80
+        {'\u002D'}
81
+      </Text>
82
+      <Text style={styles.Body}>
83
+         {bodyEJAtlas}
84
+      </Text>
85
+    </View>
86
+  
87
+    {/* FOURTH TOOL CODE*/}
88
+    {/* FOURTH TOOL TITLE */}
89
+    <View style={styles.Number}>
90
+      <Text style={styles.Number}>
91
+        4)
92
+      </Text>
93
+      <Text style={styles.Title} 
94
+        onPress={ ()=> Linking.openURL('https://www.ipcc.ch/') }>
95
+        Enlace al IPCC
96
+      </Text>
97
+    </View>
98
+    {/* FOURTH TOOL BODY */}
99
+    <View style={styles.Bullet}>
100
+      <Text style={styles.Bullet}>
101
+        {'\u002D'}
102
+      </Text>
103
+      <Text style={styles.Body}>
104
+        {bodyIPCC}
105
+      </Text>
106
+    </View>
107
+          
108
+  </View>
109
+)}
110
+  
111
+const styles = StyleSheet.create({
112
+  Tab: { fontSize: 30,
113
+         textAlign: "center",
114
+         marginTop: "12%",
115
+         marginLeft: "1.4%",
116
+         marginRight: "1.4%"
117
+        },
118
+  
119
+  Number: { fontSize: 23,
120
+            textAlign: "left",
121
+            marginLeft: "2.5%",
122
+            marginTop: "5.5%",
123
+            flexDirection: 'row'
124
+          },
125
+  
126
+  Title: { fontSize: 23,
127
+           textAlign: "left",
128
+           marginTop: "5.5%", 
129
+           color: "#6495ed",
130
+           flex: 0,
131
+           paddingLeft: 6
132
+          },
133
+  
134
+  Body: { fontSize: 18,
135
+          textAlign: "left",
136
+          marginTop: "2%",
137
+          flex: 1, 
138
+          paddingLeft: 5
139
+        },
140
+  
141
+  Bullet: { fontSize: 18,
142
+            textAlign: "left",
143
+            marginLeft: "6%",
144
+            marginTop: "2%",
145
+            flexDirection: 'row'
146
+          }
147
+});
148
+
149
+export default Analisis;

+ 62
- 0
screens/Denuncias.js Целия файл

@@ -0,0 +1,62 @@
1
+import { useNavigation } from "@react-navigation/native";
2
+import { createNativeStackNavigator } from "@react-navigation/native-stack";
3
+import { createBottomTabNavigator } from "@react-navigation/bottom-tabs";
4
+import { NavigationContainer } from "@react-navigation/native";
5
+import React from "react";
6
+import { View, Text, StyleSheet, TouchableOpacity } from "react-native";
7
+
8
+const Denuncias = () => {
9
+  const currNav = useNavigation();
10
+
11
+  return (
12
+    <View>
13
+      <Text
14
+        style={{
15
+          fontSize: 30,
16
+          textAlign: "center",
17
+          marginTop: "20%",
18
+        }}
19
+      >
20
+        Llenar formulario y listado de denuncias
21
+      </Text>
22
+
23
+      <TouchableOpacity
24
+        style={styles.button}
25
+        onPress={() => currNav.navigate("Formulario")}
26
+      >
27
+        <Text style={styles.text}> Formularios </Text>
28
+      </TouchableOpacity>
29
+
30
+      <TouchableOpacity
31
+        style={styles.button}
32
+        onPress={() => currNav.navigate("Lista")}
33
+      >
34
+        <Text style={styles.text}>Listado</Text>
35
+      </TouchableOpacity>
36
+    </View>
37
+  );
38
+};
39
+
40
+export default Denuncias;
41
+
42
+const styles = StyleSheet.create({
43
+  button: {
44
+    width: 250,
45
+    alignSelf: "center",
46
+    alignItems: "center",
47
+    justifyContent: "center",
48
+    paddingVertical: 12,
49
+    paddingHorizontal: 32,
50
+    borderRadius: 4,
51
+    elevation: 3,
52
+    backgroundColor: "#009688",
53
+    marginTop: "5%",
54
+  },
55
+  text: {
56
+    fontSize: 16,
57
+    lineHeight: 21,
58
+    fontWeight: "bold",
59
+    letterSpacing: 0.25,
60
+    color: "white",
61
+  },
62
+});

+ 127
- 0
screens/Derechos.js Целия файл

@@ -0,0 +1,127 @@
1
+import React from "react";
2
+import {
3
+  View,
4
+  Text,
5
+  StyleSheet,
6
+  TouchableOpacity,
7
+  Linking,
8
+  Pressable,
9
+} from "react-native";
10
+import { FlatList, TouchableHighlight } from "react-native-gesture-handler";
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
+
16
+const Derechos = () => {
17
+  return (
18
+    <>
19
+      <View>
20
+        <Text style={styles.container2}>1) Leyes de la Tierra</Text>
21
+        <View >
22
+          {Leyes.map(({id, title, link}) => {
23
+            return (
24
+              <>
25
+                <TouchableOpacity
26
+                  style={styles.button}
27
+                  key={id}
28
+                  onPress={() => {
29
+                    Linking.openURL(link.toString());
30
+                  }}
31
+                >
32
+                  <Text style={styles.text}>{title}</Text>
33
+                </TouchableOpacity>
34
+              </>
35
+            );
36
+          })}
37
+        </View>
38
+      </View>
39
+
40
+      <View>
41
+        <Text style={styles.container2}>
42
+          2) Derechos del activista climatico
43
+        </Text>
44
+        <View>
45
+          {DerechosAmb.map(({id, title, link}) => {
46
+            return (
47
+              <>
48
+                <TouchableOpacity
49
+                 
50
+                  style={styles.button}
51
+                  onPress={() => {
52
+                    Linking.openURL(link.toString());
53
+                  }}
54
+                >
55
+                  <Text style={styles.text}  key={id} >{title}</Text>
56
+                </TouchableOpacity>
57
+              </>
58
+            );
59
+          })}
60
+        </View>
61
+      </View>
62
+
63
+       <View>
64
+        <Text style={styles.container2}>3) Leyes de Puerto Rico</Text>
65
+        <View>
66
+          {LeyesPR.map(({id, title, link}) => {
67
+            return (
68
+              <>
69
+                <TouchableOpacity
70
+                  style={styles.button}
71
+                  onPress={() => {
72
+                    Linking.openURL(link.toString());
73
+                  }}
74
+                >
75
+                  <Text style={styles.text} key={id}>{title}</Text>
76
+                </TouchableOpacity>
77
+              </>
78
+            );
79
+          })}
80
+        </View>
81
+      </View>
82
+    </>
83
+  );
84
+};
85
+
86
+const styles = StyleSheet.create({
87
+  container: {
88
+    fontSize: 25,
89
+    textAlign: "center",
90
+    marginTop: "10%",
91
+  },
92
+
93
+  container2: {
94
+    fontSize: 25,
95
+    textAlign: "left",
96
+    marginTop: "10%",
97
+    marginLeft: "5%",
98
+  },
99
+
100
+  laws: {
101
+    fontSize: 15,
102
+    textAlign: "center",
103
+    marginTop: "5%",
104
+  },
105
+  button: {
106
+    width: 250,
107
+    alignSelf: "center",
108
+    alignItems: "center",
109
+    justifyContent: "center",
110
+    paddingVertical: 12,
111
+    paddingHorizontal: 32,
112
+    borderRadius: 4,
113
+    elevation: 3,
114
+    backgroundColor: "#009688",
115
+    marginTop: "5%",
116
+  },
117
+  text: {
118
+    fontSize: 16,
119
+    lineHeight: 21,
120
+    fontWeight: "bold",
121
+    letterSpacing: 0.25,
122
+    color: "white",
123
+    textAlign: "center",
124
+  },
125
+});
126
+
127
+export default Derechos;

+ 180
- 0
screens/Drna.js Целия файл

@@ -0,0 +1,180 @@
1
+import React from "react";
2
+import {
3
+  View,
4
+  Text,
5
+  StyleSheet,
6
+  TouchableOpacity,
7
+  TextInput,
8
+  KeyboardAvoidingView
9
+} from "react-native";
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
+
15
+
16
+const postData = (URL, data) => {
17
+  fetch(URL, {
18
+    method: "POST",
19
+    headers: {
20
+      Accept: "application/json",
21
+      "Content-Type": "application/json",
22
+    },
23
+    body: JSON.stringify(data),
24
+  })
25
+    .then((response) => response.json())
26
+    .then((responseJson) => {
27
+      console.log(responseJson);
28
+    })
29
+    .catch((error) => {
30
+      console.error(error);
31
+    });
32
+};
33
+
34
+const Drna = () => {
35
+  const URL = "http://172.20.10.2:5001/complaints/add";
36
+  const [name, onChangeName] = React.useState(null);
37
+  const [email, onChangeEmail] = React.useState(null);
38
+  const [place, onChangePlace] = React.useState(null);
39
+  const [selected, setSelected] = React.useState("");
40
+  const [description, onChangeDescription] = React.useState(null);
41
+  const [location, onChangeLocation] = React.useState(null);
42
+  const [municipality, setMunicipality] = React.useState(null);
43
+
44
+  return (
45
+    <KeyboardAwareScrollView>
46
+      <View>
47
+        <Text
48
+          style={{
49
+            fontSize: 30,
50
+            textAlign: "center",
51
+            marginTop: "20%",
52
+          }}
53
+        >
54
+          Formulario DRNA
55
+        </Text>
56
+
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>
141
+  );
142
+};
143
+
144
+export default Drna;
145
+
146
+const styles = StyleSheet.create({
147
+  input: {
148
+    height: 40,
149
+    margin: 12,
150
+    borderWidth: 0.5,
151
+    padding: 10,
152
+    borderRadius: 10,
153
+  },
154
+  input2: {
155
+    height: 100,
156
+    margin: 12,
157
+    borderWidth: 0.5,
158
+    padding: 15,
159
+    borderRadius: 10,
160
+  },
161
+  button: {
162
+    width: 250,
163
+    alignSelf: "center",
164
+    alignItems: "center",
165
+    justifyContent: "center",
166
+    paddingVertical: 12,
167
+    paddingHorizontal: 32,
168
+    borderRadius: 4,
169
+    elevation: 3,
170
+    backgroundColor: "#009688",
171
+    marginTop: "5%",
172
+  },
173
+  text: {
174
+    fontSize: 16,
175
+    lineHeight: 21,
176
+    fontWeight: "bold",
177
+    letterSpacing: 0.25,
178
+    color: "white",
179
+  },
180
+});

+ 70
- 0
screens/Formulario.js Целия файл

@@ -0,0 +1,70 @@
1
+import { createNativeStackNavigator } from "@react-navigation/native-stack";
2
+import { createBottomTabNavigator } from "@react-navigation/bottom-tabs";
3
+import { NavigationContainer } from "@react-navigation/native";
4
+import { useNavigation } from "@react-navigation/native";
5
+import React from "react";
6
+import {
7
+  View,
8
+  Text,
9
+  StyleSheet,
10
+  TouchableOpacity,
11
+  Linking,
12
+} from "react-native";
13
+
14
+const Formulario = () => {
15
+  const currNav = useNavigation();
16
+  return (
17
+    <View>
18
+      <Text
19
+        style={{
20
+          fontSize: 30,
21
+          textAlign: "center",
22
+          marginTop: "20%",
23
+        }}
24
+      >
25
+        Llenar formulario EPA y DRNA
26
+      </Text>
27
+
28
+      <TouchableOpacity
29
+        style={styles.button}
30
+        onPress={() => currNav.navigate("Drna")}
31
+      >
32
+        <Text style={styles.text}>Formulario DRNA</Text>
33
+      </TouchableOpacity>
34
+      <TouchableOpacity
35
+        style={styles.button}
36
+        onPress={() => {
37
+          Linking.openURL(
38
+            "https://echo.epa.gov/denuncie-violaciones-ambientales"
39
+          );
40
+        }}
41
+      >
42
+        <Text style={styles.text}>Formulario EPA</Text>
43
+      </TouchableOpacity>
44
+    </View>
45
+  );
46
+};
47
+
48
+export default Formulario;
49
+
50
+const styles = StyleSheet.create({
51
+  button: {
52
+    width: 250,
53
+    alignSelf: "center",
54
+    alignItems: "center",
55
+    justifyContent: "center",
56
+    paddingVertical: 12,
57
+    paddingHorizontal: 32,
58
+    borderRadius: 4,
59
+    elevation: 3,
60
+    backgroundColor: "#009688",
61
+    marginTop: "5%",
62
+  },
63
+  text: {
64
+    fontSize: 16,
65
+    lineHeight: 21,
66
+    fontWeight: "bold",
67
+    letterSpacing: 0.25,
68
+    color: "white",
69
+  },
70
+});

+ 52
- 0
screens/Lista.js Целия файл

@@ -0,0 +1,52 @@
1
+import React, { useEffect, useState } from "react";
2
+import {
3
+  ActivityIndicator,
4
+  FlatList,
5
+  View,
6
+  Text,
7
+  StyleSheet,
8
+  TouchableOpacity,
9
+} from "react-native";
10
+
11
+const Lista = () => {
12
+  const [isLoading, setLoading] = useState(true);
13
+  const [data, setData] = useState([]);
14
+
15
+  const getComplaints = async () => {
16
+    try {
17
+      const response = await fetch("http://172.20.10.2:5001/complaints/all");
18
+      const json = await response.json();
19
+      setData(json.Complaints);
20
+    } catch (error) {
21
+      console.error(error);
22
+    } finally {
23
+      setLoading(false);
24
+    }
25
+  };
26
+
27
+  useEffect(() => {
28
+    getComplaints();
29
+  }, []);
30
+
31
+  return (
32
+    <View style={{ flex: 1, padding: 24 }}>
33
+      {isLoading ? (
34
+        <ActivityIndicator />
35
+      ) : (
36
+        <FlatList
37
+          data={data}
38
+          keyExtractor={({ id }, index) => id}
39
+          renderItem={({ item }) => (
40
+            <Text style={{ padding: 8 }}>
41
+              ID:{item.id}, Tipo de denuncia: {item.complaint_type}, Hecha por:{" "}
42
+              {item.name}, en el lugar: {item.place}, descripcion del problema:{" "}
43
+              {item.complaint_description}, estatus:{"En espera"}
44
+            </Text>
45
+          )}
46
+        />
47
+      )}
48
+    </View>
49
+  );
50
+};
51
+
52
+export default Lista;

+ 32
- 0
screens/components/Button.js Целия файл

@@ -0,0 +1,32 @@
1
+import React from "react";
2
+import {
3
+  View,
4
+  Text,
5
+  StyleSheet,
6
+  TouchableOpacity,
7
+  Linking,
8
+  Button,
9
+  Pressable,
10
+} from "react-native";
11
+
12
+const ButtonLay = StyleSheet.create({
13
+  button: {
14
+    width: 250,
15
+    alignSelf: "center",
16
+    alignItems: "center",
17
+    justifyContent: "center",
18
+    paddingVertical: 12,
19
+    paddingHorizontal: 32,
20
+    borderRadius: 4,
21
+    elevation: 3,
22
+    backgroundColor: "#009688",
23
+    marginTop: "5%",
24
+  },
25
+  text: {
26
+    fontSize: 16,
27
+    lineHeight: 21,
28
+    fontWeight: "bold",
29
+    letterSpacing: 0.25,
30
+    color: "white",
31
+  },
32
+});

+ 26
- 0
screens/data/analisis.json Целия файл

@@ -0,0 +1,26 @@
1
+[
2
+    {
3
+        "id": 1,
4
+        "title": "EJScreen",
5
+        "link": "https://ejscreen.epa.gov/mapper/",
6
+        "description": "EJScreen es..... Presione para ir al enlace."
7
+    },
8
+    {
9
+        "id": 2,
10
+        "title": "CEJST",
11
+        "link": "https://screeningtool.geoplatform.gov/en/#3/33.47/-97.5",
12
+        "description": "CEJST es..... Presione para ir al enlace."
13
+    },
14
+    {
15
+        "id": 3,
16
+        "title": "EJAtlas",
17
+        "link": "https://ejatlas.org/",
18
+        "description": "EJAtlas es..... Presione para ir al enlace."
19
+    },
20
+    {
21
+        "id": 4,
22
+        "title": "Intergovernmental Panel on Climate Change",
23
+        "link": "https://www.ipcc.ch/",
24
+        "description": "El Intergovernmental Panel on Climate Change (IPCC) es..... Presione para ir al enlace."
25
+    }
26
+]

+ 7
- 0
screens/data/derechos.json Целия файл

@@ -0,0 +1,7 @@
1
+[
2
+    {
3
+        "id": 1,
4
+        "title": "Declaración Universal de los Derechos de la Madre Tierra",
5
+        "link": "http://rio20.net/propuestas/declaracion-universal-de-los-derechos-de-la-madre-tierra/"
6
+    }
7
+]

+ 17
- 0
screens/data/leyes.json Целия файл

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

+ 7
- 0
screens/data/leyesPR.json Целия файл

@@ -0,0 +1,7 @@
1
+[
2
+    {
3
+        "id": 1,
4
+        "title": "Constitucion", 
5
+        "link": "https://www2.pr.gov/sobrepuertorico/documents/elaconstitucion.pdf"
6
+    }
7
+]

+ 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"]

+ 6932
- 0
yarn.lock
Файловите разлики са ограничени, защото са твърде много
Целия файл