From c99bd63041dc22b9d40f972396122ece4c9a6d12 Mon Sep 17 00:00:00 2001 From: Edward Cruz Date: Thu, 7 Dec 2023 15:21:32 -0500 Subject: [PATCH 1/8] rendering of Composition sources --- package-lock.json | 133 ++++++++++++++++++++++++++++++++++ package.json | 1 + src/Data.js | 28 +++---- src/PatientSummary.js | 7 +- src/PatientSummary.module.css | 7 ++ 5 files changed, 160 insertions(+), 16 deletions(-) diff --git a/package-lock.json b/package-lock.json index e412da5..a2a7793 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,6 +15,7 @@ "@mui/material": "^5.11.7", "dompurify": "^3.0.5", "fhirclient": "^2.5.2", + "html-react-parser": "^5.0.7", "html2canvas": "^1.4.1", "jose": "^4.13.1", "jspdf": "^2.5.1", @@ -15488,6 +15489,84 @@ "safe-buffer": "~5.1.0" } }, + "node_modules/html-dom-parser": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/html-dom-parser/-/html-dom-parser-5.0.4.tgz", + "integrity": "sha512-azy8THLKd4Ar0OVJpEgX+MSjYvKdNDWlGiRBIlovMqEQYMAnLLXBhhiSwjylDD3RDdcCYT8Utg6uoRDeLHUyHg==", + "dependencies": { + "domhandler": "5.0.3", + "htmlparser2": "9.0.0" + } + }, + "node_modules/html-dom-parser/node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/html-dom-parser/node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/html-dom-parser/node_modules/domutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/html-dom-parser/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/html-dom-parser/node_modules/htmlparser2": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-9.0.0.tgz", + "integrity": "sha512-uxbSI98wmFT/G4P2zXx4OVx04qWUmyFPrD2/CNepa2Zo3GPNaCaaxElDgwUrwYWkK1nr9fft0Ya8dws8coDLLQ==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.1.0", + "entities": "^4.5.0" + } + }, "node_modules/html-encoding-sniffer": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", @@ -15529,6 +15608,34 @@ "node": ">=12" } }, + "node_modules/html-react-parser": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/html-react-parser/-/html-react-parser-5.0.7.tgz", + "integrity": "sha512-00ve/0B7ukLUAcAbmD6Vh74EicB+ktLvAM4APeXJjiBsRiPz2ouochTvyUhOJB8apP2t40xAXvpmd+t50aVnJg==", + "dependencies": { + "domhandler": "5.0.3", + "html-dom-parser": "5.0.4", + "react-property": "2.0.2", + "style-to-js": "1.1.10" + }, + "peerDependencies": { + "react": "0.14 || 15 || 16 || 17 || 18" + } + }, + "node_modules/html-react-parser/node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, "node_modules/html-webpack-plugin": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz", @@ -15849,6 +15956,11 @@ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" }, + "node_modules/inline-style-parser": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.2.tgz", + "integrity": "sha512-EcKzdTHVe8wFVOGEYXiW9WmJXPjqi1T+234YpJr98RiFYKHV3cdy1+3mkTE+KHTHxFFLH51SfaGOoUdW+v7ViQ==" + }, "node_modules/internal-ip": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", @@ -24603,6 +24715,11 @@ "async-limiter": "~1.0.0" } }, + "node_modules/react-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/react-property/-/react-property-2.0.2.tgz", + "integrity": "sha512-+PbtI3VuDV0l6CleQMsx2gtK0JZbZKbpdu5ynr+lbsuvtmgbNcS3VM0tuY2QjFNOcWxvXeHjDpy42RO+4U2rug==" + }, "node_modules/react-refresh": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.11.0.tgz", @@ -26637,6 +26754,22 @@ "webpack": "^5.0.0" } }, + "node_modules/style-to-js": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/style-to-js/-/style-to-js-1.1.10.tgz", + "integrity": "sha512-VC7MBJa+y0RZhpnLKDPmVRLRswsASLmixkiZ5R8xZpNT9VyjeRzwnXd2pBzAWdgSGv/pCNNH01gPCCUsB9exYg==", + "dependencies": { + "style-to-object": "1.0.5" + } + }, + "node_modules/style-to-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.5.tgz", + "integrity": "sha512-rDRwHtoDD3UMMrmZ6BzOW0naTjMsVZLIjsGleSKS/0Oz+cgCfAPRspaqJuE8rDzpKha/nEvnM0IF4seEAZUTKQ==", + "dependencies": { + "inline-style-parser": "0.2.2" + } + }, "node_modules/stylehacks": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", diff --git a/package.json b/package.json index 013aff7..81435b9 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,7 @@ "@mui/material": "^5.11.7", "dompurify": "^3.0.5", "fhirclient": "^2.5.2", + "html-react-parser": "^5.0.7", "html2canvas": "^1.4.1", "jose": "^4.13.1", "jspdf": "^2.5.1", diff --git a/src/Data.js b/src/Data.js index 8c2bf55..4be045e 100644 --- a/src/Data.js +++ b/src/Data.js @@ -92,13 +92,13 @@ export default function Data({ shx }) { const bundle = shxResult.bundles[bundleIndex]; const organized = (bundle.contentOK() ? bundle.organized : undefined); - + let elt = undefined; if (organized) { - + switch (organized.typeInfo.btype) { - + case res.BTYPE_COVERAGE: elt = ; break; @@ -112,13 +112,13 @@ export default function Data({ shx }) { break; // >>> ADD MORE RENDERERS HERE <<< - + default: - elt =
{JSON.stringify(bundle.fhir, null, 2)}
; + elt =
{JSON.stringify(bundle.fhir, null, 2)}
; break; } } - + return( <> { renderBundleChooser() } @@ -147,12 +147,12 @@ export default function Data({ shx }) { shxResult.bundles[bundleIndex].organized && shxResult.bundles[bundleIndex].organized.typeInfo && shxResult.bundles[bundleIndex].organized.typeInfo.label - + ? shxResult.bundles[bundleIndex].organized.typeInfo.label : "Shared Information"); const div = document.getElementById("bundle-contents"); - + if (toFile) { saveDivToPdfFile(div, baseName); } @@ -164,7 +164,7 @@ export default function Data({ shx }) { const onBundleChange = (evt) => { setBundleIndex(parseInt(evt.target.value)); } - + const renderBundleChooser = () => { if (shxResult.bundles.length <= 1) return(undefined); @@ -185,18 +185,18 @@ export default function Data({ shx }) { value={bundleIndex} sx={{ mb: 2 }} onChange={ onBundleChange } > - + { elts } - + ); } - + // +-------------+ // | Main Render | // +-------------+ - + useEffect(() => { verifySHX(shx, passcode) @@ -231,4 +231,4 @@ export default function Data({ shx }) { } return(renderBundle()); -} +} \ No newline at end of file diff --git a/src/PatientSummary.js b/src/PatientSummary.js index 6ab02ba..88cdc32 100644 --- a/src/PatientSummary.js +++ b/src/PatientSummary.js @@ -1,6 +1,6 @@ import * as futil from './lib/fhirUtil.js'; import PatientSummarySection from './PatientSummarySection.js'; - +import parse from 'html-react-parser'; import styles from './PatientSummary.module.css'; export default function PatientSummary({ organized, dcr }) { @@ -31,7 +31,7 @@ export default function PatientSummary({ organized, dcr }) { const rmap = organized.byId; const authors = comp.author.map((a) => futil.renderOrgOrPerson(a, rmap)); - + const compositionDivTextContent = comp.text && comp.text.div ? comp.text.div : ''; return (

{comp.title}

@@ -42,6 +42,9 @@ export default function PatientSummary({ organized, dcr }) {
Summary prepared by
{authors}
+
Composition
+
    {parse(compositionDivTextContent)}
+ {renderSections()}
diff --git a/src/PatientSummary.module.css b/src/PatientSummary.module.css index d512974..16e5bb7 100644 --- a/src/PatientSummary.module.css +++ b/src/PatientSummary.module.css @@ -87,3 +87,10 @@ margin-top: 0px; } } + +.compositionSourceList { + padding-left: 0; + border: none; + margin: 0; + padding: 0; +} \ No newline at end of file From 04d9ded87e777ea343507a006c02e268cf163635 Mon Sep 17 00:00:00 2001 From: Edward Cruz Date: Fri, 8 Dec 2023 16:30:01 -0500 Subject: [PATCH 2/8] add error handling for missing data in bundle --- src/lib/SHX.js | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/lib/SHX.js b/src/lib/SHX.js index e441376..e30b1b0 100644 --- a/src/lib/SHX.js +++ b/src/lib/SHX.js @@ -92,6 +92,16 @@ class ExpiredError extends Error { constructor(msg) { super(msg); this.name = "ExpiredError"; } } + +class DataMissingError extends Error { + constructor(message) { + super(message); + this.name = "DataMissingError"; + } +} + + + // +--------------+ // | looksLikeSH* | // +--------------+ @@ -127,7 +137,10 @@ export async function verifySHX(shx, passcode = undefined) { if (err instanceof ExpiredError) { return(status(SHX_STATUS_EXPIRED, err.message)); } - + // Handle DataMissingError + if (err instanceof DataMissingError) { + return status(SHX_STATUS_ERROR, err.message); + } const reasons = (err ? err.toString() : "unexpected"); return(status(SHX_STATUS_ERROR, reasons)); } @@ -227,6 +240,10 @@ async function resolveSHX(shx, passcode) { // wasn't JSON, so assume it's an SHC... we'll error on verification if not resolved.verifiableCredentials.push(target); } + // Throw DataMissingError if no data found + if (resolved.verifiableCredentials.length === 0 && resolved.rawBundles.length === 0) { + throw new DataMissingError("No verifiable credentials and/or data bundles found in the SHL content."); + } return(resolved); } From a0aaa20434ad7f5ece4b79c241f1475874bbba2b Mon Sep 17 00:00:00 2001 From: Edward Cruz Date: Fri, 8 Dec 2023 16:32:15 -0500 Subject: [PATCH 3/8] edit message --- src/lib/SHX.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/SHX.js b/src/lib/SHX.js index e30b1b0..f8955f3 100644 --- a/src/lib/SHX.js +++ b/src/lib/SHX.js @@ -242,7 +242,7 @@ async function resolveSHX(shx, passcode) { } // Throw DataMissingError if no data found if (resolved.verifiableCredentials.length === 0 && resolved.rawBundles.length === 0) { - throw new DataMissingError("No verifiable credentials and/or data bundles found in the SHL content."); + throw new DataMissingError("No data found in the SHL content."); } return(resolved); From 84d89e022f1141a2bc06ee4e0c265e9af6da3040 Mon Sep 17 00:00:00 2001 From: Edward Cruz Date: Tue, 19 Dec 2023 15:46:16 -0500 Subject: [PATCH 4/8] fixes to Composition rendering --- package-lock.json | 133 ------------------------------------------ package.json | 1 - src/PatientSummary.js | 18 +++++- 3 files changed, 15 insertions(+), 137 deletions(-) diff --git a/package-lock.json b/package-lock.json index a2a7793..e412da5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,7 +15,6 @@ "@mui/material": "^5.11.7", "dompurify": "^3.0.5", "fhirclient": "^2.5.2", - "html-react-parser": "^5.0.7", "html2canvas": "^1.4.1", "jose": "^4.13.1", "jspdf": "^2.5.1", @@ -15489,84 +15488,6 @@ "safe-buffer": "~5.1.0" } }, - "node_modules/html-dom-parser": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/html-dom-parser/-/html-dom-parser-5.0.4.tgz", - "integrity": "sha512-azy8THLKd4Ar0OVJpEgX+MSjYvKdNDWlGiRBIlovMqEQYMAnLLXBhhiSwjylDD3RDdcCYT8Utg6uoRDeLHUyHg==", - "dependencies": { - "domhandler": "5.0.3", - "htmlparser2": "9.0.0" - } - }, - "node_modules/html-dom-parser/node_modules/dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/html-dom-parser/node_modules/domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "dependencies": { - "domelementtype": "^2.3.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/html-dom-parser/node_modules/domutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", - "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", - "dependencies": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/html-dom-parser/node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/html-dom-parser/node_modules/htmlparser2": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-9.0.0.tgz", - "integrity": "sha512-uxbSI98wmFT/G4P2zXx4OVx04qWUmyFPrD2/CNepa2Zo3GPNaCaaxElDgwUrwYWkK1nr9fft0Ya8dws8coDLLQ==", - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.1.0", - "entities": "^4.5.0" - } - }, "node_modules/html-encoding-sniffer": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", @@ -15608,34 +15529,6 @@ "node": ">=12" } }, - "node_modules/html-react-parser": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/html-react-parser/-/html-react-parser-5.0.7.tgz", - "integrity": "sha512-00ve/0B7ukLUAcAbmD6Vh74EicB+ktLvAM4APeXJjiBsRiPz2ouochTvyUhOJB8apP2t40xAXvpmd+t50aVnJg==", - "dependencies": { - "domhandler": "5.0.3", - "html-dom-parser": "5.0.4", - "react-property": "2.0.2", - "style-to-js": "1.1.10" - }, - "peerDependencies": { - "react": "0.14 || 15 || 16 || 17 || 18" - } - }, - "node_modules/html-react-parser/node_modules/domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "dependencies": { - "domelementtype": "^2.3.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, "node_modules/html-webpack-plugin": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz", @@ -15956,11 +15849,6 @@ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" }, - "node_modules/inline-style-parser": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.2.tgz", - "integrity": "sha512-EcKzdTHVe8wFVOGEYXiW9WmJXPjqi1T+234YpJr98RiFYKHV3cdy1+3mkTE+KHTHxFFLH51SfaGOoUdW+v7ViQ==" - }, "node_modules/internal-ip": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", @@ -24715,11 +24603,6 @@ "async-limiter": "~1.0.0" } }, - "node_modules/react-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/react-property/-/react-property-2.0.2.tgz", - "integrity": "sha512-+PbtI3VuDV0l6CleQMsx2gtK0JZbZKbpdu5ynr+lbsuvtmgbNcS3VM0tuY2QjFNOcWxvXeHjDpy42RO+4U2rug==" - }, "node_modules/react-refresh": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.11.0.tgz", @@ -26754,22 +26637,6 @@ "webpack": "^5.0.0" } }, - "node_modules/style-to-js": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/style-to-js/-/style-to-js-1.1.10.tgz", - "integrity": "sha512-VC7MBJa+y0RZhpnLKDPmVRLRswsASLmixkiZ5R8xZpNT9VyjeRzwnXd2pBzAWdgSGv/pCNNH01gPCCUsB9exYg==", - "dependencies": { - "style-to-object": "1.0.5" - } - }, - "node_modules/style-to-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.5.tgz", - "integrity": "sha512-rDRwHtoDD3UMMrmZ6BzOW0naTjMsVZLIjsGleSKS/0Oz+cgCfAPRspaqJuE8rDzpKha/nEvnM0IF4seEAZUTKQ==", - "dependencies": { - "inline-style-parser": "0.2.2" - } - }, "node_modules/stylehacks": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", diff --git a/package.json b/package.json index 81435b9..013aff7 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,6 @@ "@mui/material": "^5.11.7", "dompurify": "^3.0.5", "fhirclient": "^2.5.2", - "html-react-parser": "^5.0.7", "html2canvas": "^1.4.1", "jose": "^4.13.1", "jspdf": "^2.5.1", diff --git a/src/PatientSummary.js b/src/PatientSummary.js index 88cdc32..02e9f8b 100644 --- a/src/PatientSummary.js +++ b/src/PatientSummary.js @@ -1,7 +1,8 @@ import * as futil from './lib/fhirUtil.js'; import PatientSummarySection from './PatientSummarySection.js'; -import parse from 'html-react-parser'; import styles from './PatientSummary.module.css'; +import IFrameSandbox from './IFrameSandbox.js'; // Ensure this is the correct path +import DOMPurify from 'dompurify'; export default function PatientSummary({ organized, dcr }) { @@ -32,6 +33,16 @@ export default function PatientSummary({ organized, dcr }) { const authors = comp.author.map((a) => futil.renderOrgOrPerson(a, rmap)); const compositionDivTextContent = comp.text && comp.text.div ? comp.text.div : ''; + + // Conditionally render Composition row + const compositionRow = compositionDivTextContent ? ( + <> +
Composition
+
+ +
+ + ) : null; return (

{comp.title}

@@ -42,8 +53,9 @@ export default function PatientSummary({ organized, dcr }) {
Summary prepared by
{authors}
-
Composition
-
    {parse(compositionDivTextContent)}
+ + {/* Conditionally render Composition row */} + {compositionRow} {renderSections()}
From 692d9f17daa61c5a1ef6a38f4268064a0738698e Mon Sep 17 00:00:00 2001 From: Edward Cruz Date: Tue, 19 Dec 2023 15:47:13 -0500 Subject: [PATCH 5/8] another change --- src/PatientSummary.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/PatientSummary.js b/src/PatientSummary.js index 02e9f8b..e417c03 100644 --- a/src/PatientSummary.js +++ b/src/PatientSummary.js @@ -53,7 +53,6 @@ export default function PatientSummary({ organized, dcr }) {
Summary prepared by
{authors}
- {/* Conditionally render Composition row */} {compositionRow} From db24e269ce0438e6cffd358edd6a04ab345870a0 Mon Sep 17 00:00:00 2001 From: Edward Cruz Date: Tue, 19 Dec 2023 15:48:31 -0500 Subject: [PATCH 6/8] remove empty space --- src/PatientSummary.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/PatientSummary.js b/src/PatientSummary.js index e417c03..44e859f 100644 --- a/src/PatientSummary.js +++ b/src/PatientSummary.js @@ -43,6 +43,7 @@ export default function PatientSummary({ organized, dcr }) { ) : null; + return (

{comp.title}

From b116d26264ac05f618dbd0b34b330bd17a83ab1e Mon Sep 17 00:00:00 2001 From: Edward Cruz Date: Wed, 20 Dec 2023 12:55:31 -0500 Subject: [PATCH 7/8] adjust order of comp and author --- src/PatientSummary.js | 33 ++++++++++++++------------------- 1 file changed, 14 insertions(+), 19 deletions(-) diff --git a/src/PatientSummary.js b/src/PatientSummary.js index 44e859f..0381111 100644 --- a/src/PatientSummary.js +++ b/src/PatientSummary.js @@ -1,15 +1,13 @@ -import * as futil from './lib/fhirUtil.js'; +import * as futil from './lib/fhirUtil.js'; import PatientSummarySection from './PatientSummarySection.js'; import styles from './PatientSummary.module.css'; import IFrameSandbox from './IFrameSandbox.js'; // Ensure this is the correct path import DOMPurify from 'dompurify'; export default function PatientSummary({ organized, dcr }) { - // +----------------+ // | renderSections | // +----------------+ - const renderSections = () => { return comp.section.flatMap((s) => { return [ @@ -18,16 +16,14 @@ export default function PatientSummary({ organized, dcr }) {
,
-
+ , ]; }); - } - + }; // +-------------+ // | Main Render | // +-------------+ - const comp = organized.byType.Composition[0]; const rmap = organized.byId; @@ -45,23 +41,22 @@ export default function PatientSummary({ organized, dcr }) { ) : null; return ( -
-

{comp.title}

-
-
Patient
-
{futil.renderPerson(comp.subject, rmap)}
+
+

{comp.title}

+
+
Patient
+
{futil.renderPerson(comp.subject, rmap)}
-
Summary prepared by
-
{authors}
+ {renderSections()} - {/* Conditionally render Composition row */} {compositionRow} - - {renderSections()} -
-
+
Summary prepared by
+
{authors}
+
+
); } + From 753d183303a79d090aae5682e326ead5b94fb568 Mon Sep 17 00:00:00 2001 From: Edward Cruz Date: Wed, 20 Dec 2023 12:56:14 -0500 Subject: [PATCH 8/8] remove comment --- src/PatientSummary.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/PatientSummary.js b/src/PatientSummary.js index 0381111..dcc457d 100644 --- a/src/PatientSummary.js +++ b/src/PatientSummary.js @@ -1,7 +1,7 @@ import * as futil from './lib/fhirUtil.js'; import PatientSummarySection from './PatientSummarySection.js'; import styles from './PatientSummary.module.css'; -import IFrameSandbox from './IFrameSandbox.js'; // Ensure this is the correct path +import IFrameSandbox from './IFrameSandbox.js'; import DOMPurify from 'dompurify'; export default function PatientSummary({ organized, dcr }) {