Skip to content

Commit bc9d782

Browse files
committed
implementacion personajes
1 parent d40bd2c commit bc9d782

5 files changed

Lines changed: 77 additions & 37 deletions

File tree

src/components/Favorites.jsx

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,26 @@
1-
const favoriteList = ["Gustavo", "kilian", "Pepito"];
1+
import useGlobalReducer from "../hooks/useGlobalReducer.jsx";
22
export const Favorites = () => {
3+
const { store, dispatch } = useGlobalReducer();
4+
5+
const favorites = store.favoriteList || [];
6+
37
return (
48
<>
59
<div className="dropdown">
6-
<a
10+
<button
711
className="btn btn-primary dropdown-toggle"
8-
href="#"
9-
role="button"
12+
type="button"
1013
data-bs-toggle="dropdown"
1114
aria-expanded="false"
1215
>
13-
Favorites
14-
</a>
16+
Favorites ({favorites.length})
17+
</button>
1518

1619
<ul className="dropdown-menu">
17-
{favoriteList.map((item) => (
18-
<li>
20+
{favorites.map((item, index) => (
21+
<li key={item.name || index}>
1922
<a className="dropdown-item" href="#">
20-
{item}
23+
{item.name || item}
2124
</a>
2225
</li>
2326
))}

src/main.jsx

Lines changed: 17 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,21 @@
1-
import React from 'react'
2-
import ReactDOM from 'react-dom/client'
3-
import './index.css' // Global styles for your application
4-
import { RouterProvider } from "react-router-dom"; // Import RouterProvider to use the router
5-
import { router } from "./routes"; // Import the router configuration
6-
import { StoreProvider } from './hooks/useGlobalReducer'; // Import the StoreProvider for global state management
1+
import React from "react";
2+
import ReactDOM from "react-dom/client";
3+
import "./index.css"; // Global styles for your application
4+
import { RouterProvider } from "react-router-dom"; // Import RouterProvider to use the router
5+
import { router } from "./routes"; // Import the router configuration
6+
import { StoreProvider } from "./hooks/useGlobalReducer.jsx"; // Import the StoreProvider for global state management
77

88
const Main = () => {
9-
return (
10-
<React.StrictMode>
11-
{/* Provide global state to all components */}
12-
<StoreProvider>
13-
{/* Set up routing for the application */}
14-
<RouterProvider router={router}>
15-
</RouterProvider>
16-
</StoreProvider>
17-
</React.StrictMode>
18-
);
19-
}
9+
return (
10+
<React.StrictMode>
11+
{/* Provide global state to all components */}
12+
<StoreProvider>
13+
{/* Set up routing for the application */}
14+
<RouterProvider router={router}></RouterProvider>
15+
</StoreProvider>
16+
</React.StrictMode>
17+
);
18+
};
2019

2120
// Render the Main component into the root DOM element.
22-
ReactDOM.createRoot(document.getElementById('root')).render(<Main />)
21+
ReactDOM.createRoot(document.getElementById("root")).render(<Main />);

src/pages/Home.jsx

Lines changed: 33 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,32 @@ const MOCK_IMG_SRC =
99
export const Home = () => {
1010
const { store, dispatch } = useGlobalReducer();
1111

12+
const IMAGE_MAP = {
13+
"Luke Skywalker":
14+
"https://lumiere-a.akamaihd.net/v1/images/luke-skywalker-main_7ffe21c7.jpeg?region=130%2C147%2C1417%2C796",
15+
"C-3PO":
16+
"https://lumiere-a.akamaihd.net/v1/images/c-3po-main_d6850e28.jpeg?region=176%2C0%2C951%2C536",
17+
"R2-D2":
18+
"https://lumiere-a.akamaihd.net/v1/images/r2-d2-main_f315b094.jpeg?region=273%2C0%2C951%2C536",
19+
"Darth Vader":
20+
"https://lumiere-a.akamaihd.net/v1/images/darth-vader-main_4560aff7.jpeg?region=0%2C67%2C1280%2C720",
21+
"Leia Organa":
22+
"https://lumiere-a.akamaihd.net/v1/images/leia-organa-main_9af6ff81.jpeg?region=187%2C157%2C1400%2C786",
23+
"Owen Lars":
24+
"https://lumiere-a.akamaihd.net/v1/images/owen-lars-main_08c717c8.jpeg?region=0%2C34%2C1053%2C593",
25+
"Beru Whitesun lars":
26+
"https://lumiere-a.akamaihd.net/v1/images/beru-lars-main_fa680a4c.png?region=342%2C0%2C938%2C527",
27+
"R5-D4":
28+
"https://lumiere-a.akamaihd.net/v1/images/r5-d4_main_image_7d5f078e.jpeg?region=374%2C0%2C1186%2C666",
29+
"Biggs Darklighter":
30+
"https://lumiere-a.akamaihd.net/v1/images/image_606ff7f7.jpeg?region=0%2C0%2C1560%2C878",
31+
"Obi-Wan Kenobi":
32+
"https://lumiere-a.akamaihd.net/v1/images/obi-wan-kenobi-main_3286c63c.jpeg?region=0%2C0%2C1280%2C721",
33+
};
34+
1235
const updateData = async () => {
1336
const characterList = await getCharacterList();
14-
dispatch({ type: "update_character_list", payload: characterList });
37+
dispatch({ type: "update_characterList", payload: characterList });
1538
};
1639

1740
useEffect(() => {
@@ -21,12 +44,16 @@ export const Home = () => {
2144
return (
2245
<>
2346
Home
24-
{store.characterList.map((character) => (
25-
<Card imgURL={MOCK_IMG_SRC} title={character.name}>
47+
{store.characterList.map((character, index) => (
48+
<Card
49+
key={character?.name || index}
50+
imgURL={IMAGE_MAP[character?.name] || MOCK_IMG_SRC}
51+
title={character?.name}
52+
>
2653
<ul>
27-
<li>eye color: blue</li>
28-
<li>hair Color: green</li>
29-
<li>size: 6feet</li>
54+
<li>Eye color: {character?.eye_color}</li>
55+
<li>Hair Color: {character?.hair_color}</li>
56+
<li>size: {character?.height}cm</li>
3057
</ul>
3158
</Card>
3259
))}

src/store.js

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
export const initialStore = () => {
22
return {
3+
todos: [],
34
favoriteList: [],
45
characterList: [],
56
planetList: [],
@@ -25,15 +26,16 @@ export default function storeReducer(store, action = {}) {
2526
const favoriteList = store.favoriteList.filter(
2627
(item) => item !== action.payload.name
2728
);
29+
return { ...store, favoriteList: favoriteList };
2830
case "update_characterList":
2931
const characterList = action.payload;
30-
return { ...store.characterList };
32+
return { ...store, characterList };
3133
case "update_planetList":
3234
const planetList = action.payload;
33-
return { ...store.planetList };
35+
return { ...store, planetList };
3436
case "update_vehicleList":
3537
const vehicleList = action.payload;
36-
return { ...store.vehicleList };
38+
return { ...store, vehicleList };
3739

3840
default:
3941
throw Error("Unknown action.");

src/swapiFetch.js

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,16 @@ const SWAPI_URL = "https://www.swapi.tech/api/";
33
export const getCharacterList = async () => {
44
const httpResponse = await fetch(`${SWAPI_URL}people`);
55
const data = await httpResponse.json();
6-
return data.results;
6+
7+
const characterListSimple = data.results;
8+
const detailPromises = characterListSimple.map(async (character) => {
9+
const detailResponse = await fetch(character.url);
10+
const detailData = await detailResponse.json();
11+
12+
return detailData.result.properties;
13+
});
14+
const characterListWithDetails = await Promise.all(detailPromises);
15+
return characterListWithDetails;
716
};
817

918
export const getPlanetList = async () => {

0 commit comments

Comments
 (0)