Source: muze-utils/src/DataSystem/enter-selection.js

import Selection from './selection';
/**
 * Represents a selecton in enter phase.
 *
 * @class EnterSelection
 */
class EnterSelection {

    /**
     * Creates an instance of EnterSelection.
     * @param {Array} enterData The input data.
     * @memberof EnterSelection
     */
    constructor (enterData, idMap, idGetter) {
        this._enterData = enterData;
        this._idMap = idMap;
        this._idGetter = idGetter;
    }

    /**
     * Applies the supplied callback to each data element
     * and returns a new selection.
     *
     * @param {Function} callback Callback to execute on each item.
     * @return {Selection} New selection with data created using callback.
     * @memberof EnterSelection
     */
    append (callback) {
        const objects = this._enterData.forEach((...params) => {
            const data = params[0];
            const id = this._idGetter ? this.idGetter(data) : (data.id || params[1]);
            this._idMap[id] = callback(...params);
        });

        return new Selection().appendObjects(objects).data(this._enterData);
    }
}

export default EnterSelection;