Files
BusinessMgr-2019/SaBusinessMgrCoreWebControl/wwwroot/js/sbc-ins-rep-db.js
T

113 lines
4.2 KiB
JavaScript

/*
* SBM - Control - Instance - Core Database.
*/
(function (win, doc, undef)
{
"use strict";
let cd = sbc.mdl.coreDatabase = { env: {}, data: {} };
//--------------------------------------------------------------
cd.refreshItems = function (env, delay)
{
//sbc.debug('refreshItems', env);
if (!env.$frm.filter.find('.FilterContext').val()) return;
if (!cd.awaitingRefreshResponse)
{
env.$pnl.bgr.invisible();
env.$pnl.table.find('tbody tr').remove();
env.$pnl.msgs.hide().empty().append($('<div class="sbc-message">' + sbc.msg.dataQuerying + '</div>')).fadeIn(200);
}
env.ajax.tables = env.ajax.tables || { url: sbc.url.base + 'Instance/Repository/Ajax/GetTables', formSel: env.$frm.filter, callbackFn: function (response) { cd.displayItems(env, response); } };
sbc.doAjaxRequest(env.ajax.tables, delay || 50);
cd.awaitingRefreshResponse = true;
}
cd.displayItems = function (env, response)
{
//sbc.debug('displayItems', env, response);
delete cd.awaitingRefreshResponse;
env.$pnl.msgs.hide().empty();
let $table = $('table', env.$pnl.table).find('tbody tr').remove().end();
if (!response.success) return;
env.config = response.config || {};
// Menu.
if (env.$pnl.bgr.length)
{
env.$pnl.bgr.invisible();
env.$pnl.mnu.empty();
env.$pnl.mnu.append(cd.getFilterMenuOption(env, sbc.lbl.refresh, function () { cd.refreshItems(env); }, 'sbc-refresh'));
env.$pnl.bgr.toggleVisibility(!!$('.sbc-dropdown-item', env.$pnl.mnu).length);
}
// Items.
var items = response.tables || [];
if (!items.length)
return env.$pnl.msgs.append($('<div class="sbc-message">' + sbc.msg.dataNoneFound + '</div>')).fadeIn(500);
for (let itemIdx = 0; itemIdx < items.length; itemIdx++)
$table.append(cd.populateItem(env, cd.getItemTemplate(env), items[itemIdx]));
sbc.configureItemTable(env.config, $table);
}
cd.populateItem = function (env, $item, item)
{
if (!item) return $item;
$item.prop('id', cd.getItemId(item));
$('.SchemaName', $item).text(item.schemaName);
$('.TableName', $item).text(item.tableName);
if (item.columnCount) $('.ColumnCount', $item).text(item.columnCount);
if (item.indexCount) $('.IndexCount', $item).text(item.indexCount);
if (item.rowCount) $('.RowCount', $item).text(item.rowCount);
return $item;
}
cd.getItemId = function (item)
{
return 'Tbl_' + (item || {}).TableName;
}
//--------------------------------------------------------------
cd.getFilterDropdownTemplate = function (env)
{
return env.$pnl.tmpls.find('.sbc-dropdown-menu.TableFilter li.sbc-dropdown-item').clone();
}
cd.getItemTemplate = function (env)
{
return env.$pnl.tmpls.find('table tr.sbc-row-item.Table').clone();
}
cd.getItemDropdownTemplate = function (env)
{
return env.$pnl.tmpls.find('.sbc-dropdown-menu.Table li.sbc-dropdown-item').clone();
}
cd.getFilterMenuOption = function (env, lbl, fn, cls)
{
return cd.getMenuOption(cd.getFilterDropdownTemplate(env), lbl, fn, cls);
}
cd.getItemMenuOption = function (env, lbl, fn, cls)
{
return cd.getMenuOption(cd.getItemDropdownTemplate(env), lbl, fn, cls);
}
cd.getMenuOption = function ($opt, lbl, fn, cls)
{
return $opt.find('div.sbc-label').text(lbl).end().on('click', fn).addClass(cls);
}
//--------------------------------------------------------------
$(function ()
{
let env = cd.env.init = { data: {}, ajax: {}, $pnl: {}, $frm: {}, $ctrl: {}, $dlg: {} };
env.$pnl.items = $('.sbc-panel.Tables');
env.$pnl.header = env.$pnl.items.find('.sbc-panel-header');
env.$pnl.bgr = env.$pnl.header.find('.sbc-burger').invisible();
env.$pnl.mnu = env.$pnl.bgr.find('ul.sbc-dropdown-menu');
env.$pnl.table = env.$pnl.items.find('.sbc-panel-item-table');
env.$pnl.msgs = env.$pnl.table.find('.sbc-panel-messages');
env.$pnl.tmpls = env.$pnl.items.find('.sbc-panel-item-template');
env.$frm.filter = env.$pnl.items.find('#frmTableFilter');
env.$frm.filter.on('input', '.FilterSearch', function () { cd.refreshItems(env, 250); }).on('change', '.FilterContext', function () { cd.refreshItems(env, 100); });
if (env.$frm.filter.length) cd.refreshItems(env, 250);
});
//--------------------------------------------------------------
}(window, window.document));
/* The End */