diff --git a/package-lock.json b/package-lock.json
index 368ef0b..feb34d8 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -10,9 +10,11 @@
"dependencies": {
"axios": "^1.5.0",
"file-saver": "^2.0.5",
+ "inversify": "^6.0.1",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"reactflow": "^11.8.3",
+ "reflect-metadata": "^0.1.13",
"use-debounce": "^9.0.4"
},
"devDependencies": {
@@ -2199,6 +2201,11 @@
"dev": true,
"license": "ISC"
},
+ "node_modules/inversify": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/inversify/-/inversify-6.0.1.tgz",
+ "integrity": "sha512-B3ex30927698TJENHR++8FfEaJGqoWOgI6ZY5Ht/nLUsFCwHn6akbwtnUAPCgUepAnTpe2qHxhDNjoKLyz6rgQ=="
+ },
"node_modules/is-binary-path": {
"version": "2.1.0",
"dev": true,
@@ -2963,6 +2970,11 @@
"node": ">=8.10.0"
}
},
+ "node_modules/reflect-metadata": {
+ "version": "0.1.13",
+ "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz",
+ "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg=="
+ },
"node_modules/resolve": {
"version": "1.22.6",
"dev": true,
diff --git a/package.json b/package.json
index 96760a8..3ed00cf 100644
--- a/package.json
+++ b/package.json
@@ -14,9 +14,11 @@
"dependencies": {
"axios": "^1.5.0",
"file-saver": "^2.0.5",
+ "inversify": "^6.0.1",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"reactflow": "^11.8.3",
+ "reflect-metadata": "^0.1.13",
"use-debounce": "^9.0.4"
},
"devDependencies": {
diff --git a/src/Search.tsx b/src/Search.tsx
index d71ff9f..6c16052 100644
--- a/src/Search.tsx
+++ b/src/Search.tsx
@@ -1,147 +1,49 @@
-import React from 'react';
-import SearchList from './SearchList'
-import {useContext, useState} from 'react'
-import axios from 'axios'
-import {SpotifyContext} from './context/SpotifyContext'
-import {FlowContext} from './context/FlowContext'
-import {saveAs} from 'file-saver';
-
-const CLIENT_ID = '0350c90137454dc5a748549664e5ba75'
-const REDIRECT_URI = window.location.href
-const AUTH_ENDPOINT = 'https://accounts.spotify.com/authorize'
-const RESPONSE_TYPE = 'token'
+import { useContext, useState } from 'react'
+import { OAuthMusicContext } from './context/OAuthMusicContext'
+import SearchList from './SearchList.tsx'
+import { Track } from './services/music/interface.ts'
function Search() {
- const {token, logout} = useContext(SpotifyContext)
- const {nodes, setNodes, edges, setEdges} = useContext(FlowContext)
-
- const [searchKey, setSearchKey] = useState('')
- const [tracks, setTracks] = useState([])
-
- async function getTrackFeatures(token, track_id) {
- const response = await axios.get(`https://api.spotify.com/v1/audio-features/${track_id}`, {
- headers: {
- Authorization: `Bearer ${token}`
- }
- });
- return response.data;
- };
-
- async function searchTracks(e) {
- e.preventDefault()
- const {data} = await axios.get('https://api.spotify.com/v1/search', {
- headers: {
- Authorization: `Bearer ${token}`
- },
- params: {
- q: searchKey,
- type: 'track'
- }
- })
-
- const trackItems = data.tracks.items;
-
- const trackFeaturesPromises = trackItems.map(async (item) => {
- const features = await getTrackFeatures(token, item.id);
- return {track: item, features: features};
- });
- const trackFeatures = await Promise.all(trackFeaturesPromises);
-
- setTracks(trackFeatures)
- }
-
- function handleExport(e) {
- const data = {
- nodes: nodes,
- edges: edges
- };
- const json = JSON.stringify(data);
- const blob = new Blob([json], {type: 'application/json'});
- saveAs(blob, 'track_lineage_export.json');
- }
-
- const fileInputRef = React.createRef();
-
- function handleImportButtonClick() {
- fileInputRef.current.click();
- }
-
-
- function handleImport(event) {
- const file = event.target.files[0];
- const reader = new FileReader();
-
- reader.onload = (e) => {
- try {
- const data = JSON.parse(e.target.result);
-
- if (data.nodes && data.edges) {
- setNodes(data.nodes);
- setEdges(data.edges);
- alert('Import successful!');
- } else {
- alert('Invalid file format. Please select a valid JSON file.');
- }
- } catch (error) {
- alert('Error parsing JSON. Please check the file format.');
- }
- };
-
- reader.readAsText(file);
- }
-
- return (
-
- {
- !token ? (
-
- Login to Spotify
-
- ) : (
-
- )
- }
-
-
-
-
-
-
-
-
-
-
- )
+ const { login, logout } = useContext(OAuthMusicContext)
+ const { search, token } = useContext(OAuthMusicContext)
+ const [key, setKey] = useState('')
+ const [tracks, setTracks] = useState