Utilizando entity list en search
This commit is contained in:
@@ -1,19 +1,14 @@
|
|||||||
import React, {Fragment, useEffect, useState} from "react";
|
import React from "react";
|
||||||
import {Link} from "react-router-dom";
|
import {Link} from "react-router-dom";
|
||||||
|
|
||||||
import {CoverArt} from "./CoverArt";
|
|
||||||
import "./EntityList.scss"
|
import "./EntityList.scss"
|
||||||
|
|
||||||
const EntityItem = (props) => {
|
const Entity = (props) => {
|
||||||
const disc = {
|
|
||||||
'id': '061f572e-7660-3c6b-b4cd-cf66d46da93c',
|
|
||||||
}
|
|
||||||
return (
|
return (
|
||||||
<li className='entity'>
|
<li className='entity'>
|
||||||
<Link to={props.link}>
|
<Link to={props.link}>
|
||||||
{props.cover &&
|
{props.cover &&
|
||||||
<div className='cover'>
|
<div className='cover'>
|
||||||
<CoverArt disc={disc} alt='Testing :3'/>
|
{props.cover}
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
<div className='body'>
|
<div className='body'>
|
||||||
@@ -26,18 +21,13 @@ const EntityItem = (props) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export const EntityList = (props) => {
|
export const EntityList = (props) => {
|
||||||
|
const entities = props.items.map(item => <Entity cover={item.cover} link={item.link}
|
||||||
|
title={item.title} subtitle={item.subtitle}/>);
|
||||||
|
|
||||||
|
const className = props.grid ? "grid" : "column";
|
||||||
return (
|
return (
|
||||||
<ul className="entity_list grid">
|
<ul className={'entity_list ' + className}>
|
||||||
<EntityItem link='a' title='Freaking long title with too many words' subtitle='Subtitle' cover={true}/>
|
{entities}
|
||||||
<EntityItem link='a' title='Title' subtitle='Subtitle' cover={true}/>
|
|
||||||
<EntityItem link='a' title='Title' subtitle='Subtitle' cover={true}/>
|
|
||||||
<EntityItem link='a' title='Title' subtitle='Subtitle' cover={true}/>
|
|
||||||
<EntityItem link='a' title='Title' subtitle='Subtitle' cover={true}/>
|
|
||||||
<EntityItem link='a' title='Title' subtitle='Subtitle' cover={true}/>
|
|
||||||
<EntityItem link='a' title='Title' subtitle='Subtitle' cover={true}/>
|
|
||||||
<EntityItem link='a' title='Title' subtitle='Subtitle' cover={true}/>
|
|
||||||
<EntityItem link='a' title='Title' subtitle='Subtitle' cover={true}/>
|
|
||||||
<EntityItem link='a' title='Title' subtitle='Subtitle' cover={true}/>
|
|
||||||
</ul>
|
</ul>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,6 +18,9 @@
|
|||||||
}
|
}
|
||||||
.subtitle {
|
.subtitle {
|
||||||
font-size: .8em;
|
font-size: .8em;
|
||||||
|
&:empty:before {
|
||||||
|
content: "\200b";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -33,7 +36,7 @@
|
|||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
padding: 1em 2em;
|
padding: 1em 1em;
|
||||||
.body {
|
.body {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
|
|||||||
@@ -5,32 +5,9 @@ import {searchArtist, searchDisc, searchSong} from "../services/search_service";
|
|||||||
import {SearchBar} from "./SearchBar";
|
import {SearchBar} from "./SearchBar";
|
||||||
import {Paginate} from "./Paginate";
|
import {Paginate} from "./Paginate";
|
||||||
import {CoverArt} from "./CoverArt";
|
import {CoverArt} from "./CoverArt";
|
||||||
import {Link} from "react-router-dom";
|
import {EntityList} from "./EntityList";
|
||||||
import {Tab, TabList, TabPanel, Tabs} from "react-tabs";
|
import {Tab, TabList, TabPanel, Tabs} from "react-tabs";
|
||||||
|
|
||||||
|
|
||||||
const SearchPlaceholder = (props) => {
|
|
||||||
return (
|
|
||||||
<Fragment>
|
|
||||||
{[...Array(10)].map((e, i) => <li key={i} className={props.className + ' pulsating'}/>)}
|
|
||||||
</Fragment>
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
const SearchSong = (props) => {
|
|
||||||
const song = props.song;
|
|
||||||
return (
|
|
||||||
<li className='song'>
|
|
||||||
<Link to={`/song/${song.id}`}>
|
|
||||||
<div className='description'>
|
|
||||||
<span>{song.title}</span>
|
|
||||||
<span className='small'>{song.artist.name}</span>
|
|
||||||
</div>
|
|
||||||
</Link>
|
|
||||||
</li>
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
const SearchSongs = (props) => {
|
const SearchSongs = (props) => {
|
||||||
const [songs, setSongs] = useState(null);
|
const [songs, setSongs] = useState(null);
|
||||||
const [paginate, setPaginate] = useState(null);
|
const [paginate, setPaginate] = useState(null);
|
||||||
@@ -59,9 +36,18 @@ const SearchSongs = (props) => {
|
|||||||
})
|
})
|
||||||
};
|
};
|
||||||
|
|
||||||
let songsComponent = <SearchPlaceholder className='song'/>;
|
|
||||||
|
let songsComponent = <Fragment/>;
|
||||||
if (songs) {
|
if (songs) {
|
||||||
songsComponent = songs.map((song) => <SearchSong key={song.id} song={song}/>);
|
const items = songs.map((song) => {
|
||||||
|
return {
|
||||||
|
'cover': null,
|
||||||
|
'link': `/song/${song.id}`,
|
||||||
|
'title': song.title,
|
||||||
|
'subtitle': song.artist.name
|
||||||
|
};
|
||||||
|
});
|
||||||
|
songsComponent = <EntityList items={items}/>
|
||||||
}
|
}
|
||||||
|
|
||||||
let paginateComponent;
|
let paginateComponent;
|
||||||
@@ -83,24 +69,6 @@ const SearchSongs = (props) => {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
const SearchDisc = (props) => {
|
|
||||||
const disc = props.disc;
|
|
||||||
|
|
||||||
return (
|
|
||||||
<li className='disc'>
|
|
||||||
<Link to={`/disc/${disc.id}`}>
|
|
||||||
<div className={'cover-container'}>
|
|
||||||
<CoverArt disc={disc} alt={`Cover del disco: ${disc.title}`}/>
|
|
||||||
</div>
|
|
||||||
<div className='description'>
|
|
||||||
<span>{disc.title}</span>
|
|
||||||
{/*<span className='small'>{disc.artist[0].name}</span>*/}
|
|
||||||
</div>
|
|
||||||
</Link>
|
|
||||||
</li>
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
const SearchDiscs = (props) => {
|
const SearchDiscs = (props) => {
|
||||||
const [discs, setDiscs] = useState(null);
|
const [discs, setDiscs] = useState(null);
|
||||||
const [paginate, setPaginate] = useState(null);
|
const [paginate, setPaginate] = useState(null);
|
||||||
@@ -129,9 +97,15 @@ const SearchDiscs = (props) => {
|
|||||||
})
|
})
|
||||||
};
|
};
|
||||||
|
|
||||||
let discsComponent = <SearchPlaceholder className='disc'/>;
|
let discsComponent = <Fragment/>;
|
||||||
if (discs) {
|
if (discs) {
|
||||||
discsComponent = discs.map((disc) => <SearchDisc key={disc.id} disc={disc}/>);
|
const items = discs.map((disc) => ({
|
||||||
|
'cover': <CoverArt disc={disc}/>,
|
||||||
|
'link': `/disc/${disc.id}`,
|
||||||
|
'title': disc.title,
|
||||||
|
'subtitle': disc.artist.name
|
||||||
|
}));
|
||||||
|
discsComponent = <EntityList items={items}/>
|
||||||
}
|
}
|
||||||
|
|
||||||
let paginateComponent;
|
let paginateComponent;
|
||||||
@@ -153,20 +127,6 @@ const SearchDiscs = (props) => {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
const SearchArtist = (props) => {
|
|
||||||
const artist = props.artist;
|
|
||||||
return (
|
|
||||||
<li className='artist'>
|
|
||||||
<Link to={`/artist/${artist.id}`}>
|
|
||||||
<span className='description'>
|
|
||||||
<span>{artist.name}</span>
|
|
||||||
<span className='small'>{[artist.type, artist.country].filter(Boolean).join(' - ')}</span>
|
|
||||||
</span>
|
|
||||||
</Link>
|
|
||||||
</li>
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
const SearchArtists = (props) => {
|
const SearchArtists = (props) => {
|
||||||
const [artists, setArtist] = useState(null);
|
const [artists, setArtist] = useState(null);
|
||||||
const [paginate, setPaginate] = useState(null);
|
const [paginate, setPaginate] = useState(null);
|
||||||
@@ -195,9 +155,15 @@ const SearchArtists = (props) => {
|
|||||||
})
|
})
|
||||||
};
|
};
|
||||||
|
|
||||||
let artistsContent = <SearchPlaceholder className='artist'/>;
|
let artistsContent = <Fragment/>;
|
||||||
if (artists) {
|
if (artists) {
|
||||||
artistsContent = artists.map((artist) => <SearchArtist key={artist.id} artist={artist}/>);
|
const items = artists.map((artist) => ({
|
||||||
|
'cover': null,
|
||||||
|
'link': `/artist/${artist.id}`,
|
||||||
|
'title': artist.name,
|
||||||
|
'subtitle': [artist.type, artist.country].filter(Boolean).join(' - ')
|
||||||
|
}));
|
||||||
|
artistsContent = <EntityList items={items}/>
|
||||||
}
|
}
|
||||||
|
|
||||||
let paginateContent;
|
let paginateContent;
|
||||||
|
|||||||
Reference in New Issue
Block a user