瀏覽代碼

Router half functional

Alex Ortiz 2 年之前
父節點
當前提交
936d7e9d98
共有 9 個文件被更改,包括 142 次插入124 次删除
  1. 41
    2
      src/App.tsx
  2. 2
    0
      src/data/BioInfo.ts
  3. 7
    1
      src/data/Biograph.json
  4. 6
    11
      src/pages/AboutUs.tsx
  5. 32
    27
      src/pages/Biography.tsx
  6. 6
    10
      src/pages/Capsule.tsx
  7. 20
    30
      src/pages/HomePage.tsx
  8. 21
    26
      src/pages/ListBiographies.tsx
  9. 7
    17
      src/pages/ListCapsules.tsx

+ 41
- 2
src/App.tsx 查看文件

@@ -1,5 +1,13 @@
1
-import { IonNav, setupIonicReact } from '@ionic/react';
1
+import { IonApp, IonRouterOutlet, setupIonicReact } from '@ionic/react';
2
+import { Redirect, Route } from 'react-router-dom';
3
+import { IonReactRouter } from '@ionic/react-router';
2 4
 import HomePage from './pages/HomePage';
5
+import ListBiographies from './pages/ListBiographies';
6
+import Biography from './pages/Biography';
7
+import ListCapsules from './pages/ListCapsules';
8
+import Capsule from './pages/Capsule';
9
+import Questions from './pages/Questions';
10
+import AboutUs from './pages/AboutUs';
3 11
 
4 12
 /* Core CSS required for Ionic components to work properly */
5 13
 import '@ionic/react/css/core.css';
@@ -22,8 +30,39 @@ import './theme/variables.css';
22 30
 
23 31
 setupIonicReact();
24 32
 
33
+//<IonNav root={() => <HomePage />}></IonNav>
34
+
25 35
 const App: React.FC = () => (
26
-  <IonNav root={() => <HomePage />}></IonNav>
36
+  <IonApp>
37
+    <IonReactRouter>
38
+      <IonRouterOutlet>
39
+        <Route path="/" exact={true}>
40
+          <Redirect to="/home" />
41
+        </Route>
42
+        <Route path="/home" exact={true}>
43
+          <HomePage />
44
+        </Route>
45
+        <Route path="/ListBiographie">
46
+          <ListBiographies />
47
+        </Route>
48
+        <Route path="/Biographie/:id">
49
+          <Biography />
50
+        </Route>
51
+        <Route path="/ListCapsules">
52
+          <ListCapsules />
53
+        </Route>
54
+        <Route path="/Capsule">
55
+          <Capsule />
56
+        </Route>
57
+        <Route path="/Question">
58
+          <Questions />
59
+        </Route>
60
+        <Route path="/About">
61
+          <AboutUs />
62
+        </Route>
63
+      </IonRouterOutlet>
64
+    </IonReactRouter>
65
+  </IonApp>
27 66
 );
28 67
 
29 68
 export default App;

+ 2
- 0
src/data/BioInfo.ts 查看文件

@@ -4,6 +4,8 @@ export interface BioInfo {
4 4
     id: number;
5 5
     title: string;
6 6
     content: string;
7
+    Text1: string;
8
+    Text2: string;
7 9
     tags: string;
8 10
     photo: string;
9 11
 }

+ 7
- 1
src/data/Biograph.json 查看文件

@@ -3,6 +3,8 @@
3 3
         "id": 1,
4 4
         "title": "Roberto Clemente",
5 5
         "content": "Pelotero, Filántropo Fue un afamado pelotero puertorriqueño que formó parte de las Grandes Ligas de Estados Unidos...",
