example_next/src/app/page.tsx (57 lines of code) (raw):
"use client";
import { SearchResults, SpotifyApi } from "@sdk/index.js"; // use "@spotify/web-api-ts-sdk" in your own project
import sdk from "@/lib/spotify-sdk/ClientInstance";
import { useSession, signOut, signIn } from "next-auth/react";
import { useEffect, useState } from "react";
export default function Home() {
const session = useSession();
if (!session || session.status !== "authenticated") {
return (
<div>
<h1>Spotify Web API Typescript SDK in Next.js</h1>
<button onClick={() => signIn("spotify")}>Sign in with Spotify</button>
</div>
);
}
return (
<div>
<p>Logged in as {session.data.user?.name}</p>
<button onClick={() => signOut()}>Sign out</button>
<SpotifySearch sdk={sdk} />
</div>
);
}
function SpotifySearch({ sdk }: { sdk: SpotifyApi }) {
const [results, setResults] = useState<SearchResults>({} as SearchResults);
useEffect(() => {
(async () => {
const results = await sdk.search("The Beatles", ["artist"]);
setResults(() => results);
})();
}, [sdk]);
// generate a table for the results
const tableRows = results.artists?.items.map((artist) => {
return (
<tr key={artist.id}>
<td>{artist.name}</td>
<td>{artist.popularity}</td>
<td>{artist.followers.total}</td>
</tr>
);
});
return (
<>
<h1>Spotify Search for The Beatles</h1>
<table>
<thead>
<tr>
<th>Name</th>
<th>Popularity</th>
<th>Followers</th>
</tr>
</thead>
<tbody>{tableRows}</tbody>
</table>
</>
);
}