Browse Source

Sprint 4 commit of Radices

Ricardo A. Lopez Torres 2 years ago
parent
commit
2414b8cdd5

+ 4
- 0
Radices/.expo-shared/assets.json View File

@@ -0,0 +1,4 @@
1
+{
2
+  "12bb71342c6255bbf50437ec8f4441c083f47cdb74bd89160c15e4f43e52a1cb": true,
3
+  "40b842e832070c58deac6aa9e08fa459302ee3f9da492c7e77d93d2fbf4a56fd": true
4
+}

+ 14
- 0
Radices/.gitignore View File

@@ -0,0 +1,14 @@
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

+ 14
- 0
Radices/App.js View File

@@ -0,0 +1,14 @@
1
+//Nathalia A. Alicea Maldonado
2
+
3
+import React from 'react';
4
+import { SafeAreaProvider } from 'react-native-safe-area-context';
5
+import TopTabNavigator from './Navigators/TopBarNavigator';
6
+
7
+export default function App() {
8
+  return (
9
+    <SafeAreaProvider>
10
+      <TopTabNavigator />
11
+    </SafeAreaProvider>
12
+  );
13
+}
14
+

+ 76
- 0
Radices/Navigators/DrawerNavigation.js View File

@@ -0,0 +1,76 @@
1
+//Nathalia A. Alicea
2
+//codigo para Drawer Navigation. No está en uso. Pero si el cliente deseará tener Drawer Navigation se podría utilizar.
3
+
4
+import * as React from 'react';
5
+import {View, StyleSheet, ScrollView, Image} from 'react-native';
6
+import { NavigationContainer } from '@react-navigation/native';
7
+import {
8
+    createDrawerNavigator,
9
+    DrawerContentScrollView,
10
+    DrawerItemList, 
11
+    DrawerItem
12
+} from '@react-navigation/drawer';
13
+import Home from '../Screens/Home';
14
+import Contact from '../Screens/Contact';
15
+import About from '../Screens/About';
16
+
17
+
18
+
19
+
20
+function CustomDrawerConten(props) {
21
+    return(
22
+        <ScrollView style={styles.container}>
23
+            <View style={styles.drawerHeader}>
24
+                <View>
25
+                    <Image style ={styles.drawerHeaderImage} source={require('../image/logowebes.png')} />
26
+                </View>
27
+            </View>
28
+            <DrawerContentScrollView {...props}>
29
+                <DrawerItemList {...props} />
30
+                <DrawerItem 
31
+                    
32
+                    label ="Close drawer"
33
+                    onPress={ () => props.navigation.closeDrawer()}
34
+                />
35
+            </DrawerContentScrollView>
36
+        </ScrollView>
37
+    );
38
+}
39
+
40
+const Drawer = createDrawerNavigator();
41
+
42
+function MyDrawer(){
43
+    return(
44
+        <Drawer.Navigator backBehavior="history" drawerContent={props => <CustomDrawerConten{...props}/>}>
45
+            <Drawer.Screen name = "Sobre Nosotros" component={About}/>
46
+            <Drawer.Screen name ="Tienda" component={Home}/>
47
+            <Drawer.Screen name = "Contáctanos" component={Contact}/>
48
+        </Drawer.Navigator>
49
+    )
50
+}
51
+
52
+const styles = StyleSheet.create({
53
+    container: {
54
+        flex: 1
55
+    }, 
56
+    drawerHeader: {
57
+        backgroundColor: "#ffffff",
58
+        height: 150, 
59
+        alignItems:'center',
60
+        justifyContent: 'center',
61
+        flex: 1, 
62
+        flexDirection: 'row'
63
+    }, drawerHeaderImage: {
64
+        width: 260, 
65
+        height: 130
66
+
67
+    }
68
+})
69
+
70
+export default function DrawerNavigation(){
71
+    return (
72
+        <NavigationContainer>
73
+            <MyDrawer />
74
+        </NavigationContainer>
75
+    )
76
+}

+ 231
- 0
Radices/Navigators/TopBarNavigator.js View File

