diff --git a/frontend-js/src/main/js/gui/admin/MapsAdminPanel.js b/frontend-js/src/main/js/gui/admin/MapsAdminPanel.js index 165b69e6d8f11b91b50d353f3a0cb0a5bd7a7138..78881ee703a902bcf162f8ad607c1c22b7fbb7b8 100644 --- a/frontend-js/src/main/js/gui/admin/MapsAdminPanel.js +++ b/frontend-js/src/main/js/gui/admin/MapsAdminPanel.js @@ -72,6 +72,7 @@ MapsAdminPanel.prototype._createMenuRow = function() { }; MapsAdminPanel.prototype._createProjectTableRow = function() { + var self = this; var projectsRow = Functions.createElement({ type : "div", style : "display:table-row; width:100%", @@ -86,6 +87,9 @@ MapsAdminPanel.prototype._createProjectTableRow = function() { projectsRow.appendChild(projectsTable); $(projectsTable).DataTable({ + fnRowCallback : function(nRow, aData, iDisplayIndex) { + nRow.setAttribute('id', aData[0]); + }, columns : [ { title : 'ProjectId', }, { @@ -102,6 +106,16 @@ MapsAdminPanel.prototype._createProjectTableRow = function() { title : 'Remove', }, ], }); + $(projectsTable).on("click", "[name='removeProject']", function() { + var button = this; + return self.removeProject($(button).attr("data")).then(null, GuiConnector.alert); + }); + + $(projectsTable).on("click", "[name='showEditDialog']", function() { + var button = this; + return self.showEditDialog($(button).attr("data")).then(null, GuiConnector.alert); + }); + return projectsRow; }; @@ -114,19 +128,22 @@ MapsAdminPanel.prototype.init = function() { }); }; -MapsAdminPanel.prototype.projectToTableRow = function(project) { +MapsAdminPanel.prototype.projectToTableRow = function(project, row) { var self = this; var disease = self.getHtmlStringLink(project.getDisease()); var organism = self.getHtmlStringLink(project.getOrganism()); - var row = [ project.getProjectId(), // - project.getName(), // - disease, // - organism, // - project.getStatus(), // - "<button name='showEditDialog' data='" + project.getProjectId() + "'>EDIT</button>", // - "<button name='removeProject' data='" + project.getProjectId() + "'>REMOVE</button>", // - ]; + if (row === undefined) { + row = []; + } + row[0] = project.getProjectId(); + row[1] = project.getName(); + row[2] = disease; + row[3] = organism; + row[4] = project.getStatus(); + row[5] = "<button name='showEditDialog' data='" + project.getProjectId() + "'>EDIT</button>"; + row[6] = "<button name='removeProject' data='" + project.getProjectId() + "'>REMOVE</button>"; + return row; }; @@ -148,19 +165,35 @@ MapsAdminPanel.prototype.setProjects = function(projects) { var dataTable = $($("[name='projectsTable']", self.getElement())[0]).DataTable(); var data = []; for (var i = 0; i < projects.length; i++) { - data.push(self.projectToTableRow(projects[i])); + var project = projects[i]; + var rowData = self.projectToTableRow(project) + self.addUpdateListener(project, rowData); + data.push(rowData); } dataTable.clear().rows.add(data).draw(); - $("[name='projectsTable']", self.getElement()).on("click", "[name='removeProject']", function() { - var button = this; - return self.removeProject($(button).attr("data")).then(null, GuiConnector.alert); - }); +}; - $("[name='projectsTable']", self.getElement()).on("click", "[name='showEditDialog']", function() { - var button = this; - return self.showEditDialog($(button).attr("data")).then(null, GuiConnector.alert); - }); +MapsAdminPanel.prototype.addUpdateListener = function(project, dataTableRow) { + var self = this; + + var listenerName = "PROJECT_LIST_LISTENER"; + var listeners = project.getListeners("onreload"); + for (var i = 0; i < listeners.length; i++) { + if (listeners[i].listenerName === listenerName) { + project.removeListener("onreload", listeners[i]); + } + } + var listener = function() { + self.projectToTableRow(project, dataTableRow); + var row = $($("[name='projectsTable']", self.getElement())[0]).DataTable().row("#" + project.getProjectId()); + if (row.length > 0) { + row.data(dataTableRow).draw(); + } + + }; + listener.listenerName = listenerName; + project.addListener("onreload", listener); }; MapsAdminPanel.prototype.onAddClicked = function() {