6
+        "Text1": "Fue un afamado pelotero puertorriqueño que formó parte de las Grandes Ligas de Estados Unidos. El notable jardinero derecho y bateador fue el primer latinoamericano en formar parte del Salón de la Fama del Béisbol de Estados Unidos. También fue conocido por su labor filantrópica.",
7
+        "Text2": "Nació el 18 de agosto de 1934 en San Antón, Carolina. Sus padres fueron Melchor Clemente y Luisa Walker. Desde los ocho años mostró habilidades deportivas con su participación en programas de pequeñas ligas y atletismo infantil. Se destacó en pista y campo, deporte en el que ganó varias medallas, específicamente en tiro de jabalina y distancias cortas. Con apenas 14 años, ya formaba parte del equipo de softball de Sello Rojo, compañía procesadora de arroz. Más adelante, formó parte del equipo de pelota aficionado de Juncos. En 1952, con 18 años de edad, ingresó a la liga de beisbol profesional de Puerto Rico, cuando fue contratado por los Cangrejeros de Santurce. El tiempo que formó parte de este equipo fue crucial para su carrera, ya que pudo pulir sus destrezas deportivas.",
6 8
         "tags": "Deportista, Puertorriqueño",
7 9
         "photo": "require('../assets/RobertoClemente.jpg')"
8 10
     },
@@ -10,13 +12,17 @@
10 12
         "id": 2,
11 13
         "title": "Marian Villaronga Toro",
12 14
         "content": "Durante su incumbencia como secretario de Instrucción Pública se fundó la Editorial del Departamento, el servicio público de radio....",
15
+        "Text1": "Durante su incumbencia como secretario de Instrucción Pública se fundó la Editorial del Departamento, el servicio público de radio y televisión educativa, la Escuela Libre de Música y se adoptó el español como lengua oficial de la enseñanza en todos los niveles del sistema de educación pública en Puerto Rico.",
16
+        "Text2": "Mariano Villaronga Toro nació el 9 de noviembre de 1906 en el pueblo sureño de Ponce. Realizó sus estudios universitarios en la Universidad de Puerto Rico en Río Piedras, donde en 1929 completó un bachillerato en ciencias. Luego, se desempeñó como maestro en el sistema público del país y más adelante, como principal de escuela.",
13 17
         "tags": "Educador, Funcionario público, Puertorriqueño",
14 18
         "photo": "require('../assets/MarianoVillaronga.jpg')"
15 19
     },
16 20
     {
17 21
         "id": 3,
18
-        "title": "German Rieckhoff Sampoyo",
22
+        "title": "German Rieckhoff Sampayo",
19 23
         "content": "Germán Rieckehoff Sampayo fue un pilar del olimpismo y defensor de la soberanía deportiva puertorriqueña. Fue presidente del Comité Olímpico de Puerto Rico (COPUR)....",
24
+        "Text1": "Germán Rieckehoff Sampayo fue un pilar del olimpismo y defensor de la soberanía deportiva puertorriqueña. Fue presidente del Comité Olímpico de Puerto Rico (COPUR) de 1977 a 1989 y fue el primer puertorriqueño en ser miembro del Comité Olímpico Internacional. Durante su incumbencia, fundó el Albergue Olímpico ubicado en el pueblo de Salinas.",
25
+        "Text2": "Nació el 15 de febrero de 1915 en Vieques, hijo de la maestra Angelita Sampayo y del contador Germán Rieckehoff Morales, descendiente de emigrantes alemanes que fue electo a la Cámara de Representantes por el partido Alianza Puertorriqueña en el distrito electoral de Vieques, Fajardo y Culebra (1925-1928). Su educación primaria la realizó en su pueblo natal, en el Instituto Politécnico en San Germán y en la escuela Hawthorne en Río Piedras. Es para esta época que comienza su interés por los deportes; practicaba baloncesto, béisbol y formó parte de los niños escucha (boy scouts). Comenzó la escuela superior de la Universidad de Puerto Rico (UHS), en Río Piedras, pero abandonó los estudios en 1931.",
20 26
         "tags": "Líder deportivo, Abogado, Puertorriqueño",
21 27
         "photo": "require('../assets/DonGermán.jpg')"
22 28
     }

+ 6
- 11
src/pages/AboutUs.tsx 查看文件

@@ -6,17 +6,14 @@ import {
6 6
   IonPage,
7 7
   IonToolbar,
8 8
   IonFooter,
9
-  IonNavLink,
10
-  IonTabButton,
11
-  IonIcon,
12 9
   IonGrid,
13 10
   IonRow,
14
-  IonCol
11
+  IonCol,
12
+  IonButtons,
13
+  IonBackButton
15 14
 } from '@ionic/react';
