react/build/static/js/main.d0f5c265.chunk.js.map
{"version":3,"sources":["routes.js","AuthRoute.js","actions/index.js","pages/Login.js","components/BreadcrumbBar.js","support/ObjectColour.js","components/Dashboard.js","components/ObjectStatusBar.js","components/FileField.js","components/AdminInstrumentForm.js","components/AdminDatasetForm.js","pages/AdminImport.js","pages/AdminImportView.js","pages/AdminImports.js","components/AdminImportMappingsForm.js","components/Loader.js","components/DataTable.js","support/FileToBase64.js","pages/AdminInstrumentImportMappings.js","pages/AdminInstrumentImportMappingView.js","pages/AdminDatasetImportMappings.js","pages/AdminDatasetImportMappingView.js","pages/AdminInstruments.js","pages/AdminInstrumentExports.js","pages/AdminDatasets.js","pages/Instruments.js","pages/Datasets.js","pages/DatasetView.js","components/InstrumentHeading.js","pages/InstrumentView.js","support/ObjectCheckForInitialValues.js","components/InstrumentForm.js","pages/InstrumentNew.js","pages/InstrumentEdit.js","pages/InstrumentMap.js","pages/InstrumentBuild.js","pages/InstrumentCcConditions.js","pages/InstrumentCcLoops.js","pages/InstrumentCcQuestions.js","pages/InstrumentCcSequences.js","pages/InstrumentCcStatements.js","components/MoveConstructSelect.js","components/DeleteObjectButton.js","components/CcConditionForm.js","components/CcQuestionForm.js","components/CcStatementForm.js","components/CcSequenceForm.js","components/CcLoopForm.js","pages/InstrumentConstructBuild.js","components/CodeListForm.js","components/CreateNewBuildObjectButtons.js","pages/InstrumentBuildCodeLists.js","support/HumanizeObjectType.js","components/QuestionItemForm.js","pages/InstrumentBuildQuestionItems.js","components/QuestionGridForm.js","pages/InstrumentBuildQuestionGrids.js","components/ResponseDomainNumericForm.js","components/ResponseDomainTextForm.js","components/ResponseDomainDatetimeForm.js","pages/InstrumentBuildResponseDomains.js","pages/NoMatch.js","components/RedirectFromState.js","App.js","reducers/index.js","components/Store.js","serviceWorker.js","index.js"],"names":["login","datasets","include","all","admin","import","imports","show","instruments","exports","importMappings","importMapping","new","instrument","edit","map","build","ccConditions","ccLoops","ccQuestions","ccSequences","ccStatements","constructs","codeLists","questionItems","questionGrids","responseDomains","AuthRoute","props","isAuthUser","useSelector","state","auth","type","to","url","routes","api_host","process","api_headers","window","localStorage","getItem","axios","interceptors","response","use","error","status","Promise","reject","removeItem","location","InstrumentTree","instrumentId","flatTree","dispatch","payload","Dataset","request","get","headers","then","res","datasetsFetchSuccess","data","catch","err","fetchFailure","message","id","datasetFetchSuccess","AdminInstrument","values","formData","FormData","append","files","post","savingItem","savedItem","console","log","AdminDataset","AdminImportMapping","create","importMappingsFetchSuccess","parentId","importMappingFetchSuccess","AdminImport","importsFetchSuccess","importFetchSuccess","Instrument","put","instrumentFetchSuccess","saveError","error_sentence","redirectTo","instrument_id","prefix","instrumentsFetchSuccess","instrumentStatsFetchSuccess","updates","Categories","categoriesFetchSuccess","categories","CodeLists","codeListsFetchSuccess","update","codeListId","codeListFetchSuccess","delete","objectDeleteSuccess","codeList","CcSequences","ccSequencesFetchSuccess","ccSequenceId","ccSequenceFetchSuccess","onSuccess","object","onDelete","sequences","sequence","CcStatements","ccStatementsFetchSuccess","ccStatementId","ccStatementFetchSuccess","statements","statement","CcLoops","ccLoopsFetchSuccess","ccLoopId","ccLoopFetchSuccess","loops","loop","ResponseUnits","responseUnitsFetchSuccess","responseUnits","CcConditions","ccConditionsFetchSuccess","ccConditionId","ccConditionFetchSuccess","conditions","condition","CcQuestions","ccQuestionsFetchSuccess","ccQuestionId","ccQuestionFetchSuccess","topic","set","topicId","variables","add","variableNames","remove","variableId","questions","question","QuestionItems","questionItemsFetchSuccess","questionItemId","questionItemFetchSuccess","questionItem","QuestionGrids","onLoad","questionGridsFetchSuccess","questionGridFetchSuccess","questionGridId","questionGrid","ResponseDomainNumerics","responseDomainNumericsFetchSuccess","responseDomainNumericId","responseDomainNumericFetchSuccess","responseDomainType","responseDomainId","responseDomainNumerics","responseDomainNumeric","ResponseDomainCodes","responseDomainCodesFetchSuccess","responseDomainCodes","ResponseDomainTexts","responseDomainTextsFetchSuccess","responseDomainTextId","responseDomainTextFetchSuccess","responseDomainTexts","responseDomainText","ResponseDomainDatetimes","responseDomainDatetimesFetchSuccess","responseDomainDatetimeId","responseDomainDatetimeFetchSuccess","responseDomainDatetimes","responseDomainDatetime","Variables","variablesFetchSuccess","DatasetVariable","datasetId","datasetVariablesFetchSuccess","datasetVariableId","sources","datasetVariableFetchSuccess","source","other","class","x","y","variable","Topics","topicsFetchSuccess","topics","dataset","importObj","stats","objectType","authUserSuccess","authUserFailure","useStyles","makeStyles","theme","paper","marginTop","spacing","display","flexDirection","alignItems","avatar","margin","backgroundColor","palette","secondary","main","form","width","submit","useFormField","initialValue","React","useState","value","setValue","onChange","useCallback","e","target","Login","classes","emailField","passwordField","useDispatch","Container","component","maxWidth","CssBaseline","className","Avatar","Typography","variant","noValidate","onSubmit","preventDefault","email","password","authUser","TextField","required","fullWidth","label","name","autoComplete","autoFocus","Button","color","BreadcrumbBarItem","text","link","isEmpty","root","padding","BreadcrumbBar","useLocation","buildDatasetBreadcrumbs","buildAdminBreadcrumbs","buildInstrumentBreadcrumbs","crumbs","push","params","capturingRegex","found","pathname","match","RegExp","paramsFromPath","subtype","breadcrumbs","buildBreadcrumbs","Paper","Breadcrumbs","separator","fontSize","aria-label","breadcrumb","ObjectColour","Copyright","align","Date","getFullYear","nested","paddingLeft","toolbar","paddingRight","toolbarIcon","justifyContent","mixins","appBar","zIndex","drawer","transition","transitions","easing","sharp","duration","leavingScreen","appBarShift","marginLeft","enteringScreen","menuButton","marginRight","menuButtonHidden","title","flexGrow","drawerPaper","position","whiteSpace","drawerPaperClose","overflowX","breakpoints","up","appBarSpacer","content","height","overflow","container","paddingTop","paddingBottom","fixedHeight","MainListItems","onExpand","open","setOpen","ListItem","button","ListItemIcon","ListItemText","primary","onClick","style","Collapse","in","timeout","unmountOnExit","List","disablePadding","Dashboard","handleDrawerOpen","charSet","AppBar","clsx","Toolbar","IconButton","edge","noWrap","Drawer","src","alt","Divider","maxHeight","Grid","item","xs","children","Box","pt","ObjectStatus","statuses","key","ObjectStatusBar","isNil","saved","Alert","severity","AlertTitle","errorMessage","FileField","input","multiple","table","minWidth","boxShadow","formFields","size","field","AdminInstrumentForm","initialValues","validate","errors","render","handleSubmit","mutators","pop","pristine","submitting","idx","disabled","AdminDatasetForm","useEffect","AdminImportView","importId","logs","rows","Object","filename","created_at","Table","TableHead","TableRow","TableCell","TableBody","row","original_text","matches","outcome","AdminImports","page","setPage","rowsPerPage","setRowsPerPage","sort","reverse","slice","import_type","TableFooter","TablePagination","rowsPerPageOptions","colSpan","count","length","onChangePage","event","newPage","onChangeRowsPerPage","parseInt","SelectProps","inputProps","native","AdminImportMappingsForm","typeOptions","hint","types","Array","from","file","index","obj","Loader","m","shuffle","DataTable","actions","fetch","stateKey","searchKey","rowRenderer","parentStateKey","search","setSearch","filteredValues","setFilteredValues","dataLoaded","setDataLoaded","filter","toLowerCase","includes","el","placeholder","newValue","onRequestSearch","onCancelSearch","header","cell","FileToBase64","resolve","reader","FileReader","onload","result","readAsDataURL","AdminInstrumentImportMappings","imp","base64_files","split","ButtonGroup","AdminInstrumentImportMappingView","importMappingId","instrumentImportMappings","background","AdminDatasetImportMappings","dataset_id","AdminDatasetImportMappingView","datasetImportMappings","AdminInstruments","study","elevation","AdminInstrumentExports","setMessage","handleClose","reason","undefined","Snackbar","anchorOrigin","vertical","horizontal","autoHideDuration","onClose","export_url","href","export_time","AdminDatasets","Instruments","ccs","qvs","Datasets","dvs","TopicList","textAlign","handleChange","FormControl","formControl","InputLabel","htmlFor","Select","level","defaultValue","DatasetView","datasetVariables","nameMatch","labelMatch","topicMatch","sourcesStr","s","join","sourcesMatch","SourcesList","sourceOptions","opt","difference","newSources","Autocomplete","options","getOptionLabel","option","filterSelectedOptions","renderInput","multiline","getOptionSelected","border","var_type","sources_topic","InstrumentHeading","mode","slug","control","ObjectFinder","cc_sequences","cc_statements","cc_conditions","cc_questions","allQuestionItems","allQuestionGrids","cc_loops","toString","question_type","question_id","constructLabelClasses","CcCondition","CcStatement","CcQuestion","ConstructLabel","Chip","QuestionItemListItem","sm","literal","rds","ResponseDomains","VariableItems","QuestionGridListItem","pretty_corner_label","cols","rd","QuestionListItem","responseDomainClasses","listStyleType","codes","min_responses","max_responses","maxlen","code","StatementListItem","ConditionChildren","handleClick","aria-labelledby","child","StyledListItem","SequenceItem","ConditionItem","logic","fchildren","LoopItem","loop_var","start_val","end_val","loop_while","withStyles","borderRadius","textTransform","InstrumentView","find","element","top","ObjectCheckForInitialValues","initialValuesWithEmptyFields","keys","reduce","acc","isArray","merge","InstrumentForm","path","reset","InstrumentNew","InstrumentEdit","resolvedTopic","variableTopic","saving","deleteIcon","VariableList","allVariables","variableOptions","newVariables","oldVariables","InstrumentMap","InstrumentBuild","instrumentStats","code_lists","response_domain_datetimes","response_domain_numerics","response_domain_texts","question_items","question_grids","instructions","StatCount","ListItemSecondaryAction","dense","InstrumentCcConditions","InstrumentCcLoops","InstrumentCcQuestions","base_label","response_unit_label","InstrumentCcSequences","InstrumentCcStatements","MoveConstructSelect","treeData","getNodeKey","node","getFlatDataFromTree","ignoreCollapsed","nodeToMove","setNodeToMove","parentNode","setParentNode","addNodeUnderParent","removeNodeAtPath","parentKey","expandParent","newNode","moveNode","autoHighlight","renderOption","Fragment","isDescendant","DeleteObjectButton","action","confirm","CcConditionForm","ccCondition","onCreate","newObject","arrayMutators","formControlProps","MenuItem","CcQuestionForm","ccQuestion","allResponseUnits","response_units","questionOptions","setQuestionOptions","error_key","previous","rdOptions","intervieweeOptions","CcStatementForm","ccStatement","CcSequenceForm","ccSequence","CcLoopForm","ccLoop","TreeNode","expanded","trueAndFalse","conditionId","TreeNodeFormatter","Tree","topSequence","onNodeSelect","setTreeData","selectedNode","setSelectedNode","searchString","setSearchString","searchFocusIndex","setSearchFocusIndex","searchFoundCount","setSearchFoundCount","treeIndex","updateNode","changeNodeAtPath","reorderConstructs","deleteNode","canHaveChildren","toggleExpand","toggleExpandedForAll","parent","branch","indexOf","orderArray","generateButtons","buttons","stopPropagation","callback","deleteCallback","divider","newTreeData","startIcon","canNodeHaveChildren","canDrop","nextParent","prevPath","nextPath","canDrag","searchMethod","searchQuery","searchFocusOffset","searchFinishCallback","generateNodeProps","side","right","ConstructForm","NewConstructQuestion","InstrumentConstructBuild","small","visible","FormField","CodeListForm","TableContainer","fields","freesolo","category_id","cursor","used_by","CreateNewBuildObjectButtons","objectTypes","history","useHistory","ObjectTypeLookup","truncate","InstrumentBuildCodeLists","selectedCodeList","CodeListItem","handleCodeListSelection","HumanizeObjectType","QuestionItemForm","InstrumentBuildQuestionItems","selectedQuestion","QuestionItem","handleQuestionSelection","QuestionGridForm","cl","order","InstrumentBuildQuestionGrids","setquestionGridId","QuestionGrid","ResponseDomainNumericForm","responseDomain","ResponseDomainTextForm","ResponseDomainDatetimeForm","InstrumentBuildResponseDomains","selectedResponseDomain","ResponseDomainItem","handleResponseDomainSelection","responseDomainForm","NoMatch","RedirectFromState","redirect","common","createMuiTheme","MuiButtonBase","disableRipple","warning","info","success","App","exact","serializeArrayToObject","array","appReducer","combineReducers","setItem","jwt","instrumentTrees","instrumentSequences","instrumentStatements","instrumentConditions","instrumentLoops","instrumentQuestions","instrumentResponseUnits","responseUnit","revisedQuestionItems","objects","revisedQuestionGrids","revisedCodeLists","revisedResponseDomains","revisedVariables","revisedImportMappings","createStore","reducers","applyMiddleware","thunk","Boolean","hostname","ReactDOM","store","Store","document","getElementById","navigator","serviceWorker","ready","registration","unregister"],"mappings":"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","file":"static/js/main.d0f5c265.chunk.js","sourcesContent":["import { include } from 'named-urls'\n\nexport default {\n login : '/login',\n datasets: include('/datasets', {\n all: ''\n }),\n admin: include('/admin/', {\n import: 'import',\n imports: include('imports/', {\n all: '',\n show: ':importId'\n }),\n instruments: include('instruments/', {\n all: '',\n exports: 'exports',\n importMappings: ':instrumentId/imports',\n importMapping: ':instrumentId/imports/:id'\n }),\n datasets: include('datasets/', {\n all: '',\n importMappings: ':datasetId/imports',\n importMapping: ':datasetId/imports/:id'\n }),\n }),\n instruments: include('/instruments', {\n all: '',\n new: 'new',\n instrument: include(':instrument_id/', {\n show: '',\n edit: 'edit',\n map: include('map/', {\n show: ''\n }),\n build: include('build/', {\n show: '',\n ccConditions: 'ccConditions',\n ccLoops: 'ccLoops',\n ccQuestions: 'ccQuestions',\n ccSequences: 'ccSequences',\n ccStatements: 'ccStatements',\n constructs: include('constructs/', {\n show: ''\n }),\n codeLists: include('code_lists/', {\n all: '',\n show: ':codeListId',\n new: 'new'\n }),\n questionItems: include('question_items/', {\n all: '',\n show: ':questionItemId',\n new: 'new'\n }),\n questionGrids: include('question_grids/', {\n all: '',\n show: ':questionGridId',\n new: 'new'\n }),\n responseDomains: include('response_domains/', {\n all: '',\n new: 'new',\n show: ':responseDomainType/:responseDomainId',\n })\n })\n })\n })\n}\n","import React from 'react';\nimport { useSelector } from \"react-redux\";\nimport { Redirect, Route } from \"react-router-dom\";\nimport { reverse as url } from 'named-urls'\n\nimport routes from './routes'\n\nconst AuthRoute = props => {\n\n const isAuthUser = useSelector(state => state.auth.isAuthUser);\n\n const { type } = props;\n\n if (type === \"guest\" && isAuthUser) {\n return <Redirect to={url(routes.instruments.all)} />\n }else if (type === \"private\" && !isAuthUser){\n return <Redirect to={url(routes.login)} />\n };\n\n return <Route {...props} />;\n};\n\nexport default AuthRoute;\n","import axios from \"axios\";\nimport { reverse as url } from 'named-urls'\nimport routes from '../routes'\n\nconst api_host = process.env.REACT_APP_API_HOST\n\nconst api_headers = () => ({\n 'Authorization': 'Bearer ' + window.localStorage.getItem('jwt'),\n 'Content-Type': 'application/json'\n })\n\naxios.interceptors.response.use(function (response) {\n return response;\n}, function (error) {\n if (401 === error.response.status) {\n window.localStorage.removeItem('jwt');\n window.location = '/login'\n } else {\n return Promise.reject(error);\n }\n});\n\n// Auth\nexport const authUser = (email, password) => {\n const request = axios.post(api_host + '/users/sign_in.json', {\n \"user\": {\n \"email\": email,\n \"password\": password\n }\n })\n return (dispatch) => {\n return request.then(res => {\n dispatch(authUserSuccess(res.data));\n })\n .catch(err => {\n dispatch(authUserFailure(err.message));\n });\n };\n};\n\nexport const InstrumentTree = {\n create: (instrumentId, flatTree) => {\n return (dispatch) => {\n dispatch({type: 'LOAD_INSTRUMENT_TREE', payload: { instrumentId: instrumentId, flatTree: flatTree }});\n };\n }\n}\n\nexport const Dataset = {\n all: () => {\n const request = axios.get(api_host + '/datasets.json',{\n headers: api_headers()\n })\n return (dispatch) => {\n return request.then(res => {\n dispatch(datasetsFetchSuccess(res.data));\n })\n .catch(err => {\n dispatch(fetchFailure(err.message));\n });\n };\n },\n show: (id) => {\n const request = axios.get(api_host + '/datasets/' + id + '.json?questions=true',{\n headers: api_headers()\n })\n return (dispatch) => {\n return request.then(res => {\n dispatch(datasetFetchSuccess(res.data));\n })\n .catch(err => {\n dispatch(fetchFailure(err.message));\n });\n };\n }\n}\n\nexport const AdminInstrument = {\n create: (values) => {\n let formData = new FormData();\n\n formData.append(\"files[]\", values.files[0]);\n const request = axios.post(api_host + '/admin/import/instruments/', formData, {\n headers: {...api_headers(), ...{'Content-Type': 'multipart/form-data'}}\n })\n return (dispatch) => {\n dispatch(savingItem('new', 'AdminInstrument'));\n return request.then(res => {\n dispatch(savedItem('new', 'AdminInstrument'));\n })\n .catch(err => {\n console.log('error')\n });\n };\n },\n}\n\nexport const AdminDataset = {\n create: (values) => {\n let formData = new FormData();\n\n formData.append(\"files[]\", values.files[0]);\n const request = axios.post(api_host + '/admin/import/datasets/', formData, {\n headers: {...api_headers(), ...{'Content-Type': 'multipart/form-data'}}\n })\n return (dispatch) => {\n dispatch(savingItem('new', 'AdminDataset'));\n return request.then(res => {\n dispatch(savedItem('new', 'AdminDataset'));\n })\n .catch(err => {\n console.log('error')\n });\n };\n },\n}\n\nexport const AdminImportMapping = {\n create: (type, id, imports) => {\n const request = axios.post(api_host + '/' + type + '/' + id + '/imports.json', { imports: imports}, {\n headers: {...api_headers(), ...{'Content-Type': 'application/json'}}\n })\n return (dispatch) => {\n dispatch(savingItem('new', 'AdminImportMapping'));\n return request.then(res => {\n dispatch(savedItem('new', 'AdminImportMapping'));\n dispatch(AdminImportMapping.all('instruments',id))\n })\n .catch(err => {\n console.log('error')\n });\n };\n },\n all: (type, id) => {\n const request = axios.get(api_host + '/' + type + '/' + id + '/imports.json',{\n headers: api_headers()\n })\n return (dispatch) => {\n return request.then(res => {\n dispatch(importMappingsFetchSuccess(id, type, res.data));\n })\n .catch(err => {\n dispatch(fetchFailure(err.message));\n });\n };\n },\n show: (type, parentId, id) => {\n const request = axios.get(api_host + '/' + type + '/' + parentId + '/imports/' + id + '.json',{\n headers: api_headers()\n })\n return (dispatch) => {\n return request.then(res => {\n dispatch(importMappingFetchSuccess(type, parentId, res.data));\n })\n .catch(err => {\n dispatch(fetchFailure(err.message));\n });\n };\n }\n}\n\nexport const AdminImport = {\n all: () => {\n const request = axios.get(api_host + '/imports.json',{\n headers: api_headers()\n })\n return (dispatch) => {\n return request.then(res => {\n dispatch(importsFetchSuccess(res.data));\n })\n .catch(err => {\n dispatch(fetchFailure(err.message));\n });\n };\n },\n show: (id) => {\n const request = axios.get(api_host + '/imports/' + id + '.json',{\n headers: api_headers()\n })\n return (dispatch) => {\n return request.then(res => {\n dispatch(importFetchSuccess(res.data));\n })\n .catch(err => {\n dispatch(fetchFailure(err.message));\n });\n };\n },\n}\n\nexport const Instrument = {\n update: (instrumentId, values) => {\n const request = axios.put(api_host + '/instruments/' + instrumentId + '.json', values, {\n headers: api_headers()\n })\n return (dispatch) => {\n dispatch(savingItem(instrumentId, 'Instrument'));\n return request.then(res => {\n dispatch(savedItem(instrumentId, 'Instrument'));\n dispatch(instrumentFetchSuccess(res.data));\n })\n .catch(err => {\n dispatch(saveError(instrumentId, 'Instrument', err.response.data.error_sentence));\n });\n };\n },\n create: (values) => {\n const request = axios.post(api_host + '/instruments.json', values, {\n headers: api_headers()\n })\n return (dispatch) => {\n dispatch(savingItem('new', 'Instrument'));\n return request.then(res => {\n dispatch(savedItem('new', 'Instrument'));\n dispatch(instrumentFetchSuccess(res.data));\n dispatch(redirectTo(url(routes.instruments.instrument.show, { instrument_id: res.data.prefix })));\n })\n .catch(err => {\n dispatch(saveError('new', 'Instrument', err.response.data.error_sentence));\n });\n };\n },\n import: (values) => {\n const request = axios.post(api_host + '/admin/import/instruments/', { updates: values }, {\n headers: api_headers()\n })\n return (dispatch) => {\n return request.then(res => {\n console.log('ok')\n })\n .catch(err => {\n console.log('error')\n });\n };\n },\n export: (instrumentId) => {\n const request = axios.get(api_host + '/instruments/' + instrumentId + '/export.json', {\n headers: api_headers()\n })\n return (dispatch) => {\n return request.then(res => {\n console.log('ok')\n })\n .catch(err => {\n console.log('error')\n });\n };\n },\n all: () => {\n const request = axios.get(api_host + '/instruments.json',{\n headers: api_headers()\n })\n return (dispatch) => {\n return request.then(res => {\n dispatch(instrumentsFetchSuccess(res.data));\n })\n .catch(err => {\n dispatch(fetchFailure(err.message));\n });\n };\n },\n show: (id) => {\n const request = axios.get(api_host + '/instruments/' + id + '.json',{\n headers: api_headers()\n })\n return (dispatch) => {\n return request.then(res => {\n dispatch(instrumentFetchSuccess(res.data));\n })\n .catch(err => {\n dispatch(fetchFailure(err.message));\n });\n };\n },\n stats: (id) => {\n const request = axios.get(api_host + '/instruments/' + id + '/stats.json',{\n headers: api_headers()\n })\n return (dispatch) => {\n return request.then(res => {\n dispatch(instrumentStatsFetchSuccess(id, res.data));\n })\n .catch(err => {\n dispatch(fetchFailure(err.message));\n });\n };\n },\n reorderConstructs: (instrumentId, values) => {\n const request = axios.post(api_host + '/instruments/' + instrumentId + '/reorder_ccs.json', { updates: values }, {\n headers: api_headers()\n })\n return (dispatch) => {\n return request.then(res => {\n console.log('ok')\n })\n .catch(err => {\n console.log('error')\n });\n };\n }\n}\n\nexport const Categories = {\n all: (instrumentId) => {\n const request = axios.get(api_host + '/instruments/' + instrumentId + '/categories.json',{\n headers: api_headers()\n })\n return (dispatch) => {\n return request.then(res => {\n dispatch(categoriesFetchSuccess(instrumentId, res.data));\n })\n .catch(err => {\n dispatch(fetchFailure(err.message));\n });\n };\n }\n}\n\nconst categoriesFetchSuccess = (instrumentId, categories) => ({\n type: 'LOAD_INSTRUMENT_CATEGORIES',\n payload: {\n instrumentId: instrumentId,\n categories: categories\n }\n});\n\nexport const CodeLists = {\n all: (instrumentId) => {\n const request = axios.get(api_host + '/instruments/' + instrumentId + '/code_lists.json',{\n headers: api_headers()\n })\n return (dispatch) => {\n return request.then(res => {\n dispatch(codeListsFetchSuccess(instrumentId, res.data));\n })\n .catch(err => {\n dispatch(fetchFailure(err.message));\n });\n };\n },\n update: (instrumentId, codeListId, values) => {\n const request = axios.put(api_host + '/instruments/' + instrumentId + '/code_lists/' + codeListId + '.json', values, {\n headers: api_headers()\n })\n return (dispatch) => {\n dispatch(savingItem(codeListId, 'CodeList'));\n return request.then(res => {\n dispatch(savedItem(codeListId, 'CodeList'));\n dispatch(codeListFetchSuccess(instrumentId, res.data));\n })\n .catch(err => {\n dispatch(saveError(codeListId, 'CodeList', err.response.data.error_sentence));\n });\n };\n },\n create: (instrumentId, values) => {\n const request = axios.post(api_host + '/instruments/' + instrumentId + '/code_lists.json', values, {\n headers: api_headers()\n })\n return (dispatch) => {\n dispatch(savingItem('new', 'CodeList'));\n return request.then(res => {\n dispatch(savedItem('new', 'CodeList'));\n dispatch(codeListFetchSuccess(instrumentId, res.data));\n dispatch(redirectTo(url(routes.instruments.instrument.build.codeLists.show, { instrument_id: instrumentId, codeListId: 'new' })));\n })\n .catch(err => {\n dispatch(saveError('new', 'CodeList', err.response.data.error_sentence));\n });\n };\n },\n delete: (instrumentId, codeListId) => {\n const request = axios.delete(api_host + '/instruments/' + instrumentId + '/code_lists/' + codeListId + '.json', {\n headers: api_headers()\n })\n return (dispatch) => {\n return request.then(res => {\n dispatch(objectDeleteSuccess(instrumentId,'CodeList', codeListId));\n dispatch(redirectTo(url(routes.instruments.instrument.build.codeLists.all, { instrument_id: instrumentId })));\n })\n .catch(err => {\n dispatch(savedItem(codeListId, 'CodeList'));\n dispatch(saveError(codeListId, 'CodeList', err.response.data.error_sentence));\n });\n };\n }\n}\n\nconst codeListsFetchSuccess = (instrumentId, codeLists) => ({\n type: 'LOAD_INSTRUMENT_CODE_LISTS',\n payload: {\n instrumentId: instrumentId,\n codeLists: codeLists\n }\n});\n\nconst codeListFetchSuccess = (instrumentId, codeList) => ({\n type: 'LOAD_INSTRUMENT_CODE_LIST',\n payload: {\n instrumentId: instrumentId,\n codeList: codeList\n }\n});\n\nexport const CcSequences = {\n all: (instrumentId) => {\n const request = axios.get(api_host + '/instruments/' + instrumentId + '/cc_sequences.json',{\n headers: api_headers()\n })\n return (dispatch) => {\n return request.then(res => {\n dispatch(ccSequencesFetchSuccess(instrumentId, res.data));\n })\n .catch(err => {\n dispatch(fetchFailure(err.message));\n });\n };\n },\n update: (instrumentId, ccSequenceId, values) => {\n const request = axios.put(api_host + '/instruments/' + instrumentId + '/cc_sequences/' + ccSequenceId + '.json', values, {\n headers: api_headers()\n })\n return (dispatch) => {\n dispatch(savingItem(ccSequenceId, 'CcSequence'));\n return request.then(res => {\n dispatch(savedItem(ccSequenceId, 'CcSequence'));\n dispatch(ccSequenceFetchSuccess(instrumentId, res.data));\n })\n .catch(err => {\n dispatch(saveError(ccSequenceId, 'CcSequence', err.response.data));\n });\n };\n },\n create: (instrumentId, values, onSuccess=(object)=>{}) => {\n const request = axios.post(api_host + '/instruments/' + instrumentId + '/cc_sequences.json', values, {\n headers: api_headers()\n })\n return (dispatch) => {\n dispatch(savingItem('new', 'CcSequence'));\n return request.then(res => {\n dispatch(savedItem('new', 'CcSequence'));\n dispatch(ccSequenceFetchSuccess(instrumentId, res.data));\n onSuccess({id:res.data.id})\n })\n .catch(err => {\n dispatch(saveError('new', 'CcSequence', err.response.data));\n });\n };\n },\n delete: (instrumentId, ccSequenceId, onDelete=()=>{}) => {\n const request = axios.delete(api_host + '/instruments/' + instrumentId + '/cc_sequences/' + ccSequenceId + '.json', {\n headers: api_headers()\n })\n return (dispatch) => {\n dispatch(savingItem(ccSequenceId, 'CcSequence'));\n return request.then(res => {\n dispatch(savedItem(ccSequenceId, 'CcSequence'));\n dispatch(objectDeleteSuccess(instrumentId,'CcSequence', ccSequenceId));\n onDelete();\n })\n .catch(err => {\n dispatch(saveError(ccSequenceId, 'CcSequence', err.response.data));\n });\n };\n },\n}\n\nconst ccSequencesFetchSuccess = (instrumentId, sequences) => ({\n type: 'LOAD_INSTRUMENT_SEQUENCES',\n payload: {\n instrumentId: instrumentId,\n sequences: sequences\n }\n});\n\nconst ccSequenceFetchSuccess = (instrumentId, sequence) => ({\n type: 'LOAD_INSTRUMENT_SEQUENCE',\n payload: {\n instrumentId: instrumentId,\n sequence: sequence\n }\n});\n\nexport const CcStatements = {\n all: (instrumentId) => {\n const request = axios.get(api_host + '/instruments/' + instrumentId + '/cc_statements.json',{\n headers: api_headers()\n })\n return (dispatch) => {\n return request.then(res => {\n dispatch(ccStatementsFetchSuccess(instrumentId, res.data));\n })\n .catch(err => {\n dispatch(fetchFailure(err.message));\n });\n };\n },\n update: (instrumentId, ccStatementId, values) => {\n const request = axios.put(api_host + '/instruments/' + instrumentId + '/cc_statements/' + ccStatementId + '.json', values, {\n headers: api_headers()\n })\n return (dispatch) => {\n dispatch(savingItem(ccStatementId, 'CcStatement'));\n return request.then(res => {\n dispatch(savedItem(ccStatementId, 'CcStatement'));\n dispatch(ccStatementFetchSuccess(instrumentId, res.data));\n })\n .catch(err => {\n dispatch(saveError(ccStatementId, 'CcStatement', err.response.data));\n });\n };\n },\n create: (instrumentId, values, onSuccess=(object)=>{}) => {\n const request = axios.post(api_host + '/instruments/' + instrumentId + '/cc_statements.json', values, {\n headers: api_headers()\n })\n return (dispatch) => {\n dispatch(savingItem('new', 'CcStatement'));\n return request.then(res => {\n dispatch(savedItem('new', 'CcStatement'));\n dispatch(ccStatementFetchSuccess(instrumentId, res.data));\n onSuccess({id:res.data.id})\n })\n .catch(err => {\n dispatch(saveError('new', 'CcStatement', err.response.data));\n });\n };\n },\n delete: (instrumentId, ccStatementId, onDelete=()=>{}) => {\n const request = axios.delete(api_host + '/instruments/' + instrumentId + '/cc_statements/' + ccStatementId + '.json', {\n headers: api_headers()\n })\n return (dispatch) => {\n dispatch(savingItem(ccStatementId, 'CcStatement'));\n return request.then(res => {\n dispatch(savedItem(ccStatementId, 'CcStatement'));\n dispatch(objectDeleteSuccess(instrumentId,'CcStatement', ccStatementId));\n onDelete()\n })\n .catch(err => {\n dispatch(saveError(ccStatementId, 'CcStatement', err.response.data));\n });\n };\n },\n}\n\nconst ccStatementsFetchSuccess = (instrumentId, statements) => ({\n type: 'LOAD_INSTRUMENT_STATEMENTS',\n payload: {\n instrumentId: instrumentId,\n statements: statements\n }\n});\n\nconst ccStatementFetchSuccess = (instrumentId, statement) => ({\n type: 'LOAD_INSTRUMENT_STATEMENT',\n payload: {\n instrumentId: instrumentId,\n statement: statement\n }\n});\n\nexport const CcLoops = {\n all: (instrumentId) => {\n const request = axios.get(api_host + '/instruments/' + instrumentId + '/cc_loops.json',{\n headers: api_headers()\n })\n return (dispatch) => {\n return request.then(res => {\n dispatch(ccLoopsFetchSuccess(instrumentId, res.data));\n })\n .catch(err => {\n dispatch(fetchFailure(err.message));\n });\n };\n },\n update: (instrumentId, ccLoopId, values) => {\n const request = axios.put(api_host + '/instruments/' + instrumentId + '/cc_loops/' + ccLoopId + '.json', values, {\n headers: api_headers()\n })\n return (dispatch) => {\n dispatch(savingItem(ccLoopId, 'CcLoop'));\n return request.then(res => {\n dispatch(savedItem(ccLoopId, 'CcLoop'));\n dispatch(ccLoopFetchSuccess(instrumentId, res.data));\n })\n .catch(err => {\n dispatch(saveError(ccLoopId, 'CcLoop', err.response.data.error_sentence));\n });\n };\n },\n create: (instrumentId, values, onSuccess=(object)=>{}) => {\n const request = axios.post(api_host + '/instruments/' + instrumentId + '/cc_loops.json', values, {\n headers: api_headers()\n })\n return (dispatch) => {\n dispatch(savingItem('new', 'CcLoop'));\n return request.then(res => {\n dispatch(savedItem('new', 'CcLoop'));\n dispatch(ccLoopFetchSuccess(instrumentId, res.data));\n onSuccess({id:res.data.id})\n })\n .catch(err => {\n dispatch(saveError('new', 'CcLoop', err.response.data.error_sentence));\n });\n };\n },\n delete: (instrumentId, ccLoopId, onDelete=()=>{}) => {\n const request = axios.delete(api_host + '/instruments/' + instrumentId + '/cc_loops/' + ccLoopId + '.json', {\n headers: api_headers()\n })\n return (dispatch) => {\n dispatch(savingItem(ccLoopId, 'CcLoop'));\n return request.then(res => {\n dispatch(savedItem(ccLoopId, 'CcLoop'));\n dispatch(objectDeleteSuccess(instrumentId,'CcLoop', ccLoopId));\n onDelete();\n })\n .catch(err => {\n dispatch(saveError(ccLoopId, 'CcLoop', err.response.data.error_sentence));\n });\n };\n },\n}\n\nconst ccLoopsFetchSuccess = (instrumentId, loops) => ({\n type: 'LOAD_INSTRUMENT_LOOPS',\n payload: {\n instrumentId: instrumentId,\n loops: loops\n }\n});\n\nconst ccLoopFetchSuccess = (instrumentId, loop) => ({\n type: 'LOAD_INSTRUMENT_LOOP',\n payload: {\n instrumentId: instrumentId,\n loop: loop\n }\n});\n\nexport const ResponseUnits = {\n all: (instrumentId) => {\n const request = axios.get(api_host + '/instruments/' + instrumentId + '/response_units.json',{\n headers: api_headers()\n })\n return (dispatch) => {\n return request.then(res => {\n dispatch(responseUnitsFetchSuccess(instrumentId, res.data));\n })\n .catch(err => {\n dispatch(fetchFailure(err.message));\n });\n };\n },\n update: (instrumentId, responseUnitId, values) => {\n const request = axios.put(api_host + '/instruments/' + instrumentId + '/response_units/' + responseUnitId + '.json', values, {\n headers: api_headers()\n })\n return (dispatch) => {\n return request.then(res => {\n dispatch(responseUnitFetchSuccess(instrumentId, res.data));\n })\n .catch(err => {\n dispatch(saveError(responseUnitId, 'ResponseUnit', err.response.data.error_sentence));\n });\n };\n },\n create: (instrumentId, values) => {\n const request = axios.post(api_host + '/instruments/' + instrumentId + '/response_units.json', values, {\n headers: api_headers()\n })\n return (dispatch) => {\n return request.then(res => {\n dispatch(responseUnitFetchSuccess(instrumentId, res.data));\n })\n .catch(err => {\n dispatch(saveError('new', 'ResponseUnit', err.response.data.error_sentence));\n });\n };\n },\n delete: (instrumentId, responseUnitId, onDelete=()=>{}) => {\n const request = axios.delete(api_host + '/instruments/' + instrumentId + '/response_units/' + responseUnitId + '.json', {\n headers: api_headers()\n })\n return (dispatch) => {\n return request.then(res => {\n dispatch(objectDeleteSuccess(instrumentId,'ResponseUnit', responseUnitId));\n onDelete();\n })\n .catch(err => {\n dispatch(saveError(responseUnitId, 'ResponseUnit', err.response.data.error_sentence));\n });\n };\n },\n}\n\nconst responseUnitsFetchSuccess = (instrumentId, responseUnits) => ({\n type: 'LOAD_INSTRUMENT_RESPONSE_UNITS',\n payload: {\n instrumentId: instrumentId,\n responseUnits: responseUnits\n }\n});\n\nconst responseUnitFetchSuccess = (instrumentId, responseUnit) => ({\n type: 'LOAD_INSTRUMENT_RESPONSE_UNITS',\n payload: {\n instrumentId: instrumentId,\n responseUnit: responseUnit\n }\n});\n\nexport const CcConditions = {\n all: (instrumentId) => {\n const request = axios.get(api_host + '/instruments/' + instrumentId + '/cc_conditions.json',{\n headers: api_headers()\n })\n return (dispatch) => {\n return request.then(res => {\n dispatch(ccConditionsFetchSuccess(instrumentId, res.data));\n })\n .catch(err => {\n dispatch(fetchFailure(err.message));\n });\n };\n },\n update: (instrumentId, ccConditionId, values) => {\n const request = axios.put(api_host + '/instruments/' + instrumentId + '/cc_conditions/' + ccConditionId + '.json', values, {\n headers: api_headers()\n })\n return (dispatch) => {\n dispatch(savingItem(ccConditionId, 'CcCondition'));\n return request.then(res => {\n dispatch(savedItem(ccConditionId, 'CcCondition'));\n dispatch(ccConditionFetchSuccess(instrumentId, res.data));\n })\n .catch(err => {\n dispatch(saveError(ccConditionId, 'CcCondition', err.response.data));\n });\n };\n },\n create: (instrumentId, values, onSuccess=(object)=>{}) => {\n const request = axios.post(api_host + '/instruments/' + instrumentId + '/cc_conditions.json', values, {\n headers: api_headers()\n })\n return (dispatch) => {\n dispatch(savingItem('new', 'CcCondition'));\n return request.then(res => {\n dispatch(savedItem('new', 'CcCondition'));\n dispatch(ccConditionFetchSuccess(instrumentId, res.data));\n onSuccess({id:res.data.id})\n })\n .catch(err => {\n dispatch(saveError('new', 'CcCondition', err.response.data));\n });\n };\n },\n delete: (instrumentId, ccConditionId, onDelete=()=>{}) => {\n const request = axios.delete(api_host + '/instruments/' + instrumentId + '/cc_conditions/' + ccConditionId + '.json', {\n headers: api_headers()\n })\n return (dispatch) => {\n dispatch(savingItem(ccConditionId, 'CcCondition'));\n return request.then(res => {\n dispatch(savedItem(ccConditionId, 'CcCondition'));\n dispatch(objectDeleteSuccess(instrumentId,'CcCondition', ccConditionId));\n onDelete()\n })\n .catch(err => {\n dispatch(saveError(ccConditionId, 'CcCondition', err.response.data));\n });\n };\n },\n}\n\nconst ccConditionsFetchSuccess = (instrumentId, conditions) => ({\n type: 'LOAD_INSTRUMENT_CONDITIONS',\n payload: {\n instrumentId: instrumentId,\n conditions: conditions\n }\n});\n\nconst ccConditionFetchSuccess = (instrumentId, condition) => ({\n type: 'LOAD_INSTRUMENT_CONDITION',\n payload: {\n instrumentId: instrumentId,\n condition: condition\n }\n});\n\nexport const CcQuestions = {\n all: (instrumentId) => {\n const request = axios.get(api_host + '/instruments/' + instrumentId + '/cc_questions.json',{\n headers: api_headers()\n })\n return (dispatch) => {\n return request.then(res => {\n dispatch(ccQuestionsFetchSuccess(instrumentId, res.data));\n })\n .catch(err => {\n dispatch(fetchFailure(err.message));\n });\n };\n },\n update: (instrumentId, ccQuestionId, values) => {\n const request = axios.put(api_host + '/instruments/' + instrumentId + '/cc_questions/' + ccQuestionId + '.json', values, {\n headers: api_headers()\n })\n return (dispatch) => {\n dispatch(savingItem(ccQuestionId, 'CcQuestion'));\n return request.then(res => {\n dispatch(savedItem(ccQuestionId, 'CcQuestion'));\n dispatch(ccQuestionFetchSuccess(instrumentId, res.data));\n })\n .catch(err => {\n dispatch(saveError(ccQuestionId, 'CcQuestion', err.response.data));\n });\n };\n },\n create: (instrumentId, values, onSuccess=(object)=>{}) => {\n const request = axios.post(api_host + '/instruments/' + instrumentId + '/cc_questions.json', values, {\n headers: api_headers()\n })\n return (dispatch) => {\n dispatch(savingItem('new', 'CcQuestion'));\n return request.then(res => {\n dispatch(savedItem('new', 'CcQuestion'));\n dispatch(ccQuestionFetchSuccess(instrumentId, res.data));\n onSuccess({id:res.data.id})\n })\n .catch(err => {\n dispatch(saveError('new', 'CcQuestion', err.response.data));\n });\n };\n },\n delete: (instrumentId, ccQuestionId, onDelete=()=>{}) => {\n const request = axios.delete(api_host + '/instruments/' + instrumentId + '/cc_questions/' + ccQuestionId + '.json', {\n headers: api_headers()\n })\n return (dispatch) => {\n dispatch(savingItem(ccQuestionId, 'CcQuestion'));\n return request.then(res => {\n dispatch(savedItem(ccQuestionId, 'CcQuestion'));\n dispatch(objectDeleteSuccess(instrumentId,'CcQuestion', ccQuestionId));\n onDelete();\n })\n .catch(err => {\n dispatch(saveError(ccQuestionId, 'CcQuestion', err.response.data));\n });\n };\n },\n topic: {\n set: (instrumentId, ccQuestionId, topicId) => {\n const request = axios.post(api_host + '/instruments/' + instrumentId + '/cc_questions/' + ccQuestionId + '/set_topic.json',\n {\n \"topic_id\": topicId\n },\n {\n headers: api_headers()\n })\n return (dispatch) => {\n dispatch(savingItem(ccQuestionId, 'CcQuestion'));\n return request.then(res => {\n dispatch(savedItem(ccQuestionId, 'CcQuestion'));\n dispatch(ccQuestionFetchSuccess(instrumentId, res.data));\n })\n .catch(err => {\n dispatch(saveError(ccQuestionId, 'CcQuestion', err.response.data.message));\n });\n };\n }\n },\n variables: {\n add: (instrumentId, ccQuestionId, variableNames) => {\n const request = axios.post(api_host + '/instruments/' + instrumentId + '/cc_questions/' + ccQuestionId + '/add_variables.json',\n {\n \"variable_names\": variableNames\n },\n {\n headers: api_headers()\n })\n return (dispatch) => {\n dispatch(savingItem(ccQuestionId, 'CcQuestion'));\n return request.then(res => {\n dispatch(savedItem(ccQuestionId, 'CcQuestion'));\n dispatch(ccQuestionFetchSuccess(instrumentId, res.data));\n })\n .catch(err => {\n dispatch(saveError(ccQuestionId, 'CcQuestion', err.response.data.message));\n });\n };\n },\n remove: (instrumentId, ccQuestionId, variableId) => {\n const request = axios.post(api_host + '/instruments/' + instrumentId + '/cc_questions/' + ccQuestionId + '/remove_variable.json',\n {\n \"variable_id\": variableId\n },\n {\n headers: api_headers()\n })\n return (dispatch) => {\n dispatch(savingItem(ccQuestionId, 'CcQuestion'));\n return request.then(res => {\n dispatch(savedItem(ccQuestionId, 'CcQuestion'));\n dispatch(ccQuestionFetchSuccess(instrumentId, res.data));\n })\n .catch(err => {\n dispatch(saveError(ccQuestionId, 'CcQuestion', err.message));\n });\n };\n }\n }\n}\n\nconst savingItem = (id, type) => ({\n type: 'SAVING',\n payload: {\n id: id,\n type: type\n }\n});\n\nconst savedItem = (id, type) => ({\n type: 'SAVED',\n payload: {\n id: id,\n type: type\n }\n});\n\nconst ccQuestionsFetchSuccess = (instrumentId, questions) => ({\n type: 'LOAD_INSTRUMENT_QUESTIONS',\n payload: {\n instrumentId: instrumentId,\n questions: questions\n }\n});\n\nconst ccQuestionFetchSuccess = (instrumentId, question) => ({\n type: 'LOAD_INSTRUMENT_QUESTION',\n payload: {\n instrumentId: instrumentId,\n question: question\n }\n});\n\nexport const QuestionItems = {\n all: (instrumentId) => {\n const request = axios.get(api_host + '/instruments/' + instrumentId + '/question_items.json',{\n headers: api_headers()\n })\n return (dispatch) => {\n return request.then(res => {\n dispatch(questionItemsFetchSuccess(instrumentId, res.data));\n })\n .catch(err => {\n dispatch(fetchFailure(err.message));\n });\n };\n },\n update: (instrumentId, questionItemId, values) => {\n const request = axios.put(api_host + '/instruments/' + instrumentId + '/question_items/' + questionItemId + '.json', values, {\n headers: api_headers()\n })\n return (dispatch) => {\n dispatch(savingItem(questionItemId, 'QuestionItem'));\n return request.then(res => {\n dispatch(savedItem(questionItemId, 'QuestionItem'));\n dispatch(questionItemFetchSuccess(instrumentId, res.data));\n })\n .catch(err => {\n dispatch(saveError(questionItemId, 'QuestionItem', err.response.data.error_sentence));\n });\n };\n },\n create: (instrumentId, values) => {\n const request = axios.post(api_host + '/instruments/' + instrumentId + '/question_items.json', values, {\n headers: api_headers()\n })\n return (dispatch) => {\n dispatch(savingItem('new', 'QuestionItem'));\n return request.then(res => {\n dispatch(savedItem('new', 'QuestionItem'));\n dispatch(questionItemFetchSuccess(instrumentId, res.data));\n dispatch(redirectTo(url(routes.instruments.instrument.build.questionItems.show, { instrument_id: instrumentId, questionItemId: 'new' })));\n })\n .catch(err => {\n dispatch(saveError('new', 'QuestionItem', err.response.data.error_sentence));\n });\n };\n },\n delete: (instrumentId, questionItemId) => {\n const request = axios.delete(api_host + '/instruments/' + instrumentId + '/question_items/' + questionItemId + '.json', {\n headers: api_headers()\n })\n return (dispatch) => {\n dispatch(savingItem(questionItemId, 'QuestionItem'));\n return request.then(res => {\n dispatch(savedItem(questionItemId, 'QuestionItem'));\n dispatch(objectDeleteSuccess(instrumentId,'QuestionItem', questionItemId));\n dispatch(redirectTo(url(routes.instruments.instrument.build.questionItems.all, { instrument_id: instrumentId })));\n })\n .catch(err => {\n dispatch(saveError(questionItemId, 'QuestionItem', err.response.data.error_sentence));\n });\n };\n }\n}\n\nconst questionItemsFetchSuccess = (instrumentId, questions) => ({\n type: 'LOAD_INSTRUMENT_QUESTION_ITEMS',\n payload: {\n instrumentId: instrumentId,\n questions: questions\n }\n});\n\nconst questionItemFetchSuccess = (instrumentId, questionItem) => ({\n type: 'LOAD_INSTRUMENT_QUESTION_ITEM',\n payload: {\n instrumentId: instrumentId,\n questionItem: questionItem\n }\n});\n\nexport const QuestionGrids = {\n all: (instrumentId, onLoad=()=>{}) => {\n const request = axios.get(api_host + '/instruments/' + instrumentId + '/question_grids.json',{\n headers: api_headers()\n })\n return (dispatch) => {\n return request.then(res => {\n dispatch(questionGridsFetchSuccess(instrumentId, []));\n dispatch(questionGridsFetchSuccess(instrumentId, res.data));\n onLoad()\n })\n .catch(err => {\n dispatch(fetchFailure(err.message));\n });\n };\n },\n show: (instrumentId, id) => {\n const request = axios.get(api_host + '/instruments/' + instrumentId + '/question_grids/' + id + '.json',{\n headers: api_headers()\n })\n return (dispatch) => {\n return request.then(res => {\n dispatch(questionGridFetchSuccess(instrumentId, res.data));\n })\n .catch(err => {\n dispatch(fetchFailure(err.message));\n });\n };\n },\n update: (instrumentId, questionGridId, values) => {\n const request = axios.put(api_host + '/instruments/' + instrumentId + '/question_grids/' + questionGridId + '.json', values, {\n headers: api_headers()\n })\n return (dispatch) => {\n dispatch(savingItem(questionGridId, 'QuestionGrid'));\n return request.then(res => {\n dispatch(savedItem(questionGridId, 'QuestionGrid'));\n dispatch(questionGridFetchSuccess(instrumentId, res.data));\n })\n .catch(err => {\n dispatch(saveError(questionGridId, 'QuestionGrid', err.response.data.error_sentence));\n });\n };\n },\n create: (instrumentId, values) => {\n const request = axios.post(api_host + '/instruments/' + instrumentId + '/question_grids.json', values, {\n headers: api_headers()\n })\n return (dispatch) => {\n dispatch(savingItem('new', 'QuestionGrid'));\n return request.then(res => {\n dispatch(savedItem('new', 'QuestionGrid'));\n dispatch(questionGridFetchSuccess(instrumentId, res.data));\n dispatch(redirectTo(url(routes.instruments.instrument.build.questionGrids.show, { instrument_id: instrumentId, questionGridId: 'new' })));\n })\n .catch(err => {\n dispatch(saveError('new', 'QuestionGrid', err.response.data.error_sentence));\n });\n };\n },\n delete: (instrumentId, questionGridId) => {\n const request = axios.delete(api_host + '/instruments/' + instrumentId + '/question_grids/' + questionGridId + '.json', {\n headers: api_headers()\n })\n return (dispatch) => {\n dispatch(savingItem(questionGridId, 'QuestionGrid'));\n return request.then(res => {\n dispatch(savedItem(questionGridId, 'QuestionGrid'));\n dispatch(objectDeleteSuccess(instrumentId,'QuestionGrid', questionGridId));\n dispatch(redirectTo(url(routes.instruments.instrument.build.questionGrids.all, { instrument_id: instrumentId })));\n })\n .catch(err => {\n dispatch(saveError(questionGridId, 'QuestionGrid', err.response.data.error_sentence));\n });\n };\n }\n}\n\nconst questionGridsFetchSuccess = (instrumentId, questions) => ({\n type: 'LOAD_INSTRUMENT_QUESTION_GRIDS',\n payload: {\n instrumentId: instrumentId,\n questions: questions\n }\n});\n\nconst questionGridFetchSuccess = (instrumentId, questionGrid) => ({\n type: 'LOAD_INSTRUMENT_QUESTION_GRID',\n payload: {\n instrumentId: instrumentId,\n questionGrid: questionGrid\n }\n});\n\nexport const ResponseDomainNumerics = {\n all: (instrumentId) => {\n const request = axios.get(api_host + '/instruments/' + instrumentId + '/response_domain_numerics.json',{\n headers: api_headers()\n })\n return (dispatch) => {\n return request.then(res => {\n dispatch(responseDomainNumericsFetchSuccess(instrumentId, res.data));\n })\n .catch(err => {\n dispatch(fetchFailure(err.message));\n });\n };\n },\n update: (instrumentId, responseDomainNumericId, values) => {\n const request = axios.put(api_host + '/instruments/' + instrumentId + '/response_domain_numerics/' + responseDomainNumericId + '.json', values, {\n headers: api_headers()\n })\n return (dispatch) => {\n dispatch(savingItem(responseDomainNumericId, 'ResponseDomainNumeric'));\n return request.then(res => {\n dispatch(savedItem(responseDomainNumericId, 'ResponseDomainNumeric'));\n dispatch(responseDomainNumericFetchSuccess(instrumentId, res.data));\n })\n .catch(err => {\n dispatch(saveError(responseDomainNumericId, 'ResponseDomainNumeric', err.response.data.error_sentence));\n });\n };\n },\n create: (instrumentId, values) => {\n const request = axios.post(api_host + '/instruments/' + instrumentId + '/response_domain_numerics.json', values, {\n headers: api_headers()\n })\n return (dispatch) => {\n dispatch(savingItem('new', 'ResponseDomainNumeric'));\n return request.then(res => {\n dispatch(savedItem('new', 'ResponseDomainNumeric'));\n dispatch(responseDomainNumericFetchSuccess(instrumentId, res.data));\n dispatch(redirectTo(url(routes.instruments.instrument.build.responseDomains.show, { instrument_id: instrumentId, responseDomainType: res.data.type, responseDomainId: 'new' })));\n })\n .catch(err => {\n dispatch(saveError('new', 'ResponseDomainNumeric', err.response.data.error_sentence));\n });\n };\n },\n delete: (instrumentId, responseDomainNumericId) => {\n const request = axios.delete(api_host + '/instruments/' + instrumentId + '/response_domain_numerics/' + responseDomainNumericId + '.json', {\n headers: api_headers()\n })\n return (dispatch) => {\n dispatch(savingItem(responseDomainNumericId, 'ResponseDomainNumeric'));\n return request.then(res => {\n dispatch(savedItem(responseDomainNumericId, 'ResponseDomainNumeric'));\n dispatch(objectDeleteSuccess(instrumentId,'ResponseDomainNumeric', responseDomainNumericId));\n dispatch(redirectTo(url(routes.instruments.instrument.build.responseDomains.all, { instrument_id: instrumentId })));\n })\n .catch(err => {\n dispatch(saveError(responseDomainNumericId, 'ResponseDomainNumeric', err.response.data.error_sentence));\n });\n };\n }\n}\n\nconst responseDomainNumericsFetchSuccess = (instrumentId, responseDomainNumerics) => ({\n type: 'LOAD_INSTRUMENT_RESPONSE_DOMAIN_NUMERICS',\n payload: {\n instrumentId: instrumentId,\n responseDomainNumerics: responseDomainNumerics\n }\n});\n\nconst responseDomainNumericFetchSuccess = (instrumentId, responseDomainNumeric) => ({\n type: 'LOAD_INSTRUMENT_RESPONSE_DOMAIN_NUMERIC',\n payload: {\n instrumentId: instrumentId,\n responseDomainNumeric: responseDomainNumeric\n }\n});\n\nexport const ResponseDomainCodes = {\n all: (instrumentId) => {\n const request = axios.get(api_host + '/instruments/' + instrumentId + '/response_domain_codes.json',{\n headers: api_headers()\n })\n return (dispatch) => {\n return request.then(res => {\n dispatch(responseDomainCodesFetchSuccess(instrumentId, res.data));\n })\n .catch(err => {\n dispatch(fetchFailure(err.message));\n });\n };\n }\n}\n\nconst responseDomainCodesFetchSuccess = (instrumentId, responseDomainCodes) => ({\n type: 'LOAD_INSTRUMENT_RESPONSE_DOMAIN_CODES',\n payload: {\n instrumentId: instrumentId,\n responseDomainCodes: responseDomainCodes\n }\n});\n\nexport const ResponseDomainTexts = {\n all: (instrumentId) => {\n const request = axios.get(api_host + '/instruments/' + instrumentId + '/response_domain_texts.json',{\n headers: api_headers()\n })\n return (dispatch) => {\n return request.then(res => {\n dispatch(responseDomainTextsFetchSuccess(instrumentId, res.data));\n })\n .catch(err => {\n dispatch(fetchFailure(err.message));\n });\n };\n },\n update: (instrumentId, responseDomainTextId, values) => {\n const request = axios.put(api_host + '/instruments/' + instrumentId + '/response_domain_texts/' + responseDomainTextId + '.json', values, {\n headers: api_headers()\n })\n return (dispatch) => {\n dispatch(savingItem(responseDomainTextId, 'ResponseDomainText'));\n return request.then(res => {\n dispatch(savedItem(responseDomainTextId, 'ResponseDomainText'));\n dispatch(responseDomainTextFetchSuccess(instrumentId, res.data));\n })\n .catch(err => {\n dispatch(saveError(responseDomainTextId, 'ResponseDomainText', err.response.data.error_sentence));\n });\n };\n },\n create: (instrumentId, values) => {\n const request = axios.post(api_host + '/instruments/' + instrumentId + '/response_domain_texts.json', values, {\n headers: api_headers()\n })\n return (dispatch) => {\n dispatch(savingItem('new', 'ResponseDomainText'));\n return request.then(res => {\n dispatch(savedItem('new', 'ResponseDomainText'));\n dispatch(responseDomainTextFetchSuccess(instrumentId, res.data));\n dispatch(redirectTo(url(routes.instruments.instrument.build.responseDomains.show, { instrument_id: instrumentId, responseDomainType: res.data.type, responseDomainId: 'new' })));\n })\n .catch(err => {\n dispatch(saveError('new', 'ResponseDomainText', err.response.data.error_sentence));\n });\n };\n },\n delete: (instrumentId, responseDomainTextId) => {\n const request = axios.delete(api_host + '/instruments/' + instrumentId + '/response_domain_texts/' + responseDomainTextId + '.json', {\n headers: api_headers()\n })\n return (dispatch) => {\n dispatch(savingItem(responseDomainTextId, 'ResponseDomainText'));\n return request.then(res => {\n dispatch(savedItem(responseDomainTextId, 'ResponseDomainText'));\n dispatch(objectDeleteSuccess(instrumentId,'ResponseDomainText', responseDomainTextId));\n dispatch(redirectTo(url(routes.instruments.instrument.build.responseDomains.all, { instrument_id: instrumentId })));\n })\n .catch(err => {\n dispatch(saveError(responseDomainTextId, 'ResponseDomainText', err.response.data.error_sentence));\n });\n };\n }\n}\n\nconst responseDomainTextsFetchSuccess = (instrumentId, responseDomainTexts) => ({\n type: 'LOAD_INSTRUMENT_RESPONSE_DOMAIN_TEXTS',\n payload: {\n instrumentId: instrumentId,\n responseDomainTexts: responseDomainTexts\n }\n});\n\nconst responseDomainTextFetchSuccess = (instrumentId, responseDomainText) => ({\n type: 'LOAD_INSTRUMENT_RESPONSE_DOMAIN_TEXT',\n payload: {\n instrumentId: instrumentId,\n responseDomainText: responseDomainText\n }\n});\n\nexport const ResponseDomainDatetimes = {\n all: (instrumentId) => {\n const request = axios.get(api_host + '/instruments/' + instrumentId + '/response_domain_datetimes.json',{\n headers: api_headers()\n })\n return (dispatch) => {\n return request.then(res => {\n dispatch(responseDomainDatetimesFetchSuccess(instrumentId, res.data));\n })\n .catch(err => {\n dispatch(fetchFailure(err.message));\n });\n };\n },\n update: (instrumentId, responseDomainDatetimeId, values) => {\n const request = axios.put(api_host + '/instruments/' + instrumentId + '/response_domain_datetimes/' + responseDomainDatetimeId + '.json', values, {\n headers: api_headers()\n })\n return (dispatch) => {\n dispatch(savingItem(responseDomainDatetimeId, 'ResponseDomainDatetime'));\n return request.then(res => {\n dispatch(savedItem(responseDomainDatetimeId, 'ResponseDomainDatetime'));\n dispatch(responseDomainDatetimeFetchSuccess(instrumentId, res.data));\n })\n .catch(err => {\n dispatch(saveError(responseDomainDatetimeId, 'ResponseDomainDatetime', err.response.data.error_sentence));\n });\n };\n },\n create: (instrumentId, values) => {\n const request = axios.post(api_host + '/instruments/' + instrumentId + '/response_domain_datetimes.json', values, {\n headers: api_headers()\n })\n return (dispatch) => {\n dispatch(savingItem('new', 'ResponseDomainDatetime'));\n return request.then(res => {\n dispatch(savedItem('new', 'ResponseDomainDatetime'));\n dispatch(responseDomainDatetimeFetchSuccess(instrumentId, res.data));\n dispatch(redirectTo(url(routes.instruments.instrument.build.responseDomains.show, { instrument_id: instrumentId, responseDomainType: res.data.type, responseDomainId: 'new' })));\n })\n .catch(err => {\n dispatch(saveError('new', 'ResponseDomainDatetime', err.response.data.error_sentence));\n });\n };\n },\n delete: (instrumentId, responseDomainDatetimeId) => {\n const request = axios.delete(api_host + '/instruments/' + instrumentId + '/response_domain_datetimes/' + responseDomainDatetimeId + '.json', {\n headers: api_headers()\n })\n return (dispatch) => {\n dispatch(savingItem(responseDomainDatetimeId, 'ResponseDomainDatetime'));\n return request.then(res => {\n dispatch(savedItem(responseDomainDatetimeId, 'ResponseDomainDatetime'));\n dispatch(objectDeleteSuccess(instrumentId,'ResponseDomainDatetime', responseDomainDatetimeId));\n dispatch(redirectTo(url(routes.instruments.instrument.build.responseDomains.all, { instrument_id: instrumentId })));\n })\n .catch(err => {\n dispatch(saveError(responseDomainDatetimeId, 'ResponseDomainDatetime', err.response.data.error_sentence));\n });\n };\n }\n}\n\nconst responseDomainDatetimesFetchSuccess = (instrumentId, responseDomainDatetimes) => ({\n type: 'LOAD_INSTRUMENT_RESPONSE_DOMAIN_DATETIMES',\n payload: {\n instrumentId: instrumentId,\n responseDomainDatetimes: responseDomainDatetimes\n }\n});\n\nconst responseDomainDatetimeFetchSuccess = (instrumentId, responseDomainDatetime) => ({\n type: 'LOAD_INSTRUMENT_RESPONSE_DOMAIN_DATETIME',\n payload: {\n instrumentId: instrumentId,\n responseDomainDatetime: responseDomainDatetime\n }\n});\n\nexport const Variables = {\n all: (instrumentId) => {\n const request = axios.get(api_host + '/instruments/' + instrumentId + '/variables.json',{\n headers: api_headers()\n })\n return (dispatch) => {\n return request.then(res => {\n dispatch(variablesFetchSuccess(instrumentId, res.data));\n })\n .catch(err => {\n dispatch(fetchFailure(err.message));\n });\n };\n },\n add: (instrumentId) => {\n const request = axios.get(api_host + '/instruments/' + instrumentId + '/add_variables.json',{\n headers: api_headers()\n })\n return (dispatch) => {\n return request.then(res => {\n dispatch(variablesFetchSuccess(instrumentId, res.data));\n })\n .catch(err => {\n dispatch(fetchFailure(err.message));\n });\n };\n }\n}\n\nconst variablesFetchSuccess = (instrumentId, variables) => ({\n type: 'LOAD_INSTRUMENT_VARIABLES',\n payload: {\n instrumentId: instrumentId,\n variables: variables\n }\n});\n\nexport const DatasetVariable = {\n all: (datasetId) => {\n const request = axios.get(api_host + '/datasets/' + datasetId + '/variables.json',{\n headers: api_headers()\n })\n return (dispatch) => {\n return request.then(res => {\n dispatch(datasetVariablesFetchSuccess(datasetId, res.data));\n })\n .catch(err => {\n dispatch(fetchFailure(err.message));\n });\n };\n },\n topic: {\n set: (datasetId, variableId, topicId) => {\n const request = axios.post(api_host + '/datasets/' + datasetId + '/variables/' + variableId + '/set_topic.json',\n {\n \"topic_id\": topicId\n },\n {\n headers: api_headers()\n })\n return (dispatch) => {\n dispatch(savingItem(variableId, 'DatasetVariable'));\n return request.then(res => {\n dispatch(savedItem(variableId, 'DatasetVariable'));\n dispatch(datasetVariablesFetchSuccess(datasetId, res.data));\n })\n .catch(err => {\n dispatch(saveError(variableId, 'DatasetVariable', err.response.data.message));\n });\n };\n }\n },\n add_source: (datasetId, datasetVariableId, sources) => {\n const request = axios.post(api_host + '/datasets/' + datasetId + '/variables/' + datasetVariableId + '/add_sources.json',\n {\n sources: {\n \"id\": sources,\n \"x\": null,\n \"y\": null\n }\n },\n {\n headers: api_headers()\n })\n return (dispatch) => {\n dispatch(savingItem(datasetVariableId, 'DatasetVariable'));\n return request.then(res => {\n dispatch(savedItem(datasetVariableId, 'DatasetVariable'));\n dispatch(datasetVariableFetchSuccess(datasetId, res.data));\n })\n .catch(err => {\n dispatch(saveError(datasetVariableId, 'DatasetVariable', err.response.data.message));\n });\n };\n },\n remove_source: (datasetId, datasetVariableId, source) => {\n const request = axios.post(api_host + '/datasets/' + datasetId + '/variables/' + datasetVariableId + '/remove_source.json',\n {\n other: {\n id: source.id,\n class: source.class,\n x: source.x,\n y: source.y\n }\n },\n {\n headers: api_headers()\n })\n return (dispatch) => {\n dispatch(savingItem(datasetVariableId, 'DatasetVariable'));\n return request.then(res => {\n dispatch(savedItem(datasetVariableId, 'DatasetVariable'));\n dispatch(datasetVariableFetchSuccess(datasetId, res.data));\n })\n .catch(err => {\n dispatch(saveError(datasetVariableId, 'DatasetVariable', err.message));\n });\n };\n }\n}\n\nconst datasetVariablesFetchSuccess = (datasetId, variables) => ({\n type: 'LOAD_DATASET_VARIABLES',\n payload: {\n datasetId: datasetId,\n variables: variables\n }\n});\n\nconst datasetVariableFetchSuccess = (datasetId, variable) => ({\n type: 'LOAD_DATASET_VARIABLE',\n payload: {\n datasetId: datasetId,\n variable: variable\n }\n});\n\nexport const Topics = {\n all: () => {\n const request = axios.get(api_host + '/topics/flattened_nest.json',{\n headers: api_headers()\n })\n return (dispatch) => {\n return request.then(res => {\n dispatch(topicsFetchSuccess(res.data));\n })\n .catch(err => {\n dispatch(fetchFailure(err.message));\n });\n };\n }\n}\n\nconst topicsFetchSuccess = (topics) => ({\n type: 'LOAD_TOPICS',\n payload: {\n topics: topics\n }\n});\n\nconst datasetsFetchSuccess = datasets => ({\n type: 'LOAD_DATASETS',\n payload: {\n datasets: datasets\n }\n});\n\nconst datasetFetchSuccess = datasets => ({\n type: 'LOAD_DATASET',\n payload: {\n dataset: datasets\n }\n});\n\nconst importMappingsFetchSuccess = (id, type, imports) => {\n const reducerType = (type === 'instruments' ) ? 'LOAD_INSTRUMENT_IMPORT_MAPPINGS' : 'LOAD_DATASET_IMPORT_MAPPINGS'\n return {\n type: reducerType,\n payload: {\n id: id,\n importMappings: imports\n }\n }\n};\n\nconst importMappingFetchSuccess = (type, parentId, importMapping) => {\n const reducerType = (type === 'instruments' ) ? 'LOAD_INSTRUMENT_IMPORT_MAPPING' : 'LOAD_DATASET_IMPORT_MAPPING'\n return {\n type: reducerType,\n payload: {\n parentId: parentId,\n importMapping: importMapping\n }\n }\n};\n\nconst importsFetchSuccess = imports => ({\n type: 'LOAD_ADMIN_IMPORTS',\n payload: {\n imports: imports\n }\n});\n\nconst importFetchSuccess = importObj => ({\n type: 'LOAD_ADMIN_IMPORT',\n payload: {\n import: importObj\n }\n});\n\nconst instrumentsFetchSuccess = instruments => ({\n type: 'LOAD_INSTRUMENTS',\n payload: {\n instruments: instruments\n }\n});\n\nconst instrumentFetchSuccess = instruments => ({\n type: 'LOAD_INSTRUMENT',\n payload: {\n instrument: instruments\n }\n});\n\nconst instrumentStatsFetchSuccess = (instrumentId, stats) => ({\n type: 'LOAD_INSTRUMENT_STATS',\n payload: {\n instrumentId: instrumentId,\n stats: stats\n }\n});\n\nconst objectDeleteSuccess = (instrumentId, objectType, id) => ({\n type: 'DELETE_INSTRUMENT_OBJECT_TYPE',\n payload: {\n instrumentId: instrumentId,\n id: id,\n objectType: objectType\n }\n});\n\nconst fetchFailure = error => ({\n type: 'FETCH_FAILURE',\n payload: {\n error\n }\n});\n\nconst saveError = (id, type, error) => ({\n type: 'ERROR',\n payload: {\n id: id,\n type: type,\n error: error\n }\n});\n\nconst authUserSuccess = auth => ({\n type: 'LOGIN',\n payload: {\n ...auth\n }\n});\n\nconst authUserFailure = error => ({\n type: 'LOGIN_FAILURE',\n payload: {\n error\n }\n});\n\nconst redirectTo = (url) => ({\n type: 'REDIRECT',\n payload: {\n to: url\n }\n})\n","import React from 'react';\nimport Avatar from '@material-ui/core/Avatar';\nimport Button from '@material-ui/core/Button';\nimport CssBaseline from '@material-ui/core/CssBaseline';\nimport TextField from '@material-ui/core/TextField';\nimport LockOutlinedIcon from '@material-ui/icons/LockOutlined';\nimport Typography from '@material-ui/core/Typography';\nimport { makeStyles } from '@material-ui/core/styles';\nimport Container from '@material-ui/core/Container';\nimport { authUser } from '../actions'\nimport { useDispatch } from 'react-redux'\n\nconst useStyles = makeStyles((theme) => ({\n paper: {\n marginTop: theme.spacing(8),\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n },\n avatar: {\n margin: theme.spacing(1),\n backgroundColor: theme.palette.secondary.main,\n },\n form: {\n width: '100%', // Fix IE 11 issue.\n marginTop: theme.spacing(1),\n },\n submit: {\n margin: theme.spacing(3, 0, 2),\n },\n}));\n\nconst useFormField = (initialValue: string = \"\") => {\n const [value, setValue] = React.useState(initialValue);\n const onChange = React.useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => setValue(e.target.value),\n []\n );\n return { value, onChange };\n};\n\nexport default function Login() {\n const classes = useStyles();\n\n const emailField = useFormField();\n const passwordField = useFormField();\n\n const dispatch = useDispatch()\n\n const handleSubmit = (e: React.FormEvent) => {\n e.preventDefault();\n dispatch(authUser(emailField.value, passwordField.value));\n }\n\n return (\n <Container component=\"main\" maxWidth=\"xs\">\n <CssBaseline />\n <div className={classes.paper}>\n <Avatar className={classes.avatar}>\n <LockOutlinedIcon />\n </Avatar>\n <Typography component=\"h1\" variant=\"h5\">\n Sign in\n </Typography>\n <form className={classes.form} noValidate onSubmit={handleSubmit}>\n <TextField\n variant=\"outlined\"\n margin=\"normal\"\n required\n fullWidth\n id=\"email\"\n label=\"Email Address\"\n name=\"email\"\n autoComplete=\"email\"\n autoFocus\n {...emailField}\n />\n <TextField\n variant=\"outlined\"\n margin=\"normal\"\n required\n fullWidth\n name=\"password\"\n label=\"Password\"\n type=\"password\"\n id=\"password\"\n autoComplete=\"current-password\"\n {...passwordField}\n />\n <Button\n type=\"submit\"\n fullWidth\n variant=\"contained\"\n color=\"primary\"\n className={classes.submit}\n >\n Log In\n </Button>\n </form>\n </div>\n </Container>\n );\n}\n","import React from 'react';\nimport Breadcrumbs from '@material-ui/core/Breadcrumbs';\nimport NavigateNextIcon from '@material-ui/icons/NavigateNext';\nimport { Link } from 'react-router-dom';\nimport Paper from '@material-ui/core/Paper';\nimport Typography from '@material-ui/core/Typography';\nimport { isEmpty, get } from 'lodash'\nimport routes from '../routes'\nimport { reverse as url } from 'named-urls'\nimport { useLocation } from 'react-router-dom';\nimport { makeStyles } from '@material-ui/core/styles';\n\nconst BreadcrumbBarItem = (props) => {\n const {text, link} = props\n\n if(isEmpty(link)){\n return (\n <Typography color=\"textPrimary\">{text}</Typography>\n )\n }else{\n return (\n <Link color=\"inherit\" to={link}>\n {text}\n </Link>\n )\n }\n}\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n 'margin-bottom': '10px',\n padding: '15px'\n }\n}));\n\nconst BreadcrumbBar = (props) => {\n const {instrumentId} = props\n\n const location = useLocation();\n\n const buildBreadcrumbs = () => {\n var found = location.pathname.match(new RegExp(`^\\\\/(?<topLevel>instruments|datasets|admin)`));\n var topLevel = get(get(found, 'groups',{}),'topLevel','instruments')\n switch (topLevel) {\n case 'datasets':\n return buildDatasetBreadcrumbs()\n break\n case 'admin':\n return buildAdminBreadcrumbs()\n break\n default:\n return buildInstrumentBreadcrumbs()\n break\n }\n }\n\n const buildDatasetBreadcrumbs = () => {\n var crumbs = [{text: 'Datasets', link: url(routes.datasets.all)}]\n return crumbs\n }\n\n const buildAdminBreadcrumbs = () => {\n var crumbs = [{text: 'Admin', link: url(routes.admin.instruments)}]\n return crumbs\n }\n\n const buildInstrumentBreadcrumbs = () => {\n const paramsFromPath = () => {\n const capturingRegex = `/instruments\\\\/${instrumentId}\\\\/(?<type>build|map)\\/?(?<subtype>question_grids|question_items|response_domains|code_lists|constructs)?\\/?`;\n const found = location.pathname.match(new RegExp(capturingRegex));\n return get(found, 'groups',{})\n }\n\n var crumbs = [{text: 'Instruments', link: url(routes.instruments.all)}]\n\n if(instrumentId){\n crumbs.push(\n {\n text: instrumentId,\n link: url(routes.instruments.instrument.show, { instrument_id: instrumentId })\n }\n )\n const params = paramsFromPath();\n if(params){\n switch (params.type) {\n case 'map':\n crumbs.push(\n {\n text: 'Map',\n link: url(routes.instruments.instrument.map.show, { instrument_id: instrumentId })\n }\n )\n break\n case 'build':\n crumbs.push(\n {\n text: 'Build',\n link: url(routes.instruments.instrument.build.show, { instrument_id: instrumentId })\n }\n )\n if(params.subtype){\n\n if(params.subtype === 'question_items'){\n crumbs.push(\n {\n text: 'Question Items',\n link: url(routes.instruments.instrument.build.questionItems.all, { instrument_id: instrumentId })\n }\n )\n }else if(params.subtype === 'question_grids'){\n crumbs.push(\n {\n text: 'Question Grids',\n link: url(routes.instruments.instrument.build.questionGrids.all, { instrument_id: instrumentId })\n }\n )\n }else if(params.subtype === 'code_lists'){\n crumbs.push(\n {\n text: 'CodeLists',\n link: url(routes.instruments.instrument.build.codeLists.all, { instrument_id: instrumentId })\n }\n )\n }else if(params.subtype === 'response_domains'){\n crumbs.push(\n {\n text: 'Response Domains',\n link: url(routes.instruments.instrument.build.responseDomains.all, { instrument_id: instrumentId })\n }\n )\n }else if(params.subtype === 'constructs'){\n crumbs.push(\n {\n text: 'Constructs',\n link: url(routes.instruments.instrument.build.constructs.show, { instrument_id: instrumentId })\n }\n )\n }\n\n }\n }\n }\n }\n return crumbs\n }\n\n const breadcrumbs = buildBreadcrumbs()\n\n const classes = useStyles()\n\n return (\n <Paper className={classes.root}>\n <Breadcrumbs separator={<NavigateNextIcon fontSize=\"small\" />} aria-label=\"breadcrumb\">\n {breadcrumbs.map((breadcrumb) => {\n return <BreadcrumbBarItem text={breadcrumb.text} link={breadcrumb.link} />\n })}\n </Breadcrumbs>\n </Paper>\n )\n}\n\nexport default BreadcrumbBar\n","export const ObjectColour = (type) => {\n switch (type){\n case 'statement':\n case 'CcSequence':\n return '652d90' // Purple;\n case 'loop':\n case 'CcLoop':\n return '37b34a' // Green;\n case 'question':\n case 'CcQuestion':\n return '00adee' // Pale Blue;\n case 'sequence':\n case 'CcSequence':\n return 'faaf40' // Orange;\n case 'condition':\n case 'CcCondition':\n return 'f1003a' // Red;\n default:\n return 'd3d3d3' // Light Grey\n }\n}\n\n//652d90 Purple\n// eb008b Pink\n// faaf40 Orange\n// f1003a Red\n// 37b34a Green\n// 00adee Pale Blue\n// 2e008b Dark Purple\n// 1f801e Dark Green\n","import React from 'react';\nimport clsx from 'clsx';\nimport { makeStyles } from '@material-ui/core/styles';\nimport CssBaseline from '@material-ui/core/CssBaseline';\nimport Drawer from '@material-ui/core/Drawer';\nimport Box from '@material-ui/core/Box';\nimport AppBar from '@material-ui/core/AppBar';\nimport Toolbar from '@material-ui/core/Toolbar';\nimport List from '@material-ui/core/List';\nimport Typography from '@material-ui/core/Typography';\nimport Divider from '@material-ui/core/Divider';\nimport IconButton from '@material-ui/core/IconButton';\nimport Container from '@material-ui/core/Container';\nimport Grid from '@material-ui/core/Grid';\nimport Paper from '@material-ui/core/Paper';\nimport MenuIcon from '@material-ui/icons/Menu';\nimport ChevronLeftIcon from '@material-ui/icons/ChevronLeft';\nimport ExitToAppIcon from '@material-ui/icons/ExitToApp';\nimport ListItem from '@material-ui/core/ListItem';\nimport ListItemIcon from '@material-ui/core/ListItemIcon';\nimport ListItemText from '@material-ui/core/ListItemText';\nimport DashboardIcon from '@material-ui/icons/Dashboard';\nimport StorageIcon from '@material-ui/icons/Storage';\nimport QuestionAnswerIcon from '@material-ui/icons/QuestionAnswer';\nimport LabelIcon from '@material-ui/icons/Label';\nimport SupervisedUserCircleIcon from '@material-ui/icons/SupervisedUserCircle';\nimport { Link } from 'react-router-dom';\nimport { reverse as url } from 'named-urls'\nimport routes from '../routes'\nimport Helmet from \"react-helmet\";\nimport { useDispatch } from 'react-redux'\nimport BreadcrumbBar from './BreadcrumbBar'\nimport { ObjectColour } from '../support/ObjectColour'\nimport Collapse from '@material-ui/core/Collapse';\nimport ExpandLess from '@material-ui/icons/ExpandLess';\nimport ExpandMore from '@material-ui/icons/ExpandMore';\n\nfunction Copyright() {\n return (\n <Typography variant=\"body2\" color=\"textSecondary\" align=\"center\">\n {'Copyright © '}\n <Link color=\"inherit\" to=\"https://material-ui.com/\">\n Archivist\n </Link>{' '}\n {new Date().getFullYear()}\n {'.'}\n </Typography>\n );\n}\n\nconst drawerWidth = 240;\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n display: 'flex',\n },\n nested: {\n paddingLeft: theme.spacing(4),\n },\n toolbar: {\n paddingRight: 24, // keep right padding when drawer closed\n },\n toolbarIcon: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-end',\n padding: '0 8px',\n ...theme.mixins.toolbar,\n },\n appBar: {\n zIndex: theme.zIndex.drawer + 1,\n transition: theme.transitions.create(['width', 'margin'], {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.leavingScreen,\n }),\n },\n appBarShift: {\n marginLeft: drawerWidth,\n width: `calc(100% - ${drawerWidth}px)`,\n transition: theme.transitions.create(['width', 'margin'], {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.enteringScreen,\n }),\n },\n menuButton: {\n marginRight: 36,\n },\n menuButtonHidden: {\n display: 'none',\n },\n title: {\n flexGrow: 1,\n },\n drawerPaper: {\n position: 'relative',\n whiteSpace: 'nowrap',\n width: drawerWidth,\n transition: theme.transitions.create('width', {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.enteringScreen,\n }),\n },\n drawerPaperClose: {\n overflowX: 'hidden',\n transition: theme.transitions.create('width', {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.leavingScreen,\n }),\n width: theme.spacing(7),\n [theme.breakpoints.up('sm')]: {\n width: theme.spacing(9),\n },\n },\n appBarSpacer: theme.mixins.toolbar,\n content: {\n flexGrow: 1,\n height: '100vh',\n overflow: 'auto',\n },\n container: {\n paddingTop: theme.spacing(4),\n paddingBottom: theme.spacing(4),\n },\n paper: {\n padding: theme.spacing(2),\n display: 'flex',\n flexDirection: 'column',\n },\n fixedHeight: {\n height: 240,\n },\n}));\n\nconst MainListItems = ({onExpand}) => {\n const classes = useStyles();\n const [open, setOpen] = React.useState(false);\n\n const handleClick = () => {\n onExpand()\n setOpen(!open);\n };\n\n return (\n <div>\n <ListItem button>\n <ListItemIcon>\n <Link to={url(routes.instruments.all)}>\n <QuestionAnswerIcon />\n </Link>\n </ListItemIcon>\n <Link to={url(routes.instruments.all)}>\n <ListItemText primary=\"Instruments\" />\n </Link>\n </ListItem>\n <ListItem button>\n <ListItemIcon>\n <Link to={url(routes.datasets.all)}>\n <StorageIcon />\n </Link>\n </ListItemIcon>\n <Link to={url(routes.datasets.all)} title={'Datasets'}>\n <ListItemText primary=\"Datasets\" />\n </Link>\n </ListItem>\n <ListItem button onClick={handleClick}>\n <ListItemIcon>\n <SupervisedUserCircleIcon style={{ color: '37b34a' }}/>\n </ListItemIcon>\n <ListItemText primary=\"Admin\" />\n {open ? <ExpandLess /> : <ExpandMore />}\n </ListItem>\n <Collapse in={open} timeout=\"auto\" unmountOnExit>\n <List component=\"div\" disablePadding>\n <ListItem button className={classes.nested}>\n <Link to={url(routes.admin.instruments.all)}>\n <ListItemText primary=\"Instruments\" />\n </Link>\n </ListItem>\n <ListItem button className={classes.nested}>\n <Link to={url(routes.admin.datasets.all)}>\n <ListItemText primary=\"Datasets\" />\n </Link>\n </ListItem>\n <ListItem button className={classes.nested}>\n <Link to={url(routes.admin.import)}>\n <ListItemText primary=\"Import\" />\n </Link>\n </ListItem>\n <ListItem button className={classes.nested}>\n <Link to={url(routes.admin.imports.all)}>\n <ListItemText primary=\"DDI Imports\" />\n </Link>\n </ListItem>\n <ListItem button className={classes.nested}>\n <Link to={url(routes.admin.instruments.exports)}>\n <ListItemText primary=\"Instrument Exports\" />\n </Link>\n </ListItem>\n </List>\n </Collapse>\n </div>\n )\n}\n\nexport const Dashboard = (props) => {\n const classes = useStyles();\n const [open, setOpen] = React.useState(false);\n const dispatch = useDispatch();\n const { instrumentId } = props;\n const handleDrawerOpen = () => {\n setOpen(true);\n };\n const handleDrawerClose = () => {\n setOpen(false);\n };\n\n return (\n <div className={classes.root}>\n <Helmet>\n <meta charSet=\"utf-8\" />\n <title>Archivist</title>\n </Helmet>\n <CssBaseline />\n <AppBar position=\"absolute\" className={clsx(classes.appBar, open && classes.appBarShift)}>\n <Toolbar className={classes.toolbar}>\n <IconButton\n edge=\"start\"\n color=\"inherit\"\n aria-label=\"open drawer\"\n onClick={handleDrawerOpen}\n className={clsx(classes.menuButton, open && classes.menuButtonHidden)}\n >\n <MenuIcon />\n </IconButton>\n <Typography component=\"h1\" variant=\"h6\" color=\"inherit\" noWrap className={classes.title}>\n {props.title}\n </Typography>\n <IconButton color=\"inherit\">\n <ExitToAppIcon onClick={()=>{ dispatch({type:'LOGOUT'}) }}/>\n </IconButton>\n </Toolbar>\n </AppBar>\n <Drawer\n variant=\"permanent\"\n classes={{\n paper: clsx(classes.drawerPaper, !open && classes.drawerPaperClose),\n }}\n open={open}\n >\n <div className={classes.toolbarIcon}>\n <img src=\"/logo.svg\" alt=\"BigCo Inc. logo\" style={{width: \"51%\"}}/>\n <IconButton onClick={handleDrawerClose}>\n <ChevronLeftIcon />\n </IconButton>\n </div>\n <Divider />\n <MainListItems onExpand={handleDrawerOpen} />\n <Divider />\n </Drawer>\n <main className={classes.content}>\n <div className={classes.appBarSpacer} />\n <Container maxWidth={false} maxHeight={false} className={classes.container}>\n <Grid container spacing={3}>\n <Grid item xs={12}>\n <BreadcrumbBar instrumentId={instrumentId} />\n <Paper className={classes.paper}>\n {props.children}\n </Paper>\n </Grid>\n </Grid>\n <Box pt={4}>\n <Copyright />\n </Box>\n </Container>\n </main>\n </div>\n );\n}\n","import React from 'react';\nimport { useSelector, useDispatch } from 'react-redux'\nimport { Alert, AlertTitle } from '@material-ui/lab';\nimport { isEmpty, isNil, get } from 'lodash'\n\nexport const ObjectStatus = (id, type) => {\n const statuses = useSelector(state => state.statuses);\n const key = type + ':' + id\n return get(statuses, key, {})\n}\n\nexport const ObjectStatusBar = (props) => {\n const {id, type} = props\n const status = ObjectStatus(id, type)\n\n if(!isEmpty(status) && !isNil(status.error)){\n return (\n <div>\n <Alert severity=\"error\">\n <AlertTitle>Error</AlertTitle>\n {status.errorMessage}\n </Alert>\n </div>\n )\n }else if(status && status.saved){\n return (\n <div>\n <Alert severity=\"success\">\n <AlertTitle>{ (id === 'new') ? 'Created' : 'Saved' }</AlertTitle>\n </Alert>\n </div>\n )\n }else{\n return ''\n }\n}\n","import React from 'react';\nimport { Field } from \"react-final-form\";\n\nexport const FileField = ({ name, ...props }) => (\n <Field name={name}>\n {({ input: { value, onChange, ...input } }) => (\n <input\n {...input}\n type=\"file\"\n multiple\n onChange={({ target }) => onChange(target.files)} // instead of the default target.value\n {...props}\n />\n )}\n </Field>\n);\n","import React from 'react';\nimport { Form, Field } from 'react-final-form';\nimport { useDispatch } from 'react-redux'\nimport { AdminInstrument } from '../actions'\nimport { ObjectStatusBar, ObjectStatus } from '../components/ObjectStatusBar'\nimport { FileField } from '../components/FileField'\nimport { makeStyles } from '@material-ui/core/styles';\nimport { ObjectColour } from '../support/ObjectColour'\nimport { isEmpty } from 'lodash'\n\nimport {\n Paper,\n Grid,\n Button,\n CssBaseline,\n} from '@material-ui/core';\n\n\nconst useStyles = makeStyles({\n table: {\n minWidth: 650,\n },\n paper:{\n boxShadow :`5px 5px 15px 5px #${ObjectColour('statement')}`\n }\n});\n\nconst validate = (values, status) => {\n\n const errors = {};\n\n if (!values.files || isEmpty(values.files)) {\n errors.files = 'Required';\n }\n\n return errors;\n};\n\nconst formFields = [\n {\n size: 12,\n field: (\n <FileField name=\"files\" />\n ),\n }\n];\n\nexport const AdminInstrumentForm = (props) => {\n const {} = props;\n\n const dispatch = useDispatch();\n const classes = useStyles();\n\n\n const onSubmit = (values) => {\n dispatch(AdminInstrument.create(values))\n }\n\n const status = ObjectStatus('new', 'AdminInstrument')\n\n return (\n <div style={{ padding: 16, margin: 'auto', maxWidth: 1000 }}>\n <h2>Upload DDI Instrument Files</h2>\n <ObjectStatusBar type={'AdminInstrument'} id={'new'} />\n <CssBaseline />\n <Form\n onSubmit={onSubmit}\n initialValues={{files: []}}\n validate={(values) => validate(values, status)}\n render={({\n handleSubmit,\n form: {\n mutators: { push, pop }\n }, // injected from final-form-arrays above\n pristine,\n form,\n submitting,\n values\n }) => (\n <form onSubmit={handleSubmit} noValidate>\n <Paper style={{ padding: 16 }} className={classes.paper}>\n <Grid container alignItems=\"flex-start\" spacing={2}>\n {formFields.map((item, idx) => (\n <Grid item xs={item.size} key={idx}>\n {item.type && item.type === 'select'\n ? item.field([])\n : item.field\n }\n </Grid>\n ))}\n <Grid item style={{ marginTop: 16 }}>\n Only DDI-L 3.2 Instrument files are accepted.\n <Button\n variant=\"contained\"\n color=\"primary\"\n type=\"submit\"\n disabled={submitting}\n >\n Import Instrument\n </Button>\n </Grid>\n </Grid>\n </Paper>\n </form>\n )}\n />\n </div>\n );\n}\n","import React from 'react';\nimport { Form, Field } from 'react-final-form';\nimport { useDispatch } from 'react-redux'\nimport { AdminDataset } from '../actions'\nimport { ObjectStatusBar, ObjectStatus } from '../components/ObjectStatusBar'\nimport { FileField } from '../components/FileField'\nimport { makeStyles } from '@material-ui/core/styles';\nimport { ObjectColour } from '../support/ObjectColour'\nimport { isEmpty } from 'lodash'\n\nimport {\n Paper,\n Grid,\n Button,\n CssBaseline,\n} from '@material-ui/core';\n\n\nconst useStyles = makeStyles({\n table: {\n minWidth: 650,\n },\n paper:{\n boxShadow :`5px 5px 15px 5px #${ObjectColour('statement')}`\n }\n});\n\nconst validate = (values, status) => {\n\n const errors = {};\n\n if (!values.files || isEmpty(values.files)) {\n errors.files = 'Required';\n }\n\n return errors;\n};\n\nconst formFields = [\n {\n size: 12,\n field: (\n <FileField name=\"files\" />\n ),\n }\n];\n\nexport const AdminDatasetForm = (props) => {\n const {} = props;\n\n const dispatch = useDispatch();\n const classes = useStyles();\n\n\n const onSubmit = (values) => {\n dispatch(AdminDataset.create(values))\n }\n\n const status = ObjectStatus('new', 'AdminDataset')\n\n return (\n <div style={{ padding: 16, margin: 'auto', maxWidth: 1000 }}>\n <h2>Upload DDI Dataset Files</h2>\n <ObjectStatusBar type={'AdminDataset'} id={'new'} />\n <CssBaseline />\n <Form\n onSubmit={onSubmit}\n initialValues={{files: []}}\n validate={(values) => validate(values, status)}\n render={({\n handleSubmit,\n form: {\n mutators: { push, pop }\n }, // injected from final-form-arrays above\n pristine,\n form,\n submitting,\n values\n }) => (\n <form onSubmit={handleSubmit} noValidate>\n <Paper style={{ padding: 16 }} className={classes.paper}>\n <Grid container alignItems=\"flex-start\" spacing={2}>\n {formFields.map((item, idx) => (\n <Grid item xs={item.size} key={idx}>\n {item.type && item.type === 'select'\n ? item.field([])\n : item.field\n }\n </Grid>\n ))}\n <Grid item style={{ marginTop: 16 }}>\n Only DDI-L 3.2 Dataset files are accepted.\n <Button\n variant=\"contained\"\n color=\"primary\"\n type=\"submit\"\n disabled={submitting}\n >\n Import Dataset\n </Button>\n </Grid>\n </Grid>\n </Paper>\n </form>\n )}\n />\n </div>\n );\n}\n","import React, { useEffect } from 'react';\nimport { useDispatch, useSelector } from 'react-redux'\nimport { Dashboard } from '../components/Dashboard'\nimport { AdminInstrumentForm } from '../components/AdminInstrumentForm'\nimport { AdminDatasetForm } from '../components/AdminDatasetForm'\nimport Button from '@material-ui/core/Button';\nimport { Link } from 'react-router-dom';\nimport { reverse as url } from 'named-urls'\nimport routes from '../routes'\n\nconst AdminImport = () => {\n\n const dispatch = useDispatch()\n\n useEffect(() => {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n },[]);\n\n return (\n <div style={{ height: 500, width: '100%' }}>\n <Dashboard title={'Import'}>\n <AdminInstrumentForm />\n <AdminDatasetForm />\n </Dashboard>\n </div>\n );\n}\n\nexport default AdminImport;\n","import React, { useEffect } from 'react';\nimport { useDispatch, useSelector } from 'react-redux'\nimport { AdminImport } from '../actions'\nimport { Dashboard } from '../components/Dashboard'\nimport Table from '@material-ui/core/Table';\nimport TableBody from '@material-ui/core/TableBody';\nimport TableCell from '@material-ui/core/TableCell';\nimport TableHead from '@material-ui/core/TableHead';\nimport TableRow from '@material-ui/core/TableRow';\nimport Card from '@material-ui/core/Card';\nimport CardHeader from '@material-ui/core/CardHeader';\nimport CardContent from '@material-ui/core/CardContent';\nimport { get } from 'lodash'\n\nconst AdminImportView = (props) => {\n\n const dispatch = useDispatch()\n const importId = get(props, \"match.params.importId\", \"\")\n const imports = useSelector(state => state.imports);\n const importObj = get(imports, importId, { logs: [] })\n const logs = get(importObj, 'logs', [])\n const rows: RowsProp = Object.values(logs);\n\n useEffect(() => {\n dispatch(AdminImport.show(importId));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n },[]);\n\n return (\n <div style={{ height: 500, width: '100%' }}>\n <Dashboard title={'DDI Imports'}>\n <ul>\n <li>Filename : {importObj.filename}</li>\n <li>State : {importObj.state}</li>\n <li>Created At : {importObj.created_at}</li>\n </ul>\n <Table size=\"small\">\n <TableHead>\n <TableRow>\n <TableCell>Input</TableCell>\n <TableCell>Matches</TableCell>\n <TableCell>Outcome</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {rows.map((row) => (\n <TableRow key={row.id}>\n <TableCell>{row.original_text}</TableCell>\n <TableCell>{row.matches}</TableCell>\n <TableCell>{row.outcome}</TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </Dashboard>\n </div>\n );\n}\n\nexport default AdminImportView;\n","import React, { useEffect } from 'react';\nimport { useDispatch, useSelector } from 'react-redux'\nimport { AdminImport } from '../actions'\nimport { Dashboard } from '../components/Dashboard'\nimport Table from '@material-ui/core/Table';\nimport TableBody from '@material-ui/core/TableBody';\nimport TableCell from '@material-ui/core/TableCell';\nimport TableHead from '@material-ui/core/TableHead';\nimport TableRow from '@material-ui/core/TableRow';\nimport TableFooter from '@material-ui/core/TableFooter';\nimport TablePagination from '@material-ui/core/TablePagination';\nimport Button from '@material-ui/core/Button';\nimport { Link } from 'react-router-dom';\nimport { reverse as url } from 'named-urls'\nimport routes from '../routes'\n\nconst AdminImports = () => {\n\n const dispatch = useDispatch()\n const imports = useSelector(state => state.imports);\n const [page, setPage] = React.useState(0);\n const [rowsPerPage, setRowsPerPage] = React.useState(20);\n\n const rows: RowsProp = Object.values(imports).sort().reverse();\n\n const handleChangePage = (event, newPage) => {\n setPage(newPage);\n };\n\n const handleChangeRowsPerPage = (event) => {\n setRowsPerPage(parseInt(event.target.value, 10));\n setPage(0);\n };\n\n useEffect(() => {\n dispatch(AdminImport.all());\n // eslint-disable-next-line react-hooks/exhaustive-deps\n },[]);\n\n return (\n <div style={{ height: 500, width: '100%' }}>\n <Dashboard title={'DDI Imports'}>\n <Table size=\"small\">\n <TableHead>\n <TableRow>\n <TableCell>ID</TableCell>\n <TableCell>File</TableCell>\n <TableCell>Type</TableCell>\n <TableCell>State</TableCell>\n <TableCell>Created At</TableCell>\n <TableCell>Actions</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {rows.slice(page * rowsPerPage, page * rowsPerPage + rowsPerPage).map((row) => (\n <TableRow key={row.id}>\n <TableCell>{row.id}</TableCell>\n <TableCell>{row.filename}</TableCell>\n <TableCell>{row.import_type}</TableCell>\n <TableCell>{row.state}</TableCell>\n <TableCell>{row.created_at}</TableCell>\n <TableCell>\n <Button variant=\"outlined\">\n <Link to={url(routes.admin.imports.show, { importId: row.id })}>\n View Log\n </Link>\n </Button>\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n <TableFooter>\n <TableRow>\n <TablePagination\n rowsPerPageOptions={[20, 50, 100, { label: 'All', value: -1 }]}\n colSpan={3}\n count={rows.length}\n rowsPerPage={rowsPerPage}\n page={page}\n onChangePage={handleChangePage}\n onChangeRowsPerPage={handleChangeRowsPerPage}\n SelectProps={{\n inputProps: { 'aria-label': 'rows per page' },\n native: true,\n }}\n />\n </TableRow>\n </TableFooter>\n </Table>\n </Dashboard>\n </div>\n );\n}\n\nexport default AdminImports;\n","import React from 'react';\nimport { Form, Field } from 'react-final-form';\nimport { useDispatch } from 'react-redux'\nimport { AdminDataset } from '../actions'\nimport { ObjectStatusBar, ObjectStatus } from '../components/ObjectStatusBar'\nimport { FileField } from '../components/FileField'\nimport { makeStyles } from '@material-ui/core/styles';\nimport { ObjectColour } from '../support/ObjectColour'\n\nimport {\n Paper,\n Grid,\n Button,\n CssBaseline,\n MenuItem\n} from '@material-ui/core';\n\nimport {\n TextField,\n Select\n} from 'mui-rff';\n\n\nconst useStyles = makeStyles({\n table: {\n minWidth: 650,\n },\n paper:{\n boxShadow :`5px 5px 15px 5px #${ObjectColour('statement')}`\n }\n});\n\nconst validate = (values, status, dispatch) => {\n const errors = {};\n\n // if(values.files.length != Object.values(values.types).length){\n // errors.files = 'You need to select the type of file you are importing.'\n // }\n\n // console.log(errors)\n return errors;\n};\n\nconst formFields = [\n {\n size: 12,\n field: (\n <FileField name=\"files\" />\n ),\n }\n];\n\nexport const AdminImportMappingsForm = ({type, typeOptions=[], hint, onSubmit=()=>{}}) => {\n\n const dispatch = useDispatch();\n const classes = useStyles();\n\n const status = ObjectStatus('new', 'AdminImportMapping')\n\n// values.files.length == 0 || values.files.length !== Object.values(values.types).length\n\n return (\n <div style={{ padding: 16, margin: 'auto', maxWidth: 1000 }}>\n <h2>Import {type} Mappings</h2>\n <ObjectStatusBar type={'AdminImportMapping'} id={'new'} />\n <CssBaseline />\n <Form\n onSubmit={onSubmit}\n initialValues={{files: [], types: []}}\n validate={(values) => { validate(values, status, dispatch) }}\n render={({\n handleSubmit,\n form: {\n mutators: { push, pop }\n }, // injected from final-form-arrays above\n pristine,\n form,\n submitting,\n values\n }) => (\n <form onSubmit={handleSubmit} noValidate>\n <Paper style={{ padding: 16 }} className={classes.paper}>\n <Grid container alignItems=\"flex-start\" spacing={2}>\n {formFields.map((item, idx) => (\n <Grid item xs={item.size} key={idx}>\n {item.type && item.type === 'select'\n ? item.field([])\n : item.field\n }\n </Grid>\n ))}\n {Array.from(values.files).map((file, index) => {\n values.types[index] = typeOptions[0].value;\n return (\n <div>\n {file.name}\n <select onChange={(e) => { values.types[index] = e.target.value; }} required>\n { typeOptions.map((obj) => (\n <option value={obj.value} class=\"ng-binding\">{obj.label}</option>\n ))}\n </select>\n </div>\n )\n })}\n <Grid item style={{ marginTop: 16 }}>\n {hint}\n <Button\n variant=\"contained\"\n color=\"primary\"\n type=\"submit\"\n disabled={values.files.length < 1 }\n >\n Import Mappings for {type}\n </Button>\n </Grid>\n </Grid>\n </Paper>\n </form>\n )}\n />\n </div>\n );\n}\n","import React from 'react';\nimport BounceLoader from \"react-spinners/BounceLoader\";\nimport { Box } from '@material-ui/core'\nimport { shuffle } from \"lodash\";\nimport { ObjectColour } from '../support/ObjectColour'\n\nexport const Loader = () => {\n return (\n <Box style={{ height: 200, 'marginTop': 50 }} m=\"auto\"><BounceLoader color={`#${ObjectColour(shuffle(['sequence', 'condition', 'question', 'statement','loop'])[0])}`}/></Box>\n )\n}\n","import React, { useEffect, useState } from 'react';\nimport { useSelector } from 'react-redux'\nimport Table from '@material-ui/core/Table';\nimport TableBody from '@material-ui/core/TableBody';\nimport TableCell from '@material-ui/core/TableCell';\nimport TableHead from '@material-ui/core/TableHead';\nimport TableRow from '@material-ui/core/TableRow';\nimport Divider from '@material-ui/core/Divider';\nimport TableFooter from '@material-ui/core/TableFooter';\nimport TablePagination from '@material-ui/core/TablePagination';\nimport SearchBar from \"material-ui-search-bar\";\nimport { Loader } from '../components/Loader'\nimport { get, isEmpty } from 'lodash'\n\nexport const DataTable = (props) => {\n\n const { actions=()=>{}, fetch=[], stateKey='instruments', searchKey='prefix', headers=[], rowRenderer=()=>{}, parentStateKey } = props;\n let values = useSelector(state => state[stateKey]);\n if(parentStateKey){\n values = get(values, parentStateKey, {})\n }\n\n const [page, setPage] = React.useState(0);\n const [rowsPerPage, setRowsPerPage] = React.useState(20);\n const [search, setSearch] = useState(\"\");\n const [filteredValues, setFilteredValues] = useState([]);\n const [dataLoaded, setDataLoaded] = useState(false);\n\n useEffect(() => {\n setFilteredValues(\n Object.values(values).filter((value) => {\n return value[searchKey] && value[searchKey].toLowerCase().includes(search.toLowerCase())\n }).sort((el)=> el.id).reverse()\n );\n }, [search, values]);\n\n const rows: RowsProp = filteredValues;\n\n const handleChangePage = (event, newPage) => {\n setPage(newPage);\n };\n\n const handleChangeRowsPerPage = (event) => {\n setRowsPerPage(parseInt(event.target.value, 10));\n setPage(0);\n };\n\n useEffect(() => {\n Promise.all(fetch).then(() => {\n setDataLoaded(true)\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n },[]);\n\n return (\n <>\n {!dataLoaded\n ? <Loader />\n : (\n <>\n <SearchBar\n placeholder={`Search by ${searchKey} (press return to perform search)`}\n onChange={(newValue) =>\n setSearch(newValue)\n }\n onRequestSearch={(newValue) =>\n setSearch(newValue)\n }\n onCancelSearch={() => {\n setSearch('')\n }}\n />\n <Divider style={{ margin: 16 }} variant=\"middle\" />\n <Table size=\"small\">\n <TableHead>\n <TableRow>\n {headers.map((header)=>(\n <TableCell>{header}</TableCell>\n ))}\n { !isEmpty(actions({})) && (\n <TableCell>Actions</TableCell>\n )}\n </TableRow>\n </TableHead>\n <TableBody>\n {rows.slice(page * rowsPerPage, page * rowsPerPage + rowsPerPage).map((row) => (\n <TableRow key={row.id}>\n {rowRenderer(row).map((cell)=>(\n <TableCell>{cell}</TableCell>\n ))}\n <TableCell>\n {actions(row)}\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n <TableFooter>\n <TableRow>\n <TablePagination\n rowsPerPageOptions={[20, 50, 100, { label: 'All', value: -1 }]}\n colSpan={3}\n count={rows.length}\n rowsPerPage={rowsPerPage}\n page={page}\n onChangePage={handleChangePage}\n onChangeRowsPerPage={handleChangeRowsPerPage}\n SelectProps={{\n inputProps: { 'aria-label': 'rows per page' },\n native: true,\n }}\n />\n </TableRow>\n </TableFooter>\n </Table>\n </>\n )}\n </>\n );\n}\n\nexport default DataTable;\n","export const FileToBase64 = (file) => {\n return new Promise(resolve => {\n var reader = new FileReader();\n // Read file content on file loaded event\n reader.onload = function(event) {\n resolve(event.target.result);\n };\n\n // Convert data to base64\n reader.readAsDataURL(file);\n });\n};\n","import React, { useEffect, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux'\nimport { Dashboard } from '../components/Dashboard'\nimport { AdminImportMappingsForm } from '../components/AdminImportMappingsForm'\nimport { DataTable } from '../components/DataTable'\nimport { Loader } from '../components/Loader'\nimport { AdminImportMapping } from '../actions'\nimport { get } from 'lodash';\nimport Divider from '@material-ui/core/Divider';\nimport { FileToBase64 } from '../support/FileToBase64'\nimport ButtonGroup from '@material-ui/core/ButtonGroup';\nimport Button from '@material-ui/core/Button';\nimport { Link } from 'react-router-dom';\nimport { reverse as url } from 'named-urls'\nimport routes from '../routes'\n\nconst AdminInstrumentImportMappings = (props) => {\n const dispatch = useDispatch()\n const type = \"Instrument\"\n const hint = \"You can import multiple Q-V and T-Q mapping files. Only TXT files are accepted.\"\n const instrumentId = get(props, \"match.params.instrumentId\", \"\")\n\n const onSubmit = (values) => {\n dispatch({type: 'CLEAR', payload: {id: 'new', type: 'AdminImportMapping'}})\n\n let imports = []\n\n Promise.all(\n [...values.files].map((imp, index) => { return FileToBase64(imp)})\n ).then((base64_files) => {\n base64_files.map((file, index) => {\n imports.push({ file: file.split(',')[1], type: values.types[index]})\n })\n dispatch(AdminImportMapping.create('instruments', instrumentId, imports))\n });\n }\n\n const actions = (row) => {\n return (\n <ButtonGroup variant=\"outlined\">\n <Button>\n <Link to={url(routes.admin.instruments.importMapping, { instrumentId: row.instrument_id, id: row.id })}>\n View logs\n </Link>\n </Button>\n </ButtonGroup>\n )\n }\n\n const headers = [\"ID\", \"File\", \"Type\",\"State\",\"Created At\"]\n const rowRenderer = (row) => {\n return [row.id, row.filename, row.import_type, row.state, row.created_at]\n }\n\n return (\n <div style={{ height: 500, width: '100%' }}>\n <Dashboard title={'Instruments Import Mappings'}>\n <AdminImportMappingsForm type={type} hint={hint} onSubmit={onSubmit} typeOptions={ [{value: 'qvmapping', label: 'Q-V Mapping'}, {value: 'topicq', label: 'T-Q Mapping'}] } />\n <Divider style={{ margin: 16 }} variant=\"middle\" />\n <DataTable actions={actions}\n fetch={[dispatch(AdminImportMapping.all('instruments',instrumentId))]}\n stateKey={'instrumentImportMappings'}\n parentStateKey={instrumentId}\n searchKey={'state'}\n headers={headers}\n rowRenderer={rowRenderer}\n />\n </Dashboard>\n </div>\n );\n}\n\nexport default AdminInstrumentImportMappings;\n","import React, { useEffect } from 'react';\nimport { useDispatch, useSelector } from 'react-redux'\nimport { AdminImportMapping } from '../actions'\nimport { Dashboard } from '../components/Dashboard'\nimport Table from '@material-ui/core/Table';\nimport TableBody from '@material-ui/core/TableBody';\nimport TableCell from '@material-ui/core/TableCell';\nimport TableHead from '@material-ui/core/TableHead';\nimport TableRow from '@material-ui/core/TableRow';\nimport Card from '@material-ui/core/Card';\nimport CardHeader from '@material-ui/core/CardHeader';\nimport CardContent from '@material-ui/core/CardContent';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { get, isNil } from 'lodash'\n\nconst useStyles = makeStyles((theme) => ({\n error: {\n backgroundColor: '#f2dede'\n }\n}));\n\nconst AdminInstrumentImportMappingView = (props) => {\n\n const dispatch = useDispatch()\n const instrumentId = get(props, \"match.params.instrumentId\", \"\")\n const importMappingId = get(props, \"match.params.id\", \"\")\n const imports = useSelector(state => get(state.instrumentImportMappings, instrumentId));\n const importObj = get(imports, importMappingId, { logs: [] })\n const logs = get(importObj, 'logs', [])\n const rows: RowsProp = Object.values(logs);\n const classes = useStyles();\n\n useEffect(() => {\n dispatch(AdminImportMapping.show('instruments', instrumentId, importMappingId));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n },[]);\n\n return (\n <div style={{ height: 500, width: '100%' }}>\n <Dashboard title={'InstrumentImports'}>\n <ul>\n <li>Filename : {importObj.filename}</li>\n <li>State : {importObj.state}</li>\n <li>Created At : {importObj.created_at}</li>\n </ul>\n <Table size=\"small\">\n <TableHead>\n <TableRow>\n <TableCell>Input</TableCell>\n <TableCell>Matches</TableCell>\n <TableCell>Outcome</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {rows.map((row) => (\n <TableRow key={row.id} style={ isNil(row.error) ? {} : { background : '#f2dede' } }>\n <TableCell>{row.original_text}</TableCell>\n <TableCell>{row.matches}</TableCell>\n <TableCell>{row.outcome}</TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </Dashboard>\n </div>\n );\n}\n\nexport default AdminInstrumentImportMappingView;\n","import React, { useEffect, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux'\nimport { Dashboard } from '../components/Dashboard'\nimport { AdminImportMappingsForm } from '../components/AdminImportMappingsForm'\nimport { DataTable } from '../components/DataTable'\nimport { Loader } from '../components/Loader'\nimport { AdminImportMapping } from '../actions'\nimport { get } from 'lodash';\nimport Divider from '@material-ui/core/Divider';\nimport { FileToBase64 } from '../support/FileToBase64'\nimport ButtonGroup from '@material-ui/core/ButtonGroup';\nimport Button from '@material-ui/core/Button';\nimport { Link } from 'react-router-dom';\nimport { reverse as url } from 'named-urls'\nimport routes from '../routes'\n\nconst AdminDatasetImportMappings = (props) => {\n const dispatch = useDispatch()\n const type = \"Dataset\"\n const hint = \"You can import multiple T-V and DV mapping files. Only TXT files are accepted.\"\n const datasetId = get(props, \"match.params.datasetId\", \"\")\n\n const onSubmit = (values) => {\n dispatch({type: 'CLEAR', payload: {id: 'new', type: 'AdminImportMapping'}})\n\n let imports = []\n\n Promise.all(\n [...values.files].map((imp, index) => { return FileToBase64(imp)})\n ).then((base64_files) => {\n base64_files.map((file, index) => {\n imports.push({ file: file.split(',')[1], type: values.types[index]})\n })\n dispatch(AdminImportMapping.create('datasets', datasetId, imports))\n });\n }\n\n const actions = (row) => {\n return (\n <ButtonGroup variant=\"outlined\">\n <Button>\n <Link to={url(routes.admin.datasets.importMapping, { datasetId: row.dataset_id, id: row.id })}>\n View logs\n </Link>\n </Button>\n </ButtonGroup>\n )\n }\n\n const headers = [\"ID\", \"File\", \"Type\",\"State\",\"Created At\"]\n const rowRenderer = (row) => {\n return [row.id, row.file, row.import_type, row.state, row.created_at]\n }\n\n return (\n <div style={{ height: 500, width: '100%' }}>\n <Dashboard title={'Instruments Import Mappings'}>\n <AdminImportMappingsForm type={type} hint={hint} onSubmit={onSubmit} typeOptions={ [{value: 'topicv', label: 'T-V Mapping'}, {value: 'dv', label: 'DV Mapping'}] } />\n <Divider style={{ margin: 16 }} variant=\"middle\" />\n <DataTable actions={actions}\n fetch={[dispatch(AdminImportMapping.all('datasets',datasetId))]}\n stateKey={'datasetImportMappings'}\n parentStateKey={datasetId}\n searchKey={'filename'}\n headers={headers}\n rowRenderer={rowRenderer}\n />\n </Dashboard>\n </div>\n );\n }\n\n export default AdminDatasetImportMappings;\n","import React, { useEffect } from 'react';\nimport { useDispatch, useSelector } from 'react-redux'\nimport { AdminImportMapping } from '../actions'\nimport { Dashboard } from '../components/Dashboard'\nimport Table from '@material-ui/core/Table';\nimport TableBody from '@material-ui/core/TableBody';\nimport TableCell from '@material-ui/core/TableCell';\nimport TableHead from '@material-ui/core/TableHead';\nimport TableRow from '@material-ui/core/TableRow';\nimport Card from '@material-ui/core/Card';\nimport CardHeader from '@material-ui/core/CardHeader';\nimport CardContent from '@material-ui/core/CardContent';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { get, isNil } from 'lodash'\n\nconst useStyles = makeStyles((theme) => ({\n error: {\n backgroundColor: '#f2dede'\n }\n}));\n\nconst AdminDatasetImportMappingView = (props) => {\n\n const dispatch = useDispatch()\n const datasetId = get(props, \"match.params.datasetId\", \"\")\n const importMappingId = get(props, \"match.params.id\", \"\")\n const imports = useSelector(state => get(state.datasetImportMappings, datasetId));\n const importObj = get(imports, importMappingId, { logs: [] })\n const logs = get(importObj, 'logs', [])\n const rows: RowsProp = Object.values(logs);\n const classes = useStyles();\n\n useEffect(() => {\n dispatch(AdminImportMapping.show('datasets', datasetId, importMappingId));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n },[]);\n\n return (\n <div style={{ height: 500, width: '100%' }}>\n <Dashboard title={'DatasetImports'}>\n <ul>\n <li>Filename : {importObj.filename}</li>\n <li>State : {importObj.state}</li>\n <li>Created At : {importObj.created_at}</li>\n </ul>\n <Table size=\"small\">\n <TableHead>\n <TableRow>\n <TableCell>Input</TableCell>\n <TableCell>Matches</TableCell>\n <TableCell>Outcome</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {rows.map((row) => (\n <TableRow key={row.id} style={ isNil(row.error) ? {} : { background : '#f2dede' } }>\n <TableCell>{row.original_text}</TableCell>\n <TableCell>{row.matches}</TableCell>\n <TableCell>{row.outcome}</TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </Dashboard>\n </div>\n );\n}\n\nexport default AdminDatasetImportMappingView;\n","import React, { useEffect, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux'\nimport { Instrument } from '../actions'\nimport { Dashboard } from '../components/Dashboard'\nimport ButtonGroup from '@material-ui/core/ButtonGroup';\nimport Button from '@material-ui/core/Button';\nimport { Link } from 'react-router-dom';\nimport { reverse as url } from 'named-urls'\nimport routes from '../routes'\nimport { DataTable } from '../components/DataTable'\nimport AddCircleOutlineIcon from '@material-ui/icons/AddCircleOutline';\n\nconst AdminInstruments = () => {\n\n const dispatch = useDispatch()\n\n const actions = (row) => {\n return (\n <>\n <ButtonGroup variant=\"outlined\">\n <Button>\n <Link to={url(routes.instruments.instrument.edit, { instrument_id: row.prefix })}>Edit</Link>\n </Button>\n <Button>\n <Link to={url(routes.admin.instruments.importMappings, { instrumentId: row.id })}>\n Import Mappings\n </Link>\n </Button>\n <Button>\n <Link to={url(routes.admin.instruments.importMappings, { instrumentId: row.id })}>\n View Imports\n </Link>\n </Button>\n <Button>\n Clear Cache\n </Button>\n <Button>\n Delete\n </Button>\n </ButtonGroup>\n </>\n )\n }\n\n const headers = [\"ID\", \"Prefix\", \"Study\"]\n const rowRenderer = (row) => {\n return [row.id, row.prefix, row.study]\n }\n return (\n <div style={{ height: 500, width: '100%' }}>\n <Dashboard title={'Admin Instruments'}>\n <Button variant=\"contained\" color=\"primary\">\n <Link to={url(routes.instruments.new)}><AddCircleOutlineIcon /> Add new Instrument</Link>\n </Button>\n <DataTable actions={actions}\n fetch={[dispatch(Instrument.all())]}\n stateKey={'instruments'}\n searchKey={'prefix'}\n headers={headers}\n rowRenderer={rowRenderer}\n />\n </Dashboard>\n </div>\n );\n}\n\nexport default AdminInstruments;\n","import React, { useEffect, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux'\nimport { Instrument } from '../actions'\nimport { Dashboard } from '../components/Dashboard'\nimport ButtonGroup from '@material-ui/core/ButtonGroup';\nimport Button from '@material-ui/core/Button';\nimport { Link } from 'react-router-dom';\nimport { reverse as url } from 'named-urls'\nimport routes from '../routes'\nimport { DataTable } from '../components/DataTable'\nimport AddCircleOutlineIcon from '@material-ui/icons/AddCircleOutline';\nimport { isNil } from 'lodash'\nimport Snackbar from '@material-ui/core/Snackbar';\nimport MuiAlert from '@material-ui/lab/Alert';\n\nfunction Alert(props) {\n return <MuiAlert elevation={6} variant=\"filled\" {...props} />;\n}\n\nconst AdminInstrumentExports = () => {\n\n const dispatch = useDispatch()\n const [message, setMessage] = useState()\n\n const handleClick = (id)=>{\n dispatch(Instrument.export(id))\n setMessage('Creating new export')\n }\n\n const handleClose = (event, reason) => {\n if (reason === 'clickaway') {\n return;\n }\n setMessage(undefined);\n };\n\n const actions = (row) => {\n return (\n <>\n <ButtonGroup variant=\"outlined\">\n {!isNil(row.export_url) && (\n <Button>\n <a target={'_blank'} href={process.env.REACT_APP_API_HOST + row.export_url}>Download export</a>\n </Button>\n )}\n <Button>\n <Link onClick={()=>{handleClick(row.id)}}>Create new export</Link>\n </Button>\n </ButtonGroup>\n </>\n )\n }\n\n const headers = [\"ID\", \"Prefix\", \"Study\", \"Export date\"]\n const rowRenderer = (row) => {\n return [row.id, row.prefix, row.study, row.export_time]\n }\n return (\n <div style={{ height: 500, width: '100%' }}>\n <Dashboard title={'Admin Instrument Exports'}>\n <Snackbar anchorOrigin={{ vertical: 'top', horizontal: 'center'}} open={!isNil(message)} autoHideDuration={6000} onClose={handleClose}>\n <Alert onClose={handleClose}>\n {message}\n </Alert>\n </Snackbar>\n <DataTable actions={actions}\n fetch={[dispatch(Instrument.all())]}\n stateKey={'instruments'}\n searchKey={'prefix'}\n headers={headers}\n rowRenderer={rowRenderer}\n />\n </Dashboard>\n </div>\n );\n}\n\nexport default AdminInstrumentExports;\n","import React, { useEffect, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux'\nimport { Dataset } from '../actions'\nimport { Dashboard } from '../components/Dashboard'\nimport ButtonGroup from '@material-ui/core/ButtonGroup';\nimport Button from '@material-ui/core/Button';\nimport { Link } from 'react-router-dom';\nimport { reverse as url } from 'named-urls'\nimport routes from '../routes'\nimport { DataTable } from '../components/DataTable'\n\nconst AdminDatasets = () => {\n\n const dispatch = useDispatch()\n\n const actions = (row) => {\n return (\n <ButtonGroup variant=\"outlined\">\n <Button>\n Edit\n </Button>\n <Button>\n <Link to={url(routes.admin.datasets.importMappings, { datasetId: row.id })}>\n Import Mappings\n </Link>\n </Button>\n <Button>\n DV\n </Button>\n <Button>\n Topics\n </Button>\n <Button>\n <Link to={url(routes.admin.datasets.importMappings, { datasetId: row.id })}>\n View Imports\n </Link>\n </Button>\n <Button>\n Delete\n </Button>\n </ButtonGroup>\n )\n }\n\n const headers = [\"ID\", \"Name\", \"Study\"]\n const rowRenderer = (row) => {\n return [row.id, row.name, row.study]\n }\n return (\n <div style={{ height: 500, width: '100%' }}>\n <Dashboard title={'Admin Datasets'}>\n <DataTable actions={actions}\n fetch={[dispatch(Dataset.all())]}\n stateKey={'datasets'}\n searchKey={'name'}\n headers={headers}\n rowRenderer={rowRenderer}\n />\n </Dashboard>\n </div>\n );\n}\n\nexport default AdminDatasets;\n","import React, { useEffect, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux'\nimport { Instrument } from '../actions'\nimport { Dashboard } from '../components/Dashboard'\nimport Button from '@material-ui/core/Button';\nimport ButtonGroup from '@material-ui/core/ButtonGroup';\nimport { Link } from 'react-router-dom';\nimport { reverse as url } from 'named-urls'\nimport routes from '../routes'\nimport { DataTable } from '../components/DataTable'\n\nconst Instruments = () => {\n\n const dispatch = useDispatch()\n\n const actions = (row) => {\n return (\n <>\n <ButtonGroup variant=\"outlined\">\n <Button>\n <Link to={url(routes.instruments.instrument.edit, { instrument_id: row.prefix })}>Edit</Link>\n </Button>\n <Button>\n <Link to={url(routes.instruments.instrument.show, { instrument_id: row.prefix })}>View</Link>\n </Button>\n <Button>\n <Link to={url(routes.instruments.instrument.build.show, { instrument_id: row.prefix })}>Build</Link>\n </Button>\n <Button>\n <Link to={url(routes.instruments.instrument.map.show, { instrument_id: row.prefix })}>Map</Link>\n </Button>\n </ButtonGroup>\n </>\n )\n }\n\n const headers = [\"ID\", \"Prefix\", \"Control Contructs\", \"Q-V Mappings\", \"Study\"]\n const rowRenderer = (row) => {\n return [row.id, row.prefix, row.ccs, row.qvs, row.study]\n }\n return (\n <div style={{ height: 500, width: '100%' }}>\n <Dashboard title={'Instruments'}>\n <DataTable actions={actions}\n fetch={[dispatch(Instrument.all())]}\n stateKey={'instruments'}\n searchKey={'prefix'}\n headers={headers}\n rowRenderer={rowRenderer}\n />\n </Dashboard>\n </div>\n );\n}\n\nexport default Instruments;\n","import React, { useEffect, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux'\nimport { Dataset } from '../actions'\nimport { Dashboard } from '../components/Dashboard'\nimport Button from '@material-ui/core/Button';\nimport { Link } from 'react-router-dom';\nimport { reverse as url } from 'named-urls'\nimport routes from '../routes'\nimport { DataTable } from '../components/DataTable'\n\nconst Datasets = () => {\n\n const dispatch = useDispatch()\n\n const actions = (row) => {\n return (\n <>\n <Button variant=\"outlined\">\n <Link to={url('/datasets/:dataset_id', { dataset_id: row.id })}>View</Link>\n </Button>\n </>\n )\n }\n\n const headers = [\"ID\", \"Name\", \"Variables\", \"Q-V Mappings\", \"DV Mappings\", \"Study\"]\n const rowRenderer = (row) => {\n return [row.id, row.name, row.variables, row.qvs, row.dvs, row.study]\n }\n return (\n <div style={{ height: 500, width: '100%' }}>\n <Dashboard title={'Datasets'}>\n <DataTable actions={actions}\n fetch={[dispatch(Dataset.all())]}\n stateKey={'datasets'}\n searchKey={'name'}\n headers={headers}\n rowRenderer={rowRenderer}\n />\n </Dashboard>\n </div>\n );\n}\n\nexport default Datasets;\n","import React, { useEffect, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux'\nimport { Dataset, DatasetVariable, Topics } from '../actions'\nimport { Dashboard } from '../components/Dashboard'\nimport { Loader } from '../components/Loader'\nimport Table from '@material-ui/core/Table';\nimport TableBody from '@material-ui/core/TableBody';\nimport TableCell from '@material-ui/core/TableCell';\nimport TableHead from '@material-ui/core/TableHead';\nimport TableRow from '@material-ui/core/TableRow';\nimport TableFooter from '@material-ui/core/TableFooter';\nimport TablePagination from '@material-ui/core/TablePagination';\nimport Button from '@material-ui/core/Button';\nimport Autocomplete from '@material-ui/lab/Autocomplete';\nimport TextField from '@material-ui/core/TextField';\nimport { Link } from 'react-router-dom';\nimport { reverse as url } from 'named-urls'\nimport routes from '../routes'\nimport { get, isEmpty, isNil } from 'lodash'\nimport { makeStyles } from '@material-ui/core/styles';\nimport FormControl from '@material-ui/core/FormControl';\nimport InputLabel from '@material-ui/core/InputLabel';\nimport Select from '@material-ui/core/Select';\nimport { Alert, AlertTitle } from '@material-ui/lab';\nimport SearchBar from \"material-ui-search-bar\";\n\nconst TopicList = (props) => {\n const {topicId, datasetId, variableId} = props\n\n const dispatch = useDispatch()\n\n const topics = useSelector(state => state.topics);\n\n const classes = makeStyles((theme) => ({\n root: {\n flexGrow: 1,\n },\n paper: {\n padding: theme.spacing(2),\n textAlign: 'center',\n color: theme.palette.text.secondary,\n },\n }));\n\n const handleChange = (event, value, reason) => {\n dispatch(DatasetVariable.topic.set(datasetId, variableId, event.target.value));\n }\n\n if(isEmpty(topics)){\n return 'Fetching topics'\n }else if(isNil(topicId)){\n return (\n <div>\n <FormControl className={classes.formControl}>\n <InputLabel htmlFor=\"grouped-native-select\">Topic</InputLabel>\n <Select native id=\"grouped-native-select\" onChange={handleChange}>\n <option aria-label=\"None\" value=\"\" />\n {Object.values(topics).map((topic) => (\n <option key={topic.id} value={topic.id}>{(topic.level === 1) ? topic.name : '--' + topic.name }</option>\n ))}\n </Select>\n </FormControl>\n </div>\n )\n }else{\n return (\n <div>\n <FormControl className={classes.formControl}>\n <InputLabel htmlFor=\"grouped-native-select\">Topic</InputLabel>\n <Select native defaultValue={topicId} id=\"grouped-native-select\" onChange={handleChange}>\n <option aria-label=\"None\" value=\"\" />\n {Object.values(topics).map((topic) => (\n <option key={topic.id} value={topic.id}>{(topic.level === 1) ? topic.name : '--' + topic.name }</option>\n ))}\n </Select>\n </FormControl>\n </div>\n )\n }\n}\n\nconst DatasetView = (props) => {\n\n const dispatch = useDispatch()\n const datasetId = get(props, \"match.params.dataset_id\", \"\")\n\n const statuses = useSelector(state => state.statuses);\n const dataset = useSelector(state => get(state.datasets, datasetId));\n const variables = useSelector(state => get(state.datasetVariables, datasetId,{}));\n const [page, setPage] = React.useState(0);\n const [rowsPerPage, setRowsPerPage] = React.useState(20);\n const [search, setSearch] = useState(\"\");\n const [filteredValues, setFilteredValues] = useState([]);\n\n useEffect(() => {\n setFilteredValues(\n Object.values(variables).filter((value) => {\n const nameMatch = value['name'] && value['name'].toLowerCase().includes(search.toLowerCase())\n const labelMatch = value['label'] && value['label'].toLowerCase().includes(search.toLowerCase())\n const topic = get(value,'topic', {name: ''})\n const topicMatch = topic['name'] && topic['name'].toLowerCase().includes(search.toLowerCase())\n const sources = get(value,'sources', [])\n const sourcesStr = sources.map((s)=>{ return s['label'] }).join(' ')\n const sourcesMatch = sourcesStr && sourcesStr.toLowerCase().includes(search.toLowerCase())\n return nameMatch || labelMatch || topicMatch || sourcesMatch\n }).sort((el)=> el.id).reverse()\n );\n }, [search, variables]);\n\n const rows: RowsProp = filteredValues;\n\n const handleChangePage = (event, newPage) => {\n setPage(newPage);\n };\n\n const handleChangeRowsPerPage = (event) => {\n setRowsPerPage(parseInt(event.target.value, 10));\n setPage(0);\n };\n\n const [dataLoaded, setDataLoaded] = useState(false);\n\n useEffect(() => {\n Promise.all([\n dispatch(Dataset.show(datasetId)),\n dispatch(DatasetVariable.all(datasetId)),\n dispatch(Topics.all())\n ]).then(() => {\n setDataLoaded(true)\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n },[]);\n\n const SourcesList = (props) => {\n const { sources, datasetId, variable } = props\n\n let { sourceOptions } = props\n sourceOptions = sourceOptions.filter(opt => get(opt.topic, 'id') == get(variable.topic, 'id'))\n const variableId = variable.id\n const dispatch = useDispatch()\n\n const handleAddSource = (newSources) => {\n dispatch(DatasetVariable.add_source(datasetId, variableId, newSources));\n }\n\n const handleRemoveSource = (oldSources) => {\n oldSources.map((source)=>{\n dispatch(DatasetVariable.remove_source(datasetId, variableId, source));\n })\n }\n\n var difference = []\n\n const handleChange = (event, value, reason) => {\n switch (reason) {\n case 'select-option':\n difference = value.filter(x => !sources.includes(x));\n if(!isEmpty(difference)){\n return handleAddSource(difference.map((source) => { return source.label }))\n };\n break;\n case 'remove-option':\n difference = sources.filter(x => !value.includes(x));\n if(!isEmpty(difference)){\n return handleRemoveSource(difference)\n };\n break;\n default:\n return null;\n }\n }\n\n if(isEmpty(sources)){\n return (\n <div>\n <Autocomplete\n multiple\n id=\"tags-outlined\"\n options={Object.values(sourceOptions)}\n getOptionLabel={(option) => option.label}\n onChange={handleChange}\n value={[]}\n filterSelectedOptions\n renderInput={(params) => (\n <TextField\n {...params}\n variant=\"outlined\"\n label=\"Sources\"\n placeholder=\"Add source\"\n multiline\n />\n )}\n />\n </div>\n )\n }else{\n return (\n <div>\n <Autocomplete\n multiple\n id=\"tags-outlined\"\n options={Object.values(sourceOptions)}\n getOptionLabel={(option) => option.label || option.name }\n onChange={handleChange}\n value={sources}\n getOptionSelected= {(option, value) => (\n option.id === value.id\n )}\n filterSelectedOptions\n renderInput={(params) => (\n <TextField\n {...params}\n variant=\"outlined\"\n label=\"Sources\"\n placeholder=\"Add source\"\n />\n )}\n />\n </div>\n )\n }\n }\n\n return (\n <div style={{ height: 500, width: '100%' }}>\n <Dashboard title={'Datasets'}>\n {!dataLoaded\n ? <Loader />\n : (\n <>\n <SearchBar\n placeholder={`Search by name, label, source or topic (press return to perform search)`}\n onRequestSearch={(newValue) =>\n setSearch(newValue)\n }\n onCancelSearch={() => {\n setSearch('')\n }}\n />\n <Table size=\"small\">\n <TableHead>\n <TableRow>\n <TableCell>ID</TableCell>\n <TableCell>Name</TableCell>\n <TableCell>Label</TableCell>\n <TableCell>Type</TableCell>\n <TableCell>Used by</TableCell>\n <TableCell>Sources</TableCell>\n <TableCell>Topic</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {rows.slice(page * rowsPerPage, page * rowsPerPage + rowsPerPage).map((row) => {\n const key = 'DatasetVariable:' + row.id\n const status = get(statuses, key, {})\n\n var errorMessage = null;\n\n if(status.error){\n errorMessage = status.errorMessage\n }else if(row.errors){\n errorMessage = row.errors\n }\n\n return (\n <>\n { !isEmpty(errorMessage) && (\n <TableRow>\n <TableCell colSpan={7} style={{ border: '0'}}>\n <Alert severity=\"error\">\n <AlertTitle>Error</AlertTitle>\n {errorMessage}\n </Alert>\n </TableCell>\n </TableRow>\n )}\n <TableRow key={row.id}>\n <TableCell>{row.id}</TableCell>\n <TableCell>{row.name}</TableCell>\n <TableCell>{row.label}</TableCell>\n <TableCell>{row.var_type}</TableCell>\n <TableCell></TableCell>\n <TableCell><SourcesList sources={row.sources} sourceOptions={get(dataset,'questions',[])} datasetId={datasetId} variable={row} /></TableCell>\n <TableCell>\n <TopicList topicId={get(row.topic, 'id')} datasetId={datasetId} variableId={row.id} />\n {!isNil(row.sources_topic) && (\n <em>Resolved topic from sources - { get(row.sources_topic,'name') }</em>\n )}\n </TableCell>\n </TableRow>\n </>\n )\n })}\n </TableBody>\n <TableFooter>\n <TableRow>\n <TablePagination\n rowsPerPageOptions={[20, 50, 100, { label: 'All', value: -1 }]}\n colSpan={3}\n count={rows.length}\n rowsPerPage={rowsPerPage}\n page={page}\n onChangePage={handleChangePage}\n onChangeRowsPerPage={handleChangeRowsPerPage}\n SelectProps={{\n inputProps: { 'aria-label': 'rows per page' },\n native: true,\n }}\n />\n </TableRow>\n </TableFooter>\n </Table>\n </>\n )}\n </Dashboard>\n </div>\n );\n}\n\nexport default DatasetView;\n","import React from 'react';\nimport { get } from \"lodash\";\nimport { Link } from 'react-router-dom';\nimport { reverse as url } from 'named-urls'\nimport routes from '../routes'\nimport Button from '@material-ui/core/Button';\n\nexport const InstrumentHeading = ({instrument, mode='view'}) => {\n return (\n <h1>\n {get(instrument, 'label')}\n { instrument && (\n <>\n { mode !== 'view' && (\n <Button variant=\"outlined\">\n <Link to={url(routes.instruments.instrument.show, { instrument_id: instrument.slug })}>View</Link>\n </Button>\n )}\n { mode !== 'build' && (\n <Button variant=\"outlined\">\n <Link to={url(routes.instruments.instrument.build.show, { instrument_id: instrument.slug })}>Build</Link>\n </Button>\n )}\n { mode !== 'map' && (\n <Button variant=\"outlined\">\n <Link to={url(routes.instruments.instrument.map.show, { instrument_id: instrument.slug })}>Map</Link>\n </Button>\n )}\n </>\n )}\n </h1>\n )\n}\n","import React, { useEffect, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux'\nimport { Instrument, CcConditions, CcLoops, CcSequences, CcStatements, CcQuestions, QuestionItems, QuestionGrids, Variables, Topics } from '../actions'\nimport { Dashboard } from '../components/Dashboard'\nimport { InstrumentHeading } from '../components/InstrumentHeading'\nimport { Loader } from '../components/Loader'\nimport { get, isEmpty, isNil } from \"lodash\";\n\nimport { makeStyles, withStyles } from '@material-ui/core/styles';\nimport List from '@material-ui/core/List';\nimport ListItem from '@material-ui/core/ListItem';\nimport ListItemText from '@material-ui/core/ListItemText';\nimport Collapse from '@material-ui/core/Collapse';\nimport ExpandLess from '@material-ui/icons/ExpandLess';\nimport ExpandMore from '@material-ui/icons/ExpandMore';\nimport Chip from '@material-ui/core/Chip';\nimport BounceLoader from \"react-spinners/BounceLoader\";\nimport { Box, Grid, Typography } from '@material-ui/core'\nimport { ObjectColour } from '../support/ObjectColour'\nimport TextFieldsIcon from '@material-ui/icons/TextFields';\nimport CheckCircleOutlineIcon from '@material-ui/icons/CheckCircleOutline';\nimport TodayIcon from '@material-ui/icons/Today';\nimport Filter1Icon from '@material-ui/icons/Filter1';\nimport Table from '@material-ui/core/Table';\nimport TableBody from '@material-ui/core/TableBody';\nimport TableCell from '@material-ui/core/TableCell';\nimport TableHead from '@material-ui/core/TableHead';\nimport TableRow from '@material-ui/core/TableRow';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n width: '100%'\n },\n control: {\n width: '100%',\n padding: theme.spacing(2),\n },\n nested: {\n paddingLeft: theme.spacing(4),\n }\n}));\n\nconst ObjectFinder = (instrumentId, type, id) => {\n const sequences = useSelector(state => state.cc_sequences);\n const cc_sequences = get(sequences, instrumentId, {})\n const statements = useSelector(state => state.cc_statements);\n const cc_statements = get(statements, instrumentId, {})\n const conditions = useSelector(state => state.cc_conditions);\n const cc_conditions = get(conditions, instrumentId, {})\n const questions = useSelector(state => state.cc_questions);\n const cc_questions = get(questions, instrumentId, {})\n const allQuestionItems = useSelector(state => state.questionItems);\n const questionItems = get(allQuestionItems, instrumentId, {})\n const allQuestionGrids = useSelector(state => state.questionGrids);\n const questionGrids = get(allQuestionGrids, instrumentId, {});\n const loops = useSelector(state => state.cc_loops);\n const cc_loops = get(loops, instrumentId, {})\n\n var item = {children: []}\n\n if(type === 'CcSequence'){\n item = get(cc_sequences, id.toString(), {})\n }\n\n if(type === 'CcStatement'){\n item = get(cc_statements, id.toString(), {})\n }\n\n if(type === 'CcCondition'){\n item = get(cc_conditions, id.toString(), {})\n }\n\n if(type === 'CcLoop'){\n item = get(cc_loops, id.toString(), {})\n }\n\n if(type === 'CcQuestion'){\n item = get(cc_questions, id.toString(), {})\n\n if(item.question_type === 'QuestionItem'){\n item.question = get(questionItems, item.question_id.toString(), {})\n }else if(item.question_type === 'QuestionGrid'){\n item.question = get(questionGrids, item.question_id.toString(), {})\n }\n }\n\n return item\n\n}\n\nconst constructLabelClasses = makeStyles((theme) => ({\n CcCondition: {\n background: `#${ObjectColour('condition')}`,\n color: 'white'\n },\n CcStatement: {\n background: `#${ObjectColour('statement')}`,\n color: 'white'\n },\n CcQuestion: {\n background: `#${ObjectColour('question')}`,\n color: 'white'\n }\n}));\n\nconst ConstructLabel = ({item, type}) => {\n const classes = constructLabelClasses();\n\n return (<Chip label={`${item.label}`} className={classes[type]}/>)\n}\n\nconst QuestionItemListItem = (props) => {\n const {item} = props;\n\n if(isNil(item) || isNil(item.question)){\n return ''\n }\n\n return (\n <Grid container spacing={3}>\n <Grid item xs={3} sm={6}>\n <ConstructLabel item={item} type={'CcQuestion'} />\n </Grid>\n\n <Grid item xs={9} sm={6}>\n {item.question.literal}\n {(item.question.rds) && (\n <ResponseDomains rds={item.question.rds} />\n )}\n <VariableItems variables={item.variables} />\n </Grid>\n </Grid>\n )\n}\n\nconst QuestionGridListItem = (props) => {\n const {item} = props;\n\n if(isNil(item) || isNil(item.question)){\n return ''\n }\n\n return (\n <Grid container spacing={3}>\n <Grid item xs={3}>\n <ConstructLabel item={item} type={'CcQuestion'} />\n </Grid>\n\n <Grid item xs={9}>\n {item.question.literal}\n <Table size=\"small\">\n <TableHead>\n <TableRow>\n <TableCell><strong>{item.question.pretty_corner_label}</strong></TableCell>\n {item.question.cols.map((header)=>(\n <TableCell><strong>{header.label}</strong><ResponseDomains rds={[header.rd]} /></TableCell>\n ))}\n </TableRow>\n </TableHead>\n <TableBody>\n {item.question.rows.map((row)=>(\n <TableRow key={row.label}>\n <TableCell><strong>{row.label}</strong></TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n <VariableItems variables={item.variables} />\n </Grid>\n </Grid>\n )\n}\n\nconst QuestionListItem = (props) => {\n const {type, id, instrumentId} = props\n const item = ObjectFinder(instrumentId, type, id)\n\n if(isNil(item.question)){\n return ''\n }\n\n if(item.question_type === 'QuestionGrid'){\n return <QuestionGridListItem item={item} />\n }else{\n return <QuestionItemListItem item={item} />\n }\n}\n\nconst responseDomainClasses = makeStyles((theme) => ({\n root: {\n listStyleType:'none'\n }\n}));\n\nconst VariableItems = ({ variables }) => {\n if(isEmpty(variables)){\n return ''\n }else{\n return (\n <>\n <h3>Variables</h3>\n <ul>\n { variables.map((variable) => {\n return (\n <li>{variable.name}</li>\n )\n })\n }\n </ul>\n </>\n )\n }\n}\n\nconst ResponseDomains = ({ rds }) => {\n const classes = responseDomainClasses();\n return rds.filter((rd) => { return !isNil(rd) }).map((rd) => {\n switch (rd.type) {\n case 'ResponseDomainCode':\n console.log(rd)\n return(<><ul className={classes.root}><ResponseDomainCodes codes={rd.codes} /></ul><span>Min Responses : <strong>{ rd.min_responses }</strong> Max Responses : <strong>{ rd.max_responses }</strong></span></>)\n case 'ResponseDomainText':\n return(<ul className={classes.root}><li><TextFieldsIcon /> {rd.label} ({`${(isNil(rd.maxlen)) ? 'no' : rd.maxlen} maximum length`})</li></ul>)\n case 'ResponseDomainNumeric':\n return(<ul className={classes.root}><li><Filter1Icon /> {rd.label} {rd.params} {rd.subtype}</li></ul>)\n case 'ResponseDomainDatetime':\n return(<ul className={classes.root}><li><TodayIcon /> {rd.label} {rd.params} {rd.subtype}</li></ul>)\n default:\n return '';\n }\n })\n}\n\nconst ResponseDomainCodes = ({ codes }) => {\n return codes.map((code) => {\n return(<li><CheckCircleOutlineIcon /> <em>{code.value} </em> = {code.label}</li>)\n })\n}\n\nconst StatementListItem = (props) => {\n const {type, id, instrumentId} = props\n const item = ObjectFinder(instrumentId, type, id)\n\n return (\n <Grid container spacing={3}>\n <Grid item xs={3}>\n <ConstructLabel item={item} type={type} />\n </Grid>\n\n <Grid item xs={9}>\n {item.literal}\n </Grid>\n </Grid>\n )\n}\n\nconst ConditionChildren = (props) => {\n const {children, instrumentId, title} = props\n const classes = useStyles();\n const [open, setOpen] = React.useState(true);\n\n const handleClick = () => {\n setOpen(!open);\n };\n\n return (\n <List\n component=\"nav\"\n aria-labelledby=\"nested-list-subheader\"\n className={classes.root}\n >\n <ListItem>\n <Grid container spacing={3}>\n <Grid item xs={12}>\n <ListItemText primary={title} />\n </Grid>\n </Grid>\n {open ? <ExpandLess onClick={handleClick}/> : <ExpandMore onClick={handleClick}/>}\n </ListItem>\n {!isEmpty(children) && (\n <Collapse in={open} timeout=\"auto\" unmountOnExit>\n <List component=\"div\" disablePadding>\n {children.map((child) => (\n <StyledListItem className={classes.nested}>\n {(function() {\n switch (child.type) {\n case 'CcSequence':\n return <SequenceItem instrumentId={instrumentId} id={child.id} type={child.type} title={child.type} children={get(child,'children',[])} />;\n case 'CcQuestion':\n return <QuestionListItem instrumentId={instrumentId} id={child.id} type={child.type} />\n case 'CcCondition':\n return <ConditionItem instrumentId={instrumentId} id={child.id} type={child.type} />\n case 'CcStatement':\n return <StatementListItem instrumentId={instrumentId} id={child.id} type={child.type} />\n default:\n return null;\n }\n })()}\n </StyledListItem>\n ))}\n </List>\n </Collapse>\n )}\n </List>\n );\n}\n\nconst ConditionItem = (props) => {\n const {type, id, instrumentId, title} = props\n const classes = useStyles();\n const [open, setOpen] = React.useState(true);\n\n const handleClick = () => {\n setOpen(!open);\n };\n\n var item = ObjectFinder(instrumentId, type, id)\n\n return (\n <List\n component=\"nav\"\n aria-labelledby=\"nested-list-subheader\"\n className={classes.root}\n >\n <ListItem>\n <Grid container spacing={3}>\n <Grid item xs={3}>\n <ConstructLabel item={item} type={type} />\n </Grid>\n\n <Grid item xs={9}>\n <ListItemText primary={get(item, 'literal', title)} secondary={item.logic} />\n </Grid>\n </Grid>\n {open ? <ExpandLess onClick={handleClick}/> : <ExpandMore onClick={handleClick}/>}\n </ListItem>\n <ConditionChildren instrumentId={instrumentId} title={'True'} children={item.children} />\n <ConditionChildren instrumentId={instrumentId} title={'Else'} children={item.fchildren} />\n </List>\n );\n}\n\nconst LoopItem = (props) => {\n const {type, id, instrumentId, title} = props\n const classes = useStyles();\n const [open, setOpen] = React.useState(true);\n\n const handleClick = () => {\n setOpen(!open);\n };\n\n var item = ObjectFinder(instrumentId, type, id)\n\n return (\n <List\n component=\"nav\"\n aria-labelledby=\"nested-list-subheader\"\n className={classes.root}\n >\n <ListItem>\n <Grid container spacing={3}>\n <Grid item xs={3}>\n <ConstructLabel item={item} type={type} />\n </Grid>\n\n <Grid item xs={9}>\n <Typography variant=\"h6\" component=\"h6\">{item.loop_var} from {item.start_val} while { item.loop_var} <= {item.end_val} {item.loop_while}</Typography>\n </Grid>\n </Grid>\n {open ? <ExpandLess onClick={handleClick}/> : <ExpandMore onClick={handleClick}/>}\n </ListItem>\n {!isEmpty(item.children) && (\n <Collapse in={open} timeout=\"auto\" unmountOnExit>\n <List component=\"div\" disablePadding>\n {item.children.map((child) => (\n (function() {\n switch (child.type) {\n case 'CcSequence':\n return (\n <StyledListItem className={classes.nested}>\n <SequenceItem instrumentId={instrumentId} id={child.id} type={child.type} title={child.type} children={get(child,'children',[])} />\n </StyledListItem>)\n case 'CcQuestion':\n return (\n <StyledListItem className={classes.nested}>\n <QuestionListItem instrumentId={instrumentId} id={child.id} type={child.type} />\n </StyledListItem>)\n case 'CcStatement':\n return (\n <StyledListItem className={classes.nested}>\n <StatementListItem instrumentId={instrumentId} id={child.id} type={child.type} />\n </StyledListItem>)\n case 'CcCondition':\n return (\n <StyledListItem className={classes.nested}>\n <ConditionItem instrumentId={instrumentId} id={child.id} type={child.type} children={get(child,'children',[])} />\n </StyledListItem>)\n case 'CcLoop':\n return (\n <StyledListItem className={classes.nested}>\n <LoopItem instrumentId={instrumentId} id={child.id} type={child.type} />\n </StyledListItem>)\n default:\n return null;\n }\n })()\n ))}\n </List>\n </Collapse>\n )}\n </List>\n );\n}\n\nconst SequenceItem = (props) => {\n const {type, id, instrumentId} = props\n var {title} = props;\n const classes = useStyles();\n const [open, setOpen] = React.useState(true);\n\n const handleClick = () => {\n setOpen(!open);\n };\n\n var item = ObjectFinder(instrumentId, props.type, props.id)\n\n title = get(item, 'label', props.title)\n\n return (\n <List\n className={classes.sequence}\n >\n <ListItem className={classes.sequence}>\n <Typography variant=\"h5\" component=\"h5\">{title}</Typography>\n {open ? <ExpandLess onClick={handleClick} /> : <ExpandMore onClick={handleClick} />}\n </ListItem >\n {!isEmpty(item.children) && (\n <Collapse in={open} timeout=\"auto\" unmountOnExit>\n <List component=\"div\" disablePadding>\n {item.children.map((child) => (\n (function() {\n switch (child.type) {\n case 'CcSequence':\n return (\n <StyledListItem className={classes.nested}>\n <SequenceItem instrumentId={instrumentId} id={child.id} type={child.type} title={child.type} children={get(child,'children',[])} />\n </StyledListItem>)\n case 'CcQuestion':\n return (\n <StyledListItem className={classes.nested}>\n <QuestionListItem instrumentId={instrumentId} id={child.id} type={child.type} />\n </StyledListItem>)\n case 'CcStatement':\n return (\n <StyledListItem className={classes.nested}>\n <StatementListItem instrumentId={instrumentId} id={child.id} type={child.type} />\n </StyledListItem>)\n case 'CcCondition':\n return (\n <StyledListItem className={classes.nested}>\n <ConditionItem instrumentId={instrumentId} id={child.id} type={child.type} children={get(child,'children',[])} />\n </StyledListItem>)\n case 'CcLoop':\n return (\n <StyledListItem className={classes.nested}>\n <LoopItem instrumentId={instrumentId} id={child.id} type={child.type} children={get(child,'children',[])} />\n </StyledListItem>)\n default:\n return null;\n }\n })()\n ))}\n </List>\n </Collapse>\n )}\n </List>\n );\n}\n\nconst InstrumentView = (props) => {\n\n const dispatch = useDispatch()\n const instrumentId = get(props, \"match.params.instrument_id\", \"\")\n const instrument = useSelector(state => get(state.instruments, instrumentId));\n const sequences = useSelector(state => state.cc_sequences);\n const cc_sequences = get(sequences, instrumentId, {})\n const [dataLoaded, setDataLoaded] = useState(false);\n\n useEffect(() => {\n Promise.all([\n dispatch(Instrument.show(instrumentId)),\n dispatch(CcSequences.all(instrumentId)),\n dispatch(CcStatements.all(instrumentId)),\n dispatch(CcConditions.all(instrumentId)),\n dispatch(CcLoops.all(instrumentId)),\n dispatch(CcQuestions.all(instrumentId)),\n dispatch(QuestionItems.all(instrumentId)),\n dispatch(QuestionGrids.all(instrumentId)),\n dispatch(Variables.all(instrumentId)),\n dispatch(Topics.all())\n ]).then(() => {\n setDataLoaded(true)\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n },[]);\n\n const sequence = (isEmpty(cc_sequences)) ? undefined : Object.values(cc_sequences).find(element => element.top == true)\n\n return (\n <div style={{ height: 500, width: '100%' }}>\n <Dashboard title={'View'} instrumentId={instrumentId}>\n <InstrumentHeading instrument={instrument} mode={'view'} />\n {!dataLoaded\n ? <Loader />\n : <SequenceItem instrumentId={instrumentId} type={'CcSequence'} id={sequence.children[0].id} title={sequence.children[0].label} children={sequence.children[0].children}/>\n }\n </Dashboard>\n </div>\n );\n}\n\nconst StyledChip = withStyles({\n root: {\n background: 'linear-gradient(45deg, #00adee 30%, #00adee 90%)',\n borderRadius: 3,\n border: 0,\n color: 'white',\n height: 30,\n 'margin-right': 5,\n padding: '0 30px',\n boxShadow: '0 3px 5px 2px #00adee',\n },\n label: {\n textTransform: '',\n },\n})(Chip);\n\nconst StyledListItem = withStyles({\n root: {\n borderRadius: 5,\n border: '2px solid #00adee',\n backgroundColor: 'rgba(0,173,238, 0.1)',\n 'margin-bottom': '10px'\n },\n label: {\n textTransform: '',\n },\n})(ListItem);\n\nexport default InstrumentView;\n","import { merge, isObject } from 'lodash';\n\nexport const ObjectCheckForInitialValues = (initialValues, values) => {\n // For every field initially provided, we check whether it value has been removed\n // and set it explicitly to an empty string\n if (!initialValues) return values;\n const initialValuesWithEmptyFields = Object.keys(initialValues).reduce(\n (acc, key) => {\n if (values[key] instanceof Date || Array.isArray(values[key])) {\n acc[key] = values[key];\n } else if (\n typeof values[key] === 'object' &&\n values[key] !== null\n ) {\n acc[key] = ObjectCheckForInitialValues(initialValues[key], values[key]);\n } else {\n acc[key] =\n typeof values[key] === 'undefined' ? null : values[key];\n }\n return acc;\n },\n {}\n );\n\n // Finally, we merge back the values to not miss any which wasn't initially provided\n return merge(initialValuesWithEmptyFields, values);\n}\n","import React from 'react';\nimport { isNil } from \"lodash\";\nimport { Form } from 'react-final-form';\nimport { useDispatch } from 'react-redux'\nimport { Instrument } from '../actions'\nimport { ObjectStatusBar, ObjectStatus } from '../components/ObjectStatusBar'\nimport { ObjectCheckForInitialValues } from '../support/ObjectCheckForInitialValues'\nimport { makeStyles } from '@material-ui/core/styles';\nimport { ObjectColour } from '../support/ObjectColour'\n\nimport {\n TextField\n} from 'mui-rff';\nimport {\n Paper,\n Grid,\n Button,\n CssBaseline\n} from '@material-ui/core';\n\n\nconst useStyles = makeStyles({\n table: {\n minWidth: 650,\n },\n paper:{\n boxShadow :`5px 5px 15px 5px #${ObjectColour('statement')}`\n }\n});\n\nconst validate = (values, status) => {\n\n const errors = {};\n\n if(status.errors){\n Object.keys(status.errors).map((key)=>{\n if(isNil(values[key]) || values[key] === ''){\n errors[key] = status.errors[key][0];\n return\n }\n })\n }else{\n if (!values.label) {\n errors.label = 'Required';\n }\n }\n\n return errors;\n};\n\nconst formFields = [\n {\n size: 12,\n field: (\n <TextField\n label=\"Prefix\"\n name=\"prefix\"\n margin=\"none\"\n required={false}\n multiline\n />\n ),\n },\n {\n size: 12,\n field: (\n <TextField\n label=\"Study\"\n name=\"study\"\n margin=\"none\"\n required={false}\n multiline\n />\n ),\n },\n {\n size: 12,\n field: (\n <TextField\n label=\"Instrument Title\"\n name=\"label\"\n margin=\"none\"\n required={false}\n multiline\n />\n ),\n },\n {\n size: 12,\n field: (\n <TextField\n label=\"Agency\"\n name=\"agency\"\n margin=\"none\"\n required={false}\n multiline\n />\n ),\n },\n {\n size: 12,\n field: (\n <TextField\n label=\"Version\"\n name=\"version\"\n margin=\"none\"\n required={false}\n multiline\n />\n ),\n },\n];\n\nexport const InstrumentForm = (props) => {\n const {instrument, onChange, path, onDelete} = props;\n\n const dispatch = useDispatch();\n const classes = useStyles();\n\n const status = ObjectStatus(instrument.id || 'new', 'Instrument')\n\n const onSubmit = (values) => {\n console.log(values)\n values = ObjectCheckForInitialValues(instrument, values)\n console.log(values)\n if(isNil(instrument.id)){\n dispatch(Instrument.create(values))\n }else{\n dispatch(Instrument.update(instrument.id, values))\n }\n }\n\n return (\n <div style={{ padding: 16, margin: 'auto', maxWidth: 1000 }}>\n <ObjectStatusBar id={instrument.id || 'new'} type={'Instrument'} />\n <CssBaseline />\n <Form\n onSubmit={onSubmit}\n initialValues={instrument}\n validate={(values) => validate(values, status)}\n render={({\n handleSubmit,\n form: {\n mutators: { push, pop }\n }, // injected from final-form-arrays above\n pristine,\n form,\n submitting,\n values\n }) => (\n <form onSubmit={handleSubmit} noValidate>\n <Paper style={{ padding: 16 }} className={classes.paper}>\n <Grid container alignItems=\"flex-start\" spacing={2}>\n {formFields.map((item, idx) => (\n <Grid item xs={item.size} key={idx}>\n {item.type && item.type === 'select'\n ? item.field([])\n : item.field\n }\n </Grid>\n ))}\n <Grid item style={{ marginTop: 16 }}>\n <Button\n type=\"button\"\n variant=\"contained\"\n onClick={form.reset}\n disabled={submitting || pristine}\n >\n Reset\n </Button>\n </Grid>\n <Grid item style={{ marginTop: 16 }}>\n <Button\n variant=\"contained\"\n color=\"primary\"\n type=\"submit\"\n disabled={submitting}\n >\n Submit\n </Button>\n </Grid>\n </Grid>\n </Paper>\n </form>\n )}\n />\n </div>\n );\n}\n","import React, { useEffect, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux'\nimport { Instrument } from '../actions'\nimport { Dashboard } from '../components/Dashboard'\nimport Button from '@material-ui/core/Button';\nimport { Link } from 'react-router-dom';\nimport { reverse as url } from 'named-urls'\nimport routes from '../routes'\nimport { InstrumentForm } from '../components/InstrumentForm'\n\nconst InstrumentNew = () => {\n\n const dispatch = useDispatch()\n\n return (\n <div style={{ height: 500, width: '100%' }}>\n <Dashboard title={'Instruments'}>\n <InstrumentForm instrument={{}} />\n </Dashboard>\n </div>\n );\n}\n\nexport default InstrumentNew;\n","import React, { useEffect, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux'\nimport { Instrument } from '../actions'\nimport { Dashboard } from '../components/Dashboard'\nimport Button from '@material-ui/core/Button';\nimport { Link } from 'react-router-dom';\nimport { reverse as url } from 'named-urls'\nimport routes from '../routes'\nimport { InstrumentForm } from '../components/InstrumentForm'\nimport { get } from 'lodash'\n\nconst InstrumentEdit = (props) => {\n\n const dispatch = useDispatch()\n\n const instrumentId = get(props, \"match.params.instrument_id\", \"\")\n const instrument = useSelector(state => get(state.instruments, instrumentId));\n\n return (\n <div style={{ height: 500, width: '100%' }}>\n <Dashboard title={'Edit Instrument'}>\n <InstrumentForm instrument={instrument} />\n </Dashboard>\n </div>\n );\n}\n\nexport default InstrumentEdit;\n","import React, { useEffect, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux'\nimport { Instrument, CcConditions, CcSequences, CcStatements, CcQuestions, QuestionItems, QuestionGrids, Variables, Topics } from '../actions'\nimport { Dashboard } from '../components/Dashboard'\nimport { get, isEmpty, isNil } from \"lodash\";\nimport { InstrumentHeading } from '../components/InstrumentHeading'\nimport Grid from '@material-ui/core/Grid';\nimport Paper from '@material-ui/core/Paper';\n\nimport { makeStyles } from '@material-ui/core/styles';\nimport List from '@material-ui/core/List';\nimport ListItem from '@material-ui/core/ListItem';\nimport ListItemText from '@material-ui/core/ListItemText';\nimport Collapse from '@material-ui/core/Collapse';\nimport DoneIcon from '@material-ui/icons/Done';\nimport ExpandLess from '@material-ui/icons/ExpandLess';\nimport ExpandMore from '@material-ui/icons/ExpandMore';\nimport Chip from '@material-ui/core/Chip';\nimport Autocomplete from '@material-ui/lab/Autocomplete';\nimport TextField from '@material-ui/core/TextField';\nimport FormControl from '@material-ui/core/FormControl';\nimport InputLabel from '@material-ui/core/InputLabel';\nimport Select from '@material-ui/core/Select';\nimport { Alert, AlertTitle } from '@material-ui/lab';\nimport { Loader } from '../components/Loader'\nimport SyncLoader from \"react-spinners/SyncLoader\";\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n width: '100%',\n backgroundColor: theme.palette.background.paper\n },\n control: {\n width: '100%',\n padding: theme.spacing(2),\n },\n nested: {\n paddingLeft: theme.spacing(4),\n },\n}));\n\nconst ObjectStatus = (id, type) => {\n const statuses = useSelector(state => state.statuses);\n const key = type + ':' + id\n return get(statuses, key, {})\n}\n\nconst ObjectFinder = (instrumentId, type, id) => {\n const sequences = useSelector(state => state.cc_sequences);\n const cc_sequences = get(sequences, instrumentId, {})\n const statements = useSelector(state => state.cc_statements);\n const cc_statements = get(statements, instrumentId, {})\n const conditions = useSelector(state => state.cc_conditions);\n const cc_conditions = get(conditions, instrumentId, {})\n const questions = useSelector(state => state.cc_questions);\n const cc_questions = get(questions, instrumentId, {})\n const allQuestionItems = useSelector(state => state.questionItems);\n const questionItems = get(allQuestionItems, instrumentId, {})\n const allQuestionGrids = useSelector(state => state.questionGrids);\n const questionGrids = get(allQuestionGrids, instrumentId, {})\n\n var item = {children: []}\n\n if(type === 'CcSequence'){\n item = get(cc_sequences, id.toString(), {})\n }\n\n if(type === 'CcStatement'){\n item = get(cc_statements, id.toString(), {})\n }\n\n if(type === 'CcCondition'){\n item = get(cc_conditions, id.toString(), {})\n }\n\n if(type === 'CcQuestion'){\n item = get(cc_questions, id.toString(), {})\n\n if(item.question_type === 'QuestionItem'){\n item.question = get(questionItems, item.question_id.toString(), {})\n }else if(item.question_type === 'QuestionGrid'){\n item.question = get(questionGrids, item.question_id.toString(), {})\n }\n }\n\n return item\n\n}\n\nconst QuestionItemListItem = (props) => {\n const {type, id, instrumentId} = props\n const item = ObjectFinder(instrumentId, type, id)\n const classes = useStyles();\n\n const title = (isEmpty(item.question)) ? item.label : item.question.literal\n\n const topic = get(item, 'topic', {id: null})\n const topicId = get(topic, 'id', null)\n\n const resolvedTopic = get(item, 'resolved_topic', {id: null})\n const resolvedTopicId = get(resolvedTopic, 'id', null)\n\n const variableTopic = get(item, 'variable_topic', {id: null})\n const variableTopicId = get(variableTopic, 'id', null)\n\n const status = ObjectStatus(item.id, 'CcQuestion')\n\n var errorMessage = null;\n\n if(status.error){\n errorMessage = status.errorMessage\n }else if(item.errors){\n errorMessage = item.errors\n }\n\n return (\n <ListItem>\n <Paper className={classes.control}>\n <Grid container spacing={3}>\n { !isEmpty(errorMessage) && (\n <div className={classes.root}>\n <Alert severity=\"error\">\n <AlertTitle>Error</AlertTitle>\n {errorMessage}\n </Alert>\n </div>\n )}\n <Grid item xs={9}>\n <ListItemText primary={title} />\n </Grid>\n <Grid item xs={3}>\n <Chip label={item.label} color=\"primary\"></Chip>\n { !isEmpty(status) && !isNil(status.saving) && (\n <Chip label=\"Saving\" color=\"secondary\"> <SyncLoader/></Chip>\n )}\n { !isEmpty(status) && !isNil(status.saved) && (\n <Chip label=\"Saved\" color=\"success\" deleteIcon={<DoneIcon />}></Chip>\n )}\n </Grid>\n <Grid item xs={6}>\n <VariableList variables={item.variables} instrumentId={instrumentId} ccQuestionId={item.id} />\n </Grid>\n <Grid item xs={6}>\n <TopicList topicId={topicId} instrumentId={instrumentId} ccQuestionId={item.id} />\n { (!isNil(variableTopic)) && (\n <em>Resolved topic from variables - { get(variableTopic,'name') }</em>\n )}\n </Grid>\n </Grid>\n </Paper>\n </ListItem>\n )\n}\n\nconst TopicList = (props) => {\n const {topicId, instrumentId, ccQuestionId} = props\n\n const dispatch = useDispatch()\n\n const topics = useSelector(state => state.topics);\n\n const classes = makeStyles((theme) => ({\n root: {\n flexGrow: 1,\n },\n paper: {\n padding: theme.spacing(2),\n textAlign: 'center',\n color: theme.palette.text.secondary,\n },\n }));\n\n const handleChange = (event, value, reason) => {\n dispatch(CcQuestions.topic.set(instrumentId, ccQuestionId, event.target.value));\n }\n\n if(isEmpty(topics)){\n return 'Fetching topics'\n }else if(isNil(topicId)){\n return (\n <div>\n <FormControl className={classes.formControl}>\n <InputLabel htmlFor=\"grouped-native-select\">Topic</InputLabel>\n <Select native id=\"grouped-native-select\" onChange={handleChange}>\n <option aria-label=\"None\" value=\"\" />\n {Object.values(topics).map((topic) => (\n <option key={topic.id} value={topic.id}>{(topic.level === 1) ? topic.name : '--' + topic.name }</option>\n ))}\n </Select>\n </FormControl>\n </div>\n )\n }else{\n return (\n <div>\n <FormControl className={classes.formControl}>\n <InputLabel htmlFor=\"grouped-native-select\">Topic</InputLabel>\n <Select native defaultValue={topicId} id=\"grouped-native-select\" onChange={handleChange}>\n <option aria-label=\"None\" value=\"\" />\n {Object.values(topics).map((topic) => (\n <option key={topic.id} value={topic.id}>{(topic.level === 1) ? topic.name : '--' + topic.name }</option>\n ))}\n </Select>\n </FormControl>\n </div>\n )\n }\n}\n\nconst VariableList = (props) => {\n const {variables, instrumentId, ccQuestionId} = props\n\n const dispatch = useDispatch()\n\n const allVariables = useSelector(state => state.variables);\n const variableOptions = get(allVariables, instrumentId, {})\n\n const handleAddVariable = (newVariables) => {\n dispatch(CcQuestions.variables.add(instrumentId, ccQuestionId, newVariables));\n }\n\n const handleRemoveVariable = (oldVariables) => {\n dispatch(CcQuestions.variables.remove(instrumentId, ccQuestionId, oldVariables));\n }\n\n var difference = []\n\n const handleChange = (event, value, reason) => {\n switch (reason) {\n case 'select-option':\n difference = value.filter(x => !variables.includes(x));\n if(!isEmpty(difference)){\n return handleAddVariable(difference.map((variable) => { return variable.name }).join(','))\n };\n break;\n case 'remove-option':\n difference = variables.filter(x => !value.includes(x));\n if(!isEmpty(difference)){\n return handleRemoveVariable(difference.map((variable) => { return variable.id }).join(','))\n };\n break;\n default:\n return null;\n }\n }\n\n if(isEmpty(variables)){\n return (\n <div>\n <Autocomplete\n multiple\n id=\"tags-outlined\"\n options={Object.values(variableOptions)}\n getOptionLabel={(option) => option.name}\n onChange={handleChange}\n value={[]}\n filterSelectedOptions\n renderInput={(params) => (\n <TextField\n {...params}\n variant=\"outlined\"\n label=\"Variables\"\n placeholder=\"Add variable\"\n />\n )}\n />\n </div>\n )\n }else{\n return (\n <div>\n <Autocomplete\n multiple\n id=\"tags-outlined\"\n options={Object.values(variableOptions)}\n getOptionLabel={(option) => option.name}\n onChange={handleChange}\n value={variables}\n getOptionSelected= {(option, value) => (\n option.id === value.id\n )}\n filterSelectedOptions\n renderInput={(params) => (\n <TextField\n {...params}\n variant=\"outlined\"\n label=\"Variables\"\n placeholder=\"Add variable\"\n />\n )}\n />\n </div>\n )\n }\n}\n\nconst QuestionGridListItem = (props) => {\n\n return (\n <div>This is a Question Grid</div>\n )\n}\n\nconst ConditionItem = (props) => {\n const { instrumentId } = props;\n var {title} = props;\n const classes = useStyles();\n const [open, setOpen] = React.useState(true);\n\n const handleClick = () => {\n setOpen(!open);\n };\n\n var item = ObjectFinder(instrumentId, props.type, props.id)\n\n title = get(item, 'literal', props.title)\n\n return (\n <List\n component=\"nav\"\n aria-labelledby=\"nested-list-subheader\"\n className={classes.root}\n >\n <ListItem button onClick={handleClick}>\n <ListItemText primary={title} />\n {open ? <ExpandLess /> : <ExpandMore />}\n </ListItem>\n {!isEmpty(item.children) && (\n <Collapse in={open} timeout=\"auto\" unmountOnExit>\n <List component=\"div\" disablePadding>\n {item.children.map((child) => (\n <ListItem button className={classes.nested}>\n {(function() {\n switch (child.type) {\n case 'CcSequence':\n return <SequenceItem instrumentId={instrumentId} id={child.id} type={child.type} title={child.type} children={get(child,'children',[])} />;\n case 'CcQuestion':\n return <QuestionItemListItem instrumentId={instrumentId} id={child.id} type={child.type} />\n case 'CcCondition':\n return <ConditionItem instrumentId={instrumentId} id={child.id} type={child.type} />\n default:\n console.log(child)\n return null;\n }\n })()}\n </ListItem>\n ))}\n </List>\n </Collapse>\n )}\n </List>\n );\n}\n\nconst SequenceItem = (props) => {\n const { instrumentId } = props;\n var {title} = props;\n const classes = useStyles();\n const [open, setOpen] = React.useState(true);\n\n const handleClick = () => {\n setOpen(!open);\n };\n\n var item = ObjectFinder(instrumentId, props.type, props.id)\n\n title = get(item, 'label', props.title)\n\n return (\n <Paper className={classes.control}>\n <List\n component=\"nav\"\n aria-labelledby=\"nested-list-subheader\"\n className={classes.root}\n >\n <ListItem button onClick={handleClick}>\n <ListItemText primary={title} />\n {open ? <ExpandLess /> : <ExpandMore />}\n </ListItem>\n {!isEmpty(item.children) && (\n <Collapse in={open} timeout=\"auto\" unmountOnExit>\n <List component=\"div\" disablePadding>\n {item.children.map((child) => (\n (function() {\n switch (child.type) {\n case 'CcSequence':\n return (\n <ListItem button className={classes.nested}>\n <SequenceItem instrumentId={instrumentId} id={child.id} type={child.type} title={child.type} children={get(child,'children',[])} />\n </ListItem>)\n case 'CcQuestion':\n return (\n <ListItem button className={classes.nested}>\n <QuestionItemListItem instrumentId={instrumentId} id={child.id} type={child.type} />\n </ListItem>)\n case 'CcCondition':\n return (\n <ListItem button className={classes.nested}>\n <ConditionItem instrumentId={instrumentId} id={child.id} type={child.type} />\n </ListItem>)\n default:\n return null;\n }\n })()\n ))}\n </List>\n </Collapse>\n )}\n </List>\n </Paper>\n );\n}\n\nconst InstrumentMap = (props) => {\n\n const dispatch = useDispatch()\n const instrumentId = get(props, \"match.params.instrument_id\", \"\")\n const instrument = useSelector(state => get(state.instruments, instrumentId));\n const sequences = useSelector(state => state.cc_sequences);\n const cc_sequences = get(sequences, instrumentId, {})\n\n const [dataLoaded, setDataLoaded] = useState(false);\n\n useEffect(() => {\n Promise.all([\n dispatch(Instrument.show(instrumentId)),\n dispatch(CcSequences.all(instrumentId)),\n dispatch(CcStatements.all(instrumentId)),\n dispatch(CcConditions.all(instrumentId)),\n dispatch(CcQuestions.all(instrumentId)),\n dispatch(QuestionItems.all(instrumentId)),\n dispatch(QuestionGrids.all(instrumentId)),\n dispatch(Variables.all(instrumentId)),\n dispatch(Topics.all())\n ]).then(() => {\n setDataLoaded(true)\n });\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n },[]);\n\n const sequence = (isEmpty(cc_sequences)) ? undefined : Object.values(cc_sequences).find(element => element.top === true)\n\n return (\n <div style={{ height: 500, width: '100%' }}>\n <Dashboard title={'Maps'} instrumentId={instrumentId}>\n <InstrumentHeading instrument={instrument} mode={'map'} />\n {!dataLoaded\n ? <Loader />\n : <SequenceItem instrumentId={instrumentId} type={'CcSequence'} id={sequence.children[0].id} title={sequence.children[0].label} children={sequence.children[0].children}/>\n }\n </Dashboard>\n </div>\n );\n}\n\nexport default InstrumentMap;\n","import React, { useEffect } from 'react';\nimport { useDispatch, useSelector } from 'react-redux'\nimport { Instrument } from '../actions'\nimport { Dashboard } from '../components/Dashboard'\nimport { InstrumentHeading } from '../components/InstrumentHeading'\nimport { get } from \"lodash\";\nimport Grid from '@material-ui/core/Grid';\nimport Paper from '@material-ui/core/Paper';\nimport List from '@material-ui/core/List';\nimport ListItem from '@material-ui/core/ListItem';\nimport ListItemSecondaryAction from '@material-ui/core/ListItemSecondaryAction';\nimport ListItemText from '@material-ui/core/ListItemText';\nimport Chip from '@material-ui/core/Chip';\nimport { Link } from 'react-router-dom';\nimport { reverse as url } from 'named-urls'\nimport routes from '../routes'\n\nimport { makeStyles } from '@material-ui/core/styles';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n width: '100%',\n backgroundColor: theme.palette.background.paper\n },\n control: {\n width: '100%',\n padding: theme.spacing(2),\n }\n}));\n\nconst InstrumentBuild = (props) => {\n\n const dispatch = useDispatch()\n const classes = useStyles();\n\n const instrumentId = get(props, \"match.params.instrument_id\", \"\")\n const instrument = useSelector(state => get(state.instruments, instrumentId));\n const stats = useSelector(state => get(state.instrumentStats, instrumentId, {}));\n\n const instrumentStats = get(stats, 'stats', {})\n const {\n categories=0, code_lists=0, response_domain_datetimes=0,\n response_domain_numerics=0, response_domain_texts=0,\n question_items=0, question_grids=0, instructions=0,\n cc_conditions=0, cc_loops=0, cc_questions=0, cc_sequences=0,\n cc_statements=0\n } = instrumentStats\n\n useEffect(() => {\n dispatch(Instrument.show(instrumentId));\n dispatch(Instrument.stats(instrumentId));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n },[]);\n\n const StatCount = (props) => {\n const {label, value} = props\n return (\n <ListItem>\n <ListItemText\n primary={label}/>\n <ListItemSecondaryAction>\n <Chip label={value} />\n </ListItemSecondaryAction>\n </ListItem>\n )\n }\n\n return (\n <div style={{ height: 500, width: '100%' }}>\n <Dashboard title={instrumentId} instrumentId={instrumentId}>\n <InstrumentHeading instrument={instrument} mode={'build'}/>\n <Grid container spacing={3}>\n <Grid item xs={6}>\n <Paper className={classes.control}>\n <h2><Link to={url(routes.instruments.instrument.build.codeLists.all, { instrument_id: instrumentId })}>Code Lists</Link></h2>\n <List dense={true}>\n <StatCount label=\"Categories\" value={categories} />\n <StatCount label=\"Code Lists\" value={code_lists} />\n </List>\n </Paper>\n </Grid>\n <Grid item xs={6}>\n <Paper className={classes.control}>\n <h2><Link to={url(routes.instruments.instrument.build.responseDomains.all, { instrument_id: instrumentId })}>ResponseDomains</Link></h2>\n <List dense={true}>\n <StatCount label=\"Datetime Answers\" value={response_domain_datetimes} />\n <StatCount label=\"Numberic Answers\" value={response_domain_numerics} />\n <StatCount label=\"Text Answers\" value={response_domain_texts} />\n </List>\n </Paper>\n </Grid>\n <Grid item xs={6}>\n <Paper className={classes.control}>\n <h2><Link to={url(routes.instruments.instrument.build.questionItems.all, { instrument_id: instrumentId })}>Questions</Link></h2>\n <List dense={true}>\n <StatCount label=\"Question Items\" value={question_items} />\n <StatCount label=\"Question Grids\" value={question_grids} />\n <StatCount label=\"Instructions\" value={instructions} />\n </List>\n </Paper>\n </Grid>\n <Grid item xs={6}>\n <Paper className={classes.control}>\n <h2><Link to={url(routes.instruments.instrument.build.constructs.show, { instrument_id: instrumentId })}>Constructs</Link></h2>\n <List dense={true}>\n <Link to={url(routes.instruments.instrument.build.ccConditions, { instrument_id: instrumentId })}>\n <StatCount label=\"Conditions\" value={cc_conditions} />\n </Link>\n <Link to={url(routes.instruments.instrument.build.ccLoops, { instrument_id: instrumentId })}>\n <StatCount label=\"Loops\" value={cc_loops} />\n </Link>\n <Link to={url(routes.instruments.instrument.build.ccQuestions, { instrument_id: instrumentId })}>\n <StatCount label=\"Questions\" value={cc_questions} />\n </Link>\n <Link to={url(routes.instruments.instrument.build.ccSequences, { instrument_id: instrumentId })}>\n <StatCount label=\"Sequences\" value={cc_sequences} />\n </Link>\n <Link to={url(routes.instruments.instrument.build.ccStatements, { instrument_id: instrumentId })}>\n <StatCount label=\"Statements\" value={cc_statements} />\n </Link>\n </List>\n </Paper>\n </Grid>\n </Grid>\n </Dashboard>\n </div>\n );\n}\n\nexport default InstrumentBuild;\n","import React, { useEffect, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux'\nimport { CcConditions } from '../actions'\nimport { Dashboard } from '../components/Dashboard'\nimport Button from '@material-ui/core/Button';\nimport { Link } from 'react-router-dom';\nimport { reverse as url } from 'named-urls'\nimport routes from '../routes'\nimport { DataTable } from '../components/DataTable'\nimport { get } from 'lodash'\n\nconst InstrumentCcConditions = (props) => {\n\n const dispatch = useDispatch()\n const instrumentId = get(props, \"match.params.instrument_id\", \"\")\n\n const actions = (row) => {\n return ''\n }\n\n const headers = [\"ID\", \"Literal\", \"Logic\", \"Label\"]\n const rowRenderer = (row) => {\n return [row.id, row.literal, row.logic, row.label]\n }\n return (\n <div style={{ height: 500, width: '100%' }}>\n <Dashboard title={'CcCondition'}>\n <DataTable actions={actions}\n fetch={[dispatch(CcConditions.all(instrumentId))]}\n stateKey={'cc_conditions'}\n parentStateKey={instrumentId}\n searchKey={'literal'}\n headers={headers}\n rowRenderer={rowRenderer}\n />\n </Dashboard>\n </div>\n );\n}\n\nexport default InstrumentCcConditions;\n","import React, { useEffect, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux'\nimport { CcLoops } from '../actions'\nimport { Dashboard } from '../components/Dashboard'\nimport Button from '@material-ui/core/Button';\nimport { Link } from 'react-router-dom';\nimport { reverse as url } from 'named-urls'\nimport routes from '../routes'\nimport { DataTable } from '../components/DataTable'\nimport { get } from 'lodash'\n\nconst InstrumentCcLoops = (props) => {\n\n const dispatch = useDispatch()\n const instrumentId = get(props, \"match.params.instrument_id\", \"\")\n\n const actions = (row) => {\n return ''\n }\n\n const headers = [\"ID\", \"Label\", \"Start Value\", \"End Value\", \"Loop While\"]\n const rowRenderer = (row) => {\n return [row.id, row.label, row.start_val, row.end_val, row.loop_while]\n }\n return (\n <div style={{ height: 500, width: '100%' }}>\n <Dashboard title={'CcLoops'} instrumentId={instrumentId}>\n <DataTable actions={actions}\n fetch={[dispatch(CcLoops.all(instrumentId))]}\n stateKey={'cc_loops'}\n parentStateKey={instrumentId}\n searchKey={'label'}\n headers={headers}\n rowRenderer={rowRenderer}\n />\n </Dashboard>\n </div>\n );\n}\n\nexport default InstrumentCcLoops;\n","import React, { useEffect, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux'\nimport { CcQuestions } from '../actions'\nimport { Dashboard } from '../components/Dashboard'\nimport Button from '@material-ui/core/Button';\nimport { Link } from 'react-router-dom';\nimport { reverse as url } from 'named-urls'\nimport routes from '../routes'\nimport { DataTable } from '../components/DataTable'\nimport { get } from 'lodash'\n\nconst InstrumentCcQuestions = (props) => {\n\n const dispatch = useDispatch()\n const instrumentId = get(props, \"match.params.instrument_id\", \"\")\n\n const actions = (row) => {\n return ''\n }\n\n const headers = [\"ID\", \"Label\", \"Base Label\", \"Response Unit Label\"]\n const rowRenderer = (row) => {\n return [row.id, row.label, row.base_label, row.response_unit_label]\n }\n return (\n <div style={{ height: 500, width: '100%' }}>\n <Dashboard title={'CcQuestions'} instrumentId={instrumentId}>\n <DataTable actions={actions}\n fetch={[dispatch(CcQuestions.all(instrumentId))]}\n stateKey={'cc_questions'}\n parentStateKey={instrumentId}\n searchKey={'label'}\n headers={headers}\n rowRenderer={rowRenderer}\n />\n </Dashboard>\n </div>\n );\n}\n\nexport default InstrumentCcQuestions;\n","import React, { useEffect, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux'\nimport { CcSequences } from '../actions'\nimport { Dashboard } from '../components/Dashboard'\nimport Button from '@material-ui/core/Button';\nimport { Link } from 'react-router-dom';\nimport { reverse as url } from 'named-urls'\nimport routes from '../routes'\nimport { DataTable } from '../components/DataTable'\nimport { get } from 'lodash'\n\nconst InstrumentCcSequences = (props) => {\n\n const dispatch = useDispatch()\n const instrumentId = get(props, \"match.params.instrument_id\", \"\")\n\n const actions = (row) => {\n return ''\n }\n\n const headers = [\"ID\", \"Literal\", \"Label\"]\n const rowRenderer = (row) => {\n return [row.id, row.literal, row.label]\n }\n return (\n <div style={{ height: 500, width: '100%' }}>\n <Dashboard title={'CcSequences'} instrumentId={instrumentId}>\n <DataTable actions={actions}\n fetch={[dispatch(CcSequences.all(instrumentId))]}\n stateKey={'cc_sequences'}\n parentStateKey={instrumentId}\n searchKey={'label'}\n headers={headers}\n rowRenderer={rowRenderer}\n />\n </Dashboard>\n </div>\n );\n}\n\nexport default InstrumentCcSequences;\n","import React, { useEffect, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux'\nimport { CcStatements } from '../actions'\nimport { Dashboard } from '../components/Dashboard'\nimport Button from '@material-ui/core/Button';\nimport { Link } from 'react-router-dom';\nimport { reverse as url } from 'named-urls'\nimport routes from '../routes'\nimport { DataTable } from '../components/DataTable'\nimport { get } from 'lodash'\n\nconst InstrumentCcStatements = (props) => {\n\n const dispatch = useDispatch()\n const instrumentId = get(props, \"match.params.instrument_id\", \"\")\n\n const actions = (row) => {\n return ''\n }\n\n const headers = [\"ID\", \"Literal\", \"Label\"]\n const rowRenderer = (row) => {\n return [row.id, row.literal, row.label]\n }\n return (\n <div style={{ height: 500, width: '100%' }}>\n <Dashboard title={'CcStatements'} instrumentId={instrumentId}>\n <DataTable actions={actions}\n fetch={[dispatch(CcStatements.all(instrumentId))]}\n stateKey={'cc_statements'}\n parentStateKey={instrumentId}\n searchKey={'label'}\n headers={headers}\n rowRenderer={rowRenderer}\n />\n </Dashboard>\n </div>\n );\n}\n\nexport default InstrumentCcStatements;\n","/* eslint-disable no-use-before-define */\nimport React, { useState, useEffect } from 'react';\nimport { useSelector } from 'react-redux'\nimport TextField from '@material-ui/core/TextField';\nimport Autocomplete from '@material-ui/lab/Autocomplete';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { get, isNil } from \"lodash\";\nimport SortableTree, { addNodeUnderParent, removeNodeAtPath, getFlatDataFromTree, isDescendant } from 'react-sortable-tree';\n\nconst useStyles = makeStyles({\n option: {\n fontSize: 15,\n '& > span': {\n marginRight: 10,\n fontSize: 18,\n },\n },\n});\n\nexport const MoveConstructSelect = ({treeData, onChange=()=>{}}) => {\n const classes = useStyles();\n\n const getNodeKey= ({ node }) => {\n // For conditions the id will be nil so we use the title\n return (isNil(node.id)) ? node.title : node.id\n }\n\n const flatTree = getFlatDataFromTree({\n treeData: treeData,\n getNodeKey,\n ignoreCollapsed: false, // Makes sure you traverse every node in the tree, not just the visible ones\n })\n\n const [nodeToMove, setNodeToMove] = useState()\n const [parentNode, setParentNode] = useState()\n\n const moveNode = () => {\n var node = nodeToMove.node\n\n onChange(addNodeUnderParent({\n treeData: removeNodeAtPath({\n treeData: treeData,\n path: nodeToMove.path,\n getNodeKey\n }),\n parentKey: parentNode.path[parentNode.path.length - 1],\n expandParent: true,\n getNodeKey,\n newNode: node\n }).treeData)\n\n setNodeToMove(undefined)\n setParentNode(undefined)\n }\n\n useEffect(() => {\n if(!isNil(nodeToMove) && !isNil(parentNode)){\n moveNode()\n }\n },[parentNode])\n\n const onNodeChange = (event, values) => {\n setNodeToMove(values)\n }\n\n const onParentNodeChange = (event, values) => {\n setParentNode(values)\n }\n\n const canMove = (node) => {\n return node !== flatTree[0].node && !['conditionTrue', 'conditionFalse'].includes(node.type)\n }\n\n const canHaveChildren = (node) => {\n return (node.type === 'sequence' || node.type === 'loop' || node.type === 'conditionTrue' || node.type === 'conditionFalse') && !isDescendant(nodeToMove.node, node)\n }\n\n return (\n <>\n <Autocomplete\n id=\"country-select-demo\"\n options={flatTree.filter((el) => canMove(el.node))}\n onChange={onNodeChange}\n classes={{\n option: classes.option,\n }}\n autoHighlight\n getOptionLabel={(option) => option.node.title}\n renderOption={(option) => (\n <React.Fragment>\n {option.node.title}\n </React.Fragment>\n )}\n renderInput={(params) => (\n <TextField\n {...params}\n label=\"Construct to move\"\n variant=\"outlined\"\n inputProps={{\n ...params.inputProps,\n autoComplete: 'new-password', // disable autocomplete and autofill\n }}\n />\n )}\n />\n { !isNil(nodeToMove) && (\n <Autocomplete\n id=\"country-select-demo\"\n options={flatTree.filter((el) => canHaveChildren(el.node))}\n onChange={onParentNodeChange}\n classes={{\n option: classes.option,\n }}\n autoHighlight\n getOptionLabel={(option) => option.node.title}\n renderOption={(option) => (\n <React.Fragment>\n {option.node.title}\n </React.Fragment>\n )}\n renderInput={(params) => (\n <TextField\n {...params}\n label=\"Move to parent construct\"\n variant=\"outlined\"\n inputProps={{\n ...params.inputProps,\n autoComplete: 'new-password', // disable autocomplete and autofill\n }}\n />\n )}\n />\n ) }\n </>\n );\n}\n","import React from 'react'\nimport {isNil} from 'lodash'\nimport { useDispatch } from 'react-redux'\n\nimport {\n Grid,\n Button\n} from '@material-ui/core';\n\nexport const DeleteObjectButton = (props) => {\n const {instrumentId, id, action, onDelete= () => { console.log('No delete callback provided') }} = props;\n\n const dispatch=useDispatch()\n\n const handleDelete = () => {\n if( !isNil(id) && window.confirm('Are you sure you want to delete this?')){\n dispatch(action.delete(instrumentId, id, onDelete))\n }\n }\n\n if(isNil(id)){\n return ''\n }\n\n return (\n <Grid item style={{ marginTop: 16 }}>\n <Button\n variant=\"contained\"\n color=\"secondary\"\n onClick={()=>{handleDelete()}}\n >\n Delete\n </Button>\n </Grid>\n )\n}\n","import React from 'react';\nimport { get, isNil } from \"lodash\";\nimport { Form } from 'react-final-form';\nimport { useDispatch, useSelector } from 'react-redux'\nimport { CcConditions } from '../actions'\nimport { ObjectStatusBar, ObjectStatus } from '../components/ObjectStatusBar'\nimport { DeleteObjectButton } from '../components/DeleteObjectButton'\nimport { ObjectCheckForInitialValues } from '../support/ObjectCheckForInitialValues'\nimport arrayMutators from 'final-form-arrays'\nimport { FieldArray } from 'react-final-form-arrays'\nimport { makeStyles } from '@material-ui/core/styles';\nimport { ObjectColour } from '../support/ObjectColour'\n\nimport {\n TextField,\n Select\n} from 'mui-rff';\nimport {\n Paper,\n Grid,\n Button,\n CssBaseline,\n MenuItem\n} from '@material-ui/core';\n\n\nconst useStyles = makeStyles({\n table: {\n minWidth: 650,\n },\n paper:{\n boxShadow :`5px 5px 15px 5px #${ObjectColour('condition')}`\n }\n});\n\nconst validate = (values, status) => {\n\n const errors = {};\n\n if(status.errors){\n Object.keys(status.errors).map((key)=>{\n if(isNil(values[key]) || values[key] == ''){\n errors[key] = status.errors[key][0];\n }\n })\n }else{\n if (!values.label) {\n errors.label = 'Required';\n }\n }\n\n return errors;\n};\n\nconst formFields = [\n {\n size: 12,\n field: (\n <TextField\n label=\"Label\"\n name=\"label\"\n margin=\"none\"\n required={true}\n multiline\n />\n ),\n },\n {\n size: 12,\n field: (\n <TextField\n label=\"Literal\"\n name=\"literal\"\n margin=\"none\"\n required={true}\n multiline\n />\n ),\n },\n {\n size: 12,\n field: (\n <TextField\n label=\"Logic\"\n name=\"logic\"\n margin=\"none\"\n required={true}\n multiline\n />\n ),\n },\n];\n\nexport const CcConditionForm = (props) => {\n const {ccCondition, instrumentId, onChange, path, onDelete, onCreate} = props;\n\n const dispatch = useDispatch();\n const classes = useStyles();\n\n const status = ObjectStatus(ccCondition.id || 'new', 'CcCondition')\n\n const onSubmit = (values) => {\n values = ObjectCheckForInitialValues(ccCondition, values)\n\n if(isNil(ccCondition.id)){\n dispatch(CcConditions.create(instrumentId, values, (newObject) => {\n onChange({node: { ...values, ...newObject }, path: path})\n onCreate()\n }))\n }else{\n dispatch(CcConditions.update(instrumentId, ccCondition.id, values))\n onChange({node: values, path: path})\n }\n }\n\n return (\n <div style={{ padding: 16, margin: 'auto', maxWidth: 1000 }}>\n <ObjectStatusBar id={ccCondition.id || 'new'} type={'CcCondition'} />\n <CssBaseline />\n <Form\n onSubmit={onSubmit}\n initialValues={ccCondition}\n validate={(values) => validate(values, status)}\n mutators={{\n ...arrayMutators\n }}\n render={({\n handleSubmit,\n form: {\n mutators: { push, pop }\n }, // injected from final-form-arrays above\n pristine,\n form,\n submitting,\n values\n }) => (\n <form onSubmit={handleSubmit} noValidate>\n <Paper style={{ padding: 16 }} className={classes.paper}>\n <Grid container alignItems=\"flex-start\" spacing={2}>\n {formFields.map((item, idx) => (\n <Grid item xs={item.size} key={idx}>\n {item.type && item.type === 'select'\n ? item.field([])\n : item.field\n }\n </Grid>\n ))}\n <Grid item style={{ marginTop: 16 }}>\n <Button\n type=\"button\"\n variant=\"contained\"\n onClick={form.reset}\n disabled={submitting || pristine}\n >\n Reset\n </Button>\n </Grid>\n <Grid item style={{ marginTop: 16 }}>\n <Button\n variant=\"contained\"\n color=\"primary\"\n type=\"submit\"\n disabled={submitting}\n >\n Submit\n </Button>\n </Grid>\n <DeleteObjectButton id={values.id} instrumentId={instrumentId} action={CcConditions} onDelete={()=> { onDelete({ path }) }}/>\n </Grid>\n </Paper>\n </form>\n )}\n />\n </div>\n );\n}\n","import React, { useState } from 'react';\nimport { get, isNil, difference } from \"lodash\";\nimport { Form } from 'react-final-form';\nimport { useDispatch, useSelector } from 'react-redux'\nimport { CcQuestions } from '../actions'\nimport { ObjectStatusBar, ObjectStatus } from '../components/ObjectStatusBar'\nimport { DeleteObjectButton } from '../components/DeleteObjectButton'\nimport { ObjectCheckForInitialValues } from '../support/ObjectCheckForInitialValues'\nimport arrayMutators from 'final-form-arrays'\nimport { OnChange } from 'react-final-form-listeners'\nimport { makeStyles } from '@material-ui/core/styles';\nimport { ObjectColour } from '../support/ObjectColour'\n\nimport {\n TextField,\n Select\n} from 'mui-rff';\nimport {\n Paper,\n Grid,\n Button,\n CssBaseline,\n MenuItem\n} from '@material-ui/core';\n\n\nconst useStyles = makeStyles({\n table: {\n minWidth: 650,\n },\n paper:{\n boxShadow :`5px 5px 15px 5px #${ObjectColour('question')}`\n }\n});\n\nconst validate = (values, status) => {\n\n const errors = {};\n\n if(status.errors){\n Object.keys(status.errors).map((error_key)=>{\n var key = (['response_unit', 'question'].includes(error_key)) ? `${error_key}_id` : error_key\n if(isNil(values[key]) || values[key] == ''){\n return errors[key] = status.errors[error_key][0];\n }\n })\n }else{\n if (!values.label) {\n errors.label = 'Required';\n }\n }\n\n return errors;\n};\n\nconst formFields = [\n {\n size: 12,\n field: (\n <TextField\n label=\"Label\"\n name=\"label\"\n margin=\"none\"\n required={true}\n multiline\n />\n ),\n },\n {\n type: 'select',\n size: 12,\n field: (options) => (\n <Select\n name=\"question_type\"\n label=\"Type\"\n formControlProps={{ margin: 'none' }}\n >\n <MenuItem></MenuItem>\n <MenuItem value='QuestionItem'>Item</MenuItem>\n <MenuItem value='QuestionGrid'>Grid</MenuItem>\n </Select>\n )\n }\n];\n\nexport const CcQuestionForm = (props) => {\n const {ccQuestion, instrumentId, onChange, path, onDelete, onCreate} = props;\n\n const questions = useSelector(state => state.cc_questions);\n const cc_questions = get(questions, instrumentId, {})\n const allQuestionItems = useSelector(state => state.questionItems);\n const questionItems = get(allQuestionItems, instrumentId, {})\n const allQuestionGrids = useSelector(state => state.questionGrids);\n const questionGrids = get(allQuestionGrids, instrumentId, {})\n\n const allResponseUnits = useSelector(state => state.response_units);\n const responseUnits = get(allResponseUnits, instrumentId, {})\n\n const [questionOptions, setQuestionOptions] = useState((ccQuestion.question_type === 'QuestionGrid') ? questionGrids : questionItems);\n\n const changeQuestionOptions = (question_type) => {\n setQuestionOptions((question_type === 'QuestionGrid') ? questionGrids : questionItems)\n }\n\n const dispatch = useDispatch();\n const classes = useStyles();\n\n const status = ObjectStatus(ccQuestion.id || 'new', 'CcQuestion')\n\n const onSubmit = (values) => {\n values = ObjectCheckForInitialValues(ccQuestion, values)\n\n if(isNil(ccQuestion.id)){\n dispatch(CcQuestions.create(instrumentId, values, (newObject) => {\n onChange({node: { ...values, ...newObject }, path: path})\n onCreate()\n }))\n }else{\n dispatch(CcQuestions.update(instrumentId, ccQuestion.id, values))\n onChange({node: values, path: path})\n }\n }\n\n const intervieweeOptions = () => {\n const allOptions = ['Cohort/sample member','Main parent of cohort/sample member','Partner of main parent/Father','Child of cohort/panel member','Proxy','Interviewer','Other']\n const rdOptions = Object.values(responseUnits).map(item => {return item.label})\n return difference(allOptions, rdOptions);\n }\n\n return (\n <div style={{ padding: 16, margin: 'auto', maxWidth: 1000 }}>\n <ObjectStatusBar id={ccQuestion.id || 'new'} type={'CcQuestion'} />\n <CssBaseline />\n <Form\n onSubmit={onSubmit}\n initialValues={ccQuestion}\n validate={(values) => validate(values, status)}\n mutators={{\n ...arrayMutators\n }}\n render={({\n handleSubmit,\n form: {\n mutators: { push, pop }\n }, // injected from final-form-arrays above\n pristine,\n form,\n submitting,\n values\n }) => (\n <form onSubmit={handleSubmit} noValidate>\n <Paper style={{ padding: 16 }} className={classes.paper}>\n <Grid container alignItems=\"flex-start\" spacing={2}>\n {formFields.map((item, idx) => (\n <Grid item xs={item.size} key={idx}>\n {item.type && item.type === 'select'\n ? item.field([])\n : item.field\n }\n </Grid>\n ))}\n <OnChange name=\"question_type\">\n {(value, previous) => {\n changeQuestionOptions(value)\n values.question_id = null\n }}\n </OnChange>\n <Grid item xs=\"12\" key=\"question\">\n <Select\n name=\"question_id\"\n label=\"Question\"\n formControlProps={{ margin: 'none' }}\n >\n <MenuItem></MenuItem>\n {Object.values(questionOptions).map((item, idx) => (\n <MenuItem value={item.id}>{item.label}</MenuItem>\n ))}\n </Select>\n </Grid>\n <Grid item xs=\"12\" key=\"response_unit_id\">\n <Select\n name=\"response_unit_id\"\n label=\"Interviewee\"\n formControlProps={{ margin: 'none' }}\n >\n <MenuItem></MenuItem>\n {Object.values(responseUnits).map((item, idx) => (\n <MenuItem value={item.id}>{item.label}</MenuItem>\n ))}\n {intervieweeOptions().map((item) => (\n <MenuItem value={item}>{item}</MenuItem>\n ))}\n </Select>\n </Grid>\n <Grid item style={{ marginTop: 16 }}>\n <Button\n type=\"button\"\n variant=\"contained\"\n onClick={form.reset}\n disabled={submitting || pristine}\n >\n Reset\n </Button>\n </Grid>\n <Grid item style={{ marginTop: 16 }}>\n <Button\n variant=\"contained\"\n color=\"primary\"\n type=\"submit\"\n disabled={submitting}\n >\n Submit\n </Button>\n </Grid>\n <DeleteObjectButton id={values.id} instrumentId={instrumentId} action={CcQuestions} onDelete={()=> { onDelete({ path }) }} />\n </Grid>\n </Paper>\n </form>\n )}\n />\n </div>\n );\n}\n","import React from 'react';\nimport { isNil } from \"lodash\";\nimport { Form } from 'react-final-form';\nimport { useDispatch } from 'react-redux'\nimport { CcStatements } from '../actions'\nimport { ObjectStatusBar, ObjectStatus } from '../components/ObjectStatusBar'\nimport { DeleteObjectButton } from '../components/DeleteObjectButton'\nimport { ObjectCheckForInitialValues } from '../support/ObjectCheckForInitialValues'\nimport arrayMutators from 'final-form-arrays'\nimport { makeStyles } from '@material-ui/core/styles';\nimport { ObjectColour } from '../support/ObjectColour'\n\nimport {\n TextField\n} from 'mui-rff';\nimport {\n Paper,\n Grid,\n Button,\n CssBaseline\n} from '@material-ui/core';\n\n\nconst useStyles = makeStyles({\n table: {\n minWidth: 650,\n },\n paper:{\n boxShadow :`5px 5px 15px 5px #${ObjectColour('statement')}`\n }\n});\n\nconst validate = (values, status) => {\n\n const errors = {};\n\n if(status.errors){\n Object.keys(status.errors).map((key)=>{\n if(isNil(values[key]) || values[key] === ''){\n errors[key] = status.errors[key][0];\n return\n }\n })\n }else{\n if (!values.label) {\n errors.label = 'Required';\n }\n }\n\n return errors;\n};\n\nconst formFields = [\n {\n size: 12,\n field: (\n <TextField\n label=\"Label\"\n name=\"label\"\n margin=\"none\"\n required={false}\n multiline\n />\n ),\n },\n {\n size: 12,\n field: (\n <TextField\n label=\"Literal\"\n name=\"literal\"\n margin=\"none\"\n required={false}\n multiline\n />\n ),\n },\n];\n\nexport const CcStatementForm = (props) => {\n const {ccStatement, instrumentId, onChange, path, onDelete, onCreate} = props;\n\n const dispatch = useDispatch();\n const classes = useStyles();\n\n const status = ObjectStatus(ccStatement.id || 'new', 'CcStatement')\n\n const onSubmit = (values) => {\n values = ObjectCheckForInitialValues(ccStatement, values)\n\n if(isNil(ccStatement.id)){\n dispatch(CcStatements.create(instrumentId, values, (newObject) => {\n onChange({node: { ...values, ...newObject }, path: path})\n onCreate()\n }))\n }else{\n dispatch(CcStatements.update(instrumentId, ccStatement.id, values))\n onChange({node: values, path: path})\n }\n }\n\n return (\n <div style={{ padding: 16, margin: 'auto', maxWidth: 1000 }}>\n <ObjectStatusBar id={ccStatement.id || 'new'} type={'CcStatement'} />\n <CssBaseline />\n <Form\n onSubmit={onSubmit}\n initialValues={ccStatement}\n validate={(values) => validate(values, status)}\n mutators={{\n ...arrayMutators\n }}\n render={({\n handleSubmit,\n form: {\n mutators: { push, pop }\n }, // injected from final-form-arrays above\n pristine,\n form,\n submitting,\n values\n }) => (\n <form onSubmit={handleSubmit} noValidate>\n <Paper style={{ padding: 16 }} className={classes.paper}>\n <Grid container alignItems=\"flex-start\" spacing={2}>\n {formFields.map((item, idx) => (\n <Grid item xs={item.size} key={idx}>\n {item.type && item.type === 'select'\n ? item.field([])\n : item.field\n }\n </Grid>\n ))}\n <Grid item style={{ marginTop: 16 }}>\n <Button\n type=\"button\"\n variant=\"contained\"\n onClick={form.reset}\n disabled={submitting || pristine}\n >\n Reset\n </Button>\n </Grid>\n <Grid item style={{ marginTop: 16 }}>\n <Button\n variant=\"contained\"\n color=\"primary\"\n type=\"submit\"\n disabled={submitting}\n >\n Submit\n </Button>\n </Grid>\n <DeleteObjectButton id={values.id} instrumentId={instrumentId} action={CcStatements} onDelete={()=> { onDelete({ path }) }} />\n </Grid>\n </Paper>\n </form>\n )}\n />\n </div>\n );\n}\n","import React from 'react';\nimport { get, isNil } from \"lodash\";\nimport { Form } from 'react-final-form';\nimport { useDispatch, useSelector } from 'react-redux'\nimport { CcSequences } from '../actions'\nimport { ObjectStatusBar, ObjectStatus } from '../components/ObjectStatusBar'\nimport { DeleteObjectButton } from '../components/DeleteObjectButton'\nimport { ObjectCheckForInitialValues } from '../support/ObjectCheckForInitialValues'\nimport arrayMutators from 'final-form-arrays'\nimport { FieldArray } from 'react-final-form-arrays'\nimport { makeStyles } from '@material-ui/core/styles';\nimport { ObjectColour } from '../support/ObjectColour'\n\nimport {\n TextField,\n Select\n} from 'mui-rff';\nimport {\n Paper,\n Grid,\n Button,\n CssBaseline,\n MenuItem\n} from '@material-ui/core';\n\n\nconst useStyles = makeStyles({\n table: {\n minWidth: 650,\n },\n paper:{\n boxShadow :`5px 5px 15px 5px #${ObjectColour('sequence')}`\n }\n});\n\nconst validate = (values, status) => {\n\n const errors = {};\n\n if(status.errors){\n Object.keys(status.errors).map((key)=>{\n if(isNil(values[key]) || values[key] == ''){\n errors[key] = status.errors[key][0];\n }\n })\n }else{\n if (!values.label) {\n errors.label = 'Required';\n }\n }\n\n return errors;\n};\n\nconst formFields = [\n {\n size: 12,\n field: (\n <TextField\n label=\"Label\"\n name=\"label\"\n margin=\"none\"\n required={true}\n multiline\n />\n ),\n },\n];\n\nexport const CcSequenceForm = (props) => {\n const {ccSequence, instrumentId, onChange, path, onDelete, onCreate} = props;\n\n const dispatch = useDispatch();\n const classes = useStyles();\n\n const status = ObjectStatus(ccSequence.id || 'new', 'CcSequence')\n\n const onSubmit = (values) => {\n values = ObjectCheckForInitialValues(ccSequence, values)\n\n if(isNil(ccSequence.id)){\n dispatch(CcSequences.create(instrumentId, values, (newObject) => {\n onChange({node: { ...values, ...newObject }, path: path})\n onCreate()\n }))\n }else{\n dispatch(CcSequences.update(instrumentId, ccSequence.id, values))\n onChange({node: values, path: path})\n }\n }\n\n return (\n <div style={{ padding: 16, margin: 'auto', maxWidth: 1000 }}>\n <ObjectStatusBar id={ccSequence.id || 'new'} type={'CcSequence'} />\n <CssBaseline />\n <Form\n onSubmit={onSubmit}\n initialValues={ccSequence}\n validate={(values) => validate(values, status)}\n mutators={{\n ...arrayMutators\n }}\n render={({\n handleSubmit,\n form: {\n mutators: { push, pop }\n }, // injected from final-form-arrays above\n pristine,\n form,\n submitting,\n values\n }) => (\n <form onSubmit={handleSubmit} noValidate>\n <Paper style={{ padding: 16 }} className={classes.paper}>\n <Grid container alignItems=\"flex-start\" spacing={2}>\n {formFields.map((item, idx) => (\n <Grid item xs={item.size} key={idx}>\n {item.type && item.type === 'select'\n ? item.field([])\n : item.field\n }\n </Grid>\n ))}\n <Grid item style={{ marginTop: 16 }}>\n <Button\n variant=\"contained\"\n color=\"primary\"\n type=\"submit\"\n disabled={submitting}\n >\n Submit\n </Button>\n </Grid>\n <DeleteObjectButton id={values.id} instrumentId={instrumentId} action={CcSequences} onDelete={()=> { onDelete({ path }) }} />\n </Grid>\n </Paper>\n </form>\n )}\n />\n </div>\n );\n}\n","import React from 'react';\nimport { get, isNil } from \"lodash\";\nimport { Form } from 'react-final-form';\nimport { useDispatch, useSelector } from 'react-redux'\nimport { CcLoops } from '../actions'\nimport { ObjectStatusBar, ObjectStatus } from '../components/ObjectStatusBar'\nimport { DeleteObjectButton } from '../components/DeleteObjectButton'\nimport { ObjectCheckForInitialValues } from '../support/ObjectCheckForInitialValues'\nimport arrayMutators from 'final-form-arrays'\nimport { FieldArray } from 'react-final-form-arrays'\nimport { makeStyles } from '@material-ui/core/styles';\nimport { ObjectColour } from '../support/ObjectColour'\n\nimport {\n TextField,\n Select\n} from 'mui-rff';\nimport {\n Paper,\n Grid,\n Button,\n CssBaseline,\n MenuItem\n} from '@material-ui/core';\n\n\nconst useStyles = makeStyles({\n table: {\n minWidth: 650,\n },\n paper:{\n boxShadow :`5px 5px 15px 5px #${ObjectColour('loop')}`\n }\n});\n\nconst validate = (values, status) => {\n\n const errors = {};\n\n if(status.errors){\n Object.keys(status.errors).map((key)=>{\n if(isNil(values[key]) || values[key] == ''){\n errors[key] = status.errors[key][0];\n }\n })\n }else{\n if (!values.label) {\n errors.label = 'Required';\n }\n if (!values.start_val) {\n errors.start_val = 'Required';\n }\n if (!values.loop_var) {\n errors.loop_var = 'Required';\n }\n }\n\n return errors;\n};\n\nconst formFields = [\n {\n size: 12,\n field: (\n <TextField\n label=\"Label\"\n name=\"label\"\n margin=\"none\"\n required={true}\n multiline\n />\n ),\n },\n {\n size: 12,\n field: (\n <TextField\n label=\"Variable\"\n name=\"loop_var\"\n margin=\"none\"\n required={true}\n multiline\n />\n ),\n },\n {\n size: 12,\n field: (\n <TextField\n label=\"Start Value\"\n name=\"start_val\"\n margin=\"none\"\n required={true}\n multiline\n />\n ),\n },\n {\n size: 12,\n field: (\n <TextField\n label=\"End Value\"\n name=\"end_val\"\n margin=\"none\"\n multiline\n />\n ),\n },\n {\n size: 12,\n field: (\n <TextField\n label=\"Loop While\"\n name=\"loop_while\"\n margin=\"none\"\n multiline\n />\n ),\n }\n];\n\nexport const CcLoopForm = (props) => {\n const {ccLoop, instrumentId, onChange, path, onDelete, onCreate} = props;\n\n const dispatch = useDispatch();\n const classes = useStyles();\n\n const status = ObjectStatus(ccLoop.id || 'new', 'CcLoop')\n\n const onSubmit = (values) => {\n values = ObjectCheckForInitialValues(ccLoop, values)\n\n if(isNil(ccLoop.id)){\n dispatch(CcLoops.create(instrumentId, values, (newObject) => {\n onChange({node: { ...values, ...newObject }, path: path})\n onCreate()\n }))\n }else{\n dispatch(CcLoops.update(instrumentId, ccLoop.id, values))\n onChange({node: values, path: path})\n }\n }\n\n return (\n <div style={{ padding: 16, margin: 'auto', maxWidth: 1000 }}>\n <ObjectStatusBar id={ccLoop.id || 'new'} type={'CcLoop'} />\n <CssBaseline />\n <Form\n onSubmit={onSubmit}\n initialValues={ccLoop}\n validate={(values) => validate(values, status)}\n mutators={{\n ...arrayMutators\n }}\n render={({\n handleSubmit,\n form: {\n mutators: { push, pop }\n }, // injected from final-form-arrays above\n pristine,\n form,\n submitting,\n values\n }) => (\n <form onSubmit={handleSubmit} noValidate>\n <Paper style={{ padding: 16 }} className={classes.paper}>\n <Grid container alignItems=\"flex-start\" spacing={2}>\n {formFields.map((item, idx) => (\n <Grid item xs={item.size} key={idx}>\n {item.type && item.type === 'select'\n ? item.field([])\n : item.field\n }\n </Grid>\n ))}\n <Grid item style={{ marginTop: 16 }}>\n <Button\n type=\"button\"\n variant=\"contained\"\n onClick={form.reset}\n disabled={submitting || pristine}\n >\n Reset\n </Button>\n </Grid>\n <Grid item style={{ marginTop: 16 }}>\n <Button\n variant=\"contained\"\n color=\"primary\"\n type=\"submit\"\n disabled={submitting}\n >\n Submit\n </Button>\n </Grid>\n <DeleteObjectButton id={values.id} instrumentId={instrumentId} action={CcLoops} onDelete={()=> { onDelete({ path }) }}/>\n </Grid>\n </Paper>\n </form>\n )}\n />\n </div>\n );\n}\n","import React, { useEffect, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux'\nimport { Instrument, CcConditions, CcLoops, CcSequences, CcStatements, CcQuestions, QuestionItems, QuestionGrids, ResponseUnits, InstrumentTree } from '../actions'\nimport { Dashboard } from '../components/Dashboard'\nimport { MoveConstructSelect } from '../components/MoveConstructSelect'\nimport { CcConditionForm } from '../components/CcConditionForm'\nimport { CcQuestionForm } from '../components/CcQuestionForm'\nimport { CcStatementForm } from '../components/CcStatementForm'\nimport { CcSequenceForm } from '../components/CcSequenceForm'\nimport { CcLoopForm } from '../components/CcLoopForm'\nimport { Loader } from '../components/Loader'\nimport { ObjectColour } from '../support/ObjectColour'\nimport { get, isEmpty, isNil } from \"lodash\";\nimport Grid from '@material-ui/core/Grid';\nimport Paper from '@material-ui/core/Paper';\n\nimport { makeStyles } from '@material-ui/core/styles';\nimport AddIcon from '@material-ui/icons/Add';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\nimport ExpandLessIcon from '@material-ui/icons/ExpandLess';\nimport OpenWithIcon from '@material-ui/icons/OpenWith';\nimport HighlightOffIcon from '@material-ui/icons/HighlightOff';\n\nimport SearchBar from \"material-ui-search-bar\";\n\nimport {\n Button,\n ButtonGroup,\n Divider\n} from '@material-ui/core';\n\nimport {\n Alert,\n AlertTitle\n} from '@material-ui/lab';\n\nimport SortableTree, { addNodeUnderParent, removeNodeAtPath, getFlatDataFromTree, changeNodeAtPath, toggleExpandedForAll } from 'react-sortable-tree';\nimport 'react-sortable-tree/style.css'; // This only needs to be imported once in your app\n\nconst TreeNode = (instrumentId, type, id, expanded=false) => {\n var item = ObjectFinder(instrumentId, type, id)\n var children;\n\n if(item.type === \"condition\"){\n children = get(item, 'children',[])\n var fchildren = get(item, 'fchildren',[])\n\n var trueAndFalse = [\n { title: `${item.label} True`, expanded: expanded, conditionId: item.id, type: 'conditionTrue', children: children.map(child => TreeNode(instrumentId, child.type, child.id)) },\n { title: `${item.label} Else`, expanded: expanded, conditionId: item.id, type: 'conditionFalse', children: fchildren.map(child => TreeNode(instrumentId, child.type, child.id)) },\n ]\n return {...item, ...{ title: `${item.label}`, expanded: expanded, type: item.type, children: trueAndFalse } }\n }else{\n children = get(item, 'children',[])\n\n return {...item, ...{ title: `${item.label}`, expanded: expanded, type: item.type, children: children.map(child => TreeNode(instrumentId, child.type, child.id)) } }\n }\n}\n\nconst TreeNodeFormatter = (instrumentId, item) => {\n const children = (item.type === \"condition\") ? [\n { title: `${item.label} True`, expanded: false, type: 'conditionTrue', children: [] },\n { title: `${item.label} Else`, expanded: false, type: 'conditionFalse', children: [] },\n ] : []\n return {...item, ...{ title: `${item.label}`, expanded: true, type: item.type, children: children } }\n}\n\nconst Tree = (props) => {\n const { topSequence, instrumentId, dispatch, onNodeSelect } = props\n const [treeData, setTreeData] = useState([TreeNode(instrumentId, 'CcSequence', topSequence.id, true)]);\n const [selectedNode, setSelectedNode] = useState({});\n\n// const [expanded, setExpanded] = useState(true);\n const classes = useStyles();\n\n const [searchString, setSearchString] = useState();\n const [searchFocusIndex, setSearchFocusIndex] = useState();\n const [searchFoundCount, setSearchFoundCount] = useState();\n\n // Case insensitive search of `node.title`\n const customSearchMethod = ({ node, searchQuery }) =>\n searchQuery &&\n node.title.toLowerCase().indexOf(searchQuery.toLowerCase()) > -1;\n\n const selectPrevMatch = () =>\n setSearchFocusIndex(\n searchFocusIndex !== null\n ? (searchFoundCount + searchFocusIndex - 1) % searchFoundCount\n : searchFoundCount - 1\n );\n\n const selectNextMatch = () =>\n setSearchFocusIndex(\n searchFocusIndex !== null\n ? (searchFocusIndex + 1) % searchFoundCount\n : 0,\n );\n\n const getNodeKey = ({ treeIndex }) => treeIndex;\n\n const updateNode = ({ node, path }) => {\n var data = changeNodeAtPath({\n treeData: treeData,\n path,\n getNodeKey,\n newNode: TreeNodeFormatter(instrumentId, node)\n })\n setTreeData(data)\n reorderConstructs(data)\n }\n\n const deleteNode = ({ path }) => {\n onNodeSelect({})\n setTreeData(removeNodeAtPath({\n treeData: treeData,\n path,\n getNodeKey,\n }));\n }\n\n const canHaveChildren = (node) => {\n return (node.type === 'sequence' || node.type === 'loop' || node.type === 'conditionTrue' || node.type === 'conditionFalse')\n }\n\n const canDrop = ({ node, nextParent, prevPath, nextPath }) => {\n if (!isNil(nextParent) && canHaveChildren(nextParent)) {\n return true;\n }\n\n return false;\n };\n\n const toggleExpand = (expanded) => {\n setTreeData(toggleExpandedForAll({\n treeData: treeData,\n expanded: expanded\n }));\n }\n\n const moveableNodesArray = (data) => {\n return getFlatDataFromTree({\n treeData: data,\n getNodeKey: ({ node }) => { return { id: node.id, type: node.type } }, // This ensures your \"id\" properties are exported in the path\n ignoreCollapsed: false, // Makes sure you traverse every node in the tree, not just the visible ones\n }).map(({ node, path }) => {\n if(!canHaveChildren(node)){\n return null\n }\n if(['conditionTrue', 'conditionFalse'].includes(node.type)){\n return null\n }\n return {\n id: node.id,\n type: node.type,\n title: node.title,\n path: path\n }\n }).filter(el => el != null);\n }\n\n dispatch(InstrumentTree.create(instrumentId, moveableNodesArray(treeData)));\n\n const orderArray = (data) => {\n return getFlatDataFromTree({\n treeData: data,\n getNodeKey: ({ node }) => { return { id: node.id, type: node.type, children: node.children.map(child => `type ${child.type} id ${child.id}` ) } }, // This ensures your \"id\" properties are exported in the path\n ignoreCollapsed: false, // Makes sure you traverse every node in the tree, not just the visible ones\n }).map(({ node, path }) => {\n if(['conditionTrue', 'conditionFalse'].includes(node.type)){\n if(node.id === 172015 || node.id === 36397 || node.id === 36396){\n console.log('nope')\n }\n return null\n }\n let parent = path[path.length - 2]\n let branch = (parent !== undefined && parent.type === 'conditionFalse') ? 1 : 0\n let position = (parent !== undefined) ? parent.children.indexOf(`type ${node.type} id ${node.id}`) + 1 : node.position\n if(parent !== undefined && ['conditionTrue', 'conditionFalse'].includes(parent.type)){\n parent = path[path.length - 3]\n }\n const data = {\n id: node.id,\n type: node.type,\n position: position,\n branch: branch,\n // // The last entry in the path is this node's key\n // // The second to last entry (accessed here) is the parent node's key\n parent: (parent !== undefined) ? { id: parent.id, type: parent.type } : {},\n }\n\n return data\n }).filter(el => el != null);\n }\n\n const reorderConstructs = (data) => {\n dispatch(Instrument.reorderConstructs(instrumentId, orderArray(data)));\n }\n\n const generateButtons = (node, path) => {\n var buttons = []\n if(canHaveChildren(node)){\n const newNode = {\n title: `Click to select construct typex`,\n children: [],\n type: undefined\n }\n buttons.push(\n <button\n onClick={(event) => {\n setTreeData(addNodeUnderParent({\n treeData: treeData,\n parentKey: path[path.length - 1],\n expandParent: true,\n getNodeKey,\n newNode: newNode\n }).treeData)\n event.stopPropagation()\n console.log(newNode)\n console.log(path)\n setSelectedNode({ node: newNode, path: path, callback: ({ node, path }) => { updateNode({ node, path }); setSelectedNode(null) }, deleteCallback: ({ path }) => { deleteNode({ path }) } });\n// setSelectedNode({node: { type: undefined }})\n }}\n >\n <AddIcon />\n </button>\n )\n }\n return buttons;\n }\n\n return (\n <div style={{ height: 10000 }}>\n\n <SearchBar\n placeholder=\"Search (press return to perform search)\"\n onRequestSearch={(newValue) =>\n setSearchString(newValue)\n }\n onCancelSearch={() => {\n setSearchString()\n }}\n />\n\n {searchFoundCount === 0 && !isNil(searchString) && (\n <Alert severity=\"error\">\n <AlertTitle>Error</AlertTitle>\n No results found.\n </Alert>\n )}\n\n {searchFoundCount > 0 && !isNil(searchString) && (\n <>\n <span>\n \n {searchFoundCount > 0 ? searchFocusIndex + 1 : 0}\n of \n {searchFoundCount || 0} matches\n </span>\n <ButtonGroup color=\"primary\" aria-label=\"outlined primary button group\">\n <Button onClick={selectPrevMatch}>< Prev</Button>\n <Button onClick={selectNextMatch}>> Next</Button>\n </ButtonGroup>\n </>\n )}\n\n <Divider className={classes.divider}/>\n <Grid container spacing={3}>\n <Grid item xs={6}>\n <MoveConstructSelect treeData={treeData} onChange={newTreeData => { setTreeData(newTreeData); reorderConstructs(newTreeData) } } />\n </Grid>\n <Grid item xs={6}>\n <ButtonGroup color=\"primary\" aria-label=\"outlined primary button group\">\n <Button onClick={()=>{toggleExpand(true)}} startIcon={<ExpandMoreIcon />}>Expand All</Button>\n <Button onClick={()=>{toggleExpand(false)}} startIcon={<ExpandLessIcon />}>Collapse All</Button>\n </ButtonGroup>\n </Grid>\n </Grid>\n\n <SortableTree\n treeData={treeData}\n onChange={newTreeData => { setTreeData(newTreeData); reorderConstructs(newTreeData) } }\n canNodeHaveChildren={node => canHaveChildren(node)}\n canDrop={canDrop}\n canDrag={({node}) =>{\n return !['conditionTrue', 'conditionFalse'].includes(node.type)\n }}\n searchMethod={customSearchMethod}\n searchQuery={searchString}\n searchFocusOffset={searchFocusIndex}\n searchFinishCallback={(matches) => {\n setSearchFoundCount(matches.length)\n setSearchFocusIndex(matches.length > 0 ? searchFocusIndex % matches.length : 0)\n }}\n generateNodeProps={({ node, path }) => {\n const boxShadow = (node === selectedNode || node.type == 'sequence' ) ? `0px 0px 15px 3px #${ObjectColour(node.type)}` : ''\n\n return (\n {\n style: {\n boxShadow: boxShadow,\n },\n onClick: () => {\n onNodeSelect({ node: node, path: path, callback: ({ node, path }) => { updateNode({ node, path }); setSelectedNode(null) }, deleteCallback: ({ path }) => { deleteNode({ path }) } });\n setSelectedNode(node);\n },\n buttons: generateButtons(node, path),\n className: `${node.type}:${node.id}`\n }\n )\n }}\n />\n </div>\n );\n}\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n width: '100%',\n backgroundColor: theme.palette.background.paper\n },\n control: {\n width: '100%',\n padding: theme.spacing(2),\n },\n main: {\n 'min-height': '1200px'\n },\n side: {\n position: 'absolute',\n width: '50%',\n right: '5px'\n },\n nested: {\n paddingLeft: theme.spacing(4),\n },\n paper:{\n boxShadow :`5px 5px 10px 5px #${ObjectColour('default')}`\n },\n statement:{\n boxShadow :`2px 2px 7px 2px #${ObjectColour('statement')}`,\n 'margin-bottom': '10px'\n },\n sequence:{\n boxShadow :`2px 2px 7px 2px #${ObjectColour('sequence')}`,\n 'margin-bottom': '10px'\n },\n question:{\n boxShadow :`2px 2px 7px 2px #${ObjectColour('question')}`,\n 'margin-bottom': '10px'\n },\n loop:{\n boxShadow :`2px 2px 7px 2px #${ObjectColour('loop')}`,\n 'margin-bottom': '10px'\n },\n condition:{\n boxShadow :`2px 2px 7px 2px #${ObjectColour('condition')}`,\n 'margin-bottom': '10px'\n },\n divider:{\n margin: '25px'\n }\n}));\n\nconst ObjectStatus = (id, type) => {\n const statuses = useSelector(state => state.statuses);\n const key = type + ':' + id\n return get(statuses, key, {})\n}\n\nconst ObjectFinder = (instrumentId, type, id) => {\n const sequences = useSelector(state => state.cc_sequences);\n const cc_sequences = get(sequences, instrumentId, {})\n const statements = useSelector(state => state.cc_statements);\n const cc_statements = get(statements, instrumentId, {})\n const conditions = useSelector(state => state.cc_conditions);\n const cc_conditions = get(conditions, instrumentId, {})\n const loops = useSelector(state => state.cc_loops);\n const cc_loops = get(loops, instrumentId, {})\n const questions = useSelector(state => state.cc_questions);\n const cc_questions = get(questions, instrumentId, {})\n const allQuestionItems = useSelector(state => state.questionItems);\n const questionItems = get(allQuestionItems, instrumentId, {})\n const allQuestionGrids = useSelector(state => state.questionGrids);\n const questionGrids = get(allQuestionGrids, instrumentId, {})\n\n var item = {children: []}\n\n if(type === 'CcLoop'){\n item = get(cc_loops, id.toString(), {})\n item.type = 'loop'\n }\n\n if(type === 'CcSequence'){\n item = get(cc_sequences, id.toString(), {})\n item.type = 'sequence'\n }\n\n if(type === 'CcStatement'){\n item = get(cc_statements, id.toString(), {})\n item.type = 'statement'\n }\n\n if(type === 'CcCondition'){\n item = get(cc_conditions, id.toString(), {})\n item.type = 'condition'\n }\n\n if(type === 'CcQuestion'){\n item = get(cc_questions, id.toString(), {})\n\n if(item.question_type === 'QuestionItem'){\n item.question = get(questionItems, item.question_id.toString(), {})\n }else if(item.question_type === 'QuestionGrid'){\n item.question = get(questionGrids, item.question_id.toString(), {})\n }\n item.type = 'question'\n }\n\n return item\n\n}\n\nconst ConstructForm = (props) => {\n const {object, instrumentId, onNodeSelect} = props;\n const { node={}, path, callback=(node)=>{ console.log('No onChange callback provided')}, deleteCallback=(node)=>{ console.log('No onDelete callback provided')} } = object;\n const onCreate = () => { onNodeSelect(null)}\n switch (node.type) {\n case 'question':\n return <CcQuestionForm ccQuestion={node} instrumentId={instrumentId} path={path} onChange={callback} onDelete={deleteCallback} onCreate={onCreate} />\n case 'statement':\n return <CcStatementForm ccStatement={node} instrumentId={instrumentId} path={path} onChange={callback} onDelete={deleteCallback} onCreate={onCreate} />\n case 'sequence':\n return <CcSequenceForm ccSequence={node} instrumentId={instrumentId} path={path} onChange={callback} onDelete={deleteCallback} onCreate={onCreate} />\n case 'condition':\n return <CcConditionForm ccCondition={node} instrumentId={instrumentId} path={path} onChange={callback} onDelete={deleteCallback} onCreate={onCreate} />\n case 'loop':\n return <CcLoopForm ccLoop={node} instrumentId={instrumentId} path={path} onChange={callback} onDelete={deleteCallback} onCreate={onCreate} />\n case undefined:\n console.log(object)\n return <NewConstructQuestion onNodeSelect={onNodeSelect} object={object} onChange={callback} path={path} onDelete={deleteCallback} onCreate={onCreate}/>\n default:\n return ''\n }\n\n}\n\nconst NewConstructQuestion = (props) => {\n const {object, onNodeSelect, onDelete, path, onChange} = props;\n\n const classes = useStyles();\n console.log(object)\n return (\n <Paper style={{ padding: 16 }} className={classes.paper}>\n <h3>Select construct type</h3>\n <Button\n type=\"button\"\n variant=\"outlined\"\n className={classes.question}\n onClick={() => {\n var node = {...object.node, ...{ type: 'question' }}\n onNodeSelect({...object, ...{node: node }})\n }}\n >\n Question\n </Button>\n <br/>\n <Button\n type=\"button\"\n variant=\"outlined\"\n className={classes.condition}\n onClick={() => {\n var node = {...object.node, ...{ type: 'condition' }}\n onNodeSelect({...object, ...{node: node, callback: onChange }})\n }}\n >\n Condition\n </Button>\n <br/>\n <Button\n type=\"button\"\n variant=\"outlined\"\n className={classes.loop}\n onClick={() => {\n var node = {...object.node, ...{ type: 'loop' }}\n onNodeSelect({...object, ...{node: node }})\n }}\n >\n Loop\n </Button>\n <br/>\n <Button\n type=\"button\"\n variant=\"outlined\"\n className={classes.sequence}\n onClick={() => {\n var node = {...object.node, ...{ type: 'sequence' }}\n onNodeSelect({...object, ...{node: node }})\n }}\n >\n Sequence\n </Button>\n <br/>\n <Button\n type=\"button\"\n variant=\"outlined\"\n className={classes.statement}\n onClick={() => {\n var node = {...object.node, ...{ type: 'statement' }}\n onNodeSelect({...object, ...{node: node }})\n }}\n >\n Statement\n </Button>\n <br/>\n <Button\n type=\"button\"\n variant=\"outlined\"\n onClick={() => {\n onDelete({ path })\n }}\n >\n Delete\n </Button>\n </Paper>\n )\n\n}\n\nconst InstrumentConstructBuild = (props) => {\n\n const classes = useStyles();\n\n const dispatch = useDispatch()\n const instrumentId = get(props, \"match.params.instrument_id\", \"\")\n const instrument = useSelector(state => get(state.instruments, instrumentId));\n const sequences = useSelector(state => state.cc_sequences);\n const cc_sequences = get(sequences, instrumentId, null)\n\n const [selectedNode, setSelectedNode] = useState({});\n const [dataLoaded, setDataLoaded] = useState(false);\n\n useEffect(() => {\n Promise.all([\n dispatch(Instrument.show(instrumentId)),\n dispatch(CcSequences.all(instrumentId)),\n dispatch(CcStatements.all(instrumentId)),\n dispatch(CcConditions.all(instrumentId)),\n dispatch(CcLoops.all(instrumentId)),\n dispatch(CcQuestions.all(instrumentId)),\n dispatch(QuestionItems.all(instrumentId)),\n dispatch(QuestionGrids.all(instrumentId)),\n dispatch(ResponseUnits.all(instrumentId))\n ]).then(() => {\n setDataLoaded(true)\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n },[]);\n\n const sequence = (isEmpty(cc_sequences) || isNil(cc_sequences)) ? undefined : Object.values(cc_sequences).find(element => element.top == true)\n\n return (\n <div style={{ height: 500, width: '100%' }}>\n <Dashboard title={'Build'} instrumentId={instrumentId}>\n <h1>{get(instrument, 'label')}</h1>\n {!dataLoaded\n ? <Loader />\n : (\n <Grid container spacing={3} className={classes.main}>\n <Grid item xs={(isEmpty(selectedNode)) ? 12 : 12 }>\n <Tree topSequence={sequence.children[0]} instrumentId={instrumentId} onNodeSelect={setSelectedNode} dispatch={dispatch} />\n </Grid>\n {!isEmpty(selectedNode) && (\n <Grid item xs={4} className={classes.side}>\n <ConstructForm object={selectedNode} instrumentId={instrumentId} onNodeSelect={setSelectedNode} />\n <HighlightOffIcon style={{ position: 'absolute', right: '30px', top: '20px' }} onClick={()=>{ setSelectedNode(null) }}>Close</HighlightOffIcon>\n </Grid>\n )}\n </Grid>\n )\n }\n </Dashboard>\n </div>\n );\n}\n\nexport default InstrumentConstructBuild;\n","import React from 'react';\nimport { get, isNil } from \"lodash\";\nimport { Form } from 'react-final-form';\nimport { useDispatch, useSelector } from 'react-redux'\nimport { CodeLists } from '../actions'\nimport { ObjectStatusBar } from '../components/ObjectStatusBar'\nimport { DeleteObjectButton } from '../components/DeleteObjectButton'\nimport { ObjectCheckForInitialValues } from '../support/ObjectCheckForInitialValues'\nimport arrayMutators from 'final-form-arrays'\nimport { FieldArray } from 'react-final-form-arrays'\nimport { makeStyles } from '@material-ui/core/styles';\nimport Table from '@material-ui/core/Table';\nimport TableBody from '@material-ui/core/TableBody';\nimport TableCell from '@material-ui/core/TableCell';\nimport TableContainer from '@material-ui/core/TableContainer';\nimport TableHead from '@material-ui/core/TableHead';\nimport TableRow from '@material-ui/core/TableRow';\nimport Autocomplete from '@material-ui/lab/Autocomplete';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport AddCircleOutlineIcon from '@material-ui/icons/AddCircleOutline';\nimport { Link } from 'react-router-dom';\nimport { reverse as url } from 'named-urls'\nimport routes from '../routes'\n\nimport {\n TextField,\n Checkboxes,\n} from 'mui-rff';\nimport {\n Paper,\n Grid,\n Button,\n CssBaseline,\n} from '@material-ui/core';\n\n\nconst useStyles = makeStyles({\n table: {\n minWidth: 650,\n },\n small: {\n width: 100\n }\n});\n\nconst validate = values => {\n const errors = {};\n if (!values.label) {\n errors.label = 'Required';\n }\n return errors;\n};\n\nconst formFields = [\n {\n size: 12,\n field: (\n <TextField\n label=\"Label\"\n name=\"label\"\n margin=\"none\"\n required={true}\n multiline\n />\n ),\n },\n {\n size: 12,\n field: (\n <Checkboxes\n name=\"rd\"\n formControlProps={{ margin: 'none' }}\n data={{ label: 'Response Domain', value: true }}\n />\n ),\n },\n {\n size: 12,\n visible: (values) => {\n return get(values, 'rd', false)\n },\n field: <TextField name=\"min_responses\" multiline label=\"Min Responses\" margin=\"none\" />,\n },\n {\n size: 12,\n visible: (values) => {\n return get(values, 'rd', false)\n },\n field: <TextField name=\"max_responses\" multiline label=\"Max Responses\" margin=\"none\" />,\n }\n];\n\nconst FormField = (props) => {\n const {item, values} = props\n\n if(item.visible !== undefined && !item.visible(values) ){\n return ''\n }\n\n if(item.type && item.type === 'select'){\n return item.field()\n }else{\n return item.field\n }\n}\n\nexport const CodeListForm = (props) => {\n const {codeList, instrumentId} = props;\n\n const categories = useSelector(state => get(state.categories, instrumentId, {}));\n\n const dispatch = useDispatch();\n const classes = useStyles();\n\n const onSubmit = (values) => {\n values = ObjectCheckForInitialValues(codeList, values)\n\n if(isNil(codeList.id)){\n dispatch(CodeLists.create(instrumentId, values))\n }else{\n dispatch(CodeLists.update(instrumentId, codeList.id, values))\n }\n }\n\n return (\n <div style={{ padding: 0 }}>\n <ObjectStatusBar id={codeList.id || 'new'} type={'CodeList'} />\n <CssBaseline />\n <Form\n onSubmit={onSubmit}\n initialValues={codeList}\n validate={validate}\n mutators={{\n ...arrayMutators\n }}\n render={({\n handleSubmit,\n form: {\n mutators: { push, pop }\n }, // injected from final-form-arrays above\n pristine,\n form,\n submitting,\n values\n }) => (\n <form onSubmit={handleSubmit} noValidate>\n <Paper style={{ padding: 16 }}>\n <Grid container alignItems=\"flex-start\" spacing={2}>\n {formFields.map((item, idx) => (\n <Grid item xs={item.size} key={idx}>\n <FormField item={item} values={values} />\n </Grid>\n ))}\n <h3>Codes</h3>\n <AddCircleOutlineIcon onClick={() => push('codes', {})}/>\n <TableContainer component={Paper}>\n <Table className={classes.table} aria-label=\"simple table\">\n <TableHead>\n <TableRow>\n <TableCell className={classes.small} >ID</TableCell>\n <TableCell className={classes.small} size=\"small\">Value</TableCell>\n <TableCell>Label</TableCell>\n <TableCell className={classes.small}>Actions</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n <FieldArray name=\"codes\">\n {({ fields }) =>\n fields.map((name, index) => (\n <TableRow key={name}>\n <TableCell className={classes.small} >\n {fields.value[index].id}\n </TableCell>\n <TableCell className={classes.small} size=\"small\">\n <TextField name={`${name}.value`} multiline label=\"Value\" margin=\"none\" />\n </TableCell>\n <TableCell>\n <Autocomplete\n freesolo=\"true\"\n options={Object.values(categories)}\n getOptionLabel={(option) => option.label}\n onChange={(event, value, reason)=>{\n if(isNil(value)){\n fields.update(index, {...fields.value[index], ...{category_id: null, label: null} })\n }else{\n fields.update(index, {...fields.value[index], ...{category_id: value.id, label: value.label} })\n }\n } }\n value={{id: fields.value[index].category_id, label:fields.value[index].label}}\n getOptionSelected= {(option, value) => (\n option.id === value.id\n )}\n renderInput={(params) => (\n <TextField name={`${name}.label`}\n {...params}\n variant=\"outlined\"\n label=\"Label\"\n placeholder=\"label\"\n />\n )}\n />\n </TableCell>\n <TableCell className={classes.small}>\n <span\n onClick={() => fields.remove(index)}\n style={{ cursor: 'pointer' }}\n >\n <DeleteIcon />\n </span>\n </TableCell>\n </TableRow>\n ))\n }\n </FieldArray>\n </TableBody>\n </Table>\n </TableContainer>\n <Grid item style={{ marginTop: 16 }}>\n <Button\n type=\"button\"\n variant=\"contained\"\n onClick={form.reset}\n disabled={submitting || pristine}\n >\n Reset\n </Button>\n </Grid>\n <Grid item style={{ marginTop: 16 }}>\n <Button\n variant=\"contained\"\n color=\"primary\"\n type=\"submit\"\n disabled={submitting}\n >\n Submit\n </Button>\n </Grid>\n <DeleteObjectButton id={values.id} instrumentId={instrumentId} action={CodeLists} />\n </Grid>\n <Grid item style={{ marginTop: 16 }}>\n <h3>Used By</h3>\n <TableContainer component={Paper}>\n <Table className={classes.table} aria-label=\"simple table\">\n <TableHead>\n <TableRow>\n <TableCell>ID</TableCell>\n <TableCell size=\"small\">Question Type</TableCell>\n <TableCell>Label</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {codeList.used_by.map((question) => (\n <TableRow key={question.id}>\n <TableCell>\n <Button variant=\"outlined\">\n <Link to={url(routes.instruments.instrument.build.questionItems.show, { instrument_id: instrumentId, questionItemId: question.id })}>{question.id}</Link>\n </Button>\n </TableCell>\n <TableCell size=\"small\">\n {question.type}\n </TableCell>\n <TableCell size=\"small\">\n {question.label}\n </TableCell>\n </TableRow>\n ))\n }\n </TableBody>\n </Table>\n </TableContainer>\n </Grid>\n </Paper>\n </form>\n )}\n />\n </div>\n );\n}\n","import React from 'react';\nimport Button from '@material-ui/core/Button';\nimport ButtonGroup from '@material-ui/core/ButtonGroup';\nimport { useHistory } from 'react-router-dom';\nimport AddIcon from '@material-ui/icons/Add';\nimport { reverse as url } from 'named-urls'\nimport routes from '../routes'\n\nconst ObjectTypeLookup = (objectType, instrumentId) => {\n switch(objectType) {\n case('ResponseDomainNumeric'):\n return {\n path: url(routes.instruments.instrument.build.responseDomains.show, { instrument_id: instrumentId, responseDomainType: objectType, responseDomainId: 'new' }),\n text: 'Numeric'\n }\n case('ResponseDomainText'):\n return {\n path: url(routes.instruments.instrument.build.responseDomains.show, { instrument_id: instrumentId, responseDomainType: objectType, responseDomainId: 'new' }),\n text: 'Text'\n }\n case('ResponseDomainDatetime'):\n return {\n path: url(routes.instruments.instrument.build.responseDomains.show, { instrument_id: instrumentId, responseDomainType: objectType, responseDomainId: 'new' }),\n text: 'Datetime'\n }\n case('CodeList'):\n return {\n path: url(routes.instruments.instrument.build.codeLists.show, { instrument_id: instrumentId, codeListId: 'new' }),\n text: 'New CodeList'\n }\n case('QuestionItem'):\n return {\n path: url(routes.instruments.instrument.build.questionItems.show, { instrument_id: instrumentId, questionItemId: 'new' }),\n text: 'Question Item'\n }\n case('QuestionGrid'):\n return {\n path: url(routes.instruments.instrument.build.questionGrids.show, { instrument_id: instrumentId, questionGridId: 'new' }),\n text: 'Question Grid'\n }\n default:\n return {\n path: '/',\n text: 'Not found'\n }\n }\n}\n\nexport const CreateNewBuildObjectButtons = (props) => {\n const { objectTypes=[], instrumentId, callback=()=>{}} = props;\n\n const history = useHistory();\n\n const createNew = (path) => {\n history.push(path);\n callback('new')\n }\n\n const buttons = objectTypes.map( objectType => ObjectTypeLookup(objectType, instrumentId) )\n\n return (\n <ButtonGroup color=\"primary\" aria-label=\"outlined primary button group\">\n {buttons.map((button) => {\n return <Button onClick={()=> { createNew(button.path)} }startIcon={<AddIcon />}>{button.text}</Button>\n })}\n </ButtonGroup>\n )\n}\n","import React, { useEffect } from 'react';\nimport { useDispatch, useSelector } from 'react-redux'\nimport { CodeLists, Categories } from '../actions'\nimport { Dashboard } from '../components/Dashboard'\nimport { CodeListForm } from '../components/CodeListForm'\nimport { CreateNewBuildObjectButtons } from '../components/CreateNewBuildObjectButtons'\nimport { get, isNil } from \"lodash\";\nimport Grid from '@material-ui/core/Grid';\nimport Paper from '@material-ui/core/Paper';\nimport Divider from '@material-ui/core/Divider';\nimport List from '@material-ui/core/List';\nimport ListItem from '@material-ui/core/ListItem';\nimport ListItemSecondaryAction from '@material-ui/core/ListItemSecondaryAction';\nimport ListItemText from '@material-ui/core/ListItemText';\nimport Chip from '@material-ui/core/Chip';\nimport { useHistory } from 'react-router-dom';\nimport { reverse as url } from 'named-urls'\nimport routes from '../routes'\n\nimport { makeStyles } from '@material-ui/core/styles';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n width: '100%',\n backgroundColor: theme.palette.background.paper\n },\n control: {\n width: '100%',\n padding: theme.spacing(2),\n },\n truncate: {\n width: 70,\n 'white-space': 'nowrap',\n overflow: 'hidden',\n 'text-overflow': 'ellipsis'\n }\n}));\n\nconst InstrumentBuildCodeLists = (props) => {\n let history = useHistory();\n\n const dispatch = useDispatch()\n const classes = useStyles();\n const codeListId = get(props, \"match.params.codeListId\", null);\n\n const instrumentId = get(props, \"match.params.instrument_id\", \"\")\n const codeLists = useSelector(state => get(state.codeLists, instrumentId, {}));\n const selectedCodeList = get(codeLists, codeListId, {used_by: []})\n\n useEffect(() => {\n dispatch(CodeLists.all(instrumentId));\n dispatch(Categories.all(instrumentId));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n },[]);\n\n const CodeListItem = (props) => {\n const {label, value, id} = props\n const classes = useStyles();\n\n return (\n <ListItem>\n <ListItemText\n className={classes.truncate} primary={label} onClick={()=>{handleCodeListSelection(id)}}/>\n <ListItemSecondaryAction>\n <Chip label={value} />\n </ListItemSecondaryAction>\n </ListItem>\n )\n }\n\n const handleCodeListSelection = (id) => {\n const path = url(routes.instruments.instrument.build.codeLists.show, { instrument_id: instrumentId, codeListId: id })\n history.push(path);\n }\n\n return (\n <div style={{ height: 500, width: '100%' }}>\n <Dashboard title={instrumentId} instrumentId={instrumentId}>\n <Grid container spacing={3}>\n <Grid item xs={2}>\n <Paper className={classes.control}>\n <h2>Code Lists</h2>\n <CreateNewBuildObjectButtons instrumentId={instrumentId} objectTypes={['CodeList']} />\n <List dense={true}>\n {Object.values(codeLists).map((codeList) => {\n return (\n <CodeListItem label={codeList.label} value={codeList.used_by.length} id={codeList.id} />\n )\n })}\n </List>\n </Paper>\n </Grid>\n <Grid item xs={10}>\n {!isNil(selectedCodeList) && (\n <CodeListForm codeList={selectedCodeList} instrumentId={instrumentId} />\n )}\n </Grid>\n </Grid>\n </Dashboard>\n </div>\n );\n}\n\nexport default InstrumentBuildCodeLists;\n","export const HumanizeObjectType = (type) => {\n switch (type){\n case 'statement':\n case 'CcStatement':\n return 'Statement'\n case 'loop':\n case 'CcLoop':\n return 'Loop'\n case 'question':\n case 'CcQuestion':\n return 'Question'\n case 'sequence':\n case 'CcSequence':\n return 'Sequence'\n case 'condition':\n case 'CcCondition':\n return 'Condition'\n case 'ResponseDomainNumeric':\n return 'Numeric'\n case 'ResponseDomainText':\n return 'Text'\n case 'ResponseDomainDatetime':\n return 'Datetime'\n case 'ResponseDomainCode':\n return 'Code'\n default:\n return ''\n }\n}\n","import React, { useEffect } from 'react';\nimport { get, isNil } from \"lodash\";\nimport { Form } from 'react-final-form';\nimport { useDispatch, useSelector } from 'react-redux'\nimport { QuestionItems, ResponseDomainNumerics, ResponseDomainTexts, ResponseDomainDatetimes, ResponseDomainCodes } from '../actions'\nimport { ObjectStatusBar } from '../components/ObjectStatusBar'\nimport { DeleteObjectButton } from '../components/DeleteObjectButton'\nimport { ObjectCheckForInitialValues } from '../support/ObjectCheckForInitialValues'\nimport arrayMutators from 'final-form-arrays'\nimport { FieldArray } from 'react-final-form-arrays'\nimport { makeStyles } from '@material-ui/core/styles';\nimport { HumanizeObjectType } from '../support/HumanizeObjectType';\n\nimport {\n TextField,\n} from 'mui-rff';\nimport {\n Paper,\n Grid,\n Button,\n CssBaseline,\n Table,\n TableContainer,\n TableBody,\n TableHead,\n TableRow,\n TableCell\n} from '@material-ui/core';\nimport {\n Autocomplete\n} from '@material-ui/lab';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport AddCircleOutlineIcon from '@material-ui/icons/AddCircleOutline';\n\n\n\nconst useStyles = makeStyles({\n table: {\n minWidth: 650,\n },\n small: {\n width: 100\n }\n});\n\nconst validate = values => {\n const errors = {};\n if (!values.label) {\n errors.label = 'Required';\n }\n return errors;\n};\n\nconst formFields = [\n {\n size: 12,\n field: (\n <TextField\n label=\"Label\"\n name=\"label\"\n margin=\"none\"\n required={true}\n multiline\n />\n ),\n },\n {\n size: 12,\n field: (\n <TextField\n label=\"Instruction\"\n name=\"instruction\"\n margin=\"none\"\n multiline\n />\n ),\n },\n {\n size: 12,\n field: (\n <TextField\n label=\"Literal\"\n name=\"literal\"\n margin=\"none\"\n required={true}\n multiline\n />\n ),\n }\n];\n\nexport const QuestionItemForm = (props) => {\n const {questionItem, instrumentId} = props;\n\n const dispatch = useDispatch();\n const classes = useStyles();\n\n const responseDomainCodes = useSelector(state => get(state.responseDomainCodes, instrumentId, {}));\n const responseDomainNumerics = useSelector(state => get(state.responseDomainNumerics, instrumentId, {}));\n const responseDomainTexts = useSelector(state => get(state.responseDomainTexts, instrumentId, {}));\n const responseDomainDatetimes = useSelector(state => get(state.responseDomainDatetimes, instrumentId, {}));\n\n const responseDomains = [...Object.values(responseDomainCodes), ...Object.values(responseDomainNumerics), ...Object.values(responseDomainTexts), ...Object.values(responseDomainDatetimes)]\n\n const onSubmit = (values) => {\n values = ObjectCheckForInitialValues(questionItem, values)\n\n if(isNil(questionItem.id)){\n dispatch(QuestionItems.create(instrumentId, values))\n }else{\n dispatch(QuestionItems.update(instrumentId, questionItem.id, values))\n }\n }\n\n useEffect(() => {\n dispatch(ResponseDomainCodes.all(instrumentId));\n dispatch(ResponseDomainNumerics.all(instrumentId));\n dispatch(ResponseDomainTexts.all(instrumentId));\n dispatch(ResponseDomainDatetimes.all(instrumentId));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n },[]);\n\n return (\n <div style={{ padding: 0 }}>\n <ObjectStatusBar id={questionItem.id || 'new'} type={'QuestionItem'} />\n <CssBaseline />\n <Form\n onSubmit={onSubmit}\n initialValues={questionItem}\n validate={validate}\n mutators={{\n ...arrayMutators\n }}\n render={({\n handleSubmit,\n form: {\n mutators: { push, pop }\n }, // injected from final-form-arrays above\n pristine,\n form,\n submitting,\n values\n }) => (\n <form onSubmit={handleSubmit} noValidate>\n <Paper style={{ padding: 16 }}>\n <Grid container alignItems=\"flex-start\" spacing={2}>\n {formFields.map((item, idx) => (\n <Grid item xs={item.size} key={idx}>\n {item.field}\n </Grid>\n ))}\n <h3>Response Domains</h3>\n <AddCircleOutlineIcon onClick={() => push('rds', {})}/>\n <TableContainer component={Paper}>\n <Table className={classes.table} aria-label=\"simple table\">\n <TableHead>\n <TableRow>\n <TableCell>Type and Label</TableCell>\n <TableCell className={classes.small} >Actions</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n <FieldArray name=\"rds\">\n {({ fields }) =>\n fields.map((name, index) => (\n <TableRow key={name}>\n <TableCell>\n <Autocomplete\n freesolo=\"true\"\n options={Object.values(responseDomains)}\n getOptionLabel={(option) => `${HumanizeObjectType(option.type)} - ${option.label}`}\n onChange={(event, value, reason)=>{\n if(isNil(value)){\n fields.update(index, {...fields.value[index], ...{type: null, id: null, label: null} })\n }else{\n fields.update(index, {...fields.value[index], ...{type: value.type, id: value.id, label: value.label} })\n }\n } }\n value={{type: fields.value[index].type, id: fields.value[index].id, label:fields.value[index].label}}\n getOptionSelected= {(option, value) => (\n option.type === value.type && option.id === value.id\n )}\n renderInput={(params) => (\n <TextField name={`${name}.type - ${name}.label`}\n {...params}\n variant=\"outlined\"\n label=\"Label\"\n placeholder=\"label\"\n />\n )}\n />\n </TableCell>\n <TableCell className={classes.small} >\n <span\n onClick={() => fields.remove(index)}\n style={{ cursor: 'pointer' }}\n >\n <DeleteIcon />\n </span>\n </TableCell>\n </TableRow>\n ))\n }\n </FieldArray>\n </TableBody>\n </Table>\n </TableContainer>\n <Grid item style={{ marginTop: 16 }}>\n <Button\n type=\"button\"\n variant=\"contained\"\n onClick={form.reset}\n disabled={submitting || pristine}\n >\n Reset\n </Button>\n </Grid>\n <Grid item style={{ marginTop: 16 }}>\n <Button\n variant=\"contained\"\n color=\"primary\"\n type=\"submit\"\n disabled={submitting}\n >\n Submit\n </Button>\n </Grid>\n <DeleteObjectButton id={values.id} instrumentId={instrumentId} action={QuestionItems} />\n </Grid>\n </Paper>\n </form>\n )}\n />\n </div>\n );\n}\n","import React, { useEffect } from 'react';\nimport { useDispatch, useSelector } from 'react-redux'\nimport { QuestionItems } from '../actions'\nimport { Dashboard } from '../components/Dashboard'\nimport { QuestionItemForm } from '../components/QuestionItemForm'\nimport { CreateNewBuildObjectButtons } from '../components/CreateNewBuildObjectButtons'\nimport { get, isNil } from \"lodash\";\nimport Grid from '@material-ui/core/Grid';\nimport Paper from '@material-ui/core/Paper';\nimport List from '@material-ui/core/List';\nimport ListItem from '@material-ui/core/ListItem';\nimport ListItemSecondaryAction from '@material-ui/core/ListItemSecondaryAction';\nimport ListItemText from '@material-ui/core/ListItemText';\nimport Chip from '@material-ui/core/Chip';\nimport { useHistory } from 'react-router-dom';\nimport { reverse as url } from 'named-urls'\nimport routes from '../routes'\nimport { Link } from 'react-router-dom';\n\nimport { makeStyles } from '@material-ui/core/styles';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n width: '100%',\n backgroundColor: theme.palette.background.paper\n },\n control: {\n width: '100%',\n padding: theme.spacing(2),\n },\n truncate: {\n width: 70,\n 'white-space': 'nowrap',\n overflow: 'hidden',\n 'text-overflow': 'ellipsis'\n }\n}));\n\nconst InstrumentBuildQuestionItems = (props) => {\n let history = useHistory();\n\n const dispatch = useDispatch()\n const classes = useStyles();\n const questionItemId = get(props, \"match.params.questionItemId\", null);\n\n const instrumentId = get(props, \"match.params.instrument_id\", \"\")\n const questionItems = useSelector(state => get(state.questionItems, instrumentId, {}));\n const selectedQuestion = get(questionItems, questionItemId, {used_by: []})\n\n useEffect(() => {\n dispatch(QuestionItems.all(instrumentId));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n },[]);\n\n const QuestionItem = (props) => {\n const {label, value, id} = props\n const classes = useStyles()\n\n return (\n <ListItem>\n <ListItemText\n className={classes.truncate} primary={label} onClick={()=>{handleQuestionSelection(id)}}/>\n </ListItem>\n )\n }\n\n const handleQuestionSelection = (id) => {\n const path = url(routes.instruments.instrument.build.questionItems.show, { instrument_id: instrumentId, questionItemId: id })\n history.push(path);\n }\n\n return (\n <div style={{ height: 500, width: '100%' }}>\n <Dashboard title={instrumentId} instrumentId={instrumentId}>\n <Grid container spacing={3}>\n <Grid item xs={3}>\n <Paper className={classes.control}>\n <h2>Question Items <Link to={url(routes.instruments.instrument.build.questionGrids.all, { instrument_id: instrumentId })}>Question Grids</Link></h2>\n <CreateNewBuildObjectButtons instrumentId={instrumentId} objectTypes={['QuestionItem', 'QuestionGrid']} />\n <List dense={true}>\n {Object.values(questionItems).map((questionItem) => {\n return <QuestionItem label={questionItem.label} id={questionItem.id} />\n })}\n </List>\n </Paper>\n </Grid>\n <Grid item xs={9}>\n {!isNil(selectedQuestion) && (\n <QuestionItemForm questionItem={selectedQuestion} instrumentId={instrumentId} />\n )}\n </Grid>\n </Grid>\n </Dashboard>\n </div>\n );\n}\n\nexport default InstrumentBuildQuestionItems;\n","import React, { useEffect } from 'react';\nimport { get, isNil } from \"lodash\";\nimport { Form, Field } from 'react-final-form';\nimport { useDispatch, useSelector } from 'react-redux'\nimport { QuestionGrids, ResponseDomainNumerics, ResponseDomainTexts, ResponseDomainDatetimes, ResponseDomainCodes } from '../actions'\nimport { ObjectStatusBar } from '../components/ObjectStatusBar'\nimport { DeleteObjectButton } from '../components/DeleteObjectButton'\nimport { ObjectCheckForInitialValues } from '../support/ObjectCheckForInitialValues'\nimport arrayMutators from 'final-form-arrays'\nimport { FieldArray } from 'react-final-form-arrays'\nimport { OnChange } from 'react-final-form-listeners'\nimport { makeStyles } from '@material-ui/core/styles';\nimport { HumanizeObjectType } from '../support/HumanizeObjectType';\n\nimport {\n TextField,\n Select\n} from 'mui-rff';\nimport {\n Paper,\n Grid,\n Button,\n CssBaseline,\n MenuItem,\n Table,\n TableContainer,\n TableBody,\n TableHead,\n TableRow,\n TableCell\n} from '@material-ui/core';\nimport {\n Autocomplete\n} from '@material-ui/lab';\nimport DeleteIcon from '@material-ui/icons/Delete';\n\n\nconst useStyles = makeStyles({\n table: {\n minWidth: 650,\n },\n small: {\n width: 100\n }\n});\n\nconst validate = values => {\n const errors = {};\n if (!values.label) {\n errors.label = 'Required';\n }\n return errors;\n};\n\nconst formFields = [\n {\n size: 12,\n field: (\n <TextField\n label=\"Label\"\n name=\"label\"\n margin=\"none\"\n required={true}\n multiline\n />\n ),\n },\n {\n size: 12,\n field: (\n <TextField\n label=\"Instruction\"\n name=\"instruction\"\n margin=\"none\"\n multiline\n />\n ),\n },\n {\n size: 12,\n field: (\n <TextField\n label=\"Literal\"\n name=\"literal\"\n margin=\"none\"\n required={true}\n multiline\n />\n ),\n },\n {\n type: 'select',\n size: 12,\n field: (options) => (\n <Select\n name=\"horizontal_code_list_id\"\n label=\"Horizontal Code List (X)\"\n formControlProps={{ margin: 'none' }}\n >\n <MenuItem></MenuItem>\n {options.map((item, idx) => (\n <MenuItem value={item.id}>{item.label}</MenuItem>\n ))}\n </Select>\n ),\n },\n {\n type: 'select',\n size: 12,\n field: (options) => (\n <Select\n name=\"vertical_code_list_id\"\n label=\"Vertical Code List (Y)\"\n formControlProps={{ margin: 'none' }}\n >\n <MenuItem></MenuItem>\n {options.map((item, idx) => (\n <MenuItem value={item.id}>{item.label}</MenuItem>\n ))}\n </Select>\n )\n },\n {\n type: 'select',\n size: 12,\n field: (options) => (\n <Select\n name=\"corner_label\"\n label=\"Corner Label\"\n formControlProps={{ margin: 'none' }}\n >\n <MenuItem></MenuItem>\n <MenuItem value='H'>Horizontal</MenuItem>\n <MenuItem value='V'>Vertical</MenuItem>\n </Select>\n )\n },\n {\n size: 12,\n field: (\n <TextField\n label=\"Roster Label\"\n name=\"roster_label\"\n margin=\"none\"\n multiline\n />\n ),\n },\n {\n size: 12,\n field: (\n <TextField\n label=\"Roster Row Number\"\n name=\"roster_rows\"\n margin=\"none\"\n multiline\n />\n ),\n }\n];\n\nexport const QuestionGridForm = (props) => {\n const {questionGrid, instrumentId} = props;\n\n var codeLists = useSelector(state => get(state.codeLists, instrumentId, {}));\n\n // Only show response domains in the list of codeLists\n codeLists = Object.values(codeLists).filter((cl) => { return cl.rd === false})\n\n const dispatch = useDispatch();\n const classes = useStyles();\n\n const onSubmit = (values) => {\n values = ObjectCheckForInitialValues(questionGrid, values)\n\n if(isNil(questionGrid.id)){\n dispatch(QuestionGrids.create(instrumentId, values))\n }else{\n dispatch(QuestionGrids.update(instrumentId, questionGrid.id, values))\n }\n }\n\n const responseDomainCodes = useSelector(state => get(state.responseDomainCodes, instrumentId, {}));\n const responseDomainNumerics = useSelector(state => get(state.responseDomainNumerics, instrumentId, {}));\n const responseDomainTexts = useSelector(state => get(state.responseDomainTexts, instrumentId, {}));\n const responseDomainDatetimes = useSelector(state => get(state.responseDomainDatetimes, instrumentId, {}));\n\n const responseDomains = [...Object.values(responseDomainCodes), ...Object.values(responseDomainNumerics), ...Object.values(responseDomainTexts), ...Object.values(responseDomainDatetimes)]\n\n useEffect(() => {\n dispatch(ResponseDomainCodes.all(instrumentId));\n dispatch(ResponseDomainNumerics.all(instrumentId));\n dispatch(ResponseDomainTexts.all(instrumentId));\n dispatch(ResponseDomainDatetimes.all(instrumentId));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n },[]);\n\n return (\n <div style={{ padding: 0 }}>\n <ObjectStatusBar id={questionGrid.id || 'new'} type={'QuestionGrid'} />\n <CssBaseline />\n <Form\n onSubmit={onSubmit}\n initialValues={questionGrid}\n validate={validate}\n mutators={{\n ...arrayMutators\n }}\n render={({\n handleSubmit,\n form: {\n mutators: { push, pop }\n }, // injected from final-form-arrays above\n pristine,\n form,\n submitting,\n values\n }) => (\n <form onSubmit={handleSubmit} noValidate>\n <Paper style={{ padding: 16 }}>\n <Grid container alignItems=\"flex-start\" spacing={2}>\n {formFields.map((item, idx) => (\n <Grid item xs={item.size} key={idx}>\n {item.type && item.type === 'select'\n ? item.field(codeLists)\n : item.field\n }\n </Grid>\n ))}\n <OnChange name=\"horizontal_code_list_id\">\n {(value, previous) => {\n const codeList = codeLists.find(el => el.id === value)\n if(codeList){\n values.cols = codeList.codes.map((code) => {\n return {\n label: code.label,\n value: code.value,\n order: code.order\n }\n })\n }\n }}\n </OnChange>\n <h3>Response Domains</h3>\n <TableContainer component={Paper}>\n <Table className={classes.table} aria-label=\"simple table\">\n <TableHead>\n <TableRow>\n <TableCell className={classes.small} >Column</TableCell>\n <TableCell>Type and Label</TableCell>\n <TableCell className={classes.small} >Actions</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n <FieldArray name=\"cols\">\n {({ fields }) =>\n fields.map((name, index) => (\n <TableRow key={name}>\n <TableCell className={classes.small} >{fields.value[index].label}</TableCell>\n <TableCell>\n <Autocomplete\n autoComplete\n options={Object.values(responseDomains)}\n getOptionLabel={(option) => (option.type === '') ? `` :`${HumanizeObjectType(option.type)} - ${option.label}`}\n onChange={(event, value, reason)=>{\n var rd;\n if(isNil(value)){\n rd = {...fields.value[index].rd, ...{type: '', id: null, label: ''} }\n }else{\n rd = {...fields.value[index].rd, ...{type: value.type, id: value.id, label: value.label} }\n }\n fields.update(index, {...fields.value[index], ...{rd: rd} })\n } }\n value={(fields.value[index].rd) ? {type: fields.value[index].rd.type, id: fields.value[index].rd.id, label:fields.value[index].rd.label} : {type: '', id: null, label: ''}}\n getOptionSelected= {(option, value) => {\n console.log(fields)\n return (\n (option.type === value.type && option.id === value.id)\n )}}\n renderInput={(params) => (\n <TextField name={`${name}.type - ${name}.label`}\n {...params}\n variant=\"outlined\"\n label=\"Label\"\n placeholder=\"label\"\n />\n )}\n />\n </TableCell>\n <TableCell className={classes.small} >\n <span\n onClick={() => fields.update(index, {...fields.value[index], ...{rd: {type: '', id: null, label: ''} } }) }\n style={{ cursor: 'pointer' }}\n >\n <DeleteIcon />\n </span>\n </TableCell>\n </TableRow>\n ))\n }\n </FieldArray>\n </TableBody>\n </Table>\n </TableContainer>\n <Grid item style={{ marginTop: 16 }}>\n <Button\n type=\"button\"\n variant=\"contained\"\n onClick={form.reset}\n disabled={submitting || pristine}\n >\n Reset\n </Button>\n </Grid>\n <Grid item style={{ marginTop: 16 }}>\n <Button\n variant=\"contained\"\n color=\"primary\"\n type=\"submit\"\n disabled={submitting}\n >\n Submit\n </Button>\n </Grid>\n <DeleteObjectButton id={values.id} instrumentId={instrumentId} action={QuestionGrids} />\n </Grid>\n </Paper>\n </form>\n )}\n />\n </div>\n );\n}\n","import React, { useEffect } from 'react';\nimport { useDispatch, useSelector } from 'react-redux'\nimport { QuestionGrids, CodeLists } from '../actions'\nimport { Dashboard } from '../components/Dashboard'\nimport { QuestionGridForm } from '../components/QuestionGridForm'\nimport { CreateNewBuildObjectButtons } from '../components/CreateNewBuildObjectButtons'\nimport { get, isNil } from \"lodash\";\nimport Grid from '@material-ui/core/Grid';\nimport Paper from '@material-ui/core/Paper';\nimport List from '@material-ui/core/List';\nimport ListItem from '@material-ui/core/ListItem';\nimport ListItemText from '@material-ui/core/ListItemText';\nimport { useHistory } from 'react-router-dom';\nimport { reverse as url } from 'named-urls'\nimport routes from '../routes'\nimport { Link } from 'react-router-dom';\n\nimport { makeStyles } from '@material-ui/core/styles';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n width: '100%',\n backgroundColor: theme.palette.background.paper\n },\n control: {\n width: '100%',\n padding: theme.spacing(2),\n },\n truncate: {\n width: 70,\n 'white-space': 'nowrap',\n overflow: 'hidden',\n 'text-overflow': 'ellipsis'\n }\n}));\n\nconst InstrumentBuildQuestionGrids = (props) => {\n let history = useHistory();\n\n const dispatch = useDispatch()\n const classes = useStyles();\n const [questionGridId, setquestionGridId] = React.useState(get(props, \"match.params.questionGridId\", null));\n\n const instrumentId = get(props, \"match.params.instrument_id\", \"\")\n const questionGrids = useSelector(state => get(state.questionGrids, instrumentId, {}));\n const selectedQuestion = get(questionGrids, questionGridId, {used_by: []})\n\n useEffect(() => {\n dispatch(QuestionGrids.all(instrumentId, () => {\n if(!isNil(questionGridId)){\n // We have to retrieve the selected QuestionGrid because\n // of an unexplained issue where the selected QuestionGrid\n // was turning a blank rd when going through QuestionGrid.all\n // this does not happen when running QuestionGrid.show\n dispatch(QuestionGrids.show(instrumentId, questionGridId));\n }\n }));\n dispatch(CodeLists.all(instrumentId));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n },[]);\n\n useEffect(() => {\n dispatch(QuestionGrids.show(instrumentId, questionGridId));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n },[questionGridId]);\n\n const QuestionGrid = (props) => {\n const {label, id} = props\n const classes = useStyles();\n\n return (\n <ListItem>\n <ListItemText\n className={classes.truncate} primary={label} onClick={()=>{handleQuestionSelection(id)}}/>\n </ListItem>\n )\n }\n\n const handleQuestionSelection = (id) => {\n const path = url(routes.instruments.instrument.build.questionGrids.show, { instrument_id: instrumentId, questionGridId: id })\n history.push(path);\n setquestionGridId(id)\n }\n\n return (\n <div style={{ height: 500, width: '100%' }}>\n <Dashboard title={instrumentId} instrumentId={instrumentId}>\n <Grid container spacing={3}>\n <Grid item xs={3}>\n <Paper className={classes.control}>\n <h2>Question Grids <Link to={url(routes.instruments.instrument.build.questionItems.all, { instrument_id: instrumentId })}>Question Items</Link></h2>\n <CreateNewBuildObjectButtons instrumentId={instrumentId} objectTypes={['QuestionItem', 'QuestionGrid']} callback={setquestionGridId} />\n <List dense={true}>\n {Object.values(questionGrids).map((questionGrid) => {\n return <QuestionGrid label={questionGrid.label} id={questionGrid.id} />\n })}\n </List>\n </Paper>\n </Grid>\n <Grid item xs={9}>\n {!isNil(selectedQuestion) && (\n <QuestionGridForm questionGrid={selectedQuestion} instrumentId={instrumentId} />\n )}\n </Grid>\n </Grid>\n </Dashboard>\n </div>\n );\n}\n\nexport default InstrumentBuildQuestionGrids;\n","import React from 'react';\nimport { get, isNil } from \"lodash\";\nimport { Form } from 'react-final-form';\nimport { useDispatch, useSelector } from 'react-redux'\nimport { ResponseDomainNumerics } from '../actions'\nimport { ObjectStatusBar } from '../components/ObjectStatusBar'\nimport { DeleteObjectButton } from '../components/DeleteObjectButton'\nimport { ObjectCheckForInitialValues } from '../support/ObjectCheckForInitialValues'\nimport arrayMutators from 'final-form-arrays'\n\nimport {\n TextField,\n Select\n} from 'mui-rff';\nimport {\n Paper,\n Grid,\n Button,\n CssBaseline,\n MenuItem\n} from '@material-ui/core';\n\nconst validate = values => {\n const errors = {};\n if (!values.label) {\n errors.label = 'Required';\n }\n if (!values.subtype) {\n errors.subtype = 'Required';\n }\n return errors;\n};\n\nconst formFields = [\n {\n size: 12,\n field: (\n <TextField\n label=\"Label\"\n name=\"label\"\n margin=\"none\"\n required={true}\n />\n ),\n },\n {\n type: 'select',\n size: 12,\n field: (options) => (\n <Select\n name=\"subtype\"\n label=\"Type\"\n formControlProps={{ margin: 'none' }}\n required={true}\n >\n <MenuItem></MenuItem>\n <MenuItem value='Integer'>Integer</MenuItem>\n <MenuItem value='Float'>Float</MenuItem>\n </Select>\n )\n },\n {\n size: 12,\n field: (\n <TextField\n label=\"Min\"\n name=\"min\"\n margin=\"none\"\n />\n ),\n },\n {\n size: 12,\n field: (\n <TextField\n label=\"Max\"\n name=\"max\"\n margin=\"none\"\n />\n ),\n }\n];\n\nexport const ResponseDomainNumericForm = (props) => {\n const {responseDomain, instrumentId} = props;\n\n const codeLists = useSelector(state => get(state.codeLists, instrumentId, {}));\n\n const dispatch = useDispatch();\n\n const onSubmit = (values) => {\n values = ObjectCheckForInitialValues(responseDomain, values)\n\n if(isNil(responseDomain.id)){\n dispatch(ResponseDomainNumerics.create(instrumentId, values))\n }else{\n dispatch(ResponseDomainNumerics.update(instrumentId, responseDomain.id, values))\n }\n }\n\n return (\n <div style={{ padding: 0 }}>\n <ObjectStatusBar id={responseDomain.id || 'new'} type={'ResponseDomain'} />\n <CssBaseline />\n <Form\n onSubmit={onSubmit}\n initialValues={responseDomain}\n validate={validate}\n mutators={{\n ...arrayMutators\n }}\n render={({\n handleSubmit,\n form: {\n mutators: { push, pop }\n }, // injected from final-form-arrays above\n pristine,\n form,\n submitting,\n values\n }) => (\n <form onSubmit={handleSubmit} noValidate>\n <Paper style={{ padding: 16 }}>\n <Grid container alignItems=\"flex-start\" spacing={2}>\n {formFields.map((item, idx) => (\n <Grid item xs={item.size} key={idx}>\n {item.type && item.type === 'select'\n ? item.field(codeLists)\n : item.field\n }\n </Grid>\n ))}\n <Grid item style={{ marginTop: 16 }}>\n <Button\n type=\"button\"\n variant=\"contained\"\n onClick={form.reset}\n disabled={submitting || pristine}\n >\n Reset\n </Button>\n </Grid>\n <Grid item style={{ marginTop: 16 }}>\n <Button\n variant=\"contained\"\n color=\"primary\"\n type=\"submit\"\n disabled={submitting}\n >\n Submit\n </Button>\n </Grid>\n <DeleteObjectButton id={values.id} instrumentId={instrumentId} action={ResponseDomainNumerics} />\n </Grid>\n </Paper>\n </form>\n )}\n />\n </div>\n );\n}\n","import React from 'react';\nimport { get, isNil } from \"lodash\";\nimport { Form } from 'react-final-form';\nimport { useDispatch, useSelector } from 'react-redux'\nimport { ResponseDomainTexts } from '../actions'\nimport { ObjectStatusBar } from '../components/ObjectStatusBar'\nimport { DeleteObjectButton } from '../components/DeleteObjectButton'\nimport { ObjectCheckForInitialValues } from '../support/ObjectCheckForInitialValues'\nimport arrayMutators from 'final-form-arrays'\n\nimport {\n TextField\n} from 'mui-rff';\nimport {\n Paper,\n Grid,\n Button,\n CssBaseline\n} from '@material-ui/core';\n\nconst validate = values => {\n const errors = {};\n if (!values.label) {\n errors.label = 'Required';\n }\n return errors;\n};\n\nconst formFields = [\n {\n size: 12,\n field: (\n <TextField\n label=\"Label\"\n name=\"label\"\n margin=\"none\"\n required={true}\n />\n ),\n },\n {\n size: 12,\n field: (\n <TextField\n label=\"Max Length\"\n name=\"maxlen\"\n margin=\"none\"\n required={true}\n />\n ),\n }\n];\n\nexport const ResponseDomainTextForm = (props) => {\n const {responseDomain, instrumentId} = props;\n\n const codeLists = useSelector(state => get(state.codeLists, instrumentId, {}));\n\n const dispatch = useDispatch();\n\n const onSubmit = (values) => {\n values = ObjectCheckForInitialValues(responseDomain, values)\n\n if(isNil(responseDomain.id)){\n dispatch(ResponseDomainTexts.create(instrumentId, values))\n }else{\n dispatch(ResponseDomainTexts.update(instrumentId, responseDomain.id, values))\n }\n }\n\n return (\n <div style={{ padding: 0 }}>\n <ObjectStatusBar id={responseDomain.id || 'new'} type={'ResponseDomain'} />\n <CssBaseline />\n <Form\n onSubmit={onSubmit}\n initialValues={responseDomain}\n validate={validate}\n mutators={{\n ...arrayMutators\n }}\n render={({\n handleSubmit,\n form: {\n mutators: { push, pop }\n }, // injected from final-form-arrays above\n pristine,\n form,\n submitting,\n values\n }) => (\n <form onSubmit={handleSubmit} noValidate>\n <Paper style={{ padding: 16 }}>\n <Grid container alignItems=\"flex-start\" spacing={2}>\n {formFields.map((item, idx) => (\n <Grid item xs={item.size} key={idx}>\n {item.type && item.type === 'select'\n ? item.field(codeLists)\n : item.field\n }\n </Grid>\n ))}\n <Grid item style={{ marginTop: 16 }}>\n <Button\n type=\"button\"\n variant=\"contained\"\n onClick={form.reset}\n disabled={submitting || pristine}\n >\n Reset\n </Button>\n </Grid>\n <Grid item style={{ marginTop: 16 }}>\n <Button\n variant=\"contained\"\n color=\"primary\"\n type=\"submit\"\n disabled={submitting}\n >\n Submit\n </Button>\n </Grid>\n <DeleteObjectButton id={values.id} instrumentId={instrumentId} action={ResponseDomainTexts} />\n </Grid>\n </Paper>\n </form>\n )}\n />\n </div>\n );\n}\n","import React from 'react';\nimport { get, isNil } from \"lodash\";\nimport { Form, Field } from 'react-final-form';\nimport { useDispatch, useSelector } from 'react-redux'\nimport { ResponseDomainDatetimes } from '../actions'\nimport { ObjectStatusBar } from '../components/ObjectStatusBar'\nimport { DeleteObjectButton } from '../components/DeleteObjectButton'\nimport { ObjectCheckForInitialValues } from '../support/ObjectCheckForInitialValues'\nimport arrayMutators from 'final-form-arrays'\nimport { FieldArray } from 'react-final-form-arrays'\nimport { makeStyles } from '@material-ui/core/styles';\n\nimport {\n TextField,\n Select\n} from 'mui-rff';\nimport {\n Paper,\n Grid,\n Button,\n CssBaseline,\n MenuItem\n} from '@material-ui/core';\n\n\nconst useStyles = makeStyles({\n table: {\n minWidth: 650,\n },\n});\n\nconst validate = values => {\n const errors = {};\n if (!values.label) {\n errors.label = 'Required';\n }\n if (!values.subtype) {\n errors.subtype = 'Required';\n }\n return errors;\n};\n\nconst formFields = [\n {\n size: 12,\n field: (\n <TextField\n label=\"Label\"\n name=\"label\"\n margin=\"none\"\n required={true}\n multiline\n />\n ),\n },\n {\n type: 'select',\n size: 12,\n field: (options) => (\n <Select\n name=\"subtype\"\n label=\"Type\"\n formControlProps={{ margin: 'none' }}\n required={true}\n >\n <MenuItem value=\"Date\">Date</MenuItem>\n <MenuItem value=\"Time\">Time</MenuItem>\n <MenuItem value=\"Duration\">Duration</MenuItem>\n </Select>\n ),\n },\n {\n size: 12,\n visible: (values) => {\n return get(values, 'subtype', '') === 'Duration'\n },\n field: (\n <TextField\n label=\"Format\"\n name=\"format\"\n margin=\"none\"\n multiline\n />\n ),\n }\n];\n\nconst FormField = (props) => {\n const {item, values} = props\n\n if(item.visible !== undefined && !item.visible(values) ){\n return ''\n }\n\n if(item.type && item.type === 'select'){\n return item.field()\n }else{\n return item.field\n }\n}\n\nexport const ResponseDomainDatetimeForm = (props) => {\n const {responseDomain, instrumentId} = props;\n\n const dispatch = useDispatch();\n const classes = useStyles();\n\n const onSubmit = (values) => {\n values = ObjectCheckForInitialValues(responseDomain, values)\n\n if(isNil(responseDomain.id)){\n dispatch(ResponseDomainDatetimes.create(instrumentId, values))\n }else{\n dispatch(ResponseDomainDatetimes.update(instrumentId, responseDomain.id, values))\n }\n }\n\n return (\n <div style={{ padding: 0 }}>\n <ObjectStatusBar id={responseDomain.id || 'new'} type={'ResponseDomain'} />\n <CssBaseline />\n <Form\n onSubmit={onSubmit}\n initialValues={responseDomain}\n validate={validate}\n mutators={{\n ...arrayMutators\n }}\n render={({\n handleSubmit,\n form: {\n mutators: { push, pop }\n }, // injected from final-form-arrays above\n pristine,\n form,\n submitting,\n values\n }) => (\n <form onSubmit={handleSubmit} noValidate>\n <Paper style={{ padding: 16 }}>\n <Grid container alignItems=\"flex-start\" spacing={2}>\n {formFields.map((item, idx) => (\n <Grid item xs={item.size} key={idx}>\n <FormField item={item} values={values} />\n </Grid>\n ))}\n <Grid item style={{ marginTop: 16 }}>\n <Button\n type=\"button\"\n variant=\"contained\"\n onClick={form.reset}\n disabled={submitting || pristine}\n >\n Reset\n </Button>\n </Grid>\n <Grid item style={{ marginTop: 16 }}>\n <Button\n variant=\"contained\"\n color=\"primary\"\n type=\"submit\"\n disabled={submitting}\n >\n Submit\n </Button>\n </Grid>\n <DeleteObjectButton id={values.id} instrumentId={instrumentId} action={ResponseDomainDatetimes} />\n </Grid>\n </Paper>\n </form>\n )}\n />\n </div>\n );\n}\n","import React, { useEffect } from 'react';\nimport { useDispatch, useSelector } from 'react-redux'\nimport { ResponseDomainNumerics, ResponseDomainTexts, ResponseDomainDatetimes } from '../actions'\nimport { Dashboard } from '../components/Dashboard'\nimport { ResponseDomainNumericForm } from '../components/ResponseDomainNumericForm'\nimport { ResponseDomainTextForm } from '../components/ResponseDomainTextForm'\nimport { ResponseDomainDatetimeForm } from '../components/ResponseDomainDatetimeForm'\nimport { CreateNewBuildObjectButtons } from '../components/CreateNewBuildObjectButtons'\nimport { get } from \"lodash\";\nimport Grid from '@material-ui/core/Grid';\nimport Paper from '@material-ui/core/Paper';\nimport List from '@material-ui/core/List';\nimport ListItem from '@material-ui/core/ListItem';\nimport ListItemSecondaryAction from '@material-ui/core/ListItemSecondaryAction';\nimport ListItemText from '@material-ui/core/ListItemText';\nimport Chip from '@material-ui/core/Chip';\nimport { useHistory } from 'react-router-dom';\nimport { reverse as url } from 'named-urls'\nimport routes from '../routes'\nimport { HumanizeObjectType } from '../support/HumanizeObjectType'\n\nimport { makeStyles } from '@material-ui/core/styles';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n width: '100%',\n backgroundColor: theme.palette.background.paper\n },\n control: {\n width: '100%',\n padding: theme.spacing(2),\n },\n truncate: {\n width: 70,\n 'white-space': 'nowrap',\n overflow: 'hidden',\n 'text-overflow': 'ellipsis'\n }\n}));\n\nconst InstrumentBuildResponseDomains = (props) => {\n let history = useHistory();\n\n const dispatch = useDispatch()\n const classes = useStyles();\n\n const instrumentId = get(props, \"match.params.instrument_id\", \"\")\n const responseDomainId = get(props, \"match.params.responseDomainId\", null)\n const responseDomainType = get(props, \"match.params.responseDomainType\", null)\n\n const responseDomainNumerics = useSelector(state => get(state.responseDomainNumerics, instrumentId, {}));\n const responseDomainTexts = useSelector(state => get(state.responseDomainTexts, instrumentId, {}));\n const responseDomainDatetimes = useSelector(state => get(state.responseDomainDatetimes, instrumentId, {}));\n\n const responseDomains = [...Object.values(responseDomainNumerics), ...Object.values(responseDomainTexts), ...Object.values(responseDomainDatetimes)]\n\n const selectedResponseDomain = responseDomains.find(responseDomain => responseDomain.id == responseDomainId && responseDomain.type === responseDomainType) || {};\n\n useEffect(() => {\n dispatch(ResponseDomainNumerics.all(instrumentId));\n dispatch(ResponseDomainTexts.all(instrumentId));\n dispatch(ResponseDomainDatetimes.all(instrumentId));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n },[]);\n\n const ResponseDomainItem = (props) => {\n const {label, type, id} = props\n const classes = useStyles();\n\n return (\n <ListItem>\n <ListItemText\n className={classes.truncate} primary={label} onClick={()=>{handleResponseDomainSelection(type,id)}}/>\n <ListItemSecondaryAction>\n <Chip label={HumanizeObjectType(type)} />\n </ListItemSecondaryAction>\n </ListItem>\n )\n }\n\n const handleResponseDomainSelection = (type, id) => {\n const path = url(routes.instruments.instrument.build.responseDomains.show, { instrument_id: instrumentId, responseDomainType: type, responseDomainId: id })\n history.push(path);\n }\n\n const responseDomainForm = () => {\n switch(responseDomainType) {\n case('ResponseDomainNumeric'):\n return <ResponseDomainNumericForm responseDomain={selectedResponseDomain} instrumentId={instrumentId} />\n case('ResponseDomainText'):\n return <ResponseDomainTextForm responseDomain={selectedResponseDomain} instrumentId={instrumentId} />\n case('ResponseDomainDatetime'):\n return <ResponseDomainDatetimeForm responseDomain={selectedResponseDomain} instrumentId={instrumentId} />\n default:\n return ''\n }\n }\n\n return (\n <div style={{ height: 500, width: '100%' }}>\n <Dashboard title={instrumentId} instrumentId={instrumentId}>\n <Grid container spacing={3}>\n <Grid item xs={3}>\n <Paper className={classes.control}>\n <h2>Response Domains</h2>\n <CreateNewBuildObjectButtons instrumentId={instrumentId} objectTypes={['ResponseDomainText', 'ResponseDomainNumeric', 'ResponseDomainDatetime']} />\n <List dense={true}>\n {Object.values(responseDomains).map((responseDomain) => {\n return <ResponseDomainItem label={responseDomain.label} type={responseDomain.type} id={responseDomain.id} />\n })}\n </List>\n </Paper>\n </Grid>\n <Grid item xs={9}>\n { responseDomainForm() }\n </Grid>\n </Grid>\n </Dashboard>\n </div>\n );\n}\n\nexport default InstrumentBuildResponseDomains;\n","const NoMatch = () => {\n\n return (\n 'NoMatch'\n )\n}\n\nexport default NoMatch;\n","import React, { useEffect, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux'\nimport { Redirect } from 'react-router-dom';\nimport { get } from 'lodash'\n\nconst RedirectFromState = () => {\n const redirect = useSelector(state => get(state.common, 'redirect'));\n const dispatch = useDispatch()\n\n if(redirect){\n return (\n <Redirect to={redirect} />\n )\n }else{\n return ''\n }\n}\n\nexport default RedirectFromState;\n","import React from 'react';\nimport { Switch, BrowserRouter as Router, Redirect, Route } from 'react-router-dom';\n\nimport routes from './routes'\nimport AuthRoute from './AuthRoute'\nimport Login from './pages/Login';\nimport AdminImport from './pages/AdminImport';\nimport AdminImportView from './pages/AdminImportView';\nimport AdminImports from './pages/AdminImports';\nimport AdminInstrumentImportMappings from './pages/AdminInstrumentImportMappings';\nimport AdminInstrumentImportMappingView from './pages/AdminInstrumentImportMappingView';\nimport AdminDatasetImportMappings from './pages/AdminDatasetImportMappings';\nimport AdminDatasetImportMappingView from './pages/AdminDatasetImportMappingView';\nimport AdminInstruments from './pages/AdminInstruments';\nimport AdminInstrumentExports from './pages/AdminInstrumentExports';\nimport AdminDatasets from './pages/AdminDatasets';\nimport Instruments from './pages/Instruments';\nimport Datasets from './pages/Datasets';\nimport DatasetView from './pages/DatasetView';\nimport InstrumentView from './pages/InstrumentView';\nimport InstrumentNew from './pages/InstrumentNew';\nimport InstrumentEdit from './pages/InstrumentEdit';\nimport InstrumentMap from './pages/InstrumentMap';\nimport InstrumentBuild from './pages/InstrumentBuild';\nimport InstrumentCcConditions from './pages/InstrumentCcConditions';\nimport InstrumentCcLoops from './pages/InstrumentCcLoops';\nimport InstrumentCcQuestions from './pages/InstrumentCcQuestions';\nimport InstrumentCcSequences from './pages/InstrumentCcSequences';\nimport InstrumentCcStatements from './pages/InstrumentCcStatements';\nimport InstrumentConstructBuild from './pages/InstrumentConstructBuild';\nimport InstrumentBuildCodeLists from './pages/InstrumentBuildCodeLists';\nimport InstrumentBuildQuestionItems from './pages/InstrumentBuildQuestionItems';\nimport InstrumentBuildQuestionGrids from './pages/InstrumentBuildQuestionGrids';\nimport InstrumentBuildResponseDomains from './pages/InstrumentBuildResponseDomains';\nimport NoMatch from './pages/NoMatch';\nimport RedirectFromState from './components/RedirectFromState';\n\nimport { MuiThemeProvider, createMuiTheme } from '@material-ui/core/styles';\n\nconst theme = createMuiTheme({\n props: {\n // Name of the component ⚛️\n MuiButtonBase: {\n // The properties to apply\n disableRipple: true, // No more ripple, on the whole application 💣!\n },\n },\n palette: {\n primary: {\n main: '#009de6',\n },\n secondary: {\n main: '#652d90',\n },\n admin: {\n main: '#37b34a',\n },\n error: {\n main: '#eb008b',\n },\n warning: {\n main: '#eb008b',\n },\n info: {\n main: '#faaf40',\n },\n success: {\n main: '#37b34a',\n },\n }\n});\n\nconst App = () => {\n\n return (\n <MuiThemeProvider theme={theme}>\n <Router>\n <div>\n <RedirectFromState />\n <Switch>\n <AuthRoute type=\"guest\" exact path={routes.login} component={Login} />\n <Route\n exact\n path=\"/\"\n render={() => {return ( <Redirect to={routes.instruments.all} />)}}\n />\n <AuthRoute type=\"private\" exact path={routes.instruments.instrument.map.show} component={InstrumentMap} />\n <AuthRoute type=\"private\" exact path={routes.instruments.instrument.build.show} component={InstrumentBuild} />\n <AuthRoute type=\"private\" exact path={routes.instruments.new} component={InstrumentNew} />\n <AuthRoute type=\"private\" exact path={routes.instruments.instrument.edit} component={InstrumentEdit} />\n <AuthRoute type=\"private\" exact path={routes.instruments.instrument.show} component={InstrumentView} />\n <AuthRoute type=\"private\" exact path={routes.instruments.instrument.build.codeLists.all} component={InstrumentBuildCodeLists} />\n <AuthRoute type=\"private\" exact path={routes.instruments.instrument.build.codeLists.show} component={InstrumentBuildCodeLists} />\n <AuthRoute type=\"private\" exact path={routes.instruments.instrument.build.codeLists.new} component={InstrumentBuildCodeLists} />\n <AuthRoute type=\"private\" exact path={routes.instruments.instrument.build.questionItems.all} component={InstrumentBuildQuestionItems} />\n <AuthRoute type=\"private\" exact path={routes.instruments.instrument.build.questionItems.show} component={InstrumentBuildQuestionItems} />\n <AuthRoute type=\"private\" exact path={routes.instruments.instrument.build.questionItems.new} component={InstrumentBuildQuestionItems} />\n <AuthRoute type=\"private\" exact path={routes.instruments.instrument.build.questionGrids.all} component={InstrumentBuildQuestionGrids} />\n <AuthRoute type=\"private\" exact path={routes.instruments.instrument.build.questionGrids.show} component={InstrumentBuildQuestionGrids} />\n <AuthRoute type=\"private\" exact path={routes.instruments.instrument.build.questionGrids.new} component={InstrumentBuildQuestionGrids} />\n <AuthRoute type=\"private\" exact path={routes.instruments.instrument.build.responseDomains.all} component={InstrumentBuildResponseDomains} />\n <AuthRoute type=\"private\" exact path={routes.instruments.instrument.build.responseDomains.show} component={InstrumentBuildResponseDomains} />\n <AuthRoute type=\"private\" exact path={routes.instruments.instrument.build.responseDomains.new} component={InstrumentBuildResponseDomains} />\n <AuthRoute type=\"private\" exact path={routes.instruments.instrument.build.constructs.show} component={InstrumentConstructBuild} />\n <AuthRoute type=\"private\" exact path={routes.instruments.instrument.build.ccConditions} component={InstrumentCcConditions} />\n <AuthRoute type=\"private\" exact path={routes.instruments.instrument.build.ccLoops} component={InstrumentCcLoops} />\n <AuthRoute type=\"private\" exact path={routes.instruments.instrument.build.ccQuestions} component={InstrumentCcQuestions} />\n <AuthRoute type=\"private\" exact path={routes.instruments.instrument.build.ccSequences} component={InstrumentCcSequences} />\n <AuthRoute type=\"private\" exact path={routes.instruments.instrument.build.ccStatements} component={InstrumentCcStatements} />\n <AuthRoute type=\"private\" exact path={routes.instruments.all} component={Instruments} />\n <AuthRoute type=\"private\" exact path={routes.datasets.all} component={Datasets} />\n <AuthRoute type=\"private\" exact path={'/datasets/:dataset_id'} component={DatasetView} />\n <AuthRoute type=\"private\" exact path={routes.admin.datasets.all} component={AdminDatasets} />\n <AuthRoute type=\"private\" exact path={routes.admin.import} component={AdminImport} />\n <AuthRoute type=\"private\" exact path={routes.admin.imports.all} component={AdminImports} />\n <AuthRoute type=\"private\" exact path={routes.admin.imports.show} component={AdminImportView} />\n <AuthRoute type=\"private\" exact path={routes.admin.instruments.all} component={AdminInstruments} />\n <AuthRoute type=\"private\" exact path={routes.admin.instruments.exports} component={AdminInstrumentExports} />\n <AuthRoute type=\"private\" exact path={routes.admin.instruments.importMappings} component={AdminInstrumentImportMappings} />\n <AuthRoute type=\"private\" exact path={routes.admin.instruments.importMapping} component={AdminInstrumentImportMappingView} />\n <AuthRoute type=\"private\" exact path={routes.admin.datasets.importMappings} component={AdminDatasetImportMappings} />\n <AuthRoute type=\"private\" exact path={routes.admin.datasets.importMapping} component={AdminDatasetImportMappingView} />\n <AuthRoute type=\"guest\" component={NoMatch} />\n </Switch>\n </div>\n </Router>\n </MuiThemeProvider>\n )\n}\n\nexport default App\n","import { combineReducers } from \"redux\";\nimport { get } from 'lodash'\n\nconst serializeSearchesArrayToObject = (array) =>\n array.reduce((obj, item) => {\n obj[item.prefix] = item\n return obj\n }, {})\n\nconst serializeArrayToObject = (array) =>\n array.reduce((obj, item) => {\n obj[item.id] = item\n return obj\n }, {})\n\nconst auth = (state = { isAuthUser: !!window.localStorage.getItem(\"jwt\") }, action) => {\n\n switch (action.type) {\n\n case 'LOGIN':\n window.localStorage.setItem('jwt', action.payload.jwt);\n return { isAuthUser: true }\n case 'LOGOUT':\n window.localStorage.removeItem('jwt');\n return { isAuthUser: false }\n default:\n return state\n }\n}\n\nconst instrumentTrees = (state = {}, action) => {\n\n switch (action.type) {\n case 'LOAD_INSTRUMENT_TREE':\n return {...state, ...{[action.payload.instrumentId]: action.payload.flatTree}}\n default:\n return state\n }\n}\n\nconst instruments = (state = [], action) => {\n\n switch (action.type) {\n case 'LOAD_INSTRUMENTS':\n return serializeSearchesArrayToObject(action.payload.instruments)\n case 'LOAD_INSTRUMENT':\n return {...state, ...{[action.payload.instrument.prefix]: action.payload.instrument}}\n default:\n return state\n }\n}\n\nconst imports = (state = [], action) => {\n\n switch (action.type) {\n case 'LOAD_ADMIN_IMPORTS':\n return serializeArrayToObject(action.payload.imports)\n case 'LOAD_ADMIN_IMPORT':\n return {...state, ...{[action.payload.import.id]: action.payload.import}}\n default:\n return state\n }\n}\n\nconst datasets = (state = [], action) => {\n switch (action.type) {\n case 'LOAD_DATASETS':\n return serializeArrayToObject(action.payload.datasets)\n case 'LOAD_DATASET':\n return {...state, ...{[action.payload.dataset.id]: action.payload.dataset}}\n default:\n return state\n }\n}\n\nconst instrumentStats = (state = [], action) => {\n\n switch (action.type) {\n case 'LOAD_INSTRUMENT_STATS':\n return {...state, ...{[action.payload.instrumentId]: action.payload.stats}}\n default:\n return state\n }\n}\n\nconst cc_sequences = (state = {}, action) => {\n\n switch (action.type) {\n case 'LOAD_INSTRUMENT_SEQUENCES':\n return {...state, ...{[action.payload.instrumentId]: serializeArrayToObject(action.payload.sequences)}}\n case 'LOAD_INSTRUMENT_SEQUENCE':\n var instrumentSequences = state[action.payload.instrumentId]\n instrumentSequences[action.payload.sequence.id] = action.payload.sequence\n return {...state, ...{[action.payload.instrumentId]: instrumentSequences}}\n default:\n return state\n }\n}\n\nconst cc_statements = (state = {}, action) => {\n\n switch (action.type) {\n case 'LOAD_INSTRUMENT_STATEMENTS':\n return {...state, ...{[action.payload.instrumentId]: serializeArrayToObject(action.payload.statements)}}\n case 'LOAD_INSTRUMENT_STATEMENT':\n var instrumentStatements = state[action.payload.instrumentId]\n instrumentStatements[action.payload.statement.id] = action.payload.statement\n return {...state, ...{[action.payload.instrumentId]: instrumentStatements}}\n default:\n return state\n }\n}\n\nconst cc_conditions = (state = {}, action) => {\n\n switch (action.type) {\n case 'LOAD_INSTRUMENT_CONDITIONS':\n return {...state, ...{[action.payload.instrumentId]: serializeArrayToObject(action.payload.conditions)}}\n case 'LOAD_INSTRUMENT_CONDITION':\n var instrumentConditions = state[action.payload.instrumentId]\n instrumentConditions[action.payload.condition.id] = action.payload.condition\n return {...state, ...{[action.payload.instrumentId]: instrumentConditions}}\n default:\n return state\n }\n}\n\n\nconst cc_loops = (state = {}, action) => {\n\n switch (action.type) {\n case 'LOAD_INSTRUMENT_LOOPS':\n return {...state, ...{[action.payload.instrumentId]: serializeArrayToObject(action.payload.loops)}}\n case 'LOAD_INSTRUMENT_LOOP':\n var instrumentLoops = state[action.payload.instrumentId]\n instrumentLoops[action.payload.loop.id] = action.payload.loop\n return {...state, ...{[action.payload.instrumentId]: instrumentLoops}}\n default:\n return state\n }\n}\n\nconst response_units = (state = {}, action) => {\n\n switch (action.type) {\n case 'LOAD_INSTRUMENT_RESPONSE_UNITS':\n return {...state, ...{[action.payload.instrumentId]: serializeArrayToObject(action.payload.responseUnits)}}\n case 'LOAD_INSTRUMENT_RESPONSE_UNIT':\n var instrumentResponseUnits = state[action.payload.instrumentId]\n instrumentResponseUnits[action.payload.responseUnit.id] = action.payload.responseUnit\n return {...state, ...{[action.payload.instrumentId]: instrumentResponseUnits}}\n default:\n return state\n }\n}\n\nconst cc_questions = (state = {}, action) => {\n\n switch (action.type) {\n case 'LOAD_INSTRUMENT_QUESTIONS':\n return {...state, ...{[action.payload.instrumentId]: serializeArrayToObject(action.payload.questions)}}\n case 'LOAD_INSTRUMENT_QUESTION':\n var instrumentQuestions = state[action.payload.instrumentId]\n instrumentQuestions[action.payload.question.id] = action.payload.question\n return {...state, ...{[action.payload.instrumentId]: instrumentQuestions}}\n default:\n return state\n }\n}\n\nconst questionItems = (state = {}, action) => {\n\n switch (action.type) {\n case 'LOAD_INSTRUMENT_QUESTION_ITEMS':\n return {...state, ...{[action.payload.instrumentId]: serializeArrayToObject(action.payload.questions)}}\n case 'LOAD_INSTRUMENT_QUESTION_ITEM':\n var questionItems = get(state, action.payload.instrumentId, {})\n const revisedQuestionItems = {...questionItems, ...{[action.payload.questionItem.id]: action.payload.questionItem}}\n return {...state, ...{[action.payload.instrumentId]: revisedQuestionItems}}\n case 'DELETE_INSTRUMENT_OBJECT_TYPE':\n if(action.payload.objectType === 'QuestionItem'){\n var objects = get(state, action.payload.instrumentId, {})\n delete objects[action.payload.id]\n return {...state, ...{[action.payload.instrumentId]: objects}}\n }else{\n return state\n }\n default:\n return state\n }\n}\n\nconst questionGrids = (state = {}, action) => {\n\n switch (action.type) {\n case 'LOAD_INSTRUMENT_QUESTION_GRIDS':\n return {...state, ...{[action.payload.instrumentId]: serializeArrayToObject(action.payload.questions)}}\n case 'LOAD_INSTRUMENT_QUESTION_GRID':\n var questionGrids = get(state, action.payload.instrumentId, {})\n const revisedQuestionGrids = {...questionGrids, ...{[action.payload.questionGrid.id]: action.payload.questionGrid}}\n return {...state, ...{[action.payload.instrumentId]: revisedQuestionGrids}}\n case 'DELETE_INSTRUMENT_OBJECT_TYPE':\n if(action.payload.objectType === 'QuestionGrid'){\n var objects = get(state, action.payload.instrumentId, {})\n delete objects[action.payload.id]\n return {...state, ...{[action.payload.instrumentId]: objects}}\n }else{\n return state\n }\n default:\n return state\n }\n}\n\nconst variables = (state = {}, action) => {\n\n switch (action.type) {\n case 'LOAD_INSTRUMENT_VARIABLES':\n return {...state, ...{[action.payload.instrumentId]: serializeArrayToObject(action.payload.variables)}}\n default:\n return state\n }\n}\n\nconst datasetVariables = (state = {}, action) => {\n\n switch (action.type) {\n case 'LOAD_DATASET_VARIABLES':\n return {...state, ...{[action.payload.datasetId]: serializeArrayToObject(action.payload.variables)}}\n case 'LOAD_DATASET_VARIABLE':\n var variables = get(state, action.payload.datasetId, {})\n const revisedVariables = {...variables, ...{[action.payload.variable.id]: action.payload.variable}}\n return {...state, ...{[action.payload.datasetId]: revisedVariables}}\n default:\n return state\n }\n}\n\nconst datasetImportMappings = (state = {}, action) => {\n\n switch (action.type) {\n case 'LOAD_DATASET_IMPORT_MAPPINGS':\n return {...state, ...{[action.payload.id]: serializeArrayToObject(action.payload.importMappings)}}\n case 'LOAD_DATASET_IMPORT_MAPPING':\n var importMappings = get(state, action.payload.parentId, {})\n const revisedImportMappings = {...importMappings, ...{[action.payload.importMapping.id]: action.payload.importMapping}}\n return {...state, ...{[action.payload.parentId]: revisedImportMappings}}\n default:\n return state\n }\n}\n\nconst instrumentImportMappings = (state = {}, action) => {\n\n switch (action.type) {\n case 'LOAD_INSTRUMENT_IMPORT_MAPPINGS':\n return {...state, ...{[action.payload.id]: serializeArrayToObject(action.payload.importMappings)}}\n case 'LOAD_INSTRUMENT_IMPORT_MAPPING':\n var importMappings = get(state, action.payload.parentId, {})\n const revisedImportMappings = {...importMappings, ...{[action.payload.importMapping.id]: action.payload.importMapping}}\n return {...state, ...{[action.payload.parentId]: revisedImportMappings}}\n default:\n return state\n }\n}\n\nconst codeLists = (state = {}, action) => {\n\n switch (action.type) {\n case 'LOAD_INSTRUMENT_CODE_LISTS':\n return {...state, ...{[action.payload.instrumentId]: serializeArrayToObject(action.payload.codeLists)}}\n case 'LOAD_INSTRUMENT_CODE_LIST':\n var codeLists = get(state, action.payload.instrumentId, {})\n const revisedCodeLists = {...codeLists, ...{[action.payload.codeList.id]: action.payload.codeList}}\n return {...state, ...{[action.payload.instrumentId]: revisedCodeLists}}\n case 'DELETE_INSTRUMENT_OBJECT_TYPE':\n if(action.payload.objectType === 'CodeList'){\n var codeLists = get(state, action.payload.instrumentId, {})\n delete codeLists[action.payload.id]\n return {...state, ...{[action.payload.instrumentId]: codeLists}}\n }else{\n return state\n }\n default:\n return state\n }\n}\n\nconst responseDomainNumerics = (state = {}, action) => {\n\n switch (action.type) {\n case 'LOAD_INSTRUMENT_RESPONSE_DOMAIN_NUMERICS':\n return {...state, ...{[action.payload.instrumentId]: serializeArrayToObject(action.payload.responseDomainNumerics)}}\n case 'LOAD_INSTRUMENT_RESPONSE_DOMAIN_NUMERIC':\n var responseDomainNumerics = get(state, action.payload.instrumentId, {})\n const revisedResponseDomains = {...responseDomainNumerics, ...{[action.payload.responseDomainNumeric.id]: action.payload.responseDomainNumeric}}\n return {...state, ...{[action.payload.instrumentId]: revisedResponseDomains}}\n case 'DELETE_INSTRUMENT_OBJECT_TYPE':\n if(action.payload.objectType === 'ResponseDomainNumeric'){\n var objects = get(state, action.payload.instrumentId, {})\n delete objects[action.payload.id]\n return {...state, ...{[action.payload.instrumentId]: objects}}\n }else{\n return state\n }\n default:\n return state\n }\n}\n\nconst responseDomainCodes = (state = {}, action) => {\n\n switch (action.type) {\n case 'LOAD_INSTRUMENT_RESPONSE_DOMAIN_CODES':\n return {...state, ...{[action.payload.instrumentId]: serializeArrayToObject(action.payload.responseDomainCodes)}}\n default:\n return state\n }\n}\n\nconst responseDomainTexts = (state = {}, action) => {\n\n switch (action.type) {\n case 'LOAD_INSTRUMENT_RESPONSE_DOMAIN_TEXTS':\n return {...state, ...{[action.payload.instrumentId]: serializeArrayToObject(action.payload.responseDomainTexts)}}\n case 'LOAD_INSTRUMENT_RESPONSE_DOMAIN_TEXT':\n var responseDomainTexts = get(state, action.payload.instrumentId, {})\n const revisedResponseDomains = {...responseDomainTexts, ...{[action.payload.responseDomainText.id]: action.payload.responseDomainText}}\n return {...state, ...{[action.payload.instrumentId]: revisedResponseDomains}}\n case 'DELETE_INSTRUMENT_OBJECT_TYPE':\n if(action.payload.objectType === 'ResponseDomainText'){\n var objects = get(state, action.payload.instrumentId, {})\n delete objects[action.payload.id]\n return {...state, ...{[action.payload.instrumentId]: objects}}\n }else{\n return state\n }\n default:\n return state\n }\n}\n\nconst responseDomainDatetimes = (state = {}, action) => {\n\n switch (action.type) {\n case 'LOAD_INSTRUMENT_RESPONSE_DOMAIN_DATETIMES':\n return {...state, ...{[action.payload.instrumentId]: serializeArrayToObject(action.payload.responseDomainDatetimes)}}\n case 'LOAD_INSTRUMENT_RESPONSE_DOMAIN_DATETIME':\n var responseDomainDatetimes = get(state, action.payload.instrumentId, {})\n const revisedResponseDomains = {...responseDomainDatetimes, ...{[action.payload.responseDomainDatetime.id]: action.payload.responseDomainDatetime}}\n return {...state, ...{[action.payload.instrumentId]: revisedResponseDomains}}\n case 'DELETE_INSTRUMENT_OBJECT_TYPE':\n if(action.payload.objectType === 'ResponseDomainDatetime'){\n var objects = get(state, action.payload.instrumentId, {})\n delete objects[action.payload.id]\n return {...state, ...{[action.payload.instrumentId]: objects}}\n }else{\n return state\n }\n default:\n return state\n }\n}\n\nconst categories = (state = {}, action) => {\n\n switch (action.type) {\n case 'LOAD_INSTRUMENT_CATEGORIES':\n return {...state, ...{[action.payload.instrumentId]: serializeArrayToObject(action.payload.categories)}}\n default:\n return state\n }\n}\n\nconst topics = (state = {}, action) => {\n\n switch (action.type) {\n case 'LOAD_TOPICS':\n return {...state, ...serializeArrayToObject(action.payload.topics)}\n default:\n return state\n }\n}\n\nconst statuses = (state = {}, action) => {\n\n var key;\n\n switch (action.type) {\n case 'CLEAR':\n key = action.payload.type + ':' + action.payload.id\n return {...state, ...{[key]: {}}}\n case 'SAVING':\n key = action.payload.type + ':' + action.payload.id\n return {...state, ...{[key]: {saving: true}}}\n case 'SAVED':\n key = action.payload.type + ':' + action.payload.id\n return {...state, ...{[key]: {saved: true}}}\n case 'ERROR':\n key = action.payload.type + ':' + action.payload.id\n if(typeof action.payload.error === 'object' && action.payload.error !== null){\n return {...state, ...{[key]: {error: true, errors: action.payload.error, errorMessage: ''}}}\n }else{\n return {...state, ...{[key]: {error: true, errorMessage: action.payload.error}}}\n }\n default:\n return state\n }\n}\n\nconst common = (state = {}, action) => {\n\n switch (action.type) {\n case 'REDIRECT':\n return {...state, ...{redirect: action.payload.to}}\n case 'REDIRECT_CLEAR':\n return {...state, ...{redirect: undefined}}\n default:\n return state\n }\n}\n\n\nconst appReducer = combineReducers({\n common,\n auth,\n datasets,\n instruments,\n instrumentTrees,\n imports,\n instrumentStats,\n cc_sequences,\n cc_statements,\n cc_conditions,\n cc_loops,\n cc_questions,\n response_units,\n questionItems,\n questionGrids,\n categories,\n codeLists,\n responseDomainNumerics,\n responseDomainTexts,\n responseDomainDatetimes,\n responseDomainCodes,\n datasetVariables,\n variables,\n statuses,\n topics,\n datasetImportMappings,\n instrumentImportMappings,\n})\n\nexport default appReducer;\n","import { applyMiddleware, createStore } from \"redux\";\nimport reducers from \"./../reducers\";\nimport thunk from \"redux-thunk\"\n\nexport default createStore(reducers, applyMiddleware(thunk));\n","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.0/8 are considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n);\n\nexport function register(config) {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\n );\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl, config) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker == null) {\n return;\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n 'New content is available and will be used when all ' +\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\n );\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.');\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch(error => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl, config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl, {\n headers: { 'Service-Worker': 'script' },\n })\n .then(response => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get('content-type');\n if (\n response.status === 404 ||\n (contentType != null && contentType.indexOf('javascript') === -1)\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log(\n 'No internet connection found. App is running in offline mode.'\n );\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready\n .then(registration => {\n registration.unregister();\n })\n .catch(error => {\n console.error(error.message);\n });\n }\n}\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport { Provider } from 'react-redux';\nimport App from './App';\nimport Store from './components/Store';\nimport * as serviceWorker from './serviceWorker';\n\nReactDOM.render(\n <Provider store={Store}>\n <App />\n </Provider>,\n document.getElementById('root')\n);\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: https://bit.ly/CRA-PWA\nserviceWorker.unregister();\n"],"sourceRoot":""}