open-orchestra/open-orchestra-cms-bundle

View on GitHub
BackofficeBundle/Resources/public/ecmascript/OpenOrchestra/Service/Form/Behavior/TreeChoice.js

Summary

Maintainability
A
0 mins
Test Coverage
import AbstractBehavior from 'OpenOrchestra/Service/Form/Behavior/AbstractBehavior'

/**
 * @class TreeChoice
 */
class TreeChoice extends AbstractBehavior
{
    /**
     * activate behavior
     *
     * @param {Object} $element - jQuery object
     */
    activate($element) {
        let regExp = new RegExp('((\u2502|\u251C|\u2514)+)', 'g');
        $('option', $element).each((index, element) => {
            let html = $(element).html();
            let depth = parseInt($(element).attr('data-depth'));
            if (depth > 0) {
                html = Array(depth).join('\u2502') + ($(element).attr('data-last') ? '\u2514' : '\u251C') + html;
            }
            $(element).html(html);
            $(element).addClass('orchestra-tree-option-choice');
        });

        $element.select2({
            allowClear: true,
            formatResult: (term) => {
                return term.text.replace(regExp, '<span class="hierarchical">$1</span>');
            },
            formatSelection: (term) => {
                return term.text.replace(regExp, '');
            }
        })
    }

    /**
     * deactivate behavior
     *
     * @param {Object} $element - jQuery object
     */
    deactivate($element) {
        $element.select2("destroy");
    }

    /**
     * return selector
     *
     * @return {String}
     */
    getSelector() {
        return '.orchestra-tree-choice';
    }
}

export default (new TreeChoice);