diff --git a/src/components/Footer.tsx b/src/components/Footer.tsx index dcfcef7..45eeb1a 100644 --- a/src/components/Footer.tsx +++ b/src/components/Footer.tsx @@ -11,7 +11,7 @@ export default function Footer() { }, [mailState]) return ( -
+

© {new Date().getFullYear()}, Alex Frantz. All Rights Reserved

All logos & images on this page belong to their respective owners.

diff --git a/src/components/Header.tsx b/src/components/Header.tsx index 5364a5e..8de825f 100644 --- a/src/components/Header.tsx +++ b/src/components/Header.tsx @@ -1,9 +1,10 @@ export default function Header() { return ( -
-

Alex Frantz

+ +
+

Alex Frantz

Professional button clicker & word typer

- +
) diff --git a/src/components/ProjectComponents/RecentListens.tsx b/src/components/ProjectComponents/RecentListens.tsx new file mode 100644 index 0000000..9a67b4e --- /dev/null +++ b/src/components/ProjectComponents/RecentListens.tsx @@ -0,0 +1,90 @@ +import { useState, useEffect } from 'react'; + +type MusicAPIResponse = { + data: { + tracks: MusicData[] + } +} + +type MusicData = { + artist: { + mbid: string, + "#text": string + }, + mbid: string, + album: { + mbid: string, + "#text": string, + }, + name: string, + url: string, + image: MusicImage[] +} + +type MusicImage = { + size: string, + "#text": string +} + +export default function RecentListens() { + const [ data, setData ] = useState(); + const [ errorState, setErrorState ] = useState(""); + const [ loading, setLoading ] = useState(true); + + useEffect(() => { + fetch("https://api.alexav.gg/v4/social/music", { + method: "get" + }) + .then(async (res) => { + if (res.ok) { + const data = await res.json() as MusicAPIResponse + setData(data.data.tracks); + } else { + setErrorState("Failed to load! :(") + } + }) + .catch((e: Error) => { + setErrorState(e.message) + }) + + setLoading(false); + }, []); + + if (data) { + return ( + + + + ) + } else { + <> +

No data :(

+

Check out last.fm/lulawex if this isn't working.

+

{errorState}

+ + } +} \ No newline at end of file diff --git a/src/components/RecentPhoto.tsx b/src/components/ProjectComponents/RecentPhoto.tsx similarity index 96% rename from src/components/RecentPhoto.tsx rename to src/components/ProjectComponents/RecentPhoto.tsx index f7f6ae3..bc8632c 100644 --- a/src/components/RecentPhoto.tsx +++ b/src/components/ProjectComponents/RecentPhoto.tsx @@ -19,10 +19,6 @@ export default function RecentPhoto() { const [ loading, setLoading ] = useState(true); const [ errorState, setErrorState ] = useState(null); - useEffect(() => { - console.log(data) - }, [data]) - useEffect(() => { fetch("https://photos-cors.alexav.gg", { method: 'get', @@ -33,7 +29,6 @@ export default function RecentPhoto() { .then(async (res) => { if (res.ok) { console.log("ok!") - console.log(errorState) const json = await res.json() as PhotoDataResponse[]; setData(json[0].result.data.json); setLoading(false) diff --git a/src/components/RecentWatch.tsx b/src/components/ProjectComponents/RecentWatch.tsx similarity index 100% rename from src/components/RecentWatch.tsx rename to src/components/ProjectComponents/RecentWatch.tsx diff --git a/src/index.tsx b/src/index.tsx index 1747cea..8a8b07c 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -3,8 +3,11 @@ import Header from "./components/Header"; import ListBox from "./components/ListBox"; import Project from "./components/Project"; import ContactForm from "./components/ContactForm"; -import RecentWatch from "./components/RecentWatch"; -import RecentPhoto from "./components/RecentPhoto"; + +// project components +import RecentWatch from "./components/ProjectComponents/RecentWatch"; +import RecentPhoto from "./components/ProjectComponents/RecentPhoto"; +import RecentListens from "./components/ProjectComponents/RecentListens"; export default function Home() { return ( @@ -12,7 +15,7 @@ export default function Home() {
-
+

Projects

@@ -65,7 +68,20 @@ export default function Home() {
-
+
+
+
+
+

What am I listening to?

+

I listen to some good stuff I swear

+
+
+
+ +
+
+
+