"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.OjComboboxMany = void 0;
const OjComboboxManyBase_1 = require("./OjComboboxManyBase");
const oj_module_proxy_1 = require("../../lib/oj-module-proxy");
/**
 * The component WebElement for [oj-combobox-many](../../jsdocs/oj.ojComboboxMany.html).
 * Do not instantiate this class directly, instead, use
 * [ojComboboxMany](../functions/elements.ojComboboxMany-1.html).
 */
class OjComboboxMany extends OjComboboxManyBase_1.OjComboboxManyBase {
    /**
     * Sets the value of "value" property.
     * An array that represents the value of the component. See the Help documentation for more information.
     * @param value The value to set for "value"
     * @override
     */
    async changeValue(value) {
        // Call focus() on the root element
        await this.getDriver().executeScript('arguments[0].focus()', this);
        // Only mutate if not readonly/disabled
        const readonly = await this.getReadonly();
        const disabled = await this.getDisabled();
        if (!(readonly || disabled)) {
            await this.whenBusyContextReady();
            if (value == null) {
                // it is not possible to set the value to null through user interaction
                await this._changeValueFallback(null);
                await this.whenBusyContextReady();
                return;
            }
            const isValueSet = await (0, oj_module_proxy_1.executeWithModules)(this.getDriver(), ['CustomElementUtils'], [this, value], `
        (({ getElementBridge }, element, value) => {
          // Retrieve the widget instance from the element
          var bridge = getElementBridge(element);
          var widget = bridge._WIDGET_INSTANCE.combobox;
          return widget._selectItemByValue(value)
            .then(() => true)
            .catch(() => false);
        })
        `);
            // If failed to set value, fallback to setProperty
            if (isValueSet === false) {
                console.warn('Failed to update value by interaction. Falling back to setProperty.');
                await this._changeValueFallback(value);
            }
        }
    }
    /**
     * Clears the value
     * @override
     */
    clear() {
        return this.changeValue([]);
    }
    /**
     * This is a fallback mechanism for setting a value which
     * uses the setProperty method to update the value.
     *
     * @param value The value to be set
     */
    _changeValueFallback(value) {
        return this.setProperty('value', value);
    }
}
exports.OjComboboxMany = OjComboboxMany;
//# sourceMappingURL=OjComboboxMany.js.map