diff --git a/src/sections/Advice/components/AdviceSlip.jsx b/src/sections/Advice/components/AdviceSlip.jsx index e69de29b..594e8503 100644 --- a/src/sections/Advice/components/AdviceSlip.jsx +++ b/src/sections/Advice/components/AdviceSlip.jsx @@ -0,0 +1,49 @@ +import React from "react"; +import { useState, useEffect } from "react"; + +function AdviceSlip({ url, setFavourite, favourites }) { + const [data, setData] = useState([]); + const [loading, setLoading] = useState(true); + + useEffect(() => { + handleFetch(); + }, []); + + const handleFetch = () => { + setLoading(true); + fetch(url) + .then((res) => res.json()) + .then((result) => { + setData(result); + setLoading(false); + }) + .catch((error) => { + console.error("Fetch error:", error); + setLoading(false); + }); + }; + + const AddFavourite = (favId) => { + if (favourites.includes(favId)) { + return; + } + setFavourite((prevIds) => [...prevIds, favId]); + }; + + if (loading) { + return
; + } + + return ( +
+

Some Advice

+

{data.slip.advice}

+ + +
+ ); +} + +export default AdviceSlip; diff --git a/src/sections/Advice/components/FavouriteSlipItem.jsx b/src/sections/Advice/components/FavouriteSlipItem.jsx new file mode 100644 index 00000000..652069ff --- /dev/null +++ b/src/sections/Advice/components/FavouriteSlipItem.jsx @@ -0,0 +1,32 @@ +import React from "react"; +import { useState, useEffect } from "react"; + +function FavouriteSlipItem({ url, id }) { + const [data, setData] = useState([]); + const [loading, setLoading] = useState(true); + + useEffect(() => { + fetch(url + "/" + id) + .then((res) => res.json()) + .then((result) => { + setData(result); + setLoading(false); + }) + .catch((error) => { + console.error("Fetch error:", error); + setLoading(false); + }); + }, []); + + useEffect(() => { + console.log(data); + }, [data]); + + if (loading) { + return
; + } + + return
  • {data.slip.advice}
  • ; +} + +export default FavouriteSlipItem; diff --git a/src/sections/Advice/components/FavouriteSlipsList.jsx b/src/sections/Advice/components/FavouriteSlipsList.jsx index e69de29b..10ef9e10 100644 --- a/src/sections/Advice/components/FavouriteSlipsList.jsx +++ b/src/sections/Advice/components/FavouriteSlipsList.jsx @@ -0,0 +1,22 @@ +import React from "react"; +import { useEffect } from "react"; +import FavouriteSlipItem from "./FavouriteSlipItem"; + +function FavouriteSlipsList({ url, favourites }) { + useEffect(() => { + console.log(favourites); + }, [favourites]); + + return ( +
    +

    Favourite Advice Slips

    + +
    + ); +} + +export default FavouriteSlipsList; diff --git a/src/sections/Advice/index.jsx b/src/sections/Advice/index.jsx index 0405f11f..5ef6ad4a 100644 --- a/src/sections/Advice/index.jsx +++ b/src/sections/Advice/index.jsx @@ -1,11 +1,23 @@ +import { useState } from "react"; +import AdviceSlip from "./components/AdviceSlip"; +import FavouriteSlipsList from "./components/FavouriteSlipsList"; + function AdviceSection() { + const apiUrl = "https://api.adviceslip.com/advice"; + + const [favourites, setFavourites] = useState([]); + return (

    Advice Section

    -
    -
    + +
    - ) + ); } -export default AdviceSection +export default AdviceSection; diff --git a/src/sections/Art/components/ArtList.jsx b/src/sections/Art/components/ArtList.jsx index e69de29b..9ffa291a 100644 --- a/src/sections/Art/components/ArtList.jsx +++ b/src/sections/Art/components/ArtList.jsx @@ -0,0 +1,14 @@ +import React from "react"; +import ArtListItem from "./ArtListItem"; + +function ArtList({ data, url }) { + return ( + + ); +} + +export default ArtList; diff --git a/src/sections/Art/components/ArtListItem.jsx b/src/sections/Art/components/ArtListItem.jsx index e69de29b..96e43c26 100644 --- a/src/sections/Art/components/ArtListItem.jsx +++ b/src/sections/Art/components/ArtListItem.jsx @@ -0,0 +1,18 @@ +import PublicationHistoryList from "./PublicationHistoryList"; + +function ArtListItem({ entity, url }) { + return ( +
  • + ArtListItem +
    + +
    +

    {entity.title}

    +

    Artist: {entity.artist}

    +

    Publication History:

    + +
  • + ); +} + +export default ArtListItem; diff --git a/src/sections/Art/components/PublicationHistoryList.jsx b/src/sections/Art/components/PublicationHistoryList.jsx index d3f5a12f..83eb45d3 100644 --- a/src/sections/Art/components/PublicationHistoryList.jsx +++ b/src/sections/Art/components/PublicationHistoryList.jsx @@ -1 +1,13 @@ +import React from "react"; +function PublicationHistoryList({ publications }) { + return ( + + ); +} + +export default PublicationHistoryList; diff --git a/src/sections/Art/index.jsx b/src/sections/Art/index.jsx index 0c74ffc2..cbf56c18 100644 --- a/src/sections/Art/index.jsx +++ b/src/sections/Art/index.jsx @@ -1,10 +1,48 @@ +import { useState, useEffect } from "react"; +import ArtList from "./components/ArtList"; + function ArtsSection() { + const apiUrl = "https://boolean-uk-api-server.fly.dev/art"; + const imgUrl = "https://boolean-uk-api-server.fly.dev"; + const [data, setData] = useState([]); + const [loading, setLoading] = useState(true); + + useEffect(() => { + fetch(apiUrl) + .then((res) => res.json()) + .then((result) => { + setData(result); + setLoading(false); + }) + .catch((error) => { + console.error("Fetch error:", error); + setLoading(false); + }); + }, []); + + /* + useEffect(() => { + console.log(data); + }, [data]) + */ + + if (loading) { + return ( +
    +

    Arts Section

    +
    +
    + ); + } + return (

    Arts Section

    -
    +
    + +
    - ) + ); } -export default ArtsSection +export default ArtsSection; diff --git a/src/sections/Users/components/UsersList.jsx b/src/sections/Users/components/UsersList.jsx index e69de29b..f90d2fed 100644 --- a/src/sections/Users/components/UsersList.jsx +++ b/src/sections/Users/components/UsersList.jsx @@ -0,0 +1,16 @@ +import React from "react"; +import UsersListItem from "./UsersListItem"; + +function UsersList({ data }) { + return ( +
    + +
    + ); +} + +export default UsersList; diff --git a/src/sections/Users/components/UsersListItem.jsx b/src/sections/Users/components/UsersListItem.jsx index e69de29b..099f6a9b 100644 --- a/src/sections/Users/components/UsersListItem.jsx +++ b/src/sections/Users/components/UsersListItem.jsx @@ -0,0 +1,22 @@ +import React from "react"; + +function UsersListItem({ entity }) { + const style = { + background: entity.favouriteColour, + }; + + return ( +
  • + {entity.firstName +

    + {entity.firstName} {entity.lastName} +

    +

    Email: {entity.email}

    +
  • + ); +} + +export default UsersListItem; diff --git a/src/sections/Users/index.jsx b/src/sections/Users/index.jsx index 77332830..b310d1c7 100644 --- a/src/sections/Users/index.jsx +++ b/src/sections/Users/index.jsx @@ -1,10 +1,47 @@ +import { useState, useEffect } from "react"; +import UsersList from "./components/UsersList"; + function UsersSection() { + const apiUrl = "https://boolean-uk-api-server.fly.dev/JakubMroz4/contact"; + const [data, setData] = useState([]); + const [loading, setLoading] = useState(true); + + useEffect(() => { + fetch(apiUrl) + .then((res) => res.json()) + .then((result) => { + setData(result); + setLoading(false); + }) + .catch((error) => { + console.error("Fetch error:", error); + setLoading(false); + }); + }, []); + + /* + useEffect(() => { + console.log(data); + }, [data]) + */ + + if (loading) { + return ( +
    +

    Users Section

    +
    +
    + ); + } + return (

    Users Section

    -
    +
    + +
    - ) + ); } -export default UsersSection +export default UsersSection;