Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
f438577
Luminex Levey-Jennings report convert tracking data grid from Ext4 gr…
cnathe Mar 22, 2023
b1e38da
Luminex Levey-Jennings plot data query split to get metric data and g…
cnathe Mar 22, 2023
12f2251
Update plot data and grid data after guide set change
cnathe Mar 23, 2023
b762995
Add back "Apply Guide Set" button to the dataRegion buttonBar header …
cnathe Mar 23, 2023
409c47a
Add back "View 4PL Curves" button to the dataRegion buttonBar header …
cnathe Mar 23, 2023
be06562
Data grid styling fix to remove extContainer styles from wrapping com…
cnathe Mar 23, 2023
eaff006
Add check for selected rows on button click
cnathe Mar 23, 2023
8934ffd
Hide 4PL/5PL columns from apply guide set grids when not in use
cnathe Mar 24, 2023
ca8ed82
Round 1 of selenium test fixes for Luminex LJ grid changes
cnathe Mar 24, 2023
6991cc5
LJ grid QC flag checking test fixes
cnathe Mar 24, 2023
f02ce78
LJ grid update to select a row based on a column value
cnathe Mar 24, 2023
9ebedde
LJ report page should start loading data on page load instead of wait…
cnathe Mar 24, 2023
615fc40
missed from previous commit
cnathe Mar 24, 2023
ccee05a
LuminexGuideSetTest updates to grid cell value number precision
cnathe Mar 24, 2023
e063bef
LJ Plot x-axis label to use AssayId if NotebookNo does not exist
cnathe Mar 27, 2023
e955c3b
LuminexGuideSetTest updates for QC Flag checks in LJ grid after guide…
cnathe Mar 27, 2023
3d2ea93
LuminexGuideSetTest updates for QC Flag checks in LJ grid after guide…
cnathe Mar 27, 2023
89257cf
LuminexGuideSetTest updates for QC Flag checks in LJ grid after guide…
cnathe Mar 27, 2023
7ed82c8
Don't assume '/labkey' Tomcat context path
labkey-tchad Mar 27, 2023
245cf9d
DefaultCols should use "L-J Plots" instead of "LJPlots"
cnathe Mar 28, 2023
96830f9
add containerFilter to selectRows for the L-J Plots column window
cnathe Mar 28, 2023
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 @@ -140,7 +140,7 @@ public void renderGridCellContents(RenderContext ctx, Writer out) throws IOExcep
int analyte = (int)ctx.get("analyte");
int singlePointControl = (int)ctx.get("singlePointControl");

String linkTag = "<a href=\"javascript:LABKEY.LeveyJenningsPlotHelper.getLeveyJenningsPlotWindow(%d,%d,%d,'%s','SinglePointControl')\">";
String linkTag = "<a href=\"javascript:LABKEY.LeveyJenningsPlotHelper.getLeveyJenningsPlotWindow(%d,%d,%d,'%s','SinglePoint')\">";

out.write( String.format(linkTag, protocolId, analyte, singlePointControl, "MFI") );
out.write( String.format("<img src='%s' width='27' height='20'>", AppProps.getInstance().getContextPath() + "/luminex/ljPlotIcon.png") );
Expand All @@ -165,7 +165,7 @@ public boolean isFilterable()
// set the default columns for this table to be those used for the QC Report
List<FieldKey> defaultCols = new ArrayList<>();
defaultCols.add(FieldKey.fromParts("SinglePointControl", "Run", "Name"));
defaultCols.add(FieldKey.fromParts("LJPlots"));
defaultCols.add(FieldKey.fromParts("L-J Plots"));
defaultCols.add(FieldKey.fromParts("SinglePointControl", "Name"));
defaultCols.add(FieldKey.fromParts("SinglePointControl", "Run", "Batch", "Network"));
defaultCols.add(FieldKey.fromParts("SinglePointControl", "Run", "Batch", "CustomProtocol"));
Expand All @@ -180,7 +180,7 @@ public boolean isFilterable()
defaultCols.add(FieldKey.fromParts("Analyte", "Properties", "LotNumber"));
defaultCols.add(FieldKey.fromParts("GuideSet", "Created"));
defaultCols.add(FieldKey.fromParts("AverageFiBkgd"));
defaultCols.add(FieldKey.fromParts("AverageFiBkgdQCFlagsEnabled"));
defaultCols.add(FieldKey.fromParts("SinglePointControl", "Run", "QCFlags"));
setDefaultVisibleColumns(defaultCols);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -141,7 +141,7 @@ public void renderGridCellContents(RenderContext ctx, Writer out) throws IOExcep
int analyte = (int)ctx.get("analyte");
int titration = (int)ctx.get("titration");

