'use strict';

Object.defineProperty(exports, '__esModule', { value: true });

const core = require('./core-0f211bec.js');
const block = require('./block-eafe6439.js');
const inputLinker = require('./input-linker-dc14a9fc.js');
const elementQuestionBase = require('./element-question-base-45352939.js');

const BceElementSortTemplate = class {
    constructor(hostRef) {
        core.registerInstance(this, hostRef);
        this.optionIcon = block.Block.ICON_MAP[block.Block.Type.Sort];
        this.question = '';
        this.required = false;
        this.dual = false;
        this.options = [];
        this.feedbackCorrect = '';
        this.feedbackIncorrect = '';
        this.labelQuestion = 'Formulate your question';
        this.labelRequired = 'Required';
        this.labelOCAddButton = 'Add';
        this.labelOCRemoveButton = 'Delete';
        this.labelOCOther = 'Other';
        this.labelOCImage = 'Image';
        this.labelDual = 'Dual';
        this.labelFeedbackCorrect = 'Feedback correct';
        this.labelFeedbackIncorrect = 'Feedback incorrect';
        this.placeholderOptions = 'Option';
        this.placeholderFeedbackCorrect = 'Feedback on correct answer';
        this.placeholderFeedbackIncorrect = 'Feedback on incorrect answer';
        this._link = inputLinker.linker(this, this.handleInput);
        this._question = this._link('question');
        this._required = this._link('required');
        this._dual = this._link('dual');
        this._options = this._link('options');
        this._feedbackCorrect = this._link('feedbackCorrect');
        this._feedbackIncorrect = this._link('feedbackIncorrect');
    }
    handleInput(name, event) {
        const input = event.target;
        if (!input)
            return;
        event.cancelBubble = true;
        this[name] = input.value;
        this.value = this.updateValue({ [name]: input.value });
        this.el.dispatchEvent(new Event('input', { bubbles: true }));
    }
    updateValue(part = {}) {
        const current = {
            question: this.question,
            required: this.required,
            dual: this.dual,
            options: this.options,
            feedbackCorrect: this.feedbackCorrect,
            feedbackIncorrect: this.feedbackIncorrect
        };
        return Object.assign({}, current, part);
    }
    componentDidLoad() {
        this.value = this.updateValue();
        this.el.dispatchEvent(new Event('input', { bubbles: true }));
    }
    render() {
        const options = Object.assign({ icon: this.optionIcon, labelOCAddButton: this.labelOCAddButton, labelOCRemoveButton: this.labelOCRemoveButton, labelOCOther: this.labelOCOther, labelOCImage: this.labelOCImage }, this._options);
        return (core.h(elementQuestionBase.ElementQuestionBase, { question: this._question, required: this._required }, core.h("bce-option-creator", Object.assign({}, options)), core.h("bce-input", Object.assign({ type: "switch" }, this._dual)), core.h("bce-input", Object.assign({ type: "textarea" }, this._feedbackCorrect)), core.h("bce-input", Object.assign({ type: "textarea" }, this._feedbackIncorrect))));
    }
    get el() { return core.getElement(this); }
};

exports.bce_element_sort_template = BceElementSortTemplate;
