group/amd/src/grouppicker.js

// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
/**
 * @module     core_group/groupPicker
 * @copyright  2022 Matthew Hilton <matthewhilton@catalyst-au.net>
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */

/**
 * Class used for interfacing with the group select picker.
 *
 * @class core_group/GroupPicker
 */
export default class GroupPicker {
    /**
     * Creates the group picker class and finds the corresponding DOM element.
     *
     * @param {String} elementId The DOM element id of the <select> input
     * @throws Error if the element was not found.
     */
    constructor(elementId = "groups") {
        const pickerDomElement = document.getElementById(elementId);

        if (!pickerDomElement) {
            throw new Error("Groups picker was not found.");
        }

        this.element = pickerDomElement;
    }

    /**
     * Returns the DOM element this class is linked to.
     *
     * @returns {HTMLElement} The DOM element
     */
    getDomElement() {
        return this.element;
    }

    /**
     * Returns the selected group values.
     *
     * @returns {Number[]} The group IDs that are currently selected.
     */
    getSelectedValues() {
        const selectedOptionElements = Array.from(this.element.querySelectorAll("option:checked"));
        const selectedGroups = selectedOptionElements.map(el => parseInt(el.value));

        return selectedGroups;
    }
}