{"version":3,"sources":["models/state/GeneralUiState.ts","models/state/AdminState.ts","services/authApi.ts","services/HttpFactory.ts","utils/panelUtils.ts","services/sessionApi.ts","services/admin/configApi.ts","models/patientList/Dataset.ts","actions/admin/configuration.ts","services/admin/specializationGroupApi.ts","services/admin/sqlSetApi.ts","services/admin/conceptEventApi.ts","utils/formatSql.ts","actions/admin/specializationGroup.ts","services/admin/specializationApi.ts","actions/admin/specialization.ts","utils/admin/concept.ts","actions/admin/sqlSet.ts","actions/admin/conceptEvent.ts","services/admin/datasetApi.ts","models/state/CohortState.ts","services/datasetSearchApi.ts","providers/datasetSearch/datasetSearchWebWorker.ts","providers/datasetSearch/datasetSearchWebWorkerContext.ts","actions/datasets.ts","actions/admin/dataset.ts","services/admin/datasetQueryCategoryApi.ts","actions/admin/datasetQueryCategory.ts","services/admin/networkAndIdentityApi.ts","utils/admin/networkAndidentity.ts","providers/cohortAggregator/cohortAggregatorWebWorkerContext.ts","models/panel/NumericFilter.ts","services/cohortAggregatorApi.ts","providers/cohortAggregator/cohortAggregatorWebWorker.ts","actions/cohort/visualize.ts","actions/networkResponders.ts","actions/admin/networkAndIdentity.ts","actions/admin/admin.ts","models/panel/PanelItem.ts","models/panel/SubPanel.ts","models/panel/Panel.ts","models/panel/Date.ts","services/cohortApi.ts","models/patientList/Column.ts","providers/patientList/patientListWebWorker.ts","providers/patientList/patientListWebWorkerContext.ts","models/Keyboard.ts","utils/camelCaseToUpperSpaced.ts","providers/redcapExport/redcapExportWebWorker.ts","models/patientList/DatasetDefinitionTemplate.ts","services/patientListApi.ts","providers/redcapExport/redcapExportWebWorkerContext.ts","actions/cohort/patientList.ts","actions/cohort/count.ts","actions/generalUi.ts","actions/panelFilter.ts","services/conceptApi.ts","services/admin/conceptApi.ts","actions/admin/concept.ts","actions/concepts.ts","services/conceptHintSuggestionApi.ts","providers/conceptSearchEngine/conceptSearchEngineWebWorker.ts","providers/conceptSearchEngine/conceptSearchEngineWebWorkerContext.ts","actions/conceptSearch.ts","components/FindPatients/ConceptSearchBox/HintContainer.tsx","components/Other/LoaderIcon/LoaderIcon.tsx","components/FindPatients/ConceptSearchBox/ConceptSearchBox.tsx","utils/getDragPreview.ts","components/FindPatients/Panels/CustomDateRangePicker.tsx","utils/formatNumber.ts","components/Other/PopupBox/PopupBox.tsx","components/Other/CheckboxSlider/CheckboxSlider.tsx","components/FindPatients/ConceptTree/LearnMoreButton.tsx","components/FindPatients/ConceptTree/ConceptTreeNodeText.tsx","components/FindPatients/ConceptTree/ConceptTreeNode.tsx","components/FindPatients/ConceptTree/ConceptTree.tsx","containers/FindPatients/ConceptColumnContainer.tsx","components/FindPatients/PanelFilter/PanelFilterGroup.tsx","actions/panels.ts","components/FindPatients/Panels/CountDropdown.tsx","components/FindPatients/Panels/DateDropdownOptions.ts","components/FindPatients/Panels/DateDropdown.tsx","components/FindPatients/Panels/InclusionDropdown.tsx","components/FindPatients/Panels/PanelHeader.tsx","components/FindPatients/Panels/PanelItemNumericFilter.tsx","components/FindPatients/Panels/ConceptSpecializationGroup.tsx","components/FindPatients/Panels/PanelItem.tsx","components/FindPatients/Panels/PanelItemOr.tsx","components/FindPatients/Panels/SubPanelDashBorder.tsx","components/FindPatients/Panels/SameSequenceDropdownIncrement.tsx","components/FindPatients/Panels/SameSequenceDropdown.tsx","components/FindPatients/Panels/SubPanelHeader.tsx","components/FindPatients/Panels/SubPanel.tsx","components/FindPatients/Panels/Panel.tsx","components/FindPatients/Panels/PanelGroup.tsx","components/FindPatients/Panels/PanelGroupColumn.tsx","components/FindPatients/FindPatients.tsx","components/Map/AntPathTypes.ts","components/Map/EndpointMarker.tsx","components/Map/EndpointPopup.tsx","utils/calculateGeodesicLine.js","utils/computeDimensions.tsx","containers/Map/LeafMap.tsx","actions/map.ts","components/PatientList/AddDatasetSelectors/DatasetContainer.tsx","models/redcapExport/Project.ts","services/redcapApi.ts","components/PatientList/AddDatasetSelectors/AddDatasetSelectors.tsx","components/PatientList/ResponderStatus/ResponderStatus.tsx","components/PatientList/ResponderStatus/ResponderStatusSummary.tsx","components/PatientList/AddDatasetButton/AddDatasetButton.tsx","components/PatientList/DatasetColumnSelector.tsx","models/patientList/Configuration.ts","actions/dataExport.ts","components/PatientList/ExportDataModal/ExportProgress/ExportProgress.tsx","components/PatientList/ExportDataModal/REDCap/REDCapExport.tsx","components/PatientList/ExportDataModal/ExportDataModal.tsx","components/PatientList/Paginate.tsx","components/PatientList/Header.tsx","models/admin/Concept.ts","components/PatientList/Tuple.tsx","components/PatientList/EncounterDetailGroup.tsx","components/PatientList/Row.tsx","components/PatientList/PatientListTable.tsx","components/Other/CohortTooLargeBox/CohortTooLargeBox.tsx","components/PatientList/RowCount.tsx","containers/PatientList/PatientList.tsx","components/Other/SectionHeader/SectionHeader.tsx","config/visualization.ts","components/Visualize/AgeByGender.tsx","components/Visualize/Binary.tsx","components/Visualize/AggregateDemographics.tsx","components/Visualize/ResponderDemographics.tsx","containers/Visualize/Visualize.tsx","components/Admin/Section/Section.tsx","components/Admin/Section/Input.tsx","components/Admin/Section/TextArea.tsx","components/Admin/ConceptEditor/Sections/Display.tsx","components/Admin/ConceptEditor/Sections/Identifiers.tsx","components/Admin/Section/Checkbox.tsx","components/Admin/ConceptEditor/Sections/Configuration.tsx","components/Admin/ConceptEditor/Sections/SqlSetDropdown.tsx","components/Admin/ConceptEditor/Sections/SqlEditor.tsx","components/Admin/ConceptEditor/Sections/Constraint.tsx","components/Other/GlowingButton/GlowingButton.tsx","components/Admin/ConceptEditor/Sections/Contraints.tsx","components/Admin/ConceptEditor/Sections/SpecializationDropdown.tsx","components/Admin/ConceptEditor/Sections/SpecializationDropdowns.tsx","components/Admin/ConceptEditor/MainEditor/MainEditor.tsx","components/Other/SqlBox/SqlBox.tsx","components/Admin/ConceptEditor/Previews/SqlPreview/SqlPreview.tsx","components/Admin/ConceptEditor/Previews/PanelPreview/PanelPreview.tsx","components/Admin/ConceptEditor/ConceptEditor.tsx","components/Admin/DatasetEditor/Constraints/Constraints.tsx","components/Admin/DatasetEditor/CategoryDropdown/CategoryDropdown.tsx","components/Admin/DatasetEditor/ShapeDropdown/ShapeDropdown.tsx","components/Admin/DatasetEditor/Sections/Display.tsx","components/Admin/DatasetEditor/SqlEditor/SqlEditor.tsx","components/Admin/DatasetEditor/Tagger/Tagger.tsx","components/Admin/DatasetEditor/Sections/Identifiers.tsx","components/Admin/DatasetEditor/DatasetEditor.tsx","components/Admin/NetworkAndIdentityEditor/Sections/Identity.tsx","components/Header/NetworkHealthResponder/NetworkHealthResponder.tsx","components/Admin/NetworkAndIdentityEditor/Sections/MapPreview.tsx","components/Admin/NetworkAndIdentityEditor/Sections/IdentityPreview.tsx","components/Admin/NetworkAndIdentityEditor/Endpoint/Endpoint.tsx","components/Admin/NetworkAndIdentityEditor/CertModal/CertModal.tsx","components/Admin/NetworkAndIdentityEditor/NetworkAndIdentityEditor.tsx","components/Admin/SqlSetEditor/SpecializationDropdownOption/SpecializationDropdownOption.tsx","components/Admin/SqlSetEditor/SpecializationGroupDropdownPreview/SpecializationGroupDropdownPreview.tsx","components/Admin/SqlSetEditor/ConceptEventTypeDropdown/ConceptEventTypeDropdown.tsx","components/Admin/SqlSetEditor/SqlSetRow/SqlSetRow.tsx","components/Admin/SqlSetEditor/SqlSetEditor.tsx","containers/Admin/AdminPanel.tsx","config/routes.tsx","actions/auth.ts","reducers/auth.ts","reducers/cohort/patientList.ts","reducers/cohort/visualize.ts","models/concept/Concept.ts","reducers/cohort/count.ts","providers/extensionConcepts/extensionConceptsWebWorker.ts","providers/extensionConcepts/extensionConceptsWebWorkerContext.ts","services/queryApi.ts","actions/queries.ts","reducers/cohort/cohort.ts","reducers/concepts.ts","reducers/conceptSearch.ts","reducers/dataExport.ts","reducers/generalUi.ts","reducers/map.ts","reducers/networkResponders.ts","models/panel/RecencyFilter.ts","reducers/panels.ts","models/NetworkResponder.ts","reducers/queries.ts","services/networkRespondersApi.ts","models/Auth.ts","actions/session.ts","reducers/session.ts","models/Session.ts","reducers/datasets.ts","utils/parseSql.ts","reducers/admin/dataset.ts","reducers/admin/networkAndIdentity.ts","reducers/rootReducer.ts","reducers/admin/admin.ts","reducers/admin/concept.ts","reducers/admin/configuration.ts","reducers/admin/sqlSet.ts","reducers/admin/specializationGroup.ts","reducers/admin/specialization.ts","reducers/admin/conceptEvent.ts","reducers/admin/datasetQueryCategory.ts","reducers/panelFilters.ts","components/CohortCountBox/CohortCountQueryTimer.tsx","components/Attestation/AttestationConfirmation.tsx","components/Attestation/AttestationRow.tsx","components/Attestation/AttestationContent.tsx","components/Attestation/BrowserError.tsx","containers/Attestation/Attestation.tsx","utils/browser.ts","components/CohortCountBox/CohortCountQuerySites.tsx","components/CohortCountBox/CohortCountQueryDetail.tsx","components/CohortCountBox/CohortSql.tsx","components/CohortCountBox/CohortCountSiteDetail.tsx","containers/CohortCountBox/CohortCountSiteContainer.tsx","containers/CohortCountBox/CohortCountBox.tsx","containers/Header/CohortSummary.tsx","containers/Header/Header.tsx","components/MyLeafModal/SavedQueriesTable.tsx","containers/MyLeafModal/MyLeafModal.tsx","components/Other/RightPaneSlider/RightPaneSlider.tsx","containers/App.tsx","containers/SaveQueryPanel/SaveQueryPanel.tsx","components/Sidebar/SidebarTab.tsx","containers/Sidebar/Sidebar.tsx","components/Modals/InformationModal/InformationModal.tsx","components/Modals/ConfirmationModal/ConfirmationModal.tsx","components/Modals/NoClickModal/NoClickModal.tsx","components/HelpButton/HelpButton.tsx","components/SideNotification/SideNotification.tsx","containers/Root.tsx","store/configureStore.ts","index.tsx","bundled/arc.js"],"names":["Routes","NotificationStates","BrowserType","AdminPanelLoadState","AdminPanelPane","getIdTokenKey","config","concat","version","decodeToken","token","decoded","jwt_decode","roles","fullname","nameSplit","split","name","scope","length","ctx","expirationDate","Date","exp","isAdmin","indexOf","isFederatedOkay","isPhiOkay","isSuperUser","issuer","iss","loginDate","iat","rawDecoded","console","info","log","clearCurrentUserToken","idTokenKey","window","localStorage","removeItem","getUserTokenAndContext","_ref","Object","asyncToGenerator","regenerator_default","a","mark","_callee2","wrap","_context2","prev","next","abrupt","Promise","_ref2","_callee","resolve","reject","_context","getItem","Axios","get","then","response","respData","data","idToken","setItem","catch","err","stop","_x2","_x3","apply","this","arguments","_x","getAuthConfig","_ref3","_callee3","request","_context3","sent","HttpFactory","authenticated","create","headers","authorization","getPanelItemCount","panels","filter","p","subPanels","s","panelItems","getEmbeddedQueries","embedded","_iteratorNormalCompletion","_didIteratorError","_iteratorError","undefined","_step","_iterator","Symbol","iterator","done","value","_iteratorNormalCompletion2","_didIteratorError2","_iteratorError2","_step2","_iterator2","sp","_iteratorNormalCompletion3","_didIteratorError3","_iteratorError3","_step3","_iterator3","pi","isEmbeddedQuery","concept","universalId","push","return","startsWith","panelHasErrors","dateFilterErrors","document","querySelector","countFilterErrors","seqFilterErrors","eventTypeErrors","panelHasLocalOnlyConcepts","panelFilters","_iteratorNormalCompletion4","_didIteratorError4","_iteratorError4","_step4","_iterator4","_iteratorNormalCompletion6","_didIteratorError6","_iteratorError6","_step6","_iterator6","_iteratorNormalCompletion7","_didIteratorError7","_iteratorError7","_step7","_iterator7","_iteratorNormalCompletion5","_didIteratorError5","_iteratorError5","_step5","_iterator5","issueDate","getSessionTokenAndContext","state","attestation","http","auth","userContext","params","objectSpread","documentation.expirationDate","documentation","documentation.institution","institution","documentation.title","title","accessToken","refreshSessionTokenAndContext","session","context","t0","saveSessionAndForceReLogin","_x4","logoutFromServer","post","_x5","currState","getStoredSessionObject","key","getSessionStorageKey","sessionStorage","JSON","stringify","location","reload","attemptLoginRetryIfPossible","getSessionRetryKey","queries","f","isActive","timestamp","getTime","PatientListDatasetSummaryType","PatientListDatasetShape","getSqlConfiguration","resp","setAdminSqlConfiguration","sqlConfig","type","getSpecializationGroups","grpDto","grps","grp","fromDTO","finish","updateSpecializationGroup","_ref4","newGrp","put","id","toDTO","specializations","createSpecializationGroup","_ref5","_ref6","deleteSpecializationGroup","_ref7","_callee4","_ref8","_context4","delete","_x6","_x7","dto","map","Map","forEach","sqlSetId","set","changed","unsaved","uiDefaultText","spc","orderId","sqlSetWhere","specializationGroupId","uiDisplayText","getSqlSets","sets","groups","setIdxMap","i","_loop","specializationGroups","idx","updateSqlSet","createSqlSet","deleteSqlSet","getConceptEvents","evs","updateConceptEvent","ev","updatedEv","createConceptEvent","newEv","deleteConceptEvent","formatSql","rawSql","sqlFormatter","format","indent","saveOrUpdateAdminConceptSpecializationGroup","dispatch","syncAdminSpecializationGroupUnsavedWithSaved","deleteAdminConceptSpecializationGroup","group","getState","setNoClickModalState","message","Working","removeAdminConceptSpecializationGroup","setSideNotificationState","Complete","error","body","header","show","status","conflicts","ex","concepts","conceptCount","uiDisplayName","showInfoModal","Hidden","setAdminConceptSpecializationGroup","prevGroup","updateSpecialization","updatedSpc","createSpecialization","newSpc","deleteSpecialization","saveOrUpdateAdminSpecialization","removeAdminConceptSpecialization","setAdminConceptSpecialization","deleteAdminConceptSpecialization","spcs","year","getFullYear","updateUserConceptFromAdminChange","userConcept","propName","val","sqlSet","neverAdd","Set","alwaysAdd","out","assign","isEncounterBased","has","generateSampleSql","alias","person","fieldPersonId","where","sql","sqlSetFrom","sqlFieldDate","isNumeric","sqlFieldNumeric","replace","RegExp","conceptSqlSetsChanged","changeDetected","getRootId","conceptTree","parentId","rootId","getApiUpdateQueue","queue","newSet","_i","saveOrUpdateAdminConceptSqlSet","createEmptyConcept","generateId","baseProps","isParent","isRoot","isPatientCountAutoCalculated","isSpecializable","uiDisplaySubtext","uiDisplayTooltip","adminConcept","constraints","childrenLoaded","isEventBased","isFetching","isOpen","processApiUpdateQueue","process","admin","sqlSets","setAdminConceptSqlSetsUnchanged","t1","syncAdminConceptSqlSetUnsavedWithSaved","deleteAdminConceptSqlSet","removeAdminConceptSqlSet","specializationGroupCount","setAdminConceptSqlSet","undoAdminSqlSetChanges","prevSqlSet","saveAdminConceptEvent","removeAdminConceptEvent","setAdminConceptEvent","deleteAdminConceptEvent","setAdminUneditedConceptEvent","undoAdminConceptEventChange","CohortStateType","getAdminDataset","ds","updateDataset","dataset","createDataset","deleteDataset","_x8","getAdminDemographicsDataset","_ref9","_callee5","_ref10","converted","_context5","shape","Demographics","sqlStatement","tags","lastChanged","_x9","upsertDemographicsDataset","_ref11","_callee6","_ref12","_context6","_x10","_x11","engine","DatasetSearchEngineWebWorker","_this","classCallCheck","worker","promiseMap","reindexDatasets","datasets","postMessage","allowDatasetInSearch","datasetId","allow","searchString","allowAllDatasets","setAdminMode","searchDatasets","payload","requestId","handleReturnPayload","result","stripFunctionToContext","funcString","substring","lastIndexOf","addMessageTypesToContext","messageTypes","v","join","workerContext","demographics","category","workerFile","blob","Blob","Worker","URL","createObjectURL","onmessage","onerror","indexDatasets","searchTerm","term","trim","toLowerCase","include","searchPatientListDatasets","results","setDatasetSearchResult","setAdminDatasetSearchMode","setDatasetSearchTerm","addDataset","setDataset","switchDatasetOldForNew","newDataset","setDatasetSelected","setDatasetDisplay","moveDatasetCategory","setDatasets","removeDataset","saveAdminDataset","newAdminDataset","oldUserDataset","userDataset","setAdminDataset","findOldDisplayDataset","deriveUserDatasetFromAdmin","toConsumableArray","all","values","saveAdminDemographicsDataset","setAdminDemographicsDataset","deleteAdminDataset","fetchAdminDatasetIfNeeded","adm","demographicsDataset","admDataset","setAdminPanelDatasetLoadState","LOADING","LOADED","ERROR","revertAdminDatasetChanges","_datasets","currentDataset","originalAdminDataset","removeAdminDataset","analyzeColumns","setAdminDatasetShape","setAdminDatasetSql","Boolean","categoryId","datasetQueryCategories","categories","cat","display","getDatasetQueryCategories","cats","updateDatasetQueryCategory","updated","createDatasetQueryCategory","newCat","deleteDatasetQueryCategory","saveAdminDatasetQueryCategory","removeAdminDatasetQueryCategory","setAdminDatasetQueryCategory","deleteAdminDatasetQueryCategory","setAdminUneditedDatasetQueryCategory","undoAdminDatasetQueryCategoryChange","getNetworkEndpoints","upsertIdentity","identity","createEndpoint","endpoint","updateEndpoint","deleteEndpoint","getCertificate","address","networkAndIdentity","uneditedIdentity","endpoints","saveOrUpdateNetworkEndpoint","NumericFilterType","aggregator","CohortAggregatorWebWorker","aggregateStatistics","cohorts","responders","agg","setAggregateVisualizationData","vizResults","handleResponderToggle","responderUpdate","aggregate","enabled","disableResponder","enableResponder","cohort","visualization","networkCohorts","setResponders","errorResponder","setAdminNetworkIdentity","newEndpoint","removeAdminNetworkEndpoint","setAdminNetworkEndpoint","deleteNetworkEndpoint","attemptLoadRemoteLeafCert","_cert","cert","setAdminNetworkCertModalContent","setAdminNetworkEndpoints","revertAdminNetworkChanges","setAdminNetworkCertModalShown","checkIfAdminPanelUnsavedAndSetPane","pane","setAdminPanelPane","setAdminPanelLoadState","SequenceType","panelItemNumericFilterToDto","numFilter","_numFilter$filter","slicedToArray","val1","val2","filterType","None","Between","subPanelToDto","subpanel","dateFilter","includeSubPanel","index","joinSequence","minimumCount","panelIndex","resource","panelItem","extensionId","numericFilter","recencyFilter","DateType","DateIncrementType","panelToDto","panel","domain","includePanel","fetchCount","nr","queryId","cancelToken","fetchDemographics","PatientListColumnType","fetchDataset","dates","datasetid","isHomeNode","start","dateIncrementType","NONE","end","early","deriveDateTicks","late","fetchAvailableDatasets","date","dateTypeKeyMap","HOUR","DAY","WEEK","MONTH","YEAR","NOW","Math","round","SPECIFIC","momentIncrementType","incr","increment","moment","add","toDate","string","number","sparkline","keys","caps","firstToUpper","camelCaseToUpperSpaced","colName","col","toUpperCase","DemographicsDefTemplate","columns","autoDisplayOnLoad","optional","multirow","DemographicsAdminSqlDefTemplate","boolean","EncounterDefTemplate","dateValueColumn","Encounter","stringValueColumn","ObservationDefTemplate","numericValueColumn","Observation","ConditionDefTemplate","Condition","ProcedureDefTemplate","Procedure","ImmunizationDefTemplate","Immunization","AllergyDefTemplate","Allergy","MedRequestDefTemplate","MedicationRequest","MedAdminDefTemplate","MedicationAdministration","DefTemplates","patientListProvider","PatientListWebWorker","addDemographics","datasetDefinition","responderId","clearPatients","getPatients","getSingletonCsv","useDisplayedColumnsOnly","getMultirowCsv","getAllData","redcapExportProvider","REDCapExportWebWorker","createProjectConfiguration","options","patientList","projectTitle","username","useRepeatingForms","def","getREDCapExportData","plData","addMultirowDataset","datasetDto","queryRef","multirowDatasets","singletonDatasets","summaryDef","previousSumDef","configuration","getDatasetDefinition","definition","responderStates","totalRows","isDisplayed","displayColumns","schema","fields","summaryType","Quantitative","NonQuantititive","addDemographicsDataset","patients","responder","patientOf","getDemographicsDefinition","size","c","totalPatients","validateDefinitionColumns","template","actualColNames","cols","displayName","patient","realCols","switchArrayPositions","arr","oldIdx","newIdx","k","splice","getPatientListDataset","atLeastOneSucceeded","crt","isGateway","count","setPatientListDatasetRequested","newPl","setPatientListNetworkDatasetReceived","setPatientListDisplay","setPatientListDatasetNotImplemented","setPatientListDatasetFailure","visibleDatasets","setPatientListDatasetReceived","newDatasets","getPatientListFromNewBaseDataset","newPatientListState","setPatientListSingletonReceived","toggleDatasetColumn","column","dsCopy","shouldDisplay","displayPatients","slice","togglePatientRowOpen","patientRowId","_x12","getCurrentPatientList","sort","_callee7","_context7","pageNumber","_x13","_x14","setPatientListPagination","_callee8","_context8","_x15","_x16","rowCount","getCounts","runLocalOnly","cancelSource","CancelToken","source","pf","setCohortCountStarted","REQUESTING","countDataDto","countData","sqlStatements","setNetworkCohortCount","preflight","setNetworkCohortCountNotImplemented","errorNetworkCohortCount","setCohortCountFinished","getDemographicsIfNeeded","NOT_LOADED","cacheLimit","setCohortDemographicsStarted","demResponse","newState","statistics","errorNetworkCohortDemographics","setCohortDemographicsFinished","setCohortDemographicsErrored","cancelQuery","registerNetworkCohorts","countResults","cancel","success","handleSidebarTabClick","route","currentRoute","cohortCountState","generalUi","AdminPanel","FindPatients","setRoute","conceptEvents","PatientList","Visualize","noclickModal","sideNotification","setCohortCountBoxState","cohortCountBoxVisible","cohortCountBoxMinimized","cohortInfoButtonVisible","infoModal","hideInfoModal","showConfirmationModal","confirmModal","hideConfirmModal","toggleSaveQueryPane","toggleMyLeafModal","hideMyLeafModal","toggleExportDataModal","togglePanelFilter","setPanelFilterActiveStates","filters","makeRequest","requestString","requestParams","fetchRootConcepts","fetchConcept","con","fetchConceptChildren","fetchConceptAncestorsBySearchTerm","terms","t","encodeURIComponent","conceptSearch","paramsSerializer","pms","getAdminConcept","conceptId","updateAdminConcept","createAdminConcept","deleteAdminConcept","revertAdminAndUserConceptChanges","_state","serverAdminConcept","serverUserConcept","setConcept","setAdminConcept","setAdminPanelCurrentUserConcept","fetchAdminConceptIfNeeded","admConcept","_sql","setAdminPanelConceptLoadState","NOT_APPLICABLE","setAdminConceptExampleSql","saveAdminConcept","newAdminConcept","newUserConcept","parent","switchConcepts","shouldUpdateAdminParentConcept","userParentConcept","adminParentConcept","_userParentConcept","adminParent","copyAdminParent","copyUserParent","currentTree","childrenIds","deleteAdminConceptFromServer","removeConcept","panelFilterCount","queryCount","removeUnsavedAdminConcept","resetAdminConceptCache","SHOW_DRILL_TREE","fetchConceptChildrenIfNeeded","shouldfetchConceptChildren","toggleConceptOpen","getConceptChildren","requestConceptChildren","receiveConceptChildren","fetchSearchTreeFromConceptHint","hint","setSearchTreeRequested","conceptIds","ids","idents","setSearchTree","fetchSearchTreeFromTerms","handleConceptClick","_concepts","currentAdminConcept","setSelectedConcept","showDrillTree","children","oldConcept","newConcept","addRootConcepts","mergeExtensionConcepts","conceptMap","reparentConcept","createConcept","lastServerSearchTerm","lastServerRootId","lastServerResultCount","currentRunningServerCalls","ConceptSearchEngineWebWorker","initializeSearchEngine","displayThreshhold","roots","addConceptHints","hints","addConceptHintsAndSearch","searchConceptHints","fetchConceptHintsFromServer","rootParentId","fetchConceptEquivalentHintFromServer","shouldQueryServer","abs","getHints","cleaned","serverResults","initializeSearch","SET_SEARCH_ROOT","SET_SEARCH_TERM","SEND_SEARCH","SET_SEARCH_HINTS","SET_EQUIVALENT_SEARCH_HINT","ERROR_SEARCH","requestConceptHints","setSearchHints","requestConceptEquivalentHint","setSearchEquivalentHint","setSearchRoot","setSearchTerm","equivalent","HintContainer","_React$PureComponent","props","possibleConstructorReturn","getPrototypeOf","call","className","inherits","createClass","_this$props","conceptSearchState","handleEquivalentHintClick","handleHintSelect","selectedHintIndex","termIsNumeric","currentHints","currentEquivalentHint","abbreviate","paddedAbbreviation","react_default","createElement","style","paddingLeft","targetCode","onMouseDown","targetCodeType","uiDisplayTargetName","len","fullText","bind","text","suggestion","React","PureComponent","LoaderIcon","height","width","strokeWidth","viewBox","cx","cy","r","fill","strokeMiterlimit","ConceptSearchBox","debounceTimeoutMs","minSearchCharLength","minNumericCharLength","numericRegex","previousTerm","previousEquivalentTerm","toggleRootsDropdown","setState","showRootsDropdown","handleNumericInput","numericTerm","find","test","conceptsSearchState","textSplit","input","getElementsByClassName","setTimeout","handleSearchInput","focus","handleRootDropdownSelect","_this$props2","handleInputFocus","showHintsDropdown","handleInputBlur","handleArrowUpDownKeyPress","_this$state","currentFocus","maxFocus","newFocus","ArrowUp","handleEnterKeyPress","_this$props3","_this$state2","debounceTimer","clearTimeout","directMatchHint","h","handleSpacebarKeyPress","handleSearchKeydown","Space","ArrowDown","preventDefault","Backspace","Enter","Escape","handleSearchTextClear","handleSearchInputChange","e","currentTarget","conceptsState","_this2","_this$props4","drillTree","_this$state3","progressBarClasses","requestingSearchTree","selectedRootDisplay","reactstrap_es","addonType","toggle","caret","onClick","root","classes","onBlur","onChange","onFocus","onKeyDown","placeholder","spellCheck","Other_LoaderIcon_LoaderIcon","HintContainer_HintContainer","defaultStyle","backgroundColor","borderColor","color","fontSize","paddingBottom","paddingRight","paddingTop","createDragPreview","rawText","img","Image","shadowStyle","parts","boxShadow","offsetX","offsetY","blur","shadowBlur","parseInt","shadowColor","shadowOffsetX","shadowOffsetY","parseBoxShadow","marginBottom","marginRight","rectHeight","getContext","font","textWidth","measureText","perCharWidth","getTextWidth","rectWidth","canvas","rectStrokeWidth","rect","save","fillStyle","strokeStyle","stroke","restore","fillText","src","toDataURL","DateInputType","formatLargeNumber","formatSmallNumber","PopupBox","mouseOut","handleMouseEnter","handleMouseLeave","handleBlur","triggerClick","el","click","setPopupBoxFocus","popupBoxElem","forceMouseInOnMount","shown","parentDomRect","bottom","left","top","createPortal","onMouseLeave","onMouseEnter","ref","tabIndex","CheckboxSlider","checked","readOnly","LearnMoreButton","startYear","currYear","margin","right","minWidth","maxWidth","hasOutOfBoundYears","getPopupContent","ShowAllYears","DOMRect","countsByYear","uiDisplayPatientCountByYear","getYearData","calcWidth","scrollLeft","pageXOffset","documentElement","scrollTop","pageYOffset","pos","clientHeight","PopupBox_PopupBox_PopupBox","handleInfoBoxClickedOutside","es6","barCategoryGap","dataKey","interval","axisLine","tickLine","label","position","barSize","isAnimationActive","CheckboxSlider_CheckboxSlider_CheckboxSlider","handleShowAllYearsClick","react_textarea_autosize_esm_browser","handleClick","target","showInfoBox","domRect","getBoundingClientRect","groupYears","patientCount","ungrouped","output","nullYear","greaterThanCurrentYear","bar","d","fi","conceptNodeTarget","drop","monitor","component","reparented","_adminConcept","newParent","newRootId","_adminConcept2","confirm","onClickNo","onClickYes","noButtonText","yesButtonText","canDrop","allowReparent","isExtension","ConceptTreeNodeTextWrapper","connectDropTarget","isOver","mainTextClasses","nodeTextClasses","showCount","uiDisplayPatientCount","icon","md","go","toLocaleString","eventTypeId","uiDisplayEventName","ConceptTreeNodeTextWrapperContainer","DropTarget","connect","dropTarget","shallow","ConceptTreeNode","arrowWasClicked","handleArrowClick","includes","connectDragPreview","getDragPreview","allowRerender","parentShown","selectedId","connectDragSource","arrowClasses","mainClasses","ConceptTreeNodeText","LearnMoreButton_LearnMoreButton","Array","from","childId","ConceptTreeNodeContainer","DragSource","beginDrag","dragPreview","dragSource","isDragging","ConceptTree","tree","b","ConceptTree_ConceptTreeNode","Component","ConceptTreeColumn","showSearchTree","searchTree","ConceptSearchBox_ConceptSearchBox_ConceptSearchBox","ConceptTree_ConceptTree_ConceptTree","PanelFilter","mouseOutBubbleUpMillisecondThreshold","lastMouseOutClickTime","handleToggleClick","shouldShowFilterSelectionBox","timeSinceMouseOutClicked","handleFilterSelectionBoxClose","handlePanelFilterItemClick","handleSelectionBoxItemClick","uiDisplayDescription","setPanelItemNumericFilter","subPanelIndex","panelItemIndex","setSubPanelJoinSequence","setPanelDateFilter","selectSpecialization","conceptSpecialization","deselectSpecialization","conceptSpecializationGroup","CountDropdown","assertThisInitialized","selectItem","dropdownOpen","nextProps","nextState","prevState","item","innerText","minCount","CustomDateRangePicker","noDateFilter","anytime","dateFormat","focusPoller","pollForFocusOut","active","activeElement","tagName","closeCustomDateRangeBox","setDateBoundary","startDate","endDate","dateBoundary","toLocaleDateString","validateDateString","isValid","splitter","momentDate","handleDateChange","selectedDay","modifiers","dayPickerInput","updateDate","_this$validateDateStr","Start","handleStartDateChange","startDateInput","handleEndDateChange","endDateInput","dateInputString","startDateFilter","endDateFilter","endDateValid","startDateValid","formatDate","handleClearClick","toggleCustomDateRangeBox","_this$props5","startDateClasses","endDateClasses","DayPickerInput_default","onDayChange","onDayPickerHide","dayPickerProps","selectedDays","End","none","today","pastDates","futureDates","DateDropdown","setDropdownItemClasses","getDateDisplay","dateIncrementEnumToString","MINUTE","handleCustomDateClick","customDateFilterClasses","anytimeDateFilterClasses","divider","opt","INCLUSION_DROPDOWN_TYPE","InclusionDropdown","inclusionDropdownType","isInclusionCriteria","setSubPanelInclusion","displayText","opts","isFirst","includeClasses","excludeClasses","PanelHeader","handleCustomDateSelectionClick","showCustomDateRangeBox","InclusionDropdown_InclusionDropdown","DateDropdown_DateDropdown","CustomDateRangePicker_CustomDateRangePicker","CountDropdown_CountDropdown","types","enum","GreaterThanOrEqualTo","operator","GreaterThan","LessThanOrEqualTo","LessThan","EqualTo","PanelItemNumericFilter","baseClassName","dispatchUpdate","handleDropdownItemSelect","newFilter","handleNumberInputChange","parseFloat","handleInputOneChange","handleInputTwoChange","firstDecimal","isNaN","setNumericDisplayText","_panelItem$numericFil","_filter","_panelItem$concept","uiNumericDefaultText","uiDisplayUnits","units","between","toggleDropdown","showDropdown","handleSelectionTextClick","showSelectionBox","handleSelectionBoxClickedOutside","handleClickClearFilter","_panelItem$numericFil2","isBetween","classed","onMouseUp","ConceptSpecializationGroup","handleDefaultClick","specializationGroup","handleSpecializationClick","selected","specializationSelected","conceptNodeSource","endDrag","canDrag","queryState","PanelItem","_React$Component","showNumericFilterTooltip","subPanel","eventJoin","joinSequenceEventType","eventId","invalidEventId","sequenceType","Event","hidden","g","ConceptSpecializationGroup_ConceptSpecializationGroup","PanelItemNumericFilter_PanelItemNumericFilter","PanelItemOr","SubPanelDashBorder","SameSequenceDropdownIncrement","postfix","incrementTypes","dateType","stopPropagation","joinSequenceTypes","PlusMinus","WithinFollowing","AnytimeFollowing","SameSequenceDropdown","updateStoreWithJoinSequence","setDisplayText","sequence","toString","handleInputChange","handleWithinPlusMinusInputChange","seq","withinPlusMinusInput","handleWithinFollowingInputChange","withinFollowingInput","handleDropdownSelect","storeNumericValueToString","handleWithinPlusMinusDropdownIncrementSelect","dateTypeString","handleWithinFollowingDropdownIncrementSelect","handleClickPreventDefault","addSelectedClassIfMatched","encounterClasses","eventClasses","plusMinusClasses","withinFollowingClasses","anytimeAfterClasses","Panels_SameSequenceDropdownIncrement","SubPanelHeader","content","SameSequenceDropdown_SameSequenceDropdown","panelTarget","addPanelItem","SubPanel","totalPanelItems","wrapperClasses","items","Panels_PanelItem","FindPatients_Panels_PanelItemOr","SubPanelHeader_SubPanelHeader","FindPatients_Panels_SubPanelDashBorder","Panel","isDateFiltered","isCountFiltered","hasPanelItems","hasSequentialJoin","PanelHeader_PanelHeader","Panels_SubPanel","PanelGroup","Panel_Panel","PanelGroupColumn","handleQueryClick","hasErrors","setRunQueryButtonContent","PanelFilterGroup_PanelFilter","PanelGroup_PanelGroup","fluid","lg","xl","ConceptColumnContainer","Panels_PanelGroupColumn","dashArray","delay","opacity","pulseColor","smoothFactor","weight","antPathOptionTypes","RESULT_RECEIVED","reverse","SENDING_QUERY","EndpointMarker","react_leaflet_div_icon_default","EndpointPopup","formatNumber","countDisplay","build_default","duration","decimals","formattingFn","latitude","longitude","Popup","closeOnClick","autoClose","closeButton","closeOnEscapeKey","primaryColor","CalculateGeodesicLine","to","arrayToXY","coord","x","y","vertexCount","p1","p2","d1","d2","calculateVertices","arc","GreatCircle","Arc","geometries","coords","computeDimensions","dim","sidebarWidth","contentWidth","sidebar","getElementById","getClientRects","innerHeight","innerWidth","LeafMap","onViewportChanged","current","bounds","leafletElement","getBounds","updateDimensions","dimensions","createRef","addEventListener","removeEventListener","networkResponders","tileUrl","markers","popups","paths","home","n","netCohort","EndpointMarker_EndpointMarker","LatLng","EndpointPopup_EndpointPopup","line","react_leaflet_ant_path_default","positions","es_Map","animate","minZoom","maxZoom","viewport","zoom","TileLayer","attribution","url","ownProps","setViewport","DatasetContainer","getFirstDataset","firstCat","handleDatasetRequest","displayOrder","handleDatasetSelect","order","hasData","prevId","nextId","firstDs","handleDatasetOptionClick","setDatasetOptionClass","categoryIndex","datasetIndex","prevProps","autoSelectOnSearch","searchEnabled","disabled","onDoubleClick","defaultProps","REDCapProjectPurpose","ContentTypes","AddDatasetSelectors","handleDateOptionClick","handleDateSelect","setDateOptionClass","selectedDates","handleClickClose","DatasetContainer_DatasetContainer","float","ResponderStatus","classname","getStateDisplay","IN_ERROR","ResponderStatusSummary","cohortMap","responderMap","completed","nc","ResponderStatus_ResponderStatus","AddDatasetButton","getButtonContent","showSelectorModal","selectedName","modalClasses","overlayClasses","ResponderStatusSummary_ResponderStatusSummary","AddDatasetSelectors_AddDatasetSelectors","DatasetColumnSelector","showColumnBox","handleRemoveDatasetClick","handleColumnBoxClickedOutside","handleColumnClick","getSummaryText","cs","dateBounds","PatientListSortType","PatientListDndType","getExportOptions","getREDCapVersion","requestProjectCreation","projectName","classic","project","is_longitudinal","project_title","purpose","Practice","record_autonumbering_enabled","REDCapHttpConnector","endpointUri","Accept","Content-Type","getProjectInfo","Project","getProjectUrl","project_id","exportMetadata","metadata","Metadata","exportEvents","events","Events","exportEventMappings","eventMappings","EventMappings","exportUsers","users","Users","exportRepeatingFormsEvents","repeatingForms","RepeatingFormsEvents","exportRecords","records","Records","additionalParams","getPayload","toKeyValue","repeatableFormsAllowed","versionStr","versionStringToObject","min","minRepeatingFormEventsApiVersion","major","minor","patch","vStr","exportToREDCap","redCap","batchSize","versionResp","useRepeatableForms","createResp","conn","totalRecords","startIdx","endIdx","batch","_url","startTime","setExportProgress","dataExport","apiURI","repeatingFormEvents","setREDCapUrl","setExportError","setExportClearErrorOrComplete","progress","estimatedSecondsRemaining","calculateExportCompletionTime","percentComplete","secondsElapsed","estimate","ExportProgress","getRemainingTimeText","estimatedSeconds","num","unit","floor","exportState","REDCapExport","getDisplay","isComplete","isErrored","href","handleREDCapProjectNameChange","projectNameError","handleClickExport","projName","registerClickExportHandler","isExporting","inputClasses","redcapInstanceUrl","formattedRowLimit","rowLimit","inputPlaceholder","ExportProgress_ExportProgress_ExportProgress","handleClickClearErrorOrComplete","ExportDataModal","clickExportHandler","setClickExportHandler","backdrop","REDCapExport_REDCapExport","Paginate","pageCount","ceil","pageSize","dist_default","previousLabel","fa","nextLabel","breakLabel","breakClassName","forcePage","marginPagesDisplayed","pageRangeDisplayed","onPageChange","handlePageCountClick","containerClassName","activeClassName","sourceColumn","ConstraintType","columnSource","columnTarget","_callee9","stateCopy","columnSourceIndex","columnTargetIndex","newDisplayPatients","_context9","findIndex","_x17","_x18","Header","sortType","ASC","DESC","HeaderContainer","compose","COLUMN_HEADER","connector","Tuple","lastSparklineValIndex","createSparkline","vals","dot","createSparklineDotAndLabel","animationBegin","dy","textAnchor","getValueDisplay","EncounterDetailGroup","renderValue","encounterId","rows","dr","j","datasetName","dateColumnName","kv","Row","row","rowClass","openClass","compoundId","detailRowCount","Tuple_Tuple","colSpan","detailValues","EncounterDetailGroup_EncounterDetailGroup","PatientListTable","handleHeaderCellClick","pl","prevSortCol","currentSort","newSortType","_this3","PatientList_Header","Row_Row","CohortTooLargeBox","RowCount","totalDatapoints","isIdentified","isFederated","exportLimit","totalCohortPatients","react","page","handleExportClick","showCountDetails","showExportModal","datasetDefs","totalResponders","showPaginate","CohortTooLargeBox_CohortTooLargeBox_CohortTooLargeBox","ExportDataModal_ExportDataModal_ExportDataModal","DatasetColumnSelector_DatasetColumnSelector","AddDatasetButton_AddDatasetButton_AddDatasetButton","RowCount_RowCount","Paginate_Paginate","PatientListTable_PatientListTable","showExportDataModal","SectionHeader","headerText","subText","visualizationConfig","ageByGender","colorFemale","colorMale","colorOther","xAxisStroke","binary","colors","AARP","Gender","Hispanic","Married","VitalStatus","AgeByGender","w","stackHeight","buckets","bucket","sum","females","males","others","dx","formatter","Binary","maxColWidth","formatNegativeNumber","colWidth","leftBars","dummyValue","rightBars","layout","hide","AggregateDemographics","_this$props$cohort$vi","ageByGenderData","binarySplitData","SectionHeader_SectionHeader_SectionHeader","AgeByGender_AgeByGender","Binary_Binary","ResponderDemographics","_this$props$responder","completedResponders","AggregateDemographics_AggregateDemographics","ResponderDemographics_ResponderDemographics","Section","Input","focusToggle","required","valid","handleFocus","handleChange","changeHandler","subLabel","locked","errorText","forceValidation","TextArea","handleKeydown","overrideTabKeyDown","minRows","maxRows","Display","_this$props$data","togglePanelPreview","Section_Section","TextArea_TextArea","Input_Input","Identifiers","uidBase","handleUniversalIdChange","uid","externalId","externalParentId","Checkbox","_getPrototypeOf2","_len","args","_key","Configuration","Checkbox_Checkbox","divFocused","SqlSetDropdown","handleManageSqlSetsClick","SQL_SETS","setId","node","substr","SqlEditor","handleSqlUpdate","cpt","defineProperty","toggleSqlPreview","toggleOverlay","SqlSetDropdown_SqlSetDropdown","GLOWING_BUTTON_STATE","Constraint","handleDeleteClick","deleteHandler","handleConstraintValueChange","constraint","handleDropdownItemClick","constraintId","handleUserDropdownClick","User","handleGroupDropdownClick","Group","constraintValue","Constraints","handleConstraintDelete","handleConstraintChange","newConstraint","_this$props$data2","handleAddNewClick","_this$props$data3","resourceId","_this$props$data4","Constraint_Constraint","SpecializationDropdown","clickHandler","SpecializationDropdowns","handleDropdownClick","hasGroups","SpecializationDropdown_SpecializationDropdown","showConceptStatus","MainEditor","getStatusDependentContent","currentConceptIsValid","handleCreateSqlSetClick","_this$props$data$conc","currentUserConcept","newVal","handleUndoChanges","_this$props$data$conc2","handleSaveChanges","_this$props$data$conc3","handleAddConceptClick","defaultSet","_createEmptyConcept","handleDeleteConceptClick","_this$props$data$conc4","_data$concepts","sectionProps","Display_Display","Configuration_Configuration","SpecializationDropdowns_SpecializationDropdowns","SqlEditor_SqlEditor","Identifiers_Identifiers","Contraints_Constraints","SqlBox","readonly","react_ace_lib_default","editorProps","$blockScrolling","Infinity","highlightActiveLine","mode","theme","showPrintMargin","setOptions","showGutter","showLineNumbers","tabSize","SqlPreview","clientWidth","SqlBox_SqlBox","PanelPreview","dummyDispatch","ConceptEditor","showSqlPreview","showOverlay","showPanelPreview","MainEditor_MainEditor","SqlPreview_SqlPreview_SqlPreview","exampleSql","PanelPreview_PanelPreview_PanelPreview","examplePanel","CategoryDropdown","handleEditingBlur","editId","isDuplicate","handleEditDoneClick","handleEditUndoClick","handleEditingItemClick","handleEditButtonClick","handleDeleteButtonClick","handleEdit","_Object$assign","edited","newOpenState","handleNoneDropdownItemClick","handleAddNewEventTypeClick","currentCategory","localeCompare","Label_default","FormText_default","ShapeDropdown","shapes","categoryChangeHandler","inputChangeHandler","shapeChangeHandler","CategoryDropdown_CategoryDropdown","ShapeDropdown_ShapeDropdown_ShapeDropdown","handleAutoFormatClick","getSqlWidth","sqlDom","getComputedStyle","getColumnContent","present","handleSqlChange","expectedColumns","Tagger","trimmed","newTags","pop","handleRemoveTagClick","Tagger_Tagger_Tagger","DatasetEditor","handleInitialBasicDemographicsSetupClick","currentDatasetIsValid","missingCols","newAdminDs","userDs","newDs","handleCategoryChange","newCategory","newCategoryText","hadCategory","adminDs","handleShapeClick","handleCreateDatasetClick","newUserDs","_this$props6","_data$datasets","allowDelete","Sections_Display_Display","SqlEditor_SqlEditor_SqlEditor","Sections_Identifiers_Identifiers","Constraints_Constraints","Identity","abbreviation","description","GlowingButton","indicator","NetworkHealthResponder","formatPatientCount","allowDisable","totalActiveResponders","containerClasses","GREEN","GRAY","borderLeftColor","GlowingButton_GlowingButton_GlowingButton","forceUpdate","MapPreview","getLatLng","lat","lng","latLng","toBounds","zoomControl","clientOptions","tileURI","IdentityPreview","NetworkHealthResponder_NetworkHealthResponder_NetworkHealthResponder","Sections_MapPreview","Endpoint","handleShowCertDetailsClick","showDetails","handleLoadCertInfoTest","toggleClasses","toggleText","isResponder","isInterrogator","keyId","certificate","CertModal","dummyHandler","NetworkAndIdentityEditor","currentNetworkAndIdentityValid","_this$props$data$netw","_arr","newIdentity","generateSequentialIntegerId","max","handleAddEndpointClick","created","_data$networkAndIdent","CertModal_CertModal","modal","Identity_Identity","IdentityPreview_IdentityPreview","Endpoint_Endpoint","SpecializationDropdownOption","handleDropdownOptionEdit","specialization","handleDeleteSpecializationClick","SpecializationGroupDropdownPreview","sortSpecializations","handleSpecializationGroupEdit","handleAddSpecializationClick","handleDeleteSpecializationGroupClick","SpecializationDropdownOption_SpecializationDropdownOption","ConceptEventTypeDropdown","eventTypes","currentType","SqlSetRow","renderSpecializationData","spcGrps","handleDropdownToggleClick","SpecializationGroupDropdownPreview_SpecializationGroupDropdownPreview","handleSqlSetEdit","handleAddSpecializationGroupDropdownClick","handleSqlSetDeleteClick","snapshot","currentEventType","sqlFieldEvent","ConceptEventTypeDropdown_ConceptEventTypeDropdown","SqlSetEditor","bottomDivRef","currentSqlSetsAreValid","_arr2","_i2","_arr3","_i3","handleAddSqlSetClick","handleUndoChangesClick","handleSaveChangesClick","handleBackToConceptEditorClick","CONCEPTS","SqlSetRow_SqlSetRow","getContent","activePane","ConceptEditor_ConceptEditor_ConceptEditor","SqlSetEditor_SqlSetEditor_SqlSetEditor","DATASETS","DatasetEditor_DatasetEditor_DatasetEditor","NETWORK","NetworkAndIdentityEditor_NetworkAndIdentityEditor_NetworkAndIdentityEditor","getRoutes","tileUri","routes","path","render","FindPatients_FindPatients_FindPatients","containers_Visualize_Visualize","containers_PatientList_PatientList","containers_Map_LeafMap","containers_Admin_AdminPanel","subRoutes","RECEIVE_ID_TOKEN","FAILURE_ID_TOKEN","RECEIVE_AUTH_CONFIG","receiveAuthConfig","receiveIdToken","failureIdToken","setIdTokenAndDates","setAuthConfig","defaultNetworkPatientListState","multiRowCount","singletonRowCount","defaultPatientListState","setPatientListDatasetState","action","network","copy","ConceptExtensionType","defaultVisualizationState","1-9","10-17","18-24","25-34","35-44","45-54","55-64","65-74","75-84","<1",">84","setNetworkCohortVisualization","networkCohort","defaultCountState","setCohortCountState","clone","recalculateCohortCount","networkCohortCount","aggCount","newAggCount","SavedQuery","ExtensionConceptsWebWorker","buildSavedCohortTree","savedQueries","searchSavedCohorts","getSavedQueries","getSavedQueryContext","saveQueryHomeNode","saveQueryFedNode","deleteSavedQuery","query","force","preflightSavedQuery","resourceRef","getQueriesAsConcepts","_ref13","_x19","deserialize","_ref14","queryDefJson","deser","resRef","parse","handleDate","extensionTree","_x20","_x21","dateStr","loadSavedQuery","_ref15","queryResp","queryRaw","_x22","_x23","hasRecursiveDependency","_ref16","_callee10","curr","dependents","_context10","queryPreflight","_x24","deriveSavedQuery","currentUiQuery","_ref17","homeNodeCount","saved","owner","getSavedQuery","setCurrentQuery","addSavedQuery","openSavedQuery","requestQuerySave","_state$queries","_runAfterSave","recursiveDependancy","newQueryConcepts","_info","runAfterSave","setRunAfterSave","deleteSavedQueryAndCohort","user","homeNode","deleted","removeSavedQueries","nonOwners","cnt","updateSavedChangeId","defaultCohortState","resetCohorts","defaultConceptsState","getAncestors","cache","updateChain","addConcepts","cons","par1","par2","par3","defaultGeneralUiState","cohortCountBox","boxMinimized","boxVisible","infoButtonVisible","confirmationModal","informationModal","showMyLeafModal","showSaveQueryPane","centerOfUS","defaultBounds","LatLngBounds","defaultMapState","center","defaultRespondersState","toggleEnabled","newResponderState","RecencyFilterType","RuntimeMode","defaultPanelState","defaultPanels","defaultDateFilter","addSubPanelIfNeeded","updatePanelItems","newpanels","injectChildrenOnDrop","hasPi","resetSubPanelIndexes","newSelected","defaultQueriesState","currentChangeId","lastSavedChangeId","AuthMechanismType","fetchHomeIdentityAndResponders","runtime","Gateway","fetchResponderIdentity","attestAndLoadSession","homeBase","exportOptResponse","datasetsCategorized","savedCohorts","savedCohortConcepts","setSessionLoadState","submitAttestation","setSessionContext","exportOptions","completeAttestation","handleSessionReload","errorAttestation","refreshSession","saveSessionAndLogout","logout","logoutUri","loggedOut","mechanism","Unsecured","logoutURI","nonce","sessionLoadDisplay","sessionLoadProgressPercent","parsed","getPrevSession","diffMinutes","diffDisplay","SessionType","defaultDatasetsState","SELECT_FROM_SPLITTER","BRACKETS","LEFT_PAREN_REGEX","RIGHT_PAREN_REGEX","getSqlColumns","removeParens","tokens","aliased","outside","parenCnt","getShapeColumns","sqlColumns","Dynamic","getDefaultIdentity","Full","secondaryColor","rootReducer","combineReducers","setPerson","setEncounter","fieldEncounterId","uneditedEndpoints","uneditedSets","newPanel","newPanelItem","setAdminCurrentUserConcept","setExampleSql","deleteAdminConceptFromCache","clear","setAdminConceptSqlSets","mappedSets","setAdminUneditedConceptSqlSet","savedOnly","undoAdminConceptSqlSetChanges","setAdminConceptSqlSetUnchanged","setAdminConceptSpecializationGroups","uneditedSet","uneditedPrevSet","newUneditedSet","syncAdminConceptSpecializationGroupUnsavedWithSaved","uneditedGrp","prevSpc","newUneditedGrp","syncAdminConceptSpecializationUnsavedWithSaved","setAdminConceptEvents","uneditedEvent","unedited","setAdminPanelCurrentDataset","setAdminPanelDemographicsDataset","_getShapeColumns","setAdminPanelDatasetShape","setAdminPanelDatasetSql","setAdminDatasetQueryCategories","uneditedCategory","newCohort","registerCohorts","startCountQuery","finishCountQuery","errorCohortCount","stateClone","cancelCountQuery","NOT_IMPLEMENTED","cohortCountNotImplemented","startDemographicQuery","finishDemographicQuery","errorCohortDemographics","setAggregateCohortVisualization","setPatientList","setPatientListNonInteractive","toggleColumn","setPagination","newNetworkState","fetchingDataset","multirowDs","setNetworkPatientListDatasetReceived","setNetworkPatientListDatasetFailure","setNetworkPatientListDatasetNotImplemented","equivalentHintTerm","sendSearch","equivalentHint","setEquivalentSearchTerm","childConcept","requestSearchTree","receiveSearchTree","combined","renderedDrillTreeConcepts","setExtensionConcepts","extensionConcept","setExtensionConcept","removeExtensionConcept","ext","pre","merged","oldParent","unshift","setDatasetsSearchTerm","setDatasetsSearchTermResult","displayCat","oldCategory","ord","oldDs","routeConfig","onClickOkay","browser","newView","setPanelFilters","newpanel","updatePanel","eps","setResponderError","changeId","q","addSavedQueries","hasAttested","isSubmittingAttestation","loadingDisplay","loadingProgressPercent","receiveAttestationConfirmation","setContext","setError","timer","AttestationConfirmation","confirmationClass","useDisplay","sessionType","Research","phiDisplay","handleGoBackClick","handleIAgreeClick","AttestationRow","AttestationContent","showPhiTypeRow","_this$props$parentSta","parentState","documentationStatusSelected","hasApprovedIrb","hasApprovedQi","allowPhiIdentified","setUseTypeButtonClass","sessionTypeSelected","setPhiTypeButtonClass","_this$props$parentSta2","identificationTypeSelected","setDocumentationApprovedClass","hasApproval","approved","handleApprovalTypeClick","handleUseTypeClick","handleDocumentationTitleChange","handleDocumentationExpDateChange","handleDocumentationInstitutionChange","handlePhiTypeClick","documentationExpDateString","contentClass","AttestationRow_AttestationRow","QualityImprovement","for","BrowserError","Attestation","defaultDocumentation","handleSessionTypeClick","handleIdentificationTypeClick","handleConfirmGoBackClick","handleConfirmIAgreeClick","expDate","dateTest","verOffset","ix","nAgt","navigator","userAgent","browserName","Other","fullVersion","appVersion","majorVersion","Opera","InternetExplorer","Edge","Chrome","Safari","Firefox","getBrowser","hasUserIdToken","authError","sessionError","browserError","showConfirmation","showContent","fade","keyboard","wrapClassName","BrowserError_BrowserError","AttestationContent_AttestationContent","AttestationConfirmation_AttestationConfirmation","CohortCountQuerySites","totalSites","completedSites","CohortCountQueryTimer","tick","elapsed","countState","clearInterval","setInterval","secondsDisplay","toFixed","CohortCountQueryDetail","CohortCountQuerySites_CohortCountQuerySites","CohortCountQueryTimer_CohortCountQueryTimer","isMounted","CohortSql","copyTimeoutMs","handleCopyClick","copied","copyText","copyClass","containerStyle","marginLeft","padding","headerStyle","innerStyle","react_copy_to_clipboard_lib_default","CohortCountSiteDetail","toggleSql","showSql","handleClickShowSql","displayData","xMax","inProgress","complete","inError","couldntRunQuery","CohortSql_CohortSql","CohortCountSiteContainer","sites","site","CohortCountSiteDetail_CohortCountSiteDetail","CohortCountBox","timeoutMs","timeout","clicked","hideCountBoxOnTimeout","minimized","handleShowDetailClick","showDetail","CohortCountQueryDetail_CohortCountQueryDetail","CohortCountSiteContainer_CohortCountSiteContainer","CohortSummary","prevCount","cohortCountBoxStatesAreSame","ccb1","ccb2","toggleCohortCountBox","handleInfoBoxClick","setCohortCountBoxFocus","countBox","currentQuery","infoBoxClasses","handleStartNewQueryClick","startNewQuery","handleLogoutClick","handleMySavedQueriesClick","resps","ni","containers_Header_CohortSummary","SavedQueriesTable","handleDeleteQueryClick","handleOpenQueryClick","headerClass","openButtonClass","delButtonClass","MyLeafModal","handleCloseClick","tabs","activeTab","tabId","SavedQueriesTable_SavedQueriesTable","RightPaneSlider","overlay","inactivityTimer","sessionTimer","SaveQueryPanel","saveCurrentQuery","categoryError","nameError","handleQueryNameChange","handleQueryCategoryChange","handleQueryDescriptionChange","handleCancelClick","nameClasses","catClasses","namePlaceholder","catPlaceholder","RightPaneSlider_RightPaneSlider_RightPaneSlider","autoComplete","SidebarTab","toggleTooltip","tooltipOpen","selectable","currentAdminPane","autohide","placement","Sidebar","handleTabClick","activeIndex","cohortLoaded","SidebarTab_SidebarTab","InformationModal","handleClickOkay","ConfirmationModal","handleClickCancel","handleClickNo","handleClickYes","NoClickModal","hideTimeoutOnCompleteMs","getModalBody","noclickState","HelpButton","help","email","uri","SideNotification","App","sessionTokenRefreshPaddingMinutes","heartbeatCheckIntervalSeconds","lastHeartbeat","handleBrowserHeartbeat","now","handleActivity","sessionContext","inactivityTimeoutMinutes","reason","handleSessionTokenRefresh","containers_Attestation_Attestation","containers_CohortCountBox_CohortCountBox","src_containers_Header_Header","Sidebar_Sidebar_Sidebar","InformationModal_InformationModal","ConfirmationModal_ConfirmationModal","NoClickModal_NoClickModal_NoClickModal","HelpButton_HelpButton_HelpButton","SideNotification_SideNotification_SideNotification","containers_SaveQueryPanel_SaveQueryPanel","containers_MyLeafModal_MyLeafModal","diffMs","store","createStore","composeWithDevTools","applyMiddleware","thunkMiddleware","Root","es","lib","backend","HTML5Backend","src_containers_App","ReactDOM","Root_Root","D2R","PI","R2D","Coord","lon","prototype","view","String","antipode","anti_lat","anti_lon","LineString","move_to","properties","json","geometry","coordinates","multiline","wkt","wkt_string","collect","Error","z","pow","sin","cos","asin","sqrt","interpolate","A","B","atan2","npoints","first_pass","delta","step","pair","bHasBigDiff","dfMaxSmallDiffLong","dfDateLineOffset","offset","dfLeftBorderX","dfRightBorderX","dfDiffSpace","dfPrevX","dfX","dfDiffLong","poMulti","poNewLS","dfX0","dfX1","dfY1","dfX2","dfY2","tmpX","tmpY","dfRatio","dfY","poNewLS0","l","m","points","j0","module","exports"],"mappings":"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","file":"static/js/main.e4d464e7.chunk.js","sourcesContent":["/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport { PatientListDatasetQuery, CategorizedDatasetRef } from \"../patientList/Dataset\";\r\nimport { RouteConfig } from \"../../config/routes\";\r\n\r\n\r\nexport enum Routes {\r\n FindPatients = 1,\r\n Map = 2,\r\n Visualize = 3,\r\n PatientList = 4,\r\n AdminPanel = 5\r\n}\r\n\r\nexport enum NotificationStates {\r\n Working = 1,\r\n Complete = 2,\r\n Hidden = 3\r\n}\r\n\r\nexport interface CohortCountBoxState {\r\n boxVisible: boolean;\r\n boxMinimized: boolean;\r\n infoButtonVisible: boolean;\r\n}\r\n\r\nexport interface InformationModalState {\r\n body: any;\r\n header: string;\r\n onClickOkay?: any;\r\n show: boolean;\r\n}\r\n\r\nexport interface ConfirmationModalState {\r\n body: any;\r\n header: string;\r\n onClickNo: any;\r\n onClickYes: any;\r\n noButtonText: string;\r\n yesButtonText: string;\r\n show: boolean;\r\n}\r\n\r\nexport interface NoClickModalState {\r\n message?: string;\r\n state: NotificationStates;\r\n}\r\n\r\nexport interface SideNotificationState {\r\n message?: string;\r\n state: NotificationStates;\r\n}\r\n\r\nexport interface GeneralUiState {\r\n browser?: Browser;\r\n cohortCountBox: CohortCountBoxState;\r\n confirmationModal: ConfirmationModalState;\r\n currentRoute: Routes;\r\n informationModal: InformationModalState;\r\n noclickModal: NoClickModalState;\r\n routes: RouteConfig[];\r\n showMyLeafModal: boolean;\r\n showExportDataModal: boolean;\r\n showSaveQueryPane: boolean;\r\n sideNotification: SideNotificationState;\r\n}\r\n\r\nexport enum BrowserType { \r\n Chrome = 1,\r\n Edge = 2,\r\n Firefox = 3,\r\n InternetExplorer = 4,\r\n Opera = 5,\r\n Safari = 6,\r\n Other = 7\r\n}\r\n\r\nexport interface Browser {\r\n error?: boolean;\r\n majorVersion: number;\r\n type: BrowserType;\r\n version: string;\r\n}\r\n\r\n ","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport { Concept as AdminConcept, ConceptSqlSet, ConceptEvent } from '../admin/Concept';\r\nimport { Concept as UserConcept } from '../concept/Concept';\r\nimport { PanelFilter } from '../admin/PanelFilter';\r\nimport { AdminConfiguration } from '../admin/Configuration';\r\nimport { Panel } from '../panel/Panel';\r\nimport { AdminDatasetQuery, DatasetQueryCategory } from '../admin/Dataset';\r\nimport { AdminPanelPatientListColumnTemplate } from '../patientList/Column';\r\nimport { NetworkIdentity } from '../NetworkResponder';\r\nimport { NetworkEndpoint, Certificate } from '../admin/Network';\r\n\r\n\r\nexport enum AdminPanelLoadState {\r\n NOT_LOADED = 1,\r\n LOADING = 2,\r\n LOADED = 3,\r\n ERROR = 4,\r\n NOT_APPLICABLE = 5\r\n}\r\n\r\nexport enum AdminPanelPane {\r\n CONCEPTS = 1,\r\n SQL_SETS = 2,\r\n DATASETS = 3,\r\n NETWORK = 4\r\n}\r\n\r\nexport interface AdminConceptState {\r\n changed: boolean;\r\n concepts: Map;\r\n currentAdminConcept?: AdminConcept;\r\n currentUserConcept?: UserConcept;\r\n examplePanel: Panel;\r\n exampleSql: string;\r\n state: AdminPanelLoadState;\r\n}\r\n\r\nexport interface AdminConceptEventState {\r\n changed: boolean;\r\n events: Map;\r\n uneditedEvent?: ConceptEvent;\r\n}\r\n\r\nexport interface AdminPanelSqlSetState {\r\n changed: boolean;\r\n sets: Map;\r\n uneditedSets?: Map;\r\n}\r\n\r\nexport interface AdminPanelFilterState {\r\n changed: boolean;\r\n panelFilters: Map;\r\n}\r\n\r\nexport interface AdminDatasetState {\r\n changed: boolean;\r\n expectedColumns: AdminPanelPatientListColumnTemplate[];\r\n currentDataset?: AdminDatasetQuery;\r\n datasets: Map;\r\n demographicsDataset: AdminDatasetQuery;\r\n sqlColumns: Set;\r\n state: AdminPanelLoadState;\r\n}\r\n\r\nexport interface AdminDatasetQueryCategoryState {\r\n changed: boolean;\r\n categories: Map;\r\n uneditedCategory?: DatasetQueryCategory;\r\n}\r\n\r\nexport interface AdminNetworkAndIdentityState {\r\n changed: boolean;\r\n endpoints: Map;\r\n identity: NetworkIdentity;\r\n modal: AdminNetworkCertificateModalState;\r\n uneditedEndpoints: Map;\r\n uneditedIdentity: NetworkIdentity;\r\n}\r\n\r\nexport interface AdminNetworkCertificateModalState {\r\n cert?: Certificate;\r\n endpoint?: NetworkEndpoint;\r\n show: boolean;\r\n}\r\n\r\nexport default interface AdminState {\r\n activePane: AdminPanelPane;\r\n concepts: AdminConceptState;\r\n conceptEvents: AdminConceptEventState;\r\n configuration: AdminConfiguration;\r\n datasets: AdminDatasetState;\r\n datasetQueryCategories: AdminDatasetQueryCategoryState;\r\n networkAndIdentity: AdminNetworkAndIdentityState;\r\n panelFilters: AdminPanelFilterState;\r\n sqlSets: AdminPanelSqlSetState;\r\n state: AdminPanelLoadState;\r\n}","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport Axios from 'axios';\r\nimport jwt_decode from 'jwt-decode';\r\nimport { AuthConfig, DecodedIdToken, IdTokenDTO, UserContext } from '../models/Auth';\r\n\r\n/*\r\n * Return the id token key to look for\r\n * to retrieve a user token.\r\n */\r\nconst getIdTokenKey = (config: AuthConfig) => {\r\n return `__leaf_idToken_v${config.version}__`;\r\n};\r\n\r\n/*\r\n * Return the id token key to look for\r\n * to retrieve a user token.\r\n */\r\nconst decodeToken = (token: string): UserContext => {\r\n const decoded = jwt_decode(token) as DecodedIdToken;\r\n const roles = decoded['http://schemas.microsoft.com/ws/2008/06/identity/claims/role'];\r\n const fullname = decoded['http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name'];\r\n const nameSplit = fullname.split('@');\r\n let name = fullname;\r\n let scope = '';\r\n\r\n if (nameSplit.length === 2) {\r\n name = nameSplit[0];\r\n scope = nameSplit[1];\r\n }\r\n \r\n const ctx: UserContext = {\r\n expirationDate: new Date(decoded.exp * 1000),\r\n isAdmin: roles.indexOf('admin') > -1,\r\n isFederatedOkay: roles.indexOf('fed') > -1,\r\n isPhiOkay: roles.indexOf('phi') > -1,\r\n isSuperUser: roles.indexOf('super') > -1,\r\n issuer: decoded.iss,\r\n loginDate: new Date(decoded.iat * 1000),\r\n name,\r\n rawDecoded: decoded,\r\n roles,\r\n scope,\r\n token,\r\n version: decoded['leaf-version']\r\n }\r\n console.info(`Leaf server API running version ${ctx.version}`);\r\n console.log('User Token', ctx);\r\n return ctx;\r\n};\r\n\r\n/*\r\n * Delee the current IdToken from LocalStorage.\r\n */\r\nexport const clearCurrentUserToken = (config: AuthConfig) => {\r\n const idTokenKey = getIdTokenKey(config);\r\n window.localStorage.removeItem(idTokenKey);\r\n};\r\n\r\n/*\r\n * Return the id token key to look for\r\n * to retrieve a user token.\r\n */\r\nexport const getUserTokenAndContext = async (config: AuthConfig): Promise => {\r\n return new Promise( async (resolve, reject) => {\r\n const idTokenKey = getIdTokenKey(config);\r\n let token;\r\n let ctx;\r\n \r\n // Try to get from local storage\r\n token = window.localStorage.getItem(idTokenKey)!;\r\n if (token) {\r\n ctx = decodeToken(token);\r\n\r\n // If the date time is greater than now, use current\r\n if (ctx.expirationDate > new Date()) {\r\n return resolve(ctx);\r\n }\r\n }\r\n\r\n // Else phone home for a new one\r\n Axios.get('/api/user')\r\n .then(response => {\r\n const respData: IdTokenDTO = response.data;\r\n ctx = decodeToken(respData.idToken);\r\n\r\n // Add to local storage and return to caller\r\n window.localStorage.setItem(idTokenKey, ctx.token);\r\n resolve(ctx);\r\n })\r\n .catch(err => {\r\n reject(err);\r\n });\r\n });\r\n};\r\n\r\n/*\r\n * Return the configuration for this Leaf instance.\r\n */\r\nexport const getAuthConfig = async () => {\r\n const request = await Axios.get('/api/user/login/config');\r\n const config = request.data as AuthConfig;\r\n return config;\r\n};\r\n\r\n","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport Axios, { AxiosInstance } from 'axios';\r\n\r\nexport const HttpFactory = {\r\n authenticated(token?: string): AxiosInstance {\r\n return Axios.create({\r\n headers: {\r\n 'authorization': `Bearer ${token}`\r\n }\r\n });\r\n }\r\n};","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport { Panel } from \"../models/panel/Panel\";\r\nimport { SubPanel } from \"../models/panel/SubPanel\";\r\nimport { Concept } from \"../models/concept/Concept\";\r\nimport { PanelFilter } from \"../models/panel/PanelFilter\";\r\n\r\nexport const getPanelItemCount = (panels: Panel[]): number => { \r\n return panels.filter((p: Panel) => (p.subPanels.filter((s: SubPanel) => s.panelItems.length > 0)).length > 0).length;\r\n};\r\n\r\nexport const getEmbeddedQueries = (panels: Panel[]): Concept[] => {\r\n const embedded: Concept[] = [];\r\n for (const p of panels) {\r\n for (const sp of p.subPanels) {\r\n for (const pi of sp.panelItems) {\r\n if (isEmbeddedQuery(pi.concept.universalId)) {\r\n embedded.push(pi.concept);\r\n }\r\n }\r\n }\r\n }\r\n return embedded;\r\n};\r\n\r\nexport const isEmbeddedQuery = (universalId?: string): boolean => {\r\n const embeddedQueryUrn = 'urn:leaf:query:';\r\n if (!universalId) {\r\n return false;\r\n } else if (universalId!.startsWith(embeddedQueryUrn)) {\r\n return true;\r\n }\r\n return false;\r\n};\r\n\r\nexport const panelHasErrors = (): boolean => {\r\n const dateFilterErrors = document.querySelector('.panel-date-filtered .panel-item-not-encounter-based');\r\n const countFilterErrors = document.querySelector('.panel-count-filtered .panel-item-not-encounter-based');\r\n const seqFilterErrors = document.querySelector('.panel-sequential-join .panel-item-not-encounter-based');\r\n const eventTypeErrors = document.querySelector('.panel-item-invalid-eventid');\r\n if (dateFilterErrors || countFilterErrors || seqFilterErrors || eventTypeErrors) {\r\n return true;\r\n }\r\n return false;\r\n};\r\n\r\nexport const panelHasLocalOnlyConcepts = (panels: Panel[], panelFilters: PanelFilter[]): boolean => {\r\n for (const p of panels) {\r\n for (const sp of p.subPanels) {\r\n for (const pi of sp.panelItems) {\r\n if (!pi.concept.universalId) {\r\n return true;\r\n }\r\n }\r\n }\r\n }\r\n for (const f of panelFilters) {\r\n if (!f.concept.universalId) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n};","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport jwt_decode from 'jwt-decode';\r\nimport { AppState } from '../models/state/AppState';\r\nimport { AccessTokenDTO, Attestation, DecodedAccessToken, SessionContext, StoredSessionState } from '../models/Session';\r\nimport { HttpFactory } from './HttpFactory';\r\nimport { LogoutDTO } from '../models/Auth';\r\nimport { getPanelItemCount } from '../utils/panelUtils';\r\n\r\n/*\r\n * Decodes the session JWT to pull out server-sent\r\n * info on whether user is an admin, token lifespan, etc.\r\n */\r\nconst decodeToken = (token: string): SessionContext => {\r\n const decoded: DecodedAccessToken = jwt_decode(token);\r\n\r\n const ctx: SessionContext = {\r\n expirationDate: new Date(decoded.exp * 1000),\r\n issueDate: new Date(decoded.iat * 1000),\r\n rawDecoded: decoded,\r\n token\r\n }\r\n console.log('Session Token', ctx);\r\n return ctx;\r\n};\r\n\r\n/*\r\n * Requests initial session token and submits user attestation.\r\n */\r\nexport const getSessionTokenAndContext = async (state: AppState, attestation: Attestation) => {\r\n const http = HttpFactory.authenticated(state.auth.userContext!.token);\r\n\r\n const request = http.get('api/user/attest', {\r\n params: {\r\n 'documentation.expirationDate': attestation.documentation.expirationDate,\r\n 'documentation.institution': attestation.documentation.institution,\r\n 'documentation.title': attestation.documentation.title,\r\n ...attestation\r\n }\r\n });\r\n /*\r\n const request = http.get('api/user/attest', {\r\n params: {\r\n attestation\r\n }\r\n });\r\n */\r\n\r\n const response = await request;\r\n const respData = response.data as AccessTokenDTO;\r\n const ctx = decodeToken(respData.accessToken);\r\n return ctx;\r\n};\r\n\r\n/*\r\n * Requests, decodes, refreshes the current session token.\r\n */\r\nexport const refreshSessionTokenAndContext = (state: AppState) => {\r\n return new Promise( async (resolve, reject) => {\r\n try {\r\n const http = HttpFactory.authenticated(state.session.context!.token);\r\n const request = http.get('api/user/refresh');\r\n const response = await request;\r\n const respData = response.data as AccessTokenDTO;\r\n const ctx = decodeToken(respData.accessToken);\r\n resolve(ctx);\r\n } catch {\r\n saveSessionAndForceReLogin(state);\r\n }\r\n });\r\n};\r\n\r\n/*\r\n * Tells the server to blacklist this token, as the uses is logging out.\r\n */\r\nexport const logoutFromServer = async (state: AppState): Promise => {\r\n try {\r\n const http = HttpFactory.authenticated(state.auth.userContext!.token);\r\n const request = await http.post('api/user/logout');\r\n return request.data as LogoutDTO;\r\n } catch (err) {\r\n console.log(err);\r\n }\r\n return;\r\n};\r\n\r\n/*\r\n * Save current query state in sessionStorage and force\r\n * user to re-login to the current app URI.\r\n */\r\nexport const saveSessionAndForceReLogin = (state: AppState) => {\r\n const currState = getStoredSessionObject(state);\r\n const key = getSessionStorageKey(state);\r\n const hasData = getPanelItemCount(state.panels) > 0;\r\n \r\n if (hasData) {\r\n sessionStorage.setItem(key, JSON.stringify(currState));\r\n }\r\n window.location.reload(true);\r\n};\r\n\r\n/*\r\n * Retrieve previously stored session object, if available.\r\n */\r\nexport const getPrevSession = (state: AppState) => {\r\n const key = getSessionStorageKey(state);\r\n const prev = sessionStorage.getItem(key);\r\n if (prev) { \r\n const parsed = JSON.parse(prev) as StoredSessionState;\r\n for (const panel of parsed.panels) {\r\n if (panel.dateFilter.start.date) { panel.dateFilter.start.date = new Date(panel.dateFilter.start.date); }\r\n if (panel.dateFilter.end.date) { panel.dateFilter.end.date = new Date(panel.dateFilter.end.date); }\r\n }\r\n sessionStorage.removeItem(key);\r\n return parsed;\r\n }\r\n return;\r\n};\r\n\r\n/*\r\n * The browser can cache the Leaf page even if the IDP has timed out the\r\n * session token, whereby the initial login will appear to fail because the /config\r\n * initial call is not allowed by the IDP. Instead of confusing the user and forcing\r\n * her to refresh the browser, set a session storage key that signals it's okay to \r\n * try a refresh once.\r\n */\r\nexport const attemptLoginRetryIfPossible = () => {\r\n const key = getSessionRetryKey();\r\n const retry = sessionStorage.getItem(key);\r\n if (!retry) {\r\n sessionStorage.setItem(key, 'X');\r\n window.location.reload(true);\r\n } else {\r\n sessionStorage.removeItem(key);\r\n }\r\n};\r\n\r\n/*\r\n * Creates a session object to place in Session Storage\r\n * and allow the user to later reload most of app state if\r\n * they are logged out.\r\n */\r\nconst getStoredSessionObject = (state: AppState): StoredSessionState => {\r\n return { \r\n queries: state.queries,\r\n panels: state.panels,\r\n panelFilters: state.panelFilters.filter((f) => f.isActive),\r\n timestamp: new Date().getTime() / 1000\r\n };\r\n};\r\n\r\nconst getSessionStorageKey = (state: AppState) => `__leaf_session_v${state.auth.config!.version}__`;\r\nconst getSessionRetryKey = () => `__leaf_session_retry__`;","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport { AppState } from '../../models/state/AppState';\r\nimport { HttpFactory } from '../HttpFactory';\r\nimport { SqlConfiguration } from '../../models/admin/Configuration';\r\n\r\n/*\r\n * Gets all current Concept SQLSets.\r\n */ \r\nexport const getSqlConfiguration = async (state: AppState): Promise => {\r\n const { token } = state.session.context!;\r\n const http = HttpFactory.authenticated(token);\r\n const resp = await http.get('api/admin/config/sql');\r\n return resp.data as SqlConfiguration;\r\n};\r\n","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport { CohortStateType } from '../state/CohortState';\r\nimport { PatientListColumn, PatientListColumnId, PatientListColumnTemplate, ValueByColumnKey } from './Column';\r\nimport { PatientListRowDTO } from './Patient';\r\nimport { DateBoundary } from '../panel/Date';\r\n\r\nexport type PatientListDatasetId = string;\r\nexport type SingletonDataByDatasetKey = Map;\r\nexport type MultirowDataByDatasetKey = Map;\r\n\r\n/*\r\n * Type of summary dataset, used for description to user.\r\n */\r\nexport enum PatientListDatasetSummaryType {\r\n NonQuantititive = 1,\r\n Quantitative = 2\r\n}\r\n\r\n/*\r\n * Shape of the dataset. Largely aligns with\r\n * FHIR resources https://www.hl7.org/fhir/resourcelist.html\r\n * as flattened JSON objects. These tell the app\r\n * what columns to expect and how to compute summary statistics.\r\n */\r\nexport enum PatientListDatasetShape {\r\n Dynamic = -1,\r\n Summary = 0,\r\n Observation = 1,\r\n Encounter = 2,\r\n Demographics = 3,\r\n Condition = 4,\r\n Procedure = 5,\r\n Immunization = 6,\r\n Allergy = 7,\r\n MedicationRequest = 8,\r\n MedicationAdministration = 9\r\n}\r\n\r\n/*\r\n * Actual object returned from server following dataset request.\r\n * [results] are a patientId-keyed array of arrays, and [schema]\r\n * are the fields returned from the DB.\r\n */\r\nexport interface PatientListDatasetDTO {\r\n results: PatientListDatasetResults;\r\n schema: PatientListDatasetSchema;\r\n}\r\n\r\ninterface PatientListDatasetSchema {\r\n fields: string[],\r\n shape: PatientListDatasetShape;\r\n}\r\n\r\ninterface PatientListDatasetResults {\r\n [p: string]: PatientListRowDTO[];\r\n}\r\n\r\n/*\r\n * A transform of the Dataset for REDCap conversion. Used on Export event.\r\n */\r\nexport interface PatientListDatasetExport {\r\n columns: PatientListColumn[];\r\n data: object[];\r\n datasetId: PatientListDatasetId;\r\n dateValueColumn?: string;\r\n isMultirow: boolean;\r\n maxRows: number;\r\n}\r\n\r\n/*\r\n * A description of the shape and type of dataset, shown to the user\r\n * as options in the patient list. These are loaded en masse on login.\r\n */\r\nexport interface PatientListDatasetQueryDTO {\r\n id: string;\r\n category: string;\r\n description?: string;\r\n name: string;\r\n shape: PatientListDatasetShape;\r\n tags: string[];\r\n universalId?: string;\r\n}\r\n\r\nexport interface PatientListDatasetQuery extends PatientListDatasetQueryDTO {\r\n unsaved?: boolean;\r\n}\r\n\r\n/*\r\n * The 'true' dataset object sent to the web worker to cache results\r\n * for display in the UI. [data] is the actual rows and schema sent from\r\n * the DB, and [definition] is metadata used for displaying in the UI,\r\n * such as column names and their order.\r\n */\r\nexport interface PatientListDataset extends PatientListDatasetQueryDTO {\r\n data: PatientListDatasetDTO;\r\n definition: PatientListDatasetDefinition;\r\n}\r\n\r\n/*\r\n * Template for defining datasets. These are the foundation for\r\n * definitions, which tell the client what kind of columns and shape\r\n * to expect for a given dataset.\r\n */\r\nexport interface PatientListDatasetDefinitionTemplate {\r\n columns: Map;\r\n dateValueColumn?: string;\r\n multirow: boolean;\r\n numericValueColumn?: string;\r\n shape: PatientListDatasetShape;\r\n stringValueColumn?: string;\r\n};\r\n\r\n/*\r\n * The actual definition object. This is an instantiation of the template,\r\n * with columns not returned from the server removed, and addtional\r\n * metadata added (such as display name, id, etc.).\r\n */\r\nexport interface PatientListDatasetDefinition extends PatientListDatasetDefinitionTemplate {\r\n category?: string;\r\n columns: Map;\r\n dateBounds?: DateBoundary;\r\n displayName: string;\r\n id: PatientListDatasetId;\r\n responderStates: Map;\r\n summaryType?: PatientListDatasetSummaryType;\r\n totalRows?: number;\r\n};\r\n\r\n/*\r\n * Tokenized ref to a dataset used internally by\r\n * the dataset search web worker.\r\n */\r\nexport interface TokenizedDatasetRef {\r\n id: PatientListDatasetId;\r\n dataset: PatientListDatasetQuery;\r\n token: string;\r\n tokenArray: string[];\r\n}\r\n\r\n/*\r\n * Cache index of the preceding and following dataset IDs currently shown.\r\n */\r\nexport interface PatientListDatasetQueryIndex {\r\n nextId: string;\r\n prevId: string;\r\n}\r\n\r\n/*\r\n * Datasets organized by category, used for display in DatasetContainer component.\r\n */\r\nexport interface CategorizedDatasetRef {\r\n category: string;\r\n datasets: Map;\r\n}\r\n\r\n/*\r\n * Return object from the dataset search web worker.\r\n */\r\nexport interface DatasetSearchResult {\r\n categories: Map;\r\n displayOrder: Map;\r\n}","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport { SqlConfiguration } from \"../../models/admin/Configuration\";\r\nimport { AppState } from \"../../models/state/AppState\";\r\nimport { getSqlConfiguration } from \"../../services/admin/configApi\";\r\n\r\nexport const SET_ADMIN_SQL_CONFIGURATION = 'SET_ADMIN_SQL_CONFIGURATION';\r\n\r\nexport interface AdminConfigurationAction {\r\n sqlConfig?: SqlConfiguration;\r\n type: string;\r\n}\r\n\r\n// Asynchronous\r\n/*\r\n * Fetch SQL Configuration.\r\n */\r\nexport const getAdminSqlConfiguration = () => {\r\n return async (dispatch: any, getState: () => AppState) => {\r\n const state = getState();\r\n const config = await getSqlConfiguration(state);\r\n dispatch(setAdminSqlConfiguration(config));\r\n };\r\n};\r\n\r\n// Synchronous\r\nconst setAdminSqlConfiguration = (sqlConfig: SqlConfiguration) => {\r\n return {\r\n sqlConfig,\r\n type: SET_ADMIN_SQL_CONFIGURATION\r\n };\r\n};","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport { AppState } from '../../models/state/AppState';\r\nimport { HttpFactory } from './../HttpFactory';\r\nimport { SpecializationGroup, SpecializationGroupDTO, Specialization } from '../../models/admin/Concept';\r\n\r\n/*\r\n * Gets all current Concept SpecializationGroups.\r\n */ \r\nexport const getSpecializationGroups = async (state: AppState): Promise => {\r\n const { token } = state.session.context!;\r\n const http = HttpFactory.authenticated(token);\r\n const resp = await http.get('api/admin/specializationgroup');\r\n const grpDto = resp.data as SpecializationGroupDTO[];\r\n const grps: SpecializationGroup[] = [];\r\n for (const grp of grpDto) {\r\n grps.push(fromDTO(grp));\r\n }\r\n return grps;\r\n};\r\n\r\n/*\r\n * Updates an existing Concept SpecializationGroup.\r\n */ \r\nexport const updateSpecializationGroup = async (state: AppState, grp: SpecializationGroup): Promise => {\r\n const { token } = state.session.context!;\r\n const http = HttpFactory.authenticated(token);\r\n const resp = await http.put(`api/admin/specializationgroup/${grp.id}`, toDTO(grp));\r\n\r\n // Updates don't actually change the Specialization children,\r\n // so just use the originals\r\n const newGrp = fromDTO(resp.data) as SpecializationGroup;\r\n newGrp.specializations = grp.specializations\r\n return newGrp;\r\n};\r\n\r\n/*\r\n * Creates a new Concept SpecializationGroup.\r\n */ \r\nexport const createSpecializationGroup = async (state: AppState, grp: SpecializationGroup): Promise => {\r\n const { token } = state.session.context!;\r\n const http = HttpFactory.authenticated(token);\r\n const resp = await http.post(`api/admin/specializationgroup`, toDTO(grp));\r\n return fromDTO(resp.data);\r\n};\r\n\r\n/*\r\n * Deletes an existing Concept SpecializationGroup.\r\n */ \r\nexport const deleteSpecializationGroup = async (state: AppState, grp: SpecializationGroup) => {\r\n const { token } = state.session.context!;\r\n const http = HttpFactory.authenticated(token);\r\n return http.delete(`api/admin/specializationgroup/${grp.id}`);\r\n};\r\n\r\n/*\r\n * Turns a normal Specialization Group into a DTO.\r\n */ \r\nconst fromDTO = (dto: SpecializationGroupDTO): SpecializationGroup => {\r\n const map: Map = new Map();\r\n dto.specializations.forEach((s) => {\r\n s.sqlSetId = dto.sqlSetId;\r\n map.set(s.id, s);\r\n });\r\n return { \r\n ...dto, \r\n changed: false,\r\n unsaved: false,\r\n specializations: map \r\n };\r\n};\r\n\r\n/*\r\n * Turns a DTO into a normal Specialization Group.\r\n */ \r\nconst toDTO = (grp: SpecializationGroup): SpecializationGroupDTO => {\r\n const dto: SpecializationGroupDTO = {\r\n id: grp.id,\r\n sqlSetId: grp.sqlSetId,\r\n specializations: [],\r\n uiDefaultText: grp.uiDefaultText\r\n };\r\n grp.specializations.forEach((s) => {\r\n const spc: any = {\r\n id: null,\r\n orderId: s.orderId,\r\n sqlSetWhere: s.sqlSetWhere,\r\n specializationGroupId: s.specializationGroupId,\r\n uiDisplayText: s.uiDisplayText,\r\n universalId: s.universalId\r\n };\r\n dto.specializations.push(spc)\r\n });\r\n return dto;\r\n};","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport { AppState } from '../../models/state/AppState';\r\nimport { HttpFactory } from './../HttpFactory';\r\nimport { ConceptSqlSet, ConceptSqlSetDTO } from '../../models/admin/Concept';\r\nimport { getSpecializationGroups } from './specializationGroupApi';\r\n\r\n/*\r\n * Gets all current Concept SQLSets.\r\n */ \r\nexport const getSqlSets = async (state: AppState): Promise => {\r\n const { token } = state.session.context!;\r\n const http = HttpFactory.authenticated(token);\r\n const resp = await http.get('api/admin/sqlset');\r\n const sets = resp.data as ConceptSqlSet[];\r\n const groups = await getSpecializationGroups(state);\r\n const setIdxMap: Map = new Map();\r\n\r\n /*\r\n * Map index of each set for reference.\r\n */\r\n for (let i = 0; i < sets.length; i++) {\r\n sets[i].specializationGroups = new Map();\r\n const set = sets[i];\r\n setIdxMap.set(set.id, i);\r\n }\r\n \r\n /*\r\n * Update each set directly from index crosswalk.\r\n */\r\n for (const grp of groups) {\r\n const idx = setIdxMap.get(grp.sqlSetId)!;\r\n grp.specializations.forEach((s) => s.sqlSetId = grp.sqlSetId);\r\n if (idx !== undefined) {\r\n const set = sets[idx];\r\n set.specializationGroups.set(grp.id, grp);\r\n }\r\n }\r\n\r\n return sets;\r\n};\r\n\r\n/*\r\n * Updates an existing Concept SQLSet.\r\n */ \r\nexport const updateSqlSet = async (state: AppState, set: ConceptSqlSet): Promise => {\r\n const { token } = state.session.context!;\r\n const http = HttpFactory.authenticated(token);\r\n const resp = await http.put(`api/admin/sqlset/${set.id}`, set);\r\n return fromDTO(resp.data, set);\r\n};\r\n\r\n/*\r\n * Creates a new Concept SQLSet.\r\n */ \r\nexport const createSqlSet = async (state: AppState, set: ConceptSqlSet): Promise => {\r\n const { token } = state.session.context!;\r\n const http = HttpFactory.authenticated(token);\r\n const resp = await http.post(`api/admin/sqlset`, set );\r\n return fromDTO(resp.data, set);\r\n};\r\n\r\n/*\r\n * Deletes an existing Concept SQLSet.\r\n */ \r\nexport const deleteSqlSet = async (state: AppState, set: ConceptSqlSet) => {\r\n const { token } = state.session.context!;\r\n const http = HttpFactory.authenticated(token);\r\n return http.delete(`api/admin/sqlset/${set.id}`);\r\n};\r\n\r\nconst fromDTO = (dto: ConceptSqlSetDTO, prev: ConceptSqlSet): ConceptSqlSet => {\r\n return { \r\n ...dto,\r\n changed: false,\r\n unsaved: false,\r\n specializationGroups: prev.specializationGroups \r\n };\r\n};","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport { AppState } from '../../models/state/AppState';\r\nimport { HttpFactory } from './../HttpFactory';\r\nimport { ConceptEvent } from '../../models/admin/Concept';\r\n\r\n/*\r\n * Gets all current Concept Events.\r\n */ \r\nexport const getConceptEvents = async (state: AppState): Promise => {\r\n const { token } = state.session.context!;\r\n const http = HttpFactory.authenticated(token);\r\n const resp = await http.get('api/admin/conceptevent');\r\n const evs = resp.data as ConceptEvent[];\r\n return evs;\r\n};\r\n\r\n/*\r\n * Updates an existing Concept Event.\r\n */ \r\nexport const updateConceptEvent = async (state: AppState, ev: ConceptEvent): Promise => {\r\n const { token } = state.session.context!;\r\n const http = HttpFactory.authenticated(token);\r\n const resp = await http.put(`api/admin/conceptevent/${ev.id}`, ev);\r\n const updatedEv = resp.data as ConceptEvent;\r\n return updatedEv;\r\n};\r\n\r\n/*\r\n * Creates a new Concept Event.\r\n */ \r\nexport const createConceptEvent = async (state: AppState, ev: ConceptEvent): Promise => {\r\n const { token } = state.session.context!;\r\n const http = HttpFactory.authenticated(token);\r\n const resp = await http.post(`api/admin/conceptevent`, {\r\n ...ev,\r\n id: null\r\n });\r\n const newEv = resp.data as ConceptEvent;\r\n return newEv;\r\n};\r\n\r\n/*\r\n * Deletes an existing Concept Event.\r\n */ \r\nexport const deleteConceptEvent = async (state: AppState, ev: ConceptEvent) => {\r\n const { token } = state.session.context!;\r\n const http = HttpFactory.authenticated(token);\r\n return http.delete(`api/admin/conceptevent/${ev.id}`);\r\n};\r\n","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport sqlFormatter from 'sql-formatter';\r\n\r\nconst formatSql = (rawSql: string) => {\r\n return sqlFormatter.format(rawSql, { indent: ' '});\r\n}\r\n\r\nconst formatMultipleSql = (rawSql: string[]) => {\r\n return rawSql\r\n .map((s: string) => formatSql(s))\r\n .join('/n /n ****** /n /n');\r\n}\r\n\r\nexport default formatSql;\r\nexport { formatMultipleSql };","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport { AppState } from \"../../models/state/AppState\";\r\nimport { SpecializationGroup, SpecializationGroupDeleteResponse } from \"../../models/admin/Concept\";\r\nimport { getSpecializationGroups, updateSpecializationGroup, deleteSpecializationGroup, createSpecializationGroup } from \"../../services/admin/specializationGroupApi\";\r\nimport { setNoClickModalState, showInfoModal, setSideNotificationState } from \"../generalUi\";\r\nimport { NotificationStates, InformationModalState } from \"../../models/state/GeneralUiState\";\r\n\r\nexport const SET_ADMIN_SPECIALIZATION_GROUPS = 'SET_ADMIN_SPECIALIZATION_GROUPS';\r\nexport const REMOVE_ADMIN_SPECIALIZATION_GROUP = 'REMOVE_ADMIN_SPECIALIZATION_GROUP';\r\nexport const SYNC_ADMIN_SPECIALIZATION_GROUP_UNSAVED_WITH_SAVED = 'SYNC_ADMIN_SPECIALIZATION_GROUP_UNSAVED_WITH_SAVED';\r\n\r\nexport interface AdminSpecializationGroupAction {\r\n group?: SpecializationGroup;\r\n groups?: SpecializationGroup[];\r\n prevGroup?: SpecializationGroup;\r\n type: string;\r\n}\r\n\r\n// Asynchronous\r\n/*\r\n * Save or update a Specialization Group, depending on\r\n * if it is preexisting or new.\r\n */\r\nexport const saveOrUpdateAdminConceptSpecializationGroup = async (grp: SpecializationGroup, dispatch: any, state: AppState): Promise => {\r\n let newGrp = null;\r\n if (grp.unsaved) {\r\n newGrp = await createSpecializationGroup(state, grp);\r\n } else {\r\n newGrp = await updateSpecializationGroup(state, grp);\r\n }\r\n dispatch(syncAdminSpecializationGroupUnsavedWithSaved(grp, newGrp));\r\n return newGrp;\r\n};\r\n\r\n/*\r\n * Delete a existing Concept Specialization Group.\r\n */\r\nexport const deleteAdminConceptSpecializationGroup = (group: SpecializationGroup) => {\r\n return async (dispatch: any, getState: () => AppState) => {\r\n try {\r\n const state = getState();\r\n dispatch(setNoClickModalState({ message: \"Deleting\", state: NotificationStates.Working }));\r\n deleteSpecializationGroup(state, group)\r\n .then(\r\n response => {\r\n dispatch(removeAdminConceptSpecializationGroup(group));\r\n dispatch(setSideNotificationState({ state: NotificationStates.Complete, message: 'Specialization Group Deleted' }));\r\n }, error => {\r\n const info: InformationModalState = {\r\n body: \"\",\r\n header: \"Error Deleting Specialization Group\",\r\n show: true\r\n };\r\n if (error.response.status === 409) {\r\n const conflicts = error.response.data as SpecializationGroupDeleteResponse;\r\n const ex = conflicts.concepts[0];\r\n info.body = \r\n `There are ${conflicts.conceptCount} Concept(s) which depend on this Specialization Group, ` +\r\n `including \"${ex.uiDisplayName}\" (Id \"${ex.id}\"). Please delete these first.`;\r\n } else {\r\n info.body = \r\n \"An error occurred while attempting to delete the Concept Specialization Group. \" +\r\n \"Please see the Leaf error logs for details.\";\r\n }\r\n dispatch(showInfoModal(info));\r\n }).then(() => dispatch(setNoClickModalState({ state: NotificationStates.Hidden })));\r\n } catch (err) {\r\n console.log(err);\r\n }\r\n }\r\n};\r\n\r\n// Synchronous\r\nexport const setAdminConceptSpecializationGroup = (group: SpecializationGroup): AdminSpecializationGroupAction => {\r\n return {\r\n groups: [ group ],\r\n type: SET_ADMIN_SPECIALIZATION_GROUPS\r\n };\r\n};\r\n\r\nexport const setAdminConceptSpecializationGroups = (groups: SpecializationGroup[]): AdminSpecializationGroupAction => {\r\n return {\r\n groups,\r\n type: SET_ADMIN_SPECIALIZATION_GROUPS\r\n };\r\n};\r\n\r\nexport const removeAdminConceptSpecializationGroup = (group: SpecializationGroup): AdminSpecializationGroupAction => {\r\n return {\r\n group,\r\n type: REMOVE_ADMIN_SPECIALIZATION_GROUP\r\n };\r\n};\r\n\r\nexport const syncAdminSpecializationGroupUnsavedWithSaved = (prevGroup: SpecializationGroup, group: SpecializationGroup): AdminSpecializationGroupAction => {\r\n return {\r\n prevGroup,\r\n group,\r\n type: SYNC_ADMIN_SPECIALIZATION_GROUP_UNSAVED_WITH_SAVED\r\n };\r\n};","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport { AppState } from '../../models/state/AppState';\r\nimport { HttpFactory } from './../HttpFactory';\r\nimport { Specialization, SpecializationDTO } from '../../models/admin/Concept';\r\n\r\n/*\r\n * Updates an existing Concept Specialization.\r\n */ \r\nexport const updateSpecialization = async (state: AppState, spc: Specialization): Promise => {\r\n const { token } = state.session.context!;\r\n const http = HttpFactory.authenticated(token);\r\n const resp = await http.put(`api/admin/specialization/${spc.id}`, spc);\r\n const updatedSpc = resp.data as SpecializationDTO;\r\n return { \r\n ...updatedSpc, \r\n changed: false, \r\n unsaved: false, \r\n sqlSetId: spc.sqlSetId \r\n } as Specialization;\r\n};\r\n\r\n/*\r\n * Creates a new Concept Specialization.\r\n */ \r\nexport const createSpecialization = async (state: AppState, spc: Specialization): Promise => {\r\n const { token } = state.session.context!;\r\n const http = HttpFactory.authenticated(token);\r\n const resp = await http.post(`api/admin/specialization`, {\r\n ...spc,\r\n id: null\r\n });\r\n const newSpc = resp.data as SpecializationDTO;\r\n return { \r\n ...newSpc, \r\n changed: false,\r\n unsaved: false,\r\n sqlSetId: spc.sqlSetId \r\n } as Specialization;\r\n};\r\n\r\n/*\r\n * Deletes an existing Concept Specialization.\r\n */ \r\nexport const deleteSpecialization = async (state: AppState, spc: Specialization) => {\r\n const { token } = state.session.context!;\r\n const http = HttpFactory.authenticated(token);\r\n return http.delete(`api/admin/specialization/${spc.id}`);\r\n};\r\n","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport { AppState } from \"../../models/state/AppState\";\r\nimport { Specialization } from \"../../models/admin/Concept\";\r\nimport { createSpecialization, updateSpecialization, deleteSpecialization } from \"../../services/admin/specializationApi\";\r\nimport { setNoClickModalState, showInfoModal, setSideNotificationState } from \"../generalUi\";\r\nimport { NotificationStates, InformationModalState } from \"../../models/state/GeneralUiState\";\r\n\r\nexport const SET_ADMIN_SPECIALIZATIONS = 'SET_ADMIN_SPECIALIZATIONS';\r\nexport const REMOVE_ADMIN_SPECIALIZATION = 'REMOVE_ADMIN_SPECIALIZATION';\r\nexport const SYNC_ADMIN_SPECIALIZATION_UNSAVED_WITH_SAVED = 'SYNC_ADMIN_SPECIALIZATION_UNSAVED_WITH_SAVED';\r\n\r\nexport interface AdminSpecializationAction {\r\n changed?: boolean;\r\n prevSpc?: Specialization;\r\n spc?: Specialization;\r\n spcs?: Specialization[];\r\n type: string;\r\n}\r\n\r\n// Asynchronous\r\n/*\r\n * Save or update a Concept Specialization, depending on\r\n * if it is preexisting or new.\r\n */\r\nexport const saveOrUpdateAdminSpecialization = async (spc: Specialization, dispatch: any, state: AppState): Promise => {\r\n let newSpc = null;\r\n if (spc.unsaved) {\r\n newSpc = await createSpecialization(state, spc);\r\n dispatch(removeAdminConceptSpecialization(spc));\r\n } else {\r\n newSpc = await updateSpecialization(state, spc);\r\n }\r\n dispatch(setAdminConceptSpecialization(newSpc, false));\r\n return newSpc;\r\n};\r\n\r\n/*\r\n * Delete a existing Concept Specialization.\r\n */\r\nexport const deleteAdminConceptSpecialization = (spc: Specialization) => {\r\n return async (dispatch: any, getState: () => AppState) => {\r\n try {\r\n const state = getState();\r\n dispatch(setNoClickModalState({ message: \"Deleting\", state: NotificationStates.Working }));\r\n deleteSpecialization(state, spc)\r\n .then(\r\n response => {\r\n dispatch(removeAdminConceptSpecialization(spc));\r\n dispatch(setSideNotificationState({ state: NotificationStates.Complete, message: 'Specialization Deleted' }));\r\n }, error => {\r\n const info: InformationModalState = {\r\n body: \"An error occurred while attempting to delete the Concept Specialization. Please see the Leaf error logs for details.\",\r\n header: \"Error Deleting Concept Specialization\",\r\n show: true\r\n };\r\n dispatch(showInfoModal(info));\r\n }).then(() => dispatch(setNoClickModalState({ state: NotificationStates.Hidden })));\r\n } catch (err) {\r\n console.log(err);\r\n }\r\n }\r\n};\r\n\r\n// Synchronous\r\nexport const setAdminConceptSpecialization = (spc: Specialization, changed: boolean): AdminSpecializationAction => {\r\n return {\r\n spcs: [ spc ],\r\n changed,\r\n type: SET_ADMIN_SPECIALIZATIONS\r\n };\r\n};\r\n\r\nexport const setAdminConceptSpecializations = (spcs: Specialization[]): AdminSpecializationAction => {\r\n return {\r\n spcs,\r\n type: SET_ADMIN_SPECIALIZATIONS\r\n };\r\n};\r\n\r\nexport const removeAdminConceptSpecialization = (spc: Specialization): AdminSpecializationAction => {\r\n return {\r\n spc,\r\n type: REMOVE_ADMIN_SPECIALIZATION\r\n };\r\n};\r\n\r\nexport const syncAdminSpecializationUnsavedWithSaved = (prevSpc: Specialization, spc: Specialization): AdminSpecializationAction => {\r\n return {\r\n prevSpc,\r\n spc,\r\n type: SYNC_ADMIN_SPECIALIZATION_UNSAVED_WITH_SAVED\r\n };\r\n};","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport { Concept as AdminConcept, ConceptSqlSet, SpecializationGroup } from '../../models/admin/Concept';\r\nimport { Concept as UserConcept } from '../../models/concept/Concept';\r\nimport { SqlConfiguration } from '../../models/admin/Configuration';\r\nimport formatSql from '../formatSql';\r\nimport { AppState } from '../../models/state/AppState';\r\nimport { saveOrUpdateAdminConceptSqlSet } from '../../actions/admin/sqlSet';\r\nimport { saveOrUpdateAdminConceptSpecializationGroup } from '../../actions/admin/specializationGroup';\r\nimport { saveOrUpdateAdminSpecialization } from '../../actions/admin/specialization';\r\nimport { generate as generateId } from 'shortid';\r\n\r\nconst year = new Date().getFullYear();\r\n\r\n/*\r\n * After an admin Concept is edited, copy and\r\n * transform a corresponding user Concept with\r\n * the changes if applicable.\r\n */\r\nexport const updateUserConceptFromAdminChange = (userConcept: UserConcept, propName: string, val: any, sqlSet?: ConceptSqlSet): UserConcept => {\r\n const neverAdd = new Set(['specializationGroups']);\r\n const alwaysAdd = new Set([ \r\n 'uiDisplaySubtext', 'uiDisplayPatientCount', 'uiNumericDefaultText', 'uiDisplayTooltip', \r\n 'uiDisplayName', 'uiDisplayText', 'isNumeric', 'isEncounterBased' \r\n ]);\r\n const out = Object.assign({}, userConcept);\r\n\r\n if (sqlSet) {\r\n out.isEncounterBased = sqlSet.isEncounterBased;\r\n }\r\n\r\n if (alwaysAdd.has(propName) || userConcept[propName] !== undefined && !neverAdd.has(propName)) {\r\n out[propName] = val;\r\n }\r\n return out;\r\n};\r\n\r\n/*\r\n * Generate an example SQL statement based on current concept attributes.\r\n */\r\nexport const generateSampleSql = (concept: AdminConcept, sqlSet: ConceptSqlSet, config: SqlConfiguration): string => {\r\n if (!sqlSet || !config) { return ''; }\r\n const a = config.alias;\r\n const person = config.fieldPersonId;\r\n const where: string[] = [];\r\n let sql = \r\n `SELECT ${a}.${person} ` +\r\n `FROM ${sqlSet.sqlSetFrom} AS ${a}`;\r\n\r\n if (concept.sqlSetWhere) { where.push(concept.sqlSetWhere); }\r\n if (sqlSet.isEncounterBased && sqlSet.sqlFieldDate) { where.push(`${sqlSet.sqlFieldDate} > '${year}-01-01'`); }\r\n if (concept.isNumeric && concept.sqlFieldNumeric) { where.push(`${concept.sqlFieldNumeric} > 5`); }\r\n\r\n for (let i = 0; i < where.length; i++) {\r\n sql += (i === 0 ? ' WHERE ' : ' AND ') + where[i];\r\n }\r\n\r\n // Remove alias\r\n sql = sql.replace(new RegExp(a, 'g'), 'T');\r\n\r\n return formatSql(sql);\r\n};\r\n\r\n/*\r\n * Check if there are any changes to a ConceptSqlSet.\r\n * Note that because calling 'return' in Map.forEach doesn't\r\n * actually finish the function (as it does in a normal \r\n * array), the method unfortunately has to run through\r\n * all elements before returning the result.\r\n */\r\nexport const conceptSqlSetsChanged = (sets: Map): boolean => {\r\n let changeDetected = false;\r\n\r\n sets.forEach((set): any => {\r\n if (set.unsaved || set.changed) {\r\n changeDetected = true;\r\n }\r\n set.specializationGroups.forEach((grp): any => {\r\n if (grp.unsaved || grp.changed) {\r\n changeDetected = true;\r\n }\r\n grp.specializations.forEach((s): any => {\r\n if (s.unsaved || s.changed) {\r\n changeDetected = true;\r\n }\r\n });\r\n });\r\n });\r\n return changeDetected;\r\n};\r\n\r\n/*\r\n * Determines the rootId of a given Concept. Called before saving.\r\n */\r\nexport const getRootId = (concept: UserConcept, conceptTree: Map) => {\r\n if (!concept.parentId) {\r\n return concept.id;\r\n }\r\n let parentId = concept.parentId;\r\n let rootId = parentId;\r\n while (parentId) {\r\n rootId = parentId;\r\n parentId = conceptTree.get(parentId)!.parentId!;\r\n }\r\n return rootId;\r\n};\r\n\r\nexport const getApiUpdateQueue = (sets: Map, dispatch: any, state: AppState): any[] => {\r\n const queue: any[] = [];\r\n sets.forEach((set) => {\r\n if (set.unsaved || set.changed) {\r\n queue.push( async () => {\r\n\r\n // Get any Specialization Groups in the SQL Set\r\n const grps: SpecializationGroup[] = [];\r\n set.specializationGroups.forEach((grp) => grps.push(grp));\r\n\r\n // Save the Concept SQL Set.\r\n const newSet = await saveOrUpdateAdminConceptSqlSet(set, dispatch, state);\r\n\r\n // Loop through Specialization Groups within the set.\r\n for (const grp of grps) {\r\n\r\n // Update the SqlSetId and save the Specialialization Group.\r\n grp.sqlSetId = newSet.id;\r\n await saveOrUpdateAdminConceptSpecializationGroup(grp, dispatch, state);\r\n }\r\n });\r\n } else {\r\n set.specializationGroups.forEach( async (grp) => {\r\n\r\n // Save the Specialialization Group if unsaved.\r\n if (grp.unsaved || grp.changed) {\r\n queue.push(() => saveOrUpdateAdminConceptSpecializationGroup(grp, dispatch, state)); \r\n } \r\n \r\n // Loop through Specializations within the group.\r\n grp.specializations.forEach( async (spc) => {\r\n\r\n // Save the Specialialization if unsaved.\r\n if ((spc.unsaved || spc.changed) && !grp.unsaved) {\r\n queue.push(() => saveOrUpdateAdminSpecialization(spc, dispatch, state));\r\n }\r\n });\r\n });\r\n }\r\n });\r\n return queue;\r\n};\r\n\r\n/* \r\n * Return a new empty concept.\r\n */\r\nexport interface EmptyConceptPair {\r\n adminConcept: AdminConcept;\r\n userConcept: UserConcept;\r\n}\r\n\r\nexport const createEmptyConcept = (): EmptyConceptPair => {\r\n const id = generateId();\r\n const baseProps = {\r\n id,\r\n rootId: id,\r\n isNumeric: false,\r\n isParent: false,\r\n isRoot: true,\r\n isPatientCountAutoCalculated: true,\r\n isSpecializable: false,\r\n uiDisplayName: 'New Concept',\r\n uiDisplayText: '',\r\n uiDisplaySubtext: '',\r\n uiDisplayTooltip: '',\r\n universalId: '',\r\n unsaved: true\r\n };\r\n const adminConcept: AdminConcept = {\r\n ...baseProps,\r\n constraints: [],\r\n specializationGroups: []\r\n };\r\n const userConcept: UserConcept = {\r\n ...baseProps,\r\n childrenLoaded: false,\r\n isEncounterBased: false,\r\n isEventBased: false,\r\n isFetching: false,\r\n isOpen: false\r\n };\r\n\r\n return { adminConcept, userConcept };\r\n};","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport { AppState } from \"../../models/state/AppState\";\r\nimport { ConceptSqlSet, ConceptSqlSetDeleteResponse } from \"../../models/admin/Concept\";\r\nimport { getSqlSets, createSqlSet, deleteSqlSet, updateSqlSet } from \"../../services/admin/sqlSetApi\";\r\nimport { setNoClickModalState, showInfoModal, setSideNotificationState } from \"../generalUi\";\r\nimport { NotificationStates, InformationModalState } from \"../../models/state/GeneralUiState\";\r\nimport { getApiUpdateQueue } from \"../../utils/admin/concept\";\r\n\r\nexport const SET_ADMIN_SQL_SETS = 'SET_ADMIN_SQL_SETS';\r\nexport const SET_ADMIN_UNEDITED_SQL_SETS = 'SET_ADMIN_UNEDITED_SQL_SETS';\r\nexport const SET_ADMIN_SQL_SETS_UNCHANGED = 'SET_ADMIN_SQL_SETS_UNCHANGED';\r\nexport const SYNC_ADMIN_SQL_SET_UNSAVED_WITH_SAVED = 'SYNC_ADMIN_SQL_SET_UNSAVED_WITH_SAVED';\r\nexport const REMOVE_ADMIN_SQL_SET = 'REMOVE_ADMIN_SQL_SET';\r\nexport const UNDO_ADMIN_SQL_SET_CHANGES = 'UNDO_ADMIN_SQL_SET_CHANGES';\r\n\r\nexport interface AdminSqlSetAction {\r\n changed?: boolean;\r\n id?: string | number;\r\n prevSqlSet?: ConceptSqlSet;\r\n set?: ConceptSqlSet;\r\n sets?: ConceptSqlSet[];\r\n mappedSets?: Map\r\n type: string;\r\n}\r\n\r\n// Asynchronous\r\n/*\r\n * Process all queued Concept SQL Set/Specialization/Specialization Group\r\n * API operations sequentially.\r\n */\r\nexport const processApiUpdateQueue = () => {\r\n return async (dispatch: any, getState: () => AppState) => {\r\n const state = getState();\r\n const sets = state.admin!.sqlSets.sets;\r\n dispatch(setNoClickModalState({ message: \"Saving\", state: NotificationStates.Working }));\r\n\r\n try {\r\n const queue = getApiUpdateQueue(sets, dispatch, state);\r\n for (const process of queue) {\r\n await process();\r\n }\r\n\r\n // All done!\r\n dispatch(setAdminConceptSqlSetsUnchanged());\r\n dispatch(setSideNotificationState({ state: NotificationStates.Complete, message: 'Changes Saved' }));\r\n } catch (err) {\r\n console.log(err);\r\n const info: InformationModalState = {\r\n body: \"An error occurred while attempting update the Leaf database with your changes. Please see the Leaf error logs for details.\",\r\n header: \"Error Applying Changes\",\r\n show: true\r\n };\r\n dispatch(showInfoModal(info));\r\n } finally {\r\n dispatch(setNoClickModalState({ state: NotificationStates.Hidden }));\r\n }\r\n }\r\n};\r\n\r\n/*\r\n * Save or update a Concept SQL Set, depending on\r\n * if it is preexisting or new.\r\n */\r\nexport const saveOrUpdateAdminConceptSqlSet = async (set: ConceptSqlSet, dispatch: any, state: AppState): Promise => {\r\n let newSet = null;\r\n if (set.unsaved) {\r\n newSet = await createSqlSet(state, set);\r\n } else {\r\n newSet = await updateSqlSet(state, set);\r\n }\r\n dispatch(syncAdminConceptSqlSetUnsavedWithSaved(set, newSet));\r\n return newSet;\r\n};\r\n\r\n/*\r\n * Delete an existing SQL Set.\r\n */\r\nexport const deleteAdminConceptSqlSet = (set: ConceptSqlSet) => {\r\n return async (dispatch: any, getState: () => AppState) => {\r\n try {\r\n const state = getState();\r\n dispatch(setNoClickModalState({ message: \"Deleting\", state: NotificationStates.Working }));\r\n deleteSqlSet(state, set)\r\n .then(\r\n response => {\r\n dispatch(removeAdminConceptSqlSet(set));\r\n dispatch(setSideNotificationState({ state: NotificationStates.Complete, message: 'SQL Set Deleted' }));\r\n }, error => {\r\n const info: InformationModalState = {\r\n body: \"\",\r\n header: \"Error Deleting SQL Set\",\r\n show: true\r\n };\r\n if (error.response.status === 409) {\r\n const conflicts = error.response.data as ConceptSqlSetDeleteResponse;\r\n info.body = \r\n `There are ${conflicts.conceptCount} Concept(s) and ${conflicts.specializationGroupCount} ` +\r\n `Specialization Group(s) (dropdowns) which depend on this SQL Set. Please set these to use a different ` +\r\n `SQL Set or delete them first.`;\r\n } else {\r\n info.body = \"An error occurred while attempting to delete the SQL Set. Please see the Leaf error logs for details.\";\r\n }\r\n dispatch(showInfoModal(info));\r\n }).then(() => dispatch(setNoClickModalState({ state: NotificationStates.Hidden })));\r\n } catch (err) {\r\n console.log(err);\r\n }\r\n }\r\n};\r\n\r\n// Synchronous\r\nexport const setAdminConceptSqlSet = (set: ConceptSqlSet, changed: boolean): AdminSqlSetAction => {\r\n return {\r\n changed,\r\n sets: [ set ],\r\n type: SET_ADMIN_SQL_SETS\r\n };\r\n};\r\n\r\nexport const setAdminConceptSqlSets = (sets: ConceptSqlSet[], changed: boolean): AdminSqlSetAction => {\r\n return {\r\n changed,\r\n sets,\r\n type: SET_ADMIN_SQL_SETS\r\n };\r\n};\r\n\r\nexport const removeAdminConceptSqlSet = (set: ConceptSqlSet): AdminSqlSetAction => {\r\n return {\r\n set,\r\n type: REMOVE_ADMIN_SQL_SET\r\n };\r\n};\r\n\r\nexport const undoAdminSqlSetChanges = (): AdminSqlSetAction => {\r\n return {\r\n type: UNDO_ADMIN_SQL_SET_CHANGES\r\n };\r\n};\r\n\r\nexport const setAdminConceptSqlSetsUnchanged = (): AdminSqlSetAction => {\r\n return {\r\n type: SET_ADMIN_SQL_SETS_UNCHANGED\r\n };\r\n};\r\n\r\nexport const syncAdminConceptSqlSetUnsavedWithSaved = (prevSqlSet: ConceptSqlSet, set: ConceptSqlSet): AdminSqlSetAction => {\r\n return {\r\n prevSqlSet,\r\n set,\r\n type: SYNC_ADMIN_SQL_SET_UNSAVED_WITH_SAVED\r\n }\r\n};","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport { AppState } from \"../../models/state/AppState\";\r\nimport { ConceptEvent } from \"../../models/admin/Concept\";\r\nimport { setNoClickModalState, showInfoModal, setSideNotificationState } from \"../generalUi\";\r\nimport { NotificationStates, InformationModalState } from \"../../models/state/GeneralUiState\";\r\nimport { createConceptEvent, deleteConceptEvent, updateConceptEvent } from \"../../services/admin/conceptEventApi\";\r\n\r\nexport const SET_ADMIN_CONCEPT_EVENTS = 'SET_ADMIN_CONCEPT_EVENTS';\r\nexport const SET_ADMIN_UNEDITED_CONCEPT_EVENT = 'SET_ADMIN_UNEDITED_CONCEPT_EVENT';\r\nexport const UNDO_ADMIN_CONCEPT_EVENT_CHANGE = 'UNDO_ADMIN_CONCEPT_EVENT_CHANGE';\r\nexport const REMOVE_ADMIN_CONCEPT_EVENT = 'REMOVE_ADMIN_CONCEPT_EVENT';\r\n\r\nexport interface AdminConceptEventAction {\r\n changed?: boolean;\r\n ev?: ConceptEvent;\r\n evs?: ConceptEvent[];\r\n type: string;\r\n}\r\n\r\n// Asynchronous\r\n/*\r\n * Save or update a Concept Event, depending on\r\n * if it is preexisting or new.\r\n */\r\nexport const saveAdminConceptEvent = (ev: ConceptEvent) => {\r\n return async (dispatch: any, getState: () => AppState) => {\r\n const state = getState();\r\n\r\n try {\r\n dispatch(setNoClickModalState({ message: \"Saving\", state: NotificationStates.Working }));\r\n const newEv = ev.unsaved\r\n ? await createConceptEvent(state, ev)\r\n : await updateConceptEvent(state, ev);\r\n\r\n dispatch(removeAdminConceptEvent(ev));\r\n dispatch(setAdminConceptEvent(newEv, false));\r\n } catch (err) {\r\n console.log(err);\r\n const info: InformationModalState = {\r\n body: \"An error occurred while attempting to save the Concept Event. Please see the Leaf error logs for details.\",\r\n header: \"Error Saving Concept Event\",\r\n show: true\r\n };\r\n dispatch(showInfoModal(info));\r\n } finally {\r\n dispatch(setNoClickModalState({ state: NotificationStates.Hidden }));\r\n }\r\n }\r\n};\r\n\r\n/*\r\n * Delete a existing Concept Event.\r\n */\r\nexport const deleteAdminConceptEvent = (ev: ConceptEvent) => {\r\n return async (dispatch: any, getState: () => AppState) => {\r\n try {\r\n const state = getState();\r\n dispatch(setNoClickModalState({ message: \"Deleting\", state: NotificationStates.Working }));\r\n deleteConceptEvent(state, ev)\r\n .then(\r\n response => {\r\n dispatch(removeAdminConceptEvent(ev));\r\n dispatch(setSideNotificationState({ state: NotificationStates.Complete, message: 'Concept Event Deleted' }));\r\n }, error => {\r\n const info: InformationModalState = {\r\n body: \"An error occurred while attempting to delete the Concept Event. Please see the Leaf error logs for details.\",\r\n header: \"Error Deleting Concept Event\",\r\n show: true\r\n };\r\n dispatch(showInfoModal(info));\r\n });\r\n } catch (err) {\r\n console.log(err);\r\n } finally {\r\n dispatch(setNoClickModalState({ state: NotificationStates.Hidden }));\r\n }\r\n }\r\n};\r\n\r\n// Synchronous\r\nexport const setAdminConceptEvent = (ev: ConceptEvent, changed: boolean): AdminConceptEventAction => {\r\n return {\r\n evs: [ ev ],\r\n changed,\r\n type: SET_ADMIN_CONCEPT_EVENTS\r\n };\r\n};\r\n\r\nexport const setAdminConceptEvents = (evs: ConceptEvent[]): AdminConceptEventAction => {\r\n return {\r\n evs,\r\n type: SET_ADMIN_CONCEPT_EVENTS\r\n };\r\n};\r\n\r\nexport const setAdminUneditedConceptEvent = (ev: ConceptEvent): AdminConceptEventAction => {\r\n return {\r\n ev,\r\n type: SET_ADMIN_UNEDITED_CONCEPT_EVENT\r\n };\r\n};\r\n\r\nexport const removeAdminConceptEvent = (ev: ConceptEvent): AdminConceptEventAction => {\r\n return {\r\n ev,\r\n type: REMOVE_ADMIN_CONCEPT_EVENT\r\n };\r\n};\r\n\r\nexport const undoAdminConceptEventChange = (): AdminConceptEventAction => {\r\n return {\r\n type: UNDO_ADMIN_CONCEPT_EVENT_CHANGE\r\n };\r\n};","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport { AppState } from '../../models/state/AppState';\r\nimport { HttpFactory } from './../HttpFactory';\r\nimport { AdminDatasetQuery, AdminDemographicQuery } from '../../models/admin/Dataset';\r\nimport { PatientListDatasetShape } from '../../models/patientList/Dataset';\r\n\r\n/*\r\n * Gets a Dataset.\r\n */ \r\nexport const getAdminDataset = async (state: AppState, id: string): Promise => {\r\n const { token } = state.session.context!;\r\n const http = HttpFactory.authenticated(token);\r\n const resp = await http.get(`api/admin/dataset/${id}`);\r\n const ds = resp.data as AdminDatasetQuery;\r\n return ds;\r\n};\r\n\r\n/*\r\n * Updates an existing Dataset.\r\n */ \r\nexport const updateDataset = async (state: AppState, dataset: AdminDatasetQuery): Promise => {\r\n const { token } = state.session.context!;\r\n const http = HttpFactory.authenticated(token);\r\n const resp = await http.put(`api/admin/dataset/${dataset.id}`, dataset);\r\n const ds = resp.data as AdminDatasetQuery;\r\n return ds;\r\n};\r\n\r\n/*\r\n * Creates a new Dataset.\r\n */ \r\nexport const createDataset = async (state: AppState, dataset: AdminDatasetQuery): Promise => {\r\n const { token } = state.session.context!;\r\n const http = HttpFactory.authenticated(token);\r\n const resp = await http.post(`api/admin/dataset`, {\r\n ...dataset,\r\n id: null\r\n });\r\n const ds = resp.data as AdminDatasetQuery;\r\n return ds;\r\n};\r\n\r\n/*\r\n * Deletes an existing Dataset\r\n */ \r\nexport const deleteDataset = async (state: AppState, dataset: AdminDatasetQuery) => {\r\n const { token } = state.session.context!;\r\n const http = HttpFactory.authenticated(token);\r\n await http.delete(`api/admin/dataset/${dataset.id}`);\r\n};\r\n\r\n/*\r\n * Gets the Demographics Dataset.\r\n */ \r\nexport const getAdminDemographicsDataset = async (state: AppState): Promise => {\r\n const { token } = state.session.context!;\r\n const http = HttpFactory.authenticated(token);\r\n const resp = await http.get(`api/admin/demographics`);\r\n const ds = resp.data as AdminDemographicQuery;\r\n const converted: AdminDatasetQuery = {\r\n id: 'demographics',\r\n constraints: [],\r\n name: 'Basic Demographics',\r\n shape: PatientListDatasetShape.Demographics,\r\n sqlStatement: ds.sqlStatement ? ds.sqlStatement : 'SELECT FROM dbo.table',\r\n tags: [],\r\n unsaved: new Date(ds.lastChanged).getFullYear() === 0\r\n };\r\n return converted;\r\n};\r\n\r\n/*\r\n * Updates or Inserts existing Demographics Dataset.\r\n */ \r\nexport const upsertDemographicsDataset = async (state: AppState, dataset: AdminDatasetQuery): Promise => {\r\n const { token } = state.session.context!;\r\n const http = HttpFactory.authenticated(token);\r\n const resp = await http.put(`api/admin/demographics`, {\r\n sqlStatement: dataset.sqlStatement\r\n });\r\n const ds = resp.data as AdminDemographicQuery;\r\n const converted: AdminDatasetQuery = {\r\n ...dataset,\r\n ...ds,\r\n unsaved: false\r\n };\r\n return converted;\r\n};","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport { CancelTokenSource } from 'axios';\r\nimport { PatientListConfiguration } from '../patientList/Configuration';\r\nimport { PatientListRow } from '../patientList/Patient';\r\nimport { DemographicStatistics } from '../cohort/DemographicDTO';\r\n\r\nexport enum CohortStateType {\r\n REQUESTING = 1,\r\n NOT_LOADED = 2,\r\n LOADED = 3,\r\n IN_ERROR = 4,\r\n NOT_IMPLEMENTED = 5\r\n}\r\n\r\n// Top-level aggregate state\r\nexport interface CohortState {\r\n cancel?: CancelTokenSource;\r\n count: PatientCountState;\r\n networkCohorts: CohortMap;\r\n patientList: PatientListState;\r\n visualization: VisualizationState;\r\n}\r\nexport type CohortMap = Map;\r\n\r\n// Responder-level state\r\nexport interface NetworkCohortState {\r\n count: PatientCountState;\r\n id: number;\r\n patientList: PatientListNetworkState;\r\n visualization: VisualizationState;\r\n}\r\n\r\n// State prop types\r\nexport interface PatientCountState {\r\n duration?: number;\r\n queryId: string;\r\n state: CohortStateType;\r\n sqlStatements: string[];\r\n value: number;\r\n}\r\n\r\nexport interface BasePatientListState {\r\n state: CohortStateType;\r\n}\r\n\r\nexport interface PatientListState extends BasePatientListState {\r\n display: PatientListRow[];\r\n configuration: PatientListConfiguration;\r\n totalPatients: number;\r\n totalRows: number;\r\n}\r\n\r\nexport interface PatientListNetworkState extends BasePatientListState {\r\n state: CohortStateType;\r\n multiRowCount: number;\r\n singletonRowCount: number;\r\n}\r\n\r\nexport interface VisualizationState {\r\n demographics: DemographicStatistics;\r\n state: CohortStateType;\r\n}","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport DatasetSearchEngineWebWorker from \"../providers/datasetSearch/datasetSearchWebWorker\";\r\nimport { PatientListDatasetQuery, DatasetSearchResult } from \"../models/patientList/Dataset\";\r\n\r\n\r\nconst engine = new DatasetSearchEngineWebWorker();\r\n\r\nexport const indexDatasets = (datasets: PatientListDatasetQuery[]): Promise => {\r\n return new Promise( async (resolve, reject) => {\r\n const result = await engine.reindexDatasets(datasets) as DatasetSearchResult;\r\n resolve(result);\r\n });\r\n};\r\n\r\nexport const searchDatasets = (searchTerm: string): Promise => {\r\n return new Promise( async (resolve, reject) => {\r\n const term = searchTerm.trim().toLowerCase();\r\n const result = await engine.searchDatasets(term) as DatasetSearchResult;\r\n resolve(result);\r\n });\r\n};\r\n\r\nexport const allowDatasetInSearch = (datasetId: string, include: boolean, searchString: string): Promise => {\r\n return new Promise( async (resolve, reject) => {\r\n const result = await engine.allowDatasetInSearch(datasetId, include, searchString) as DatasetSearchResult;\r\n resolve(result);\r\n });\r\n};\r\n\r\nexport const allowAllDatasets = (): Promise => {\r\n return new Promise( async (resolve, reject) => {\r\n const result = await engine.allowAllDatasets() as DatasetSearchResult;\r\n resolve(result);\r\n });\r\n};\r\n\r\nexport const setAdminMode = (admin: boolean): Promise => {\r\n return new Promise( async (resolve, reject) => {\r\n const result = await engine.setAdminMode(admin) as DatasetSearchResult;\r\n resolve(result);\r\n });\r\n};","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\n// tslint:disable\r\nimport { generate as generateId } from 'shortid';\r\nimport { TokenizedDatasetRef, PatientListDatasetQuery, CategorizedDatasetRef, DatasetSearchResult, PatientListDatasetQueryIndex } from '../../models/patientList/Dataset';\r\nimport { workerContext } from './datasetSearchWebWorkerContext';\r\n\r\nconst REINDEX_DATASETS = 'REINDEX_DATASETS';\r\nconst ALLOW_DATASET_IN_SEARCH = 'ALLOW_DATASET_IN_SEARCH';\r\nconst ALLOW_ALL_DATASETS = 'ALLOW_ALL_DATASETS';\r\nconst SET_ADMIN_MODE = 'SET_ADMIN_MODE';\r\nconst SEARCH_DATASETS = 'SEARCH_DATASETS';\r\n\r\ninterface InboundMessagePartialPayload {\r\n admin?: boolean;\r\n allow?: boolean;\r\n datasetId?: string;\r\n datasets?: PatientListDatasetQuery[];\r\n message: string;\r\n searchString?: string;\r\n}\r\n\r\ninterface InboundMessagePayload extends InboundMessagePartialPayload {\r\n requestId: string;\r\n}\r\n\r\ninterface OutboundMessagePayload {\r\n requestId: string;\r\n result?: DatasetSearchResult;\r\n}\r\n\r\ninterface WorkerReturnPayload {\r\n data: OutboundMessagePayload;\r\n}\r\n\r\ninterface PromiseResolver {\r\n reject: any;\r\n resolve: any;\r\n}\r\n\r\nexport default class DatasetSearchEngineWebWorker {\r\n private worker: Worker;\r\n private reject: any;\r\n private promiseMap: Map = new Map();\r\n\r\n constructor() {\r\n const workerFile = ` \r\n ${this.addMessageTypesToContext([REINDEX_DATASETS, SEARCH_DATASETS, ALLOW_DATASET_IN_SEARCH, ALLOW_ALL_DATASETS, SET_ADMIN_MODE])}\r\n ${workerContext}\r\n self.onmessage = function(e) { \r\n self.postMessage(handleWorkMessage.call(this, e.data, postMessage)); \r\n }`;\r\n // console.log(workerFile);\r\n const blob = new Blob([workerFile], { type: 'text/javascript' });\r\n this.worker = new Worker(URL.createObjectURL(blob));\r\n this.worker.onmessage = result => this.handleReturnPayload(result);\r\n this.worker.onerror = error => { console.log(error); this.reject(error) };\r\n }\r\n\r\n public reindexDatasets = (datasets: PatientListDatasetQuery[]) => {\r\n return this.postMessage({ message: REINDEX_DATASETS, datasets });\r\n }\r\n\r\n public allowDatasetInSearch = (datasetId: string, allow: boolean, searchString: string) => {\r\n return this.postMessage({ message: ALLOW_DATASET_IN_SEARCH, datasetId, allow, searchString });\r\n }\r\n\r\n public allowAllDatasets = () => {\r\n return this.postMessage({ message: ALLOW_ALL_DATASETS });\r\n }\r\n\r\n public setAdminMode = (admin: boolean) => {\r\n return this.postMessage({ message: SET_ADMIN_MODE, admin });\r\n }\r\n\r\n public searchDatasets = (searchString: string) => {\r\n return this.postMessage({ message: SEARCH_DATASETS, searchString });\r\n }\r\n\r\n private postMessage = (payload: InboundMessagePartialPayload) => {\r\n return new Promise((resolve, reject) => {\r\n const requestId = generateId();\r\n this.reject = reject;\r\n this.promiseMap.set(requestId, { resolve, reject });\r\n this.worker.postMessage({ ...payload, requestId });\r\n });\r\n }\r\n\r\n private handleReturnPayload = (payload: WorkerReturnPayload): any => {\r\n const data = payload.data.result ? payload.data.result : {}\r\n const resolve = this.promiseMap.get(payload.data.requestId)!.resolve;\r\n this.promiseMap.delete(payload.data.requestId);\r\n return resolve(data);\r\n }\r\n\r\n private stripFunctionToContext = (f: () => any) => {\r\n const funcString = `${f}`;\r\n return funcString\r\n .substring(0, funcString.lastIndexOf('}'))\r\n .substring(funcString.indexOf('{') + 1)\r\n }\r\n\r\n private addMessageTypesToContext = (messageTypes: string[]) => {\r\n return messageTypes.map((v: string) => `var ${v} = '${v}';`).join(' ');\r\n }\r\n\r\n private workerContext = () => {\r\n\r\n const handleWorkMessage = (payload: InboundMessagePayload) => {\r\n switch (payload.message) {\r\n case REINDEX_DATASETS:\r\n return reindexCacheFromExternal(payload);\r\n case SEARCH_DATASETS:\r\n return searchDatasets(payload);\r\n case ALLOW_DATASET_IN_SEARCH:\r\n return allowDataset(payload);\r\n case ALLOW_ALL_DATASETS:\r\n return allowAllDatasets(payload);\r\n case SET_ADMIN_MODE:\r\n return setAdminMode(payload);\r\n default:\r\n return null;\r\n }\r\n };\r\n\r\n /*\r\n * Shared cache.\r\n */\r\n const demographics: PatientListDatasetQuery = { id: 'demographics', shape: 3, category: '', name: 'Basic Demographics', tags: [] };\r\n const firstCharCache: Map = new Map();\r\n let excluded: Map = new Map([[ demographics.id, demographics ]]);\r\n let allDs: Map = new Map();\r\n\r\n /*\r\n * Admin-facing cache.\r\n */\r\n let isAdmin = false;\r\n let allCatDsAdmin: Map = new Map();\r\n let defaultOrderAdmin: Map = new Map();\r\n\r\n /*\r\n * User-facing cache.\r\n */\r\n let allCatDs: Map = new Map();\r\n let defaultOrder: Map = new Map();\r\n\r\n /*\r\n * Set whether the worker should return search results to an admin (i.e., no exclusions),\r\n * or to a user.\r\n */\r\n const setAdminMode = (payload: InboundMessagePayload): OutboundMessagePayload => {\r\n const { requestId, admin } = payload;\r\n isAdmin = admin!;\r\n return { requestId, result: returnDefault() };\r\n };\r\n\r\n /*\r\n * Return the default display depending on whether the current mode is admin or user.\r\n */\r\n\r\n const returnDefault = (): DatasetSearchResult => {\r\n if (isAdmin) {\r\n return { categories: allCatDsAdmin, displayOrder: defaultOrderAdmin };\r\n }\r\n return { categories: allCatDs, displayOrder: defaultOrder };\r\n };\r\n\r\n /*\r\n * Flatten categorized datasets map into an array of datasets.\r\n */\r\n const getAllDatasetsArray = (): PatientListDatasetQuery[] => {\r\n const copy = new Map(allDs);\r\n if (!isAdmin) {\r\n copy.delete(demographics.id);\r\n }\r\n return [ ...copy.values() ];\r\n };\r\n \r\n /* \r\n * Reset excluded datasets cache. Called when users\r\n * reset the cohort and the patient list too is reset.\r\n */\r\n const allowAllDatasets = (payload: InboundMessagePayload): OutboundMessagePayload => {\r\n const { requestId } = payload;\r\n\r\n excluded.clear();\r\n excluded.set(demographics.id, demographics);\r\n /*\r\n * Get default display and sort order.\r\n */\r\n const reSorted = dedupeAndSort(getAllDatasetsArray());\r\n allCatDs = reSorted.categories;\r\n defaultOrder = reSorted.displayOrder;\r\n\r\n return { requestId, result: returnDefault() };\r\n };\r\n\r\n /*\r\n * Allow or disallow a dataset to be included in search results.\r\n * Called as users add/remove datasets from the patient list screen.\r\n */\r\n const allowDataset = (payload: InboundMessagePayload): OutboundMessagePayload => {\r\n const { datasetId, allow } = payload;\r\n\r\n if (allow) {\r\n excluded.delete(datasetId!);\r\n } else {\r\n const ds = allDs.get(datasetId!);\r\n if (ds) {\r\n excluded.set(ds.id, ds);\r\n }\r\n }\r\n const datasets = getAllDatasetsArray().filter((ds) => !excluded.has(ds.id));\r\n const reSorted = dedupeAndSort(datasets);\r\n allCatDs = reSorted.categories;\r\n defaultOrder = reSorted.displayOrder;\r\n \r\n return searchDatasets(payload);\r\n };\r\n\r\n /*\r\n * Search through available datasets.\r\n */\r\n const searchDatasets = (payload: InboundMessagePayload): OutboundMessagePayload => {\r\n const { searchString, requestId } = payload;\r\n const terms = searchString!.trim().split(' ');\r\n const termCount = terms.length;\r\n const firstTerm = terms[0];\r\n const datasets = firstCharCache.get(firstTerm[0]);\r\n const dsOut: TokenizedDatasetRef[] = [];\r\n\r\n if (!searchString) {\r\n return { requestId, result: returnDefault() }; \r\n }\r\n if (!datasets) { \r\n return { requestId, result: { categories: new Map(), displayOrder: new Map() } }; \r\n }\r\n \r\n // ******************\r\n // First term\r\n // ******************\r\n \r\n /* \r\n * Foreach dataset compare with search term one. If demographics\r\n * are disabled this is for a user, so leave out excluded datasets.\r\n */\r\n if (!isAdmin) {\r\n for (let i1 = 0; i1 < datasets.length; i1++) {\r\n const ds = datasets[i1];\r\n if (!excluded.has(ds.id) && ds.token.startsWith(firstTerm)) {\r\n dsOut.push(ds);\r\n }\r\n }\r\n /* \r\n * Else this is for an admin in the admin panel, so there are no exclusions.\r\n */\r\n } else {\r\n for (let i1 = 0; i1 < datasets.length; i1++) {\r\n const ds = datasets[i1];\r\n if (ds.token.startsWith(firstTerm)) {\r\n dsOut.push(ds);\r\n }\r\n }\r\n }\r\n\r\n if (terms.length === 1) { \r\n return { requestId, result: dedupeAndSortTokenized(dsOut) };\r\n }\r\n \r\n // ******************\r\n // Following terms\r\n // ******************\r\n\r\n /*\r\n * For datasets found in loop one\r\n */\r\n const dsFinal: TokenizedDatasetRef[] = []\r\n for (let dsIdx = 0; dsIdx < dsOut.length; dsIdx++) {\r\n const otherTokens = dsOut[dsIdx].tokenArray.slice();\r\n let hitCount = 1;\r\n\r\n /* \r\n * Foreach term after the first (e.g. [ 'white', 'blood' ])\r\n * filter what first loop found and remove if no hit\r\n */\r\n for (let i2 = 1; i2 < termCount; i2++) {\r\n const term = terms[i2];\r\n\r\n /* \r\n * For each other term associated with the dataset name\r\n */\r\n for (let j = 0; j < otherTokens.length; j++) {\r\n if (otherTokens[j].startsWith(term)) { \r\n hitCount++;\r\n otherTokens.splice(j,1);\r\n break;\r\n }\r\n }\r\n if (!otherTokens.length)\r\n break;\r\n }\r\n if (hitCount === termCount) {\r\n dsFinal.push(dsOut[dsIdx])\r\n }\r\n }\r\n\r\n return { requestId, result: dedupeAndSortTokenized(dsFinal) };\r\n };\r\n\r\n /*\r\n * Extract datasets from tokenized refs and returns\r\n * a sorted, deduped result array.\r\n */\r\n const dedupeAndSortTokenized = (refs: TokenizedDatasetRef[]): DatasetSearchResult => {\r\n const ds = refs.map((r) => r.dataset);\r\n return dedupeAndSort(ds);\r\n };\r\n\r\n /*\r\n * Remove duplicates, sort alphabetically, and\r\n * return a displayable categorized array of datasets.\r\n */\r\n const dedupeAndSort = (refs: PatientListDatasetQuery[]): DatasetSearchResult => {\r\n const addedDatasets: Set = new Set();\r\n const addedRefs: PatientListDatasetQuery[] = [];\r\n const out: Map = new Map();\r\n const displayOrder: Map = new Map();\r\n let includesDemographics = false;\r\n\r\n /*\r\n * Get unique only.\r\n */\r\n for (let i = 0; i < refs.length; i++) {\r\n const ref = refs[i];\r\n if (!addedDatasets.has(ref.id)) {\r\n if (ref.shape === 3) {\r\n includesDemographics = true;\r\n } else {\r\n if (!ref.category) {\r\n ref.category = '';\r\n }\r\n addedRefs.push(ref);\r\n addedDatasets.add(ref.id);\r\n }\r\n }\r\n }\r\n\r\n /*\r\n * Sort.\r\n */\r\n const sortedRefs = addedRefs.sort((a,b) => {\r\n if (a.category === b.category) { \r\n return a.name > b.name ? 1 : -1;\r\n }\r\n return a.category > b.category ? 1 : -1;\r\n });\r\n if (includesDemographics) { sortedRefs.unshift(demographics); }\r\n const len = sortedRefs.length;\r\n const lastIdx = len-1;\r\n\r\n /*\r\n * Add to map.\r\n */\r\n for (let i = 0; i < len; i++) {\r\n const ref = sortedRefs[i];\r\n const catObj = out.get(ref.category);\r\n const order: PatientListDatasetQueryIndex = {\r\n prevId: i > 0 ? sortedRefs[i-1].id : sortedRefs[lastIdx].id,\r\n nextId: i < lastIdx ? sortedRefs[i+1].id : sortedRefs[0].id\r\n }\r\n displayOrder.set(ref.id, order);\r\n \r\n if (catObj) {\r\n catObj.datasets.set(ref.id, ref);\r\n } else {\r\n out.set(ref.category, { category: ref.category, datasets: new Map([[ ref.id, ref ]]) })\r\n }\r\n }\r\n return { categories: out, displayOrder };\r\n };\r\n\r\n const reindexCacheFromExternal = (payload: InboundMessagePayload): OutboundMessagePayload => {\r\n const { requestId, datasets } = payload;\r\n const sorted = reindexCacheCache(datasets!);\r\n return { requestId, result: sorted }\r\n } \r\n\r\n /*\r\n * Reset the dataset search cache and (re)load\r\n * it with inbound datasets.\r\n */\r\n const reindexCacheCache = (datasets: PatientListDatasetQuery[]): DatasetSearchResult => {\r\n \r\n /*\r\n * Ensure 'Demographics'-shaped datasets are excluded (they shouldn't be here, but just to be safe).\r\n */\r\n const all = datasets!.slice().filter((ds) => ds.shape !== 3);\r\n all.unshift(demographics);\r\n allDs.clear();\r\n allCatDs.clear();\r\n allCatDsAdmin.clear();\r\n allCatDsAdmin.set('', { category: '', datasets: new Map([[ demographics.id, demographics ]]) });\r\n firstCharCache.clear();\r\n excluded.clear();\r\n excluded.set(demographics.id, demographics);\r\n \r\n /* \r\n * Foreach dataset\r\n */\r\n for (let i = 0; i < all.length; i++) {\r\n const ds = all[i];\r\n let tokens = ds.name.toLowerCase().split(' ').concat(ds.tags);\r\n if (ds.category) { tokens = tokens.concat(ds.category.toLowerCase().split(' ')); }\r\n if (ds.description) { tokens = tokens.concat(ds.description.toLowerCase().split(' ')); }\r\n allDs.set(ds.id, ds);\r\n\r\n for (let j = 0; j <= tokens.length - 1; j++) {\r\n const token = tokens[j];\r\n const ref: TokenizedDatasetRef = {\r\n id: ds.id,\r\n dataset: ds,\r\n token,\r\n tokenArray: tokens.filter((t) => t !== token)\r\n }\r\n const firstChar = token[0];\r\n \r\n /* \r\n * Cache the first first character for quick lookup.\r\n */\r\n if (!firstCharCache.has(firstChar)) {\r\n firstCharCache.set(firstChar, [ ref ]);\r\n } else {\r\n firstCharCache.get(firstChar)!.push(ref);\r\n }\r\n }\r\n }\r\n\r\n /*\r\n * Set admin search default display.\r\n */\r\n const adminSorted = dedupeAndSort(all);\r\n allCatDsAdmin = adminSorted.categories;\r\n defaultOrderAdmin = adminSorted.displayOrder;\r\n\r\n /*\r\n * Set user search default display.\r\n */\r\n all.shift();\r\n const userSorted = dedupeAndSort(all);\r\n allCatDs = userSorted.categories;\r\n defaultOrder = userSorted.displayOrder;\r\n\r\n return userSorted;\r\n };\r\n };\r\n}","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nexport const workerContext = `\r\nvar handleWorkMessage = function (payload) {\r\n switch (payload.message) {\r\n case REINDEX_DATASETS:\r\n return reindexCacheFromExternal(payload);\r\n case SEARCH_DATASETS:\r\n return searchDatasets(payload);\r\n case ALLOW_DATASET_IN_SEARCH:\r\n return allowDataset(payload);\r\n case ALLOW_ALL_DATASETS:\r\n return allowAllDatasets(payload);\r\n case SET_ADMIN_MODE:\r\n return setAdminMode(payload);\r\n default:\r\n return null;\r\n }\r\n};\r\n/*\r\n * Shared cache.\r\n */\r\nvar demographics = { id: 'demographics', shape: 3, category: '', name: 'Basic Demographics', tags: [] };\r\nvar firstCharCache = new Map();\r\nvar excluded = new Map([[demographics.id, demographics]]);\r\nvar allDs = new Map();\r\n/*\r\n * Admin-facing cache.\r\n */\r\nvar isAdmin = false;\r\nvar allCatDsAdmin = new Map();\r\nvar defaultOrderAdmin = new Map();\r\n/*\r\n * User-facing cache.\r\n */\r\nvar allCatDs = new Map();\r\nvar defaultOrder = new Map();\r\n/*\r\n * Set whether the worker should return search results to an admin (i.e., no exclusions),\r\n * or to a user.\r\n */\r\nvar setAdminMode = function (payload) {\r\n var requestId = payload.requestId, admin = payload.admin;\r\n isAdmin = admin;\r\n return { requestId: requestId, result: returnDefault() };\r\n};\r\n/*\r\n * Return the default display depending on whether the current mode is admin or user.\r\n */\r\nvar returnDefault = function () {\r\n if (isAdmin) {\r\n return { categories: allCatDsAdmin, displayOrder: defaultOrderAdmin };\r\n }\r\n return { categories: allCatDs, displayOrder: defaultOrder };\r\n};\r\n/*\r\n * Flatten categorized datasets map into an array of datasets.\r\n */\r\nvar getAllDatasetsArray = function () {\r\n var copy = new Map(allDs);\r\n if (!isAdmin) {\r\n copy.delete(demographics.id);\r\n }\r\n return [ ...copy.values() ];\r\n};\r\n/*\r\n * Reset excluded datasets cache. Called when users\r\n * reset the cohort and the patient list too is reset.\r\n */\r\nvar allowAllDatasets = function (payload) {\r\n var requestId = payload.requestId;\r\n excluded.clear();\r\n excluded.set(demographics.id, demographics);\r\n /*\r\n * Get default display and sort order.\r\n */\r\n var reSorted = dedupeAndSort(getAllDatasetsArray());\r\n allCatDs = reSorted.categories;\r\n defaultOrder = reSorted.displayOrder;\r\n return { requestId: requestId, result: returnDefault() };\r\n};\r\n/*\r\n * Allow or disallow a dataset to be included in search results.\r\n * Called as users add/remove datasets from the patient list screen.\r\n */\r\nvar allowDataset = function (payload) {\r\n var datasetId = payload.datasetId, allow = payload.allow;\r\n if (allow) {\r\n excluded.delete(datasetId);\r\n }\r\n else {\r\n var ds = allDs.get(datasetId);\r\n if (ds) {\r\n excluded.set(ds.id, ds);\r\n }\r\n }\r\n var datasets = getAllDatasetsArray().filter((ds) => !excluded.has(ds.id));\r\n var reSorted = dedupeAndSort(datasets);\r\n allCatDs = reSorted.categories;\r\n defaultOrder = reSorted.displayOrder;\r\n return searchDatasets(payload);\r\n};\r\n/*\r\n * Search through available datasets.\r\n */\r\nvar searchDatasets = function (payload) {\r\n var searchString = payload.searchString, requestId = payload.requestId;\r\n var terms = searchString.trim().split(' ');\r\n var termCount = terms.length;\r\n var firstTerm = terms[0];\r\n var datasets = firstCharCache.get(firstTerm[0]);\r\n var dsOut = [];\r\n if (!searchString) {\r\n return { requestId: requestId, result: returnDefault() };\r\n }\r\n if (!datasets) {\r\n return { requestId: requestId, result: { categories: new Map(), displayOrder: new Map() } };\r\n }\r\n // ******************\r\n // First term\r\n // ******************\r\n /*\r\n * Foreach dataset compare with search term one. If demographics\r\n * are disabled this is for a user, so leave out excluded datasets.\r\n */\r\n if (!isAdmin) {\r\n for (var i1 = 0; i1 < datasets.length; i1++) {\r\n var ds = datasets[i1];\r\n if (!excluded.has(ds.id) && ds.token.startsWith(firstTerm)) {\r\n dsOut.push(ds);\r\n }\r\n }\r\n /*\r\n * Else this is for an admin in the admin panel, so there are no exclusions.\r\n */\r\n }\r\n else {\r\n for (var i1 = 0; i1 < datasets.length; i1++) {\r\n var ds = datasets[i1];\r\n if (ds.token.startsWith(firstTerm)) {\r\n dsOut.push(ds);\r\n }\r\n }\r\n }\r\n if (terms.length === 1) {\r\n return { requestId: requestId, result: dedupeAndSortTokenized(dsOut) };\r\n }\r\n // ******************\r\n // Following terms\r\n // ******************\r\n /*\r\n * For datasets found in loop one\r\n */\r\n var dsFinal = [];\r\n for (var dsIdx = 0; dsIdx < dsOut.length; dsIdx++) {\r\n var otherTokens = dsOut[dsIdx].tokenArray.slice();\r\n var hitCount = 1;\r\n /*\r\n * Foreach term after the first (e.g. [ 'white', 'blood' ])\r\n * filter what first loop found and remove if no hit\r\n */\r\n for (var i2 = 1; i2 < termCount; i2++) {\r\n var term = terms[i2];\r\n /*\r\n * For each other term associated with the dataset name\r\n */\r\n for (var j = 0; j < otherTokens.length; j++) {\r\n if (otherTokens[j].startsWith(term)) {\r\n hitCount++;\r\n otherTokens.splice(j, 1);\r\n break;\r\n }\r\n }\r\n if (!otherTokens.length)\r\n break;\r\n }\r\n if (hitCount === termCount) {\r\n dsFinal.push(dsOut[dsIdx]);\r\n }\r\n }\r\n return { requestId: requestId, result: dedupeAndSortTokenized(dsFinal) };\r\n};\r\n/*\r\n * Extract datasets from tokenized refs and returns\r\n * a sorted, deduped result array.\r\n */\r\nvar dedupeAndSortTokenized = function (refs) {\r\n var ds = refs.map(function (r) { return r.dataset; });\r\n return dedupeAndSort(ds);\r\n};\r\n/*\r\n * Remove duplicates, sort alphabetically, and\r\n * return a displayable categorized array of datasets.\r\n */\r\nvar dedupeAndSort = function (refs) {\r\n var addedDatasets = new Set();\r\n var addedRefs = [];\r\n var out = new Map();\r\n var displayOrder = new Map();\r\n var includesDemographics = false;\r\n /*\r\n * Get unique only.\r\n */\r\n for (var i = 0; i < refs.length; i++) {\r\n var ref = refs[i];\r\n if (!addedDatasets.has(ref.id)) {\r\n if (ref.shape === 3) {\r\n includesDemographics = true;\r\n }\r\n else {\r\n if (!ref.category) {\r\n ref.category = '';\r\n }\r\n addedRefs.push(ref);\r\n addedDatasets.add(ref.id);\r\n }\r\n }\r\n }\r\n /*\r\n * Sort.\r\n */\r\n var sortedRefs = addedRefs.sort(function (a, b) {\r\n if (a.category === b.category) {\r\n return a.name > b.name ? 1 : -1;\r\n }\r\n return a.category > b.category ? 1 : -1;\r\n });\r\n if (includesDemographics) {\r\n sortedRefs.unshift(demographics);\r\n }\r\n var len = sortedRefs.length;\r\n var lastIdx = len - 1;\r\n /*\r\n * Add to map.\r\n */\r\n for (var i = 0; i < len; i++) {\r\n var ref = sortedRefs[i];\r\n var catObj = out.get(ref.category);\r\n var order = {\r\n prevId: i > 0 ? sortedRefs[i - 1].id : sortedRefs[lastIdx].id,\r\n nextId: i < lastIdx ? sortedRefs[i + 1].id : sortedRefs[0].id\r\n };\r\n displayOrder.set(ref.id, order);\r\n if (catObj) {\r\n catObj.datasets.set(ref.id, ref);\r\n }\r\n else {\r\n out.set(ref.category, { category: ref.category, datasets: new Map([[ref.id, ref]]) });\r\n }\r\n }\r\n return { categories: out, displayOrder: displayOrder };\r\n};\r\nvar reindexCacheFromExternal = function (payload) {\r\n var requestId = payload.requestId, datasets = payload.datasets;\r\n var sorted = reindexCacheCache(datasets);\r\n return { requestId: requestId, result: sorted };\r\n};\r\n/*\r\n * Reset the dataset search cache and (re)load\r\n * it with inbound datasets.\r\n */\r\nvar reindexCacheCache = function (datasets) {\r\n /*\r\n * Ensure 'Demographics'-shaped datasets are excluded (they shouldn't be here, but just to be safe).\r\n */\r\n var all = datasets.slice().filter(function (ds) { return ds.shape !== 3; });\r\n all.unshift(demographics);\r\n allDs.clear();\r\n allCatDs.clear();\r\n allCatDsAdmin.clear();\r\n allCatDsAdmin.set('', { category: '', datasets: new Map([[demographics.id, demographics]]) });\r\n firstCharCache.clear();\r\n excluded.clear();\r\n excluded.set(demographics.id, demographics);\r\n /*\r\n * Foreach dataset\r\n */\r\n for (var i = 0; i < all.length; i++) {\r\n var ds = all[i];\r\n var tokens = ds.name.toLowerCase().split(' ').concat(ds.tags);\r\n if (ds.category) {\r\n tokens = tokens.concat(ds.category.toLowerCase().split(' '));\r\n }\r\n if (ds.description) {\r\n tokens = tokens.concat(ds.description.toLowerCase().split(' '));\r\n }\r\n allDs.set(ds.id, ds);\r\n var _loop_1 = function (j) {\r\n var token = tokens[j];\r\n var ref = {\r\n id: ds.id,\r\n dataset: ds,\r\n token: token,\r\n tokenArray: tokens.filter(function (t) { return t !== token; })\r\n };\r\n var firstChar = token[0];\r\n /*\r\n * Cache the first first character for quick lookup.\r\n */\r\n if (!firstCharCache.has(firstChar)) {\r\n firstCharCache.set(firstChar, [ref]);\r\n }\r\n else {\r\n firstCharCache.get(firstChar).push(ref);\r\n }\r\n };\r\n for (var j = 0; j <= tokens.length - 1; j++) {\r\n _loop_1(j);\r\n }\r\n }\r\n /*\r\n * Set admin search default display.\r\n */\r\n var adminSorted = dedupeAndSort(all);\r\n allCatDsAdmin = adminSorted.categories;\r\n defaultOrderAdmin = adminSorted.displayOrder;\r\n /*\r\n * Set user search default display.\r\n */\r\n all.shift();\r\n var userSorted = dedupeAndSort(all);\r\n allCatDs = userSorted.categories;\r\n defaultOrder = userSorted.displayOrder;\r\n return userSorted;\r\n};\r\n`;","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport { PatientListDatasetQuery, DatasetSearchResult, CategorizedDatasetRef } from \"../models/patientList/Dataset\";\r\nimport { AppState } from \"../models/state/AppState\";\r\nimport { Dispatch } from \"redux\";\r\nimport { searchDatasets, allowAllDatasets, setAdminMode } from \"../services/datasetSearchApi\";\r\n\r\nexport const SET_DATASET = 'SET_DATASET';\r\nexport const SET_DATASET_SELECTED = 'SET_DATASET_SELECTED';\r\nexport const SET_DATASET_DISPLAY = 'SET_DATASET_DISPLAY';\r\nexport const SET_DATASETS = 'SET_DATASETS';\r\nexport const SET_DATASETS_SEARCH_TERM = 'SET_DATASET_SEARCH_TERM';\r\nexport const SET_DATASETS_SEARCH_RESULT = 'SET_DATASET_SEARCH_RESULT';\r\nexport const SWITCH_DATASET_OLD_FOR_NEW = 'SWITCH_DATASET_OLD_FOR_NEW';\r\nexport const REMOVE_DATASET = 'REMOVE_DATASET';\r\nexport const ADD_DATASET = 'ADD_DATASET';\r\nexport const MOVE_DATASET_CATEGORY = 'MOVE_DATASET_CATEGORY';\r\n\r\nexport interface DatasetAction {\r\n category?: string;\r\n categories?: Map;\r\n datasetsAvailableCount?: number;\r\n dataset?: PatientListDatasetQuery;\r\n datasets?: PatientListDatasetQuery[];\r\n newDataset?: PatientListDatasetQuery;\r\n result?: DatasetSearchResult;\r\n searchTerm?: string;\r\n type: string;\r\n}\r\n\r\n// Asynchronous\r\nexport const searchPatientListDatasets = (searchTerm: string) => {\r\n return async (dispatch: Dispatch, getState: () => AppState) => {\r\n const results = await searchDatasets(searchTerm);\r\n dispatch(setDatasetSearchResult(results));\r\n };\r\n};\r\n\r\nexport const resetPatientListDatasets = () => {\r\n return async (dispatch: Dispatch, getState: () => AppState) => {\r\n const results = await allowAllDatasets();\r\n dispatch(setDatasetSearchResult(results));\r\n dispatch(setDatasetSearchTerm(''));\r\n };\r\n};\r\n\r\nexport const setAdminDatasetSearchMode = (admin: boolean) => {\r\n return async (dispatch: Dispatch, getState: () => AppState) => {\r\n const results = await setAdminMode(admin);\r\n dispatch(setDatasetSearchResult(results));\r\n dispatch(setDatasetSearchTerm(''));\r\n };\r\n};\r\n\r\n// Synchronous\r\nexport const addDataset = (dataset: PatientListDatasetQuery): DatasetAction => {\r\n return {\r\n dataset,\r\n type: ADD_DATASET\r\n };\r\n};\r\n\r\nexport const setDataset = (dataset: PatientListDatasetQuery): DatasetAction => {\r\n return {\r\n dataset,\r\n type: SET_DATASET\r\n };\r\n};\r\n\r\nexport const switchDatasetOldForNew = (dataset: PatientListDatasetQuery, newDataset: PatientListDatasetQuery): DatasetAction => {\r\n return {\r\n dataset,\r\n newDataset,\r\n type: SWITCH_DATASET_OLD_FOR_NEW\r\n };\r\n};\r\n\r\nexport const setDatasetSelected = (dataset: PatientListDatasetQuery): DatasetAction => {\r\n return {\r\n dataset,\r\n type: SET_DATASET_SELECTED\r\n };\r\n};\r\n\r\nexport const setDatasetDisplay = (dataset: PatientListDatasetQuery): DatasetAction => {\r\n return {\r\n dataset,\r\n type: SET_DATASET_DISPLAY\r\n };\r\n};\r\n\r\nexport const moveDatasetCategory = (dataset: PatientListDatasetQuery, category: string): DatasetAction => {\r\n return {\r\n dataset, // dataset (with old category name)\r\n category, // new category name\r\n type: MOVE_DATASET_CATEGORY\r\n };\r\n};\r\n\r\n\r\nexport const setDatasets = (datasets: PatientListDatasetQuery[], result: DatasetSearchResult): DatasetAction => {\r\n return {\r\n result,\r\n datasets,\r\n type: SET_DATASETS\r\n };\r\n};\r\n\r\nexport const setDatasetSearchTerm = (searchTerm: string): DatasetAction => {\r\n return {\r\n searchTerm,\r\n type: SET_DATASETS_SEARCH_TERM\r\n };\r\n};\r\n\r\nexport const setDatasetSearchResult = (result: DatasetSearchResult): DatasetAction => {\r\n return {\r\n result,\r\n type: SET_DATASETS_SEARCH_RESULT\r\n };\r\n};\r\n\r\nexport const removeDataset = (dataset: PatientListDatasetQuery): DatasetAction => {\r\n return {\r\n dataset,\r\n type: REMOVE_DATASET\r\n }\r\n};","import { AdminDatasetQuery } from \"../../models/admin/Dataset\";\r\nimport { AdminPanelLoadState } from \"../../models/state/AdminState\";\r\nimport { AppState } from \"../../models/state/AppState\";\r\nimport { InformationModalState, NotificationStates } from \"../../models/state/GeneralUiState\";\r\nimport { showInfoModal, setNoClickModalState, setSideNotificationState } from \"../generalUi\";\r\nimport { PatientListDatasetQuery, PatientListDatasetShape } from \"../../models/patientList/Dataset\";\r\nimport { getAdminDataset, createDataset, updateDataset, deleteDataset, upsertDemographicsDataset } from \"../../services/admin/datasetApi\";\r\nimport { indexDatasets, searchDatasets } from \"../../services/datasetSearchApi\";\r\nimport { setDataset, removeDataset, setDatasetSearchResult, switchDatasetOldForNew, setDatasetSelected } from \"../datasets\";\r\n\r\nexport const SET_ADMIN_DATASET = 'SET_ADMIN_DATASET';\r\nexport const SET_ADMIN_DATASET_SQL = 'SET_ADMIN_DATASET_SQL';\r\nexport const SET_ADMIN_DATASET_SHAPE = 'SET_ADMIN_DATASET_SHAPE';\r\nexport const SET_ADMIN_DEMOGRAPHICS_DATASET = 'SET_ADMIN_DEMOGRAPHICS_DATASET';\r\nexport const SET_ADMIN_PANEL_DATASET_LOAD_STATE = 'SET_ADMIN_PANEL_DATASET_LOAD_STATE';\r\nexport const REMOVE_ADMIN_DATASET = 'REMOVE_ADMIN_DATASET';\r\n\r\nexport interface AdminDatasetAction {\r\n analyzeColumns?: boolean;\r\n changed?: boolean;\r\n dataset?: AdminDatasetQuery;\r\n shape?: PatientListDatasetShape;\r\n sql?: string;\r\n state?: AdminPanelLoadState;\r\n type: string;\r\n}\r\n\r\n// Asynchronous\r\n/*\r\n * Saves a new Dataset.\r\n */\r\nexport const saveAdminDataset = (dataset: AdminDatasetQuery) => {\r\n return async (dispatch: any, getState: () => AppState) => {\r\n let state = getState();\r\n\r\n try {\r\n dispatch(setNoClickModalState({ message: \"Saving\", state: NotificationStates.Working }));\r\n const newAdminDataset = dataset.unsaved\r\n ? await createDataset(state, dataset)\r\n : await updateDataset(state, dataset);\r\n dispatch(setAdminDataset(newAdminDataset, false, true));\r\n\r\n /*\r\n * Swap old for new in UI.\r\n */\r\n const oldUserDataset = findOldDisplayDataset(state, dataset);\r\n const userDataset = deriveUserDatasetFromAdmin(state, newAdminDataset);\r\n dispatch(switchDatasetOldForNew(oldUserDataset, userDataset));\r\n\r\n /*\r\n * Reindex search engine.\r\n */\r\n state = getState();\r\n const datasets: PatientListDatasetQuery[] = [ ...state.datasets.all.values() ];\r\n \r\n await indexDatasets(datasets);\r\n dispatch(setDataset(userDataset));\r\n dispatch(setDatasetSelected(userDataset));\r\n dispatch(setSideNotificationState({ state: NotificationStates.Complete, message: 'Dataset Saved' }));\r\n } catch (err) {\r\n console.log(err);\r\n const info: InformationModalState = {\r\n body: \"An error occurred while attempting to save the Dataset. Please see the Leaf error logs for details.\",\r\n header: \"Error Saving Dataset\",\r\n show: true\r\n };\r\n dispatch(showInfoModal(info));\r\n } finally {\r\n dispatch(setNoClickModalState({ state: NotificationStates.Hidden }));\r\n }\r\n }\r\n};\r\n\r\n/*\r\n * Saves the current demographics dataset.\r\n */\r\nexport const saveAdminDemographicsDataset = (dataset: AdminDatasetQuery) => {\r\n return async (dispatch: any, getState: () => AppState) => {\r\n const state = getState();\r\n\r\n try {\r\n dispatch(setNoClickModalState({ message: \"Saving\", state: NotificationStates.Working }));\r\n const newAdminDataset = await upsertDemographicsDataset(state, dataset);\r\n dispatch(setAdminDemographicsDataset(newAdminDataset, false));\r\n dispatch(setSideNotificationState({ state: NotificationStates.Complete, message: 'Dataset Saved' }));\r\n } catch (err) {\r\n console.log(err);\r\n const info: InformationModalState = {\r\n body: \"An error occurred while attempting to save the Dataset. Please see the Leaf error logs for details.\",\r\n header: \"Error Saving Dataset\",\r\n show: true\r\n };\r\n dispatch(showInfoModal(info));\r\n } finally {\r\n dispatch(setNoClickModalState({ state: NotificationStates.Hidden }));\r\n }\r\n }\r\n};\r\n\r\n/*\r\n * Delete a existing concept.\r\n */\r\nexport const deleteAdminDataset = (dataset: AdminDatasetQuery) => {\r\n return async (dispatch: any, getState: () => AppState) => {\r\n let state = getState();\r\n dispatch(setNoClickModalState({ message: \"Deleting\", state: NotificationStates.Working }));\r\n deleteDataset(state, dataset)\r\n .then(\r\n async (response) => {\r\n const userDataset = deriveUserDatasetFromAdmin(state, dataset);\r\n dispatch(removeDataset(userDataset));\r\n state = getState();\r\n const datasets: PatientListDatasetQuery[] = [ ...state.datasets.all.values() ];\r\n\r\n await indexDatasets(datasets);\r\n dispatch(setAdminDataset(undefined, false, false));\r\n dispatch(setSideNotificationState({ state: NotificationStates.Complete, message: 'Dataset Deleted' }));\r\n }, error => {\r\n const info: InformationModalState = {\r\n body: \"An error occurred while attempting to delete the Dataset. Please see the Leaf error logs for details.\",\r\n header: \"Error Deleting Dataset\",\r\n show: true\r\n };\r\n dispatch(showInfoModal(info));\r\n }\r\n ).then(() => dispatch(setNoClickModalState({ state: NotificationStates.Hidden })));\r\n }\r\n};\r\n\r\n/*\r\n * Fetch admin datatset if it hasn't already been loaded.\r\n */\r\nexport const fetchAdminDatasetIfNeeded = (dataset: PatientListDatasetQuery) => {\r\n return async (dispatch: any, getState: () => AppState) => {\r\n const state = getState();\r\n try {\r\n\r\n /*\r\n * Don't request from server if this is a newly-created Dataset.\r\n */\r\n if (dataset.unsaved) { return; }\r\n const adm = state.admin!.datasets;\r\n\r\n /*\r\n * If demographics, set that and short-circuit.\r\n */\r\n if (dataset.shape === PatientListDatasetShape.Demographics) {\r\n const { demographicsDataset } = state.admin!.datasets;\r\n dispatch(setAdminDataset(demographicsDataset, demographicsDataset.unsaved === true, true));\r\n return;\r\n }\r\n\r\n /*\r\n * Try to load from local cache.\r\n */ \r\n let admDataset = adm.datasets.get(dataset.id);\r\n\r\n /*\r\n * If not previously loaded, fetch from server.\r\n */ \r\n if (!admDataset) {\r\n dispatch(setAdminPanelDatasetLoadState(AdminPanelLoadState.LOADING));\r\n admDataset = await getAdminDataset(state, dataset.id);\r\n } \r\n dispatch(setAdminDataset(admDataset!, false, true));\r\n dispatch(setAdminPanelDatasetLoadState(AdminPanelLoadState.LOADED));\r\n } catch (err) {\r\n console.log(err);\r\n const info : InformationModalState = {\r\n header: \"Error Loading Dataset\",\r\n body: \"Leaf encountered an error while attempting to fetch a Dataset. Check the Leaf log file for details.\",\r\n show: true\r\n };\r\n dispatch(showInfoModal(info));\r\n dispatch(setAdminPanelDatasetLoadState(AdminPanelLoadState.ERROR));\r\n }\r\n };\r\n};\r\n\r\nexport const revertAdminDatasetChanges = (dataset: AdminDatasetQuery) => {\r\n return async (dispatch: any, getState: () => AppState) => {\r\n let state = getState();\r\n const { currentDataset, datasets, demographicsDataset } = state.admin!.datasets;\r\n\r\n if (currentDataset!.shape === PatientListDatasetShape.Demographics) {\r\n if (demographicsDataset.unsaved) {\r\n dispatch(setAdminDataset(undefined, false, false)); \r\n } else {\r\n dispatch(setAdminDataset(demographicsDataset, false, true));\r\n }\r\n } else {\r\n dispatch(setNoClickModalState({ message: \"Undoing\", state: NotificationStates.Working }));\r\n const originalAdminDataset = datasets.get(dataset.id)!;\r\n const userDataset = deriveUserDatasetFromAdmin(state, originalAdminDataset);\r\n const results = await searchDatasets(state.datasets.searchTerm);\r\n\r\n if (dataset.unsaved) {\r\n dispatch(setAdminDataset(undefined, false, false));\r\n dispatch(removeDataset(userDataset));\r\n } else {\r\n dispatch(setAdminDataset(originalAdminDataset, false, true));\r\n dispatch(setDataset(userDataset));\r\n }\r\n dispatch(removeAdminDataset(dataset));\r\n dispatch(setDatasetSearchResult(results));\r\n dispatch(setNoClickModalState({ state: NotificationStates.Hidden }));\r\n }\r\n };\r\n};\r\n\r\n// Synchonous\r\nexport const setAdminDataset = (dataset: AdminDatasetQuery | undefined, changed: boolean, analyzeColumns: boolean): AdminDatasetAction => {\r\n return {\r\n dataset,\r\n changed,\r\n analyzeColumns,\r\n type: SET_ADMIN_DATASET\r\n };\r\n};\r\n\r\nexport const removeAdminDataset = (dataset: AdminDatasetQuery): AdminDatasetAction => {\r\n return {\r\n dataset,\r\n type: REMOVE_ADMIN_DATASET\r\n };\r\n};\r\n\r\nexport const setAdminDatasetShape = (shape: PatientListDatasetShape): AdminDatasetAction => {\r\n return {\r\n shape,\r\n type: SET_ADMIN_DATASET_SHAPE\r\n };\r\n};\r\n\r\nexport const setAdminDatasetSql = (sql: string): AdminDatasetAction => {\r\n return {\r\n sql,\r\n type: SET_ADMIN_DATASET_SQL\r\n };\r\n};\r\n\r\nexport const setAdminDemographicsDataset = (dataset: AdminDatasetQuery, changed: boolean): AdminDatasetAction => {\r\n return {\r\n dataset,\r\n changed,\r\n type: SET_ADMIN_DEMOGRAPHICS_DATASET\r\n };\r\n};\r\n\r\nexport const setAdminPanelDatasetLoadState = (state: AdminPanelLoadState): AdminDatasetAction => {\r\n return {\r\n state,\r\n type: SET_ADMIN_PANEL_DATASET_LOAD_STATE\r\n };\r\n};\r\n\r\n/*\r\n * Helper functions;\r\n */\r\nconst deriveUserDatasetFromAdmin = (state: AppState, dataset: AdminDatasetQuery): PatientListDatasetQuery => {\r\n return {\r\n ...dataset,\r\n category: Boolean(dataset.categoryId)\r\n ? state.admin!.datasetQueryCategories.categories.get(dataset.categoryId!)!.category \r\n : ''\r\n }\r\n};\r\n\r\nconst findOldDisplayDataset = (state: AppState, dataset: AdminDatasetQuery): PatientListDatasetQuery => {\r\n const cat = Boolean(dataset.categoryId)\r\n ? state.admin!.datasetQueryCategories.categories.get(dataset.categoryId!)!.category\r\n : '';\r\n const ds = state.datasets.display.get(cat)!.datasets.get(dataset.id)!;\r\n ds.category = cat;\r\n return ds;\r\n}","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport { AppState } from '../../models/state/AppState';\r\nimport { HttpFactory } from '../HttpFactory';\r\nimport { DatasetQueryCategory } from '../../models/admin/Dataset';\r\n\r\n/*\r\n * Gets all current Dataset Query Categories.\r\n */ \r\nexport const getDatasetQueryCategories = async (state: AppState): Promise => {\r\n const { token } = state.session.context!;\r\n const http = HttpFactory.authenticated(token);\r\n const resp = await http.get('api/admin/datasetcategory');\r\n const cats = resp.data as DatasetQueryCategory[];\r\n return cats;\r\n};\r\n\r\n/*\r\n * Updates an existing Dataset Query Category\r\n */ \r\nexport const updateDatasetQueryCategory = async (state: AppState, cat: DatasetQueryCategory): Promise => {\r\n const { token } = state.session.context!;\r\n const http = HttpFactory.authenticated(token);\r\n const resp = await http.put(`api/admin/datasetcategory/${cat.id}`, cat);\r\n const updated = resp.data as DatasetQueryCategory;\r\n return updated;\r\n};\r\n\r\n/*\r\n * Creates a new Dataset Query Category.\r\n */ \r\nexport const createDatasetQueryCategory = async (state: AppState, cat: DatasetQueryCategory): Promise => {\r\n const { token } = state.session.context!;\r\n const http = HttpFactory.authenticated(token);\r\n const resp = await http.post(`api/admin/datasetcategory`, {\r\n ...cat,\r\n id: null\r\n });\r\n const newCat = resp.data as DatasetQueryCategory;\r\n return newCat;\r\n};\r\n\r\n/*\r\n * Deletes an existing Dataset Query Category.\r\n */ \r\nexport const deleteDatasetQueryCategory = async (state: AppState, cat: DatasetQueryCategory) => {\r\n const { token } = state.session.context!;\r\n const http = HttpFactory.authenticated(token);\r\n await http.delete(`api/admin/datasetcategory/${cat.id}`);\r\n};\r\n","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport { AppState } from \"../../models/state/AppState\";\r\nimport { setNoClickModalState, showInfoModal, setSideNotificationState } from \"../generalUi\";\r\nimport { NotificationStates, InformationModalState } from \"../../models/state/GeneralUiState\";\r\nimport { DatasetQueryCategory } from \"../../models/admin/Dataset\";\r\nimport { createDatasetQueryCategory, updateDatasetQueryCategory, deleteDatasetQueryCategory } from \"../../services/admin/datasetQueryCategoryApi\";\r\n\r\nexport const SET_ADMIN_DATASET_QUERY_CATEGORIES = 'SET_ADMIN_DATASET_QUERY_CATEGORIES';\r\nexport const SET_ADMIN_UNEDITED_DATASET_QUERY_CATEGORY = 'SET_ADMIN_UNEDITED_DATASET_QUERY_CATEGORY';\r\nexport const UNDO_ADMIN_DATASET_QUERY_CATEGORY_CHANGE = 'UNDO_ADMIN_DATASET_QUERY_CATEGORY_CHANGE';\r\nexport const REMOVE_ADMIN_DATASET_QUERY_CATEGORY = 'REMOVE_ADMIN_DATASET_QUERY_CATEGORY';\r\n\r\nexport interface AdminDatasetQueryCategoryAction {\r\n changed?: boolean;\r\n cat?: DatasetQueryCategory;\r\n cats?: DatasetQueryCategory[];\r\n type: string;\r\n}\r\n\r\n// Asynchronous\r\n/*\r\n * Save or update a Dataset Query Category, depending on\r\n * if it is preexisting or new.\r\n */\r\nexport const saveAdminDatasetQueryCategory = (cat: DatasetQueryCategory) => {\r\n return async (dispatch: any, getState: () => AppState) => {\r\n const state = getState();\r\n\r\n try {\r\n dispatch(setNoClickModalState({ message: \"Saving\", state: NotificationStates.Working }));\r\n const newCat = cat.unsaved\r\n ? await createDatasetQueryCategory(state, cat)\r\n : await updateDatasetQueryCategory(state, cat);\r\n\r\n dispatch(removeAdminDatasetQueryCategory(cat));\r\n dispatch(setAdminDatasetQueryCategory(newCat, false));\r\n dispatch(setSideNotificationState({ state: NotificationStates.Complete, message: 'Dataset Category Saved' }));\r\n } catch (err) {\r\n console.log(err);\r\n const info: InformationModalState = {\r\n body: \"An error occurred while attempting to save the Dataset Query Category. Please see the Leaf error logs for details.\",\r\n header: \"Error Saving Dataset Query Category\",\r\n show: true\r\n };\r\n dispatch(showInfoModal(info));\r\n } finally {\r\n dispatch(setNoClickModalState({ state: NotificationStates.Hidden }));\r\n }\r\n }\r\n};\r\n\r\n/*\r\n * Delete a existing Dataset Query Category.\r\n */\r\nexport const deleteAdminDatasetQueryCategory = (cat: DatasetQueryCategory) => {\r\n return async (dispatch: any, getState: () => AppState) => {\r\n try {\r\n const state = getState();\r\n dispatch(setNoClickModalState({ message: \"Deleting\", state: NotificationStates.Working }));\r\n deleteDatasetQueryCategory(state, cat)\r\n .then(\r\n response => {\r\n dispatch(removeAdminDatasetQueryCategory(cat));\r\n dispatch(setSideNotificationState({ state: NotificationStates.Complete, message: 'Dataset Category Deleted' }));\r\n }, error => {\r\n const info: InformationModalState = {\r\n body: \"An error occurred while attempting to delete the Dataset Query Category. Please see the Leaf error logs for details.\",\r\n header: \"Error Deleting Dataset Query Category\",\r\n show: true\r\n };\r\n dispatch(showInfoModal(info));\r\n }).then(() => dispatch(setNoClickModalState({ state: NotificationStates.Hidden })));\r\n } catch (err) {\r\n console.log(err);\r\n }\r\n }\r\n};\r\n\r\n// Synchronous\r\nexport const setAdminDatasetQueryCategory = (cat: DatasetQueryCategory, changed: boolean): AdminDatasetQueryCategoryAction => {\r\n return {\r\n cats: [ cat ],\r\n changed,\r\n type: SET_ADMIN_DATASET_QUERY_CATEGORIES\r\n };\r\n};\r\n\r\nexport const setAdminDatasetQueryCategories = (cats: DatasetQueryCategory[]): AdminDatasetQueryCategoryAction => {\r\n return {\r\n cats,\r\n type: SET_ADMIN_DATASET_QUERY_CATEGORIES\r\n };\r\n};\r\n\r\nexport const setAdminUneditedDatasetQueryCategory = (cat: DatasetQueryCategory): AdminDatasetQueryCategoryAction => {\r\n return {\r\n cat,\r\n type: SET_ADMIN_UNEDITED_DATASET_QUERY_CATEGORY\r\n };\r\n};\r\n\r\nexport const removeAdminDatasetQueryCategory = (cat: DatasetQueryCategory): AdminDatasetQueryCategoryAction => {\r\n return {\r\n cat,\r\n type: REMOVE_ADMIN_DATASET_QUERY_CATEGORY\r\n };\r\n};\r\n\r\nexport const undoAdminDatasetQueryCategoryChange = (): AdminDatasetQueryCategoryAction => {\r\n return {\r\n type: UNDO_ADMIN_DATASET_QUERY_CATEGORY_CHANGE\r\n };\r\n};","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport { AppState } from \"../../models/state/AppState\";\r\nimport { NetworkEndpoint, Certificate } from \"../../models/admin/Network\";\r\nimport { HttpFactory } from \"../HttpFactory\";\r\nimport { NetworkIdentity } from \"../../models/NetworkResponder\";\r\n\r\n/*\r\n * Get all current network endpoints with admin metadata.\r\n */\r\nexport const getNetworkEndpoints = async (state: AppState): Promise => {\r\n const { token } = state.session.context!;\r\n const http = HttpFactory.authenticated(token);\r\n const resp = await http.get(`api/admin/network/endpoint`);\r\n return resp.data;\r\n};\r\n\r\n/*\r\n * Upsert identity.\r\n */\r\nexport const upsertIdentity = async (state: AppState, identity: NetworkIdentity): Promise => {\r\n const { token } = state.session.context!;\r\n const http = HttpFactory.authenticated(token);\r\n const resp = await http.post(`api/admin/network`, identity);\r\n return resp.data;\r\n};\r\n\r\n/*\r\n * Create an endpoint.\r\n */\r\nexport const createEndpoint = async (state: AppState, endpoint: NetworkEndpoint): Promise => {\r\n const { token } = state.session.context!;\r\n const http = HttpFactory.authenticated(token);\r\n const resp = await http.post(`api/admin/network/endpoint`, endpoint);\r\n return resp.data;\r\n};\r\n\r\n/*\r\n * Update an endpoint.\r\n */\r\nexport const updateEndpoint = async (state: AppState, endpoint: NetworkEndpoint): Promise => {\r\n const { token } = state.session.context!;\r\n const http = HttpFactory.authenticated(token);\r\n const resp = await http.put(`api/admin/network/endpoint/${endpoint.id}`, endpoint);\r\n return resp.data;\r\n};\r\n\r\n/*\r\n * Delete an endpoint.\r\n */\r\nexport const deleteEndpoint = async (state: AppState, endpoint: NetworkEndpoint): Promise => {\r\n const { token } = state.session.context!;\r\n const http = HttpFactory.authenticated(token);\r\n const resp = await http.delete(`api/admin/network/endpoint/${endpoint.id}`);\r\n return resp.data;\r\n};\r\n\r\n/* \r\n * Get certificate for a given endpoint.\r\n */\r\nexport const getCertificate = async (state: AppState, address: string): Promise => {\r\n const { token } = state.session.context!;\r\n const http = HttpFactory.authenticated(token);\r\n const resp = await http.get(`${address}/api/network/certificate`);\r\n return resp.data;\r\n};","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */\r\n\r\nimport { AppState } from \"../../models/state/AppState\";\r\nimport { AdminNetworkAndIdentityState } from \"../../models/state/AdminState\";\r\nimport { upsertIdentity } from \"../../services/admin/networkAndIdentityApi\";\r\nimport { saveOrUpdateNetworkEndpoint } from \"../../actions/admin/networkAndIdentity\";\r\n\r\n/*\r\n * Create async function queue to process all changes\r\n * to the current network identity and endpoints.\r\n */\r\nexport const getApiUpdateQueue = (networkAndIdentity: AdminNetworkAndIdentityState, dispatch: any, state: AppState): any[] => {\r\n const queue: any[] = [];\r\n\r\n if (networkAndIdentity.identity !== networkAndIdentity.uneditedIdentity) {\r\n queue.push( async () => upsertIdentity(state, networkAndIdentity.identity));\r\n }\r\n\r\n networkAndIdentity.endpoints.forEach((endpoint) => {\r\n if (endpoint.unsaved || endpoint.changed) {\r\n queue.push( async () => saveOrUpdateNetworkEndpoint(endpoint, dispatch, state));\r\n }\r\n });\r\n return queue;\r\n};","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nexport const workerContext = `\r\nvar handleWorkMessage = function (payload) {\r\n switch (payload.message) {\r\n case AGGREGATE_STATISTICS:\r\n return aggregateStatistics(payload);\r\n default:\r\n return null;\r\n }\r\n};\r\nvar aggregateStatistics = function (payload) {\r\n var cohorts = payload.cohorts, responders = payload.responders, requestId = payload.requestId;\r\n var preAgg = [];\r\n cohorts.forEach(function (c) {\r\n if (responders.get(c.id).enabled && c.visualization && c.visualization.demographics) {\r\n preAgg.push(c.visualization.demographics);\r\n }\r\n });\r\n var aggregate = preAgg.reduce(function (agg, target) {\r\n // For all age by gender buckets (eg, 35-44, 45-54, 55-64)\r\n Object.keys(agg.ageByGenderData.buckets).forEach(function (bucketKey) {\r\n var aggBucket = agg.ageByGenderData.buckets[bucketKey];\r\n var targetBucket = target.ageByGenderData.buckets[bucketKey];\r\n // For all gender identifications, sum\r\n Object.keys(aggBucket).forEach(function (genderKey) {\r\n aggBucket[genderKey] += targetBucket[genderKey];\r\n });\r\n });\r\n // Binary splits are in arrays which should always be in the same order, but\r\n // match up by category strings to be safe\r\n agg.binarySplitData.forEach(function (v) {\r\n var t = target.binarySplitData.find(function (x) { return x.category === v.category; });\r\n if (t) {\r\n v.left.value += t.left.value;\r\n v.right.value += t.right.value;\r\n }\r\n });\r\n return agg;\r\n });\r\n return { requestId: requestId, result: aggregate };\r\n};`","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nexport enum NumericFilterType { None, GreaterThan, GreaterThanOrEqualTo, LessThan, LessThanOrEqualTo, EqualTo, Between }\r\n\r\nexport interface NumericFilter {\r\n filterType: NumericFilterType;\r\n filter: number[] | null[];\r\n}\r\n\r\nexport interface NumericFilterDTO {\r\n filterType: NumericFilterType;\r\n filter: number[];\r\n}","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport { CohortMap } from '../models/state/CohortState';\r\nimport { NetworkResponderMap } from '../models/NetworkResponder';\r\nimport CohortAggregatorWebWorker from '../providers/cohortAggregator/cohortAggregatorWebWorker';\r\n\r\nconst aggregator = new CohortAggregatorWebWorker();\r\n\r\nexport const aggregateStatistics = (cohorts: CohortMap, responders: NetworkResponderMap) => {\r\n return new Promise( async (resolve, reject) => {\r\n const agg = await aggregator.aggregateStatistics(cohorts, responders);\r\n resolve(agg);\r\n });\r\n};\r\n","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport { generate as generateId } from 'shortid';\r\nimport { CohortMap, NetworkCohortState } from '../../models/state/CohortState';\r\nimport { AgeByGenderBucket, BinarySplitPair, DemographicStatistics } from '../../models/cohort/DemographicDTO';\r\nimport { NetworkResponderMap } from '../../models/NetworkResponder';\r\nimport { workerContext } from './cohortAggregatorWebWorkerContext';\r\n\r\nconst AGGREGATE_STATISTICS = 'AGGREGATE_STATISTICS';\r\n\r\ninterface InboundMessagePartialPayload {\r\n cohorts?: CohortMap;\r\n message: string;\r\n responders?: NetworkResponderMap;\r\n}\r\n\r\ninterface InboundMessagePayload extends InboundMessagePartialPayload {\r\n requestId: string;\r\n}\r\n\r\ninterface OutboundMessagePayload {\r\n requestId: string;\r\n result?: any;\r\n}\r\n\r\ninterface WorkerReturnPayload {\r\n data: OutboundMessagePayload;\r\n}\r\n\r\ninterface PromiseResolver {\r\n reject: any;\r\n resolve: any;\r\n}\r\n\r\nexport default class CohortAggregatorWebWorker {\r\n private worker: Worker;\r\n private reject: any;\r\n private promiseMap: Map = new Map();\r\n\r\n constructor() {\r\n const workerFile = ` \r\n ${this.addMessageTypesToContext([ AGGREGATE_STATISTICS ])}\r\n ${workerContext}\r\n self.onmessage = function(e) { \r\n self.postMessage(handleWorkMessage.call(this, e.data, postMessage)); \r\n }`;\r\n // console.log(workerFile);\r\n const blob = new Blob([workerFile], { type: 'text/javascript' });\r\n this.worker = new Worker(URL.createObjectURL(blob));\r\n this.worker.onmessage = result => this.handleReturnPayload(result);\r\n this.worker.onerror = error => { console.log(error); this.reject(error) };\r\n }\r\n\r\n public aggregateStatistics = (cohorts: CohortMap, responders: NetworkResponderMap) => {\r\n return this.postMessage({ message: AGGREGATE_STATISTICS, cohorts, responders });\r\n }\r\n\r\n private postMessage = (payload: InboundMessagePartialPayload) => {\r\n return new Promise((resolve, reject) => {\r\n const requestId = generateId();\r\n this.reject = reject;\r\n this.promiseMap.set(requestId, { resolve, reject });\r\n this.worker.postMessage({ ...payload, requestId });\r\n });\r\n }\r\n\r\n private handleReturnPayload = (payload: WorkerReturnPayload): any => {\r\n const data = payload.data.result ? payload.data.result : {}\r\n const resolve = this.promiseMap.get(payload.data.requestId)!.resolve;\r\n this.promiseMap.delete(payload.data.requestId);\r\n return resolve(data);\r\n }\r\n\r\n private stripFunctionToContext = (f: () => any) => {\r\n const funcString = `${f}`;\r\n return funcString\r\n .substring(0, funcString.lastIndexOf('}'))\r\n .substring(funcString.indexOf('{') + 1)\r\n }\r\n\r\n private addMessageTypesToContext = (messageTypes: string[]) => {\r\n return messageTypes.map((v: string) => `var ${v} = '${v}';`).join(' ');\r\n }\r\n\r\n private workerContext = () => {\r\n\r\n const handleWorkMessage = (payload: InboundMessagePayload) => {\r\n switch (payload.message) {\r\n case AGGREGATE_STATISTICS:\r\n return aggregateStatistics(payload);\r\n default:\r\n return null;\r\n }\r\n };\r\n\r\n const aggregateStatistics = (payload: InboundMessagePayload): OutboundMessagePayload => {\r\n const { cohorts, responders, requestId } = payload;\r\n const preAgg: DemographicStatistics[] = [];\r\n cohorts!.forEach((c: NetworkCohortState) => {\r\n if (responders!.get(c.id)!.enabled && c.visualization && c.visualization.demographics) {\r\n preAgg.push(c.visualization.demographics);\r\n }\r\n });\r\n\r\n const aggregate = preAgg.reduce((agg: DemographicStatistics, target: DemographicStatistics) => {\r\n\r\n // For all age by gender buckets (eg, 35-44, 45-54, 55-64)\r\n Object.keys(agg.ageByGenderData.buckets).forEach((bucketKey: any) => {\r\n const aggBucket: AgeByGenderBucket = agg.ageByGenderData.buckets[bucketKey];\r\n const targetBucket: AgeByGenderBucket = target.ageByGenderData.buckets[bucketKey];\r\n\r\n // For all gender identifications, sum\r\n Object.keys(aggBucket).forEach((genderKey: any) => {\r\n aggBucket[genderKey] += targetBucket[genderKey];\r\n })\r\n });\r\n \r\n // Binary splits are in arrays which should always be in the same order, but\r\n // match up by category strings to be safe\r\n agg.binarySplitData.forEach((v: BinarySplitPair) => {\r\n const t = target.binarySplitData.find((x: BinarySplitPair) => x.category === v.category);\r\n if (t) {\r\n v.left.value += t.left.value;\r\n v.right.value += t.right.value;\r\n }\r\n });\r\n return agg;\r\n })\r\n\r\n return { requestId, result: aggregate };\r\n }\r\n }\r\n}","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport { DemographicStatistics } from '../../models/cohort/DemographicDTO';\r\n\r\n// Cohort visualize actions\r\nexport const VISUALIZATION_REQUEST = 'REQUEST_VISUALIZATION_DATA';\r\nexport const VISUALIZATION_SET_NETWORK = 'VISUALIZATION_SET_NETWORK';\r\nexport const VISUALIZATION_SET_AGGREGATE = 'VISUALIZATION_SET_AGGREGATE';\r\n\r\nexport interface CohortVisualizationAction {\r\n id: number;\r\n vizResults?: DemographicStatistics;\r\n error?: string;\r\n type: string;\r\n}\r\n\r\n// Synchronous\r\nexport const setNetworkVisualizationData = (id: number, vizResults: DemographicStatistics): CohortVisualizationAction => {\r\n return {\r\n id,\r\n type: VISUALIZATION_SET_NETWORK,\r\n vizResults\r\n };\r\n};\r\n\r\nexport const setAggregateVisualizationData = (vizResults: DemographicStatistics): CohortVisualizationAction => {\r\n return {\r\n id: 0,\r\n type: VISUALIZATION_SET_AGGREGATE,\r\n vizResults\r\n };\r\n};\r\n","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport { Dispatch } from 'redux';\r\nimport { AppState } from '../models/state/AppState';\r\nimport { CohortStateType } from '../models/state/CohortState';\r\nimport { DemographicStatistics } from '../models/cohort/DemographicDTO';\r\nimport { NetworkIdentity } from '../models/NetworkResponder';\r\nimport { aggregateStatistics } from '../services/cohortAggregatorApi';\r\nimport { setAggregateVisualizationData } from './cohort/visualize';\r\n\r\nexport const SET_RESPONDERS = 'SET_RESPONDERS';\r\nexport const ERROR_RESPONDER = 'ERROR_RESPONDER';\r\nexport const ENABLE_RESPONDER = 'ENABLE_RESPONDER';\r\nexport const DISABLE_RESPONDER = 'DISABLE_RESPONDER';\r\n\r\nexport interface NetworkRespondersAction {\r\n responders?: NetworkIdentity[];\r\n responder?: NetworkIdentity;\r\n id?: number;\r\n error?: string;\r\n type: string;\r\n}\r\n\r\n// Asynchronous\r\n/*\r\n * Handles a responder enable/disable click. If\r\n * a cohort visualization/patient list has been loaded,\r\n * the responder's patients are added/removed from the\r\n * aggregate accordingly.\r\n */\r\nexport const handleResponderToggle = (id: NetworkIdentity) => {\r\n return async (dispatch: Dispatch, getState: () => AppState) => {\r\n \r\n // Toggle responder enabled status (this updates UI and recalculates total count)\r\n const responderUpdate = !id.enabled ? enableResponder : disableResponder;\r\n dispatch(responderUpdate(id.id));\r\n\r\n // Check if we need to reaggregate visualizations\r\n const state = getState();\r\n if (state.cohort.visualization.state === CohortStateType.LOADED) {\r\n const aggregate = await aggregateStatistics(state.cohort.networkCohorts, state.responders) as DemographicStatistics;\r\n dispatch(setAggregateVisualizationData(aggregate));\r\n }\r\n };\r\n};\r\n\r\n// Synchronous\r\nexport const enableResponder = (id: number): NetworkRespondersAction => {\r\n return {\r\n id,\r\n type: ENABLE_RESPONDER\r\n };\r\n};\r\n\r\nexport const disableResponder = (id: number): NetworkRespondersAction => {\r\n return {\r\n id,\r\n type: DISABLE_RESPONDER\r\n };\r\n};\r\n\r\nexport const setResponder = (responder: NetworkIdentity): NetworkRespondersAction => {\r\n return {\r\n responders: [ responder ],\r\n type: SET_RESPONDERS\r\n };\r\n};\r\n\r\nexport const setResponders = (responders: NetworkIdentity[]): NetworkRespondersAction => {\r\n return {\r\n responders,\r\n type: SET_RESPONDERS\r\n };\r\n};\r\n\r\nexport const errorResponder = (id: number, error: string): NetworkRespondersAction => {\r\n return {\r\n error,\r\n id,\r\n type: ERROR_RESPONDER\r\n };\r\n};\r\n","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport { NetworkIdentity } from \"../../models/NetworkResponder\";\r\nimport { NetworkEndpoint, Certificate } from \"../../models/admin/Network\";\r\nimport { AppState } from \"../../models/state/AppState\";\r\nimport { createEndpoint, updateEndpoint, deleteEndpoint, getCertificate } from \"../../services/admin/networkAndIdentityApi\";\r\nimport { setNoClickModalState, showInfoModal, setSideNotificationState } from \"../generalUi\";\r\nimport { NotificationStates, InformationModalState } from \"../../models/state/GeneralUiState\";\r\nimport { getApiUpdateQueue } from \"../../utils/admin/networkAndidentity\";\r\nimport { setResponder } from \"../networkResponders\";\r\n\r\nexport const SET_ADMIN_NETWORK_IDENTITY = 'SET_ADMIN_NETWORK_IDENTITY';\r\nexport const SET_ADMIN_NETWORK_ENDPOINT = 'SET_ADMIN_NETWORK_ENDPOINT';\r\nexport const SET_ADMIN_NETWORK_ENDPOINTS = 'SET_ADMIN_NETWORK_ENDPOINTS';\r\nexport const SET_ADMIN_NETWORK_CERT_MODAL = 'SET_ADMIN_NETWORK_CERT_MODAL';\r\nexport const TOGGLE_ADMIN_NETWORK_CERT_MODAL_SHOWN = 'TOGGLE_ADMIN_NETWORK_CERT_MODAL_SHOWN';\r\nexport const REMOVE_ADMIN_NETWORK_ENDPOINT = 'REMOVE_ADMIN_NETWORK_ENDPOINT';\r\nexport const REVERT_ADMIN_NETWORK_CHANGES = 'REVERT_ADMIN_NETWORK_CHANGES';\r\n\r\nexport interface AdminNetworkAndIdentityAction {\r\n changed?: boolean;\r\n cert?: Certificate;\r\n endpoint?: NetworkEndpoint;\r\n endpoints?: NetworkEndpoint[];\r\n identity?: NetworkIdentity;\r\n show?: boolean;\r\n type: string;\r\n}\r\n\r\n// Asynchronous\r\n/*\r\n * Process all queued Network Identity & Endpoint API operations sequentially.\r\n */\r\nexport const processApiUpdateQueue = () => {\r\n return async (dispatch: any, getState: () => AppState) => {\r\n const state = getState();\r\n dispatch(setNoClickModalState({ message: \"Saving\", state: NotificationStates.Working }));\r\n\r\n try {\r\n const queue = getApiUpdateQueue(state.admin!.networkAndIdentity, dispatch, state);\r\n for (const process of queue) {\r\n await process();\r\n }\r\n\r\n // All done!\r\n dispatch(setResponder(state.admin!.networkAndIdentity.identity));\r\n dispatch(setAdminNetworkIdentity(state.admin!.networkAndIdentity.identity, false));\r\n dispatch(setSideNotificationState({ state: NotificationStates.Complete, message: 'Changes Saved' }));\r\n } catch (err) {\r\n console.log(err);\r\n const info: InformationModalState = {\r\n body: \"An error occurred while attempting update the Leaf database with your changes. Please see the Leaf error logs for details.\",\r\n header: \"Error Applying Changes\",\r\n show: true\r\n };\r\n dispatch(showInfoModal(info));\r\n } finally {\r\n dispatch(setNoClickModalState({ state: NotificationStates.Hidden }));\r\n }\r\n }\r\n};\r\n\r\n/*\r\n * Save or update a Network Endpoint, depending on\r\n * if it is preexisting or new.\r\n */\r\nexport const saveOrUpdateNetworkEndpoint = async (endpoint: NetworkEndpoint, dispatch: any, state: AppState): Promise => {\r\n let newEndpoint = null;\r\n if (endpoint.unsaved) {\r\n newEndpoint = await createEndpoint(state, endpoint);\r\n dispatch(removeAdminNetworkEndpoint(endpoint));\r\n } else {\r\n newEndpoint = await updateEndpoint(state, endpoint);\r\n }\r\n dispatch(setAdminNetworkEndpoint(newEndpoint, false));\r\n return newEndpoint;\r\n};\r\n\r\n/*\r\n * Delete a existing Concept Specialization.\r\n */\r\nexport const deleteNetworkEndpoint = (endpoint: NetworkEndpoint) => {\r\n return async (dispatch: any, getState: () => AppState) => {\r\n try {\r\n const state = getState();\r\n dispatch(setNoClickModalState({ message: \"Deleting\", state: NotificationStates.Working }));\r\n deleteEndpoint(state, endpoint)\r\n .then(\r\n response => {\r\n dispatch(removeAdminNetworkEndpoint(endpoint));\r\n dispatch(setSideNotificationState({ state: NotificationStates.Complete, message: 'Endpoint Deleted' }));\r\n }, error => {\r\n dispatch(setNoClickModalState({ state: NotificationStates.Hidden }));\r\n const info: InformationModalState = {\r\n body: \"An error occurred while attempting to delete the Network Endpoint. Please see the Leaf error logs for details.\",\r\n header: \"Error Deleting Network Endpoint\",\r\n show: true\r\n };\r\n dispatch(showInfoModal(info));\r\n }).then(() => dispatch(setNoClickModalState({ state: NotificationStates.Hidden })));\r\n } catch (err) {\r\n console.log(err);\r\n } \r\n }\r\n};\r\n\r\n/*\r\n * Test and attempt to load remote Leaf instance cert\r\n * info based on current URL.\r\n */\r\nexport const attemptLoadRemoteLeafCert = (endpoint: NetworkEndpoint) => {\r\n return async (dispatch: any, getState: () => AppState) => {\r\n try {\r\n dispatch(setNoClickModalState({ message: \"Phoning a friend...\", state: NotificationStates.Working }));\r\n const cert = await getCertificate(getState(), endpoint.address);\r\n dispatch(setAdminNetworkCertModalContent(cert, endpoint));\r\n } catch (err) {\r\n const info: InformationModalState = {\r\n body: `No remote Leaf instance was found at ${endpoint.address}. Check that the address is correct and try again.`,\r\n header: \"No Leaf Instance found\",\r\n show: true\r\n };\r\n dispatch(showInfoModal(info));\r\n }\r\n dispatch(setNoClickModalState({ state: NotificationStates.Hidden }));\r\n }\r\n};\r\n\r\n// Synchronous\r\nexport const setAdminNetworkIdentity = (identity: NetworkIdentity, changed: boolean): AdminNetworkAndIdentityAction => {\r\n return {\r\n changed,\r\n identity,\r\n type: SET_ADMIN_NETWORK_IDENTITY\r\n };\r\n};\r\n\r\nexport const setAdminNetworkEndpoint = (endpoint: NetworkEndpoint, changed: boolean): AdminNetworkAndIdentityAction => {\r\n return {\r\n changed,\r\n endpoint,\r\n type: SET_ADMIN_NETWORK_ENDPOINT\r\n };\r\n};\r\n\r\nexport const setAdminNetworkEndpoints = (endpoints: NetworkEndpoint[]): AdminNetworkAndIdentityAction => {\r\n return {\r\n endpoints,\r\n type: SET_ADMIN_NETWORK_ENDPOINTS\r\n };\r\n};\r\n\r\nexport const removeAdminNetworkEndpoint = (endpoint: NetworkEndpoint): AdminNetworkAndIdentityAction => {\r\n return {\r\n endpoint,\r\n type: REMOVE_ADMIN_NETWORK_ENDPOINT\r\n };\r\n};\r\n\r\nexport const revertAdminNetworkChanges = (): AdminNetworkAndIdentityAction => {\r\n return {\r\n type: REVERT_ADMIN_NETWORK_CHANGES\r\n };\r\n};\r\n\r\nexport const setAdminNetworkCertModalContent = (cert: Certificate, endpoint: NetworkEndpoint): AdminNetworkAndIdentityAction => {\r\n return {\r\n cert,\r\n endpoint,\r\n type: SET_ADMIN_NETWORK_CERT_MODAL\r\n }\r\n}\r\n\r\nexport const setAdminNetworkCertModalShown = (show: boolean): AdminNetworkAndIdentityAction => {\r\n return {\r\n show,\r\n type: TOGGLE_ADMIN_NETWORK_CERT_MODAL_SHOWN\r\n }\r\n}","import { showInfoModal, setNoClickModalState } from \"../generalUi\";\r\nimport { InformationModalState, NotificationStates } from \"../../models/state/GeneralUiState\";\r\nimport { AdminPanelLoadState, AdminPanelPane } from \"../../models/state/AdminState\";\r\nimport { AppState } from \"../../models/state/AppState\";\r\nimport { getAdminSqlConfiguration } from \"./configuration\";\r\nimport { getSqlSets } from \"../../services/admin/sqlSetApi\";\r\nimport { getConceptEvents } from \"../../services/admin/conceptEventApi\";\r\nimport { setAdminConceptSqlSets } from \"./sqlSet\";\r\nimport { setAdminConceptEvents } from \"./conceptEvent\";\r\nimport { getAdminDemographicsDataset } from \"../../services/admin/datasetApi\";\r\nimport { setAdminDemographicsDataset } from \"./dataset\";\r\nimport { getDatasetQueryCategories } from \"../../services/admin/datasetQueryCategoryApi\";\r\nimport { setAdminDatasetQueryCategories } from \"./datasetQueryCategory\";\r\nimport { getNetworkEndpoints } from \"../../services/admin/networkAndIdentityApi\";\r\nimport { setAdminNetworkEndpoints } from \"./networkAndIdentity\";\r\n\r\nexport const SET_ADMIN_PANEL_PANE = 'SET_ADMIN_PANEL_PANE';\r\nexport const SET_ADMIN_PANEL_LOAD_STATE = 'SET_ADMIN_PANEL_LOAD_STATE';\r\n\r\nexport interface AdminPanelAction {\r\n pane?: AdminPanelPane;\r\n state?: AdminPanelLoadState;\r\n type: string;\r\n}\r\n\r\n// Asynchronous\r\n/*\r\n * Fetch Admin Panel data if it hasn't already been loaded.\r\n */\r\nexport const loadAdminPanelDataIfNeeded = () => {\r\n return async (dispatch: any, getState: () => AppState) => {\r\n const state = getState();\r\n if (state.auth.userContext!.isAdmin && state.admin!.state === AdminPanelLoadState.NOT_LOADED) {\r\n try {\r\n dispatch(setNoClickModalState({ message: \"Loading\", state: NotificationStates.Working }));\r\n\r\n /*\r\n * Load Leaf instance configuration.\r\n */\r\n dispatch(getAdminSqlConfiguration());\r\n\r\n /*\r\n * Load Concept-related data.\r\n */ \r\n const sqlSets = await getSqlSets(state);\r\n const conceptEvents = await getConceptEvents(state);\r\n dispatch(setAdminConceptSqlSets(sqlSets, false));\r\n dispatch(setAdminConceptEvents(conceptEvents));\r\n\r\n /*\r\n * Load datasets data.\r\n */\r\n const demographics = await getAdminDemographicsDataset(state);\r\n const datasetQueryCategories = await getDatasetQueryCategories(state);\r\n dispatch(setAdminDemographicsDataset(demographics, false));\r\n dispatch(setAdminDatasetQueryCategories(datasetQueryCategories));\r\n\r\n /*\r\n * Load network & identity data.\r\n */\r\n const endpoints = await getNetworkEndpoints(state);\r\n dispatch(setAdminNetworkEndpoints(endpoints));\r\n\r\n /*\r\n * Finish.\r\n */\r\n dispatch(setAdminPanelLoadState(AdminPanelLoadState.LOADED));\r\n dispatch(setNoClickModalState({ state: NotificationStates.Hidden }));\r\n } catch (err) {\r\n const info: InformationModalState = {\r\n body: \"Leaf encountered an error while attempting to load Admin data. Please check the Leaf log files for more information.\",\r\n header: \"Error Loading Admin Data\",\r\n show: true\r\n };\r\n dispatch(setNoClickModalState({ state: NotificationStates.Hidden }));\r\n dispatch(showInfoModal(info));\r\n }\r\n }\r\n };\r\n};\r\n\r\n/*\r\n * Handle switching between Admin Panel views. Prevents\r\n * view pane changes if admin has unsaved changes.\r\n */\r\nexport const checkIfAdminPanelUnsavedAndSetPane = (pane: AdminPanelPane) => {\r\n return async (dispatch: any, getState: () => AppState) => {\r\n const admin = getState().admin!;\r\n if (\r\n admin.concepts.changed || \r\n admin.sqlSets.changed ||\r\n admin.datasets.changed ||\r\n admin.networkAndIdentity.changed\r\n ) {\r\n const info: InformationModalState = {\r\n body: \"Please save or undo your current changes first.\",\r\n header: \"Save or Undo Changes\",\r\n show: true\r\n };\r\n dispatch(showInfoModal(info));\r\n } else {\r\n dispatch(setAdminPanelPane(pane));\r\n }\r\n };\r\n};\r\n\r\n// Synchronous\r\nexport const setAdminPanelLoadState = (state: AdminPanelLoadState): AdminPanelAction => {\r\n return {\r\n state,\r\n type: SET_ADMIN_PANEL_LOAD_STATE\r\n };\r\n};\r\n\r\nexport const setAdminPanelPane = (pane: number): AdminPanelAction => {\r\n return {\r\n pane,\r\n type: SET_ADMIN_PANEL_PANE\r\n };\r\n};\r\n","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport { Concept, ResourceRef, ConceptSpecialization, ExtensionConcept } from '../concept/Concept';\r\nimport { NumericFilter, NumericFilterType, NumericFilterDTO } from './NumericFilter';\r\nimport { RecencyFilterType } from './RecencyFilter';\r\nimport { isEmbeddedQuery } from '../../utils/panelUtils';\r\n\r\nexport interface BasePanelItem {\r\n hidden?: boolean;\r\n index: number;\r\n numericFilter: NumericFilter;\r\n recencyFilter: RecencyFilterType;\r\n subPanelIndex: number;\r\n panelIndex: number;\r\n specializations: ConceptSpecialization[];\r\n}\r\n\r\nexport interface PanelItemDTO {\r\n resource: ResourceRef;\r\n id: string;\r\n index: number;\r\n numericFilter: NumericFilter;\r\n recencyFilter: RecencyFilterType;\r\n specializations: ConceptSpecialization[];\r\n}\r\n\r\nexport interface PanelItem extends BasePanelItem {\r\n concept: Concept;\r\n id: string;\r\n}\r\n\r\nexport const panelItemToDto = (panelItem: PanelItem): PanelItemDTO => {\r\n return {\r\n resource: {\r\n id: isEmbeddedQuery(panelItem.concept.universalId) \r\n ? (panelItem.concept as ExtensionConcept).extensionId\r\n : panelItem.concept.id,\r\n universalId: panelItem.concept.universalId!,\r\n uiDisplayName: panelItem.concept.uiDisplayName\r\n },\r\n id: panelItem.id,\r\n index: panelItem.index,\r\n numericFilter: panelItemNumericFilterToDto(panelItem.numericFilter),\r\n recencyFilter: panelItem.recencyFilter,\r\n specializations: panelItem.specializations\r\n }\r\n};\r\n\r\nconst panelItemNumericFilterToDto = (numFilter: NumericFilter): NumericFilterDTO => {\r\n const [ val1, val2 ] = numFilter.filter;\r\n\r\n /*\r\n * If invalid, return type 'None'.\r\n */\r\n if (\r\n numFilter.filterType === NumericFilterType.None ||\r\n val1 === null ||\r\n (numFilter.filterType === NumericFilterType.Between && val2 === null)) \r\n { \r\n return {\r\n filterType: NumericFilterType.None,\r\n filter: []\r\n };\r\n }\r\n\r\n /*\r\n * If between, return both values.\r\n */\r\n if (numFilter.filterType === NumericFilterType.Between) {\r\n return {\r\n filterType: numFilter.filterType,\r\n filter: [ \r\n val1 === null ? 0 : val1, \r\n val2 === null ? 0 : val2\r\n ]\r\n };\r\n } \r\n\r\n /*\r\n * Else return just the first value.\r\n */\r\n return {\r\n filterType: numFilter.filterType,\r\n filter: [ val1 === null ? 0 : val1 ]\r\n };\r\n};\r\n","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport { DateFilter, DateIncrementType } from './Date';\r\nimport { PanelItem, PanelItemDTO, panelItemToDto } from './PanelItem'\r\n\r\nexport interface BaseSubPanel {\r\n dateFilter: DateFilter;\r\n id: string;\r\n index: number;\r\n includeSubPanel: boolean;\r\n minimumCount: number;\r\n panelIndex: number;\r\n joinSequence: SubPanelJoinSequence;\r\n}\r\n\r\nexport interface SubPanelDTO extends BaseSubPanel {\r\n panelItems: PanelItemDTO[];\r\n }\r\n\r\nexport interface SubPanel extends BaseSubPanel {\r\n panelItems: PanelItem[];\r\n joinSequenceEventType?: JoinSequenceEventType;\r\n}\r\n\r\nexport interface JoinSequenceEventType {\r\n id: number;\r\n name: string;\r\n}\r\n\r\nexport const subPanelToDto = (subpanel: SubPanel): SubPanelDTO => {\r\n return {\r\n dateFilter: subpanel.dateFilter,\r\n id: subpanel.id,\r\n includeSubPanel: subpanel.includeSubPanel,\r\n index: subpanel.index,\r\n joinSequence: subpanel.joinSequence,\r\n minimumCount: subpanel.minimumCount,\r\n panelIndex: subpanel.panelIndex,\r\n panelItems: subpanel.panelItems.map(i => panelItemToDto(i))\r\n }\r\n}\r\n\r\nexport interface SubPanelJoinSequence {\r\n increment: number | null;\r\n dateIncrementType: DateIncrementType;\r\n sequenceType: SequenceType;\r\n}\r\n\r\nexport enum SequenceType {\r\n Encounter = 0,\r\n PlusMinus = 1,\r\n WithinFollowing = 2,\r\n AnytimeFollowing = 3,\r\n Event = 4\r\n}","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport { DateBoundary } from './Date';\r\nimport { SubPanel, SubPanelDTO, subPanelToDto } from './SubPanel'\r\n\r\nexport interface BasePanel {\r\n dateFilter: DateBoundary;\r\n id: string;\r\n includePanel: boolean;\r\n domain: string;\r\n index: number;\r\n}\r\n\r\nexport interface PanelDTO extends BasePanel {\r\n subPanels: SubPanelDTO[];\r\n }\r\n\r\nexport interface Panel extends BasePanel {\r\n dateFilter: DateBoundary;\r\n id: string;\r\n includePanel: boolean;\r\n domain: string;\r\n index: number;\r\n subPanels: SubPanel[];\r\n}\r\n\r\nexport const panelToDto = (panel: Panel): PanelDTO => {\r\n return {\r\n dateFilter: panel.dateFilter,\r\n domain: panel.domain,\r\n id: panel.id,\r\n includePanel: panel.includePanel,\r\n index: panel.index,\r\n subPanels: panel.subPanels.map(s => subPanelToDto(s))\r\n } \r\n}","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nexport interface DateBoundary {\r\n display?: string;\r\n start: DateFilter;\r\n end: DateFilter;\r\n}\r\n\r\nexport interface DateFilter {\r\n date?: Date;\r\n increment?: number;\r\n dateIncrementType: DateIncrementType;\r\n}\r\n\r\nexport enum DateType { DAY, HOUR, MINUTE, MONTH, WEEK, YEAR };\r\nexport enum DateIncrementType { NONE, NOW, DAY, HOUR, MINUTE, MONTH, WEEK, YEAR, SPECIFIC };","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport { CancelTokenSource } from 'axios';\r\nimport { AppState } from '../models/state/AppState';\r\nimport { NetworkIdentity } from '../models/NetworkResponder';\r\nimport { PanelDTO } from '../models/panel/Panel';\r\nimport { PanelFilter } from '../models/panel/PanelFilter';\r\nimport { HttpFactory } from './HttpFactory';\r\nimport { DateIncrementType, DateFilter, DateBoundary } from '../models/panel/Date';\r\nimport { PatientListDatasetQueryDTO, PatientListDatasetDTO, PatientListDatasetShape, PatientListDatasetQuery } from '../models/patientList/Dataset';\r\nimport moment from 'moment'\r\n\r\n/*\r\n * Fetch patient counts based on current panel setup.\r\n */\r\nexport function fetchCount(state: AppState, nr: NetworkIdentity, panelFilters: PanelFilter[], panels: PanelDTO[], queryId: string, cancelToken: CancelTokenSource) {\r\n const { token } = state.session.context!;\r\n const http = HttpFactory.authenticated(token);\r\n const request = http.post(`${nr.address}/api/cohort/count`, { \r\n cancelToken: cancelToken.token,\r\n panelFilters,\r\n panels, \r\n queryId, \r\n });\r\n return request;\r\n};\r\n\r\n/*\r\n * Fetch demographics (shared by patient list and visuzalization)\r\n * based on already run patient counts.\r\n */\r\nexport function fetchDemographics(state: AppState, nr: NetworkIdentity, queryId: string, cancelToken: CancelTokenSource) {\r\n const { token } = state.session.context!;\r\n const http = HttpFactory.authenticated(token);\r\n return http.get(`${nr.address}/api/cohort/${queryId}/demographics`);\r\n};\r\n\r\n/*\r\n * Fetch a dataset, which may or may not have date boundaries.\r\n */\r\nexport const fetchDataset = async (state: AppState, nr: NetworkIdentity, queryId: string, dataset: PatientListDatasetQuery, dates: DateBoundary): Promise => {\r\n const { token } = state.session.context!;\r\n const http = HttpFactory.authenticated(token);\r\n const params: any = {\r\n datasetid: nr.isHomeNode ? dataset.id : dataset.universalId,\r\n shape: dataset.shape\r\n }\r\n if (dates.start.dateIncrementType !== DateIncrementType.NONE && \r\n dates.end.dateIncrementType !== DateIncrementType.NONE\r\n ) {\r\n params.early = deriveDateTicks(dates.start);\r\n params.late = deriveDateTicks(dates.end);\r\n }\r\n\r\n const result = await http.get(`${nr.address}/api/cohort/${queryId}/dataset`, { \r\n params\r\n });\r\n return result.data as PatientListDatasetDTO\r\n};\r\n\r\nexport const fetchAvailableDatasets = async (state: AppState): Promise => {\r\n const { token } = state.session.context!;\r\n const http = HttpFactory.authenticated(token);\r\n const resp = await http.get(`/api/dataset`);\r\n const ds = resp.data as PatientListDatasetQueryDTO[];\r\n return ds;\r\n};\r\n\r\n/*\r\n * Private method for getting UNIX ticks based on a given\r\n * DateFilter. Used when requesting datasets.\r\n */\r\nconst deriveDateTicks = (date: DateFilter): number => {\r\n const dateTypeKeyMap = new Map([\r\n [DateIncrementType.HOUR, 'h'],\r\n [DateIncrementType.DAY, 'd'],\r\n [DateIncrementType.WEEK, 'w'],\r\n [DateIncrementType.MONTH, 'M'],\r\n [DateIncrementType.YEAR, 'y']\r\n ]);\r\n\r\n if (date.dateIncrementType === DateIncrementType.NOW) {\r\n return Math.round(new Date().getTime() / 1000);\r\n }\r\n else if (date.dateIncrementType === DateIncrementType.SPECIFIC && date.date) {\r\n return Math.round(new Date(date.date!).getTime() / 1000);\r\n }\r\n else {\r\n const momentIncrementType = dateTypeKeyMap.get(date.dateIncrementType)!;\r\n const incr = date.increment as any;\r\n return Math.round(moment().add(incr, momentIncrementType).toDate().getTime() / 1000);\r\n }\r\n};","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport { PatientListDatasetId } from './Dataset';\r\n\r\nexport type PatientListColumnId = string;\r\nexport type ValueByColumnKey = Map;\r\n\r\nexport enum PatientListColumnType {\r\n string = 1,\r\n number = 2, \r\n date = 3,\r\n sparkline = 4,\r\n boolean = 5\r\n}\r\n\r\nexport interface PatientListColumnTemplate {\r\n autoDisplayOnLoad?: boolean;\r\n displayName?: string;\r\n id: PatientListColumnId;\r\n optional?: boolean;\r\n type: PatientListColumnType;\r\n}\r\n\r\nexport interface AdminPanelPatientListColumnTemplate extends PatientListColumnTemplate {\r\n present: boolean;\r\n}\r\n\r\nexport interface PatientListColumn extends PatientListColumnTemplate {\r\n datasetId: PatientListDatasetId;\r\n index: number;\r\n isDisplayed: boolean;\r\n}\r\n\r\nexport interface XY {\r\n x: Date;\r\n y: number;\r\n}","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport { generate as generateId } from 'shortid';\r\nimport { PatientListColumnType, PatientListColumnId, PatientListColumn, ValueByColumnKey, XY } from '../../models/patientList/Column';\r\nimport { PatientListConfiguration, PatientListSort } from '../../models/patientList/Configuration';\r\nimport { PatientListDataset, PatientListDatasetDefinition, PatientListDatasetId, PatientListDatasetDefinitionTemplate, PatientListDatasetExport } from '../../models/patientList/Dataset';\r\nimport { PatientListRowDTO, Patient, PatientId, PatientListRow, PatientListDetailEncounterRow, EncounterId } from '../../models/patientList/Patient';\r\nimport { workerContext } from './patientListWebWorkerContext';\r\n\r\nconst ADD_DEMOGRAPHICS = 'ADD_DEMOGRAPHICS';\r\nconst ADD_DATASET = 'ADD_DATASET';\r\nconst REMOVE_DATASET = 'REMOVE_DATASET';\r\nconst GET_PATIENTS = 'GET_PATIENTS';\r\nconst GET_SINGLETON_CSV = 'GET_SINGLETON_CSV';\r\nconst GET_MULTIROW_CSV = 'GET_MULTIROW_CSV';\r\nconst GET_ALL_DATA = 'GET_ALL_DATA';\r\nconst CLEAR_PATIENTS = 'CLEAR_PATIENTS';\r\n\r\nconst typeString = PatientListColumnType.string;\r\nconst typeNum = PatientListColumnType.number;\r\nconst typeDate = PatientListColumnType.date;\r\nconst typeSparkline = PatientListColumnType.sparkline;\r\n\r\ninterface InboundMessagePartialPayload {\r\n config?: PatientListConfiguration;\r\n dataset?: PatientListDataset;\r\n datasetDefinition?: PatientListDatasetDefinition;\r\n datasetId?: PatientListDatasetId;\r\n message: string;\r\n demographics?: PatientListRowDTO[];\r\n responderId?: number;\r\n template?: PatientListDatasetDefinitionTemplate;\r\n useDisplayedColumnsOnly?: boolean;\r\n}\r\n\r\ninterface InboundMessagePayload extends InboundMessagePartialPayload {\r\n requestId: string;\r\n}\r\n\r\ninterface OutboundMessagePayload {\r\n requestId: string;\r\n result?: any;\r\n}\r\n\r\ninterface WorkerReturnPayload {\r\n data: OutboundMessagePayload;\r\n}\r\n\r\ninterface PromiseResolver {\r\n reject: any;\r\n resolve: any;\r\n}\r\n\r\ninterface DerivedColumnIdLookup {\r\n count: string;\r\n mostRecent: string;\r\n mostRecentDate: string;\r\n earliest: string;\r\n earliestDate: string;\r\n}\r\n\r\ninterface DerivedNumericColumnIdLookup extends DerivedColumnIdLookup {\r\n trend: string;\r\n mean: string;\r\n median: string;\r\n min: string;\r\n max: string;\r\n}\r\n\r\ninterface DerivedColumnLookup {\r\n lookup: DerivedColumnIdLookup;\r\n map: Map;\r\n}\r\n\r\ninterface DerivedNumericColumnLookup {\r\n lookup: DerivedNumericColumnIdLookup;\r\n map: Map;\r\n}\r\n\r\nexport default class PatientListWebWorker {\r\n private worker: Worker;\r\n private reject: any;\r\n private promiseMap: Map = new Map();\r\n\r\n constructor() {\r\n const workerFile = ` \r\n ${this.addMessageTypesToContext([ ADD_DEMOGRAPHICS, ADD_DATASET, REMOVE_DATASET, CLEAR_PATIENTS, GET_PATIENTS, GET_SINGLETON_CSV, GET_MULTIROW_CSV, GET_ALL_DATA ])}\r\n ${workerContext}\r\n var typeString = ${PatientListColumnType.string};\r\n var typeNum = ${PatientListColumnType.number};\r\n var typeDate = ${PatientListColumnType.date};\r\n var typeSparkline = ${PatientListColumnType.sparkline};\r\n self.onmessage = function(e) { \r\n self.postMessage(handleWorkMessage.call(this, e.data, postMessage)); \r\n }`;\r\n // console.log(workerFile);\r\n const blob = new Blob([workerFile], { type: 'text/javascript' });\r\n this.worker = new Worker(URL.createObjectURL(blob));\r\n this.worker.onmessage = result => this.handleReturnPayload(result);\r\n this.worker.onerror = error => this.reject(error);\r\n }\r\n\r\n public addDemographics = (datasetDefinition: PatientListDatasetDefinition, demographics: PatientListRowDTO[], responderId: number) => {\r\n return this.postMessage({ message: ADD_DEMOGRAPHICS, datasetDefinition, demographics, responderId });\r\n }\r\n\r\n public addDataset = (dataset: PatientListDataset, responderId: number) => {\r\n return this.postMessage({ message: ADD_DATASET, dataset, responderId });\r\n }\r\n\r\n public removeDataset = (config: PatientListConfiguration, datasetId: PatientListDatasetId) => {\r\n return this.postMessage({ message: REMOVE_DATASET, config, datasetId})\r\n }\r\n\r\n public clearPatients = () => {\r\n return this.postMessage({ message: CLEAR_PATIENTS });\r\n }\r\n\r\n public getPatients = (config: PatientListConfiguration) => {\r\n return this.postMessage({ message: GET_PATIENTS, config });\r\n }\r\n\r\n public getSingletonCsv = (config: PatientListConfiguration, useDisplayedColumnsOnly: boolean) => {\r\n return this.postMessage({ message: GET_SINGLETON_CSV, config, useDisplayedColumnsOnly });\r\n }\r\n\r\n public getMultirowCsv = (datasetId: PatientListDatasetId) => {\r\n return this.postMessage({ message: GET_MULTIROW_CSV, datasetId });\r\n }\r\n\r\n public getAllData = (config: PatientListConfiguration,useDisplayedColumnsOnly: boolean) => {\r\n return this.postMessage({ message: GET_ALL_DATA, config, useDisplayedColumnsOnly });\r\n }\r\n\r\n private postMessage = (payload: InboundMessagePartialPayload) => {\r\n return new Promise((resolve, reject) => {\r\n const requestId = generateId();\r\n this.reject = reject;\r\n this.promiseMap.set(requestId, { resolve, reject });\r\n this.worker.postMessage({ ...payload, requestId });\r\n })\r\n }\r\n\r\n private handleReturnPayload = (payload: WorkerReturnPayload): any => {\r\n const data = payload.data.result ? payload.data.result : {}\r\n const resolve = this.promiseMap.get(payload.data.requestId)!.resolve;\r\n this.promiseMap.delete(payload.data.requestId);\r\n return resolve(data);\r\n }\r\n\r\n private stripFunctionToContext = (f: () => any) => {\r\n const funcString = `${f}`;\r\n return funcString\r\n .substring(0, funcString.lastIndexOf('}'))\r\n .substring(funcString.indexOf('{') + 1)\r\n }\r\n\r\n private addMessageTypesToContext = (messageTypes: string[]) => {\r\n return messageTypes.map((v: string) => `var ${v} = '${v}';`).join(' ');\r\n }\r\n\r\n private workerContext = () => {\r\n let patientMap = new Map();\r\n let singletonDatasets = new Map();\r\n let multirowDatasets = new Map();\r\n let defaultPatientOrder: PatientId[] = [];\r\n let currentPatientOrder: PatientId[] = [];\r\n let currentSortType: number = 0;\r\n let currentSortColumn: string = '';\r\n\r\n const handleWorkMessage = (payload: InboundMessagePayload) => {\r\n switch (payload.message) {\r\n case ADD_DEMOGRAPHICS:\r\n return addPatientRows(payload);\r\n case ADD_DATASET:\r\n return addPatientRows(payload);\r\n case REMOVE_DATASET:\r\n return removeDataset(payload);\r\n case CLEAR_PATIENTS:\r\n return clearPatients(payload);\r\n case GET_PATIENTS:\r\n return getPatients(payload);\r\n case GET_SINGLETON_CSV:\r\n return getSingletonDataCsv(payload);\r\n case GET_MULTIROW_CSV:\r\n return getMultirowDataCsv(payload);\r\n case GET_ALL_DATA:\r\n return getAllData(payload);\r\n default:\r\n return null;\r\n }\r\n };\r\n\r\n /*\r\n * Clear all datasets and patient data.\r\n */\r\n const clearPatients = (payload: InboundMessagePayload): OutboundMessagePayload => {\r\n patientMap = new Map();\r\n singletonDatasets = new Map();\r\n multirowDatasets = new Map();\r\n defaultPatientOrder = [];\r\n currentPatientOrder = [];\r\n return { requestId: payload.requestId };\r\n };\r\n\r\n /*\r\n * Removes a given dataset and any associated data,\r\n * returning an updated patient list.\r\n */\r\n const removeDataset = (payload: InboundMessagePayload): OutboundMessagePayload => {\r\n const { datasetId } = payload;\r\n singletonDatasets.delete(datasetId!);\r\n multirowDatasets.delete(datasetId!);\r\n patientMap.forEach((p: Patient) => {\r\n p.multirowData.delete(datasetId!);\r\n p.singletonData.delete(datasetId!);\r\n setDetailRows(p.compoundId)\r\n })\r\n return getPatients(payload);\r\n }\r\n\r\n /*\r\n * Add server-sent data to the cache. An additional derived\r\n * dataset definition *may* be sent back to the caller\r\n * if the payload is a multirow dataset with rows.\r\n */\r\n const addPatientRows = (payload: InboundMessagePayload): OutboundMessagePayload => {\r\n const { dataset, datasetDefinition, demographics, requestId } = payload;\r\n let result: any = null;\r\n\r\n if (demographics) {\r\n addDatasetDefinition(datasetDefinition!);\r\n addDemographics(payload);\r\n } else if (dataset) {\r\n\r\n // Add the multirow data. This returns a new Dataset Definition\r\n // for the summary statistics.\r\n addDatasetDefinition(dataset.definition);\r\n result = addMultiRowDataset(payload);\r\n addDatasetDefinition(result);\r\n }\r\n return { requestId, result };\r\n };\r\n\r\n /*\r\n * Add a dataset definition if not already present.\r\n */\r\n const addDatasetDefinition = (def: PatientListDatasetDefinition) => {\r\n const prop = def.multirow ? multirowDatasets : singletonDatasets;\r\n if (!prop.has(def.id)) {\r\n prop.set(def.id, def);\r\n }\r\n };\r\n\r\n /*\r\n * Add multirow dataset data to the cache.\r\n */\r\n const addMultiRowDataset = (payload: InboundMessagePayload): PatientListDatasetDefinition => {\r\n const { dataset, responderId } = payload;\r\n const def = dataset!.definition!;\r\n const dsId = def.id;\r\n const data = dataset!.data.results;\r\n const dateFields: PatientListColumn[] = [];\r\n const uniquePatients: PatientId[] = Object.keys(data);\r\n const uniqueCompoundPatients: PatientId[] = [];\r\n let rowCount = 0;\r\n def.columns.forEach((c: PatientListColumn) => {\r\n if (c.type === typeDate) {\r\n dateFields.push(c);\r\n }\r\n });\r\n \r\n // For each row\r\n for (let i = 0; i < uniquePatients.length; i++) {\r\n const p = uniquePatients![i];\r\n const rows = data[p];\r\n const compoundId = `${responderId}_${p}`;\r\n const pat = patientMap.get(compoundId);\r\n if (!pat) { continue; }\r\n\r\n const patientData = pat.multirowData;\r\n uniqueCompoundPatients.push(compoundId);\r\n\r\n // Convert strings to dates\r\n for (let j = 0; j < rows.length; j++) {\r\n const row = rows[j];\r\n for (let k = 0; k < dateFields.length; k++) {\r\n const f = dateFields[k].id;\r\n const v = row[f];\r\n if (v) {\r\n row[f] = new Date(v);\r\n }\r\n }\r\n }\r\n\r\n if (!patientData.has(dsId)) {\r\n patientData.set(dsId, rows);\r\n }\r\n }\r\n\r\n // Pre-sort all values for each unique patient now that they are grouped\r\n for (let i = 0; i < uniqueCompoundPatients.length; i++) {\r\n const pat = patientMap.get(uniqueCompoundPatients[i])!;\r\n const vals = pat.multirowData.get(dsId)!;\r\n \r\n if (vals) {\r\n const valsSorted = vals.sort((a: any, b: any) => a[def.dateValueColumn!] - b[def.dateValueColumn!]);\r\n pat.multirowData.set(dsId, valsSorted);\r\n rowCount += vals.length;\r\n }\r\n }\r\n\r\n // Rows are added to the patient map, now compute stats for each patient\r\n const derivedDef = def.numericValueColumn && dataset!.data.schema.fields.indexOf(def.numericValueColumn) > -1\r\n ? deriveNumericSummaryFromDataset(def, uniqueCompoundPatients)\r\n : deriveNonNumericSummaryFromDataset(def, uniqueCompoundPatients);\r\n derivedDef.totalRows = rowCount;\r\n return derivedDef;\r\n };\r\n\r\n /*\r\n * Add initial base (basic demographics) dataset to the cache.\r\n */\r\n const addDemographics = (payload: InboundMessagePayload): OutboundMessagePayload => {\r\n const { datasetDefinition, demographics, responderId, requestId } = payload;\r\n\r\n if (!demographics!.length) { return { requestId }; }\r\n \r\n // For each patient\r\n for (let i = 0; i < demographics!.length; i++) {\r\n // Add compound and responder ids\r\n const patientDto = demographics![i]! as any;\r\n const patient: Patient = {\r\n compoundId: `${responderId}_${patientDto.personId}`,\r\n detailRowCount: 0,\r\n detailValues: [],\r\n id: patientDto.personId,\r\n multirowData: new Map(),\r\n responderId: responderId!,\r\n singletonData: new Map()\r\n }\r\n\r\n // Add to the patId arrays\r\n defaultPatientOrder.push(patient.compoundId);\r\n currentPatientOrder.push(patient.compoundId);\r\n \r\n // Add the demographics data\r\n patient.singletonData.set(datasetDefinition!.id, new Map(Object.entries(patientDto)));\r\n \r\n // Add patient to map\r\n patientMap.set(patient.compoundId, patient);\r\n }\r\n return { requestId };\r\n };\r\n\r\n /*\r\n * Return an array of tabular patient data based\r\n * on provided configuration definition (the config is\r\n * basically a description of what is display in the UI).\r\n */\r\n const getPatients = (payload: InboundMessagePayload): OutboundMessagePayload => {\r\n const config = payload.config!; \r\n const { requestId } = payload;\r\n const NONE = 0;\r\n let newPats: PatientId[];\r\n\r\n // If no need to sort, go by the ingested order\r\n if (config.sort.sortType === NONE) {\r\n newPats = getUnsortedPatients(config);\r\n }\r\n // Else we need sorted\r\n else {\r\n if (config.sort.column!.id !== currentSortColumn) {\r\n sortPatients(config);\r\n }\r\n else if (config.sort.column!.id === currentSortColumn && config.sort.sortType !== currentSortType) {\r\n currentPatientOrder = currentPatientOrder.reverse();\r\n } \r\n newPats = getSortedPatients(config);\r\n }\r\n copySortType(config.sort);\r\n return { requestId, result: patientIdsToListRow(config, newPats) };\r\n };\r\n\r\n /*\r\n * After a tabular-dataset is returned to the caller,\r\n * cache a copy of the sorting definition here in the worker.\r\n * That way, next time data is requested we can check if \r\n * patients are already approprietly sorted and avoid needing\r\n * to reprocess.\r\n */\r\n const copySortType = (configSort: PatientListSort) => {\r\n if (!configSort.column) { return; }\r\n currentSortColumn = configSort.column!.id;\r\n currentSortType = configSort.sortType;\r\n };\r\n\r\n /*\r\n * Return the actual tabular array to caller, row by row, tuple by tuple.\r\n * If a patient doesn't have data for a given dataset/column, return undefined.\r\n */\r\n const patientIdsToListRow = (config: PatientListConfiguration, patIds: PatientId[]): PatientListRow[] => {\r\n const patList: PatientListRow[] = [];\r\n for (let i = 0; i < patIds.length; i++) {\r\n const pat = patientMap.get(patIds[i])!;\r\n const patListRow: PatientListRow = { \r\n compoundId: pat.compoundId, \r\n detailRowCount: pat.detailRowCount, \r\n detailValues: pat.detailValues,\r\n isOpen: false,\r\n responderId: pat.responderId, \r\n values: [] \r\n };\r\n patListRow.values = config.displayColumns.map((col: PatientListColumn) => {\r\n const ds = pat.singletonData.get(col.datasetId);\r\n if (!ds) { return undefined; }\r\n return ds.get(col.id);\r\n });\r\n patList.push(patListRow);\r\n }\r\n return patList;\r\n };\r\n\r\n /*\r\n * Order all multirow data from latest to earliest, grouping\r\n * by encounters. This will be visible when the user clicks\r\n * on a patient row to drill down.\r\n */\r\n const setDetailRows = (patId: PatientId) => {\r\n const pat = patientMap.get(patId)!;\r\n const allDetails: PatientListDetailEncounterRow[] = [];\r\n const encMap = new Map();\r\n let rowCount = 0;\r\n\r\n // Get all encounter detail rows in an array\r\n pat.multirowData.forEach((vals: PatientListRowDTO[], key: PatientListDatasetId) => {\r\n const ds = multirowDatasets.get(key)!;\r\n const cols = Array.from(ds.columns.keys()).filter((v: string) => v !== 'personId' && v !== 'encounterId' && v !== ds.dateValueColumn);\r\n const hasEncounterIdCol = !!vals[0].encounterId;\r\n\r\n for (let i = 0; i < vals.length; i++) {\r\n const val: any = vals[i];\r\n if (val && val[ds.dateValueColumn!])\r\n rowCount++;\r\n allDetails.push({\r\n columns: cols.map((k: string) => ({ key: k, value: val[k] })),\r\n datasetName: ds.displayName,\r\n date: val[ds.dateValueColumn!],\r\n dateColumnName: ds.dateValueColumn!,\r\n encounterId: hasEncounterIdCol ? val.encounterId : 'Unknown Encounter'\r\n });\r\n }\r\n });\r\n const getTime = (date?: Date) => date ? date.getTime() : 0;\r\n const sorted: PatientListDetailEncounterRow[] = allDetails\r\n .sort((a: PatientListDetailEncounterRow, b: PatientListDetailEncounterRow) => getTime(b.date) - getTime(a.date));\r\n \r\n // Group details by encounterId\r\n for (let j = 0; j < sorted.length; j++) {\r\n const row = sorted[j];\r\n if (encMap.has(row.encounterId)) {\r\n encMap.get(row.encounterId)!.push(row);\r\n }\r\n else {\r\n encMap.set(row.encounterId, [ row ]);\r\n }\r\n }\r\n\r\n // Set the grouped encounter data rows as the patient's detail array\r\n pat.detailValues = [];\r\n encMap.forEach((v: PatientListDetailEncounterRow[], k: EncounterId) => pat.detailValues.push({ encounterId: k, rows: v }));\r\n pat.detailRowCount = rowCount;\r\n };\r\n\r\n /*\r\n * Return patient ids unsorted.\r\n */\r\n const getUnsortedPatients = (config: PatientListConfiguration): PatientId[] => {\r\n const offset = config.pageNumber * config.pageSize;\r\n const patIds = defaultPatientOrder.slice(offset, offset + config.pageSize);\r\n return patIds;\r\n };\r\n\r\n /*\r\n * Return patient ids sorted.\r\n */\r\n const getSortedPatients = (config: PatientListConfiguration): PatientId[] => {\r\n const offset = config.pageNumber * config.pageSize;\r\n const patIds = currentPatientOrder.slice(offset, offset + config.pageSize);\r\n return patIds;\r\n };\r\n\r\n /*\r\n * Sort the cached patient ids by a given column and sort order.\r\n */\r\n const sortPatients = (config: PatientListConfiguration) => {\r\n const { datasetId, id } = config.sort.column!;\r\n const ASC = 1;\r\n\r\n // Set the sort algorithm to sort ASC or DESC\r\n const sortAlgo = config.sort.sortType === ASC\r\n ? (p: any, p2: any) => (p.value < p2.value ? -1 : p.value > p2.value ? 1 : 0)\r\n : (p: any, p2: any) => (p2.value < p.value ? -1 : p2.value > p.value ? 1 : 0);\r\n \r\n // Derive an array from the map and sort by column and algorithm\r\n currentPatientOrder = Array.from(patientMap)\r\n .map((p: any) => {\r\n const ds = p[1].singletonData.get(datasetId);\r\n const value = ds ? ds.get(id) : null;\r\n return {\r\n id: p[1].compoundId, \r\n value: value ? value : 0\r\n }\r\n })\r\n .sort(sortAlgo)\r\n .map((p: any) => p.id) as PatientId[];\r\n };\r\n\r\n /*\r\n * Define a derivedNumericColumns template for\r\n * storing summarized stats from numeric datasets.\r\n */\r\n const getDerivedNumericColumnsTemplate = () => {\r\n // tslint:disable\r\n return {\r\n trend: { id: 'Trend', isDisplayed: true, type: typeSparkline },\r\n count: { id: 'Count', isDisplayed: true, type: typeNum },\r\n mean: { id: 'Mean', type: typeNum },\r\n median: { id: 'Median', type: typeNum },\r\n min: { id: 'Min', type: typeNum },\r\n max: { id: 'Max', type: typeNum },\r\n mostRecent: { id: 'MostRecent', type: typeString },\r\n mostRecentDate: { id: 'MostRecentDate', type: typeDate },\r\n earliest: { id: 'Earliest', type: typeString },\r\n earliestDate: { id: 'EarliestDate', type: typeDate }\r\n };\r\n // tslint:enable\r\n };\r\n\r\n /*\r\n * Define a derivedNumericColumns template for\r\n * storing summarized stats from datasets.\r\n */\r\n const getDerivedNonNumericColumnsTemplate = () => {\r\n // tslint:disable\r\n return {\r\n count: { id: 'Count', isDisplayed: true, type: typeNum },\r\n mostRecent: { id: 'MostRecent', type: typeString },\r\n mostRecentDate: { id: 'MostRecentDate', type: typeDate },\r\n earliest: { id: 'Earliest', type: typeString },\r\n earliestDate: { id: 'EarliestDate', type: typeDate }\r\n };\r\n // tslint:enable\r\n };\r\n\r\n /*\r\n * Return a map and column id lookup object for\r\n * a given dataset definition.\r\n */\r\n const getNumericSummaryDatasetColums = (def: PatientListDatasetDefinition): DerivedNumericColumnLookup => {\r\n const cols = Object.assign({}, getDerivedNumericColumnsTemplate());\r\n Array.from(Object.keys(cols)).forEach((k: string, i: number) => {\r\n const col = cols[k];\r\n col.index = i;\r\n col.displayName = `${def.displayName} ${capitalize(col.id)}`;\r\n col.id = `${def.displayName}_${col.id}`.toLowerCase().replace(' ','_');\r\n col.isDisplayed = col.isDisplayed || false;\r\n col.datasetId = def.id;\r\n });\r\n\r\n return {\r\n lookup: {\r\n count: cols.count.id,\r\n earliest: cols.earliest.id,\r\n earliestDate: cols.earliestDate.id,\r\n max: cols.max.id,\r\n mean: cols.mean.id,\r\n median: cols.median.id,\r\n min: cols.min.id,\r\n mostRecent: cols.mostRecent.id,\r\n mostRecentDate: cols.mostRecentDate.id,\r\n trend: cols.trend.id\r\n },\r\n map: new Map([\r\n [cols.trend.id, cols.trend],\r\n [cols.count.id, cols.count],\r\n [cols.mean.id, cols.mean],\r\n [cols.median.id, cols.median],\r\n [cols.min.id, cols.min],\r\n [cols.max.id, cols.max],\r\n [cols.mostRecent.id, cols.mostRecent],\r\n [cols.mostRecentDate.id, cols.mostRecentDate],\r\n [cols.earliest.id, cols.earliest],\r\n [cols.earliestDate.id, cols.earliestDate]\r\n ])\r\n } as DerivedNumericColumnLookup;\r\n };\r\n\r\n /*\r\n * Derive a summary numeric singleton dataset from \r\n * a multirow numeric dataset. The new dataset definition\r\n * is returned to the caller, and rows are added to the cache.\r\n */\r\n const deriveNumericSummaryFromDataset = (def: PatientListDatasetDefinition, ids: PatientId[]): PatientListDatasetDefinition => {\r\n const cols = getNumericSummaryDatasetColums(def);\r\n const sumDef: PatientListDatasetDefinition = {\r\n columns: cols.map,\r\n displayName: def.displayName,\r\n id: def.id,\r\n multirow: false,\r\n numericValueColumn: def.numericValueColumn,\r\n responderStates: new Map(),\r\n shape: 0,\r\n totalRows: ids.length\r\n };\r\n\r\n // Short-circuit if the dataset doesn't have a date or numeric column\r\n if (!def.dateValueColumn || !def.numericValueColumn) { return sumDef; }\r\n\r\n for (let i = 0; i < ids.length; i++) {\r\n const p: Patient = patientMap.get(ids[i])!;\r\n const data = p.multirowData.get(def.id);\r\n const ds = new Map();\r\n\r\n // Make sure we have data to work with\r\n if (!data) { continue; }\r\n\r\n const vals: XY[] = data.map((d: PatientListRowDTO) => ({ x: d[def.dateValueColumn!], y: d[def.numericValueColumn!] }))\r\n const numVals: XY[] = vals.filter((d: XY) => +d.y).sort((a: XY, b: XY) => a.y - b.y);\r\n\r\n // Compute earliest and latest\r\n const firstDate = vals[0].x;\r\n const firstVal = vals[0].y;\r\n const lastDate = vals[vals.length - 1].x;\r\n const lastVal = vals[vals.length - 1].y;\r\n\r\n ds.set(cols.lookup.earliestDate, firstDate);\r\n ds.set(cols.lookup.earliest, firstVal);\r\n ds.set(cols.lookup.mostRecentDate, lastDate);\r\n ds.set(cols.lookup.mostRecent, lastVal);\r\n ds.set(cols.lookup.count, vals.length);\r\n\r\n // Compute numeric stats\r\n if (numVals.length) {\r\n const min = numVals[0].y;\r\n const max = numVals[numVals.length - 1].y;\r\n const mean = +(((numVals.reduce((a: number, b: XY) => a + b.y, 0)) / numVals.length).toFixed(1));\r\n const half = Math.floor(numVals.length / 2);\r\n const median = numVals.length % 2\r\n ? numVals[half].y\r\n : (numVals[half - 1].y + numVals[half].y) / 2.0;\r\n \r\n ds.set(cols.lookup.min, min);\r\n ds.set(cols.lookup.max, max);\r\n ds.set(cols.lookup.mean, mean);\r\n ds.set(cols.lookup.median, median);\r\n ds.set(cols.lookup.trend, vals);\r\n }\r\n p.singletonData.set(def.id, ds);\r\n patientMap.set(p.compoundId, p);\r\n setDetailRows(p.compoundId);\r\n }\r\n return sumDef;\r\n };\r\n\r\n /*\r\n * Return a map and column id lookup object for\r\n * a given non-numeric dataset definition.\r\n */\r\n const getNonNumericSummaryDatasetColums = (def: PatientListDatasetDefinition): DerivedColumnLookup => {\r\n const cols = getDerivedNonNumericColumnsTemplate();\r\n Array.from(Object.keys(cols)).forEach((k: string, i: number) => {\r\n const col = cols[k];\r\n col.index = i;\r\n col.displayName = `${def.displayName} ${capitalize(col.id)}`;\r\n col.id = `${def.displayName}_${col.id}`.toLowerCase().replace(' ','_');\r\n col.isDisplayed = col.isDisplayed || false;\r\n col.datasetId = def.id;\r\n });\r\n\r\n return {\r\n lookup: {\r\n count: cols.count.id,\r\n earliest: cols.earliest.id,\r\n earliestDate: cols.earliestDate.id,\r\n mostRecent: cols.mostRecent.id,\r\n mostRecentDate: cols.mostRecentDate.id,\r\n },\r\n map: new Map([\r\n [cols.count.id, cols.count],\r\n [cols.mostRecent.id, cols.mostRecent],\r\n [cols.mostRecentDate.id, cols.mostRecentDate],\r\n [cols.earliest.id, cols.earliest],\r\n [cols.earliestDate.id, cols.earliestDate]\r\n ])\r\n } as DerivedColumnLookup;\r\n };\r\n\r\n /*\r\n * Derive a summary non-numeric singleton dataset from \r\n * a multirow numeric dataset. The new dataset definition\r\n * is returned to the caller, and rows are added to the cache.\r\n */\r\n const deriveNonNumericSummaryFromDataset = (def: PatientListDatasetDefinition, ids: PatientId[]): PatientListDatasetDefinition => {\r\n const cols = getNonNumericSummaryDatasetColums(def);\r\n const sumDef: PatientListDatasetDefinition = {\r\n columns: cols.map,\r\n displayName: def.displayName,\r\n id: def.id,\r\n multirow: false,\r\n responderStates: new Map(),\r\n shape: 0\r\n };\r\n\r\n // Short-circuit if the dataset doesn't have a date or numeric column\r\n if (!def.dateValueColumn || !def.stringValueColumn) { return sumDef; }\r\n\r\n for (let i = 0; i < ids.length; i++) {\r\n const p: Patient = patientMap.get(ids[i])!;\r\n const data = p.multirowData.get(def.id);\r\n const ds = new Map();\r\n\r\n // Make sure we have data to work with\r\n if (!data) { continue; }\r\n\r\n const vals: XY[] = data.map((d: PatientListRowDTO) => ({ x: d[def.dateValueColumn!], y: d[def.stringValueColumn!] }));\r\n\r\n // Compute earliest and latest\r\n const firstDate = vals[0].x;\r\n const firstVal = vals[0].y;\r\n const lastDate = vals[vals.length - 1].x;\r\n const lastVal = vals[vals.length - 1].y;\r\n\r\n ds.set(cols.lookup.earliestDate, firstDate);\r\n ds.set(cols.lookup.earliest, firstVal);\r\n ds.set(cols.lookup.mostRecentDate, lastDate);\r\n ds.set(cols.lookup.mostRecent, lastVal);\r\n ds.set(cols.lookup.count, vals.length);\r\n p.singletonData.set(def.id, ds);\r\n patientMap.set(p.compoundId, p);\r\n setDetailRows(p.compoundId);\r\n }\r\n return sumDef;\r\n };\r\n\r\n /*\r\n * Convert tuple objects to csv-friendly strings.\r\n */ \r\n const valueToCsvString = (d: any) => {\r\n return (\r\n !d ? '' \r\n : d instanceof Date ? d.toLocaleString().replace(',','') \r\n : String(d)\r\n .replace(/(\\r\\n|\\n|\\r|\\s+|\\t| )/gm,' ')\r\n .replace(/\"/g, '\"\"')\r\n .replace(/ +(?= )/g,'')\r\n );\r\n };\r\n\r\n /*\r\n * Pulls all cache data for all datasets into a\r\n * JSON object for export (currently only to REDCap).\r\n */\r\n const getAllData = (payload: InboundMessagePayload): OutboundMessagePayload => {\r\n const { config, requestId, useDisplayedColumnsOnly } = payload;\r\n const data: PatientListDatasetExport[] = [];\r\n const singletonData: PatientListDatasetExport = { columns: [], data: [], datasetId: 'demographics', isMultirow: false, maxRows: 1 };\r\n const colPersonId = 'personId';\r\n\r\n // Add the personId column\r\n singletonData.columns.push(singletonDatasets.get('demographics')!.columns.get(colPersonId)!);\r\n\r\n // Use only the columns currently displayed or retrieve all (user selects one option or the other)\r\n if (useDisplayedColumnsOnly) {\r\n singletonData.columns.concat(config!.displayColumns.filter((col: PatientListColumn) => col.type !== typeSparkline && col.id !== colPersonId));\r\n } else {\r\n singletonDatasets.forEach((def: PatientListDatasetDefinition) => {\r\n def.columns.forEach((col: PatientListColumn) => {\r\n if (col.type !== typeSparkline && col.id !== colPersonId) {\r\n singletonData.columns.push(col);\r\n }\r\n });\r\n });\r\n }\r\n\r\n // Add singleton rows\r\n patientMap.forEach((p: Patient) => {\r\n const row: any = {};\r\n singletonData.columns.forEach((col: PatientListColumn) => {\r\n const ds = p.singletonData.get(col.datasetId)!;\r\n const d = ds ? ds.get(col.id) : '';\r\n row[col.id] = d;\r\n });\r\n row[colPersonId] = p.compoundId;\r\n singletonData.data.push(row);\r\n });\r\n data.push(singletonData);\r\n\r\n // Add multirow rows\r\n multirowDatasets.forEach((mds: PatientListDatasetDefinition) => {\r\n const mdsName = mds.displayName.replace(' ','_').toLowerCase();\r\n const mdsCols: PatientListColumn[] = [ { id: colPersonId, datasetId: mdsName, index: 0, isDisplayed: true, type: typeString } ];\r\n mds.columns.forEach((col: PatientListColumn) => mdsCols.push(col));\r\n const exportData: PatientListDatasetExport = { columns: mdsCols, data: [], datasetId: mdsName, dateValueColumn: mds.dateValueColumn, isMultirow: true, maxRows: 1 };\r\n\r\n patientMap.forEach((p: Patient) => {\r\n const ds = p.multirowData.get(mds.id)!;\r\n let rowCount = 0;\r\n if (ds) {\r\n for (let i = 0; i < ds.length; i++) {\r\n const row: any[] = [];\r\n const vals: any = ds[i];\r\n for (let j = 0; j < mdsCols.length; j++) {\r\n const d = vals[mdsCols[j].id];\r\n if (d) {\r\n row[mdsCols[j].id] = d;\r\n rowCount++;\r\n }\r\n }\r\n row[colPersonId] = p.compoundId;\r\n exportData.data.push(row);\r\n }\r\n }\r\n exportData.maxRows = rowCount > exportData.maxRows ? rowCount : exportData.maxRows;\r\n });\r\n data.push(exportData);\r\n });\r\n\r\n return { requestId, result: data }\r\n };\r\n\r\n /*\r\n * Converts cache data to csv format \r\n * for a given multirow dataset.\r\n */\r\n const getMultirowDataCsv = (payload: InboundMessagePayload): OutboundMessagePayload => {\r\n const { datasetId, requestId } = payload;\r\n const nl = '\\r\\n';\r\n const rows: string[] =[];\r\n const cols: PatientListColumn[] = [ { id: 'personId', datasetId: datasetId!, index: 0, isDisplayed: true, type: typeString } ];\r\n multirowDatasets.get(datasetId!)!.columns.forEach((col: PatientListColumn) => cols.push(col));\r\n\r\n // Add column headers\r\n rows.push(cols.map((col: PatientListColumn) => col.id).join(','));\r\n\r\n // Add rows\r\n patientMap.forEach((p: Patient) => {\r\n const ds = p.multirowData.get(datasetId!)!;\r\n if (ds) {\r\n for (let i = 0; i < ds.length; i++) {\r\n const row: any[] = [];\r\n const vals: any = ds[i];\r\n for (let j = 0; j < cols.length; j++) {\r\n const d = vals[cols[j].id];\r\n row.push(`\"${valueToCsvString(d)}\"`);\r\n }\r\n rows.push(row.join(','));\r\n }\r\n }\r\n });\r\n return { requestId, result: rows.join(nl) };\r\n };\r\n\r\n /*\r\n * Converts cache data to csv format\r\n * representing the columnar table displayed\r\n * in the UI.\r\n */\r\n const getSingletonDataCsv = (payload: InboundMessagePayload): OutboundMessagePayload => {\r\n const { config, requestId, useDisplayedColumnsOnly } = payload;\r\n const nl = '\\r\\n';\r\n const rows: string[] =[];\r\n let cols: PatientListColumn[] = [];\r\n\r\n // Use only the columns currently displayed or retrieve all (user selects one option or the other)\r\n if (useDisplayedColumnsOnly) {\r\n cols = config!.displayColumns.filter((col: PatientListColumn) => col.type !== typeSparkline)\r\n } else {\r\n singletonDatasets.forEach((def: PatientListDatasetDefinition) => {\r\n def.columns.forEach((col: PatientListColumn) => {\r\n if (col.type !== typeSparkline) {\r\n cols.push(col);\r\n }\r\n });\r\n });\r\n }\r\n \r\n // Add column headers\r\n rows.push(cols.map((col: PatientListColumn) => col.id).join(','));\r\n\r\n // Add rows\r\n patientMap.forEach((p: Patient) => {\r\n const row: any[] = [];\r\n cols.forEach((col: PatientListColumn) => {\r\n const ds = p.singletonData.get(col.datasetId)!;\r\n const d = ds ? ds.get(col.id) : undefined;\r\n row.push(`\"${valueToCsvString(d)}\"`);\r\n });\r\n rows.push(row.join(','));\r\n });\r\n return { requestId, result: rows.join(nl) };\r\n };\r\n\r\n const capitalize = (colName: string): string => {\r\n return colName.charAt(0).toUpperCase() + colName.slice(1).trim();\r\n };\r\n }\r\n}\r\n\r\n","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nexport const workerContext = `\r\nvar patientMap = new Map();\r\nvar singletonDatasets = new Map();\r\nvar multirowDatasets = new Map();\r\nvar defaultPatientOrder = [];\r\nvar currentPatientOrder = [];\r\nvar currentSortType = 0;\r\nvar currentSortColumn = '';\r\nvar handleWorkMessage = function (payload) {\r\n switch (payload.message) {\r\n case ADD_DEMOGRAPHICS:\r\n return addPatientRows(payload);\r\n case ADD_DATASET:\r\n return addPatientRows(payload);\r\n case REMOVE_DATASET:\r\n return removeDataset(payload);\r\n case CLEAR_PATIENTS:\r\n return clearPatients(payload);\r\n case GET_PATIENTS:\r\n return getPatients(payload);\r\n case GET_SINGLETON_CSV:\r\n return getSingletonDataCsv(payload);\r\n case GET_MULTIROW_CSV:\r\n return getMultirowDataCsv(payload);\r\n case GET_ALL_DATA:\r\n return getAllData(payload);\r\n default:\r\n return null;\r\n }\r\n};\r\n/*\r\n * Clear all datasets and patient data.\r\n */\r\nvar clearPatients = function (payload) {\r\n patientMap = new Map();\r\n singletonDatasets = new Map();\r\n multirowDatasets = new Map();\r\n defaultPatientOrder = [];\r\n currentPatientOrder = [];\r\n return { requestId: payload.requestId };\r\n};\r\n/*\r\n * Removes a given dataset and any associated data,\r\n * returning an updated patient list.\r\n */\r\nvar removeDataset = function (payload) {\r\n var datasetId = payload.datasetId;\r\n singletonDatasets.delete(datasetId);\r\n multirowDatasets.delete(datasetId);\r\n patientMap.forEach(function (p) {\r\n p.multirowData.delete(datasetId);\r\n p.singletonData.delete(datasetId);\r\n setDetailRows(p.compoundId);\r\n });\r\n return getPatients(payload);\r\n};\r\n/*\r\n * Add server-sent data to the cache. An additional derived\r\n * dataset definition *may* be sent back to the caller\r\n * if the payload is a multirow dataset with rows.\r\n */\r\nvar addPatientRows = function (payload) {\r\n var dataset = payload.dataset, datasetDefinition = payload.datasetDefinition, demographics = payload.demographics, requestId = payload.requestId;\r\n var result = null;\r\n if (demographics) {\r\n addDatasetDefinition(datasetDefinition);\r\n addDemographics(payload);\r\n }\r\n else if (dataset) {\r\n // Add the multirow data. This returns a new Dataset Definition\r\n // for the summary statistics.\r\n addDatasetDefinition(dataset.definition);\r\n result = addMultiRowDataset(payload);\r\n addDatasetDefinition(result);\r\n }\r\n return { requestId: requestId, result: result };\r\n};\r\n/*\r\n * Add a dataset definition if not already present.\r\n */\r\nvar addDatasetDefinition = function (def) {\r\n var prop = def.multirow ? multirowDatasets : singletonDatasets;\r\n if (!prop.has(def.id)) {\r\n prop.set(def.id, def);\r\n }\r\n};\r\n/*\r\n * Add multirow dataset data to the cache.\r\n */\r\nvar addMultiRowDataset = function (payload) {\r\n var dataset = payload.dataset, responderId = payload.responderId;\r\n var def = dataset.definition;\r\n var dsId = def.id;\r\n var data = dataset.data.results;\r\n var dateFields = [];\r\n var uniquePatients = Object.keys(data);\r\n var uniqueCompoundPatients = [];\r\n var rowCount = 0;\r\n def.columns.forEach(function (c) {\r\n if (c.type === typeDate) {\r\n dateFields.push(c);\r\n }\r\n });\r\n // For each row\r\n for (var i = 0; i < uniquePatients.length; i++) {\r\n var p = uniquePatients[i];\r\n var rows = data[p];\r\n var compoundId = responderId + \"_\" + p;\r\n var pat = patientMap.get(compoundId);\r\n if (!pat) { continue; }\r\n\r\n var patientData = pat.multirowData;\r\n uniqueCompoundPatients.push(compoundId);\r\n // Convert strings to dates\r\n for (var j = 0; j < rows.length; j++) {\r\n var row = rows[j];\r\n for (var k = 0; k < dateFields.length; k++) {\r\n var f = dateFields[k].id;\r\n var v = row[f];\r\n if (v) {\r\n row[f] = new Date(v);\r\n }\r\n }\r\n }\r\n if (!patientData.has(dsId)) {\r\n patientData.set(dsId, rows);\r\n }\r\n }\r\n // Pre-sort all values for each unique patient now that they are grouped\r\n for (var i = 0; i < uniqueCompoundPatients.length; i++) {\r\n var pat = patientMap.get(uniqueCompoundPatients[i]);\r\n var vals = pat.multirowData.get(dsId);\r\n if (vals) {\r\n var valsSorted = vals.sort(function (a, b) { return a[def.dateValueColumn] - b[def.dateValueColumn]; });\r\n pat.multirowData.set(dsId, valsSorted);\r\n rowCount += vals.length;\r\n }\r\n }\r\n // Rows are added to the patient map, now compute stats for each patient\r\n var derivedDef = def.numericValueColumn && dataset.data.schema.fields.indexOf(def.numericValueColumn) > -1\r\n ? deriveNumericSummaryFromDataset(def, uniqueCompoundPatients)\r\n : deriveNonNumericSummaryFromDataset(def, uniqueCompoundPatients);\r\n derivedDef.totalRows = rowCount;\r\n return derivedDef;\r\n};\r\n/*\r\n * Add initial base (basic demographics) dataset to the cache.\r\n */\r\nvar addDemographics = function (payload) {\r\n var datasetDefinition = payload.datasetDefinition, demographics = payload.demographics, responderId = payload.responderId, requestId = payload.requestId;\r\n if (!demographics.length) {\r\n return { requestId: requestId };\r\n }\r\n // For each patient\r\n for (var i = 0; i < demographics.length; i++) {\r\n // Add compound and responder ids\r\n var patientDto = demographics[i];\r\n var patient = {\r\n compoundId: responderId + \"_\" + patientDto.personId,\r\n detailRowCount: 0,\r\n detailValues: [],\r\n id: patientDto.personId,\r\n multirowData: new Map(),\r\n responderId: responderId,\r\n singletonData: new Map()\r\n };\r\n // Add to the patId arrays\r\n defaultPatientOrder.push(patient.compoundId);\r\n currentPatientOrder.push(patient.compoundId);\r\n // Add the demographics data\r\n patient.singletonData.set(datasetDefinition.id, new Map(Object.entries(patientDto)));\r\n // Add patient to map\r\n patientMap.set(patient.compoundId, patient);\r\n }\r\n return { requestId: requestId };\r\n};\r\n/*\r\n * Return an array of tabular patient data based\r\n * on provided configuration definition (the config is\r\n * basically a description of what is display in the UI).\r\n */\r\nvar getPatients = function (payload) {\r\n var config = payload.config;\r\n var requestId = payload.requestId;\r\n var NONE = 0;\r\n var newPats;\r\n // If no need to sort, go by the ingested order\r\n if (config.sort.sortType === NONE) {\r\n newPats = getUnsortedPatients(config);\r\n }\r\n // Else we need sorted\r\n else {\r\n if (config.sort.column.id !== currentSortColumn) {\r\n sortPatients(config);\r\n }\r\n else if (config.sort.column.id === currentSortColumn && config.sort.sortType !== currentSortType) {\r\n currentPatientOrder = currentPatientOrder.reverse();\r\n }\r\n newPats = getSortedPatients(config);\r\n }\r\n copySortType(config.sort);\r\n return { requestId: requestId, result: patientIdsToListRow(config, newPats) };\r\n};\r\n/*\r\n * After a tabular-dataset is returned to the caller,\r\n * cache a copy of the sorting definition here in the worker.\r\n * That way, next time data is requested we can check if\r\n * patients are already approprietly sorted and avoid needing\r\n * to reprocess.\r\n */\r\nvar copySortType = function (configSort) {\r\n if (!configSort.column) {\r\n return;\r\n }\r\n currentSortColumn = configSort.column.id;\r\n currentSortType = configSort.sortType;\r\n};\r\n/*\r\n * Return the actual tabular array to caller, row by row, tuple by tuple.\r\n * If a patient doesn't have data for a given dataset/column, return undefined.\r\n */\r\nvar patientIdsToListRow = function (config, patIds) {\r\n var patList = [];\r\n var _loop_1 = function (i) {\r\n var pat = patientMap.get(patIds[i]);\r\n var patListRow = {\r\n compoundId: pat.compoundId,\r\n detailRowCount: pat.detailRowCount,\r\n detailValues: pat.detailValues,\r\n isOpen: false,\r\n responderId: pat.responderId,\r\n values: []\r\n };\r\n patListRow.values = config.displayColumns.map(function (col) {\r\n var ds = pat.singletonData.get(col.datasetId);\r\n if (!ds) {\r\n return undefined;\r\n }\r\n return ds.get(col.id);\r\n });\r\n patList.push(patListRow);\r\n };\r\n for (var i = 0; i < patIds.length; i++) {\r\n _loop_1(i);\r\n }\r\n return patList;\r\n};\r\n/*\r\n * Order all multirow data from latest to earliest, grouping\r\n * by encounters. This will be visible when the user clicks\r\n * on a patient row to drill down.\r\n */\r\nvar setDetailRows = function (patId) {\r\n var pat = patientMap.get(patId);\r\n var allDetails = [];\r\n var encMap = new Map();\r\n var rowCount = 0;\r\n // Get all encounter detail rows in an array\r\n pat.multirowData.forEach(function (vals, key) {\r\n var ds = multirowDatasets.get(key);\r\n var cols = Array.from(ds.columns.keys()).filter(function (v) { return v !== 'personId' && v !== 'encounterId' && v !== ds.dateValueColumn; });\r\n var hasEncounterIdCol = !!vals[0].encounterId;\r\n var _loop_2 = function (i) {\r\n var val = vals[i];\r\n if (val && val[ds.dateValueColumn])\r\n rowCount++;\r\n allDetails.push({\r\n columns: cols.map(function (k) { return ({ key: k, value: val[k] }); }),\r\n datasetName: ds.displayName,\r\n date: val[ds.dateValueColumn],\r\n dateColumnName: ds.dateValueColumn,\r\n encounterId: hasEncounterIdCol ? val.encounterId : 'Unknown Encounter'\r\n });\r\n };\r\n for (var i = 0; i < vals.length; i++) {\r\n _loop_2(i);\r\n }\r\n });\r\n var getTime = function (date) { return date ? date.getTime() : 0; };\r\n var sorted = allDetails\r\n .sort(function (a, b) { return getTime(b.date) - getTime(a.date); });\r\n // Group details by encounterId\r\n for (var j = 0; j < sorted.length; j++) {\r\n var row = sorted[j];\r\n if (encMap.has(row.encounterId)) {\r\n encMap.get(row.encounterId).push(row);\r\n }\r\n else {\r\n encMap.set(row.encounterId, [row]);\r\n }\r\n }\r\n // Set the grouped encounter data rows as the patient's detail array\r\n pat.detailValues = [];\r\n encMap.forEach(function (v, k) { return pat.detailValues.push({ encounterId: k, rows: v }); });\r\n pat.detailRowCount = rowCount;\r\n};\r\n/*\r\n * Return patient ids unsorted.\r\n */\r\nvar getUnsortedPatients = function (config) {\r\n var offset = config.pageNumber * config.pageSize;\r\n var patIds = defaultPatientOrder.slice(offset, offset + config.pageSize);\r\n return patIds;\r\n};\r\n/*\r\n * Return patient ids sorted.\r\n */\r\nvar getSortedPatients = function (config) {\r\n var offset = config.pageNumber * config.pageSize;\r\n var patIds = currentPatientOrder.slice(offset, offset + config.pageSize);\r\n return patIds;\r\n};\r\n/*\r\n * Sort the cached patient ids by a given column and sort order.\r\n */\r\nvar sortPatients = function (config) {\r\n var _a = config.sort.column, datasetId = _a.datasetId, id = _a.id;\r\n var ASC = 1;\r\n // Set the sort algorithm to sort ASC or DESC\r\n var sortAlgo = config.sort.sortType === ASC\r\n ? function (p, p2) { return (p.value < p2.value ? -1 : p.value > p2.value ? 1 : 0); }\r\n : function (p, p2) { return (p2.value < p.value ? -1 : p2.value > p.value ? 1 : 0); };\r\n // Derive an array from the map and sort by column and algorithm\r\n currentPatientOrder = Array.from(patientMap)\r\n .map(function (p) {\r\n var ds = p[1].singletonData.get(datasetId);\r\n var value = ds ? ds.get(id) : null;\r\n return {\r\n id: p[1].compoundId,\r\n value: value ? value : 0\r\n };\r\n })\r\n .sort(sortAlgo)\r\n .map(function (p) { return p.id; });\r\n};\r\n/*\r\n * Define a derivedNumericColumns template for\r\n * storing summarized stats from numeric datasets.\r\n */\r\nvar getDerivedNumericColumnsTemplate = function () {\r\n // tslint:disable\r\n return {\r\n trend: { id: 'Trend', isDisplayed: true, type: typeSparkline },\r\n count: { id: 'Count', isDisplayed: true, type: typeNum },\r\n mean: { id: 'Mean', type: typeNum },\r\n median: { id: 'Median', type: typeNum },\r\n min: { id: 'Min', type: typeNum },\r\n max: { id: 'Max', type: typeNum },\r\n mostRecent: { id: 'MostRecent', type: typeString },\r\n mostRecentDate: { id: 'MostRecentDate', type: typeDate },\r\n earliest: { id: 'Earliest', type: typeString },\r\n earliestDate: { id: 'EarliestDate', type: typeDate }\r\n };\r\n // tslint:enable\r\n};\r\n/*\r\n * Define a derivedNumericColumns template for\r\n * storing summarized stats from datasets.\r\n */\r\nvar getDerivedNonNumericColumnsTemplate = function () {\r\n // tslint:disable\r\n return {\r\n count: { id: 'Count', isDisplayed: true, type: typeNum },\r\n mostRecent: { id: 'MostRecent', type: typeString },\r\n mostRecentDate: { id: 'MostRecentDate', type: typeDate },\r\n earliest: { id: 'Earliest', type: typeString },\r\n earliestDate: { id: 'EarliestDate', type: typeDate }\r\n };\r\n // tslint:enable\r\n};\r\n/*\r\n * Return a map and column id lookup object for\r\n * a given dataset definition.\r\n */\r\nvar getNumericSummaryDatasetColums = function (def) {\r\n var cols = Object.assign({}, getDerivedNumericColumnsTemplate());\r\n Array.from(Object.keys(cols)).forEach(function (k, i) {\r\n var col = cols[k];\r\n col.index = i;\r\n col.displayName = def.displayName + \" \" + capitalize(col.id);\r\n col.id = (def.displayName + \"_\" + col.id).toLowerCase().replace(' ', '_');\r\n col.isDisplayed = col.isDisplayed || false;\r\n col.datasetId = def.id;\r\n });\r\n return {\r\n lookup: {\r\n count: cols.count.id,\r\n earliest: cols.earliest.id,\r\n earliestDate: cols.earliestDate.id,\r\n max: cols.max.id,\r\n mean: cols.mean.id,\r\n median: cols.median.id,\r\n min: cols.min.id,\r\n mostRecent: cols.mostRecent.id,\r\n mostRecentDate: cols.mostRecentDate.id,\r\n trend: cols.trend.id\r\n },\r\n map: new Map([\r\n [cols.trend.id, cols.trend],\r\n [cols.count.id, cols.count],\r\n [cols.mean.id, cols.mean],\r\n [cols.median.id, cols.median],\r\n [cols.min.id, cols.min],\r\n [cols.max.id, cols.max],\r\n [cols.mostRecent.id, cols.mostRecent],\r\n [cols.mostRecentDate.id, cols.mostRecentDate],\r\n [cols.earliest.id, cols.earliest],\r\n [cols.earliestDate.id, cols.earliestDate]\r\n ])\r\n };\r\n};\r\n/*\r\n * Derive a summary numeric singleton dataset from\r\n * a multirow numeric dataset. The new dataset definition\r\n * is returned to the caller, and rows are added to the cache.\r\n */\r\nvar deriveNumericSummaryFromDataset = function (def, ids) {\r\n var cols = getNumericSummaryDatasetColums(def);\r\n var sumDef = {\r\n columns: cols.map,\r\n displayName: def.displayName,\r\n id: def.id,\r\n multirow: false,\r\n numericValueColumn: def.numericValueColumn,\r\n responderStates: new Map(),\r\n shape: 0,\r\n totalRows: ids.length\r\n };\r\n // Short-circuit if the dataset doesn't have a date or numeric column\r\n if (!def.dateValueColumn || !def.numericValueColumn) {\r\n return sumDef;\r\n }\r\n for (var i = 0; i < ids.length; i++) {\r\n var p = patientMap.get(ids[i]);\r\n var data = p.multirowData.get(def.id);\r\n var ds = new Map();\r\n // Make sure we have data to work with\r\n if (!data) {\r\n continue;\r\n }\r\n var vals = data.map(function (d) { return ({ x: d[def.dateValueColumn], y: d[def.numericValueColumn] }); });\r\n var numVals = vals.filter(function (d) { return +d.y; }).sort(function (a, b) { return a.y - b.y; });\r\n // Compute earliest and latest\r\n var firstDate = vals[0].x;\r\n var firstVal = vals[0].y;\r\n var lastDate = vals[vals.length - 1].x;\r\n var lastVal = vals[vals.length - 1].y;\r\n ds.set(cols.lookup.earliestDate, firstDate);\r\n ds.set(cols.lookup.earliest, firstVal);\r\n ds.set(cols.lookup.mostRecentDate, lastDate);\r\n ds.set(cols.lookup.mostRecent, lastVal);\r\n ds.set(cols.lookup.count, vals.length);\r\n // Compute numeric stats\r\n if (numVals.length) {\r\n var min = numVals[0].y;\r\n var max = numVals[numVals.length - 1].y;\r\n var mean = +(((numVals.reduce(function (a, b) { return a + b.y; }, 0)) / numVals.length).toFixed(1));\r\n var half = Math.floor(numVals.length / 2);\r\n var median = numVals.length % 2\r\n ? numVals[half].y\r\n : (numVals[half - 1].y + numVals[half].y) / 2.0;\r\n ds.set(cols.lookup.min, min);\r\n ds.set(cols.lookup.max, max);\r\n ds.set(cols.lookup.mean, mean);\r\n ds.set(cols.lookup.median, median);\r\n ds.set(cols.lookup.trend, vals);\r\n }\r\n p.singletonData.set(def.id, ds);\r\n patientMap.set(p.compoundId, p);\r\n setDetailRows(p.compoundId);\r\n }\r\n return sumDef;\r\n};\r\n/*\r\n * Return a map and column id lookup object for\r\n * a given non-numeric dataset definition.\r\n */\r\nvar getNonNumericSummaryDatasetColums = function (def) {\r\n var cols = getDerivedNonNumericColumnsTemplate();\r\n Array.from(Object.keys(cols)).forEach(function (k, i) {\r\n var col = cols[k];\r\n col.index = i;\r\n col.displayName = def.displayName + \" \" + capitalize(col.id);\r\n col.id = (def.displayName + \"_\" + col.id).toLowerCase().replace(' ', '_');\r\n col.isDisplayed = col.isDisplayed || false;\r\n col.datasetId = def.id;\r\n });\r\n return {\r\n lookup: {\r\n count: cols.count.id,\r\n earliest: cols.earliest.id,\r\n earliestDate: cols.earliestDate.id,\r\n mostRecent: cols.mostRecent.id,\r\n mostRecentDate: cols.mostRecentDate.id,\r\n },\r\n map: new Map([\r\n [cols.count.id, cols.count],\r\n [cols.mostRecent.id, cols.mostRecent],\r\n [cols.mostRecentDate.id, cols.mostRecentDate],\r\n [cols.earliest.id, cols.earliest],\r\n [cols.earliestDate.id, cols.earliestDate]\r\n ])\r\n };\r\n};\r\n/*\r\n * Derive a summary non-numeric singleton dataset from\r\n * a multirow numeric dataset. The new dataset definition\r\n * is returned to the caller, and rows are added to the cache.\r\n */\r\nvar deriveNonNumericSummaryFromDataset = function (def, ids) {\r\n var cols = getNonNumericSummaryDatasetColums(def);\r\n var sumDef = {\r\n columns: cols.map,\r\n displayName: def.displayName,\r\n id: def.id,\r\n multirow: false,\r\n responderStates: new Map(),\r\n shape: 0\r\n };\r\n // Short-circuit if the dataset doesn't have a date or numeric column\r\n if (!def.dateValueColumn || !def.stringValueColumn) {\r\n return sumDef;\r\n }\r\n for (var i = 0; i < ids.length; i++) {\r\n var p = patientMap.get(ids[i]);\r\n var data = p.multirowData.get(def.id);\r\n var ds = new Map();\r\n // Make sure we have data to work with\r\n if (!data) {\r\n continue;\r\n }\r\n var vals = data.map(function (d) { return ({ x: d[def.dateValueColumn], y: d[def.stringValueColumn] }); });\r\n // Compute earliest and latest\r\n var firstDate = vals[0].x;\r\n var firstVal = vals[0].y;\r\n var lastDate = vals[vals.length - 1].x;\r\n var lastVal = vals[vals.length - 1].y;\r\n ds.set(cols.lookup.earliestDate, firstDate);\r\n ds.set(cols.lookup.earliest, firstVal);\r\n ds.set(cols.lookup.mostRecentDate, lastDate);\r\n ds.set(cols.lookup.mostRecent, lastVal);\r\n ds.set(cols.lookup.count, vals.length);\r\n p.singletonData.set(def.id, ds);\r\n patientMap.set(p.compoundId, p);\r\n setDetailRows(p.compoundId);\r\n }\r\n return sumDef;\r\n};\r\n/*\r\n * Convert tuple objects to csv-friendly strings.\r\n */\r\nvar valueToCsvString = function (d) {\r\n return !d \r\n ? '' : d instanceof Date \r\n ? d.toLocaleString().replace(',', '') : '';\r\n};\r\n/*\r\n * Pulls all cache data for all datasets into a\r\n * JSON object for export (currently only to REDCap).\r\n */\r\nvar getAllData = function (payload) {\r\n var config = payload.config, requestId = payload.requestId, useDisplayedColumnsOnly = payload.useDisplayedColumnsOnly;\r\n var data = [];\r\n var singletonData = { columns: [], data: [], datasetId: 'demographics', isMultirow: false, maxRows: 1 };\r\n var colPersonId = 'personId';\r\n // Add the personId column\r\n singletonData.columns.push(singletonDatasets.get('demographics').columns.get(colPersonId));\r\n // Use only the columns currently displayed or retrieve all (user selects one option or the other)\r\n if (useDisplayedColumnsOnly) {\r\n singletonData.columns.concat(config.displayColumns.filter(function (col) { return col.type !== typeSparkline && col.id !== colPersonId; }));\r\n }\r\n else {\r\n singletonDatasets.forEach(function (def) {\r\n def.columns.forEach(function (col) {\r\n if (col.type !== typeSparkline && col.id !== colPersonId) {\r\n singletonData.columns.push(col);\r\n }\r\n });\r\n });\r\n }\r\n // Add singleton rows\r\n patientMap.forEach(function (p) {\r\n var row = {};\r\n singletonData.columns.forEach(function (col) {\r\n var ds = p.singletonData.get(col.datasetId);\r\n var d = ds ? ds.get(col.id) : '';\r\n row[col.id] = d;\r\n });\r\n row[colPersonId] = p.compoundId;\r\n singletonData.data.push(row);\r\n });\r\n data.push(singletonData);\r\n // Add multirow rows\r\n multirowDatasets.forEach(function (mds) {\r\n var mdsName = mds.displayName.replace(' ', '_').toLowerCase();\r\n var mdsCols = [{ id: colPersonId, datasetId: mdsName, index: 0, isDisplayed: true, type: typeString }];\r\n mds.columns.forEach(function (col) { return mdsCols.push(col); });\r\n var exportData = { columns: mdsCols, data: [], datasetId: mdsName, dateValueColumn: mds.dateValueColumn, isMultirow: true, maxRows: 1 };\r\n patientMap.forEach(function (p) {\r\n var ds = p.multirowData.get(mds.id);\r\n var rowCount = 0;\r\n if (ds) {\r\n for (var i = 0; i < ds.length; i++) {\r\n var row = [];\r\n var vals = ds[i];\r\n for (var j = 0; j < mdsCols.length; j++) {\r\n var d = vals[mdsCols[j].id];\r\n if (d) {\r\n row[mdsCols[j].id] = d;\r\n rowCount++;\r\n }\r\n }\r\n row[colPersonId] = p.compoundId;\r\n exportData.data.push(row);\r\n }\r\n }\r\n exportData.maxRows = rowCount > exportData.maxRows ? rowCount : exportData.maxRows;\r\n });\r\n data.push(exportData);\r\n });\r\n return { requestId: requestId, result: data };\r\n};\r\n/*\r\n * Converts cache data to csv format\r\n * for a given multirow dataset.\r\n */\r\nvar getMultirowDataCsv = function (payload) {\r\n var datasetId = payload.datasetId, requestId = payload.requestId;\r\n var nl = '';\r\n var rows = [];\r\n var cols = [{ id: 'personId', datasetId: datasetId, index: 0, isDisplayed: true, type: typeString }];\r\n multirowDatasets.get(datasetId).columns.forEach(function (col) { return cols.push(col); });\r\n // Add column headers\r\n rows.push(cols.map(function (col) { return col.id; }).join(','));\r\n // Add rows\r\n patientMap.forEach(function (p) {\r\n var ds = p.multirowData.get(datasetId);\r\n if (ds) {\r\n for (var i = 0; i < ds.length; i++) {\r\n var row = [];\r\n var vals = ds[i];\r\n for (var j = 0; j < cols.length; j++) {\r\n var d = vals[cols[j].id];\r\n row.push(\"\" + valueToCsvString(d) + \"\");\r\n }\r\n rows.push(row.join(','));\r\n }\r\n }\r\n });\r\n return { requestId: requestId, result: rows.join(nl) };\r\n};\r\n/*\r\n * Converts cache data to csv format\r\n * representing the columnar table displayed\r\n * in the UI.\r\n */\r\nvar getSingletonDataCsv = function (payload) {\r\n var config = payload.config, requestId = payload.requestId, useDisplayedColumnsOnly = payload.useDisplayedColumnsOnly;\r\n var nl = '';\r\n var rows = [];\r\n var cols = [];\r\n // Use only the columns currently displayed or retrieve all (user selects one option or the other)\r\n if (useDisplayedColumnsOnly) {\r\n cols = config.displayColumns.filter(function (col) { return col.type !== typeSparkline; });\r\n }\r\n else {\r\n singletonDatasets.forEach(function (def) {\r\n def.columns.forEach(function (col) {\r\n if (col.type !== typeSparkline) {\r\n cols.push(col);\r\n }\r\n });\r\n });\r\n }\r\n // Add column headers\r\n rows.push(cols.map(function (col) { return col.id; }).join(','));\r\n // Add rows\r\n patientMap.forEach(function (p) {\r\n var row = [];\r\n cols.forEach(function (col) {\r\n var ds = p.singletonData.get(col.datasetId);\r\n var d = ds ? ds.get(col.id) : undefined;\r\n row.push(\"\" + valueToCsvString(d) + \"\");\r\n });\r\n rows.push(row.join(','));\r\n });\r\n return { requestId: requestId, result: rows.join(nl) };\r\n};\r\n\r\nvar capitalize = (colName) => {\r\n return colName.charAt(0).toUpperCase() + colName.slice(1).trim();\r\n};\r\n`;","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nexport enum keys {\r\n ArrowUp = 1,\r\n ArrowDown = 2,\r\n Backspace = 3,\r\n Enter = 4,\r\n Escape = 5,\r\n Space = 6\r\n}","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nconst caps = /([A-Z])/g;\r\nconst firstToUpper = /^./;\r\nconst camelCaseToUpperSpaced = (colName: string) => colName.replace(caps, ' $1').replace(firstToUpper, (col: string) => col.toUpperCase());\r\n\r\nexport default camelCaseToUpperSpaced;","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport { generate as generateId } from 'shortid';\r\nimport { REDCapExportOptions } from '../../models/state/Export';\r\nimport REDCapEvent from '../../models/redcapExport/Event';\r\nimport REDCapEventMapping from '../../models/redcapExport/EventMapping';\r\nimport REDCapExportConfiguration from '../../models/redcapExport/ExportConfiguration';\r\nimport REDCapFieldMetadata from '../../models/redcapExport/Metadata';\r\nimport REDCapRepeatingFormEvent from '../../models/redcapExport/RepeatingFormEvent';\r\nimport REDCapUser from '../../models/redcapExport/User';\r\nimport { PatientListColumnType, PatientListColumn } from '../../models/patientList/Column';\r\nimport { PatientListDatasetExport } from '../../models/patientList/Dataset';\r\nimport { workerContext } from './redcapExportWebWorkerContext';\r\n\r\nconst CREATE_EXPORT_CONFIGURATION = 'CREATE_EXPORT_CONFIGURATION';\r\n\r\nconst typeString = PatientListColumnType.string;\r\nconst typeNum = PatientListColumnType.number;\r\nconst typeDate = PatientListColumnType.date;\r\nconst typeSparkline = PatientListColumnType.sparkline;\r\n\r\ninterface REDCapExportEventsAndMappings {\r\n events: REDCapEvent[];\r\n eventMappings: REDCapEventMapping[];\r\n}\r\n\r\ninterface REDCapExportDerivedPatientListData {\r\n datasets: PatientListDatasetExport[];\r\n records: object[];\r\n}\r\n\r\ninterface REDCapExportDerivedPatientListColumn extends PatientListColumn {\r\n redcapFieldName: string;\r\n}\r\n\r\ninterface InboundMessagePartialPayload {\r\n message: string;\r\n patientList?: PatientListDatasetExport[];\r\n projectTitle?: string;\r\n options?: REDCapExportOptions;\r\n useRepeatingForms?: boolean;\r\n username?: string;\r\n}\r\n\r\ninterface InboundMessagePayload extends InboundMessagePartialPayload {\r\n requestId: string;\r\n}\r\n\r\ninterface OutboundMessagePayload {\r\n requestId: string;\r\n result?: any;\r\n}\r\n\r\ninterface WorkerReturnPayload {\r\n data: OutboundMessagePayload;\r\n}\r\n\r\ninterface PromiseResolver {\r\n reject: any;\r\n resolve: any;\r\n}\r\n\r\nexport default class REDCapExportWebWorker {\r\n private worker: Worker;\r\n private reject: any;\r\n private promiseMap: Map = new Map();\r\n\r\n constructor() {\r\n const workerFile = ` \r\n ${this.addMessageTypesToContext([ CREATE_EXPORT_CONFIGURATION ])}\r\n ${workerContext}\r\n var typeString = ${PatientListColumnType.string};\r\n var typeNum = ${PatientListColumnType.number};\r\n var typeDate = ${PatientListColumnType.date};\r\n var typeSparkline = ${PatientListColumnType.sparkline};\r\n self.onmessage = function(e) { \r\n self.postMessage(handleWorkMessage.call(this, e.data, postMessage)); \r\n }`;\r\n // console.log(workerFile);\r\n const blob = new Blob([workerFile], { type: 'text/javascript' });\r\n this.worker = new Worker(URL.createObjectURL(blob));\r\n this.worker.onmessage = result => this.handleReturnPayload(result);\r\n this.worker.onerror = error => { console.log(error); this.reject(error) };\r\n }\r\n\r\n public createProjectConfiguration = (options: REDCapExportOptions, patientList: any, projectTitle: string, username: string, useRepeatingForms: boolean) => {\r\n return this.postMessage({ message: CREATE_EXPORT_CONFIGURATION, options, patientList, projectTitle, username, useRepeatingForms });\r\n }\r\n\r\n private postMessage = (payload: InboundMessagePartialPayload) => {\r\n return new Promise((resolve, reject) => {\r\n const requestId = generateId();\r\n this.reject = reject;\r\n this.promiseMap.set(requestId, { resolve, reject });\r\n this.worker.postMessage({ ...payload, requestId });\r\n });\r\n }\r\n\r\n private handleReturnPayload = (payload: WorkerReturnPayload): any => {\r\n const data = payload.data.result ? payload.data.result : {}\r\n const resolve = this.promiseMap.get(payload.data.requestId)!.resolve;\r\n this.promiseMap.delete(payload.data.requestId);\r\n return resolve(data);\r\n }\r\n\r\n private stripFunctionToContext = (f: () => any) => {\r\n const funcString = `${f}`;\r\n return funcString\r\n .substring(0, funcString.lastIndexOf('}'))\r\n .substring(funcString.indexOf('{') + 1)\r\n }\r\n\r\n private addMessageTypesToContext = (messageTypes: string[]) => {\r\n return messageTypes.map((v: string) => `var ${v} = '${v}';`).join(' ');\r\n }\r\n\r\n private workerContext = () => {\r\n\r\n const handleWorkMessage = (payload: InboundMessagePayload) => {\r\n switch (payload.message) {\r\n case CREATE_EXPORT_CONFIGURATION:\r\n return createExportConfiguration(payload);\r\n default:\r\n return null;\r\n }\r\n };\r\n\r\n /*\r\n * Prepare a dataset or field name to be used in REDCap.\r\n */\r\n const invalid = new Map([ [' ', '_'], ['-',''], ['.',''], [';',''], ['!',''], [':',''], ['[',''], [']',''], ['{',''], ['}',''], ['>',''], ['<',''], ['=',''], ['(',''], [')',''] ]);\r\n const cleanName = (pre: string, charLimit: number): string => {\r\n const arr: string[] = [];\r\n\r\n for (let i = 0; i < pre.length; i++) {\r\n const t = pre[i];\r\n const replacement = invalid.get(t);\r\n if (replacement) {\r\n arr.push(replacement);\r\n } else if (t && replacement !== \"\") {\r\n arr.push(t);\r\n }\r\n }\r\n const name = arr.join('').toLowerCase();\r\n\r\n /* \r\n * If the name is too long, generate a random integer,\r\n * shorten the name, and append the integer to keep the name unique.\r\n */ \r\n if (name.length > charLimit) {\r\n const rand = `${Math.round(Math.random() * 1000000)}`;\r\n return `${name.substring(0, charLimit - rand.length - 1)}_${rand}`;\r\n }\r\n return name;\r\n };\r\n\r\n /*\r\n * Create a unique REDCap project export configuration\r\n * based on data from the patient list.\r\n */\r\n const createExportConfiguration = (payload: InboundMessagePayload): OutboundMessagePayload => {\r\n const { requestId, options, patientList, projectTitle, username, useRepeatingForms } = payload;\r\n const dsNameLenLimit = 64;\r\n\r\n /*\r\n * Ensure the id generate for each dataset in REDCap has\r\n * only valid characters and is wiithin the length limit.\r\n */\r\n patientList!.forEach((d) => d.datasetId = cleanName(d.datasetId, dsNameLenLimit));\r\n\r\n /*\r\n * Marshall the data to configure and populate the project.\r\n */\r\n const derived: REDCapExportDerivedPatientListData = deriveRecords(patientList!, useRepeatingForms!, options!.rowLimit!);\r\n const config: REDCapExportConfiguration = {\r\n data: derived.records,\r\n metadata: deriveFieldMetadata(derived),\r\n project: {\r\n is_longitudinal: `'${useRepeatingForms ? 0 : 1}'`,\r\n project_title: projectTitle!,\r\n record_autonumbering_enabled: '0',\r\n },\r\n users: [ deriveUser(options!, patientList!, username!) ]\r\n };\r\n\r\n /*\r\n * Only use repeating forms if the target version of REDCap supports them.\r\n */\r\n if (useRepeatingForms) {\r\n config.repeatingFormEvents = deriveRepeatingFormsEvents(derived);\r\n }\r\n else {\r\n const ev = deriveEvents(derived); \r\n config.eventMappings = ev.eventMappings;\r\n config.events = ev.events;\r\n }\r\n return { requestId, result: config }\r\n };\r\n\r\n /*\r\n * Create a superset object of PatientListDatasetExport[]\r\n * which includes a derived field_name for REDCap\r\n * and and a single array of records derived from\r\n * all patient list datasets.\r\n */\r\n const deriveRecords = (pl: PatientListDatasetExport[], useRepeatingForms: boolean, rowLimit: number): REDCapExportDerivedPatientListData => {\r\n const colPersonId = 'personId';\r\n const colRcPersonId = colPersonId.toLowerCase();\r\n const colRcEventName = 'redcap_event_name';\r\n const colRcRepeatInstrument = 'redcap_repeat_instrument';\r\n const colRcRepeatInstance = 'redcap_repeat_instance';\r\n const derived: REDCapExportDerivedPatientListData = { datasets: pl, records: [] };\r\n const recordCompleteStateCode = 2;\r\n const fieldNameLenLimit = 100;\r\n let totalRowCount = 0;\r\n let totalRowLimitReached = false;\r\n let personIdAdded = false;\r\n\r\n /*\r\n * For each dataset.\r\n */\r\n for (let i = 0; i < derived.datasets.length; i++) {\r\n const ds = derived.datasets[i];\r\n const colRcCompleted = `${ds.datasetId}_complete`;\r\n const recordCount = new Map();\r\n const cols: REDCapExportDerivedPatientListColumn[] = [];\r\n\r\n /*\r\n * Update column names by appending datasetId to avoid collisions in REDCap.\r\n */\r\n for (let j = 0; j < ds.columns.length; j++) {\r\n const col = ds.columns[j] as REDCapExportDerivedPatientListColumn;\r\n col.redcapFieldName = cleanName(`${ds.datasetId}_${col.id}`, fieldNameLenLimit);\r\n if (col.id !== colPersonId || (col.id === colPersonId && !personIdAdded)) {\r\n if (col.id === colPersonId) {\r\n personIdAdded = true;\r\n col.redcapFieldName = colRcPersonId;\r\n }\r\n cols.push(col);\r\n }\r\n }\r\n ds.columns = cols;\r\n\r\n /*\r\n * Derive REDCap records from data.\r\n */\r\n for (let k = 0; k < ds.data.length; k++) {\r\n const r: any = ds.data[k];\r\n const patientId = r[colPersonId];\r\n\r\n if (patientId) {\r\n let count = recordCount.get(patientId) || 0;\r\n count++;\r\n recordCount.set(patientId, count);\r\n\r\n /*\r\n * Create a unique record for REDCap, starting with\r\n * the personId and 'complete' fields. Other properties\r\n * are added in dynamically from the source row with\r\n * the derived REDCap field_name. Event names and repeating\r\n * instrument fields are added depending on the configuration\r\n * of the REDCap and Leaf instances.\r\n */\r\n const record: any = { [colRcPersonId]: r[colPersonId], [colRcCompleted]: recordCompleteStateCode };\r\n if (useRepeatingForms && ds.isMultirow) {\r\n record[colRcRepeatInstrument] = ds.datasetId;\r\n record[colRcRepeatInstance] = count;\r\n } \r\n else if (!useRepeatingForms) {\r\n record[colRcEventName] = `${ds.datasetId}${count}_arm_1`;\r\n }\r\n\r\n for (let l = 0; l < ds.columns.length; l++) {\r\n const rcCol = ds.columns[l] as REDCapExportDerivedPatientListColumn;\r\n const val = r[rcCol.id];\r\n if (val) {\r\n record[rcCol.redcapFieldName] = (rcCol.type === typeDate ? toREDCapDate(val) : val);\r\n }\r\n }\r\n derived.records.push(record);\r\n }\r\n totalRowCount++;\r\n totalRowLimitReached = rowLimit > 0 && totalRowCount >= rowLimit;\r\n if (totalRowLimitReached) break;\r\n }\r\n if (totalRowLimitReached) break;\r\n }\r\n return derived;\r\n }\r\n\r\n /*\r\n * Derive unique events (e.g., diagnosis1, diagnosis2) and\r\n * the REDCap event mappings to point them to specific forms.\r\n * (1 Patient List Dataset => 1 REDCap Form)\r\n */\r\n const deriveEvents = (pl: REDCapExportDerivedPatientListData): REDCapExportEventsAndMappings => {\r\n const events: REDCapEvent[] = [];\r\n const eventMappings: REDCapEventMapping[] = [];\r\n\r\n for (let i = 0; i < pl.datasets.length; i++) {\r\n const ds = pl.datasets[i];\r\n for (let j = 1; j <= ds.maxRows; j++) {\r\n const eventName = `${ds.datasetId}${j}`.toLowerCase();\r\n const uniqueEventNameArm = `${eventName}_arm_1`\r\n events.push({\r\n event_name: eventName,\r\n arm_num: '1',\r\n day_offset: '1',\r\n offset_min: '0',\r\n offset_max: '0',\r\n unique_event_name: uniqueEventNameArm\r\n });\r\n eventMappings.push({\r\n arm_num: '1',\r\n unique_event_name: uniqueEventNameArm,\r\n form: ds.datasetId\r\n });\r\n }\r\n }\r\n return { events, eventMappings };\r\n }\r\n\r\n /*\r\n * Derive metadata from Patient List Dataset fields\r\n * from REDCap. Each column in each dataset becomes\r\n * a field.\r\n */\r\n const deriveFieldMetadata = (pl: REDCapExportDerivedPatientListData): REDCapFieldMetadata[] => {\r\n const meta: REDCapFieldMetadata[] = [];\r\n\r\n /*\r\n * Of note, REDCap expects the properties to be \r\n * in exactly the below order (and throws if not).\r\n */\r\n for (let i = 0; i < pl.datasets.length; i++) {\r\n const ds = pl.datasets[i];\r\n for (let j = 0; j < ds.columns.length; j++) {\r\n const col = ds.columns[j] as REDCapExportDerivedPatientListColumn;\r\n const field: REDCapFieldMetadata = {\r\n field_name: col.redcapFieldName,\r\n form_name: ds.datasetId,\r\n section_header: '',\r\n field_type: 'text',\r\n field_label: capitalize(col.id),\r\n select_choices_or_calculations: '',\r\n field_note: '',\r\n text_validation_type_or_show_slider_number: \r\n col.type === typeNum ? 'number' : \r\n col.type === typeDate ? 'datetime_seconds_ymd' : '',\r\n text_validation_max: '',\r\n text_validation_min: '',\r\n identifier: '',\r\n branching_logic: '',\r\n required_field: '',\r\n custom_alignment: '',\r\n question_number: '',\r\n matrix_group_name: '',\r\n matrix_ranking: '',\r\n field_annotation: ''\r\n };\r\n meta.push(field);\r\n }\r\n }\r\n return meta;\r\n }\r\n\r\n /*\r\n * Derive repeating forms events.\r\n */\r\n const deriveRepeatingFormsEvents = (pl: REDCapExportDerivedPatientListData): REDCapRepeatingFormEvent[] => {\r\n const repeatingForms: REDCapRepeatingFormEvent[] = [];\r\n\r\n for (let i = 0; i < pl.datasets.length; i++) {\r\n const ds = pl.datasets[i];\r\n if (ds.isMultirow) {\r\n const form: REDCapRepeatingFormEvent = { form_name: ds.datasetId };\r\n if (ds.dateValueColumn) {\r\n form.custom_form_label = `[${ds.datasetId}_${ds.dateValueColumn}]`.toLowerCase();\r\n }\r\n repeatingForms.push(form);\r\n }\r\n }\r\n return repeatingForms;\r\n }\r\n\r\n /*\r\n * Derive a user JSON object. The Leaf user\r\n * is designated as the owner of the new REDCap project.\r\n */\r\n const deriveUser = (options: REDCapExportOptions, patientList: PatientListDatasetExport[], username: string): REDCapUser => {\r\n const forms: any = {};\r\n patientList.forEach((d: PatientListDatasetExport) => forms[d.datasetId] = 1);\r\n\r\n const user: REDCapUser = {\r\n username: `${username}@${options.scope}`,\r\n email: ``,\r\n firstname: 'Project',\r\n lastname: 'Owner',\r\n expiration: '',\r\n data_access_group: '',\r\n data_access_group_id: '',\r\n design: 0,\r\n user_rights: 0,\r\n data_access_groups: 0,\r\n data_export: 1,\r\n reports: 1,\r\n stats_and_charts: 1,\r\n manage_survey_participants: 1,\r\n calendar: 1,\r\n data_import_tool: 0,\r\n data_comparison_tool: 0,\r\n logging: 1,\r\n file_repository: 1,\r\n data_quality_create: 0,\r\n data_quality_execute: 0,\r\n api_export: 0,\r\n api_import: 0,\r\n mobile_app: 0,\r\n mobile_app_download_data: 0,\r\n record_create: 1,\r\n record_rename: 0,\r\n record_delete: 0,\r\n lock_records_all_forms: 0,\r\n lock_records: 0,\r\n lock_records_customization: 0,\r\n forms\r\n };\r\n return user;\r\n }\r\n\r\n const capitalize = (colName: string): string => {\r\n return colName.charAt(0).toUpperCase() + colName.slice(1).trim();\r\n };\r\n\r\n const toREDCapDate = (date: Date): string => {\r\n const hours = date.getHours();\r\n const minutes = date.getMinutes();\r\n const strMinutes = minutes < 10 ? '0'+minutes : minutes;\r\n const strHours = hours < 10 ? '0'+hours : hours;\r\n const strTime = `${strHours}:${strMinutes}:00`;\r\n return `${date.getFullYear()}-${date.getMonth()+1}-${date.getDate()} ${strTime}`;\r\n }\r\n }\r\n}","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport { PatientListDatasetDefinitionTemplate, PatientListDatasetShape } from \"./Dataset\";\r\nimport { PatientListColumnType } from \"./Column\";\r\n\r\n// https://www.hl7.org/fhir/person.html\r\n// https://www.hl7.org/fhir/patient.html\r\nexport const DemographicsDefTemplate: PatientListDatasetDefinitionTemplate = {\r\n columns: new Map([\r\n ['personId', { datasetId: 'demographics', id: 'personId', autoDisplayOnLoad: true, type: PatientListColumnType.string }],\r\n ['patientOf', { datasetId: 'demographics', id: 'patientOf',autoDisplayOnLoad: true, type: PatientListColumnType.string }],\r\n ['addressPostalCode', { datasetId: 'demographics', id: 'addressPostalCode', autoDisplayOnLoad: true, type: PatientListColumnType.string }],\r\n ['addressState', { datasetId: 'demographics', id: 'addressState', autoDisplayOnLoad: true, type: PatientListColumnType.string }],\r\n ['age', { datasetId: 'demographics', id: 'age', autoDisplayOnLoad: true, type: PatientListColumnType.number }],\r\n ['ethnicity', { datasetId: 'demographics', id: 'ethnicity', autoDisplayOnLoad: true, type: PatientListColumnType.string }],\r\n ['birthDate', { datasetId: 'demographics', id: 'birthDate', autoDisplayOnLoad: true, type: PatientListColumnType.date, optional: true }],\r\n ['deceasedDateTime', { datasetId: 'demographics', id: 'deceasedDateTime', autoDisplayOnLoad: true, type: PatientListColumnType.date, optional: true }],\r\n ['gender', { datasetId: 'demographics', id: 'gender', autoDisplayOnLoad: true, type: PatientListColumnType.string }],\r\n ['language', { datasetId: 'demographics', id: 'language', autoDisplayOnLoad: true, type: PatientListColumnType.string }],\r\n ['maritalStatus', { datasetId: 'demographics', id: 'maritalStatus', autoDisplayOnLoad: true, type: PatientListColumnType.string }],\r\n ['mrn', { datasetId: 'demographics', id: 'mrn', autoDisplayOnLoad: true, type: PatientListColumnType.string, optional: true }],\r\n ['name', { datasetId: 'demographics', id: 'name', autoDisplayOnLoad: true, type: PatientListColumnType.string, optional: true }],\r\n ['race', { datasetId: 'demographics', id: 'race', autoDisplayOnLoad: true, type: PatientListColumnType.string }],\r\n ['religion', { datasetId: 'demographics', id: 'religion', autoDisplayOnLoad: true, type: PatientListColumnType.string }]\r\n ]),\r\n multirow: false,\r\n shape: PatientListDatasetShape.Demographics\r\n};\r\n\r\nexport const DemographicsAdminSqlDefTemplate: PatientListDatasetDefinitionTemplate = {\r\n columns: new Map([\r\n ['addressPostalCode', { datasetId: 'demographics', id: 'addressPostalCode', type: PatientListColumnType.string }],\r\n ['addressState', { datasetId: 'demographics', id: 'addressState', type: PatientListColumnType.string }],\r\n ['birthDate', { datasetId: 'demographics', id: 'birthDate', type: PatientListColumnType.date }],\r\n ['deceasedDateTime', { datasetId: 'demographics', id: 'deceasedDateTime', autoDisplayOnLoad: true, type: PatientListColumnType.date }],\r\n ['ethnicity', { datasetId: 'demographics', id: 'ethnicity', type: PatientListColumnType.string }],\r\n ['gender', { datasetId: 'demographics', id: 'gender', type: PatientListColumnType.string }],\r\n ['deceasedBoolean', { datasetId: 'demographics', id: 'deceasedBoolean', type: PatientListColumnType.boolean }],\r\n ['hispanicBoolean', { datasetId: 'demographics', id: 'hispanicBoolean', type: PatientListColumnType.boolean }],\r\n ['marriedBoolean', { datasetId: 'demographics', id: 'marriedBoolean', type: PatientListColumnType.boolean }],\r\n ['language', { datasetId: 'demographics', id: 'language', type: PatientListColumnType.string }],\r\n ['maritalStatus', { datasetId: 'demographics', id: 'maritalStatus', type: PatientListColumnType.string }],\r\n ['mrn', { datasetId: 'demographics', id: 'mrn', type: PatientListColumnType.date }],\r\n ['name', { datasetId: 'demographics', id: 'name', type: PatientListColumnType.date }],\r\n ['race', { datasetId: 'demographics', id: 'race', type: PatientListColumnType.string }],\r\n ['religion', { datasetId: 'demographics', id: 'religion', type: PatientListColumnType.string }]\r\n ]),\r\n multirow: false,\r\n shape: PatientListDatasetShape.Demographics\r\n};\r\n\r\n// https://www.hl7.org/fhir/encounter.html\r\nexport const EncounterDefTemplate: PatientListDatasetDefinitionTemplate = {\r\n columns: new Map([\r\n ['admitDate', { id: 'admitDate', type: PatientListColumnType.date }],\r\n ['admitSource', { id: 'admitSource', type: PatientListColumnType.string, optional: true }],\r\n ['class', { id: 'class', type: PatientListColumnType.string }],\r\n ['dischargeDate', { id: 'dischargeDate', type: PatientListColumnType.date }],\r\n ['dischargeDisposition', { id: 'dischargeDisposition', type: PatientListColumnType.string, optional: true }],\r\n ['encounterId', { id: 'encounterId', type: PatientListColumnType.string }],\r\n ['location', { id: 'location', type: PatientListColumnType.string }],\r\n ['status', { id: 'status', type: PatientListColumnType.string, optional: true }]\r\n ]),\r\n dateValueColumn: 'admitDate',\r\n multirow: true,\r\n shape: PatientListDatasetShape.Encounter,\r\n stringValueColumn: 'location'\r\n};\r\n\r\n// https://www.hl7.org/fhir/observation.html\r\nexport const ObservationDefTemplate: PatientListDatasetDefinitionTemplate = {\r\n columns: new Map([\r\n ['category', { id: 'category', type: PatientListColumnType.string }],\r\n ['code', { id: 'code', type: PatientListColumnType.string }],\r\n ['effectiveDate', { id: 'effectiveDate', type: PatientListColumnType.date }],\r\n ['encounterId', { id: 'encounterId', type: PatientListColumnType.string }],\r\n ['referenceRangeLow', { id: 'referenceRangeLow', type: PatientListColumnType.number, optional: true }],\r\n ['referenceRangeHigh', { id: 'referenceRangeHigh', type: PatientListColumnType.number, optional: true }],\r\n ['specimentType', { id: 'specimenType', type: PatientListColumnType.string, optional: true }],\r\n ['valueString', { id: 'valueString', type: PatientListColumnType.string }],\r\n ['valueQuantity', { id: 'valueQuantity', type: PatientListColumnType.number, optional: true }],\r\n ['valueUnit', { id: 'valueUnit', type: PatientListColumnType.string, optional: true }]\r\n ]),\r\n dateValueColumn: 'effectiveDate',\r\n multirow: true,\r\n numericValueColumn: 'valueQuantity',\r\n shape: PatientListDatasetShape.Observation,\r\n stringValueColumn: 'valueString'\r\n};\r\n\r\n// https://www.hl7.org/fhir/condition.html\r\nexport const ConditionDefTemplate: PatientListDatasetDefinitionTemplate = {\r\n columns: new Map([\r\n ['abatementDateTime', { id: 'abatementDateTime', type: PatientListColumnType.number, optional: true }],\r\n ['category', { id: 'category', type: PatientListColumnType.string }],\r\n ['code', { id: 'code', type: PatientListColumnType.string }],\r\n ['coding', { id: 'coding', type: PatientListColumnType.string }],\r\n ['encounterId', { id: 'encounterId', type: PatientListColumnType.string }],\r\n ['onsetDateTime', { id: 'onsetDateTime', type: PatientListColumnType.date }],\r\n ['recordedDate', { id: 'recordedDate', type: PatientListColumnType.number, optional: true }],\r\n ['text', { id: 'text', type: PatientListColumnType.string }],\r\n ]),\r\n dateValueColumn: 'onsetDateTime',\r\n multirow: true,\r\n shape: PatientListDatasetShape.Condition,\r\n stringValueColumn: 'code'\r\n};\r\n\r\n// https://www.hl7.org/fhir/procedure.html\r\nexport const ProcedureDefTemplate: PatientListDatasetDefinitionTemplate = {\r\n columns: new Map([\r\n ['category', { id: 'category', type: PatientListColumnType.string }],\r\n ['code', { id: 'code', type: PatientListColumnType.string }],\r\n ['coding', { id: 'coding', type: PatientListColumnType.string }],\r\n ['encounterId', { id: 'encounterId', type: PatientListColumnType.string }],\r\n ['performedDateTime', { id: 'performedDateTime', type: PatientListColumnType.date }],\r\n ['text', { id: 'text', type: PatientListColumnType.string }],\r\n ]),\r\n dateValueColumn: 'performedDateTime',\r\n multirow: true,\r\n shape: PatientListDatasetShape.Procedure,\r\n stringValueColumn: 'code'\r\n};\r\n\r\n// https://www.hl7.org/fhir/immunization.html\r\nexport const ImmunizationDefTemplate: PatientListDatasetDefinitionTemplate = {\r\n columns: new Map([\r\n ['coding', { id: 'coding', type: PatientListColumnType.string }],\r\n ['doseQuantity', { id: 'doseQuantity', type: PatientListColumnType.number, optional: true }],\r\n ['doseUnit', { id: 'doseUnit', type: PatientListColumnType.string, optional: true }],\r\n ['encounterId', { id: 'encounterId', type: PatientListColumnType.string }],\r\n ['occurrenceDateTime', { id: 'occurrenceDateTime', type: PatientListColumnType.date }],\r\n ['route', { id: 'route', type: PatientListColumnType.string, optional: true }],\r\n ['text', { id: 'text', type: PatientListColumnType.string }],\r\n ['vaccineCode', { id: 'vaccineCode', type: PatientListColumnType.string }]\r\n ]),\r\n dateValueColumn: 'occurrenceDateTime',\r\n multirow: true,\r\n shape: PatientListDatasetShape.Immunization,\r\n stringValueColumn: 'vaccineCode'\r\n};\r\n\r\n// https://www.hl7.org/fhir/allergyintolerance.html\r\nexport const AllergyDefTemplate: PatientListDatasetDefinitionTemplate = {\r\n columns: new Map([\r\n ['category', { id: 'category', type: PatientListColumnType.string }],\r\n ['code', { id: 'code', type: PatientListColumnType.string }],\r\n ['coding', { id: 'coding', type: PatientListColumnType.string }],\r\n ['encounterId', { id: 'encounterId', type: PatientListColumnType.string }],\r\n ['onsetDateTime', { id: 'onsetDateTime', type: PatientListColumnType.date }],\r\n ['recordedDate', { id: 'recordedDate', type: PatientListColumnType.number, optional: true }],\r\n ['text', { id: 'text', type: PatientListColumnType.string }],\r\n ]),\r\n dateValueColumn: 'onsetDateTime',\r\n multirow: true,\r\n shape: PatientListDatasetShape.Allergy,\r\n stringValueColumn: 'text'\r\n};\r\n\r\n// https://www.hl7.org/fhir/medicationrequest.html\r\nexport const MedRequestDefTemplate: PatientListDatasetDefinitionTemplate = {\r\n columns: new Map([\r\n ['amount', { id: 'amount', type: PatientListColumnType.number, optional: true }],\r\n ['authoredOn', { id: 'authoredOn', type: PatientListColumnType.date }],\r\n ['category', { id: 'category', type: PatientListColumnType.string }],\r\n ['code', { id: 'code', type: PatientListColumnType.string }],\r\n ['coding', { id: 'coding', type: PatientListColumnType.string }],\r\n ['encounterId', { id: 'encounterId', type: PatientListColumnType.string }],\r\n ['form', { id: 'form', type: PatientListColumnType.string, optional: true }],\r\n ['text', { id: 'text', type: PatientListColumnType.string }],\r\n ['unit', { id: 'unit', type: PatientListColumnType.string, optional: true }]\r\n ]),\r\n dateValueColumn: 'authoredOn',\r\n multirow: true,\r\n shape: PatientListDatasetShape.MedicationRequest,\r\n stringValueColumn: 'text'\r\n};\r\n\r\n// https://www.hl7.org/fhir/medicationadministration.html\r\nexport const MedAdminDefTemplate: PatientListDatasetDefinitionTemplate = {\r\n columns: new Map([\r\n ['code', { id: 'code', type: PatientListColumnType.string }],\r\n ['coding', { id: 'coding', type: PatientListColumnType.string }],\r\n ['doseQuantity', { id: 'doseQuantity', type: PatientListColumnType.number, optional: true }],\r\n ['doseUnit', { id: 'doseUnit', type: PatientListColumnType.string, optional: true }],\r\n ['encounterId', { id: 'encounterId', type: PatientListColumnType.string }],\r\n ['effectiveDateTime', { id: 'effectiveDateTime', type: PatientListColumnType.date }],\r\n ['route', { id: 'route', type: PatientListColumnType.string, optional: true }],\r\n ['text', { id: 'text', type: PatientListColumnType.string }]\r\n ]),\r\n dateValueColumn: 'effectiveDateTime',\r\n multirow: true,\r\n shape: PatientListDatasetShape.MedicationAdministration,\r\n stringValueColumn: 'code'\r\n};\r\n\r\nexport const DefTemplates: Map = new Map([\r\n [PatientListDatasetShape.Demographics, DemographicsDefTemplate],\r\n [PatientListDatasetShape.Encounter, EncounterDefTemplate],\r\n [PatientListDatasetShape.Observation, ObservationDefTemplate],\r\n [PatientListDatasetShape.Condition, ConditionDefTemplate],\r\n [PatientListDatasetShape.Procedure, ProcedureDefTemplate],\r\n [PatientListDatasetShape.Immunization, ImmunizationDefTemplate],\r\n [PatientListDatasetShape.Allergy, AllergyDefTemplate],\r\n [PatientListDatasetShape.MedicationRequest, MedRequestDefTemplate],\r\n [PatientListDatasetShape.MedicationAdministration, MedAdminDefTemplate],\r\n]);\r\n","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport { AppState } from '../models/state/AppState';\r\nimport { PatientListState, CohortStateType } from '../models/state/CohortState';\r\nimport { REDCapExportOptions } from '../models/state/Export';\r\nimport PatientListWebWorker from '../providers/patientList/patientListWebWorker';\r\nimport REDCapExportWebWorker from '../providers/redcapExport/redcapExportWebWorker';\r\nimport camelCaseToUpperSpaced from '../utils/camelCaseToUpperSpaced';\r\nimport { PatientListConfiguration } from '../models/patientList/Configuration';\r\nimport { PatientListDatasetDefinition, PatientListDatasetExport, PatientListDatasetDTO, PatientListDataset, PatientListDatasetQuery, PatientListDatasetSummaryType, PatientListDatasetDefinitionTemplate } from '../models/patientList/Dataset';\r\nimport { PatientListColumn, PatientListColumnId } from '../models/patientList/Column';\r\nimport { PatientListRow, PatientListRowDTO } from '../models/patientList/Patient';\r\nimport { DemographicsDefTemplate, DefTemplates } from '../models/patientList/DatasetDefinitionTemplate';\r\n\r\nconst patientListProvider = new PatientListWebWorker();\r\nconst redcapExportProvider = new REDCapExportWebWorker();\r\n\r\n/*\r\n * Returns a patient list (rows with tuples, as arrays) based on the\r\n * current configuration object.\r\n */\r\nexport const getPatients = (config: PatientListConfiguration) => {\r\n return patientListProvider.getPatients(config);\r\n};\r\n\r\nexport const removeDataset = (config: PatientListConfiguration, def: PatientListDatasetDefinition) => {\r\n return patientListProvider.removeDataset(config, def.id);\r\n};\r\n\r\n/*\r\n * Gets all data, regardless of configuration. This is used for transformation\r\n * prior to export.\r\n */\r\nexport const getAllData = (config: PatientListConfiguration, useDisplayedColumnsOnly: boolean) => {\r\n return patientListProvider.getAllData(config, useDisplayedColumnsOnly);\r\n};\r\n\r\n/*\r\n * Transforms patient list data to REDCap objects to prep for export.\r\n */\r\nexport const getREDCapExportData = (\r\n options: REDCapExportOptions, \r\n plData: PatientListDatasetExport[], \r\n projectTitle: string, \r\n username: string, \r\n useRepeatingForms: boolean\r\n ) => {\r\n return redcapExportProvider.createProjectConfiguration(options, plData, projectTitle, username, useRepeatingForms);\r\n};\r\n\r\n/*\r\n * Extracts datasets as CSV files. This is not yet fully implemented.\r\n */\r\nexport const getCsvs = async (config: PatientListConfiguration) => {\r\n /*\r\n const base: any = await patientListProvider.getSingletonCsv(config, false);\r\n const pl: any = await patientListProvider.getMultirowCsv('Platelet');\r\n\r\n downloadCsv(base, 'demographics');\r\n downloadCsv(pl, 'platelets');\r\n */\r\n};\r\n\r\n/*\r\n * Downloads a dataset (already transformed to a string) to a CSV file in browser.\r\n */\r\nconst downloadCsv = (content: string, fileName: string) => {\r\n const packageCsv = (csv: string) => new Blob([ csv ], { type: 'text/csv;encoding:utf-8' });\r\n const a = document.createElement('a');\r\n\r\n // IE10\r\n if (navigator.msSaveBlob) {\r\n navigator.msSaveBlob(packageCsv(content), fileName);\r\n } else if (URL && 'download' in a) { \r\n a.href = URL.createObjectURL(packageCsv(content));\r\n a.setAttribute('download', fileName);\r\n document.body.appendChild(a);\r\n a.click();\r\n document.body.removeChild(a);\r\n } else {\r\n location.href = 'data:application/octet-stream,' + encodeURIComponent(content);\r\n }\r\n};\r\n\r\n/*\r\n * Tells the web worker to clear all patient list data.\r\n */\r\nexport const clearPreviousPatientList = () => patientListProvider.clearPatients();\r\n\r\n/*\r\n * Adds a multirow dataset, then returns a new patient list.\r\n */\r\nexport const addMultirowDataset = async (\r\n getState: () => AppState, \r\n datasetDto: PatientListDatasetDTO, \r\n queryRef: PatientListDatasetQuery, \r\n responderId: number\r\n ): Promise => {\r\n\r\n const patientList = getState().cohort.patientList;\r\n const multirowDatasets = patientList.configuration.multirowDatasets;\r\n const singletonDatasets = patientList.configuration.singletonDatasets;\r\n const def = getDatasetDefinition(datasetDto, queryRef);\r\n const dataset: PatientListDataset = {\r\n ...queryRef,\r\n data: datasetDto,\r\n definition: def\r\n };\r\n\r\n /* \r\n * Add dataset definition.\r\n */\r\n if (!multirowDatasets.has(def.id)) {\r\n multirowDatasets.set(def.id, def);\r\n }\r\n multirowDatasets.get(def.id)!.responderStates.set(responderId, CohortStateType.LOADED);\r\n\r\n /* \r\n * Update the displayed patients.\r\n */\r\n const summaryDef = await patientListProvider.addDataset(dataset, responderId) as PatientListDatasetDefinition;\r\n\r\n /* \r\n * If we have a new summary dataset, add to configuration.\r\n */\r\n if (summaryDef) {\r\n /*\r\n * If the dataset hasn't been added yet (from a different responder),\r\n * add the default display columns.\r\n */\r\n if (!singletonDatasets.has(summaryDef.id)) {\r\n singletonDatasets.set(summaryDef.id, summaryDef);\r\n summaryDef.columns.forEach((col: PatientListColumn) => { if (col.isDisplayed) patientList.configuration.displayColumns.push(col); });\r\n /* \r\n * Else it's already been loaded, so aggregate the total rows.\r\n */\r\n } else {\r\n const previousSumDef = singletonDatasets.get(summaryDef.id);\r\n if (previousSumDef && previousSumDef.totalRows) {\r\n previousSumDef.totalRows += summaryDef.totalRows!;\r\n singletonDatasets.set(previousSumDef.id, previousSumDef);\r\n }\r\n }\r\n /*\r\n * If it has a numeric column and the column is present in the data,\r\n * set the type to 'Quantitative', else 'NonQuantitative'.\r\n */\r\n if (summaryDef.numericValueColumn && datasetDto.schema.fields.indexOf(summaryDef.numericValueColumn) > -1) {\r\n summaryDef.summaryType = PatientListDatasetSummaryType.Quantitative;\r\n } else {\r\n summaryDef.summaryType = PatientListDatasetSummaryType.NonQuantititive;\r\n }\r\n /*\r\n * Set the dataset as 'LOADED' from this responder.\r\n */\r\n summaryDef.responderStates.set(responderId, CohortStateType.LOADED);\r\n }\r\n\r\n /* \r\n * Get the latest patient list.\r\n */\r\n patientList.display = await getPatients(patientList.configuration) as PatientListRow[];\r\n patientList.totalRows = getState().cohort.patientList.totalRows + summaryDef.totalRows!;\r\n \r\n return patientList;\r\n};\r\n\r\n/*\r\n * Add patient demographics (the base dataset) to the patient list.\r\n * This has a standalone method different from other datasets because\r\n * its DTO is a different shape.\r\n */\r\nexport const addDemographicsDataset = async (\r\n getState: () => AppState, \r\n patients: PatientListRowDTO[], \r\n responderId: number\r\n ): Promise => {\r\n const state = getState();\r\n const patientList = state.cohort.patientList;\r\n const responder = state.responders.get(responderId)!;\r\n\r\n if (!patients.length) { return patientList; }\r\n\r\n /*\r\n * Add the responder name as a column.\r\n */\r\n for (let i = 0; i < patients.length; i++) {\r\n const pat = patients[i] as any;\r\n pat.patientOf = responder.name;\r\n }\r\n\r\n /* \r\n * Validate definition against actual dataset.\r\n */\r\n const def = getDemographicsDefinition(patients[0]);\r\n\r\n /* \r\n * Add columns if none are displayed.\r\n */\r\n if (!patientList.configuration.singletonDatasets.size) {\r\n\r\n def.columns.forEach((c: PatientListColumn) => {\r\n c.isDisplayed = true;\r\n patientList.configuration.displayColumns.push(c);\r\n });\r\n patientList.configuration.singletonDatasets.set(def.id, def);\r\n }\r\n\r\n /*\r\n * Update the displayed patients.\r\n */\r\n await patientListProvider.addDemographics(def, patients, responderId);\r\n patientList.display = await patientListProvider.getPatients(patientList.configuration) as PatientListRow[];\r\n patientList.totalPatients = getState().cohort.patientList.totalPatients + patients.length;\r\n patientList.state = CohortStateType.LOADED;\r\n return patientList;\r\n};\r\n\r\n/*\r\n * Validates expected template columns against the return dataset schema.\r\n */\r\nconst validateDefinitionColumns = (\r\n template: PatientListDatasetDefinitionTemplate,\r\n actualColNames: string[], \r\n datasetId: string\r\n ): Map => {\r\n\r\n const cols: Map = new Map();\r\n let i = 0;\r\n\r\n template.columns.forEach((c) => {\r\n if (actualColNames.indexOf(c.id) !== -1) {\r\n const col: PatientListColumn = {\r\n ...c,\r\n datasetId,\r\n displayName: c.displayName ? c.displayName : camelCaseToUpperSpaced(c.id),\r\n index: i,\r\n isDisplayed: !!c.autoDisplayOnLoad\r\n };\r\n cols.set(c.id, col);\r\n i++;\r\n }\r\n })\r\n return cols;\r\n};\r\n\r\n/*\r\n * Extracts a demographics dataset definition.\r\n */\r\nconst getDemographicsDefinition = (patient: PatientListRowDTO) => {\r\n const realCols = Object.keys(patient);\r\n const dsName = 'demographics';\r\n const dsDisplayName = 'Basic Demographics';\r\n const def: PatientListDatasetDefinition = {\r\n ...DemographicsDefTemplate,\r\n columns: validateDefinitionColumns(DemographicsDefTemplate, realCols, dsName),\r\n displayName: dsDisplayName,\r\n id: dsName,\r\n responderStates: new Map()\r\n };\r\n return def;\r\n};\r\n\r\n/*\r\n * Extracts a dataset definition.\r\n */\r\nconst getDatasetDefinition = (dataset: PatientListDatasetDTO, queryRef: PatientListDatasetQuery) => {\r\n const template = DefTemplates.get(queryRef.shape)!;\r\n const def: PatientListDatasetDefinition = {\r\n ...template,\r\n category: queryRef.category,\r\n columns: validateDefinitionColumns(template, dataset.schema.fields, queryRef.name),\r\n displayName: queryRef.category ? `${queryRef.category}: ${queryRef.name}` : queryRef.name,\r\n id: queryRef.id.toLowerCase().replace(' ',''),\r\n responderStates: new Map()\r\n };\r\n return def;\r\n};\r\n","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nexport const workerContext = `\r\nvar handleWorkMessage = function (payload) {\r\n switch (payload.message) {\r\n case CREATE_EXPORT_CONFIGURATION:\r\n return createExportConfiguration(payload);\r\n default:\r\n return null;\r\n }\r\n};\r\n/*\r\n * Prepare a dataset or field name to be used in REDCap.\r\n */\r\nvar invalid = new Map([ [' ', '_'], ['-',''], ['.',''], [';',''], ['!',''], [':',''], ['[',''], [']',''], ['{',''], ['}',''], ['>',''], ['<',''], ['=',''], ['(',''], [')',''] ]);\r\nvar cleanName = function (pre, charLimit) {\r\n var arr = [];\r\n for (var i = 0; i < pre.length; i++) {\r\n var t = pre[i];\r\n var replacement = invalid.get(t);\r\n if (replacement) {\r\n arr.push(replacement);\r\n }\r\n else if (t && replacement !== \"\") {\r\n arr.push(t);\r\n }\r\n }\r\n var name = arr.join('').toLowerCase();\r\n /*\r\n * If the name is too long, generate a random integer,\r\n * shorten the name, and append the integer to keep the name unique.\r\n */\r\n if (name.length > charLimit) {\r\n var rand = \"\" + Math.round(Math.random() * 1000000);\r\n return name.substring(0, charLimit - rand.length - 1) + \"_\" + rand;\r\n }\r\n return name;\r\n};\r\n/*\r\n * Create a unique REDCap project export configuration\r\n * based on data from the patient list.\r\n */\r\nvar createExportConfiguration = function (payload) {\r\n var requestId = payload.requestId, options = payload.options, patientList = payload.patientList, projectTitle = payload.projectTitle, username = payload.username, useRepeatingForms = payload.useRepeatingForms;\r\n var dsNameLenLimit = 64;\r\n /*\r\n * Ensure the id generate for each dataset in REDCap has\r\n * only valid characters and is wiithin the length limit.\r\n */\r\n patientList.forEach(function (d) { return d.datasetId = cleanName(d.datasetId, dsNameLenLimit); });\r\n /*\r\n * Marshall the data to configure and populate the project.\r\n */\r\n var derived = deriveRecords(patientList, useRepeatingForms, options.rowLimit);\r\n var config = {\r\n data: derived.records,\r\n metadata: deriveFieldMetadata(derived),\r\n project: {\r\n is_longitudinal: \"'\" + (useRepeatingForms ? 0 : 1) + \"'\",\r\n project_title: projectTitle,\r\n record_autonumbering_enabled: '0',\r\n },\r\n users: [deriveUser(options, patientList, username)]\r\n };\r\n /*\r\n * Only use repeating forms if the target version of REDCap supports them.\r\n */\r\n if (useRepeatingForms) {\r\n config.repeatingFormEvents = deriveRepeatingFormsEvents(derived);\r\n }\r\n else {\r\n var ev = deriveEvents(derived);\r\n config.eventMappings = ev.eventMappings;\r\n config.events = ev.events;\r\n }\r\n return { requestId: requestId, result: config };\r\n};\r\n/*\r\n * Create a superset object of PatientListDatasetExport[]\r\n * which includes a derived field_name for REDCap\r\n * and and a single array of records derived from\r\n * all patient list datasets.\r\n */\r\nvar deriveRecords = function (pl, useRepeatingForms, rowLimit) {\r\n var _a;\r\n var colPersonId = 'personId';\r\n var colRcPersonId = colPersonId.toLowerCase();\r\n var colRcEventName = 'redcap_event_name';\r\n var colRcRepeatInstrument = 'redcap_repeat_instrument';\r\n var colRcRepeatInstance = 'redcap_repeat_instance';\r\n var derived = { datasets: pl, records: [] };\r\n var recordCompleteStateCode = 2;\r\n var fieldNameLenLimit = 100;\r\n var totalRowCount = 0;\r\n var totalRowLimitReached = false;\r\n var personIdAdded = false;\r\n /*\r\n * For each dataset.\r\n */\r\n for (var i = 0; i < derived.datasets.length; i++) {\r\n var ds = derived.datasets[i];\r\n var colRcCompleted = ds.datasetId + \"_complete\";\r\n var recordCount = new Map();\r\n var cols = [];\r\n /*\r\n * Update column names by appending datasetId to avoid collisions in REDCap.\r\n */\r\n for (var j = 0; j < ds.columns.length; j++) {\r\n var col = ds.columns[j];\r\n col.redcapFieldName = cleanName(ds.datasetId + \"_\" + col.id, fieldNameLenLimit);\r\n if (col.id !== colPersonId || (col.id === colPersonId && !personIdAdded)) {\r\n if (col.id === colPersonId) {\r\n personIdAdded = true;\r\n col.redcapFieldName = colRcPersonId;\r\n }\r\n cols.push(col);\r\n }\r\n }\r\n ds.columns = cols;\r\n /*\r\n * Derive REDCap records from data.\r\n */\r\n for (var k = 0; k < ds.data.length; k++) {\r\n var r = ds.data[k];\r\n var patientId = r[colPersonId];\r\n if (patientId) {\r\n var count = recordCount.get(patientId) || 0;\r\n count++;\r\n recordCount.set(patientId, count);\r\n /*\r\n * Create a unique record for REDCap, starting with\r\n * the personId and 'complete' fields. Other properties\r\n * are added in dynamically from the source row with\r\n * the derived REDCap field_name. Event names and repeating\r\n * instrument fields are added depending on the configuration\r\n * of the REDCap and Leaf instances.\r\n */\r\n var record = (_a = {}, _a[colRcPersonId] = r[colPersonId], _a[colRcCompleted] = recordCompleteStateCode, _a);\r\n if (useRepeatingForms && ds.isMultirow) {\r\n record[colRcRepeatInstrument] = ds.datasetId;\r\n record[colRcRepeatInstance] = count;\r\n }\r\n else if (!useRepeatingForms) {\r\n record[colRcEventName] = \"\" + ds.datasetId + count + \"_arm_1\";\r\n }\r\n for (var l = 0; l < ds.columns.length; l++) {\r\n var rcCol = ds.columns[l];\r\n var val = r[rcCol.id];\r\n if (val) {\r\n record[rcCol.redcapFieldName] = (rcCol.type === typeDate ? toREDCapDate(val) : val);\r\n }\r\n }\r\n derived.records.push(record);\r\n }\r\n totalRowCount++;\r\n totalRowLimitReached = rowLimit > 0 && totalRowCount >= rowLimit;\r\n if (totalRowLimitReached)\r\n break;\r\n }\r\n if (totalRowLimitReached)\r\n break;\r\n }\r\n return derived;\r\n};\r\n/*\r\n * Derive unique events (e.g., diagnosis1, diagnosis2) and\r\n * the REDCap event mappings to point them to specific forms.\r\n * (1 Patient List Dataset => 1 REDCap Form)\r\n */\r\nvar deriveEvents = function (pl) {\r\n var events = [];\r\n var eventMappings = [];\r\n for (var i = 0; i < pl.datasets.length; i++) {\r\n var ds = pl.datasets[i];\r\n for (var j = 1; j <= ds.maxRows; j++) {\r\n var eventName = (\"\" + ds.datasetId + j).toLowerCase();\r\n var uniqueEventNameArm = eventName + \"_arm_1\";\r\n events.push({\r\n event_name: eventName,\r\n arm_num: '1',\r\n day_offset: '1',\r\n offset_min: '0',\r\n offset_max: '0',\r\n unique_event_name: uniqueEventNameArm\r\n });\r\n eventMappings.push({\r\n arm_num: '1',\r\n unique_event_name: uniqueEventNameArm,\r\n form: ds.datasetId\r\n });\r\n }\r\n }\r\n return { events: events, eventMappings: eventMappings };\r\n};\r\n/*\r\n * Derive metadata from Patient List Dataset fields\r\n * from REDCap. Each column in each dataset becomes\r\n * a field.\r\n */\r\nvar deriveFieldMetadata = function (pl) {\r\n var meta = [];\r\n /*\r\n * Of note, REDCap expects the properties to be\r\n * in exactly the below order (and throws if not).\r\n */\r\n for (var i = 0; i < pl.datasets.length; i++) {\r\n var ds = pl.datasets[i];\r\n for (var j = 0; j < ds.columns.length; j++) {\r\n var col = ds.columns[j];\r\n var field = {\r\n field_name: col.redcapFieldName,\r\n form_name: ds.datasetId,\r\n section_header: '',\r\n field_type: 'text',\r\n field_label: capitalize(col.id),\r\n select_choices_or_calculations: '',\r\n field_note: '',\r\n text_validation_type_or_show_slider_number: col.type === typeNum ? 'number' :\r\n col.type === typeDate ? 'datetime_seconds_ymd' : '',\r\n text_validation_max: '',\r\n text_validation_min: '',\r\n identifier: '',\r\n branching_logic: '',\r\n required_field: '',\r\n custom_alignment: '',\r\n question_number: '',\r\n matrix_group_name: '',\r\n matrix_ranking: '',\r\n field_annotation: ''\r\n };\r\n meta.push(field);\r\n }\r\n }\r\n return meta;\r\n};\r\n/*\r\n * Derive repeating forms events.\r\n */\r\nvar deriveRepeatingFormsEvents = function (pl) {\r\n var repeatingForms = [];\r\n for (var i = 0; i < pl.datasets.length; i++) {\r\n var ds = pl.datasets[i];\r\n if (ds.isMultirow) {\r\n var form = { form_name: ds.datasetId };\r\n if (ds.dateValueColumn) {\r\n form.custom_form_label = (\"[\" + ds.datasetId + \"_\" + ds.dateValueColumn + \"]\").toLowerCase();\r\n }\r\n repeatingForms.push(form);\r\n }\r\n }\r\n return repeatingForms;\r\n};\r\n/*\r\n * Derive a user JSON object. The Leaf user\r\n * is designated as the owner of the new REDCap project.\r\n */\r\nvar deriveUser = function (options, patientList, username) {\r\n var forms = {};\r\n patientList.forEach(function (d) { return forms[d.datasetId] = 1; });\r\n var user = {\r\n username: username + \"@\" + options.scope,\r\n email: \"\",\r\n firstname: 'Project',\r\n lastname: 'Owner',\r\n expiration: '',\r\n data_access_group: '',\r\n data_access_group_id: '',\r\n design: 0,\r\n user_rights: 0,\r\n data_access_groups: 0,\r\n data_export: 1,\r\n reports: 1,\r\n stats_and_charts: 1,\r\n manage_survey_participants: 1,\r\n calendar: 1,\r\n data_import_tool: 0,\r\n data_comparison_tool: 0,\r\n logging: 1,\r\n file_repository: 1,\r\n data_quality_create: 0,\r\n data_quality_execute: 0,\r\n api_export: 0,\r\n api_import: 0,\r\n mobile_app: 0,\r\n mobile_app_download_data: 0,\r\n record_create: 1,\r\n record_rename: 0,\r\n record_delete: 0,\r\n lock_records_all_forms: 0,\r\n lock_records: 0,\r\n lock_records_customization: 0,\r\n forms: forms\r\n };\r\n return user;\r\n};\r\nvar capitalize = function (colName) {\r\n return colName.charAt(0).toUpperCase() + colName.slice(1).trim();\r\n};\r\nvar toREDCapDate = function (date) {\r\n var hours = date.getHours();\r\n var minutes = date.getMinutes();\r\n var strMinutes = minutes < 10 ? '0' + minutes : minutes;\r\n var strHours = hours < 10 ? '0' + hours : hours;\r\n var strTime = strHours + \":\" + strMinutes + \":00\";\r\n return date.getFullYear() + \"-\" + (date.getMonth() + 1) + \"-\" + date.getDate() + \" \" + strTime;\r\n};\r\n`;","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport { Action, Dispatch } from 'redux';\r\nimport { AppState } from '../../models/state/AppState';\r\nimport { PatientListState, CohortStateType } from '../../models/state/CohortState';\r\nimport { NetworkIdentity } from '../../models/NetworkResponder';\r\nimport { fetchDataset } from '../../services/cohortApi';\r\nimport { addDemographicsDataset, addMultirowDataset, getPatients, removeDataset } from '../../services/patientListApi';\r\nimport { DateBoundary } from '../../models/panel/Date';\r\nimport { PatientListColumn } from '../../models/patientList/Column';\r\nimport { PatientListDatasetQuery, PatientListDatasetDefinition } from '../../models/patientList/Dataset';\r\nimport { PatientListSort } from '../../models/patientList/Configuration';\r\nimport { PatientListRow, PatientListRowDTO } from '../../models/patientList/Patient';\r\nimport { allowDatasetInSearch, searchDatasets } from '../../services/datasetSearchApi';\r\nimport { showInfoModal, setNoClickModalState } from '../generalUi';\r\nimport { InformationModalState, NotificationStates } from '../../models/state/GeneralUiState';\r\nimport { setDatasetSearchResult } from '../datasets';\r\n\r\n// Cohort patient list actions\r\nexport const REQUEST_PATIENT_LIST_DATA = 'REQUEST_PATIENT_LIST_DATA';\r\nexport const RESET_PATIENT_LIST = 'RESET_PATIENT_LIST';\r\nexport const SET_PATIENT_LIST_DISPLAY = 'SET_PATIENT_LIST_DISPLAY';\r\nexport const SET_PATIENT_LIST_SORT = 'SET_PATIENT_LIST_SORT';\r\nexport const PATIENT_LIST_INTERACT_DISABLED = 'PATIENT_LIST_INTERACT_DISABLED';\r\nexport const REQUEST_CURRENT_PATIENT_LIST = 'REQUEST_CURRENT_PATIENT_LIST';\r\n\r\nexport const PATIENT_LIST_SINGLETON_RECEIVED = 'PATIENT_LIST_SINGLETON_RECEIVED';\r\nexport const PATIENT_LIST_DATASET_REQUESTED = 'PATIENT_LIST_DATASET_REQUESTED';\r\nexport const PATIENT_LIST_DATASET_RECEIVED = 'PATIENT_LIST_DATASET_RECEIVED';\r\nexport const PATIENT_LIST_NETWORK_DATASET_RECEIVED = 'PATIENT_LIST_NETWORK_DATASET_RECEIVED';\r\nexport const PATIENT_LIST_DATASET_FAILURE = 'PATIENT_LIST_DATASET_FAILURE';\r\nexport const PATIENT_LIST_DATASET_NOT_IMPLEMENTED = 'PATIENT_LIST_DATASET_NOT_IMPLEMENTED';\r\nexport const PATIENTLIST_COLUMN_TOGGLE = 'PATIENTLIST_COLUMN_TOGGLE';\r\nexport const PATIENTLIST_SET_PAGINATION = 'PATIENTLIST_SET_PAGINATION';\r\nexport const PATIENTLIST_ISOPEN_TOGGLE = 'PATIENTLIST_ISOPEN_TOGGLE';\r\nexport const PATIENTLIST_SET_AVAILABLE = 'PATIENTLIST_SET_AVAILABLE';\r\n\r\nexport interface CohortPatientListAction {\r\n id: number;\r\n column?: PatientListColumn;\r\n datasetId?: string;\r\n datasets?: PatientListDatasetQuery[];\r\n dates?: DateBoundary;\r\n patientList?: PatientListState;\r\n rowCount?: number;\r\n rowId?: number;\r\n sort?: PatientListSort;\r\n error?: string;\r\n type: string;\r\n}\r\n\r\n/*\r\n * Switch array positions between two indexes.\r\n */\r\nconst switchArrayPositions = (arr: any[], oldIdx: number, newIdx: number) => {\r\n while (oldIdx < 0) { oldIdx += arr.length; }\r\n while (newIdx < 0) { newIdx += arr.length; }\r\n if (newIdx >= arr.length) {\r\n let k = newIdx - arr.length + 1;\r\n while (k--) { arr.push(undefined); }\r\n }\r\n arr.splice(newIdx, 0, arr.splice(oldIdx, 1)[0]);\r\n return arr;\r\n};\r\n\r\n// Asynchronous\r\n/*\r\n * Request a patient list dataset from each responder which is \r\n * enabled and has loaded demographics.\r\n */\r\nexport const getPatientListDataset = (dataset: PatientListDatasetQuery, dates: DateBoundary) => {\r\n return (dispatch: Dispatch, getState: () => AppState) => {\r\n const state = getState();\r\n const responders: NetworkIdentity[] = [];\r\n let atLeastOneSucceeded = false;\r\n \r\n state.responders.forEach((nr: NetworkIdentity) => { \r\n const crt = state.cohort.networkCohorts.get(nr.id)!;\r\n if (nr.enabled && \r\n (\r\n (nr.isHomeNode && !nr.isGateway) || !nr.isHomeNode\r\n ) &&\r\n crt.count.state === CohortStateType.LOADED && \r\n crt.patientList.state === CohortStateType.LOADED\r\n ) { \r\n responders.push(nr); \r\n } \r\n });\r\n dispatch(setPatientListDatasetRequested(dataset.id));\r\n\r\n Promise.all(responders.map((nr: NetworkIdentity, i: number) => { \r\n return new Promise( async (resolve, reject) => {\r\n try {\r\n if (nr.isHomeNode || dataset.universalId) {\r\n const queryId = state.cohort.networkCohorts.get(nr.id)!.count.queryId;\r\n const ds = await fetchDataset(state, nr, queryId, dataset, dates);\r\n const newPl = await addMultirowDataset(getState, ds, dataset, nr.id);\r\n atLeastOneSucceeded = true;\r\n newPl.configuration.displayColumns.forEach((c: PatientListColumn, i: number) => c.index = i);\r\n dispatch(setPatientListNetworkDatasetReceived(nr.id, dataset.id));\r\n dispatch(setPatientListDisplay(newPl));\r\n } else {\r\n dispatch(setPatientListDatasetNotImplemented(dataset.id, nr.id))\r\n }\r\n } catch (err) {\r\n dispatch(setPatientListDatasetFailure(dataset.id, nr.id));\r\n }\r\n resolve();\r\n });\r\n }))\r\n .then( async () => {\r\n if (atLeastOneSucceeded) {\r\n const visibleDatasets = await allowDatasetInSearch(dataset.id, false, state.datasets.searchTerm);\r\n dispatch(setDatasetSearchResult(visibleDatasets));\r\n } else {\r\n const info: InformationModalState = {\r\n body: \"Leaf encountered an error when attempting to load this dataset. Please contact your Leaf administrator with this information.\",\r\n header: \"Error Loading Dataset\",\r\n show: true\r\n };\r\n dispatch(setNoClickModalState({ state: NotificationStates.Hidden }));\r\n dispatch(showInfoModal(info));\r\n }\r\n })\r\n .then(() => dispatch(setPatientListDatasetReceived(dataset.id, dates)))\r\n .catch(() => dispatch(setPatientListDatasetFailure(dataset.id, 0)));\r\n };\r\n};\r\n\r\n/*\r\n * Removes a dataset from the patient list.\r\n */\r\nexport const deleteDataset = (def: PatientListDatasetDefinition) => {\r\n return async (dispatch: Dispatch, getState: () => AppState) => {\r\n const state = getState();\r\n const newPl = Object.assign({}, state.cohort.patientList);\r\n newPl.totalRows -= def.totalRows!;\r\n newPl.configuration.displayColumns = newPl.configuration.displayColumns.filter((col: PatientListColumn) => col.datasetId !== def.id);\r\n newPl.configuration.multirowDatasets.delete(def.id);\r\n newPl.configuration.singletonDatasets.delete(def.id);\r\n newPl.display = await removeDataset(newPl.configuration, def) as PatientListRow[];\r\n const newDatasets = await allowDatasetInSearch(def.id, true, state.datasets.searchTerm);\r\n dispatch(setDatasetSearchResult(newDatasets));\r\n dispatch(setPatientListDisplay(newPl));\r\n };\r\n};\r\n\r\n/*\r\n * Adds a responder's base demographic dataset.\r\n */\r\nexport const getPatientListFromNewBaseDataset = \r\n async (\r\n responderId: number, \r\n patients: PatientListRowDTO[], \r\n dispatch: any, \r\n getState: () => AppState\r\n ) => {\r\n dispatch(setPatientListSingletonReceived(responderId, patients.length));\r\n const newPatientListState = await addDemographicsDataset(getState, patients, responderId) as PatientListState;\r\n dispatch(setPatientListDisplay(newPatientListState));\r\n};\r\n\r\n/*\r\n * Toggles columns in the patient list. If disabled, the column is removed;\r\n * if enabled, the column is appended to the end of the current patient list.\r\n */\r\nexport const toggleDatasetColumn = (column: PatientListColumn) => {\r\n return async (dispatch: Dispatch>, getState: () => AppState) => {\r\n const state = getState();\r\n const newPl = Object.assign({}, state.cohort.patientList);\r\n const col = Object.assign({}, column);\r\n const cols = newPl.configuration.displayColumns.slice();\r\n const dsCopy = Object.assign({}, newPl.configuration.singletonDatasets.get(col.datasetId));\r\n const shouldDisplay = !col.isDisplayed;\r\n let displayPatients: PatientListRow[] = state.cohort.patientList.display.slice();\r\n\r\n if (!shouldDisplay) {\r\n cols.splice(col.index!, 1);\r\n for (let i = 0; i < displayPatients.length; i++) {\r\n displayPatients[i].values.splice(col.index!, 1);\r\n }\r\n }\r\n cols.forEach((c: PatientListColumn, i: number) => c.index = i);\r\n col.isDisplayed = shouldDisplay;\r\n\r\n if (shouldDisplay) {\r\n col.index = cols.length;\r\n cols.push(col);\r\n newPl.display = await getPatients({ ...newPl.configuration, displayColumns: cols}) as PatientListRow[];\r\n }\r\n newPl.configuration.displayColumns = cols;\r\n newPl.configuration.singletonDatasets.set(col.datasetId, dsCopy);\r\n dsCopy.columns.set(col.id, col);\r\n \r\n // Update store\r\n dispatch(setPatientListDisplay(newPl));\r\n };\r\n};\r\n\r\n/*\r\n * Toggles whether a give row in the patient list (1 row = 1 patient)\r\n * is open or not. If open, any available detail rows are displayed.\r\n */\r\nexport const togglePatientRowOpen = (patientRowId: number) => {\r\n return async (dispatch: Dispatch>, getState: () => AppState) => {\r\n const newPl = getState().cohort.patientList;\r\n newPl.display[patientRowId] = Object.assign({}, newPl.display[patientRowId], { isOpen: !newPl.display[patientRowId].isOpen });\r\n\r\n // Update patient list display based on newest responder results\r\n dispatch(setPatientListDisplay(newPl));\r\n };\r\n};\r\n\r\n/*\r\n * Updates the patient list based on current configuration (this is usually\r\n * called after column sorting changes).\r\n */\r\nexport const getCurrentPatientList = (sort: PatientListSort) => {\r\n return async (dispatch: Dispatch>, getState: () => AppState) => {\r\n const newPl = getState().cohort.patientList;\r\n newPl.configuration = Object.assign({}, newPl.configuration, { pageNumber: 0, sort });\r\n\r\n // Get patients\r\n newPl.display = await getPatients(newPl.configuration) as PatientListRow[];\r\n\r\n // Update patient list display based on newest responder results\r\n dispatch(setPatientListDisplay(newPl));\r\n };\r\n};\r\n\r\n/*\r\n * Updates the patient list based on new paginated state.\r\n */\r\nexport const setPatientListPagination = (id: number) => {\r\n return async (dispatch: Dispatch>, getState: () => AppState) => {\r\n const newPl = getState().cohort.patientList;\r\n newPl.configuration = Object.assign({}, newPl.configuration, { pageNumber: id });\r\n \r\n // Get patients\r\n newPl.display = await getPatients(newPl.configuration) as PatientListRow[];\r\n\r\n // Update patient list display based on newest responder results\r\n dispatch(setPatientListDisplay(newPl));\r\n };\r\n};\r\n\r\n/*\r\n * Reorders columns in the patient list after user has dragged.\r\n */\r\nexport const reorderColumns = (source: PatientListColumn, target: PatientListColumn) => {\r\n return async (dispatch: Dispatch>, getState: () => AppState) => {\r\n\r\n const stateCopy = Object.assign({}, getState().cohort.patientList);\r\n\r\n // Find indexes for the source and target columns within the column array\r\n const columnSourceIndex = stateCopy.configuration.displayColumns.findIndex((c: PatientListColumn) => c.id === source.id);\r\n const columnTargetIndex = stateCopy.configuration.displayColumns.findIndex((c: PatientListColumn) => c.id === target.id);\r\n\r\n // Don't move if they are already next to each other\r\n if (columnSourceIndex === columnTargetIndex) { return; }\r\n\r\n // Switch column positions in config\r\n switchArrayPositions(stateCopy.configuration.displayColumns, columnSourceIndex, columnTargetIndex);\r\n stateCopy.configuration.displayColumns.forEach((c: PatientListColumn, i: number) => c.index = i);\r\n\r\n // Switch column positions in row-level data\r\n const newDisplayPatients = stateCopy.display.slice(0);\r\n for (let i = 0; i < newDisplayPatients.length; i++) {\r\n const p = newDisplayPatients[i];\r\n switchArrayPositions(p.values, columnSourceIndex, columnTargetIndex);\r\n }\r\n\r\n // Update store\r\n dispatch(setPatientListDisplay(stateCopy));\r\n }\r\n};\r\n\r\n// Synchronous\r\nexport const setPatientListSingletonReceived = (id: number, rowCount: number): CohortPatientListAction => {\r\n return {\r\n id,\r\n rowCount,\r\n type: PATIENT_LIST_SINGLETON_RECEIVED\r\n };\r\n};\r\n\r\nexport const setPatientListDatasetReceived = (datasetId: string, dates: DateBoundary): CohortPatientListAction => {\r\n return {\r\n datasetId,\r\n dates,\r\n id: 0,\r\n type: PATIENT_LIST_DATASET_RECEIVED\r\n };\r\n};\r\n\r\nexport const setPatientListNetworkDatasetReceived = (id: number, datasetId: string): CohortPatientListAction => {\r\n return {\r\n datasetId,\r\n id,\r\n type: PATIENT_LIST_NETWORK_DATASET_RECEIVED\r\n };\r\n};\r\n\r\nexport const setPatientListDatasetRequested = (datasetId: string): CohortPatientListAction => {\r\n return {\r\n datasetId,\r\n id: 0,\r\n type: PATIENT_LIST_DATASET_REQUESTED\r\n };\r\n};\r\n\r\nexport const setPatientListDatasetNotImplemented = (datasetId: string, id: number): CohortPatientListAction => {\r\n return {\r\n datasetId,\r\n id,\r\n type: PATIENT_LIST_DATASET_NOT_IMPLEMENTED\r\n };\r\n};\r\n\r\nexport const setPatientListDatasetFailure = (datasetId: string, id: number): CohortPatientListAction => {\r\n return {\r\n datasetId,\r\n id,\r\n type: PATIENT_LIST_DATASET_FAILURE\r\n };\r\n};\r\n\r\nexport const setPatientListDisplay = (patientList: PatientListState): CohortPatientListAction => {\r\n return {\r\n patientList,\r\n id: 0,\r\n type: SET_PATIENT_LIST_DISPLAY\r\n };\r\n};\r\n\r\nexport const disablePatientListInteractivity = (): CohortPatientListAction => {\r\n return {\r\n id: 0,\r\n type: PATIENT_LIST_INTERACT_DISABLED\r\n };\r\n};","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport Axios, { CancelTokenSource } from 'axios';\r\nimport { Dispatch } from 'redux';\r\nimport { AppState } from '../../models/state/AppState';\r\nimport { CohortStateType, PatientCountState } from '../../models/state/CohortState';\r\nimport { PatientCountDTO, PreflightCheckDTO } from '../../models/PatientCountDTO';\r\nimport { DemographicDTO, DemographicStatistics } from '../../models/cohort/DemographicDTO';\r\nimport { NetworkIdentity, NetworkResponderMap } from '../../models/NetworkResponder';\r\nimport { panelToDto } from '../../models/panel/Panel';\r\nimport { PanelFilter } from '../../models/panel/PanelFilter';\r\nimport { aggregateStatistics } from '../../services/cohortAggregatorApi';\r\nimport { fetchCount, fetchDemographics } from '../../services/cohortApi';\r\nimport { clearPreviousPatientList } from '../../services/patientListApi';\r\nimport { formatMultipleSql } from '../../utils/formatSql';\r\nimport { getPatientListFromNewBaseDataset } from './patientList';\r\nimport { setAggregateVisualizationData, setNetworkVisualizationData } from './visualize';\r\nimport { showInfoModal } from '../generalUi';\r\nimport { InformationModalState } from '../../models/state/GeneralUiState';\r\nimport { panelHasLocalOnlyConcepts } from '../../utils/panelUtils';\r\nimport { allowAllDatasets } from '../../services/datasetSearchApi';\r\nimport { setDatasetSearchResult, setDatasetSearchTerm } from '../datasets';\r\n\r\nexport const REGISTER_NETWORK_COHORTS = 'REGISTER_NETWORK_COHORTS';\r\nexport const COHORT_COUNT_SET = 'COHORT_COUNT_SET';\r\nexport const COHORT_COUNT_START = 'COHORT_COUNT_START';\r\nexport const COHORT_COUNT_FINISH = 'COHORT_COUNT_FINISH';\r\nexport const COHORT_COUNT_ERROR = 'COHORT_COUNT_ERROR';\r\nexport const COHORT_COUNT_CANCEL = 'COHORT_COUNT_CANCEL';\r\nexport const COHORT_COUNT_NOT_IMPLEMENTED = 'COHORT_COUNT_NOT_IMPLEMENTED';\r\nexport const COHORT_DEMOGRAPHICS_START = 'COHORT_DEMOGRAPHICS_START';\r\nexport const COHORT_DEMOGRAPHICS_FINISH = 'COHORT_DEMOGRAPHICS_FINISH';\r\nexport const COHORT_DEMOGRAPHICS_SET = 'COHORT_DEMOGRAPHICS_SET';\r\nexport const COHORT_DEMOGRAPHICS_ERROR = 'COHORT_DEMOGRAPHICS_ERROR';\r\n\r\nexport interface CohortCountAction {\r\n id: number;\r\n cancel?: CancelTokenSource;\r\n cohorts?: NetworkIdentity[];\r\n countResults?: PatientCountState;\r\n responders?: NetworkResponderMap;\r\n responder?: NetworkIdentity;\r\n success?: boolean;\r\n error?: string;\r\n type: string;\r\n}\r\n\r\n/*\r\n * Request counts of patients from all enabled nodes, in parallel.\r\n * If a result comes back after query is cancelled, it is discarded.\r\n */\r\nexport const getCounts = () => {\r\n return async (dispatch: Dispatch, getState: () => AppState) => {\r\n let atLeastOneSucceeded = false;\r\n const state = getState();\r\n const runLocalOnly = panelHasLocalOnlyConcepts(state.panels, state.panelFilters);\r\n const cancelSource = Axios.CancelToken.source();\r\n const panels = state.panels.map(p => panelToDto(p));\r\n const panelFilters = state.panelFilters.filter((pf: PanelFilter) => pf.isActive);\r\n const responders: NetworkIdentity[] = [];\r\n state.responders.forEach((nr: NetworkIdentity) => { \r\n if (nr.enabled && (nr.isHomeNode || !runLocalOnly)) { \r\n responders.push(nr); \r\n } \r\n });\r\n dispatch(setCohortCountStarted(state.responders, cancelSource));\r\n\r\n // Clear patient list\r\n await clearPreviousPatientList();\r\n\r\n // Wrap entire query action in Promise.all\r\n Promise.all(\r\n // For each enabled responder\r\n responders.map((nr: NetworkIdentity, i: number) => { \r\n return new Promise( async(resolve, reject) => {\r\n let queryId = state.cohort.networkCohorts.get(nr.id)!.count.queryId;\r\n\r\n // Request counts\r\n fetchCount(getState(), nr, panelFilters, panels, queryId, cancelSource)\r\n .then(\r\n response => {\r\n // Make sure query hasn't been cancelled\r\n if (getState().cohort.count.state !== CohortStateType.REQUESTING) { return; }\r\n\r\n // Update state count\r\n const countDataDto = response.data as PatientCountDTO;\r\n\r\n const countData: PatientCountState = {\r\n queryId: countDataDto.queryId,\r\n sqlStatements: [ formatMultipleSql(countDataDto.result.sqlStatements) ],\r\n state: CohortStateType.LOADED,\r\n value: countDataDto.result.value\r\n }\r\n queryId = countData.queryId;\r\n atLeastOneSucceeded = true;\r\n dispatch(setNetworkCohortCount(nr.id, countData));\r\n \r\n }, error => {\r\n if (getState().cohort.count.state !== CohortStateType.REQUESTING) { return; }\r\n\r\n if (error.response && error.response.status === 400) {\r\n const preflight = error.response.data.preflight as PreflightCheckDTO;\r\n dispatch(setNetworkCohortCountNotImplemented(nr.id))\r\n } else {\r\n dispatch(errorNetworkCohortCount(nr.id, error.response));\r\n }\r\n })\r\n .then(() => resolve());\r\n })\r\n }) \r\n ).then( async () => {\r\n\r\n if (getState().cohort.count.state !== CohortStateType.REQUESTING) { return; }\r\n dispatch(setCohortCountFinished(atLeastOneSucceeded));\r\n\r\n if (atLeastOneSucceeded) {\r\n const visibleDatasets = await allowAllDatasets();\r\n dispatch(setDatasetSearchResult(visibleDatasets));\r\n dispatch(setDatasetSearchTerm(''));\r\n } else {\r\n const info : InformationModalState = {\r\n header: \"Error Running Query\",\r\n body: \"Leaf encountered an error while running your query. If this continues, please contact your Leaf administrator.\",\r\n show: true\r\n }\r\n dispatch(showInfoModal(info));\r\n }\r\n });\r\n };\r\n};\r\n\r\n/*\r\n * Request demograhics of patients from all enabled nodes, in parallel.\r\n * If a result comes back after query is cancelled, it is discarded.\r\n * Results are used to populate both the Visualize and Patient List components.\r\n */\r\nconst getDemographics = () => {\r\n return async (dispatch: any, getState: () => AppState) => {\r\n const state = getState();\r\n const cancelSource = Axios.CancelToken.source();\r\n const responders: NetworkIdentity[] = [];\r\n let atLeastOneSucceeded = false;\r\n state.responders.forEach((nr: NetworkIdentity) => { \r\n if (state.cohort.networkCohorts.get(nr.id)!.count.state === CohortStateType.LOADED && !nr.isGateway) { \r\n responders.push(nr); \r\n } \r\n });\r\n dispatch(setCohortDemographicsStarted(state.responders, cancelSource));\r\n\r\n Promise.all(\r\n // For each enabled responder\r\n responders.map((nr: NetworkIdentity, i: number) => { \r\n return new Promise( async (resolve, reject) => {\r\n const queryId = state.cohort.networkCohorts.get(nr.id)!.count.queryId;\r\n\r\n // Request demogaphics\r\n fetchDemographics(getState(), nr, queryId, cancelSource)\r\n .then(\r\n async demResponse => {\r\n \r\n // Make sure query hasn't been reset\r\n if (getState().cohort.count.state !== CohortStateType.LOADED) { return; }\r\n atLeastOneSucceeded = true;\r\n const demographics = demResponse.data as DemographicDTO;\r\n\r\n dispatch(setNetworkVisualizationData(nr.id, demographics.statistics));\r\n getPatientListFromNewBaseDataset(nr.id, demographics.patients, dispatch, getState);\r\n\r\n const newState = getState();\r\n const aggregate = await aggregateStatistics(newState.cohort.networkCohorts, newState.responders) as DemographicStatistics;\r\n dispatch(setAggregateVisualizationData(aggregate));\r\n }, error => {\r\n if (getState().cohort.count.state !== CohortStateType.LOADED) { return; }\r\n dispatch(errorNetworkCohortDemographics(nr.id, error.response));\r\n })\r\n .then(() => resolve());\r\n })\r\n }) \r\n ).then(() => {\r\n if (getState().cohort.count.state !== CohortStateType.LOADED) { return; }\r\n if (atLeastOneSucceeded) {\r\n dispatch(setCohortDemographicsFinished());\r\n } else {\r\n dispatch(setCohortDemographicsErrored())\r\n }\r\n });\r\n };\r\n};\r\n\r\n// Synchronous\r\nexport const getDemographicsIfNeeded = () => {\r\n return (dispatch: Dispatch, getState: () => AppState) => {\r\n const state = getState();\r\n if (state.cohort.count.state === CohortStateType.LOADED && \r\n state.cohort.patientList.state === CohortStateType.NOT_LOADED &&\r\n (\r\n (state.cohort.networkCohorts.size === 1 && state.cohort.count.value <= state.auth.config!.cacheLimit) ||\r\n state.cohort.networkCohorts.size > 1\r\n )\r\n ) {\r\n dispatch(getDemographics());\r\n }\r\n };\r\n};\r\n\r\nexport const cancelQuery = () => {\r\n return {\r\n id: 0,\r\n type: COHORT_COUNT_CANCEL\r\n };\r\n};\r\n\r\nexport const registerNetworkCohorts = (responders: NetworkIdentity[]) : CohortCountAction => {\r\n return {\r\n cohorts: responders,\r\n id: 0,\r\n type: REGISTER_NETWORK_COHORTS\r\n };\r\n};\r\n\r\nexport const setNetworkCohortCount = (id: number, countResults: PatientCountState): CohortCountAction => {\r\n return {\r\n countResults,\r\n id,\r\n type: COHORT_COUNT_SET\r\n };\r\n};\r\n\r\nexport const setCohortCountStarted = (responders: NetworkResponderMap, cancel: CancelTokenSource): CohortCountAction => {\r\n return {\r\n cancel,\r\n id: 0,\r\n responders,\r\n type: COHORT_COUNT_START\r\n };\r\n};\r\n\r\nexport const setCohortCountFinished = (success: boolean): CohortCountAction => {\r\n return {\r\n id: 0,\r\n success,\r\n type: COHORT_COUNT_FINISH\r\n };\r\n} \r\n\r\nexport const errorNetworkCohortCount = (id: number, error: string): CohortCountAction => {\r\n return {\r\n error,\r\n id,\r\n type: COHORT_COUNT_ERROR\r\n };\r\n};\r\n\r\nexport const setNetworkCohortCountNotImplemented = (id: number): CohortCountAction => {\r\n return {\r\n id,\r\n type: COHORT_COUNT_NOT_IMPLEMENTED\r\n };\r\n};\r\n\r\nexport const setNetworkCohortDemographics = (id: number, countResults: PatientCountState): CohortCountAction => {\r\n return {\r\n countResults,\r\n id,\r\n type: COHORT_DEMOGRAPHICS_SET\r\n };\r\n};\r\n\r\nexport const setCohortDemographicsStarted = (responders: NetworkResponderMap, cancel: CancelTokenSource): CohortCountAction => {\r\n return {\r\n cancel,\r\n id: 0,\r\n responders,\r\n type: COHORT_DEMOGRAPHICS_START\r\n };\r\n};\r\n\r\nexport const setCohortDemographicsFinished = (): CohortCountAction => {\r\n return {\r\n id: 0,\r\n type: COHORT_DEMOGRAPHICS_FINISH\r\n };\r\n};\r\n\r\nexport const setCohortDemographicsErrored = (): CohortCountAction => {\r\n return {\r\n id: 0,\r\n type: COHORT_DEMOGRAPHICS_ERROR\r\n };\r\n};\r\n\r\nexport const errorNetworkCohortDemographics = (id: number, error: string): CohortCountAction => {\r\n return {\r\n error,\r\n id,\r\n type: COHORT_DEMOGRAPHICS_ERROR\r\n };\r\n};","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport { Routes, InformationModalState, ConfirmationModalState, NoClickModalState, SideNotificationState } from '../models/state/GeneralUiState';\r\nimport { Browser } from '../models/state/GeneralUiState';\r\nimport { RouteConfig } from '../config/routes';\r\nimport { Dispatch } from 'redux';\r\nimport { AppState } from '../models/state/AppState';\r\nimport { loadAdminPanelDataIfNeeded } from './admin/admin';\r\nimport { getDemographicsIfNeeded } from './cohort/count';\r\nimport { CohortStateType } from '../models/state/CohortState';\r\n\r\nexport const SET_COHORT_COUNT_BOX_STATE = 'SET_COHORT_COUNT_BOX_STATE';\r\nexport const SET_ROUTE = 'SET_ROUTE';\r\nexport const SET_ROUTE_CONFIG = 'SET_ROUTE_CONFIG';\r\nexport const SET_BROWSER = 'SET_BROWSER';\r\nexport const TOGGLE_SAVE_QUERY_PANE = 'TOGGLE_SAVE_QUERY_PANE';\r\nexport const TOGGLE_MY_LEAF_MODAL = 'TOGGLE_MY_LEAF_MODAL';\r\nexport const MY_LEAF_MODAL_HIDE = 'MY_LEAF_MODAL_HIDE';\r\nexport const MY_LEAF_MODAL_SHOW = 'MY_LEAF_MODAL_SHOW';\r\nexport const TOGGLE_EXPORT_DATA_MODAL = 'TOGGLE_EXPORT_DATA_MODAL';\r\nexport const INFO_MODAL_SHOW = 'INFO_MODAL_SHOW';\r\nexport const INFO_MODAL_HIDE = 'INFO_MODAL_HIDE';\r\nexport const CONFIRM_MODAL_SHOW = 'CONFIRM_MODAL_SHOW';\r\nexport const CONFIRM_MODAL_HIDE = 'CONFIRM_MODAL_HIDE';\r\nexport const NOCLICK_MODAL_SET_STATE = 'NOCLICK_MODAL_SET_STATE';\r\nexport const SIDE_NOTIFICATION_SET_STATE = 'SIDE_NOTIFICATION_SET_STATE';\r\n\r\nexport interface GeneralUiAction {\r\n browser?: Browser;\r\n cohortCountBoxVisible?: boolean;\r\n cohortCountBoxMinimized?: boolean;\r\n cohortInfoButtonVisible?: boolean;\r\n confirmModal?: ConfirmationModalState;\r\n infoModal?: InformationModalState;\r\n noclickModal?: NoClickModalState;\r\n searchTerm?: string;\r\n route?: Routes;\r\n routeConfig?: RouteConfig[];\r\n selectable?: boolean;\r\n sideNotification?: SideNotificationState;\r\n type: string;\r\n}\r\n\r\n// Asynchronous\r\nexport const handleSidebarTabClick = (route: Routes) => {\r\n return async (dispatch: Dispatch, getState: () => AppState) => {\r\n const state = getState();\r\n const admin = state.admin;\r\n const currentRoute = state.generalUi.currentRoute;\r\n const cohortCountState = state.cohort.count.state;\r\n\r\n if (route === currentRoute) {\r\n return;\r\n } \r\n else if (currentRoute === Routes.AdminPanel && admin && (\r\n admin.concepts.changed ||\r\n admin.sqlSets.changed || \r\n admin.datasets.changed || \r\n admin.networkAndIdentity.changed)\r\n ) {\r\n const info: InformationModalState = {\r\n body: \"Please save or undo your current changes first.\",\r\n header: \"Save or Undo Changes\",\r\n show: true\r\n };\r\n dispatch(showInfoModal(info));\r\n } else if (route === Routes.FindPatients) {\r\n dispatch(setRoute(route));\r\n } else if (route === Routes.AdminPanel) {\r\n dispatch(setRoute(route));\r\n dispatch(loadAdminPanelDataIfNeeded());\r\n } else if (cohortCountState === CohortStateType.LOADED) {\r\n if (route === Routes.PatientList || route === Routes.Visualize) {\r\n dispatch(getDemographicsIfNeeded());\r\n }\r\n dispatch(setRoute(route));\r\n }\r\n }\r\n}\r\n\r\n// Synchronous\r\nexport const setNoClickModalState = (noclickModal: NoClickModalState): GeneralUiAction => {\r\n return {\r\n noclickModal,\r\n type: NOCLICK_MODAL_SET_STATE\r\n }\r\n};\r\n\r\nexport const setSideNotificationState = (sideNotification: SideNotificationState): GeneralUiAction => {\r\n return {\r\n sideNotification,\r\n type: SIDE_NOTIFICATION_SET_STATE\r\n };\r\n};\r\n\r\nexport const setCohortCountBoxState = (cohortCountBoxVisible: boolean, cohortCountBoxMinimized: boolean, cohortInfoButtonVisible: boolean): GeneralUiAction => {\r\n return {\r\n cohortCountBoxMinimized,\r\n cohortCountBoxVisible,\r\n cohortInfoButtonVisible,\r\n type: SET_COHORT_COUNT_BOX_STATE\r\n };\r\n};\r\n\r\nexport const showInfoModal = (infoModal: InformationModalState) => {\r\n return {\r\n infoModal,\r\n type: INFO_MODAL_SHOW\r\n }\r\n};\r\n\r\nexport const hideInfoModal = () => {\r\n return {\r\n type: INFO_MODAL_HIDE\r\n }\r\n};\r\n\r\nexport const showConfirmationModal = (confirmModal: ConfirmationModalState) => {\r\n return {\r\n confirmModal,\r\n type: CONFIRM_MODAL_SHOW\r\n }\r\n};\r\n\r\nexport const hideConfirmModal = () => {\r\n return {\r\n type: CONFIRM_MODAL_HIDE\r\n }\r\n};\r\n\r\nexport const setRoute = (route: Routes): GeneralUiAction => {\r\n return {\r\n route,\r\n type: SET_ROUTE\r\n };\r\n};\r\n\r\nexport const setRouteConfig = (routeConfig: RouteConfig[]): GeneralUiAction => {\r\n return {\r\n routeConfig,\r\n type: SET_ROUTE_CONFIG\r\n };\r\n}\r\n\r\nexport const toggleSaveQueryPane = (): GeneralUiAction => {\r\n return {\r\n type: TOGGLE_SAVE_QUERY_PANE\r\n };\r\n};\r\n\r\nexport const toggleMyLeafModal = (): GeneralUiAction => {\r\n return {\r\n type: TOGGLE_MY_LEAF_MODAL\r\n };\r\n};\r\n\r\nexport const hideMyLeafModal = (): GeneralUiAction => {\r\n return {\r\n type: MY_LEAF_MODAL_HIDE\r\n };\r\n};\r\n\r\nexport const showMyLeafModal = (): GeneralUiAction => {\r\n return {\r\n type: MY_LEAF_MODAL_SHOW\r\n };\r\n};\r\n\r\nexport const toggleExportDataModal = (): GeneralUiAction => {\r\n return {\r\n type: TOGGLE_EXPORT_DATA_MODAL\r\n };\r\n};\r\n\r\nexport const setBrowser = (browser: Browser): GeneralUiAction => {\r\n return {\r\n browser,\r\n type: SET_BROWSER\r\n }\r\n};","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport { PanelFilter } from '../models/panel/PanelFilter';\r\n\r\nexport const TOGGLE_PANEL_FILTER = 'TOGGLE_PANEL_FILTER';\r\nexport const SET_PANEL_FILTER_ACTIVE_STATES = 'SET_PANEL_FILTER_ACTIVE_STATES';\r\nexport const SET_PANEL_FILTERS = 'SET_PANEL_FILTERS';\r\n\r\nexport interface PanelFilterAction {\r\n isActive?: boolean;\r\n filter?: PanelFilter;\r\n filters?: PanelFilter[];\r\n error?: string;\r\n type: string;\r\n}\r\n\r\nexport const togglePanelFilter = (filter: PanelFilter, isActive: boolean): PanelFilterAction => {\r\n return {\r\n filter,\r\n isActive,\r\n type: TOGGLE_PANEL_FILTER\r\n };\r\n};\r\n\r\nexport const setPanelFilters = (filters: PanelFilter[]): PanelFilterAction => {\r\n return {\r\n filters,\r\n type: SET_PANEL_FILTERS\r\n };\r\n};\r\n\r\nexport const setPanelFilterActiveStates = (filters: PanelFilter[]): PanelFilterAction => {\r\n return {\r\n filters,\r\n type: SET_PANEL_FILTER_ACTIVE_STATES\r\n }\r\n};","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport { AppState } from '../models/state/AppState';\r\nimport { Concept } from '../models/concept/Concept';\r\nimport { HttpFactory } from './HttpFactory';\r\n\r\n/*\r\n * Private general function for making any concept request.\r\n */\r\nconst makeRequest = async (state: AppState, requestString: string, requestParams?: object) => {\r\n const { token } = state.session.context!;\r\n const http = HttpFactory.authenticated(token);\r\n const request = requestParams\r\n ? http.get(requestString, requestParams)\r\n : http.get(requestString)\r\n return request;\r\n};\r\n\r\n/*\r\n * Fetch root concepts. Called at app login.\r\n */\r\nexport const fetchRootConcepts = (state: AppState) => {\r\n return makeRequest(state, 'api/concept');\r\n};\r\n\r\n/*\r\n * Fetch concept. Called on saved query open.\r\n */\r\nexport const fetchConcept = async (state: AppState, id: string) => {\r\n const con = await makeRequest(state, `api/concept/${id}`);\r\n return con.data as Concept;\r\n};\r\n\r\n/*\r\n * Fetch children concepts of a given concept. Called at drilldown.\r\n */\r\nexport const fetchConceptChildren = (concept: Concept, state: AppState) => {\r\n return makeRequest(state, `api/concept/${concept.id}/children`);\r\n};\r\n\r\n/*\r\n * Given a search term, fetch a concept tree \r\n * based on descendent concept matches of the term.\r\n */\r\nexport const fetchConceptAncestorsBySearchTerm = (term: string, state: AppState) => {\r\n const terms = term.split(' ').map((t: string) => encodeURIComponent(t));\r\n const rootId = state.conceptSearch.rootId;\r\n return makeRequest(state, 'api/concept/search/parents', {\r\n params: {\r\n rootId: rootId === '' ? null : rootId,\r\n searchTerm: terms\r\n },\r\n paramsSerializer: (params: any) => {\r\n const pms = [ `searchTerm=${params.searchTerm.join('+')}` ];\r\n if (rootId) {\r\n pms.push(`rootId=${params.rootId}`);\r\n }\r\n return pms.join('&');\r\n }\r\n });\r\n};\r\n\r\n/*\r\n * Given an array of concept ids (from hints), \r\n * request a concept tree.\r\n */\r\nexport const fetchConceptAncestorsByConceptIds = (conceptIds: string[], state: AppState) => {\r\n const threshold = 20;\r\n return makeRequest(state, 'api/concept/parents', {\r\n params: {\r\n idents: conceptIds.length > threshold\r\n ? conceptIds.slice(0, threshold)\r\n : conceptIds\r\n },\r\n paramsSerializer: (params: any) => {\r\n return params.idents.map((i: string) => `idents=${i}`).join('&');\r\n }\r\n });\r\n};","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport { AppState } from '../../models/state/AppState';\r\nimport { HttpFactory } from './../HttpFactory';\r\nimport { Concept } from '../../models/admin/Concept';\r\n\r\n/*\r\n * Gets a full Concept (including SQL).\r\n */ \r\nexport const getAdminConcept = async (state: AppState, conceptId: string) => {\r\n const { token } = state.session.context!;\r\n const http = HttpFactory.authenticated(token);\r\n const resp = await http.get(`api/admin/concept/${conceptId}`);\r\n return resp.data as Concept;\r\n};\r\n\r\n/*\r\n * Updates an existing Concept.\r\n */ \r\nexport const updateAdminConcept = async (state: AppState, concept: Concept) => {\r\n const { token } = state.session.context!;\r\n const http = HttpFactory.authenticated(token);\r\n const resp = await http.put(`api/admin/concept/${concept.id}`, { \r\n ...concept, \r\n isRoot: !concept.parentId,\r\n rootId: concept.rootId\r\n });\r\n return resp.data as Concept;\r\n};\r\n\r\n/*\r\n * Creates a new Concept.\r\n */ \r\nexport const createAdminConcept = async (state: AppState, concept: Concept) => {\r\n const { token } = state.session.context!;\r\n const http = HttpFactory.authenticated(token);\r\n const resp = await http.post(`api/admin/concept`, { \r\n ...concept, \r\n id: null,\r\n isRoot: !concept.parentId,\r\n rootId: (concept.id === concept.rootId ? null : concept.rootId),\r\n constraints: concept.constraints.map((c) => ({ ...c, conceptId: null }))\r\n });\r\n return resp.data as Concept;\r\n};\r\n\r\n/*\r\n * Deletes an existing Concept SQLSet.\r\n */ \r\nexport const deleteAdminConcept = async (state: AppState, conceptId: string) => {\r\n const { token } = state.session.context!;\r\n const http = HttpFactory.authenticated(token);\r\n return http.delete(`api/admin/concept/${conceptId}`);\r\n};\r\n","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport { Concept, ConceptDeleteResponse } from '../../models/admin/Concept';\r\nimport { Concept as UserConcept } from '../../models/concept/Concept';\r\nimport { Concept as AdminConcept } from '../../models/admin/Concept';\r\nimport { AppState } from '../../models/state/AppState';\r\nimport { InformationModalState, NotificationStates, ConfirmationModalState } from '../../models/state/GeneralUiState';\r\nimport { getAdminConcept, updateAdminConcept, createAdminConcept, deleteAdminConcept } from '../../services/admin/conceptApi';\r\nimport { isEmbeddedQuery } from '../../utils/panelUtils';\r\nimport { AdminPanelLoadState } from '../../models/state/AdminState';\r\nimport { showInfoModal, setNoClickModalState, showConfirmationModal, setSideNotificationState } from '../generalUi';\r\nimport { generateSampleSql, getRootId } from '../../utils/admin/concept';\r\nimport { setConcept, removeConcept, reparentConcept, switchConcepts } from '../concepts';\r\nimport { fetchConcept } from '../../services/conceptApi'\r\n\r\nexport const SET_ADMIN_CONCEPT = 'SET_ADMIN_CONCEPT';\r\nexport const SET_ADMIN_CONCEPT_EXAMPLE_SQL = 'SET_ADMIN_CONCEPT_EXAMPLE_SQL';\r\nexport const SET_ADMIN_PANEL_CONCEPT_LOAD_STATE = 'SET_ADMIN_PANEL_CONCEPT_LOAD_STATE';\r\nexport const SET_ADMIN_PANEL_CURRENT_USER_CONCEPT = 'SET_ADMIN_PANEL_CURRENT_USER_CONCEPT';\r\nexport const RESET_ADMIN_CONCEPT_CACHE = 'RESET_ADMIN_CONCEPT_CACHE';\r\nexport const CREATE_ADMIN_CONCEPT = 'CREATE_ADMIN_CONCEPT';\r\nexport const REMOVE_UNSAVED_ADMIN_CONCEPT = 'REMOVE_UNSAVED_ADMIN_CONCEPT';\r\n\r\nexport interface AdminConceptAction {\r\n adminConcept?: AdminConcept;\r\n changed?: boolean;\r\n sql?: string;\r\n state?: AdminPanelLoadState;\r\n userConcept?: UserConcept;\r\n type: string;\r\n}\r\n\r\ninterface AdminParentSavePayload {\r\n adminParentConcept: Concept;\r\n userParentConcept: UserConcept;\r\n}\r\n\r\n// Asynchronous\r\nexport const revertAdminAndUserConceptChanges = (adminConcept: AdminConcept, userConcept: UserConcept) => {\r\n return async (dispatch: any, getState: () => AppState) => {\r\n try {\r\n dispatch(setNoClickModalState({ message: \"Undoing\", state: NotificationStates.Working }));\r\n const state = getState();\r\n const serverAdminConcept = await getAdminConcept(state, adminConcept.id);\r\n const serverUserConcept = await fetchConcept(state, adminConcept.id);\r\n dispatch(setConcept(serverUserConcept));\r\n dispatch(setAdminConcept(serverAdminConcept, false));\r\n dispatch(setAdminPanelCurrentUserConcept(serverUserConcept));\r\n } catch (err) {\r\n console.log(err);\r\n }\r\n dispatch(setNoClickModalState({ state: NotificationStates.Hidden }));\r\n };\r\n};\r\n\r\n/*\r\n * Handle an admin dropping a Concept within a new Concept.\r\n */\r\nexport const handleReparentDrop = (userConcept: UserConcept, parentId: string) => {\r\n return async (dispatch: any, getState: () => AppState) => {\r\n const state = getState();\r\n\r\n /*\r\n * Short-circuit if for some reason a non-admin was able to do this or\r\n * it's the current parent.\r\n */\r\n if (!state.admin || parentId === userConcept.parentId) { return; }\r\n\r\n /*\r\n * If a newly-created Concept not saved in server, allow direct reparenting.\r\n */\r\n if (userConcept.unsaved) {\r\n dispatch(reparentConcept(userConcept, parentId));\r\n const currentTree = getState().concepts.currentTree;\r\n const reparented = currentTree.get(userConcept.id)!;\r\n const adminConcept = Object.assign({}, state.admin!.concepts.concepts.get(userConcept.id), { parentId, rootId: reparented.rootId });\r\n dispatch(setAdminConcept(adminConcept, true));\r\n dispatch(setAdminPanelCurrentUserConcept(reparented!));\r\n\r\n } else {\r\n\r\n /*\r\n * Load the Admin Concept if not already cached.\r\n */\r\n const newParent = state.concepts.currentTree.get(parentId)!;\r\n const newRootId = getRootId(newParent, getState().concepts.currentTree);\r\n let adminConcept = Object.assign({}, state.admin!.concepts.currentAdminConcept, { parentId, rootId: newRootId });\r\n if (!state.admin!.concepts.currentAdminConcept) {\r\n dispatch(setNoClickModalState({ message: \"Loading\", state: NotificationStates.Working }));\r\n const serverAdminConcept = await getAdminConcept(state, userConcept.id);\r\n adminConcept = Object.assign({}, serverAdminConcept, { parentId, rootId: newRootId });\r\n dispatch(setNoClickModalState({ state: NotificationStates.Hidden }));\r\n }\r\n\r\n /*\r\n * Confirm that the move was intentional, and save to server if 'yes'.\r\n */\r\n const confirm: ConfirmationModalState = {\r\n body: `Are you sure you want to move \"${adminConcept.uiDisplayName}\" under \"${newParent.uiDisplayName}\"? `+\r\n `This will take effect immediately and be visible to users`,\r\n header: 'Re-parent Concept',\r\n onClickNo: () => null,\r\n onClickYes: () => {\r\n dispatch(saveAdminConcept(adminConcept, userConcept));\r\n dispatch(resetAdminConceptCache());\r\n },\r\n show: true,\r\n noButtonText: `No`,\r\n yesButtonText: `Yes, move the Concept`\r\n };\r\n dispatch(showConfirmationModal(confirm));\r\n }\r\n };\r\n};\r\n\r\n\r\n/*\r\n * Fetch full concept if user is admin and it hasn't\r\n * already been loaded.\r\n */\r\nexport const fetchAdminConceptIfNeeded = (userConcept: UserConcept) => {\r\n return async (dispatch: any, getState: () => AppState) => {\r\n const state = getState();\r\n try {\r\n\r\n /*\r\n * Don't request from server if this is a newly-created Concept.\r\n */\r\n if (userConcept.unsaved) { return; }\r\n\r\n const adm = state.admin!.concepts;\r\n const embedded = isEmbeddedQuery(userConcept.universalId);\r\n dispatch(setAdminPanelCurrentUserConcept(userConcept));\r\n\r\n /*\r\n * If an embedded query, don't fetch.\r\n */\r\n if (embedded) {\r\n dispatch(setAdminPanelConceptLoadState(AdminPanelLoadState.NOT_APPLICABLE));\r\n } \r\n else {\r\n /*\r\n * Try to load from local cache.\r\n */ \r\n let admConcept = adm.concepts.get(userConcept.id);\r\n\r\n /*\r\n * If not previously loaded, fetch from server.\r\n */ \r\n if (!admConcept) {\r\n dispatch(setAdminPanelConceptLoadState(AdminPanelLoadState.LOADING));\r\n admConcept = await getAdminConcept(state, userConcept.id);\r\n } \r\n \r\n const sqlConfig = state.admin!.configuration.sql;\r\n const sqlSet = state.admin!.sqlSets.sets.get(admConcept!.sqlSetId!)!;\r\n const sql = generateSampleSql(admConcept!, sqlSet, sqlConfig);\r\n dispatch(setAdminConcept(admConcept!, false));\r\n dispatch(setAdminConceptExampleSql(sql));\r\n }\r\n } catch (err) {\r\n const info : InformationModalState = {\r\n header: \"Error Loading Concept\",\r\n body: \"Leaf encountered an error while attempting to fetch a Concept. Check the Leaf log file for details.\",\r\n show: true\r\n }\r\n dispatch(showInfoModal(info));\r\n dispatch(setAdminPanelConceptLoadState(AdminPanelLoadState.ERROR));\r\n }\r\n };\r\n};\r\n\r\n/*\r\n * Save a new concept.\r\n */\r\nexport const saveAdminConcept = (adminConcept: Concept, userConcept: UserConcept) => {\r\n return async (dispatch: any, getState: () => AppState) => {\r\n const state = getState();\r\n\r\n try {\r\n dispatch(setNoClickModalState({ message: \"Saving\", state: NotificationStates.Working }));\r\n const newAdminConcept = adminConcept.unsaved\r\n ? await createAdminConcept(state, adminConcept)\r\n : await updateAdminConcept(state, adminConcept);\r\n const newUserConcept = await fetchConcept(state, newAdminConcept.id);\r\n\r\n /*\r\n * Update changed Concept.\r\n */\r\n dispatch(switchConcepts(userConcept, newUserConcept));\r\n dispatch(setAdminPanelCurrentUserConcept(newUserConcept));\r\n\r\n /*\r\n * Update parent Concept if needed.\r\n */\r\n const parent = await shouldUpdateAdminParentConcept(newUserConcept, getState());\r\n if (parent) {\r\n dispatch(setConcept(parent.userParentConcept));\r\n dispatch(setAdminConcept(parent.adminParentConcept, false));\r\n await updateAdminConcept(state, parent.adminParentConcept);\r\n }\r\n dispatch(setAdminConcept(newAdminConcept, false));\r\n dispatch(setSideNotificationState({ state: NotificationStates.Complete, message: 'Concept Saved' }));\r\n } catch (err) {\r\n console.log(err);\r\n \r\n const info: InformationModalState = {\r\n body: \"An error occurred while attempting to save the Concept. Please see the Leaf error logs for details.\",\r\n header: \"Error Saving Concept\",\r\n show: true\r\n };\r\n dispatch(showInfoModal(info));\r\n } finally {\r\n dispatch(setNoClickModalState({ state: NotificationStates.Hidden }));\r\n }\r\n }\r\n};\r\n\r\n/*\r\n * After saving an Admin Concept, if the parent has just had a child parented to it\r\n * and it was not previously a parent, [IsParent] in the DB may not be set. If so, set\r\n * it here behind the scenes just to be safe (else when users log in the newly-saved Concept may be hidden).\r\n */\r\nexport const shouldUpdateAdminParentConcept = async (userConcept: UserConcept, state: AppState): Promise => {\r\n if (userConcept.parentId) {\r\n const userParentConcept = state.concepts.currentTree.get(userConcept.parentId);\r\n if (userParentConcept && userParentConcept.childrenIds) {\r\n const adminParent = await getAdminConcept(state, userConcept.parentId);\r\n const copyAdminParent = Object.assign({}, adminParent, { isParent: true });\r\n const copyUserParent = Object.assign({}, userParentConcept, { isParent: true });\r\n return { \r\n adminParentConcept: copyAdminParent,\r\n userParentConcept: copyUserParent\r\n }\r\n }\r\n }\r\n return;\r\n};\r\n\r\n/*\r\n * Delete a existing concept.\r\n */\r\nexport const deleteAdminConceptFromServer = (concept: Concept, userConcept: UserConcept) => {\r\n return async (dispatch: any, getState: () => AppState) => {\r\n const state = getState();\r\n dispatch(setNoClickModalState({ message: \"Deleting\", state: NotificationStates.Working }));\r\n deleteAdminConcept(state, concept.id)\r\n .then(\r\n response => {\r\n dispatch(removeConcept(userConcept));\r\n dispatch(setNoClickModalState({ state: NotificationStates.Hidden }));\r\n dispatch(setSideNotificationState({ state: NotificationStates.Complete, message: 'Concept Deleted' }));\r\n }, error => {\r\n const info: InformationModalState = {\r\n body: \"\",\r\n header: \"Error Deleting Concept\",\r\n show: true\r\n };\r\n if (error.response.status === 409) {\r\n const conflicts = error.response.data as ConceptDeleteResponse;\r\n info.body = \r\n `There are ${conflicts.conceptCount} descendent Concept(s), ${conflicts.panelFilterCount} filter(s), ` + \r\n `and ${conflicts.queryCount} saved user querie(s) which depend on this. Please delete these first.`;\r\n } else {\r\n info.body = \"An error occurred while attempting to delete the Concept. Please see the Leaf error logs for details.\";\r\n }\r\n dispatch(setNoClickModalState({ state: NotificationStates.Hidden }));\r\n dispatch(showInfoModal(info));\r\n }\r\n );\r\n \r\n }\r\n};\r\n\r\n// Synchonous\r\nexport const setAdminConcept = (adminConcept: AdminConcept, changed: boolean): AdminConceptAction => {\r\n return {\r\n adminConcept,\r\n changed,\r\n type: SET_ADMIN_CONCEPT\r\n };\r\n};\r\n\r\nexport const setAdminPanelCurrentUserConcept = (userConcept: UserConcept): AdminConceptAction => {\r\n return {\r\n userConcept,\r\n type: SET_ADMIN_PANEL_CURRENT_USER_CONCEPT\r\n };\r\n};\r\n\r\nexport const setAdminPanelConceptLoadState = (state: AdminPanelLoadState): AdminConceptAction => {\r\n return {\r\n state,\r\n type: SET_ADMIN_PANEL_CONCEPT_LOAD_STATE\r\n };\r\n};\r\n\r\nexport const setAdminConceptExampleSql = (sql: string): AdminConceptAction => {\r\n return {\r\n sql,\r\n type: SET_ADMIN_CONCEPT_EXAMPLE_SQL\r\n };\r\n};\r\n\r\nexport const createNewAdminConcept = (adminConcept: AdminConcept): AdminConceptAction => {\r\n return {\r\n adminConcept,\r\n type: CREATE_ADMIN_CONCEPT\r\n };\r\n};\r\n\r\nexport const removeUnsavedAdminConcept = (): AdminConceptAction => {\r\n return {\r\n type: REMOVE_UNSAVED_ADMIN_CONCEPT\r\n };\r\n};\r\n\r\nexport const resetAdminConceptCache = (): AdminConceptAction => {\r\n return {\r\n type: RESET_ADMIN_CONCEPT_CACHE\r\n };\r\n};","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport { Dispatch } from 'redux';\r\nimport { setPanelFilters } from '../actions/panelFilter';\r\nimport { AppState, ConceptMap } from '../models/state/AppState';\r\nimport { Concept } from '../models/concept/Concept';\r\nimport { AggregateConceptHintRef } from '../models/concept/ConceptHint';\r\nimport { PanelFilter } from '../models/panel/PanelFilter';\r\nimport { fetchConceptAncestorsByConceptIds, fetchConceptAncestorsBySearchTerm, fetchConceptChildren, fetchRootConcepts, fetchConcept } from '../services/conceptApi';\r\nimport { fetchAdminConceptIfNeeded } from './admin/concept';\r\nimport { Routes, InformationModalState } from '../models/state/GeneralUiState';\r\nimport { showInfoModal } from './generalUi';\r\n\r\nexport const SET_CONCEPT = 'SET_CONCEPT';\r\nexport const SET_CONCEPTS = 'SET_CONCEPTS';\r\nexport const SET_ROOT_CONCEPTS = 'SET_ROOT_CONCEPTS';\r\nexport const SET_EXTENSION_CONCEPT = 'SET_EXTENSION_CONCEPT';\r\nexport const SET_EXTENSION_CONCEPTS = 'SET_EXTENSION_CONCEPTS';\r\nexport const SET_SEARCH_TREE = 'SET_SEARCH_TREE';\r\nexport const SET_SELECTED_CONCEPT = 'SET_SELECTED_CONCEPT';\r\nexport const CREATE_CONCEPT = 'CREATE_CONCEPT';\r\nexport const REPARENT_CONCEPT = 'REPARENT_CONCEPT';\r\nexport const SWITCH_CONCEPTS = 'SWITCH_CONCEPTS';\r\nexport const REMOVE_CONCEPT = 'REMOVE_CONCEPT';\r\nexport const MERGE_EXTENSION_CONCEPTS = 'MERGE_EXTENSION_CONCEPTS';\r\nexport const REMOVE_EXTENSION_CONCEPT = 'REMOVE_EXTENSION_CONCEPT';\r\nexport const ERROR_CONCEPTS = 'ERROR_CONCEPTS';\r\nexport const TOGGLE_CONCEPT_OPEN = 'TOGGLE_CONCEPT_OPEN';\r\nexport const REQUEST_CONCEPT_CHILDREN = 'REQUEST_CONCEPT_CHILDREN';\r\nexport const REQUEST_SEARCH_TREE = 'REQUEST_SEARCH_TREE';\r\nexport const RECEIVE_CONCEPT_CHILDREN = 'RECEIVE_CONCEPT_CHILDREN';\r\nexport const SHOW_SEARCH_TREE = 'SHOW_SEARCH_TREE';\r\nexport const SHOW_DRILL_TREE = 'SHOW_DRILL_TREE';\r\n\r\nexport interface ConceptsAction {\r\n conceptMap?: ConceptMap;\r\n children?: Concept[];\r\n concept?: Concept;\r\n concepts?: Concept[];\r\n parentId?: string;\r\n error?: string;\r\n roots?: string[];\r\n tree?: number[];\r\n type: string;\r\n}\r\n\r\n/*\r\n * Determine if children should be remotely fetched.\r\n */\r\nconst shouldfetchConceptChildren = (concept: Concept): boolean => {\r\n return concept.isParent && !concept.childrenLoaded && !concept.isFetching;\r\n};\r\n\r\n// Async actions\r\n/*\r\n * Request root concepts and panel filters. Called \r\n * only at startup.\r\n */\r\nexport const requestRootConcepts = () => {\r\n return async (dispatch: any, getState: () => AppState) => {\r\n const state = getState();\r\n const response = await fetchRootConcepts(state);\r\n const concepts = response.data.concepts as Concept[];\r\n const panelFilters = response.data.panelFilters as PanelFilter[];\r\n dispatch(addRootConcepts(concepts));\r\n dispatch(setPanelFilters(panelFilters));\r\n };\r\n};\r\n\r\n/*\r\n * Fetch concept children, whether remotely or by\r\n * loading already cached concepts.\r\n */\r\nexport const fetchConceptChildrenIfNeeded = (concept: Concept) => {\r\n return (dispatch: any) => {\r\n if (shouldfetchConceptChildren(concept)) {\r\n dispatch(getConceptChildren(concept));\r\n }\r\n else if (concept.childrenLoaded) {\r\n dispatch(toggleConceptOpen(concept));\r\n }\r\n };\r\n};\r\n\r\n/*\r\n * Fetch concept children remotely.\r\n */\r\nexport const getConceptChildren = (concept: Concept) => {\r\n return async (dispatch: Dispatch, getState: () => AppState) => {\r\n dispatch(requestConceptChildren(concept));\r\n const response = await fetchConceptChildren(concept, getState());\r\n dispatch(receiveConceptChildren(concept, response.data));\r\n };\r\n};\r\n\r\n/*\r\n * Fetch new search concept tree based on a user-selected hint.\r\n */\r\nexport const fetchSearchTreeFromConceptHint = (hint: AggregateConceptHintRef) => {\r\n return async (dispatch: Dispatch, getState: () => AppState) => {\r\n try {\r\n dispatch(setSearchTreeRequested());\r\n const response = await fetchConceptAncestorsByConceptIds(hint.ids, getState());\r\n dispatch(setSearchTree(response.data.concepts));\r\n } catch (err) {\r\n console.log(err);\r\n dispatch(setSearchTree([]));\r\n }\r\n };\r\n};\r\n\r\n/*\r\n * Fetch new search concept tree based on a search term. Called\r\n * when user hits 'enter' and no exactly-matching hint is found.\r\n */\r\nexport const fetchSearchTreeFromTerms = (term: string) => {\r\n return async (dispatch: Dispatch, getState: () => AppState) => {\r\n try {\r\n dispatch(setSearchTreeRequested());\r\n const response = await fetchConceptAncestorsBySearchTerm(term, getState());\r\n dispatch(setSearchTree(response.data));\r\n } catch (err) {\r\n console.log(err);\r\n dispatch(setSearchTree([]));\r\n }\r\n };\r\n};\r\n\r\n/*\r\n * Fetch a single concept.\r\n */\r\nexport const fetchSingleConcept = (id: string) => {\r\n return async (dispatch: Dispatch, getState: () => AppState) => {\r\n try {\r\n const response = await fetchConcept(getState(), id);\r\n dispatch(setConcept(response));\r\n } catch (err) {\r\n console.log(err);\r\n }\r\n };\r\n};\r\n\r\n/*\r\n * Handle concept clicks (text, not arrow). This causes highlighting,\r\n * and also fetches full concepts if they are an admin viewing through\r\n * the Admin Panel.\r\n */\r\nexport const handleConceptClick = (concept: Concept) => {\r\n return async (dispatch: any, getState: () => AppState) => {\r\n const state = getState();\r\n\r\n /*\r\n * If user is not an admin and current route is not the Admin Panel,\r\n * set the current Concept to 'selected' and peace out.\r\n */\r\n if (!state.auth.userContext!.isAdmin || state.generalUi.currentRoute !== Routes.AdminPanel) { \r\n dispatch(setSelectedConcept(concept));\r\n return;\r\n }\r\n\r\n /*\r\n * If there are changes and user is switching to new Concept,\r\n * prevent switch to the new Concept until a save is completed or changes discarded.\r\n */\r\n const { changed, currentAdminConcept } = state.admin!.concepts;\r\n if (currentAdminConcept && currentAdminConcept.id === concept.id) {\r\n dispatch(setSelectedConcept(concept));\r\n }\r\n else if (changed || concept.unsaved) {\r\n const info: InformationModalState = {\r\n body: \"Please save or undo your current changes first.\",\r\n header: \"Save or Undo Changes\",\r\n show: true\r\n };\r\n dispatch(showInfoModal(info));\r\n }\r\n \r\n /*\r\n * Else switch to the new concept.\r\n */\r\n else {\r\n dispatch(setSelectedConcept(concept));\r\n dispatch(fetchAdminConceptIfNeeded(concept));\r\n }\r\n };\r\n};\r\n\r\n// Synchronous actions\r\nexport const setSearchTree = (concepts: Concept[]): ConceptsAction => {\r\n return {\r\n concepts,\r\n type: SET_SEARCH_TREE\r\n };\r\n};\r\n\r\nexport const setSearchTreeRequested = (): ConceptsAction => {\r\n return {\r\n type: REQUEST_SEARCH_TREE\r\n };\r\n};\r\n\r\nexport const showDrillTree = (): ConceptsAction => {\r\n return {\r\n type: SHOW_DRILL_TREE\r\n };\r\n};\r\n\r\nexport const toggleConceptOpen = (concept: Concept): ConceptsAction => {\r\n return {\r\n concept,\r\n type: TOGGLE_CONCEPT_OPEN\r\n };\r\n};\r\n\r\nexport const requestConceptChildren = (concept: Concept): ConceptsAction => {\r\n return {\r\n concept,\r\n type: REQUEST_CONCEPT_CHILDREN\r\n };\r\n};\r\n\r\nexport const receiveConceptChildren = (concept: Concept, children: Concept[]): ConceptsAction => {\r\n return {\r\n children,\r\n concept,\r\n type: RECEIVE_CONCEPT_CHILDREN\r\n };\r\n};\r\n\r\nexport const setConcept = (concept: Concept): ConceptsAction => {\r\n return {\r\n concepts: [ concept ],\r\n type: SET_CONCEPT\r\n };\r\n};\r\n\r\nexport const addConcepts = (concepts: Concept[]): ConceptsAction => {\r\n return {\r\n concepts,\r\n type: SET_CONCEPTS\r\n };\r\n};\r\n\r\nexport const switchConcepts = (oldConcept: Concept, newConcept: Concept): ConceptsAction => {\r\n return {\r\n concepts: [ oldConcept, newConcept ],\r\n type: SWITCH_CONCEPTS\r\n };\r\n};\r\n\r\nexport const addRootConcepts = (concepts: Concept[]): ConceptsAction => {\r\n return {\r\n concepts,\r\n type: SET_ROOT_CONCEPTS\r\n };\r\n};\r\n\r\nexport const setExtensionConcept = (concept: Concept) => {\r\n return {\r\n concept,\r\n type: SET_EXTENSION_CONCEPT\r\n }\r\n};\r\n\r\nexport const removeExtensionConcept = (concept: Concept) => {\r\n return {\r\n concept,\r\n type: REMOVE_EXTENSION_CONCEPT\r\n }\r\n};\r\n\r\nexport const setExtensionConcepts = (conceptMap: ConceptMap, roots: string[]): ConceptsAction => {\r\n return {\r\n conceptMap,\r\n roots,\r\n type: SET_EXTENSION_CONCEPTS\r\n };\r\n};\r\n\r\nexport const mergeExtensionConcepts = (conceptMap: ConceptMap): ConceptsAction => {\r\n return {\r\n conceptMap,\r\n type: MERGE_EXTENSION_CONCEPTS\r\n };\r\n};\r\n\r\nexport const setSelectedConcept = (concept: Concept): ConceptsAction => {\r\n return {\r\n concept,\r\n type: SET_SELECTED_CONCEPT\r\n }\r\n}\r\n\r\nexport const errorConcepts = (error: string): ConceptsAction => {\r\n return {\r\n error,\r\n type: ERROR_CONCEPTS\r\n };\r\n};\r\n\r\nexport const removeConcept = (concept: Concept): ConceptsAction => {\r\n return {\r\n concept,\r\n type: REMOVE_CONCEPT\r\n };\r\n};\r\n\r\nexport const reparentConcept = (concept: Concept, parentId: string): ConceptsAction => {\r\n return {\r\n concept,\r\n parentId,\r\n type: REPARENT_CONCEPT\r\n }\r\n};\r\n\r\nexport const createConcept = (concept: Concept): ConceptsAction => {\r\n return {\r\n concept,\r\n type: CREATE_CONCEPT\r\n }\r\n};","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport { AppState } from '../models/state/AppState';\r\nimport { RootId, AggregateConceptHintRef, ConceptHintDTO } from '../models/concept/ConceptHint';\r\nimport ConceptSearchEngineWebWorker from '../providers/conceptSearchEngine/conceptSearchEngineWebWorker';\r\nimport { HttpFactory } from './HttpFactory';\r\n\r\nlet lastServerSearchTerm = '';\r\nlet lastServerRootId = '';\r\nlet lastServerResultCount = 1;\r\nlet currentRunningServerCalls = 0;\r\nconst displayThreshold = 5;\r\nconst maxParallelServerCalls = 4;\r\nconst engine = new ConceptSearchEngineWebWorker();\r\n\r\n/*\r\n * Fetch concept hints from server.\r\n */\r\nconst fetchConceptHintsFromServer = async (term: string, rootId: string, state: AppState) => {\r\n ++currentRunningServerCalls; \r\n const { token } = state.session.context!;\r\n const http = HttpFactory.authenticated(token);\r\n const request = await http.get('api/concept/search/hints', {\r\n params: {\r\n rootParentId: rootId,\r\n term\r\n }\r\n });\r\n const result = request.data as ConceptHintDTO[];\r\n lastServerSearchTerm = term;\r\n lastServerResultCount = result.length;\r\n lastServerRootId = rootId;\r\n --currentRunningServerCalls;\r\n\r\n return result;\r\n};\r\n\r\n/*\r\n * Fetch equivalent (e.g., ICD9->10) hint from server.\r\n */\r\nexport const fetchConceptEquivalentHintFromServer = async (term: string, state: AppState) => {\r\n const { token } = state.session.context!;\r\n const http = HttpFactory.authenticated(token);\r\n const request = http.get('api/concept/search/equivalent', {\r\n params: {\r\n term\r\n }\r\n });\r\n return request;\r\n};\r\n\r\n/*\r\n * Determine whether server should be queried or not.\r\n */\r\nconst shouldQueryServer = (term: string, rootId: string): boolean => {\r\n if (\r\n term.length > 0 &&\r\n currentRunningServerCalls < maxParallelServerCalls &&\r\n !(term.startsWith(lastServerSearchTerm) && \r\n rootId === lastServerRootId &&\r\n (Math.abs(term.length - lastServerSearchTerm.length) < 3 || lastServerResultCount === 0)\r\n )\r\n ) {\r\n return true;\r\n }\r\n return false;\r\n};\r\n\r\n/*\r\n * Get concept hints by first querying the local engine,\r\n * then falling back to server if the number of hints found\r\n * is less than the default display.\r\n */\r\nexport const getHints = async (state: AppState, term: string) => {\r\n return new Promise( async (resolve, reject) => {\r\n\r\n if (!term.trim().length) { return resolve([]); }\r\n const cleaned = term.trim().toLowerCase();\r\n const rootId = state.conceptSearch.rootId;\r\n\r\n /* \r\n * Try querying local engine with currently cached concept hints.\r\n */\r\n let results = await engine.searchConceptHints(cleaned, rootId) as AggregateConceptHintRef[];\r\n\r\n /* \r\n * Check if initial search results were sufficient and we aren't already searching for this.\r\n */\r\n if (results.length < displayThreshold && shouldQueryServer(term, rootId)) {\r\n\r\n /*\r\n * Try calling server.\r\n */\r\n const serverResults = await fetchConceptHintsFromServer(cleaned, rootId, state);\r\n\r\n /*\r\n * Load new hints from server and re-query engine.\r\n */\r\n if (serverResults.length) {\r\n results = await engine.addConceptHintsAndSearch(serverResults, cleaned, rootId) as AggregateConceptHintRef[];\r\n }\r\n return resolve(results);\r\n }\r\n else {\r\n /*\r\n * Else the local concept hints were sufficient, so return those.\r\n */\r\n return resolve(results.slice(0, displayThreshold));\r\n }\r\n });\r\n};\r\n\r\n/*\r\n * Request an initilization to the engine. This tells the\r\n * the web worker the root concepts to expect for future searches.\r\n */\r\nexport const initializeSearch = async (state: AppState) => {\r\n // Add the 'All Concepts' root, ''\r\n const roots = state.concepts.roots.slice();\r\n roots.push('');\r\n await engine.initializeSearchEngine(displayThreshold, roots);\r\n};","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport { generate as generateId } from 'shortid';\r\nimport { RootId, FirstChar, ConceptHintRef, MatchedConceptHintRef, ConceptHintRefGroup, AggregateConceptHintRef, ConceptHintDTO } from '../../models/concept/ConceptHint';\r\nimport { workerContext } from './conceptSearchEngineWebWorkerContext';\r\n\r\nconst ADD_CONCEPT_HINTS = 'ADD_CONCEPT_HINTS';\r\nconst ADD_CONCEPT_HINTS_AND_SEARCH = 'ADD_CONCEPT_HINTS_AND_SEARCH';\r\nconst INITIALIZE_SEARCH_ENGINE = 'INITIALIZE_SEARCH_ENGINE';\r\nconst SEARCH_CONCEPT_HINTS = 'SEARCH_CONCEPT_HINTS';\r\n\r\ninterface InboundMessagePartialPayload {\r\n displayThreshhold?: number;\r\n hints?: ConceptHintDTO[];\r\n message: string;\r\n rootId?: string;\r\n roots?: string[];\r\n searchString?: string;\r\n}\r\n\r\ninterface InboundMessagePayload extends InboundMessagePartialPayload {\r\n requestId: string;\r\n}\r\n\r\ninterface OutboundMessagePayload {\r\n requestId: string;\r\n result?: any;\r\n}\r\n\r\ninterface WorkerReturnPayload {\r\n data: OutboundMessagePayload;\r\n}\r\n\r\ninterface PromiseResolver {\r\n reject: any;\r\n resolve: any;\r\n}\r\n\r\nexport default class ConceptSearchEngineWebWorker {\r\n private worker: Worker;\r\n private reject: any;\r\n private promiseMap: Map = new Map();\r\n\r\n constructor() {\r\n const workerFile = ` \r\n ${this.addMessageTypesToContext([ADD_CONCEPT_HINTS, ADD_CONCEPT_HINTS_AND_SEARCH, INITIALIZE_SEARCH_ENGINE, SEARCH_CONCEPT_HINTS])}\r\n ${workerContext}\r\n self.onmessage = function(e) { \r\n self.postMessage(handleWorkMessage.call(this, e.data, postMessage)); \r\n }`;\r\n // console.log(workerFile);\r\n const blob = new Blob([workerFile], { type: 'text/javascript' });\r\n this.worker = new Worker(URL.createObjectURL(blob));\r\n this.worker.onmessage = result => this.handleReturnPayload(result);\r\n this.worker.onerror = error => { console.log(error); this.reject(error) };\r\n }\r\n\r\n public initializeSearchEngine = (displayThreshhold: number, roots: string[]) => {\r\n return this.postMessage({ message: INITIALIZE_SEARCH_ENGINE, displayThreshhold, roots });\r\n }\r\n\r\n public addConceptHints = (hints: ConceptHintDTO[], rootId: string) => {\r\n return this.postMessage({ message: ADD_CONCEPT_HINTS, hints, rootId });\r\n }\r\n\r\n public addConceptHintsAndSearch = (hints: ConceptHintDTO[], searchString: string, rootId: string) => {\r\n return this.postMessage({ message: ADD_CONCEPT_HINTS_AND_SEARCH, searchString, hints, rootId });\r\n }\r\n\r\n public searchConceptHints = (searchString: string, rootId: string) => {\r\n return this.postMessage({ message: SEARCH_CONCEPT_HINTS, searchString, rootId });\r\n }\r\n\r\n private postMessage = (payload: InboundMessagePartialPayload) => {\r\n return new Promise((resolve, reject) => {\r\n const requestId = generateId();\r\n this.reject = reject;\r\n this.promiseMap.set(requestId, { resolve, reject });\r\n this.worker.postMessage({ ...payload, requestId });\r\n });\r\n }\r\n\r\n private handleReturnPayload = (payload: WorkerReturnPayload): any => {\r\n const data = payload.data.result ? payload.data.result : {}\r\n const resolve = this.promiseMap.get(payload.data.requestId)!.resolve;\r\n this.promiseMap.delete(payload.data.requestId);\r\n return resolve(data);\r\n }\r\n\r\n private stripFunctionToContext = (f: () => any) => {\r\n const funcString = `${f}`;\r\n return funcString\r\n .substring(0, funcString.lastIndexOf('}'))\r\n .substring(funcString.indexOf('{') + 1)\r\n }\r\n\r\n private addMessageTypesToContext = (messageTypes: string[]) => {\r\n return messageTypes.map((v: string) => `var ${v} = '${v}';`).join(' ');\r\n }\r\n\r\n private workerContext = () => {\r\n\r\n const handleWorkMessage = (payload: InboundMessagePayload) => {\r\n switch (payload.message) {\r\n case ADD_CONCEPT_HINTS:\r\n return addToCache(payload);\r\n case ADD_CONCEPT_HINTS_AND_SEARCH:\r\n return addHintsAndSearch(payload);\r\n case SEARCH_CONCEPT_HINTS:\r\n return search(payload);\r\n case INITIALIZE_SEARCH_ENGINE:\r\n return initialize(payload);\r\n default:\r\n return null;\r\n }\r\n };\r\n\r\n const cache: Map> = new Map();\r\n let maxHintsToReturn = 0;\r\n\r\n const addHintsAndSearch = (payload: InboundMessagePayload): OutboundMessagePayload => {\r\n addToCache(payload);\r\n return search(payload);\r\n };\r\n\r\n const groupSearchResults = (results: MatchedConceptHintRef[]): AggregateConceptHintRef[] => {\r\n const agg: Map = new Map();\r\n const fullText: Set = new Set();\r\n let thresholdMet = false;\r\n\r\n /*\r\n * First find 5 rows' worth of matches\r\n * and additional suggested tokens.\r\n */\r\n for (let i = 0; i < results.length; i++) {\r\n const match = results[i];\r\n if (!match.remainingTerms.size) {\r\n match.remainingTerms.add('');\r\n }\r\n\r\n /*\r\n * Add to matched rows to be returned \r\n * if this ref has same matched tokens.\r\n */\r\n agg.forEach((val) => {\r\n if (match.matchedTerms === val.text && match.remainingTerms.has(val.suggestion)) {\r\n val.ids.push(match.ref.id);\r\n }\r\n });\r\n\r\n /*\r\n * Try to add suggestions if still under threshold.\r\n */\r\n const suggestions = [ ...match.remainingTerms.values() ];\r\n for (let j = 0; j < suggestions.length && !thresholdMet; j++) {\r\n const suggestion = suggestions[j];\r\n const rowIdx = match.matchedTerms + suggestion;\r\n\r\n if (!fullText.has(rowIdx)) {\r\n const full = match.matchedTerms + ' ' + suggestion;\r\n const row: AggregateConceptHintRef = {\r\n ids: [ match.ref.id ],\r\n fullText: full,\r\n text: match.matchedTerms,\r\n suggestion\r\n };\r\n agg.set(rowIdx, row);\r\n fullText.add(rowIdx);\r\n\r\n if (agg.size === maxHintsToReturn) {\r\n thresholdMet = true;\r\n }\r\n }\r\n }\r\n }\r\n const out: AggregateConceptHintRef[] = [ ...agg.values() ];\r\n return out;\r\n };\r\n\r\n const search = (payload: InboundMessagePayload): OutboundMessagePayload => {\r\n const { searchString, requestId, rootId } = payload;\r\n const terms = searchString!.trim().split(' ');\r\n const termCount = terms.length;\r\n const firstTerm = terms[0];\r\n const scopeTokens = cache.get(rootId!)!.get(firstTerm[0]);\r\n const hits: MatchedConceptHintRef[] = [];\r\n const groups: ConceptHintRefGroup[] = [];\r\n\r\n if (!searchString || !scopeTokens) {\r\n return { requestId, result: [] }; \r\n }\r\n \r\n // ******************\r\n // First term\r\n // ******************\r\n \r\n // Foreach ref group compare with search term one\r\n for (let i1 = 0; i1 < scopeTokens.length; i1++) {\r\n const grp = scopeTokens[i1];\r\n if (grp.text.startsWith(firstTerm)) {\r\n groups.push(grp);\r\n for (let i2 = 0; i2 < grp.refs.length; i2++) {\r\n const ref = grp.refs[i2];\r\n hits.push({ matchedTerms: grp.text, remainingTerms: new Set(ref.tokens), ref })\r\n }\r\n }\r\n }\r\n\r\n if (terms.length === 1) { \r\n return { requestId, result: groupSearchResults(hits) };\r\n }\r\n \r\n // ******************\r\n // Following terms\r\n // ******************\r\n\r\n // For datasets found in loop one\r\n const final: MatchedConceptHintRef[] = []\r\n \r\n for (let g1 = 0; g1 < groups.length; g1++) {\r\n const grp = groups[g1];\r\n\r\n for (let r1 = 0; r1 < grp.refs.length; r1++) {\r\n const ref = grp.refs[r1];\r\n const tokens = ref.tokens.slice();\r\n const matched: string[] = [ grp.text ];\r\n let hitCount = 1;\r\n\r\n // Foreach term after the first (e.g. [ 'white', 'blood' ])\r\n // filter what first loop found and remove if no hit\r\n for (let r2 = 1; r2 < termCount; r2++) {\r\n const term = terms[r2];\r\n\r\n // For each other token in Concept name\r\n for (let j = 0; j < tokens.length; j++) {\r\n if (tokens[j].startsWith(term)) { \r\n hitCount++;\r\n matched.push(tokens[j]);\r\n tokens.splice(j,1);\r\n break;\r\n }\r\n }\r\n }\r\n if (hitCount === termCount) {\r\n final.push({ matchedTerms: matched.join(' '), ref, remainingTerms: new Set(tokens) });\r\n }\r\n }\r\n }\r\n \r\n return { requestId, result: groupSearchResults(final) };\r\n };\r\n\r\n const initialize = (payload: InboundMessagePayload): OutboundMessagePayload => {\r\n const { displayThreshhold, requestId, roots } = payload;\r\n maxHintsToReturn = displayThreshhold!;\r\n for (let i = 0; i < roots!.length; i++) {\r\n const root = roots![i];\r\n cache.set(root, new Map());\r\n }\r\n return { requestId }\r\n }\r\n \r\n const addToCache = (payload: InboundMessagePayload): OutboundMessagePayload => {\r\n const { hints, rootId, requestId } = payload;\r\n \r\n // Foreach hint\r\n for (let i = 0; i < hints!.length; i++) {\r\n const h = hints![i];\r\n\r\n for (let j = 0; j <= h.tokens.length - 1; j++) {\r\n const token = h.tokens[j];\r\n const first = token[0];\r\n const ref: ConceptHintRef = {\r\n id: h.conceptId,\r\n text: token,\r\n tokens: h.tokens.slice().filter((t, i) => i !== j)\r\n };\r\n\r\n // Root\r\n const cacheRoot = cache.get(rootId!)!;\r\n\r\n // Groups by first char\r\n const groups = cacheRoot.get(first);\r\n if (groups) {\r\n\r\n // Find refs matching this text\r\n const group = groups.find((g) => g.text === token);\r\n if (group) {\r\n if (!group.refs.find((r) => r.id === h.conceptId)) {\r\n group.refs.push(ref);\r\n }\r\n } else {\r\n groups.push({ text: token, refs: [ ref ] } )\r\n }\r\n } else {\r\n cacheRoot.set(first, [ \r\n { text: token, refs: [ ref ] } \r\n ]);\r\n }\r\n }\r\n }\r\n return { requestId, result: [] };\r\n };\r\n };\r\n};","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nexport const workerContext = `\r\nvar handleWorkMessage = function (payload) {\r\n switch (payload.message) {\r\n case ADD_CONCEPT_HINTS:\r\n return addToCache(payload);\r\n case ADD_CONCEPT_HINTS_AND_SEARCH:\r\n return addHintsAndSearch(payload);\r\n case SEARCH_CONCEPT_HINTS:\r\n return search(payload);\r\n case INITIALIZE_SEARCH_ENGINE:\r\n return initialize(payload);\r\n default:\r\n return null;\r\n }\r\n};\r\nvar cache = new Map();\r\nvar maxHintsToReturn = 0;\r\nvar addHintsAndSearch = function (payload) {\r\n addToCache(payload);\r\n return search(payload);\r\n};\r\nvar groupSearchResults = function (results) {\r\n var agg = new Map();\r\n var fullText = new Set();\r\n var thresholdMet = false;\r\n var _loop_1 = function (i) {\r\n var match = results[i];\r\n if (!match.remainingTerms.size) {\r\n match.remainingTerms.add('');\r\n }\r\n /*\r\n * Add to matched rows to be returned\r\n * if this ref has same matched tokens.\r\n */\r\n agg.forEach(function (val) {\r\n if (match.matchedTerms === val.text && match.remainingTerms.has(val.suggestion)) {\r\n val.ids.push(match.ref.id);\r\n }\r\n });\r\n /*\r\n * Try to add suggestions if still under threshold.\r\n */\r\n var suggestions = [ ...match.remainingTerms.values() ];\r\n for (var j = 0; j < suggestions.length && !thresholdMet; j++) {\r\n var suggestion = suggestions[j];\r\n var rowIdx = match.matchedTerms + suggestion;\r\n if (!fullText.has(rowIdx)) {\r\n var row = {\r\n ids: [match.ref.id],\r\n fullText: match.matchedTerms + ' ' + suggestion,\r\n text: match.matchedTerms,\r\n suggestion: suggestion\r\n };\r\n agg.set(rowIdx, row);\r\n fullText.add(rowIdx);\r\n if (agg.size === maxHintsToReturn) {\r\n thresholdMet = true;\r\n }\r\n }\r\n }\r\n };\r\n /*\r\n * First find 5 rows' worth of matches\r\n * and additional suggested tokens.\r\n */\r\n for (var i = 0; i < results.length; i++) {\r\n _loop_1(i);\r\n }\r\n var out = [ ...agg.values() ];\r\n return out;\r\n};\r\nvar search = function (payload) {\r\n var searchString = payload.searchString, requestId = payload.requestId, rootId = payload.rootId;\r\n var terms = searchString.trim().split(' ');\r\n var termCount = terms.length;\r\n var firstTerm = terms[0];\r\n var scopeTokens = cache.get(rootId).get(firstTerm[0]);\r\n var hits = [];\r\n var groups = [];\r\n if (!searchString || !scopeTokens) {\r\n return { requestId: requestId, result: [] };\r\n }\r\n // ******************\r\n // First term\r\n // ******************\r\n // Foreach ref group compare with search term one\r\n for (var i1 = 0; i1 < scopeTokens.length; i1++) {\r\n var grp = scopeTokens[i1];\r\n if (grp.text.startsWith(firstTerm)) {\r\n groups.push(grp);\r\n for (var i2 = 0; i2 < grp.refs.length; i2++) {\r\n var ref = grp.refs[i2];\r\n hits.push({ matchedTerms: grp.text, remainingTerms: new Set(ref.tokens), ref: ref });\r\n }\r\n }\r\n }\r\n if (terms.length === 1) {\r\n return { requestId: requestId, result: groupSearchResults(hits) };\r\n }\r\n // ******************\r\n // Following terms\r\n // ******************\r\n // For datasets found in loop one\r\n var final = [];\r\n for (var g1 = 0; g1 < groups.length; g1++) {\r\n var grp = groups[g1];\r\n for (var r1 = 0; r1 < grp.refs.length; r1++) {\r\n var ref = grp.refs[r1];\r\n var tokens = ref.tokens.slice();\r\n var matched = [grp.text];\r\n var hitCount = 1;\r\n // Foreach term after the first (e.g. [ 'white', 'blood' ])\r\n // filter what first loop found and remove if no hit\r\n for (var r2 = 1; r2 < termCount; r2++) {\r\n var term = terms[r2];\r\n // For each other token in Concept name\r\n for (var j = 0; j < tokens.length; j++) {\r\n if (tokens[j].startsWith(term)) {\r\n hitCount++;\r\n matched.push(tokens[j]);\r\n tokens.splice(j, 1);\r\n break;\r\n }\r\n }\r\n }\r\n if (hitCount === termCount) {\r\n final.push({ matchedTerms: matched.join(' '), ref: ref, remainingTerms: new Set(tokens) });\r\n }\r\n }\r\n }\r\n return { requestId: requestId, result: groupSearchResults(final) };\r\n};\r\nvar initialize = function (payload) {\r\n var displayThreshhold = payload.displayThreshhold, requestId = payload.requestId, roots = payload.roots;\r\n maxHintsToReturn = displayThreshhold;\r\n for (var i = 0; i < roots.length; i++) {\r\n var root = roots[i];\r\n cache.set(root, new Map());\r\n }\r\n return { requestId: requestId };\r\n};\r\nvar addToCache = function (payload) {\r\n var hints = payload.hints, rootId = payload.rootId, requestId = payload.requestId;\r\n var _loop_2 = function (i) {\r\n var h = hints[i];\r\n var _loop_3 = function (j) {\r\n var token = h.tokens[j];\r\n var first = token[0];\r\n var ref = {\r\n id: h.conceptId,\r\n text: token,\r\n tokens: h.tokens.slice().filter(function (t, i) { return i !== j; })\r\n };\r\n // Root\r\n var cacheRoot = cache.get(rootId);\r\n // Groups by first char\r\n var groups = cacheRoot.get(first);\r\n if (groups) {\r\n // Find refs matching this text\r\n var group = groups.find(function (g) { return g.text === token; });\r\n if (group) {\r\n if (!group.refs.find(function (r) { return r.id === h.conceptId; })) {\r\n group.refs.push(ref);\r\n }\r\n }\r\n else {\r\n groups.push({ text: token, refs: [ref] });\r\n }\r\n }\r\n else {\r\n cacheRoot.set(first, [\r\n { text: token, refs: [ref] }\r\n ]);\r\n }\r\n };\r\n for (var j = 0; j <= h.tokens.length - 1; j++) {\r\n _loop_3(j);\r\n }\r\n };\r\n // Foreach hint\r\n for (var i = 0; i < hints.length; i++) {\r\n _loop_2(i);\r\n }\r\n return { requestId: requestId, result: [] };\r\n};\r\n`\r\n","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport { Action, Dispatch } from 'redux';\r\nimport { AppState } from '../models/state/AppState';\r\nimport { ConceptEquivalentHint, AggregateConceptHintRef } from '../models/concept/ConceptHint';\r\nimport { fetchConceptEquivalentHintFromServer, getHints, initializeSearch } from '../services/conceptHintSuggestionApi';\r\n\r\nexport const SET_SEARCH_ROOT = 'SET_SEARCH_ROOT';\r\nexport const SET_SEARCH_TERM = 'SET_SEARCH_TERM';\r\nexport const SEND_SEARCH = 'SEND_SEARCH';\r\nexport const SET_SEARCH_HINTS = 'SET_SEARCH_HINTS';\r\nexport const SET_EQUIVALENT_SEARCH_HINT = 'SET_EQUIVALENT_SEARCH_HINT';\r\nexport const RESET_EQUIVALENT_SEARCH_HINT = 'RESET_EQUIVALENT_SEARCH_HINT';\r\nexport const ERROR_SEARCH = 'ERROR_SEARCH';\r\n\r\nexport interface ConceptSearchAction {\r\n equivalent?: ConceptEquivalentHint;\r\n error?: string;\r\n hints?: AggregateConceptHintRef[];\r\n term?: string;\r\n rootId?: string;\r\n type: string;\r\n}\r\n\r\n// Async actions\r\n/*\r\n * Initiliaze the search engine web worker. This \r\n * let's the worker know the concept root ids it \r\n * should prepare to recieve and index concepts for.\r\n */\r\nexport const initializeSearchEngine = () => {\r\n return async (dispatch: Dispatch, getState: () => AppState) => {\r\n const state = getState();\r\n initializeSearch(state).then(\r\n (response: any) => { return; },\r\n (error: any) => console.log('Search engine initialization failed', error) \r\n );\r\n }\r\n};\r\n\r\n/*\r\n * Request concept hints from the server. These\r\n * appear as selectable dropdown items in the concept\r\n * search box.\r\n */\r\nexport const requestConceptHints = (term: string) => {\r\n return async (dispatch: Dispatch, getState: () => AppState) => {\r\n const state = getState();\r\n getHints(state, term).then(\r\n (response: any) => {\r\n if (term === getState().conceptSearch.term) {\r\n dispatch(setSearchHints(response));\r\n }\r\n },\r\n (error: any) => console.log(error) \r\n );\r\n };\r\n};\r\n\r\n/*\r\n * Requests a possible equivalent to an ICD9/10 code\r\n * typed in the search box (e.g., if the user searches for \r\n * a pattern matching ICD10 code E11.1, it's ICD9 equivalent\r\n * will be displayed for convenience).\r\n */\r\nexport const requestConceptEquivalentHint = (term: string) => {\r\n return async (dispatch: Dispatch, getState: () => AppState) => {\r\n const state = getState();\r\n fetchConceptEquivalentHintFromServer(term, state).then(\r\n (response: any) => dispatch(setSearchEquivalentHint(term, response.data)),\r\n (error: any) => console.log(error) \r\n );\r\n };\r\n};\r\n\r\n// Synchronous actions\r\nexport const setSearchRoot = (rootId: string): ConceptSearchAction => {\r\n return {\r\n rootId,\r\n type: SET_SEARCH_ROOT\r\n };\r\n};\r\n\r\nexport const setSearchTerm = (term: string): ConceptSearchAction => {\r\n return {\r\n term,\r\n type: SET_SEARCH_TERM\r\n };\r\n};\r\n\r\nexport const sendSearch = (): ConceptSearchAction => {\r\n return {\r\n type: SEND_SEARCH\r\n };\r\n};\r\n\r\nexport const setSearchHints = (hints: AggregateConceptHintRef[]): ConceptSearchAction => {\r\n return {\r\n hints,\r\n type: SET_SEARCH_HINTS\r\n };\r\n};\r\n\r\nexport const errorSearch = (error: string): ConceptSearchAction => {\r\n return {\r\n error,\r\n type: ERROR_SEARCH\r\n };\r\n};\r\n\r\nexport const setSearchEquivalentHint = (term: string, equivalent: ConceptEquivalentHint): ConceptSearchAction => {\r\n return {\r\n equivalent,\r\n term,\r\n type: SET_EQUIVALENT_SEARCH_HINT\r\n };\r\n};","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport React from 'react';\r\nimport { AggregateConceptHintRef } from '../../../models/concept/ConceptHint';\r\nimport { ConceptsSearchState } from '../../../models/state/AppState';\r\n\r\ninterface Props {\r\n conceptSearchState: ConceptsSearchState;\r\n dispatch: any;\r\n handleEquivalentHintClick: () => any;\r\n handleHintSelect: (hint: AggregateConceptHintRef) => any;\r\n selectedHintIndex: number;\r\n termIsNumeric: boolean;\r\n}\r\n\r\nexport class HintContainer extends React.PureComponent {\r\n private className = 'concept-search';\r\n constructor(props: Props) {\r\n super(props);\r\n }\r\n \r\n public render() {\r\n const { conceptSearchState, handleEquivalentHintClick, handleHintSelect, selectedHintIndex, termIsNumeric } = this.props;\r\n const { currentHints, currentEquivalentHint } = conceptSearchState;\r\n const c = this.className;\r\n const abbreviate = conceptSearchState.term.length > 50;\r\n const paddedAbbreviation = ...\r\n\r\n return (\r\n
\r\n\r\n {/* 'Possible Equivalent of' ICD9->10 or ICD10->9 suggestion */}\r\n {conceptSearchState.term.length > 0 && termIsNumeric && currentEquivalentHint.targetCode &&\r\n
\r\n Possible equivalent of \r\n \r\n {currentEquivalentHint.targetCodeType}: {currentEquivalentHint.targetCode} - \r\n {currentEquivalentHint.uiDisplayTargetName}\r\n \r\n
}\r\n\r\n {/* Main suggested hints */}\r\n {currentHints.map((hint: AggregateConceptHintRef, i: number) => {\r\n const len = hint.ids.length;\r\n return (\r\n
\r\n\r\n {/* Text */}\r\n {!abbreviate \r\n ? {hint.text} \r\n : paddedAbbreviation\r\n }\r\n {hint.suggestion}\r\n\r\n {/* Matching concepts count */}\r\n \r\n {len > 20 ? '20+' : len} concept{len > 1 && 's'}\r\n \r\n
)\r\n })}\r\n
\r\n );\r\n }\r\n}","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\n// Adapted from https://codepen.io/jczimm/pen/vEBpoL\r\nimport React from 'react';\r\nimport './LoaderIcon.css';\r\nimport './LoaderIconFallback.css';\r\n\r\ninterface Props {\r\n size?: number;\r\n strokeWidth?: number;\r\n}\r\n\r\nconst LoaderIcon = (props: Props) => {\r\n const useFallback = false;\r\n const height = props.size || 15;\r\n const width = props.size || 15;\r\n const strokeWidth = props.strokeWidth || 4;\r\n\r\n if (!useFallback) {\r\n return (\r\n
\r\n \r\n \r\n \r\n
\r\n );\r\n }\r\n else {\r\n const borderWidth = (strokeWidth / 2);\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n
\r\n );\r\n }\r\n};\r\n\r\nconst isIeOrEdge = () => {\r\n return (document['documentMode'] || /Edge/.test(navigator.userAgent))\r\n};\r\n\r\nexport default LoaderIcon;","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport React from 'react';\r\nimport { DropdownItem, DropdownMenu, DropdownToggle, Input, InputGroup, InputGroupButtonDropdown } from 'reactstrap';\r\nimport { fetchSearchTreeFromConceptHint, fetchSearchTreeFromTerms, showDrillTree } from '../../../actions/concepts';\r\nimport { requestConceptEquivalentHint, requestConceptHints, setSearchRoot, setSearchTerm } from '../../../actions/conceptSearch';\r\nimport { ConceptsSearchState, ConceptsState } from '../../../models/state/AppState';\r\nimport { AggregateConceptHintRef } from '../../../models/concept/ConceptHint';\r\nimport { HintContainer } from './HintContainer';\r\nimport { isEmbeddedQuery } from '../../../utils/panelUtils';\r\nimport { keys } from '../../../models/Keyboard';\r\nimport LoaderIcon from '../../Other/LoaderIcon/LoaderIcon';\r\n\r\nimport './ConceptSearchBox.css';\r\ninterface Props {\r\n conceptsState: ConceptsState;\r\n conceptsSearchState: ConceptsSearchState;\r\n dispatch: any\r\n}\r\n\r\ninterface State {\r\n debounceTimer?: NodeJS.Timer;\r\n roots: string[];\r\n selectedHintIndex: number;\r\n showHintsDropdown: boolean;\r\n showRootsDropdown: boolean;\r\n}\r\n\r\nexport default class ConceptSearchBox extends React.PureComponent {\r\n private className = 'concept-search';\r\n private debounceTimeoutMs = 200;\r\n private minSearchCharLength = 3;\r\n private minNumericCharLength = 3;\r\n private numericRegex = /\\d+/;\r\n private previousTerm = '';\r\n private previousEquivalentTerm = '';\r\n private termIsNumeric = false;\r\n constructor(props: Props) {\r\n super(props);\r\n this.state = {\r\n roots: [],\r\n selectedHintIndex: -1,\r\n showHintsDropdown: false,\r\n showRootsDropdown: false\r\n }\r\n }\r\n\r\n public getSnapshotBeforeUpdate() {\r\n const { conceptsState } = this.props;\r\n const { roots } = this.state;\r\n\r\n if (!roots.length && conceptsState.roots.length) {\r\n this.setState({ roots: [ '', ...conceptsState.roots.filter((r) => !isEmbeddedQuery(r)) ] });\r\n }\r\n return null;\r\n }\r\n\r\n public componentDidUpdate() { return; }\r\n\r\n public render() {\r\n const { conceptsState, conceptsSearchState, dispatch } = this.props;\r\n const { drillTree } = this.props.conceptsState;\r\n const { roots, selectedHintIndex, showHintsDropdown } = this.state;\r\n const c = this.className;\r\n const progressBarClasses = `leaf-progressbar ${conceptsState.requestingSearchTree || conceptsSearchState.isFetching ? 'show' : ''}`;\r\n const selectedRootDisplay = conceptsSearchState.rootId ? drillTree.get(conceptsSearchState.rootId)!.uiDisplayName : 'All Concepts';\r\n \r\n return (\r\n
\r\n \r\n\r\n {/* Roots dropdown (e.g. All Concepts, Demographics, etc.) */}\r\n \r\n \r\n {selectedRootDisplay}\r\n \r\n \r\n \r\n All Concepts\r\n \r\n {roots.map((id: string) => {\r\n const root = drillTree.get(id);\r\n if (!root) { return null }\r\n const classes = [ 'leaf-dropdown-item', (id === conceptsSearchState.rootId ? 'selected' : '') ]; \r\n return (\r\n \r\n {root.uiDisplayName}\r\n \r\n )\r\n })}\r\n \r\n \r\n \r\n {/* Search box container */}\r\n
\r\n\r\n {/* Search input */}\r\n \r\n
\r\n\r\n {/* Clear search text button */}\r\n {conceptsSearchState.term.length > 0 && !conceptsState.requestingSearchTree &&\r\n
\r\n \r\n
\r\n }\r\n\r\n {/* Spinnner shown when requesting a tree */}\r\n {conceptsState.requestingSearchTree &&\r\n \r\n }\r\n\r\n {/* Search suggestions pseudo-dropdown */}\r\n {showHintsDropdown && !conceptsState.requestingSearchTree &&\r\n \r\n }\r\n
\r\n \r\n
\r\n )\r\n }\r\n\r\n private toggleRootsDropdown = () => {\r\n this.setState({ showRootsDropdown: !this.state.showRootsDropdown });\r\n }\r\n\r\n private handleNumericInput = (term: string) => {\r\n const { dispatch } = this.props;\r\n const numericTerm = term\r\n .split(' ')\r\n .find((t: string) => this.numericRegex.test(t));\r\n \r\n if (numericTerm && numericTerm.length >= this.minNumericCharLength && numericTerm !== this.previousEquivalentTerm) {\r\n this.previousEquivalentTerm = numericTerm;\r\n this.termIsNumeric = true;\r\n dispatch(requestConceptEquivalentHint(numericTerm));\r\n }\r\n }\r\n\r\n private handleEquivalentHintClick = () => {\r\n const { dispatch, conceptsSearchState } = this.props;\r\n const { currentEquivalentHint } = conceptsSearchState;\r\n\r\n // Add the target code and first two words in text as the term\r\n const textSplit = currentEquivalentHint.uiDisplayTargetName.split(' ');\r\n const term = `${currentEquivalentHint.targetCode} ${textSplit.length >= 2 ? textSplit.slice(0,2).join(' ') : ''}`;\r\n const input = document.getElementsByClassName('concept-search-input') as any;\r\n\r\n setTimeout(() => {\r\n this.handleSearchInput(term);\r\n dispatch(fetchSearchTreeFromTerms(term));\r\n if (input && input[0]) {\r\n input[0].focus();\r\n }\r\n }, 50);\r\n }\r\n\r\n private handleRootDropdownSelect = (id: string) => {\r\n const { dispatch, conceptsSearchState } = this.props;\r\n const { term } = conceptsSearchState;\r\n if (id === this.props.conceptsSearchState.rootId) { return; }\r\n\r\n this.previousTerm = '';\r\n dispatch(setSearchRoot(id));\r\n if (term.length >= this.minSearchCharLength) {\r\n dispatch(fetchSearchTreeFromTerms(term));\r\n }\r\n }\r\n\r\n private handleHintSelect = (hint: AggregateConceptHintRef) => {\r\n const { dispatch } = this.props;\r\n dispatch(setSearchTerm(hint.fullText));\r\n if (hint.fullText !== this.previousTerm) {\r\n dispatch(fetchSearchTreeFromConceptHint(hint));\r\n this.previousTerm = hint.fullText;\r\n }\r\n }\r\n\r\n private handleInputFocus = () => this.setState({ showHintsDropdown: true });\r\n\r\n private handleInputBlur = () => this.setState({ showHintsDropdown: false });\r\n\r\n private handleArrowUpDownKeyPress = (key: number, hints: AggregateConceptHintRef[]) => {\r\n const { showHintsDropdown, selectedHintIndex } = this.state;\r\n const { dispatch } = this.props;\r\n if (!showHintsDropdown) { return selectedHintIndex; }\r\n\r\n const currentFocus = this.state.selectedHintIndex;\r\n const hintCount = hints.length;\r\n const minFocus = 0;\r\n const maxFocus = hintCount - 1;\r\n const newFocus = key === keys.ArrowUp\r\n ? currentFocus === minFocus ? maxFocus : currentFocus - 1\r\n : currentFocus === maxFocus ? minFocus : currentFocus + 1;\r\n \r\n if (hints[newFocus]) {\r\n dispatch(setSearchTerm(hints[newFocus].fullText));\r\n }\r\n return newFocus;\r\n }\r\n\r\n private handleEnterKeyPress = (term: string, hints: AggregateConceptHintRef[]) => {\r\n const { conceptsSearchState, dispatch } = this.props;\r\n const { debounceTimer, selectedHintIndex } = this.state;\r\n\r\n if (debounceTimer) {\r\n clearTimeout(debounceTimer);\r\n }\r\n\r\n if (term && term !== this.previousTerm) {\r\n this.previousTerm = term;\r\n const hint = conceptsSearchState.currentHints[selectedHintIndex];\r\n this.setState({ selectedHintIndex: -1, showHintsDropdown: false });\r\n\r\n // If a hint is currently focused, find its tree\r\n if (hint) {\r\n dispatch(fetchSearchTreeFromConceptHint(hint));\r\n }\r\n // Else need to check if we have an exact or approximate hint match\r\n else {\r\n const directMatchHint = hints.length === 1\r\n ? hints[0]\r\n : hints.find((h: AggregateConceptHintRef) => h.fullText === term);\r\n if (directMatchHint) {\r\n dispatch(fetchSearchTreeFromConceptHint(directMatchHint));\r\n }\r\n // Else we could try getting approximate matches and choose the closest, but it may be that the user wants\r\n // ALL related concepts returned based on the input, so grab the tree based on the search term\r\n else {\r\n dispatch(fetchSearchTreeFromTerms(term));\r\n }\r\n }\r\n }\r\n else {\r\n this.setState({ showHintsDropdown: false });\r\n }\r\n }\r\n\r\n private handleSpacebarKeyPress = (term: string, newFocus: number, hints: AggregateConceptHintRef[]) => {\r\n const { dispatch } = this.props;\r\n\r\n if (hints[newFocus]) {\r\n this.setState({ selectedHintIndex: -1 });\r\n dispatch(setSearchTerm(hints[newFocus].fullText));\r\n dispatch(requestConceptHints(term));\r\n }\r\n }\r\n\r\n private handleSearchKeydown = (k: React.KeyboardEvent) => {\r\n const { conceptsSearchState } = this.props;\r\n const { selectedHintIndex } = this.state;\r\n const { term, currentHints } = conceptsSearchState;\r\n const key = (k.key === ' ' ? keys.Space : keys[k.key as any]);\r\n\r\n if (!key || term.length < this.minSearchCharLength) { return; }\r\n let newFocus = selectedHintIndex;\r\n\r\n switch (key) {\r\n case keys.ArrowUp: \r\n case keys.ArrowDown:\r\n newFocus = this.handleArrowUpDownKeyPress(key, currentHints);\r\n k.preventDefault();\r\n break;\r\n case keys.Backspace:\r\n newFocus = -1;\r\n break;\r\n case keys.Enter:\r\n this.handleEnterKeyPress(term, currentHints);\r\n break;\r\n case keys.Space:\r\n this.handleSpacebarKeyPress(term, newFocus, currentHints);\r\n break;\r\n case keys.Escape:\r\n this.handleSearchTextClear();\r\n break;\r\n }\r\n if (newFocus !== selectedHintIndex) {\r\n this.setState({ selectedHintIndex: newFocus });\r\n }\r\n }\r\n\r\n private handleSearchTextClear = () => {\r\n const { dispatch } = this.props;\r\n dispatch(setSearchTerm(''));\r\n dispatch(showDrillTree());\r\n }\r\n\r\n private handleSearchInputChange = (e: React.FormEvent) => {\r\n this.handleSearchInput(e.currentTarget.value);\r\n }\r\n\r\n private handleSearchInput = (term: string) => {\r\n const { dispatch } = this.props;\r\n const { debounceTimer } = this.state;\r\n dispatch(setSearchTerm(term));\r\n\r\n if (debounceTimer) {\r\n clearTimeout(debounceTimer);\r\n }\r\n\r\n if (term.length >= this.minSearchCharLength) {\r\n this.setState({\r\n showHintsDropdown: true,\r\n debounceTimer: setTimeout(() => {\r\n dispatch(requestConceptHints(term));\r\n if (this.numericRegex.test(term)) {\r\n this.handleNumericInput(term);\r\n } else {\r\n this.termIsNumeric = false;\r\n this.previousEquivalentTerm = '';\r\n }\r\n }, this.debounceTimeoutMs)\r\n });\r\n } else if (!term.length) {\r\n dispatch(showDrillTree());\r\n this.setState({ showHintsDropdown: false });\r\n }\r\n }\r\n}","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nfunction getTextWidth(ctx: any, style: any, text: string) {\r\n if (typeof ctx.measureText === 'function') {\r\n return ctx.measureText(text).width;\r\n } else {\r\n const perCharWidth = style.fontSize / 1.7;\r\n return text.length * perCharWidth;\r\n }\r\n}\r\n \r\nfunction parseBoxShadow(style: any) {\r\n const parts = (style.boxShadow || '').replace(/px/g, '').split(/[^,] /);\r\n const offsetX = parts[0];\r\n const offsetY = parts[1];\r\n const blur = parts[2];\r\n const color = parts[3];\r\n return {\r\n shadowBlur: parseInt(blur, 10) || 8,\r\n shadowColor: color || 'rgb(100,100,100)',\r\n shadowOffsetX: parseInt(offsetX, 10) || 0,\r\n shadowOffsetY: parseInt(offsetY, 10) || 0\r\n }\r\n}\r\n \r\nconst defaultStyle = {\r\n backgroundColor: 'rgb(250,250,250)',\r\n borderColor: 'transparent',\r\n color: 'rgb(28, 168, 221)',\r\n fontSize: 14,\r\n paddingBottom: 10,\r\n paddingLeft: 10,\r\n paddingRight: 10,\r\n paddingTop: 10\r\n};\r\n \r\nexport default function createDragPreview(rawText: string) {\r\n const text = rawText.length > 30 ? rawText.slice(0, 30) + '...' : rawText;\r\n const style = defaultStyle;\r\n const img = new Image();\r\n const shadowStyle = parseBoxShadow(style);\r\n const marginBottom = shadowStyle.shadowOffsetY + (shadowStyle.shadowBlur * 2);\r\n const marginRight = shadowStyle.shadowOffsetX + (shadowStyle.shadowBlur * 2);\r\n const rectHeight = style.paddingTop + style.fontSize + style.paddingBottom;\r\n const rectStrokeWidth = 1;\r\n const c = document.createElement('canvas');\r\n c.height = rectHeight + marginBottom;\r\n const ctx = c.getContext('2d')!;\r\n ctx.font = style.fontSize + 'px Roboto';\r\n const textWidth = getTextWidth(ctx, style, text);\r\n const rectWidth = style.paddingLeft + textWidth + style.paddingRight;\r\n ctx.canvas.width = style.paddingLeft + textWidth + style.paddingRight + marginRight + (rectStrokeWidth * 2);\r\n ctx.font = style.fontSize + 'px Roboto'; \r\n\r\n ctx.rect(0, 0, rectWidth, rectHeight);\r\n ctx.save();\r\n ctx.fillStyle = style.backgroundColor;\r\n ctx.strokeStyle = style.borderColor;\r\n ctx.shadowColor = shadowStyle.shadowColor;\r\n ctx.shadowBlur = shadowStyle.shadowBlur;\r\n ctx.shadowOffsetX = shadowStyle.shadowOffsetX;\r\n ctx.shadowOffsetY = shadowStyle.shadowOffsetY;\r\n ctx.fill();\r\n ctx.stroke();\r\n ctx.restore();\r\n ctx.fillStyle = style.color;\r\n ctx.fillText(text, style.paddingLeft, (style.paddingTop * .75) + style.fontSize);\r\n img.src = c.toDataURL();\r\n \r\n return img;\r\n }\r\n ","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport moment from 'moment';\r\nimport React from 'react';\r\nimport DayPickerInput from 'react-day-picker/DayPickerInput';\r\nimport { setPanelDateFilter } from '../../../actions/panels';\r\nimport { DateBoundary, DateFilter, DateIncrementType } from '../../../models/panel/Date';\r\nimport { Panel as PanelModel } from '../../../models/panel/Panel';\r\nimport PopupBox from '../../Other/PopupBox/PopupBox';\r\nimport 'react-day-picker/lib/style.css';\r\nimport './CustomDateRangePicker.css';\r\n\r\ninterface Props { \r\n dispatch: any;\r\n panel: PanelModel;\r\n parentDomRect: DOMRect;\r\n toggleCustomDateRangeBox: (show?: boolean) => any;\r\n}\r\n\r\ninterface State { \r\n startDateInput: string;\r\n startDateValid: boolean;\r\n endDateValid: boolean;\r\n endDateInput: string;\r\n}\r\n\r\nenum DateInputType {\r\n Start = 1,\r\n End = 2\r\n}\r\n\r\n\r\n\r\nexport default class CustomDateRangePicker extends React.PureComponent {\r\n private className = 'panel-custom-date-range';\r\n private noDateFilter: DateFilter = { dateIncrementType: DateIncrementType.NONE, increment: 0 };\r\n private anytime: DateBoundary = { display: 'Anytime', start: this.noDateFilter, end: this.noDateFilter };\r\n private dateFormat = 'YYYY-MM-DD';\r\n private focusPoller: any;\r\n \r\n constructor(props: Props) {\r\n super(props);\r\n this.state = {\r\n endDateInput: props.panel.dateFilter.end.date ? moment(props.panel.dateFilter.end.date).format(this.dateFormat) : '',\r\n endDateValid: true,\r\n startDateInput: props.panel.dateFilter.start.date ? moment(props.panel.dateFilter.start.date).format(this.dateFormat) : '',\r\n startDateValid: true\r\n }\r\n }\r\n\r\n public render() {\r\n const { panel, parentDomRect } = this.props;\r\n const { startDateValid, endDateValid, startDateInput, endDateInput } = this.state;\r\n const c = this.className;\r\n const b = `${c}-input-container`;\r\n const startDateClasses = `${b} ${c}-input-container-start ${startDateValid ? '' : 'invalid'}`;\r\n const endDateClasses = `${b} ${c}-input-container-end ${endDateValid ? '' : 'invalid'}`;\r\n\r\n return (\r\n \r\n
\r\n\r\n x\r\n
\r\n\r\n {/* Start date */}\r\n
\r\n \r\n
\r\n\r\n to\r\n\r\n {/* End date */}\r\n
\r\n \r\n
\r\n\r\n
\r\n
\r\n \r\n );\r\n }\r\n\r\n /*\r\n * Not ideal, but the date picker doesn't properly fire onBlur()\r\n * events after a calendar date is selected, so poll for DOM focus\r\n * changes 4x a second to see if focus has been lost. If it's changed,\r\n * hide the element.\r\n */\r\n private pollForFocusOut = () => {\r\n if (this.focusPoller) {\r\n clearTimeout(this.focusPoller);\r\n }\r\n\r\n this.focusPoller = setTimeout(() => {\r\n const active = document.activeElement;\r\n if (active) {\r\n const picker = document.querySelector('.DayPickerInput-Overlay');\r\n if (!picker && active.tagName === 'BODY') {\r\n this.closeCustomDateRangeBox();\r\n } else {\r\n this.pollForFocusOut();\r\n }\r\n }\r\n }, 300)\r\n }\r\n\r\n /*\r\n * Updates the store with a DateBoundary object based on current input.\r\n */\r\n private setDateBoundary = (startDate: DateFilter, endDate: DateFilter) => {\r\n const { panel, dispatch } = this.props;\r\n const dateBoundary: DateBoundary = {\r\n display: `${startDate.date!.toLocaleDateString()} - ${endDate.date!.toLocaleDateString()}`,\r\n end: { date: endDate.date, dateIncrementType: DateIncrementType.SPECIFIC },\r\n start: { date: startDate.date, dateIncrementType: DateIncrementType.SPECIFIC }\r\n };\r\n dispatch(setPanelDateFilter(panel.index, dateBoundary));\r\n }\r\n\r\n /*\r\n * Determines whether the current input is a valid date.\r\n */\r\n private validateDateString = (input: string) => {\r\n let isValid = false;\r\n const date = new Date(input);\r\n const splitter = \r\n input.indexOf('/') > -1 ? '/' : \r\n input.indexOf('-') > -1 ? '-' :\r\n input.indexOf('.') > -1 ? '.' : '';\r\n const split = input.split(splitter).filter((s: string) => s !== '');\r\n\r\n if (!splitter) {\r\n return { date, isValid: false };\r\n }\r\n if (date) {\r\n const momentDate = moment(date);\r\n isValid = momentDate.isValid() && momentDate.year() > 1990 && split.length === 3 && split[2].length === 4 ? true : false;\r\n }\r\n return { date, isValid };\r\n }\r\n\r\n /*\r\n * Handles changes to inputs.\r\n */\r\n private handleDateChange = (type: DateInputType, selectedDay: Date, modifiers: any, dayPickerInput: any) => {\r\n const input: string = dayPickerInput.input.value;\r\n let updateDate = true;\r\n\r\n // If the selected date was not valid\r\n if (!selectedDay) {\r\n const { date, isValid } = this.validateDateString(input);\r\n selectedDay = date;\r\n updateDate = isValid;\r\n }\r\n if (type === DateInputType.Start) {\r\n this.handleStartDateChange(updateDate, selectedDay, input);\r\n this.setState({ startDateInput: input });\r\n }\r\n else { \r\n this.handleEndDateChange(updateDate, selectedDay, input);\r\n this.setState({ endDateInput: input });\r\n }\r\n }\r\n\r\n /*\r\n * Handles changes to the end date.\r\n */\r\n private handleEndDateChange = (updateDate: boolean, date: Date, dateInputString: string) => {\r\n const { panel, dispatch } = this.props;\r\n const { startDateInput } = this.state;\r\n\r\n if (updateDate && date) {\r\n let startDate: Date = panel.dateFilter.start.date!;\r\n\r\n if (!startDate) {\r\n const momentDate = moment(startDateInput);\r\n startDate = momentDate.isValid() ? momentDate.toDate() : moment(date).add(-1, 'd').toDate();\r\n this.setState({ startDateInput: moment(startDate).format(this.dateFormat) });\r\n }\r\n const startDateFilter: DateFilter = { date: startDate, dateIncrementType: DateIncrementType.SPECIFIC };\r\n const endDateFilter: DateFilter = { date, dateIncrementType: DateIncrementType.SPECIFIC };\r\n this.setDateBoundary(startDateFilter, endDateFilter);\r\n this.setState({ endDateValid: true });\r\n }\r\n else if (dateInputString.length > 0) {\r\n this.setState({ endDateValid: false });\r\n dispatch(setPanelDateFilter(panel.index, this.anytime));\r\n }\r\n else {\r\n this.setState({ startDateValid: true });\r\n dispatch(setPanelDateFilter(panel.index, this.anytime));\r\n }\r\n }\r\n\r\n /*\r\n * Handles changes to the start date.\r\n */\r\n private handleStartDateChange = (updateDate: boolean, date: Date, dateInputString: string) => {\r\n const { panel, dispatch } = this.props;\r\n const { endDateInput } = this.state;\r\n\r\n if (updateDate && date) {\r\n let endDate: Date = panel.dateFilter.end.date!;\r\n\r\n if (!endDate) {\r\n const momentDate = moment(endDateInput);\r\n endDate = momentDate.isValid() ? momentDate.toDate() : moment(date).add(1, 'd').toDate();\r\n this.setState({ endDateInput: moment(endDate).format(this.dateFormat) });\r\n }\r\n const startDateFilter: DateFilter = { date, dateIncrementType: DateIncrementType.SPECIFIC };\r\n const endDateFilter: DateFilter = { date: endDate, dateIncrementType: DateIncrementType.SPECIFIC };\r\n this.setDateBoundary(startDateFilter, endDateFilter);\r\n this.setState({ startDateValid: true });\r\n }\r\n else if (dateInputString.length > 0) {\r\n this.setState({ startDateValid: false });\r\n dispatch(setPanelDateFilter(panel.index, this.anytime));\r\n }\r\n else {\r\n this.setState({ startDateValid: true });\r\n dispatch(setPanelDateFilter(panel.index, this.anytime));\r\n }\r\n }\r\n\r\n /*\r\n * Custom date formatter sent to the date picker.\r\n */\r\n private formatDate = (date: Date): string => moment(date).format(this.dateFormat);\r\n\r\n /*\r\n * Handles 'x' clicked if user wants to clear the date, which resets\r\n * the filter to 'Anytime'.\r\n */\r\n private handleClearClick = () => {\r\n const { panel, dispatch } = this.props;\r\n dispatch(setPanelDateFilter(panel.index, this.anytime));\r\n this.closeCustomDateRangeBox();\r\n }\r\n\r\n /* \r\n * Closes the range box and clears any currently running poll.\r\n */\r\n private closeCustomDateRangeBox = () => {\r\n const { toggleCustomDateRangeBox } = this.props;\r\n if (this.focusPoller) {\r\n clearTimeout(this.focusPoller);\r\n }\r\n toggleCustomDateRangeBox(false);\r\n }\r\n}","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport { format } from 'd3-format';\r\n\r\nexport const formatLargeNumber = format('.2s');\r\nexport const formatSmallNumber = format(',');","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport React from 'react';\r\nimport { createPortal } from 'react-dom';\r\nimport './PopupBox.css';\r\n\r\nexport interface Props {\r\n forceMouseInOnMount?: boolean;\r\n parentDomRect?: DOMRect;\r\n toggle: () => any;\r\n style?: any;\r\n}\r\n\r\ninterface State {\r\n shown: boolean;\r\n}\r\n\r\nexport default class PopupBox extends React.PureComponent {\r\n private className = 'popup-box';\r\n private mouseOut = true;\r\n constructor(props: Props) {\r\n super(props);\r\n this.state = {\r\n shown: false\r\n }\r\n }\r\n\r\n public componentDidMount() {\r\n this.setPopupBoxFocus();\r\n setTimeout(() => this.setState({ shown: true }), 10)\r\n }\r\n\r\n public render() {\r\n const { parentDomRect, children } = this.props;\r\n const c = this.className;\r\n const body = document.body;\r\n const classes = [ c, (!this.state.shown ? 'appear' : '') ];\r\n const style = parentDomRect \r\n ? { ...this.props.style, bottom: parentDomRect.bottom, left: parentDomRect.left, top: parentDomRect.top } \r\n : { bottom: 100, left: 0, top: 100 };\r\n\r\n return (\r\n createPortal(\r\n
\r\n
\r\n {children}\r\n
\r\n
\r\n , body)\r\n );\r\n }\r\n\r\n private handleMouseEnter = () => this.mouseOut = false;\r\n\r\n private handleMouseLeave = () => this.mouseOut = true;\r\n\r\n private handleBlur = (e: React.SyntheticEvent) => {\r\n if (this.mouseOut) { this.props.toggle(); }\r\n }\r\n\r\n private triggerClick = (el: any) => {\r\n if (el) { el.click(); }\r\n }\r\n\r\n private setPopupBoxFocus = () => {\r\n const popupBoxElem: any = document.getElementsByClassName(this.className);\r\n if (popupBoxElem[0] && popupBoxElem[0].focus) {\r\n if (this.props.forceMouseInOnMount) {\r\n this.mouseOut = false;\r\n }\r\n popupBoxElem[0].focus();\r\n }\r\n }\r\n}","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport React from 'react';\r\nimport './CheckboxSlider.css';\r\n\r\ninterface Props {\r\n checked: boolean;\r\n onClick: () => any;\r\n}\r\n\r\nconst className = 'checkbox-slider';\r\n\r\nexport default class CheckboxSlider extends React.PureComponent {\r\n constructor(props: Props) {\r\n super(props);\r\n }\r\n\r\n public render() {\r\n return (\r\n
\r\n \r\n
\r\n );\r\n }\r\n}","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport React from 'react';\r\nimport { FiBarChart2 } from 'react-icons/fi';\r\nimport { Bar, BarChart, LabelList, ResponsiveContainer, XAxis } from 'recharts';\r\nimport { Concept, PatientCountPerYear, PatientCountPerYearGrouped, DisplayablePatientCountPerYear } from '../../../models/concept/Concept';\r\nimport { formatLargeNumber, formatSmallNumber } from '../../../utils/formatNumber';\r\nimport PopupBox from '../../Other/PopupBox/PopupBox';\r\nimport TextareaAutosize from 'react-textarea-autosize';\r\nimport CheckboxSlider from '../../Other/CheckboxSlider/CheckboxSlider';\r\nimport './LearnMoreButton.css';\r\n\r\ninterface Props {\r\n concept: Concept;\r\n}\r\n\r\ninterface State {\r\n DOMRect?: DOMRect;\r\n showInfoBox: boolean;\r\n ShowAllYears: boolean;\r\n}\r\n\r\nexport default class LearnMoreButton extends React.PureComponent {\r\n private className = 'concept-tree-learn-more';\r\n private startYear = 1995;\r\n private currYear = new Date().getFullYear();\r\n private height = 200;\r\n private margin = {top: 20, right: 20, left: 20, bottom: 20};\r\n private minWidth = 300;\r\n private maxWidth = 1000;\r\n private hasOutOfBoundYears = false;\r\n constructor(props: Props) {\r\n super(props);\r\n this.state = {\r\n showInfoBox: false,\r\n ShowAllYears: false\r\n }\r\n }\r\n\r\n public componentDidMount() {\r\n const { concept } = this.props;\r\n\r\n if (concept.uiDisplayPatientCountByYear) {\r\n const data = concept.uiDisplayPatientCountByYear;\r\n const outOfBounds = data.find((d) => !d.year || d.year < this.startYear || d.year > this.currYear)\r\n if (outOfBounds) {\r\n this.hasOutOfBoundYears = true;\r\n }\r\n }\r\n }\r\n\r\n public render(): any {\r\n const { showInfoBox } = this.state;\r\n const c = this.className;\r\n\r\n return (\r\n \r\n \r\n
\r\n Learn More\r\n\r\n {showInfoBox &&\r\n this.getPopupContent()\r\n }\r\n
\r\n
\r\n ) \r\n }\r\n\r\n private getPopupContent = () => {\r\n const { concept } = this.props;\r\n const { ShowAllYears, DOMRect } = this.state;\r\n const c = this.className;\r\n const classes = [ c ];\r\n const countsByYear = concept.uiDisplayPatientCountByYear;\r\n const data = this.getYearData();\r\n const calcWidth = countsByYear ? (data.length * 40) : this.minWidth;\r\n const width = calcWidth < this.minWidth \r\n ? this.minWidth : calcWidth > this.maxWidth \r\n ? this.maxWidth : calcWidth;\r\n\r\n const scrollLeft = window.pageXOffset || document.documentElement.scrollLeft;\r\n const scrollTop = window.pageYOffset || document.documentElement.scrollTop;\r\n\r\n if (DOMRect && (data.length || concept.uiDisplayTooltip)) {\r\n const pos = { \r\n top: DOMRect.top + scrollTop, \r\n left: DOMRect.left + scrollLeft, \r\n clientHeight: document.documentElement.clientHeight \r\n };\r\n if (pos.clientHeight - pos.top < 250) { classes.push('offset-bottom'); }\r\n else if (pos.top < 250) { classes.push('offset-top'); }\r\n }\r\n\r\n return (\r\n \r\n
\r\n
\r\n

{concept.uiDisplayName}

\r\n

\r\n {concept.universalId &&\r\n {concept.universalId} \r\n }\r\n

\r\n
\r\n
\r\n\r\n {/* Counts by Year chart */}\r\n {countsByYear &&\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n }\r\n\r\n {this.hasOutOfBoundYears && \r\n
\r\n
\r\n Show all years\r\n
\r\n \r\n
\r\n }\r\n\r\n {countsByYear &&
}\r\n\r\n {/* Tooltip / Info */}\r\n {concept.uiDisplayTooltip &&\r\n
\r\n \r\n \r\n
\r\n }\r\n {!concept.uiDisplayTooltip &&\r\n

\r\n No information provided for this concept\r\n

\r\n }\r\n\r\n
\r\n \r\n );\r\n }\r\n\r\n private handleClick = (e: any) => { \r\n if (e.target.className === e.currentTarget.className || !this.state.showInfoBox) {\r\n const domRect: DOMRect = e.target.getBoundingClientRect();\r\n this.setState({ showInfoBox: !this.state.showInfoBox, DOMRect: domRect });\r\n }\r\n }\r\n\r\n private handleShowAllYearsClick = () => {\r\n this.setState({ ShowAllYears: !this.state.ShowAllYears });\r\n }\r\n\r\n private handleInfoBoxClickedOutside = () => {\r\n this.setState({ showInfoBox: !this.state.showInfoBox });\r\n }\r\n\r\n private getYearData = () => {\r\n const { concept } = this.props;\r\n const formatterThreshold = 10000;\r\n\r\n if (concept.uiDisplayPatientCountByYear) {\r\n let data: DisplayablePatientCountPerYear[] = [];\r\n if (!this.state.ShowAllYears) {\r\n data = this.groupYears(concept.uiDisplayPatientCountByYear);\r\n } else {\r\n data = concept.uiDisplayPatientCountByYear;\r\n }\r\n return data.map((p: DisplayablePatientCountPerYear) => ({ \r\n ...p, \r\n label: !p.year ? '?' :\r\n p.patientCount >= formatterThreshold \r\n ? formatLargeNumber(p.patientCount)\r\n : formatSmallNumber(p.patientCount)\r\n }))\r\n }\r\n return [];\r\n }\r\n\r\n private groupYears = (ungrouped: PatientCountPerYear[]): PatientCountPerYearGrouped[] => {\r\n const output: PatientCountPerYearGrouped[] = [];\r\n const nullYear: PatientCountPerYearGrouped = { year: '?', patientCount: 0 };\r\n const startYear: PatientCountPerYearGrouped = { year: `<${this.startYear}`, patientCount: 0 };\r\n const greaterThanCurrentYear: PatientCountPerYearGrouped = { year: `>${this.currYear}`, patientCount: 0 };\r\n\r\n for (const bar of ungrouped) {\r\n if (!bar.year) { nullYear.patientCount += bar.patientCount; }\r\n else if (bar.year < this.startYear) { startYear.patientCount += bar.patientCount; }\r\n else if (bar.year > this.currYear) { greaterThanCurrentYear.patientCount += bar.patientCount; }\r\n else { output.push({ year: `${bar.year}`, patientCount: bar.patientCount }); }\r\n }\r\n\r\n if (startYear.patientCount) { output.splice(0, 0, startYear); }\r\n if (nullYear.patientCount) { output.splice(0, 0, nullYear); }\r\n if (greaterThanCurrentYear.patientCount) { output.push(greaterThanCurrentYear); }\r\n return output;\r\n }\r\n}\r\n","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport React from 'react';\r\nimport { ConnectDragPreview, ConnectDragSource, DropTargetMonitor, ConnectDropTarget, DropTarget, DropTargetConnector } from 'react-dnd'\r\nimport { Concept } from '../../../models/concept/Concept';\r\nimport { MdAccessTime } from 'react-icons/md';\r\nimport { GoPerson } from 'react-icons/go';\r\nimport { handleReparentDrop } from '../../../actions/admin/concept';\r\n\r\ninterface DndProps {\r\n canDrop?: boolean;\r\n connectDragSource?: ConnectDragSource;\r\n connectDragPreview?: ConnectDragPreview;\r\n connectDropTarget?: ConnectDropTarget;\r\n isDragging?: boolean;\r\n isDropped?: boolean;\r\n isOver?: boolean;\r\n}\r\n\r\ninterface OwnProps {\r\n allowReparent: boolean;\r\n concept: Concept;\r\n dispatch: any;\r\n}\r\n\r\ntype Props = DndProps & OwnProps\r\n\r\nconst conceptNodeTarget = {\r\n drop(props: Props, monitor: DropTargetMonitor, component: any) {\r\n const { dispatch } = props;\r\n const concept: Concept = monitor.getItem();\r\n dispatch(handleReparentDrop(concept, props.concept.id));\r\n },\r\n canDrop(props: Props, monitor: DropTargetMonitor) {\r\n const con = (monitor.getItem() as Concept);\r\n return (\r\n props.allowReparent && \r\n con !== props.concept && \r\n !con.isExtension && \r\n !props.concept.isExtension &&\r\n con.id !== props.concept.parentId\r\n );\r\n\r\n }\r\n}\r\n\r\nconst collectDrop = (connect: DropTargetConnector, monitor: DropTargetMonitor) => {\r\n return ({\r\n canDrop: monitor.canDrop(),\r\n connectDropTarget: connect.dropTarget(),\r\n isOver: monitor.isOver({ shallow: true })\r\n });\r\n};\r\n\r\nclass ConceptTreeNodeTextWrapper extends React.PureComponent {\r\n constructor(props: Props) {\r\n super(props);\r\n }\r\n\r\n public render() {\r\n const { concept, connectDropTarget, canDrop, isOver } = this.props;\r\n const c = 'concept-tree-node';\r\n const mainTextClasses = [ `${c}-text-wrapper`, (canDrop && isOver ? 'can-drop': '') ];\r\n const nodeTextClasses = [ `${c}-text` ];\r\n const showCount = (concept.uiDisplayPatientCount === 0 || concept.uiDisplayPatientCount) && concept.uiDisplayPatientCount > -1;\r\n const icon = concept.isEncounterBased \r\n ? \r\n : ;\r\n\r\n if (concept.uiDisplayPatientCount === 0) { nodeTextClasses.push(`${c}-text-nopatients`); }\r\n \r\n return (\r\n connectDropTarget &&\r\n connectDropTarget(\r\n
\r\n {icon}\r\n {concept.uiDisplayName}\r\n {concept.uiDisplaySubtext &&\r\n {concept.uiDisplaySubtext}}\r\n {showCount && \r\n \r\n \r\n {concept.uiDisplayPatientCount!.toLocaleString()}\r\n \r\n }\r\n {concept.eventTypeId &&\r\n \r\n {concept.uiDisplayEventName}\r\n \r\n This Concept is a type of {concept.uiDisplayEventName}\r\n . You can use these to create special queries linked specifically by the \r\n Same {concept.uiDisplayEventName}.\r\n \r\n \r\n }\r\n
\r\n )\r\n );\r\n }\r\n}\r\n\r\nconst ConceptTreeNodeTextWrapperContainer = DropTarget('CONCEPT', conceptNodeTarget, collectDrop)(ConceptTreeNodeTextWrapper);\r\nexport default ConceptTreeNodeTextWrapperContainer;","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport React from 'react';\r\nimport { ConnectDragPreview, ConnectDragSource, DragSource, DragSourceConnector, DragSourceMonitor, ConnectDropTarget } from 'react-dnd'\r\nimport { Collapse } from 'reactstrap';\r\nimport { ConceptMap } from '../../../models/state/AppState';\r\nimport { Concept } from '../../../models/concept/Concept';\r\nimport getDragPreview from '../../../utils/getDragPreview';\r\nimport LearnMoreButton from './LearnMoreButton';\r\nimport ConceptTreeNodeText from './ConceptTreeNodeText';\r\nimport { handleConceptClick, fetchConceptChildrenIfNeeded } from '../../../actions/concepts';\r\nimport LoaderIcon from '../../Other/LoaderIcon/LoaderIcon';\r\n\r\ninterface DndProps {\r\n canDrop?: boolean;\r\n connectDragSource?: ConnectDragSource;\r\n connectDragPreview?: ConnectDragPreview;\r\n connectDropTarget?: ConnectDropTarget;\r\n isDragging?: boolean;\r\n isDropped?: boolean;\r\n isOver?: boolean;\r\n}\r\n\r\ninterface OwnProps {\r\n allowReparent: boolean;\r\n allowRerender: Set;\r\n concept: Concept;\r\n concepts: ConceptMap;\r\n dispatch: any;\r\n parentShown: boolean;\r\n selectedId: string;\r\n}\r\n\r\ntype Props = DndProps & OwnProps\r\n\r\n// Object to return to the connector when drag begins. This will\r\n// be sent to the panel on the drop() event.\r\nconst conceptNodeSource = {\r\n beginDrag(props: Props) {\r\n return props.concept;\r\n }\r\n}\r\n\r\nconst collectDrag = (connect: DragSourceConnector, monitor: DragSourceMonitor) => {\r\n return ({\r\n connectDragPreview: connect.dragPreview(),\r\n connectDragSource: connect.dragSource(),\r\n isDragging: monitor.isDragging()\r\n });\r\n};\r\n\r\nclass ConceptTreeNode extends React.PureComponent {\r\n constructor(props: Props) {\r\n super(props);\r\n }\r\n\r\n public componentDidMount() {\r\n const { connectDragPreview } = this.props;\r\n if (connectDragPreview) {\r\n // Create the drag image.\r\n // Note: HTML5 (out of the box) can only\r\n // display images/canvas, so we are converting\r\n // text and styles to a canvas image.\r\n const dragPreview = getDragPreview(this.props.concept.uiDisplayName);\r\n connectDragPreview(dragPreview);\r\n }\r\n }\r\n\r\n public render() {\r\n const { allowReparent, allowRerender, concept, concepts, dispatch, parentShown, selectedId, connectDragSource } = this.props;\r\n const c = 'concept-tree-node';\r\n const arrowClasses = [ `${c}-arrow` ];\r\n const mainClasses = [ c ];\r\n\r\n if (concept.id === selectedId) { mainClasses.push(`selected`); }\r\n if (concept.unsaved) { mainClasses.push(`unsaved`); }\r\n\r\n // Set arrow state\r\n if (concept.isParent) {\r\n if (concept.isOpen && concept.childrenIds) {\r\n arrowClasses.push(`${c}-arrow-expanded`);\r\n }\r\n } else {\r\n arrowClasses.push(`${c}-arrow-hidden`);\r\n }\r\n\r\n return (\r\n connectDragSource &&\r\n connectDragSource(\r\n
    \r\n
  • \r\n
    \r\n\r\n {/* Drilldown arrow */}\r\n
    \r\n {!concept.isFetching &&\r\n \r\n }\r\n\r\n {/* Loader, shown when calling server */}\r\n {concept.isFetching &&\r\n \r\n }\r\n\r\n
    \r\n\r\n {/* Main Text */}\r\n \r\n\r\n {/* Learn More */}\r\n \r\n
    \r\n
    \r\n\r\n {/* Collapse wrapper for children */}\r\n {concept.isParent && parentShown && (\r\n \r\n {concept.childrenIds && \r\n Array.from(concept.childrenIds).map((childId) => (\r\n \r\n ))}\r\n \r\n )}\r\n
    \r\n
  • \r\n
\r\n )\r\n );\r\n }\r\n\r\n private handleClick = (e: any) => {\r\n const { dispatch, concept } = this.props;\r\n if (this.arrowWasClicked(e)) { return; }\r\n dispatch(handleConceptClick(concept));\r\n }\r\n\r\n private handleArrowClick = () => {\r\n const { dispatch, concept } = this.props;\r\n dispatch(fetchConceptChildrenIfNeeded(concept));\r\n }\r\n\r\n private arrowWasClicked = (e: any): boolean => {\r\n if (e && e.target && e.target.className && typeof(e.target.className) === 'string') {\r\n return e.target.className.includes('arrow');\r\n }\r\n return false;\r\n };\r\n}\r\n\r\nconst ConceptTreeNodeContainer = DragSource('CONCEPT', conceptNodeSource, collectDrag)(ConceptTreeNode);\r\nexport default ConceptTreeNodeContainer;","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport React from 'react';\r\nimport { Dispatch } from 'redux';\r\nimport { ConceptMap } from '../../../models/state/AppState';\r\nimport { Concept } from '../../../models/concept/Concept';\r\nimport ConceptTreeNode from './ConceptTreeNode';\r\nimport './ConceptTree.css';\r\n\r\ninterface Props {\r\n allowReparent: boolean;\r\n allowRerender: Set;\r\n dispatch: Dispatch\r\n roots: string[];\r\n tree: ConceptMap;\r\n selectedId: string;\r\n}\r\n\r\nexport default class ConceptTree extends React.Component {\r\n constructor(props: Props) {\r\n super(props);\r\n }\r\n\r\n public render() {\r\n const { tree, allowReparent, allowRerender, dispatch, selectedId } = this.props;\r\n const roots = this.props.roots\r\n .map(id => tree.get(id)!)\r\n .sort((a: Concept, b: Concept) => a.uiDisplayName > b.uiDisplayName ? 1 : -1);\r\n\r\n return (\r\n
\r\n {roots.map((concept: Concept) => {\r\n if (!concept) { return null; }\r\n return (\r\n \r\n )})}\r\n
\r\n );\r\n }\r\n}\r\n\r\n","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport React from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { Dispatch } from 'redux';\r\nimport ConceptSearchBox from '../../components/FindPatients/ConceptSearchBox/ConceptSearchBox';\r\nimport ConceptTree from '../../components/FindPatients/ConceptTree/ConceptTree';\r\nimport { AppState, ConceptsSearchState, ConceptsState } from '../../models/state/AppState';\r\nimport { Routes } from '../../models/state/GeneralUiState';\r\n\r\ninterface StateProps {\r\n allowReparent: boolean;\r\n concepts: ConceptsState;\r\n conceptSearch: ConceptsSearchState;\r\n}\r\n\r\ninterface DispatchProps {\r\n dispatch: any;\r\n}\r\n\r\ninterface OwnProps { }\r\n\r\ntype Props = StateProps & DispatchProps & OwnProps;\r\n\r\nclass ConceptTreeColumn extends React.Component {\r\n constructor(props: Props) {\r\n super(props);\r\n }\r\n\r\n public render() {\r\n const { allowReparent, concepts, conceptSearch, dispatch } = this.props;\r\n const tree = this.props.concepts.currentTree;\r\n const roots = !concepts.showSearchTree\r\n ? concepts.roots\r\n : concepts.roots.filter((root: string) => concepts.searchTree.has(root));\r\n\r\n return (\r\n
\r\n \r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state: AppState): StateProps => {\r\n return {\r\n allowReparent: state.generalUi.currentRoute === Routes.AdminPanel,\r\n conceptSearch: state.conceptSearch,\r\n concepts: state.concepts\r\n };\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch: Dispatch): DispatchProps => {\r\n return {\r\n dispatch\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(ConceptTreeColumn);","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport React from 'react';\r\nimport { togglePanelFilter } from '../../../actions/panelFilter';\r\nimport { PanelFilter as PanelFilterModel } from '../../../models/panel/PanelFilter';\r\nimport CheckboxSlider from '../../Other/CheckboxSlider/CheckboxSlider';\r\nimport PopupBox from '../../Other/PopupBox/PopupBox';\r\n\r\nimport './PanelFilterGroup.css';\r\n\r\ninterface Props {\r\n dispatch: any;\r\n filters: PanelFilterModel[];\r\n}\r\n\r\ninterface State {\r\n DOMRect?: DOMRect;\r\n shouldShowFilterSelectionBox: boolean;\r\n}\r\n\r\nexport default class PanelFilter extends React.PureComponent {\r\n private className = 'panel-filter';\r\n private mouseOutBubbleUpMillisecondThreshold = 150;\r\n private lastMouseOutClickTime: number = 0;\r\n\r\n constructor(props: Props) {\r\n super(props);\r\n this.state = {\r\n shouldShowFilterSelectionBox: false\r\n }\r\n }\r\n\r\n public handleToggleClick = (e: any) => {\r\n const { shouldShowFilterSelectionBox } = this.state;\r\n const timeSinceMouseOutClicked = (new Date().getTime() - this.lastMouseOutClickTime);\r\n\r\n if (e.currentTarget === e.target && timeSinceMouseOutClicked > this.mouseOutBubbleUpMillisecondThreshold) {\r\n const domRect: DOMRect = e.target.getBoundingClientRect();\r\n this.setState({ DOMRect: domRect, shouldShowFilterSelectionBox: !shouldShowFilterSelectionBox });\r\n }\r\n }\r\n\r\n public render() {\r\n const { shouldShowFilterSelectionBox, DOMRect } = this.state;\r\n const { filters } = this.props;\r\n const c = this.className;\r\n \r\n return (\r\n
\r\n \r\n Limit to\r\n {shouldShowFilterSelectionBox &&\r\n \r\n
\r\n
\r\n

\r\n The options below allow you to add criteria to your query without \r\n dragging additional Concepts over. These are just for convenience, and are completely optional.\r\n

\r\n
\r\n
\r\n {filters.length === 0 &&\r\n
\r\n It looks like your administrator hasn't added these yet!\r\n
\r\n }\r\n {filters.map((f: PanelFilterModel) => {\r\n return (\r\n
\r\n
\r\n
{f.uiDisplayText}
\r\n \r\n
\r\n
\r\n

{f.uiDisplayDescription}

\r\n
\r\n
\r\n )})}\r\n
\r\n
\r\n \r\n }\r\n
\r\n {filters\r\n .filter((f: PanelFilterModel) => f.isActive)\r\n .map((f: PanelFilterModel) => (\r\n \r\n {f.uiDisplayText}\r\n \r\n ))}\r\n
\r\n );\r\n }\r\n\r\n private handleFilterSelectionBoxClose = () => {\r\n this.lastMouseOutClickTime = new Date().getTime();\r\n this.setState({ shouldShowFilterSelectionBox: false });\r\n }\r\n\r\n private handlePanelFilterItemClick = (filter: PanelFilterModel) => {\r\n const { dispatch } = this.props;\r\n dispatch(togglePanelFilter(filter, false));\r\n }\r\n\r\n private handleSelectionBoxItemClick = (filter: PanelFilterModel) => {\r\n const { dispatch } = this.props;\r\n dispatch(togglePanelFilter(filter, !filter.isActive));\r\n }\r\n}","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport { Concept, ConceptSpecialization, ConceptSpecializationGroup } from '../models/concept/Concept';\r\nimport { DateBoundary } from '../models/panel/Date';\r\nimport { NumericFilter } from '../models/panel/NumericFilter';\r\nimport { SubPanelJoinSequence } from '../models/panel/SubPanel';\r\nimport { Panel } from '../models/panel/Panel';\r\n\r\nexport const ADD_PANEL_ITEM = 'ADD_PANEL_ITEM';\r\nexport const REMOVE_PANEL_ITEM = 'REMOVE_PANEL_ITEM';\r\nexport const HIDE_PANEL_ITEM = 'HIDE_PANEL_ITEM';\r\nexport const SELECT_CONCEPT_SPECIALIZATION = 'SELECT_CONCEPT_SPECIALIZATION';\r\nexport const DESELECT_CONCEPT_SPECIALIZATION = 'DESELECT_CONCEPT_SPECIALIZATION';\r\nexport const SET_PANEL_INCLUSION = 'SET_PANEL_INCLUSION';\r\nexport const SET_SUBPANEL_INCLUSION = 'SET_SUBPANEL_INCLUSION';\r\nexport const SET_SUBPANEL_MINCOUNT = 'SET_SUBPANEL_MINCOUNT';\r\nexport const SET_SUBPANEL_JOIN_SEQUENCE = 'SET_SUBPANEL_JOIN_SEQUENCE';\r\nexport const SET_PANEL_DATE_FILTER = 'SET_PANEL_DATE_FILTER';\r\nexport const SET_PANEL_ITEM_NUMERIC_FILTER = 'SET_PANEL_ITEM_NUMERIC_FILTER';\r\nexport const RESET_PANELS = 'RESET_PANELS';\r\nexport const SET_PANELS = 'SET_PANELS';\r\n\r\nexport interface PanelItemAction {\r\n type: string;\r\n concept: Concept;\r\n conceptSpecialization?: ConceptSpecialization;\r\n conceptSpecializationGroup?: ConceptSpecializationGroup;\r\n panelIndex: number;\r\n subPanelIndex: number;\r\n panelItemIndex?: number;\r\n numericFilter?: NumericFilter;\r\n}\r\n\r\nexport interface PanelAction {\r\n type: string;\r\n dateFilter?: DateBoundary;\r\n isInclusionCriteria?: boolean;\r\n joinSequence?: SubPanelJoinSequence;\r\n minCount?: number;\r\n subPanelIndex?: number;\r\n panelIndex: number;\r\n panels?: Panel[];\r\n}\r\n\r\nexport const setPanelItemNumericFilter = (\r\n concept: Concept, \r\n panelIndex: number, \r\n subPanelIndex: number, \r\n panelItemIndex: number, \r\n numericFilter: NumericFilter\r\n): PanelItemAction => {\r\n return {\r\n concept,\r\n numericFilter,\r\n panelIndex,\r\n panelItemIndex,\r\n subPanelIndex,\r\n type: SET_PANEL_ITEM_NUMERIC_FILTER\r\n };\r\n};\r\n\r\nexport const addPanelItem = (concept: Concept, panelIndex: number, subPanelIndex: number): PanelItemAction => {\r\n return {\r\n concept,\r\n panelIndex,\r\n subPanelIndex,\r\n type: ADD_PANEL_ITEM\r\n };\r\n};\r\n\r\nexport const removePanelItem = (concept: Concept, panelIndex: number, subPanelIndex: number, panelItemIndex: number): PanelItemAction => {\r\n return {\r\n concept,\r\n panelIndex,\r\n panelItemIndex,\r\n subPanelIndex,\r\n type: REMOVE_PANEL_ITEM\r\n };\r\n};\r\n\r\nexport const hidePanelItem = (concept: Concept, panelIndex: number, subPanelIndex: number, panelItemIndex: number): PanelItemAction => {\r\n return {\r\n concept,\r\n panelIndex,\r\n panelItemIndex,\r\n subPanelIndex,\r\n type: HIDE_PANEL_ITEM\r\n };\r\n};\r\n\r\nexport const setPanelInclusion = (panelIndex: number, isInclusionCriteria: boolean): PanelAction => {\r\n return {\r\n isInclusionCriteria,\r\n panelIndex,\r\n type: SET_PANEL_INCLUSION\r\n };\r\n};\r\n\r\nexport const setSubPanelInclusion = (panelIndex: number, subPanelIndex: number, isInclusionCriteria: boolean): PanelAction => {\r\n return {\r\n isInclusionCriteria,\r\n panelIndex,\r\n subPanelIndex,\r\n type: SET_SUBPANEL_INCLUSION\r\n };\r\n};\r\n\r\nexport const setSubPanelCount = (panelIndex: number, subPanelIndex: number, minCount: number): PanelAction => {\r\n return {\r\n minCount,\r\n panelIndex,\r\n subPanelIndex,\r\n type: SET_SUBPANEL_MINCOUNT\r\n };\r\n}\r\n\r\nexport const setSubPanelJoinSequence = (panelIndex: number, subPanelIndex: number, joinSequence: SubPanelJoinSequence): PanelAction => {\r\n return {\r\n joinSequence,\r\n panelIndex,\r\n subPanelIndex,\r\n type: SET_SUBPANEL_JOIN_SEQUENCE\r\n };\r\n}\r\n\r\nexport const setPanelDateFilter = (panelIndex: number, dateFilter: DateBoundary): PanelAction => {\r\n return {\r\n dateFilter,\r\n panelIndex,\r\n type: SET_PANEL_DATE_FILTER\r\n };\r\n};\r\n\r\nexport const resetPanels = () => {\r\n return {\r\n type: RESET_PANELS\r\n }\r\n};\r\n\r\nexport const selectSpecialization = (concept: Concept, panelIndex: number, subPanelIndex: number, panelItemIndex: number, conceptSpecialization: ConceptSpecialization) => {\r\n return {\r\n concept,\r\n panelIndex,\r\n subPanelIndex,\r\n panelItemIndex,\r\n conceptSpecialization,\r\n type: SELECT_CONCEPT_SPECIALIZATION\r\n }\r\n};\r\n\r\nexport const deselectSpecialization = (concept: Concept, panelIndex: number, subPanelIndex: number, panelItemIndex: number, conceptSpecializationGroup: ConceptSpecializationGroup) => {\r\n return {\r\n concept,\r\n panelIndex,\r\n subPanelIndex,\r\n panelItemIndex,\r\n conceptSpecializationGroup,\r\n type: DESELECT_CONCEPT_SPECIALIZATION\r\n }\r\n};\r\n\r\nexport const setPanels = (panels: Panel[]) => {\r\n return {\r\n panels,\r\n type: SET_PANELS\r\n }\r\n};","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport React from 'react';\r\nimport { Dropdown, DropdownItem, DropdownMenu, DropdownToggle } from 'reactstrap';\r\nimport { setSubPanelCount } from '../../../actions/panels';\r\nimport { Panel as PanelModel } from '../../../models/panel/Panel';\r\n\r\ninterface Props {\r\n dispatch: any\r\n index: number,\r\n panel: PanelModel,\r\n}\r\n\r\ninterface State {\r\n dropdownOpen: boolean\r\n}\r\n\r\nexport default class CountDropdown extends React.Component {\r\n constructor(props: Props) {\r\n super(props);\r\n this.toggle = this.toggle.bind(this);\r\n this.selectItem = this.selectItem.bind(this);\r\n this.state = { dropdownOpen: false };\r\n }\r\n\r\n public shouldComponentUpdate(nextProps: Props, nextState: State) {\r\n const { panel, index } = this.props;\r\n const { dropdownOpen } = this.state;\r\n \r\n // Update the dropdown state changed\r\n if (dropdownOpen !== nextState.dropdownOpen) {\r\n return true;\r\n }\r\n // Update if the mincount is different\r\n else if (panel.subPanels[index].minimumCount !== nextProps.panel.subPanels[nextProps.index].minimumCount) {\r\n return true;\r\n }\r\n // Else don't update\r\n return false;\r\n }\r\n \r\n public toggle() {\r\n this.setState((prevState: any) => ({\r\n dropdownOpen: !prevState.dropdownOpen\r\n }));\r\n }\r\n\r\n public selectItem(item: any) {\r\n const { dispatch, index, panel } = this.props;\r\n const text: string = item.target.innerText;\r\n const val: number = +text.replace('At Least ','').replace('x','').trim();\r\n\r\n // Update state\r\n dispatch(setSubPanelCount(panel.index, index, val));\r\n }\r\n\r\n public render() {\r\n const { index, panel } = this.props;\r\n const { dropdownOpen } = this.state;\r\n const minCount = panel.subPanels[index].minimumCount;\r\n \r\n return (\r\n \r\n \r\n At Least {minCount}x\r\n \r\n \r\n {new Array(10).fill(null).map((val: any, i: number) => {\r\n const classes = `leaf-dropdown-item ${minCount === (i + 1) ? 'selected' : ''}`;\r\n return At Least {i + 1}x\r\n })}\r\n \r\n \r\n );\r\n }\r\n}","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport { DateBoundary, DateFilter, DateIncrementType } from '../../../models/panel/Date';\r\n\r\nexport const none: DateFilter = { dateIncrementType: DateIncrementType.NONE };\r\n\r\nexport const today: DateFilter = { dateIncrementType: DateIncrementType.NOW };\r\n\r\nexport const pastDates: DateBoundary[] = [\r\n { display: 'In Past 24 Hours', start: { increment: -24, dateIncrementType: DateIncrementType.HOUR }, end: today },\r\n { display: 'In Past 48 Hours', start: { increment: -48, dateIncrementType: DateIncrementType.HOUR }, end: today },\r\n { display: 'In Past 72 Hours', start: { increment: -72, dateIncrementType: DateIncrementType.HOUR }, end: today },\r\n { display: 'In Past 7 Days', start: { increment: -7, dateIncrementType: DateIncrementType.DAY }, end: today },\r\n { display: 'In Past 30 Days', start: { increment: -30, dateIncrementType: DateIncrementType.DAY }, end: today },\r\n { display: 'In Past 6 Months', start: { increment: -6, dateIncrementType: DateIncrementType.MONTH }, end: today },\r\n { display: 'In Past 12 Months', start: { increment: -12, dateIncrementType: DateIncrementType.MONTH }, end: today },\r\n { display: 'In Past 2 Years', start: { increment: -2, dateIncrementType: DateIncrementType.YEAR }, end: today },\r\n { display: 'In Past 3 Years', start: { increment: -3, dateIncrementType: DateIncrementType.YEAR }, end: today }\r\n];\r\n\r\nexport const futureDates: DateBoundary[] = [\r\n { display: 'In Next 10 Days', start: today, end: { increment: 10, dateIncrementType: DateIncrementType.DAY } },\r\n { display: 'In Next 30 Days', start: today, end: { increment: 30, dateIncrementType: DateIncrementType.DAY } },\r\n { display: 'In Next 6 Months', start: today, end: { increment: 6, dateIncrementType: DateIncrementType.MONTH } }\r\n];","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport React from 'react';\r\nimport { Dropdown, DropdownItem, DropdownMenu, DropdownToggle } from 'reactstrap';\r\nimport { setPanelDateFilter } from '../../../actions/panels';\r\nimport { Panel as PanelModel } from '../../../models/panel/Panel';\r\nimport { futureDates, none, pastDates } from './DateDropdownOptions';\r\nimport { DateBoundary, DateIncrementType } from '../../../models/panel/Date';\r\n\r\ninterface State {\r\n dropdownOpen: boolean;\r\n}\r\n\r\ninterface Props {\r\n dispatch: any;\r\n handleCustomDateClick: (e: any) => void;\r\n panel: PanelModel;\r\n}\r\n\r\nexport default class DateDropdown extends React.PureComponent {\r\n constructor(props: Props) {\r\n super(props);\r\n this.state = { dropdownOpen: false };\r\n }\r\n\r\n public render() {\r\n const { handleCustomDateClick, panel } = this.props;\r\n const { dropdownOpen } = this.state;\r\n const { dateFilter } = panel;\r\n const customDateFilterClasses = `leaf-dropdown-item ${dateFilter.start.dateIncrementType === DateIncrementType.SPECIFIC ? 'selected' : ''}`;\r\n const anytimeDateFilterClasses = `leaf-dropdown-item ${dateFilter.start.dateIncrementType === DateIncrementType.NONE ? 'selected' : ''}`;\r\n const anytime: DateBoundary = { start: none, end: none };\r\n\r\n return (\r\n \r\n \r\n {this.getDateDisplay(dateFilter)}\r\n \r\n \r\n Anytime\r\n \r\n Custom Date Range\r\n \r\n {pastDates.map((opt: DateBoundary) => (\r\n {opt.display}\r\n ))}\r\n \r\n {futureDates.map((opt: DateBoundary) => (\r\n {opt.display}\r\n ))}\r\n \r\n \r\n );\r\n }\r\n\r\n private toggle = () => {\r\n this.setState({ dropdownOpen: !this.state.dropdownOpen });\r\n }\r\n\r\n private handleClick = (dateFilter: DateBoundary) => {\r\n const { dispatch, panel } = this.props;\r\n dispatch(setPanelDateFilter(panel.index, dateFilter));\r\n }\r\n\r\n private setDropdownItemClasses = (dates: DateBoundary) => {\r\n const { dateFilter } = this.props.panel;\r\n return `leaf-dropdown-item ${\r\n dates.start.dateIncrementType === dateFilter.start.dateIncrementType &&\r\n dates.start.increment! === dateFilter.start.increment! &&\r\n dates.end.dateIncrementType === dateFilter.end.dateIncrementType &&\r\n dates.end.increment! === dateFilter.end.increment!\r\n ? 'selected' : ''\r\n }`;\r\n }\r\n\r\n private getDateDisplay = (filter: DateBoundary): string => {\r\n const { start, end } = filter;\r\n \r\n if (start.dateIncrementType === DateIncrementType.NONE && end.dateIncrementType === DateIncrementType.NONE) {\r\n return \"Anytime\";\r\n } else if (end.dateIncrementType === DateIncrementType.NOW && start.increment) {\r\n return `In Past ${Math.abs(start.increment)} ${this.dateIncrementEnumToString(start.dateIncrementType)}`;\r\n } else if (start.dateIncrementType === DateIncrementType.NOW && end.increment) {\r\n return `In Next ${end.increment} ${this.dateIncrementEnumToString(end.dateIncrementType)}`;\r\n } else if (start.dateIncrementType === DateIncrementType.SPECIFIC && end.dateIncrementType === DateIncrementType.SPECIFIC) {\r\n return `${start.date!.toLocaleDateString()} - ${end.date!.toLocaleDateString()}`;\r\n }\r\n return \"\";\r\n };\r\n \r\n private dateIncrementEnumToString = (increment: DateIncrementType) => {\r\n switch(increment) {\r\n case DateIncrementType.MINUTE: return \"Minutes\";\r\n case DateIncrementType.HOUR: return \"Hours\";\r\n case DateIncrementType.DAY: return \"Days\";\r\n case DateIncrementType.MONTH: return \"Months\";\r\n case DateIncrementType.YEAR: return \"Years\";\r\n default: return \"\";\r\n };\r\n };\r\n}\r\n\r\n","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport React from 'react';\r\nimport { Dropdown, DropdownItem, DropdownMenu, DropdownToggle } from 'reactstrap';\r\nimport { setPanelInclusion, setSubPanelInclusion } from '../../../actions/panels';\r\nimport { Panel as PanelModel } from '../../../models/panel/Panel';\r\n\r\ninterface State {\r\n dropdownOpen: boolean\r\n}\r\n\r\ninterface Props {\r\n dispatch: any\r\n inclusionDropdownType: string,\r\n isFirst: boolean,\r\n index: number,\r\n panel: PanelModel,\r\n}\r\n\r\nexport const INCLUSION_DROPDOWN_TYPE = {\r\n PANEL: 'PANEL',\r\n SUBPANEL: 'SUBPANEL'\r\n}\r\n\r\nexport default class InclusionDropdown extends React.PureComponent {\r\n constructor(props: Props) {\r\n super(props);\r\n this.toggle = this.toggle.bind(this);\r\n this.selectItem = this.selectItem.bind(this);\r\n this.state = { dropdownOpen: false };\r\n }\r\n \r\n public toggle() {\r\n this.setState((prevState: State) => ({\r\n dropdownOpen: !prevState.dropdownOpen\r\n }));\r\n }\r\n\r\n public selectItem(item: any) {\r\n const { dispatch, inclusionDropdownType } = this.props;\r\n const text = item.target.innerText;\r\n const include = text === 'Patients Who' || text === 'And' ? true : false;\r\n\r\n // Update state\r\n if (inclusionDropdownType === INCLUSION_DROPDOWN_TYPE.PANEL) { \r\n dispatch(setPanelInclusion(this.props.panel.index, include));\r\n }\r\n else {\r\n dispatch(setSubPanelInclusion(this.props.panel.index, this.props.index, include));\r\n }\r\n }\r\n\r\n public render() {\r\n const { inclusionDropdownType, index, isFirst, panel } = this.props;\r\n const { dropdownOpen } = this.state;\r\n const classes: string[] = [ 'panel-header-inclusion' ];\r\n const isInclusionCriteria = inclusionDropdownType === INCLUSION_DROPDOWN_TYPE.PANEL \r\n ? panel.includePanel \r\n : panel.subPanels[index].includeSubPanel;\r\n const includeClasses = `leaf-dropdown-item ${isInclusionCriteria ? 'selected' : ''}`;\r\n const excludeClasses = `leaf-dropdown-item ${!isInclusionCriteria ? 'selected' : ''}`;\r\n let displayText: string;\r\n let opts: string[];\r\n\r\n // Set the text and options to display, depending on inclusion state and\r\n // whether it is the first panel or not\r\n if (isFirst) { \r\n opts = [ 'Patients Who', 'Not Patients Who' ];\r\n displayText = isInclusionCriteria ? 'Patients Who' : 'Not Patients Who';\r\n }\r\n else {\r\n opts = [ 'And', 'And Not' ];\r\n displayText = isInclusionCriteria ? 'And' : 'And Not';\r\n }\r\n\r\n // Set class based on whether included or not\r\n if (!isInclusionCriteria) {\r\n classes.push('panel-header-inclusion-excluded');\r\n }\r\n\r\n return (\r\n \r\n \r\n {displayText}\r\n \r\n \r\n {opts[0]}\r\n {opts[1]}\r\n \r\n \r\n );\r\n }\r\n}","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport React from 'react';\r\nimport { setPanelDateFilter } from '../../../actions/panels';\r\nimport { DateBoundary, DateIncrementType } from '../../../models/panel/Date';\r\nimport { Panel as PanelModel } from '../../../models/panel/Panel';\r\nimport CountDropdown from './CountDropdown';\r\nimport CustomDateRangePicker from './CustomDateRangePicker';\r\nimport DateDropdown from './DateDropdown';\r\nimport InclusionDropdown from './InclusionDropdown';\r\nimport { INCLUSION_DROPDOWN_TYPE } from './InclusionDropdown';\r\n\r\ninterface Props {\r\n dispatch: any;\r\n isFirst: boolean;\r\n panel: PanelModel;\r\n}\r\n\r\ninterface State {\r\n DOMRect?: DOMRect;\r\n showCustomDateRangeBox: boolean;\r\n}\r\n\r\nexport default class PanelHeader extends React.PureComponent {\r\n constructor(props: Props) {\r\n super(props);\r\n this.state = {\r\n showCustomDateRangeBox: false\r\n }\r\n }\r\n\r\n public render() {\r\n const { dispatch, isFirst, panel } = this.props;\r\n const { DOMRect } = this.state;\r\n\r\n return (\r\n
\r\n \r\n \r\n {this.state.showCustomDateRangeBox &&\r\n \r\n }\r\n \r\n
\r\n );\r\n }\r\n\r\n private handleCustomDateSelectionClick = (e: any) => {\r\n const domRect: DOMRect = e.target.getBoundingClientRect();\r\n this.setState({ \r\n DOMRect: domRect, \r\n showCustomDateRangeBox: true\r\n });\r\n }\r\n\r\n private toggleCustomDateRangeBox = (show?: boolean) => {\r\n const showCustomDateRangeBox = show !== undefined ? show : !this.state.showCustomDateRangeBox;\r\n this.setState({ showCustomDateRangeBox });\r\n }\r\n}","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport React from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { Button, DropdownItem, DropdownMenu, DropdownToggle, Input, InputGroup, InputGroupButtonDropdown } from 'reactstrap';\r\nimport { setPanelItemNumericFilter } from '../../../actions/panels';\r\nimport { showInfoModal } from '../../../actions/generalUi';\r\nimport PopupBox from '../../Other/PopupBox/PopupBox';\r\nimport { PanelItem } from '../../../models/panel/PanelItem';\r\nimport { NumericFilterType, NumericFilter } from '../../../models/panel/NumericFilter';\r\nimport { InformationModalState } from '../../../models/state/GeneralUiState';\r\nimport './PanelItemNumericFilter.css';\r\n\r\ninterface Props {\r\n dispatch: any;\r\n panelItem: PanelItem;\r\n}\r\n\r\ninterface State {\r\n DOMRect?: DOMRect;\r\n showSelectionBox: boolean;\r\n showDropdown: boolean;\r\n}\r\n\r\ninterface EqualityValue {\r\n enum: number;\r\n operator: string;\r\n display: string;\r\n}\r\n\r\nconst types: EqualityValue[] = [\r\n { enum: NumericFilterType.GreaterThanOrEqualTo, display: 'Greater than or equal (>=)', operator: '>=' },\r\n { enum: NumericFilterType.GreaterThan, display: 'Greater than (>)', operator: '>' },\r\n { enum: NumericFilterType.LessThanOrEqualTo, display: 'Less than or equal (<=)', operator: '<=' },\r\n { enum: NumericFilterType.LessThan, display: 'Less Than (<)', operator: '<' },\r\n { enum: NumericFilterType.EqualTo, display: 'Equal to (=)', operator: '=' },\r\n { enum: NumericFilterType.Between, display: 'Between', operator: 'between' },\r\n { enum: NumericFilterType.None, display: '', operator: '' }\r\n];\r\n\r\nconst options = types.filter((t: EqualityValue) => t.enum !== NumericFilterType.None);\r\n\r\nexport default class PanelItemNumericFilter extends React.Component {\r\n private baseClassName = 'panel-item-numeric'; \r\n private className = `${this.baseClassName}-selection`;\r\n private mouseOut = true;\r\n constructor(props: Props) {\r\n super(props);\r\n this.state = {\r\n showDropdown: false,\r\n showSelectionBox: false\r\n }\r\n }\r\n\r\n public render(): any {\r\n const { panelItem } = this.props;\r\n const { filterType, filter } = panelItem.numericFilter;\r\n const { showSelectionBox, showDropdown, DOMRect } = this.state;\r\n const b = this.baseClassName;\r\n const c = this.className;\r\n const isBetween = filterType === NumericFilterType.Between;\r\n const classes = [c, (isBetween ? `${c}-between` : '')];\r\n const display = filterType === NumericFilterType.None \r\n ? types[0].display\r\n : types.find((p: EqualityValue) => p.enum === filterType)!.display;\r\n const val1 = `${filter[0] === null ? '' : filter[0]}`;\r\n const val2 = `${filter[1] === null ? '' : filter[1]}`;\r\n\r\n return (\r\n
\r\n {this.setNumericDisplayText()}\r\n\r\n {/* Selection Box */}\r\n {showSelectionBox && \r\n \r\n
\r\n x\r\n
\r\n \r\n\r\n {/* Inequality Dropdown */}\r\n \r\n \r\n {display}\r\n \r\n \r\n\r\n {/* Equality Options */}\r\n {options.map((t: EqualityValue) => {\r\n const classed = `leaf-dropdown-item ${t.enum === filterType ? 'selected' : ''}`;\r\n return (\r\n \r\n {t.display}\r\n \r\n )})}\r\n\r\n \r\n \r\n\r\n {/* Main non-between Input */}\r\n {!isBetween && \r\n \r\n }\r\n\r\n {/* Between Input */}\r\n {isBetween && \r\n
\r\n\r\n {/* High val */}\r\n \r\n\r\n and\r\n\r\n {/* Low val */}\r\n \r\n
\r\n }\r\n
\r\n
\r\n
\r\n
\r\n }\r\n
\r\n );\r\n }\r\n\r\n /*\r\n * Dispatches an update to Redux store after input change.\r\n */\r\n private dispatchUpdate = (filter: NumericFilter) => {\r\n const { panelItem, dispatch } = this.props;\r\n const pi = panelItem;\r\n dispatch(setPanelItemNumericFilter(pi.concept, pi.panelIndex, pi.subPanelIndex, pi.index, filter));\r\n }\r\n\r\n /*\r\n * Handles changes to the equality value dropdown (e.g., >, <, =).\r\n */\r\n private handleDropdownItemSelect = (ev: EqualityValue) => {\r\n const { numericFilter } = this.props.panelItem;\r\n const newFilter = Object.assign({}, numericFilter, { filterType: ev.enum });\r\n this.dispatchUpdate(newFilter);\r\n }\r\n\r\n /*\r\n * Handles changes to value one input.\r\n */\r\n private handleNumberInputChange = (e: any, isFirst: boolean) => {\r\n const { numericFilter } = this.props.panelItem;\r\n let val = e.target.value.trim();\r\n\r\n if (val === '') { \r\n val = null; \r\n } else if (!this.isNumeric(val)) { \r\n return; \r\n } else if (val.length > 0 && val[val.length - 1] !== '.') {\r\n val = parseFloat(val);\r\n }\r\n\r\n const newFilter = Object.assign({}, numericFilter, { \r\n filter: isFirst \r\n ? [ val, numericFilter.filter[1] ]\r\n : [ numericFilter.filter[0], val ], \r\n filterType: numericFilter.filterType === NumericFilterType.None ? types[0].enum : numericFilter.filterType\r\n });\r\n this.dispatchUpdate(newFilter);\r\n }\r\n\r\n private handleInputOneChange = (e: any) => this.handleNumberInputChange(e, true);\r\n\r\n private handleInputTwoChange = (e: any) => this.handleNumberInputChange(e, false);\r\n\r\n /*\r\n * Checks if a value is numeric.\r\n */\r\n private isNumeric = (val: string): boolean => {\r\n const firstDecimal = val.indexOf('.');\r\n\r\n if (isNaN(+val) && val[val.length - 1] !== '.') { return false; }\r\n else if (firstDecimal > -1 && firstDecimal !== val.lastIndexOf('.')) { return false; }\r\n else if (val.length === 0) { return false; }\r\n return true;\r\n }\r\n\r\n /*\r\n * Sets the text displayed in the panel item.\r\n */\r\n private setNumericDisplayText = () => {\r\n const { panelItem } = this.props;\r\n const { filter, filterType } = panelItem.numericFilter;\r\n const [ val1, val2 ] = filter;\r\n const { uiNumericDefaultText, uiDisplayUnits } = panelItem.concept;\r\n const units = uiDisplayUnits ? uiDisplayUnits : '';\r\n\r\n if (filterType === NumericFilterType.None || val1 === null) {\r\n return uiNumericDefaultText;\r\n } else if (filterType === NumericFilterType.Between && val2 === null) {\r\n return uiNumericDefaultText;\r\n } else if (filterType === NumericFilterType.Between) {\r\n const between = types.find((p: EqualityValue) => p.enum === NumericFilterType.Between)!;\r\n return `${between.operator} ${val1} and ${val2} ${units}`;\r\n } else {\r\n const ev = types.find((p: EqualityValue) => p.enum === filterType)!;\r\n return `${ev.operator} ${val1} ${units}`;\r\n }\r\n } \r\n\r\n /*\r\n * Toggles dropdown 'isOpen' state.\r\n */\r\n private toggleDropdown = () => this.setState({ showDropdown: !this.state.showDropdown });\r\n\r\n /*\r\n * Sets selection text click time to head off\r\n * false positive detections of clicks outside the box \r\n * (which auto-hide the selection box, perhaps unintentionally).\r\n */\r\n private handleSelectionTextClick = (e: any) => { \r\n if (e.target.className !== \"panel-item-numeric-text\") { return; }\r\n const domRect: DOMRect = e.target.getBoundingClientRect();\r\n this.setState({ DOMRect: domRect, showSelectionBox: true });\r\n }\r\n\r\n /*\r\n * Hides the selection box if clicked outside.\r\n */\r\n private handleSelectionBoxClickedOutside = () => {\r\n this.setState({ showSelectionBox: !this.state.showSelectionBox });\r\n }\r\n\r\n /*\r\n * Clears any current filter and hides the selection box.\r\n */\r\n private handleClickClearFilter = () => {\r\n const newFilter: NumericFilter = { filter: [null, null], filterType: NumericFilterType.None };\r\n this.dispatchUpdate(newFilter);\r\n this.setState({ showSelectionBox: false });\r\n }\r\n\r\n /*\r\n * Handles cursor focus away from the selection box, which\r\n * if the mouse is outside it ensures the box gracefully closes.\r\n */\r\n private handleBlur = () => {\r\n if (this.mouseOut) {\r\n this.setState({ showSelectionBox: false });\r\n }\r\n }\r\n\r\n private handleMouseEnter = () => this.mouseOut = false;\r\n\r\n private handleMouseLeave = () => this.mouseOut = true;\r\n}","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport React from 'react';\r\nimport { Dropdown, DropdownItem, DropdownMenu, DropdownToggle } from 'reactstrap';\r\nimport { deselectSpecialization, selectSpecialization } from '../../../actions/panels';\r\nimport { ConceptSpecialization, ConceptSpecializationGroup as ConceptSpecializationGroupModel } from '../../../models/concept/Concept';\r\nimport { PanelItem as PanelItemModel } from '../../../models/panel/PanelItem';\r\n\r\ninterface State {\r\n dropdownOpen: boolean;\r\n}\r\n\r\ninterface Props {\r\n dispatch: any;\r\n panelItem: PanelItemModel;\r\n selected: ConceptSpecialization[];\r\n specializationGroup: ConceptSpecializationGroupModel;\r\n}\r\n\r\nexport default class ConceptSpecializationGroup extends React.PureComponent {\r\n constructor(props: Props) {\r\n super(props);\r\n this.state = { dropdownOpen: false };\r\n }\r\n\r\n public render() {\r\n const { selected, specializationGroup } = this.props;\r\n const c = 'panel-item-specialization';\r\n const specializationSelected = selected.find((s) => s.specializationGroupId === specializationGroup.id);\r\n const display = specializationSelected\r\n ? specializationSelected.uiDisplayText\r\n : specializationGroup.uiDefaultText;\r\n\r\n return (\r\n \r\n \r\n {display}\r\n \r\n \r\n \r\n {specializationGroup.uiDefaultText}\r\n \r\n \r\n {specializationGroup.specializations.map((s: ConceptSpecialization) => (\r\n \r\n {s.uiDisplayText}\r\n \r\n ))}\r\n \r\n \r\n );\r\n }\r\n\r\n private toggle = () => {\r\n this.setState({ dropdownOpen: !this.state.dropdownOpen });\r\n }\r\n\r\n private handleDefaultClick = () => {\r\n const { specializationGroup, panelItem } = this.props;\r\n this.props.dispatch(deselectSpecialization(panelItem.concept, panelItem.panelIndex, panelItem.subPanelIndex, panelItem.index, specializationGroup));\r\n }\r\n\r\n private handleSpecializationClick = (conceptSpecialization: ConceptSpecialization) => {\r\n const { panelItem } = this.props;\r\n this.props.dispatch(selectSpecialization(panelItem.concept, panelItem.panelIndex, panelItem.subPanelIndex, panelItem.index, conceptSpecialization));\r\n }\r\n}\r\n\r\n","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport React from 'react';\r\nimport { ConnectDragPreview, ConnectDragSource, DragSource, DragSourceConnector, DragSourceMonitor } from 'react-dnd'\r\nimport { removePanelItem, hidePanelItem } from '../../../actions/panels';\r\nimport { PanelItem as PanelItemModel } from '../../../models/panel/PanelItem';\r\nimport getDragPreview from '../../../utils/getDragPreview';\r\nimport PanelItemNumericFilter from './PanelItemNumericFilter';\r\nimport ConceptSpecializationGroup from './ConceptSpecializationGroup';\r\nimport { SubPanel, SequenceType } from '../../../models/panel/SubPanel';\r\nimport { CohortStateType } from '../../../models/state/CohortState';\r\n\r\ninterface DndProps {\r\n connectDragSource?: ConnectDragSource;\r\n connectDragPreview?: ConnectDragPreview;\r\n canDrag?: boolean;\r\n isDragging?: boolean;\r\n isDropped?: boolean;\r\n}\r\n\r\ninterface OwnProps {\r\n dispatch: any;\r\n panelItem: PanelItemModel;\r\n queryState: CohortStateType;\r\n subPanel: SubPanel;\r\n}\r\n\r\ntype Props = DndProps & OwnProps\r\n\r\n// Object to return to the connector when drag begins. This will\r\n// be sent to the panel on the drop() event.\r\nconst conceptNodeSource = {\r\n beginDrag(props: Props) {\r\n const { dispatch, panelItem } = props;\r\n /*\r\n * Hide the panel item, but keep in DOM until drop event. This is needed\r\n * so React-dnd can detect the drop has occurred (and thus update UI correctly),\r\n * which is based partly off of a detection of whether the node is still in the DOM.\r\n * The timeout is needed because Chrome/Safari have an unrelated bug related to \r\n * Html5 dnd events on hidden DOM objects. Odd as it seems, this flow seems to work well.\r\n */\r\n setTimeout(() => {\r\n dispatch(hidePanelItem(panelItem.concept, panelItem.panelIndex, panelItem.subPanelIndex, panelItem.index));\r\n }, 50);\r\n return panelItem.concept;\r\n },\r\n endDrag(props: Props) {\r\n const { dispatch, panelItem } = props;\r\n dispatch(removePanelItem(panelItem.concept, panelItem.panelIndex, panelItem.subPanelIndex, panelItem.index));\r\n },\r\n canDrag(props: Props) {\r\n return props.queryState !== CohortStateType.REQUESTING;\r\n }\r\n};\r\n\r\nconst collect = (connect: DragSourceConnector, monitor: DragSourceMonitor) => {\r\n return {\r\n canDrag: monitor.canDrag(),\r\n connectDragPreview: connect.dragPreview(),\r\n connectDragSource: connect.dragSource(),\r\n isDragging: monitor.isDragging()\r\n }\r\n};\r\n\r\nexport class PanelItem extends React.Component {\r\n private className = 'panel-item';\r\n constructor(props: Props) {\r\n super(props);\r\n this.state = {\r\n showNumericFilterTooltip: false\r\n }\r\n }\r\n\r\n public componentDidMount() {\r\n const { connectDragPreview, panelItem } = this.props;\r\n if (connectDragPreview && panelItem.concept) {\r\n const dragPreview = getDragPreview(panelItem.concept.uiDisplayName);\r\n connectDragPreview(dragPreview);\r\n }\r\n }\r\n \r\n public render(): any {\r\n const { connectDragSource, dispatch, panelItem, subPanel, canDrag } = this.props;\r\n const { concept, specializations } = panelItem;\r\n const c = this.className;\r\n const classes = [ c ]; \r\n if (!panelItem.concept) { return null; }\r\n \r\n const eventJoin = subPanel.joinSequenceEventType;\r\n const eventId = panelItem.concept.eventTypeId;\r\n const invalidEventId = \r\n eventJoin && \r\n subPanel.joinSequence.sequenceType === SequenceType.Event && \r\n eventJoin.id !== eventId;\r\n \r\n if (panelItem.hidden) classes.push('hidden');\r\n if (!canDrag) classes.push(`cannot-drag`);\r\n if (invalidEventId) classes.push(`${c}-invalid-eventid`);\r\n if (!concept.isEncounterBased) classes.push(`${c}-not-encounter-based`); \r\n else classes.push(`${c}-encounter-based`);\r\n\r\n return (\r\n connectDragSource &&\r\n connectDragSource(\r\n
\r\n {concept.uiDisplayText}\r\n {concept.isSpecializable && concept.specializationGroups &&\r\n concept.specializationGroups.map((g) => (\r\n \r\n ))}\r\n {concept.isNumeric &&\r\n \r\n }\r\n {invalidEventId &&\r\n \r\n Whoops! This query is linked by {subPanel.joinSequenceEventType!.name}\r\n , but this Concept doesn't seem to be the right type. Please fix this before running a query.\r\n \r\n }\r\n
\r\n )\r\n );\r\n }\r\n}\r\n\r\n\r\nexport default DragSource('CONCEPT', conceptNodeSource, collect)(PanelItem) as any;\r\n","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport React from 'react';\r\nimport './PanelItemOr.css';\r\n\r\nconst PanelItemOr = () => {\r\n return (\r\n
\r\n or\r\n
\r\n )\r\n}\r\n\r\nexport default PanelItemOr;","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport React from 'react';\r\nimport './SubPanelDashBorder.css';\r\n\r\nconst SubPanelDashBorder = () => {\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n )\r\n}\r\n\r\nexport default SubPanelDashBorder;","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport React from 'react';\r\n\r\ninterface Props {\r\n increment: number | null;\r\n dateType: string;\r\n onClick: (dateTypeString: string) => any;\r\n}\r\n\r\nconst SameSequenceDropdownIncrement = (props: Props) => {\r\n const className = 'same-sequence-dropdown-increment';\r\n const dateStrings = [ 'MINUTE', 'HOUR', 'DAY', 'WEEK', 'MONTH', 'YEAR' ];\r\n const postfix = props.increment === 1 ? '' : 's';\r\n const incrementTypes = dateStrings.map((key: string, i) => {\r\n\r\n const onClick = (e: any) => { e.stopPropagation(); props.onClick(key)};\r\n const classes = [ `${className}-item leaf-dropdown-item`, (key === props.dateType ? 'selected' : '') ];\r\n\r\n return (\r\n
\r\n {`${key[0]}${key.substring(1).toLowerCase()}${postfix}`}\r\n
\r\n );\r\n })\r\n\r\n return (\r\n
\r\n {incrementTypes}\r\n
\r\n )\r\n}\r\n\r\nexport default SameSequenceDropdownIncrement;","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport React from 'react';\r\nimport { Dropdown, DropdownItem, DropdownMenu, DropdownToggle, Input } from 'reactstrap';\r\nimport { setSubPanelJoinSequence } from '../../../actions/panels';\r\nimport { DateIncrementType } from '../../../models/panel/Date';\r\nimport { SubPanel as SubPanelModel, SequenceType, SubPanelJoinSequence } from '../../../models/panel/SubPanel';\r\nimport SameSequenceDropdownIncrement from './SameSequenceDropdownIncrement';\r\n\r\ninterface Props {\r\n dispatch: any\r\n index: number,\r\n subPanel: SubPanelModel,\r\n}\r\n\r\ninterface State {\r\n dropdownOpen: boolean;\r\n withinPlusMinusInput: number | null;\r\n withinFollowingInput: number | null;\r\n}\r\n\r\n/*\r\n * Join sequence types available in UI.\r\n */\r\nconst joinSequenceTypes = new Map([\r\n [ SequenceType.Encounter, { display: 'In the Same Encounter', type: SequenceType.Encounter }],\r\n [ SequenceType.Event, { display: 'In the Same', type: SequenceType.Event }],\r\n [ SequenceType.PlusMinus, { display: 'Within +/-', type: SequenceType.PlusMinus }],\r\n [ SequenceType.WithinFollowing, { display: 'In the Following', type: SequenceType.WithinFollowing }],\r\n [ SequenceType.AnytimeFollowing, { display: 'Anytime After', type: SequenceType.AnytimeFollowing }]\r\n]);\r\n\r\nexport default class SameSequenceDropdown extends React.PureComponent {\r\n constructor(props: Props) {\r\n super(props);\r\n this.state = { \r\n dropdownOpen: false,\r\n withinFollowingInput: 1,\r\n withinPlusMinusInput: 1\r\n };\r\n }\r\n\r\n public render() {\r\n const { subPanel } = this.props;\r\n const { withinFollowingInput, withinPlusMinusInput } = this.state;\r\n const dateType = DateIncrementType[subPanel.joinSequence.dateIncrementType].toString();\r\n const encounterClasses = this.addSelectedClassIfMatched('leaf-dropdown-item', SequenceType.Encounter);\r\n const eventClasses = this.addSelectedClassIfMatched('leaf-dropdown-item', SequenceType.Event);\r\n const plusMinusClasses = this.addSelectedClassIfMatched('leaf-dropdown-item same-sequence-dropdown-input arrow-right', SequenceType.PlusMinus);\r\n const withinFollowingClasses = this.addSelectedClassIfMatched('leaf-dropdown-item same-sequence-dropdown-input arrow-right', SequenceType.WithinFollowing);\r\n const anytimeAfterClasses = this.addSelectedClassIfMatched('leaf-dropdown-item', SequenceType.AnytimeFollowing);\r\n\r\n return (\r\n \r\n \r\n {this.setDisplayText()}\r\n \r\n \r\n\r\n {/* Same Encounter */}\r\n \r\n In the Same Encounter\r\n \r\n\r\n {/* Same Event */}\r\n {subPanel.joinSequenceEventType &&\r\n \r\n In the Same {subPanel.joinSequenceEventType.name}\r\n \r\n }\r\n\r\n {/* Within +/- */}\r\n
\r\n Within +/-\r\n \r\n \r\n
\r\n\r\n {/* Within the Following */}\r\n
\r\n Within the Following\r\n \r\n \r\n
\r\n\r\n {/* Anytime after */}\r\n \r\n Anytime After\r\n \r\n
\r\n
\r\n );\r\n }\r\n\r\n /*\r\n * Updates Redux store with current data.\r\n */\r\n private updateStoreWithJoinSequence = (joinSequence: SubPanelJoinSequence) => {\r\n const { dispatch, subPanel, index } = this.props;\r\n dispatch(setSubPanelJoinSequence(subPanel.panelIndex, index, { ...subPanel.joinSequence, ...joinSequence }));\r\n }\r\n\r\n /*\r\n * Sets the text to be displayed in the SubPanel Header\r\n * (e.g., 'Within +/- 3 Days', 'In the Same Encounter').\r\n */\r\n private setDisplayText = () => {\r\n const { subPanel } = this.props;\r\n const reg = /^\\w/;\r\n const sequence = subPanel.joinSequence; \r\n const text = [ joinSequenceTypes.get(sequence.sequenceType)!.display ];\r\n\r\n if (sequence.sequenceType === SequenceType.PlusMinus || sequence.sequenceType === SequenceType.WithinFollowing ) {\r\n text.push(`${sequence.increment === null ? 0 : sequence.increment} \r\n ${DateIncrementType[sequence.dateIncrementType]\r\n .toString()\r\n .toLowerCase()\r\n .replace(reg, (c: string) => c.toUpperCase())}${sequence.increment === 1 ? '' : 's'}`);\r\n } else if (sequence.sequenceType === SequenceType.Event) {\r\n text.push(subPanel.joinSequenceEventType!.name);\r\n }\r\n return text.join(' ');\r\n }\r\n \r\n /*\r\n * Toggles the dropdown and handles possible null values.\r\n */\r\n private toggleDropdown = () => {\r\n const { joinSequence } = this.props.subPanel;\r\n const dropdownOpen = !this.state.dropdownOpen;\r\n\r\n /*\r\n * Update store with an increment value of zero if null on\r\n * dropdown close. This prevents issues with nulls being sent\r\n * to the server on query run, as the server will always expect\r\n * a numeric value, and in any case the UI is already displaying '0'.\r\n */\r\n if (!dropdownOpen && joinSequence.increment === null) {\r\n this.updateStoreWithJoinSequence({ ...joinSequence, increment: 0 });\r\n }\r\n\r\n this.setState({ dropdownOpen });\r\n }\r\n\r\n /*\r\n * Handles changes to the given Input. Empty strings default to null.\r\n */\r\n private handleInputChange = (text: string, sequenceType: SequenceType): SubPanelJoinSequence | undefined => {\r\n const { dateIncrementType } = this.props.subPanel.joinSequence;\r\n let val: any = text;\r\n\r\n if (val === '') { \r\n val = null; \r\n } else if (!this.isNumeric(val)) { \r\n return; \r\n } else if (val.length > 0 && val[val.length - 1] !== '.') {\r\n val = +val;\r\n }\r\n\r\n return { increment: val, sequenceType, dateIncrementType }\r\n }\r\n\r\n /*\r\n * Handles changes to the PlusMinus Input. Empty strings default to null.\r\n */\r\n private handleWithinPlusMinusInputChange = (e: any) => {\r\n const seq = this.handleInputChange(e.target.value, SequenceType.PlusMinus);\r\n if (!seq) { return; }\r\n\r\n this.setState({ withinPlusMinusInput: seq.increment });\r\n this.updateStoreWithJoinSequence(seq);\r\n }\r\n\r\n /*\r\n * Handles changes to the WithinFollowing Input. Empty strings default to null.\r\n */\r\n private handleWithinFollowingInputChange = (e: any) => {\r\n const seq = this.handleInputChange(e.target.value, SequenceType.WithinFollowing);\r\n if (!seq) { return; }\r\n\r\n this.setState({ withinFollowingInput: seq.increment });\r\n this.updateStoreWithJoinSequence(seq);\r\n }\r\n\r\n /*\r\n * Handles clicks on the sequence type dropdown. Note that \r\n * clicks are intercepted and prevented from triggering this.\r\n */\r\n private handleDropdownSelect = (sequenceType: SequenceType) => {\r\n const { withinPlusMinusInput, withinFollowingInput } = this.state;\r\n const { joinSequence } = this.props.subPanel;\r\n\r\n switch (sequenceType) {\r\n case SequenceType.Encounter:\r\n case SequenceType.Event:\r\n case SequenceType.AnytimeFollowing:\r\n this.updateStoreWithJoinSequence({ ...joinSequence, sequenceType });\r\n return;\r\n case SequenceType.PlusMinus:\r\n this.updateStoreWithJoinSequence({ ...joinSequence, increment: withinPlusMinusInput, sequenceType });\r\n this.toggleDropdown();\r\n return;\r\n case SequenceType.WithinFollowing:\r\n this.updateStoreWithJoinSequence({ ...joinSequence, increment: withinFollowingInput, sequenceType });\r\n this.toggleDropdown();\r\n return;\r\n }\r\n }\r\n\r\n /*\r\n * The App Store values are number | null, so this handles stringifying those \r\n * to satisfy DOM elements.\r\n */\r\n private storeNumericValueToString = (val: number | null): string => val === null ? '' : `${val}`;\r\n\r\n /*\r\n * Handles selection of a given dateType in the PlusMinus dropdown\r\n * (e.g., 'Days', 'Hours')\r\n */\r\n private handleWithinPlusMinusDropdownIncrementSelect = (dateTypeString: any) => {\r\n const { withinPlusMinusInput } = this.state;\r\n const dateIncrementType = DateIncrementType[dateTypeString] as any;\r\n this.updateStoreWithJoinSequence({ dateIncrementType, increment: withinPlusMinusInput, sequenceType: SequenceType.PlusMinus });\r\n }\r\n\r\n /*\r\n * Handles selection of a given dateType in the WithinFollowing dropdown\r\n * (e.g., 'Days', 'Hours')\r\n */\r\n private handleWithinFollowingDropdownIncrementSelect = (dateTypeString: any) => {\r\n const { withinFollowingInput } = this.state;\r\n const dateIncrementType = DateIncrementType[dateTypeString] as any;\r\n this.updateStoreWithJoinSequence({ dateIncrementType, increment: withinFollowingInput, sequenceType: SequenceType.WithinFollowing });\r\n }\r\n\r\n /*\r\n * The onClick handler for elements. This prevents the action from\r\n * bubbling up and inadvertently closing the dropdown, and instead ensures\r\n * it stays open and the focus moves to the intended .\r\n */\r\n private handleClickPreventDefault = (e: any) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n }\r\n\r\n /*\r\n * Validates whether a string input is numeric or not.\r\n */\r\n private isNumeric = (val: string): boolean => {\r\n const value = val.trim();\r\n if (isNaN(+value) || value.indexOf('.') > -1) { return false; }\r\n else if (value.indexOf('0') !== value.lastIndexOf('0')) { return false; }\r\n else if (val.length === 0) { return false; }\r\n return true;\r\n }\r\n\r\n /*\r\n * Checks the current SequenceType in store and adds the\r\n * 'selected' CSS class if it is.\r\n */\r\n private addSelectedClassIfMatched = (classes: string, sequenceType: SequenceType) => {\r\n return `${classes} ${sequenceType === this.props.subPanel.joinSequence.sequenceType ? 'selected' : ''}`;\r\n }\r\n}\r\n","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport React from 'react';\r\nimport { Panel as PanelModel } from '../../../models/panel/Panel';\r\nimport CountDropdown from './CountDropdown';\r\nimport InclusionDropdown from './InclusionDropdown';\r\nimport { INCLUSION_DROPDOWN_TYPE } from './InclusionDropdown'\r\nimport SameSequenceDropdown from './SameSequenceDropdown';\r\n\r\ninterface Props {\r\n dispatch: any;\r\n index: number;\r\n panel: PanelModel;\r\n}\r\n\r\nexport default class SubPanelHeader extends React.PureComponent {\r\n constructor(props: Props) {\r\n super(props);\r\n }\r\n\r\n public render(): any {\r\n const { panel, index, dispatch } = this.props;\r\n const subpanel = panel.subPanels[index];\r\n const classes = [ 'subpanel-header' ];\r\n let content: any; \r\n\r\n if (!subpanel.includeSubPanel) {\r\n classes.push('subpanel-excluded');\r\n }\r\n \r\n if (subpanel.panelItems.length === 0) {\r\n content =
In the Same Encounter
;\r\n classes.push('no-data');\r\n }\r\n else {\r\n content = \r\n
\r\n \r\n \r\n \r\n
;\r\n }\r\n\r\n return (\r\n
\r\n {content}\r\n
\r\n ) \r\n }\r\n}","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport React from 'react';\r\nimport { ConnectDropTarget, DropTarget, DropTargetConnector, DropTargetMonitor } from 'react-dnd'\r\nimport { addPanelItem } from '../../../actions/panels';\r\nimport { Concept } from '../../../models/concept/Concept';\r\nimport { Panel as PanelModel } from '../../../models/panel/Panel';\r\nimport { PanelItem as PanelItemModel } from '../../../models/panel/PanelItem';\r\nimport { SubPanel as SubPanelModel } from '../../../models/panel/SubPanel';\r\nimport PanelItem from './PanelItem';\r\nimport PanelItemOr from './PanelItemOr';\r\nimport SubPanelDashBorder from './SubPanelDashBorder';\r\nimport SubPanelHeader from './SubPanelHeader';\r\nimport { CohortStateType } from '../../../models/state/CohortState';\r\n\r\ninterface DndProps {\r\n canDrop?: boolean;\r\n isOver?: boolean;\r\n connectDropTarget?: ConnectDropTarget;\r\n}\r\n\r\ninterface OwnProps {\r\n panel: PanelModel;\r\n subPanel: SubPanelModel;\r\n index: number;\r\n dispatch: any;\r\n queryState: CohortStateType;\r\n}\r\n\r\ntype Props = DndProps & OwnProps\r\n\r\nconst panelTarget = {\r\n drop(props: Props, monitor: DropTargetMonitor) {\r\n const { dispatch, subPanel } = props;\r\n const concept: Concept = monitor.getItem();\r\n dispatch(addPanelItem(concept, subPanel.panelIndex, subPanel.index));\r\n },\r\n canDrop (props: Props, monitor: DropTargetMonitor) {\r\n return props.queryState !== CohortStateType.REQUESTING;\r\n }\r\n}\r\n\r\nconst collect = (connect: DropTargetConnector, monitor: DropTargetMonitor) => ({\r\n canDrop: monitor.canDrop(),\r\n connectDropTarget: connect.dropTarget(),\r\n isOver: monitor.isOver()\r\n});\r\n\r\nclass SubPanel extends React.Component {\r\n constructor(props: Props) {\r\n super(props);\r\n }\r\n\r\n public render() {\r\n const { connectDropTarget, dispatch, isOver, canDrop, subPanel, index, panel, queryState } = this.props;\r\n const totalPanelItems = subPanel.panelItems.length;\r\n const wrapperClasses = 'subpanel-wrapper ' + (totalPanelItems > 0 ? 'has-data' : '');\r\n const classes = [ 'subpanel' ];\r\n const items = [];\r\n let panelItem: PanelItemModel;\r\n\r\n // Set classes\r\n if (totalPanelItems === 0) { classes.push('no-data'); }\r\n if (isOver && canDrop ) { classes.push('can-drop'); }\r\n if (canDrop) { classes.push('show-dash-border'); }\r\n if (subPanel.index === 0) { classes.push('subpanel-first'); }\r\n\r\n // Set PanelItems and -or- objects\r\n for (let i = 0; i < totalPanelItems; i++) {\r\n panelItem = subPanel.panelItems[i];\r\n items.push();\r\n\r\n // Add -or- if necessary\r\n if (subPanel.panelItems[i+1] && // Followed by another panelItem\r\n !subPanel.panelItems[i+1].hidden && // and the following panelItem isn't hidden\r\n (i > 0 || !panelItem.hidden) // and this panelItem isn't the first OR is shown\r\n ) { \r\n items.push(); \r\n }\r\n }\r\n\r\n return (\r\n connectDropTarget &&\r\n connectDropTarget(\r\n
\r\n {/* Header - only set if subpanel is not the first */}\r\n {index !== 0 &&\r\n }\r\n
\r\n {/* Dashed borders that move when user is dragging a concept */}\r\n \r\n {/* Main subpanel body with panel items */}\r\n
\r\n {items}\r\n
\r\n
\r\n
\r\n )\r\n );\r\n }\r\n}\r\n\r\n\r\nexport default DropTarget('CONCEPT', panelTarget, collect)(SubPanel) as any;","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport React from 'react';\r\nimport { Col } from 'reactstrap';\r\nimport { Panel as PanelModel } from '../../../models/panel/Panel';\r\nimport PanelHeader from './PanelHeader';\r\nimport SubPanel from './SubPanel';\r\nimport { DateIncrementType } from '../../../models/panel/Date';\r\nimport { CohortStateType } from '../../../models/state/CohortState';\r\nimport './Panel.css';\r\n\r\nexport interface Props {\r\n dispatch: any;\r\n isFirst: boolean;\r\n panel: PanelModel,\r\n queryState: CohortStateType;\r\n}\r\n\r\nexport default class Panel extends React.PureComponent {\r\n constructor(props: Props) {\r\n super(props);\r\n }\r\n\r\n public render() {\r\n const { dispatch, isFirst, panel, queryState } = this.props;\r\n const isDateFiltered = \r\n panel.dateFilter.end.dateIncrementType !== DateIncrementType.NONE && \r\n panel.dateFilter.start.dateIncrementType !== DateIncrementType.NONE;\r\n let isCountFiltered = false;\r\n let hasPanelItems = false;\r\n let hasSequentialJoin = false;\r\n\r\n for (const subPanel of panel.subPanels) {\r\n if (subPanel.panelItems.filter((pi) => !pi.hidden).length) { hasPanelItems = true; }\r\n if (subPanel.index > 0 && subPanel.panelItems.length) { hasSequentialJoin = true; }\r\n if (subPanel.minimumCount > 1) { isCountFiltered = true; }\r\n }\r\n\r\n // Set classes\r\n const classes = [ 'panel', (hasPanelItems ? 'has-data' : 'no-data') ];\r\n if (!panel.includePanel) { classes.push('panel-excluded'); }\r\n if (isDateFiltered) { classes.push('panel-date-filtered'); }\r\n if (hasSequentialJoin) { classes.push('panel-sequential-join'); }\r\n if (isCountFiltered) { classes.push('panel-count-filtered'); }\r\n\r\n return (\r\n \r\n
\r\n \r\n {panel.subPanels.map((subpanel,i) => (\r\n \r\n ))}\r\n
\r\n \r\n );\r\n }\r\n}\r\n","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport React from 'react';\r\nimport { Row } from 'reactstrap';\r\nimport { Panel as PanelModel } from '../../../models/panel/Panel';\r\nimport { CohortStateType } from '../../../models/state/CohortState';\r\nimport Panel from './Panel';\r\n\r\ninterface Props {\r\n dispatch: any;\r\n panels: PanelModel[];\r\n queryState: CohortStateType;\r\n}\r\n\r\nexport class PanelGroup extends React.PureComponent {\r\n constructor(props: Props) {\r\n super(props);\r\n }\r\n\r\n public render() {\r\n const { panels, dispatch, queryState } = this.props;\r\n\r\n return (\r\n \r\n {panels.map((panel: PanelModel, i: number) =>\r\n \r\n )}\r\n \r\n );\r\n }\r\n}\r\n","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport React from 'react';\r\nimport { MdCancel, MdSearch, MdStarBorder } from 'react-icons/md';\r\nimport { connect } from 'react-redux';\r\nimport { Dispatch } from 'redux';\r\nimport { cancelQuery, getCounts } from '../../../actions/cohort/count';\r\nimport { toggleSaveQueryPane, showInfoModal } from '../../../actions/generalUi';\r\nimport { AppState } from '../../../models/state/AppState';\r\nimport { Panel as PanelModel } from '../../../models/panel/Panel';\r\nimport { PanelFilter as PanelFilterModel } from '../../../models/panel/PanelFilter';\r\nimport PanelFilterGroup from '../PanelFilter/PanelFilterGroup';\r\nimport { PanelGroup } from './PanelGroup';\r\nimport { getPanelItemCount, panelHasErrors } from '../../../utils/panelUtils';\r\nimport { InformationModalState } from '../../../models/state/GeneralUiState';\r\nimport { CohortStateType } from '../../../models/state/CohortState';\r\n\r\ninterface StateProps {\r\n panelFilters: PanelFilterModel[];\r\n panels: PanelModel[];\r\n queryState: CohortStateType;\r\n}\r\n\r\ninterface DispatchProps {\r\n dispatch: any;\r\n}\r\n\r\ninterface OwnProps { }\r\n\r\ntype Props = StateProps & DispatchProps & OwnProps;\r\n\r\nclass PanelGroupColumn extends React.Component {\r\n constructor(props: Props) {\r\n super(props);\r\n }\r\n\r\n public handleQueryClick = () => {\r\n const { queryState, dispatch, panels } = this.props;\r\n switch (queryState) {\r\n case CohortStateType.NOT_LOADED: {\r\n const hasPanelItems = !!getPanelItemCount(panels);\r\n const hasErrors = panelHasErrors();\r\n\r\n if (hasPanelItems && !hasErrors) {\r\n return dispatch(getCounts());\r\n } else if (!hasPanelItems) {\r\n const info : InformationModalState = {\r\n header: \"No query criteria\",\r\n body:\r\n (
\r\n

It looks like you haven't created a query yet. Drag and drop concepts from the left to create a query, then try again.

\r\n
),\r\n show: true\r\n }\r\n return dispatch(showInfoModal(info));\r\n } else if (hasErrors) {\r\n const info : InformationModalState = {\r\n header: \"Query error\",\r\n body: \r\n (
\r\n

It looks like your query has an error. This may be due to trying to filter a Concept by dates or counts that doesn't have any dates (such as demographics).

\r\n

Double-check your query to make sure everything looks okay and try again.

\r\n
),\r\n show: true\r\n }\r\n return dispatch(showInfoModal(info));\r\n }\r\n }\r\n case CohortStateType.REQUESTING: {\r\n return dispatch(cancelQuery());\r\n }\r\n case CohortStateType.LOADED: {\r\n return dispatch(toggleSaveQueryPane());\r\n }\r\n }\r\n }\r\n\r\n public setRunQueryButtonContent = () => {\r\n const { queryState } = this.props;\r\n const baseClassName = 'find-patients-query-icon';\r\n switch (queryState) {\r\n case CohortStateType.NOT_LOADED: {\r\n return Run Query;\r\n }\r\n case CohortStateType.REQUESTING: {\r\n return Cancel Query;\r\n }\r\n case CohortStateType.LOADED: {\r\n return Save Query;\r\n }\r\n default: \r\n return null;\r\n }\r\n }\r\n\r\n public render() {\r\n const { dispatch, panels, panelFilters, queryState } = this.props;\r\n return (\r\n
\r\n
\r\n
\r\n {this.setRunQueryButtonContent()}\r\n
\r\n
\r\n \r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state: AppState): StateProps => {\r\n return { \r\n panelFilters: state.panelFilters,\r\n panels: state.panels,\r\n queryState: state.cohort.count.state\r\n };\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch: Dispatch): DispatchProps => {\r\n return {\r\n dispatch\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(PanelGroupColumn);","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport React from 'react';\r\nimport { Col, Container, Row } from 'reactstrap';\r\nimport ConceptColumnContainer from '../../containers/FindPatients/ConceptColumnContainer'\r\nimport PanelGroupColumn from './Panels/PanelGroupColumn';\r\nimport './FindPatients.css';\r\n\r\nexport class FindPatients extends React.PureComponent {\r\n \r\n public render() {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nexport default FindPatients;","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\ninterface AntPathOption {\r\n color: string;\r\n dashArray: number[];\r\n delay: number;\r\n opacity: number;\r\n pulseColor: string;\r\n reverse?: boolean;\r\n smoothFactor: number;\r\n weight: number;\r\n}\r\n\r\nconst def: AntPathOption = {\r\n color: 'white',\r\n dashArray: [800,30],\r\n delay: 20,\r\n opacity: 0.5,\r\n pulseColor: 'blue',\r\n smoothFactor: 1,\r\n weight: 1.5\r\n}\r\n\r\nconst resultReceived: AntPathOption = {\r\n ...def,\r\n color: 'white',\r\n opacity: 0.8,\r\n pulseColor: '#1ca8dd',\r\n reverse: true\r\n};\r\n\r\nconst sendingQuery: AntPathOption = {\r\n ...def,\r\n color: 'white',\r\n pulseColor: 'green',\r\n};\r\n\r\nexport const antPathOptionTypes = {\r\n RESULT_RECEIVED: resultReceived,\r\n SENDING_QUERY: sendingQuery\r\n}\r\n\r\n","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport { LatLngExpression } from 'leaflet';\r\nimport React from 'react'\r\nimport DivIcon from 'react-leaflet-div-icon'\r\nimport { CohortStateType } from '../../models/state/CohortState';\r\n\r\ninterface Props\r\n{\r\n position: LatLngExpression,\r\n queryState: CohortStateType;\r\n}\r\n\r\nexport default class EndpointMarker extends React.PureComponent {\r\n public render() {\r\n const classes = [ 'pulse-icon', (this.props.queryState === CohortStateType.LOADED ? 'pulse-icon-loaded' : '') ];\r\n return (\r\n \r\n
\r\n \r\n );\r\n }\r\n}\r\n","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport React from 'react'\r\nimport CountUp from 'react-countup';\r\nimport { Popup } from 'react-leaflet'\r\nimport { NetworkIdentity } from '../../models/NetworkResponder';\r\nimport './EndpointPopup.css'\r\n\r\ninterface Props {\r\n id: NetworkIdentity;\r\n count: number;\r\n}\r\n\r\nexport default class EndpointPopup extends React.PureComponent {\r\n public render() {\r\n const { id } = this.props;\r\n const countDisplay = \r\n ;\r\n\r\n if (!id.latitude || !id.longitude) { return null; }\r\n \r\n\r\n return (\r\n \r\n
\r\n
\r\n \r\n {countDisplay}\r\n \r\n
\r\n
\r\n
{id.name}
\r\n
\r\n
\r\n
\r\n );\r\n }\r\n\r\n private formatNumber = (value: number) => value.toLocaleString();\r\n}\r\n","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport { arc } from '../bundled/arc';\r\n\r\n// tslint:disable \r\nexport function CalculateGeodesicLine (from, to) {\r\n /*\r\n * Convert array of points to xy object\r\n * expected by arc.js\r\n */\r\n const arrayToXY = coord => ({\r\n x: coord[1],\r\n y: coord[0]\r\n });\r\n\r\n /* \r\n * Simple heuristic for getting a visually\r\n * reasonable-looking number of vertices based on \r\n * euclidian distance between two lat|long points\r\n */\r\n const calculateVertices = (p1, p2) => {\r\n const d1 = Math.abs(p1[0] - p2[0]);\r\n const d2 = Math.abs(p1[1] - p2[1]);\r\n return Math.round((d1 + d2) / 4);\r\n }\r\n const vertexCount = calculateVertices(from, to);\r\n\r\n // No need to calculate arc if it's a straight line\r\n if (vertexCount === 1) {\r\n return [from, to];\r\n }\r\n // Else calculate the arc for computed vertex count\r\n else {\r\n const generator = new arc.GreatCircle(arrayToXY(from), arrayToXY(to));\r\n const arcLine = generator.Arc(vertexCount);\r\n\r\n // Switch lat and long\r\n return arcLine.geometries[0].coords.map(e => { return [e[1], e[0]]; });\r\n }\r\n}\r\n\r\n","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\ninterface Dimensions {\r\n sidebarWidth: number;\r\n contentWidth: number;\r\n height: number;\r\n}\r\n\r\nexport default function computeDimensions(): Dimensions {\r\n const dim: Dimensions = { sidebarWidth: 0, contentWidth: 0, height: 0 };\r\n const sidebar = document.getElementById('sidebar-container')!;\r\n const header = document.getElementById('header-container')!;\r\n\r\n dim.sidebarWidth = sidebar.getClientRects()[0].width;\r\n dim.height = window.innerHeight - header.getClientRects()[0].height;\r\n dim.contentWidth = window.innerWidth - dim.sidebarWidth;\r\n return dim;\r\n}","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport { LatLng } from 'leaflet';\r\nimport React from 'react';\r\nimport { Map as LeafletMap, TileLayer } from 'react-leaflet';\r\nimport AntPath from 'react-leaflet-ant-path';\r\nimport { Dispatch } from 'redux';\r\nimport { connect } from 'react-redux'\r\nimport { setViewport } from '../../actions/map';\r\nimport { antPathOptionTypes } from '../../components/Map/AntPathTypes';\r\nimport EndpointMarker from '../../components/Map/EndpointMarker';\r\nimport EndpointPopup from '../../components/Map/EndpointPopup';\r\nimport { AppState, MapState } from '../../models/state/AppState';\r\nimport { CohortStateType } from '../../models/state/CohortState';\r\nimport { CohortState } from '../../models/state/CohortState';\r\nimport { Viewport} from '../../models/state/Map';\r\nimport { NetworkIdentity } from '../../models/NetworkResponder';\r\nimport { CalculateGeodesicLine } from '../../utils/calculateGeodesicLine';\r\nimport computeDimensions from '../../utils/computeDimensions';\r\nimport 'leaflet/dist/leaflet.css';\r\nimport './LeafMap.css'\r\n\r\ninterface OwnProps {\r\n tileUrl: string;\r\n}\r\n\r\ninterface StateProps {\r\n cohort: CohortState;\r\n networkResponders: Map;\r\n map: MapState;\r\n}\r\n\r\ninterface DispatchProps {\r\n setViewport: (v: Viewport) => void;\r\n}\r\n\r\ntype Props = StateProps & OwnProps & DispatchProps;\r\n\r\ninterface State {\r\n height: number;\r\n ref: any;\r\n width: number;\r\n}\r\n\r\nexport class LeafMap extends React.Component {\r\n constructor(props: Props) {\r\n super(props);\r\n this.state = {\r\n height: 0,\r\n ref: React.createRef(),\r\n width: 0\r\n };\r\n }\r\n\r\n public onViewportChanged: any = (v: Viewport) => {\r\n if (!this.state.ref.current) {\r\n return;\r\n }\r\n v.bounds = this.state.ref.current.leafletElement.getBounds();\r\n }\r\n\r\n public updateDimensions = () => {\r\n const dimensions = computeDimensions();\r\n this.setState({ height: dimensions.height, width: dimensions.contentWidth });\r\n }\r\n\r\n public componentWillMount() {\r\n this.updateDimensions();\r\n }\r\n\r\n public componentDidMount() {\r\n window.addEventListener('resize', this.updateDimensions);\r\n }\r\n\r\n public componentWillUnmount() {\r\n window.removeEventListener('resize', this.updateDimensions);\r\n }\r\n\r\n public render() {\r\n const { networkResponders, cohort, tileUrl, map } = this.props;\r\n const { width, height, ref } = this.state;\r\n const markers: any[] = [];\r\n const popups: any[] = [];\r\n const paths: any[] = [];\r\n const home = networkResponders.get(0)!;\r\n const responders: NetworkIdentity[] = networkResponders.size > 0 && cohort.networkCohorts.size > 0\r\n ? [ ...networkResponders.values() ].filter((n: NetworkIdentity) => n.enabled && !n.isGateway && n.latitude && n.longitude)\r\n : [];\r\n\r\n for (const nr of responders) {\r\n const netCohort = cohort.networkCohorts.get(nr.id);\r\n markers.push();\r\n popups.push()\r\n\r\n if (home && !home.isGateway && nr.id > 0) {\r\n const opts = cohort!.count.state === CohortStateType.LOADED ? antPathOptionTypes.RESULT_RECEIVED : antPathOptionTypes.SENDING_QUERY;\r\n const line = CalculateGeodesicLine([ home.latitude, home.longitude ], [ nr.latitude, nr.longitude ]);\r\n if (home.enabled) {\r\n paths.push();\r\n }\r\n }\r\n }\r\n \r\n return (\r\n \r\n \r\n {popups}\r\n {markers}\r\n {paths}\r\n \r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state: AppState, ownProps: OwnProps): StateProps => {\r\n return { \r\n cohort: state.cohort,\r\n map: state.map,\r\n networkResponders: state.responders\r\n };\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch: Dispatch, ownProps: OwnProps) : DispatchProps => {\r\n return { \r\n setViewport: (viewport: Viewport) => {\r\n dispatch(setViewport(viewport))\r\n }\r\n };\r\n}\r\n\r\nexport default connect\r\n (mapStateToProps, mapDispatchToProps)(LeafMap)","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport { Viewport } from '../models/state/Map';\r\n\r\nexport const SET_VIEWPORT = 'SET_VIEWPORT';\r\n\r\nexport interface MapAction {\r\n viewport?: Viewport;\r\n type: string;\r\n}\r\n\r\nexport const setViewport = (viewport: Viewport): MapAction => {\r\n return {\r\n type: SET_VIEWPORT,\r\n viewport\r\n };\r\n};\r\n","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport React from 'react';\r\nimport { CategorizedDatasetRef, PatientListDatasetQuery } from '../../../models/patientList/Dataset';\r\nimport { keys } from '../../../models/Keyboard';\r\nimport { Input } from 'reactstrap';\r\nimport { DatasetsState } from '../../../models/state/AppState';\r\nimport { searchPatientListDatasets, setDatasetSearchTerm } from '../../../actions/datasets';\r\n\r\ninterface Props {\r\n autoSelectOnSearch: boolean;\r\n datasets: DatasetsState;\r\n dispatch: any;\r\n handleDatasetSelect: (dataset: PatientListDatasetQuery) => void;\r\n handleDatasetRequest: () => any;\r\n searchEnabled: boolean;\r\n selected: string;\r\n}\r\n\r\nexport default class DatasetContainer extends React.PureComponent {\r\n private className = 'patientlist-add-dataset';\r\n constructor(props: Props) {\r\n super(props);\r\n this.state = {\r\n categoryIndex: 0,\r\n datasetIndex: 0\r\n }\r\n }\r\n\r\n public static defaultProps = {\r\n autoSelectOnSearch: true,\r\n searchEnabled: true\r\n }\r\n\r\n public componentDidMount() {\r\n const { datasets, handleDatasetSelect } = this.props;\r\n const { displayOrder } = datasets;\r\n\r\n if (displayOrder.size) {\r\n const firstDs = this.getFirstDataset();\r\n if (firstDs) {\r\n handleDatasetSelect(firstDs);\r\n }\r\n }\r\n }\r\n\r\n public getSnapshotBeforeUpdate(prevProps: Props) {\r\n const { datasets, handleDatasetSelect, autoSelectOnSearch } = this.props;\r\n const { displayOrder } = datasets;\r\n\r\n if (autoSelectOnSearch && displayOrder.size && !datasets.displayOrder.get(datasets.selected)) {\r\n const firstDs = this.getFirstDataset();\r\n if (firstDs) {\r\n handleDatasetSelect(firstDs);\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n public componentDidUpdate() { }\r\n\r\n public handleSearchInputChange = (e: React.FormEvent) => {\r\n const { dispatch } = this.props;\r\n const term = e.currentTarget.value;\r\n dispatch(searchPatientListDatasets(term));\r\n dispatch(setDatasetSearchTerm(term));\r\n }\r\n\r\n public render() {\r\n const { datasets, handleDatasetRequest, searchEnabled } = this.props;\r\n const c = this.className;\r\n return (\r\n
\r\n\r\n {/* Search */}\r\n \r\n
\r\n\r\n {/* No datasets found */}\r\n {datasets.display.size === 0 &&\r\n
\r\n No datasets found. Try refining your search.\r\n
\r\n }\r\n\r\n {/* Categories */}\r\n {[ ...datasets.display.values() ].map((cat: CategorizedDatasetRef) => {\r\n return (\r\n
\r\n
{cat.category}
\r\n\r\n {/* Datasets */}\r\n {[ ...cat.datasets.values() ].map((d: PatientListDatasetQuery) => {\r\n return (\r\n
\r\n {d.name}\r\n
\r\n );\r\n })}\r\n
)\r\n })}\r\n
\r\n
\r\n )\r\n }\r\n\r\n private getFirstDataset = (): PatientListDatasetQuery | undefined => {\r\n const { datasets } = this.props;\r\n const firstCat = [ ...datasets.display.values() ][0];\r\n if (firstCat) {\r\n return [ ...firstCat.datasets.values() ][0];\r\n }\r\n return;\r\n }\r\n\r\n private handleSearchKeydown = (k: React.KeyboardEvent) => {\r\n const { datasets, handleDatasetRequest } = this.props;\r\n const key = (k.key === ' ' ? keys.Space : keys[k.key as any]);\r\n if (!key || !datasets.displayOrder.size) { return; }\r\n\r\n switch (key) {\r\n case keys.ArrowUp: \r\n case keys.ArrowDown:\r\n this.handleArrowUpDownKeyPress(key);\r\n k.preventDefault();\r\n break;\r\n case keys.Enter:\r\n handleDatasetRequest();\r\n break;\r\n }\r\n }\r\n\r\n private handleArrowUpDownKeyPress = (key: number) => {\r\n const { handleDatasetSelect } = this.props;\r\n const { datasets, selected } = this.props;\r\n const order = datasets.displayOrder.get(selected);\r\n const hasData = datasets.displayOrder.size > 0;\r\n\r\n if (hasData && order) {\r\n let seq = key === keys.ArrowUp\r\n ? datasets.all.get(order.prevId)!\r\n : datasets.all.get(order.nextId)!;\r\n if (seq) {\r\n handleDatasetSelect(seq);\r\n }\r\n } else if (!datasets.displayOrder.get(selected) && hasData && key === keys.ArrowDown) {\r\n const firstDs = this.getFirstDataset();\r\n if (firstDs) {\r\n handleDatasetSelect(firstDs);\r\n }\r\n }\r\n }\r\n\r\n private handleDatasetOptionClick = (dataset: PatientListDatasetQuery) => {\r\n const { handleDatasetSelect } = this.props;\r\n handleDatasetSelect(dataset);\r\n }\r\n\r\n private setDatasetOptionClass = (dataset: PatientListDatasetQuery) => {\r\n const { selected } = this.props;\r\n const c = this.className;\r\n const classes = [ `${c}-select-dataset-option` ];\r\n\r\n if (dataset.id === selected) { classes.push('selected'); }\r\n if (dataset.unsaved) { classes.push('unsaved'); }\r\n\r\n return classes.join(' ');\r\n }\r\n};","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nexport default interface REDCapProjectRequest {\r\n is_longitudinal: string;\r\n project_title: string;\r\n purpose?: REDCapProjectPurpose;\r\n purpose_other?: string;\r\n project_notes?: string;\r\n record_autonumbering_enabled: string;\r\n surveys_enabled?: string;\r\n}\r\n\r\nexport enum REDCapProjectPurpose {\r\n Practice = '0',\r\n Other = '1',\r\n Research = '2',\r\n QualityImprovement = '3',\r\n OperationSupport = '4'\r\n}","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport Axios from 'axios';\r\nimport { AppState } from '../models/state/AppState';\r\nimport REDCapEvent from '../models/redcapExport/Event';\r\nimport REDCapEventMapping from '../models/redcapExport/EventMapping';\r\nimport REDCapFieldMetadata from '../models/redcapExport/Metadata';\r\nimport REDCapProjectRequest, { REDCapProjectPurpose } from '../models/redcapExport/Project';\r\nimport REDCapRepeatingFormEvent from '../models/redcapExport/RepeatingFormEvent';\r\nimport REDCapUser from '../models/redcapExport/User';\r\nimport { HttpFactory } from './HttpFactory';\r\n\r\nenum ContentTypes {\r\n EventMappings = 'formEventMapping',\r\n Events = 'event',\r\n Metadata = 'metadata',\r\n Project = 'project',\r\n Records = 'record',\r\n RepeatingFormsEvents = 'repeatingFormsEvents',\r\n Users = 'user',\r\n Version = 'version'\r\n}\r\n\r\ninterface REDCapVersion {\r\n major: number;\r\n minor: number;\r\n patch: number;\r\n}\r\n\r\nexport const getExportOptions = (state: AppState) => {\r\n const { token } = state.session.context!;\r\n const http = HttpFactory.authenticated(token);\r\n return http.get('/api/export/options');\r\n};\r\n\r\nexport const getREDCapVersion = (state: AppState) => {\r\n const { token } = state.session.context!;\r\n const http = HttpFactory.authenticated(token);\r\n return http.get('/api/export/redcap/version');\r\n};\r\n\r\nexport const requestProjectCreation = (state: AppState, projectName: string, classic: boolean) => {\r\n const { token } = state.session.context!;\r\n const http = HttpFactory.authenticated(token);\r\n const project: REDCapProjectRequest = {\r\n is_longitudinal: (classic ? '0' : '1'),\r\n project_title: projectName,\r\n purpose: REDCapProjectPurpose.Practice,\r\n record_autonumbering_enabled: '0'\r\n };\r\n return http.post('/api/export/redcap/project/create', project);\r\n};\r\n\r\nexport class REDCapHttpConnector {\r\n private token: string = '';\r\n private endpointUri: string = '';\r\n private http = Axios.create({\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/x-www-form-urlencoded'\r\n }\r\n });\r\n\r\n constructor(token?: string, endpointUri?: string) {\r\n if (token) { this.token = token; }\r\n if (endpointUri) { this.endpointUri = endpointUri; }\r\n }\r\n\r\n /*\r\n * Configure the API token and REDCap endpoint. Used if\r\n * they are not known at initialization.\r\n */\r\n public configure(token: string, endpointUri: string) {\r\n this.token = token;\r\n this.endpointUri = endpointUri;\r\n }\r\n\r\n /*\r\n * Get Project Info.\r\n */\r\n public getProjectInfo = () => this.request(ContentTypes.Project);\r\n\r\n /*\r\n * Convenience method for getting the user-facing url for\r\n * a newly exportted project. This is returned at the\r\n * end of an export.\r\n */\r\n public getProjectUrl = async (version: string) => {\r\n const project: any = await this.getProjectInfo();\r\n const parts = [\r\n `${this.endpointUri.replace('/api/','')}`,\r\n `redcap_v${version}`,\r\n `DataEntry`,\r\n `record_status_dashboard.php?pid=${project.data.project_id}`\r\n ];\r\n return parts.join('/');\r\n }\r\n\r\n /*\r\n * Export Metadata via derived fields from Leaf Patient List.\r\n */\r\n public exportMetadata = (metadata: REDCapFieldMetadata[]) => this.request(ContentTypes.Metadata, metadata);\r\n\r\n /*\r\n * Export Events. Each instance of row within a dataset for\r\n * a unique patient becomes an event in REDCap.\r\n */\r\n public exportEvents = (events: REDCapEvent[]) => this.request(ContentTypes.Events, events, [ 'action=import', 'override=0' ]);\r\n\r\n /*\r\n * Export Event Mappings. This links REDCap forms (which each are \r\n * derived from Leaf datasets) to each of their respective Events.\r\n */\r\n public exportEventMappings = (eventMappings: REDCapEventMapping[]) => this.request(ContentTypes.EventMappings, eventMappings);\r\n\r\n /*\r\n * Export Users. This is a single object array of the current user,\r\n * who will be the project owner in REDCap.\r\n */\r\n public exportUsers = (users: REDCapUser[]) => this.request(ContentTypes.Users, users);\r\n\r\n /*\r\n * Export Repeating forms events. This was first allowed in REDCap v8.10.0 (at UW's request).\r\n * This method is the preferred way of creating and deploying Leaf -> REDCap projects.\r\n */\r\n public exportRepeatingFormsEvents = (repeatingForms: REDCapRepeatingFormEvent[]) => this.request(ContentTypes.RepeatingFormsEvents, repeatingForms);\r\n\r\n /*\r\n * Export records. These are rows from the Patient List.\r\n */\r\n public exportRecords = (records: object[]) => this.request(ContentTypes.Records, records, [ 'type=flat', 'overwriteBehavior=normal', 'forceAutoNumber=false' ]);\r\n\r\n /*\r\n * Send REDCap API request.\r\n */\r\n private request = (content: string, data?: any, additionalParams?: any[]): Promise => {\r\n const payload = this.getPayload(content, data, additionalParams);\r\n return this.http.post(this.endpointUri, payload.join('&'));\r\n }\r\n\r\n /*\r\n * Concatenate JSON data into an API-friendly string.\r\n */\r\n private getPayload = (content: string, data?: any, additionalParams?: any[]): string[] => {\r\n let payload = [\r\n this.toKeyValue('token', this.token),\r\n this.toKeyValue('content', content),\r\n this.toKeyValue('format', 'json'),\r\n ];\r\n if (data) {\r\n payload.push(this.toKeyValue('data', (typeof data === 'string' ? data : JSON.stringify(data))));\r\n }\r\n if (additionalParams) {\r\n payload = payload.concat(additionalParams)\r\n }\r\n return payload;\r\n }\r\n\r\n private toKeyValue = (key: string, value: string): string => `${key}=${value}`;\r\n};\r\n\r\n\r\n/*\r\n * Convenience method for checking if given REDCap instance\r\n * allows for repeatable form declaration via API.\r\n */\r\nexport const repeatableFormsAllowed = (versionStr: string) => {\r\n const version = versionStringToObject(versionStr);\r\n const min = minRepeatingFormEventsApiVersion;\r\n return ( \r\n version.major > min.major ||\r\n (version.major === min.major && version.minor > min.minor) ||\r\n (version.major === min.major && version.minor === min.minor && version.patch >= min.patch)\r\n );\r\n};\r\n\r\nconst versionStringToObject = (vStr: string): REDCapVersion => {\r\n const split = vStr.split('.');\r\n return {\r\n major: +split[0],\r\n minor: +split[1],\r\n patch: +split[2]\r\n };\r\n};\r\n\r\nconst minRepeatingFormEventsApiVersion: REDCapVersion = {\r\n major: 8,\r\n minor: 10,\r\n patch: 0\r\n};\r\n","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport React from 'react';\r\nimport { Col, Row, Button } from 'reactstrap';\r\nimport { getPatientListDataset } from '../../../actions/cohort/patientList';\r\nimport { DateBoundary } from '../../../models/panel/Date';\r\nimport { PatientListConfiguration } from '../../../models/patientList/Configuration';\r\nimport DatasetContainer from './DatasetContainer';\r\nimport { DatasetsState } from '../../../models/state/AppState';\r\nimport { PatientListDatasetQuery } from '../../../models/patientList/Dataset';\r\n\r\ninterface Props {\r\n className?: string;\r\n configuration: PatientListConfiguration;\r\n dates: DateBoundary[];\r\n datasets: DatasetsState;\r\n dispatch: any;\r\n handleClickClose: () => void;\r\n handleDatasetSelect: (dataset: PatientListDatasetQuery) => void;\r\n handleDateSelect: (date: DateBoundary) => void;\r\n selectedDates: DateBoundary;\r\n}\r\n\r\nexport default class AddDatasetSelectors extends React.PureComponent {\r\n constructor(props: Props) {\r\n super(props);\r\n }\r\n\r\n public render() {\r\n const { datasets, className, dates, dispatch, handleDatasetSelect, handleClickClose } = this.props;\r\n const c = className ? className : 'patientlist-add-dataset';\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {dates.map((d: DateBoundary) => {\r\n return (\r\n
\r\n {d.display}\r\n
\r\n );\r\n })}\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n )\r\n }\r\n\r\n private handleDateOptionClick = (opt: DateBoundary) => {\r\n const { handleDateSelect } = this.props;\r\n handleDateSelect(opt);\r\n }\r\n\r\n private setDateOptionClass = (date: DateBoundary) => {\r\n const { className, selectedDates } = this.props;\r\n return `${className}-select-date-option ${date === selectedDates ? 'selected' : ''}`\r\n }\r\n\r\n private handleDatasetRequest = () => {\r\n const { datasets, selectedDates, dispatch, handleDatasetSelect } = this.props;\r\n\r\n if (datasets.selected) {\r\n const ds = datasets.all.get(datasets.selected)!;\r\n dispatch(getPatientListDataset(ds, selectedDates));\r\n handleDatasetSelect(ds);\r\n }\r\n }\r\n}\r\n","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport React from 'react';\r\nimport { CohortStateType, NetworkCohortState } from '../../../models/state/CohortState';\r\nimport { NetworkIdentity } from '../../../models/NetworkResponder';\r\n\r\ninterface Props {\r\n cohort: NetworkCohortState;\r\n responder: NetworkIdentity;\r\n}\r\n\r\nexport default class ResponderStatus extends React.PureComponent {\r\n private classname = 'patientlist-responder-status'\r\n constructor(props: Props) {\r\n super(props);\r\n }\r\n\r\n public render() {\r\n const c = this.classname;\r\n const { cohort, responder } = this.props;\r\n return (\r\n
\r\n
{responder.name}
\r\n
{this.getStateDisplay()}
\r\n
\r\n );\r\n }\r\n\r\n private getStateDisplay = () => {\r\n switch (this.props.cohort.patientList.state) {\r\n case CohortStateType.IN_ERROR:\r\n return Error!;\r\n case CohortStateType.LOADED:\r\n return Loaded;\r\n case CohortStateType.NOT_LOADED:\r\n return Not loaded;\r\n case CohortStateType.REQUESTING:\r\n return Requesting data...;\r\n default:\r\n return null;\r\n }\r\n }\r\n}\r\n","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport React from 'react';\r\nimport { NetworkCohortState, CohortStateType } from '../../../models/state/CohortState';\r\nimport { NetworkIdentity, NetworkResponderMap } from '../../../models/NetworkResponder';\r\nimport ResponderStatus from './ResponderStatus';\r\nimport './ResponderStatus.css';\r\n\r\ninterface Props {\r\n cohortMap: Map;\r\n responderMap: NetworkResponderMap;\r\n}\r\n\r\ninterface CohortResponder {\r\n cohort: NetworkCohortState;\r\n responder: NetworkIdentity;\r\n}\r\n\r\nexport default class ResponderStatusSummary extends React.PureComponent {\r\n private classname = 'patientlist-responder-status-summary'\r\n constructor(props: Props) {\r\n super(props);\r\n }\r\n\r\n public render() {\r\n const c = this.classname;\r\n const { cohortMap, responderMap } = this.props;\r\n const cohorts: CohortResponder[] = [];\r\n let completed = 0;\r\n cohortMap.forEach((nc: NetworkCohortState) => {\r\n const r = responderMap.get(nc.id)!;\r\n if (r.enabled && nc.count.state === CohortStateType.LOADED) {\r\n cohorts.push({ cohort: nc, responder: r });\r\n }\r\n if (nc.patientList.state === CohortStateType.LOADED) {\r\n completed++;\r\n }\r\n });\r\n\r\n return (\r\n
\r\n
\r\n {completed} \r\n of \r\n {cohorts.length} \r\n sites complete\r\n
\r\n {cohorts.map((nc: CohortResponder) => (\r\n )\r\n )}\r\n
\r\n );\r\n }\r\n}\r\n","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport React from 'react';\r\nimport AddDatasetSelectors from '../AddDatasetSelectors/AddDatasetSelectors';\r\nimport ResponderStatusSummary from '../ResponderStatus/ResponderStatusSummary';\r\nimport { NetworkResponderMap } from '../../../models/NetworkResponder';\r\nimport { NetworkCohortState } from '../../../models/state/CohortState';\r\nimport { DateBoundary, DateFilter, DateIncrementType } from '../../../models/panel/Date';\r\nimport { PatientListConfiguration } from '../../../models/patientList/Configuration';\r\nimport { createPortal } from 'react-dom';\r\nimport { DatasetsState } from '../../../models/state/AppState';\r\nimport { setDatasetSelected } from '../../../actions/datasets';\r\nimport { PatientListDatasetQuery } from '../../../models/patientList/Dataset';\r\nimport './AddDatasetButton.css';\r\n\r\ninterface Props {\r\n cohortMap: Map;\r\n configuration: PatientListConfiguration;\r\n datasets: DatasetsState;\r\n responderMap: NetworkResponderMap;\r\n dispatch: any;\r\n}\r\n\r\ninterface State {\r\n selectedDates: DateBoundary;\r\n showSelectorModal: boolean;\r\n}\r\n\r\nconst none: DateFilter = { dateIncrementType: DateIncrementType.NONE };\r\nconst today: DateFilter = { dateIncrementType: DateIncrementType.NOW };\r\nconst dates: DateBoundary[] = [\r\n { display: 'Anytime', start: none, end: none },\r\n { display: 'In Past 48 Hours', start: { increment: -48, dateIncrementType: DateIncrementType.HOUR }, end: today },\r\n { display: 'In Past 7 Days', start: { increment: -7, dateIncrementType: DateIncrementType.DAY }, end: today },\r\n { display: 'In Past 30 Days', start: { increment: -30, dateIncrementType: DateIncrementType.DAY }, end: today },\r\n { display: 'In Past 6 Months', start: { increment: -6, dateIncrementType: DateIncrementType.MONTH }, end: today },\r\n { display: 'In Past 12 Months', start: { increment: -12, dateIncrementType: DateIncrementType.MONTH }, end: today },\r\n { display: 'In Past 2 Years', start: { increment: -2, dateIncrementType: DateIncrementType.YEAR }, end: today },\r\n { display: 'In Past 3 Years', start: { increment: -3, dateIncrementType: DateIncrementType.YEAR }, end: today }\r\n];\r\n\r\nexport default class AddDatasetButton extends React.PureComponent {\r\n private className = 'patientlist-add-dataset';\r\n private mouseOut = false;\r\n constructor(props: Props) {\r\n super(props);\r\n this.state = {\r\n selectedDates: dates[4],\r\n showSelectorModal: false\r\n }\r\n }\r\n\r\n public componentDidUpdate(prevProps: Props, prevState: any) {\r\n const { showSelectorModal } = this.state;\r\n const { configuration } = this.props;\r\n\r\n // Set focus to the element body to catch blur events if clicked outside\r\n if (showSelectorModal && !prevState.showSelectorModal) {\r\n const el: any = document.getElementsByClassName(`${this.className}-select-container`);\r\n if (el && el[0]) {\r\n el[0].focus();\r\n } \r\n }\r\n if (!configuration.isFetching && prevProps.configuration.isFetching) {\r\n this.setState({ showSelectorModal: false });\r\n }\r\n }\r\n\r\n public render() {\r\n const c = this.className;\r\n const { selectedDates, showSelectorModal } = this.state;\r\n const { datasets, configuration, dispatch, cohortMap, responderMap } = this.props;\r\n const modalClasses = [ `${c}-select-container` ];\r\n const overlayClasses = [ `${c}-overlay` ];\r\n\r\n if (showSelectorModal) {\r\n modalClasses.push('show');\r\n if (!configuration.isFetching) {\r\n overlayClasses.push('show');\r\n }\r\n }\r\n\r\n return (\r\n
\r\n {createPortal(\r\n
, \r\n document.getElementById('main-content')!\r\n )}\r\n
{this.getButtonContent()}
\r\n
\r\n {configuration.isFetching &&\r\n \r\n }\r\n {!configuration.isFetching &&\r\n }\r\n
\r\n
\r\n )\r\n }\r\n \r\n private getButtonContent = () => {\r\n const c = this.className;\r\n const { showSelectorModal } = this.state;\r\n const { datasets, configuration } = this.props;\r\n const selected = datasets.all.get(datasets.selected);\r\n let selectedName = '';\r\n\r\n if (selected) {\r\n const name = selected.name;\r\n if (name.length > 30) {\r\n selectedName = name.substring(0, 30) + '...';\r\n } else {\r\n selectedName = name;\r\n }\r\n }\r\n\r\n if (configuration.isFetching) {\r\n return
Loading data...
;\r\n } else if (showSelectorModal && datasets.display.size && datasets.selected) {\r\n return
+ {selectedName}
;\r\n } else {\r\n return + Add More Data;\r\n }\r\n }\r\n\r\n private handleDateOptionClick = (opt: DateBoundary) => {\r\n this.setState({ selectedDates: opt });\r\n }\r\n\r\n private handleDatasetOptionClick = (dataset: PatientListDatasetQuery) => {\r\n const { dispatch } = this.props;\r\n dispatch(setDatasetSelected(dataset));\r\n }\r\n\r\n private handleClick = () => {\r\n this.setState({ showSelectorModal: true });\r\n }\r\n\r\n private handleClickClose = () => {\r\n this.setState({ showSelectorModal: false });\r\n }\r\n\r\n private handleBlur = () => {\r\n if (this.mouseOut) {\r\n this.setState({ showSelectorModal: false });\r\n }\r\n }\r\n\r\n private handleMouseEnter = () => this.mouseOut = false;\r\n\r\n private handleMouseLeave = () => this.mouseOut = true;\r\n}\r\n","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport React from 'react';\r\nimport { Col, Row } from 'reactstrap';\r\nimport { toggleDatasetColumn, deleteDataset } from '../../actions/cohort/patientList';\r\nimport CheckBoxSlider from '../Other/CheckboxSlider/CheckboxSlider';\r\nimport PopupBox from '../Other/PopupBox/PopupBox';\r\nimport { PatientListDatasetDefinition, PatientListDatasetSummaryType } from '../../models/patientList/Dataset';\r\nimport { PatientListColumn } from '../../models/patientList/Column';\r\n\r\ninterface Props {\r\n className?: string;\r\n data: PatientListDatasetDefinition;\r\n dispatch: any;\r\n}\r\n\r\ninterface State {\r\n DOMRect?: DOMRect;\r\n showColumnBox: boolean;\r\n}\r\n\r\nexport default class DatasetColumnSelector extends React.PureComponent {\r\n constructor(props: Props) {\r\n super(props);\r\n this.state = {\r\n showColumnBox: false\r\n }\r\n }\r\n\r\n public render() {\r\n const { className, data } = this.props;\r\n const c = className ? className : 'patientlist';\r\n const cs = `${c}-column-selector`;\r\n const cols: PatientListColumn[] = [];\r\n data.columns.forEach((col: PatientListColumn) => cols.push(col));\r\n\r\n return (\r\n
\r\n {data.displayName}\r\n {this.state.showColumnBox &&\r\n \r\n
\r\n {!!data.summaryType &&\r\n
\r\n Remove\r\n
\r\n }\r\n {data.dateBounds &&\r\n
\r\n {data.displayName} - {data.dateBounds!.display}\r\n
\r\n }\r\n {!!data.summaryType &&\r\n
\r\n {this.getSummaryText(data.summaryType!)}\r\n
\r\n }\r\n {cols.map((col: PatientListColumn) => (\r\n \r\n \r\n
{col.displayName}
\r\n \r\n \r\n \r\n \r\n
\r\n ))}\r\n
\r\n
\r\n }\r\n
\r\n );\r\n }\r\n\r\n private handleClick = (e: any) => { \r\n if (e.target.className === e.currentTarget.className || !this.state.showColumnBox) {\r\n const domRect: DOMRect = e.target.getBoundingClientRect();\r\n this.setState({ showColumnBox: !this.state.showColumnBox, DOMRect: domRect });\r\n }\r\n }\r\n\r\n private handleRemoveDatasetClick = () => {\r\n this.setState({ showColumnBox: false });\r\n this.props.dispatch(deleteDataset(this.props.data));\r\n }\r\n\r\n private handleColumnBoxClickedOutside = () => {\r\n this.setState({ showColumnBox: !this.state.showColumnBox });\r\n }\r\n\r\n private handleColumnClick = (col: PatientListColumn) => {\r\n this.props.dispatch(toggleDatasetColumn(col));\r\n }\r\n\r\n private getSummaryText = (type: PatientListDatasetSummaryType) => {\r\n const c = `patientlist-column-selector-emphasis`;\r\n if (type === PatientListDatasetSummaryType.Quantitative) {\r\n return (\r\n

This is a numeric dataset, and the columns here represent statistical summaries. \r\n To drill down to actual raw data values, click on a patient in the patient list.\r\n

\r\n );\r\n }\r\n else {\r\n return (\r\n

This is a non-numeric dataset, and the columns here show a count of the total rows of data and\r\n the earliest and most recent values. To drill down to actual raw data values, click on a patient in the patient list.\r\n

\r\n );\r\n }\r\n }\r\n}","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport { PatientListColumn } from './Column';\r\nimport { PatientListDatasetDefinition, PatientListDatasetId } from './Dataset';\r\n\r\nexport enum PatientListSortType { NONE = 0, ASC = 1, DESC = 2 }\r\n\r\nexport enum PatientListDndType { COLUMN_HEADER = 'COLUMN_HEADER', TUPLE = 'TUPLE' }\r\n\r\nexport interface PatientListSort {\r\n column?: PatientListColumn;\r\n sortType: PatientListSortType;\r\n}\r\n\r\nexport interface PatientListConfiguration {\r\n multirowDatasets: Map;\r\n singletonDatasets: Map;\r\n displayColumns: PatientListColumn[];\r\n isFetching: boolean;\r\n fetchingDataset?: string;\r\n pageNumber: number;\r\n pageSize: number;\r\n sort: PatientListSort;\r\n}","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport { Action, Dispatch } from 'redux';\r\nimport { AppState } from '../models/state/AppState';\r\nimport { ExportOptionsDTO, ExportProgress } from '../models/state/Export';\r\nimport REDCapProjectExportConfiguration from '../models/redcapExport/ExportConfiguration';\r\nimport { getAllData, getREDCapExportData } from '../services/patientListApi';\r\nimport { REDCapHttpConnector, requestProjectCreation, getREDCapVersion, repeatableFormsAllowed } from '../services/redcapApi';\r\nimport { formatSmallNumber } from '../utils/formatNumber';\r\nimport { PatientListDatasetExport } from '../models/patientList/Dataset';\r\n\r\nexport const EXPORT_COMPLETE = 'EXPORT_COMPLETE'\r\nexport const EXPORT_ERROR = 'EXPORT_ERROR';\r\nexport const EXPORT_CLEAR_ERROR_OR_COMPLETE = 'EXPORT_CLEAR_ERROR_OR_COMPLETE';\r\nexport const EXPORT_SET_OPTIONS = 'EXPORT_SET_OPTIONS';\r\nexport const EXPORT_SET_PROGRESS = 'EXPORT_SET_PROGRESS';\r\n\r\nexport interface ExportAction {\r\n exportOptions?: ExportOptionsDTO;\r\n progress?: ExportProgress;\r\n url?: string;\r\n error?: string;\r\n type: string;\r\n}\r\n\r\n// Asynchronous\r\n/*\r\n * Attempt to export results to a REDCap instance. If the REDCap version\r\n * does not allow repeating forms, this will fall back to a longitudinal\r\n * style project.\r\n */\r\nexport const exportToREDCap = (projectTitle: string) => {\r\n return async (dispatch: Dispatch>, getState: () => AppState) => {\r\n startTime = new Date().getTime();\r\n try {\r\n /*\r\n * Initialize params.\r\n */\r\n dispatch(setExportProgress(1, 'Preparing export'));\r\n const state = getState();\r\n const { redCap } = state.dataExport;\r\n const batchSize = redCap.batchSize || 10;\r\n const username = state.auth.userContext!.name;\r\n\r\n /*\r\n * Request a new project from the server and retrieve \r\n * the associated project token. The token will be used\r\n * for subsequent API calls.\r\n */ \r\n const versionResp = await getREDCapVersion(state);\r\n const version = versionResp.data;\r\n const useRepeatableForms: boolean = repeatableFormsAllowed(version);\r\n const createResp: any = await requestProjectCreation(state, projectTitle, useRepeatableForms);\r\n const token = createResp.data as string;\r\n const conn = new REDCapHttpConnector(token, redCap.apiURI!);\r\n\r\n /*\r\n * Pull down the patient list, transform for REDCap project.\r\n */\r\n const data = await getAllData(state.cohort.patientList.configuration, false) as PatientListDatasetExport[];\r\n const config = await getREDCapExportData(redCap, data, projectTitle, username, useRepeatableForms) as REDCapProjectExportConfiguration;\r\n\r\n /*\r\n * Set metadata (fields) from each dataset.\r\n */\r\n dispatch(setExportProgress(2, 'Loading metadata'));\r\n await conn.exportMetadata(config.metadata);\r\n\r\n /*\r\n * If this REDCap instance supports repeating forms configuration\r\n * by API, use that, else fall back to longitudinal projects.\r\n */\r\n if (useRepeatableForms) {\r\n dispatch(setExportProgress(3, 'Loading repeatable forms'));\r\n await conn.exportRepeatingFormsEvents(config.repeatingFormEvents!);\r\n }\r\n else {\r\n dispatch(setExportProgress(3, 'Loading events'));\r\n await conn.exportEvents(config.events!);\r\n\r\n dispatch(setExportProgress(4, 'Loading event mappings'));\r\n await conn.exportEventMappings(config.eventMappings!);\r\n }\r\n\r\n /*\r\n * Export records in batches. Each row from\r\n * each patient list dataset becomes a record.\r\n */\r\n const totalRecords = config.data.length;\r\n let startIdx = 0;\r\n let completed = 4;\r\n while (startIdx <= totalRecords) {\r\n /*\r\n * Export current batch.\r\n */\r\n const endIdx = startIdx + batchSize;\r\n const batch = config.data.slice(startIdx, endIdx);\r\n const displayText = `Exporting ${formatSmallNumber(endIdx < totalRecords ? endIdx : totalRecords)} of ${formatSmallNumber(totalRecords)} records`\r\n dispatch(setExportProgress(completed, displayText));\r\n await conn.exportRecords(batch);\r\n\r\n /*\r\n * Increment current index and recalculate\r\n * export progress.\r\n */\r\n startIdx += batchSize;\r\n completed = Math.round(4 + (endIdx / totalRecords * 100 * 0.95));\r\n }\r\n\r\n /*\r\n * If we've gotten this far then the project data\r\n * has loaded correctly, so give access to the\r\n * user, then retrieve a project url.\r\n */\r\n dispatch(setExportProgress(99, 'Adding user permissions'));\r\n await conn.exportUsers(config.users);\r\n\r\n dispatch(setExportProgress(100, 'Retrieving project link'));\r\n const url: any = await conn.getProjectUrl(version);\r\n\r\n dispatch(setREDCapUrl(url));\r\n } catch (err) {\r\n console.log(err);\r\n dispatch(setExportError());\r\n }\r\n };\r\n};\r\n\r\n// Synchronous\r\nexport const setExportOptions = (exportOptions: ExportOptionsDTO): ExportAction => {\r\n return {\r\n exportOptions,\r\n type: EXPORT_SET_OPTIONS\r\n };\r\n};\r\n\r\nexport const setREDCapUrl = (url: string): ExportAction => {\r\n return {\r\n type: EXPORT_COMPLETE,\r\n url\r\n };\r\n};\r\n\r\nexport const setExportError = (): ExportAction => {\r\n return {\r\n type: EXPORT_ERROR\r\n };\r\n};\r\n\r\nexport const setExportClearErrorOrComplete = (): ExportAction => {\r\n return {\r\n type: EXPORT_CLEAR_ERROR_OR_COMPLETE\r\n };\r\n};\r\n\r\nexport const setExportProgress = (completed: number, text: string): ExportAction => {\r\n return {\r\n progress: {\r\n completed,\r\n estimatedSecondsRemaining: calculateExportCompletionTime(completed),\r\n text\r\n },\r\n type: EXPORT_SET_PROGRESS\r\n };\r\n};\r\n\r\n/*\r\n * Calculate the estimated amount of time remaining for the export\r\n * based on percent of work completed and elapsed time.\r\n */\r\nlet startTime = 0;\r\nconst calculateExportCompletionTime = (percentComplete: number): number => {\r\n const secondsElapsed = (new Date().getTime() - startTime) / 1000;\r\n const estimate = Math.round((1 - (percentComplete / 100)) * (secondsElapsed / percentComplete) * 100);\r\n return secondsElapsed < 1 ? 60 : estimate;\r\n};","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport React from 'react';\r\nimport ExportState from '../../../../models/state/Export';\r\nimport './ExportProgress.css';\r\n\r\ninterface Props {\r\n className?: string;\r\n exportState: ExportState\r\n}\r\n\r\nexport default class ExportProgress extends React.PureComponent {\r\n constructor(props: Props) {\r\n super(props);\r\n }\r\n\r\n public render() {\r\n const { className, exportState } = this.props;\r\n const { progress } = exportState;\r\n const c = className ? className : 'patientlist-export-modal-progress';\r\n\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {this.getRemainingTimeText(progress.estimatedSecondsRemaining)}\r\n
\r\n
\r\n );\r\n }\r\n\r\n private getRemainingTimeText = (estimatedSeconds?: number): string => {\r\n if (!estimatedSeconds) { return ''; }\r\n if (estimatedSeconds === 0) { return 'almost done'; }\r\n\r\n let num = estimatedSeconds;\r\n let unit = 'second';\r\n if (estimatedSeconds >= 3600) {\r\n num = Math.floor(estimatedSeconds / 3600);\r\n unit = 'hour';\r\n }\r\n if (estimatedSeconds >= 60) {\r\n num = Math.floor(estimatedSeconds / 60);\r\n unit = 'minute';\r\n }\r\n return `about ${num} ${unit}${num === 1 ? '' : 's'} remaining`;\r\n }\r\n}","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport React from 'react';\r\nimport { Button, FormGroup, Input } from 'reactstrap';\r\nimport { exportToREDCap } from '../../../../actions/dataExport';\r\nimport ExportState from '../../../../models/state/Export';\r\nimport ExportProgress from '../ExportProgress/ExportProgress';\r\nimport { formatSmallNumber } from '../../../../utils/formatNumber';\r\nimport './REDCapExport.css';\r\n\r\ninterface Props {\r\n className?: string;\r\n exportState: ExportState;\r\n handleClickClearErrorOrComplete: () => void;\r\n registerClickExportHandler: (f: any) => void;\r\n rowCount: number;\r\n}\r\n\r\ninterface State {\r\n projectNameError: boolean;\r\n projectName: string;\r\n}\r\n\r\nexport default class REDCapExport extends React.PureComponent {\r\n constructor(props: Props) {\r\n super(props);\r\n this.state = {\r\n projectNameError: false,\r\n projectName: ''\r\n }\r\n }\r\n\r\n public componentDidMount () {\r\n this.props.registerClickExportHandler(this.handleClickExport);\r\n }\r\n\r\n public render() {\r\n const { className, exportState, rowCount } = this.props;\r\n const { isComplete, isErrored, isExporting, redCap } = exportState;\r\n const c = className ? className : 'patientlist-export-modal-redcap';\r\n const inputClasses = [ 'leaf-input' ];\r\n const redcapInstanceUrl = redCap.apiURI ? redCap.apiURI!.replace('/api/','') : '';\r\n const formattedRowLimit = formatSmallNumber(redCap.rowLimit!);\r\n let inputPlaceholder = 'REDCap Project name....';\r\n\r\n if (this.state.projectNameError) {\r\n inputClasses.push('error');\r\n inputPlaceholder = 'Enter a Project name...';\r\n }\r\n\r\n return (\r\n
\r\n {!isExporting &&\r\n
\r\n

\r\n The REDCap Project Creation tool allows you to create a brand-new REDCap Project based on the data in your Patient List. \r\n Leaf will export all of your datasets and patient data, and only you will have access to the new Project.\r\n

\r\n

\r\n Your project will export to {redcapInstanceUrl}\r\n

\r\n\r\n {!!redCap.rowLimit && redCap.rowLimit < rowCount &&\r\n

\r\n Your administrator has limited REDCap data export to \r\n {formattedRowLimit}\r\n rows of data, which is less than the current \r\n {formatSmallNumber(rowCount)} \r\n rows. Leaf will export \r\n only the first {formattedRowLimit} rows in your datasets.\r\n

\r\n }\r\n\r\n \r\n \r\n \r\n
\r\n }\r\n {isExporting &&\r\n
\r\n
\r\n
\r\n
\r\n {this.getDisplay(exportState)}\r\n
\r\n {!isErrored && \r\n \r\n }\r\n
\r\n
\r\n
\r\n }\r\n {(isComplete || isErrored) && \r\n \r\n }\r\n
\r\n );\r\n }\r\n\r\n private getDisplay = (exportState: ExportState) => {\r\n const { isComplete, isErrored, progress, redCap } = exportState;\r\n\r\n if (isErrored) {\r\n return

Uh oh, it looks like something went wrong while exporting. We apologize for the inconvenience.

;\r\n }\r\n if (isComplete) {\r\n return

All done! Your new project can be found at {redCap.url}

;\r\n }\r\n return {progress.text}...;\r\n }\r\n\r\n private handleREDCapProjectNameChange = (e: any) => {\r\n const projectName = e.currentTarget.value;\r\n this.setState({ projectNameError: false, projectName });\r\n }\r\n\r\n private handleClickExport = (): any => {\r\n const projName = this.state.projectName;\r\n if (projName) {\r\n this.setState({ projectName: '' });\r\n return () => exportToREDCap(projName);\r\n }\r\n else {\r\n this.setState({ projectNameError: true });\r\n }\r\n }\r\n}","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport React from 'react';\r\nimport { Button, Col, Modal, ModalBody, ModalFooter, ModalHeader, Row } from 'reactstrap';\r\nimport { setExportClearErrorOrComplete } from '../../../actions/dataExport';\r\nimport ExportState from '../../../models/state/Export';\r\nimport './ExportDataModal.css';\r\nimport REDCapExport from './REDCap/REDCapExport';\r\n\r\ninterface Props { \r\n dispatch: any;\r\n show: boolean;\r\n exportState: ExportState\r\n toggle: () => any;\r\n rowCount: number;\r\n}\r\n\r\ninterface State {\r\n selected: string;\r\n}\r\n\r\nexport default class ExportDataModal extends React.PureComponent {\r\n private clickExportHandler: any;\r\n \r\n constructor(props: Props) {\r\n super(props);\r\n this.state = {\r\n selected: 'REDCap'\r\n }\r\n }\r\n\r\n public render() {\r\n const c = 'patientlist-export-modal';\r\n const { exportState, rowCount } = this.props;\r\n const { redCap, isExporting } = exportState;\r\n const modalClasses = [ c, 'leaf-modal', (isExporting ? 'exporting' : '') ];\r\n\r\n return (\r\n \r\n Export Data\r\n \r\n {redCap.enabled &&\r\n \r\n \r\n
\r\n \r\n REDCap\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n }\r\n {!redCap.enabled &&\r\n
\r\n

\r\n Whoops! It doesn't look like you have any export options configured. \r\n Please talk to your Leaf administrator if you believe this to be a mistake.\r\n

\r\n
\r\n }\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n );\r\n }\r\n\r\n private handleClickClearErrorOrComplete = () => {\r\n this.props.dispatch(setExportClearErrorOrComplete());\r\n }\r\n\r\n private handleClickClose = () => {\r\n if (this.props.exportState.isExporting) { return; }\r\n this.props.dispatch(this.props.toggle())\r\n }\r\n\r\n private setClickExportHandler = (f: any) => {\r\n if (f) {\r\n this.clickExportHandler = f;\r\n }\r\n }\r\n\r\n private handleClickExport = () => {\r\n if (this.props.exportState.isExporting) { return; }\r\n\r\n /*\r\n * Each export module registers a clickExportHandler()\r\n * on componentDidMount(), and this ExportDataModal tracks only the current\r\n * handler. The handler is called here. If a function is\r\n * returned that means it is ready to export, so the handler return \r\n * function is called and sent to Redux dispatch().\r\n */\r\n if (this.clickExportHandler) {\r\n const f = this.clickExportHandler();\r\n if (f) {\r\n this.props.dispatch(f());\r\n }\r\n }\r\n }\r\n}","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport React from 'react';\r\nimport { FaChevronLeft, FaChevronRight } from 'react-icons/fa'\r\nimport ReactPaginate from 'react-paginate';\r\nimport { PatientListState } from '../../models/state/CohortState';\r\nimport './Paginate.css';\r\n\r\ninterface Props {\r\n className?: string;\r\n dispatch: any;\r\n handlePageCountClick: (data: any) => any;\r\n patientList: PatientListState;\r\n totalPatients: number;\r\n}\r\n\r\nexport default class Paginate extends React.PureComponent {\r\n constructor(props: Props) {\r\n super(props);\r\n }\r\n\r\n public render() {\r\n const { className, patientList, totalPatients } = this.props;\r\n const c = className || 'patientlist';\r\n const pageCount = Math.ceil(totalPatients / patientList.configuration.pageSize);\r\n\r\n return (\r\n }\r\n nextLabel={}\r\n breakLabel={...}\r\n breakClassName={'break'}\r\n forcePage={patientList.configuration.pageNumber}\r\n pageCount={pageCount}\r\n marginPagesDisplayed={2}\r\n pageRangeDisplayed={5}\r\n onPageChange={this.props.handlePageCountClick}\r\n containerClassName={`${c}-pagination`}\r\n activeClassName={'active'} \r\n />\r\n );\r\n }\r\n}","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport React from 'react';\r\nimport { ConnectDragPreview, ConnectDragSource, ConnectDropTarget, DragSource, DragSourceConnector, DragSourceMonitor, DropTarget, DropTargetConnector, DropTargetMonitor } from 'react-dnd'\r\nimport { reorderColumns } from '../../actions/cohort/patientList';\r\nimport { compose } from 'redux';\r\nimport { PatientListColumn } from '../../models/patientList/Column';\r\nimport { PatientListSort, PatientListSortType, PatientListDndType } from '../../models/patientList/Configuration';\r\n\r\ninterface OwnProps {\r\n className?: string;\r\n data: PatientListColumn;\r\n dispatch: any;\r\n onClick: (idx: number) => any;\r\n sort: PatientListSort;\r\n}\r\n\r\ninterface DndProps {\r\n connectDragSource?: ConnectDragSource;\r\n isDragging?: boolean;\r\n isDropped?: boolean;\r\n canDrop?: boolean;\r\n isOver?: boolean;\r\n connectDropTarget?: ConnectDropTarget;\r\n connectDragPreview?: ConnectDragPreview;\r\n}\r\n\r\ntype Props = OwnProps & DndProps;\r\n\r\nlet sourceColumn: any;\r\n\r\nconst columnSource = {\r\n beginDrag(props: Props) {\r\n sourceColumn = props.data;\r\n return props.data;\r\n }\r\n};\r\n\r\nconst columnTarget = {\r\n drop(props: Props) {\r\n props.dispatch(reorderColumns(sourceColumn, props.data));\r\n return props.data;\r\n }\r\n};\r\n\r\nconst collectTarget = (connector: DropTargetConnector, monitor: DropTargetMonitor) => ({\r\n canDrop: monitor.canDrop(),\r\n connectDropTarget: connector.dropTarget(),\r\n isOver: monitor.isOver()\r\n});\r\n\r\nconst collectSource = (connector: DragSourceConnector, monitor: DragSourceMonitor) => ({\r\n connectDragPreview: connector.dragPreview(),\r\n connectDragSource: connector.dragSource(),\r\n isDragging: monitor.isDragging()\r\n});\r\n\r\nclass Header extends React.Component {\r\n constructor(props: Props) {\r\n super(props);\r\n }\r\n\r\n public render() {\r\n const { connectDragSource, connectDropTarget, connectDragPreview, data, onClick, isOver, canDrop, isDragging, sort, className } = this.props;\r\n const c = className ? className : 'patientlist';\r\n const classes = [ `${c}-column-header` ];\r\n\r\n if (isOver && canDrop) { classes.push('can-drop'); }\r\n if (isDragging) { classes.push('is-dragging'); }\r\n\r\n if (sort.column && sort.column!.id === data.id) {\r\n if (sort.sortType === PatientListSortType.ASC) { classes.push('sort-asc'); }\r\n else if (sort.sortType === PatientListSortType.DESC) { classes.push('sort-desc'); }\r\n }\r\n\r\n return (\r\n connectDragPreview!(\r\n connectDragSource!(\r\n connectDropTarget!(\r\n \r\n {this.props.data.displayName}\r\n \r\n )))\r\n )\r\n }\r\n}\r\n\r\nconst HeaderContainer = compose(\r\n DragSource(PatientListDndType.COLUMN_HEADER, columnSource, collectSource),\r\n DropTarget(PatientListDndType.COLUMN_HEADER, columnTarget, collectTarget)\r\n)(Header) as any;\r\nexport default HeaderContainer","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport { PatientCountPerYear } from \"../concept/Concept\";\r\n\r\nexport interface ConceptSqlSetDTO {\r\n id: number,\r\n isEncounterBased: boolean;\r\n isEventBased: boolean;\r\n sqlFieldDate?: string;\r\n sqlFieldEvent?: string;\r\n sqlSetFrom: string;\r\n eventId?: number;\r\n}\r\n\r\nexport interface ConceptSqlSet extends ConceptSqlSetDTO {\r\n changed?: boolean;\r\n specializationGroups: Map;\r\n unsaved?: boolean;\r\n}\r\n\r\nexport interface ConceptEvent {\r\n id: number;\r\n uiDisplayEventName: string;\r\n changed?: boolean;\r\n unsaved?: boolean;\r\n}\r\n\r\nexport interface SpecializationGroupDTO {\r\n id: number;\r\n sqlSetId: number;\r\n specializations: Specialization[];\r\n uiDefaultText: string;\r\n}\r\n\r\nexport interface SpecializationGroup {\r\n changed?: boolean;\r\n id: number;\r\n sqlSetId: number;\r\n specializations: Map;\r\n uiDefaultText: string;\r\n unsaved?: boolean;\r\n}\r\n\r\nexport interface SpecializationGroupRelationship {\r\n specializationGroupId: number\r\n orderId?: number\r\n}\r\n\r\nexport interface SpecializationDTO {\r\n id: string;\r\n specializationGroupId: number;\r\n orderId?: number;\r\n sqlSetWhere: string;\r\n uiDisplayText: string;\r\n universalId?: string;\r\n}\r\n\r\nexport interface Specialization extends SpecializationDTO {\r\n changed?: boolean;\r\n sqlSetId: number;\r\n unsaved?: boolean;\r\n}\r\n\r\nexport interface Concept {\r\n id: string;\r\n parentId?: string;\r\n rootId: string;\r\n externalId?: string;\r\n externalParentId?: string;\r\n universalId?: string;\r\n isNumeric: boolean;\r\n isParent: boolean;\r\n isRoot: boolean;\r\n isPatientCountAutoCalculated: boolean;\r\n isSpecializable: boolean;\r\n constraints: Constraint[];\r\n specializationGroups: SpecializationGroupRelationship[];\r\n sqlSetId?: number;\r\n sqlSetWhere?: string;\r\n sqlFieldNumeric?: string;\r\n uiDisplayName: string;\r\n uiDisplayText: string;\r\n uiDisplaySubtext?: string;\r\n uiDisplayUnits?: string;\r\n uiDisplayTooltip?: string;\r\n uiDisplayPatientCount?: number;\r\n uiDisplayPatientCountByYear?: PatientCountPerYear[];\r\n uiDisplayRowOrder?: number;\r\n uiNumericDefaultText?: string;\r\n\r\n unsaved?: boolean;\r\n}\r\n\r\nexport enum ConstraintType {\r\n User = 1,\r\n Group = 2\r\n}\r\n\r\nexport interface Constraint {\r\n resourceId?: string;\r\n constraintId: ConstraintType;\r\n constraintValue: string;\r\n}\r\n\r\nexport interface ConceptDeleteResponse {\r\n panelFilterCount: number;\r\n panelFilters: PanelFilterDependent[];\r\n queryCount: number;\r\n queries: QueryDependent[];\r\n conceptCount: number;\r\n concepts: ConceptDependent[];\r\n}\r\n\r\nexport interface ConceptSqlSetDeleteResponse {\r\n conceptCount: number;\r\n concepts: ConceptDependent[];\r\n specializationGroupCount: number;\r\n specializationGroups: SpecializationGroupDependent[];\r\n}\r\n\r\nexport interface SpecializationGroupDeleteResponse {\r\n conceptCount: number;\r\n concepts: ConceptDependent[];\r\n}\r\n\r\ninterface PanelFilterDependent {\r\n id: number;\r\n uiDisplayText: string;\r\n}\r\n\r\ninterface QueryDependent {\r\n id: string;\r\n universalId: string;\r\n name: string;\r\n owner: string;\r\n}\r\n\r\ninterface ConceptDependent {\r\n id: string;\r\n universalId?: string;\r\n uiDisplayName: string;\r\n}\r\n\r\ninterface SpecializationGroupDependent {\r\n id: string;\r\n uiDefaultText: string;\r\n}","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport React from 'react';\r\nimport { Line, LineChart } from 'recharts';\r\nimport { XY, PatientListColumnType } from '../../models/patientList/Column';\r\n\r\ninterface Props {\r\n className?: string;\r\n index: number;\r\n type: PatientListColumnType;\r\n value: any;\r\n}\r\n\r\ninterface SparklineDotProps {\r\n cx: number;\r\n cy: number;\r\n dataKey: string;\r\n fill: string;\r\n height: number;\r\n index: number;\r\n key: string;\r\n payload: XY;\r\n r: number;\r\n stroke: string;\r\n strokeWidth: number;\r\n value: number;\r\n width: number;\r\n}\r\n\r\nexport default class Tuple extends React.PureComponent {\r\n private lastSparklineValIndex: number = 0;\r\n constructor(props: Props) {\r\n super(props);\r\n }\r\n\r\n public render() {\r\n const { className, type } = this.props;\r\n const c = className ? className : 'patientlist';\r\n const val = this.getValueDisplay();\r\n\r\n return (\r\n \r\n {val}\r\n \r\n )\r\n }\r\n\r\n private createSparkline = (vals: XY[]) => {\r\n if (!vals || !vals.length) { return null; }\r\n this.lastSparklineValIndex = vals.length - 1;\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n private createSparklineDotAndLabel = (props: SparklineDotProps) => {\r\n if (props.index === this.lastSparklineValIndex) {\r\n return (\r\n \r\n \r\n \r\n {props.value}\r\n \r\n \r\n )\r\n }\r\n return null;\r\n }\r\n\r\n private getValueDisplay = () => {\r\n const { type, value } = this.props;\r\n return (\r\n type === PatientListColumnType.sparkline ? this.createSparkline(value) \r\n : type === PatientListColumnType.date && !!value ? new Date(value).toLocaleString() \r\n : value\r\n );\r\n }\r\n}","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport React from 'react';\r\nimport { PatientListDetailEncounter, PatientListDetailEncounterRow, PatientListDetailEncounterKeyValue } from '../../models/patientList/Patient';\r\n\r\ninterface Props {\r\n className?: string;\r\n data: PatientListDetailEncounter;\r\n}\r\n\r\nexport default class EncounterDetailGroup extends React.PureComponent {\r\n constructor(props: Props) {\r\n super(props);\r\n }\r\n\r\n public render() {\r\n const { className, data } = this.props;\r\n const c = className ? className : 'patientlist-tuple-detail';\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {data.rows.map((dr: PatientListDetailEncounterRow, j: number) => {\r\n return (\r\n \r\n \r\n \r\n {dr.columns.map((kv: PatientListDetailEncounterKeyValue) => {\r\n return (\r\n \r\n )\r\n })}\r\n \r\n )\r\n })}\r\n \r\n
\r\n
Encounter
\r\n
{data.encounterId}
\r\n
\r\n {dr.datasetName}\r\n \r\n
{dr.dateColumnName}
\r\n
{dr.date.toLocaleString()}
\r\n
\r\n
{kv.key}
\r\n
{`${this.renderValue(kv.value)}`}
\r\n
\r\n
\r\n )\r\n }\r\n\r\n private renderValue = (v: any) => v instanceof Date ? v.toLocaleString() : v;\r\n}","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport React from 'react';\r\nimport Tuple from './Tuple';\r\nimport { FaChevronDown } from 'react-icons/fa';\r\nimport EncounterDetailGroup from './EncounterDetailGroup';\r\nimport { PatientListDetailEncounter, PatientListRow } from '../../models/patientList/Patient';\r\nimport { Collapse } from 'reactstrap';\r\nimport { togglePatientRowOpen } from '../../actions/cohort/patientList';\r\nimport { PatientListColumn } from '../../models/patientList/Column';\r\n\r\ninterface Props {\r\n columns: PatientListColumn[];\r\n dispatch: any;\r\n index: number;\r\n row: PatientListRow;\r\n}\r\n\r\nexport default class Row extends React.Component {\r\n private className = 'patientlist';\r\n constructor(props: Props) {\r\n super(props);\r\n }\r\n\r\n public render() {\r\n const { columns, index, row } = this.props;\r\n const c = this.className;\r\n const rowClass = `${c}-row ${index % 2 === 0 ? 'even' : 'odd'}`;\r\n const openClass = row.isOpen ? 'open' : '';\r\n return ([\r\n (\r\n \r\n View details ({row.detailRowCount ? row.detailRowCount : 0} rows)\r\n \r\n {row.values.map((v: any, i: number) => {\r\n return \r\n })}\r\n ),\r\n (\r\n \r\n
\r\n {row.isOpen && row.detailValues.map((v: PatientListDetailEncounter) => {\r\n return \r\n })}\r\n
\r\n \r\n )\r\n ])\r\n }\r\n\r\n private handleClick = () => {\r\n const { dispatch, index } = this.props;\r\n dispatch(togglePatientRowOpen(index));\r\n }\r\n}","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport React from 'react';\r\nimport { getCurrentPatientList } from '../../actions/cohort/patientList';\r\nimport { PatientListState } from '../../models/state/CohortState';\r\nimport { NetworkResponderMap } from '../../models/NetworkResponder';\r\nimport { PatientListColumn } from '../../models/patientList/Column';\r\nimport { PatientListRow } from '../../models/patientList/Patient';\r\nimport { PatientListSortType, PatientListSort } from '../../models/patientList/Configuration';\r\nimport Header from './Header';\r\nimport Row from './Row';\r\nimport './PatientListTable.css';\r\n\r\ninterface Props {\r\n className?: string;\r\n dispatch: any;\r\n patientList: PatientListState;\r\n responders: NetworkResponderMap;\r\n}\r\n\r\ninterface State {\r\n hidden: boolean;\r\n}\r\n\r\nexport default class PatientListTable extends React.PureComponent {\r\n constructor(props: Props) {\r\n super(props);\r\n this.state = {\r\n hidden: true\r\n }\r\n }\r\n\r\n public componentDidMount() {\r\n setTimeout(() => this.setState({ hidden: false }), 100);\r\n }\r\n\r\n public render() {\r\n const { patientList, dispatch, className } = this.props;\r\n const c = className ? className : 'patientlist';\r\n const sort = patientList.configuration.sort;\r\n const classes = [ `${c}-table-container`, (this.state.hidden ? 'hidden' : '') ];\r\n const cols = patientList ? this.props.patientList.configuration.displayColumns : [];\r\n\r\n return ( \r\n
\r\n
\r\n \r\n \r\n {/* Header */}\r\n \r\n \r\n {/* Empty column for detail rows */}\r\n \r\n \r\n\r\n {/* Body */}\r\n \r\n\r\n {/* Rows */}\r\n {patientList.display.map((r: PatientListRow, idx: number) => (\r\n \r\n ))}\r\n \r\n
\r\n\r\n {/* Columns */}\r\n {cols.map((col: PatientListColumn) => (\r\n
\r\n ))}\r\n
\r\n
\r\n )\r\n }\r\n\r\n private handleHeaderCellClick = (idx: number) => {\r\n const { dispatch, patientList } = this.props;\r\n const cols = patientList.configuration.displayColumns;\r\n const pl = patientList;\r\n const prevSortCol = pl.configuration.sort.column;\r\n const col = cols[idx];\r\n\r\n const currentSort = col && prevSortCol && prevSortCol.id === col.id\r\n ? pl.configuration.sort.sortType\r\n : PatientListSortType.NONE;\r\n const newSortType = \r\n currentSort === PatientListSortType.ASC ? PatientListSortType.DESC : \r\n currentSort === PatientListSortType.DESC ? PatientListSortType.NONE :\r\n PatientListSortType.ASC;\r\n\r\n const newSort: PatientListSort = {\r\n column: col,\r\n sortType: newSortType\r\n };\r\n \r\n dispatch(getCurrentPatientList(newSort));\r\n }\r\n}","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport React from 'react';\r\nimport { formatSmallNumber } from '../../../utils/formatNumber';\r\nimport './CohortTooLargeBox.css';\r\n\r\ninterface Props {\r\n cacheLimit: number\r\n}\r\n\r\nconst className = 'cohort-too-large';\r\n\r\nexport default class CohortTooLargeBox extends React.PureComponent {\r\n public render() {\r\n const { cacheLimit } = this.props;\r\n return (\r\n
\r\n

\r\n Whoops! Leaf can't show visualizations or patient lists for a cohort this large.\r\n Your Leaf administrator has only configured Leaf to display up to {formatSmallNumber(cacheLimit)} patients.\r\n

\r\n
\r\n );\r\n }\r\n}","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport * as React from 'react';\r\nimport { formatSmallNumber } from '../../utils/formatNumber';\r\n\r\ninterface Props {\r\n exportLimit: number;\r\n isIdentified: boolean;\r\n isFederated: boolean;\r\n totalCohortPatients: number;\r\n totalDatapoints: number;\r\n totalPatients: number;\r\n}\r\n\r\nexport const RowCount = (props: Props) => {\r\n const { totalPatients, totalDatapoints, isIdentified, isFederated, exportLimit, totalCohortPatients } = props;\r\n const c = 'patientlist';\r\n\r\n return (\r\n
\r\n\r\n {/* Total Patient and Row counts */}\r\n Displaying \r\n {formatSmallNumber(totalPatients)} \r\n {!isIdentified &&\r\n de-identified}\r\n patients\r\n \r\n with \r\n {formatSmallNumber(totalPatients + totalDatapoints)} rows\r\n of data\r\n\r\n {/* Total Displayed Patients less than Total in Cohort */}\r\n {totalPatients !== totalCohortPatients &&\r\n
\r\n
Why can't I see data for all {formatSmallNumber(totalCohortPatients)} patients?\r\n\r\n {/* Single Node - export limit */}\r\n {!isFederated && totalCohortPatients > exportLimit &&\r\n
\r\n Your administrator has limited viewing and exporting to \r\n {formatSmallNumber(exportLimit)} patients at a time \r\n , which is less than the total number in your cohort.\r\n
\r\n }\r\n\r\n {/* Single Node - missing patients */}\r\n {!isFederated && totalPatients < totalCohortPatients && totalCohortPatients < exportLimit &&\r\n
\r\n The Leaf server returned demographic data for less patients than were included in the original cohort. \r\n This usually indicates that demographic data are missing for these patients.\r\n
\r\n }\r\n\r\n {/* Federated */}\r\n {isFederated &&\r\n
\r\n One or more of the Leaf servers you are querying may be limiting the total amount of patients you are able to view.\r\n
\r\n }\r\n
\r\n
\r\n }\r\n\r\n {/* De-identification info */}\r\n {!isIdentified &&\r\n
\r\n
What is de-identification?\r\n
\r\n

\r\n Because you've logged in de-identified mode, Leaf has date-shifted and removed identifiers for all data shown below.\r\n This means that all dates have been randomly shifted a certain amount of time, and identifiers such as MRNs and names have been removed.\r\n

\r\n

\r\n Note: While the amount of time shifted is different between patients, the \r\n date-shift value for a given patient is consistent\r\n , so the relative age at an event is preserved.\r\n

\r\n
\r\n
\r\n
\r\n }\r\n
\r\n );\r\n}\r\n","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport React from 'react';\r\nimport { GoCloudDownload } from 'react-icons/go';\r\nimport { connect } from 'react-redux';\r\nimport { Col, Row } from 'reactstrap';\r\nimport { Action, Dispatch } from 'redux';\r\nimport { setPatientListPagination } from '../../actions/cohort/patientList';\r\nimport { toggleExportDataModal } from '../../actions/generalUi';\r\nimport LoaderIcon from '../../components/Other/LoaderIcon/LoaderIcon';\r\nimport AddDatasetButton from '../../components/PatientList/AddDatasetButton/AddDatasetButton';\r\nimport DatasetColumnSelector from '../../components/PatientList/DatasetColumnSelector';\r\nimport ExportDataModal from '../../components/PatientList/ExportDataModal/ExportDataModal';\r\nimport Paginate from '../../components/PatientList/Paginate';\r\nimport PatientListTable from '../../components/PatientList/PatientListTable';\r\nimport { AppState, AuthorizationState, DatasetsState } from '../../models/state/AppState';\r\nimport { CohortStateType, NetworkCohortState, PatientListState, CohortState } from '../../models/state/CohortState';\r\nimport ExportState from '../../models/state/Export';\r\nimport { NetworkResponderMap } from '../../models/NetworkResponder';\r\nimport CohortTooLargeBox from '../../components/Other/CohortTooLargeBox/CohortTooLargeBox';\r\nimport { RowCount } from '../../components/PatientList/RowCount';\r\nimport { PatientListDatasetDefinition } from '../../models/patientList/Dataset';\r\nimport './PatientList.css';\r\n\r\ninterface OwnProps {\r\n \r\n}\r\ninterface StateProps {\r\n auth: AuthorizationState;\r\n exportState: ExportState;\r\n cohort: CohortState;\r\n datasets: DatasetsState;\r\n isIdentified: boolean;\r\n patientList: PatientListState;\r\n responders: NetworkResponderMap;\r\n showExportModal: boolean;\r\n totalPatients: number;\r\n}\r\ninterface DispatchProps {\r\n dispatch: (f: any) => void;\r\n}\r\ntype Props = StateProps & OwnProps & DispatchProps;\r\n\r\ninterface State {\r\n showCountDetails: boolean;\r\n}\r\n\r\nclass PatientList extends React.PureComponent {\r\n private className = 'patientlist';\r\n constructor(props: Props) {\r\n super(props);\r\n this.state = {\r\n showCountDetails: false\r\n }\r\n }\r\n\r\n public render() {\r\n const { auth, exportState, cohort, datasets, isIdentified, patientList, responders, dispatch, showExportModal } = this.props;\r\n const c = this.className;\r\n const classes = [ `${c}-container`, 'scrollable-offset-by-header' ];\r\n const datasetDefs: PatientListDatasetDefinition[] = [ ...patientList.configuration.singletonDatasets.values() ];\r\n \r\n /*\r\n * Calculate the number of patients and rows displayed.\r\n */\r\n let totalResponders = 0;\r\n cohort.networkCohorts.forEach((nc: NetworkCohortState) => {\r\n if (nc.count.state === CohortStateType.LOADED) {\r\n totalResponders++;\r\n }\r\n });\r\n const showPaginate = patientList.totalPatients > patientList.configuration.pageSize;\r\n\r\n /*\r\n * If too many patients for caching, let user know.\r\n */\r\n if (cohort.networkCohorts.size === 1 && cohort.count.value > auth.config!.cacheLimit) {\r\n return \r\n }\r\n /*\r\n * Show a loading spinner if no responders have completed yet.\r\n */\r\n if (cohort.patientList.state === CohortStateType.REQUESTING) {\r\n return (\r\n
\r\n \r\n
\r\n );\r\n /*\r\n * Show the failure .\r\n */\r\n } else if (cohort.patientList.state === CohortStateType.IN_ERROR) {\r\n return (\r\n
\r\n

\r\n Whoops! An error occurred while loading the patient list.\r\n We are sorry for the inconvenience. Please contact your Leaf administrator if this error continues.\r\n

\r\n
\r\n );\r\n }\r\n\r\n return ( \r\n
\r\n \r\n \r\n \r\n
\r\n
Current Datasets (click to edit columns)
\r\n {datasetDefs.map((d: PatientListDatasetDefinition) => (\r\n \r\n ))}\r\n {patientList.totalPatients > 0 && datasetDefs.length < datasets.all.size &&\r\n \r\n }\r\n
\r\n 1}\r\n totalCohortPatients={cohort.count.value} \r\n totalPatients={patientList.totalPatients} \r\n totalDatapoints={patientList.totalRows} \r\n />\r\n \r\n \r\n
\r\n
\r\n Export Data\r\n
\r\n
\r\n \r\n
\r\n {showPaginate &&\r\n \r\n }\r\n \r\n {showPaginate && patientList.totalPatients > 25 &&\r\n \r\n }\r\n
\r\n )\r\n }\r\n\r\n private handlePageCountClick = (data: any) => {\r\n const { dispatch, patientList } = this.props;\r\n const page = data.selected;\r\n if (page !== patientList.configuration.pageNumber) {\r\n dispatch(setPatientListPagination(page));\r\n }\r\n }\r\n\r\n private handleExportClick = () => {\r\n const { dispatch } = this.props;\r\n dispatch(toggleExportDataModal());\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state: AppState, ownProps: OwnProps): StateProps => {\r\n return { \r\n auth: state.auth,\r\n datasets: state.datasets,\r\n exportState: state.dataExport,\r\n cohort: state.cohort,\r\n isIdentified: state.session.attestation!.isIdentified,\r\n patientList: state.cohort.patientList,\r\n responders: state.responders,\r\n showExportModal: state.generalUi.showExportDataModal,\r\n totalPatients: state.cohort.count.value\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = (dispatch: Dispatch>, ownProps: OwnProps) : DispatchProps => {\r\n return { dispatch };\r\n}\r\n\r\nexport default connect\r\n (mapStateToProps, mapDispatchToProps)(PatientList)","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport React from 'react';\r\nimport './SectionHeader.css';\r\n\r\nexport interface Props {\r\n headerText: string;\r\n subText?: string;\r\n}\r\n\r\nexport class SectionHeader extends React.PureComponent {\r\n constructor(props: Props) {\r\n super(props);\r\n }\r\n\r\n public render() {\r\n return (\r\n
\r\n

{this.props.headerText}

\r\n {this.props.subText && \r\n {this.props.subText}\r\n }\r\n
\r\n );\r\n }\r\n}","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nexport const visualizationConfig = {\r\n demographics: {\r\n ageByGender: {\r\n barCategoryGap: 2,\r\n barSize: 36,\r\n colorFemale: 'rgb(255,132,8)', // Orange\r\n colorMale: 'rgb(0,148,204)', // Blue\r\n colorOther: 'rgb(200,200,200)',\r\n xAxisStroke: 'rgb(33,37,41)',\r\n },\r\n binary: {\r\n barSize: 36,\r\n colors: {\r\n AARP: { left: '#00BCD4', right: '#4DD0E1'},\r\n Gender: { left: '#f44336', right: '#e57373'},\r\n Hispanic: { left: '#8bc34a', right: '#AED581'},\r\n Married: { left: '#FFC107', right: '#FFD54F'},\r\n VitalStatus: { left: '#9C27B0', right: '#B868C8'}\r\n },\r\n xAxisStroke: 'rgb(33,37,41)'\r\n }\r\n }\r\n}","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport React from 'react';\r\nimport { Bar, BarChart, LabelList, Legend, ResponsiveContainer, XAxis, YAxis } from 'recharts';\r\nimport { visualizationConfig } from '../../config/visualization';\r\nimport { AgeByGenderBucket, AgeByGenderBuckets, AgeByGenderData } from '../../models/cohort/DemographicDTO';\r\n\r\nexport interface Props {\r\n data: AgeByGenderData;\r\n height: number;\r\n width: number;\r\n}\r\n\r\nexport class AgeByGender extends React.PureComponent {\r\n private className = 'visualization-agebygender';\r\n private maxWidth = 500;\r\n constructor(props: Props) {\r\n super(props);\r\n }\r\n\r\n public render() {\r\n const config = visualizationConfig.demographics.ageByGender;\r\n const { height, width } = this.props;\r\n const c = this.className;\r\n const w = width > this.maxWidth ? this.maxWidth : width;\r\n const stackHeight = height / 2;\r\n const data: AgeByGenderBucket[] = Object.keys(this.props.data.buckets)\r\n .map((d: string) => {\r\n const bucket = this.props.data.buckets[d];\r\n return {\r\n ...bucket,\r\n label: d,\r\n sum: bucket.females + bucket.males + bucket.others\r\n }\r\n });\r\n \r\n return (\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n );\r\n }\r\n\r\n private formatNumber = (val: any) => val.toLocaleString();\r\n}","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport React from 'react';\r\nimport { Row } from 'reactstrap';\r\nimport { Bar, BarChart, Cell, LabelList, Legend, ResponsiveContainer, Tooltip, XAxis, YAxis } from 'recharts';\r\nimport { visualizationConfig } from '../../config/visualization';\r\nimport { BinarySplit, BinarySplitPair} from '../../models/cohort/DemographicDTO';\r\n\r\nexport interface Props {\r\n data: BinarySplitPair[];\r\n height: number;\r\n width: number;\r\n}\r\n\r\nexport class Binary extends React.PureComponent {\r\n private maxColWidth = 260;\r\n\r\n constructor(props: Props) {\r\n super(props);\r\n }\r\n\r\n public render() {\r\n const config = visualizationConfig.demographics.binary;\r\n const animationDelay = 300;\r\n const { height, width } = this.props;\r\n const colWidth = (width / 2) > this.maxColWidth ? this.maxColWidth : (width / 2);\r\n const leftBars = this.props.data\r\n .map((d: BinarySplitPair) => {\r\n const val = d.left;\r\n return {\r\n ...val,\r\n color: config.colors[d.category].left,\r\n dummyValue: 0,\r\n value: -val.value\r\n };\r\n });\r\n const rightBars = this.props.data\r\n .map((d: BinarySplitPair) => {\r\n const val = d.right;\r\n return {\r\n ...val,\r\n color: config.colors[d.category].right,\r\n dummyValue: 0\r\n };\r\n });\r\n\r\n if (!leftBars.length && !rightBars.length) { return null; }\r\n\r\n return (\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {leftBars.map((d: BinarySplit) => )}\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {rightBars.map((d: BinarySplit) => )}\r\n \r\n \r\n \r\n \r\n
\r\n
);\r\n }\r\n\r\n private formatNegativeNumber = (d: any) => Math.abs(+d).toLocaleString(); \r\n\r\n private formatNumber = (val: any) => val.toLocaleString();\r\n}\r\n\r\n","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport React from 'react';\r\nimport { Col, Container, Row } from 'reactstrap'\r\nimport { CohortState } from '../../models/state/CohortState';\r\nimport { SectionHeader } from '../Other/SectionHeader/SectionHeader';\r\nimport { AgeByGender } from './AgeByGender';\r\nimport { Binary } from './Binary';\r\n\r\nexport interface Props {\r\n cohort: CohortState;\r\n height: number;\r\n width: number;\r\n}\r\n\r\nexport default class AggregateDemographics extends React.PureComponent {\r\n constructor(props: Props) {\r\n super(props);\r\n }\r\n\r\n public render() {\r\n const { ageByGenderData, binarySplitData } = this.props.cohort.visualization.demographics;\r\n const colWidth = this.props.width / 2;\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\n","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport React from 'react';\r\nimport { Col, Container, Row } from 'reactstrap'\r\nimport { NetworkCohortState } from '../../models/state/CohortState';\r\nimport { NetworkIdentity } from '../../models/NetworkResponder';\r\nimport { AgeByGender } from './AgeByGender';\r\nimport { Binary } from './Binary';\r\n\r\nexport interface Props {\r\n cohort: NetworkCohortState;\r\n height: number;\r\n responder: NetworkIdentity;\r\n width: number;\r\n}\r\n\r\nexport default class ResponderDemographics extends React.PureComponent {\r\n private className = 'visualize-responder';\r\n constructor(props: Props) {\r\n super(props);\r\n }\r\n\r\n public render() {\r\n const { ageByGenderData, binarySplitData } = this.props.cohort.visualization.demographics;\r\n const { value } = this.props.cohort.count;\r\n const { primaryColor, name, enabled } = this.props.responder;\r\n const colWidth = this.props.width / 2;\r\n const c = this.className;\r\n\r\n if (!enabled) { return null; }\r\n\r\n return (\r\n \r\n
\r\n
{name}
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\n","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport React from 'react';\r\nimport { connect } from 'react-redux'\r\nimport AggregateDemographics from '../../components/Visualize/AggregateDemographics';\r\nimport ResponderDemographics from '../../components/Visualize/ResponderDemographics';\r\nimport { AppState, AuthorizationState } from '../../models/state/AppState';\r\nimport { CohortState, NetworkCohortState, CohortStateType } from '../../models/state/CohortState';\r\nimport { NetworkResponderMap } from '../../models/NetworkResponder';\r\nimport computeDimensions from '../../utils/computeDimensions';\r\nimport LoaderIcon from '../../components/Other/LoaderIcon/LoaderIcon';\r\nimport CohortTooLargeBox from '../../components/Other/CohortTooLargeBox/CohortTooLargeBox';\r\nimport './Visualize.css';\r\n\r\ninterface OwnProps { }\r\ninterface StateProps {\r\n auth: AuthorizationState;\r\n cohort: CohortState;\r\n responders: NetworkResponderMap;\r\n}\r\ninterface DispatchProps {}\r\ntype Props = StateProps & OwnProps & DispatchProps;\r\ninterface State {\r\n width: number;\r\n}\r\n\r\nclass Visualize extends React.Component {\r\n constructor(props: Props) {\r\n super(props);\r\n }\r\n\r\n public updateDimensions = () => {\r\n const dimensions = computeDimensions();\r\n this.setState({ width: dimensions.contentWidth });\r\n }\r\n\r\n public componentWillMount() {\r\n this.updateDimensions();\r\n }\r\n\r\n public componentDidMount() {\r\n window.addEventListener('resize', this.updateDimensions);\r\n }\r\n\r\n public componentWillUnmount() {\r\n window.removeEventListener('resize', this.updateDimensions);\r\n }\r\n\r\n public render() {\r\n let completedResponders = 0;\r\n const c = 'visualize';\r\n const { cohort, responders, auth } = this.props;\r\n const demogHeight = 400;\r\n const respPadding = 200;\r\n const data: any = [];\r\n cohort.networkCohorts.forEach((nc: NetworkCohortState) => {\r\n const r = responders.get(nc.id)!;\r\n if (r.enabled && nc.visualization.state === CohortStateType.LOADED) {\r\n completedResponders++;\r\n data.push({ cohort: nc, responder: r });\r\n }\r\n });\r\n\r\n /*\r\n * If too many patients for caching, let user know.\r\n */\r\n if (cohort.networkCohorts.size === 1 && cohort.count.value > auth.config!.cacheLimit) {\r\n return \r\n }\r\n /*\r\n * Show a loading spinner if no responders have completed yet.\r\n */\r\n if (cohort.visualization.state === CohortStateType.IN_ERROR) {\r\n return (\r\n
\r\n

\r\n Whoops! An error occurred while loading patient visualizations. We are sorry for the inconvenience. \r\n Please contact your Leaf administrator if this error continues.\r\n

\r\n
\r\n );\r\n } \r\n /*\r\n * Show a loading spinner if no responders have completed yet.\r\n */\r\n if (completedResponders === 0 || cohort.visualization.state !== CohortStateType.LOADED) {\r\n return (\r\n
\r\n \r\n
\r\n );\r\n } \r\n\r\n return (\r\n
\r\n \r\n {data.length > 1 &&\r\n
\r\n {data.map((d: any, i: number) => {\r\n return (\r\n \r\n )\r\n })}\r\n
\r\n }\r\n
\r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state: AppState, ownProps: OwnProps): StateProps => {\r\n return { \r\n auth: state.auth,\r\n cohort: state.cohort,\r\n responders: state.responders\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {};\r\n\r\nexport default connect\r\n (mapStateToProps, mapDispatchToProps)(Visualize)","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport React from 'react';\r\n\r\ninterface Props {\r\n header: string;\r\n}\r\n\r\nexport class Section extends React.PureComponent {\r\n private className = \"admin-panel\"\r\n constructor(props: Props) {\r\n super(props);\r\n }\r\n\r\n public render() {\r\n const { children, header } = this.props;\r\n const c = this.className;\r\n return (\r\n
\r\n
{header}
\r\n
\r\n {children}\r\n
\r\n
\r\n );\r\n }\r\n};\r\n","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport React from 'react';\r\nimport { FormGroup, Input as BSInput, Label, FormText } from 'reactstrap';\r\nimport { PropertyProps as Props } from '../ConceptEditor/Props';\r\n\r\nexport class Input extends React.PureComponent {\r\n constructor(props: Props) {\r\n super(props);\r\n this.state = {\r\n valid: true\r\n }\r\n }\r\n\r\n public render() {\r\n const { label, subLabel, locked, type, value, placeholder, required, errorText, forceValidation } = this.props;\r\n const classes = [ 'leaf-input' ];\r\n const valid = !required ? true : !!value;\r\n let t = type || 'string' as any;\r\n let val = value || '';\r\n\r\n if (!valid) {\r\n classes.push('error');\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n {forceValidation && !valid && errorText &&\r\n {errorText}\r\n }\r\n \r\n );\r\n }\r\n\r\n private handleBlur = () => {\r\n const { focusToggle, required, value } = this.props;\r\n if (focusToggle) { focusToggle(false); }\r\n if (required && !value) {\r\n this.setState({ valid: false });\r\n }\r\n }\r\n\r\n private handleFocus = () => {\r\n const { focusToggle } = this.props;\r\n if (focusToggle) { focusToggle(true); }\r\n }\r\n\r\n private handleChange = (e: React.FormEvent) => {\r\n const { changeHandler, propName } = this.props;\r\n const newVal = e.currentTarget.value;\r\n changeHandler(newVal, propName);\r\n };\r\n};\r\n","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport React from 'react';\r\nimport { FormGroup, Label, FormText } from 'reactstrap';\r\nimport TextareaAutosize from 'react-textarea-autosize'\r\nimport { PropertyProps } from '../ConceptEditor/Props';\r\n\r\ninterface Props extends PropertyProps {\r\n overrideTabKeyDown?: boolean;\r\n}\r\n\r\nexport class TextArea extends React.PureComponent {\r\n constructor(props: Props) {\r\n super(props);\r\n }\r\n\r\n public render() {\r\n const { className, label, subLabel, locked, value, required, onClick, forceValidation, errorText, placeholder } = this.props;\r\n const classes = [ 'leaf-input' ];\r\n const valid = !required ? true : !!value;\r\n let val = value || '';\r\n\r\n if (!valid) {\r\n classes.push('error');\r\n }\r\n\r\n return (\r\n \r\n {label &&\r\n \r\n }\r\n
\r\n \r\n
\r\n {forceValidation && !valid && errorText &&\r\n {errorText}\r\n }\r\n
\r\n );\r\n }\r\n\r\n private handleKeydown = (k: React.KeyboardEvent) => {\r\n const { changeHandler, propName, value, overrideTabKeyDown } = this.props;\r\n if (k.key !== 'Tab' || !overrideTabKeyDown) { return; }\r\n k.preventDefault();\r\n const tabbed = ' ';\r\n const newVal = value ? value + tabbed : tabbed;\r\n changeHandler(newVal, propName);\r\n }\r\n\r\n private handleBlur = () => {\r\n const { focusToggle, required, value } = this.props;\r\n if (focusToggle) { focusToggle(false); }\r\n if (required && !value) {\r\n this.setState({ valid: false });\r\n }\r\n }\r\n\r\n private handleFocus = () => {\r\n const { focusToggle } = this.props;\r\n if (focusToggle) { focusToggle(true); }\r\n }\r\n\r\n private handleChange = (e: React.KeyboardEvent) => {\r\n const { changeHandler, propName, required } = this.props;\r\n const newVal = e.currentTarget.value;\r\n changeHandler(newVal, propName);\r\n };\r\n};\r\n","/* Copyright (c) 2019, UW Medicine Research IT, University of Washington\r\n * Developed by Nic Dobbins and Cliff Spital, CRIO Sean Mooney\r\n * This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not distributed with this\r\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n */ \r\n\r\nimport React from 'react';\r\nimport { Section } from '../../Section/Section';\r\nimport { Input } from '../../Section/Input';\r\nimport { TextArea } from '../../Section/TextArea';\r\nimport { SectionProps } from '../Props';\r\n\r\ninterface Props {\r\n data: SectionProps;\r\n}\r\n\r\nexport class Display extends React.PureComponent {\r\n constructor(props: Props) {\r\n super(props);\r\n }\r\n\r\n public render() {\r\n const { changeHandler, adminConcept, togglePanelPreview, forceValidation } = this.props.data;\r\n return (\r\n
\r\n