From 97fd20644242416d830f350304ec860af2be4cd1 Mon Sep 17 00:00:00 2001 From: Gloria Cheung Date: Tue, 18 Jun 2019 11:41:45 -0700 Subject: [PATCH] Issue 1612 - clean up codes to share common codes. --- .../gene_disease_summary/case_control.js | 59 +++-------------- .../gene_disease_summary/case_level.js | 64 +++--------------- .../case_level_segregation.js | 61 +++-------------- .../gene_disease_summary/experimental.js | 66 ++++--------------- .../components/gene_disease_summary/index.js | 63 ++++++++++++++++-- 5 files changed, 95 insertions(+), 218 deletions(-) diff --git a/src/clincoded/static/components/gene_disease_summary/case_control.js b/src/clincoded/static/components/gene_disease_summary/case_control.js index 34cdb2604..adf5c218d 100644 --- a/src/clincoded/static/components/gene_disease_summary/case_control.js +++ b/src/clincoded/static/components/gene_disease_summary/case_control.js @@ -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 ( @@ -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'; @@ -188,7 +143,7 @@ class GeneDiseaseEvidenceSummaryCaseControl extends Component { Label - self.handleClickHeader(e, 'reference')}>Reference (PMID) + this.handleClickHeader(e, 'reference')}>Reference (PMID) Disease (Case) Study type Detection method (Case) @@ -209,7 +164,7 @@ class GeneDiseaseEvidenceSummaryCaseControl extends Component { {sortedEvidenceList.map((item, i) => { - return (self.renderCaseControlEvidence(item, i)); + return (this.renderCaseControlEvidence(item, i)); })} Total points: @@ -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; \ No newline at end of file +export default GeneDiseaseEvidenceSummaryCaseControl; diff --git a/src/clincoded/static/components/gene_disease_summary/case_level.js b/src/clincoded/static/components/gene_disease_summary/case_level.js index bf1ec98ac..780eeffe1 100644 --- a/src/clincoded/static/components/gene_disease_summary/case_level.js +++ b/src/clincoded/static/components/gene_disease_summary/case_level.js @@ -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 ( @@ -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'; @@ -213,9 +167,9 @@ class GeneDiseaseEvidenceSummaryCaseLevel extends Component { Label - self.handleClickHeader(e, 'variantType')}>Variant type + this.handleClickHeader(e, 'variantType')}>Variant type Variant - self.handleClickHeader(e, 'reference')}>Reference + this.handleClickHeader(e, 'reference')}>Reference Proband sex Proband age Proband ethnicity @@ -223,7 +177,7 @@ class GeneDiseaseEvidenceSummaryCaseLevel extends Component { Segregations Proband previous testing Proband methods of detection - self.handleClickHeader(e, 'scoreStatus')}>Score status + this.handleClickHeader(e, 'scoreStatus')}>Score status Proband points (default points) Reason for changed score @@ -237,7 +191,7 @@ class GeneDiseaseEvidenceSummaryCaseLevel extends Component { {sortedEvidenceList.map((item, i) => { - return (self.renderCaseLevelEvidence(item, i)); + return (this.renderCaseLevelEvidence(item, i)); })} Total points: @@ -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; \ No newline at end of file +export default GeneDiseaseEvidenceSummaryCaseLevel; diff --git a/src/clincoded/static/components/gene_disease_summary/case_level_segregation.js b/src/clincoded/static/components/gene_disease_summary/case_level_segregation.js index d204bf7c7..1872a70ed 100644 --- a/src/clincoded/static/components/gene_disease_summary/case_level_segregation.js +++ b/src/clincoded/static/components/gene_disease_summary/case_level_segregation.js @@ -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 ( @@ -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'; @@ -167,7 +120,7 @@ class GeneDiseaseEvidenceSummarySegregation extends Component { Label - self.handleClickHeader(e, 'reference')}>Reference + this.handleClickHeader(e, 'reference')}>Reference Family ethnicity Family phenotypes Number of affected individuals @@ -179,7 +132,7 @@ class GeneDiseaseEvidenceSummarySegregation extends Component { {sortedEvidenceList.map((item, i) => { - return (self.renderSegregationEvidence(item, i)); + return (this.renderSegregationEvidence(item, i)); })} Total LOD score: @@ -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; \ No newline at end of file +export default GeneDiseaseEvidenceSummarySegregation; diff --git a/src/clincoded/static/components/gene_disease_summary/experimental.js b/src/clincoded/static/components/gene_disease_summary/experimental.js index 709e1c6d7..4c41128cc 100644 --- a/src/clincoded/static/components/gene_disease_summary/experimental.js +++ b/src/clincoded/static/components/gene_disease_summary/experimental.js @@ -29,22 +29,6 @@ class GeneDiseaseEvidenceSummaryExperimental extends Component { this.setState({sortCol: sortCol, reversed: reversed}); } } - - /** - * 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 @@ -52,7 +36,7 @@ class GeneDiseaseEvidenceSummaryExperimental extends Component { * @param {number} key - unique key */ renderExperimentalEvidence(evidence, key) { - let authors = this.getEvidenceAuthors(evidence); + let authors = this.props.getEvidenceAuthors(evidence); return ( @@ -102,40 +86,10 @@ class GeneDiseaseEvidenceSummaryExperimental 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 'evidenceType': - case 'scoreStatus': - sortedList = evidenceList.sort((x, y) => x[colName].toLowerCase().localeCompare(y[colName].toLowerCase()) * dir); - break; - default: - sortedList = evidenceList; - break; - } - } - return sortedList; - } - render() { const experimentalEvidenceList = this.props.experimentalEvidenceList; - let sortedEvidenceList = this.state.mounted ? this.sortListbyColName(experimentalEvidenceList, this.state.sortCol) : experimentalEvidenceList; - let self = this; - let sortIconClass = {evidenceType: 'tcell-sort', reference: 'tcell-sort', evidenceType: 'tcell-sort', scoreStatus: 'tcell-sort'}; + let sortedEvidenceList = this.state.mounted ? this.props.sortListByColName(experimentalEvidenceList, this.state.sortCol, this.state.reversed) : experimentalEvidenceList; + let sortIconClass = {evidenceType: 'tcell-sort', reference: 'tcell-sort', scoreStatus: 'tcell-sort'}; sortIconClass[this.state.sortCol] = this.state.reversed ? 'tcell-desc' : 'tcell-asc'; return ( @@ -149,17 +103,17 @@ class GeneDiseaseEvidenceSummaryExperimental extends Component { Label - self.handleClickHeader(e, 'evidenceType')}>Experimental category - self.handleClickHeader(e, 'reference')}>Reference + this.handleClickHeader(e, 'evidenceType')}>Experimental category + this.handleClickHeader(e, 'reference')}>Reference Explanation - self.handleClickHeader(e, 'scoreStatus')}>Score status + this.handleClickHeader(e, 'scoreStatus')}>Score status Points (default points) Reason for changed score {sortedEvidenceList.map((item, i) => { - return (self.renderExperimentalEvidence(item, i)); + return (this.renderExperimentalEvidence(item, i)); })} Total points: @@ -187,7 +141,9 @@ class GeneDiseaseEvidenceSummaryExperimental extends Component { } GeneDiseaseEvidenceSummaryExperimental.propTypes = { - experimentalEvidenceList: PropTypes.array + experimentalEvidenceList: PropTypes.array, + getEvidenceAuthors: PropTypes.func, + sortListByColName: PropTypes.func }; -export default GeneDiseaseEvidenceSummaryExperimental; \ No newline at end of file +export default GeneDiseaseEvidenceSummaryExperimental; diff --git a/src/clincoded/static/components/gene_disease_summary/index.js b/src/clincoded/static/components/gene_disease_summary/index.js index d2d22f836..a710280a1 100644 --- a/src/clincoded/static/components/gene_disease_summary/index.js +++ b/src/clincoded/static/components/gene_disease_summary/index.js @@ -647,6 +647,59 @@ const GeneDiseaseEvidenceSummary = createReactClass({ }); }, + /** + * 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; + }, + + /** + * 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 + * @param {bool} reversed - sort by reversed order + */ + sortListByColName(evidenceList, colName, reversed) { + let sortedList = []; + let dir = 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 'evidenceType': + case 'scoreStatus': + case 'studyType': + case 'variantType': + sortedList = evidenceList.sort((x, y) => x[colName].toLowerCase().localeCompare(y[colName].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; + }, + /** * Method to close current window * @param {*} e - Window event @@ -682,10 +735,10 @@ const GeneDiseaseEvidenceSummary = createReactClass({ {!this.state.preview && provisional && Object.keys(provisional).length ? : null} - - - - + + + +

For best printing, choose "Landscape" for layout, 50% for Scale, "Minimum" for Margins, and select "Background graphics". @@ -700,4 +753,4 @@ const GeneDiseaseEvidenceSummary = createReactClass({ }); -curator_page.register(GeneDiseaseEvidenceSummary, 'curator_page', 'gene-disease-evidence-summary'); \ No newline at end of file +curator_page.register(GeneDiseaseEvidenceSummary, 'curator_page', 'gene-disease-evidence-summary');