Skip to content

Commit e7e8760

Browse files
ocshawnocshawn
and
ocshawn
authored
HP-1179: Updates to Study Registration / VLMD Submission page to support nested fields (#1365)
* HP-1179: Updates to Study Registration / VLMD Submission page to support nested fields * HP-1179: fix typo in cedar id * HP-1179: update clinicaltrials.gov api to classic endpoint * HP-1179: update CSP * HP-1179: dont create metadata clinicaltrials_gov if it does not exist --------- Co-authored-by: ocshawn <shawnoconnor@uchicago.edu>
1 parent 5ab5f49 commit e7e8760

File tree

4 files changed

+30
-11
lines changed

4 files changed

+30
-11
lines changed

dev.html

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
- https://atlas-qa-mickey.planx-pla.net for Atlas iframe in VHDC qa-mickey
1212
- https://*.quicksight.aws.amazon.com for loading AWS Quicksight dashboards into COVID-19 Home page
1313
-->
14-
<meta http-equiv="Content-Security-Policy" content="default-src 'self' https://login.bionimbus.org https://wayf.incommonfederation.org; child-src blob:; connect-src 'self' blob: localhost https://localhost:9443 wss://localhost:9443 https://*.s3.amazonaws.com https://*.mapbox.com https://opendata.datacommons.io https://static.planx-pla.net https://*.logs.datadoghq.com https://clinicaltrials.gov https://*.google-analytics.com https://*.analytics.google.com; img-src 'self' https://opendata.datacommons.io https://static.planx-pla.net https://www.google-analytics.com data: https://*.s3.amazonaws.com https://www.google-analytics.com; script-src 'self' 'unsafe-eval' https://*.google-analytics.com https://www.googletagmanager.com localhost https://localhost:9443; worker-src 'self' blob:; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com localhost https://localhost:9443; object-src 'none'; font-src 'self' data: https://fonts.googleapis.com https://fonts.gstatic.com; frame-src 'self' https://auspice.planx-pla.net https://auspice.pandemicresponsecommons.org https://atlas-qa-mickey.planx-pla.net https://*.quicksight.aws.amazon.com; ">
14+
<meta http-equiv="Content-Security-Policy" content="default-src 'self' https://login.bionimbus.org https://wayf.incommonfederation.org; child-src blob:; connect-src 'self' blob: localhost https://localhost:9443 wss://localhost:9443 https://*.s3.amazonaws.com https://*.mapbox.com https://opendata.datacommons.io https://static.planx-pla.net https://*.logs.datadoghq.com https://classic.clinicaltrials.gov https://*.google-analytics.com https://*.analytics.google.com; img-src 'self' https://opendata.datacommons.io https://static.planx-pla.net https://www.google-analytics.com data: https://*.s3.amazonaws.com https://www.google-analytics.com; script-src 'self' 'unsafe-eval' https://*.google-analytics.com https://www.googletagmanager.com localhost https://localhost:9443; worker-src 'self' blob:; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com localhost https://localhost:9443; object-src 'none'; font-src 'self' data: https://fonts.googleapis.com https://fonts.gstatic.com; frame-src 'self' https://auspice.planx-pla.net https://auspice.pandemicresponsecommons.org https://atlas-qa-mickey.planx-pla.net https://*.quicksight.aws.amazon.com; ">
1515
<meta name="viewport" content="width=device-width" />
1616
<link href="https://fonts.googleapis.com/icon?family=Source+Sans+Pro" rel="stylesheet">
1717
<link href="https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,400;0,700;1,700&display=swap" rel="stylesheet">

src/StudyRegistration/StudyRegistration.tsx

+3-5
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ const handleClinicalTrialIDValidation = async (_, ctID: string): Promise<boolean
7373
if (!ctID) {
7474
return Promise.resolve(true);
7575
}
76-
const resp = await fetch(`https://clinicaltrials.gov/api/query/field_values?expr=${encodeURIComponent(`SEARCH[Study](AREA[NCTId] ${ctID})`)}&field=NCTId&fmt=json`);
76+
const resp = await fetch(`https://classic.clinicaltrials.gov/api/query/field_values?expr=${encodeURIComponent(`SEARCH[Study](AREA[NCTId] ${ctID})`)}&field=NCTId&fmt=json`);
7777
if (!resp || resp.status !== 200) {
7878
return Promise.reject('Unable to verify ClinicalTrials.gov ID');
7979
}
@@ -100,7 +100,7 @@ const getClinicalTrialMetadata = async (ctID: string): Promise<object> => {
100100
const fieldsToFetch = clinicalTrialFieldsToFetch.slice(offset, offset + limit);
101101
offset += limit;
102102
promiseList.push(
103-
fetch(`https://clinicaltrials.gov/api/query/study_fields?expr=${encodeURIComponent(`SEARCH[Study](AREA[NCTId] ${ctID})`)}&fields=${fieldsToFetch.join(',')}&fmt=json`)
103+
fetch(`https://classic.clinicaltrials.gov/api/query/study_fields?expr=${encodeURIComponent(`SEARCH[Study](AREA[NCTId] ${ctID})`)}&fields=${fieldsToFetch.join(',')}&fmt=json`)
104104
.then(
105105
(resp) => {
106106
if (!resp || resp.status !== 200) {
@@ -207,10 +207,8 @@ const StudyRegistration: React.FunctionComponent<StudyRegistrationProps> = (prop
207207
repository: formValues.repository || '',
208208
repository_study_ids: ((!formValues.repository_study_ids || formValues.repository_study_ids[0] === '') ? [] : formValues.repository_study_ids),
209209
clinical_trials_id: ctgovID || '',
210+
clinicaltrials_gov: ctgovID ? await getClinicalTrialMetadata(ctgovID) : undefined,
210211
};
211-
if (ctgovID) {
212-
valuesToUpdate['clinicaltrials.gov'] = await getClinicalTrialMetadata(ctgovID);
213-
}
214212
preprocessStudyRegistrationMetadata(props.user.username, studyID, valuesToUpdate)
215213
.then(
216214
(preprocessedMetadata) => createCEDARInstance(cedarUserUUID, preprocessedMetadata)

src/StudyRegistration/utils.tsx

+25-4
Original file line numberDiff line numberDiff line change
@@ -33,26 +33,47 @@ export const preprocessStudyRegistrationMetadata = async (username, metadataID,
3333
}
3434
metadataToUpdate[STUDY_DATA_FIELD][studyRegistrationValidationField] = true;
3535
metadataToUpdate[STUDY_DATA_FIELD][studyRegistrationTrackingField] = username;
36-
metadataToUpdate[STUDY_DATA_FIELD] = { ...metadataToUpdate[STUDY_DATA_FIELD], ...updatedValues };
36+
37+
// add all repository_study_ids as separate objects
38+
if (updatedValues.repository_study_ids?.length > 0) {
39+
const tempStudyIDObj = updatedValues.repository_study_ids.map((studyId) => ({
40+
repository_name: updatedValues.repository,
41+
repository_study_ID: studyId,
42+
}));
43+
metadataToUpdate[STUDY_DATA_FIELD].study_metadata.metadata_location.data_repositories = tempStudyIDObj;
44+
}
45+
metadataToUpdate[STUDY_DATA_FIELD].study_metadata.metadata_location.clinical_trials_study_ID = updatedValues.clinical_trials_id;
46+
if (updatedValues.clinical_trials_id) {
47+
metadataToUpdate.clinicaltrials_gov = updatedValues.clinicaltrials_gov;
48+
}
49+
3750
return metadataToUpdate;
3851
} catch (err) {
3952
throw new Error(`Request for query MDS failed: ${err}`);
4053
}
4154
};
4255

43-
export const createCEDARInstance = async (cedarUserUUID, metadataToRegister = {}):Promise<any> => {
56+
export const createCEDARInstance = async (cedarUserUUID, metadataToRegister = { clinicaltrials_gov: {} }):Promise<any> => {
4457
const cedarCreationURL = `${cedarWrapperURL}/create`;
4558
let updatedMetadataToRegister = { ...metadataToRegister };
4659
updatedMetadataToRegister = await fetchWithCreds({
4760
path: cedarCreationURL,
4861
method: 'POST',
4962
customHeaders: { 'Content-Type': 'application/json' },
50-
body: JSON.stringify({ cedar_user_uuid: cedarUserUUID, metadata: metadataToRegister[STUDY_DATA_FIELD] }),
63+
body: JSON.stringify({
64+
cedar_user_uuid: cedarUserUUID,
65+
metadata: {
66+
appl_id: metadataToRegister[STUDY_DATA_FIELD].study_metadata.metadata_location.nih_application_id,
67+
project_title: metadataToRegister[STUDY_DATA_FIELD].study_metadata.minimal_info.study_name,
68+
study_description_summary: metadataToRegister[STUDY_DATA_FIELD].study_metadata.minimal_info.study_description,
69+
clinicaltrials_gov: metadataToRegister.clinicaltrials_gov,
70+
},
71+
}),
5172
}).then(({ status, data }) => {
5273
if (status !== 201) {
5374
throw new Error(`Request for create CEDAR instance failed with status ${status}`);
5475
}
55-
updatedMetadataToRegister[STUDY_DATA_FIELD].cedar_instance_id = data?.cedar_instance_id || '';
76+
updatedMetadataToRegister[STUDY_DATA_FIELD].study_metadata.metadata_location.cedar_study_level_metadata_template_instance_ID = data?.cedar_instance_id || '';
5677
return Promise.resolve(updatedMetadataToRegister);
5778
})
5879
.catch((err) => { throw new Error(`Request for create CEDAR instance failed: ${err}`); });

webpack.config.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ if (configFile.featureFlags && configFile.featureFlags.discoveryUseAggMDS) {
3636
connectSrcURLs.push('https://dataguids.org');
3737
}
3838
if (configFile.featureFlags && configFile.featureFlags.studyRegistration) {
39-
connectSrcURLs.push('https://clinicaltrials.gov');
39+
connectSrcURLs.push('https://classic.clinicaltrials.gov');
4040
}
4141
if (process.env.DATADOG_APPLICATION_ID && process.env.DATADOG_CLIENT_TOKEN) {
4242
connectSrcURLs.push('https://*.logs.datadoghq.com');

0 commit comments

Comments
 (0)