From be779c0441a6dbc55e3e5143a8b48f5515e56720 Mon Sep 17 00:00:00 2001 From: Antti Luomi <antti.luomi@id.ethz.ch> Date: Mon, 18 Mar 2019 14:20:25 +0100 Subject: [PATCH] Remember dataset type, sample identifier and property values of each dataset type in upload dialog --- jupyter-openbis-extension/static/state.js | 5 +- .../static/uploadDIalog.js | 66 +++++++++++++++---- 2 files changed, 56 insertions(+), 15 deletions(-) diff --git a/jupyter-openbis-extension/static/state.js b/jupyter-openbis-extension/static/state.js index e72d76e..5f96c0e 100644 --- a/jupyter-openbis-extension/static/state.js +++ b/jupyter-openbis-extension/static/state.js @@ -4,7 +4,10 @@ define([], connection: { name: null, candidateName: null - } + }, + uploadDataSetType: null, + uploadDataSetTypes: {}, + uploadEntityIdentifier: '' } } ) \ No newline at end of file diff --git a/jupyter-openbis-extension/static/uploadDIalog.js b/jupyter-openbis-extension/static/uploadDIalog.js index 2a00222..d1c678d 100644 --- a/jupyter-openbis-extension/static/uploadDIalog.js +++ b/jupyter-openbis-extension/static/uploadDIalog.js @@ -39,15 +39,26 @@ define([ if (response.ok) { response.json() .then(function (data) { - //console.log(data.dataSetTypes) - var change_input_fields = function () { hideSpinner() cleanErrors() + var oldType = state.uploadDataSetType + if (oldType != null && !(oldType in state.uploadDataSetTypes)) { + state.uploadDataSetTypes[oldType] = {} + } + + state.uploadDataSetType = dataset_types.options[dataset_types.selectedIndex].value + // remove existing input fields while (input_fields.firstChild) { - input_fields.removeChild(input_fields.firstChild) + var element = input_fields.firstChild + + if (element.nodeName === "INPUT" && state.uploadDataSetType != null) { + state.uploadDataSetTypes[oldType][element.name] = element.value + } + + input_fields.removeChild(element) } // for every property assignment, create an input field. @@ -63,6 +74,12 @@ define([ input_field.size = 90 input_field.style.width="100%" + var mem = state.uploadDataSetTypes[dts[dataset_types.selectedIndex].code] + if (mem == null) { + mem = {} + } + input_field.value = pa.code in mem ? mem[pa.code] : "" + input_fields.appendChild(input_title) input_fields.appendChild(input_error) input_fields.appendChild(input_field) @@ -76,12 +93,21 @@ define([ while (dataset_types.firstChild) { dataset_types.removeChild(dataset_types.firstChild); } + var index = 0 + var selectedIndex = -1 for (dt of dts) { var option = document.createElement("OPTION") option.value = dt.code option.textContent = dt.description ? dt.code + ": " + dt.description : dt.code dataset_types.appendChild(option) + + if (dt.code === state.uploadDataSetType) { + selectedIndex = index + } + index++ } + + dataset_types.selectedIndex = selectedIndex === -1 ? 0 : selectedIndex // change the input fields, since we just received new datasetTypes change_input_fields() @@ -130,7 +156,7 @@ define([ sampleIdentifier.type = "text" sampleIdentifier.name = 'sampleIdentifier' sampleIdentifier.placeholder = "Sample Identifier or permId" - sampleIdentifier.value = '' + sampleIdentifier.value = state.uploadEntityIdentifier sampleIdentifier.size = "90" sampleIdentifier.style.width="100%" @@ -159,6 +185,16 @@ define([ var uploadDialogBox = $('<div/>').append(inputs) + function saveState() { + state.uploadDataSetTypes[state.uploadDataSetType] = {} + for (element of input_fields.children) { + if (element.nodeName === "INPUT" && state.uploadDataSetType != null) { + state.uploadDataSetTypes[state.uploadDataSetType][element.name] = element.value + } + } + state.uploadEntityIdentifier = sampleIdentifier.value + } + function onOk() { var connection_name = state.connection.name @@ -199,6 +235,7 @@ define([ data: JSON.stringify(dataSetInfo), contentType: 'application/json', success: function (data) { + saveState() $('div.modal').remove() $('div.modal-backdrop').remove() common.createFeedback('success', data.statusText) @@ -219,22 +256,16 @@ define([ if ("errors" in data.responseJSON) { var errors = data.responseJSON.errors - for (error of errors) { let key, value Object.keys(error).forEach(k => { key = k value = error[k] }) - - var element; - if (key in errorElements) { - element = errorElements[key] - } else { - element = errorElements['main'] - } - element.textContent = element.textContent.concat(value) + errorElements[key in errorElements ? key : "main"].textContent = value } + } else { + errorElements["main"].textContent = "Server error" } } } @@ -245,6 +276,11 @@ define([ return false } + function onCancel() { + saveState() + return true + } + if (IPython.notebook.dirty === true) { dialog.modal({ body: 'Please save the notebook before uploading it to openBIS.', @@ -260,7 +296,9 @@ define([ body: uploadDialogBox, title: 'Upload openBIS DataSet', buttons: { - 'Cancel': {}, + 'Cancel': { + click: onCancel + }, 'Upload': { class: 'btn-primary btn-large', click: onOk -- GitLab