@@ -0,0 +1,231 @@
1
+//Nathalia A. Alicea
2
+//código para la implementación de los Tabs y las pantalla de "Sobre Nosotros", "Insignia", "Tienda" y "Contacto"
3
+
4
+import * as React from 'react';
5
+import {useState, useEffect}  from 'react';
6
+import {Text, View, Button, Linking, Image, FlatList, TextInput, StyleSheet, ScrollView } from 'react-native';
7
+import { NavigationContainer } from '@react-navigation/native';
8
+import { createMaterialTopTabNavigator } from '@react-navigation/material-top-tabs';
9
+import { useSafeAreaInsets } from 'react-native-safe-area-context';
10
+
11
+//Json que se están usando como ejemplo de lo que se usaría con una API
12
+//import JsonNosotros from '../nosotros.json' 
13
+//import insignias from '../insignias.json'
14
+
15
+import HomeScreen from '../codes/screen/Homescreen/index';
16
+
17
+import fetch_json from '../fetch_json';
18
+
19
+//función con código para la pantalla de "Sobre Nosotros" donde la data se extrae de Json files.
20
+function Nosotros() {
21
+
22
+    const [jsonNosotros, setNosotros] = useState([]);
23
+    const url = 'http://136.145.231.41/raices_api/api/nosotros/read.php?id=2';
24
+
25
+    useEffect(() => {
26
+        fetch_json(url, setNosotros);
27
+    });
28
+
29
+    return (
30
+        <View style = {{
31
+            flex:1,
32
+            alignItems: "center",
33
+            justifyContent: "space-evenly",
34
+            backgroundColor: "#efffea"}}
35
+            >
36
+            <Text></Text>
37
+            <Image style = {{width: 260, height: 130}} source={require('../image/logowebes.png')}/>
38
+            <Text></Text>
39
+            <Text></Text>
40
+            <ScrollView>
41
+            {jsonNosotros.map((item)=>{
42
+                return (
43
+                    <View key ={item.key} >
44
+                        <Image style = {styles.image} source={{uri: item.imagen}} />
45
+                        <Text style={styles.item}>{item.nombre} {item.apellido} </Text>
46
+                        <Text style={styles.itemLetters}>{item.descripcion}</Text>
47
+                        <Text></Text>
48
+                    </View>
49
+                )
50
+            })}
51
+            </ScrollView>
52
+            <ScrollView>
53
+            <View >
54
+                <View>
55
+                    <Text style={styles.itemMVV}>Misión</Text>
56
+                    <Text style={styles.itemLettersMVV}>Aportar a la transformación hacia la sostenibilidad a nivel individual, empresarial y organizacional a través de la educación y de la promoción y validación de negocios locales que venden productos o servicios sostenibles.</Text>
57
+                </View>
58
+                <View>
59
+                    <Text style={styles.itemMVV}>Visión</Text>
60
+                    <Text style={styles.itemLettersMVV}>Ser reconocidos globalmente como una organización educativa con confiabilidad y compromiso con la educación sobre la sostenibilidad y la promoción y validación de productos y servicios sostenibles locales, destacando y contribuyendo al bienestar de la ciudadanía, el desarrollo económico local, el comercio justo y la conservación del ambiente.</Text>
61
+                </View>
62
+                <View>
63
+                    <Text style={styles.itemMVV}>Valores</Text>
64
+                    <Text style={styles.itemLettersMVV}>Educación, Respeto y responsabilidad social y ambiental, Comercio justo, Confiabilidad, Disciplina, Empatía y solidaridad, Equidad, Honestidad, Humanidad y respeto, Integridad y objetividad</Text>
65
+                </View>
66
+            </View>
67
+            </ScrollView>
68
+            
69
+        </View>     
70
+    );
71
+
72
+}
73
+
74
+//función donde se extraen las insignias y las descripciones de las mismas y se muestran en el tab de "Insignias".
75
+function Logos() {
76
+    const [jsonInsignias, setInsignias] = useState([]);
77
+    const url = 'http://136.145.231.41/raices_api/api/nosotros/read.php?id=1';
78
+
79
+    useEffect(() => {
80
+        fetch_json(url, setInsignias);
81
+    });
82
+
83
+    return (
84
+        <View style = {{
85
+            flex:1,
86
+            alignItems: "center",
87
+            justifyContent: "space-evenly",
88
+            backgroundColor: "#efffea"}}
89
+            >
90
+            <Text></Text>
91
+            <Image style = {{width: 260, height: 130}} source={require('../image/logowebes.png')}/>
92
+            <Text></Text>
93
+            <Text></Text>
94
+            <ScrollView>
95
+            {jsonInsignias.map((item)=>{
96
+                return (
97
+                    <View key ={item.id} >
98
+                        <Image style = {styles.image} source={{uri: item.imagen}} />
99
+                        <Text style={styles.description}>{item.nombre} </Text>
100
+                        <Text></Text>
101
+                    </View>
102
+                )
103
+            })}
104
+            </ScrollView>
105
+        </View>
106
+    );
107
+}
108
+
109
+//función para Tienda. 
110
+function Tienda() {
111
+
112
+    return (
113
+        <View style={{
114
+            flex: 1,
115
+            justifyContent: "center",
116
+            alignItems: "center",
117
+            backgroundColor: "#efffea"
118
+        }}>
119
+            <HomeScreen />
120
+        </View>
121
+    );
122
+}
123
+
124
+//función donde los clientes o personas interesadas pueden escribir un email a raices.
125
+function Contacto() {
126
+    return (
127
+        <View style = {{
128
+            flex:1,
129
+            alignItems: "center",
130
+            justifyContent: "space-evenly",
131
+            backgroundColor: "#efffea"}}>
132
+
133
+            <Image style = {{width: 260, height: 130}} source={require('../image/logowebes.png')}/>
134
+            <Text style={{ fontSize: 20, color: '#2d4b09', fontWeight: '800' }}>Para solicitudes o reclamos: </Text>
135
+            <View style={{padding:20}}>
136
+                
137
+                <Text style={{ fontSize: 10, color: '#4c5b4b', fontWeight: '500' }}>
138
+                    Con el próposito de poder comunicarnos de la manera más efectiva posible, favor de proveer la siguiente información: propósito de comunicación, nombre, apellido y correo electrónico. Nos estaremos comunicando con usted prontamente.
139
+                </Text>
140
+                <Button onPress={() => Linking.openURL('mailto:contacto@raices.com?subject=SendMail&body=Favor de incluir motivo de comunicación e información personal.') } title="Contáctanos!" color="#2d4b09" />
141
+            </View>
142
+    </View>
143
+    );
144
+        
145
+
146
+}
147
+
148
+//estilos de stylesheets
149
+const styles = StyleSheet.create({
150
+    image:{
151
+        flex:2,
152
+        height: 150,
153
+        resizeMode: "contain"
154
+    },
155
+    container: {
156
+        flex: 1,
157
+        backgroundColor:'#58AB63', 
158
+        paddingTop:40, 
159
+        paddingHorizontal: 20, 
160
+    },
161
+    item: { 
162
+        marginTop:30,
163
+        padding:10,
164
+        backgroundColor: '#77aa5a',
165
+        fontSize: 20, 
166
+        color: "#fff",
167
+        justifyContent: "flex-end"
168
+
169
+    },
170
+    description: {
171
+        padding:10,
172
+        backgroundColor: '#77aa5a',
173
+        fontSize: 20, 
174
+        color: "#fff",
175
+        textAlign: "center",
176
+        alignItems: "stretch"
177
+
178
+    },
179
+    itemLetters: { 
180
+        padding: 30,
181
+        backgroundColor: '#77aa5a',
182
+        fontSize: 10, 
183
+        color: "#fff", 
184
+        justifyContent: "flex-start"
185
+    },
186
+    itemMVV:{
187
+        padding: 10,
188
+        fontSize: 15, 
189
+        color: "green"},
190
+    itemLettersMVV: { 
191
+        padding: 10,
192
+        fontSize: 10, 
193
+        color: "#77aa5a", 
194
+        justifyContent: "flex-start"
195
+        }
196
+});
197
+
198
+const Tab = createMaterialTopTabNavigator();
199
+
200
+//todas las pantalla de los tabs.
201
+function MyTabs() {
202
+    const insets = useSafeAreaInsets();
203
+    return (
204
+        <Tab.Navigator screenOptions ={{ style: { backgroundColor: "white", marginTop: insets.top }, activeTintColor: "#228B22", labelStyle: { fontSize: 12 } }}>
205
+            <Tab.Screen name="Sobre Nosotros"
206
+                component={Nosotros}
207
+                options={{ tabBarLabel: 'Sobre Nosotros' }}
208
+            />
209
+            <Tab.Screen name="Insignias"
210
+                component={Logos}
211
+                options={{ tabBarLabel: 'Insignias' }}
212
+            />
213
+            <Tab.Screen name="Tienda"
214
+                component={Tienda}
215
+                options={{ tabBarLabel: 'Tienda' }}
216
+            />
217
+            <Tab.Screen name="Contacto"
218
+                component={Contacto}
219
+                options={{ tabBarLabel: 'Contacto' }}
220
+            />
221
+        </Tab.Navigator>
222
+    );
223
+}
224
+
225
+export default function TopTabNavigator() {
226
+    return (
227
+        <NavigationContainer>
228
+            <MyTabs />
229
+        </NavigationContainer>
230
+    )
231
+}

