/* * SBM - Control - Instance - Repository. */ (function (win, doc, undef) { "use strict"; let ir = sbc.instanceRepository = { data: {}, ajax: {} }; let $pnl = ir.$pnl = {}, $frm = ir.$frm = {}, $dlg = ir.$dlg = {}; //-------------------------------------------------------------- ir.refreshResults = function (delay) { if (!ir.awaitingRefreshResponse) { $('.sbc-burger', $pnl.header).hide(); $pnl.table.find('tbody tr').remove(); $pnl.msgs.hide().empty().append($('
')).fadeIn(200); } ir.ajax.repositories = ir.ajax.repositories || { url: sbc.url.base + 'Instance/Repository/Ajax/GetRepositories', formSel: $frm.filter, $msgs: $pnl.msgs, callbackFn: ir.handleRepositories }; sbc.doAjaxRequest(ir.ajax.repositories, delay || 50); ir.awaitingRefreshResponse = true; } ir.handleRepositories = function (response) { //sbc.debug('handleRepositories', response); delete ir.awaitingRefreshResponse; let $table = $('table', $pnl.table).find('tbody tr').remove().end(); $pnl.msgs.hide().empty(); sbc.refreshPaging(response, '#frmRepositoryFilter', ir.refreshResults); if (!response.success) return; // Reference data - Statuses. if (response.statuses) sbc.data.statuses = response.statuses; if (response.statusesCreate) sbc.data.statusesCreate = response.statusesCreate; if (response.statusCodeDefault) sbc.data.statusCodeDefault = response.statusCodeDefault; // Menu. let $bgr = $('.sbc-burger', $pnl.header).hide(); let $mnu = $('ul.sbc-dropdown-menu', $bgr).empty(); $mnu.append(ir.getFilterMenuOption(sbc.lbl.refresh, function () { ir.refreshResults(); }, 'sbc-refresh')); $mnu.append(ir.getFilterMenuOption(sbc.lbl.create, function () { ir.createItem(); }, 'sbc-add')); $bgr.toggle(!!$('.sbc-dropdown-item', $mnu).length); // Items. let items = response.repositories || []; if (!items.length) return $pnl.msgs.append($('')).fadeIn(500); for (const item of items) { $table.append(ir.populateItem(ir.getItemRowTemplate(), item)); ir.addRepoForInfo(item); } } ir.populateItem = function ($item, item) { if (!item) return $item; $pnl.msgs.hide().empty(); $item.prop('id', ir.getItemId(item)); $('.RepositoryOwnerName', $item).text(item.ownerName); $('.RepositoryContext', $item).text(item.context); $('.RepositoryServerName', $item).text(item.serverName); $('.RepositoryInstanceName', $item).text(item.instanceName); $('.RepositoryDatabaseName', $item).text(item.databaseName); $('.RepositoryStatusDesc', $item).text(item.statusDesc).removeStatusClasses().addClass('sbc-status-' + item.statusCode.toLowerCase()); // Actions. let fnUpd = function () { ir.updateItem($item, item) }; let $bgr = $('.sbc-burger', $item).hide(); let $mnu = $('ul.sbc-dropdown-menu', $bgr).empty(); if (!item.deleted) { $mnu.append(ir.getItemMenuOption(sbc.lbl.edit, fnUpd, 'sbc-edit')); $('.RepositoryContext,.RepositoryDatabaseName', $item).off('click').on('click', fnUpd).addClass('sbc-action-text'); $item.off('dblclick').on('dblclick', fnUpd); } $bgr.toggle(!!$('.sbc-dropdown-item', $mnu).length); return $item; } ir.getItemId = function (item) { return 'Repo_' + (item || {}).id; } //-------------------------------------------------------------- const reposForInfo = []; ir.addRepoForInfo = (item) => { if (reposForInfo.some(repo => repo.id == item.id)) return; ir.clearRepoInfo(item); reposForInfo.push(item); if (reposForInfo.length == 1) ir.refreshNextRepoInfo(); } ir.clearRepoInfo = (item) => { $pnl.table.find('#' + ir.getItemId(item)).find('.RepositoryInitialised').empty(); } ir.resetRefreshRepoInfo = () => { reposForInfo.length = 0; sbc.cancelAjaxRequest(ir.ajax.repoInit); } ir.refreshNextRepoInfo = () => { if (ir.ajax.repoInit?.timeout) return; let repo = reposForInfo.shift(); if (repo?.id) ir.refreshRepoInfo(repo.id, 200); } ir.refreshRepoInfo = function (id, delay) { $frm.itemId.find('.RepositoryId').val(id); ir.ajax.repoInit = ir.ajax.repoInit || { url: sbc.url.base + 'Instance/Repository/Ajax/GetRepositoryInfo', formSel: $frm.itemId, callbackFn: ir.handleRepoInfo }; sbc.doAjaxRequest(ir.ajax.repoInit, delay || 50); } ir.handleRepoInfo = function (response) { //sbc.debug('handleRepoInfo', response); if (!response.success) return; let item = response.repository; let $item = $pnl.table.find('#' + ir.getItemId(item)); let $bgr = $item.find('.sbc-burger').hide(); let $mnu = $bgr.find('ul.sbc-dropdown-menu'); let $repoInit = $item.find('.RepositoryInitialised').empty(); if (!!item.unavailable) $repoInit.append($('