From b51a8b30d5dad061644f403eff725bdf96123a55 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CZuzana?= <“zuzana@getyourguide.com”> Date: Sun, 28 May 2023 17:44:42 +0200 Subject: [PATCH 01/26] Iteration 1 --- src/App.css | 25 ++++++++++++++++++--- src/App.js | 46 ++++++++++++++++++++++++--------------- src/components/IdCard.jsx | 18 +++++++++++++++ 3 files changed, 69 insertions(+), 20 deletions(-) create mode 100644 src/components/IdCard.jsx diff --git a/src/App.css b/src/App.css index 74b5e0534..ddde8d0ce 100644 --- a/src/App.css +++ b/src/App.css @@ -18,10 +18,10 @@ min-height: 100vh; display: flex; flex-direction: column; - align-items: center; - justify-content: center; + /* align-items: center; */ + /* justify-content: center; */ font-size: calc(10px + 2vmin); - color: white; + color: black; } .App-link { @@ -36,3 +36,22 @@ transform: rotate(360deg); } } + + +.cardDiv{ + display: flex; + flex-direction: row; + padding: 20px; + border: 1px solid black; + width: 400px; + margin: 20px; +} + +.cardImage{ + padding: 20px; +} + +.cardTextDiv{ + text-align: left; + padding: 5px; +} \ No newline at end of file diff --git a/src/App.js b/src/App.js index 378457572..48ed870ca 100644 --- a/src/App.js +++ b/src/App.js @@ -1,24 +1,36 @@ -import logo from './logo.svg'; import './App.css'; +import IdCard from './components/IdCard'; function App() { + const cardArray = [ { + // id: 1, + lastName: "Delores", + firstName:'Obrien', + gender: 'female', + height: 172, + birth: Date("1988-05-11"), + picture: "https://randomuser.me/api/portraits/women/44.jpg"} + +, { + // id: 2, + lastName: "Doe", + firstName:'John', + gender: 'male', + height: 178, + birth: Date("1992-07-14"), + picture: "https://randomuser.me/api/portraits/men/44.jpg" +} ]; + return ( -
-
- logo -

- Edit src/App.js and save to reload. -

- - Learn React - -
-
+
+ {cardArray.map (card => { + return + } + + )} + +
+ ); } diff --git a/src/components/IdCard.jsx b/src/components/IdCard.jsx new file mode 100644 index 000000000..4fa85077a --- /dev/null +++ b/src/components/IdCard.jsx @@ -0,0 +1,18 @@ +function IdCard({eachCard}) { + return ( +
+
+ user image +
+
+

Name: {eachCard.firstName}

+

Last name: {eachCard.lastName}

+

Gender: {eachCard.gender}

+

Height: {eachCard.height}

+

Birth: {eachCard.birth}

+
+
+ ) +} + +export default IdCard From 719cb0e1f5daa4e281b4bd13e5e196711c425998 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CZuzana?= <“zuzana@getyourguide.com”> Date: Sun, 28 May 2023 20:05:20 +0200 Subject: [PATCH 02/26] Iteration 2 --- src/App.css | 15 ++++++++++++--- src/App.js | 19 ++++++++++++------- src/components/Greetings.jsx | 20 ++++++++++++++++++++ src/components/IdCard.jsx | 2 +- 4 files changed, 45 insertions(+), 11 deletions(-) create mode 100644 src/components/Greetings.jsx diff --git a/src/App.css b/src/App.css index ddde8d0ce..8c9f96ac6 100644 --- a/src/App.css +++ b/src/App.css @@ -1,5 +1,5 @@ .App { - text-align: center; + /* text-align: center; */ } .App-logo { @@ -17,9 +17,9 @@ background-color: #282c34; min-height: 100vh; display: flex; - flex-direction: column; + /* flex-direction: column; /* align-items: center; */ - /* justify-content: center; */ + /* justify-content: center; */ font-size: calc(10px + 2vmin); color: black; } @@ -54,4 +54,13 @@ .cardTextDiv{ text-align: left; padding: 5px; +} + +.langdiv{ + display: flex; + flex-direction: row; + padding: 20px; + border: 1px solid black; + width: 400px; + margin: 20px; } \ No newline at end of file diff --git a/src/App.js b/src/App.js index 48ed870ca..4b1f34493 100644 --- a/src/App.js +++ b/src/App.js @@ -1,5 +1,6 @@ import './App.css'; import IdCard from './components/IdCard'; +import Greetings from './components/Greetings'; function App() { const cardArray = [ { @@ -21,16 +22,20 @@ function App() { picture: "https://randomuser.me/api/portraits/men/44.jpg" } ]; + // const lang = ["de", "en", "es", "fr"]; + // const children = [{en: "Hello"},{de: "Hallo"},{es: "Hola"},{fr: "Bonjour"}]; + return (
- {cardArray.map (card => { - return - } - - )} - + {cardArray.map (card => { + return + } + )} +
+ Ludwig + François +
- ); } diff --git a/src/components/Greetings.jsx b/src/components/Greetings.jsx new file mode 100644 index 000000000..084b8af61 --- /dev/null +++ b/src/components/Greetings.jsx @@ -0,0 +1,20 @@ + +function Greetings(props) { + let language = props.lang + let children = props.children + let greeting = "" + if(language === "de"){ + greeting = "Hallo" + }else if(language === "fr"){ + greeting = "Bonjour" + } + + + return ( +
+

{greeting}, {children}

+
+ ) +} + +export default Greetings diff --git a/src/components/IdCard.jsx b/src/components/IdCard.jsx index 4fa85077a..ddf923799 100644 --- a/src/components/IdCard.jsx +++ b/src/components/IdCard.jsx @@ -2,7 +2,7 @@ function IdCard({eachCard}) { return (
- user image + user

Name: {eachCard.firstName}

From c7a49013bf154edc5a17c25ebe334331f87a2314 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CZuzana?= <“zuzana@getyourguide.com”> Date: Sun, 28 May 2023 20:16:01 +0200 Subject: [PATCH 03/26] Iteration 3 --- src/App.js | 23 ++++++++++++++--------- src/components/Random.jsx | 12 ++++++++++++ 2 files changed, 26 insertions(+), 9 deletions(-) create mode 100644 src/components/Random.jsx diff --git a/src/App.js b/src/App.js index 4b1f34493..2ca42133b 100644 --- a/src/App.js +++ b/src/App.js @@ -1,6 +1,7 @@ import './App.css'; import IdCard from './components/IdCard'; import Greetings from './components/Greetings'; +import Random from './components/Random'; function App() { const cardArray = [ { @@ -22,18 +23,22 @@ function App() { picture: "https://randomuser.me/api/portraits/men/44.jpg" } ]; - // const lang = ["de", "en", "es", "fr"]; - // const children = [{en: "Hello"},{de: "Hallo"},{es: "Hola"},{fr: "Bonjour"}]; - + return (
- {cardArray.map (card => { - return - } - )}
- Ludwig - François + {cardArray.map (card => { + return + } + )} +
+
+ Ludwig + François +
+
+ +
); diff --git a/src/components/Random.jsx b/src/components/Random.jsx new file mode 100644 index 000000000..b1cdf9f0b --- /dev/null +++ b/src/components/Random.jsx @@ -0,0 +1,12 @@ + + +function Random(props) { + const result = Math.floor(Math.random() * (props.max - props.min) + props.min);; + return ( +
+

Random value between {props.min} and {props.max} is {result}

+
+ ) +} + +export default Random From 26b53588ff3bf433cd9b7407781bd6c8dc269692 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CZuzana?= <“zuzana@getyourguide.com”> Date: Sun, 28 May 2023 20:49:49 +0200 Subject: [PATCH 04/26] Iteration 4 --- src/App.css | 1 + src/App.js | 6 ++++++ src/components/Boxcolor.jsx | 14 ++++++++++++++ 3 files changed, 21 insertions(+) create mode 100644 src/components/Boxcolor.jsx diff --git a/src/App.css b/src/App.css index 8c9f96ac6..421d1d4ca 100644 --- a/src/App.css +++ b/src/App.css @@ -63,4 +63,5 @@ border: 1px solid black; width: 400px; margin: 20px; + } \ No newline at end of file diff --git a/src/App.js b/src/App.js index 2ca42133b..5a0c7231b 100644 --- a/src/App.js +++ b/src/App.js @@ -2,6 +2,7 @@ import './App.css'; import IdCard from './components/IdCard'; import Greetings from './components/Greetings'; import Random from './components/Random'; +import Boxcolor from './components/Boxcolor'; function App() { const cardArray = [ { @@ -40,6 +41,11 @@ function App() {
+
+ + +
+
); } diff --git a/src/components/Boxcolor.jsx b/src/components/Boxcolor.jsx new file mode 100644 index 000000000..d6cbe4a68 --- /dev/null +++ b/src/components/Boxcolor.jsx @@ -0,0 +1,14 @@ + + +function Boxcolor(colors) { + const color =`rgb(${colors.r},${colors.g},${colors.b})`; + return ( +
+
Hello World!
; +
+ ) +} + +export default Boxcolor From ae5de57a64e92513e58ded51b66b7ba2a6575319 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CZuzana?= <“zuzana@getyourguide.com”> Date: Sun, 28 May 2023 21:35:18 +0200 Subject: [PATCH 05/26] Iteration 5 --- src/App.css | 25 +++++++++++++++++++++ src/App.js | 36 ++++++++++++++++++++++++++++++- src/assets/images/mastercard.png | Bin 0 -> 36660 bytes src/components/CreditCard.jsx | 22 +++++++++++++++++++ src/components/Random.jsx | 2 +- 5 files changed, 83 insertions(+), 2 deletions(-) create mode 100644 src/assets/images/mastercard.png create mode 100644 src/components/CreditCard.jsx diff --git a/src/App.css b/src/App.css index 421d1d4ca..f1a2a6859 100644 --- a/src/App.css +++ b/src/App.css @@ -64,4 +64,29 @@ width: 400px; margin: 20px; +} + +.ccdiv{ + width: 500px; + height: 250px; + margin: 14px; + padding: 20px; + border-radius: 15px; + display: flex; + flex-direction: column; +} + +.cardlogo{ + max-height: 60px; + max-width: 60px; + align-self: flex-end; +} + +.cardnumbers{ + font-size: 50px; +} + +.smallercard{ + font-size: 20px; + margin: 0px; } \ No newline at end of file diff --git a/src/App.js b/src/App.js index 5a0c7231b..b9da200db 100644 --- a/src/App.js +++ b/src/App.js @@ -3,6 +3,7 @@ import IdCard from './components/IdCard'; import Greetings from './components/Greetings'; import Random from './components/Random'; import Boxcolor from './components/Boxcolor'; +import CreditCard from './components/CreditCard'; function App() { const cardArray = [ { @@ -45,7 +46,40 @@ function App() { - +
+ + + + + +
); } diff --git a/src/assets/images/mastercard.png b/src/assets/images/mastercard.png new file mode 100644 index 0000000000000000000000000000000000000000..983ded005dba8bb615014af12e535f99349313a7 GIT binary patch literal 36660 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 + + type of card + +

•••• •••• •••• {lastFour}

+

Expires {details.expirationMonth}/{details.expirationYear} {details.bank}

+

{details.owner}

+ + ) +} + +export default CreditCard diff --git a/src/components/Random.jsx b/src/components/Random.jsx index b1cdf9f0b..b9c6cf8d1 100644 --- a/src/components/Random.jsx +++ b/src/components/Random.jsx @@ -1,7 +1,7 @@ function Random(props) { - const result = Math.floor(Math.random() * (props.max - props.min) + props.min);; + const result = Math.floor(Math.random() * (props.max - props.min) + props.min); return (

Random value between {props.min} and {props.max} is {result}

From 81c295549da21765c5881c18b1d602ded543cf43 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CZuzana?= <“zuzana@getyourguide.com”> Date: Sun, 28 May 2023 21:58:05 +0200 Subject: [PATCH 06/26] Iteration 6 --- src/App.js | 9 +++++++++ src/components/Rating.jsx | 21 +++++++++++++++++++++ 2 files changed, 30 insertions(+) create mode 100644 src/components/Rating.jsx diff --git a/src/App.js b/src/App.js index b9da200db..82eead71e 100644 --- a/src/App.js +++ b/src/App.js @@ -4,6 +4,7 @@ import Greetings from './components/Greetings'; import Random from './components/Random'; import Boxcolor from './components/Boxcolor'; import CreditCard from './components/CreditCard'; +import Rating from './components/Rating'; function App() { const cardArray = [ { @@ -80,6 +81,14 @@ function App() { color="white" />
+
+ 0 + 1.49 + 1.5 + 3 + 4 + 5 +
); } diff --git a/src/components/Rating.jsx b/src/components/Rating.jsx new file mode 100644 index 000000000..79c13e3a2 --- /dev/null +++ b/src/components/Rating.jsx @@ -0,0 +1,21 @@ + + +function Rating(stars) { + let averaged = Math.round(stars.children); + let starsdisplay = ""; + + if (averaged===0) {starsdisplay = "☆☆☆☆☆"} + if (averaged===1) {starsdisplay = "★☆☆☆☆"} + if (averaged===2) {starsdisplay = "★★☆☆☆"} + if (averaged===3) {starsdisplay = "★★★☆☆"} + if (averaged===4) {starsdisplay ="★★★★☆"} + if (averaged===5) {starsdisplay ="★★★★★"} + + return ( +
+

{starsdisplay}

+
+ ) +} + +export default Rating From 5cbd61f08cd0b6492a86c72d86602b1095e63a55 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CZuzana?= <“zuzana@getyourguide.com”> Date: Mon, 29 May 2023 15:19:07 +0200 Subject: [PATCH 07/26] Iteration 7 --- src/App.css | 38 +++++++++++++++++++++++++++++++++++ src/App.js | 27 +++++++++++++++++++++++++ src/components/DriverCard.jsx | 22 ++++++++++++++++++++ 3 files changed, 87 insertions(+) create mode 100644 src/components/DriverCard.jsx diff --git a/src/App.css b/src/App.css index f1a2a6859..d8f483ed5 100644 --- a/src/App.css +++ b/src/App.css @@ -89,4 +89,42 @@ .smallercard{ font-size: 20px; margin: 0px; +} + +.driverdiv{ + background-color: #485cb4; + width: 650px; + height: 100px; + margin: 1%; + padding: 1%; + border-radius: 15px; + display: flex; + color: white; + flex-direction: row; + + +} + + +.imgcrop{ + width: 100px; + height: 100px; + /* position: relative; */ + overflow: hidden; + border-radius: 50%; + margin-left: 20%; +} + +.driverimg{ + /* display: inline; */ + height: 100%; +} + +.driveinfo{ + +} + +.driveinfo > p,h3{ + margin: 0; + padding: 0; } \ No newline at end of file diff --git a/src/App.js b/src/App.js index 82eead71e..62f0ed889 100644 --- a/src/App.js +++ b/src/App.js @@ -5,6 +5,7 @@ import Random from './components/Random'; import Boxcolor from './components/Boxcolor'; import CreditCard from './components/CreditCard'; import Rating from './components/Rating'; +import DriverCard from './components/DriverCard'; function App() { const cardArray = [ { @@ -88,6 +89,32 @@ function App() { 3 4 5 + +
+ + + + + + + +
); diff --git a/src/components/DriverCard.jsx b/src/components/DriverCard.jsx new file mode 100644 index 000000000..2d477089e --- /dev/null +++ b/src/components/DriverCard.jsx @@ -0,0 +1,22 @@ +import React from 'react' +import Rating from './Rating' + +function DriverCard(drivercard) { + return ( +
+ +
+ driver +
+
+

{drivercard.name}

+ {drivercard.rating} +

{drivercard.car.model} - {drivercard.car.licensePlate}

+
+ + +
+ ) +} + +export default DriverCard From 231191b12a68ec1119da7f02e00463de1165d73b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CZuzana?= <“zuzana@getyourguide.com”> Date: Sat, 3 Jun 2023 13:30:25 +0200 Subject: [PATCH 08/26] Iteration 8 --- src/App.js | 7 +++---- src/components/LikeButton.jsx | 24 ++++++++++++++++++++++++ 2 files changed, 27 insertions(+), 4 deletions(-) create mode 100644 src/components/LikeButton.jsx diff --git a/src/App.js b/src/App.js index 62f0ed889..4be5a4c6e 100644 --- a/src/App.js +++ b/src/App.js @@ -6,10 +6,10 @@ import Boxcolor from './components/Boxcolor'; import CreditCard from './components/CreditCard'; import Rating from './components/Rating'; import DriverCard from './components/DriverCard'; +import LikeButton from "./components/LikeButton" function App() { const cardArray = [ { - // id: 1, lastName: "Delores", firstName:'Obrien', gender: 'female', @@ -18,7 +18,6 @@ function App() { picture: "https://randomuser.me/api/portraits/women/44.jpg"} , { - // id: 2, lastName: "Doe", firstName:'John', gender: 'male', @@ -111,8 +110,8 @@ function App() { }} /> - - + {/* Iteration 8 - Like Button */} + diff --git a/src/components/LikeButton.jsx b/src/components/LikeButton.jsx new file mode 100644 index 000000000..84ce365a7 --- /dev/null +++ b/src/components/LikeButton.jsx @@ -0,0 +1,24 @@ +import {useState} from "react"; + + + +function LikeButton() { + const [count, setCount] = useState(0); + + const colorsArray = ['purple','blue','green','yellow','orange','red']; + + const buttonCounter = () => { + return setCount(count+1); + } + + return ( +
+ +
+ ) +} + +export default LikeButton From 7bfa12c3c70f25f97a9b7542421f56c37a2c1b5d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CZuzana?= <“zuzana@getyourguide.com”> Date: Sat, 3 Jun 2023 13:52:47 +0200 Subject: [PATCH 09/26] Iteration 9 - Clickable Picture --- src/App.js | 7 +++++++ src/components/ClickablePicture.jsx | 16 ++++++++++++++++ 2 files changed, 23 insertions(+) create mode 100644 src/components/ClickablePicture.jsx diff --git a/src/App.js b/src/App.js index 4be5a4c6e..be76188b2 100644 --- a/src/App.js +++ b/src/App.js @@ -7,6 +7,7 @@ import CreditCard from './components/CreditCard'; import Rating from './components/Rating'; import DriverCard from './components/DriverCard'; import LikeButton from "./components/LikeButton" +import ClickablePicture from "./components/ClickablePicture" function App() { const cardArray = [ { @@ -113,6 +114,12 @@ function App() { {/* Iteration 8 - Like Button */} + {/* Iteration 9 - Clickable image */} + + diff --git a/src/components/ClickablePicture.jsx b/src/components/ClickablePicture.jsx new file mode 100644 index 000000000..afee48ef1 --- /dev/null +++ b/src/components/ClickablePicture.jsx @@ -0,0 +1,16 @@ +import {useState} from "react"; + +function ClickablePicture({img, imgClicked}) { + const [isImageToggled,setIsImageToggled] = useState(false); + + const toggleImg = () => { + return setIsImageToggled(!isImageToggled); + } + return ( +
+ max +
+ ) +} + +export default ClickablePicture From e5dad539ab5362d51ad2dbe6a388b2b5348d0862 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CZuzana?= <“zuzana@getyourguide.com”> Date: Sat, 3 Jun 2023 14:44:04 +0200 Subject: [PATCH 10/26] iteration 10 - dice --- src/App.js | 4 ++++ src/components/Dice.jsx | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+) create mode 100644 src/components/Dice.jsx diff --git a/src/App.js b/src/App.js index be76188b2..990d47dab 100644 --- a/src/App.js +++ b/src/App.js @@ -8,6 +8,7 @@ import Rating from './components/Rating'; import DriverCard from './components/DriverCard'; import LikeButton from "./components/LikeButton" import ClickablePicture from "./components/ClickablePicture" +import Dice from "./components/Dice" function App() { const cardArray = [ { @@ -120,6 +121,9 @@ function App() { imgClicked='https://www.akc.org/wp-content/uploads/2018/05/samoyed-mother-dog-with-puppy-outdoors.jpg' /> + {/* Iteration 10 - Dice */} + + diff --git a/src/components/Dice.jsx b/src/components/Dice.jsx new file mode 100644 index 000000000..33593f94f --- /dev/null +++ b/src/components/Dice.jsx @@ -0,0 +1,33 @@ + +import {useState} from "react"; +import diceEmpty from "../assets/images/dice-empty.png"; +import dice1 from "../assets/images/dice1.png"; +import dice2 from "../assets/images/dice2.png"; +import dice3 from "../assets/images/dice3.png"; +import dice4 from "../assets/images/dice4.png"; +import dice5 from "../assets/images/dice5.png"; +import dice6 from "../assets/images/dice6.png"; + + +function Dice() { + const diceArray = [dice1, dice2, dice3, dice4, dice5, dice6]; + const [displayedDice, setDisplayedDice] = useState(dice1); + const [isDiceClicked, setIsDiceClicked] = useState(false); + + const isClicked = () => { + setIsDiceClicked(!isDiceClicked) + setDisplayedDice(diceEmpty); + setTimeout(() => { + setDisplayedDice(diceArray[Math.floor(Math.random() * diceArray.length)]) + }, 1000); + return displayedDice} + + return ( +
+ dice +
+ ) +} + +export default Dice + From 4536f24deb08b1c635bccc58061fa4f06df2b6ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CZuzana?= <“zuzana@getyourguide.com”> Date: Sat, 3 Jun 2023 15:08:55 +0200 Subject: [PATCH 11/26] iteration 10 - carousel --- src/App.js | 11 +++++++++++ src/components/Carousel.jsx | 17 +++++++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 src/components/Carousel.jsx diff --git a/src/App.js b/src/App.js index 990d47dab..9de5651e4 100644 --- a/src/App.js +++ b/src/App.js @@ -9,6 +9,7 @@ import DriverCard from './components/DriverCard'; import LikeButton from "./components/LikeButton" import ClickablePicture from "./components/ClickablePicture" import Dice from "./components/Dice" +import Carousel from "./components/Carousel" function App() { const cardArray = [ { @@ -124,6 +125,16 @@ function App() { {/* Iteration 10 - Dice */} + {/* Iteration 11 - Carousel */} + + diff --git a/src/components/Carousel.jsx b/src/components/Carousel.jsx new file mode 100644 index 000000000..5878b8eb7 --- /dev/null +++ b/src/components/Carousel.jsx @@ -0,0 +1,17 @@ +import {useState} from "react"; + +function Carousel({images}) { + const [index, setIndex] = useState(0); + const goRight = () => {setIndex( (index + 1) % images.length-1) }; + const goLeft = () => { setIndex ( (index - 1 + images.length ) % images.length )}; + + return ( +
+ + carousel + +
+ ) +} + +export default Carousel From 00a2a5add3888edd10316c941a5a5c26b024c9e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CZuzana?= <“zuzana@getyourguide.com”> Date: Sat, 3 Jun 2023 15:41:18 +0200 Subject: [PATCH 12/26] Iteration 12 - NumbersTable --- src/App.css | 15 +++++++++++++++ src/App.js | 4 +++- src/components/NumbersTable.jsx | 19 +++++++++++++++++++ 3 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 src/components/NumbersTable.jsx diff --git a/src/App.css b/src/App.css index d8f483ed5..c70e3e48b 100644 --- a/src/App.css +++ b/src/App.css @@ -127,4 +127,19 @@ .driveinfo > p,h3{ margin: 0; padding: 0; +} + +.number{ + height: 100px; + width: 100px; + border: 2px black solid; + font-size: 30px; + text-align: center; + +} + +.numbersDiv{ + display: flex; + flex-wrap: wrap; + max-width: 550px; } \ No newline at end of file diff --git a/src/App.js b/src/App.js index 9de5651e4..8af127dda 100644 --- a/src/App.js +++ b/src/App.js @@ -10,6 +10,7 @@ import LikeButton from "./components/LikeButton" import ClickablePicture from "./components/ClickablePicture" import Dice from "./components/Dice" import Carousel from "./components/Carousel" +import NumbersTable from "./components/NumbersTable" function App() { const cardArray = [ { @@ -134,7 +135,8 @@ function App() { 'https://randomuser.me/api/portraits/men/2.jpg' ]} /> - + {/* Iteration 12 - NumbersTable */} + diff --git a/src/components/NumbersTable.jsx b/src/components/NumbersTable.jsx new file mode 100644 index 000000000..91f055b75 --- /dev/null +++ b/src/components/NumbersTable.jsx @@ -0,0 +1,19 @@ +import "../App.css" + +function NumbersTable({limit}) { + const numberArray = []; + for (let i = 1; i < limit; i++) { + numberArray.push(i); + } + + + return ( +
+ {numberArray.map((number) => ( +
{number}
+ ))} +
+ ); +}; + +export default NumbersTable From 72360fafa934b6fce5283fdd92e36d4ef1de8828 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CZuzana?= <“zuzana@getyourguide.com”> Date: Sat, 3 Jun 2023 16:25:44 +0200 Subject: [PATCH 13/26] Iteration 14 - Facebook --- src/App.css | 8 ++++++++ src/App.js | 10 +++++++++- src/components/Carousel.jsx | 2 +- src/components/FaceBook.jsx | 20 ++++++++++++++++++++ 4 files changed, 38 insertions(+), 2 deletions(-) create mode 100644 src/components/FaceBook.jsx diff --git a/src/App.css b/src/App.css index c70e3e48b..43ed60380 100644 --- a/src/App.css +++ b/src/App.css @@ -142,4 +142,12 @@ display: flex; flex-wrap: wrap; max-width: 550px; +} + +.facebookdiv{ + border: 1px black solid; + display: flex; + flex-direction: row; + width: 500px; + height: 180px; } \ No newline at end of file diff --git a/src/App.js b/src/App.js index 8af127dda..931ffbbd6 100644 --- a/src/App.js +++ b/src/App.js @@ -11,6 +11,8 @@ import ClickablePicture from "./components/ClickablePicture" import Dice from "./components/Dice" import Carousel from "./components/Carousel" import NumbersTable from "./components/NumbersTable" +import FaceBook from "./components/FaceBook" +import profiles from "./data/berlin.json" function App() { const cardArray = [ { @@ -137,7 +139,13 @@ function App() { /> {/* Iteration 12 - NumbersTable */} - + + {/* Iteration 13 - Facebook */} + {profiles.map(elem => { + return })} + + + ); diff --git a/src/components/Carousel.jsx b/src/components/Carousel.jsx index 5878b8eb7..cf8bdbe7a 100644 --- a/src/components/Carousel.jsx +++ b/src/components/Carousel.jsx @@ -2,7 +2,7 @@ import {useState} from "react"; function Carousel({images}) { const [index, setIndex] = useState(0); - const goRight = () => {setIndex( (index + 1) % images.length-1) }; + const goRight = () => {setIndex( (index + 1) % images.length) }; const goLeft = () => { setIndex ( (index - 1 + images.length ) % images.length )}; return ( diff --git a/src/components/FaceBook.jsx b/src/components/FaceBook.jsx new file mode 100644 index 000000000..a3d3a5548 --- /dev/null +++ b/src/components/FaceBook.jsx @@ -0,0 +1,20 @@ + + +function FaceBook({profile}) { + return ( +
+
+ profile +
+
+

First name: {profile.firstName}

+

Last name: {profile.lastName}

+

Country: {profile.country}

+

Type: {profile.isStudent ? "Student" : "Teacher"}

+
+ +
+ ) +} + +export default FaceBook From 956eb746c4d5bbbf393f8aab9341a0518fb71958 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CZuzana?= <“zuzana@getyourguide.com”> Date: Sun, 4 Jun 2023 10:32:35 +0200 Subject: [PATCH 14/26] Iteration 14 - not yet finished --- src/App.js | 6 +++--- src/components/FaceBook.jsx | 36 +++++++++++++++++++-------------- src/components/FaceBookCard.jsx | 20 ++++++++++++++++++ 3 files changed, 44 insertions(+), 18 deletions(-) create mode 100644 src/components/FaceBookCard.jsx diff --git a/src/App.js b/src/App.js index 931ffbbd6..bd4e2a53a 100644 --- a/src/App.js +++ b/src/App.js @@ -12,7 +12,7 @@ import Dice from "./components/Dice" import Carousel from "./components/Carousel" import NumbersTable from "./components/NumbersTable" import FaceBook from "./components/FaceBook" -import profiles from "./data/berlin.json" + function App() { const cardArray = [ { @@ -141,8 +141,8 @@ function App() { {/* Iteration 13 - Facebook */} - {profiles.map(elem => { - return })} + + diff --git a/src/components/FaceBook.jsx b/src/components/FaceBook.jsx index a3d3a5548..5032fe077 100644 --- a/src/components/FaceBook.jsx +++ b/src/components/FaceBook.jsx @@ -1,20 +1,26 @@ +import profiles from "../data/berlin.json" +import {useState} from "react"; +import FaceBookCard from "./FaceBookCard"; +function FaceBook() { + const [bgColor, setBgColor] = useState("#ff0000"); + + const uniqueCountries = profiles.filter((item, index) => { + return profiles.findIndex(obj => obj.country === item.country) === index; + }).map(item => item.country); -function FaceBook({profile}) { - return ( -
-
- profile -
-
-

First name: {profile.firstName}

-

Last name: {profile.lastName}

-

Country: {profile.country}

-

Type: {profile.isStudent ? "Student" : "Teacher"}

-
-
- ) + // const countryPicker = (country) => { + // if (country === profiles[i].country) { + // return setBgColor("#ff0000") + // }}; + + + return ( + <> + {/* {uniqueCountries.map(country => {return })} */} + {profiles.map (elem => {return })} + ) } -export default FaceBook +export default FaceBook \ No newline at end of file diff --git a/src/components/FaceBookCard.jsx b/src/components/FaceBookCard.jsx new file mode 100644 index 000000000..3e53f20c2 --- /dev/null +++ b/src/components/FaceBookCard.jsx @@ -0,0 +1,20 @@ + +function FaceBookCard({profile, bgColor}) { + return ( +
+
+
+ profile +
+
+

First name: {profile.firstName}

+

Last name: {profile.lastName}

+

Country: {profile.country}

+

Type: {profile.isStudent ? "Student" : "Teacher"}

+
+
+
+ ) +} + +export default FaceBookCard From 4448f268e042b39bd76907c7059ffa8ce01e0615 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CZuzana?= <“zuzana@getyourguide.com”> Date: Sun, 4 Jun 2023 12:55:38 +0200 Subject: [PATCH 15/26] Iteration 15 - sign up page --- src/App.js | 6 +++-- src/components/FaceBook.jsx | 9 ++++--- src/components/SignupPage.jsx | 46 +++++++++++++++++++++++++++++++++++ 3 files changed, 55 insertions(+), 6 deletions(-) create mode 100644 src/components/SignupPage.jsx diff --git a/src/App.js b/src/App.js index bd4e2a53a..812133119 100644 --- a/src/App.js +++ b/src/App.js @@ -12,6 +12,7 @@ import Dice from "./components/Dice" import Carousel from "./components/Carousel" import NumbersTable from "./components/NumbersTable" import FaceBook from "./components/FaceBook" +import SignupPage from "./components/SignupPage" function App() { @@ -141,9 +142,10 @@ function App() { {/* Iteration 13 - Facebook */} - + {/* */} - + {/* Iteration 15 - Sign up page */} + diff --git a/src/components/FaceBook.jsx b/src/components/FaceBook.jsx index 5032fe077..60334fdca 100644 --- a/src/components/FaceBook.jsx +++ b/src/components/FaceBook.jsx @@ -5,9 +5,9 @@ import FaceBookCard from "./FaceBookCard"; function FaceBook() { const [bgColor, setBgColor] = useState("#ff0000"); - const uniqueCountries = profiles.filter((item, index) => { - return profiles.findIndex(obj => obj.country === item.country) === index; - }).map(item => item.country); + // const uniqueCountries = profiles.filter((item, index) => { + // return profiles.findIndex(obj => obj.country === item.country) === index; + // }).map(item => item.country); // const countryPicker = (country) => { @@ -18,8 +18,9 @@ function FaceBook() { return ( <> +

Hi

{/* {uniqueCountries.map(country => {return })} */} - {profiles.map (elem => {return })} + {/* {profiles.map (elem => {return })} */} ) } diff --git a/src/components/SignupPage.jsx b/src/components/SignupPage.jsx new file mode 100644 index 000000000..47f796a50 --- /dev/null +++ b/src/components/SignupPage.jsx @@ -0,0 +1,46 @@ +import { useState } from "react" + + +function SignupPage() { + const [email, setEmail ] = useState(""); + const [password, setPassword ] = useState(""); + const [nationality, setNationality ] = useState(""); + const [newItem, setNewItem] = useState(""); + + + const handleSubmit = (event) => { + event.preventDefault(); + const newEntry = { + email: email, + password: password, + nationality: nationality + }; + setNewItem(newEntry); + // setEmail(""); + // setPassword(""); + // setNationality(""); + // setNewItem(""); + } + + return ( + <> + +
+ setEmail(event.target.value)} /> + setPassword(event.target.value)} /> + + +
+ +

{(newItem.nationality==="fr") ? "Bonjour" : (newItem.nationality==="de" ? "Hallo" : "Hello")}!

+

Your email is {newItem.email}

+ + + ) +} + +export default SignupPage From b5ef37a86c8916f95b9e3e3a89346225ab9ce29c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CZuzana?= <“zuzana@getyourguide.com”> Date: Sun, 4 Jun 2023 13:42:34 +0200 Subject: [PATCH 16/26] Iteration 16 - RGBColorPicker, almost finished --- src/App.js | 7 ++++- src/components/RGBColorPicker.jsx | 42 ++++++++++++++++++++++++++++ src/components/SignupPage.jsx | 16 +++++++---- src/components/SingleColorPicker.jsx | 21 ++++++++++++++ 4 files changed, 80 insertions(+), 6 deletions(-) create mode 100644 src/components/RGBColorPicker.jsx create mode 100644 src/components/SingleColorPicker.jsx diff --git a/src/App.js b/src/App.js index 812133119..ae5d50c5e 100644 --- a/src/App.js +++ b/src/App.js @@ -13,6 +13,8 @@ import Carousel from "./components/Carousel" import NumbersTable from "./components/NumbersTable" import FaceBook from "./components/FaceBook" import SignupPage from "./components/SignupPage" +import RGBColorPicker from "./components/RGBColorPicker" + function App() { @@ -38,7 +40,7 @@ function App() {
{cardArray.map (card => { - return + return } )}
@@ -146,6 +148,9 @@ function App() { {/* Iteration 15 - Sign up page */} + + {/* Iteration 16 - RGBColorPicker */} +
diff --git a/src/components/RGBColorPicker.jsx b/src/components/RGBColorPicker.jsx new file mode 100644 index 000000000..f5331d28a --- /dev/null +++ b/src/components/RGBColorPicker.jsx @@ -0,0 +1,42 @@ + +import SingleColorPicker from "./SingleColorPicker" +import {useState} from "react"; + +function RGBColorPicker() { + const [rValue, setRValue] = useState(""); + const [gValue, setGValue] = useState(""); + const [bValue, setBValue] = useState(""); + + return ( + <> +
+ { setRValue(event.target.value)} } + /> + + { setGValue(event.target.value) } } + /> + + { setBValue(event.target.value) } } + /> + +
+
+

rgb({rValue},{gValue},{bValue})

+
+
+ + + ) +} + +export default RGBColorPicker diff --git a/src/components/SignupPage.jsx b/src/components/SignupPage.jsx index 47f796a50..764676c81 100644 --- a/src/components/SignupPage.jsx +++ b/src/components/SignupPage.jsx @@ -26,18 +26,24 @@ function SignupPage() { <>
+ setEmail(event.target.value)} /> + + setPassword(event.target.value)} /> + + - +

{(newItem.nationality==="fr") ? "Bonjour" : (newItem.nationality==="de" ? "Hallo" : "Hello")}!

-

Your email is {newItem.email}

+

Your email is: {newItem.email}

+

Your email is correct

) diff --git a/src/components/SingleColorPicker.jsx b/src/components/SingleColorPicker.jsx new file mode 100644 index 000000000..344b672d6 --- /dev/null +++ b/src/components/SingleColorPicker.jsx @@ -0,0 +1,21 @@ +import {useState} from "react"; + +function SingleColorPicker({color, value, onChange}) { +// const [backgroundColor, setBackgroundColor] = useState(""); +// if (color==="r") {setBackgroundColor("red")} + + return ( +
+
+ +
+ + +
+ +
+ ) +} + +export default SingleColorPicker From 400c4139079b9b151cafe609b765b3d7a0c3e2d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CZuzana?= <“zuzana@getyourguide.com”> Date: Mon, 5 Jun 2023 21:37:43 +0200 Subject: [PATCH 17/26] Fixed Facebook iteration and its color picker --- src/App.css | 48 +++-- src/App.js | 303 +++++++++++++++++--------------- src/components/Boxcolor.jsx | 4 +- src/components/FaceBook.jsx | 43 ++--- src/components/FaceBookCard.jsx | 29 +-- src/components/Greetings.jsx | 10 +- src/components/LikeButton.jsx | 29 +-- src/components/NumbersTable.jsx | 25 +-- src/components/Random.jsx | 4 +- 9 files changed, 258 insertions(+), 237 deletions(-) diff --git a/src/App.css b/src/App.css index 43ed60380..a79ed56ea 100644 --- a/src/App.css +++ b/src/App.css @@ -1,5 +1,6 @@ .App { /* text-align: center; */ + margin: 20px; } .App-logo { @@ -37,36 +38,34 @@ } } - -.cardDiv{ +.cardDiv { display: flex; flex-direction: row; padding: 20px; border: 1px solid black; - width: 400px; + width: 600px; margin: 20px; } -.cardImage{ +.cardImage { padding: 20px; } -.cardTextDiv{ +.cardTextDiv { text-align: left; padding: 5px; } -.langdiv{ +.langdiv { display: flex; flex-direction: row; padding: 20px; border: 1px solid black; width: 400px; margin: 20px; - } -.ccdiv{ +.ccdiv { width: 500px; height: 250px; margin: 14px; @@ -76,22 +75,22 @@ flex-direction: column; } -.cardlogo{ +.cardlogo { max-height: 60px; max-width: 60px; align-self: flex-end; } -.cardnumbers{ +.cardnumbers { font-size: 50px; } -.smallercard{ +.smallercard { font-size: 20px; margin: 0px; } -.driverdiv{ +.driverdiv { background-color: #485cb4; width: 650px; height: 100px; @@ -101,12 +100,9 @@ display: flex; color: white; flex-direction: row; - - } - -.imgcrop{ +.imgcrop { width: 100px; height: 100px; /* position: relative; */ @@ -115,39 +111,39 @@ margin-left: 20%; } -.driverimg{ +.driverimg { /* display: inline; */ height: 100%; } -.driveinfo{ - +.driveinfo { } -.driveinfo > p,h3{ +.driveinfo > p, +h3 { margin: 0; padding: 0; } -.number{ +.number { height: 100px; width: 100px; - border: 2px black solid; + border: 3px black solid; font-size: 30px; text-align: center; - } -.numbersDiv{ +.numbersDiv { display: flex; flex-wrap: wrap; max-width: 550px; + } -.facebookdiv{ +.facebookdiv { border: 1px black solid; display: flex; flex-direction: row; width: 500px; height: 180px; -} \ No newline at end of file +} diff --git a/src/App.js b/src/App.js index ae5d50c5e..2144649a7 100644 --- a/src/App.js +++ b/src/App.js @@ -6,155 +6,168 @@ import Boxcolor from './components/Boxcolor'; import CreditCard from './components/CreditCard'; import Rating from './components/Rating'; import DriverCard from './components/DriverCard'; -import LikeButton from "./components/LikeButton" -import ClickablePicture from "./components/ClickablePicture" -import Dice from "./components/Dice" -import Carousel from "./components/Carousel" -import NumbersTable from "./components/NumbersTable" -import FaceBook from "./components/FaceBook" -import SignupPage from "./components/SignupPage" -import RGBColorPicker from "./components/RGBColorPicker" +import LikeButton from './components/LikeButton'; +import ClickablePicture from './components/ClickablePicture'; +import Dice from './components/Dice'; +import Carousel from './components/Carousel'; +import NumbersTable from './components/NumbersTable'; +import FaceBook from './components/FaceBook'; +import SignupPage from './components/SignupPage'; +import RGBColorPicker from './components/RGBColorPicker'; +function App() { + const cardArray = [ + { + lastName: 'Delores', + firstName: 'Obrien', + gender: 'female', + height: 172, + birth: Date('1988-05-11'), + picture: 'https://randomuser.me/api/portraits/women/44.jpg', + }, + { + lastName: 'Doe', + firstName: 'John', + gender: 'male', + height: 178, + birth: Date('1992-07-14'), + picture: 'https://randomuser.me/api/portraits/men/44.jpg', + }, + ]; -function App() { - const cardArray = [ { - lastName: "Delores", - firstName:'Obrien', - gender: 'female', - height: 172, - birth: Date("1988-05-11"), - picture: "https://randomuser.me/api/portraits/women/44.jpg"} - -, { - lastName: "Doe", - firstName:'John', - gender: 'male', - height: 178, - birth: Date("1992-07-14"), - picture: "https://randomuser.me/api/portraits/men/44.jpg" -} ]; - - return ( -
-
- {cardArray.map (card => { - return - } - )} -
-
- Ludwig - François -
-
- - -
-
- - -
-
- - - - - -
-
- 0 - 1.49 - 1.5 - 3 - 4 - 5 -
-
- - - - - {/* Iteration 8 - Like Button */} - - - {/* Iteration 9 - Clickable image */} - - - {/* Iteration 10 - Dice */} - - - {/* Iteration 11 - Carousel */} - - {/* Iteration 12 - NumbersTable */} - - - {/* Iteration 13 - Facebook */} - {/* */} - - {/* Iteration 15 - Sign up page */} - - - {/* Iteration 16 - RGBColorPicker */} - - - -
-
+
+ {/* Iteration 1 - IdCard */} +

Iteration 1 - IdCard:

+ {cardArray.map((card) => { + return ; + })} + + {/* Iteration 2 - Greetings */} +

Iteration 2 - Greetings:

+ Ludwig + François + + {/* Iteration 3 - Random */} +

Iteration 3 - Random:

+ + + + {/* Iteration 4 - Boxcolor */} +

Iteration 4 - Boxcolor:

+ + + + {/* Iteration 5 - CreditCard*/} +

Iteration 5 - CreditCard:

+ + + + + + + {/* Iteration 6 - Rating */} +

Iteration 6 - Rating:

+ 0 + 1.49 + 1.5 + 3 + 4 + 5 + + {/* Iteration 7 - DriverCard */} +

Iteration 7 - DriverCard:

+ + + + + {/* Iteration 8 - Like Button */} +

Iteration 8 - Like Button:

+ + + + {/* Iteration 9 - Clickable image */} +

Iteration 9 - Clickable image:

+ + + {/* Iteration 10 - Dice */} +

Iteration 10 - Dice:

+ + + {/* Iteration 11 - Carousel */} +

Iteration 11 - Carousel:

+ + + {/* Iteration 12 - NumbersTable */} +

Iteration 12 - NumbersTable:

+ + + {/* Iteration 13 - Facebook */} +

Iteration 13 - Facebook:

+ + + {/* Iteration 15 - Sign up page */} +

Iteration 15 - Sign up page:

+ + + {/* Iteration 16 - RGBColorPicker */} +

IIteration 16 - RGBColorPicker:

+ +
); } diff --git a/src/components/Boxcolor.jsx b/src/components/Boxcolor.jsx index d6cbe4a68..956fa198d 100644 --- a/src/components/Boxcolor.jsx +++ b/src/components/Boxcolor.jsx @@ -1,12 +1,10 @@ - - function Boxcolor(colors) { const color =`rgb(${colors.r},${colors.g},${colors.b})`; return (
Hello World!
; + }}>Hello World!
) } diff --git a/src/components/FaceBook.jsx b/src/components/FaceBook.jsx index 60334fdca..a16ed023b 100644 --- a/src/components/FaceBook.jsx +++ b/src/components/FaceBook.jsx @@ -1,27 +1,30 @@ -import profiles from "../data/berlin.json" -import {useState} from "react"; -import FaceBookCard from "./FaceBookCard"; +import profiles from '../data/berlin.json'; +import { useState } from 'react'; +import FaceBookCard from './FaceBookCard'; function FaceBook() { - const [bgColor, setBgColor] = useState("#ff0000"); - - // const uniqueCountries = profiles.filter((item, index) => { - // return profiles.findIndex(obj => obj.country === item.country) === index; - // }).map(item => item.country); + const [pickedCountry, setPickedCountry] = useState(""); + const uniqueCountries = profiles.filter((item, index) => { + return profiles.findIndex(obj => obj.country === item.country) === index; + }).map(item => item.country); - // const countryPicker = (country) => { - // if (country === profiles[i].country) { - // return setBgColor("#ff0000") - // }}; - + const countryPicker = (country)=>{ + setPickedCountry(country); + } - return ( - <> -

Hi

- {/* {uniqueCountries.map(country => {return })} */} - {/* {profiles.map (elem => {return })} */} - ) + return ( + <> + {/* */} + {uniqueCountries + .map(country => {return })} + {console.log(pickedCountry)} + {profiles + .map((elem) => { + return ; + })} + + ); } -export default FaceBook \ No newline at end of file +export default FaceBook; \ No newline at end of file diff --git a/src/components/FaceBookCard.jsx b/src/components/FaceBookCard.jsx index 3e53f20c2..39d398e35 100644 --- a/src/components/FaceBookCard.jsx +++ b/src/components/FaceBookCard.jsx @@ -1,20 +1,21 @@ +function FaceBookCard({ profile, pickedCountry }) { + const bgColor = "lightblue" -function FaceBookCard({profile, bgColor}) { return (
-
-
- profile -
-
-

First name: {profile.firstName}

-

Last name: {profile.lastName}

-

Country: {profile.country}

-

Type: {profile.isStudent ? "Student" : "Teacher"}

-
-
+
+
+ profile +
+
+

First name: {profile.firstName}

+

Last name: {profile.lastName}

+

Country: {profile.country}

+

Type: {profile.isStudent ? 'Student' : 'Teacher'}

+
+
- ) + ); } -export default FaceBookCard +export default FaceBookCard; diff --git a/src/components/Greetings.jsx b/src/components/Greetings.jsx index 084b8af61..bed39ad4d 100644 --- a/src/components/Greetings.jsx +++ b/src/components/Greetings.jsx @@ -1,14 +1,16 @@ - function Greetings(props) { let language = props.lang let children = props.children let greeting = "" if(language === "de"){ greeting = "Hallo" - }else if(language === "fr"){ + } if(language === "fr"){ greeting = "Bonjour" + } if(language === "es"){ + greeting = "Hola" + } if(language === "en"){ + greeting = "Hello" } - return (
@@ -17,4 +19,4 @@ function Greetings(props) { ) } -export default Greetings +export default Greetings \ No newline at end of file diff --git a/src/components/LikeButton.jsx b/src/components/LikeButton.jsx index 84ce365a7..2407932b5 100644 --- a/src/components/LikeButton.jsx +++ b/src/components/LikeButton.jsx @@ -1,24 +1,29 @@ -import {useState} from "react"; - - +import { useState } from 'react'; function LikeButton() { const [count, setCount] = useState(0); - const colorsArray = ['purple','blue','green','yellow','orange','red']; + const colorsArray = ['purple', 'blue', 'green', 'yellow', 'orange', 'red']; const buttonCounter = () => { - return setCount(count+1); - } + return setCount(count + 1); + }; return ( -
-
- ) + ); } -export default LikeButton +export default LikeButton; diff --git a/src/components/NumbersTable.jsx b/src/components/NumbersTable.jsx index 91f055b75..0aed9f7fa 100644 --- a/src/components/NumbersTable.jsx +++ b/src/components/NumbersTable.jsx @@ -1,19 +1,24 @@ -import "../App.css" +import '../App.css'; -function NumbersTable({limit}) { - const numberArray = []; - for (let i = 1; i < limit; i++) { - numberArray.push(i); - } - +function NumbersTable({ limit }) { + const numberArray = []; + for (let i = 1; i <= limit; i++) { + numberArray.push(i); + } return (
{numberArray.map((number) => ( -
{number}
+
+

{number}

+
))}
); -}; +} -export default NumbersTable +export default NumbersTable; diff --git a/src/components/Random.jsx b/src/components/Random.jsx index b9c6cf8d1..7880f0286 100644 --- a/src/components/Random.jsx +++ b/src/components/Random.jsx @@ -1,5 +1,3 @@ - - function Random(props) { const result = Math.floor(Math.random() * (props.max - props.min) + props.min); return ( @@ -9,4 +7,4 @@ function Random(props) { ) } -export default Random +export default Random \ No newline at end of file From c26af0f8fe05f14cc448709c96fecf5f72e0a0fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CZuzana?= <“zuzana@getyourguide.com”> Date: Tue, 6 Jun 2023 19:57:18 +0200 Subject: [PATCH 18/26] ITeration 16 - fixed --- src/App.css | 7 +++-- src/App.js | 41 ++++++++++++---------------- src/components/Boxcolor.jsx | 10 +++---- src/components/CreditCard.jsx | 5 +--- src/components/FaceBook.jsx | 5 ++-- src/components/FaceBookCard.jsx | 4 +-- src/components/Greetings.jsx | 18 +++++------- src/components/IdCard.jsx | 14 +++++----- src/components/RGBColorPicker.jsx | 9 +++--- src/components/SingleColorPicker.jsx | 31 +++++++++++++++------ 10 files changed, 74 insertions(+), 70 deletions(-) diff --git a/src/App.css b/src/App.css index a79ed56ea..bc9917744 100644 --- a/src/App.css +++ b/src/App.css @@ -116,9 +116,6 @@ height: 100%; } -.driveinfo { -} - .driveinfo > p, h3 { margin: 0; @@ -147,3 +144,7 @@ h3 { width: 500px; height: 180px; } + +button{ + +} \ No newline at end of file diff --git a/src/App.js b/src/App.js index 2144649a7..a6a318e0e 100644 --- a/src/App.js +++ b/src/App.js @@ -16,33 +16,28 @@ import SignupPage from './components/SignupPage'; import RGBColorPicker from './components/RGBColorPicker'; function App() { - const cardArray = [ - { - lastName: 'Delores', - firstName: 'Obrien', - gender: 'female', - height: 172, - birth: Date('1988-05-11'), - picture: 'https://randomuser.me/api/portraits/women/44.jpg', - }, - - { - lastName: 'Doe', - firstName: 'John', - gender: 'male', - height: 178, - birth: Date('1992-07-14'), - picture: 'https://randomuser.me/api/portraits/men/44.jpg', - }, - ]; return (
{/* Iteration 1 - IdCard */} -

Iteration 1 - IdCard:

- {cardArray.map((card) => { - return ; - })} +

Iteration 1 - IdCard:

+ + + {/* Iteration 2 - Greetings */}

Iteration 2 - Greetings:

diff --git a/src/components/Boxcolor.jsx b/src/components/Boxcolor.jsx index 956fa198d..84b4ae08f 100644 --- a/src/components/Boxcolor.jsx +++ b/src/components/Boxcolor.jsx @@ -1,11 +1,11 @@ function Boxcolor(colors) { const color =`rgb(${colors.r},${colors.g},${colors.b})`; return ( -
-
Hello World!
-
+ <> +
+ Hello World! +
+ ) } diff --git a/src/components/CreditCard.jsx b/src/components/CreditCard.jsx index 116072e7b..1bc7456c7 100644 --- a/src/components/CreditCard.jsx +++ b/src/components/CreditCard.jsx @@ -6,12 +6,9 @@ function CreditCard(details) { const lastFour = details.number.slice(details.number.length-4,details.number.length); return ( -
+
type of card -

•••• •••• •••• {lastFour}

Expires {details.expirationMonth}/{details.expirationYear} {details.bank}

{details.owner}

diff --git a/src/components/FaceBook.jsx b/src/components/FaceBook.jsx index a16ed023b..ee0417fb1 100644 --- a/src/components/FaceBook.jsx +++ b/src/components/FaceBook.jsx @@ -1,8 +1,10 @@ import profiles from '../data/berlin.json'; import { useState } from 'react'; import FaceBookCard from './FaceBookCard'; +import "../App.css" function FaceBook() { + const bgColor = "lightblue"; const [pickedCountry, setPickedCountry] = useState(""); const uniqueCountries = profiles.filter((item, index) => { @@ -18,10 +20,9 @@ function FaceBook() { {/* */} {uniqueCountries .map(country => {return })} - {console.log(pickedCountry)} {profiles .map((elem) => { - return ; + return ; })} ); diff --git a/src/components/FaceBookCard.jsx b/src/components/FaceBookCard.jsx index 39d398e35..730e6b6ea 100644 --- a/src/components/FaceBookCard.jsx +++ b/src/components/FaceBookCard.jsx @@ -1,5 +1,5 @@ -function FaceBookCard({ profile, pickedCountry }) { - const bgColor = "lightblue" +function FaceBookCard({ profile, pickedCountry, bgColor }) { + return (
diff --git a/src/components/Greetings.jsx b/src/components/Greetings.jsx index bed39ad4d..9bd66f2fc 100644 --- a/src/components/Greetings.jsx +++ b/src/components/Greetings.jsx @@ -1,15 +1,11 @@ function Greetings(props) { - let language = props.lang - let children = props.children - let greeting = "" - if(language === "de"){ - greeting = "Hallo" - } if(language === "fr"){ - greeting = "Bonjour" - } if(language === "es"){ - greeting = "Hola" - } if(language === "en"){ - greeting = "Hello" + let language = props.lang; + let children = props.children; + let greeting = ""; + if(language === "de"){greeting = "Hallo" + } if(language === "fr"){greeting = "Bonjour" + } if(language === "es"){greeting = "Hola" + } if(language === "en"){greeting = "Hello" } return ( diff --git a/src/components/IdCard.jsx b/src/components/IdCard.jsx index ddf923799..04f7cd50e 100644 --- a/src/components/IdCard.jsx +++ b/src/components/IdCard.jsx @@ -1,15 +1,15 @@ -function IdCard({eachCard}) { +function IdCard({firstName, lastName, gender, height, birth, picture}) { return (
- user + user
-

Name: {eachCard.firstName}

-

Last name: {eachCard.lastName}

-

Gender: {eachCard.gender}

-

Height: {eachCard.height}

-

Birth: {eachCard.birth}

+

Name: {firstName}

+

Last name: {lastName}

+

Gender: {gender}

+

Height: {height}

+

Birth: {birth.toLocaleDateString()}

) diff --git a/src/components/RGBColorPicker.jsx b/src/components/RGBColorPicker.jsx index f5331d28a..b16dcb528 100644 --- a/src/components/RGBColorPicker.jsx +++ b/src/components/RGBColorPicker.jsx @@ -1,15 +1,14 @@ - import SingleColorPicker from "./SingleColorPicker" import {useState} from "react"; function RGBColorPicker() { - const [rValue, setRValue] = useState(""); - const [gValue, setGValue] = useState(""); - const [bValue, setBValue] = useState(""); + const [rValue, setRValue] = useState(0); + const [gValue, setGValue] = useState(0); + const [bValue, setBValue] = useState(0); return ( <> -
+
{ + switch (color) { + case "r" : setBackgroundColor ( `rgb(${value},0,0)`); + break; + case "g" : setBackgroundColor ( `rgb(0,${value},0)`); + break; + case "b" : setBackgroundColor ( `rgb(0,0,${value})`); + break; + default: break; + } + },[value] ) + + + return (
-
- +
+ +
- + +

{bgColor}

+

{value}

-
) } From 090cf892d52ad0c27d6933a8a4863b4d49da2d06 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CZuzana?= Date: Sat, 26 Jul 2025 11:59:47 +0200 Subject: [PATCH 19/26] Set up - clear all iterations --- src/App.js | 158 +-------------------------- src/components/Boxcolor.jsx | 12 -- src/components/Carousel.jsx | 17 --- src/components/ClickablePicture.jsx | 16 --- src/components/CreditCard.jsx | 19 ---- src/components/Dice.jsx | 33 ------ src/components/DriverCard.jsx | 22 ---- src/components/FaceBook.jsx | 31 ------ src/components/FaceBookCard.jsx | 21 ---- src/components/Greetings.jsx | 18 --- src/components/IdCard.jsx | 18 --- src/components/LikeButton.jsx | 29 ----- src/components/NumbersTable.jsx | 24 ---- src/components/RGBColorPicker.jsx | 41 ------- src/components/Random.jsx | 10 -- src/components/Rating.jsx | 21 ---- src/components/SignupPage.jsx | 52 --------- src/components/SingleColorPicker.jsx | 36 ------ 18 files changed, 1 insertion(+), 577 deletions(-) delete mode 100644 src/components/Boxcolor.jsx delete mode 100644 src/components/Carousel.jsx delete mode 100644 src/components/ClickablePicture.jsx delete mode 100644 src/components/CreditCard.jsx delete mode 100644 src/components/Dice.jsx delete mode 100644 src/components/DriverCard.jsx delete mode 100644 src/components/FaceBook.jsx delete mode 100644 src/components/FaceBookCard.jsx delete mode 100644 src/components/Greetings.jsx delete mode 100644 src/components/IdCard.jsx delete mode 100644 src/components/LikeButton.jsx delete mode 100644 src/components/NumbersTable.jsx delete mode 100644 src/components/RGBColorPicker.jsx delete mode 100644 src/components/Random.jsx delete mode 100644 src/components/Rating.jsx delete mode 100644 src/components/SignupPage.jsx delete mode 100644 src/components/SingleColorPicker.jsx diff --git a/src/App.js b/src/App.js index a6a318e0e..2627b3c6d 100644 --- a/src/App.js +++ b/src/App.js @@ -1,167 +1,11 @@ import './App.css'; -import IdCard from './components/IdCard'; -import Greetings from './components/Greetings'; -import Random from './components/Random'; -import Boxcolor from './components/Boxcolor'; -import CreditCard from './components/CreditCard'; -import Rating from './components/Rating'; -import DriverCard from './components/DriverCard'; -import LikeButton from './components/LikeButton'; -import ClickablePicture from './components/ClickablePicture'; -import Dice from './components/Dice'; -import Carousel from './components/Carousel'; -import NumbersTable from './components/NumbersTable'; -import FaceBook from './components/FaceBook'; -import SignupPage from './components/SignupPage'; -import RGBColorPicker from './components/RGBColorPicker'; + function App() { return (
- {/* Iteration 1 - IdCard */} -

Iteration 1 - IdCard:

- - - - - {/* Iteration 2 - Greetings */} -

Iteration 2 - Greetings:

- Ludwig - François - - {/* Iteration 3 - Random */} -

Iteration 3 - Random:

- - - - {/* Iteration 4 - Boxcolor */} -

Iteration 4 - Boxcolor:

- - - - {/* Iteration 5 - CreditCard*/} -

Iteration 5 - CreditCard:

- - - - - - - {/* Iteration 6 - Rating */} -

Iteration 6 - Rating:

- 0 - 1.49 - 1.5 - 3 - 4 - 5 - - {/* Iteration 7 - DriverCard */} -

Iteration 7 - DriverCard:

- - - - - {/* Iteration 8 - Like Button */} -

Iteration 8 - Like Button:

- - - - {/* Iteration 9 - Clickable image */} -

Iteration 9 - Clickable image:

- - - {/* Iteration 10 - Dice */} -

Iteration 10 - Dice:

- - - {/* Iteration 11 - Carousel */} -

Iteration 11 - Carousel:

- - - {/* Iteration 12 - NumbersTable */} -

Iteration 12 - NumbersTable:

- - - {/* Iteration 13 - Facebook */} -

Iteration 13 - Facebook:

- - - {/* Iteration 15 - Sign up page */} -

Iteration 15 - Sign up page:

- - {/* Iteration 16 - RGBColorPicker */} -

IIteration 16 - RGBColorPicker:

-
); } diff --git a/src/components/Boxcolor.jsx b/src/components/Boxcolor.jsx deleted file mode 100644 index 84b4ae08f..000000000 --- a/src/components/Boxcolor.jsx +++ /dev/null @@ -1,12 +0,0 @@ -function Boxcolor(colors) { - const color =`rgb(${colors.r},${colors.g},${colors.b})`; - return ( - <> -
- Hello World! -
- - ) -} - -export default Boxcolor diff --git a/src/components/Carousel.jsx b/src/components/Carousel.jsx deleted file mode 100644 index cf8bdbe7a..000000000 --- a/src/components/Carousel.jsx +++ /dev/null @@ -1,17 +0,0 @@ -import {useState} from "react"; - -function Carousel({images}) { - const [index, setIndex] = useState(0); - const goRight = () => {setIndex( (index + 1) % images.length) }; - const goLeft = () => { setIndex ( (index - 1 + images.length ) % images.length )}; - - return ( -
- - carousel - -
- ) -} - -export default Carousel diff --git a/src/components/ClickablePicture.jsx b/src/components/ClickablePicture.jsx deleted file mode 100644 index afee48ef1..000000000 --- a/src/components/ClickablePicture.jsx +++ /dev/null @@ -1,16 +0,0 @@ -import {useState} from "react"; - -function ClickablePicture({img, imgClicked}) { - const [isImageToggled,setIsImageToggled] = useState(false); - - const toggleImg = () => { - return setIsImageToggled(!isImageToggled); - } - return ( -
- max -
- ) -} - -export default ClickablePicture diff --git a/src/components/CreditCard.jsx b/src/components/CreditCard.jsx deleted file mode 100644 index 1bc7456c7..000000000 --- a/src/components/CreditCard.jsx +++ /dev/null @@ -1,19 +0,0 @@ -import visa from "../assets/images/visa.png"; -import master from "../assets/images/mastercard.png"; - -function CreditCard(details) { - const typeimage = (details.type === "Visa") ? visa : master; - const lastFour = details.number.slice(details.number.length-4,details.number.length); - - return ( -
- - type of card -

•••• •••• •••• {lastFour}

-

Expires {details.expirationMonth}/{details.expirationYear} {details.bank}

-

{details.owner}

-
- ) -} - -export default CreditCard diff --git a/src/components/Dice.jsx b/src/components/Dice.jsx deleted file mode 100644 index 33593f94f..000000000 --- a/src/components/Dice.jsx +++ /dev/null @@ -1,33 +0,0 @@ - -import {useState} from "react"; -import diceEmpty from "../assets/images/dice-empty.png"; -import dice1 from "../assets/images/dice1.png"; -import dice2 from "../assets/images/dice2.png"; -import dice3 from "../assets/images/dice3.png"; -import dice4 from "../assets/images/dice4.png"; -import dice5 from "../assets/images/dice5.png"; -import dice6 from "../assets/images/dice6.png"; - - -function Dice() { - const diceArray = [dice1, dice2, dice3, dice4, dice5, dice6]; - const [displayedDice, setDisplayedDice] = useState(dice1); - const [isDiceClicked, setIsDiceClicked] = useState(false); - - const isClicked = () => { - setIsDiceClicked(!isDiceClicked) - setDisplayedDice(diceEmpty); - setTimeout(() => { - setDisplayedDice(diceArray[Math.floor(Math.random() * diceArray.length)]) - }, 1000); - return displayedDice} - - return ( -
- dice -
- ) -} - -export default Dice - diff --git a/src/components/DriverCard.jsx b/src/components/DriverCard.jsx deleted file mode 100644 index 2d477089e..000000000 --- a/src/components/DriverCard.jsx +++ /dev/null @@ -1,22 +0,0 @@ -import React from 'react' -import Rating from './Rating' - -function DriverCard(drivercard) { - return ( -
- -
- driver -
-
-

{drivercard.name}

- {drivercard.rating} -

{drivercard.car.model} - {drivercard.car.licensePlate}

-
- - -
- ) -} - -export default DriverCard diff --git a/src/components/FaceBook.jsx b/src/components/FaceBook.jsx deleted file mode 100644 index ee0417fb1..000000000 --- a/src/components/FaceBook.jsx +++ /dev/null @@ -1,31 +0,0 @@ -import profiles from '../data/berlin.json'; -import { useState } from 'react'; -import FaceBookCard from './FaceBookCard'; -import "../App.css" - -function FaceBook() { - const bgColor = "lightblue"; - const [pickedCountry, setPickedCountry] = useState(""); - - const uniqueCountries = profiles.filter((item, index) => { - return profiles.findIndex(obj => obj.country === item.country) === index; - }).map(item => item.country); - - const countryPicker = (country)=>{ - setPickedCountry(country); - } - - return ( - <> - {/* */} - {uniqueCountries - .map(country => {return })} - {profiles - .map((elem) => { - return ; - })} - - ); -} - -export default FaceBook; \ No newline at end of file diff --git a/src/components/FaceBookCard.jsx b/src/components/FaceBookCard.jsx deleted file mode 100644 index 730e6b6ea..000000000 --- a/src/components/FaceBookCard.jsx +++ /dev/null @@ -1,21 +0,0 @@ -function FaceBookCard({ profile, pickedCountry, bgColor }) { - - - return ( -
-
-
- profile -
-
-

First name: {profile.firstName}

-

Last name: {profile.lastName}

-

Country: {profile.country}

-

Type: {profile.isStudent ? 'Student' : 'Teacher'}

-
-
-
- ); -} - -export default FaceBookCard; diff --git a/src/components/Greetings.jsx b/src/components/Greetings.jsx deleted file mode 100644 index 9bd66f2fc..000000000 --- a/src/components/Greetings.jsx +++ /dev/null @@ -1,18 +0,0 @@ -function Greetings(props) { - let language = props.lang; - let children = props.children; - let greeting = ""; - if(language === "de"){greeting = "Hallo" - } if(language === "fr"){greeting = "Bonjour" - } if(language === "es"){greeting = "Hola" - } if(language === "en"){greeting = "Hello" - } - - return ( -
-

{greeting}, {children}

-
- ) -} - -export default Greetings \ No newline at end of file diff --git a/src/components/IdCard.jsx b/src/components/IdCard.jsx deleted file mode 100644 index 04f7cd50e..000000000 --- a/src/components/IdCard.jsx +++ /dev/null @@ -1,18 +0,0 @@ -function IdCard({firstName, lastName, gender, height, birth, picture}) { - return ( -
-
- user -
-
-

Name: {firstName}

-

Last name: {lastName}

-

Gender: {gender}

-

Height: {height}

-

Birth: {birth.toLocaleDateString()}

-
-
- ) -} - -export default IdCard diff --git a/src/components/LikeButton.jsx b/src/components/LikeButton.jsx deleted file mode 100644 index 2407932b5..000000000 --- a/src/components/LikeButton.jsx +++ /dev/null @@ -1,29 +0,0 @@ -import { useState } from 'react'; - -function LikeButton() { - const [count, setCount] = useState(0); - - const colorsArray = ['purple', 'blue', 'green', 'yellow', 'orange', 'red']; - - const buttonCounter = () => { - return setCount(count + 1); - }; - - return ( -
- -
- ); -} - -export default LikeButton; diff --git a/src/components/NumbersTable.jsx b/src/components/NumbersTable.jsx deleted file mode 100644 index 0aed9f7fa..000000000 --- a/src/components/NumbersTable.jsx +++ /dev/null @@ -1,24 +0,0 @@ -import '../App.css'; - -function NumbersTable({ limit }) { - const numberArray = []; - for (let i = 1; i <= limit; i++) { - numberArray.push(i); - } - - return ( -
- {numberArray.map((number) => ( -
-

{number}

-
- ))} -
- ); -} - -export default NumbersTable; diff --git a/src/components/RGBColorPicker.jsx b/src/components/RGBColorPicker.jsx deleted file mode 100644 index b16dcb528..000000000 --- a/src/components/RGBColorPicker.jsx +++ /dev/null @@ -1,41 +0,0 @@ -import SingleColorPicker from "./SingleColorPicker" -import {useState} from "react"; - -function RGBColorPicker() { - const [rValue, setRValue] = useState(0); - const [gValue, setGValue] = useState(0); - const [bValue, setBValue] = useState(0); - - return ( - <> -
- { setRValue(event.target.value)} } - /> - - { setGValue(event.target.value) } } - /> - - { setBValue(event.target.value) } } - /> - -
-
-

rgb({rValue},{gValue},{bValue})

-
-
- - - ) -} - -export default RGBColorPicker diff --git a/src/components/Random.jsx b/src/components/Random.jsx deleted file mode 100644 index 7880f0286..000000000 --- a/src/components/Random.jsx +++ /dev/null @@ -1,10 +0,0 @@ -function Random(props) { - const result = Math.floor(Math.random() * (props.max - props.min) + props.min); - return ( -
-

Random value between {props.min} and {props.max} is {result}

-
- ) -} - -export default Random \ No newline at end of file diff --git a/src/components/Rating.jsx b/src/components/Rating.jsx deleted file mode 100644 index 79c13e3a2..000000000 --- a/src/components/Rating.jsx +++ /dev/null @@ -1,21 +0,0 @@ - - -function Rating(stars) { - let averaged = Math.round(stars.children); - let starsdisplay = ""; - - if (averaged===0) {starsdisplay = "☆☆☆☆☆"} - if (averaged===1) {starsdisplay = "★☆☆☆☆"} - if (averaged===2) {starsdisplay = "★★☆☆☆"} - if (averaged===3) {starsdisplay = "★★★☆☆"} - if (averaged===4) {starsdisplay ="★★★★☆"} - if (averaged===5) {starsdisplay ="★★★★★"} - - return ( -
-

{starsdisplay}

-
- ) -} - -export default Rating diff --git a/src/components/SignupPage.jsx b/src/components/SignupPage.jsx deleted file mode 100644 index 764676c81..000000000 --- a/src/components/SignupPage.jsx +++ /dev/null @@ -1,52 +0,0 @@ -import { useState } from "react" - - -function SignupPage() { - const [email, setEmail ] = useState(""); - const [password, setPassword ] = useState(""); - const [nationality, setNationality ] = useState(""); - const [newItem, setNewItem] = useState(""); - - - const handleSubmit = (event) => { - event.preventDefault(); - const newEntry = { - email: email, - password: password, - nationality: nationality - }; - setNewItem(newEntry); - // setEmail(""); - // setPassword(""); - // setNationality(""); - // setNewItem(""); - } - - return ( - <> - -
- - setEmail(event.target.value)} /> - - - setPassword(event.target.value)} /> - - - - -
- -

{(newItem.nationality==="fr") ? "Bonjour" : (newItem.nationality==="de" ? "Hallo" : "Hello")}!

-

Your email is: {newItem.email}

-

Your email is correct

- - - ) -} - -export default SignupPage diff --git a/src/components/SingleColorPicker.jsx b/src/components/SingleColorPicker.jsx deleted file mode 100644 index 26f763cd4..000000000 --- a/src/components/SingleColorPicker.jsx +++ /dev/null @@ -1,36 +0,0 @@ -import {useState, useEffect} from "react"; - -function SingleColorPicker({color, value, onChange}) { - const [bgColor, setBackgroundColor] = useState(""); - - - useEffect (() => { - switch (color) { - case "r" : setBackgroundColor ( `rgb(${value},0,0)`); - break; - case "g" : setBackgroundColor ( `rgb(0,${value},0)`); - break; - case "b" : setBackgroundColor ( `rgb(0,0,${value})`); - break; - default: break; - } - },[value] ) - - - - return ( -
-
- -
-
- - -

{bgColor}

-

{value}

-
-
- ) -} - -export default SingleColorPicker From ab5d92bc2568cec1df724ced58997a8d032f82bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CZuzana?= Date: Sat, 26 Jul 2025 12:23:58 +0200 Subject: [PATCH 20/26] Iteration 1 --- src/App.js | 19 +++++++++++++++++++ src/components/IdCard.js | 21 +++++++++++++++++++++ 2 files changed, 40 insertions(+) create mode 100644 src/components/IdCard.js diff --git a/src/App.js b/src/App.js index 2627b3c6d..13b34e84c 100644 --- a/src/App.js +++ b/src/App.js @@ -1,4 +1,5 @@ import './App.css'; +import IdCard from './components/IdCard'; function App() { @@ -6,6 +7,24 @@ function App() { return (
+ {/* Iteration 1 */} + + +
); } diff --git a/src/components/IdCard.js b/src/components/IdCard.js new file mode 100644 index 000000000..6f88e3709 --- /dev/null +++ b/src/components/IdCard.js @@ -0,0 +1,21 @@ +// lastName: A string +// firstName: A string +// gender: A string, 'male' or 'female' +// height: A number +// birth: A date +// picture: A string + + +function IdCard({lastName, firstName, gender, height, birth, picture}){ + return
+ +

First name: {firstName}

+

Last name: {lastName}

+

Gender: {gender}

+

Height: {height/100}m

+

Birth: {birth.toLocaleDateString()}

+ +
+} + +export default IdCard; \ No newline at end of file From 392bc9e306e10cbf09ac6249db9def799ed41864 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CZuzana?= Date: Sat, 26 Jul 2025 12:32:45 +0200 Subject: [PATCH 21/26] Iteration 2 --- src/App.js | 6 +++++- src/components/Greetings.js | 16 ++++++++++++++++ src/components/IdCard.js | 10 +--------- 3 files changed, 22 insertions(+), 10 deletions(-) create mode 100644 src/components/Greetings.js diff --git a/src/App.js b/src/App.js index 13b34e84c..73a4701b5 100644 --- a/src/App.js +++ b/src/App.js @@ -1,6 +1,6 @@ import './App.css'; import IdCard from './components/IdCard'; - +import Greetings from './components/Greetings'; function App() { @@ -25,6 +25,10 @@ function App() { birth={new Date("1988-05-11")} picture="https://randomuser.me/api/portraits/women/44.jpg" /> + + {/* Iteration 2 */} + Ludwig + François
); } diff --git a/src/components/Greetings.js b/src/components/Greetings.js new file mode 100644 index 000000000..8638fc8f1 --- /dev/null +++ b/src/components/Greetings.js @@ -0,0 +1,16 @@ +function Greetings({lang, children}) { + const chooseGreeting = (lang) => { + if (lang==="de") { + return "Hallo" + } + if (lang==="fr") { + return "Bonjour" + } + else return "Nothing" + }; + return
+

{chooseGreeting(lang)} {children}

+
+} + +export default Greetings; \ No newline at end of file diff --git a/src/components/IdCard.js b/src/components/IdCard.js index 6f88e3709..1b4e6e79d 100644 --- a/src/components/IdCard.js +++ b/src/components/IdCard.js @@ -1,14 +1,6 @@ -// lastName: A string -// firstName: A string -// gender: A string, 'male' or 'female' -// height: A number -// birth: A date -// picture: A string - - function IdCard({lastName, firstName, gender, height, birth, picture}){ return
- + Id of person

First name: {firstName}

Last name: {lastName}

Gender: {gender}

From 513e5592893c4c234a90c09ad05144d44b42754a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CZuzana?= Date: Sat, 26 Jul 2025 12:41:19 +0200 Subject: [PATCH 22/26] Iteration 3 --- src/App.js | 5 +++++ src/components/Random.js | 11 +++++++++++ 2 files changed, 16 insertions(+) create mode 100644 src/components/Random.js diff --git a/src/App.js b/src/App.js index 73a4701b5..51faa83d8 100644 --- a/src/App.js +++ b/src/App.js @@ -1,6 +1,7 @@ import './App.css'; import IdCard from './components/IdCard'; import Greetings from './components/Greetings'; +import Random from './components/Random'; function App() { @@ -29,6 +30,10 @@ function App() { {/* Iteration 2 */} Ludwig François + + {/* Iteration 3 */} + +
); } diff --git a/src/components/Random.js b/src/components/Random.js new file mode 100644 index 000000000..5d5328f9e --- /dev/null +++ b/src/components/Random.js @@ -0,0 +1,11 @@ + + +function Random({min,max}) { + let calculateRandom; + calculateRandom = (min,max) => Math.floor(Math.random() * (max - min) + min); + return
+

Random value between 1 and {max} is {calculateRandom(min,max)}

+
+} + +export default Random; \ No newline at end of file From eb034e632fefd3d5b8b9058d43bb078469a78d25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CZuzana?= Date: Sat, 26 Jul 2025 13:07:09 +0200 Subject: [PATCH 23/26] Iteration 8 --- src/App.js | 5 +++++ src/components/LikeButton.js | 20 ++++++++++++++++++++ 2 files changed, 25 insertions(+) create mode 100644 src/components/LikeButton.js diff --git a/src/App.js b/src/App.js index 51faa83d8..0232ef98f 100644 --- a/src/App.js +++ b/src/App.js @@ -2,6 +2,7 @@ import './App.css'; import IdCard from './components/IdCard'; import Greetings from './components/Greetings'; import Random from './components/Random'; +import LikeButton from './components/LikeButton'; function App() { @@ -34,6 +35,10 @@ function App() { {/* Iteration 3 */} + + {/* Iteration 8 */} + +
); } diff --git a/src/components/LikeButton.js b/src/components/LikeButton.js new file mode 100644 index 000000000..93a7af540 --- /dev/null +++ b/src/components/LikeButton.js @@ -0,0 +1,20 @@ +import { useState } from "react"; + +function LikeButton() { + const [count, setCount] = useState(0); + + const colorsArray = ['purple','blue','green','yellow','orange','red'] + const buttonCounter = () => { return setCount(count+1)} + + return
+ +
+} + +export default LikeButton; \ No newline at end of file From adb7fc66ae80ee5176570c387423a4763ac7ff1b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CZuzana?= Date: Sun, 27 Jul 2025 10:09:19 +0200 Subject: [PATCH 24/26] Iteration 9 --- src/App.js | 8 +++++++- src/components/ClickablePicture.js | 15 +++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 src/components/ClickablePicture.js diff --git a/src/App.js b/src/App.js index 0232ef98f..1719e7c8d 100644 --- a/src/App.js +++ b/src/App.js @@ -3,6 +3,7 @@ import IdCard from './components/IdCard'; import Greetings from './components/Greetings'; import Random from './components/Random'; import LikeButton from './components/LikeButton'; +import ClickablePicture from './components/ClickablePicture'; function App() { @@ -38,7 +39,12 @@ function App() { {/* Iteration 8 */} - + + {/* Iteration 9 */} +
); } diff --git a/src/components/ClickablePicture.js b/src/components/ClickablePicture.js new file mode 100644 index 000000000..f9f76c38d --- /dev/null +++ b/src/components/ClickablePicture.js @@ -0,0 +1,15 @@ +import { useState } from "react"; + +function ClickablePicture({img, imgClicked}) { + const [isImageClicked, setIsImageClicked] = useState(false); + + const toggleImage = () => { + return setIsImageClicked(!isImageClicked); + } + + return
+ Ironhacker +
+} + +export default ClickablePicture; \ No newline at end of file From 1675d8f50a18c158b46c850e2d63f7bb54779bdd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CZuzana?= Date: Sun, 27 Jul 2025 10:30:42 +0200 Subject: [PATCH 25/26] Iteration 10 --- src/App.js | 4 ++++ src/components/Dice.js | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+) create mode 100644 src/components/Dice.js diff --git a/src/App.js b/src/App.js index 1719e7c8d..946c2ac15 100644 --- a/src/App.js +++ b/src/App.js @@ -4,6 +4,7 @@ import Greetings from './components/Greetings'; import Random from './components/Random'; import LikeButton from './components/LikeButton'; import ClickablePicture from './components/ClickablePicture'; +import Dice from './components/Dice'; function App() { @@ -45,6 +46,9 @@ function App() { img='maxence.png' imgClicked='maxence-glasses.png' /> + + {/* Iteration 10 */} +
); } diff --git a/src/components/Dice.js b/src/components/Dice.js new file mode 100644 index 000000000..014fe1766 --- /dev/null +++ b/src/components/Dice.js @@ -0,0 +1,35 @@ +import { useState } from 'react'; +import emptyDice from '../assets/images/dice-empty.png'; +import dice1 from '../assets/images/dice1.png'; +import dice2 from '../assets/images/dice2.png'; +import dice3 from '../assets/images/dice3.png'; +import dice4 from '../assets/images/dice4.png'; +import dice5 from '../assets/images/dice5.png'; +import dice6 from '../assets/images/dice6.png'; + + +function Dice() { + const DiceArray = [emptyDice, dice1, dice2, dice3, dice4, dice5, dice6]; + const [isDiceEmpty, setIsDiceEmpty] = useState(true); + + const toggleDice = () => {  + setIsDiceEmpty(!isDiceEmpty); + } + + const randomDiceImage = () => { + const randomIndex = Math.floor(Math.random() * 6); + const diceImage = DiceArray[randomIndex]; + return diceImage; + } + + return
+ Dice +
+} + +export default Dice; + + +// Pseudocode +// onclick - toggle empty dice and random dice +// generate a random dice and show it when toggled \ No newline at end of file From 1ce0012085da6d89795cf5cf529d4a9e9a320d6c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CZuzana?= Date: Sun, 27 Jul 2025 10:58:13 +0200 Subject: [PATCH 26/26] Iteration 12 --- src/App.js | 5 +++++ src/components/Dice.js | 5 ----- src/components/NumbersTable.js | 23 +++++++++++++++++++++++ 3 files changed, 28 insertions(+), 5 deletions(-) create mode 100644 src/components/NumbersTable.js diff --git a/src/App.js b/src/App.js index 946c2ac15..a767f3ca8 100644 --- a/src/App.js +++ b/src/App.js @@ -5,6 +5,7 @@ import Random from './components/Random'; import LikeButton from './components/LikeButton'; import ClickablePicture from './components/ClickablePicture'; import Dice from './components/Dice'; +import NumbersTable from './components/NumbersTable'; function App() { @@ -49,6 +50,10 @@ function App() { {/* Iteration 10 */} + + {/* Iteration 12 */} + +
); } diff --git a/src/components/Dice.js b/src/components/Dice.js index 014fe1766..d1e1b8a09 100644 --- a/src/components/Dice.js +++ b/src/components/Dice.js @@ -28,8 +28,3 @@ function Dice() { } export default Dice; - - -// Pseudocode -// onclick - toggle empty dice and random dice -// generate a random dice and show it when toggled \ No newline at end of file diff --git a/src/components/NumbersTable.js b/src/components/NumbersTable.js new file mode 100644 index 000000000..ec6c90aa5 --- /dev/null +++ b/src/components/NumbersTable.js @@ -0,0 +1,23 @@ + + +function NumbersTable({limit}) { + const NumbersArray=[]; + for (let i=0; i + {NumbersArray.map((number) => { + return( +
+ {number} +
) + })} + + +
+} + +export default NumbersTable; \ No newline at end of file