+ 35
- 0
Radices/Screens/About.js View File

@@ -0,0 +1,35 @@
1
+//Nathalia A. ALicea Maldonado
2
+//Pantalla de Sobre Nosotros. No se está utilizando.
3
+
4
+import React from 'react';
5
+import {View, Text, StyleSheet, Button} from 'react-native';
6
+
7
+export default function About({navigation}){
8
+    return(
9
+        <View style = {styles.container}>
10
+            <View style = {styles.content}>
11
+                <Text style = {styles.text}>
12
+                    About is here!
13
+                </Text>
14
+            </View>
15
+        </View>
16
+    )
17
+}
18
+
19
+const styles = StyleSheet.create({
20
+    container:{
21
+        flex:1
22
+    },
23
+    content:{
24
+        flex:1,
25
+        alignItems: 'center', 
26
+        justifyContent: 'center', 
27
+        backgroundColor: '#c303ac'
28
+    }, 
29
+    text:{
30
+        fontSize: 20, 
31
+        color: '#ffffff', 
32
+        fontWeight: "800"
33
+    }
34
+
35
+})

+ 36
- 0
Radices/Screens/Contact.js View File

@@ -0,0 +1,36 @@
1
+//Nathalia A. ALicea Maldonado
2
+//Pantalla de Sobre Contacto. No se está utilizando.
3
+
4
+import React from 'react';
5
+import {View, Text, StyleSheet, Button} from 'react-native';
6
+
7
+export default function Contact({navigation}){
8
+    return(
9
+        <View style = {styles.container}>
10
+            <View style = {styles.content}>
11
+                <Text style = {styles.text}>
12
+                    Contact is here!
13
+                </Text>
14
+                <Button title = "Go back!" onPress ={()=> navigation.goBack()} />
15
+            </View>
16
+        </View>
17
+    )
18
+}
19
+
20
+const styles = StyleSheet.create({
21
+    container:{
22
+        flex:1
23
+    },
24
+    content:{
25
+        flex:1,
26
+        alignItems: 'center', 
27
+        justifyContent: 'center', 
28
+        backgroundColor: '#c203fc'
29
+    }, 
30
+    text:{
31
+        fontSize: 20, 
32
+        color: '#ffffff', 
33
+        fontWeight: "800"
34
+    }
35
+
36
+})

