├── .circleci └── config.yml ├── .gitallowed ├── .github ├── CONTRIBUTING.md └── PULL_REQUEST_TEMPLATE.md ├── .gitignore ├── .gitmodules ├── LICENSE.txt ├── README.md ├── ci ├── Dockerfile.circle_build ├── README.md ├── activate_creds.sh └── upload_cloud_creds.sh ├── deploy ├── Dockerfile ├── README.md ├── bootstrap-docker.sh ├── docker-compose.yaml ├── libproject │ ├── deploy.rb │ └── jirarelease.rb └── project.rb ├── hooks ├── README.md ├── apply-git-secrets.sh ├── commit-msg ├── pre-commit ├── pre-push └── prepare-commit-msg ├── package-lock.json ├── performance ├── README.md ├── build.gradle ├── gatlingRun.png └── src │ └── gatling │ ├── resources │ ├── gatling.conf │ └── logback.xml │ └── simulations │ └── org │ └── pmiops │ └── databrowser │ ├── BasicSimulation.scala │ ├── Configuration.scala │ ├── Pages.scala │ └── Scenarios.scala ├── public-api ├── .gitignore ├── .swagger-codegen-ignore ├── .swagger2-codegen-ignore ├── .swagger3-codegen-ignore ├── .travis.yml ├── README.md ├── build.gradle ├── build.rb ├── build.sbt ├── config │ ├── cdm │ │ ├── README.md │ │ └── cdm_5_2.json │ ├── cdr_config_local.json │ ├── cdr_config_prod.json │ ├── cdr_config_stable.json │ ├── cdr_config_staging.json │ ├── cdr_config_test.json │ ├── config_local.json │ ├── config_prod.json │ ├── config_stable.json │ ├── config_staging.json │ └── config_test.json ├── db-cdr │ ├── Sv_vcf_queries │ ├── build.gradle │ ├── changelog-data │ │ ├── db.changelog-10.xml │ │ ├── db.changelog-12.xml │ │ ├── db.changelog-13.xml │ │ ├── db.changelog-14.xml │ │ ├── db.changelog-15.xml │ │ ├── db.changelog-21.xml │ │ ├── db.changelog-22.xml │ │ ├── db.changelog-26.xml │ │ ├── db.changelog-27.xml │ │ ├── db.changelog-29.xml │ │ ├── db.changelog-7.xml │ │ ├── db.changelog-9.xml │ │ └── db.changelog-master.xml │ ├── changelog-schema │ │ ├── db.changelog-10.xml │ │ ├── db.changelog-11.xml │ │ ├── db.changelog-14.xml │ │ ├── db.changelog-15.xml │ │ ├── db.changelog-17.xml │ │ ├── db.changelog-18.xml │ │ ├── db.changelog-19.xml │ │ ├── db.changelog-2.xml │ │ ├── db.changelog-20.xml │ │ ├── db.changelog-24.xml │ │ ├── db.changelog-26.xml │ │ ├── db.changelog-27.xml │ │ ├── db.changelog-29.xml │ │ ├── db.changelog-30.xml │ │ ├── db.changelog-31.xml │ │ ├── db.changelog-32.xml │ │ ├── db.changelog-33.xml │ │ ├── db.changelog-34.xml │ │ ├── db.changelog-35.xml │ │ ├── db.changelog-36.xml │ │ ├── db.changelog-37.xml │ │ ├── db.changelog-38.xml │ │ ├── db.changelog-39.xml │ │ ├── db.changelog-4.xml │ │ ├── db.changelog-40.xml │ │ ├── db.changelog-41.xml │ │ ├── db.changelog-42.xml │ │ ├── db.changelog-44.xml │ │ ├── db.changelog-45.xml │ │ ├── db.changelog-46.xml │ │ ├── db.changelog-47.xml │ │ ├── db.changelog-5.xml │ │ ├── db.changelog-52.xml │ │ ├── db.changelog-54.xml │ │ ├── db.changelog-55.xml │ │ ├── db.changelog-56.xml │ │ ├── db.changelog-57.xml │ │ ├── db.changelog-58.xml │ │ ├── db.changelog-64.xml │ │ ├── db.changelog-65.xml │ │ ├── db.changelog-66.xml │ │ ├── db.changelog-67.xml │ │ ├── db.changelog-68.xml │ │ ├── db.changelog-69.xml │ │ ├── db.changelog-7.xml │ │ ├── db.changelog-70.xml │ │ ├── db.changelog-71.xml │ │ ├── db.changelog-72.xml │ │ ├── db.changelog-73.xml │ │ ├── db.changelog-74.xml │ │ ├── db.changelog-75.xml │ │ ├── db.changelog-76.xml │ │ ├── db.changelog-77.xml │ │ ├── db.changelog-78.xml │ │ ├── db.changelog-79.xml │ │ ├── db.changelog-8.xml │ │ ├── db.changelog-80.xml │ │ ├── db.changelog-81.xml │ │ ├── db.changelog-82.xml │ │ ├── db.changelog-83.xml │ │ ├── db.changelog-84.xml │ │ ├── db.changelog-9.xml │ │ └── db.changelog-master.xml │ ├── drop_db.sql │ ├── generate-cdr │ │ ├── README.md │ │ ├── bq-schemas │ │ │ ├── achilles_analysis.json │ │ │ ├── achilles_results.json │ │ │ ├── achilles_results_concept.json │ │ │ ├── achilles_results_dist.json │ │ │ ├── cb_criteria.json │ │ │ ├── cb_criteria_ancestor.json │ │ │ ├── cb_criteria_attribute.json │ │ │ ├── cb_criteria_relationship.json │ │ │ ├── cb_review_all_events.json │ │ │ ├── cb_review_survey.json │ │ │ ├── cb_search_all_events.json │ │ │ ├── cb_search_person.json │ │ │ ├── concept.json │ │ │ ├── concept_ancestor.json │ │ │ ├── concept_relationship.json │ │ │ ├── concept_synonym.json │ │ │ ├── criteria_stratum.json │ │ │ ├── domain.json │ │ │ ├── domain_info.json │ │ │ ├── domain_vocabulary_info.json │ │ │ ├── filter_conditions.json │ │ │ ├── fmh_conditions_member_metadata.json │ │ │ ├── fmh_fm_metadata.json │ │ │ ├── fmh_metadata.json │ │ │ ├── measurement_concept_info.json │ │ │ ├── person_condition.json │ │ │ ├── person_drug.json │ │ │ ├── person_lab.json │ │ │ ├── person_observation.json │ │ │ ├── person_physical_measure.json │ │ │ ├── person_procedure.json │ │ │ ├── person_vital.json │ │ │ ├── pfhh_path_update.json │ │ │ ├── pfhh_qa_metadata.json │ │ │ ├── search_codes.json │ │ │ ├── search_drug.json │ │ │ ├── search_measurement.json │ │ │ ├── search_person.json │ │ │ ├── search_pm.json │ │ │ ├── search_ppi.json │ │ │ ├── search_visit.json │ │ │ ├── source_standard_unit_map.json │ │ │ ├── survey_concept_relationship.json │ │ │ ├── survey_metadata.json │ │ │ ├── survey_module.json │ │ │ ├── survey_version_metadata.json │ │ │ ├── unit_map.json │ │ │ └── vocabulary.json │ │ ├── cloudsql-import.sh │ │ ├── create_db.sql │ │ ├── csv │ │ │ ├── achilles_analysis.csv │ │ │ ├── achilles_results.csv │ │ │ ├── domain_info.csv │ │ │ ├── filter_conditions.csv │ │ │ ├── fmh_conditions_member_metadata.csv │ │ │ ├── fmh_fm_metadata.csv │ │ │ ├── fmh_metadata.csv │ │ │ ├── pfhh_path_update.csv │ │ │ ├── pfhh_qa_metadata.csv │ │ │ ├── question_concept.csv │ │ │ ├── similar_unit_concepts.csv │ │ │ ├── source_standard_unit_map.csv │ │ │ ├── survey_concept_relationship.csv │ │ │ ├── survey_metadata.csv │ │ │ ├── survey_module.csv │ │ │ ├── survey_version_metadata.csv │ │ │ └── unit_map.csv │ │ ├── fmh-aggregate-counts.sh │ │ ├── generate-cdr.rb │ │ ├── generate-cloudsql-db.sh │ │ ├── generate-local-cdr-db.sh │ │ ├── generate-local-count-dbs.sh │ │ ├── generate-public-cdr-counts.sh │ │ ├── generate-survey-counts-pfhh.sh │ │ ├── generate-survey-counts.sh │ │ ├── generate_circle_key │ │ │ └── generate_circle_key.sh │ │ ├── generate_criteria_stratum.sh │ │ ├── import-gcs-data.sh │ │ ├── init-new-cdr-db.sh │ │ ├── libproject │ │ │ └── devstart.rb │ │ ├── local-mysql-import.sh │ │ ├── make-bq-data-dump.sh │ │ ├── make-bq-data.sh │ │ ├── make-bq-public-data.sh │ │ ├── make-mysqldump.sh │ │ ├── move-aggregated-counts.sh │ │ ├── run-achilles-queries.sh │ │ └── run-measurement-queries.sh │ ├── run-drop-db.sh │ ├── settings.gradle │ └── vars.env ├── db │ ├── build.gradle │ ├── changelog │ │ ├── db.changelog-1.xml │ │ ├── db.changelog-21.xml │ │ ├── db.changelog-3.xml │ │ ├── db.changelog-48-default-cdr.xml │ │ ├── db.changelog-5.xml │ │ ├── db.changelog-6.xml │ │ └── db.changelog-master.xml │ ├── create_db.sql │ ├── create_indexes.sql │ ├── csv │ │ └── concept.csv │ ├── drop_db.sql │ ├── load_vars.sh │ ├── run-migrations.sh │ ├── settings.gradle │ └── vars.env ├── docker-compose.yaml ├── docker-sync.yml ├── docs │ ├── AchillesResult.md │ ├── AchillesResultDist.md │ ├── AchillesResultListResponse.md │ ├── Analysis.md │ ├── AnalysisListResponse.md │ ├── CBCriteria.md │ ├── CdrVersion.md │ ├── CdrVersionListResponse.md │ ├── CdrVersionsApi.md │ ├── Concept.md │ ├── ConceptAnalysis.md │ ├── ConceptAnalysisListResponse.md │ ├── ConceptListResponse.md │ ├── ConfigApi.md │ ├── ConfigResponse.md │ ├── CountAnalysis.md │ ├── CriteriaListResponse.md │ ├── CriteriaParentResponse.md │ ├── DataAccessLevel.md │ ├── DataBrowserApi.md │ ├── Domain.md │ ├── DomainInfo.md │ ├── DomainInfosAndSurveyModulesResponse.md │ ├── ErrorCode.md │ ├── ErrorResponse.md │ ├── IdVerificationStatus.md │ ├── MatchType.md │ ├── MeasurementConceptInfo.md │ ├── Profile.md │ ├── ProfileApi.md │ ├── QuestionConcept.md │ ├── QuestionConceptListResponse.md │ ├── SearchConceptsRequest.md │ ├── StandardConceptFilter.md │ ├── SubQuestionFetchResponse.md │ ├── SurveyModule.md │ ├── SurveyQuestionFetchResponse.md │ └── SurveyVersionCountResponse.md ├── git_push.sh ├── gradle.properties ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── libproject │ ├── cloudsqlproxycontext.rb │ ├── devstart.rb │ ├── environments.rb │ ├── gcloudcontext.rb │ ├── generate_appengine_web_xml.rb │ ├── load_local_data_and_configs.sh │ └── wboptionsparser.rb ├── project.rb ├── settings.gradle ├── src │ ├── dev │ │ └── server │ │ │ ├── Dockerfile │ │ │ ├── with-mysql-login.sh │ │ │ └── with-uid.sh │ ├── integration │ │ └── java │ │ │ └── org │ │ │ └── pmiops │ │ │ └── workbench │ │ │ ├── google │ │ │ └── BuildIapRequest.java │ │ │ └── publicapi │ │ │ └── DataBrowserControllerIntegrationTest.java │ ├── main │ │ ├── AndroidManifest.xml │ │ ├── java │ │ │ └── org │ │ │ │ └── pmiops │ │ │ │ └── workbench │ │ │ │ ├── PublicApiApplication.java │ │ │ │ ├── PublicApiServletInitializer.java │ │ │ │ ├── RootController.java │ │ │ │ ├── cdr │ │ │ │ ├── CdrDataSource.java │ │ │ │ ├── CdrDbConfig.java │ │ │ │ ├── CdrVersionContext.java │ │ │ │ ├── CommonTestDialect.java │ │ │ │ ├── DbParams.java │ │ │ │ ├── MySQLDialect.java │ │ │ │ ├── dao │ │ │ │ │ ├── AchillesAnalysisDao.java │ │ │ │ │ ├── AchillesResultDao.java │ │ │ │ │ ├── AchillesResultDistDao.java │ │ │ │ │ ├── CBCriteriaDao.java │ │ │ │ │ ├── ConceptDao.java │ │ │ │ │ ├── ConceptRelationshipDao.java │ │ │ │ │ ├── ConceptService.java │ │ │ │ │ ├── ConceptSynonymDao.java │ │ │ │ │ ├── DomainInfoDao.java │ │ │ │ │ ├── DomainVocabularyInfoDao.java │ │ │ │ │ ├── NoCountFindAllDao.java │ │ │ │ │ ├── SurveyMetadataDao.java │ │ │ │ │ └── SurveyModuleDao.java │ │ │ │ └── model │ │ │ │ │ ├── ConceptRelationship.java │ │ │ │ │ ├── ConceptRelationshipId.java │ │ │ │ │ ├── ConceptSynonym.java │ │ │ │ │ ├── DbAchillesAnalysis.java │ │ │ │ │ ├── DbAchillesResult.java │ │ │ │ │ ├── DbAchillesResultDist.java │ │ │ │ │ ├── DbConcept.java │ │ │ │ │ ├── DbCriteria.java │ │ │ │ │ ├── DbDomainInfo.java │ │ │ │ │ ├── DbMeasurementConceptInfo.java │ │ │ │ │ ├── DbSurveyMetadata.java │ │ │ │ │ ├── DbSurveyMetadataId.java │ │ │ │ │ ├── DbSurveyModule.java │ │ │ │ │ ├── DomainVocabularyInfo.java │ │ │ │ │ └── VocabularyCount.java │ │ │ │ ├── config │ │ │ │ ├── AppEngineConfig.java │ │ │ │ ├── BigQueryConfig.java │ │ │ │ ├── CacheSpringConfiguration.java │ │ │ │ ├── CdrBigQuerySchemaConfig.java │ │ │ │ ├── CdrBigQuerySchemaConfigService.java │ │ │ │ ├── CdrConfig.java │ │ │ │ ├── EnvVars.java │ │ │ │ ├── PublicApiWebMvcConfig.java │ │ │ │ ├── WebSecurityConfig.java │ │ │ │ └── WorkbenchConfig.java │ │ │ │ ├── db │ │ │ │ ├── Params.java │ │ │ │ ├── WorkbenchDbConfig.java │ │ │ │ ├── dao │ │ │ │ │ ├── CdrVersionDao.java │ │ │ │ │ └── ConfigDao.java │ │ │ │ └── model │ │ │ │ │ ├── CdrVersion.java │ │ │ │ │ ├── Config.java │ │ │ │ │ └── DbCdrVersion.java │ │ │ │ ├── exceptions │ │ │ │ ├── BadRequestException.java │ │ │ │ ├── DataBrowserException.java │ │ │ │ ├── DataNotFoundException.java │ │ │ │ ├── ExceptionAdvice.java │ │ │ │ ├── ForbiddenException.java │ │ │ │ ├── ServerErrorException.java │ │ │ │ └── ServerUnavailableException.java │ │ │ │ ├── interceptors │ │ │ │ ├── ClearCdrVersionContextInterceptor.java │ │ │ │ └── SecurityHeadersInterceptor.java │ │ │ │ ├── privateworkbench │ │ │ │ ├── PrivateWorkbenchConfig.java │ │ │ │ ├── PrivateWorkbenchService.java │ │ │ │ └── PrivateWorkbenchServiceImpl.java │ │ │ │ ├── publicapi │ │ │ │ ├── CdrVersionsController.java │ │ │ │ ├── ConfigController.java │ │ │ │ ├── DataBrowserController.java │ │ │ │ └── GenomicsController.java │ │ │ │ ├── service │ │ │ │ ├── AchillesAnalysisService.java │ │ │ │ ├── AchillesResultDistService.java │ │ │ │ ├── AchillesResultService.java │ │ │ │ ├── BigQueryService.java │ │ │ │ ├── CdrVersionService.java │ │ │ │ ├── CommonStorageEnums.java │ │ │ │ ├── CriteriaService.java │ │ │ │ ├── DomainInfoService.java │ │ │ │ ├── SurveyMetadataService.java │ │ │ │ └── SurveyModuleService.java │ │ │ │ └── utils │ │ │ │ └── mappers │ │ │ │ ├── AchillesMapper.java │ │ │ │ ├── CdrVersionMapper.java │ │ │ │ ├── CommonMappers.java │ │ │ │ ├── ConceptMapper.java │ │ │ │ ├── CriteriaMapper.java │ │ │ │ ├── DomainMapper.java │ │ │ │ ├── MapStructConfig.java │ │ │ │ └── SurveyMetadataMapper.java │ │ ├── resources │ │ │ ├── application.properties │ │ │ ├── private-workbench.yaml │ │ │ └── public-api.yaml │ │ └── webapp │ │ │ └── WEB-INF │ │ │ ├── appengine-web.xml.template │ │ │ ├── logging.properties │ │ │ └── web.xml │ └── test │ │ ├── java │ │ └── org │ │ │ └── pmiops │ │ │ └── workbench │ │ │ ├── Providers.java │ │ │ ├── cdr │ │ │ ├── DataBrowserControllerTest.java │ │ │ ├── dao │ │ │ │ ├── AchillesAnalysisDaoTest.java │ │ │ │ ├── AchillesResultDaoTest.java │ │ │ │ ├── CbCriteriaDaoTest.java │ │ │ │ ├── ConceptRelationshipDaoTest.java │ │ │ │ ├── DomainInfoDaoTest.java │ │ │ │ └── SurveyModuleDaoTest.java │ │ │ └── model │ │ │ │ └── ConceptTest.java │ │ │ ├── db │ │ │ └── model │ │ │ │ └── CommonStorageEnumsTest.java │ │ │ ├── privateworkbench │ │ │ └── api │ │ │ │ └── ProfileApiTest.java │ │ │ └── publicapi │ │ │ └── client │ │ │ └── api │ │ │ ├── CdrVersionsApiTest.java │ │ │ ├── ConfigApiTest.java │ │ │ └── DataBrowserApiTest.java │ │ └── resources │ │ └── application.properties └── tools │ └── src │ ├── main │ └── java │ │ └── org │ │ └── pmiops │ │ └── workbench │ │ └── tools │ │ ├── CommandLineToolConfig.java │ │ ├── ConfigLoader.java │ │ ├── TimestampGsonAdapter.java │ │ └── UpdateCdrVersions.java │ └── resources │ └── application.properties └── public-ui ├── .dockerignore ├── .eslintignore ├── .eslintrc.js ├── .gcloudignore ├── .npmrc ├── README.md ├── angular.json ├── app.yaml ├── dispatch.yaml ├── docker-compose.yaml ├── iap_settings.yaml ├── libproject └── devstart.rb ├── openapitools.json ├── package.json ├── project.rb ├── src ├── app │ ├── app-routing.tsx │ ├── app.module.ts │ ├── components │ │ ├── app-router.tsx │ │ ├── beta-bar │ │ │ ├── beta-bar.component.css │ │ │ ├── beta-bar.component.html │ │ │ └── beta-bar.component.ts │ │ └── db-no-results │ │ │ ├── db-no-results.component.css │ │ │ ├── db-no-results.component.html │ │ │ ├── db-no-results.component.spec.ts │ │ │ ├── db-no-results.component.ts │ │ │ └── no-results-search.component.tsx │ ├── data-browser │ │ ├── base-react │ │ │ └── base-react.wrapper.tsx │ │ ├── cdr-version │ │ │ └── cdr-version-info.tsx │ │ ├── chart │ │ │ ├── chart.component.css │ │ │ ├── chart.component.html │ │ │ └── chart.component.ts │ │ ├── charts │ │ │ ├── chart-age │ │ │ │ ├── chart-age-react.component.tsx │ │ │ │ ├── chart-age.component.css │ │ │ │ ├── chart-age.component.html │ │ │ │ ├── chart-age.component.spec.ts │ │ │ │ └── chart-age.component.ts │ │ │ ├── chart-base │ │ │ │ ├── chart-base.component.css │ │ │ │ ├── chart-base.component.html │ │ │ │ ├── chart-base.component.spec.ts │ │ │ │ └── chart-base.component.ts │ │ │ ├── chart-biosex │ │ │ │ ├── chart-biosex-react.component.tsx │ │ │ │ ├── chart-biosex.component.css │ │ │ │ ├── chart-biosex.component.html │ │ │ │ ├── chart-biosex.component.spec.ts │ │ │ │ └── chart-biosex.component.ts │ │ │ ├── chart-fitbit │ │ │ │ ├── chart-fitbit-react.component.tsx │ │ │ │ ├── chart-fitbit.component.css │ │ │ │ ├── chart-fitbit.component.html │ │ │ │ ├── chart-fitbit.component.spec.ts │ │ │ │ └── chart-fitbit.component.ts │ │ │ ├── chart-measurement-values │ │ │ │ └── chart-value-react.component.tsx │ │ │ ├── chart-sources │ │ │ │ └── chart-sources-react.component.tsx │ │ │ ├── chart-stacked-age-gender │ │ │ │ └── chart-stacked-age-gender-react.component.tsx │ │ │ ├── chart-survey-answers │ │ │ │ ├── chart-survey-answers.component.css │ │ │ │ ├── chart-survey-answers.component.html │ │ │ │ ├── chart-survey-answers.component.spec.ts │ │ │ │ ├── chart-survey-answers.component.ts │ │ │ │ └── react-survey-answer-chart.component.tsx │ │ │ ├── chart-top-results │ │ │ │ ├── chart-top-results-react.component.tsx │ │ │ │ ├── chart-top-results.component.css │ │ │ │ ├── chart-top-results.component.html │ │ │ │ ├── chart-top-results.component.spec.ts │ │ │ │ └── chart-top-results.component.ts │ │ │ ├── chart-version │ │ │ │ └── chart-version-react.component.tsx │ │ │ ├── chart.service.spec.ts │ │ │ ├── chart.service.ts │ │ │ └── react-base-chart │ │ │ │ └── base-chart.service.ts │ │ ├── components │ │ │ ├── heat-map │ │ │ │ └── heat-map.component.tsx │ │ │ ├── recursive-tree │ │ │ │ ├── recursive-tree.component.css │ │ │ │ ├── recursive-tree.component.html │ │ │ │ ├── recursive-tree.component.spec.ts │ │ │ │ └── recursive-tree.component.ts │ │ │ ├── source-tree │ │ │ │ ├── source-tree-react.component.tsx │ │ │ │ ├── source-tree.component.css │ │ │ │ ├── source-tree.component.spec.ts │ │ │ │ └── source-tree.component.ts │ │ │ ├── survey-version-table │ │ │ │ ├── pfhh-survey-table-react.component.tsx │ │ │ │ ├── survey-version-table-react.component.tsx │ │ │ │ ├── survey-version-table.component.css │ │ │ │ ├── survey-version-table.component.html │ │ │ │ ├── survey-version-table.component.spec.ts │ │ │ │ └── survey-version-table.component.ts │ │ │ └── tooltip │ │ │ │ ├── tooltip-no-icon-react.component.tsx │ │ │ │ ├── tooltip-react.component.tsx │ │ │ │ ├── tooltip.component.css │ │ │ │ ├── tooltip.component.html │ │ │ │ ├── tooltip.component.spec.ts │ │ │ │ └── tooltip.component.ts │ │ ├── concept-charts │ │ │ ├── concept-charts.component.css │ │ │ ├── concept-charts.component.html │ │ │ ├── concept-charts.component.spec.ts │ │ │ └── concept-charts.component.ts │ │ ├── data-browser.module.ts │ │ ├── databrowser-routing.module.ts │ │ ├── search │ │ │ └── home-search.component.tsx │ │ ├── services │ │ │ ├── tooltip.service.ts │ │ │ ├── tree-highlight.service.spec.ts │ │ │ ├── tree-highlight.service.ts │ │ │ ├── video.service.spec.ts │ │ │ └── video.service.ts │ │ ├── sources │ │ │ ├── sources.component.css │ │ │ ├── sources.component.html │ │ │ ├── sources.component.spec.ts │ │ │ └── sources.component.ts │ │ └── views │ │ │ ├── concept-chart │ │ │ └── concept-chart-react.component.tsx │ │ │ ├── ehr-view │ │ │ ├── components │ │ │ │ └── concept-row-react.component.tsx │ │ │ ├── ehr-view-react.component.tsx │ │ │ ├── ehr-view.component.css │ │ │ ├── ehr-view.component.html │ │ │ ├── ehr-view.component.spec.ts │ │ │ └── ehr-view.component.ts │ │ │ ├── error-message │ │ │ ├── error-message-react.component.tsx │ │ │ ├── error-message.component.css │ │ │ ├── error-message.component.html │ │ │ ├── error-message.component.spec.ts │ │ │ └── error-message.component.ts │ │ │ ├── fitbit-view │ │ │ ├── fitbit-view-react.component.tsx │ │ │ ├── fitbit-view.component.css │ │ │ ├── fitbit-view.component.html │ │ │ ├── fitbit-view.component.spec.ts │ │ │ └── fitbit-view.component.ts │ │ │ ├── genomic-view │ │ │ ├── components │ │ │ │ ├── #variant-filter-slider.component.tsx │ │ │ │ ├── genomic-chart.component.tsx │ │ │ │ ├── genomic-faq.component.tsx │ │ │ │ ├── genomic-overview.component.tsx │ │ │ │ ├── genomic-search.component.tsx │ │ │ │ ├── population-chart.component.tsx │ │ │ │ ├── slider-filter │ │ │ │ │ ├── Surface.tsx │ │ │ │ │ ├── slider-components.tsx │ │ │ │ │ ├── slider-constants.tsx │ │ │ │ │ └── variant-filter-slider.component.tsx │ │ │ │ ├── table-paginator.component.tsx │ │ │ │ ├── variant-expanded.component.tsx │ │ │ │ ├── variant-filter-chips.component.tsx │ │ │ │ ├── variant-filter-item.component.tsx │ │ │ │ ├── variant-filter-slider.component.tsx │ │ │ │ ├── variant-filter.component.tsx │ │ │ │ ├── variant-row.component.tsx │ │ │ │ ├── variant-search.component.tsx │ │ │ │ ├── variant-sort-item.component.tsx │ │ │ │ └── variant-table.component.tsx │ │ │ └── genomic-view.component.tsx │ │ │ ├── intro-vids │ │ │ ├── intro-vids-react.component.tsx │ │ │ ├── intro-vids.component.css │ │ │ ├── intro-vids.component.html │ │ │ ├── intro-vids.component.spec.ts │ │ │ └── intro-vids.component.ts │ │ │ ├── pm │ │ │ ├── pm-react.component.tsx │ │ │ ├── pm.component.css │ │ │ ├── pm.component.html │ │ │ ├── pm.component.spec.ts │ │ │ └── pm.component.ts │ │ │ ├── quick-search │ │ │ ├── genomic-call-to-action-react.component.tsx │ │ │ ├── home-view-react.component.tsx │ │ │ ├── quick-search.component.css │ │ │ ├── quick-search.component.html │ │ │ ├── quick-search.component.spec.ts │ │ │ └── quick-search.component.ts │ │ │ ├── survey-chart │ │ │ ├── survey-chart-react.component.tsx │ │ │ ├── survey-chart.component.css │ │ │ ├── survey-chart.component.html │ │ │ ├── survey-chart.component.spec.ts │ │ │ └── survey-chart.component.ts │ │ │ ├── survey-view │ │ │ ├── components │ │ │ │ ├── survey-answer-react.component.tsx │ │ │ │ └── survey-question-react.component.tsx │ │ │ ├── survey-desc.component.tsx │ │ │ └── survey-react-view.component.tsx │ │ │ └── sv-genomic-view │ │ │ └── components │ │ │ ├── consequence-gene-display-component.tsx │ │ │ ├── slider-filter │ │ │ ├── Surface.tsx │ │ │ ├── slider-components.tsx │ │ │ ├── slider-constants.tsx │ │ │ └── sv-variant-filter-slider.component.tsx │ │ │ ├── sv-genomic-search.component.tsx │ │ │ ├── sv-variant-expanded.component.tsx │ │ │ ├── sv-variant-filter-chips.component.tsx │ │ │ ├── sv-variant-filter-item.component.tsx │ │ │ ├── sv-variant-filter-slider.component.tsx │ │ │ ├── sv-variant-filter.component.tsx │ │ │ ├── sv-variant-row.component.tsx │ │ │ ├── sv-variant-search.component.tsx │ │ │ ├── sv-variant-sort-item.component.tsx │ │ │ ├── sv-variant-table.component.tsx │ │ │ └── table-paginator.component.tsx │ ├── guards │ │ └── is-safe-guard.service.ts │ ├── services │ │ ├── error-reporter.service.ts │ │ ├── fetch.module.ts │ │ ├── server-config.service.ts │ │ └── swagger-fetch-clients.ts │ ├── shared │ │ ├── components │ │ │ ├── breadcrumb │ │ │ │ ├── breadcrumb-react.component.tsx │ │ │ │ ├── breadcrumb.component.css │ │ │ │ ├── breadcrumb.component.html │ │ │ │ ├── breadcrumb.component.spec.ts │ │ │ │ └── breadcrumb.component.ts │ │ │ ├── highlight-search │ │ │ │ ├── HighlightReactComponent.tsx │ │ │ │ ├── highlight-search.component.css │ │ │ │ ├── highlight-search.component.html │ │ │ │ ├── highlight-search.component.spec.ts │ │ │ │ └── highlight-search.component.ts │ │ │ ├── pop-up │ │ │ │ ├── PopUpReactComponent.tsx │ │ │ │ ├── pop-up.component.css │ │ │ │ ├── pop-up.component.html │ │ │ │ ├── pop-up.component.spec.ts │ │ │ │ └── pop-up.component.ts │ │ │ ├── rh-footer │ │ │ │ ├── rh-footer.component.css │ │ │ │ ├── rh-footer.component.html │ │ │ │ ├── rh-footer.component.spec.ts │ │ │ │ ├── rh-footer.component.ts │ │ │ │ └── rh-footer.tsx │ │ │ ├── rh-header │ │ │ │ ├── rh-header.component.css │ │ │ │ ├── rh-header.component.html │ │ │ │ ├── rh-header.component.spec.ts │ │ │ │ ├── rh-header.component.ts │ │ │ │ └── rh-header.tsx │ │ │ └── spinner │ │ │ │ ├── spinner.component.css │ │ │ │ ├── spinner.component.html │ │ │ │ └── spinner.component.ts │ │ ├── services │ │ │ ├── header-footer.service.spec.ts │ │ │ └── header-footer.service.ts │ │ └── shared.module.ts │ ├── styles │ │ ├── buttons.css │ │ ├── cards.css │ │ ├── headers.css │ │ ├── inputs.css │ │ ├── page.css │ │ └── template.css │ ├── utils │ │ ├── clr-alert.tsx │ │ ├── clr-icon.tsx │ │ ├── colors.tsx │ │ ├── conceptGroup.ts │ │ ├── conceptWithAnalysis.ts │ │ ├── constants.tsx │ │ ├── db-config.service.spec.ts │ │ ├── db-config.service.ts │ │ ├── enum-defs.ts │ │ ├── enum-metadata.tsx │ │ ├── global-styles.tsx │ │ ├── google_analytics.ts │ │ ├── icons.tsx │ │ ├── index.tsx │ │ ├── navigation.tsx │ │ ├── spinner.tsx │ │ ├── stores.tsx │ │ ├── subscribable.ts │ │ └── survey-utils.ts │ └── views │ │ ├── app │ │ ├── app.component.css │ │ ├── app.component.html │ │ ├── app.component.spec.ts │ │ └── app.component.ts │ │ ├── emergency │ │ ├── emergency.component.css │ │ ├── emergency.component.html │ │ ├── emergency.component.spec.ts │ │ └── emergency.component.ts │ │ └── page-template-signed-out │ │ ├── page-template-signed-out.component.css │ │ ├── page-template-signed-out.component.html │ │ ├── page-template-signed-out.component.spec.ts │ │ └── page-template-signed-out.component.ts ├── assets │ ├── backgrounds │ │ ├── background-pattern.png │ │ ├── background-pattern1.png │ │ ├── background-pattern_invert.png │ │ ├── plus_background.png │ │ └── plus_bg-invert.png │ ├── css │ │ ├── email_sign_up.css │ │ ├── footer.css │ │ └── rhstyle.css │ ├── db-images │ │ ├── All_Of_Us_Logo.svg │ │ ├── Data_Browser_Logo.svg │ │ ├── allofus_research-hub_color.png │ │ ├── allofus_research-hub_white.png │ │ ├── facebook-logo.svg │ │ ├── instagram-logo.svg │ │ ├── man-standing.png │ │ ├── man-vest.png │ │ ├── nih_allofus_color.png │ │ ├── nih_allofus_white.png │ │ ├── twitter-logo.svg │ │ ├── woman-chair.png │ │ ├── woman-standing.png │ │ └── youtube-logo.svg │ ├── fonts │ │ ├── 38B71D_0_0.eot │ │ ├── 38B71D_0_0.ttf │ │ ├── 38B71D_0_0.woff │ │ ├── 38B71D_0_0.woff2 │ │ ├── 38B71D_1_0.eot │ │ ├── 38B71D_1_0.ttf │ │ ├── 38B71D_1_0.woff │ │ ├── 38B71D_1_0.woff2 │ │ ├── 38B71D_2_0.eot │ │ ├── 38B71D_2_0.ttf │ │ ├── 38B71D_2_0.woff │ │ ├── 38B71D_2_0.woff2 │ │ ├── 38B71D_3_0.eot │ │ ├── 38B71D_3_0.ttf │ │ ├── 38B71D_3_0.woff │ │ ├── 38B71D_3_0.woff2 │ │ ├── 38B71D_4_0.eot │ │ ├── 38B71D_4_0.ttf │ │ ├── 38B71D_4_0.woff │ │ ├── 38B71D_4_0.woff2 │ │ ├── 38B71D_5_0.eot │ │ ├── 38B71D_5_0.ttf │ │ ├── 38B71D_5_0.woff │ │ ├── 38B71D_5_0.woff2 │ │ ├── 38B71D_6_0.eot │ │ ├── 38B71D_6_0.ttf │ │ ├── 38B71D_6_0.woff │ │ ├── 38B71D_6_0.woff2 │ │ ├── 38B71D_7_0.eot │ │ ├── 38B71D_7_0.ttf │ │ ├── 38B71D_7_0.woff │ │ ├── 38B71D_7_0.woff2 │ │ ├── Gotham Bold.otf │ │ ├── Gotham Book.otf │ │ ├── Gotham Light.otf │ │ ├── Gotham Medium.otf │ │ ├── GothamBold.eot │ │ ├── GothamBold.otf │ │ ├── GothamBold.svg │ │ ├── GothamBold.ttf │ │ ├── GothamBold.woff │ │ ├── GothamBold.woff2 │ │ ├── GothamBook.eot │ │ ├── GothamBook.otf │ │ ├── GothamBook.svg │ │ ├── GothamBook.ttf │ │ ├── GothamBook.woff │ │ ├── GothamBook.woff2 │ │ ├── GothamLight.eot │ │ ├── GothamLight.otf │ │ ├── GothamLight.svg │ │ ├── GothamLight.ttf │ │ ├── GothamLight.woff │ │ ├── GothamLight.woff2 │ │ ├── GothamMedium.eot │ │ ├── GothamMedium.otf │ │ ├── GothamMedium.svg │ │ ├── GothamMedium.ttf │ │ ├── GothamMedium.woff │ │ ├── GothamMedium.woff2 │ │ ├── NonBreakingSpaceOverride.woff │ │ └── NonBreakingSpaceOverride.woff2 │ ├── icons │ │ ├── arrow-down-nav-mobile.png │ │ ├── divider.svg │ │ ├── duplicate.svg │ │ ├── edit.svg │ │ ├── google-icon.png │ │ ├── icon_data-browser.png │ │ ├── icon_data-snapshots.png │ │ ├── icon_data-sources.png │ │ ├── icon_enevelope-blue.png │ │ ├── icon_enevelope-white.png │ │ ├── icon_help.png │ │ ├── icon_how-the-hub.png │ │ ├── icon_methods.png │ │ ├── icon_privacy-security.png │ │ ├── icon_program-overview.png │ │ ├── icon_researchers-as-partners.png │ │ ├── icon_search.png │ │ ├── icon_survey-explorer.png │ │ ├── icon_workbench.png │ │ ├── icons_faqs.png │ │ ├── icons_introductoryvideo.png │ │ ├── icons_userguide.png │ │ ├── lock.svg │ │ ├── search_icon.png │ │ ├── share.svg │ │ ├── source_btn.svg │ │ ├── source_btn_active.svg │ │ └── trash.svg │ ├── images │ │ ├── all-of-us-logo.svg │ │ ├── applyForAccess_btn.png │ │ ├── arrow-down-nav-mobile.svg │ │ ├── arrow-right-hover.svg │ │ ├── arrow-right.svg │ │ ├── auo-logo-footer.svg │ │ ├── exclose.svg │ │ ├── icon-menu-close.svg │ │ ├── icon-menu-hover.svg │ │ ├── icon-menu.svg │ │ ├── login-group.png │ │ ├── login-standing.png │ │ ├── logo-registration-non-signed-in.svg │ │ ├── logos-fpo-logo.svg │ │ ├── logos-nih-ao-u-logo-color.svg │ │ ├── nih-logo-footer.svg │ │ ├── portal-logo.svg │ │ ├── search-hover.svg │ │ └── search.svg │ ├── js │ │ └── mailchimpsubcribe.js │ ├── maps │ │ └── us_and_terr.json │ ├── pdf │ │ ├── Databrowser_Tutorial_4_26_2019.pdf │ │ └── Databrowser_User_Guide_in_RH 5_18_20.pdf │ ├── surveys │ │ ├── 1585710.pdf │ │ ├── 1585855.pdf │ │ ├── 1586134.pdf │ │ ├── 43528698.pdf │ │ ├── 43528895.pdf │ │ ├── 43529712.pdf │ │ ├── AoU PPI_Basics_version_2018.06.04.docx │ │ ├── AoU PPI_Family Medical History_2018.05.31.docx │ │ ├── AoU PPI_Healthcare Access_English_2018.5.31.docx │ │ ├── AoU PPI_Lifestyle_2017.05.30.docx │ │ ├── AoU PPI_Overall Health_2018.05.31.docx │ │ ├── AoU PPI_Personal Medical History_2018TBD.docx │ │ ├── Behavioral_Health_Personality_Spanish.pdf │ │ ├── COPE_survey_Dec_2020_English.pdf │ │ ├── COPE_survey_Dec_2020_Spanish.pdf │ │ ├── COPE_survey_Fall_2021_English.pdf │ │ ├── COPE_survey_Fall_2021_Spanish.pdf │ │ ├── COPE_survey_Feb_2021_English.pdf │ │ ├── COPE_survey_Feb_2021_Spanish.pdf │ │ ├── COPE_survey_July_2020_English.pdf │ │ ├── COPE_survey_July_2020_Spanish.pdf │ │ ├── COPE_survey_June_2020_English.pdf │ │ ├── COPE_survey_June_2020_Spanish.pdf │ │ ├── COPE_survey_May_2020_English.pdf │ │ ├── COPE_survey_May_2020_Spanish.pdf │ │ ├── COPE_survey_New Year_2022_Spanish.pdf │ │ ├── COPE_survey_New_Year_2022_English.pdf │ │ ├── COPE_survey_Nov_2020_English.pdf │ │ ├── COPE_survey_Nov_2020_Spanish.pdf │ │ ├── COPE_survey_Summer_2021_English.pdf │ │ ├── COPE_survey_Summer_2021_Spanish.pdf │ │ ├── COPE_survey_Winter_2021_English.pdf │ │ ├── COPE_survey_Winter_2021_Spanish.pdf │ │ ├── Emotional_Health_Well_Being_Spanish.pdf │ │ ├── Family_Health_History.pdf │ │ ├── Family_Health_History_Survey_English.pdf │ │ ├── Family_Health_History_Survey_Spanish.pdf │ │ ├── Family_History.pdf │ │ ├── Health_Care_Access_Utilization.pdf │ │ ├── Health_Care_Access_Utilization_Spanish.pdf │ │ ├── Lifestyle.pdf │ │ ├── Lifestyle_Spanish.pdf │ │ ├── Overall_Health.pdf │ │ ├── Overall_Health_Spanish.pdf │ │ ├── Personal_Medical_History.pdf │ │ ├── Personal_Medical_History_Survey_English.pdf │ │ ├── Personal_Medical_History_Survey_Spanish.pdf │ │ ├── Personal_and_Family_Health_History.pdf │ │ ├── SDOH Survey Spanish.pdf │ │ ├── Social_Determinants_of_Health.pdf │ │ ├── Social_Determinants_of_Health_Spanish.pdf │ │ ├── Survey_PaFHH_Eng_Src.pdf │ │ ├── Survey_PaFHH_spn_Src.pdf │ │ ├── The_Basics.pdf │ │ └── The_Basics_Spanish.pdf │ └── videos │ │ ├── participant_en.vtt │ │ ├── participant_es.vtt │ │ ├── participant_intro.mp4 │ │ ├── participant_intro.ogv │ │ ├── participant_intro.webm │ │ ├── participant_video_poster.png │ │ ├── physical_measurements_en.vtt │ │ ├── physical_measurements_es.vtt │ │ ├── physical_measurements_intro.mp4 │ │ ├── physical_measurements_intro.ogv │ │ ├── physical_measurements_intro.webm │ │ ├── physical_measurements_video_poster.png │ │ ├── researcher_en.vtt │ │ ├── researcher_es.vtt │ │ ├── researcher_intro.mp4 │ │ ├── researcher_intro.oggtheora.ogv │ │ ├── researcher_video_poster.png │ │ ├── surveys_en.vtt │ │ ├── surveys_es.vtt │ │ ├── surveys_intro.mp4 │ │ ├── surveys_intro.ogv │ │ ├── surveys_intro.webm │ │ ├── surveys_video_poster.png │ │ └── video_poster.png ├── dev │ └── server │ │ ├── Dockerfile │ │ └── with-uid.sh ├── environments │ ├── environment.local.ts │ ├── environment.prod.ts │ ├── environment.stable.ts │ ├── environment.staging.ts │ ├── environment.test.ts │ ├── environment.ts │ └── test-env-base.ts ├── favicon.ico ├── index.html ├── main.ts ├── polyfills.ts ├── styles.css ├── test.ts ├── testing │ ├── stubs │ │ ├── http-stub.ts │ │ └── server-config-service-stub.ts │ └── test-helpers.ts ├── tsconfig.app.json ├── tsconfig.json ├── tsconfig.spec.json ├── types │ └── index.d.ts └── typings.d.ts ├── tsconfig.json ├── tslint.json └── yarn.lock /.gitallowed: -------------------------------------------------------------------------------- 1 | # This file contains whitelisted patterns for git-secrets: 2 | # https://github.com/awslabs/git-secrets#ignoring-false-positives 3 | 4 | # Oauth client IDs which trip git-secrets; these must be sent client-side so 5 | # there is no point in witholding them from source. 6 | 602460048110-5uk3vds3igc9qo0luevroc2uc3okgbkt.apps.googleusercontent.com 7 | 657299777109-kvb5qafr70bl01i6bnpgsiq5nt6v1o8u.apps.googleusercontent.com 8 | 56507752110-ovdus1lkreopsfhlovejvfgmsosveda6.apps.googleusercontent.com 9 | 684273740878-d7i68in5d9hqr6n9mfvrdh53snekp79f.apps.googleusercontent.com 10 | 11 | # Public API keys for Stackdriver. These also must be sent client-side. 12 | AIzaSyDPoX4Eg7-_FVKi7JFzEKaJpZ4IMRLaER4 13 | AIzaSyAkMIMIzUwv02RBK-A7cE1PbPpDJ2MTNtk 14 | AIzaSyA4gOEvyJRkhIbW0x0Y7PkIowOSIK_Tous 15 | AIzaSyAtXrWsPSJDOaOrdwYcpDKNDXeiTuTi_88 16 | -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | 16 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "aou-utils"] 2 | path = aou-utils 3 | url = https://github.com/all-of-us/utils 4 | -------------------------------------------------------------------------------- /ci/README.md: -------------------------------------------------------------------------------- 1 | # Utilities for CI 2 | 3 | We perform a CI build in CircleCI using a custom build image that incorporates 4 | Java, node, gcloud, and headless browsers. This images is built from 5 | `Dockerfile.circle_build` (see comments in that file for details) and pushed to 6 | Docker Hub at https://hub.docker.com/r/allofustest/workbench/ . 7 | -------------------------------------------------------------------------------- /ci/activate_creds.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash -e 2 | 3 | # Creates credentials file $1 from two environment variables (see 4 | # below) which combine to decrypt the keys for a service account. 5 | # Does gcloud auth using the result. 6 | if [ ! "${GCLOUD_CREDENTIALS}" ] 7 | then 8 | echo "No GCLOUD_CREDENTIALS env var defined, aborting creds activation." 9 | exit 1 10 | fi 11 | 12 | echo $GCLOUD_CREDENTIALS | \ 13 | openssl enc -d -md sha256 -aes-256-cbc -base64 -A -k "${GCLOUD_CREDENTIALS_KEY}" \ 14 | > $1 15 | 16 | gcloud auth activate-service-account --key-file $1 17 | 18 | -------------------------------------------------------------------------------- /deploy/bootstrap-docker.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -e 3 | 4 | if [[ -z "${DATA_BROWSER_VERSION}" ]]; then 5 | echo "missing required env var DATA_BROWSER_VERSION" 1>&2 6 | exit 1 7 | fi 8 | 9 | if [[ ! -d ~/data-browser/.git ]]; then 10 | sudo git clone https://github.com/all-of-us/data-browser ~/data-browser 11 | fi 12 | cd ~/data-browser 13 | 14 | # Get all tags; by default only tags from active remote branches are fetched. 15 | # In the case of a cherry pick, the original branch may not exist or may have 16 | # already been deleted. 17 | git fetch --tags 18 | 19 | # Drop any untracked/ignored files which may have carried over, to ensure a clean build. 20 | git clean -fdx 21 | 22 | git checkout "${DATA_BROWSER_VERSION}" 23 | git submodule update --init --recursive 24 | git status 25 | 26 | exec "$@" 27 | -------------------------------------------------------------------------------- /deploy/docker-compose.yaml: -------------------------------------------------------------------------------- 1 | services: 2 | deploy: 3 | build: 4 | context: . 5 | entrypoint: /bootstrap-docker.sh 6 | environment: 7 | # Required: a GitHub release git tag, e.g. v1-0-rc1 8 | - DATA_BROWSER_VERSION 9 | volumes: 10 | # Cache the codebase and gradle for deployment only. 11 | - gradle-cache:/.gradle 12 | - data-browser:/home/circleci/data-browser 13 | - ./bootstrap-docker.sh:/bootstrap-docker.sh 14 | 15 | volumes: 16 | data-browser: 17 | gradle-cache: 18 | -------------------------------------------------------------------------------- /deploy/project.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | 3 | require_relative "../aou-utils/workbench" 4 | require_relative "libproject/deploy.rb" 5 | 6 | Workbench.handle_argv_or_die(__FILE__) 7 | -------------------------------------------------------------------------------- /hooks/README.md: -------------------------------------------------------------------------------- 1 | Shared git hooks. `npm` sets these up using the `shared-git-hooks` package; it 2 | installs wrapper scripts in the standard `.git/hooks` directory. 3 | -------------------------------------------------------------------------------- /hooks/apply-git-secrets.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -euo pipefail 3 | IFS=$'\n\t' 4 | 5 | { which git-secrets; } || { 6 | echo 'git-secrets required and not found. See README for installation instructions.' 7 | echo 8 | exit 1 9 | } 10 | 11 | { 12 | git config --remove-section secrets 2>/dev/null 13 | } || { 14 | : 15 | } 16 | git secrets --add '"private_key":' 17 | git secrets --add --allowed 'git secrets --add *' 18 | -------------------------------------------------------------------------------- /hooks/commit-msg: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -euo pipefail 3 | IFS=$'\n\t' 4 | 5 | ./hooks/apply-git-secrets.sh 6 | 7 | git secrets --commit_msg_hook -- "$@" 8 | -------------------------------------------------------------------------------- /hooks/pre-commit: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -euo pipefail 3 | IFS=$'\n\t' 4 | 5 | ./hooks/apply-git-secrets.sh 6 | 7 | git secrets --pre_commit_hook -- "$@" 8 | 9 | CURRENT_BRANCH=`git rev-parse --abbrev-ref HEAD` 10 | if [ "$CURRENT_BRANCH" = "master" ] 11 | then 12 | echo Current branch is master, aborting commit. 13 | echo Please commit to a working branch and push it to GitHub for review/merge. 14 | exit 1 15 | fi 16 | -------------------------------------------------------------------------------- /hooks/prepare-commit-msg: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -euo pipefail 3 | IFS=$'\n\t' 4 | 5 | ./hooks/apply-git-secrets.sh 6 | 7 | git secrets --prepare_commit_msg_hook -- "$@" 8 | -------------------------------------------------------------------------------- /performance/gatlingRun.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/performance/gatlingRun.png -------------------------------------------------------------------------------- /performance/src/gatling/resources/gatling.conf: -------------------------------------------------------------------------------- 1 | gatling { 2 | 3 | } 4 | -------------------------------------------------------------------------------- /performance/src/gatling/resources/logback.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n 6 | false 7 | 8 | 9 | (1) 10 | 11 | 12 | -------------------------------------------------------------------------------- /public-api/.gitignore: -------------------------------------------------------------------------------- 1 | *.class 2 | 3 | # Mobile Tools for Java (J2ME) 4 | .mtj.tmp/ 5 | 6 | # Package Files # 7 | *.jar 8 | *.war 9 | *.ear 10 | 11 | # exclude jar for gradle wrapper 12 | !gradle/wrapper/*.jar 13 | 14 | # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml 15 | hs_err_pid* 16 | 17 | # build files 18 | **/target 19 | target 20 | .gradle 21 | build 22 | -------------------------------------------------------------------------------- /public-api/.travis.yml: -------------------------------------------------------------------------------- 1 | # 2 | # Generated by: https://github.com/swagger-api/swagger-codegen.git 3 | # 4 | language: java 5 | jdk: 6 | - oraclejdk8 7 | - oraclejdk7 8 | before_install: 9 | # ensure gradlew has proper permission 10 | - chmod a+x ./gradlew 11 | script: 12 | # test using maven 13 | - mvn test 14 | # uncomment below to test using gradle 15 | # - gradle test 16 | # uncomment below to test using sbt 17 | # - sbt test 18 | -------------------------------------------------------------------------------- /public-api/README.md: -------------------------------------------------------------------------------- 1 | # Swagger generated server 2 | 3 | Spring Boot Server 4 | 5 | 6 | ## Overview 7 | This server was generated by the [swagger-codegen](https://github.com/swagger-api/swagger-codegen) project. 8 | By using the [OpenAPI-Spec](https://github.com/swagger-api/swagger-core), you can easily generate a server stub. 9 | This is an example of building a swagger-enabled server in Java using the SpringBoot framework. 10 | 11 | The underlying library integrating swagger to SpringBoot is [springfox](https://github.com/springfox/springfox) 12 | 13 | Start your server as an simple java application 14 | 15 | You can view the api documentation in swagger-ui by pointing to 16 | http://localhost:8080/ 17 | 18 | Change default port value in application.properties -------------------------------------------------------------------------------- /public-api/build.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # Ruby goals used by our build (not intended to be invoked directly by developers) 3 | 4 | require_relative "../aou-utils/workbench" 5 | require_relative "../aou-utils/swagger" 6 | 7 | Workbench.handle_argv_or_die(__FILE__) 8 | -------------------------------------------------------------------------------- /public-api/build.sbt: -------------------------------------------------------------------------------- 1 | lazy val root = (project in file(".")). 2 | settings( 3 | organization := "io.swagger", 4 | name := "swagger-java-client", 5 | version := "1.0.0", 6 | scalaVersion := "2.11.4", 7 | scalacOptions ++= Seq("-feature"), 8 | javacOptions in compile ++= Seq("-Xlint:deprecation"), 9 | publishArtifact in (Compile, packageDoc) := false, 10 | resolvers += Resolver.mavenLocal, 11 | libraryDependencies ++= Seq( 12 | "io.swagger" % "swagger-annotations" % "1.5.15", 13 | "com.squareup.okhttp" % "okhttp" % "2.7.5", 14 | "com.squareup.okhttp" % "logging-interceptor" % "2.7.5", 15 | "com.google.code.gson" % "gson" % "2.8.1", 16 | "junit" % "junit" % "4.12" % "test", 17 | "com.novocode" % "junit-interface" % "0.10" % "test" 18 | ) 19 | ) 20 | -------------------------------------------------------------------------------- /public-api/config/cdr_config_local.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "cdrVersionId": 1, 4 | "isDefault": true, 5 | "name": "Synthetic Dataset v1", 6 | "dataAccessLevel": 1, 7 | "bigqueryProject": "all-of-us-ehr-dev", 8 | "bigqueryDataset": "synthetic_cdr20180606", 9 | "genomicsProject": "aou-db-prod", 10 | "genomicsDataset": "2024q3r2_genomics", 11 | "creationTime": "2017-12-26 00:00:00Z", 12 | "releaseNumber": 1, 13 | "numParticipants": 946237, 14 | "cdrDbName": "cdr", 15 | "publicDbName": "public" 16 | } 17 | ] 18 | -------------------------------------------------------------------------------- /public-api/config/config_local.json: -------------------------------------------------------------------------------- 1 | // Configuration for the local development environment. 2 | { 3 | "server": { 4 | "workbenchApiBaseUrl": "https:\/\/api-dot-all-of-us-workbench-test.appspot.com", 5 | "publicApiKeyForErrorReports": "", 6 | "debugEndpoints": false, 7 | "projectId": "aou-db-test", 8 | "gaId": "UA-116298798-4" 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /public-api/config/config_prod.json: -------------------------------------------------------------------------------- 1 | // Configuration for the aou-db-prod. 2 | { 3 | "server": { 4 | "workbenchApiBaseUrl": "https:\/\/api.workbench.researchallofus.org", 5 | "publicApiKeyForErrorReports": "AIzaSyAtXrWsPSJDOaOrdwYcpDKNDXeiTuTi_88", 6 | "debugEndpoints": false, 7 | "projectId": "aou-db-prod", 8 | "gaId": "UA-116298798-6" 9 | } 10 | } -------------------------------------------------------------------------------- /public-api/config/config_stable.json: -------------------------------------------------------------------------------- 1 | { 2 | "server": { 3 | "workbenchApiBaseUrl": "https:\/\/api-dot-all-of-us-rw-stable.appspot.com", 4 | "publicApiKeyForErrorReports": "AIzaSyA4gOEvyJRkhIbW0x0Y7PkIowOSIK_Tous", 5 | "debugEndpoints": false, 6 | "projectId": "aou-db-stable", 7 | "gaId": "UA-116298798-5" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /public-api/config/config_staging.json: -------------------------------------------------------------------------------- 1 | { 2 | "server": { 3 | "workbenchApiBaseUrl": "https:\/\/api.staging.fake-research-aou.org", 4 | "publicApiKeyForErrorReports": "AIzaSyAkMIMIzUwv02RBK-A7cE1PbPpDJ2MTNtk", 5 | "debugEndpoints": false, 6 | "projectId": "aou-db-staging", 7 | "gaId": "UA-116298798-4" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /public-api/config/config_test.json: -------------------------------------------------------------------------------- 1 | // Configuration for the aou-db-test. 2 | { 3 | "server": { 4 | "workbenchApiBaseUrl": "https:\/\/api-dot-all-of-us-workbench-test.appspot.com", 5 | "publicApiKeyForErrorReports": "AIzaSyDPoX4Eg7-_FVKi7JFzEKaJpZ4IMRLaER4", 6 | "debugEndpoints": false, 7 | "projectId": "aou-db-test", 8 | "gaId": "UA-116298798-4" 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /public-api/db-cdr/changelog-schema/db.changelog-40.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | ANY 10 | 11 | ALTER TABLE survey_module 12 | MODIFY name VARCHAR(100); 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /public-api/db-cdr/changelog-schema/db.changelog-54.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 10 | 11 | ALTER TABLE concept 12 | change column concept_name concept_name varchar(1000); 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /public-api/db-cdr/changelog-schema/db.changelog-8.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 10 | 11 | ALTER TABLE achilles_results 12 | ADD FULLTEXT INDEX stratum_4_index 13 | (stratum_4); 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /public-api/db-cdr/drop_db.sql: -------------------------------------------------------------------------------- 1 | DROP DATABASE IF EXISTS ${CDR_DB_NAME}; 2 | -------------------------------------------------------------------------------- /public-api/db-cdr/generate-cdr/bq-schemas/achilles_analysis.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "mode": "REQUIRED", 4 | "name": "analysis_id", 5 | "type": "INTEGER" 6 | }, 7 | { 8 | "mode": "REQUIRED", 9 | "name": "analysis_name", 10 | "type": "STRING" 11 | }, 12 | { 13 | "name": "stratum_1_name", 14 | "type": "STRING" 15 | }, 16 | { 17 | "name": "stratum_2_name", 18 | "type": "STRING" 19 | }, 20 | { 21 | "name": "stratum_3_name", 22 | "type": "STRING" 23 | }, 24 | { 25 | "name": "stratum_4_name", 26 | "type": "STRING" 27 | }, 28 | { 29 | "name": "stratum_5_name", 30 | "type": "STRING" 31 | }, 32 | { 33 | "name": "stratum_6_name", 34 | "type": "STRING" 35 | }, 36 | { 37 | "name": "stratum_7_name", 38 | "type": "STRING" 39 | }, 40 | { 41 | "name": "chart_type", 42 | "type": "STRING" 43 | }, 44 | { 45 | "name": "data_type", 46 | "type": "STRING" 47 | } 48 | ] 49 | -------------------------------------------------------------------------------- /public-api/db-cdr/generate-cdr/bq-schemas/cb_criteria_ancestor.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "mode": "REQUIRED", 4 | "name": "ancestor_id", 5 | "type": "INTEGER" 6 | }, 7 | { 8 | "mode": "REQUIRED", 9 | "name": "descendant_id", 10 | "type": "INTEGER" 11 | } 12 | ] -------------------------------------------------------------------------------- /public-api/db-cdr/generate-cdr/bq-schemas/cb_criteria_attribute.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "mode": "REQUIRED", 4 | "name": "id", 5 | "type": "INTEGER" 6 | }, 7 | { 8 | "mode": "REQUIRED", 9 | "name": "concept_id", 10 | "type": "INTEGER" 11 | }, 12 | { 13 | "mode": "NULLABLE", 14 | "name": "value_as_concept_id", 15 | "type": "INTEGER" 16 | }, 17 | { 18 | "mode": "NULLABLE", 19 | "name": "concept_name", 20 | "type": "STRING" 21 | }, 22 | { 23 | "mode": "NULLABLE", 24 | "name": "type", 25 | "type": "STRING" 26 | }, 27 | { 28 | "mode": "NULLABLE", 29 | "name": "est_count", 30 | "type": "STRING" 31 | } 32 | ] 33 | -------------------------------------------------------------------------------- /public-api/db-cdr/generate-cdr/bq-schemas/cb_criteria_relationship.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "mode": "REQUIRED", 4 | "name": "concept_id_1", 5 | "type": "INTEGER" 6 | }, 7 | { 8 | "mode": "REQUIRED", 9 | "name": "concept_id_2", 10 | "type": "INTEGER" 11 | } 12 | ] 13 | -------------------------------------------------------------------------------- /public-api/db-cdr/generate-cdr/bq-schemas/cb_review_survey.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "mode": "NULLABLE", 4 | "name": "person_id", 5 | "type": "INTEGER" 6 | }, 7 | { 8 | "mode": "NULLABLE", 9 | "name": "data_id", 10 | "type": "INTEGER" 11 | }, 12 | { 13 | "mode": "NULLABLE", 14 | "name": "start_datetime", 15 | "type": "TIMESTAMP" 16 | }, 17 | { 18 | "mode": "NULLABLE", 19 | "name": "survey", 20 | "type": "STRING" 21 | }, 22 | { 23 | "mode": "NULLABLE", 24 | "name": "question", 25 | "type": "STRING" 26 | }, 27 | { 28 | "mode": "NULLABLE", 29 | "name": "answer", 30 | "type": "STRING" 31 | } 32 | ] -------------------------------------------------------------------------------- /public-api/db-cdr/generate-cdr/bq-schemas/cb_search_person.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "mode": "NULLABLE", 4 | "name": "person_id", 5 | "type": "INTEGER" 6 | }, 7 | { 8 | "mode": "NULLABLE", 9 | "name": "gender", 10 | "type": "string" 11 | }, 12 | { 13 | "mode": "NULLABLE", 14 | "name": "race", 15 | "type": "string" 16 | }, 17 | { 18 | "mode": "NULLABLE", 19 | "name": "ethnicity", 20 | "type": "string" 21 | }, 22 | { 23 | "mode": "NULLABLE", 24 | "name": "dob", 25 | "type": "timestamp" 26 | } 27 | ] -------------------------------------------------------------------------------- /public-api/db-cdr/generate-cdr/bq-schemas/concept_ancestor.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "mode": "REQUIRED", 4 | "name": "ancestor_concept_id", 5 | "type": "INTEGER" 6 | }, 7 | { 8 | "mode": "REQUIRED", 9 | "name": "descendant_concept_id", 10 | "type": "INTEGER" 11 | }, 12 | { 13 | "mode": "REQUIRED", 14 | "name": "min_levels_of_separation", 15 | "type": "INTEGER" 16 | }, 17 | { 18 | "mode": "REQUIRED", 19 | "name": "max_levels_of_separation", 20 | "type": "INTEGER" 21 | } 22 | ] -------------------------------------------------------------------------------- /public-api/db-cdr/generate-cdr/bq-schemas/concept_relationship.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "mode": "REQUIRED", 4 | "name": "concept_id_1", 5 | "type": "INTEGER" 6 | }, 7 | { 8 | "mode": "REQUIRED", 9 | "name": "concept_id_2", 10 | "type": "INTEGER" 11 | }, 12 | { 13 | "mode": "REQUIRED", 14 | "name": "relationship_id", 15 | "type": "STRING" 16 | } 17 | ] 18 | -------------------------------------------------------------------------------- /public-api/db-cdr/generate-cdr/bq-schemas/concept_synonym.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "mode": "REQUIRED", 4 | "name": "id", 5 | "type": "INTEGER" 6 | }, 7 | { 8 | "mode": "REQUIRED", 9 | "name": "concept_id", 10 | "type": "INTEGER" 11 | }, 12 | { 13 | "mode": "REQUIRED", 14 | "name": "concept_synonym_name", 15 | "type": "STRING" 16 | } 17 | ] 18 | -------------------------------------------------------------------------------- /public-api/db-cdr/generate-cdr/bq-schemas/criteria_stratum.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "mode": "REQUIRED", 4 | "name": "concept_id", 5 | "type": "INTEGER" 6 | }, 7 | { 8 | "mode": "REQUIRED", 9 | "name": "analysis_id", 10 | "type": "INTEGER" 11 | }, 12 | { 13 | "mode": "REQUIRED", 14 | "name": "stratum_1", 15 | "type": "STRING" 16 | }, 17 | { 18 | "mode": "REQUIRED", 19 | "name": "stratum_2", 20 | "type": "STRING" 21 | }, 22 | { 23 | "mode": "NULLABLE", 24 | "name": "stratum_3", 25 | "type": "STRING" 26 | }, 27 | { 28 | "mode": "REQUIRED", 29 | "name": "domain", 30 | "type": "STRING" 31 | }, 32 | { 33 | "mode": "REQUIRED", 34 | "name": "count_value", 35 | "type": "INTEGER" 36 | } 37 | ] 38 | -------------------------------------------------------------------------------- /public-api/db-cdr/generate-cdr/bq-schemas/domain.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "mode": "REQUIRED", 4 | "name": "domain_id", 5 | "type": "STRING" 6 | }, 7 | { 8 | "mode": "REQUIRED", 9 | "name": "domain_name", 10 | "type": "STRING" 11 | }, 12 | { 13 | "mode": "REQUIRED", 14 | "name": "domain_concept_id", 15 | "type": "INTEGER" 16 | } 17 | ] 18 | 19 | -------------------------------------------------------------------------------- /public-api/db-cdr/generate-cdr/bq-schemas/domain_info.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "mode":"REQUIRED", 4 | "name": "concept_id", 5 | "type": "INTEGER" 6 | }, 7 | { 8 | "mode":"REQUIRED", 9 | "name": "domain", 10 | "type": "INTEGER" 11 | }, 12 | { 13 | "mode": "REQUIRED", 14 | "name": "domain_id", 15 | "type": "STRING" 16 | }, 17 | { 18 | "mode": "REQUIRED", 19 | "name": "name", 20 | "type": "STRING" 21 | }, 22 | { 23 | "mode": "REQUIRED", 24 | "name": "description", 25 | "type": "STRING" 26 | }, 27 | { 28 | "mode":"REQUIRED", 29 | "name": "all_concept_count", 30 | "type": "INTEGER" 31 | }, 32 | { 33 | "mode":"REQUIRED", 34 | "name": "standard_concept_count", 35 | "type": "INTEGER" 36 | }, 37 | { 38 | "mode":"REQUIRED", 39 | "name": "participant_count", 40 | "type": "INTEGER" 41 | } 42 | ] -------------------------------------------------------------------------------- /public-api/db-cdr/generate-cdr/bq-schemas/domain_vocabulary_info.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "mode": "REQUIRED", 4 | "name": "domain_id", 5 | "type": "STRING" 6 | }, 7 | { 8 | "mode": "REQUIRED", 9 | "name": "vocabulary_id", 10 | "type": "STRING" 11 | }, 12 | { 13 | "mode":"REQUIRED", 14 | "name": "all_concept_count", 15 | "type": "INTEGER" 16 | }, 17 | { 18 | "mode":"REQUIRED", 19 | "name": "standard_concept_count", 20 | "type": "INTEGER" 21 | } 22 | ] -------------------------------------------------------------------------------- /public-api/db-cdr/generate-cdr/bq-schemas/filter_conditions.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "mode": "REQUIRED", 4 | "name": "concept_id", 5 | "type": "INTEGER" 6 | }, 7 | { 8 | "mode": "REQUIRED", 9 | "name": "flag", 10 | "type": "INTEGER" 11 | } 12 | ] -------------------------------------------------------------------------------- /public-api/db-cdr/generate-cdr/bq-schemas/fmh_conditions_member_metadata.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "mode": "REQUIRED", 4 | "name": "observation_source_concept_id", 5 | "type": "INTEGER" 6 | }, 7 | { 8 | "mode": "REQUIRED", 9 | "name": "concepts_to_count", 10 | "type": "STRING" 11 | } 12 | ] -------------------------------------------------------------------------------- /public-api/db-cdr/generate-cdr/bq-schemas/fmh_fm_metadata.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "mode": "REQUIRED", 4 | "name": "observation_source_concept_id", 5 | "type": "INTEGER" 6 | }, 7 | { 8 | "mode": "REQUIRED", 9 | "name": "concepts_to_count", 10 | "type": "STRING" 11 | } 12 | ] -------------------------------------------------------------------------------- /public-api/db-cdr/generate-cdr/bq-schemas/fmh_metadata.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "mode": "REQUIRED", 4 | "name": "observation_source_concept_id", 5 | "type": "INTEGER" 6 | }, 7 | { 8 | "mode": "REQUIRED", 9 | "name": "value_source_concept_id", 10 | "type": "INTEGER" 11 | }, 12 | { 13 | "mode": "REQUIRED", 14 | "name": "concept_name", 15 | "type": "STRING" 16 | }, 17 | { 18 | "mode": "REQUIRED", 19 | "name": "fmh_concepts_to_count", 20 | "type": "STRING" 21 | } 22 | ] -------------------------------------------------------------------------------- /public-api/db-cdr/generate-cdr/bq-schemas/measurement_concept_info.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "mode": "REQUIRED", 4 | "name": "concept_id", 5 | "type": "INTEGER" 6 | }, 7 | { 8 | "mode": "REQUIRED", 9 | "name": "has_values", 10 | "type": "INTEGER" 11 | }, 12 | { 13 | "mode": "REQUIRED", 14 | "name": "measurement_type", 15 | "type": "STRING" 16 | } 17 | ] -------------------------------------------------------------------------------- /public-api/db-cdr/generate-cdr/bq-schemas/pfhh_path_update.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "mode": "REQUIRED", 4 | "name": "concept_id", 5 | "type": "INTEGER" 6 | }, 7 | { 8 | "mode": "REQUIRED", 9 | "name": "concept_name", 10 | "type": "STRING" 11 | }, 12 | { 13 | "mode": "REQUIRED", 14 | "name": "path", 15 | "type": "STRING" 16 | } 17 | ] 18 | -------------------------------------------------------------------------------- /public-api/db-cdr/generate-cdr/bq-schemas/pfhh_qa_metadata.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "mode": "REQUIRED", 4 | "name": "question_concept_id", 5 | "type": "INTEGER" 6 | }, 7 | { 8 | "mode": "REQUIRED", 9 | "name": "question", 10 | "type": "STRING" 11 | }, 12 | { 13 | "mode": "REQUIRED", 14 | "name": "answer_concept_id", 15 | "type": "INTEGER" 16 | }, 17 | { 18 | "mode": "REQUIRED", 19 | "name": "answer", 20 | "type": "STRING" 21 | } 22 | ] -------------------------------------------------------------------------------- /public-api/db-cdr/generate-cdr/bq-schemas/search_codes.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "mode": "NULLABLE", 4 | "name": "person_id", 5 | "type": "INTEGER" 6 | }, 7 | { 8 | "mode": "NULLABLE", 9 | "name": "entry_date", 10 | "type": "DATE" 11 | }, 12 | { 13 | "mode": "NULLABLE", 14 | "name": "concept_id_or_source_concept_id", 15 | "type": "INTEGER" 16 | }, 17 | { 18 | "mode": "NULLABLE", 19 | "name": "type", 20 | "type": "string" 21 | }, 22 | { 23 | "mode": "NULLABLE", 24 | "name": "subtype", 25 | "type": "string" 26 | }, 27 | { 28 | "mode": "NULLABLE", 29 | "name": "age_at_event", 30 | "type": "INTEGER" 31 | }, 32 | { 33 | "mode": "NULLABLE", 34 | "name": "visit_concept_id", 35 | "type": "integer" 36 | } 37 | ] 38 | -------------------------------------------------------------------------------- /public-api/db-cdr/generate-cdr/bq-schemas/search_drug.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "mode": "NULLABLE", 4 | "name": "person_id", 5 | "type": "INTEGER" 6 | }, 7 | { 8 | "mode": "NULLABLE", 9 | "name": "entry_date", 10 | "type": "DATE" 11 | }, 12 | { 13 | "mode": "NULLABLE", 14 | "name": "concept_id", 15 | "type": "INTEGER" 16 | }, 17 | { 18 | "mode": "NULLABLE", 19 | "name": "subtype", 20 | "type": "string" 21 | }, 22 | { 23 | "mode": "NULLABLE", 24 | "name": "age_at_event", 25 | "type": "INTEGER" 26 | }, 27 | { 28 | "mode": "NULLABLE", 29 | "name": "visit_concept_id", 30 | "type": "integer" 31 | } 32 | ] 33 | -------------------------------------------------------------------------------- /public-api/db-cdr/generate-cdr/bq-schemas/search_measurement.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "mode": "NULLABLE", 4 | "name": "person_id", 5 | "type": "INTEGER" 6 | }, 7 | { 8 | "mode": "NULLABLE", 9 | "name": "entry_date", 10 | "type": "DATE" 11 | }, 12 | { 13 | "mode": "NULLABLE", 14 | "name": "concept_id", 15 | "type": "INTEGER" 16 | }, 17 | { 18 | "mode": "NULLABLE", 19 | "name": "subtype", 20 | "type": "string" 21 | }, 22 | { 23 | "mode": "NULLABLE", 24 | "name": "age_at_event", 25 | "type": "INTEGER" 26 | }, 27 | { 28 | "mode": "NULLABLE", 29 | "name": "visit_concept_id", 30 | "type": "integer" 31 | }, 32 | { 33 | "mode": "NULLABLE", 34 | "name": "value_as_number", 35 | "type": "float" 36 | } 37 | , 38 | { 39 | "mode": "NULLABLE", 40 | "name": "value_as_concept_id", 41 | "type": "integer" 42 | } 43 | ] -------------------------------------------------------------------------------- /public-api/db-cdr/generate-cdr/bq-schemas/search_person.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "mode": "NULLABLE", 4 | "name": "person_id", 5 | "type": "INTEGER" 6 | }, 7 | { 8 | "mode": "NULLABLE", 9 | "name": "gender", 10 | "type": "string" 11 | }, 12 | { 13 | "mode": "NULLABLE", 14 | "name": "race", 15 | "type": "string" 16 | }, 17 | { 18 | "mode": "NULLABLE", 19 | "name": "dob", 20 | "type": "timestamp" 21 | } 22 | ] -------------------------------------------------------------------------------- /public-api/db-cdr/generate-cdr/bq-schemas/search_pm.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "mode": "NULLABLE", 4 | "name": "person_id", 5 | "type": "INTEGER" 6 | }, 7 | { 8 | "mode": "NULLABLE", 9 | "name": "entry_date", 10 | "type": "DATE" 11 | }, 12 | { 13 | "mode": "NULLABLE", 14 | "name": "source_concept_id", 15 | "type": "INTEGER" 16 | }, 17 | { 18 | "mode": "NULLABLE", 19 | "name": "subtype", 20 | "type": "string" 21 | }, 22 | { 23 | "mode": "NULLABLE", 24 | "name": "value_as_number", 25 | "type": "float" 26 | } 27 | , 28 | { 29 | "mode": "NULLABLE", 30 | "name": "value_as_concept_id", 31 | "type": "integer" 32 | } 33 | ] -------------------------------------------------------------------------------- /public-api/db-cdr/generate-cdr/bq-schemas/search_ppi.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "mode": "NULLABLE", 4 | "name": "person_id", 5 | "type": "INTEGER" 6 | }, 7 | { 8 | "mode": "NULLABLE", 9 | "name": "entry_date", 10 | "type": "DATE" 11 | }, 12 | { 13 | "mode": "NULLABLE", 14 | "name": "source_concept_id", 15 | "type": "INTEGER" 16 | }, 17 | { 18 | "mode": "NULLABLE", 19 | "name": "subtype", 20 | "type": "string" 21 | }, 22 | { 23 | "mode": "NULLABLE", 24 | "name": "value_as_number", 25 | "type": "float" 26 | }, 27 | { 28 | "mode": "NULLABLE", 29 | "name": "value_as_concept_id", 30 | "type": "integer" 31 | } 32 | ] -------------------------------------------------------------------------------- /public-api/db-cdr/generate-cdr/bq-schemas/search_visit.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "mode": "NULLABLE", 4 | "name": "person_id", 5 | "type": "INTEGER" 6 | }, 7 | { 8 | "mode": "NULLABLE", 9 | "name": "entry_date", 10 | "type": "DATE" 11 | }, 12 | { 13 | "mode": "NULLABLE", 14 | "name": "concept_id", 15 | "type": "INTEGER" 16 | }, 17 | { 18 | "mode": "NULLABLE", 19 | "name": "age_at_event", 20 | "type": "INTEGER" 21 | }, 22 | { 23 | "mode": "NULLABLE", 24 | "name": "visit_concept_id", 25 | "type": "integer" 26 | } 27 | ] -------------------------------------------------------------------------------- /public-api/db-cdr/generate-cdr/bq-schemas/source_standard_unit_map.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "mode": "REQUIRED", 4 | "name": "source_concept", 5 | "type": "INTEGER" 6 | }, 7 | { 8 | "mode": "REQUIRED", 9 | "name": "standard_concept", 10 | "type": "INTEGER" 11 | } 12 | ] 13 | -------------------------------------------------------------------------------- /public-api/db-cdr/generate-cdr/bq-schemas/survey_concept_relationship.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "mode": "REQUIRED", 4 | "name": "concept_id_1", 5 | "type": "INTEGER" 6 | }, 7 | { 8 | "mode": "REQUIRED", 9 | "name": "concept_id_2", 10 | "type": "INTEGER" 11 | }, 12 | { 13 | "mode": "REQUIRED", 14 | "name": "relationship_id", 15 | "type": "STRING" 16 | } 17 | ] 18 | -------------------------------------------------------------------------------- /public-api/db-cdr/generate-cdr/bq-schemas/survey_module.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "mode":"REQUIRED", 4 | "name": "concept_id", 5 | "type": "INTEGER" 6 | }, 7 | { 8 | "mode": "REQUIRED", 9 | "name": "name", 10 | "type": "STRING" 11 | }, 12 | { 13 | "mode": "REQUIRED", 14 | "name": "description", 15 | "type": "STRING" 16 | }, 17 | { 18 | "mode":"REQUIRED", 19 | "name": "question_count", 20 | "type": "INTEGER" 21 | }, 22 | { 23 | "mode":"REQUIRED", 24 | "name": "participant_count", 25 | "type": "INTEGER" 26 | }, 27 | { 28 | "mode":"REQUIRED", 29 | "name": "order_number", 30 | "type": "INTEGER" 31 | } 32 | ] -------------------------------------------------------------------------------- /public-api/db-cdr/generate-cdr/bq-schemas/survey_version_metadata.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "mode": "REQUIRED", 4 | "name": "survey_concept_id", 5 | "type": "INTEGER" 6 | }, 7 | { 8 | "mode": "REQUIRED", 9 | "name": "version_id", 10 | "type": "INTEGER" 11 | }, 12 | { 13 | "mode": "REQUIRED", 14 | "name": "question_concept_id", 15 | "type": "INTEGER" 16 | }, 17 | { 18 | "mode": "REQUIRED", 19 | "name": "is_main", 20 | "type": "STRING" 21 | }, 22 | { 23 | "mode": "REQUIRED", 24 | "name": "order", 25 | "type": "INTEGER" 26 | } 27 | ] -------------------------------------------------------------------------------- /public-api/db-cdr/generate-cdr/bq-schemas/unit_map.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "mode": "REQUIRED", 4 | "name": "unit_concept_id", 5 | "type": "INTEGER" 6 | }, 7 | { 8 | "mode": "REQUIRED", 9 | "name": "unit_source_value", 10 | "type": "STRING" 11 | } 12 | ] -------------------------------------------------------------------------------- /public-api/db-cdr/generate-cdr/bq-schemas/vocabulary.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "mode": "REQUIRED", 4 | "name": "vocabulary_id", 5 | "type": "STRING" 6 | }, 7 | { 8 | "mode": "REQUIRED", 9 | "name": "vocabulary_name", 10 | "type": "STRING" 11 | }, 12 | { 13 | "mode": "NULLABLE", 14 | "name": "vocabulary_reference", 15 | "type": "STRING" 16 | }, 17 | { 18 | "mode": "NULLABLE", 19 | "name": "vocabulary_version", 20 | "type": "STRING" 21 | }, 22 | { 23 | "mode": "REQUIRED", 24 | "name": "vocabulary_concept_id", 25 | "type": "INTEGER" 26 | } 27 | ] -------------------------------------------------------------------------------- /public-api/db-cdr/generate-cdr/create_db.sql: -------------------------------------------------------------------------------- 1 | CREATE DATABASE IF NOT EXISTS ${CDR_DB_NAME} CHARACTER SET utf8 COLLATE utf8_general_ci; 2 | 3 | GRANT SELECT, INSERT, UPDATE, DELETE, CREATE TEMPORARY TABLES ON ${CDR_DB_NAME}.* TO '${DATABROWSER_DB_USER}'@'%'; 4 | GRANT SELECT, INSERT, UPDATE, DELETE, CREATE TEMPORARY TABLES ON ${CDR_DB_NAME}.* TO '${PUBLIC_DB_USER}'@'%'; 5 | GRANT SELECT, INSERT, UPDATE, DELETE, DROP, ALTER, CREATE, INDEX, REFERENCES, CREATE TEMPORARY TABLES, CREATE VIEW ON ${CDR_DB_NAME}.* TO '${LIQUIBASE_DB_USER}'@'%'; 6 | -------------------------------------------------------------------------------- /public-api/db-cdr/generate-cdr/csv/achilles_results.csv: -------------------------------------------------------------------------------- 1 | id,analysis_id,"stratum_1","stratum_2","stratum_3","stratum_4","stratum_5","stratum_6","stratum_7",count_value,source_count_value 2 | 0,100,"blood-pressure","Mean Blood Pressure","903118","903115","","","",0,0 3 | 0,100,"height","Height","903133","","","","",0,0 4 | 0,100,"weight","Weight","903121","","","","",0,0 5 | 0,100,"mean-heart-rate","Mean heart rate","903126","","","","",0,0 6 | 0,100,"mean-hip","Mean hip circumference","903136","","","","",0,0 7 | 0,100,"mean-waist","Mean waist circumference","903135","","","","",0,0 8 | 0,100,"pregnancy","Pregnancy","903120","","","","",0,0 9 | 0,100,"wheel-chair","Wheel chair use","903111","","","","",0,0 10 | -------------------------------------------------------------------------------- /public-api/db-cdr/generate-cdr/csv/fmh_conditions_member_metadata.csv: -------------------------------------------------------------------------------- 1 | observation_source_concept_id,concepts_to_count 2 | 43528515,"43528510,43528511,43528514,43528509,43528513,43528512" 3 | 1384639,"43528561,43528917,43528562,43528560,43528558,43528559" 4 | 43528634,"43528633,43528628,43528629,43528630,702788,43528631" 5 | 43528761,"43528944,702783,43528676,43528674,43528675,43528677" 6 | 43529158,"43529152,43529154,43529156,43529157,43529153,43529155" 7 | 43529767,"43529764,43529191,43529765,43529763,43529766,43529762" 8 | 43529272,"43529268,43529269,43529271,43528489,43529270,43528490" 9 | 43529217,"43529214,43530563,43529216,43529218,43529215,43529213" 10 | 702786,"43529813,43528486,43529812,43528487,43529814,43529811" 11 | 43529966,"43529960,43529961,43529963,43529962,43529964,43529965" 12 | 43529638,"43529634,43529633,43529632,43529635,43529636,43529637" 13 | -------------------------------------------------------------------------------- /public-api/db-cdr/generate-cdr/csv/fmh_fm_metadata.csv: -------------------------------------------------------------------------------- 1 | observation_source_concept_id,"concepts_to_count" 2 | 43528764,"43528512, 43528917, 43528631, 43528944, 43529155, 43529191, 43528490, 43530563, 43528487, 43529963, 43529635, 43529658" 3 | 43528763,"43528510, 43528559, 43528629, 43528675, 43529153, 43529763, 43528489, 43529218, 43528486, 43529961, 43529633, 43529656" 4 | 43528649,"43528513, 43528561, 702788, 702783, 43529156, 43529765, 43529270, 43529215, 43529813, 43529964, 43529636, 43529659" 5 | 43528650,"43528509, 43528558, 43528628, 43528674, 43529152, 43529762, 43529268, 43529213, 43529811, 43529960, 43529632, 43529655" 6 | 43528651,"43528514, 43528562, 43528633, 43528677, 43529157, 43529766, 43529271, 43529216, 43529814, 43529965, 43529637, 43529660" 7 | 43528765,"43528511, 43528560, 43528630, 43528676, 43529154, 43529764, 43529269, 43529214, 43529812, 43529962, 43529634, 43529657" 8 | -------------------------------------------------------------------------------- /public-api/db-cdr/generate-cdr/generate-cdr.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | 3 | require_relative "../../../aou-utils/workbench" 4 | require_relative "libproject/devstart.rb" 5 | 6 | Workbench.handle_argv_or_die(__FILE__) 7 | -------------------------------------------------------------------------------- /public-api/db-cdr/generate-cdr/generate_circle_key/generate_circle_key.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -e 3 | 4 | GCLOUD_CREDENTIALS_KEY=$(openssl rand -base64 32) 5 | GCLOUD_CREDENTIALS=$(openssl enc -md sha256 -aes-256-cbc -in "$1" -base64 -A -k "$GCLOUD_CREDENTIALS_KEY") 6 | 7 | echo "GCLOUD_CREDENTIALS=$GCLOUD_CREDENTIALS" 8 | echo "GCLOUD_CREDENTIALS_KEY=$GCLOUD_CREDENTIALS_KEY" -------------------------------------------------------------------------------- /public-api/db-cdr/run-drop-db.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -xeuo pipefail 3 | IFS=$'\n\t' 4 | 5 | # Ruby is not installed in our dev container and this script is short, so bash is fine. 6 | 7 | DROP_DB_FILE=/tmp/drop_db.sql 8 | 9 | function finish { 10 | rm -f ${DROP_DB_FILE} 11 | } 12 | trap finish EXIT 13 | 14 | envsubst < "$(dirname "${BASH_SOURCE}")/drop_db.sql" > $DROP_DB_FILE 15 | 16 | echo "Dropping database..." 17 | mysql -h ${DB_HOST} --port ${DB_PORT} -u root -p${MYSQL_ROOT_PASSWORD} < ${DROP_DB_FILE} 18 | -------------------------------------------------------------------------------- /public-api/db-cdr/settings.gradle: -------------------------------------------------------------------------------- 1 | // Placeholder settings file to ensure IntelliJ 2020 treats this as a separate 2 | // Gradle project. -------------------------------------------------------------------------------- /public-api/db-cdr/vars.env: -------------------------------------------------------------------------------- 1 | DB_CONNECTION_STRING=jdbc:mysql://db/cdr 2 | DB_DRIVER=com.mysql.cj.jdbc.Driver 3 | DB_HOST=db 4 | DB_PORT=3306 5 | CDR_DB_NAME=cdr 6 | PUBLIC_DB_NAME=public 7 | LIQUIBASE_DB_USER=liquibase 8 | LIQUIBASE_DB_PASSWORD=lb-notasecret 9 | MYSQL_ROOT_PASSWORD=root-notasecret 10 | CDR_DB_USER=cdr 11 | CDR_DB_PASSWORD=cdr-notasecret 12 | PUBLIC_DB_USER=public 13 | PUBLIC_DB_PASSWORD=public-notasecret 14 | -------------------------------------------------------------------------------- /public-api/db/changelog/db.changelog-21.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /public-api/db/changelog/db.changelog-3.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /public-api/db/changelog/db.changelog-48-default-cdr.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /public-api/db/changelog/db.changelog-master.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /public-api/db/create_indexes.sql: -------------------------------------------------------------------------------- 1 | /* Stub out of create_indexes.sql .. 2 | * importing goes much faster without indexes so we drop before import and create after import. 3 | */ 4 | use ${DB_NAME}; 5 | create index idx_concept_name on concept (concept_name); 6 | create index idx_concept_code on concept (concept_code); -------------------------------------------------------------------------------- /public-api/db/drop_db.sql: -------------------------------------------------------------------------------- 1 | DROP DATABASE IF EXISTS ${DB_NAME}; 2 | -------------------------------------------------------------------------------- /public-api/db/load_vars.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | for line in $(awk '!/^ *#/ && NF' $WORKBENCH_DIR/api/db/vars.env); do 4 | IFS='=' read -r var val <<< "$line" 5 | 6 | if [ "$var" == "DB_HOST" ]; then 7 | export DB_HOST=localhost 8 | continue 9 | fi 10 | 11 | evaluatedString=$(echo $(eval "echo $val")) 12 | export $var=$evaluatedString 13 | done -------------------------------------------------------------------------------- /public-api/db/settings.gradle: -------------------------------------------------------------------------------- 1 | // Placeholder settings file to ensure IntelliJ 2020 treats this as a separate 2 | // Gradle project. -------------------------------------------------------------------------------- /public-api/db/vars.env: -------------------------------------------------------------------------------- 1 | # "db" hostname is established for the local docker network via docker-compose.yaml 2 | DB_DRIVER=com.mysql.cj.jdbc.Driver 3 | DB_HOST=db 4 | PUBLIC_DB_HOST=db 5 | DB_PORT=3306 6 | DB_NAME=databrowser 7 | DB_PASSWORD=db-notasecret 8 | 9 | DB_CONNECTION_STRING=jdbc:mysql://$DB_HOST/databrowser?useSSL=false 10 | # TODO: change to public DB once it exists 11 | PUBLIC_DB_CONNECTION_STRING=jdbc:mysql://$DB_HOST/public?useSSL=false 12 | 13 | LIQUIBASE_DB_USER=liquibase 14 | LIQUIBASE_DB_PASSWORD=lb-notasecret 15 | MYSQL_ROOT_PASSWORD=root-notasecret 16 | DATABROWSER_DB_USER=databrowser 17 | DATABROWSER_DB_PASSWORD=db-notasecret 18 | PUBLIC_DB_USER=databrowser 19 | PUBLIC_DB_PASSWORD=db-notasecret 20 | PROJECT=test 21 | 22 | GAE_MIN_IDLE_INSTANCES=1 23 | GAE_MAX_INSTANCES=10 24 | -------------------------------------------------------------------------------- /public-api/docs/AchillesResultListResponse.md: -------------------------------------------------------------------------------- 1 | 2 | # AchillesResultListResponse 3 | 4 | ## Properties 5 | Name | Type | Description | Notes 6 | ------------ | ------------- | ------------- | ------------- 7 | **items** | [**List<AchillesResult>**](AchillesResult.md) | | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /public-api/docs/AnalysisListResponse.md: -------------------------------------------------------------------------------- 1 | 2 | # AnalysisListResponse 3 | 4 | ## Properties 5 | Name | Type | Description | Notes 6 | ------------ | ------------- | ------------- | ------------- 7 | **items** | [**List<Analysis>**](Analysis.md) | | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /public-api/docs/CdrVersion.md: -------------------------------------------------------------------------------- 1 | 2 | # CdrVersion 3 | 4 | ## Properties 5 | Name | Type | Description | Notes 6 | ------------ | ------------- | ------------- | ------------- 7 | **cdrVersionId** | **String** | | 8 | **name** | **String** | | 9 | **numParticipants** | **Integer** | | [optional] 10 | **creationTime** | **Long** | Milliseconds since the UNIX epoch. | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /public-api/docs/CdrVersionListResponse.md: -------------------------------------------------------------------------------- 1 | 2 | # CdrVersionListResponse 3 | 4 | ## Properties 5 | Name | Type | Description | Notes 6 | ------------ | ------------- | ------------- | ------------- 7 | **items** | [**List<CdrVersion>**](CdrVersion.md) | | 8 | **defaultCdrVersionId** | **String** | ID of the CDR versions that should be used by the user by default | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /public-api/docs/ConceptAnalysisListResponse.md: -------------------------------------------------------------------------------- 1 | 2 | # ConceptAnalysisListResponse 3 | 4 | ## Properties 5 | Name | Type | Description | Notes 6 | ------------ | ------------- | ------------- | ------------- 7 | **items** | [**List<ConceptAnalysis>**](ConceptAnalysis.md) | | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /public-api/docs/ConceptListResponse.md: -------------------------------------------------------------------------------- 1 | 2 | # ConceptListResponse 3 | 4 | ## Properties 5 | Name | Type | Description | Notes 6 | ------------ | ------------- | ------------- | ------------- 7 | **items** | [**List<Concept>**](Concept.md) | | 8 | **matchType** | [**MatchType**](MatchType.md) | match column type on which concept search was successful | [optional] 9 | **matchedConceptName** | **String** | matched concept name | [optional] 10 | **standardConcepts** | [**List<Concept>**](Concept.md) | standard concepts associated with the matched concept | [optional] 11 | **sourceOfStandardConcepts** | **Long** | concept for which standard concepts are fetched | [optional] 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /public-api/docs/ConfigResponse.md: -------------------------------------------------------------------------------- 1 | 2 | # ConfigResponse 3 | 4 | ## Properties 5 | Name | Type | Description | Notes 6 | ------------ | ------------- | ------------- | ------------- 7 | **projectId** | **String** | The cloud project in which this app is running. | [optional] 8 | **dataBrowserIsSafe** | **Boolean** | Whether the data is safe to show. An emergency page will show if set to false. | [optional] 9 | **publicApiKeyForErrorReports** | **String** | Stackdriver API key for error reporting, scoped to a particular domain. If unset, Stackdriver error reporting should be disabled. | [optional] 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /public-api/docs/CountAnalysis.md: -------------------------------------------------------------------------------- 1 | 2 | # CountAnalysis 3 | 4 | ## Properties 5 | Name | Type | Description | Notes 6 | ------------ | ------------- | ------------- | ------------- 7 | **domainId** | **String** | domain id | 8 | **genderCountAnalysis** | [**Analysis**](Analysis.md) | biological sex count analysis | [optional] 9 | **ageCountAnalysis** | [**Analysis**](Analysis.md) | age count analysis | [optional] 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /public-api/docs/CriteriaListResponse.md: -------------------------------------------------------------------------------- 1 | 2 | # CriteriaListResponse 3 | 4 | ## Properties 5 | Name | Type | Description | Notes 6 | ------------ | ------------- | ------------- | ------------- 7 | **items** | [**List<CBCriteria>**](CBCriteria.md) | | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /public-api/docs/CriteriaParentResponse.md: -------------------------------------------------------------------------------- 1 | 2 | # CriteriaParentResponse 3 | 4 | ## Properties 5 | Name | Type | Description | Notes 6 | ------------ | ------------- | ------------- | ------------- 7 | **parent** | [**CBCriteria**](CBCriteria.md) | parent row | [optional] 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /public-api/docs/DataAccessLevel.md: -------------------------------------------------------------------------------- 1 | 2 | # DataAccessLevel 3 | 4 | ## Enum 5 | 6 | 7 | * `UNREGISTERED` (value: `"unregistered"`) 8 | 9 | * `REGISTERED` (value: `"registered"`) 10 | 11 | * `PROTECTED` (value: `"protected"`) 12 | 13 | * `REVOKED` (value: `"revoked"`) 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /public-api/docs/Domain.md: -------------------------------------------------------------------------------- 1 | 2 | # Domain 3 | 4 | ## Enum 5 | 6 | 7 | * `OBSERVATION` (value: `"OBSERVATION"`) 8 | 9 | * `PROCEDURE` (value: `"PROCEDURE"`) 10 | 11 | * `DRUG` (value: `"DRUG"`) 12 | 13 | * `CONDITION` (value: `"CONDITION"`) 14 | 15 | * `MEASUREMENT` (value: `"MEASUREMENT"`) 16 | 17 | * `DEVICE` (value: `"DEVICE"`) 18 | 19 | * `VISIT` (value: `"VISIT"`) 20 | 21 | * `DEATH` (value: `"DEATH"`) 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /public-api/docs/DomainInfo.md: -------------------------------------------------------------------------------- 1 | 2 | # DomainInfo 3 | 4 | ## Properties 5 | Name | Type | Description | Notes 6 | ------------ | ------------- | ------------- | ------------- 7 | **domain** | [**Domain**](Domain.md) | the domain ID | 8 | **domainConceptId** | **Long** | domain concept id | [optional] 9 | **name** | **String** | display name of the domain | 10 | **description** | **String** | description of the domain | 11 | **standardConceptCount** | **Long** | number of standard concepts in this domain | 12 | **allConceptCount** | **Long** | number of concepts in this domain (standard or non-standard) | 13 | **participantCount** | **Long** | number of participants with data in the CDR for a concept in this domain | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /public-api/docs/DomainInfosAndSurveyModulesResponse.md: -------------------------------------------------------------------------------- 1 | 2 | # DomainInfosAndSurveyModulesResponse 3 | 4 | ## Properties 5 | Name | Type | Description | Notes 6 | ------------ | ------------- | ------------- | ------------- 7 | **domainInfos** | [**List<DomainInfo>**](DomainInfo.md) | | 8 | **surveyModules** | [**List<SurveyModule>**](SurveyModule.md) | | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /public-api/docs/ErrorCode.md: -------------------------------------------------------------------------------- 1 | 2 | # ErrorCode 3 | 4 | ## Enum 5 | 6 | 7 | * `ERROR` (value: `"PARSE_ERROR"`) 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /public-api/docs/ErrorResponse.md: -------------------------------------------------------------------------------- 1 | 2 | # ErrorResponse 3 | 4 | ## Properties 5 | Name | Type | Description | Notes 6 | ------------ | ------------- | ------------- | ------------- 7 | **message** | **String** | Error message | [optional] 8 | **statusCode** | **Integer** | Http error status code | [optional] 9 | **errorClassName** | **String** | | [optional] 10 | **errorCode** | [**ErrorCode**](ErrorCode.md) | Short description of the type of error | [optional] 11 | **errorUniqueId** | **String** | Unique ID for this error response, for correlation with backend logs | [optional] 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /public-api/docs/IdVerificationStatus.md: -------------------------------------------------------------------------------- 1 | 2 | # IdVerificationStatus 3 | 4 | ## Enum 5 | 6 | 7 | * `UNVERIFIED` (value: `"UNVERIFIED"`) 8 | 9 | * `VERIFIED` (value: `"VERIFIED"`) 10 | 11 | * `REJECTED` (value: `"REJECTED"`) 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /public-api/docs/MatchType.md: -------------------------------------------------------------------------------- 1 | 2 | # MatchType 3 | 4 | ## Enum 5 | 6 | 7 | * `CODE` (value: `"CONCEPT_CODE"`) 8 | 9 | * `ID` (value: `"CONCEPT_ID"`) 10 | 11 | * `NAME` (value: `"CONCEPT_NAME"`) 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /public-api/docs/MeasurementConceptInfo.md: -------------------------------------------------------------------------------- 1 | 2 | # MeasurementConceptInfo 3 | 4 | ## Properties 5 | Name | Type | Description | Notes 6 | ------------ | ------------- | ------------- | ------------- 7 | **conceptId** | **Long** | | [optional] 8 | **hasValues** | **Integer** | | [optional] 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /public-api/docs/Profile.md: -------------------------------------------------------------------------------- 1 | 2 | # Profile 3 | 4 | ## Properties 5 | Name | Type | Description | Notes 6 | ------------ | ------------- | ------------- | ------------- 7 | **username** | **String** | researchallofus username | 8 | **dataAccessLevel** | [**DataAccessLevel**](DataAccessLevel.md) | what level of data access the user has | 9 | **idVerificationStatus** | [**IdVerificationStatus**](IdVerificationStatus.md) | Status of ID verification | [optional] 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /public-api/docs/QuestionConceptListResponse.md: -------------------------------------------------------------------------------- 1 | 2 | # QuestionConceptListResponse 3 | 4 | ## Properties 5 | Name | Type | Description | Notes 6 | ------------ | ------------- | ------------- | ------------- 7 | **items** | [**List<QuestionConcept>**](QuestionConcept.md) | | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /public-api/docs/StandardConceptFilter.md: -------------------------------------------------------------------------------- 1 | 2 | # StandardConceptFilter 3 | 4 | ## Enum 5 | 6 | 7 | * `ALL_CONCEPTS` (value: `"ALL_CONCEPTS"`) 8 | 9 | * `STANDARD_CONCEPTS` (value: `"STANDARD_CONCEPTS"`) 10 | 11 | * `NON_STANDARD_CONCEPTS` (value: `"NON_STANDARD_CONCEPTS"`) 12 | 13 | * `STANDARD_OR_CODE_ID_MATCH` (value: `"STANDARD_OR_CODE_ID_MATCH"`) 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /public-api/docs/SubQuestionFetchResponse.md: -------------------------------------------------------------------------------- 1 | 2 | # SubQuestionFetchResponse 3 | 4 | ## Properties 5 | Name | Type | Description | Notes 6 | ------------ | ------------- | ------------- | ------------- 7 | **questions** | [**QuestionConceptListResponse**](QuestionConceptListResponse.md) | survey questions | [optional] 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /public-api/docs/SurveyModule.md: -------------------------------------------------------------------------------- 1 | 2 | # SurveyModule 3 | 4 | ## Properties 5 | Name | Type | Description | Notes 6 | ------------ | ------------- | ------------- | ------------- 7 | **conceptId** | **Long** | the concept ID for the survey module | 8 | **name** | **String** | display name of the module | 9 | **description** | **String** | description of the module | 10 | **questionCount** | **Long** | number of questions in the module | 11 | **participantCount** | **Long** | number of participants with data in the CDR for questions in this module | 12 | **orderNumber** | **Integer** | survey release order number | [optional] 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /public-api/docs/SurveyQuestionFetchResponse.md: -------------------------------------------------------------------------------- 1 | 2 | # SurveyQuestionFetchResponse 3 | 4 | ## Properties 5 | Name | Type | Description | Notes 6 | ------------ | ------------- | ------------- | ------------- 7 | **questions** | [**QuestionConceptListResponse**](QuestionConceptListResponse.md) | survey questions | [optional] 8 | **survey** | [**SurveyModule**](SurveyModule.md) | | [optional] 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /public-api/docs/SurveyVersionCountResponse.md: -------------------------------------------------------------------------------- 1 | 2 | # SurveyVersionCountResponse 3 | 4 | ## Properties 5 | Name | Type | Description | Notes 6 | ------------ | ------------- | ------------- | ------------- 7 | **analyses** | [**AnalysisListResponse**](AnalysisListResponse.md) | analysis objects | [optional] 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /public-api/gradle.properties: -------------------------------------------------------------------------------- 1 | # Uncomment to build for Android 2 | #target = android -------------------------------------------------------------------------------- /public-api/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-api/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /public-api/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Tue May 17 23:08:05 CST 2016 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.1-bin.zip 7 | -------------------------------------------------------------------------------- /public-api/libproject/cloudsqlproxycontext.rb: -------------------------------------------------------------------------------- 1 | require_relative "../../aou-utils/serviceaccounts" 2 | require_relative "../../aou-utils/workbench" 3 | 4 | class CloudSqlProxyContext < ServiceAccountContext 5 | 6 | def run() 7 | # TODO(dmohs): An error here does not cause the main thread to die. 8 | super do 9 | instance = "#{@project}:us-central1:databrowsermaindb" 10 | @ps = fork do 11 | exec(*%W{ 12 | cloud_sql_proxy 13 | --port 3307 14 | #{instance} 15 | --credentials-file=#{@path} 16 | }) 17 | end 18 | begin 19 | sleep 1 # TODO(dmohs): Detect running better. 20 | yield 21 | ensure 22 | Process.kill "HUP", @ps 23 | Process.wait 24 | end 25 | end 26 | end 27 | end 28 | -------------------------------------------------------------------------------- /public-api/libproject/generate_appengine_web_xml.rb: -------------------------------------------------------------------------------- 1 | xml = File.read("src/main/webapp/WEB-INF/appengine-web.xml.template") 2 | ENV.each { |k, v| xml.gsub! "${#{k}}", v } 3 | 4 | # Hacky fix for interpolating environment variables inside the connection strings since docker 5 | # does not do it when loading environment files. 6 | xml.gsub! "$DB_HOST", ENV.fetch("DB_HOST", "") 7 | 8 | File.write("src/main/webapp/WEB-INF/appengine-web.xml", xml) 9 | -------------------------------------------------------------------------------- /public-api/project.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | 3 | require_relative "../aou-utils/workbench" 4 | require_relative "libproject/devstart.rb" 5 | 6 | Workbench.handle_argv_or_die(__FILE__) 7 | -------------------------------------------------------------------------------- /public-api/settings.gradle: -------------------------------------------------------------------------------- 1 | pluginManagement { 2 | repositories { 3 | gradlePluginPortal() 4 | mavenCentral() 5 | // add mavenLocal() if you are using a locally built version of the plugin 6 | } 7 | resolutionStrategy { 8 | eachPlugin { 9 | if (requested.id.id.startsWith('com.google.cloud.tools.appengine')) { 10 | useModule("com.google.cloud.tools:appengine-gradle-plugin:${requested.version}") 11 | } 12 | } 13 | } 14 | } -------------------------------------------------------------------------------- /public-api/src/dev/server/with-mysql-login.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Generates a temporary "my.cnf" MySQL client configuration file. This is useful 3 | # in situations where we want an interactive shell for MySQL interactions, e.g. 4 | # for mysqlbinlog, without requiring the developer to re-enter the user/pass. 5 | # See https://dev.mysql.com/doc/refman/8.0/en/option-file-options.html 6 | 7 | # This script is designed to work within docker run --rm, where /tmp is 8 | # generally not a mounted volume and is assumed not to persist beyond a single 9 | # docker invocation. 10 | tmp_dir="$(mktemp -d)" 11 | tmp="${tmp_dir}/my.cnf" 12 | 13 | user="${1}" 14 | password="${2}" 15 | cat > "${tmp}" << EOF 16 | [client] 17 | user = ${user} 18 | password = ${password} 19 | host = 127.0.0.1 20 | port = 3307 21 | EOF 22 | 23 | echo "${tmp_dir}" -------------------------------------------------------------------------------- /public-api/src/dev/server/with-uid.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | USERNAME=$(whoami 2>/dev/null) 4 | EXIT_CODE=$? 5 | 6 | if [[ $EXIT_CODE -eq 0 ]]; then 7 | >&2 echo 'This container has poor behavior if run as an existing user.' \ 8 | 'The given UID matches the user '"'$USERNAME'"'. Exiting.'; 9 | exit 1; 10 | fi 11 | 12 | exec $@ -------------------------------------------------------------------------------- /public-api/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public-api/src/main/java/org/pmiops/workbench/PublicApiApplication.java: -------------------------------------------------------------------------------- 1 | package org.pmiops.workbench; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | 6 | @SpringBootApplication 7 | public class PublicApiApplication { 8 | 9 | public static void main(String[] args) { 10 | SpringApplication.run(PublicApiApplication.class, args); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /public-api/src/main/java/org/pmiops/workbench/PublicApiServletInitializer.java: -------------------------------------------------------------------------------- 1 | package org.pmiops.workbench; 2 | 3 | import jakarta.servlet.ServletContext; 4 | import jakarta.servlet.ServletException; 5 | 6 | import org.springframework.boot.builder.SpringApplicationBuilder; 7 | import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; 8 | 9 | public class PublicApiServletInitializer extends SpringBootServletInitializer { 10 | 11 | @Override 12 | protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { 13 | return application.sources(PublicApiApplication.class); 14 | } 15 | } -------------------------------------------------------------------------------- /public-api/src/main/java/org/pmiops/workbench/RootController.java: -------------------------------------------------------------------------------- 1 | package org.pmiops.workbench; 2 | 3 | import org.springframework.web.bind.annotation.RequestMapping; 4 | import org.springframework.web.bind.annotation.RestController; 5 | 6 | @RestController 7 | public class RootController { 8 | 9 | @RequestMapping("/") 10 | public String index() { 11 | return "AllOfUs Public API"; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /public-api/src/main/java/org/pmiops/workbench/cdr/dao/AchillesResultDao.java: -------------------------------------------------------------------------------- 1 | package org.pmiops.workbench.cdr.dao; 2 | 3 | import org.pmiops.workbench.cdr.model.DbAchillesResult; 4 | import org.springframework.data.repository.CrudRepository; 5 | 6 | public interface AchillesResultDao extends CrudRepository { 7 | DbAchillesResult findAchillesResultByAnalysisId(Long analysisId); 8 | } 9 | -------------------------------------------------------------------------------- /public-api/src/main/java/org/pmiops/workbench/cdr/dao/ConceptRelationshipDao.java: -------------------------------------------------------------------------------- 1 | package org.pmiops.workbench.cdr.dao; 2 | 3 | import java.util.List; 4 | import org.pmiops.workbench.cdr.model.ConceptRelationship; 5 | import org.springframework.data.repository.CrudRepository; 6 | 7 | public interface ConceptRelationshipDao extends CrudRepository { 8 | 9 | List findAll(); 10 | } 11 | -------------------------------------------------------------------------------- /public-api/src/main/java/org/pmiops/workbench/cdr/dao/ConceptSynonymDao.java: -------------------------------------------------------------------------------- 1 | package org.pmiops.workbench.cdr.dao; 2 | 3 | import org.pmiops.workbench.cdr.model.ConceptSynonym; 4 | import org.springframework.data.repository.CrudRepository; 5 | import java.util.List; 6 | 7 | // NOTE: This class and ConceptSynonym exist only to make CriteriaDao work in tests; 8 | // if we stop using concept_synonym there at some point we can get rid of them. 9 | public interface ConceptSynonymDao extends CrudRepository { 10 | 11 | List findByConceptIdIn(List conceptIds); 12 | 13 | } 14 | -------------------------------------------------------------------------------- /public-api/src/main/java/org/pmiops/workbench/cdr/dao/DomainVocabularyInfoDao.java: -------------------------------------------------------------------------------- 1 | package org.pmiops.workbench.cdr.dao; 2 | 3 | import java.util.List; 4 | import org.pmiops.workbench.cdr.model.DomainVocabularyInfo; 5 | import org.pmiops.workbench.cdr.model.DomainVocabularyInfo.DomainVocabularyInfoId; 6 | import org.springframework.data.repository.CrudRepository; 7 | 8 | public interface DomainVocabularyInfoDao extends CrudRepository { 9 | 10 | List findById_DomainIdOrderById_VocabularyId(String domainId); 11 | } 12 | -------------------------------------------------------------------------------- /public-api/src/main/java/org/pmiops/workbench/cdr/model/VocabularyCount.java: -------------------------------------------------------------------------------- 1 | package org.pmiops.workbench.cdr.model; 2 | 3 | /** 4 | * A count of concepts in a vocabulary. 5 | */ 6 | public interface VocabularyCount { 7 | 8 | public String getVocabularyId(); 9 | 10 | public long getConceptCount(); 11 | } 12 | -------------------------------------------------------------------------------- /public-api/src/main/java/org/pmiops/workbench/config/AppEngineConfig.java: -------------------------------------------------------------------------------- 1 | package org.pmiops.workbench.config; 2 | 3 | import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport; 4 | import com.google.api.client.http.HttpTransport; 5 | import java.io.IOException; 6 | import java.security.GeneralSecurityException; 7 | import org.springframework.context.annotation.Bean; 8 | import org.springframework.context.annotation.Configuration; 9 | 10 | @Configuration 11 | public class AppEngineConfig { 12 | 13 | @Bean 14 | HttpTransport httpTransport() throws GeneralSecurityException, IOException { 15 | return GoogleNetHttpTransport.newTrustedTransport(); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /public-api/src/main/java/org/pmiops/workbench/config/BigQueryConfig.java: -------------------------------------------------------------------------------- 1 | package org.pmiops.workbench.config; 2 | 3 | import com.google.cloud.bigquery.BigQuery; 4 | import com.google.cloud.bigquery.BigQueryOptions; 5 | import org.springframework.context.annotation.Bean; 6 | import org.springframework.context.annotation.Configuration; 7 | 8 | @Configuration 9 | public class BigQueryConfig { 10 | 11 | @Bean 12 | public BigQuery bigQuery() { 13 | return BigQueryOptions.getDefaultInstance().getService(); 14 | } 15 | } -------------------------------------------------------------------------------- /public-api/src/main/java/org/pmiops/workbench/config/EnvVars.java: -------------------------------------------------------------------------------- 1 | package org.pmiops.workbench.config; 2 | 3 | import java.util.Optional; 4 | import org.springframework.context.annotation.Configuration; 5 | 6 | @Configuration // provide as an injectible dependency 7 | // This class is just a proxy for retrieving environment variables that can be overriden in tests. 8 | public class EnvVars { 9 | public Optional get(String name) { 10 | return Optional.ofNullable(System.getenv(name)).filter(s -> !s.isBlank()); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /public-api/src/main/java/org/pmiops/workbench/config/WebSecurityConfig.java: -------------------------------------------------------------------------------- 1 | package org.pmiops.workbench.config; 2 | 3 | import org.springframework.context.annotation.Bean; 4 | import org.springframework.context.annotation.Configuration; 5 | import org.springframework.security.config.annotation.web.builders.HttpSecurity; 6 | import org.springframework.security.web.SecurityFilterChain; 7 | 8 | @Configuration 9 | public class WebSecurityConfig { 10 | 11 | @Bean 12 | public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { 13 | http 14 | .authorizeRequests(authorizeRequests -> authorizeRequests 15 | .anyRequest().permitAll() 16 | ) 17 | .csrf(csrf -> csrf.disable()); 18 | 19 | return http.build(); 20 | } 21 | } -------------------------------------------------------------------------------- /public-api/src/main/java/org/pmiops/workbench/config/WorkbenchConfig.java: -------------------------------------------------------------------------------- 1 | package org.pmiops.workbench.config; 2 | 3 | /** 4 | * A class representing the main workbench configuration; parsed from JSON stored in the database. 5 | * See {@link CacheSpringConfiguration}. This should be kept in sync with files in the config/ directory. 6 | */ 7 | public class WorkbenchConfig { 8 | public ServerConfig server; 9 | 10 | public static class ServerConfig { 11 | public Boolean debugEndpoints; 12 | public String workbenchApiBaseUrl; 13 | public String publicApiKeyForErrorReports; 14 | public String projectId; 15 | public String gaId; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /public-api/src/main/java/org/pmiops/workbench/db/dao/CdrVersionDao.java: -------------------------------------------------------------------------------- 1 | package org.pmiops.workbench.db.dao; 2 | 3 | import java.util.List; 4 | import java.util.Set; 5 | import org.pmiops.workbench.db.model.DbCdrVersion; 6 | import org.springframework.data.repository.CrudRepository; 7 | 8 | public interface CdrVersionDao extends CrudRepository { 9 | 10 | DbCdrVersion findByName(String name); 11 | DbCdrVersion findByIsDefault(boolean isDefault); 12 | List findAllByOrderByCreationTimeDesc(); 13 | } -------------------------------------------------------------------------------- /public-api/src/main/java/org/pmiops/workbench/db/dao/ConfigDao.java: -------------------------------------------------------------------------------- 1 | package org.pmiops.workbench.db.dao; 2 | 3 | import org.pmiops.workbench.db.model.Config; 4 | import org.springframework.data.repository.CrudRepository; 5 | 6 | public interface ConfigDao extends CrudRepository { 7 | } 8 | -------------------------------------------------------------------------------- /public-api/src/main/java/org/pmiops/workbench/exceptions/BadRequestException.java: -------------------------------------------------------------------------------- 1 | package org.pmiops.workbench.exceptions; 2 | 3 | import org.pmiops.workbench.model.ErrorResponse; 4 | import org.springframework.http.HttpStatus; 5 | import org.springframework.web.bind.annotation.ResponseStatus; 6 | 7 | @ResponseStatus(HttpStatus.BAD_REQUEST) 8 | public class BadRequestException extends DataBrowserException { 9 | public BadRequestException() { 10 | super(); 11 | } 12 | 13 | public BadRequestException(String message) { 14 | super(message); 15 | } 16 | 17 | public BadRequestException(ErrorResponse errorResponse) { 18 | super(errorResponse); 19 | } 20 | 21 | public BadRequestException(Throwable t) { 22 | super(t); 23 | } 24 | 25 | public BadRequestException(String message, Throwable t) { 26 | super(message, t); 27 | } 28 | } -------------------------------------------------------------------------------- /public-api/src/main/java/org/pmiops/workbench/exceptions/ForbiddenException.java: -------------------------------------------------------------------------------- 1 | package org.pmiops.workbench.exceptions; 2 | 3 | import org.pmiops.workbench.model.ErrorResponse; 4 | import org.springframework.http.HttpStatus; 5 | import org.springframework.web.bind.annotation.ResponseStatus; 6 | 7 | @ResponseStatus(HttpStatus.FORBIDDEN) 8 | public class ForbiddenException extends DataBrowserException { 9 | public ForbiddenException() { 10 | super(); 11 | } 12 | 13 | public ForbiddenException(String message) { 14 | super(message); 15 | } 16 | 17 | public ForbiddenException(ErrorResponse errorResponse) { 18 | super(errorResponse); 19 | } 20 | 21 | public ForbiddenException(Throwable t) { 22 | super(t); 23 | } 24 | 25 | public ForbiddenException(String message, Throwable t) { 26 | super(message, t); 27 | } 28 | } -------------------------------------------------------------------------------- /public-api/src/main/java/org/pmiops/workbench/privateworkbench/PrivateWorkbenchService.java: -------------------------------------------------------------------------------- 1 | package org.pmiops.workbench.privateworkbench; 2 | 3 | 4 | import org.pmiops.workbench.privateworkbench.model.Profile; 5 | 6 | public interface PrivateWorkbenchService { 7 | 8 | /** 9 | * @return the Workbench profile for the requesting user. 10 | */ 11 | Profile getMe() throws ApiException; 12 | } 13 | -------------------------------------------------------------------------------- /public-api/src/main/java/org/pmiops/workbench/utils/mappers/CdrVersionMapper.java: -------------------------------------------------------------------------------- 1 | package org.pmiops.workbench.cdr; 2 | 3 | import org.mapstruct.Mapper; 4 | import org.pmiops.workbench.db.model.DbCdrVersion; 5 | import org.pmiops.workbench.model.CdrVersion; 6 | import org.pmiops.workbench.utils.mappers.CommonMappers; 7 | import org.pmiops.workbench.utils.mappers.MapStructConfig; 8 | 9 | @Mapper( 10 | config = MapStructConfig.class, 11 | uses = {CommonMappers.class}) 12 | public interface CdrVersionMapper { 13 | CdrVersion dbModelToClient(DbCdrVersion db); 14 | 15 | default boolean isNonEmpty(String s) { 16 | return s != null && !s.isEmpty(); 17 | } 18 | } -------------------------------------------------------------------------------- /public-api/src/main/java/org/pmiops/workbench/utils/mappers/CommonMappers.java: -------------------------------------------------------------------------------- 1 | package org.pmiops.workbench.utils.mappers; 2 | 3 | import java.sql.Timestamp; 4 | import org.mapstruct.Mapper; 5 | 6 | @Mapper(componentModel = "spring") 7 | public class CommonMappers { 8 | 9 | public static Long timestamp(Timestamp timestamp) { 10 | if (timestamp != null) { 11 | return timestamp.getTime(); 12 | } 13 | 14 | return null; 15 | } 16 | 17 | public static Timestamp timestamp(Long timestamp) { 18 | if (timestamp != null) { 19 | return new Timestamp(timestamp); 20 | } 21 | 22 | return null; 23 | } 24 | } -------------------------------------------------------------------------------- /public-api/src/main/java/org/pmiops/workbench/utils/mappers/ConceptMapper.java: -------------------------------------------------------------------------------- 1 | package org.pmiops.workbench.cdr; 2 | 3 | import org.mapstruct.Mapper; 4 | import org.pmiops.workbench.model.Concept; 5 | import org.pmiops.workbench.cdr.model.DbConcept; 6 | import org.mapstruct.Mapping; 7 | import org.pmiops.workbench.utils.mappers.CommonMappers; 8 | import org.pmiops.workbench.utils.mappers.MapStructConfig; 9 | 10 | @Mapper( 11 | config = MapStructConfig.class, 12 | uses = {CommonMappers.class}) 13 | public interface ConceptMapper { 14 | @Mapping(target = "conceptSynonyms", source="synonyms") 15 | @Mapping(target = "measurementConceptInfo", source="dbMeasurementConceptInfo") 16 | Concept dbModelToClient(DbConcept db); 17 | 18 | default boolean isNonEmpty(String s) { 19 | return s != null && !s.isEmpty(); 20 | } 21 | } -------------------------------------------------------------------------------- /public-api/src/main/java/org/pmiops/workbench/utils/mappers/CriteriaMapper.java: -------------------------------------------------------------------------------- 1 | package org.pmiops.workbench.cdr; 2 | 3 | import org.mapstruct.Mapper; 4 | import org.pmiops.workbench.model.Criteria; 5 | import org.pmiops.workbench.cdr.model.DbCriteria; 6 | import org.pmiops.workbench.utils.mappers.CommonMappers; 7 | import org.pmiops.workbench.utils.mappers.MapStructConfig; 8 | 9 | @Mapper( 10 | config = MapStructConfig.class, 11 | uses = {CommonMappers.class}) 12 | public interface CriteriaMapper { 13 | Criteria dbModelToClient(DbCriteria db); 14 | } -------------------------------------------------------------------------------- /public-api/src/main/java/org/pmiops/workbench/utils/mappers/MapStructConfig.java: -------------------------------------------------------------------------------- 1 | package org.pmiops.workbench.utils.mappers; 2 | 3 | import org.mapstruct.MapperConfig; 4 | import org.mapstruct.ReportingPolicy; 5 | 6 | @MapperConfig(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.ERROR) 7 | public class MapStructConfig {} -------------------------------------------------------------------------------- /public-api/src/main/webapp/WEB-INF/logging.properties: -------------------------------------------------------------------------------- 1 | # Set the default logging level for all loggers to INFO 2 | .level = INFO 3 | handlers=java.util.logging.ConsoleHandler 4 | java.util.logging.ConsoleHandler.level=FINEST 5 | java.util.logging.ConsoleHandler.formatter=java.util.logging.SimpleFormatter 6 | java.util.logging.SimpleFormatter.format = [%1$tc] %4$s: %2$s - %5$s %6$s%n 7 | -------------------------------------------------------------------------------- /public-api/src/main/webapp/WEB-INF/web.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | AllOfUs Public API 6 | 7 | 8 | all 9 | /* 10 | 11 | 12 | CONFIDENTIAL 13 | 14 | 15 | -------------------------------------------------------------------------------- /public-api/src/test/java/org/pmiops/workbench/Providers.java: -------------------------------------------------------------------------------- 1 | package org.pmiops.workbench; 2 | 3 | import jakarta.inject.Provider; 4 | 5 | public class Providers { 6 | 7 | public static Provider of(final T t) { 8 | return () -> t; 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /public-api/src/test/resources/application.properties: -------------------------------------------------------------------------------- 1 | spring.datasource.driver-class-name=org.h2.Driver 2 | spring.datasource.url=jdbc:h2:mem:db;DB_CLOSE_DELAY=-1;INIT=CREATE SCHEMA IF NOT EXISTS workbench 3 | spring.datasource.username=sa 4 | spring.datasource.password=sa 5 | spring.jpa.hibernate.ddl-auto=create-drop 6 | spring.jpa.properties.hibernate.dialect=org.pmiops.workbench.cdr.CommonTestDialect 7 | spring.jpa.properties.hibernate.enable_lazy_load_no_trans=true 8 | spring.main.allow-bean-definition-overriding=true 9 | spring.liquibase.enabled=false 10 | spring.datasource.initialization-mode=never -------------------------------------------------------------------------------- /public-api/tools/src/resources/application.properties: -------------------------------------------------------------------------------- 1 | spring.liquibase.enabled=false 2 | spring.main.web-application-type=none 3 | spring.jpa.hibernate.ddl-auto=none 4 | spring.datasource.initialization-mode=never 5 | spring.datasource.type=org.apache.tomcat.jdbc.pool.DataSource -------------------------------------------------------------------------------- /public-ui/.dockerignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | -------------------------------------------------------------------------------- /public-ui/.eslintignore: -------------------------------------------------------------------------------- 1 | .eslintrc.js 2 | node_modules 3 | src/publicGenerated 4 | **/*.spec.ts -------------------------------------------------------------------------------- /public-ui/.gcloudignore: -------------------------------------------------------------------------------- 1 | * 2 | !/dist/** 3 | -------------------------------------------------------------------------------- /public-ui/.npmrc: -------------------------------------------------------------------------------- 1 | # we previously set this value to https://npm.fontawesome.com/ in order to access Font Awesome Pro packages with our auth token 2 | # unfortunately, simply removing this setting can cause 401/Unauthorized errors under some scenarios (unclear when) for the Free packages we continue to use 3 | # we can avoid this by forcing the use of our standard registry 4 | @fortawesome:registry=https://registry.yarnpkg.com/ 5 | -------------------------------------------------------------------------------- /public-ui/dispatch.yaml: -------------------------------------------------------------------------------- 1 | dispatch: 2 | - url: "public.api.staging.fake-research-aou.org/v1/*" 3 | service: api 4 | - url: "*/favicon.ico" 5 | service: default 6 | - url: "databrowser.staging.fake-research-aou.org/" 7 | service: default 8 | 9 | -------------------------------------------------------------------------------- /public-ui/docker-compose.yaml: -------------------------------------------------------------------------------- 1 | version: "3" 2 | services: 3 | public-ui: 4 | build: 5 | context: ./src/dev/server 6 | user: ${UID} 7 | working_dir: /w/public-ui 8 | volumes: 9 | - ..:/w:cached 10 | - ~/.config:/.config:cached 11 | - ~/.gsutil:/.gsutil:cached 12 | command: yarn start --host=0.0.0.0 ${ENV_FLAG} 13 | environment: 14 | - GOOGLE_APPLICATION_CREDENTIALS=/w/ui/sa-key.json 15 | ports: 16 | - 4201:4201 17 | tests: 18 | build: 19 | context: ./src/dev/server 20 | user: ${UID} 21 | working_dir: /w/public-ui 22 | volumes: 23 | - ..:/w:cached 24 | command: yarn test 25 | ports: 26 | - 9877:9877 27 | -------------------------------------------------------------------------------- /public-ui/iap_settings.yaml: -------------------------------------------------------------------------------- 1 | accessSettings: 2 | corsSettings: 3 | allowHttpOptions: false 4 | 5 | -------------------------------------------------------------------------------- /public-ui/openapitools.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "./node_modules/@openapitools/openapi-generator-cli/config.schema.json", 3 | "spaces": 2, 4 | "generator-cli": { 5 | "version": "7.6.0" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /public-ui/project.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | 3 | require_relative "../aou-utils/workbench" 4 | require_relative "libproject/devstart.rb" 5 | 6 | Workbench.handle_argv_or_die(__FILE__) 7 | -------------------------------------------------------------------------------- /public-ui/src/app/components/beta-bar/beta-bar.component.html: -------------------------------------------------------------------------------- 1 |
2 | WE ARE IN BETA 3 |
4 |
5 | You are viewing the Beta Version of the All of Us Data Browser. 6 |
7 | -------------------------------------------------------------------------------- /public-ui/src/app/components/beta-bar/beta-bar.component.ts: -------------------------------------------------------------------------------- 1 | import { environment } from "environments/environment"; 2 | import { Component, OnInit } from "@angular/core"; 3 | @Component({ 4 | selector: "app-beta-bar", 5 | templateUrl: "./beta-bar.component.html", 6 | styleUrls: ["./beta-bar.component.css"], 7 | }) 8 | export class BetaBarComponent implements OnInit { 9 | allOfUsUrl: string; 10 | constructor() {} 11 | 12 | ngOnInit() { 13 | this.allOfUsUrl = environment.researchAllOfUsUrl; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /public-ui/src/app/components/db-no-results/db-no-results.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; 2 | 3 | import { DbNoResultsComponent } from './db-no-results.component'; 4 | 5 | describe('DbNoResultsComponent', () => { 6 | let component: DbNoResultsComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(waitForAsync(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ DbNoResultsComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(DbNoResultsComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /public-ui/src/app/data-browser/chart/chart.component.css: -------------------------------------------------------------------------------- 1 | .standard-chart { 2 | display: block; 3 | background-size: contain; 4 | height: 100%; 5 | width: 100%; 6 | } 7 | 8 | .small-chart { 9 | display: block; 10 | width: 400px; 11 | height: 300px; 12 | } 13 | 14 | highcharts-title { 15 | fill: #434348; 16 | font-weight: 400; 17 | font-size: 10px; 18 | } 19 | -------------------------------------------------------------------------------- /public-ui/src/app/data-browser/chart/chart.component.html: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /public-ui/src/app/data-browser/charts/chart-age/chart-age.component.css: -------------------------------------------------------------------------------- 1 | .standard-chart { 2 | display: block; 3 | background-size: contain; 4 | height: auto; 5 | width: 100%; 6 | } -------------------------------------------------------------------------------- /public-ui/src/app/data-browser/charts/chart-age/chart-age.component.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public-ui/src/app/data-browser/charts/chart-age/chart-age.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; 2 | 3 | import { ChartAgeComponent } from './chart-age.component'; 4 | 5 | describe('ChartAgeComponent', () => { 6 | let component: ChartAgeComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(waitForAsync(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ ChartAgeComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(ChartAgeComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /public-ui/src/app/data-browser/charts/chart-base/chart-base.component.css: -------------------------------------------------------------------------------- 1 | .standard-chart { 2 | display: block; 3 | background-size: contain; 4 | height: 100%; 5 | width: 100%; 6 | } 7 | -------------------------------------------------------------------------------- /public-ui/src/app/data-browser/charts/chart-base/chart-base.component.html: -------------------------------------------------------------------------------- 1 |

2 | chart-base works! 3 |

4 | -------------------------------------------------------------------------------- /public-ui/src/app/data-browser/charts/chart-base/chart-base.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; 2 | 3 | import { ChartBaseComponent } from './chart-base.component'; 4 | 5 | describe('ChartBaseComponent', () => { 6 | let component: ChartBaseComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(waitForAsync(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ ChartBaseComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(ChartBaseComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /public-ui/src/app/data-browser/charts/chart-biosex/chart-biosex.component.css: -------------------------------------------------------------------------------- 1 | .standard-chart { 2 | display: block; 3 | background-size: contain; 4 | height: auto; 5 | width: 100%; 6 | } 7 | -------------------------------------------------------------------------------- /public-ui/src/app/data-browser/charts/chart-biosex/chart-biosex.component.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public-ui/src/app/data-browser/charts/chart-biosex/chart-biosex.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; 2 | 3 | import { ChartBiosexComponent } from './chart-biosex.component'; 4 | 5 | describe('ChartBiosexComponent', () => { 6 | let component: ChartBiosexComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(waitForAsync(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ ChartBiosexComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(ChartBiosexComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /public-ui/src/app/data-browser/charts/chart-fitbit/chart-fitbit.component.css: -------------------------------------------------------------------------------- 1 | 2 | .standard-chart { 3 | display: block; 4 | background-size: contain; 5 | width: 100%; 6 | } 7 | -------------------------------------------------------------------------------- /public-ui/src/app/data-browser/charts/chart-fitbit/chart-fitbit.component.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public-ui/src/app/data-browser/charts/chart-fitbit/chart-fitbit.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; 2 | 3 | import { ChartFitbitComponent } from './chart-fitbit.component'; 4 | 5 | describe('ChartFitbitComponent', () => { 6 | let component: ChartFitbitComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(waitForAsync(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ ChartFitbitComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(ChartFitbitComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /public-ui/src/app/data-browser/charts/chart-survey-answers/chart-survey-answers.component.css: -------------------------------------------------------------------------------- 1 | :host { 2 | display: block; 3 | padding:1rem 3rem; 4 | } 5 | .answer-chart-layout { 6 | display:flex; 7 | justify-content: center; 8 | align-items: flex-end; 9 | } 10 | .legend { 11 | padding:1rem; 12 | padding-bottom: 2rem; 13 | max-width: 15rem; 14 | } 15 | 16 | .legend-inner { 17 | display:flex; 18 | flex-direction: column; 19 | align-items: flex-start; 20 | overflow-y: auto; 21 | max-height: 20rem; 22 | } 23 | .legend-item { 24 | display: grid; 25 | grid-template-columns: 1rem 1fr; 26 | font-size:.8em; 27 | padding-bottom: .5em; 28 | } 29 | 30 | .legend-item span { 31 | text-align: left; 32 | } 33 | 34 | .standard-chart { 35 | display: block; 36 | background-size: contain; 37 | height: auto; 38 | width: 75%; 39 | } 40 | -------------------------------------------------------------------------------- /public-ui/src/app/data-browser/charts/chart-survey-answers/chart-survey-answers.component.html: -------------------------------------------------------------------------------- 1 |
2 | 3 |
4 |
5 |
6 | 7 | 8 | {{item.answserValue}} 9 | 10 |
11 |
12 |
13 |
-------------------------------------------------------------------------------- /public-ui/src/app/data-browser/charts/chart-top-results/chart-top-results.component.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/app/data-browser/charts/chart-top-results/chart-top-results.component.css -------------------------------------------------------------------------------- /public-ui/src/app/data-browser/charts/chart-top-results/chart-top-results.component.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public-ui/src/app/data-browser/charts/chart-top-results/chart-top-results.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; 2 | 3 | import { ChartTopResultsComponent } from './chart-top-results.component'; 4 | 5 | describe('ChartTopResultsComponent', () => { 6 | let component: ChartTopResultsComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(waitForAsync(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ ChartTopResultsComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(ChartTopResultsComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /public-ui/src/app/data-browser/charts/chart.service.spec.ts: -------------------------------------------------------------------------------- 1 | import { inject, TestBed } from "@angular/core/testing"; 2 | 3 | import { ChartService } from "./chart.service"; 4 | 5 | describe("ChartService", () => { 6 | beforeEach(() => { 7 | TestBed.configureTestingModule({ 8 | providers: [ChartService], 9 | }); 10 | }); 11 | 12 | it("should be created", inject([ChartService], (service: ChartService) => { 13 | expect(service).toBeTruthy(); 14 | })); 15 | }); 16 | -------------------------------------------------------------------------------- /public-ui/src/app/data-browser/charts/chart.service.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from "@angular/core"; 2 | 3 | @Injectable() 4 | export class ChartService { 5 | barColor = "#2691D0"; 6 | barWidth = 0; 7 | backgroundColor = "trasnparent"; 8 | mainTitle = { 9 | text: "", 10 | style: { 11 | color: "#666", 12 | fontSize: "12px", 13 | }, 14 | }; 15 | xAxisTitle = { 16 | text: "", 17 | style: { 18 | color: "#262262", 19 | fontWeight: "bold", 20 | whiteSpace: "wrap", 21 | textOverflow: "ellipsis", 22 | }, 23 | }; 24 | yAxisTitle = { 25 | text: "", 26 | style: { 27 | color: "#262262", 28 | fontSize: "12px", 29 | whiteSpace: "wrap", 30 | textOverflow: "ellipsis", 31 | }, 32 | }; 33 | notEnabled = { enabled: false }; 34 | 35 | constructor() {} 36 | } 37 | -------------------------------------------------------------------------------- /public-ui/src/app/data-browser/components/recursive-tree/recursive-tree.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; 2 | 3 | import { RecursiveTreeComponent } from './recursive-tree.component'; 4 | 5 | describe('RecursiveTreeComponent', () => { 6 | let component: RecursiveTreeComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(waitForAsync(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ RecursiveTreeComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(RecursiveTreeComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /public-ui/src/app/data-browser/components/source-tree/source-tree.component.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/app/data-browser/components/source-tree/source-tree.component.css -------------------------------------------------------------------------------- /public-ui/src/app/data-browser/components/source-tree/source-tree.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; 2 | 3 | import { SourceTreeComponent } from './source-tree.component'; 4 | 5 | describe('SourceTreeComponent', () => { 6 | let component: SourceTreeComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(waitForAsync(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ SourceTreeComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(SourceTreeComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /public-ui/src/app/data-browser/components/source-tree/source-tree.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, EventEmitter, Input, Output } from "@angular/core"; 2 | 3 | @Component({ 4 | selector: "app-source-tree", 5 | template: ``, 10 | 11 | styleUrls: ["./source-tree.component.css"], 12 | }) 13 | export class SourceTreeComponent { 14 | @Input() rootNode: object; 15 | @Input() loading: boolean; 16 | @Output() conceptSelect: EventEmitter = new EventEmitter(); 17 | open = true; 18 | 19 | constructor() { 20 | this.rootNode = null; 21 | } 22 | public bubbleUp(concept) { 23 | this.conceptSelect.emit(concept); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /public-ui/src/app/data-browser/components/survey-version-table/survey-version-table.component.css: -------------------------------------------------------------------------------- 1 | strong { 2 | font-family: GothamBook, Arial, sans-serif; 3 | } 4 | 5 | .version-box-container { 6 | width:100%; 7 | font-size: .8em; 8 | } 9 | 10 | .version-box{ 11 | border:1px solid #cccccc; 12 | border-radius: 3px; 13 | } 14 | 15 | .version-box-header,.version-box-row { 16 | display: grid; 17 | grid-template-columns: 20% 15% 25% 15% 25%; 18 | /* justify-content: space-around; */ 19 | width:100%; 20 | } 21 | .version-box-row { 22 | border-top: 1px solid #cccccc; 23 | } 24 | 25 | .version-box-header { 26 | background: #dae6ed; 27 | } 28 | 29 | .version-box-header > .version-box-item { 30 | font-family: GothamBold; 31 | } 32 | .version-box-body{ 33 | overflow-y: auto; 34 | } 35 | .version-box-item{ 36 | font-weight: bold; 37 | padding:.5em; 38 | } -------------------------------------------------------------------------------- /public-ui/src/app/data-browser/components/tooltip/tooltip.component.html: -------------------------------------------------------------------------------- 1 |
2 | 3 | {{tooltip}} 4 | {{tooltip}} 5 | 6 |
-------------------------------------------------------------------------------- /public-ui/src/app/data-browser/components/tooltip/tooltip.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; 2 | 3 | import { TooltipComponent } from './tooltip.component'; 4 | 5 | describe('TooltipComponent', () => { 6 | let component: TooltipComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(waitForAsync(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ TooltipComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(TooltipComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /public-ui/src/app/data-browser/concept-charts/concept-charts.component.css: -------------------------------------------------------------------------------- 1 | .ehr-m-chart-layout { 2 | display: flex; 3 | flex-wrap: wrap; 4 | justify-content: space-between; 5 | align-items: center; 6 | padding-top: 1em; 7 | } 8 | .ehr-m-chart-item { 9 | width: calc((33.3%) - 18px); 10 | height: auto; 11 | flex-grow: 1; 12 | } 13 | .no-source-concepts, .no-values{ 14 | margin-top:1rem; 15 | margin-left: 50%; 16 | transform: translateX(-50%); 17 | width: fit-content; 18 | white-space: nowrap; 19 | } 20 | -------------------------------------------------------------------------------- /public-ui/src/app/data-browser/services/tree-highlight.service.spec.ts: -------------------------------------------------------------------------------- 1 | import { inject, TestBed } from "@angular/core/testing"; 2 | 3 | import { TreeHighlightService } from "./tree-highlight.service"; 4 | 5 | describe("TreeHighlightService", () => { 6 | beforeEach(() => { 7 | TestBed.configureTestingModule({ 8 | providers: [TreeHighlightService], 9 | }); 10 | }); 11 | 12 | it("should be created", inject( 13 | [TreeHighlightService], 14 | (service: TreeHighlightService) => { 15 | expect(service).toBeTruthy(); 16 | } 17 | )); 18 | }); 19 | -------------------------------------------------------------------------------- /public-ui/src/app/data-browser/services/tree-highlight.service.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from "@angular/core"; 2 | 3 | @Injectable() 4 | export class TreeHighlightService { 5 | constructor() {} 6 | 7 | getHighlightId() { 8 | return localStorage.getItem("treeHighlight"); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /public-ui/src/app/data-browser/services/video.service.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed } from "@angular/core/testing"; 2 | 3 | import { VideoService } from "./video.service"; 4 | 5 | describe("VideoService", () => { 6 | let service: VideoService; 7 | 8 | beforeEach(() => { 9 | TestBed.configureTestingModule({}); 10 | service = TestBed.inject(VideoService); 11 | }); 12 | 13 | it("should be created", () => { 14 | expect(service).toBeTruthy(); 15 | }); 16 | }); 17 | -------------------------------------------------------------------------------- /public-ui/src/app/data-browser/sources/sources.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; 2 | 3 | import { SourcesComponent } from './sources.component'; 4 | 5 | describe('SourcesComponent', () => { 6 | let component: SourcesComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(waitForAsync(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ SourcesComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(SourcesComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /public-ui/src/app/data-browser/views/ehr-view/ehr-view.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; 2 | 3 | import { EhrViewComponent } from './ehr-view.component'; 4 | 5 | describe('EhrViewComponent', () => { 6 | let component: EhrViewComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(waitForAsync(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ EhrViewComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(EhrViewComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /public-ui/src/app/data-browser/views/error-message/error-message.component.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/app/data-browser/views/error-message/error-message.component.css -------------------------------------------------------------------------------- /public-ui/src/app/data-browser/views/error-message/error-message.component.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 | 6 |
7 | 8 | Sorry, the data are currently unavailable. Please try refreshing the page or returning home here. 9 | 10 | 11 | 12 | Sorry, the chart cannot be displayed. Please try refreshing the page. 13 | 14 | 15 |
16 |
17 |
-------------------------------------------------------------------------------- /public-ui/src/app/data-browser/views/error-message/error-message.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; 2 | 3 | import { ErrorMessageComponent } from './error-message.component'; 4 | 5 | describe('ErrorMessageComponent', () => { 6 | let component: ErrorMessageComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(waitForAsync(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ ErrorMessageComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(ErrorMessageComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /public-ui/src/app/data-browser/views/error-message/error-message.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, Input, OnInit } from "@angular/core"; 2 | 3 | @Component({ 4 | selector: "app-error-message", 5 | templateUrl: "./error-message.component.html", 6 | styleUrls: ["./error-message.component.css", "../../../styles/page.css"], 7 | }) 8 | export class ErrorMessageComponent implements OnInit { 9 | @Input() dataType: string; 10 | 11 | constructor() {} 12 | 13 | ngOnInit() {} 14 | } 15 | -------------------------------------------------------------------------------- /public-ui/src/app/data-browser/views/fitbit-view/fitbit-view.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; 2 | 3 | import { FitbitViewComponent } from './fitbit-view.component'; 4 | 5 | describe('FitbitViewComponent', () => { 6 | let component: FitbitViewComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(waitForAsync(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ FitbitViewComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(FitbitViewComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /public-ui/src/app/data-browser/views/genomic-view/components/slider-filter/slider-constants.tsx: -------------------------------------------------------------------------------- 1 | export const view = [1000, 150]; // ViewBox: Width, Height 2 | export const trbl = [20, 50, 20, 50]; // Margins: Top, Right, Bottom, Left 3 | 4 | export const dims = [ 5 | view[0] - trbl[1] - trbl[3], // Adjusted dimensions width 6 | view[1] - trbl[0] - trbl[2], // Adjusted dimensions height 7 | ]; 8 | -------------------------------------------------------------------------------- /public-ui/src/app/data-browser/views/intro-vids/intro-vids.component.css: -------------------------------------------------------------------------------- 1 | .primary-display{ 2 | text-align: center; 3 | padding:1rem; 4 | } 5 | .vid-container { 6 | width: 100%; 7 | text-align: center; 8 | padding:1rem; 9 | padding-bottom: 2rem; 10 | } 11 | .vid-container video { 12 | width: calc((100%/12)*10); 13 | height:auto; 14 | outline: none; 15 | } 16 | -------------------------------------------------------------------------------- /public-ui/src/app/data-browser/views/intro-vids/intro-vids.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; 2 | 3 | import { IntroVidsComponent } from './intro-vids.component'; 4 | 5 | describe('IntroVidsComponent', () => { 6 | let component: IntroVidsComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(waitForAsync(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ IntroVidsComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(IntroVidsComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /public-ui/src/app/data-browser/views/intro-vids/intro-vids.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from "@angular/core"; 2 | import { VideoService } from "app/data-browser/services/video.service"; 3 | @Component({ 4 | selector: "app-intro-vids", 5 | styleUrls: ["../../../styles/template.css", "./intro-vids.component.css"], 6 | templateUrl: "./intro-vids.component.html", 7 | }) 8 | export class IntroVidsComponent { 9 | videos: any[]; 10 | constructor(private videoService: VideoService) { 11 | this.videos = this.videoService.videos; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /public-ui/src/app/data-browser/views/pm/pm.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; 2 | 3 | import { PhysicalMeasurementsComponent } from './pm.component'; 4 | 5 | describe('PhysicalMeasurementsComponent', () => { 6 | let component: PhysicalMeasurementsComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(waitForAsync(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ PhysicalMeasurementsComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(PhysicalMeasurementsComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /public-ui/src/app/data-browser/views/quick-search/quick-search.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; 2 | 3 | import { QuickSearchComponent } from './quick-search.component'; 4 | 5 | describe('QuickSearchComponent', () => { 6 | let component: QuickSearchComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(waitForAsync(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ QuickSearchComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(QuickSearchComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /public-ui/src/app/data-browser/views/survey-chart/survey-chart.component.css: -------------------------------------------------------------------------------- 1 | .survey-graph-menu { 2 | width: 100%; 3 | display: flex; 4 | justify-content: center; 5 | padding-bottom: 9px; 6 | } 7 | 8 | .survey-chart-choice, .survey-sub-chart-choice { 9 | padding: 9px; 10 | color: #216fb4; 11 | position: relative; 12 | display: flex; 13 | cursor: pointer; 14 | } 15 | 16 | .survey-chart-choice:hover { 17 | color: #262262; 18 | } 19 | 20 | 21 | -------------------------------------------------------------------------------- /public-ui/src/app/data-browser/views/survey-chart/survey-chart.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; 2 | 3 | import { SurveyChartComponent } from './survey-chart.component'; 4 | 5 | describe('SurveyChartComponent', () => { 6 | let component: SurveyChartComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(waitForAsync(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ SurveyChartComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(SurveyChartComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /public-ui/src/app/data-browser/views/sv-genomic-view/components/slider-filter/slider-constants.tsx: -------------------------------------------------------------------------------- 1 | export const view = [1000, 150]; // ViewBox: Width, Height 2 | export const trbl = [20, 50, 20, 50]; // Margins: Top, Right, Bottom, Left 3 | 4 | export const dims = [ 5 | view[0] - trbl[1] - trbl[3], // Adjusted dimensions width 6 | view[1] - trbl[0] - trbl[2], // Adjusted dimensions height 7 | ]; 8 | -------------------------------------------------------------------------------- /public-ui/src/app/shared/components/breadcrumb/breadcrumb.component.css: -------------------------------------------------------------------------------- 1 | :host { 2 | background: #f6f6f8; 3 | } 4 | 5 | .breadcrumbs { 6 | display: flex; 7 | flex-wrap: wrap; 8 | align-items: baseline; 9 | font-size: 18px; 10 | padding: 18px; 11 | padding-left: 0; 12 | } 13 | 14 | .breadcrumb { 15 | display: inline; 16 | white-space: nowrap; 17 | padding-right: 0.25rem; 18 | } 19 | 20 | .breadcrumb a { 21 | text-decoration: none; 22 | color: #0079b8; 23 | font-size: 19px; 24 | /* font-weight: bolder; */ 25 | } 26 | 27 | .breadcrumb a:hover { 28 | text-decoration: underline; 29 | } 30 | 31 | .breadcrumb:after { 32 | font-weight: 400; 33 | color: #262262; 34 | content: " > "; 35 | padding-left: 0.15rem 36 | } 37 | 38 | .breadcrumb-last a { 39 | color: #262262; 40 | font-weight: 500; 41 | font-size: 19px; 42 | text-decoration: none; 43 | text-transform: capitalize; 44 | } -------------------------------------------------------------------------------- /public-ui/src/app/shared/components/breadcrumb/breadcrumb.component.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public-ui/src/app/shared/components/highlight-search/highlight-search.component.css: -------------------------------------------------------------------------------- 1 | .highlight { 2 | font-family: GothamBold,Arial,san-serif; 3 | font-weight: 700; 4 | display: inline-block; 5 | } 6 | -------------------------------------------------------------------------------- /public-ui/src/app/shared/components/highlight-search/highlight-search.component.html: -------------------------------------------------------------------------------- 1 | 2 | {{word}} 3 | 4 | 5 | {{word}} 6 | -------------------------------------------------------------------------------- /public-ui/src/app/shared/components/highlight-search/highlight-search.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; 2 | import { HighlightSearchComponent } from './highlight-search.component'; 3 | 4 | describe('HighlightSearchComponent', () => { 5 | let component: HighlightSearchComponent; 6 | let fixture: ComponentFixture; 7 | 8 | beforeEach(waitForAsync(() => { 9 | TestBed.configureTestingModule({ 10 | declarations: [ HighlightSearchComponent ] 11 | }) 12 | .compileComponents(); 13 | })); 14 | 15 | beforeEach(() => { 16 | fixture = TestBed.createComponent(HighlightSearchComponent); 17 | component = fixture.componentInstance; 18 | fixture.detectChanges(); 19 | }); 20 | 21 | it('should create', () => { 22 | expect(component).toBeTruthy(); 23 | }); 24 | }); 25 | -------------------------------------------------------------------------------- /public-ui/src/app/shared/components/pop-up/pop-up.component.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
x
4 |

{{title}}

5 |
6 |
7 | 8 |
9 |
10 |
11 | -------------------------------------------------------------------------------- /public-ui/src/app/shared/components/pop-up/pop-up.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; 2 | 3 | import { PopUpComponent } from './pop-up.component'; 4 | 5 | describe('PopUpComponent', () => { 6 | let component: PopUpComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(waitForAsync(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ PopUpComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(PopUpComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /public-ui/src/app/shared/components/pop-up/pop-up.component.ts: -------------------------------------------------------------------------------- 1 | import { 2 | Component, 3 | EventEmitter, 4 | HostListener, 5 | Input, 6 | Output, 7 | } from "@angular/core"; 8 | 9 | @Component({ 10 | selector: "app-pop-up", 11 | templateUrl: "./pop-up.component.html", 12 | styleUrls: ["./pop-up.component.css", "../../../styles/template.css"], 13 | }) 14 | export class PopUpComponent { 15 | @Input() statement: string; 16 | @Input() title: string; 17 | @Output() closed: EventEmitter = new EventEmitter(); 18 | 19 | @HostListener("document:keydown.escape", ["$event"]) onKeydownHandler( 20 | event: KeyboardEvent 21 | ) { 22 | this.close(); 23 | } 24 | 25 | close() { 26 | this.closed.emit(true); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /public-ui/src/app/shared/components/rh-footer/rh-footer.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; 2 | 3 | import { RhFooterComponent } from './rh-footer.component'; 4 | 5 | describe('RhFooterComponent', () => { 6 | let component: RhFooterComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(waitForAsync(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ RhFooterComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(RhFooterComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /public-ui/src/app/shared/components/rh-footer/rh-footer.component.ts: -------------------------------------------------------------------------------- 1 | import { environment } from "environments/environment"; 2 | import { Component, OnInit } from "@angular/core"; 3 | import { HeaderFooterService } from "app/shared/services/header-footer.service"; 4 | 5 | @Component({ 6 | selector: "app-rh-footer", 7 | templateUrl: "./rh-footer.component.html", 8 | styleUrls: ["./rh-footer.component.css", "../../../styles/template.css"], 9 | }) 10 | export class RhFooterComponent implements OnInit { 11 | menuItems: any; 12 | allOfUsUrl: any; 13 | constructor(public hFService: HeaderFooterService) {} 14 | 15 | ngOnInit() { 16 | this.menuItems = this.hFService.menu; 17 | this.allOfUsUrl = environment.researchAllOfUsUrl; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /public-ui/src/app/shared/components/rh-footer/rh-footer.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/app/shared/components/rh-footer/rh-footer.tsx -------------------------------------------------------------------------------- /public-ui/src/app/shared/components/rh-header/rh-header.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; 2 | 3 | import { RhHeaderComponent } from './rh-header.component'; 4 | 5 | describe('RhHeaderComponent', () => { 6 | let component: RhHeaderComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(waitForAsync(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ RhHeaderComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(RhHeaderComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /public-ui/src/app/shared/components/spinner/spinner.component.html: -------------------------------------------------------------------------------- 1 | 2 |
3 | 4 |
5 |
6 | 7 |
8 |
9 |
10 |
11 |
12 |
13 |
-------------------------------------------------------------------------------- /public-ui/src/app/shared/components/spinner/spinner.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, Input } from "@angular/core"; 2 | 3 | @Component({ 4 | selector: "app-spinner", 5 | templateUrl: "./spinner.component.html", 6 | styleUrls: ["./spinner.component.css"], 7 | }) 8 | export class SpinnerComponent { 9 | @Input() loading: boolean; 10 | @Input() dots: boolean; 11 | constructor() {} 12 | } 13 | -------------------------------------------------------------------------------- /public-ui/src/app/shared/services/header-footer.service.spec.ts: -------------------------------------------------------------------------------- 1 | import { inject, TestBed } from "@angular/core/testing"; 2 | 3 | import { HeaderFooterService } from "./header-footer.service"; 4 | 5 | describe("HeaderFooterService", () => { 6 | beforeEach(() => { 7 | TestBed.configureTestingModule({ 8 | providers: [HeaderFooterService], 9 | }); 10 | }); 11 | 12 | it("should be created", inject( 13 | [HeaderFooterService], 14 | (service: HeaderFooterService) => { 15 | expect(service).toBeTruthy(); 16 | } 17 | )); 18 | }); 19 | -------------------------------------------------------------------------------- /public-ui/src/app/styles/headers.css: -------------------------------------------------------------------------------- 1 | h1 { 2 | font-size: 35px; 3 | } 4 | h2 { 5 | font-size: 32px; 6 | } 7 | 8 | h3 { 9 | font-size: 28px; 10 | } 11 | 12 | h4 { 13 | font-size: 24px; 14 | } 15 | 16 | h5 { 17 | font-size: 20px; 18 | } 19 | h6 { 20 | font-size: 16px; 21 | } 22 | 23 | h1, h2, h3, h4, h5, h6 { 24 | color: #302C71; 25 | } 26 | 27 | -------------------------------------------------------------------------------- /public-ui/src/app/styles/template.css: -------------------------------------------------------------------------------- 1 | @import url("page.css"); 2 | @import url("buttons.css"); 3 | @import url("inputs.css"); 4 | @import url("headers.css"); 5 | 6 | -------------------------------------------------------------------------------- /public-ui/src/app/utils/clr-alert.tsx: -------------------------------------------------------------------------------- 1 | import * as React from "react"; 2 | 3 | export const ClrAlert = ({ className = "", ...props }) => { 4 | return React.createElement("clr-alert", { class: className, ...props }); 5 | }; 6 | -------------------------------------------------------------------------------- /public-ui/src/app/utils/clr-icon.tsx: -------------------------------------------------------------------------------- 1 | import * as React from "react"; 2 | 3 | export const ClrIcon = ({ className = "", ...props }) => { 4 | return React.createElement("clr-icon", { class: className, ...props }); 5 | }; 6 | -------------------------------------------------------------------------------- /public-ui/src/app/utils/conceptGroup.ts: -------------------------------------------------------------------------------- 1 | import { ConceptWithAnalysis } from "./conceptWithAnalysis"; 2 | 3 | export class ConceptGroup { 4 | group: string; 5 | groupName: string; 6 | concepts: ConceptWithAnalysis[] = []; 7 | 8 | constructor(group: string, groupName: string) { 9 | this.group = group; 10 | this.groupName = groupName; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /public-ui/src/app/utils/conceptWithAnalysis.ts: -------------------------------------------------------------------------------- 1 | import { ConceptAnalysis } from "publicGenerated/model/conceptAnalysis"; 2 | 3 | export class ConceptWithAnalysis { 4 | conceptId: string; 5 | conceptName: string; 6 | analyses: ConceptAnalysis; 7 | chartType: string; 8 | 9 | constructor(conceptId: string, conceptName: string, chartType: string) { 10 | this.conceptId = conceptId; 11 | this.conceptName = conceptName; 12 | this.chartType = chartType; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /public-ui/src/app/utils/db-config.service.spec.ts: -------------------------------------------------------------------------------- 1 | import { inject, TestBed } from "@angular/core/testing"; 2 | 3 | import { DbConfigService } from "./db-config.service"; 4 | 5 | describe("DbConstantsService", () => { 6 | beforeEach(() => { 7 | TestBed.configureTestingModule({ 8 | providers: [DbConfigService], 9 | }); 10 | }); 11 | 12 | it("should be created", inject( 13 | [DbConfigService], 14 | (service: DbConfigService) => { 15 | expect(service).toBeTruthy(); 16 | } 17 | )); 18 | }); 19 | -------------------------------------------------------------------------------- /public-ui/src/app/utils/enum-metadata.tsx: -------------------------------------------------------------------------------- 1 | export const enum GraphType { 2 | BiologicalSex = "Sex", 3 | GenderIdentity = "Gender Identity", 4 | RaceEthnicity = "Race / Ethnicity", 5 | SurveyVersion = "Survey Versions", 6 | Age = "Age", 7 | AgeWhenSurveyWasTaken = "Age When Survey Was Taken", 8 | Sources = "Sources", 9 | Values = "Values", 10 | None = "", 11 | ageGenderStacked = "Age + Sex", 12 | } 13 | 14 | export const enum DomainType { 15 | EHR = "ehr", 16 | SURVEYS = "surveys", 17 | PHYSICAL_MEASUREMENTS = "physical measurements", 18 | } 19 | -------------------------------------------------------------------------------- /public-ui/src/app/utils/google_analytics.ts: -------------------------------------------------------------------------------- 1 | export function initializeAnalytics() { 2 | // GTM handles initialization; nothing required here 3 | console.info("GTM initialized via HTML tag"); 4 | } 5 | 6 | export function triggerEvent( 7 | eventName: string, 8 | eventCategory: string, 9 | eventAction: string, 10 | eventLabel: string, 11 | searchTerm: string, 12 | tooltipAction: string 13 | ) { 14 | if ((window as any).dataLayer) { 15 | (window as any).dataLayer.push({ 16 | event: eventName, 17 | eventCategory: `Data Browser ${eventCategory}`, 18 | eventAction: eventAction, 19 | eventLabel: eventLabel, 20 | searchTerm: searchTerm, 21 | tooltipAction: tooltipAction 22 | }); 23 | } else { 24 | console.error("dataLayer is not available"); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /public-ui/src/app/utils/icons.tsx: -------------------------------------------------------------------------------- 1 | import * as React from "react"; 2 | import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; 3 | 4 | const Icon = ({ shape, size, style, color, ...props }) => { 5 | return ( 6 | 11 | ); 12 | }; 13 | -------------------------------------------------------------------------------- /public-ui/src/app/utils/navigation.tsx: -------------------------------------------------------------------------------- 1 | import { BehaviorSubject } from "rxjs/BehaviorSubject"; 2 | 3 | export const NavStore = { 4 | navigate: undefined, 5 | navigateByUrl: undefined, 6 | }; 7 | 8 | export const urlParamsStore = new BehaviorSubject({}); 9 | export const queryParamsStore = new BehaviorSubject({}); 10 | export const routeConfigDataStore = new BehaviorSubject({}); 11 | 12 | // NOTE: Because these are wired up directly to the router component, 13 | // all navigation done from here will effectively use absolute paths. 14 | export const navigate = (...args) => { 15 | return NavStore.navigate(...args); 16 | }; 17 | 18 | export const navigateByUrl = (...args) => { 19 | return NavStore.navigateByUrl(...args); 20 | }; 21 | 22 | export enum BreadcrumbType {} 23 | -------------------------------------------------------------------------------- /public-ui/src/app/utils/stores.tsx: -------------------------------------------------------------------------------- 1 | import { BreadcrumbType } from "app/utils/navigation"; 2 | import { atom } from "app/utils/subscribable"; 3 | 4 | export interface RouteDataStore { 5 | title?: string; 6 | minimizeChrome?: boolean; 7 | helpContentKey?: string; 8 | breadcrumb?: BreadcrumbType; 9 | pathElementForTitle?: string; 10 | notebookHelpSidebarStyles?: boolean; 11 | contentFullHeightOverride?: boolean; 12 | } 13 | 14 | export const routeDataStore = atom({}); 15 | -------------------------------------------------------------------------------- /public-ui/src/app/views/app/app.component.css: -------------------------------------------------------------------------------- 1 | /* ##extra div */ 2 | div.dark { 3 | background-color: #f0f0f1; 4 | padding: 2rem 0; 5 | display: flex; 6 | justify-content: center; 7 | align-items: center; 8 | } 9 | div.dark img { 10 | float: left; 11 | margin-right: 1rem; 12 | height: 70px; 13 | width: auto; 14 | } 15 | div.dark h3, 16 | div.dark h4 { 17 | margin-top: 0; 18 | font-family: 'FFUnitStdBold', 'Helvetica', sans-serif; 19 | font-style: normal; 20 | font-size: 1rem; 21 | color: #302C71; 22 | } 23 | -------------------------------------------------------------------------------- /public-ui/src/app/views/app/app.component.html: -------------------------------------------------------------------------------- 1 | 2 |
3 | 4 | 5 | 6 |
7 | 8 |
9 | 13 | 14 |
-------------------------------------------------------------------------------- /public-ui/src/app/views/emergency/emergency.component.css: -------------------------------------------------------------------------------- 1 | :host { 2 | height: 75vh; 3 | display: flex; 4 | flex-direction: column; 5 | justify-content: center; 6 | } 7 | h1{ 8 | text-align: center; 9 | padding:1em; 10 | color:#333073; 11 | } -------------------------------------------------------------------------------- /public-ui/src/app/views/emergency/emergency.component.html: -------------------------------------------------------------------------------- 1 |

The data is currently unavailable. We apologize for the inconvenience. 2 | Please check back soon.

-------------------------------------------------------------------------------- /public-ui/src/app/views/emergency/emergency.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; 2 | 3 | import { EmergencyComponent } from './emergency.component'; 4 | 5 | describe('EmergencyComponent', () => { 6 | let component: EmergencyComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(waitForAsync(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ EmergencyComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(EmergencyComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /public-ui/src/app/views/emergency/emergency.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from "@angular/core"; 2 | 3 | @Component({ 4 | selector: "app-emergency", 5 | templateUrl: "./emergency.component.html", 6 | styleUrls: ["./emergency.component.css"], 7 | }) 8 | export class EmergencyComponent implements OnInit { 9 | constructor() {} 10 | 11 | ngOnInit() {} 12 | } 13 | -------------------------------------------------------------------------------- /public-ui/src/app/views/page-template-signed-out/page-template-signed-out.component.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | 4 | 5 |
6 |
7 |
8 | 9 |
10 |
11 |
12 | -------------------------------------------------------------------------------- /public-ui/src/assets/backgrounds/background-pattern.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/backgrounds/background-pattern.png -------------------------------------------------------------------------------- /public-ui/src/assets/backgrounds/background-pattern1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/backgrounds/background-pattern1.png -------------------------------------------------------------------------------- /public-ui/src/assets/backgrounds/background-pattern_invert.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/backgrounds/background-pattern_invert.png -------------------------------------------------------------------------------- /public-ui/src/assets/backgrounds/plus_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/backgrounds/plus_background.png -------------------------------------------------------------------------------- /public-ui/src/assets/backgrounds/plus_bg-invert.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/backgrounds/plus_bg-invert.png -------------------------------------------------------------------------------- /public-ui/src/assets/db-images/allofus_research-hub_color.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/db-images/allofus_research-hub_color.png -------------------------------------------------------------------------------- /public-ui/src/assets/db-images/allofus_research-hub_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/db-images/allofus_research-hub_white.png -------------------------------------------------------------------------------- /public-ui/src/assets/db-images/facebook-logo.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /public-ui/src/assets/db-images/man-standing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/db-images/man-standing.png -------------------------------------------------------------------------------- /public-ui/src/assets/db-images/man-vest.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/db-images/man-vest.png -------------------------------------------------------------------------------- /public-ui/src/assets/db-images/nih_allofus_color.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/db-images/nih_allofus_color.png -------------------------------------------------------------------------------- /public-ui/src/assets/db-images/nih_allofus_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/db-images/nih_allofus_white.png -------------------------------------------------------------------------------- /public-ui/src/assets/db-images/woman-chair.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/db-images/woman-chair.png -------------------------------------------------------------------------------- /public-ui/src/assets/db-images/woman-standing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/db-images/woman-standing.png -------------------------------------------------------------------------------- /public-ui/src/assets/fonts/38B71D_0_0.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/fonts/38B71D_0_0.eot -------------------------------------------------------------------------------- /public-ui/src/assets/fonts/38B71D_0_0.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/fonts/38B71D_0_0.ttf -------------------------------------------------------------------------------- /public-ui/src/assets/fonts/38B71D_0_0.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/fonts/38B71D_0_0.woff -------------------------------------------------------------------------------- /public-ui/src/assets/fonts/38B71D_0_0.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/fonts/38B71D_0_0.woff2 -------------------------------------------------------------------------------- /public-ui/src/assets/fonts/38B71D_1_0.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/fonts/38B71D_1_0.eot -------------------------------------------------------------------------------- /public-ui/src/assets/fonts/38B71D_1_0.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/fonts/38B71D_1_0.ttf -------------------------------------------------------------------------------- /public-ui/src/assets/fonts/38B71D_1_0.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/fonts/38B71D_1_0.woff -------------------------------------------------------------------------------- /public-ui/src/assets/fonts/38B71D_1_0.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/fonts/38B71D_1_0.woff2 -------------------------------------------------------------------------------- /public-ui/src/assets/fonts/38B71D_2_0.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/fonts/38B71D_2_0.eot -------------------------------------------------------------------------------- /public-ui/src/assets/fonts/38B71D_2_0.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/fonts/38B71D_2_0.ttf -------------------------------------------------------------------------------- /public-ui/src/assets/fonts/38B71D_2_0.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/fonts/38B71D_2_0.woff -------------------------------------------------------------------------------- /public-ui/src/assets/fonts/38B71D_2_0.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/fonts/38B71D_2_0.woff2 -------------------------------------------------------------------------------- /public-ui/src/assets/fonts/38B71D_3_0.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/fonts/38B71D_3_0.eot -------------------------------------------------------------------------------- /public-ui/src/assets/fonts/38B71D_3_0.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/fonts/38B71D_3_0.ttf -------------------------------------------------------------------------------- /public-ui/src/assets/fonts/38B71D_3_0.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/fonts/38B71D_3_0.woff -------------------------------------------------------------------------------- /public-ui/src/assets/fonts/38B71D_3_0.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/fonts/38B71D_3_0.woff2 -------------------------------------------------------------------------------- /public-ui/src/assets/fonts/38B71D_4_0.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/fonts/38B71D_4_0.eot -------------------------------------------------------------------------------- /public-ui/src/assets/fonts/38B71D_4_0.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/fonts/38B71D_4_0.ttf -------------------------------------------------------------------------------- /public-ui/src/assets/fonts/38B71D_4_0.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/fonts/38B71D_4_0.woff -------------------------------------------------------------------------------- /public-ui/src/assets/fonts/38B71D_4_0.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/fonts/38B71D_4_0.woff2 -------------------------------------------------------------------------------- /public-ui/src/assets/fonts/38B71D_5_0.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/fonts/38B71D_5_0.eot -------------------------------------------------------------------------------- /public-ui/src/assets/fonts/38B71D_5_0.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/fonts/38B71D_5_0.ttf -------------------------------------------------------------------------------- /public-ui/src/assets/fonts/38B71D_5_0.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/fonts/38B71D_5_0.woff -------------------------------------------------------------------------------- /public-ui/src/assets/fonts/38B71D_5_0.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/fonts/38B71D_5_0.woff2 -------------------------------------------------------------------------------- /public-ui/src/assets/fonts/38B71D_6_0.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/fonts/38B71D_6_0.eot -------------------------------------------------------------------------------- /public-ui/src/assets/fonts/38B71D_6_0.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/fonts/38B71D_6_0.ttf -------------------------------------------------------------------------------- /public-ui/src/assets/fonts/38B71D_6_0.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/fonts/38B71D_6_0.woff -------------------------------------------------------------------------------- /public-ui/src/assets/fonts/38B71D_6_0.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/fonts/38B71D_6_0.woff2 -------------------------------------------------------------------------------- /public-ui/src/assets/fonts/38B71D_7_0.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/fonts/38B71D_7_0.eot -------------------------------------------------------------------------------- /public-ui/src/assets/fonts/38B71D_7_0.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/fonts/38B71D_7_0.ttf -------------------------------------------------------------------------------- /public-ui/src/assets/fonts/38B71D_7_0.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/fonts/38B71D_7_0.woff -------------------------------------------------------------------------------- /public-ui/src/assets/fonts/38B71D_7_0.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/fonts/38B71D_7_0.woff2 -------------------------------------------------------------------------------- /public-ui/src/assets/fonts/Gotham Bold.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/fonts/Gotham Bold.otf -------------------------------------------------------------------------------- /public-ui/src/assets/fonts/Gotham Book.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/fonts/Gotham Book.otf -------------------------------------------------------------------------------- /public-ui/src/assets/fonts/Gotham Light.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/fonts/Gotham Light.otf -------------------------------------------------------------------------------- /public-ui/src/assets/fonts/Gotham Medium.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/fonts/Gotham Medium.otf -------------------------------------------------------------------------------- /public-ui/src/assets/fonts/GothamBold.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/fonts/GothamBold.eot -------------------------------------------------------------------------------- /public-ui/src/assets/fonts/GothamBold.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/fonts/GothamBold.otf -------------------------------------------------------------------------------- /public-ui/src/assets/fonts/GothamBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/fonts/GothamBold.ttf -------------------------------------------------------------------------------- /public-ui/src/assets/fonts/GothamBold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/fonts/GothamBold.woff -------------------------------------------------------------------------------- /public-ui/src/assets/fonts/GothamBold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/fonts/GothamBold.woff2 -------------------------------------------------------------------------------- /public-ui/src/assets/fonts/GothamBook.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/fonts/GothamBook.eot -------------------------------------------------------------------------------- /public-ui/src/assets/fonts/GothamBook.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/fonts/GothamBook.otf -------------------------------------------------------------------------------- /public-ui/src/assets/fonts/GothamBook.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/fonts/GothamBook.ttf -------------------------------------------------------------------------------- /public-ui/src/assets/fonts/GothamBook.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/fonts/GothamBook.woff -------------------------------------------------------------------------------- /public-ui/src/assets/fonts/GothamBook.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/fonts/GothamBook.woff2 -------------------------------------------------------------------------------- /public-ui/src/assets/fonts/GothamLight.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/fonts/GothamLight.eot -------------------------------------------------------------------------------- /public-ui/src/assets/fonts/GothamLight.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/fonts/GothamLight.otf -------------------------------------------------------------------------------- /public-ui/src/assets/fonts/GothamLight.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/fonts/GothamLight.ttf -------------------------------------------------------------------------------- /public-ui/src/assets/fonts/GothamLight.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/fonts/GothamLight.woff -------------------------------------------------------------------------------- /public-ui/src/assets/fonts/GothamLight.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/fonts/GothamLight.woff2 -------------------------------------------------------------------------------- /public-ui/src/assets/fonts/GothamMedium.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/fonts/GothamMedium.eot -------------------------------------------------------------------------------- /public-ui/src/assets/fonts/GothamMedium.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/fonts/GothamMedium.otf -------------------------------------------------------------------------------- /public-ui/src/assets/fonts/GothamMedium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/fonts/GothamMedium.ttf -------------------------------------------------------------------------------- /public-ui/src/assets/fonts/GothamMedium.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/fonts/GothamMedium.woff -------------------------------------------------------------------------------- /public-ui/src/assets/fonts/GothamMedium.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/fonts/GothamMedium.woff2 -------------------------------------------------------------------------------- /public-ui/src/assets/fonts/NonBreakingSpaceOverride.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/fonts/NonBreakingSpaceOverride.woff -------------------------------------------------------------------------------- /public-ui/src/assets/fonts/NonBreakingSpaceOverride.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/fonts/NonBreakingSpaceOverride.woff2 -------------------------------------------------------------------------------- /public-ui/src/assets/icons/arrow-down-nav-mobile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/icons/arrow-down-nav-mobile.png -------------------------------------------------------------------------------- /public-ui/src/assets/icons/google-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/icons/google-icon.png -------------------------------------------------------------------------------- /public-ui/src/assets/icons/icon_data-browser.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/icons/icon_data-browser.png -------------------------------------------------------------------------------- /public-ui/src/assets/icons/icon_data-snapshots.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/icons/icon_data-snapshots.png -------------------------------------------------------------------------------- /public-ui/src/assets/icons/icon_data-sources.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/icons/icon_data-sources.png -------------------------------------------------------------------------------- /public-ui/src/assets/icons/icon_enevelope-blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/icons/icon_enevelope-blue.png -------------------------------------------------------------------------------- /public-ui/src/assets/icons/icon_enevelope-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/icons/icon_enevelope-white.png -------------------------------------------------------------------------------- /public-ui/src/assets/icons/icon_help.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/icons/icon_help.png -------------------------------------------------------------------------------- /public-ui/src/assets/icons/icon_how-the-hub.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/icons/icon_how-the-hub.png -------------------------------------------------------------------------------- /public-ui/src/assets/icons/icon_methods.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/icons/icon_methods.png -------------------------------------------------------------------------------- /public-ui/src/assets/icons/icon_privacy-security.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/icons/icon_privacy-security.png -------------------------------------------------------------------------------- /public-ui/src/assets/icons/icon_program-overview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/icons/icon_program-overview.png -------------------------------------------------------------------------------- /public-ui/src/assets/icons/icon_researchers-as-partners.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/icons/icon_researchers-as-partners.png -------------------------------------------------------------------------------- /public-ui/src/assets/icons/icon_search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/icons/icon_search.png -------------------------------------------------------------------------------- /public-ui/src/assets/icons/icon_survey-explorer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/icons/icon_survey-explorer.png -------------------------------------------------------------------------------- /public-ui/src/assets/icons/icon_workbench.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/icons/icon_workbench.png -------------------------------------------------------------------------------- /public-ui/src/assets/icons/icons_faqs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/icons/icons_faqs.png -------------------------------------------------------------------------------- /public-ui/src/assets/icons/icons_introductoryvideo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/icons/icons_introductoryvideo.png -------------------------------------------------------------------------------- /public-ui/src/assets/icons/icons_userguide.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/icons/icons_userguide.png -------------------------------------------------------------------------------- /public-ui/src/assets/icons/search_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/icons/search_icon.png -------------------------------------------------------------------------------- /public-ui/src/assets/icons/source_btn.svg: -------------------------------------------------------------------------------- 1 | source_btn_3 -------------------------------------------------------------------------------- /public-ui/src/assets/icons/source_btn_active.svg: -------------------------------------------------------------------------------- 1 | source_btn_active_1 -------------------------------------------------------------------------------- /public-ui/src/assets/images/applyForAccess_btn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/images/applyForAccess_btn.png -------------------------------------------------------------------------------- /public-ui/src/assets/images/arrow-down-nav-mobile.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /public-ui/src/assets/images/arrow-right-hover.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /public-ui/src/assets/images/arrow-right.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /public-ui/src/assets/images/exclose.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /public-ui/src/assets/images/icon-menu-close.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /public-ui/src/assets/images/icon-menu-hover.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /public-ui/src/assets/images/icon-menu.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /public-ui/src/assets/images/login-group.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/images/login-group.png -------------------------------------------------------------------------------- /public-ui/src/assets/images/login-standing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/images/login-standing.png -------------------------------------------------------------------------------- /public-ui/src/assets/images/search-hover.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /public-ui/src/assets/images/search.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /public-ui/src/assets/js/mailchimpsubcribe.js: -------------------------------------------------------------------------------- 1 | (function () { 2 | /* mailchimp button click */ 3 | var mcbutton = document.querySelectorAll('.mailchimpbutton'); 4 | var i; 5 | 6 | for (i = 0; i < mcbutton.length; i++) { 7 | mcbutton[i].addEventListener("click", function () { 8 | document.querySelector(".popup").classList.toggle("mcbutton"); 9 | }); 10 | } 11 | 12 | /* mailchimp button click close */ 13 | var mcbuttonx = document.querySelectorAll('.popup .mcbuttonexit'); 14 | var i; 15 | 16 | for (i = 0; i < mcbuttonx.length; i++) { 17 | mcbuttonx[i].addEventListener("click", function () { 18 | this.parentElement.classList.toggle("mcbutton"); 19 | 20 | }); 21 | } 22 | 23 | })(); 24 | -------------------------------------------------------------------------------- /public-ui/src/assets/pdf/Databrowser_Tutorial_4_26_2019.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/pdf/Databrowser_Tutorial_4_26_2019.pdf -------------------------------------------------------------------------------- /public-ui/src/assets/pdf/Databrowser_User_Guide_in_RH 5_18_20.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/pdf/Databrowser_User_Guide_in_RH 5_18_20.pdf -------------------------------------------------------------------------------- /public-ui/src/assets/surveys/1585710.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/surveys/1585710.pdf -------------------------------------------------------------------------------- /public-ui/src/assets/surveys/1585855.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/surveys/1585855.pdf -------------------------------------------------------------------------------- /public-ui/src/assets/surveys/1586134.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/surveys/1586134.pdf -------------------------------------------------------------------------------- /public-ui/src/assets/surveys/43528698.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/surveys/43528698.pdf -------------------------------------------------------------------------------- /public-ui/src/assets/surveys/43528895.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/surveys/43528895.pdf -------------------------------------------------------------------------------- /public-ui/src/assets/surveys/43529712.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/surveys/43529712.pdf -------------------------------------------------------------------------------- /public-ui/src/assets/surveys/AoU PPI_Basics_version_2018.06.04.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/surveys/AoU PPI_Basics_version_2018.06.04.docx -------------------------------------------------------------------------------- /public-ui/src/assets/surveys/AoU PPI_Family Medical History_2018.05.31.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/surveys/AoU PPI_Family Medical History_2018.05.31.docx -------------------------------------------------------------------------------- /public-ui/src/assets/surveys/AoU PPI_Healthcare Access_English_2018.5.31.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/surveys/AoU PPI_Healthcare Access_English_2018.5.31.docx -------------------------------------------------------------------------------- /public-ui/src/assets/surveys/AoU PPI_Lifestyle_2017.05.30.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/surveys/AoU PPI_Lifestyle_2017.05.30.docx -------------------------------------------------------------------------------- /public-ui/src/assets/surveys/AoU PPI_Overall Health_2018.05.31.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/surveys/AoU PPI_Overall Health_2018.05.31.docx -------------------------------------------------------------------------------- /public-ui/src/assets/surveys/AoU PPI_Personal Medical History_2018TBD.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/surveys/AoU PPI_Personal Medical History_2018TBD.docx -------------------------------------------------------------------------------- /public-ui/src/assets/surveys/Behavioral_Health_Personality_Spanish.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/surveys/Behavioral_Health_Personality_Spanish.pdf -------------------------------------------------------------------------------- /public-ui/src/assets/surveys/COPE_survey_Dec_2020_English.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/surveys/COPE_survey_Dec_2020_English.pdf -------------------------------------------------------------------------------- /public-ui/src/assets/surveys/COPE_survey_Dec_2020_Spanish.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/surveys/COPE_survey_Dec_2020_Spanish.pdf -------------------------------------------------------------------------------- /public-ui/src/assets/surveys/COPE_survey_Fall_2021_English.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/surveys/COPE_survey_Fall_2021_English.pdf -------------------------------------------------------------------------------- /public-ui/src/assets/surveys/COPE_survey_Fall_2021_Spanish.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/surveys/COPE_survey_Fall_2021_Spanish.pdf -------------------------------------------------------------------------------- /public-ui/src/assets/surveys/COPE_survey_Feb_2021_English.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/surveys/COPE_survey_Feb_2021_English.pdf -------------------------------------------------------------------------------- /public-ui/src/assets/surveys/COPE_survey_Feb_2021_Spanish.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/surveys/COPE_survey_Feb_2021_Spanish.pdf -------------------------------------------------------------------------------- /public-ui/src/assets/surveys/COPE_survey_July_2020_English.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/surveys/COPE_survey_July_2020_English.pdf -------------------------------------------------------------------------------- /public-ui/src/assets/surveys/COPE_survey_July_2020_Spanish.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/surveys/COPE_survey_July_2020_Spanish.pdf -------------------------------------------------------------------------------- /public-ui/src/assets/surveys/COPE_survey_June_2020_English.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/surveys/COPE_survey_June_2020_English.pdf -------------------------------------------------------------------------------- /public-ui/src/assets/surveys/COPE_survey_June_2020_Spanish.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/surveys/COPE_survey_June_2020_Spanish.pdf -------------------------------------------------------------------------------- /public-ui/src/assets/surveys/COPE_survey_May_2020_English.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/surveys/COPE_survey_May_2020_English.pdf -------------------------------------------------------------------------------- /public-ui/src/assets/surveys/COPE_survey_May_2020_Spanish.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/surveys/COPE_survey_May_2020_Spanish.pdf -------------------------------------------------------------------------------- /public-ui/src/assets/surveys/COPE_survey_New Year_2022_Spanish.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/surveys/COPE_survey_New Year_2022_Spanish.pdf -------------------------------------------------------------------------------- /public-ui/src/assets/surveys/COPE_survey_New_Year_2022_English.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/surveys/COPE_survey_New_Year_2022_English.pdf -------------------------------------------------------------------------------- /public-ui/src/assets/surveys/COPE_survey_Nov_2020_English.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/surveys/COPE_survey_Nov_2020_English.pdf -------------------------------------------------------------------------------- /public-ui/src/assets/surveys/COPE_survey_Nov_2020_Spanish.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/surveys/COPE_survey_Nov_2020_Spanish.pdf -------------------------------------------------------------------------------- /public-ui/src/assets/surveys/COPE_survey_Summer_2021_English.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/surveys/COPE_survey_Summer_2021_English.pdf -------------------------------------------------------------------------------- /public-ui/src/assets/surveys/COPE_survey_Summer_2021_Spanish.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/surveys/COPE_survey_Summer_2021_Spanish.pdf -------------------------------------------------------------------------------- /public-ui/src/assets/surveys/COPE_survey_Winter_2021_English.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/surveys/COPE_survey_Winter_2021_English.pdf -------------------------------------------------------------------------------- /public-ui/src/assets/surveys/COPE_survey_Winter_2021_Spanish.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/surveys/COPE_survey_Winter_2021_Spanish.pdf -------------------------------------------------------------------------------- /public-ui/src/assets/surveys/Emotional_Health_Well_Being_Spanish.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/surveys/Emotional_Health_Well_Being_Spanish.pdf -------------------------------------------------------------------------------- /public-ui/src/assets/surveys/Family_Health_History.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/surveys/Family_Health_History.pdf -------------------------------------------------------------------------------- /public-ui/src/assets/surveys/Family_Health_History_Survey_English.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/surveys/Family_Health_History_Survey_English.pdf -------------------------------------------------------------------------------- /public-ui/src/assets/surveys/Family_Health_History_Survey_Spanish.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/surveys/Family_Health_History_Survey_Spanish.pdf -------------------------------------------------------------------------------- /public-ui/src/assets/surveys/Family_History.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/surveys/Family_History.pdf -------------------------------------------------------------------------------- /public-ui/src/assets/surveys/Health_Care_Access_Utilization.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/surveys/Health_Care_Access_Utilization.pdf -------------------------------------------------------------------------------- /public-ui/src/assets/surveys/Health_Care_Access_Utilization_Spanish.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/surveys/Health_Care_Access_Utilization_Spanish.pdf -------------------------------------------------------------------------------- /public-ui/src/assets/surveys/Lifestyle.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/surveys/Lifestyle.pdf -------------------------------------------------------------------------------- /public-ui/src/assets/surveys/Lifestyle_Spanish.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/surveys/Lifestyle_Spanish.pdf -------------------------------------------------------------------------------- /public-ui/src/assets/surveys/Overall_Health.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/surveys/Overall_Health.pdf -------------------------------------------------------------------------------- /public-ui/src/assets/surveys/Overall_Health_Spanish.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/surveys/Overall_Health_Spanish.pdf -------------------------------------------------------------------------------- /public-ui/src/assets/surveys/Personal_Medical_History.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/surveys/Personal_Medical_History.pdf -------------------------------------------------------------------------------- /public-ui/src/assets/surveys/Personal_Medical_History_Survey_English.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/surveys/Personal_Medical_History_Survey_English.pdf -------------------------------------------------------------------------------- /public-ui/src/assets/surveys/Personal_Medical_History_Survey_Spanish.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/surveys/Personal_Medical_History_Survey_Spanish.pdf -------------------------------------------------------------------------------- /public-ui/src/assets/surveys/Personal_and_Family_Health_History.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/surveys/Personal_and_Family_Health_History.pdf -------------------------------------------------------------------------------- /public-ui/src/assets/surveys/SDOH Survey Spanish.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/surveys/SDOH Survey Spanish.pdf -------------------------------------------------------------------------------- /public-ui/src/assets/surveys/Social_Determinants_of_Health.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/surveys/Social_Determinants_of_Health.pdf -------------------------------------------------------------------------------- /public-ui/src/assets/surveys/Social_Determinants_of_Health_Spanish.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/surveys/Social_Determinants_of_Health_Spanish.pdf -------------------------------------------------------------------------------- /public-ui/src/assets/surveys/Survey_PaFHH_Eng_Src.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/surveys/Survey_PaFHH_Eng_Src.pdf -------------------------------------------------------------------------------- /public-ui/src/assets/surveys/Survey_PaFHH_spn_Src.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/surveys/Survey_PaFHH_spn_Src.pdf -------------------------------------------------------------------------------- /public-ui/src/assets/surveys/The_Basics.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/surveys/The_Basics.pdf -------------------------------------------------------------------------------- /public-ui/src/assets/surveys/The_Basics_Spanish.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/surveys/The_Basics_Spanish.pdf -------------------------------------------------------------------------------- /public-ui/src/assets/videos/participant_intro.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/videos/participant_intro.mp4 -------------------------------------------------------------------------------- /public-ui/src/assets/videos/participant_intro.ogv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/videos/participant_intro.ogv -------------------------------------------------------------------------------- /public-ui/src/assets/videos/participant_intro.webm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/videos/participant_intro.webm -------------------------------------------------------------------------------- /public-ui/src/assets/videos/participant_video_poster.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/videos/participant_video_poster.png -------------------------------------------------------------------------------- /public-ui/src/assets/videos/physical_measurements_en.vtt: -------------------------------------------------------------------------------- 1 | WEBVTT 2 | 3 | 00:00.300 --> 00:04.700 4 | I am a participant who completed an in-person visit to provide my physical measurements. 5 | 00:05.000 --> 00:13.700 6 | I was curious to see how this data is being displayed, so I explored here to see what I could find. 7 | 00:14.000 --> 00:24.000 8 | I can see that my data was combined with thousands of other people’s to show measurements like our average blood pressure, height, and weight. -------------------------------------------------------------------------------- /public-ui/src/assets/videos/physical_measurements_es.vtt: -------------------------------------------------------------------------------- 1 | WEBVTT 2 | 3 | 00:00.300 --> 00:04.700 4 | Soy un participante que completó una visita en persona para proveer las medidas físicas. 5 | 00:05.000 --> 00:13.700 6 | Estaba curiosa por ver cómo estos datos estaban mostrados, así que exploré aquí para ver qué podía encontrar 7 | 00:14.000 --> 00:24.000 8 | Puedo ver que mis datos estaban combinados con miles de datos de otras personas midiendo el promedio de medidas como la presión arterial, altura y peso. -------------------------------------------------------------------------------- /public-ui/src/assets/videos/physical_measurements_intro.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/videos/physical_measurements_intro.mp4 -------------------------------------------------------------------------------- /public-ui/src/assets/videos/physical_measurements_intro.ogv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/videos/physical_measurements_intro.ogv -------------------------------------------------------------------------------- /public-ui/src/assets/videos/physical_measurements_intro.webm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/videos/physical_measurements_intro.webm -------------------------------------------------------------------------------- /public-ui/src/assets/videos/physical_measurements_video_poster.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/videos/physical_measurements_video_poster.png -------------------------------------------------------------------------------- /public-ui/src/assets/videos/researcher_intro.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/videos/researcher_intro.mp4 -------------------------------------------------------------------------------- /public-ui/src/assets/videos/researcher_intro.oggtheora.ogv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/videos/researcher_intro.oggtheora.ogv -------------------------------------------------------------------------------- /public-ui/src/assets/videos/researcher_video_poster.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/videos/researcher_video_poster.png -------------------------------------------------------------------------------- /public-ui/src/assets/videos/surveys_intro.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/videos/surveys_intro.mp4 -------------------------------------------------------------------------------- /public-ui/src/assets/videos/surveys_intro.ogv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/videos/surveys_intro.ogv -------------------------------------------------------------------------------- /public-ui/src/assets/videos/surveys_intro.webm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/videos/surveys_intro.webm -------------------------------------------------------------------------------- /public-ui/src/assets/videos/surveys_video_poster.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/videos/surveys_video_poster.png -------------------------------------------------------------------------------- /public-ui/src/assets/videos/video_poster.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/assets/videos/video_poster.png -------------------------------------------------------------------------------- /public-ui/src/dev/server/with-uid.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | USERNAME=$(whoami 2>/dev/null) 4 | EXIT_CODE=$? 5 | 6 | if [[ $EXIT_CODE -eq 0 ]]; then 7 | >&2 echo 'This container has poor behavior if run as an existing user.' \ 8 | 'The given UID matches the user '"'$USERNAME'"'. Exiting.'; 9 | exit 1; 10 | fi 11 | 12 | exec $@ 13 | -------------------------------------------------------------------------------- /public-ui/src/environments/environment.local.ts: -------------------------------------------------------------------------------- 1 | import { testEnvironmentBase } from "environments/test-env-base"; 2 | 3 | export const environment = { 4 | ...testEnvironmentBase, 5 | displayTag: "Local->Local", 6 | publicApiUrl: "http://localhost:8083", 7 | debug: true, 8 | gaId: "UA-116298798-4", 9 | gtmId: "GTM-NQ9XDTW", 10 | gtmAuth: "kMy-ZUX8XsBfuanMZzP_5A", 11 | gtmPreview: "env-25", 12 | }; 13 | -------------------------------------------------------------------------------- /public-ui/src/environments/environment.prod.ts: -------------------------------------------------------------------------------- 1 | export const environment = { 2 | displayTag: "Prod", 3 | publicApiUrl: "https://public.api.researchallofus.org", 4 | researchAllOfUsUrl: "https://researchallofus.org", 5 | debug: false, 6 | gaId: "UA-116298798-6", 7 | gtmId: "GTM-NQ9XDTW", 8 | gtmAuth: "ixtwsbMAbR3hx5st_ek2jg", 9 | gtmPreview: "env-65", 10 | ehrReact: true, 11 | testReact: false, 12 | geno: true, 13 | genoFilters: true, 14 | fitbitCDRUpdate: true, 15 | infiniteSrcoll: true, 16 | svVCFBrowser: false, 17 | heatmap: false, 18 | combinedAgeGenderChart: false, 19 | }; 20 | -------------------------------------------------------------------------------- /public-ui/src/environments/environment.stable.ts: -------------------------------------------------------------------------------- 1 | export const environment = { 2 | displayTag: "Stable", 3 | publicApiUrl: "https://public.api.stable.fake-research-aou.org", 4 | researchAllOfUsUrl: "https://researchallofus.org", 5 | debug: false, 6 | gaId: "UA-116298798-5", 7 | gtmId: "GTM-NQ9XDTW", 8 | gtmAuth: "87R8_4UCXpVCroAA7bGkAg", 9 | gtmPreview: "env-27", 10 | reactSurveyTable: false, 11 | ehrReact: true, 12 | testReact: false, 13 | geno: true, 14 | genoFilters: true, 15 | fitbitCDRUpdate: true, 16 | infiniteSrcoll: true, 17 | svVCFBrowser: false, 18 | heatmap: true, 19 | combinedAgeGenderChart: true, 20 | }; 21 | -------------------------------------------------------------------------------- /public-ui/src/environments/environment.staging.ts: -------------------------------------------------------------------------------- 1 | export const environment = { 2 | displayTag: "Staging", 3 | publicApiUrl: "https://public.api.staging.fake-research-aou.org", 4 | researchAllOfUsUrl: "https://researchallofus.org", 5 | debug: false, 6 | gaId: "UA-116298798-4", 7 | gtmId: "GTM-NQ9XDTW", 8 | gtmAuth: "v5hD4oOWvct1sYdnaNp7yQ", 9 | gtmPreview: "env-28", 10 | reactSurveyTable: false, 11 | ehrReact: true, 12 | testReact: false, 13 | geno: true, 14 | genoFilters: true, 15 | fitbitCDRUpdate: true, 16 | infiniteSrcoll: true, 17 | svVCFBrowser: false, 18 | heatmap: true, 19 | combinedAgeGenderChart: true, 20 | }; 21 | -------------------------------------------------------------------------------- /public-ui/src/environments/environment.test.ts: -------------------------------------------------------------------------------- 1 | import { testEnvironmentBase } from "environments/test-env-base"; 2 | 3 | export const environment = { 4 | ...testEnvironmentBase, 5 | displayTag: "Test", 6 | debug: false, 7 | gtmId: "GTM-NQ9XDTW", 8 | gtmAuth: "kMy-ZUX8XsBfuanMZzP_5A", 9 | gtmPreview: "env-25", 10 | }; 11 | -------------------------------------------------------------------------------- /public-ui/src/environments/environment.ts: -------------------------------------------------------------------------------- 1 | import { testEnvironmentBase } from "environments/test-env-base"; 2 | 3 | export const environment = { 4 | ...testEnvironmentBase, 5 | displayTag: "Local->Test", 6 | debug: true, 7 | gtmId: "GTM-NQ9XDTW", 8 | gtmAuth: "kMy-ZUX8XsBfuanMZzP_5A", 9 | gtmPreview: "env-25", 10 | }; 11 | -------------------------------------------------------------------------------- /public-ui/src/environments/test-env-base.ts: -------------------------------------------------------------------------------- 1 | // The values are shared across the deployed test env as well as the local dev 2 | // environments. 3 | export const testEnvironmentBase = { 4 | publicApiUrl: "https://api-dot-aou-db-test.appspot.com", 5 | researchAllOfUsUrl: "https://researchallofus.org", 6 | gaId: "UA-116298798-4", 7 | ehrReact: true, 8 | testReact: true, 9 | geno: true, 10 | genoFilters: true, 11 | fitbitCDRUpdate: true, 12 | infiniteSrcoll: true, 13 | svVCFBrowser: true, 14 | heatmap: true, 15 | combinedAgeGenderChart: true, 16 | }; 17 | -------------------------------------------------------------------------------- /public-ui/src/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/all-of-us/data-browser/6d03f1c18bbc1e85294ed2d2a614aaddbb5943be/public-ui/src/favicon.ico -------------------------------------------------------------------------------- /public-ui/src/main.ts: -------------------------------------------------------------------------------- 1 | // The main file is boilerplate; AppModule configures our app. 2 | 3 | import { environment } from "environments/environment"; 4 | import { enableProdMode } from "@angular/core"; 5 | import { platformBrowserDynamic } from "@angular/platform-browser-dynamic"; 6 | import { AppModule } from "app/app.module"; 7 | 8 | if (!environment.debug) { 9 | enableProdMode(); 10 | } 11 | 12 | platformBrowserDynamic().bootstrapModule(AppModule); 13 | -------------------------------------------------------------------------------- /public-ui/src/testing/stubs/http-stub.ts: -------------------------------------------------------------------------------- 1 | import { HttpClient } from "@angular/common/http/"; 2 | import { Observable } from "rxjs/Observable"; 3 | 4 | export class HttpStub { 5 | public get(url: string, options?: HttpClient): Observable { 6 | return new Observable((observer) => { 7 | setTimeout(() => { 8 | observer.next(new Response()); 9 | observer.complete(); 10 | }, 0); 11 | }); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /public-ui/src/testing/stubs/server-config-service-stub.ts: -------------------------------------------------------------------------------- 1 | import { ConfigResponse } from "publicGenerated"; 2 | import { BehaviorSubject } from "rxjs/BehaviorSubject"; 3 | import { Observable } from "rxjs/Observable"; 4 | 5 | export class ServerConfigServiceStub { 6 | constructor(public config: ConfigResponse) {} 7 | 8 | public getConfig(): Observable { 9 | return new BehaviorSubject(this.config).asObservable(); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /public-ui/src/tsconfig.app.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../out-tsc/app", 5 | "baseUrl": "./", 6 | "module": "es2015", 7 | "types": ["node"] 8 | }, 9 | "exclude": [ 10 | "test.ts", 11 | "**/*.spec.ts" 12 | ] 13 | } 14 | -------------------------------------------------------------------------------- /public-ui/src/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../out-tsc/spec", 5 | "baseUrl": "./", 6 | "module": "commonjs", 7 | "target": "es5", 8 | "types": [ 9 | "jasmine", 10 | "node" 11 | ] 12 | }, 13 | "files": [ 14 | "test.ts", 15 | "polyfills.ts" 16 | ], 17 | "include": [ 18 | "**/*.spec.ts", 19 | "**/*.d.ts" 20 | ] 21 | } 22 | -------------------------------------------------------------------------------- /public-ui/src/types/index.d.ts: -------------------------------------------------------------------------------- 1 | export {}; 2 | 3 | declare global { 4 | interface Window { 5 | gtag: (...args: any[]) => void; 6 | setPublicApiUrl: (...args: any[]) => void; 7 | dataLayer: any; 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /public-ui/src/typings.d.ts: -------------------------------------------------------------------------------- 1 | /* SystemJS module definition */ 2 | declare let module: NodeModule; 3 | interface NodeModule { 4 | id: string; 5 | } 6 | 7 | /* 8 | Declare TypeScript types for the plain-javascript third-party scripts. 9 | This gets included by the compiler; its symbols do not need to be imported by 10 | other source files but are globally available. 11 | */ 12 | 13 | declare module "dom-to-image"; 14 | -------------------------------------------------------------------------------- /public-ui/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compileOnSave": false, 3 | "compilerOptions": { 4 | "baseUrl": "./", 5 | "outDir": "./dist/out-tsc", 6 | "sourceMap": true, 7 | "declaration": false, 8 | "allowSyntheticDefaultImports": true, 9 | "module": "es2020", 10 | "moduleResolution": "node", 11 | "experimentalDecorators": true, 12 | "target": "es2015", 13 | "jsx": "react", 14 | "typeRoots": [ 15 | "node_modules/@types" 16 | ], 17 | "lib": [ 18 | "es2018", 19 | "dom" 20 | ], 21 | "skipLibCheck": true, 22 | "resolveJsonModule": true 23 | } 24 | } --------------------------------------------------------------------------------