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 (
- {symbol}
+ {symbol === "+" ? <>+> : <>−>}
);
}
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(
+
+
+ ,
+ );
+}