+ 34
- 0
Radices/Screens/Home.js View File

@@ -0,0 +1,34 @@
1
+//Nathalia A. ALicea Maldonado
2
+//Pantalla de Home. No se está utilizando.
3
+
4
+import React from 'react';
5
+import {View, Text, StyleSheet, Button} from 'react-native';
6
+
7
+export default function Home({navigation}){
8
+    return(
9
+        <View style = {styles.container}>
10
+            <View style = {styles.content}>
11
+                <Text style = {styles.text}>
12
+                    Home is here
13
+                </Text>
14
+            </View>
15
+        </View>
16
+    )
17
+}
18
+
19
+const styles = StyleSheet.create({
20
+    container: {
21
+        flex: 1
22
+    },
23
+    content: {
24
+        flex: 1,
25
+        alignItems: 'center',
26
+        justifyContent: 'center', 
27
+        backgroundColor: '#03cafc'
28
+    },
29
+    text: {
30
+        fontSize: 20,
31
+        color: '#ffffff',
32
+        fontWeight: '800'
33
+    }
34
+})

+ 32
- 0
Radices/app.json View File

@@ -0,0 +1,32 @@
1
+{
2
+  "expo": {
3
+    "name": "Radices",
4
+    "slug": "Radices",
5
+    "version": "1.0.0",
6
+    "orientation": "portrait",
7
+    "icon": "./assets/icon.png",
8
+    "splash": {
9
+      "image": "./assets/splash.png",
10
+      "resizeMode": "contain",
11
+      "backgroundColor": "#ffffff"
12
+    },
13
+    "updates": {
14
+      "fallbackToCacheTimeout": 0
15
+    },
16
+    "assetBundlePatterns": [
17
+      "**/*"
18
+    ],
19
+    "ios": {
20
+      "supportsTablet": true
21
+    },
22
+    "android": {
23
+      "adaptiveIcon": {
24
+        "foregroundImage": "./assets/adaptive-icon.png",
25
+        "backgroundColor": "#FFFFFF"
26
+      }
27
+    },
28
+    "web": {
29
+      "favicon": "./assets/favicon.png"
30
+    }
31
+  }
32
+}

