From 17fdb2b0c69386f984b724a1ba17170fd33c80a8 Mon Sep 17 00:00:00 2001 From: maxsibilla Date: Fri, 9 Dec 2022 10:10:54 -0500 Subject: [PATCH 01/15] Syncing search-ui --- src/search-ui | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/search-ui b/src/search-ui index c4d1a4804..ea889585a 160000 --- a/src/search-ui +++ b/src/search-ui @@ -1 +1 @@ -Subproject commit c4d1a48044a97fd200c51ffee5d3d63e25c899eb +Subproject commit ea889585ab1cbd4cbe7f49efd6003af977687393 From 2f309149c51d4a222774fe8ec33b7b42eb60f2f4 Mon Sep 17 00:00:00 2001 From: maxsibilla Date: Mon, 19 Dec 2022 14:03:08 -0500 Subject: [PATCH 02/15] Updating submodule --- src/search-ui | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/search-ui b/src/search-ui index d94031538..ea889585a 160000 --- a/src/search-ui +++ b/src/search-ui @@ -1 +1 @@ -Subproject commit d9403153864e82861d37d5cc1893872e7fdb9a26 +Subproject commit ea889585ab1cbd4cbe7f49efd6003af977687393 From 34ae63cb06e01982fbad3ad3727b62bc877eab48 Mon Sep 17 00:00:00 2001 From: maxsibilla Date: Tue, 20 Dec 2022 13:49:50 -0500 Subject: [PATCH 03/15] Updating URL to pull DOI information from --- .../custom/entities/sample/Protocols.jsx | 32 +++++++++++++++++-- src/components/custom/js/functions.js | 5 +-- src/public/css/main.css | 5 +++ 3 files changed, 38 insertions(+), 4 deletions(-) diff --git a/src/components/custom/entities/sample/Protocols.jsx b/src/components/custom/entities/sample/Protocols.jsx index 2245c3619..e4448c0d5 100644 --- a/src/components/custom/entities/sample/Protocols.jsx +++ b/src/components/custom/entities/sample/Protocols.jsx @@ -33,12 +33,40 @@ export default class Protocols extends React.Component { } + - + DOI

