218 lines
8.0 KiB
JavaScript
218 lines
8.0 KiB
JavaScript
/*
|
|
* 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($('<div class="sax-message">' + sax.msg.dataQuerying + '</div>')).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($('<div class="sax-message">' + sax.msg.dataNoneFound + '</div>')).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($('<div>').text(col.name));
|
|
$('.Unique', $idx).text(idx.unique ? 'Yes' : '');
|
|
$idxs.append($idx);
|
|
}
|
|
// Display table details.
|
|
env.$dlg.item.dialog('option', 'title', response.popupTitle || "Table: " + item.name);
|
|
sax.openDialog(env.$dlg.item, 600, 600);
|
|
}
|
|
sd.clearItem = function (env)
|
|
{
|
|
let $frmT = env.$frm.item;
|
|
$('input[type="text"],textarea,select', $frmT).val('');
|
|
sax.clearControlErrors();
|
|
}
|
|
sd.getTablePropertyTemplate = function (env)
|
|
{
|
|
return sd.getTableRowTemplate(env, 'TableProperty');
|
|
}
|
|
sd.getTableColumnTemplate = function (env)
|
|
{
|
|
return sd.getTableRowTemplate(env, 'TableColumn');
|
|
}
|
|
sd.getTableIndexTemplate = function (env)
|
|
{
|
|
return sd.getTableRowTemplate(env, 'TableIndex');
|
|
}
|
|
sd.getTableRowTemplate = function (env, name)
|
|
{
|
|
return $('.sax-panel-item-template .' + name, env.$dlg.item).clone();
|
|
}
|
|
|
|
//--------------------------------------------------------------
|
|
$(function ()
|
|
{
|
|
let env = sd.env.maint = { data: {}, ajax: {}, $pnl: {}, $frm: {}, $ctrl: {}, $dlg: {} };
|
|
|
|
env.$pnl.items = $('.DatabaseTables');
|
|
env.$pnl.header = env.$pnl.items.find('.sax-panel-header');
|
|
env.$pnl.bgr = env.$pnl.header.find('.sax-burger');
|
|
env.$pnl.mnu = env.$pnl.bgr.find('ul.sax-dropdown-menu');
|
|
env.$pnl.table = env.$pnl.items.find('.sax-panel-item-table');
|
|
env.$pnl.msgs = env.$pnl.table.find('.sax-panel-messages');
|
|
env.$pnl.tmpls = env.$pnl.items.find('.sax-panel-item-template');
|
|
|
|
env.$pnl.header.on('click', '.sax-action.sax-results-refresh', function () { sd.refreshResults(env); });
|
|
|
|
env.$frm.filter = $('#frmDbTableFilter');
|
|
$('.DatabaseFilterInstance', env.$frm.filter).on('change', function () { sd.refreshResults(env, 250); });
|
|
$('.DatabaseFilterSearch', env.$frm.filter).on('input', function () { sd.refreshResults(env, 250); });
|
|
|
|
env.$frm.itemId = $('#frmDbTableName');
|
|
env.$frm.item = $('#frmDbTable').on('input', '.sax-input, .sax-textarea', function () { sax.clearControlError(this); }).on('change', '.sax-select', function () { sax.clearControlError(this); });
|
|
|
|
var opt = sax.dlgOpts();
|
|
opt.dialogClass += " sax-DatabaseTable";
|
|
//opt.buttons[sax.dlg.btn.ok] = function () { sax.storeItem(); };
|
|
opt.buttons[sax.dlg.btn.close] = function () { $(this).dialog('close'); };
|
|
env.$dlg.item = $('#dlgDbTable').dialog(opt);
|
|
|
|
if (sd.env.maint.$pnl.items.length) setTimeout(function () { sd.refreshResults(sd.env.maint); }, 250);
|
|
});
|
|
|
|
}(window, window.document));
|
|
|
|
/* The End */ |