BIN
Radices/assets/adaptive-icon.png View File


BIN
Radices/assets/favicon.png View File


BIN
Radices/assets/icon.png View File


BIN
Radices/assets/splash.png View File


+ 6
- 0
Radices/babel.config.js View File

@@ -0,0 +1,6 @@
1
+module.exports = function(api) {
2
+  api.cache(true);
3
+  return {
4
+    presets: ['babel-preset-expo'],
5
+  };
6
+};

+ 76
- 0
Radices/codes/ProductItems/ProductItem.tsx View File

@@ -0,0 +1,76 @@
1
+import React from 'react';
2
+import {useState,useEffect} from 'react';
3
+import {Image,View,Text} from 'react-native';
4
+import styles from './styles';
5
+
6
+import fetch_json from '../../fetch_json';
7
+
8
+interface ProductItemProps{
9
+  item: {
10
+    id_producto: string,
11
+    producto: string;
12
+    imagen: string;
13
+    comerciante: string;
14
+    precio: number;
15
+    insignias: string[];
16
+  }
17
+}
18
+
19
+export default function ProductItems(props: ProductItemProps) {
20
+  const [jsonInsignias, setInsignias] = useState([]);
21
+  const url = 'http://136.145.231.41/raices_api/api/nosotros/read.php?id=1';
22
+
23
+  async function fetch_() {
24
+    try {
25
+        const response = await fetch(url);
26
+        const json = await response.json();
27
+        setInsignias(json);
28
+    } catch (error) {
29
+        //console.error(error);
30
+    };
31
+}
32
+
33
+  useEffect(() => {
34
+      //fetch_();
35
+      fetch_json(url, setInsignias);
36
+
37
+  });
38
+
39
+
40
+const {item} = props;
41
+  return(
42
+    <View style={styles.root} key={item.id_producto}>
43
+    <Image style={styles.imagen} source={{uri: item.imagen}} />
44
+      <View>
45
+        
46
+        {item.insignias.map((id)=>{
47
+
48
+          let imagen = '';
49
+          for (let i = 0; i < jsonInsignias.length; i++) {
50
+            if (jsonInsignias[i].id == id) {
51
+              imagen = jsonInsignias[i].imagen;
52
+              break;
53
+            }
54
+          }
55
+
56
+          if (imagen.length == 0) {
57
+            //console.log(id + 'empty imagen');
58
+            return;
59
+          }
60
+          else {
61
+
62
+            return (
63
+              <Image key={id} style = {styles.insignia} source={{uri: imagen}} />
64
+            )
65
+
66
+          }
67
+
68
+        })}            
69
+        
70
+        <Text style={styles.producto} numberOfLines={3}> {item.producto} </Text>
71
+        <Text style={styles.comerciante} numberOfLines={1}> by {item.comerciante} </Text>
72
+        <Text style={styles.price}> For ${item.precio}</Text>
73
+      </View>
74
+    </View>
75
+  );
76
+}

+ 38
- 0
Radices/codes/ProductItems/styles.ts View File

@@ -0,0 +1,38 @@
1
+import {StyleSheet} from 'react-native';
2
+const styles = StyleSheet.create({
3
+  root:{
4
+    flexDirection: 'row',
5
+    borderWidth: 2,
6
+    borderColor:'#d1d1d1',
7
+    borderRadius: 20,
8
+    backgroundColor: '#fff',
9
+    marginVertical: 5,
10
+  },
11
+  imagen:{
12
+    flex:2,
13
+    height:150,
14
+    resizeMode:'contain',
15
+  },
16
+  right_container: {
17
+    padding:10,
18
+    flex:3,
19
+  },
20
+  producto: {
21
+    fontSize:18,
22
+  },
23
+  price:{
24
+    fontSize:18,
25
+    fontWeight:'bold',
26
+    padding:10,
27
+  },
28
+  comerciante:{
29
+    fontSize:10,
30
+    padding:10,
31
+  },
32
+  insignia:{
33
+    width: 50,
34
+    height: 50,
35
+    resizeMode:'contain',
36
+  },
37
+});
38
+export default styles;

+ 73
- 0
Radices/codes/screen/Homescreen/index.tsx View File

