Skip to content
Open
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 @@ -31,29 +31,13 @@ class GeneDiseaseEvidenceSummaryCaseControl extends Component {
}
}

/**
* Method to assemble the authors list for the given evidence
* @param {object} evidence - scored evidence and its associated case-control evidence
*/
getEvidenceAuthors(evidence) {
let authors;
if (evidence.authors && evidence.authors.length) {
if (evidence.authors.length > 1) {
authors = evidence.authors[0] + ', et al.';
} else {
authors = evidence.authors[0];
}
}
return authors;
}

/**
* Method to render individual table row of the logged-in user's scored evidence
* @param {object} evidence - scored evidence and its associated case-control evidence
* @param {number} key - unique key
*/
renderCaseControlEvidence(evidence, key) {
let authors = this.getEvidenceAuthors(evidence);
let authors = this.props.getEvidenceAuthors(evidence);

return (
<tr key={key} className="scored-case-control-evidence">
Expand Down Expand Up @@ -142,38 +126,9 @@ class GeneDiseaseEvidenceSummaryCaseControl extends Component {
return parseFloat(totalScore).toFixed(2);
}

/**
* Sort table rows given a list of evidence and column name
* @param {array} evidenceList - A list of evidence items
* @param {string} colName - sort by column name
*/
sortListbyColName(evidenceList, colName) {
let sortedList = [];
let dir = this.state.reversed ? -1 : 1;
if (evidenceList.length) {
switch (colName) {
case 'reference':
sortedList = evidenceList.sort((x,y) => {
let referenceX = this.getEvidenceAuthors(x) + x.pubYear + x.pmid;
let referenceY = this.getEvidenceAuthors(y) + y.pubYear + y.pmid;
return (referenceX.toLowerCase().localeCompare(referenceY.toLowerCase()) * dir);
});
break;
case 'studyType':
sortedList = evidenceList.sort((x, y) => x[colName].toLowerCase().localeCompare(y[colName].toLowerCase()) * dir);
break;
default:
sortedList = evidenceList;
break;
}
}
return sortedList;
}

render() {
const caseControlEvidenceList = this.props.caseControlEvidenceList;
let sortedEvidenceList = this.state.mounted ? this.sortListbyColName(caseControlEvidenceList, this.state.sortCol) : caseControlEvidenceList;
let self = this;
let sortedEvidenceList = this.state.mounted ? this.props.sortListByColName(caseControlEvidenceList, this.state.sortCol, this.state.reversed) : caseControlEvidenceList;
let sortIconClass = {reference: 'tcell-sort'};
sortIconClass[this.state.sortCol] = this.state.reversed ? 'tcell-desc' : 'tcell-asc';

Expand All @@ -188,7 +143,7 @@ class GeneDiseaseEvidenceSummaryCaseControl extends Component {
<thead>
<tr>
<th rowSpan="2">Label</th>
<th rowSpan="2" onClick={(e) => self.handleClickHeader(e, 'reference')}>Reference (PMID)<span className={sortIconClass.reference}></span></th>
<th rowSpan="2" onClick={(e) => this.handleClickHeader(e, 'reference')}>Reference (PMID)<span className={sortIconClass.reference}></span></th>
<th rowSpan="2">Disease (Case)</th>
<th rowSpan="2">Study type</th>
<th rowSpan="2">Detection method (Case)</th>
Expand All @@ -209,7 +164,7 @@ class GeneDiseaseEvidenceSummaryCaseControl extends Component {
</thead>
<tbody>
{sortedEvidenceList.map((item, i) => {
return (self.renderCaseControlEvidence(item, i));
return (this.renderCaseControlEvidence(item, i));
})}
<tr>
<td colSpan="13" className="total-score-label">Total points:</td>
Expand All @@ -230,7 +185,9 @@ class GeneDiseaseEvidenceSummaryCaseControl extends Component {

GeneDiseaseEvidenceSummaryCaseControl.propTypes = {
caseControlEvidenceList: PropTypes.array,
hpoTerms: PropTypes.object
hpoTerms: PropTypes.object,
getEvidenceAuthors: PropTypes.func,
sortListByColName: PropTypes.func
};

export default GeneDiseaseEvidenceSummaryCaseControl;
export default GeneDiseaseEvidenceSummaryCaseControl;
64 changes: 10 additions & 54 deletions src/clincoded/static/components/gene_disease_summary/case_level.js
Original file line number Diff line number Diff line change
Expand Up @@ -32,29 +32,13 @@ class GeneDiseaseEvidenceSummaryCaseLevel extends Component {
}
}

/**
* Method to assemble the authors list for the given evidence
* @param {object} evidence - scored evidence and its associated case-control evidence
*/
getEvidenceAuthors(evidence) {
let authors;
if (evidence.authors && evidence.authors.length) {
if (evidence.authors.length > 1) {
authors = evidence.authors[0] + ', et al.';
} else {
authors = evidence.authors[0];
}
}
return authors;
}

/**
* Method to render individual table row of the logged-in user's scored evidence
* @param {object} evidence - scored evidence and its associated case-control evidence
* @param {number} key - unique key
*/
renderCaseLevelEvidence(evidence, key) {
let authors = this.getEvidenceAuthors(evidence);
let authors = this.props.getEvidenceAuthors(evidence);

return (
<tr key={key} className="scored-case-level-evidence">
Expand Down Expand Up @@ -166,39 +150,9 @@ class GeneDiseaseEvidenceSummaryCaseLevel extends Component {
return parseFloat(totalScore).toFixed(2);
}

/**
* Sort table rows given a list of evidence and column name
* @param {array} evidenceList - A list of evidence items
* @param {string} colName - sort by column name
*/
sortListbyColName(evidenceList, colName) {
let sortedList = [];
let dir = this.state.reversed ? -1 : 1;
if (evidenceList.length) {
switch (colName) {
case 'reference':
sortedList = evidenceList.sort((x,y) => {
let referenceX = this.getEvidenceAuthors(x) + x.pubYear + x.pmid;
let referenceY = this.getEvidenceAuthors(y) + y.pubYear + y.pmid;
return (referenceX.toLowerCase().localeCompare(referenceY.toLowerCase()) * dir);
});
break;
case 'variantType':
case 'scoreStatus':
sortedList = evidenceList.sort((x, y) => x[colName].toLowerCase().localeCompare(y[colName].toLowerCase()) * dir);
break;
default:
sortedList = evidenceList;
break;
}
}
return sortedList;
}

render() {
const caseLevelEvidenceList = this.props.caseLevelEvidenceList;
let sortedEvidenceList = this.state.mounted ? this.sortListbyColName(caseLevelEvidenceList, this.state.sortCol) : caseLevelEvidenceList;
let self = this;
let sortedEvidenceList = this.state.mounted ? this.props.sortListByColName(caseLevelEvidenceList, this.state.sortCol, this.state.reversed) : caseLevelEvidenceList;
let sortIconClass = {variantType: 'tcell-sort', reference: 'tcell-sort', scoreStatus: 'tcell-sort'};
sortIconClass[this.state.sortCol] = this.state.reversed ? 'tcell-desc' : 'tcell-asc';

Expand All @@ -213,17 +167,17 @@ class GeneDiseaseEvidenceSummaryCaseLevel extends Component {
<thead>
<tr>
<th rowSpan="2">Label</th>
<th rowSpan="2" onClick={(e) => self.handleClickHeader(e, 'variantType')}>Variant type<span className={sortIconClass.variantType}></span></th>
<th rowSpan="2" onClick={(e) => this.handleClickHeader(e, 'variantType')}>Variant type<span className={sortIconClass.variantType}></span></th>
<th rowSpan="2">Variant</th>
<th rowSpan="2" onClick={(e) => self.handleClickHeader(e, 'reference')}>Reference<span className={sortIconClass.reference}></span></th>
<th rowSpan="2" onClick={(e) => this.handleClickHeader(e, 'reference')}>Reference<span className={sortIconClass.reference}></span></th>
<th rowSpan="2">Proband sex</th>
<th rowSpan="2">Proband age</th>
<th rowSpan="2">Proband ethnicity</th>
<th rowSpan="2">Proband phenotypes</th>
<th colSpan="5">Segregations</th>
<th rowSpan="2">Proband previous testing</th>
<th rowSpan="2">Proband methods of detection</th>
<th rowSpan="2" onClick={(e) => self.handleClickHeader(e, 'scoreStatus')}>Score status<span className={sortIconClass.scoreStatus}></span></th>
<th rowSpan="2" onClick={(e) => this.handleClickHeader(e, 'scoreStatus')}>Score status<span className={sortIconClass.scoreStatus}></span></th>
<th rowSpan="2">Proband points (default points)</th>
<th rowSpan="2">Reason for changed score</th>
</tr>
Expand All @@ -237,7 +191,7 @@ class GeneDiseaseEvidenceSummaryCaseLevel extends Component {
</thead>
<tbody>
{sortedEvidenceList.map((item, i) => {
return (self.renderCaseLevelEvidence(item, i));
return (this.renderCaseLevelEvidence(item, i));
})}
<tr>
<td colSpan="16" className="total-score-label">Total points:</td>
Expand All @@ -258,7 +212,9 @@ class GeneDiseaseEvidenceSummaryCaseLevel extends Component {

GeneDiseaseEvidenceSummaryCaseLevel.propTypes = {
caseLevelEvidenceList: PropTypes.array,
hpoTerms: PropTypes.object
hpoTerms: PropTypes.object,
getEvidenceAuthors: PropTypes.func,
sortListByColName: PropTypes.func
};

export default GeneDiseaseEvidenceSummaryCaseLevel;
export default GeneDiseaseEvidenceSummaryCaseLevel;
Original file line number Diff line number Diff line change
Expand Up @@ -31,29 +31,13 @@ class GeneDiseaseEvidenceSummarySegregation extends Component {
}
}

/**
* Method to assemble the authors list for the given evidence
* @param {object} evidence - scored evidence and its associated case-control evidence
*/
getEvidenceAuthors(evidence) {
let authors;
if (evidence.authors && evidence.authors.length) {
if (evidence.authors.length > 1) {
authors = evidence.authors[0] + ', et al.';
} else {
authors = evidence.authors[0];
}
}
return authors;
}

/**
* Method to render individual table row of the logged-in user's segregation evidence
* @param {object} evidence - segregation evidence with LOD score but without proband
* @param {number} key - unique key
*/
renderSegregationEvidence(evidence, key) {
let authors = this.getEvidenceAuthors(evidence);
let authors = this.props.getEvidenceAuthors(evidence);

return (
<tr key={key} className="scored-segregation-evidence">
Expand Down Expand Up @@ -119,40 +103,9 @@ class GeneDiseaseEvidenceSummarySegregation extends Component {
return parseFloat(totalScore).toFixed(2);
}

/**
* Sort table rows given a list of evidence and column name
* @param {array} evidenceList - A list of evidence items
* @param {string} colName - sort by column name
*/
sortListbyColName(evidenceList, colName) {
let sortedList = [];
let dir = this.state.reversed ? -1 : 1;
if (evidenceList.length) {
switch (colName) {
case 'reference':
sortedList = evidenceList.sort((x,y) => {
let referenceX = this.getEvidenceAuthors(x) + x.pubYear + x.pmid;
let referenceY = this.getEvidenceAuthors(y) + y.pubYear + y.pmid;
return (referenceX.toLowerCase().localeCompare(referenceY.toLowerCase()) * dir);
});
break;
case 'lodScore':
sortedList = evidenceList.sort((x, y) =>
(x['segregationPublishedLodScore'] ? x['segregationPublishedLodScore'] : x['segregationEstimatedLodScore'] - y['segregationPublishedLodScore'] ? y['segregationPublishedLodScore'] : y['segregationEstimatedLodScore']) * dir
);
break;
default:
sortedList = evidenceList;
break;
}
}
return sortedList;
}

render() {
const segregationEvidenceList = this.props.segregationEvidenceList;
let sortedEvidenceList = this.state.mounted ? this.sortListbyColName(segregationEvidenceList, this.state.sortCol) : segregationEvidenceList;
let self = this;
let sortedEvidenceList = this.state.mounted ? this.props.sortListByColName(segregationEvidenceList, this.state.sortCol, this.state.reversed) : segregationEvidenceList;
let sortIconClass = {reference: 'tcell-sort'};
sortIconClass[this.state.sortCol] = this.state.reversed ? 'tcell-desc' : 'tcell-asc';

Expand All @@ -167,7 +120,7 @@ class GeneDiseaseEvidenceSummarySegregation extends Component {
<thead>
<tr>
<th>Label</th>
<th onClick={(e) => self.handleClickHeader(e, 'reference')}>Reference<span className={sortIconClass.reference}></span></th>
<th onClick={(e) => this.handleClickHeader(e, 'reference')}>Reference<span className={sortIconClass.reference}></span></th>
<th>Family ethnicity</th>
<th>Family phenotypes</th>
<th>Number of affected individuals</th>
Expand All @@ -179,7 +132,7 @@ class GeneDiseaseEvidenceSummarySegregation extends Component {
</thead>
<tbody>
{sortedEvidenceList.map((item, i) => {
return (self.renderSegregationEvidence(item, i));
return (this.renderSegregationEvidence(item, i));
})}
<tr>
<td colSpan="6" className="total-score-label">Total LOD score:</td>
Expand All @@ -200,7 +153,9 @@ class GeneDiseaseEvidenceSummarySegregation extends Component {

GeneDiseaseEvidenceSummarySegregation.propTypes = {
segregationEvidenceList: PropTypes.array,
hpoTerms: PropTypes.object
hpoTerms: PropTypes.object,
getEvidenceAuthors: PropTypes.func,
sortListByColName: PropTypes.func
};

export default GeneDiseaseEvidenceSummarySegregation;
export default GeneDiseaseEvidenceSummarySegregation;
Loading