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> </> ); }