diff --git a/src/components/EntityList.jsx b/src/components/EntityList.jsx
index 0aee37b..ca5f099 100644
--- a/src/components/EntityList.jsx
+++ b/src/components/EntityList.jsx
@@ -2,6 +2,14 @@ import React from "react";
import {Link} from "react-router-dom";
import "./EntityList.scss"
+const EntityHeader = (props) => {
+ return (
+
+ )
+}
+
const EntityPlaceholder = (props) => {
return (
@@ -50,10 +58,16 @@ export const EntityList = (props) => {
if(props.placeholder){
entities = [];
for(const i of Array(props.size).keys()){
- entities.push()
+ entities.push();
}
}else{
- entities = props.list.items.map(item => );
+ let mapped = props.list.map(group => {
+ let header = group.header ? : null;
+ let items = group.items.map(item => );
+ items.unshift(header);
+ return items;
+ });
+ entities = [].concat.apply([], mapped);
}
const className = props.grid ? "grid" : "column";
diff --git a/src/components/EntityList.scss b/src/components/EntityList.scss
index f81d877..13c2d9f 100644
--- a/src/components/EntityList.scss
+++ b/src/components/EntityList.scss
@@ -1,5 +1,11 @@
// Base
.entity-list {
+ .entity-header{
+ font-size: 1.2em;
+ font-weight: 500;
+ border-bottom: solid var(--line-width) var(--accent);
+ }
+
.entity-item {
a {
text-decoration: none;
@@ -29,29 +35,31 @@
// Column mode
.entity-list.column {
-
- .entity-item .entity-container {
- display: flex;
- justify-content: space-between;
-
- a {
+ .entity-item{
+ margin-bottom: 1em;
+ .entity-container {
display: flex;
- flex-direction: row;
- align-items: center;
+ justify-content: space-between;
- padding: 1em 1em;
-
- flex-grow: 2;
- .body {
+ a {
display: flex;
- flex-direction: column;
- }
- }
+ flex-direction: row;
+ align-items: center;
- .widget {
- display: flex;
- align-items: center;
- padding-right: 1em;
+ padding: 1em 1em;
+
+ flex-grow: 2;
+ .body {
+ display: flex;
+ flex-direction: column;
+ }
+ }
+
+ .widget {
+ display: flex;
+ align-items: center;
+ padding-right: 1em;
+ }
}
}
}
diff --git a/src/views/Artist.jsx b/src/views/Artist.jsx
index 3720bd1..8117ac4 100644
--- a/src/views/Artist.jsx
+++ b/src/views/Artist.jsx
@@ -26,9 +26,9 @@ const Discs = (props) => {
'title': disc.title,
'subtitle': disc.artist.name
}));
- const list = {
+ const list = [{
'items': items
- }
+ }]
discsComponent =
}else{
discsComponent = El artista no tiene discos
diff --git a/src/views/Disc.jsx b/src/views/Disc.jsx
index 1b7d234..d0f03f6 100644
--- a/src/views/Disc.jsx
+++ b/src/views/Disc.jsx
@@ -31,9 +31,9 @@ const Versions = (props) => {
}));
- const list = {
+ const list = [{
'items': items
- }
+ }];
versionsComponent =
}
diff --git a/src/views/Release.jsx b/src/views/Release.jsx
index caba231..a39049d 100644
--- a/src/views/Release.jsx
+++ b/src/views/Release.jsx
@@ -10,32 +10,34 @@ import {EntityList} from "../components/EntityList";
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 && [{toDuration(recording.length)}]
}
- {recording.disambiguation && {capitalize(recording.disambiguation)}
}
- ),
- 'selected': props.selected === recording.id,
- 'widget':
+ const medias = props.medias ? props.medias: null;
+ let mediasComponent = ;
+ if(medias) {
+ const list= medias.map((media) => ({
+ 'header': media.format + ' ' + media.position,
+ 'items': media.recordings.map((recording) => ({
+ 'id': recording.id,
+ 'link': props.makeLink(recording.id),
+ 'title': recording.title,
+ 'subtitle': (
+ {recording.length &&
+ [{toDuration(recording.length)}]
}
+ {recording.disambiguation &&
+ {capitalize(recording.disambiguation)}
}
+ ),
+ 'selected': props.selected === recording.id,
+ 'widget':
+ }))
}));
- const list = {
- 'items': items
- }
- recordingsComponent =
+
+ mediasComponent =
}
return (
Canciones
- {recordingsComponent}
+ {mediasComponent}
)
}
@@ -61,14 +63,14 @@ export const ReleaseView = (props) => {
const mbid = props.match.params.mbid;
const [release, setRelease] = useState(null);
- const [recordings, setRecordings] = useState(null);
+ const [medias, setMedias] = 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);
+ setMedias(result.medias);
});
}
}, [mbid])
@@ -85,7 +87,7 @@ export const ReleaseView = (props) => {
{release &&
-
diff --git a/src/views/Search.jsx b/src/views/Search.jsx
index 0e72180..c8161b3 100644
--- a/src/views/Search.jsx
+++ b/src/views/Search.jsx
@@ -49,9 +49,9 @@ const SearchSongs = (props) => {
'subtitle': song.artist.name
};
});
- const list = {
+ const list = [{
'items': items
- }
+ }]
songsComponent =
}
@@ -111,9 +111,9 @@ const SearchDiscs = (props) => {
'title': disc.title,
'subtitle': disc.artist.name
}));
- const list = {
+ const list = [{
'items': items
- }
+ }]
discsComponent =
}
@@ -172,9 +172,9 @@ const SearchArtists = (props) => {
'title': artist.name,
'subtitle': [artist.type, artist.country].filter(Boolean).join(' - ')
}));
- const list = {
+ const list = [{
'items': items
- }
+ }];
artistsContent =
}