String jsFuncCall = "javascript:LABKEY.LeveyJenningsPlotHelper.getLeveyJenningsPlotWindow(%d,%d,%d,'%s')";
String jsFuncCall = "javascript:LABKEY.LeveyJenningsPlotHelper.getLeveyJenningsPlotWindow(%d,%d,%d,'%s','Titration')";

NavTree ljPlotsNav = new NavTree("Levey-Jennings Plot Menu");
ljPlotsNav.setImage(AppProps.getInstance().getContextPath() + "/luminex/ljPlotIcon.png", 27, 20);
Expand Down Expand Up @@ -174,7 +174,7 @@ public boolean isFilterable()
// set the default columns for this table to be those used for the QC Report
List<FieldKey> defaultCols = new ArrayList<>();
defaultCols.add(FieldKey.fromParts("Titration", "Run", "Name"));
defaultCols.add(FieldKey.fromParts("LJPlots"));
defaultCols.add(FieldKey.fromParts("L-J Plots"));
defaultCols.add(FieldKey.fromParts("Titration"));
defaultCols.add(FieldKey.fromParts("Titration", "Standard"));
defaultCols.add(FieldKey.fromParts("Titration", "QCControl"));
Expand All @@ -196,6 +196,7 @@ public boolean isFilterable()
defaultCols.add(FieldKey.fromParts(StatsService.CurveFitType.FIVE_PARAMETER.getLabel() + "CurveFit", "EC50"));
defaultCols.add(FieldKey.fromParts("MaxFI"));
defaultCols.add(FieldKey.fromParts("TrapezoidalCurveFit", "AUC"));
defaultCols.add(FieldKey.fromParts("Titration", "Run", "QCFlags"));
setDefaultVisibleColumns(defaultCols);
}

Expand Down
54 changes: 32 additions & 22 deletions luminex/src/org/labkey/luminex/view/leveyJenningsReport.jsp
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@
*/

%>
<%@ page import="org.labkey.api.util.PageFlowUtil" %>
<%@ page import="org.labkey.api.view.HttpView" %>
<%@ page import="org.labkey.api.view.JspView" %>
<%@ page import="org.labkey.api.view.template.ClientDependencies" %>
Expand All @@ -41,6 +40,13 @@
LeveyJenningsForm bean = me.getModelBean();
%>

<style>
.lj-report-title {
font-size: 110%;
font-weight: bold;
}
</style>

<div class="leveljenningsreport">
<table>
<tr>
Expand All @@ -58,7 +64,7 @@

var $h = Ext.util.Format.htmlEncode;

// the default number of records to return for the report when no start and end date are provided
// the default number of records to return for the report when no filters have been applied
var defaultRowSize = 30;