+
{this.props.protocol_url} + className="me-1">{this.props.protocol_url} + + + {this.state.protocol_data != null && + <> + + Authors

+ + {this.state.protocol_data.authors.map((author, index, array) => { + return ( + <> + {author.name} + {index !== array.length - 1 ? <>, : <>} + + ); + })} + + + + + Abstract

+ {JSON.parse(this.state.protocol_data.description).blocks[0].text} + + + + } diff --git a/src/components/custom/js/functions.js b/src/components/custom/js/functions.js index 922a2778f..5ee2babc6 100644 --- a/src/components/custom/js/functions.js +++ b/src/components/custom/js/functions.js @@ -34,13 +34,14 @@ export async function fetchEntity(ancestorId) { export async function fetchProtocols(protocolUrl) { const regex = new RegExp('[^\.]+$', 'g'); const protocolId = regex.exec(protocolUrl)[0] - const response = await fetch("https://www.protocols.io/api/v3/protocols/" + protocolId); + const response = await fetch("https://www.protocols.io/api/v4/protocols/" + protocolId); if (!response.ok) { return null } const protocol = await response.json(); - return protocol.protocol; + log.info(protocol.payload.description) + return protocol.payload; } export function createDownloadUrl(fileStr, fileType) { diff --git a/src/public/css/main.css b/src/public/css/main.css index 1295548d2..a1449a726 100644 --- a/src/public/css/main.css +++ b/src/public/css/main.css @@ -167,3 +167,8 @@ p { #unityContainer { padding-bottom: 60px } + +.title { + font-weight: bold; + color: #808080; +} From 5fb949a379a8da50511e253f0248ef9fa6c64d59 Mon Sep 17 00:00:00 2001 From: Lisa-Ann B Date: Tue, 20 Dec 2022 14:56:05 -0500 Subject: [PATCH 04/15] Add ada functionality to table results --- src/components/custom/TableResults.jsx | 8 +++--- .../custom/edit/dataset/AncestorIds.jsx | 2 +- .../custom/edit/sample/AncestorId.jsx | 2 +- src/components/custom/js/addons/Ada.js | 25 +++++++++++++++++++ src/components/custom/js/addons/addons.js | 4 ++- src/pages/search.js | 2 +- src/public/css/main.css | 4 +++ src/search-ui | 2 +- 8 files changed, 40 insertions(+), 9 deletions(-) create mode 100644 src/components/custom/js/addons/Ada.js diff --git a/src/components/custom/TableResults.jsx b/src/components/custom/TableResults.jsx index b2f7eef00..09365585e 100644 --- a/src/components/custom/TableResults.jsx +++ b/src/components/custom/TableResults.jsx @@ -23,7 +23,7 @@ const DefaultTableResults = ({isLoggedIn, hasMultipleEntityTypes = true}) => { const DefaultTableRowDetails = ({isLoggedIn, result, urlField, hotlink, hasMultipleEntityTypes = true}) => { return ( - urlField(this, result.uuid.raw) : () => window.location.href = hotlink}> {result.created_by_user_displayname.raw} @@ -156,7 +156,7 @@ const TableRowDetail = ({result, urlField, titleField}) => { if (filter.field === 'entity_type') { if (filter.values.length === 1 && filter.values[0] === 'Sample') { return ( - urlField(this, result.uuid.raw) : () => window.location.href = hotlink}> {result.created_by_user_displayname.raw} @@ -192,7 +192,7 @@ const TableRowDetail = ({result, urlField, titleField}) => { } if (filter.values.length === 1 && filter.values[0] === 'Source') { return ( - urlField(this, result.uuid.raw) : () => window.location.href = hotlink}> {result.created_by_user_displayname.raw} @@ -229,7 +229,7 @@ const TableRowDetail = ({result, urlField, titleField}) => { } else if (filter.values.length === 1 && filter.values[0] === 'Dataset') { // Table results for Dataset return ( - urlField(this, result.uuid.raw) : () => window.location.href = hotlink}> {result.created_by_user_displayname.raw} diff --git a/src/components/custom/edit/dataset/AncestorIds.jsx b/src/components/custom/edit/dataset/AncestorIds.jsx index edd19095b..2cc4c27be 100644 --- a/src/components/custom/edit/dataset/AncestorIds.jsx +++ b/src/components/custom/edit/dataset/AncestorIds.jsx @@ -156,7 +156,7 @@ export default class AncestorIds extends React.Component { } bodyContent={ -
+
+
{ + if (this.isEnter(e)) { + this.currentTarget(e).click() + } + }).bind(this)); + } +} + +export default Ada \ No newline at end of file diff --git a/src/components/custom/js/addons/addons.js b/src/components/custom/js/addons/addons.js index 93b540be5..14cb10a71 100644 --- a/src/components/custom/js/addons/addons.js +++ b/src/components/custom/js/addons/addons.js @@ -2,6 +2,7 @@ import Addon from './Addon' import GoogleTagManager from './GoogleTagManager' import AppModal from './AppModal' import Facets from './Facets' +import Ada from './Ada' /** * JS functionality which enhance site functionality, not necessarily part of the core. @@ -20,7 +21,8 @@ function addons(source, args= null) { let apps = { gtm: GoogleTagManager, modal: AppModal, - facets: Facets + facets: Facets, + ada: Ada } setTimeout(() => { diff --git a/src/pages/search.js b/src/pages/search.js index 5e3ba845e..04c465dd8 100644 --- a/src/pages/search.js +++ b/src/pages/search.js @@ -99,7 +99,7 @@ function Search() { } bodyContent={ -
+
diff --git a/src/public/css/main.css b/src/public/css/main.css index 1295548d2..e9ea74763 100644 --- a/src/public/css/main.css +++ b/src/public/css/main.css @@ -167,3 +167,7 @@ p { #unityContainer { padding-bottom: 60px } + +.table-responsive td:hover { + cursor: pointer; +} \ No newline at end of file diff --git a/src/search-ui b/src/search-ui index ea889585a..d94031538 160000 --- a/src/search-ui +++ b/src/search-ui @@ -1 +1 @@ -Subproject commit ea889585ab1cbd4cbe7f49efd6003af977687393 +Subproject commit d9403153864e82861d37d5cc1893872e7fdb9a26 From e18ab25469362b96d1caa129caddfea30a2b1769 Mon Sep 17 00:00:00 2001 From: SamSedivy Date: Tue, 20 Dec 2022 13:22:49 -0500 Subject: [PATCH 05/15] Remove unused state variable --- src/pages/edit/sample.jsx | 1 - 1 file changed, 1 deletion(-) diff --git a/src/pages/edit/sample.jsx b/src/pages/edit/sample.jsx index 56cc5ab11..65a4cde6a 100644 --- a/src/pages/edit/sample.jsx +++ b/src/pages/edit/sample.jsx @@ -56,7 +56,6 @@ function EditSample() { const [ruiLocation, setRuiLocation] = useState('') const [showRui, setShowRui] = useState(false) const [showRuiButton, setShowRuiButton] = useState(false) - const [isLoading, setIsLoading] = useState(null) const [ancestorOrgan, setAncestorOrgan] = useState([]) const [sampleCategories, setSampleCategories] = useState(null) From 757e77c953784dfea964b9420924a99754cab244 Mon Sep 17 00:00:00 2001 From: SamSedivy Date: Tue, 20 Dec 2022 13:25:38 -0500 Subject: [PATCH 06/15] Remove unused element --- src/pages/edit/sample.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/edit/sample.jsx b/src/pages/edit/sample.jsx index 65a4cde6a..bfa87077a 100644 --- a/src/pages/edit/sample.jsx +++ b/src/pages/edit/sample.jsx @@ -28,7 +28,7 @@ import AppContext from '../../context/AppContext' import {EntityProvider} from '../../context/EntityContext' import EntityContext from '../../context/EntityContext' import Spinner from '../../components/custom/Spinner' -import {ENTITIES, ORGAN_TYPES, SAMPLE_CATEGORY} from '../../config/constants' +import {ENTITIES, SAMPLE_CATEGORY} from '../../config/constants' import EntityHeader from '../../components/custom/layout/entity/Header' import EntityFormGroup from "../../components/custom/layout/entity/FormGroup"; import Alert from "../../components/custom/Alert"; From 56124fdc43c0be25aeb9b3b68cdc42b9611480d9 Mon Sep 17 00:00:00 2001 From: SamSedivy Date: Tue, 20 Dec 2022 13:26:02 -0500 Subject: [PATCH 07/15] Remove newline --- src/pages/edit/sample.jsx | 1 - 1 file changed, 1 deletion(-) diff --git a/src/pages/edit/sample.jsx b/src/pages/edit/sample.jsx index bfa87077a..a3d6ac19b 100644 --- a/src/pages/edit/sample.jsx +++ b/src/pages/edit/sample.jsx @@ -23,7 +23,6 @@ import GroupSelect from "../../components/custom/edit/GroupSelect"; import Header from "../../components/custom/layout/Header"; import RuiIntegration from "../../components/custom/edit/sample/rui/RuiIntegration"; import RUIButton from "../../components/custom/edit/sample/rui/RUIButton"; - import AppContext from '../../context/AppContext' import {EntityProvider} from '../../context/EntityContext' import EntityContext from '../../context/EntityContext' From 753c1c9ce2350546a5c7a4a65af6ad4bcdff1191 Mon Sep 17 00:00:00 2001 From: SamSedivy Date: Tue, 20 Dec 2022 15:24:09 -0500 Subject: [PATCH 08/15] Clear the sample category and organ type dropdowns when the ancestor changes --- .../custom/edit/sample/SampleCategory.jsx | 186 +++++++++--------- src/pages/edit/sample.jsx | 30 ++- 2 files changed, 122 insertions(+), 94 deletions(-) diff --git a/src/components/custom/edit/sample/SampleCategory.jsx b/src/components/custom/edit/sample/SampleCategory.jsx index 5aea52f04..9131633b8 100644 --- a/src/components/custom/edit/sample/SampleCategory.jsx +++ b/src/components/custom/edit/sample/SampleCategory.jsx @@ -5,135 +5,137 @@ import {QuestionCircleFill} from "react-bootstrap-icons"; import OverlayTrigger from 'react-bootstrap/OverlayTrigger'; import Popover from 'react-bootstrap/Popover'; -export default class SampleCategory extends React.Component { - constructor(props) { - super(props); - this.state = { - organ_group_hide: 'none', - organ_other_hide: 'none', - }; - - // Show organ input group if sample category is 'organ' - if (props.data.sample_category === 'organ') { - this.state.organ_group_hide = ''; - } +function SampleCategory({ + organ_group_hide, + set_organ_group_hide, + organ_other_hide, + set_organ_other_hide, + data, + onChange, + sample_categories + }) { + + // Show organ input group if sample category is 'organ' + if (data.sample_category === 'organ') { + set_organ_group_hide('') } - handleSampleCategoryChange = (e, onChange) => { + const handleSampleCategoryChange = (e, onChange) => { // If sample category is 'Organ' then display the organ type input group if (e.target.value === 'organ') { //Organ Type set display and require - this.setState({organ_group_hide: ''}) + set_organ_group_hide('') document.getElementById("organ").setAttribute("required", "") } else { - this.resetOrganType(e, onChange); + resetOrganType(e, onChange); } }; - handleOrganChange = (e, onChange) => { + const handleOrganChange = (e, onChange) => { // If organ type is 'Other' then display organ_other group if (e.target.value === 'other') { - this.setState({organ_other_hide: ''}) + set_organ_other_hide('') document.getElementById("organ_other").setAttribute("required", "") } else { - this.resetOrganTypeOther(e, onChange); + resetOrganTypeOther(e, onChange); } } - resetOrganType = (e, onChange) => { - this.setState({organ_group_hide: 'none'}) + const resetOrganType = (e, onChange) => { + set_organ_group_hide('none') document.getElementById("organ").removeAttribute("required") // Empty the value of the fields and trigger onChange document.getElementById("organ").value = ""; onChange(e, "organ", "") // Need to also reset organ_other - this.resetOrganTypeOther(e, onChange); + resetOrganTypeOther(e, onChange); } - resetOrganTypeOther = (e, onChange) => { - this.setState({organ_other_hide: 'none'}) + const resetOrganTypeOther = (e, onChange) => { + set_organ_other_hide('none') document.getElementById("organ_other").removeAttribute("required") // Empty the value of the fields and trigger onChange document.getElementById("organ_other").value = ""; onChange(e, "organ_other", "") } - render() { - return ( - //Sample Category - <> - - Sample Category * - - - The category this sample belongs to. - - - } - > - - - - - { - this.handleSampleCategoryChange(e, this.props.onChange); - this.props.onChange(e, e.target.id, e.target.value) - }} - defaultValue={this.props.data.sample_category}> + return ( + //Sample Category + <> + + Sample Category * + + + The category this sample belongs to. + + + } + > + + + + + { + handleSampleCategoryChange(e, onChange); + onChange(e, e.target.id, e.target.value) + }} + defaultValue={data.sample_category !== undefined ? data.sample_category : ''}> + + {Object.entries(sample_categories).map(sample_category => { + return ( + + ); + + })} + + + + {/*Organ Type*/} + + Organ Type * + + { + handleOrganChange(e, onChange); + onChange(e, e.target.id, e.target.value) + }} + defaultValue={data.organ}> - {Object.entries(this.props.sample_categories).map(sample_category => { + {Object.entries(ORGAN_TYPES).map(op => { return ( - ); })} - - - {/*Organ Type*/} - - Organ Type * - - { - this.handleOrganChange(e, this.props.onChange); - this.props.onChange(e, e.target.id, e.target.value) - }} - defaultValue={this.props.data.organ}> - - {Object.entries(ORGAN_TYPES).map(op => { - return ( - - ); - - })} - - - {/*Organ Type Other*/} - - { - this.props.onChange(e, e.target.id, e.target.value) - }} - placeholder="Please specify"/> - - - - ) - } -} \ No newline at end of file + + {/*Organ Type Other*/} + + { + onChange(e, e.target.id, e.target.value) + }} + placeholder="Please specify"/> + + + + ) + +} + +export default SampleCategory \ No newline at end of file diff --git a/src/pages/edit/sample.jsx b/src/pages/edit/sample.jsx index a3d6ac19b..ee6cf577b 100644 --- a/src/pages/edit/sample.jsx +++ b/src/pages/edit/sample.jsx @@ -57,6 +57,8 @@ function EditSample() { const [showRuiButton, setShowRuiButton] = useState(false) const [ancestorOrgan, setAncestorOrgan] = useState([]) const [sampleCategories, setSampleCategories] = useState(null) + const [organ_group_hide, set_organ_group_hide] = useState('none') + const [organ_other_hide, set_organ_other_hide] = useState('none') useEffect(() => { const fetchSampleCategories = async () => { @@ -91,6 +93,7 @@ function EditSample() { } } fetchSampleCategories() + resetSampleCategory() }, [source]) // only executed on init rendering, see the [] @@ -173,6 +176,24 @@ function EditSample() { }); }; + const resetSampleCategory = () => { + if (Object.hasOwn(values, 'sample_category')) { + delete values['sample_category'] + } + if (Object.hasOwn(values, 'organ')) { + delete values['organ'] + } + if (Object.hasOwn(values, 'organ_other')) { + delete values['organ_other'] + } + setValues(values) + set_organ_group_hide('none') + set_organ_other_hide('none') + document.getElementById("sample_category").value = "" + document.getElementById("organ").value = "" + document.getElementById("organ_other").value = "" + } + const fetchSource = async (sourceId) => { let source = await fetchEntity(sourceId); if (source.hasOwnProperty("error")) { @@ -311,9 +332,14 @@ function EditSample() { {((isEditMode() && source) || (editMode === 'Create')) && <> + data={values} + source={source} + onChange={onChange}/> Date: Tue, 20 Dec 2022 15:25:15 -0500 Subject: [PATCH 09/15] Refactor --- src/components/custom/edit/sample/SampleCategory.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/custom/edit/sample/SampleCategory.jsx b/src/components/custom/edit/sample/SampleCategory.jsx index 9131633b8..a9e5500b6 100644 --- a/src/components/custom/edit/sample/SampleCategory.jsx +++ b/src/components/custom/edit/sample/SampleCategory.jsx @@ -87,7 +87,7 @@ function SampleCategory({ handleSampleCategoryChange(e, onChange); onChange(e, e.target.id, e.target.value) }} - defaultValue={data.sample_category !== undefined ? data.sample_category : ''}> + defaultValue={data.sample_category}> {Object.entries(sample_categories).map(sample_category => { return ( From 248f6b1feb7381a8ec50d5fdfe1dca8cb1fca302 Mon Sep 17 00:00:00 2001 From: SamSedivy Date: Tue, 20 Dec 2022 15:49:17 -0500 Subject: [PATCH 10/15] Null check --- src/pages/edit/sample.jsx | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/pages/edit/sample.jsx b/src/pages/edit/sample.jsx index ee6cf577b..e0ae016bb 100644 --- a/src/pages/edit/sample.jsx +++ b/src/pages/edit/sample.jsx @@ -189,9 +189,19 @@ function EditSample() { setValues(values) set_organ_group_hide('none') set_organ_other_hide('none') - document.getElementById("sample_category").value = "" - document.getElementById("organ").value = "" - document.getElementById("organ_other").value = "" + + const sample_category = document.getElementById('sample_category') + const organ = document.getElementById("organ") + const organ_other = document.getElementById("organ_other") + if (sample_category !== null) { + sample_category.value = '' + } + if (organ !== null) { + organ.value = '' + } + if (organ_other !== null) { + organ_other.value = '' + } } const fetchSource = async (sourceId) => { From 9f9bbfc74aa13974bf1f452add4354c384153055 Mon Sep 17 00:00:00 2001 From: SamSedivy Date: Tue, 20 Dec 2022 16:00:51 -0500 Subject: [PATCH 11/15] Only reset sample category if edit mode is 'create' --- src/pages/edit/sample.jsx | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/pages/edit/sample.jsx b/src/pages/edit/sample.jsx index e0ae016bb..f496cf4ab 100644 --- a/src/pages/edit/sample.jsx +++ b/src/pages/edit/sample.jsx @@ -177,6 +177,9 @@ function EditSample() { }; const resetSampleCategory = () => { + if (editMode !== 'Create') { + return + } if (Object.hasOwn(values, 'sample_category')) { delete values['sample_category'] } From 7b2a7a44da92e6f24255bedac6787c0207a5ac20 Mon Sep 17 00:00:00 2001 From: SamSedivy Date: Wed, 21 Dec 2022 10:42:02 -0500 Subject: [PATCH 12/15] Hide organ_type drop down when the ancestor changes --- .../custom/edit/sample/SampleCategory.jsx | 5 ----- src/pages/edit/sample.jsx | 15 +++++++++++---- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/src/components/custom/edit/sample/SampleCategory.jsx b/src/components/custom/edit/sample/SampleCategory.jsx index a9e5500b6..5674aa9be 100644 --- a/src/components/custom/edit/sample/SampleCategory.jsx +++ b/src/components/custom/edit/sample/SampleCategory.jsx @@ -15,11 +15,6 @@ function SampleCategory({ sample_categories }) { - // Show organ input group if sample category is 'organ' - if (data.sample_category === 'organ') { - set_organ_group_hide('') - } - const handleSampleCategoryChange = (e, onChange) => { // If sample category is 'Organ' then display the organ type input group if (e.target.value === 'organ') { diff --git a/src/pages/edit/sample.jsx b/src/pages/edit/sample.jsx index f496cf4ab..a00ac0a8d 100644 --- a/src/pages/edit/sample.jsx +++ b/src/pages/edit/sample.jsx @@ -93,7 +93,6 @@ function EditSample() { } } fetchSampleCategories() - resetSampleCategory() }, [source]) // only executed on init rendering, see the [] @@ -113,6 +112,12 @@ function EditSample() { setErrorMessage(data["error"]) } else { setData(data); + + // Show organ input group if sample category is 'organ' + if (data.sample_category === 'organ') { + set_organ_group_hide('') + } + // Set state with default values that will be PUT to Entity API to update setValues({ 'sample_category': data.sample_category, @@ -174,12 +179,14 @@ function EditSample() { } } }); + + if (fieldId === 'direct_ancestor_uuid') { + resetSampleCategory() + } }; const resetSampleCategory = () => { - if (editMode !== 'Create') { - return - } + if (Object.hasOwn(values, 'sample_category')) { delete values['sample_category'] } From 1783ca856e72cba14f4e47f41429868aa5c45314 Mon Sep 17 00:00:00 2001 From: maxsibilla Date: Wed, 21 Dec 2022 16:47:25 -0500 Subject: [PATCH 13/15] Modifying method to change values of fields individually rather than altogether to ensure does not get overwritten --- src/pages/edit/sample.jsx | 11 +++++------ src/public/css/main.css | 2 +- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/src/pages/edit/sample.jsx b/src/pages/edit/sample.jsx index a00ac0a8d..a396fa751 100644 --- a/src/pages/edit/sample.jsx +++ b/src/pages/edit/sample.jsx @@ -181,22 +181,21 @@ function EditSample() { }); if (fieldId === 'direct_ancestor_uuid') { - resetSampleCategory() + resetSampleCategory(e) } }; - const resetSampleCategory = () => { + const resetSampleCategory = (e) => { if (Object.hasOwn(values, 'sample_category')) { - delete values['sample_category'] + onChange(e, "sample_category", "") } if (Object.hasOwn(values, 'organ')) { - delete values['organ'] + onChange(e, "organ", "") } if (Object.hasOwn(values, 'organ_other')) { - delete values['organ_other'] + onChange(e, "organ_other", "") } - setValues(values) set_organ_group_hide('none') set_organ_other_hide('none') diff --git a/src/public/css/main.css b/src/public/css/main.css index a1449a726..6de5c7432 100644 --- a/src/public/css/main.css +++ b/src/public/css/main.css @@ -66,7 +66,7 @@ html { } p { - white-space: pre; + white-space: pre-line; } /*Required CSS to make the icons in the RUI tool inside the carousel space out properly*/ From 2d94b240d9af638b46a3008cd288c43d790e4887 Mon Sep 17 00:00:00 2001 From: maxsibilla Date: Tue, 3 Jan 2023 11:35:37 -0500 Subject: [PATCH 14/15] Fixing protocols link --- .../custom/edit/sample/AncestorInformationBox.jsx | 8 +++++--- src/components/custom/entities/sample/Protocols.jsx | 4 ++-- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/components/custom/edit/sample/AncestorInformationBox.jsx b/src/components/custom/edit/sample/AncestorInformationBox.jsx index ae64927dd..91024d804 100644 --- a/src/components/custom/edit/sample/AncestorInformationBox.jsx +++ b/src/components/custom/edit/sample/AncestorInformationBox.jsx @@ -67,11 +67,13 @@ export default class AncestorInformationBox extends React.Component {