/* * Admin - System Database page scripts. */ (function (win, doc, undef) { "use strict"; let sd = sax.sysDb = { env: {} }; //-------------------------------------------------------------- sd.refreshResults = function (env, delay) { sax.debug('refreshResults', env); if (!env.data.awaitingRefreshResponse) { env.$pnl.bgr.invisible(); env.$pnl.table.find('tbody tr').remove(); env.$pnl.msgs.hide().empty().append($('
')).fadeIn(200); } env.ajax.refreshResults = env.ajax.refreshResults || { url: sax.url.base + 'System/Ajax/GetDatabaseTables', formSel: env.$frm.filter, callbackFn: function (response) { sd.doRefreshResults(env, response); } }; sax.doAjaxRequest(env.ajax.refreshResults, delay || 50); env.data.awaitingRefreshResponse = true; } sd.doRefreshResults = function (env, response) { //sax.debug('doRefreshResults', env, response); delete env.data.awaitingRefreshResponse; env.$pnl.msgs.hide().empty(); let $table = $('table', env.$pnl.table).find('tbody tr').remove().end(); sax.refreshPaging(response, env.$frm.filter, function () { sd.refreshResults(env); }); if (!response.success) return; // Menu. if (env.$pnl.bgr.length) { env.$pnl.bgr.invisible(); env.$pnl.mnu.empty(); env.$pnl.mnu.append(sd.getFilterMenuOption(env, sax.lbl.refresh, function () { sd.refreshResults(env); }, 'sax-refresh')); env.$pnl.bgr.toggleVisibility(!!$('.sax-dropdown-item', env.$pnl.mnu).length); } // Items. var items = response.tables; if (!items.length) return env.$pnl.msgs.append($('')).fadeIn(500); for (const item of items) $table.append(sd.populateItem(env, sd.getItemTemplate(env), item)); } sd.populateItem = function (env, $item, item) { if (!item) return $item; $item.prop('id', sd.getItemId(item)); $('.TableName', $item).text(item.qualifiedName); $('.RowCount', $item).text(item.rowCount); $('.ColumnCount', $item).text(item.columnCount); $('.IndexCount', $item).text(item.indexCount); // Actions. var $bgr = $('.sax-burger', $item).hide(); let $mnu = $('ul.sax-dropdown-menu', $bgr).empty(); if (!item.deleted) { let fnUpd = function () { sd.viewItem(env, item) }; $mnu.append(sd.getItemMenuOption(env, sax.lbl.edit, fnUpd, 'sax-edit')); $('.TableName', $item).off('click').on('click', fnUpd).addClass('sax-action-text'); $item.off('dblclick').on('dblclick', fnUpd); } $bgr.toggle(!!$('.sax-dropdown-item', $mnu).length); return $item; } sd.getItemId = function (item) { return 'Tbl_' + (item || {}).id; } //-------------------------------------------------------------- sd.getFilterDropdownTemplate = function (env) { return $('.sax-dropdown-menu.DatabaseTables li.sax-dropdown-item', env.$pnl.tmpls).clone(); } sd.getItemTemplate = function (env) { return env.$pnl.tmpls.find('.sax-row-item.DatabaseTable').clone(); } sd.getItemDropdownTemplate = function (env) { return $('.sax-dropdown-menu.DatabaseTable li.sax-dropdown-item', env.$pnl.tmpls).clone(); } //-------------------------------------------------------------- sd.getFilterMenuOption = function (env, lbl, fn, cls) { return sd.getMenuOption(sd.getFilterDropdownTemplate(env), lbl, fn, cls); } sd.getItemMenuOption = function (env, lbl, fn, cls) { return sd.getMenuOption(sd.getItemDropdownTemplate(env), lbl, fn, cls); } sd.getMenuOption = function ($opt, lbl, fn, cls) { return $opt.find('div.sax-label').text(lbl).end().on('click', fn).addClass(cls); } //-------------------------------------------------------------- sd.viewItem = function (env, item) { sax.debug('viewItem', env, item) env.$frm.itemId.find('.DatabaseTableInstance').val($('.DatabaseFilterInstance', env.$frm.filter).val()); env.$frm.itemId.find('.DatabaseTableName').val(item.tableName); env.ajax.updateItem = env.ajax.updateItem || { url: sax.url.base + 'System/Ajax/GetDatabaseTable', formSel: env.$frm.itemId, callbackFn: function (response) { sd.onViewItem(env, response); } }; sax.doAjaxRequest(env.ajax.updateItem, 50); } sd.onViewItem = function (env, response) { sax.debug('onViewItem', env, response); sd.clearItem(env); if (!response.success) return; let item = response.table; let $frmT = env.$frm.item; $('.DatabaseTableName', $frmT).val(item.name); // Properties. let prts = item.properties; let $prts = $('.TableProperties', env.$dlg.item); $('tr:not(.sax-heading)', $prts).remove(); for (let prtIdx = 0; prtIdx < prts.length; prtIdx++) { let prt = prts[prtIdx]; let $prt = sd.getTablePropertyTemplate(env).addClass('sax-' + (prtIdx % 2 ? 'even' : 'odd')); $('.Label', $prt).text(prt.label); $('.Value', $prt).text(prt.value); $prts.append($prt); } // Columns. let cols = item.columns; let $cols = $('.TableColumns', env.$dlg.item); $('tr:not(.sax-heading)', $cols).remove(); for (let colIdx = 0; colIdx < cols.length; colIdx++) { let col = cols[colIdx]; let $col = sd.getTableColumnTemplate(env).addClass('sax-' + (colIdx % 2 ? 'even' : 'odd')); $('.Pos', $col).text(col.pos); $('.Name', $col).text(col.name); $('.Format', $col).text(col.format); $cols.append($col); } // Indices. let idxs = item.indices; let $idxs = $('.TableIndices', env.$dlg.item); $('tr:not(.sax-heading)', $idxs).remove(); for (let idxIdx = 0; idxIdx < idxs.length; idxIdx++) { let idx = idxs[idxIdx]; let $idx = sd.getTableIndexTemplate(env).addClass('sax-' + (idxIdx % 2 ? 'even' : 'odd')); $('.Name', $idx).text(idx.name); for (const col of idx.columns) $('.Columns', $idx).append($('