{"version":3,"sources":["jsdelivr-header.js","/npm/kimia-fdx-table@1.10.5/index.js"],"names":[],"mappings":"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","file":"/npm/kimia-fdx-table@1.10.5/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/kimia-fdx-table@1.10.5/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","'use strict'\n\nimport lib from './app/js/methods';\nimport lodash from 'lodash.clonedeep';\n\nclass FdxTable {\n    #config;\n    #events;\n    constructor(containerId, options) {\n        this.id = containerId;\n        this.#setConfig(options);\n        this.#save();\n    }\n    build() {\n        this.#buildStructure();\n        this.#setEvents();\n        this.#finish();\n    }\n\n    // Builders\n    #buildStructure() {\n        let generalContainer = document.querySelector(this.id);\n        generalContainer.innerText = '';\n        generalContainer.classList.add('fdx-table-container');\n        // Rows\n        let preloader = lib.createNode('div', null, { \"class\": \"preloader active\", \"data-use\": \"preloader\", \"data-table-id\": this.id });\n        let hiddenRow = lib.createNode('div', null, { \"class\": \"d-none\", \"data-use\": \"json-data\", \"data-table-id\": this.id });\n        let firstRow = lib.createNode('div', null, { \"class\": \"fdx-table-secondary-container\" });\n        let secondRow = lib.createNode('div', null, { \"class\": \"fdx-table-scroll\" });\n        let thirdRow = lib.createNode('div', null, { \"class\": \"fdx-table-scroll fdx-table-scroll-footer\" });\n\n        // Column selector container\n        if ( this.getConfig().enabledFeatures.columnSelector ) {\n            let containers = {\n                left: lib.createNode('div', null, { \"class\": \"cont-left\" }),\n                middle: lib.createNode('div', null, { \"class\": \"cont-middle\" }),\n                right: lib.createNode('div', null, { \"class\": \"cont-right\" }),\n            };\n            containers.right.appendChild( this.#buildColumSelector() );\n            firstRow.appendChild(containers.left);\n            firstRow.appendChild(containers.middle);\n            firstRow.appendChild(containers.right);\n        }\n\n        // Table nodes\n        let secondCol = lib.createNode('div', null, { \"class\": \"col-12\" });\n        let table = this.#getBuiltTable(this.getConfig().data);\n        secondCol.appendChild(table);\n        secondRow.appendChild(secondCol);\n        thirdRow.appendChild(this.#buildLastTableComponents());\n\n        // Menu's grand container\n        let menuContainer = lib.createNode('div', null, { \"class\": \"fdx-grand-menu-container\", \"id\": \"fdx-grand-menu-container\" });\n\n        preloader.appendChild( lib.createNode('i', null, { \"class\": \"icon animate-rotate fa fa-circle-notch\" }) );\n        hiddenRow.innerText = JSON.stringify(this.getConfig().data);\n        // Append Structure\n        generalContainer.appendChild(preloader);\n        generalContainer.appendChild(hiddenRow);\n        if (firstRow.innerHTML !== '') generalContainer.appendChild(firstRow);\n        generalContainer.appendChild(secondRow);\n        generalContainer.appendChild(thirdRow);\n        if (this.isParentTable()) generalContainer.appendChild(menuContainer);\n        this.container = generalContainer;\n\n        this.lastAdjustments();\n    }\n    #getBuiltTable(data) {\n        let minWidth = (this.#getColumns().length * 130) + 'px';\n        let width = this.id === this.getConfig().parentId ? minWidth : '100%';\n        let items = data.list;\n        let table = lib.createNode('div', null, {\n            \"data-table-level\": this.getConfig().tableLevel,\n            \"class\": \"fdx-table\",\n        });\n        this.#appendTooltip();\n        if (this.getConfig().columnDefs.enableHead) table.appendChild(this.#buildHead());\n        table.appendChild(this.#buildBody(items));\n        if ( !lib.empty(data.totals) ) table.appendChild(this.#buildFooter(data.totals));\n        this.table = table;\n        return table;\n    }\n    #appendTooltip() {\n        let tooltip = document.querySelector('#fdx-tooltip');\n        if (!tooltip) {\n            let tooltip = lib.createNode('div', null, { \"id\": \"fdx-tooltip\", \"class\": \"hidden\" });\n            document.body.appendChild(tooltip);\n        }\n        this.tooltip = document.querySelector('#fdx-tooltip');\n    }\n    #buildHead() {\n        let thead = lib.createNode('div', null, { \"class\": 't-parent thead' });\n        let tr = lib.createNode('div', null, { \"class\": 'tr' });\n        let n = 0;\n        for ( let item of this.#getColumns() ) {\n            let column = item.type;\n            let columnName = item.name;\n            let currentColumn = column === 'aggregations' ? this.getConfig().columnDefs.aggregation : item;\n            let className = 'td';\n            if ( this.#isBig(column) ) className = `${className} td-big`;\n            if ( this.#isSmall(currentColumn.type) ) className = `${className} td-small`;\n            let th = lib.createNode('span', null, {\n                \"class\": className,\n                \"data-rol\": \"head-cell\",\n                \"data-content-type\": item.contentType ?? lib.CELL_VALUE_TYPES.NUMBER,\n            });\n            if ( this.#isBig(column) ) {\n                let resizer = lib.createNode('i', null, {\n                    \"class\": \"td-resizer\",\n                    \"draggable\": \"true\",\n                    \"data-table-id\": this.id,\n                    \"data-parent-table\": this.getConfig().parentId,\n                });\n                th.appendChild(resizer);\n            }\n            // Sorting\n            let order = this.getConfig().data.info.sortBy === column ? this.getConfig().data.info.sortDirection : '';\n            let sortable = lib.createNode('i', null, {\n                \"class\": \"td-sort fa-duotone fa-sort\",\n                \"data-table-level\": this.getConfig().tableLevel,\n                \"data-table-id\": this.id,\n                \"data-event-type\": \"sort\",\n                \"data-column\": column,\n                \"data-order\": order,\n            }, { click: this.#onDraw });\n            th.appendChild(sortable);\n            // Sub-component\n            let subComponents = null;\n            let check = null;\n            if ( column === 'aggregations' ) {\n                let margin = lib.createNode('span', null, { \"class\": \"td-head-margin\", });\n                th.appendChild(margin);\n                if ( column === 'aggregations' ) {\n                    let columnsWithCheck = [\n                        \"SUPPLYSUBID\",\n                        \"SUPPLYBUNDLEID\",\n                        \"SUPPLYAPPNAME\",\n                        \"DEMANDSUBID\",\n                        \"DEMANDBUNDLEID\",\n                        \"DEMANDAPPNAME\",\n                        \"PLACEMENT\",\n                        \"ADVERTISERDOMAIN\",\n                        \"DEMANDDOMAIN\",\n                        \"SUPPLYDOMAIN\",\n                    ];\n\n\n                    if ( columnsWithCheck.indexOf(columnName.toUpperCase()) !== -1 ) {\n                        check = lib.createNode('input', null, {\n                            type: \"checkbox\",\n                            \"data-table-id\": this.id,\n                            style: \"margin-right: 1em\",\n                        }, {\n                            change: e => {\n                                let input = e.currentTarget;\n                                let tableId = input.dataset.tableId;\n                                let container = fdxTables[tableId].container;\n                                let checks = container.querySelectorAll(`input.checked_subid[type=\"checkbox\"][data-table-id=\"${tableId}\"]`);\n                                for ( let ch of checks ) ch.checked = input.checked;\n                            }\n                        });\n                        th.appendChild(check);\n                    }\n                }\n                subComponents = this.#buildAggregationSubComponents();\n                th.className = 'td td-big td-aggregation';\n                th.style.flex = this.#getColumnFlex(n);\n                th.dataset.contentType = (item.name.toUpperCase() === 'DAY' || item.name.toUpperCase() === 'HOUR') ?\n                    lib.CELL_VALUE_TYPES.DATE:\n                    lib.CELL_VALUE_TYPES.TEXT;\n            }\n            sortable.dataset.contentType = th.dataset.contentType;\n            let inner = lib.createNode('span', this.#generateColumnName(currentColumn), { \"data-use\": \"min-width-column\" });\n            let tooltip = this.getTooltipByCode(currentColumn.type);\n            if (tooltip) {\n                inner.appendChild( lib.createNode('i', null, { \"class\": \"fa fa-circle-info\", \"data-tooltip\": tooltip.text }) );\n            }\n            th.appendChild(inner);\n            if (subComponents) th.appendChild(subComponents);\n            th.dataset.column = currentColumn.type;\n            tr.appendChild(th);\n            n++;\n        }\n        thead.appendChild(tr);\n\n        return thead;\n    }\n    #buildBody(items) {\n        let tbody = lib.createNode('div', null, { \"class\": 't-parent tbody' });\n        if ( items.length === 0 ) {\n            let emptyTR = lib.createNode('div', null, { \"class\": 'tr tr-empty' });\n            let emptyContent = lib.createNode('span', 'No data available in table', { \"class\": \"txt-center\" });\n            emptyTR.appendChild(emptyContent);\n            tbody.appendChild(emptyTR);\n        } else {\n            for ( let item of items ) {\n                let idParts = [ 'table', this.id.substr(1), 'level', this.getConfig().tableLevel, 'tr', tbody.children.length ];\n                let id = idParts.join('-');\n                let tr = this.#buildRow(item, id);\n                tbody.appendChild(tr);\n            }\n\n        }\n        return tbody;\n    }\n    #buildRow(item, id) {\n        let tr = lib.createNode('div', null, {\n            \"class\": 'tr',\n            \"data-table-level\": this.getConfig().tableLevel,\n            \"data-table-id\": this.id,\n            \"data-id\": id,\n        });\n        let n = 0;\n        for ( let colItem of this.#getColumns() ) {\n            let column = colItem.type;\n            let columnName = colItem.name;\n            let currentColumn = column === 'aggregations' ? this.getConfig().columnDefs.aggregation : colItem;\n            let className = 'td';\n            if ( this.#isBig(column) ) className = `${className} td-big`;\n            if ( this.#isSmall(currentColumn.type) ) className = `${className} td-small`;\n            let td = null;\n            if ( column === 'aggregations' ) {\n                className = `td td-big td-aggregation`;\n                let agg = item[currentColumn.type] ?? item[currentColumn.type.toUpperCase()];\n                let networkAgg = item[\"NETWORK\"] ?? null;\n                td = this.#buildAggregationCell([agg, networkAgg], className, currentColumn, this.#getColumnFlex(n), n, tr.dataset.id);\n            } else {\n                let content = this.#generateColumnContent(currentColumn, item[currentColumn.type]);\n                let inner = lib.createNode('span', content);\n                td = lib.createNode('span', null, { \"class\": className, \"data-rol\": \"body-cell\", \"data-column-index\": n, \"data-column\": currentColumn.type });\n                td.appendChild(inner);\n            }\n            tr.appendChild(td);\n            n++;\n        }\n\n        return tr;\n    }\n    #buildAggregationCell(aggregationItems, className, column, flex, columnIndex, trId) {\n        let tableId = this.id;\n        let aggregationItem = aggregationItems[0];\n        let networkItem = aggregationItems[1];\n        let td = lib.createNode('span', null, { \"class\": className, \"data-rol\": \"body-cell\" });\n        // Aggregation icon\n        let aggregationButton = lib.createNode('i', null, {\n            \"class\": \"td-icon-aggregation fa fa-chevron-right context-menu-parent\",\n            \"data-parent-table\": this.getConfig().parentId,\n        }, { click: e => {\n            if ( undefined !== e.currentTarget && undefined !== e.target ) {\n                if ( e.currentTarget === e.target ) {\n                    let target = e.currentTarget;\n                    let menu = target.parentNode.querySelector(\".fdx-aggregation-context-menu\");\n                    let tr = target.parentNode.parentNode.parentNode;\n                    let clonedMenu = menu.cloneNode(true);\n                    let menuContainer = document.querySelector(\"#fdx-grand-menu-container\");\n                    let parentTableContainer = document.querySelector(target.dataset.parentTable);\n                    let icons = parentTableContainer.querySelectorAll('.td-icon-aggregation');\n                    menuContainer.innerHTML = '';\n                    for ( let icon of icons ) {\n                        if ( icon !== target ) {\n                            icon.classList.remove('hover');\n                        }\n                    }\n                    if ( target.classList.contains('aggregation-opened') ) {\n                        lib.closeAggregation(target);\n                        target.classList.remove('hover', 'aggregation-opened');\n                    } else {\n                        clonedMenu.addEventListener(\"click\", e => {\n                            let clonedMenu = e.currentTarget;\n                            let clonedLi = e.target;\n                            let menu = document.querySelector(`.fdx-aggregation-context-menu[data-menu-id=\"${clonedMenu.dataset.menuId}\"]`);\n                            for ( let [i, li] of Object.entries(menu.children) ) {\n                                if ( clonedLi.innerHTML === li.innerHTML ) {\n                                    li.click();\n                                }\n                            }\n                        });\n                        menuContainer.appendChild(clonedMenu);\n                        target.classList.toggle('hover');\n                        let data = menu.getBoundingClientRect();\n                        menuContainer.style.top = `${data.top}px`;\n                        menuContainer.style.left = `${data.left}px`;\n                    }\n                    let openedClass = 'opened-aggregations-menu';\n                    if ( target.classList.contains('hover') ) {\n                        parentTableContainer.classList.add(openedClass);\n                    } else {\n                        parentTableContainer.classList.remove(openedClass);\n                    }\n                }\n            }\n        }});\n        // Click node\n        let clickNode = lib.createNode('b', null, {\n            \"class\": \"d-none\",\n            \"data-table-level\": this.getConfig().tableLevel,\n            \"data-table-id\": this.id,\n            \"data-event-type\": \"aggregation\",\n            \"data-aggregation-value\": aggregationItem.id,\n            \"data-aggregation-column\": column.type,\n            \"data-aggregation-filter\": column.filter,\n        }, { click: this.#onDraw });\n        aggregationButton.appendChild(clickNode);\n        // Context menu\n        let feedConditions = this.#getAggregationConditions();\n        let aggregations = this.#getParentAggregations();\n        let contextMenuAggregation = lib.createNode('ul', null, { \"class\": \"fdx-aggregation-context-menu\", \"data-menu-id\": trId });\n        let availableOptions = false;\n        for ( let item of this.getConfig().columnDefs.availableAggregations ) {\n            let used = false;\n            for ( let aggregation of aggregations ) {\n                if ( aggregation.type === item.type ) {\n                    used = true;\n                }\n            }\n            if ( item.type !== column.type && !used ) {\n                let aggregationOption = lib.createNode('li', item.name, {\n                    \"data-next-aggregation\": item.type,\n                }, { click: lib.assignAggregationIcon });\n                let validation = this.getConfig().columnDefs.aggValidation(feedConditions, item);\n                if (validation) {\n                    contextMenuAggregation.appendChild(aggregationOption);\n                    availableOptions = true;\n                }\n            }\n        }\n        if (!availableOptions) {\n            aggregationButton.classList.add('hidden');\n        }\n        aggregationButton.appendChild(contextMenuAggregation);\n        td.appendChild(aggregationButton);\n        // Cell content\n        let paragraph = lib.createNode('span', aggregationItem.name);\n        // ca = condition arrays\n        let ca = {\n            links: [\"SUPPLYFEED\", \"DEMANDFEED\"],\n            ids: [\"SUPPLYNETWORK\", \"DEMANDNETWORK\", \"CREATIVE\", \"TRACKINGURL\"],\n            lists: [\"SUPPLYSUBID\", \"SUPPLYBUNDLEID\", \"SUPPLYAPPNAME\", \"DEMANDSUBID\", \"DEMANDBUNDLEID\", \"DEMANDAPPNAME\", \"PLACEMENT\", \"ADVERTISERDOMAIN\", 'DEMANDDOMAIN', 'SUPPLYDOMAIN'],\n            dates: [\"DAY\", \"HOUR\"],\n        };\n        if ( ca.links.indexOf(aggregationItem.type) !== -1 ) {\n            let consoleName = getConsoleShortName();\n            let consolePath = getConsolePath();\n            let attrs = {};\n            let tag = 'span';\n            switch (consoleName) {\n                case \"demand\":\n                case \"supply\":\n                    tag = \"span\";\n                    break;\n                case \"advertiser\":\n                    tag = \"a\";\n                    attrs.href = `${consolePath}campaigns/view/${aggregationItem.id}`;\n                    break;\n                case \"publisher\":\n                    tag = \"a\";\n                    attrs.href = `${consolePath}sites/feeds/edit/${aggregationItem.id}`;\n                    break;\n                case \"network\":\n                    tag = \"a\";\n                    switch (aggregationItem.type) {\n                        case \"SUPPLYFEED\":\n                            attrs.href = `${consolePath}feeds/supply/edit/${aggregationItem.id}`;\n                            break;\n                        case \"DEMANDFEED\":\n                            attrs.href = `${consolePath}feeds/demand/edit/${aggregationItem.id}`;\n                            break;\n                    }\n                    break;\n            }\n            if (attrs.href) attrs.target = '_blank';\n\n            let content = aggregationItem.name;\n            paragraph = lib.createNode(tag, content, attrs);\n        } else if ( ca.ids.indexOf(aggregationItem.type) !== -1 ) {\n            let content = aggregationItem.name;\n            paragraph = lib.createNode('span', content);\n        } else if ( ca.lists.indexOf(aggregationItem.type) !== -1 ) {\n            let check = lib.createNode('input', null, {\n                type: \"checkbox\",\n                \"class\": \"checked_subid\",\n                \"data-table-id\": tableId,\n                id: aggregationItem.id,\n                style: \"margin-right: 1em\",\n                \"data-type\": aggregationItem.type,\n            }, {\n                change: e => {\n                    let input = e.currentTarget;\n                    let tableId = input.dataset.tableId;\n                    let container = fdxTables[tableId].container;\n                    let checks = container.querySelectorAll('input.checked_subid:checked');\n                    let num = checks.length;\n                    let subIdButton = container.querySelector('[data-use=\"sub-id-button\"]');\n                    if (num === 0) subIdButton.setAttribute('disabled', '');\n                    else subIdButton.removeAttribute('disabled');\n                }\n            });\n            let content = aggregationItem.name;\n            paragraph = lib.createNode('span', null);\n            paragraph.appendChild(check);\n            paragraph.appendChild( lib.createNode('span', content) );\n        }\n        paragraph.classList.add(\"cell-content\");\n        td.appendChild(paragraph);\n        td.dataset.column = column.type;\n        td.dataset.columnIndex = columnIndex;\n        if ( undefined !== flex && null !== flex ) td.style.flex = flex;\n        return td;\n    }\n    #buildPaginationArrow(command, currentPage, pages, className) {\n        let disableClass = '';\n        switch (command) {\n            case \"-2\": if (parseInt(currentPage) <= 1) disableClass = 'disabled';\n                break;\n            case \"-1\": if (parseInt(currentPage) <= 1) disableClass = 'disabled';\n                break;\n            case \"+1\": if (parseInt(currentPage) >= parseInt(pages)) disableClass = 'disabled';\n                break;\n            case \"+2\": if (parseInt(currentPage) >= parseInt(pages)) disableClass = 'disabled';\n                break;\n        }\n        return lib.createNode('i', null, {\n            \"class\": `${className} ${disableClass}`,\n            \"data-table-id\": this.id,\n            \"data-table-level\": this.getConfig().tableLevel,\n            \"data-event-type\": \"pagination\",\n            \"data-command\": command,\n        }, { click: this.#onDraw });\n    }\n    #buildLastTableComponents() {\n        let table = lib.createNode('div', null, {\n            \"data-table-level\": this.getConfig().tableLevel,\n            \"class\": \"fdx-table\",\n        });\n        let tParent = lib.createNode('div', null, { \"class\": \"t-parent t-parent-extremes\" });\n        let fTR = lib.createNode('div', null, { \"class\": \"tr\" });\n\n        // Entry nodes\n        if ( this.getConfig().enabledFeatures.entries ) {\n            let firstCell = lib.createNode('div', null, { \"class\": \"td\" });\n            let entriesNodes = {\n                container: lib.createNode('label', null, { \"class\": \"d-flex label-first\" }),\n                selector: lib.createNode('select', null, {\n                    \"class\": \"custom-select custom-select-sm w-auto d-block\",\n                    \"data-table-level\": this.getConfig().tableLevel,\n                    \"data-table-id\": this.id,\n                    \"data-event-type\": \"entries\",\n                    \"data-use\": \"entries\",\n                }, { change: this.#onDraw }),\n                secondText: lib.createNode('span', \"Items\", { \"class\": \"ml-2\" }),\n                options: [ \"10\", \"25\", \"50\", \"100\" ],\n            };\n            for ( let str of entriesNodes.options ) {\n                let opt = lib.createNode('option', str, { value: str });\n                entriesNodes.selector.appendChild(opt);\n            }\n            entriesNodes.selector.value = this.getConfig().data.info.pageSize;\n            entriesNodes.container.appendChild(entriesNodes.selector);\n            entriesNodes.container.appendChild(entriesNodes.secondText);\n            firstCell.appendChild(entriesNodes.container);\n            fTR.appendChild(firstCell);\n        }\n\n        // Mid cell\n        let midCell = lib.createNode('div', null, { \"class\": \"td\" });\n        fTR.appendChild(midCell);\n\n        // Pagination nodes\n        if ( this.getConfig().enabledFeatures.pagination ) {\n            let info = this.getConfig().data.info;\n            let infoString = \"No items\";\n            if ( null !== info.totalElements && null !== info.totalElementsAfterSearch ) {\n                let ini = info.totalElementsAfterSearch == 0 ? 0 : info.currentStartElement;\n                let fin = info.currentEndElement;\n                let tAfter = info.totalElementsAfterSearch;\n                let total = info.totalElements;\n                infoString = `<b>${ini}</b> to <b>${fin}</b> of <b>${tAfter}</b>`;\n                if ( total !== tAfter ) {\n                    infoString = `${infoString} (from <b>${total}</b>)`;\n                }\n            }\n            let secondCell = lib.createNode('div', null, { \"class\": \"td d-flex justify-content-end\" });\n            let labelPageNumber = parseInt(info.pageNumber)+1;\n            let paginationNodes = {\n                container: lib.createNode('div', null, { \"class\": \"fdx-pagination\" }),\n                info: lib.createNode('span', infoString, { \"class\": \"pagination-label\" }),\n                arrow1: this.#buildPaginationArrow(\"-2\", labelPageNumber, info.totalPages,\"icon pagination-item fa fa-chevrons-left\"),\n                arrow2: this.#buildPaginationArrow(\"-1\", labelPageNumber, info.totalPages,\"icon pagination-item fa fa-chevron-left\"),\n                number: lib.createNode('i', `Page ${labelPageNumber}`, { \"class\": \"pagination-item pagination-item-no-icon\" }),\n                arrow3: this.#buildPaginationArrow(\"+1\", labelPageNumber, info.totalPages,\"icon pagination-item fa fa-chevron-right\"),\n                arrow4: this.#buildPaginationArrow(\"+2\", labelPageNumber, info.totalPages,\"icon pagination-item fa fa-chevrons-right\"),\n            };\n            paginationNodes.container.appendChild(paginationNodes.arrow1);\n            paginationNodes.container.appendChild(paginationNodes.arrow2);\n            paginationNodes.container.appendChild(paginationNodes.number);\n            paginationNodes.container.appendChild(paginationNodes.arrow3);\n            paginationNodes.container.appendChild(paginationNodes.arrow4);\n            secondCell.appendChild(paginationNodes.info);\n            secondCell.appendChild(paginationNodes.container);\n            fTR.appendChild(secondCell);\n        }\n\n        tParent.appendChild(fTR);\n        table.appendChild(tParent)\n        return table;\n    }\n    #buildFooter(item) {\n        let tbody = lib.createNode('div', null, { \"class\": 't-parent tfooter' });\n        let tr = lib.createNode('div', null, {\n            \"class\": 'tr',\n            \"data-table-level\": this.getConfig().tableLevel,\n            \"data-table-id\": this.id,\n        });\n        let n = 0;\n        for ( let colItem of this.#getColumns() ) {\n            let column = colItem.type;\n            let columnName = colItem.name;\n            let currentColumn = column === 'aggregations' ? this.getConfig().columnDefs.aggregation : colItem;\n            let className = 'td';\n            if ( this.#isBig(column) ) className = `${className} td-big`;\n            if ( this.#isSmall(currentColumn.type) ) className = `${className} td-small`;\n            let td = lib.createNode('span', null, { \"class\": className, \"data-rol\": \"footer-cell\", \"data-column\": currentColumn.type });\n            let inner = lib.createNode('span', this.#generateColumnContent(currentColumn, item[currentColumn.type]));\n            if ( column === 'aggregations' ) {\n                inner.innerText = 'Totals';\n                let margin = lib.createNode('span', null, { \"class\": \"td-head-margin\", });\n                td.appendChild(margin);\n                td.className = 'td td-big td-aggregation';\n                td.style.flex = this.#getColumnFlex(n);\n            }\n            td.appendChild(inner);\n            tr.appendChild(td);\n            n++;\n        }\n        tbody.appendChild(tr);\n\n        return tbody;\n    }\n    #buildAggregationSubComponents() {\n        let span = lib.createNode('span', null, { \"class\": \"td-sub-component\", \"data-use\": \"min-width-column\" });\n        // Search nodes\n        if ( this.getConfig().enabledFeatures.search ) {\n            let methodDraw = this.#onDraw;\n            let searchNodes = {\n                container: lib.createNode('label', null, { \"class\": \"label-first\" }),\n                inputGroup: lib.createNode('span', null, { \"class\": \"input-group input-group-sm\" }),\n                input: lib.createNode('input', null, {\n                    \"class\": \"form-control form-control-sm\",\n                    type: \"text\",\n                    \"data-use\": \"search-input\",\n                    \"placeholder\": \"Search...\",\n                }, {\n                    keyup: e => {\n                        let input = e.currentTarget;\n                        let button = input.parentNode.querySelector(\"button\");\n                        if ( e.keyCode === 13 ) {\n                            methodDraw({ currentTarget: button });\n                        }\n                    }\n                }),\n                buttonContainer: lib.createNode('span', null, { \"class\": \"input-group-append\" }),\n                button: lib.createNode('button', null, {\n                    \"class\": \"btn btn-outline-secondary\",\n                    type: \"button\",\n                    \"data-table-id\": this.id,\n                    \"data-table-level\": this.getConfig().tableLevel,\n                    \"data-event-type\": \"search\",\n                    \"data-use\": \"search-button\",\n                }, {\n                    click: e => {\n                        let searchContainer = lib.getParentByClass(e.currentTarget, \"input-group\");\n                        searchContainer.classList.toggle(\"hidden-search\");\n                    }\n                }),\n                buttonIcon: lib.createNode('i', null, { \"class\": \"fa fa-search\" }),\n            };\n            searchNodes.input.value = this.getConfig().data.params.containsAggrValue;\n            if ( lib.empty(searchNodes.input.value) ) {\n                searchNodes.inputGroup.classList.add('hidden-search');\n            }\n            searchNodes.button.appendChild(searchNodes.buttonIcon);\n            searchNodes.buttonContainer.appendChild(searchNodes.button);\n            searchNodes.inputGroup.appendChild(searchNodes.input);\n            searchNodes.inputGroup.appendChild(searchNodes.buttonContainer);\n            searchNodes.container.appendChild(searchNodes.inputGroup);\n            span.appendChild(searchNodes.container);\n        }\n\n        // Button nodes\n        if ( this.getConfig().enabledFeatures.buttons ) {\n            let flexBox = lib.createNode('div', null, { \"class\": \"td-button-list context-menu-parent\" });\n            let configButtons = this.getConfig().buttons;\n            let buttons = [];\n            let subIdOption = \"subId\";\n            let aggregationType = this.getConfig().columnDefs.aggregation.type;\n            switch (aggregationType) {\n                case \"supplySubId\":\n                case \"supplyBundleId\":\n                case \"supplyAppName\":\n                case \"demandSubId\":\n                case \"demandBundleId\":\n                case \"demandAppName\":\n                case \"placement\":\n                case \"advertiserDomain\":\n                case \"demandDomain\":\n                case \"supplyDomain\":\n                    if ( configButtons.indexOf(subIdOption) === -1 ) configButtons.push(subIdOption);\n                    buttons = configButtons;\n                    break;\n                default:\n                    for ( let btnString of configButtons ) {\n                        if ( btnString !== subIdOption ) {\n                            buttons.push(btnString);\n                        }\n                    }\n                    break;\n            }\n            let buttonNodes = {\n                listNode: lib.createNode('ul', null, { \"class\": \"fdx-aggregation-context-menu\" }),\n                list: {},\n                optionButton: lib.createNode('span', null, { \"class\": \"fdx-btn\" }, {\n                    click: e => {\n                        e.currentTarget.parentNode.classList.toggle('hover');\n                    }\n                }),\n                optionButtonIcon: lib.createNode('i', null, { \"class\": \"fa fa-ellipsis-vertical\" }),\n            };\n            buttonNodes.optionButton.appendChild(buttonNodes.optionButtonIcon);\n            flexBox.appendChild(buttonNodes.optionButton);\n            for ( let type of buttons ) {\n                switch (type) {\n                    case 'csv':\n                        let csvButton = lib.getCSVButton(this.id);\n                        buttonNodes.listNode.appendChild(csvButton);\n                        break;\n                    case 'share':\n                        let shareButton = lib.getShareButton(this.id);\n                        buttonNodes.listNode.appendChild(shareButton);\n                        break;\n                    case 'subId':\n                        let subIdButton = lib.getSubIdButton(this.id, aggregationType);\n                        buttonNodes.listNode.appendChild(subIdButton);\n                        break;\n                }\n            }\n            flexBox.appendChild(buttonNodes.listNode);\n            span.appendChild(flexBox);\n        }\n\n        return span;\n    }\n    #buildColumSelector() {\n        let columSelectorNode = lib.createNode('div', null, { \"class\": \"fdx-column-selector\" });\n\n        // Button\n        let button = lib.createNode('span', null, { \"class\": \"fdx-btn\" }, {\n            click: e => {\n                const checksContainer = document.querySelector('.fdx-column-selector-check-box');\n\n                if (checksContainer && checksContainer.clientWidth <= 30) {\n                    checksContainer.style.width = `${checksContainer.scrollWidth + 15}px`;\n                }\n\n                e.currentTarget.classList.toggle('show');\n            }\n        });\n        button.appendChild( lib.createNode('i', null, { \"class\": \"fa fa-table-columns\" }) );\n        button.appendChild( lib.createNode('i', null, { \"class\": \"fa fa-chevron-down\" }) );\n        columSelectorNode.appendChild(button);\n        // Box\n        let box = lib.createNode('div', null, { \"class\": \"fdx-column-selector-box\" });\n        // Titles\n        let titleContainer = lib.createNode('div', null, { \"class\": \"fdx-column-selector-title-box\" });\n        // Texts\n        let title = lib.createNode('p', 'Column selector', { \"class\": \"fdx-column-title\" });\n        // Actions\n        let actions = lib.createNode('div', null, { \"class\": \"fdx-column-actions\" });\n        actions.appendChild( lib.createNode('span', 'Select all', {\n            \"class\": \"fdx-column-action\",\n            \"data-parent-id\": this.getConfig().parentId,\n            \"data-checked\": \"true\",\n        }, { click: this.#toggleAllColumnsEvent }) );\n        actions.appendChild( lib.createNode('span', 'Clear', {\n            \"class\": \"fdx-column-action\",\n            \"data-parent-id\": this.getConfig().parentId,\n            \"data-checked\": \"false\",\n        }, { click: this.#toggleAllColumnsEvent }) );\n        titleContainer.appendChild(title);\n        titleContainer.appendChild(actions);\n        box.appendChild(titleContainer);\n        // Checks\n        let checkContainer = lib.createNode('div', null, { \"class\": \"fdx-column-selector-check-box\", \"data-use\": \"adjust-width-as-scroll\" });\n        for ( let column of this.#getColumns() ) {\n            if ( column.type !== 'aggregations' ) {\n                checkContainer.appendChild(this.#buildCheck(column));\n            }\n        }\n        box.appendChild(checkContainer);\n        columSelectorNode.appendChild(box);\n\n        return columSelectorNode;\n    }\n    #buildCheck(column) {\n        let checkContainer = lib.createNode('span', null, { \"class\": \"fdx-descriptive-check-container\" });\n        let id = `fdx-checkbox-${column.type}`;\n        // container\n        let nodeCheck = lib.createNode('label', null, { \"class\": \"fdx-check\", for: id, title: column.name });\n        // check\n        let input = lib.createNode('input', null, {\n            type: \"checkbox\",\n            id: id,\n            value: column.type,\n            \"data-parent-id\": this.getConfig().parentId\n        }, { change: this.#toggleColumn });\n        input.checked = true;\n        nodeCheck.appendChild(input);\n        // circle\n        let circle = lib.createNode('span', null, { \"class\": \"fdx-check-circle\" });\n        nodeCheck.appendChild(circle);\n        // circle\n        let background = lib.createNode('span', null, { \"class\": \"fdx-check-background\" });\n        nodeCheck.appendChild(background);\n        checkContainer.appendChild(nodeCheck);\n        // description\n        let description = lib.createNode('span', column.name, { \"class\": \"fdx-check-description\" });\n        checkContainer.appendChild(description);\n\n        return checkContainer;\n    }\n\n    // Set config\n    #setConfig(options) {\n        this.#config = lib.mergeObjects( {...lib.getDefaultConfig()}, {...options} );\n        if (!this.getConfig().parentId) {\n            this.#config.parentId = this.id;\n        }\n        let agg = this.getConfig().data.params.aggregation;\n        this.#config.columnDefs.aggregation = this.getAggregationByCode(agg);\n        this.#saveAggregation(this.getConfig().columnDefs.aggregation);\n    }\n    getConfig() {\n        return lodash(this.#config);\n    }\n    #save() {\n        if ( !window.fdxTables ) window.fdxTables = {};\n        window.fdxTables[this.id] = this;\n        global.fdxTables = window.fdxTables;\n    }\n\n    // Events\n    #setEvents() {\n        // Resizer\n        this.#setResizeColumnEvent();\n        this.container.removeEventListener('mouseover', this.#onHoverTable);\n        this.container.addEventListener('mouseover', this.#onHoverTable);\n        let parentTable = this.getParentTable();\n        document.addEventListener('click', e => {\n            let target = e.target;\n            let parent = e.target.parentNode;\n            let menuContainer = document.querySelector(\"#fdx-grand-menu-container\");\n            let ancestors = [ target ];\n            while ( parent !== null && parent.localName !== 'body' ) {\n                ancestors.push(parent);\n                parent = parent.parentNode;\n            }\n\n            // Hide column selector\n            if ( !lib.nodeListMatches(ancestors, '.fdx-column-selector') ) {\n                let nodes = document.querySelectorAll('.fdx-column-selector > .fdx-btn');\n                nodes.map(node => node.classList.remove('show'));\n            }\n            // Hide context menu\n            let openedClass = 'opened-aggregations-menu';\n            if ( !lib.nodeListMatches(ancestors, '.context-menu-parent') ) {\n                let nodes = document.querySelectorAll('.context-menu-parent');\n                nodes.map(node => node.classList.remove('hover'));\n                menuContainer.innerHTML = \"\";\n                let containers = document.querySelectorAll('.fdx-table-container');\n                containers.map(node => node.classList.remove(openedClass));\n            } else {\n                let nodes = document.querySelectorAll('.context-menu-parent');\n                for ( let node of nodes ) {\n                    if ( node !== target.parentNode && node !== target ) {\n                        node.classList.remove('hover');\n                    }\n                }\n            }\n        });\n        for ( let eventType in this.#events ) {\n            this.container.addEventListener(eventType, this.#events[eventType]);\n        }\n\n        // Scroll\n        let scrollContainer = parentTable.container.querySelector(\".fdx-table-scroll\");\n        scrollContainer.addEventListener('scroll', scrollTableEvent);\n        document.addEventListener('scroll', scrollDocumentEvent);\n        function scrollTableEvent(e) {\n            try {\n                let menuContainer = document.querySelector(\"#fdx-grand-menu-container\");\n                let clonedMenu = menuContainer.querySelector(\".fdx-aggregation-context-menu\");\n                let menu = document.querySelector(`.fdx-aggregation-context-menu[data-menu-id=\"${clonedMenu.dataset.menuId}\"]`);\n                let data = menu.getBoundingClientRect();\n                menuContainer.style.top = `${data.top}px`;\n                menuContainer.style.left = `${data.left}px`;\n            } catch (e) {}\n        }\n        function scrollDocumentEvent(e) {\n            scrollTableEvent(e);\n        }\n    }\n    #setResizeColumnEvent() {\n        let columnResizeItems = this.table.querySelectorAll('.td .td-resizer');\n        for ( let node of columnResizeItems ) {\n            node.addEventListener('dragstart', e => {\n                e.currentTarget.classList.add('hide');\n            });\n            node.addEventListener('dragend', e => {\n                e.currentTarget.classList.remove('hide');\n            });\n            node.addEventListener('drag', e => {\n                let node = e.currentTarget;\n                let td = node.parentNode;\n                lib.setColumnMinWidth(td, { key: \"data-use\", value: \"min-width-column\" });\n                let minWidth = parseInt(td.dataset.minWidth);\n                let tr = td.parentNode;\n                let table = fdxTables[node.dataset.parentTable];\n                let i = 0;\n                let n = 0;\n                for ( let cell of tr.children ) {\n                    if (cell === td) {\n                        n = i;\n                        break;\n                    }\n                    i++;\n                }\n                let rows = table.container.querySelectorAll(`.fdx-table > .t-parent:not(.t-parent-extremes) > .tr`);\n                if ( tr ) {\n                    let row = tr;\n                    let cell = row.children[n];\n                    // rest of columns\n                    let flexes = getColumnFlexes(row, n);\n                    // main column width\n                    let w = e.x - cell.getBoundingClientRect().x;\n                    if (w > 0 && w < minWidth) {\n                        w = minWidth;\n                    }\n                    // % main column percent\n                    let max = 0.4;\n                    let min = 0.1;\n                    let mainPercent = w / row.clientWidth;\n                    if (mainPercent > 0) {\n                        if (mainPercent > max) mainPercent = max;\n                        if (mainPercent < min) mainPercent = min;\n                        // % rest\n                        let restPercent = 1 - mainPercent;\n                        // flex\n                        let flex = mainPercent * flexes / restPercent;\n                        for ( let row of rows ) {\n                            let cell = row.children[n];\n                            cell.style.minWidth = `${minWidth}px`;\n                            cell.style.flex = cell.dataset.flex = `${flex}`;\n                        }\n                    }\n                }\n\n                // Anonymous method\n                function getColumnFlexes(row, n) {\n                    let flexes = 0;\n                    for ( let i=0; i<row.children.length; i++ ) {\n                        if (i !== n) {\n                            let flex = null;\n                            if ( row.children[i].style.flex !== '' ) flex = parseInt(row.children[i].style.flex);\n                            else if ( row.children[i].classList.contains('td-big') ) flex = 3;\n                            else if ( row.children[i].classList.contains('td-small') ) flex = 1;\n                            else flex = 2;\n                            flexes += flex;\n                        }\n                    }\n\n                    return flexes;\n                }\n            });\n        }\n    }\n    #onDraw(e) {\n        let icon = e.currentTarget;\n        let thisTable = window.fdxTables[icon.dataset.tableId];\n        thisTable.getDataByClick(icon);\n    }\n    getDataByClick(icon) {\n        let tableId = icon.dataset.tableId;\n        let tableLevel = parseInt(icon.dataset.tableLevel);\n        let eventType = icon.dataset.eventType;\n        if (eventType === \"search\") {\n            let hiddenSearch = lib.getParentByClass(icon, 'hidden-search');\n            if (hiddenSearch) {\n                hiddenSearch.classList.remove('hidden-search');\n                icon.classList.remove('disabled');\n                return;\n            }\n        }\n        if (icon.classList.contains('disabled')) return;\n        let thisTable = window.fdxTables[tableId];\n        let jsonNode = document.querySelector(`${tableId} [data-use=\"json-data\"][data-table-id=\"${tableId}\"]`);\n        let json = JSON.parse(jsonNode.innerText);\n        let params = json.params;\n        let info = json.info;\n        params.filters = lib.arrayToObject(params.filters ?? {});\n        params.pageSize = parseInt(thisTable.getEntryValue());\n        params.sortBy = info.sortBy ?? \"aggregations\";\n        params.sortDirection = info.sortDirection ?? \"ASC\";\n        params.containsAggrKey = thisTable.getAggregation().type;\n        params.containsAggrValue = thisTable.getSearchValue();\n        params.showTotals = tableLevel === 1 ? 1 : 0;\n        switch (eventType) {\n            case \"search\":\n                params.pageNumber = 0;\n                break;\n            case \"entries\":\n                params.pageNumber = 0;\n                break;\n            case \"sort\":\n                params.pageNumber = 0;\n                params.sortBy = icon.dataset.column;\n                let order = this.#getDefaultOrderByCellType(icon.dataset.contentType);\n                switch (icon.dataset.order) {\n                    case 'ASC': order = 'DESC'; break;\n                    case 'DESC': order = 'ASC'; break;\n                }\n                params.sortDirection = order;\n                break;\n            case \"aggregation\":\n                params.showTotals = 0;\n                params.pageNumber = 0;\n                params.containsAggrKey = '';\n                params.containsAggrValue = '';\n                params.aggregation = icon.dataset.nextAggregation;\n                params.sortBy = \"aggregations\";\n                if ( icon.dataset.aggregationColumn === 'day' ) {\n                    let dayIni = icon.dataset.aggregationValue.substring(0, 10)+\" 00:00:00\";\n                    let date = new Date(dayIni);\n                    let iniStr = lib.formatDate(date, 'Y-m-d_H');\n                    date.setDate( date.getDate() + 1 );\n                    let finStr = lib.formatDate(date, 'Y-m-d_H');\n                    params.filters[ 'from' ] = iniStr;\n                    params.filters[ 'to' ] = finStr;\n                } else if ( icon.dataset.aggregationColumn === 'hour' ) {\n                    let dayIni = icon.dataset.aggregationValue.substring(0, 10)+\" 00:00:00\";\n                    let hour = parseInt(icon.dataset.aggregationValue.substring(11));\n                    let date = new Date(dayIni);\n                    date.setHours(hour);\n                    let iniStr = lib.formatDate(date, 'Y-m-d_H');\n                    date.setHours( date.getHours() + 1 );\n                    let finStr = lib.formatDate(date, 'Y-m-d_H');\n                    params.filters[ 'from' ] = iniStr;\n                    params.filters[ 'to' ] = finStr;\n                } else {\n                    params.filters[ icon.dataset.aggregationFilter ] = [icon.dataset.aggregationValue];\n                }\n                switch ( icon.dataset.nextAggregation ) {\n                    case 'day':\n                    case 'hour':\n                        params.sortDirection = this.#getDefaultOrderByCellType(lib.CELL_VALUE_TYPES.DATE);\n                        break;\n                    default:\n                        params.sortDirection = this.#getDefaultOrderByCellType(lib.CELL_VALUE_TYPES.TEXT);\n                        break;\n                }\n                break;\n            case \"pagination\":\n                let command = icon.dataset.command;\n                switch (command) {\n                    case \"-2\": params.pageNumber = 0;\n                        break;\n                    case \"-1\":\n                        params.pageNumber = parseInt(info.pageNumber) <= 0 ? 0 : parseInt(info.pageNumber) - 1;\n                        break;\n                    case \"+1\":\n                        params.pageNumber = parseInt(info.pageNumber) >= parseInt(info.totalPages) ? parseInt(info.totalPages) - 1 : parseInt(info.pageNumber) + 1;\n                        break;\n                    case \"+2\": params.pageNumber = parseInt(info.totalPages) - 1;\n                        break;\n                }\n                break;\n        }\n        thisTable.showPreloader(eventType, icon);\n\n        thisTable.getDataByParams(\n            params,\n            thisTable.getAjaxURL(),\n            { table: thisTable, icon: icon, eventType: eventType },\n            thisTable.callbackGetDataByEvent\n        );\n    }\n    getDataByParams(params, url, eventData, callback) {\n        let form = lib.createFormData(params);\n        let xhr = new XMLHttpRequest();\n        xhr.addEventListener('load', function() {\n            callback(this, eventData);\n        });\n        xhr.open('POST', url);\n        xhr.send(form);\n    }\n    callbackGetDataByEvent(thiss, eventData) {\n        let thisTable = undefined !== eventData ? (eventData.table ?? null) : null;\n        let icon = undefined !== eventData ? (eventData.icon ?? null) : null;\n        let eventType = undefined !== eventData ? (eventData.eventType ?? null) : null;\n        if (thiss.status === 200) {\n            let response = JSON.parse(thiss.responseText);\n            let options = thisTable.getConfig();\n            options.data = response;\n            if ( eventType === 'aggregation' ) {\n                let tr = icon.getParentByClass('tr');\n                options.tableLevel = parseInt(icon.dataset.tableLevel) + 1;\n                options.columnDefs.aggregation = thisTable.getAggregationByCode(icon.dataset.nextAggregation);\n                for ( let i in options.columnDefs.columns ) {\n                    if ( options.columnDefs.columns[i].type === \"aggregations\" ) {\n                        options.columnDefs.columns[i].name = options.columnDefs.aggregation.type\n                    }\n                }\n                options.enabledFeatures.columnSelector = false;\n                let childId = `#${tr.dataset.id}`;\n                thisTable.append(childId, options);\n                icon.dataset.containerId = childId.substring(1);\n                let arrow = icon.parentNode;\n                arrow.classList.remove('fa-chevron-right');\n                arrow.classList.add('fa-chevron-down', 'aggregation-opened');\n                thisTable.hidePreloader(eventType, icon);\n                thisTable.lastAdjustments();\n            } else {\n                let table = new FdxTable(thisTable.id, options);\n                table.build();\n                window.statsData = response;\n                thisTable.hidePreloader(eventType, icon, true);\n                thisTable.lastAdjustments();\n            }\n        } else if (thiss.status === 500) {\n            console.error(thiss.status, thiss.statusText);\n        }\n    }\n    #onHoverTable(e) {\n        let node = e.target;\n        let tooltip = document.querySelector('#fdx-tooltip');\n        if ( node.dataset.tooltip ) {\n            tooltip.innerHTML = node.dataset.tooltip;\n            tooltip.classList.remove('hidden');\n            let rect = node.getBoundingClientRect();\n            let left = rect.x;\n            let top = rect.y;\n            let bottom = top + node.clientHeight;\n            let right = left + node.clientWidth;\n            let x = right;\n            let y = bottom;\n            let screenW = window.innerWidth;\n            let screenH = window.innerHeight;\n            let tooltipW = tooltip.clientWidth;\n            let tooltipH = tooltip.clientHeight;\n            if ( x+tooltipW > screenW ) x = screenW - tooltipW - 10;\n            if ( y+tooltipH > screenH ) y = screenH - tooltipH - 10;\n            tooltip.style.top = `${y}px`;\n            tooltip.style.left = `${x}px`;\n        } else {\n            tooltip.classList.add('hidden');\n        }\n    }\n    #aggregationAdjustment() {\n        let resizers = this.getParentTable().table.querySelectorAll('.td .td-resizer');\n        let rows = this.getParentTable().table.querySelectorAll('.tr');\n        let child = null;\n        loop1:\n            for ( let resizer of resizers ) {\n                let td = resizer.parentNode;\n                let tr = td.parentNode;\n                for ( let i in tr.children ) {\n                    if (tr.children[i] === td) {\n                        child = i;\n                        break loop1;\n                    }\n                }\n            }\n        let max = 0;\n        let tds = [];\n        for ( let tr of rows ) {\n            let td = tr.children[child];\n            let hs = td.querySelector('.hidden-search');\n            lib.setColumnMinWidth(td, { key: \"data-use\", value: \"min-width-column\" }, hs ? 150 : 0);\n            let mw = parseInt(td.dataset.minWidth);\n            if ( max < mw ) max = mw;\n            tds.push(td);\n        }\n        lib.equalizeColumnMinWidth(tds, max);\n    }\n    showPreloader(eventType, icon) {\n        if ( eventType === 'aggregation' ) {\n            let arrow = icon.parentNode;\n            arrow.classList.remove('fa-chevron-right', 'fa-chevron-down');\n            arrow.classList.add('fa-circle-notch', 'animate-rotate');\n        } else {\n            this.#getPreloader().classList.add('active');\n        }\n    }\n    hidePreloader(eventType, icon, delay=false) {\n        if ( eventType === 'aggregation' ) {\n            let arrow = icon.parentNode;\n            arrow.classList.remove('fa-circle-notch', 'animate-rotate');\n            arrow.classList.add('fa-chevron-right');\n        } else {\n            if (delay) {\n                setTimeout(() => {\n                    this.#getPreloader().classList.remove('active');\n                }, 500);\n            } else {\n                this.#getPreloader().classList.remove('active');\n            }\n        }\n    }\n    addEventListener(eventType, callable) {\n        if ( typeof(eventType) !== 'string' ) {\n            throw new Error('Argument#1 must be a string');\n        }\n        if ( typeof(callable) !== 'function' ) {\n            throw new Error('Argument#2 must be a function');\n        }\n\n        if (!this.#events) this.#events = {};\n        switch (eventType) {\n            case 'load':\n                this.#events[eventType] = callable;\n                break;\n        }\n    }\n    #toggleAllColumnsEvent(e) {\n        let node = e.currentTarget;\n        let checked = node.dataset.checked === 'true';\n        let func = checked ? 'remove' : 'add';\n        let parentTable = fdxTables[node.dataset.parentId];\n        // Show all cells\n        let cells = parentTable.container.querySelectorAll(`.td[data-column]:not(.td-aggregation)`);\n        for ( let cell of cells ) cell.classList[func]('td-hidden');\n        // Active checks\n        let checks = parentTable.container.querySelectorAll('.fdx-column-selector .fdx-column-selector-check-box .fdx-check input[type=\"checkbox\"]');\n        for ( let check of checks ) check.checked = checked;\n        // Adjust saved columns\n        parentTable.saveColumns();\n    }\n    #toggleColumn(e) {\n        let input = e.currentTarget;\n        let columnType = input.value;\n        let parentTable = fdxTables[input.dataset.parentId];\n        let cells = parentTable.container.querySelectorAll(`.td[data-column=\"${columnType}\"]`);\n        for ( let cell of cells ) {\n            if ( input.checked ) cell.classList.remove('td-hidden');\n            else cell.classList.add('td-hidden');\n        }\n        // Adjust saved columns\n        parentTable.saveColumns();\n    }\n\n    // Utils\n    #isBig(column) {\n        return lib.inArray(this.getConfig().columnDefs.bigColumns ?? [], column) || column === 'aggregations';\n    }\n    #isSmall(column) {\n        return lib.inArray(this.getConfig().columnDefs.smallColumns ?? [], column);\n    }\n    #getParents() {\n        let tables = {};\n        let parent = this.container;\n        while ( parent !== null && parent !== undefined ) {\n            tables[parent.id] = fdxTables[`#${parent.id}`];\n            parent = lib.getParentByClass(parent.parentNode, 'fdx-table-container');\n        }\n        return tables;\n    }\n    #getParentAggregations() {\n        return this.getConfig().columnDefs.usedAggregations;\n    }\n    lastAdjustments() {\n        let table = this;\n        let container = this.container;\n        setTimeout(() => {\n            // Nodes that needs to adjust the width property. It needs to be equals to the scrollWidth\n            let scrollNodes = container.querySelectorAll('[data-use=\"adjust-width-as-scroll\"]');\n            for ( let node of scrollNodes ) node.style.width = `${node.scrollWidth + 15}px`;\n\n            // Adjust columns by localStorage\n            this.adjustColumnByLocalStorage();\n\n            // Adjust columns minWidth\n            this.adjustAggregationColumnsMinWidth(table);\n            this.adjustNoAggregationColumnsMinWidth(table);\n        }, 200);\n    }\n    saveColumns() {\n        let checks = this.container.querySelectorAll('.fdx-column-selector .fdx-column-selector-check-box .fdx-check input[type=\"checkbox\"]');\n        let hiddenColumns = [];\n        for ( let check of checks ) {\n            if ( !check.checked ) {\n                hiddenColumns.push(check.value);\n            }\n        }\n        let key = btoa(location.pathname)+`-hiddenColumns`;\n        localStorage.setItem(key, hiddenColumns.join(','));\n    }\n    adjustColumnByLocalStorage() {\n        let key = btoa(location.pathname)+`-hiddenColumns`;\n        let storage = localStorage.getItem(key);\n        if ( null !== storage && \"\" !== storage ) {\n            let columnTypes = storage.split(',');\n            for ( let columnType of columnTypes ) {\n                // Hide cells\n                let cells = this.container.querySelectorAll(`.td[data-column=\"${columnType}\"]:not(.td-aggregation)`);\n                for ( let cell of cells ) cell.classList.add('td-hidden');\n                // Disable check\n                let check = this.container.querySelector(`.fdx-column-selector .fdx-column-selector-check-box .fdx-check input[type=\"checkbox\"][value=\"${columnType}\"]`);\n                if (check) check.checked = false;\n            }\n        }\n    }\n    adjustAggregationColumnsMinWidth(table) {\n        let size = 0;\n        let parentId = table.getConfig().parentId;\n        let parentTable = fdxTables[parentId];\n        let rows = parentTable.container.querySelectorAll('.thead:not(.t-parent-extremes) > .tr');\n        for ( let row of rows ) {\n            let fdxNode = lib.getParentByClass(row, \"fdx-table\");\n            let tableLevel = parseInt(fdxNode.dataset.tableLevel);\n            let cells = row.querySelectorAll('.td.td-aggregation');\n            for ( let [i, cell] of Object.entries(cells) ) {\n                let columnType = cell.dataset.column;\n                let contentNode = cell.querySelector('span[data-use=\"min-width-column\"],.cell-content');\n                let contentMargin = (cell.dataset.rol === \"head-cell\") ? 272 : 42;\n                contentMargin = contentMargin + ( (tableLevel-1) * 12.5 );\n                let width = contentNode.clientWidth + contentMargin;\n                size = Math.max(size??0, width);\n            }\n        }\n        let columnCells = parentTable.container.querySelectorAll(`.td.td-aggregation`);\n        for ( let cell of columnCells ) {\n            cell.style.minWidth = `${size}px`;\n        }\n    }\n    adjustNoAggregationColumnsMinWidth(table) {\n        let sizes = [];\n        let parentId = table.getConfig().parentId;\n        let parentTable = fdxTables[parentId];\n        let rows = parentTable.container.querySelectorAll('.t-parent:not(.t-parent-extremes) > .tr');\n        for ( let row of rows ) {\n            let cells = row.querySelectorAll('.td:not(.td-aggregation)');\n            for ( let [i, cell] of Object.entries(cells) ) {\n                let columnType = cell.dataset.column;\n                let contentNode = cell.querySelector('span');\n                let contentMargin = (cell.dataset.rol === \"head-cell\") ? 50 : 0;\n                let width = contentNode.clientWidth + contentMargin;\n                sizes[columnType] = Math.max(sizes[columnType]??0, width);\n            }\n        }\n        let total = 0;\n        for ( let columnType in sizes ) {\n            total += sizes[columnType];\n            let columnCells = parentTable.container.querySelectorAll(`.td[data-column=\"${columnType}\"]`);\n            for ( let cell of columnCells ) {\n                cell.style.minWidth = `${sizes[columnType]}px`;\n            }\n        }\n    }\n\n    // Utils\n    append(childId, options) {\n        let container = document.querySelector(childId);\n        if (!container) {\n            let tr = document.querySelector(`[data-id=\"${childId.substr(1)}\"]`);\n            container = lib.createNode('div', null, { id: childId.substr(1) });\n            container.classList.add('fdx-table-container');\n            tr.after(container);\n        }\n        let tableChild = new FdxTable(childId, options);\n        tableChild.build();\n    }\n    #getColumnFlex(columnIndex) {\n        try {\n            let td = document.querySelector(`${this.getConfig().parentId} .fdx-table .tr .td[data-column-index=\"${columnIndex}\"]`);\n            return td.dataset.flex ?? null;\n        } catch (e) {\n            return null;\n        }\n    }\n\n    #getColumns() {\n        return this.getConfig().columnDefs.columns;\n    }\n    getAjaxURL() {\n        return this.getParentTable().getConfig().ajaxURL;\n    }\n    getAjaxExportURL() {\n        return this.getParentTable().getConfig().ajaxExportURL;\n    }\n\n    getSearchValue() {\n        let input = document.querySelector(`${this.id} [data-use=\"search-input\"]`);\n        if ( !input ) input = document.querySelector(`${this.getConfig().parentId} [data-use=\"search-input\"]`);\n        return input ? input.value : '';\n    }\n    getSearchButton() {\n        return document.querySelector(`${this.id} [data-use=\"search-button\"]`);\n    }\n    getEntryValue() {\n        let input = document.querySelector(`${this.id} [data-use=\"entries\"]`);\n        if ( !input ) input = document.querySelector(`${this.getConfig().parentId} [data-use=\"entries\"]`);\n        return input ? parseInt(input.value) : null;\n    }\n    getAggregation() {\n        return this.getConfig().columnDefs.aggregation;\n    }\n    #saveAggregation() {\n        this.#config.columnDefs.usedAggregations.push(\n            this.getConfig().columnDefs.aggregation\n        );\n    }\n    #getAggregationConditions() {\n        let conditions = {\n            demandFeed: false,\n            supplyFeed: false,\n            supplySubId: false,\n            demandSubId: false,\n        };\n        // Conditions by aggregations\n        let aggregations = this.#getParentAggregations();\n        for ( let aggregation of aggregations ) {\n            if ( aggregation.type === 'demandFeed' ) conditions.demandFeed = true;\n            if ( aggregation.type === 'supplyFeed' ) conditions.supplyFeed = true;\n        }\n        // Conditions by filters\n        let filters = this.getConfig().data.params.filters;\n        if ( filters.supplyFeeds !== null && Array.isArray(filters.supplyFeeds) && filters.supplyFeeds.length > 0 ) conditions.supplyFeed = true;\n        if ( filters.demandFeeds !== null && Array.isArray(filters.demandFeeds) && filters.demandFeeds.length > 0 ) conditions.demandFeed = true;\n        if ( filters.supplySubIds !== null && typeof(filters.supplySubIds) !== 'undefined' && filters.supplySubIds !== '' ) conditions.supplySubId = true;\n        if ( filters.demandSubIds !== null && typeof(filters.demandSubIds) !== 'undefined' && filters.demandSubIds !== '' ) conditions.demandSubId = true;\n\n        return conditions;\n    }\n    getAggregationByCode(type) {\n        type = type.toUpperCase();\n        let columns = this.getAvailableAggregations();\n        for ( let col of columns ) {\n            if ( col.type.toUpperCase() === type ) return col;\n        }\n    }\n    getTooltipByCode(type) {\n        let tooltips = this.getTooltips();\n        for ( let tool of tooltips ) {\n            if ( tool.type === type ) return tool;\n        }\n\n        return undefined;\n    }\n    getColumnByCode(type) {\n        let columns = this.#getColumns();\n        for ( let col of columns ) {\n            if ( col.type === type ) return col;\n        }\n    }\n    #generateColumnName(column) {\n        let name = column.name;\n        if ( column.prefix ) name = `${name}`;\n        return name;\n    }\n    #generateColumnContent(column, content) {\n        content = lib.formatNumber(content, column.type);\n        if ( column.prefix ) {\n            if ( column.prefix === '$' || column.prefix === '€' ) {\n                content = `${column.prefix}${content}`;\n            } else {\n                content = `${content}${column.prefix}`;\n            }\n        }\n        return content;\n    }\n    getAvailableAggregations() {\n        let t;\n        try {\n            t = this.getParentTable();\n        } catch (e) {\n            t = this;\n        }\n        return t.getConfig().columnDefs.availableAggregations;\n    }\n    getTooltips() {\n        let t;\n        try {\n            t = this.getParentTable();\n        } catch (e) {\n            t = this;\n        }\n        return t.getConfig().columnDefs.tooltips;\n    }\n    #getPreloader() {\n        return this.container.querySelector('.preloader[data-use=\"preloader\"]')\n    }\n    isParentTable() {\n        return this.id === this.getConfig().parentId;\n    }\n    getParentTable() {\n        return fdxTables[this.getConfig().parentId];\n    }\n    #getDefaultOrderByCellType(type) {\n        switch (type) {\n            case lib.CELL_VALUE_TYPES.DATE:\n                return 'DESC';\n            case lib.CELL_VALUE_TYPES.NUMBER:\n                return 'DESC';\n            case lib.CELL_VALUE_TYPES.TEXT:\n                return 'ASC';\n        }\n\n        return 'ASC';\n    }\n\n    // Finish\n    #finish() {\n        this.#aggregationAdjustment();\n        let onFinish = new Event('load');\n        this.container.dispatchEvent(onFinish);\n        manageStatsErrors(this.getConfig().data.errors);\n        this.hidePreloader(null, null, true);\n    }\n}\n\nexport default FdxTable;"]}