diff --git a/package-lock.json b/package-lock.json
deleted file mode 100644
index 64b3008..0000000
--- a/package-lock.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
- "name": "T04-Project-1",
- "lockfileVersion": 3,
- "requires": true,
- "packages": {}
-}
diff --git a/webdev-prosjekt1/package-lock.json b/webdev-prosjekt1/package-lock.json
index c8fbc13..d64e3da 100644
--- a/webdev-prosjekt1/package-lock.json
+++ b/webdev-prosjekt1/package-lock.json
@@ -8,6 +8,7 @@
"name": "webdev-prosjekt1",
"version": "0.0.0",
"dependencies": {
+ "@tanstack/react-query": "^5.102.8",
"react": "^19.2.8",
"react-dom": "^19.2.8"
},
@@ -817,6 +818,32 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/@tanstack/query-core": {
+ "version": "5.102.8",
+ "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.102.8.tgz",
+ "integrity": "sha512-ZNjkJ33CqvPNec/6lZBnHqLc3EVGPZ9ySLhYahU9TcuRFdmwXewuj0c4hwSWcGHqEUwcSrKeZ+oGcvPBqXcQcg==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/tannerlinsley"
+ }
+ },
+ "node_modules/@tanstack/react-query": {
+ "version": "5.102.8",
+ "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.102.8.tgz",
+ "integrity": "sha512-TYBea4OuXWD7MhaSHq069TWbFe7rcwWN6kzT7JF0OKi1K6c1gTv2IzD6A6ExJsCMozdkqBWeuIUZmu4KQg0O5A==",
+ "license": "MIT",
+ "dependencies": {
+ "@tanstack/query-core": "5.102.8"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/tannerlinsley"
+ },
+ "peerDependencies": {
+ "react": "^18 || ^19"
+ }
+ },
"node_modules/@types/babel__core": {
"version": "7.20.5",
"resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz",
diff --git a/webdev-prosjekt1/package.json b/webdev-prosjekt1/package.json
index 00003ce..76c7624 100644
--- a/webdev-prosjekt1/package.json
+++ b/webdev-prosjekt1/package.json
@@ -10,6 +10,7 @@
"preview": "vite preview"
},
"dependencies": {
+ "@tanstack/react-query": "^5.102.8",
"react": "^19.2.8",
"react-dom": "^19.2.8"
},
diff --git a/webdev-prosjekt1/src/App.tsx b/webdev-prosjekt1/src/App.tsx
index 33ddc37..34efd0d 100644
--- a/webdev-prosjekt1/src/App.tsx
+++ b/webdev-prosjekt1/src/App.tsx
@@ -5,13 +5,35 @@ import { Searchbar } from './components/Searchbar';
import filterIcon from './assets/filter.png';
import musicWizImage from './assets/musicwiz.png';
import logoImage from './assets/music-wiz-logo.png';
+import { useState } from 'react';
+import { useQuery } from '@tanstack/react-query';
+import { search } from './api/spotify';
function App() {
+ const [query, setQuery] = useState('');
+
+ const handleSearch = (nextQuery: string) => {
+ setQuery(nextQuery);
+ };
+
+ const {
+ data: results,
+ isLoading,
+ isFetching,
+ isError,
+ error,
+ } = useQuery({
+ queryKey: ['search', query],
+ queryFn: () => search(query),
+ enabled: query.trim().length > 0,
+ });
+
+ console.log(results);
+
return (
<>
>
- )
+ );
}
export default App;
diff --git a/webdev-prosjekt1/src/components/Searchbar.tsx b/webdev-prosjekt1/src/components/Searchbar.tsx
index d07b068..d69561b 100644
--- a/webdev-prosjekt1/src/components/Searchbar.tsx
+++ b/webdev-prosjekt1/src/components/Searchbar.tsx
@@ -1,11 +1,26 @@
import './Searchbar.css';
import '../variables.css';
+import { useState } from 'react';
+
+type SearchbarProps = {
+ onSearch: (query: string) => void;
+};
+
+export const Searchbar = ({ onSearch }: SearchbarProps) => {
+ const [query, setQuery] = useState('');
+
+ const handleSubmit = (event: React.SubmitEvent) => {
+ event.preventDefault();
+
+ if (!query.trim()) return;
+
+ onSearch(query.trim());
+ };
-export const Searchbar = () => {
return (
-
+ setQuery(event.target.value)}/>
+
)
}
diff --git a/webdev-prosjekt1/src/main.tsx b/webdev-prosjekt1/src/main.tsx
index 931804e..e534854 100644
--- a/webdev-prosjekt1/src/main.tsx
+++ b/webdev-prosjekt1/src/main.tsx
@@ -1,11 +1,16 @@
import { StrictMode } from 'react'
import { createRoot } from 'react-dom/client'
+import { QueryClient, QueryClientProvider } from "@tanstack/react-query"
import './index.css'
import './variables.css'
import App from './App.tsx'
+const queryClient = new QueryClient()
+
createRoot(document.getElementById('root')!).render(
-
+
+
+
,
)