16
-import { arrowBack } from 'ionicons/icons';
17 15
 import React from 'react';
18 16
 import './AboutUs.css';
19
-import HomePage from './HomePage';
20 17
 import EnciclopediaPR from '../assets/EnciclopediaPR.png';
21 18
 import About from '../data/About.json'
22 19
 
@@ -52,11 +49,9 @@ const AboutUs: React.FC = () => {
52 49
       </IonContent>
53 50
       <IonFooter>
54 51
         <IonToolbar>
55
-          <IonNavLink routerDirection="forward" component={() => <HomePage />}>
56
-            <IonTabButton tab="HomePage" href="/HomePage">
57
-              <IonIcon icon={arrowBack} />
58
-            </IonTabButton>
59
-          </IonNavLink>
52
+          <IonButtons slot="start">
53
+            <IonBackButton defaultHref="/home"></IonBackButton>
54
+          </IonButtons>
60 55
         </IonToolbar>
61 56
       </IonFooter>
62 57
     </IonPage>

+ 32
- 27
src/pages/Biography.tsx 查看文件

@@ -7,23 +7,31 @@ import {
7 7
     IonFooter,
8 8
     IonNavLink,
9 9
     IonButton,
10
-    IonTabButton,
11
-    IonIcon,
12 10
     IonImg,
13 11
     IonGrid,
14 12
     IonRow,
15
-    IonCol
13
+    IonCol,
14
+    IonButtons,
15
+    IonBackButton,
16
+    useIonViewWillEnter
16 17
 } from '@ionic/react';
17
-import { arrowBack } from 'ionicons/icons';
18
-import React from 'react';
18
+import { useParams } from 'react-router';
19
+import React, { useState } from 'react';
20
+import { BioInfo, getMessage } from '../data/BioInfo';
19 21
 import './Biography.css';
20
-import ListBiographies from './ListBiographies';
21 22
 import Questions from './Questions';
22 23
 import EnciclopediaPR from '../assets/EnciclopediaPR.png';
23 24
 import RobertoClemente from '../assets/RobertoClemente.jpg';
24
-import ListBio from '../data/Biograph.json';
25 25
 
26 26
 const Biography: React.FC = () => {
27
+    const [bioinfo, setMessage] = useState<BioInfo>();
28
+    const params = useParams<{ id: string }>();
29
+
30
+    useIonViewWillEnter(() => {
31
+        const msg = getMessage(parseInt(params.id, 10));
32
+        setMessage(msg);
33
+    });
34
+
27 35
     return (
28 36
         <IonPage>
29 37
             <IonHeader>
@@ -41,31 +49,28 @@ const Biography: React.FC = () => {
41 49
                 </IonToolbar>
42 50
             </IonHeader>
43 51
             <IonContent fullscreen className="ion-padding">
44
-                {
45
-                    ListBio && ListBio.map(listbio => {
46
-                        return (
47
-                            <>
48
-                                <IonImg style={{ height: 300, width: 600 }} src={RobertoClemente} alt='Logo'></IonImg>
49
-                                <h1>{listbio.title}</h1>
52
+                {bioinfo ? (
53
+                    <>
54
+                        <IonImg style={{ height: 300, width: 600 }} src={RobertoClemente} alt='Logo'></IonImg>
55
+                        <h1>{bioinfo.title}</h1>
50 56
 
51
-                                <p>{listbio.tags}</p>
52
-                                <p>{listbio.content}</p>
53
-                                <IonNavLink routerDirection="forward" component={() => <Questions />}>
54
-                                    <IonButton>Tomar quiz</IonButton>
55
-                                </IonNavLink>
56
-                            </>
57
-                        )
58
-                    })
59
-                }
57
+                        <p>{bioinfo.tags}</p>
58
+                        <p>{bioinfo.Text1}</p>
59
+                        <p>{bioinfo.Text2}</p>
60
+                        <IonNavLink routerDirection="forward" component={() => <Questions />}>
61
+                            <IonButton>Tomar quiz</IonButton>
62
+                        </IonNavLink>
63
+                    </>
64
+                ) : (
65
+                    <div>Message not found</div>
66
+                )}
60 67
             </IonContent>
61 68
 
62 69
             <IonFooter>
63 70
                 <IonToolbar>
64
-                    <IonNavLink routerDirection="forward" component={() => <ListBiographies />}>
65
-                        <IonTabButton tab="ListBiographies" href="/ListBiographies">
66
-                            <IonIcon icon={arrowBack} />
67
-                        </IonTabButton>
68
-                    </IonNavLink>
71
+                    <IonButtons slot="start">
72
+                        <IonBackButton defaultHref="/home"></IonBackButton>
73
+                    </IonButtons>
69 74
                 </IonToolbar>
70 75
             </IonFooter>
71 76
         </IonPage>

+ 6
- 10
src/pages/Capsule.tsx 查看文件

@@ -6,18 +6,16 @@ import {
6 6
     IonToolbar,
7 7
     IonFooter,
8 8
     IonNavLink,
9
-    IonTabButton,
10
-    IonIcon,
11 9
     IonImg,
12 10
     IonGrid,
13 11
     IonRow,
14 12
     IonCol,
15
-    IonButton
13
+    IonButton,
14
+    IonButtons,
15
+    IonBackButton
16 16
 } from '@ionic/react';
17
-import { arrowBack } from 'ionicons/icons';
18 17
 import React from 'react';
19 18
 import './Capsule.css';
20
-import ListCapsules from './ListCapsules';
21 19
 import Biography from './Biography';
22 20
 import EnciclopediaPR from '../assets/EnciclopediaPR.png';
23 21
 import Bomba from '../assets/BombaPuertorriquena.jpg';
@@ -61,11 +59,9 @@ const Capsule: React.FC = () => {
61 59
             </IonContent>
62 60
             <IonFooter>
63 61
                 <IonToolbar>
64
-                    <IonNavLink routerDirection="forward" component={() => <ListCapsules />}>
65
-                        <IonTabButton tab="ListCapsules" href="/ListCapsules">
66
-                            <IonIcon icon={arrowBack} />
67
-                        </IonTabButton>
68
-                    </IonNavLink>
62
+                    <IonButtons slot="start">
63
+                        <IonBackButton defaultHref="/ListCapsules"></IonBackButton>
64
+                    </IonButtons>
69 65
                 </IonToolbar>
70 66
             </IonFooter>
71 67
         </IonPage>

+ 20
- 30
src/pages/HomePage.tsx 查看文件

@@ -1,6 +1,5 @@
1 1
 import {
2 2
   IonContent,
3
-  IonButton,
4 3
   IonHeader,
5 4
   IonPage,
6 5
   IonTitle,
@@ -9,7 +8,6 @@ import {
9 8
   IonCardHeader,
10 9
   IonCardSubtitle,
11 10
   IonCardTitle,
12
-  IonNavLink,
13 11
   IonFooter,
14 12
   IonTabButton,
15 13
   IonIcon,
@@ -17,13 +15,11 @@ import {
17 15
   IonImg,
18 16
   IonCol,
19 17
   IonGrid,
20
-  IonRow
18
+  IonRow,
19
+  IonItem
21 20
 } from '@ionic/react';
22 21
 import { square } from 'ionicons/icons';
23 22
 import './HomePage.css';
24
-import ListBiographies from './ListBiographies';
25
-import ListCapsules from './ListCapsules';
26
-import AboutUs from './AboutUs';
27 23
 import EnciclopediaPR from '../assets/EnciclopediaPR.png';
28 24
 
29 25
 const HomePage: React.FC = () => {
@@ -44,37 +40,31 @@ const HomePage: React.FC = () => {
44 40
         </IonToolbar>
45 41
       </IonHeader>
46 42
       <IonContent fullscreen>
47
-        <IonCard>
48
-          <IonCardHeader>
49
-            <IonCardTitle>Biografías</IonCardTitle>
50
-            <IonCardSubtitle>Lista de todas las biografías</IonCardSubtitle>
51
-          </IonCardHeader>
52
-          <IonNavLink routerDirection="forward" component={() => <ListBiographies />}>
53
-            <IonButton size="default" expand="block" shape="round">
54
-              Buscar
55
-            </IonButton>
56
-          </IonNavLink>
57
-        </IonCard>
58
-        <IonCard>
59
-          <IonCardHeader>
60
-            <IonCardTitle>Cápsulas</IonCardTitle>
61
-            <IonCardSubtitle>Lista de todas las cápsulas</IonCardSubtitle>
62
-          </IonCardHeader>
63
-          <IonNavLink routerDirection="forward" component={() => <ListCapsules />}>
64
-            <IonButton size="default" expand="block" shape="round">
65
-              Buscar
66
-            </IonButton>
67
-          </IonNavLink>
68
-        </IonCard>
43
+        <IonItem routerLink={`/ListBiographie`} detail={true}>
44
+          <IonCard>
45
+            <IonCardHeader>
46
+              <IonCardTitle>Biografías</IonCardTitle>
47
+              <IonCardSubtitle>Lista de todas las biografías</IonCardSubtitle>
48
+            </IonCardHeader>
49
+          </IonCard>
50
+        </IonItem>
51
+        <IonItem routerLink={`/ListCapsules`} detail={true}>
52
+          <IonCard>
53
+            <IonCardHeader>
54
+              <IonCardTitle>Cápsulas</IonCardTitle>
55
+              <IonCardSubtitle>Lista de todas las cápsulas</IonCardSubtitle>
56
+            </IonCardHeader>
57
+          </IonCard>
58
+        </IonItem>
69 59
       </IonContent>
70 60
       <IonFooter>
71 61
         <IonToolbar>
72
-          <IonNavLink routerDirection="forward" component={() => <AboutUs />}>
62
+          <IonItem routerLink={`/About`} detail={true}>
73 63
             <IonTabButton tab="AboutUs" href="/AboutUs">
74 64
               <IonIcon icon={square} />
75 65
               <IonLabel>Sobre nosotros</IonLabel>
76 66
             </IonTabButton>
77
-          </IonNavLink>
67
+          </IonItem>
78 68
         </IonToolbar>
79 69
       </IonFooter>
80 70
     </IonPage>

+ 21
- 26
src/pages/ListBiographies.tsx 查看文件

@@ -14,17 +14,15 @@ import {
14 14
   IonButton,
15 15
   IonNavLink,
16 16
   IonFooter,
17
-  IonTabButton,
18
-  IonIcon,
19 17
   IonGrid,
20 18
   IonRow,
21
-  IonCol
19
+  IonCol,
20
+  IonButtons,
21
+  IonBackButton,
22
+  IonItem
22 23
 } from '@ionic/react';
23
-import { arrowBack } from 'ionicons/icons';
24 24
 import './ListBiographies.css';
25
-import Biography from './Biography';
26 25
 import Questions from './Questions';
27
-import HomePage from './HomePage';
28 26
 import EnciclopediaPR from '../assets/EnciclopediaPR.png';
29 27
 import RobertoClemente from '../assets/RobertoClemente.jpg';
30 28
 import ListBio from '../data/Biograph.json';
@@ -53,22 +51,21 @@ const ListBiographies: React.FC = () => {
53 51
           ListBio && ListBio.map(listbio => {
54 52
             return (
55 53
               <>
56
-                <IonCard>
57
-                  <IonImg style={{ height: 300, width: 600 }} src={RobertoClemente} alt='Logo'></IonImg>
58
-                  <IonCardHeader>
59
-                    <IonCardTitle>{listbio.title}</IonCardTitle>
60
-                    <IonCardSubtitle>{listbio.tags}</IonCardSubtitle>
61
-                  </IonCardHeader><IonCardContent>
62
-                    {listbio.content}
63
-                  </IonCardContent>
64
-                  <IonNavLink routerDirection="forward" component={() => <Biography />} >
65
-                    <IonButton>Go to</IonButton>
66
-                  </IonNavLink>
54
+                <IonItem routerLink={`/Biographie/${listbio.id}`} detail={true}>
55
+                  <IonCard>
56
+                    <IonImg style={{ height: 300, width: 600 }} src={RobertoClemente} alt='Logo'></IonImg>
57
+                    <IonCardHeader>
58
+                      <IonCardTitle>{listbio.title}</IonCardTitle>
59
+                      <IonCardSubtitle>{listbio.tags}</IonCardSubtitle>
60
+                    </IonCardHeader><IonCardContent>
61
+                      {listbio.content}
62
+                    </IonCardContent>
67 63
 
68
-                  <IonNavLink routerDirection="forward" component={() => <Questions />}>
69
-                    <IonButton>Tomar quiz</IonButton>
70
-                  </IonNavLink>
71
-                </IonCard>
64
+                    <IonNavLink routerDirection="forward" component={() => <Questions />}>
65
+                      <IonButton>Tomar quiz</IonButton>
66
+                    </IonNavLink>
67
+                  </IonCard>
68
+                </IonItem>
72 69
               </>
73 70
             )
74 71
           })
@@ -76,11 +73,9 @@ const ListBiographies: React.FC = () => {
76 73
       </IonContent>
77 74
       <IonFooter>
78 75
         <IonToolbar>
79
-          <IonNavLink routerDirection="forward" component={() => <HomePage />}>
80
-            <IonTabButton tab="HomePage" href="/HomePage">
81
-              <IonIcon icon={arrowBack} />
82
-            </IonTabButton>
83
-          </IonNavLink>
76
+          <IonButtons slot="start">
77
+            <IonBackButton defaultHref="/home"></IonBackButton>
78
+          </IonButtons>
84 79
         </IonToolbar>
85 80
       </IonFooter>
86 81
     </IonPage>

+ 7
- 17
src/pages/ListCapsules.tsx 查看文件

@@ -9,19 +9,14 @@ import {
9 9
   IonPage,
10 10
   IonTitle,
11 11
   IonToolbar,
12
-  IonButton,
13
-  IonNavLink,
14 12
   IonFooter,
15
-  IonTabButton,
16
-  IonIcon,
17 13
   IonGrid,
18 14
   IonRow,
19
-  IonCol
15
+  IonCol,
16
+  IonButtons,
17
+  IonBackButton
20 18
 } from '@ionic/react';
21
-import { arrowBack } from 'ionicons/icons';
22 19
 import './ListCapsules.css';
23
-import HomePage from './HomePage';
24
-import Capsule from './Capsule'
25 20
 import EnciclopediaPR from '../assets/EnciclopediaPR.png';
26 21
 
27 22
 const ListCapsules: React.FC = () => {
@@ -44,11 +39,8 @@ const ListCapsules: React.FC = () => {
44 39
       <IonContent fullscreen>
45 40
         <IonSearchbar></IonSearchbar>
46 41
         <IonList inset={true}>
47
-          <IonItem>
42
+          <IonItem routerLink={`/Capsule`} detail={true}>
48 43
             <IonLabel>Breve Historia del baile en Puerto Rico</IonLabel>
49
-            <IonNavLink routerDirection="forward" component={() => <Capsule />}>
50
-              <IonButton>Visitar</IonButton>
51
-            </IonNavLink>
52 44
           </IonItem>
53 45
           <IonItem>
54 46
             <IonLabel>Cápsula#2</IonLabel>
@@ -60,11 +52,9 @@ const ListCapsules: React.FC = () => {
60 52
       </IonContent>
61 53
       <IonFooter>
62 54
         <IonToolbar>
63
-          <IonNavLink routerDirection="forward" component={() => <HomePage />}>
64
-            <IonTabButton tab="HomePage" href="/HomePage">
65
-              <IonIcon icon={arrowBack} />
66
-            </IonTabButton>
67
-          </IonNavLink>
55
+          <IonButtons slot="start">
56
+            <IonBackButton defaultHref="/home"></IonBackButton>
57
+          </IonButtons>
68 58
         </IonToolbar>
69 59
       </IonFooter>
70 60
     </IonPage>