Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -236,17 +236,17 @@ public List<TabbedReportItem> getTabbedReportItems(Container c, User u)
TabbedReportItem analyses = new QueryTabbedReportItem(cache, this, SequenceAnalysisSchema.SCHEMA_NAME, SequenceAnalysisSchema.TABLE_ANALYSES, "Sequence Analyses", category);
analyses.setSubjectIdFieldKey(FieldKey.fromString("readset/subjectid"));
analyses.setSampleDateFieldKey(FieldKey.fromString("readset/sampledate"));
analyses.setAllProjectsFieldKey(FieldKey.fromString("readset/allProjectsPivot"));
analyses.setOverlappingProjectsFieldKey(FieldKey.fromString("readset/overlappingProjectsPivot"));
analyses.setKeyOverride("allProjectsFieldName", FieldKey.fromString("readset/allProjectsPivot"));
analyses.setKeyOverride("overlappingProjectsFieldName", FieldKey.fromString("readset/overlappingProjectsPivot"));
analyses.setOwnerKey(owner.getPropertyManagerKey());
analyses.setVisible(owner.isVisible(c, u));
items.add(analyses);

TabbedReportItem outputs = new QueryTabbedReportItem(cache, this, SequenceAnalysisSchema.SCHEMA_NAME, SequenceAnalysisSchema.TABLE_OUTPUTFILES, "Sequence Outputs", category);
outputs.setSubjectIdFieldKey(FieldKey.fromString("readset/subjectid"));
outputs.setSampleDateFieldKey(FieldKey.fromString("readset/sampledate"));
outputs.setAllProjectsFieldKey(FieldKey.fromString("readset/allProjectsPivot"));
outputs.setOverlappingProjectsFieldKey(FieldKey.fromString("readset/overlappingProjectsPivot"));
outputs.setKeyOverride("allProjectsFieldName", FieldKey.fromString("readset/allProjectsPivot"));
outputs.setKeyOverride("overlappingProjectsFieldName", FieldKey.fromString("readset/overlappingProjectsPivot"));
outputs.setOwnerKey(owner.getPropertyManagerKey());
outputs.setVisible(owner.isVisible(c, u));
items.add(outputs);
Expand Down
127 changes: 127 additions & 0 deletions Studies/resources/web/studies/panel/StudiesFilterType.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,127 @@
Ext4.define('Laboratory.panel.StudiesFilterType', {
extend: 'LDK.panel.AbstractFilterType',
alias: 'widget.studies-filtertype',

statics: {
filterName: 'study',
label: 'Studies'
},

initComponent: function(){
this.items = this.getItems();

this.callParent();
},

getItems: function(){
var ctx = this.filterContext;
var toAdd = [];

toAdd.push({
width: 200,
html: 'Choose Study:',
style: 'margin-bottom:10px'
});

toAdd.push({
xtype: 'panel',
items: [{
xtype: 'combo',
width: 265,
itemId: 'studyField',
displayField: 'studyName',
valueField: 'studyName',
multiSelect: false,
store: {
type: 'labkey-store',
schemaName: 'studies',
queryName: 'studies',
autoLoad: true
},
value: Ext4.isArray(ctx.studies) ? ctx.studies.join(';') : ctx.studies
}]
});

return toAdd;
},

getFilters: function(){
return {
studies: this.getStudies()
}
},

getFilterArray: function(tab){
var filterArray = {
removable: [],
nonRemovable: []
};

if (this.reportQCStates?.length) {
filterArray.nonRemovable.push(LABKEY.Filter.create('qcstate/label', this.reportQCStates, LABKEY.Filter.Types.EQUALS_ONE_OF));
}

var filters = this.getFilters();
var report = tab.report;
var studyFieldName = report.additionalFieldKeys?.studyAssignmentFieldKey;
if (!studyFieldName){
LDK.Utils.logToServer({
message: 'A TabbedReport is attempting to load a study filter when it should have been stopped upstream',
level: 'ERROR',
includeContext: true
});

return filterArray;
}

var studyName = filters.studies[0];
filterArray.nonRemovable.push(LABKEY.Filter.create(studyFieldName, studyName, LABKEY.Filter.Types.CONTAINS));

return filterArray;
},

isValid: function(){
var val = this.down('#studyField').getValue();
if (!val || !val.length){
return false;
}

return true;
},

getFilterInvalidMessage: function(){
return 'Error: Must choose a study';
},

validateReportForFilterType: function(report){
if (!report.additionalFieldKeys?.studyAssignmentFieldKey){
return 'This report cannot be used with the selected filter type, because the report does not contain a field with study assignment information';
}

return null;
},

getTitle: function(){
var studies = this.getStudies();

if (studies && studies.length){
return studies.join(', ');
}

return '';
},

getStudies: function(){
var projectArray = this.down('#studyField').getValue();
if (projectArray && !Ext4.isArray(projectArray)) {
projectArray = [projectArray];
}

if (projectArray && projectArray.length > 0){
projectArray = Ext4.unique(projectArray);
projectArray.sort();
}

return projectArray;
}
});
5 changes: 4 additions & 1 deletion Studies/src/org/labkey/studies/StudiesModule.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,17 @@
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.labkey.api.data.Container;
import org.labkey.api.laboratory.LaboratoryService;
import org.labkey.api.ldk.ExtendedSimpleModule;
import org.labkey.api.module.Module;
import org.labkey.api.module.ModuleContext;
import org.labkey.api.query.DefaultSchema;
import org.labkey.api.query.QuerySchema;
import org.labkey.api.security.roles.RoleManager;
import org.labkey.api.studies.StudiesService;
import org.labkey.studies.query.StudiesUserSchema;
import org.labkey.api.studies.security.StudiesDataAdminRole;
import org.labkey.studies.query.StudiesUserSchema;
import org.labkey.studies.study.StudiesFilterProvider;
import org.labkey.studies.study.StudyEnrollmentEventProvider;

