diff --git a/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/DatasetViewerController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/DatasetViewerController.js index a81f641af2cd9bf2e73e0c4c57a8b65988df8a5a..6c8c3d7f32f905bce46e20027ba5bccc370cfe46 100644 --- a/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/DatasetViewerController.js +++ b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/DatasetViewerController.js @@ -27,8 +27,8 @@ * @param {Map} datasets API result with the datasets to show. * @param {Boolean} enableUpload If true, the button to create datasets is shown, this will require the sample to be present. */ -function DataSetViewerController(containerId, profile, entity, serverFacade, datastoreDownloadURL, datasets, enableUpload, enableDeepUnfolding) { - this._datasetViewerModel = new DataSetViewerModel(containerId, profile, entity, serverFacade, datastoreDownloadURL, datasets, enableUpload, enableDeepUnfolding); +function DataSetViewerController(containerId, profile, entity, serverFacade, datastoreDownloadURL, datasets, enableUpload, enableDeepUnfolding, formMode) { + this._datasetViewerModel = new DataSetViewerModel(containerId, profile, entity, serverFacade, datastoreDownloadURL, datasets, enableUpload, enableDeepUnfolding, formMode); this._datasetViewerView = new DataSetViewerView(this, this._datasetViewerModel); this.init = function() { @@ -100,6 +100,9 @@ function DataSetViewerController(containerId, profile, entity, serverFacade, dat ids.push(id); } var fetchOptions = new DataSetFetchOptions(); + fetchOptions.withType(); + fetchOptions.withRegistrator(); + fetchOptions.withModifier(); fetchOptions.withPhysicalData(); fetchOptions.withLinkedData().withExternalDms(); fetchOptions.withProperties(); diff --git a/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/DatasetViewerModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/DatasetViewerModel.js index df391fec0ca188e81c479a328d5a2f3848e8a210..ff49c41aa6163af9b7bb43502a8b9a6d5719f4b6 100644 --- a/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/DatasetViewerModel.js +++ b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/DatasetViewerModel.js @@ -15,7 +15,8 @@ */ function DataSetViewerModel(containerId, profile, entity, serverFacade, datastoreDownloadURL, datasets, - enableUpload, enableDeepUnfolding) { + enableUpload, enableDeepUnfolding, formMode) { + this.formMode = formMode; this.containerId = containerId; this.containerIdTitle = containerId + "-title"; this.containerIdContent = containerId + "-content"; diff --git a/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/DatasetViewerView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/DatasetViewerView.js index 2908bea00ddccde55c872c4a66cc43b6cb62852e..f4c95023c467a2762af2b798f51dab9533dd0563 100644 --- a/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/DatasetViewerView.js +++ b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/DatasetViewerView.js @@ -21,6 +21,9 @@ function DataSetViewerView(dataSetViewerController, dataSetViewerModel) { this._imagePreviewIconLoader = new ImagePreviewIconLoader(); this.repaintDatasets = function() { + if (this._dataSetViewerModel.formMode == FormMode.VIEW) { + this._paintDataSetTable(); + } var _this = this; // Container @@ -76,7 +79,147 @@ function DataSetViewerView(dataSetViewerController, dataSetViewerModel) { } this.repaintFilesAsTree($filesContainer); } - + + this._paintDataSetTable = function() { + var $dataSetsSection = $("#data-sets-section"); + var $legend = $("<legend>").append("Data Sets"); + var $dataSetContainer = $("<div>", { 'id' : 'data-set-table' }); + $dataSetsSection.append($legend); + $dataSetsSection.append($dataSetContainer); + $legend.prepend(FormUtil.getShowHideButton($dataSetContainer, "data-set-table")); + + var _this = this; + var getDataList = function(callback) { + var data = []; + _this._dataSetViewerModel.v3Datasets.forEach(function(dataSet) { + var properties = dataSet.getProperties(); + var name = properties[profile.propertyReplacingCode]; + var row = { + 'id' : dataSet.getCode(), + 'name' : name ? name : "", + 'type' : dataSet.getType().getCode(), + 'properties' : properties, + 'parents' : dataSet.getParents().map(d => d.getCode()), + 'registrator' : dataSet.getRegistrator().getUserId(), + 'registrationDate' : Util.getFormatedDate(new Date(dataSet.getRegistrationDate())), + 'modifier' : dataSet.getModifier().getUserId(), + 'modificationDate' : Util.getFormatedDate(new Date(dataSet.getModificationDate())) + }; + if (properties) { + for(var propertyCode in properties) { + row[propertyCode] = properties[propertyCode]; + } + } + data.push(row); + }); + callback(data); + }; + var columns = []; + columns.push({ + label : 'Code', + property : 'id', + isExportable: true, + sortable : true, + filterable: true, + showByDefault: true, + render : function(data) { + return FormUtil.getFormLink(data.id, "DataSet", data.id); + }, + }); + columns.push({ + label : 'Name', + property : '$NAME', + isExportable: DataGridExportOptions.EXPORTABLE_FIELD.PROPERTY("$NAME"), + sortable : true, + filterable: true, + showByDefault: true, + render : function(data) { + return FormUtil.getFormLink(data['name'], "DataSet", data.id); + }, + }); + columns.push({ + label : 'Data Set Type', + property : 'type', + isExportable: true, + sortable : true, + filterable: true, + showByDefault: true + }); + var dynamicColumnsFunc = function(dataSets) { + var foundPropertyCodes = {}; + dataSets.forEach(function(dataSet) { + for (var propertyCode in dataSet.properties) { + if (dataSet.properties[propertyCode]) { + foundPropertyCodes[propertyCode] = true; + } + } + }); + var propertyColumnsToSort = SampleDataGridUtil.createPropertyColumns(foundPropertyCodes); + FormUtil.sortPropertyColumns(propertyColumnsToSort, dataSets.map(function(dataSet){ + return { + entityKind: "DATASET", + entityType: dataSet.type + } + })) + return propertyColumnsToSort; + }; + var columnsLast = []; + columnsLast.push({ + label : '---------------', + property : null, + filterable: false, + sortable : false + }); + columnsLast.push({ + label : 'Parents', + property : 'parents', + filterable : true, + sortable : false + }); + columnsLast.push({ + label : 'Registrator', + property : 'registrator', + exportableProperty : DataGridExportOptions.EXPORTABLE_FIELD.REGISTRATOR, + filterable : true, + sortable : true + }); + columnsLast.push({ + label : 'Registration Date', + property : 'registrationDate', + exportableProperty : DataGridExportOptions.EXPORTABLE_FIELD.REGISTRATION_DATE, + filterable : true, + sortable : true, + renderFilter : function(params) { + return FormUtil.renderDateRangeGridFilter(params, "TIMESTAMP") + } + }); + columnsLast.push({ + label : 'Modifier', + property : 'modifier', + exportableProperty : DataGridExportOptions.EXPORTABLE_FIELD.MODIFIER, + filterable : true, + sortable : true + }); + columnsLast.push({ + label : 'Modification Date', + property : 'modificationDate', + exportableProperty : DataGridExportOptions.EXPORTABLE_FIELD.MODIFICATION_DATE, + filterable : true, + sortable : true, + renderFilter : function(params) { + return FormUtil.renderDateRangeGridFilter(params, "TIMESTAMP") + } + }); + var dataGrid = new DataGridController(null, columns, columnsLast, dynamicColumnsFunc, getDataList, + null, false, "DATA_SETS_OF_SAMPLE", false, + { + fileFormat: DataGridExportOptions.FILE_FORMAT.TSV, + filePrefix: 'data-sets' + }, + 90); + dataGrid.init($dataSetContainer); + } + this._expandAll = function() { var _this = this; var tree = $("#filestree").fancytree("getTree"); diff --git a/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ExperimentForm/ExperimentFormView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ExperimentForm/ExperimentFormView.js index 49bdfc87d797ad7efcd6f5171eb3889c919e99fd..78ac43ea3703abdd4c04c9b7acc85445f4c8ee69 100644 --- a/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ExperimentForm/ExperimentFormView.js +++ b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ExperimentForm/ExperimentFormView.js @@ -281,6 +281,9 @@ function ExperimentFormView(experimentFormController, experimentFormModel) { $formColumn.append(this._createSamplesSection(hideShowOptionsModel)); } + // Data sets section + $formColumn.append($("<div>", {'id':'data-sets-section'})) + // // Identification Info on not Create // @@ -341,7 +344,8 @@ function ExperimentFormView(experimentFormController, experimentFormModel) { // Dataset Viewer var $dataSetViewerContainer = new $('<div>', { id : "dataSetViewerContainer", style: "overflow: scroll; margin-top: 5px; padding-top: 5px; border-top: 1px dashed #ddd; " }); mainController.sideMenu.addSubSideMenu($dataSetViewerContainer); - this._experimentFormModel.dataSetViewer = new DataSetViewerController("dataSetViewerContainer", profile, this._experimentFormModel.v3_experiment, mainController.serverFacade, profile.getDefaultDataStoreURL(), null, false, true); + this._experimentFormModel.dataSetViewer = new DataSetViewerController("dataSetViewerContainer", profile, this._experimentFormModel.v3_experiment, mainController.serverFacade, + profile.getDefaultDataStoreURL(), null, false, true, this._experimentFormModel.mode); this._experimentFormModel.dataSetViewer.init(); } } diff --git a/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/SampleFormView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/SampleFormView.js index 1218fe7c8f01a31b7e5f88568098d5674bf73b20..fa2e86a0b1074b017b299c28cd15d8e4e672adac 100644 --- a/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/SampleFormView.js +++ b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/SampleFormView.js @@ -559,6 +559,9 @@ function SampleFormView(sampleFormController, sampleFormModel) { storageListController.init(storageListContainer); } + // Data sets section + $formColumn.append($("<div>", {'id':'data-sets-section'})) + // // Extra Content // @@ -616,7 +619,8 @@ function SampleFormView(sampleFormController, sampleFormModel) { // Dataset Viewer var $dataSetViewerContainer = new $('<div>', { id : "dataSetViewerContainer", style: "overflow: scroll; margin-top: 5px; padding-top: 5px; border-top: 1px dashed #ddd; " }); mainController.sideMenu.addSubSideMenu($dataSetViewerContainer); - this._sampleFormModel.dataSetViewer = new DataSetViewerController("dataSetViewerContainer", profile, this._sampleFormModel.sample, mainController.serverFacade, profile.getDefaultDataStoreURL(), this._sampleFormModel.datasets, false, true); + this._sampleFormModel.dataSetViewer = new DataSetViewerController("dataSetViewerContainer", profile, this._sampleFormModel.sample, mainController.serverFacade, + profile.getDefaultDataStoreURL(), this._sampleFormModel.datasets, false, true, this._sampleFormModel.mode); this._sampleFormModel.dataSetViewer.init(); }