Home Reference Source Repository

src/helpers/Playlist.js

'use strict';

import PlaylistEntity from '../entities/PlaylistEntity';
import PlaylistHandler from '../handlers/PlaylistHandler';
import Factory from '../Factory';

/**
 * Add helpers methods to PlaylistEntity
 */
class Playlist extends PlaylistEntity {

    /**
     * @param {Object} data Playlist object
     */
    constructor(data) {
        super(data);
    }

    /**
     * Get a list of Tracks of a Playlist.
     * 
     * @public 
     * @override
     * @return {Promise}
     */
    get tracks() {
        return Factory(this._tracks);
    }

    /**
     * Add one or more Tracks to a Playlist.
     * 
     * @public 
     * @param {Array} tracks Tracks list
     * @param {Object} [query] Query parameters.
     * @return {Promise}
     */
    addTrack(tracks, query) {
        let trackList = tracks.map(track => {
            return track.uri;
        });
        return new PlaylistHandler().addTracks(trackList, this.owner.id, this.id, query);
    }

    /**
     * Remove one or more Tracks to a Playlist.
     * 
     * @public 
     * @param {Array} tracks Tracks list
     * @param {Object} [query] Query parameters.
     * @return {Promise}
     */
    removeTrack(tracks, query) {
        let trackList = tracks.map(track => {
            return track.uri;
        });
        return new PlaylistHandler().removeTracks(trackList, this.owner.id, this.id, query);
    }

    /**
     * Follow a Playlist
     * 
     * @public 
     * @param {Object} [query] query parameters.
     * @return {Promise}
     */
    follow(query) {
        return new PlaylistHandler().follow(this.owner.id, this.id, query);
    }

    /**
     * Unfollow a Playlist
     * 
     * @public 
     * @param {Object} [query] Query parameters.
     * @return {Promise}
     */
    unfollow(query) {
        return new PlaylistHandler().unfollow(this.owner.id, this.id, query);
    }

    /**
     * Edit a Playlist
     * 
     * @public 
     * @return {Promise}
     */
    edit() {
        return new PlaylistHandler().edit(this.owner.id, this.id, this.name, this.public);
    }
}

/**
 * Exports the Playlist class.
 */
export default Playlist;