import java.util.Collection;
Expand Down Expand Up @@ -42,6 +44,7 @@ protected void init()
StudiesService.setInstance(StudiesServiceImpl.get());
StudiesService.get().registerEventProvider(new StudyEnrollmentEventProvider());
RoleManager.registerRole(new StudiesDataAdminRole());
LaboratoryService.get().registerTabbedReportFilterProvider(new StudiesFilterProvider());
}

@Override
Expand Down
73 changes: 73 additions & 0 deletions Studies/src/org/labkey/studies/study/StudiesFilterProvider.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
package org.labkey.studies.study;

import org.jetbrains.annotations.NotNull;
import org.labkey.api.data.ColumnInfo;
import org.labkey.api.data.TableInfo;
import org.labkey.api.laboratory.TabbedReportItem;
import org.labkey.api.laboratory.query.TabbedReportFilterProvider;
import org.labkey.api.module.Module;
import org.labkey.api.module.ModuleLoader;
import org.labkey.api.query.FieldKey;
import org.labkey.api.util.PageFlowUtil;
import org.labkey.api.view.template.ClientDependency;
import org.labkey.studies.StudiesModule;

import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class StudiesFilterProvider implements TabbedReportFilterProvider
{
@Override
public Module getOwningModule()
{
return ModuleLoader.getInstance().getModule(StudiesModule.class);
}

@Override
public Collection<ClientDependency> getClientDependencies()
{
return List.of(ClientDependency.fromPath("studies/panel/StudiesFilterType.js"));
}

@Override
public String getXType()
{
return "studies-filtertype";
}

@Override
public String getLabel()
{
return "Study";
}

@Override
public String getInputValue()
{
return "studies";
}

@Override
public @NotNull Map<String, FieldKey> getAdditionalFieldKeys(TableInfo ti, TabbedReportItem tri, Map<String, FieldKey> overrides)
{
Map<String, FieldKey> ret = new HashMap<>();

if (overrides.get("studyAssignmentFieldKey") == null)
{
FieldKey subject = tri.getSubjectIdFieldKey();
if (subject != null)
{
subject = subject.getParent();
}

FieldKey fk = FieldKey.fromString(subject, "projects/allStudies");
Map<FieldKey, ColumnInfo> colMap = tri.getQueryCache().getColumns(ti, PageFlowUtil.set(fk));
if (colMap.containsKey(fk))
ret.put("studyAssignmentFieldKey", colMap.get(fk).getFieldKey());
}

return ret;
}
}
8 changes: 4 additions & 4 deletions singlecell/src/org/labkey/singlecell/SingleCellProvider.java
Original file line number Diff line number Diff line change
Expand Up @@ -173,15 +173,15 @@ public List<TabbedReportItem> getTabbedReportItems(Container c, User u)
TabbedReportItem sorts = new QueryTabbedReportItem(cache, this, SingleCellSchema.NAME, SingleCellSchema.TABLE_SORTS, "Single Cell Sorts", category);
sorts.setSubjectIdFieldKey(FieldKey.fromString("sampleId/subjectId"));
sorts.setSampleDateFieldKey(FieldKey.fromString("sampleId/date"));
sorts.setAllProjectsFieldKey(FieldKey.fromString("sampleId/allProjectsPivot"));
sorts.setOverlappingProjectsFieldKey(FieldKey.fromString("sampleId/overlappingProjectsPivot"));
sorts.setKeyOverride("allProjectsFieldName", FieldKey.fromString("sampleId/allProjectsPivot"));
sorts.setKeyOverride("overlappingProjectsFieldName", FieldKey.fromString("sampleId/overlappingProjectsPivot"));
items.add(sorts);

TabbedReportItem cdnas = new QueryTabbedReportItem(cache, this, SingleCellSchema.NAME, SingleCellSchema.TABLE_CDNAS, "Single Cell Libraries", category);
cdnas.setSubjectIdFieldKey(FieldKey.fromString("sortId/sampleId/subjectId"));
cdnas.setSampleDateFieldKey(FieldKey.fromString("sortId/sampleId/date"));
cdnas.setAllProjectsFieldKey(FieldKey.fromString("sortId/sampleId/allProjectsPivot"));
cdnas.setOverlappingProjectsFieldKey(FieldKey.fromString("sortId/sampleId/overlappingProjectsPivot"));
cdnas.setKeyOverride("allProjectsFieldName", FieldKey.fromString("sortId/sampleId/allProjectsPivot"));
cdnas.setKeyOverride("overlappingProjectsFieldName", FieldKey.fromString("sortId/sampleId/overlappingProjectsPivot"));
items.add(cdnas);

return items;
Expand Down