CLOSER-Cohorts/archivist

View on GitHub
public/static/js/main.db00e497.chunk.js.map

Summary

Maintainability
Test Coverage
{"version":3,"sources":["routes.js","AuthRoute.js","actions/index.js","pages/Login.js","components/BreadcrumbBar.js","components/Dashboard.js","pages/Instruments.js","pages/InstrumentMap.js","pages/InstrumentBuild.js","components/ObjectStatusBar.js","components/DeleteObjectButton.js","support/ObjectCheckForInitialValues.js","support/ObjectColour.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","instruments","include","all","instrument","map","show","build","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","Instrument","request","get","headers","dispatch","then","res","instrumentsFetchSuccess","data","catch","err","fetchFailure","message","id","instrumentFetchSuccess","instrumentStatsFetchSuccess","instrumentId","values","post","updates","console","log","Categories","categoriesFetchSuccess","categories","payload","CodeLists","codeListsFetchSuccess","update","codeListId","put","savingItem","savedItem","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","ResponseDomainTexts","responseDomainTextsFetchSuccess","responseDomainTextId","responseDomainTextFetchSuccess","responseDomainTexts","responseDomainText","ResponseDomainDatetimes","responseDomainDatetimesFetchSuccess","responseDomainDatetimeId","responseDomainDatetimeFetchSuccess","responseDomainDatetimes","responseDomainDatetime","Variables","variablesFetchSuccess","Topics","topicsFetchSuccess","topics","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","breadcrumbs","crumbs","push","params","capturingRegex","found","pathname","match","RegExp","paramsFromPath","subtype","buildBreadcrumbs","Paper","Breadcrumbs","separator","fontSize","aria-label","breadcrumb","Copyright","align","Date","getFullYear","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","ListItem","button","ListItemIcon","ListItemText","primary","Dashboard","open","setOpen","charSet","AppBar","clsx","Toolbar","IconButton","edge","onClick","noWrap","Drawer","src","alt","style","Divider","List","maxHeight","Grid","item","xs","children","Box","pt","Instruments","page","setPage","rowsPerPage","setRowsPerPage","rows","Object","useEffect","Table","size","TableHead","TableRow","TableCell","TableBody","slice","row","key","prefix","ccs","qvs","study","TableFooter","TablePagination","rowsPerPageOptions","colSpan","count","length","onChangePage","event","newPage","onChangeRowsPerPage","parseInt","SelectProps","inputProps","native","background","control","nested","paddingLeft","ObjectFinder","cc_sequences","cc_statements","cc_conditions","cc_questions","allQuestionItems","allQuestionGrids","toString","question_type","question_id","QuestionItemListItem","literal","statuses","ObjectStatus","isNil","Alert","severity","AlertTitle","errorMessage","Chip","saving","saved","deleteIcon","TopicList","textAlign","handleChange","reason","FormControl","formControl","InputLabel","htmlFor","Select","level","defaultValue","VariableList","allVariables","variableOptions","difference","filter","x","includes","newVariables","variable","join","oldVariables","Autocomplete","multiple","options","getOptionLabel","option","filterSelectedOptions","renderInput","placeholder","getOptionSelected","ConditionItem","aria-labelledby","Collapse","in","timeout","unmountOnExit","disablePadding","child","SequenceItem","InstrumentMap","undefined","find","element","top","m","InstrumentBuild","instrumentStats","code_lists","response_domain_datetimes","response_domain_numerics","response_domain_texts","question_items","question_grids","instructions","cc_loops","StatCount","ListItemSecondaryAction","dense","ObjectStatusBar","DeleteObjectButton","action","confirm","ObjectCheckForInitialValues","initialValues","initialValuesWithEmptyFields","keys","reduce","acc","Array","isArray","merge","ObjectColour","table","minWidth","boxShadow","formFields","field","CcConditionForm","ccCondition","path","newObject","node","validate","errors","mutators","arrayMutators","render","handleSubmit","pristine","pop","submitting","idx","reset","disabled","formControlProps","MenuItem","CcQuestionForm","ccQuestion","allResponseUnits","response_units","questionOptions","setQuestionOptions","error_key","previous","CcStatementForm","ccStatement","CcSequenceForm","ccSequence","CcLoopForm","ccLoop","start_val","loop_var","TreeNode","fchildren","trueAndFalse","expanded","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","onRequestSearch","newValue","onCancelSearch","ButtonGroup","divider","startIcon","newTreeData","canNodeHaveChildren","canDrop","nextParent","prevPath","nextPath","canDrag","searchMethod","searchQuery","toLowerCase","searchFocusOffset","searchFinishCallback","matches","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","rd","cols","codes","code","order","InstrumentBuildQuestionGrids","setquestionGridId","QuestionGrid","ResponseDomainNumericForm","responseDomain","ResponseDomainTextForm","ResponseDomainDatetimeForm","InstrumentBuildResponseDomains","selectedResponseDomain","ResponseDomainItem","handleResponseDomainSelection","responseDomainForm","NoMatch","RedirectFromState","redirect","common","createMuiTheme","warning","info","success","App","exact","serializeSearchesArrayToObject","array","obj","serializeArrayToObject","appReducer","combineReducers","setItem","jwt","instrumentSequences","instrumentStatements","instrumentConditions","instrumentLoops","instrumentQuestions","instrumentResponseUnits","responseUnit","revisedQuestionItems","objects","revisedQuestionGrids","revisedCodeLists","revisedResponseDomains","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.db00e497.chunk.js","sourcesContent":["import { include } from 'named-urls'\n\nexport default {\n   login : '/login',\n   instruments: include('/instruments', {\n      all: '',\n      instrument: include(':instrument_id/', {\n         map: include('map/', {\n            show: ''\n        }),\n        build: include('build/', {\n            show: '',\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 Instrument = {\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 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 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 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 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  const buildBreadcrumbs = () => {\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.map.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              console.log(params)\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","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'\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  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    overflow: 'auto',\n    flexDirection: 'column',\n  },\n  fixedHeight: {\n    height: 240,\n  },\n}));\n\nexport const mainListItems = (\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      <ListItemText primary=\"Datasets\" />\n    </ListItem>\n    <ListItem button>\n      <ListItemIcon>\n        <LabelIcon />\n      </ListItemIcon>\n      <ListItemText primary=\"Topics\" />\n    </ListItem>\n    <ListItem button>\n      <ListItemIcon>\n        <SupervisedUserCircleIcon />\n      </ListItemIcon>\n      <ListItemText primary=\"Admin\" />\n    </ListItem>\n  </div>\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        <List>{mainListItems}</List>\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, { useEffect } from 'react';\nimport { useDispatch, useSelector } from 'react-redux'\nimport { Instrument } from '../actions'\nimport { Dashboard } from '../components/Dashboard'\nimport { Link } from 'react-router-dom';\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 { reverse as url } from 'named-urls'\nimport routes from '../routes'\n\nconst Instruments = () => {\n\n  const dispatch = useDispatch()\n  const instruments = useSelector(state => state.instruments);\n  const [page, setPage] = React.useState(0);\n  const [rowsPerPage, setRowsPerPage] = React.useState(20);\n\n  const rows: RowsProp = Object.values(instruments);\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(Instrument.all());\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  },[]);\n\n  return (\n    <div style={{ height: 500, width: '100%' }}>\n      <Dashboard title={'Instruments'}>\n        <Table size=\"small\">\n          <TableHead>\n            <TableRow>\n              <TableCell>ID</TableCell>\n              <TableCell>Prefix</TableCell>\n              <TableCell>Control Constructs</TableCell>\n              <TableCell>Q-V Mappings</TableCell>\n              <TableCell>Study</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.prefix}</TableCell>\n                <TableCell>{row.ccs}</TableCell>\n                <TableCell>{row.qvs}</TableCell>\n                <TableCell>{row.study}</TableCell>\n                <TableCell>\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                </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 Instruments;\n","import React, { useEffect } 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 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 BounceLoader from \"react-spinners/BounceLoader\";\nimport SyncLoader from \"react-spinners/SyncLoader\";\nimport { Box } from '@material-ui/core'\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 status = ObjectStatus(item.id, 'CcQuestion')\n\n  return (\n      <ListItem>\n      <Paper className={classes.control}>\n      <Grid container spacing={3}>\n          { !isEmpty(status) && !isNil(status.error) && (\n            <div className={classes.root}>\n              <Alert severity=\"error\">\n                <AlertTitle>Error</AlertTitle>\n                {status.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          </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    <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  );\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  useEffect(() => {\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    // 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        <h1>{get(instrument, 'label')}</h1>\n      {isNil(sequence)\n        ? <Box m=\"auto\"><BounceLoader color={'#009de6'}/></Box>\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 { 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 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.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        <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                  <StatCount label=\"Conditions\" value={cc_conditions} />\n                  <StatCount label=\"Loops\" value={cc_loops} />\n                  <StatCount label=\"Questions\" value={cc_questions} />\n                  <StatCount label=\"Sequences\" value={cc_sequences} />\n                  <StatCount label=\"Statements\" value={cc_statements} />\n              </List>\n            </Paper>\n          </Grid>\n        </Grid>\n      </Dashboard>\n    </div>\n  );\n}\n\nexport default InstrumentBuild;\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{\n    return ''\n  }\n}\n","import React from 'react'\nimport {isNil} from 'lodash'\nimport { useDispatch } from 'react-redux'\n\nimport {\n  Grid,\n  Button\n} from '@material-ui/core';\n\nexport const DeleteObjectButton = (props) => {\n  const {instrumentId, id, action, onDelete= () => { console.log('No delete callback provided') }} = props;\n\n  const dispatch=useDispatch()\n\n  const handleDelete = () => {\n    if( !isNil(id) && window.confirm('Are you sure you want to delete this?')){\n      dispatch(action.delete(instrumentId, id, onDelete))\n    }\n  }\n\n  if(isNil(id)){\n    return ''\n  }\n\n  return (\n    <Grid item style={{ marginTop: 16 }}>\n      <Button\n        variant=\"contained\"\n        color=\"secondary\"\n        onClick={()=>{handleDelete()}}\n      >\n        Delete\n      </Button>\n    </Grid>\n  )\n}\n","import { 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","export const ObjectColour = (type) => {\n   switch (type){\n      case 'statement':\n         return '652d90' // Purple;\n      case 'loop':\n         return '37b34a' // Green;\n      case 'question':\n         return '00adee' // Pale Blue;\n      case 'sequence':\n         return 'faaf40' // Orange;\n      case 'condition':\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 { 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 } 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 { FieldArray } from 'react-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        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  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                  </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 { get, isNil } from \"lodash\";\nimport { Form } from 'react-final-form';\nimport { useDispatch, useSelector } 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 { 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('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      }\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, Variables, Topics, 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 { 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 List from '@material-ui/core/List';\nimport ListItem from '@material-ui/core/ListItem';\nimport ListItemText from '@material-ui/core/ListItemText';\nimport Badge from '@material-ui/core/Badge';\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 InputLabel from '@material-ui/core/InputLabel';\nimport Select from '@material-ui/core/Select';\nimport BounceLoader from \"react-spinners/BounceLoader\";\nimport SyncLoader from \"react-spinners/SyncLoader\";\nimport { Box } from '@material-ui/core'\nimport AddIcon from '@material-ui/icons/Add';\nimport DeleteIcon from '@material-ui/icons/Delete';\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  TextField,\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) => {\n  var item = ObjectFinder(instrumentId, type, id)\n  if(item.type === \"condition\"){\n    var children = get(item, 'children',[])\n    var fchildren = get(item, 'fchildren',[])\n\n    var trueAndFalse = [\n      { title: `True`, expanded: true, conditionId: item.id, type: 'conditionTrue', children: children.map(child => TreeNode(instrumentId, child.type, child.id)) },\n      { title: `False`, expanded: true, conditionId: item.id, type: 'conditionFalse', children: fchildren.map(child => TreeNode(instrumentId, child.type, child.id)) },\n    ]\n    return {...item, ...{ title: `${item.label}`, expanded: true, type: item.type, children: trueAndFalse } }\n  }else{\n    var children = get(item, 'children',[])\n\n    return {...item, ...{ title: `${item.label}`, expanded: true, 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)]);\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          &nbsp;\n          {searchFoundCount > 0 ? searchFocusIndex + 1 : 0}\n          &nbsp;of&nbsp;\n          {searchFoundCount || 0} matches\n        </span>\n        <ButtonGroup color=\"primary\" aria-label=\"outlined primary button group\">\n          <Button onClick={selectPrevMatch}>&lt; Prev</Button>\n          <Button onClick={selectNextMatch}>&gt; 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 ) ? `5px 5px 15px 5px  #${ObjectColour(node.type)}` : ''\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            }\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, {})\n  const statements = useSelector(state => state.cc_statements);\n  const cc_statements = get(statements, instrumentId, {})\n  const conditions = useSelector(state => state.cc_conditions);\n  const cc_conditions = get(conditions, instrumentId, {})\n  const questions = useSelector(state => state.cc_questions);\n  const cc_questions = get(questions, instrumentId, {})\n  const allQuestionItems = useSelector(state => state.questionItems);\n  const questionItems = get(allQuestionItems, instrumentId, {})\n  const allQuestionGrids = useSelector(state => state.questionGrids);\n  const questionGrids = get(allQuestionGrids, instrumentId, {})\n  const loops = useSelector(state => state.cc_loops);\n  const cc_loops = get(loops, instrumentId, {})\n\n  const [selectedNode, setSelectedNode] = useState({});\n\n  useEffect(() => {\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    // 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={'Build'} instrumentId={instrumentId}>\n        <h1>{get(instrument, 'label')}</h1>\n      {isNil(sequence) || isNil(statements)  || isNil(conditions) || isNil(questionItems)  || isNil(questions)\n        ? <Box m=\"auto\"><BounceLoader color={'#009de6'}/></Box>\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 } 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 categories = useSelector(state => get(state.categories, instrumentId, {}));\n\n  const dispatch = useDispatch();\n  const classes = useStyles();\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 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(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 } 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 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  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  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                                  freesolo=\"true\"\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                                    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 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 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, 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.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, Field } 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'\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></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  const classes = useStyles();\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, Field } 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'\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  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  const classes = useStyles();\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, 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'\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  const createNew = (type) => {\n    const path = url(routes.instruments.instrument.build.responseDomains.show, { instrument_id: instrumentId, responseDomainType: type, responseDomainId: 'new' })\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>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 Instruments from './pages/Instruments';\nimport InstrumentMap from './pages/InstrumentMap';\nimport InstrumentBuild from './pages/InstrumentBuild';\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  palette: {\n    primary: {\n      main: '#009de6',\n    },\n    secondary: {\n      main: '#652d90',\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.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.all} component={Instruments} />\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    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 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 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 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    instruments,\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    variables,\n    statuses,\n    topics\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":""}