/* * 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($('
' + sax.msg.dataQuerying + '
')).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($('
' + sax.msg.dataNoneFound + '
')).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($('
').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 */