koel/resources/assets/js/stores/artist.js
2015-12-13 12:42:28 +08:00

81 lines
1.9 KiB
JavaScript

import _ from 'lodash';
import config from '../config';
import albumStore from './album';
import sharedStore from './shared';
export default {
state: {
artists: [],
},
/**
* Init the store.
*
* @param array artists The array of artists we got from the server.
*/
init(artists = null) {
if (artists) {
this.state.artists = artists;
} else {
this.state.artists = sharedStore.state.artists;
}
// Init the album store. This must be called prior to the next logic,
// because we're using some data from the album store later.
albumStore.init(this.state.artists);
// Traverse through artists array to get the cover and number of songs for each.
_.each(this.state.artists, artist => {
this.getCover(artist);
artist.songCount = _.reduce(artist.albums, (count, album) => {
return count + album.songs.length;
}, 0);
});
},
all() {
return this.state.artists;
},
/**
* Get all songs performed by an artist.
*
* @param object artist
*
* @return array
*/
getSongsByArtist(artist) {
if (!artist.songs) {
artist.songs = _.reduce(artist.albums, (songs, album) => {
return songs.concat(album.songs);
}, []);
}
return artist.songs;
},
/**
* Get the artist's cover
*
* @param object artist
*
* @return string
*/
getCover(artist) {
artist.cover = config.unknownCover;
artist.albums.every(album => {
// If there's a "real" cover, use it.
if (album.cover != config.unknownCover) {
artist.cover = album.cover;
// I want to break free.
return false;
}
});
return artist.cover;
},
};