public/static/js/main.10597a1c.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/AdminImportMappingsTable.js","components/AdminImportMappingsForm.js","components/Loader.js","pages/AdminInstrumentImportMappings.js","pages/AdminDatasetImportMappings.js","components/DataTable.js","pages/AdminInstruments.js","pages/AdminDatasets.js","pages/Instruments.js","pages/Datasets.js","pages/DatasetView.js","components/InstrumentHeading.js","support/HumanizeObjectType.js","pages/InstrumentView.js","pages/InstrumentMap.js","pages/InstrumentBuild.js","pages/InstrumentCcConditions.js","pages/InstrumentCcLoops.js","pages/InstrumentCcQuestions.js","pages/InstrumentCcSequences.js","pages/InstrumentCcStatements.js","components/DeleteObjectButton.js","support/ObjectCheckForInitialValues.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","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","importMappings","instrument","map","build","ccConditions","ccLoops","ccQuestions","ccSequences","ccStatements","constructs","codeLists","new","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","Dataset","request","get","headers","dispatch","then","res","datasetsFetchSuccess","data","catch","err","fetchFailure","message","id","datasetFetchSuccess","AdminInstrument","values","formData","FormData","append","files","post","savingItem","savedItem","console","log","AdminDataset","AdminImportMapping","imp","file","importsFetchSuccess","AdminImport","importFetchSuccess","Instrument","instrumentsFetchSuccess","instrumentFetchSuccess","instrumentStatsFetchSuccess","instrumentId","updates","Categories","categoriesFetchSuccess","categories","payload","CodeLists","codeListsFetchSuccess","update","codeListId","put","codeListFetchSuccess","saveError","error_sentence","create","redirectTo","instrument_id","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","questionGridsFetchSuccess","questionGridId","questionGridFetchSuccess","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","open","setOpen","ListItem","button","ListItemIcon","ListItemText","primary","onClick","style","Collapse","in","timeout","unmountOnExit","List","disablePadding","Dashboard","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","AdminImportMappingsTable","ButtonGroup","AdminImportMappingsForm","hint","types","Array","from","JSON","stringify","Loader","m","shuffle","AdminInstrumentImportMappings","instrumentImportMappings","dataLoaded","setDataLoaded","AdminDatasetImportMappings","datasetImportMappings","DataTable","actions","fetch","stateKey","searchKey","rowRenderer","parentStateKey","search","setSearch","filteredValues","setFilteredValues","filter","toLowerCase","includes","placeholder","newValue","onRequestSearch","onCancelSearch","header","cell","AdminInstruments","prefix","study","AdminDatasets","Instruments","ccs","qvs","Datasets","dataset_id","dvs","DatasetView","datasetVariables","SourcesList","sourceOptions","opt","difference","handleChange","reason","newSources","oldSources","Autocomplete","options","getOptionLabel","option","filterSelectedOptions","renderInput","getOptionSelected","var_type","InstrumentHeading","mode","slug","HumanizeObjectType","control","ObjectFinder","cc_sequences","cc_statements","cc_conditions","cc_questions","allQuestionItems","allQuestionGrids","toString","question_type","question_id","constructLabelClasses","CcCondition","background","CcStatement","CcQuestion","ConstructLabel","Chip","QuestionItemListItem","literal","rds","ResponseDomains","responseDomainClasses","listStyleType","rd","codes","maxlen","code","StatementListItem","ConditionItem","handleClick","aria-labelledby","logic","child","StyledListItem","SequenceItem","withStyles","borderRadius","border","textTransform","InstrumentView","undefined","find","element","top","resolvedTopic","resolvedTopicId","saving","deleteIcon","VariableList","TopicList","textAlign","FormControl","formControl","InputLabel","htmlFor","Select","level","defaultValue","allVariables","variableOptions","newVariables","join","oldVariables","InstrumentMap","InstrumentBuild","instrumentStats","code_lists","response_domain_datetimes","response_domain_numerics","response_domain_texts","question_items","question_grids","instructions","cc_loops","StatCount","ListItemSecondaryAction","dense","InstrumentCcConditions","InstrumentCcLoops","start_val","end_val","loop_while","InstrumentCcQuestions","base_label","response_unit_label","InstrumentCcSequences","InstrumentCcStatements","DeleteObjectButton","action","confirm","ObjectCheckForInitialValues","initialValuesWithEmptyFields","keys","reduce","acc","isArray","merge","CcConditionForm","ccCondition","path","newObject","node","arrayMutators","reset","formControlProps","MenuItem","CcQuestionForm","ccQuestion","allResponseUnits","response_units","questionOptions","setQuestionOptions","error_key","previous","rdOptions","intervieweeOptions","CcStatementForm","ccStatement","CcSequenceForm","ccSequence","CcLoopForm","ccLoop","loop_var","TreeNode","expanded","fchildren","trueAndFalse","conditionId","Tree","topSequence","onNodeSelect","treeData","setTreeData","selectedNode","setSelectedNode","searchString","setSearchString","searchFocusIndex","setSearchFocusIndex","searchFoundCount","setSearchFoundCount","getNodeKey","treeIndex","canHaveChildren","toggleExpand","toggleExpandedForAll","reorderConstructs","getFlatDataFromTree","ignoreCollapsed","parent","branch","indexOf","el","orderArray","generateButtons","buttons","addNodeUnderParent","parentKey","expandParent","newNode","stopPropagation","divider","startIcon","newTreeData","canNodeHaveChildren","canDrop","nextParent","prevPath","nextPath","canDrag","searchMethod","searchQuery","searchFocusOffset","searchFinishCallback","generateNodeProps","callback","changeNodeAtPath","updateNode","deleteCallback","removeNodeAtPath","deleteNode","side","right","ConstructForm","NewConstructQuestion","InstrumentConstructBuild","visible","multiline","FormField","CodeListForm","TableContainer","fields","index","freesolo","category_id","cursor","used_by","CreateNewBuildObjectButtons","objectTypes","history","useHistory","ObjectTypeLookup","InstrumentBuildCodeLists","selectedCodeList","CodeListItem","handleCodeListSelection","QuestionItemForm","InstrumentBuildQuestionItems","selectedQuestion","QuestionItem","handleQuestionSelection","QuestionGridForm","cl","cols","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","obj","appReducer","combineReducers","setItem","jwt","instrumentSequences","instrumentStatements","instrumentConditions","instrumentLoops","instrumentQuestions","instrumentResponseUnits","responseUnit","revisedQuestionItems","objects","revisedQuestionGrids","revisedCodeLists","revisedResponseDomains","revisedVariables","revisedImportMappings","importMapping","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.10597a1c.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 importMappings: ':instrumentId/imports'\n }),\n datasets: include('datasets/', {\n all: '',\n importMappings: ':datasetId/imports'\n }),\n }),\n instruments: include('/instruments', {\n all: '',\n instrument: include(':instrument_id/', {\n show: '',\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 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, values) => {\n let formData = new FormData();\n\n values.imports.map((imp) => {\n formData.append('imports[0][file]', imp.file)\n })\n const request = axios.post(api_host + '/' + type + '/' + id + '/imports.json', formData, {\n headers: {...api_headers(), ...{'Content-Type': 'multipart/form-data'}}\n })\n return (dispatch) => {\n dispatch(savingItem('new', 'AdminImportMappings'));\n return request.then(res => {\n dispatch(savedItem('new', 'AdminImportMappings'));\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(importsFetchSuccess(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 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 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: res.data.id })));\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: res.data.id })));\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) => {\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, 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: res.data.id })));\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: res.data.id })));\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: res.data.id })));\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: res.data.id })));\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 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 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 = () => {\n const classes = useStyles();\n const [open, setOpen] = React.useState(true);\n\n const handleClick = () => {\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 <StorageIcon />\n </ListItemIcon>\n <Link to={url(routes.datasets.all)}>\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 </List>\n </Collapse>\n </div>\n )\n}\n\nexport const Dashboard = (props) => {\n const classes = useStyles();\n const [open, setOpen] = React.useState(true);\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 />\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 ButtonGroup from '@material-ui/core/ButtonGroup';\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\nexport const AdminImportMappingsTable = ({values}) => {\n\n const [page, setPage] = React.useState(0);\n const [rowsPerPage, setRowsPerPage] = React.useState(20);\n\n const rows: RowsProp = values;\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 return (\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.file}</TableCell>\n <TableCell>{row.type}</TableCell>\n <TableCell>{row.state}</TableCell>\n <TableCell>{row.created_at}</TableCell>\n <TableCell>\n <ButtonGroup variant=\"outlined\">\n <Button>\n View Log\n </Button>\n </ButtonGroup>\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","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) => {\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, 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 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)}\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) => {\n return (\n <div>\n {file.name}\n <select onChange={(e) => { values.types[file.name] = e.target.value; }} required>\n <option></option>\n <option value=\"topicv\" class=\"ng-binding\">T-V Mapping</option>\n <option value=\"dv\" class=\"ng-binding\">DV Mapping</option>\n </select>\n </div>\n )\n })}\n <pre>{JSON.stringify(values, 0, 2)}</pre>\n <Grid item style={{ marginTop: 16 }}>\n {hint}\n <Button\n variant=\"contained\"\n color=\"primary\"\n type=\"submit\"\n disabled={false}\n >\n Import {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 { useDispatch, useSelector } from 'react-redux'\nimport { Dashboard } from '../components/Dashboard'\nimport { AdminImportMappingsTable } from '../components/AdminImportMappingsTable'\nimport { AdminImportMappingsForm } from '../components/AdminImportMappingsForm'\nimport { Loader } from '../components/Loader'\nimport { AdminImportMapping } from '../actions'\nimport { get } from 'lodash';\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(AdminImportMapping.create('instruments', instrumentId, values))\n }\n const values = Object.values(useSelector(state => state.instrumentImportMappings));\n\n const [dataLoaded, setDataLoaded] = useState(false);\n useEffect(() => {\n Promise.all([\n dispatch(AdminImportMapping.all('instruments',instrumentId)),\n ]).then(() => {\n setDataLoaded(true)\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n },[]);\n\n return (\n <div style={{ height: 500, width: '100%' }}>\n <Dashboard title={'Instruments Import Mappings'}>\n {!dataLoaded\n ? <Loader />\n : (\n <>\n <AdminImportMappingsForm type={type} hint={hint} onSubmit={onSubmit} />\n <AdminImportMappingsTable values={values} />\n </>\n )}\n </Dashboard>\n </div>\n );\n}\n\nexport default AdminInstrumentImportMappings;\n","import React, { useEffect, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux'\nimport { Dashboard } from '../components/Dashboard'\nimport { AdminImportMappingsTable } from '../components/AdminImportMappingsTable'\nimport { AdminImportMappingsForm } from '../components/AdminImportMappingsForm'\nimport { Loader } from '../components/Loader'\nimport { AdminImportMapping } from '../actions'\nimport { get } from 'lodash';\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(AdminImportMapping.create('datasets', datasetId, {\n imports: Array.from(values.files).map((file) => {\n console.log(file)\n console.log({ file: file, type: values.types[file.name]})\n return { file: file, type: values.types[file.name]}\n })\n }\n ))\n }\n const values = Object.values(useSelector(state => state.datasetImportMappings));\n\n const [dataLoaded, setDataLoaded] = useState(false);\n useEffect(() => {\n Promise.all([\n dispatch(AdminImportMapping.all('datasets',datasetId)),\n ]).then(() => {\n setDataLoaded(true)\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n },[]);\n\n return (\n <div style={{ height: 500, width: '100%' }}>\n <Dashboard title={'Datasets Import Mappings'}>\n {!dataLoaded\n ? <Loader />\n : (\n <>\n <AdminImportMappingsForm type={type} hint={hint} onSubmit={onSubmit} />\n <AdminImportMappingsTable values={values} />\n </>\n )}\n </Dashboard>\n </div>\n );\n}\n\nexport default AdminDatasetImportMappings;\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 value[searchKey] && value[searchKey].toLowerCase().includes(search.toLowerCase())\n )\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 (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","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'\n\nconst AdminInstruments = () => {\n\n const dispatch = useDispatch()\n\n const actions = (row) => {\n return (\n <>\n <ButtonGroup variant=\"outlined\">\n <Button>\n Edit\n </Button>\n <Button>\n Copy\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 QV\n </Button>\n <Button>\n Topics\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 <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 { 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 { 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 <Button variant=\"outlined\">\n <Link to={url(routes.instruments.instrument.show, { instrument_id: row.prefix })}>View</Link>\n </Button>\n <Button variant=\"outlined\">\n <Link to={url(routes.instruments.instrument.build.show, { instrument_id: row.prefix })}>Build</Link>\n </Button>\n <Button variant=\"outlined\">\n <Link to={url(routes.instruments.instrument.map.show, { instrument_id: row.prefix })}>Map</Link>\n </Button>\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 } 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 } from 'lodash'\n\nconst DatasetView = (props) => {\n\n const dispatch = useDispatch()\n const datasetId = get(props, \"match.params.dataset_id\", \"\")\n\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\n const rows: RowsProp = Object.values(variables);\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 ]).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 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 />\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}\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 <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 <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>{get(row.topic, 'name')}</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 </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","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 default:\n return ''\n }\n}\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 { 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 { HumanizeObjectType } from '../support/HumanizeObjectType'\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';\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\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 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={`${HumanizeObjectType(type)} : ${item.label}`} className={classes[type]}/>)\n}\n\nconst QuestionItemListItem = (props) => {\n const {type, id, instrumentId} = props\n const item = ObjectFinder(instrumentId, type, id)\n\n if(isNil(item.question)){\n return ''\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.question.literal}\n {(item.question.rds) && (\n <ResponseDomains rds={item.question.rds} />\n )}\n </Grid>\n </Grid>\n )\n}\n\nconst responseDomainClasses = makeStyles((theme) => ({\n root: {\n listStyleType:'none'\n }\n}));\n\nconst ResponseDomains = ({ rds }) => {\n const classes = responseDomainClasses();\n return rds.map((rd) => {\n switch (rd.type) {\n case 'ResponseDomainCode':\n return(<ul className={classes.root}><ResponseDomainCodes codes={rd.codes} /></ul>)\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>Value : {code.value} </em> = {code.label}</li>)\n })\n}\n\nconst QuestionGridListItem = (props) => {\n\n return (\n <div>This is a Question Grid</div>\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 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 {!isEmpty(item.children) && (\n <Collapse in={open} timeout=\"auto\" unmountOnExit>\n <List component=\"div\" disablePadding>\n {item.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 <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 return null;\n }\n })()}\n </StyledListItem>\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 <QuestionItemListItem 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 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(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 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 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(topicId) && !isNil(resolvedTopicId) && (\n <em>Resolved topic from variables - { get(resolvedTopic,'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","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 { 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 { 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 />\n ),\n },\n {\n size: 12,\n field: (\n <TextField\n label=\"Literal\"\n name=\"literal\"\n margin=\"none\"\n required={true}\n />\n ),\n },\n {\n size: 12,\n field: (\n <TextField\n label=\"Logic\"\n name=\"logic\"\n margin=\"none\"\n required={true}\n />\n ),\n },\n];\n\nexport const CcConditionForm = (props) => {\n const {ccCondition, instrumentId, onChange, path, onDelete} = 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 }))\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 />\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} = 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 }))\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 />\n ),\n },\n {\n size: 12,\n field: (\n <TextField\n label=\"Literal\"\n name=\"literal\"\n margin=\"none\"\n required={false}\n />\n ),\n },\n];\n\nexport const CcStatementForm = (props) => {\n const {ccStatement, instrumentId, onChange, path, onDelete} = 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 }))\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 />\n ),\n },\n];\n\nexport const CcSequenceForm = (props) => {\n const {ccSequence, instrumentId, onChange, path, onDelete} = 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 }))\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 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={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 />\n ),\n },\n {\n size: 12,\n field: (\n <TextField\n label=\"Variable\"\n name=\"loop_var\"\n margin=\"none\"\n required={true}\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 />\n ),\n },\n {\n size: 12,\n field: (\n <TextField\n label=\"End Value\"\n name=\"end_val\"\n margin=\"none\"\n />\n ),\n },\n {\n size: 12,\n field: (\n <TextField\n label=\"Loop While\"\n name=\"loop_while\"\n margin=\"none\"\n />\n ),\n }\n];\n\nexport const CcLoopForm = (props) => {\n const {ccLoop, instrumentId, onChange, path, onDelete} = 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 }))\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 } from '../actions'\nimport { Dashboard } from '../components/Dashboard'\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';\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: `True`, expanded: expanded, conditionId: item.id, type: 'conditionTrue', children: children.map(child => TreeNode(instrumentId, child.type, child.id)) },\n { title: `False`, 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 return {...item, ...{ title: `${item.label}`, expanded: true, type: item.type } }\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// 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 (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 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 return null\n }\n let parent = path[path.length - 2]\n let branch = (parent !== undefined && parent.type === 'conditionFalse') ? 1 : 0\n if(parent !== undefined && ['conditionTrue', 'conditionFalse'].includes(parent.type)){\n parent = path[path.length - 3]\n }\n return {\n id: node.id,\n type: node.type,\n position: (parent !== undefined) ? parent.children.indexOf(`type ${node.type} id ${node.id}`) + 1 : node.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 }}).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 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: {\n title: `Click to select construct type`,\n children: []\n }\n }).treeData)\n event.stopPropagation()\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\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\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 }) }, 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\n switch (node.type) {\n case 'question':\n return <CcQuestionForm ccQuestion={node} instrumentId={instrumentId} path={path} onChange={callback} onDelete={deleteCallback} />\n case 'statement':\n return <CcStatementForm ccStatement={node} instrumentId={instrumentId} path={path} onChange={callback} onDelete={deleteCallback} />\n case 'sequence':\n return <CcSequenceForm ccSequence={node} instrumentId={instrumentId} path={path} onChange={callback} onDelete={deleteCallback} />\n case 'condition':\n return <CcConditionForm ccCondition={node} instrumentId={instrumentId} path={path} onChange={callback} onDelete={deleteCallback} />\n case 'loop':\n return <CcLoopForm ccLoop={node} instrumentId={instrumentId} path={path} onChange={callback} onDelete={deleteCallback} />\n case undefined:\n return <NewConstructQuestion onNodeSelect={onNodeSelect} object={object}/>\n default:\n return ''\n }\n\n}\n\nconst NewConstructQuestion = (props) => {\n const {object, onNodeSelect} = props;\n\n const classes = useStyles();\n\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 }})\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 </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 </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});\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 <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: 16, margin: 'auto', maxWidth: 1000 }}>\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>ID</TableCell>\n <TableCell size=\"small\">Value</TableCell>\n <TableCell>Label</TableCell>\n <TableCell>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>\n {fields.value[index].id}\n </TableCell>\n <TableCell 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>\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 side: {\n position: 'absolute',\n width: '50%',\n },\n control: {\n width: '100%',\n padding: theme.spacing(2),\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 return (\n <ListItem>\n <ListItemText\n 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={4}>\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={8}>\n <Paper className={classes.side}>\n {!isNil(selectedCodeList) && (\n <CodeListForm codeList={selectedCodeList} instrumentId={instrumentId} />\n )}\n </Paper>\n </Grid>\n </Grid>\n </Dashboard>\n </div>\n );\n}\n\nexport default InstrumentBuildCodeLists;\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';\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});\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=\"Instruction\"\n name=\"instruction\"\n margin=\"none\"\n />\n ),\n },\n {\n size: 12,\n field: (\n <TextField\n label=\"Literal\"\n name=\"literal\"\n margin=\"none\"\n required={true}\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: 16, margin: 'auto', maxWidth: 1000 }}>\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>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) => `${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>\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 side: {\n position: 'absolute',\n width: '50%',\n },\n control: {\n width: '100%',\n padding: theme.spacing(2),\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 return (\n <ListItem>\n <ListItemText\n 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={4}>\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={8}>\n <Paper className={classes.side}>\n {!isNil(selectedQuestion) && (\n <QuestionItemForm questionItem={selectedQuestion} instrumentId={instrumentId} />\n )}\n </Paper>\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';\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});\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=\"Instruction\"\n name=\"instruction\"\n margin=\"none\"\n />\n ),\n },\n {\n size: 12,\n field: (\n <TextField\n label=\"Literal\"\n name=\"literal\"\n margin=\"none\"\n required={true}\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 />\n ),\n },\n {\n size: 12,\n field: (\n <TextField\n label=\"Roster Row Number\"\n name=\"roster_rows\"\n margin=\"none\"\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 console.log(questionGrid)\n return (\n <div style={{ padding: 16, margin: 'auto', maxWidth: 1000 }}>\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>Column</TableCell>\n <TableCell>Type and Label</TableCell>\n <TableCell>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>{fields.value[index].label}</TableCell>\n <TableCell>\n <Autocomplete\n autoComplete\n options={Object.values(responseDomains)}\n getOptionLabel={(option) => (option.type === '') ? `` :`${option.label} - ${option.type}`}\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>\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 side: {\n position: 'absolute',\n width: '50%',\n },\n control: {\n width: '100%',\n padding: theme.spacing(2),\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 dispatch(CodeLists.all(instrumentId));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n },[]);\n\n const QuestionGrid = (props) => {\n const {label, id} = props\n return (\n <ListItem>\n <ListItemText\n 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={4}>\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={8}>\n <Paper className={classes.side}>\n {!isNil(selectedQuestion) && (\n <QuestionGridForm questionGrid={selectedQuestion} instrumentId={instrumentId} />\n )}\n </Paper>\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: 16, margin: 'auto', maxWidth: 1000 }}>\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: 16, margin: 'auto', maxWidth: 1000 }}>\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 />\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 />\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: 16, margin: 'auto', maxWidth: 1000 }}>\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'\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 side: {\n position: 'absolute',\n width: '50%',\n },\n control: {\n width: '100%',\n padding: theme.spacing(2),\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 return (\n <ListItem>\n <ListItemText\n primary={label} onClick={()=>{handleResponseDomainSelection(type,id)}}/>\n <ListItemSecondaryAction>\n <Chip label={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={4}>\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={8}>\n <Paper className={classes.side}>\n { responseDomainForm() }\n </Paper>\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 AdminDatasetImportMappings from './pages/AdminDatasetImportMappings';\nimport AdminInstruments from './pages/AdminInstruments';\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 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.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.importMappings} component={AdminInstrumentImportMappings} />\n <AuthRoute type=\"private\" exact path={routes.admin.datasets.importMappings} component={AdminDatasetImportMappings} />\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 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.id, {})\n const revisedImportMappings = {...importMappings, ...{[action.payload.importMapping.id]: action.payload.importMapping}}\n return {...state, ...{[action.payload.datasetId]: 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.id, {})\n const revisedImportMappings = {...importMappings, ...{[action.payload.importMapping.id]: action.payload.importMapping}}\n return {...state, ...{[action.payload.datasetId]: 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 '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 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":""}