Source: package/navigation_settings.js

import { Reporter } from '../reporter/reporter.js';
import { Component } from '../component/component.js';

/**
 * Package navigation settings 
 */

class NavigationSettings extends Component {

    /**
     * @param {Reporter} reporter
     * @param {Object} settings
     */

    constructor( reporter, settings ) {

        super(reporter,settings);

        /**
         * @private
         * @type {Array<LibraryNavigationItem>}
         */
        
        this._library = settings?.library || [];
    }


    
    /** @private */

    _dispatchChangeEvent() {
        this.emit( 'change', this );
    }

    
    /** @type {Array<LibraryNavigationItem>} */

    get library() {
        return this._library;
    }

    
    /**
     * @param {('library')} menu
     * @param {(LibraryNavigationItem)} item
     */

    addItem( menu, item ) {
        this.report({ msg: `add ${menu} item ${item.label}` });
        this[ '_' + menu ].push( item );
        this._dispatchChangeEvent();
    }

    
    /**
     * @param {('library')} menu
     * @param {string} label
     */

    removeItem( menu, label ) {
        this.report({ msg: `remove ${menu} item ${label}` });
        this[ '_' + menu ] = this[ '_' + menu ].filter( item => item.label !== label );
        this._dispatchChangeEvent();
    }

    
    /** @returns {NavigationOptions} */

    // toJSON() {
    //     return {
    //         library: this._library,
    //     }
    // }
    
}

export { NavigationSettings };