From 8eb43e7e3f4a1874bbfb187c6e879f35b9af672d Mon Sep 17 00:00:00 2001 From: Piotr Gawron <piotr.gawron@uni.lu> Date: Thu, 11 Apr 2019 11:38:34 +0200 Subject: [PATCH] save button removed from edit project (there is autosave functionality) --- frontend-js/src/main/js/ServerConnector.js | 7 +- .../main/js/gui/admin/EditProjectDialog.js | 170 ++++++++++-------- .../src/main/js/gui/admin/MapsAdminPanel.js | 25 +-- .../js/gui/admin/EditProjectDialog-test.js | 19 -- .../test/js/gui/admin/MapsAdminPanel-test.js | 6 +- frontend-js/src/test/js/mocha-config.js | 2 + 6 files changed, 115 insertions(+), 114 deletions(-) diff --git a/frontend-js/src/main/js/ServerConnector.js b/frontend-js/src/main/js/ServerConnector.js index 29a4e7f14d..ad46d788b6 100644 --- a/frontend-js/src/main/js/ServerConnector.js +++ b/frontend-js/src/main/js/ServerConnector.js @@ -1074,15 +1074,18 @@ ServerConnector.getProject = function (projectId) { if (content === null) { return null; } else { + var promises = []; var downloadedProject = new Project(content); if (self._projectsById[projectId] instanceof Project) { - self._projectsById[projectId].update(downloadedProject); + promises.push(self._projectsById[projectId].update(downloadedProject)); } else { self._projectsById[projectId] = downloadedProject; } project = self._projectsById[projectId]; - return self.getModels(projectId).then(function (models) { + return Promise.all(promises).then(function() { + return self.getModels(projectId); + }).then(function (models) { project.setModels(models); return self.getOverlays({ projectId: projectId, diff --git a/frontend-js/src/main/js/gui/admin/EditProjectDialog.js b/frontend-js/src/main/js/gui/admin/EditProjectDialog.js index 1f6cc6d1ee..d54381e890 100644 --- a/frontend-js/src/main/js/gui/admin/EditProjectDialog.js +++ b/frontend-js/src/main/js/gui/admin/EditProjectDialog.js @@ -35,7 +35,6 @@ function EditProjectDialog(params) { var self = this; guiUtils.setConfiguration(params.configuration); self.setConfiguration(params.configuration); - self.registerListenerType("onSave"); $(self.getElement()).addClass("minerva-edit-project-dialog"); $(self.getElement()).css({overflow: "hidden"}); @@ -133,7 +132,30 @@ EditProjectDialog.prototype.createGeneralTabContent = function () { style: "display:table-cell", content: Functions.createElement({ type: "select", - name: "project-map-canvas-type" + name: "project-map-canvas-type", + onchange: function () { + var select = this; + var licenceCheckbox = $("[name='project-google-maps-license']", self.getElement())[0]; + var licenceDiv = licenceCheckbox.parentElement.parentElement; + + var update = true; + var mapType; + $("option:selected", select).each(function () { + mapType = $(this).val(); + if (mapType === "GOOGLE_MAPS_API") { + update = false; + $(licenceDiv).css("display", "table-row"); + } else { + $(licenceDiv).css("display", "none"); + } + self.setLicenseAccepted(false); + }); + if (update) { + var project = self.getProject(); + project.setMapCanvasType(self.getMapCanvasTypeId()); + return self.updateProject(project); + } + } }) })); @@ -154,7 +176,28 @@ EditProjectDialog.prototype.createGeneralTabContent = function () { content: Functions.createElement({ type: "input", inputType: "checkbox", - name: "project-google-maps-license" + name: "project-google-maps-license", + onchange: function () { + var select = $("[name='project-map-canvas-type']", self.getElement())[0]; + var licenceCheckbox = $("[name='project-google-maps-license']", self.getElement())[0]; + + var update = true; + var mapType; + $("option:selected", select).each(function () { + mapType = $(this).val(); + if (mapType === "GOOGLE_MAPS_API") { + update = self.isLicenseAccepted(); + } + }); + if (self.isLicenseAccepted()) { + $(licenceCheckbox).prop("disabled", true); + } + if (update) { + var project = self.getProject(); + project.setMapCanvasType(self.getMapCanvasTypeId()); + return self.updateProject(project); + } + } }) })); @@ -172,7 +215,12 @@ EditProjectDialog.prototype.createGeneralTabContent = function () { type: "div", style: "display:table-cell", content: "<input name='projectName'/>", - xss: false + xss: false, + onchange: function () { + var project = self.getProject(); + project.setName($("[name='projectName']", this).val()); + return self.updateProject(project); + } })); var versionRow = Functions.createElement({ @@ -189,7 +237,12 @@ EditProjectDialog.prototype.createGeneralTabContent = function () { type: "div", style: "display:table-cell", content: "<input name='projectVersion'/>", - xss: false + xss: false, + onchange: function () { + var project = self.getProject(); + project.setVersion($("[name='projectVersion']", this).val()); + return self.updateProject(project); + } })); var diseaseRow = Functions.createElement({ @@ -206,7 +259,12 @@ EditProjectDialog.prototype.createGeneralTabContent = function () { type: "div", style: "display:table-cell", content: "<input name='projectDisease'/>", - xss: false + xss: false, + onchange: function () { + var project = self.getProject(); + project.setDisease(prepareMiriamData("MESH_2012", $("[name='projectDisease']", this).val())); + return self.updateProject(project); + } })); var organismRow = Functions.createElement({ @@ -223,7 +281,12 @@ EditProjectDialog.prototype.createGeneralTabContent = function () { type: "div", style: "display:table-cell", content: "<input name='projectOrganism'/>", - xss: false + xss: false, + onchange: function () { + var project = self.getProject(); + project.setOrganism(prepareMiriamData("TAXONOMY", $("[name='projectOrganism']", this).val())); + return self.updateProject(project); + } })); var emailRow = Functions.createElement({ @@ -240,50 +303,15 @@ EditProjectDialog.prototype.createGeneralTabContent = function () { type: "div", style: "display:table-cell", content: "<input name='projectNotifyEmail'/>", - xss: false + xss: false, + onchange: function () { + var project = self.getProject(); + project.setNotifyEmail($("[name='projectNotifyEmail']", this).val()); + return self.updateProject(project); + } })); - var menuRow = Functions.createElement({ - type: "div", - className: "minerva-menu-row", - style: "display:table-row; margin:10px" - }); - result.appendChild(menuRow); - - var saveProjectButton = Functions.createElement({ - type: "button", - name: "saveProject", - content: '<span class="ui-icon ui-icon-disk"></span> SAVE', - onclick: function () { - return self.onSaveClicked().then(function () { - return self.callListeners("onSave"); - }).then(function () { - return self.close(); - }).catch(function (error) { - - if ((error instanceof NetworkError && error.statusCode === HttpStatus.BAD_REQUEST)) { - GuiConnector.alert(error.content.reason); - } else { - GuiConnector.alert(error); - } - }); - }, - xss: false - }); - var cancelButton = Functions.createElement({ - type: "button", - name: "cancelProject", - content: '<span class="ui-icon ui-icon-cancel"></span> CANCEL', - onclick: function () { - return self.close(); - }, - xss: false - }); - menuRow.appendChild(saveProjectButton); - menuRow.appendChild(cancelButton); - return result; - }; /** @@ -437,7 +465,7 @@ EditProjectDialog.prototype._createOverlayTable = function () { var button = this; return self.getServerConnector().getOverlaySourceDownloadUrl({ overlayId: $(button).attr("data"), - projectId:self.getProject().getProjectId() + projectId: self.getProject().getProjectId() }).then(function (url) { return self.downloadFile(url); }).then(null, GuiConnector.alert); @@ -523,21 +551,6 @@ EditProjectDialog.prototype.createUserPrivilegeColumns = function () { */ EditProjectDialog.prototype.init = function () { var self = this; - var select = $("[name='project-map-canvas-type']", self.getElement())[0]; - var licenceCheckbox = $("[name='project-google-maps-license']", self.getElement())[0]; - var licenceDiv = licenceCheckbox.parentElement.parentElement; - - $(select).change(function () { - $("option:selected", select).each(function () { - if ($(this).val() === "GOOGLE_MAPS_API") { - $(licenceDiv).css("display", "table-row"); - } else { - $(licenceDiv).css("display", "none"); - } - self.setLicenseAccepted(false); - }); - }); - return self.initUsersTab().then(function () { return self.refresh() }).then(function () { @@ -928,23 +941,20 @@ var prepareMiriamData = function (type, resource) { /** * + * @param {Project} project * @returns {Promise} */ -EditProjectDialog.prototype.onSaveClicked = function () { +EditProjectDialog.prototype.updateProject = function (project) { var self = this; - var project = self.getProject(); - var element = self.getElement(); - return self.checkValidity().then(function () { - project.setName($("[name='projectName']", element)[0].value); - project.setVersion($("[name='projectVersion']", element)[0].value); - project.setNotifyEmail($("[name='projectNotifyEmail']", element)[0].value); - var organism = prepareMiriamData("TAXONOMY", $("[name='projectOrganism']", element)[0].value); - project.setOrganism(organism); - var disease = prepareMiriamData("MESH_2012", $("[name='projectDisease']", element)[0].value); - project.setDisease(disease); - project.setMapCanvasType(self.getMapCanvasTypeId()); - return self.getServerConnector().updateProject(project); - }); + + GuiConnector.showProcessing(); + return self.getServerConnector().updateProject(project).catch(function (error) { + if ((error instanceof NetworkError && error.statusCode === HttpStatus.BAD_REQUEST)) { + GuiConnector.alert(error.content.reason); + } else { + GuiConnector.alert(error); + } + }).finally(GuiConnector.hideProcessing); }; /** @@ -1168,7 +1178,9 @@ EditProjectDialog.prototype.getMapCanvasTypeId = function () { * @param {boolean} isLicenseAccepted */ EditProjectDialog.prototype.setLicenseAccepted = function (isLicenseAccepted) { - $("[name='project-google-maps-license']", this.getElement()).prop("checked", isLicenseAccepted); + var licenceCheckbox = $("[name='project-google-maps-license']", this.getElement()); + licenceCheckbox.prop("checked", isLicenseAccepted); + licenceCheckbox.prop("disabled", isLicenseAccepted); }; /** diff --git a/frontend-js/src/main/js/gui/admin/MapsAdminPanel.js b/frontend-js/src/main/js/gui/admin/MapsAdminPanel.js index 8324b0fe71..1c588437a2 100644 --- a/frontend-js/src/main/js/gui/admin/MapsAdminPanel.js +++ b/frontend-js/src/main/js/gui/admin/MapsAdminPanel.js @@ -292,7 +292,7 @@ MapsAdminPanel.prototype.setProjects = function (projects) { for (var i = 0; i < projects.length; i++) { var project = projects[i]; var rowData = self.projectToTableRow(project, undefined, user); - self.addUpdateListener(project, rowData); + self.addUpdateListener(project); data.push(rowData); if (project.getStatus().toLowerCase() !== "ok" && project.getStatus().toLowerCase() !== "failure") { requireUpdate = true; @@ -313,9 +313,8 @@ MapsAdminPanel.prototype.setProjects = function (projects) { /** * * @param {Project} project - * @param {Array} dataTableRow */ -MapsAdminPanel.prototype.addUpdateListener = function (project, dataTableRow) { +MapsAdminPanel.prototype.addUpdateListener = function (project) { var self = this; var listenerName = "PROJECT_LIST_LISTENER"; @@ -327,10 +326,16 @@ MapsAdminPanel.prototype.addUpdateListener = function (project, dataTableRow) { } var listener = function () { return self.getServerConnector().getLoggedUser().then(function (user) { - self.projectToTableRow(project, dataTableRow, user); - var row = $($("[name='projectsTable']", self.getElement())[0]).DataTable().row("#" + project.getProjectId()); - if (row.length > 0) { - row.data(dataTableRow).draw(); + var dataTable = $($("[name='projectsTable']", self.getElement())[0]).DataTable(); + + var length = dataTable.data().length; + for (var i = 0; i < length; i++) { + var row = dataTable.row(i); + var data = row.data(); + if (data[0].indexOf(">" + project.getProjectId() + "<")>=0) { + self.projectToTableRow(project, data, user); + row.data(data).draw(); + } } }); }; @@ -421,7 +426,7 @@ MapsAdminPanel.prototype.onRefreshClicked = function () { /** * - * @param project + * @param {Project} project * @returns {*} */ MapsAdminPanel.prototype.getDialog = function (project) { @@ -442,10 +447,6 @@ MapsAdminPanel.prototype.getDialog = function (project) { }); self._dialogs[project.getProjectId()] = dialog; return dialog.init().then(function () { - return dialog.addListener("onSave", function () { - return self.onRefreshClicked() - }); - }).then(function () { return dialog; }); } else { diff --git a/frontend-js/src/test/js/gui/admin/EditProjectDialog-test.js b/frontend-js/src/test/js/gui/admin/EditProjectDialog-test.js index 52ea725632..edd4449c6a 100644 --- a/frontend-js/src/test/js/gui/admin/EditProjectDialog-test.js +++ b/frontend-js/src/test/js/gui/admin/EditProjectDialog-test.js @@ -99,25 +99,6 @@ describe('EditProjectDialog', function () { }); }); - - it('onSaveClicked', function () { - var dialog; - var project; - return ServerConnector.getProject().then(function (result) { - project = result; - project.setVersion("2.01"); - return createDialog(project); - }).then(function (result) { - dialog = result; - return dialog.init(); - }).then(function () { - return dialog.onSaveClicked(); - }).then(function (result) { - assert.ok(project === result); - dialog.destroy(); - }); - }); - it('openAddOverlayDialog', function () { var dialog; return createDialog().then(function (result) { diff --git a/frontend-js/src/test/js/gui/admin/MapsAdminPanel-test.js b/frontend-js/src/test/js/gui/admin/MapsAdminPanel-test.js index 2633963d10..9367efbaac 100644 --- a/frontend-js/src/test/js/gui/admin/MapsAdminPanel-test.js +++ b/frontend-js/src/test/js/gui/admin/MapsAdminPanel-test.js @@ -69,12 +69,14 @@ describe('MapsAdminPanel', function () { it('getDialog', function () { helper.loginAsAdmin(); var mapTab = createMapsAdminPanel(); + var project; return mapTab.init().then(function () { return ServerConnector.getProject(); - }).then(function (project) { + }).then(function (result) { + project = result; return mapTab.getDialog(project); }).then(function (dialog) { - assert.ok(dialog.getListeners("onSave").length > 0); + assert.ok(project.getListeners("onreload").length > 0); return mapTab.destroy(); }); }); diff --git a/frontend-js/src/test/js/mocha-config.js b/frontend-js/src/test/js/mocha-config.js index ccc71a8bbb..a3a6cca787 100644 --- a/frontend-js/src/test/js/mocha-config.js +++ b/frontend-js/src/test/js/mocha-config.js @@ -228,6 +228,8 @@ afterEach(function () { document.body.innerHTML = ""; this.test.error(new Error("Test didn't left clean document. Found: " + content)); } else if ($._data(window, "events").resize) { + var events = $._data(window, "events").resize; + logger.warn(events); $(window).off("resize"); this.test.error(new Error("Test didn't left clean resize events handlers.")); } -- GitLab