diff --git a/assets/src/scripts/_utils.js b/assets/src/scripts/_utils.js index fd19c614..02a0b895 100644 --- a/assets/src/scripts/_utils.js +++ b/assets/src/scripts/_utils.js @@ -16,7 +16,10 @@ function getCookie(name) { } function readValueFromPage(id) { - return JSON.parse(document.getElementById(id).textContent); + const scriptId = document.getElementById(id); + if (scriptId?.textContent) { + return JSON.parse(scriptId.textContent); + } } export { getCookie, readValueFromPage }; diff --git a/assets/src/scripts/builder/index.jsx b/assets/src/scripts/builder/index.jsx index 0c409bf1..5a7b8ff1 100644 --- a/assets/src/scripts/builder/index.jsx +++ b/assets/src/scripts/builder/index.jsx @@ -1,4 +1,4 @@ -import React from "react"; +import React, { StrictMode } from "react"; import { createRoot } from "react-dom/client"; import Hierarchy from "../_hierarchy"; import { readValueFromPage } from "../_utils"; @@ -23,25 +23,29 @@ const visiblePaths = hierarchy.initiallyVisiblePaths( ); const container = document.getElementById("codelist-builder-container"); -const root = createRoot(container); -root.render( - , -); +if (container) { + const root = createRoot(container); + root.render( + + + , + ); +} diff --git a/assets/src/scripts/components/CodelistBuilder.jsx b/assets/src/scripts/components/CodelistBuilder.jsx index d4ad2852..2ce5f5c8 100644 --- a/assets/src/scripts/components/CodelistBuilder.jsx +++ b/assets/src/scripts/components/CodelistBuilder.jsx @@ -26,14 +26,16 @@ class CodelistBuilder extends React.Component { this.state = { codeToStatus: props.codeToStatus, - updateQueue: [], - updating: false, + expandedCompatibleReleases: false, moreInfoModalCode: null, showConfirmDiscardModal: false, - expandedCompatibleReleases: false, + updateQueue: [], + updating: false, }; - this.updateStatus = props.isEditable ? this.updateStatus.bind(this) : null; + this.updateStatus = props.isEditable + ? this.updateStatus.bind(this) + : () => null; this.showMoreInfoModal = this.showMoreInfoModal.bind(this); this.hideMoreInfoModal = this.hideMoreInfoModal.bind(this); this.ManagementForm = this.ManagementForm.bind(this); @@ -82,15 +84,20 @@ class CodelistBuilder extends React.Component { } postUpdates() { + const requestHeaders = new Headers(); + requestHeaders.append("Accept", "application/json"); + requestHeaders.append("Content-Type", "application/json"); + + const csrfCookie = getCookie("csrftoken"); + if (csrfCookie) { + requestHeaders.append("X-CSRFToken", csrfCookie); + } + fetch(this.props.updateURL, { method: "POST", credentials: "include", mode: "same-origin", - headers: { - Accept: "application/json", - "Content-Type": "application/json", - "X-CSRFToken": getCookie("csrftoken"), - }, + headers: requestHeaders, body: JSON.stringify({ updates: this.state.updateQueue }), }) .then((response) => response.json()) @@ -391,12 +398,12 @@ class CodelistBuilder extends React.Component { Are you sure you want to discard this draft? - - + + ); diff --git a/assets/src/scripts/components/DescendantToggle.jsx b/assets/src/scripts/components/DescendantToggle.jsx index d5d29060..7be6858a 100644 --- a/assets/src/scripts/components/DescendantToggle.jsx +++ b/assets/src/scripts/components/DescendantToggle.jsx @@ -3,13 +3,14 @@ import React from "react"; function DescendantToggle({ isExpanded, path, toggleVisibility }) { return ( - {" "} {isExpanded ? "⊟" : "⊞"} - + ); } diff --git a/assets/src/scripts/components/Filter.jsx b/assets/src/scripts/components/Filter.jsx index 838eea87..4dc64343 100644 --- a/assets/src/scripts/components/Filter.jsx +++ b/assets/src/scripts/components/Filter.jsx @@ -4,7 +4,9 @@ import React from "react"; function Filter({ filter }) { return filter ? (

Filtered to {filter} concepts and their descendants.

- ) : null; + ) : ( + "" + ); } export default Filter; diff --git a/assets/src/scripts/components/MoreInfoModal.jsx b/assets/src/scripts/components/MoreInfoModal.jsx index 78a3a122..0ff54daf 100644 --- a/assets/src/scripts/components/MoreInfoModal.jsx +++ b/assets/src/scripts/components/MoreInfoModal.jsx @@ -23,7 +23,7 @@ function MoreInfoModal({ text = "Excluded"; break; case "(-)": - text = `Excluded by ${includedAncestorsText}`; + text = `Excluded by ${excludedAncestorsText}`; break; case "?": text = "Unresolved"; @@ -34,7 +34,7 @@ function MoreInfoModal({ } return ( - + hideModal()} show={code !== null}> {term} ({code}) diff --git a/assets/src/scripts/components/Pipes.jsx b/assets/src/scripts/components/Pipes.jsx index 1f510246..7824240e 100644 --- a/assets/src/scripts/components/Pipes.jsx +++ b/assets/src/scripts/components/Pipes.jsx @@ -5,13 +5,7 @@ function Pipes({ pipes }) { return pipes.map((pipe, ix) => ( {pipe} diff --git a/assets/src/scripts/components/StatusToggle.jsx b/assets/src/scripts/components/StatusToggle.jsx index 62bc4d06..0c4c1509 100644 --- a/assets/src/scripts/components/StatusToggle.jsx +++ b/assets/src/scripts/components/StatusToggle.jsx @@ -5,7 +5,7 @@ import { Button } from "react-bootstrap"; function StatusToggle({ code, status, symbol, updateStatus }) { return ( ); } diff --git a/assets/src/scripts/components/TreeRow.jsx b/assets/src/scripts/components/TreeRow.jsx index 948b18a8..5567b1bf 100644 --- a/assets/src/scripts/components/TreeRow.jsx +++ b/assets/src/scripts/components/TreeRow.jsx @@ -1,5 +1,6 @@ import PropTypes from "prop-types"; import React from "react"; +import { ButtonGroup } from "react-bootstrap"; import DescendantToggle from "./DescendantToggle"; import MoreInfoButton from "./MoreInfoButton"; import Pipes from "./Pipes"; @@ -30,7 +31,7 @@ function TreeRow({ return (
-
+ -
+
diff --git a/assets/src/scripts/tree/index.jsx b/assets/src/scripts/tree/index.jsx index 3ea8df06..5fc88df4 100644 --- a/assets/src/scripts/tree/index.jsx +++ b/assets/src/scripts/tree/index.jsx @@ -1,4 +1,4 @@ -import React from "react"; +import React, { StrictMode } from "react"; import { createRoot } from "react-dom/client"; import Hierarchy from "../_hierarchy"; import { readValueFromPage } from "../_utils"; @@ -23,15 +23,19 @@ const visiblePaths = hierarchy.initiallyVisiblePaths( ); const container = document.getElementById("codelist-tree"); -const root = createRoot(container); -root.render( - , -); +if (container) { + const root = createRoot(container); + root.render( + + + , + ); +}