// local variables for storing the selected graph parameters
Expand Down Expand Up @@ -189,15 +195,7 @@
controlType: _controlType,
assayName: _protocolName,
listeners: {
'applyGraphBtnClicked': function(analyte, isotype, conjugate){
_analyte = analyte;
_isotype = isotype;
_conjugate = conjugate;

guideSetPanel.graphParamsSelected(analyte, isotype, conjugate);
trendPlotPanel.graphParamsSelected(analyte, isotype, conjugate);
trackingDataPanel.graphParamsSelected(analyte, isotype, conjugate, null, null);
},
'applyGraphBtnClicked': graphParamsSelected,
'graphParamsChanged': function(){
guideSetPanel.disable();
trendPlotPanel.disable();
Expand Down Expand Up @@ -231,7 +229,7 @@
'currentGuideSetUpdated': function() {
guideSetPanel.toggleExportBtn(false);
trendPlotPanel.setTrendPlotLoading();
trackingDataPanel.graphParamsSelected(_analyte, _isotype, _conjugate, trendPlotPanel.getStartDate(), trendPlotPanel.getEndDate());
trackingDataPanel.graphParamsSelected(_analyte, _isotype, _conjugate, true);
},
'exportPdfBtnClicked': function() {
trendPlotPanel.exportToPdf();
Expand All @@ -255,10 +253,6 @@
has4PLCurveFit: _has4PLCurveFit,
has5PLCurveFit: _has5PLCurveFit,
listeners: {
'reportFilterApplied': function(startDate, endDate, network, networkAny, protocol, protocolAny) {
trendPlotPanel.setTrendPlotLoading();
trackingDataPanel.graphParamsSelected(_analyte, _isotype, _conjugate, startDate, endDate, network, networkAny, protocol, protocolAny);
},
'togglePdfBtn': function(toEnable) {
guideSetPanel.toggleExportBtn(toEnable);
}
Expand All @@ -268,7 +262,6 @@
// initialize the grid panel to display the tracking data
var trackingDataPanel = new LABKEY.LeveyJenningsTrackingDataPanel({
renderTo: 'trackingDataPanel',
cls: 'extContainer',
controlName: _controlName,
controlType: _controlType,
assayName: _protocolName,
Expand All @@ -281,14 +274,31 @@
'appliedGuideSetUpdated': function() {
guideSetPanel.toggleExportBtn(false);
trendPlotPanel.setTrendPlotLoading();
trackingDataPanel.graphParamsSelected(_analyte, _isotype, _conjugate, trendPlotPanel.getStartDate(), trendPlotPanel.getEndDate(),
trendPlotPanel.network, trendPlotPanel.networkAny, trendPlotPanel.protocol, trendPlotPanel.protocolAny);
trackingDataPanel.graphParamsSelected(_analyte, _isotype, _conjugate, true);
},
'plotDataLoading': function(store, hasGuideSetUpdates) {
trendPlotPanel.plotDataLoading(store, hasGuideSetUpdates);
},
'plotDataLoaded': function(store, hasReportFilter) {
trendPlotPanel.plotDataLoaded(store, hasReportFilter);
},
'trackingDataLoaded': function(store) {
trendPlotPanel.trackingDataLoaded(store);
}
}
});

function graphParamsSelected(analyte, isotype, conjugate){
_analyte = analyte;
_isotype = isotype;
_conjugate = conjugate;

guideSetPanel.graphParamsSelected(analyte, isotype, conjugate);
trendPlotPanel.graphParamsSelected(analyte, isotype, conjugate);
trackingDataPanel.graphParamsSelected(analyte, isotype, conjugate);
}

var urlParams = LABKEY.ActionURL.getParameters();
if (urlParams.hasOwnProperty("analyte") && urlParams.hasOwnProperty("isotype") && urlParams.hasOwnProperty("conjugate")) {
graphParamsSelected(urlParams.analyte, urlParams.isotype, urlParams.conjugate);
}
}

Ext.onReady(init);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -208,10 +208,10 @@ public void verifyQCFlagToggling()
{
// note: this uses the run based guide set

// simular to verifyHighlightUpdatesAfterQCFlagChange (but not quite the same... not sure how this other place works)
// similar to verifyHighlightUpdatesAfterQCFlagChange (but not quite the same... not sure how this other place works)
_guideSetHelper.goToLeveyJenningsGraphPage(TEST_ASSAY_LUM, CONTROL_NAME);
_guideSetHelper.setUpLeveyJenningsGraphParams(RUN_BASED_ANALYTE);
final String plate1_AUC = "64608.73";
final String plate1_AUC = "64608.734";
final String plate2_AUC = "61889.88";

validateFlaggedForQC(plate1_AUC, plate2_AUC);
Expand Down Expand Up @@ -244,23 +244,17 @@ public void verifyQCFlagToggling()

private void saveGuideSetParameters()
{
// Wait for grid to refresh before checking QC flags
doAndWaitForElementToRefresh(() -> click(Ext4Helper.Locators.windowButton(GUIDE_SET_WINDOW_NAME, "Save")),
Locator.tagWithId("div", "trackingDataPanel").append(Locator.byClass("x-grid3-row-table")), shortWait());
click(Ext4Helper.Locators.windowButton(GUIDE_SET_WINDOW_NAME, "Save"));
_guideSetHelper.waitForGuideSetExtMaskToDisappear();
}

private void validateFlaggedForQC(String... texts)
{
// NOTE: We sometimes get a bad value here which we are investigating. For now the test will ignore such a value.
List<String> badVals = Arrays.asList("8.08", "7.90");

Locator redCellLoc = Locator.tagWithId("div", "trackingDataPanel").append(Locator.tagWithClass("div", "x-grid3-cell-inner").withPredicate("contains(@style,'red')"));
List<WebElement> qcFlaggedCells = redCellLoc.findElements(getDriver());
Locator redCellLoc = Locator.tagWithClass("table", "labkey-data-region").append(Locator.xpath("//span[contains(@style,'red')]"));
List<WebElement> qcFlaggedCells = isElementPresent(redCellLoc) ? redCellLoc.findElements(getDriver()) : Collections.emptyList();

List<String> expectedQcFlaggedValues = new ArrayList<>(Arrays.asList(texts));
List<String> qcFlaggedValues = getTexts(qcFlaggedCells);
qcFlaggedValues.removeAll(badVals);

Collections.sort(expectedQcFlaggedValues);
Collections.sort(qcFlaggedValues);
Expand Down
Loading