@@ -0,0 +1,73 @@
1
+import React from 'react';
2
+import {useState,useEffect} from 'react';
3
+import {View,TextInput,StyleSheet,FlatList} from "react-native";
4
+import ProductItems from "../../ProductItems/ProductItem";
5
+
6
+import fetch_json from '../../../fetch_json';
7
+
8
+export default function HomeScreen() {
9
+
10
+const [jsonProductos, setProductos] = useState([]);
11
+const urlProductos = 'http://136.145.231.41/raices_api/api/inventario/read.php';
12
+
13
+/*
14
+const [query, setQuery] = useState('');
15
+
16
+const filter = (query: string) => {
17
+  return jsonProductos.filter((item) =>
18
+    item.producto.toLocaleLowerCase().includes(query.toLocaleLowerCase())
19
+  );
20
+};
21
+
22
+async function fetch_() {
23
+  try {
24
+      const response = await fetch(urlProductos);
25
+      const json = await response.json();
26
+      if (query.length === 0) {
27
+        console.log('empty');
28
+        setProductos(json);
29
+      }
30
+      else {
31
+        console.log(query);
32
+        setProductos(json.filter((item) => item.producto.includes(query)));
33
+      }
34
+  } catch (error) {
35
+      console.error(error);
36
+  };
37
+}
38
+*/
39
+
40
+useEffect(() => {
41
+    fetch_json(urlProductos, setProductos);
42
+    //fetch_();
43
+});
44
+
45
+const [jsonInsignias, setInsignias] = useState([]);
46
+const url = 'http://136.145.231.41/raices_api/api/nosotros/read.php?id=1';
47
+
48
+useEffect(() => {
49
+    fetch_json(url, setInsignias);
50
+});
51
+
52
+  return (
53
+    <View style={styles.page}>
54
+      {/*
55
+      <TextInput
56
+        placeholder="Hacer búsqueda..."
57
+        onChangeText={(query) => {setQuery(query)}}
58
+      />
59
+      */}
60
+
61
+      <FlatList
62
+        data={jsonProductos}
63
+        renderItem={({item}) => <ProductItems item={item} />}
64
+        keyExtractor={(item, index) => item.id_producto}
65
+      />
66
+    </View>
67
+  );
68
+};
69
+const styles = StyleSheet.create({
70
+  page: {
71
+    padding: 10,
72
+  },
73
+});

+ 11
- 0
Radices/fetch_json.js View File

@@ -0,0 +1,11 @@
1
+import * as React from 'react';
2
+
3
+export default async function fetch_json(url, setJson) {
4
+    try {
5
+        const response = await fetch(url);
6
+        const json = await response.json();
7
+        setJson(json);
8
+    } catch (error) {
9
+        console.error(error);
10
+    };
11
+}

BIN
Radices/image/logowebes.png View File


+ 17982
- 0
Radices/package-lock.json
File diff suppressed because it is too large
View File


+ 36
- 0
Radices/package.json View File

@@ -0,0 +1,36 @@
1
+{
2
+  "name": "finalreact",
3
+  "version": "1.0.0",
4
+  "main": "node_modules/expo/AppEntry.js",
5
+  "scripts": {
6
+    "start": "expo start",
7
+    "android": "expo start --android",
8
+    "ios": "expo start --ios",
9
+    "web": "expo start --web",
10
+    "eject": "expo eject"
11
+  },
12
+  "dependencies": {
13
+    "@react-native-community/masked-view": "^0.1.11",
14
+    "@react-navigation/drawer": "^6.1.8",
15
+    "@react-navigation/material-top-tabs": "^6.0.6",
16
+    "@react-navigation/native": "^6.0.6",
17
+    "expo": "~43.0.2",
18
+    "expo-status-bar": "~1.1.0",
19
+    "react": "17.0.1",
20
+    "react-dom": "17.0.1",
21
+    "react-native": "0.64.3",
22
+    "react-native-gesture-handler": "~1.10.2",
23
+    "react-native-reanimated": "~2.2.0",
24
+    "react-native-safe-area-context": "3.3.2",
25
+    "react-native-screens": "~3.8.0",
26
+    "react-native-tab-view": "^3.1.1",
27
+    "react-native-web": "0.17.1"
28
+  },
29
+  "devDependencies": {
30
+    "@babel/core": "^7.12.9",
31
+    "typescript": "~4.3.5",
32
+    "@types/react": "~17.0.21",
33
+    "@types/react-native": "~0.64.12"
34
+  },
35
+  "private": true
36
+}

+ 4
- 0
Radices/tsconfig.json View File

@@ -0,0 +1,4 @@
1
+{
2
+  "compilerOptions": {},
3
+  "extends": "expo/tsconfig.base"
4
+}