changes made

This commit is contained in:
bhavnisharora 2024-12-31 23:59:48 +05:30
parent 5c1d55412b
commit 0468268be9
4 changed files with 90 additions and 18 deletions

View file

@ -15,6 +15,8 @@ body {
.header img { .header img {
width: 200px; width: 200px;
height: 200px;
margin: auto;
animation: fadeIn 2s ease-in-out; animation: fadeIn 2s ease-in-out;
} }
@ -23,6 +25,7 @@ body {
flex-wrap: wrap; flex-wrap: wrap;
justify-content: center; justify-content: center;
gap: 20px; gap: 20px;
cursor: pointer;
} }
.character-card { .character-card {
@ -89,7 +92,8 @@ body {
} }
@keyframes pulse { @keyframes pulse {
0%, 100% { 0%,
100% {
opacity: 0.8; opacity: 0.8;
} }
50% { 50% {

View file

@ -5,6 +5,7 @@ import About from "./pages/About";
import Contact from "./pages/Contact"; import Contact from "./pages/Contact";
import Layout from "./components/layout/Layout"; import Layout from "./components/layout/Layout";
import Error from "./components/Error"; import Error from "./components/Error";
import CharacterDetails from "./components/CharacterDetails";
function App() { function App() {
const router = createBrowserRouter([ const router = createBrowserRouter([
{ {
@ -24,6 +25,11 @@ function App() {
path: "/", path: "/",
element: <Home />, element: <Home />,
}, },
{
path: "/characterDetails/:id",
element: <CharacterDetails />,
},
], ],
}, },
]); ]);

View file

@ -1,26 +1,27 @@
import React from "react"; import React from "react";
import "../App.css"; import "../App.css";
import { Link } from "react-router-dom";
const CharacterCard = (props) => { const CharacterCard = (props) => {
return ( return (
<ul className="character-container"> <ul className="character-container">
{props.data.map((character, index) => ( {props.data.map((character, index) => {
// Extract ID from character's URL
const id = character.url.split("/").filter(Boolean).pop();
return (
<li className="character-card" key={index}> <li className="character-card" key={index}>
<img <Link to={`/characterDetails/${id}`}>
src={`https://starwars-visualguide.com/assets/img/characters/${index +
1}.jpg`}
alt={character.name}
className="character-image"
/>
<div className="character-details"> <div className="character-details">
<p>Name: {character.name}</p> <p>Name: {character.name}</p>
<p>Gender: {character.gender}</p>
<p>Height: {character.height} cm</p> <p>Height: {character.height} cm</p>
<p>Mass: {character.mass} kg</p>
<p>Hair Color: {character.hair_color}</p> <p>Hair Color: {character.hair_color}</p>
<p>Birth Year: {character.birth_year}</p> <p>Birth Year: {character.birth_year}</p>
</div> </div>
</Link>
</li> </li>
))} );
})}
</ul> </ul>
); );
}; };

View file

@ -0,0 +1,61 @@
import axios from "axios";
import React, { useEffect, useState } from "react";
import { useParams } from "react-router";
const CharacterDetails = () => {
const { id } = useParams();
console.log(id);
const [character, setCharacter] = useState(null);
const [loading, setLoading] = useState(false);
useEffect(() => {
setLoading(true);
axios
.get(`https://swapi.py4e.com/api/people/${id}/`)
.then((res) => {
setCharacter(res.data);
setLoading(false);
})
.catch((err) => {
console.log(err);
});
}, []);
if (loading) {
return <p> loading...</p>;
}
if (!character) {
return <p> Character Details not found!</p>;
}
return (
<div className="character-detail-page">
<p>{character.name}</p>
<p>
<strong>Gender: </strong>
{character.gender}
</p>
<p>
<strong>Home World: </strong>
{character.homeworld}
</p>
<p>
<strong>Species: </strong> {character.species}
</p>
<p>
<strong>Films: </strong> {character.films}
</p>
<p>
<strong>Height: </strong> {character.height} cm
</p>
<p>
<strong>Hair Color: </strong> {character.hair_color}
</p>
<p>
<strong>Birth Year: </strong> {character.birth_year}
</p>
</div>
);
};
export default CharacterDetails;