diff --git a/src/components/EntityList.jsx b/src/components/EntityList.jsx
index e3ad5da..fa266da 100644
--- a/src/components/EntityList.jsx
+++ b/src/components/EntityList.jsx
@@ -18,7 +18,7 @@ const EntityPlaceholder = (props) => {
const EntityItem = (props) => {
return (
-
+
{props.cover &&
@@ -43,8 +43,9 @@ export const EntityList = (props) => {
entities.push(
)
}
}else{
- entities = props.items.map(item => );
+ entities = props.items.map(item => );
}
const className = props.grid ? "grid" : "column";
diff --git a/src/components/EntityList.scss b/src/components/EntityList.scss
index 959536e..6afff34 100644
--- a/src/components/EntityList.scss
+++ b/src/components/EntityList.scss
@@ -105,7 +105,7 @@
width: 0;
}
- &:hover {
+ &:hover, &.selected{
&:after{
width: 100%;
}
@@ -130,7 +130,7 @@
transition: all 300ms ease-in-out;
}
- &:hover {
+ &:hover, &.selected {
.cover {
outline: 6px var(--accent) solid;
outline-offset: -6px;
diff --git a/src/index.jsx b/src/index.jsx
index 4ebf589..31163f0 100644
--- a/src/index.jsx
+++ b/src/index.jsx
@@ -11,6 +11,7 @@ import {SearchBar} from "./components/SearchBar";
import {Search} from './views/Search';
import {ArtistView} from "./views/Artist";
import {DiscView} from "./views/Disc";
+import {ReleaseView} from "./views/Release";
const Main = (props) => {
const navigate = (query) => props.history.push(`/search?query=${query}`);
@@ -40,6 +41,7 @@ const App = () => (
+
diff --git a/src/services/entity_service.js b/src/services/entity_service.js
index cc50743..965bc64 100644
--- a/src/services/entity_service.js
+++ b/src/services/entity_service.js
@@ -26,13 +26,13 @@ export async function getDiscVersions(mbid, page = 1, per_page = 10) {
return response.data
}
-export async function getVersion(mbid) {
+export async function getRelease(mbid) {
const url = `${baseUrl}/release/${mbid}`;
const response = await axios.get(url);
return response.data
}
-export async function getReleaseSongs(mbid, page = 1, per_page = 50) {
+export async function getReleaseSongs(mbid) {
const url = `${baseUrl}/release/${mbid}/recordings`;
const response = await axios.get(url);
return response.data
diff --git a/src/views/Release.jsx b/src/views/Release.jsx
new file mode 100644
index 0000000..82bec1a
--- /dev/null
+++ b/src/views/Release.jsx
@@ -0,0 +1,87 @@
+import React, {Fragment, useEffect, useState} from 'react';
+
+import {getRelease, getReleaseSongs} from "../services/entity_service";
+
+import {CoverArt} from "../components/CoverArt";
+import {Entity} from "../components/Entity";
+import {EntityList} from "../components/EntityList";
+
+const capitalize = (string) => {
+ return string.charAt(0).toUpperCase() + string.slice(1);
+}
+
+const Recordings = (props) => {
+ const recordings = props.recordings ? props.recordings : null;
+
+ let recordingsComponent = ;
+ if(recordings) {
+ const items = recordings.map((recording) => ({
+ 'id': recording.id,
+ 'link': props.makeLink(recording.id),
+ 'title': recording.title,
+ 'subtitle': (
+ {recording.length}
+ {capitalize(recording.disambiguation)}
+ ),
+ 'selected': props.selected === recording.id
+
+ }));
+ recordingsComponent =
+ }
+
+ return (
+
+ Canciones
+ {recordingsComponent}
+
+ )
+}
+
+const Release = (props) => {
+ const release = props.release;
+ if (release){
+ return }/>
+ }else {
+ return
+ }
+}
+
+export const ReleaseView = (props) => {
+ const mbid = props.match.params.mbid;
+
+ const [release, setRelease] = useState(null);
+ const [recordings, setRecordings] = useState(null);
+ const currentRecording = props.location.hash ? props.location.hash.slice(1) : null
+
+ useEffect(() => {
+ if (mbid) {
+ getRelease(mbid).then((result) => setRelease(result));
+ getReleaseSongs(mbid).then((result) => {
+ setRecordings(result.medias[0].recordings);
+ });
+ }
+ }, [mbid])
+
+ const makeLink = (recordingID) => {
+ return `/release/${mbid}#${recordingID}`;
+ }
+
+ const handleNavigateToRecording= (recording) => {
+ props.history.push(makeLink(recording.id))
+ }
+
+ return (
+
+
+ {release &&
+
+ }
+
+ )
+}