APIs

Show:
/**
 * @namespace flexygo.ui.wc
 */
var flexygo;
(function (flexygo) {
    var ui;
    (function (ui_1) {
        var wc;
        (function (wc) {
            /**
          * Library for the flx-sortManagerElement web component.
          *
          * @class FlxSortManagerElement
          * @constructor
          * @return {FlxSortManagerElement} .
          */
            class FlxSortManagerElement extends HTMLElement {
                constructor() {
                    super();
                    this.sorting = false;
                    this.sortingFrom = null;
                }
                /**
                * Fires when element is attached to DOM
                * @method connectedCallback
                */
                connectedCallback() {
                }
                /**
                * Init the webcomponent.
                * @method init
                */
                init(module) {
                    this.module = module;
                    this.list = module.find('flx-list, flx-search')[0];
                    //if (this.list.data.length > 0) {
                    //    this.fields = Object.keys(this.list.data[0]).sort();
                    //}
                    this.render();
                }
                /**
                * Refresh de webcomponent.
                * @method refresh
                */
                refresh() {
                    this.render();
                }
                clean() {
                    let me = $(this);
                    let orderInfo = new Array();
                    this.list.sortByObj(orderInfo, new flexygo.api.TemplateGroupCollection());
                    me.closest('.ui-dialog').find('.ui-dialog-titlebar-close').click();
                }
                apply() {
                    let me = $(this);
                    let orderInfo = new Array();
                    me.find('.fields.used li').each((i, el) => {
                        let itm = $(el);
                        let ord = new flexygo.api.list.PropertyOrder;
                        ord.Asc = itm.is('.asc');
                        ord.ObjectName = this.list.objectname;
                        ord.PropertyName = itm.attr('property');
                        orderInfo.push(ord);
                    });
                    let groupsInfo = new flexygo.api.TemplateGroupCollection();
                    me.find('.groups.used li').each((i, el) => {
                        let itm = $(el);
                        let ord = new flexygo.api.TemplateGroup;
                        ord.OrderMode = (itm.is('.asc') ? 'Asc' : 'Desc');
                        ord.GroupField = itm.attr('property');
                        ord.Order = i;
                        groupsInfo[ord.GroupField] = ord;
                    });
                    this.list.sortByObj(orderInfo, groupsInfo);
                    me.closest('.ui-dialog').find('.ui-dialog-titlebar-close').click();
                }
                render() {
                    let me = $(this);
                    me.html(`
                <div class="flex-container">
                  <div class="tabPanel">
                    <ul class="nav nav-tabs">
                      <li class="nav-item active sort">
                        <a class="nav-link" href="#">${flexygo.localization.translate('sortmanager.sort')}</a>
                      </li>
                      <li class="nav-item group">
                        <a class="nav-link" href="#">${flexygo.localization.translate('sortmanager.groups')}</a>
                      </li>
                    </ul>
                  </div>
                  <div class="fieldPanel">
                    <div class="sortData">
                        <div class="fieldspanel col-6 padding-l" style="padding-bottom:0px">
                            <div class="box">
                                <span class="textLabel">${flexygo.localization.translate('sortmanager.fields')}</span>
                                <div class="sortContainer">
                                    <ul class="fields unused"></ul>
                                </div>
                            </div>
                        </div>
                        <div class="fieldspanel col-6 padding-l" style="padding-bottom:0px">
                            <div class="box">
                                <span class="textLabel">${flexygo.localization.translate('sortmanager.sort')}</span>
                                <div class="sortContainer">
                                    <ul class="fields used"></ul>
                                </div>
                            </div>
                        </div>
                    </div>
                    <div class="groupData" style="display:none">
                        <div class="fieldspanel col-6 padding-l" style="padding-bottom:0px">
                            <div class="box">
                                <span class="textLabel">${flexygo.localization.translate('sortmanager.groups')}</span>
                                <div class="sortContainer">
                                    <ul class="groups unused"></ul>
                                </div>
                            </div>
                        </div>
                        <div class="fieldspanel col-6 padding-l" style="padding-bottom:0px">
                            <div class="box">
                                <span class="textLabel">${flexygo.localization.translate('sortmanager.applied')}</span>
                                <div class="sortContainer">
                                    <ul class="groups used"></ul>
                                </div>
                            </div>
                        </div>
                    </div>
                  </div>
                </div>
            `);
                    me.find('.nav-item').on('click', (e) => {
                        e.stopPropagation();
                        e.preventDefault();
                        let btn = $(e.currentTarget);
                        btn.closest('.nav-tabs').find('.active').removeClass('active');
                        btn.addClass('active');
                        if (btn.is('.sort')) {
                            btn.closest('flx-sortmanager').find('.groupData').hide();
                            btn.closest('flx-sortmanager').find('.sortData').show();
                        }
                        else {
                            btn.closest('flx-sortmanager').find('.sortData').hide();
                            btn.closest('flx-sortmanager').find('.groupData').show();
                        }
                    });
                    let ul = me.find('.fields.unused');
                    for (let key in this.list.fields) {
                        if (key.toLowerCase() != '_objectname' && key.toLowerCase() != '_objectwhere' && key.toLowerCase() != '_ot' && key.toLowerCase() != '_guid') {
                            ul.append('<li class="fieldSortItem asc" property="' + key + '"><i style="border-radius:50%" class="sortIcon fa fa-arrows" /> ' + this.list.fields[key] + '<i class="delbutton fa fa-close pull-right" style="display:none"/> </li>');
                        }
                    }
                    if (!this.list.userDefinedGroups || !this.list.groupList || Object.keys(this.list.groupList).length == 0) {
                        me.find('.tabPanel').hide();
                    }
                    else {
                        let ulOrder = me.find('.groups.unused');
                        for (let key in this.list.groupList) {
                            ulOrder.append('<li class="fieldSortItem asc" property="' + key + '"><i style="border-radius:50%" class="sortIcon fa fa-arrows" /> ' + (this.list.groupList[key].Label ? this.list.groupList[key].Label : key) + '<i class="delbutton fa fa-close pull-right" style="display:none"/> </li>');
                        }
                    }
                    me.find('.fieldSortItem').on('click', (ev) => {
                        let itm = $(ev.currentTarget);
                        if (itm.closest('ul').is('.unused')) {
                            itm.find('i.sortIcon').removeClass('fa fa-arrows');
                            itm.find('i.fa-close').show();
                            me.find('.used').append(itm);
                        }
                        else {
                            itm.toggleClass('asc dsc');
                        }
                    });
                    me.find('.delbutton').on('click', (ev) => {
                        let itm = $(ev.currentTarget).closest('li[property]');
                        itm.find('i.fa-close').hide();
                        itm.find('i.sortIcon').addClass('fa fa-arrows');
                        itm.detach();
                        me.find('.unused').append(itm);
                        ev.stopPropagation();
                        ev.preventDefault();
                    });
                    me.find('.fields').sortable({
                        zIndex: 999999,
                        connectWith: ".fields",
                        appendTo: document.body,
                        helper: "clone",
                        start: (event, ui) => { this.sortStart(ui.item); },
                        stop: (event, ui) => { this.sortStop(ui.item); },
                    }).disableSelection();
                    me.find('.groups').sortable({
                        zIndex: 999999,
                        connectWith: ".groups",
                        appendTo: document.body,
                        helper: "clone",
                        start: (event, ui) => { this.sortStart(ui.item); },
                        stop: (event, ui) => { this.sortStop(ui.item); },
                    }).disableSelection();
                    if (this.list.orderObj && this.list.orderObj.length > 0) {
                        for (let i = 0; i < this.list.orderObj.length; i++) {
                            let col = this.list.orderObj[i];
                            let field = me.find('.fields.unused [property]').filter(function () { return $(this).attr('property').toLowerCase() == col.PropertyName.toLowerCase(); });
                            if (field.length > 0) {
                                if (!col.Asc) {
                                    field.toggleClass('asc dsc');
                                }
                                me.find('.fields.used').append(field);
                            }
                        }
                    }
                    if (this.list.userDefinedGroups && this.list.groups && Object.keys(this.list.groups).length > 0) {
                        for (let key in this.list.groups) {
                            let col = this.list.groups[key];
                            let field = me.find('.groups.unused [property]').filter(function () { return $(this).attr('property').toLowerCase() == col.GroupField.toLowerCase(); });
                            if (field.length > 0) {
                                if (col.OrderMode.toString().toLocaleLowerCase() == 'desc') {
                                    field.toggleClass('asc dsc');
                                }
                                me.find('.groups.used').append(field);
                            }
                        }
                    }
                }
                sortStart(item) {
                    this.sortingFrom = item.closest('ul');
                    this.sorting = true;
                }
                sortStop(item) {
                    let col = item.closest('ul');
                    if (!col.is(this.sortingFrom)) {
                        if (col.is('.used')) {
                            item.find('i.sortIcon').removeClass('fa fa-arrows');
                            item.find('i.fa-close').show();
                        }
                        else {
                            item.find('i.sortIcon').addClass('fa fa-arrows');
                            item.find('i.fa-close').hide();
                        }
                    }
                    this.sortingFrom = null;
                    this.sorting = false;
                }
            }
            wc.FlxSortManagerElement = FlxSortManagerElement;
        })(wc = ui_1.wc || (ui_1.wc = {}));
    })(ui = flexygo.ui || (flexygo.ui = {}));
})(flexygo || (flexygo = {}));
window.customElements.define('flx-sortmanager', flexygo.ui.wc.FlxSortManagerElement);
//# sourceMappingURL=flx-sortmanager.js.map