CLOSER-Cohorts/archivist

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

Summary

Maintainability
Test Coverage
{"version":3,"sources":["routes.js","AuthRoute.js","actions/index.js","pages/Login.js","components/Dashboard.js","pages/Instruments.js","pages/InstrumentMap.js","pages/InstrumentBuild.js","components/ObjectStatusBar.js","components/CodeListForm.js","pages/InstrumentBuildCodeLists.js","components/QuestionItemForm.js","pages/InstrumentBuildQuestionItems.js","components/QuestionGridForm.js","pages/InstrumentBuildQuestionGrids.js","components/ResponseDomainForm.js","pages/InstrumentBuildResponseDomains.js","pages/NoMatch.js","App.js","reducers/index.js","components/Store.js","serviceWorker.js","index.js"],"names":["login","instruments","include","all","instrument","map","show","build","codeLists","new","questionItems","questionGrids","responseDomains","AuthRoute","props","isAuthUser","useSelector","state","auth","type","to","url","routes","api_host","process","REACT_APP_API_HOST","alert","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","Categories","instrumentId","categoriesFetchSuccess","categories","payload","CodeLists","codeListsFetchSuccess","codeListId","values","put","codeListFetchSuccess","saveError","error_sentence","post","codeList","CcSequences","ccSequencesFetchSuccess","sequences","CcStatements","ccStatementsFetchSuccess","statements","CcConditions","ccConditionsFetchSuccess","conditions","CcQuestions","ccQuestionsFetchSuccess","set","ccQuestionId","topicId","savingItem","savedItem","ccQuestionFetchSuccess","add","variableNames","remove","variableId","questions","question","QuestionItems","questionItemsFetchSuccess","questionItemId","questionItemFetchSuccess","questionItem","QuestionGrids","questionGridsFetchSuccess","questionGridId","questionGridFetchSuccess","questionGrid","ResponseDomainNumerics","responseDomainNumericsFetchSuccess","responseDomainNumericId","responseDomainNumericFetchSuccess","responseDomainNumerics","responseDomainNumeric","Variables","variablesFetchSuccess","variables","Topics","topicsFetchSuccess","topics","stats","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","Copyright","align","Date","getFullYear","root","toolbar","paddingRight","toolbarIcon","justifyContent","padding","mixins","appBar","zIndex","drawer","transition","transitions","create","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","aria-label","onClick","noWrap","Drawer","Divider","List","Grid","item","xs","Paper","children","Box","pt","Instruments","page","setPage","rowsPerPage","setRowsPerPage","rows","Object","useEffect","style","Table","size","TableHead","TableRow","TableCell","TableBody","slice","row","key","prefix","ccs","qvs","study","instrument_id","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","isEmpty","literal","topic","statuses","ObjectStatus","isNil","Alert","severity","AlertTitle","errorMessage","Chip","saving","saved","deleteIcon","TopicList","textAlign","text","FormControl","formControl","InputLabel","htmlFor","Select","defaultValue","reason","level","VariableList","allVariables","variableOptions","difference","handleChange","filter","x","includes","newVariables","variable","join","oldVariables","Autocomplete","multiple","options","getOptionLabel","option","filterSelectedOptions","renderInput","params","placeholder","getOptionSelected","ConditionItem","aria-labelledby","Collapse","in","timeout","unmountOnExit","disablePadding","child","console","log","SequenceItem","InstrumentMap","seq","sequence","InstrumentBuild","instrumentStats","code_lists","response_domain_datetimes","response_domain_numerics","response_domain_texts","question_items","question_grids","instructions","cc_loops","StatCount","ListItemSecondaryAction","dense","ObjectStatusBar","table","minWidth","validate","errors","formFields","field","formControlProps","multiline","CodeListForm","initialValues","mutators","arrayMutators","render","handleSubmit","push","pristine","pop","submitting","idx","TableContainer","fields","index","freesolo","update","category_id","cursor","reset","disabled","used_by","JSON","stringify","InstrumentBuildCodeLists","history","useHistory","setcodeListId","selectedCodeList","CodeListItem","handleCodeListSelection","path","QuestionItemForm","InstrumentBuildQuestionItems","setquestionItemId","selectedQuestion","QuestionItem","handleQuestionSelection","MenuItem","QuestionGridForm","InstrumentBuildQuestionGrids","setquestionGridId","QuestionGrid","ResponseDomainForm","responseDomain","InstrumentBuildResponseDomains","responseDomainId","setresponseDomainId","selectedResponseDomain","ResponseDomainItem","handleResponseDomainSelection","NoMatch","App","exact","serializeSearchesArrayToObject","array","reduce","obj","serializeArrayToObject","appReducer","combineReducers","action","setItem","jwt","instrumentQuestions","revisedQuestionItems","revisedQuestionGrids","revisedCodeLists","revisedResponseDomains","createStore","reducers","applyMiddleware","thunk","Boolean","hostname","match","ReactDOM","store","Store","document","getElementById","navigator","serviceWorker","ready","registration","unregister"],"mappings":"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","file":"static/js/main.ac338163.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            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            })\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\";\n\nconst api_host = process.env.REACT_APP_API_HOST\nalert(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}\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        return request.then(res => {\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        return request.then(res => {\n          dispatch(codeListFetchSuccess(instrumentId, res.data));\n        })\n        .catch(err => {\n          dispatch(saveError('new', '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}\n\nconst ccSequencesFetchSuccess = (instrumentId, sequences) => ({\n  type: 'LOAD_INSTRUMENT_SEQUENCES',\n  payload: {\n    instrumentId: instrumentId,\n    sequences: sequences\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}\n\nconst ccStatementsFetchSuccess = (instrumentId, statements) => ({\n  type: 'LOAD_INSTRUMENT_STATEMENTS',\n  payload: {\n    instrumentId: instrumentId,\n    statements: statements\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}\n\nconst ccConditionsFetchSuccess = (instrumentId, conditions) => ({\n  type: 'LOAD_INSTRUMENT_CONDITIONS',\n  payload: {\n    instrumentId: instrumentId,\n    conditions: conditions\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  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        return request.then(res => {\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        return request.then(res => {\n          dispatch(questionItemFetchSuccess(instrumentId, res.data));\n        })\n        .catch(err => {\n          dispatch(saveError('new', '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        return request.then(res => {\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        return request.then(res => {\n          dispatch(questionGridFetchSuccess(instrumentId, res.data));\n        })\n        .catch(err => {\n          dispatch(saveError('new', '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        return request.then(res => {\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        return request.then(res => {\n          dispatch(responseDomainNumericFetchSuccess(instrumentId, res.data));\n        })\n        .catch(err => {\n          dispatch(saveError('new', '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 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 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","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 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'\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        <DashboardIcon />\n      </ListItemIcon>\n      <ListItemText primary=\"Dashboard\" />\n    </ListItem>\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(false);\n  const dispatch = useDispatch();\n\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          <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} className={classes.container}>\n          <Grid container spacing={3}>\n            <Grid item xs={12}>\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 { 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                  <Link to={url(routes.instruments.instrument.build.show, { instrument_id: row.prefix })}>Build</Link>\n                  <Link to={url(routes.instruments.instrument.map.show, { instrument_id: row.prefix })}>Map</Link>\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';\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\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\"></Chip>\n            )}\n            { !isEmpty(status) && !isNil(status.saved) && (\n              <Chip label=\"Saved\" color=\"secondary\" 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={topic.id} 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 'Fetching topics'\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  return (\n    <div style={{ height: 500, width: '100%' }}>\n      <Dashboard title={'Maps'}>\n        <h1>{get(instrument, 'label')}</h1>\n        {Object.values(cc_sequences).filter(seq => seq.position === 1).map((sequence) => (\n          <SequenceItem instrumentId={instrumentId} type={'CcSequence'} id={sequence.id} title={sequence.label} children={sequence.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}>\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>Constructs</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 } from 'react-redux'\nimport { Alert, AlertTitle } from '@material-ui/lab';\nimport { isEmpty, isNil, get } from 'lodash'\n\nconst 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 { 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 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';\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    field: <TextField name=\"min_responses\" multiline label=\"Min Responses\" margin=\"none\" />,\n  },\n  {\n    size: 12,\n    field: <TextField name=\"max_responses\" multiline label=\"Max Responses\" margin=\"none\" />,\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    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                    {item.field}\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                <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                                      {question.id}\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            <pre>{JSON.stringify(values, 0, 2)}</pre>\n          </form>\n        )}\n      />\n    </div>\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 { 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  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, setcodeListId] = React.useState(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    setcodeListId(id)\n  }\n\n  return (\n    <div style={{ height: 500, width: '100%' }}>\n      <Dashboard title={instrumentId}>\n        <Grid container spacing={3}>\n          <Grid item xs={4}>\n            <Paper className={classes.control}>\n              <h2>Code Lists</h2>\n              <List dense={true}>\n                {Object.values(codeLists).map((codeList) => {\n                  return <CodeListItem label={codeList.label} value={codeList.used_by.length} id={codeList.id} />\n                })}\n              </List>\n            </Paper>\n          </Grid>\n          <Grid item xs={8}>\n            <Paper className={classes.control}>\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 from 'react';\nimport { get, isNil } from \"lodash\";\nimport { Form } from 'react-final-form';\nimport { useDispatch, useSelector } from 'react-redux'\nimport { QuestionItems } from '../actions'\nimport { ObjectStatusBar } from '../components/ObjectStatusBar'\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} 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=\"Instruction\"\n        name=\"instruction\"\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\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 onSubmit = (values) => {\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  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                <Grid item style={{ marginTop: 16 }}>\n                  <Button\n                    type=\"button\"\n                    variant=\"contained\"\n                    onClick={form.reset}\n                    disabled={submitting || pristine}\n                  >\n                    Reset\n                  </Button>\n                </Grid>\n                <Grid item style={{ marginTop: 16 }}>\n                  <Button\n                    variant=\"contained\"\n                    color=\"primary\"\n                    type=\"submit\"\n                    disabled={submitting}\n                  >\n                    Submit\n                  </Button>\n                </Grid>\n              </Grid>\n            </Paper>\n            <pre>{JSON.stringify(values, 0, 2)}</pre>\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 { get, isNil } from \"lodash\";\nimport Grid from '@material-ui/core/Grid';\nimport Paper from '@material-ui/core/Paper';\nimport List from '@material-ui/core/List';\nimport ListItem from '@material-ui/core/ListItem';\nimport ListItemSecondaryAction from '@material-ui/core/ListItemSecondaryAction';\nimport ListItemText from '@material-ui/core/ListItemText';\nimport Chip from '@material-ui/core/Chip';\nimport { useHistory } from 'react-router-dom';\nimport { reverse as url } from 'named-urls'\nimport routes from '../routes'\nimport { Link } from 'react-router-dom';\n\nimport { makeStyles } from '@material-ui/core/styles';\n\nconst useStyles = makeStyles((theme) => ({\n  root: {\n    width: '100%',\n    backgroundColor: theme.palette.background.paper\n  },\n  control: {\n    width: '100%',\n    padding: theme.spacing(2),\n  }\n}));\n\nconst InstrumentBuildQuestionItems = (props) => {\n  let history = useHistory();\n\n  const dispatch = useDispatch()\n  const classes = useStyles();\n  const [questionItemId, setquestionItemId] = React.useState(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    setquestionItemId(id)\n  }\n\n  return (\n    <div style={{ height: 500, width: '100%' }}>\n      <Dashboard title={instrumentId}>\n        <Grid container spacing={3}>\n          <Grid item xs={4}>\n            <Paper className={classes.control}>\n              <h2>Question Items</h2>\n              <Link to={url(routes.instruments.instrument.build.questionGrids.all, { instrument_id: instrumentId })}>Question Grids</Link>\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.control}>\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 from 'react';\nimport { get, isNil } from \"lodash\";\nimport { Form, Field } from 'react-final-form';\nimport { useDispatch, useSelector } from 'react-redux'\nimport { QuestionGrids } from '../actions'\nimport { ObjectStatusBar } from '../components/ObjectStatusBar'\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=\"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        {Object.values(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          {Object.values(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  const codeLists = useSelector(state => get(state.codeLists, instrumentId, {}));\n\n  const dispatch = useDispatch();\n  const classes = useStyles();\n\n  const onSubmit = (values) => {\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  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                <Grid item style={{ marginTop: 16 }}>\n                  <Button\n                    type=\"button\"\n                    variant=\"contained\"\n                    onClick={form.reset}\n                    disabled={submitting || pristine}\n                  >\n                    Reset\n                  </Button>\n                </Grid>\n                <Grid item style={{ marginTop: 16 }}>\n                  <Button\n                    variant=\"contained\"\n                    color=\"primary\"\n                    type=\"submit\"\n                    disabled={submitting}\n                  >\n                    Submit\n                  </Button>\n                </Grid>\n              </Grid>\n            </Paper>\n            <pre>{JSON.stringify(values, 0, 2)}</pre>\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 { get, isNil } from \"lodash\";\nimport Grid from '@material-ui/core/Grid';\nimport Paper from '@material-ui/core/Paper';\nimport List from '@material-ui/core/List';\nimport ListItem from '@material-ui/core/ListItem';\nimport ListItemSecondaryAction from '@material-ui/core/ListItemSecondaryAction';\nimport ListItemText from '@material-ui/core/ListItemText';\nimport Chip from '@material-ui/core/Chip';\nimport { useHistory } from 'react-router-dom';\nimport { reverse as url } from 'named-urls'\nimport routes from '../routes'\nimport { Link } from 'react-router-dom';\n\nimport { makeStyles } from '@material-ui/core/styles';\n\nconst useStyles = makeStyles((theme) => ({\n  root: {\n    width: '100%',\n    backgroundColor: theme.palette.background.paper\n  },\n  control: {\n    width: '100%',\n    padding: theme.spacing(2),\n  }\n}));\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}>\n        <Grid container spacing={3}>\n          <Grid item xs={4}>\n            <Paper className={classes.control}>\n              <h2>Question Grids</h2>\n              <Link to={url(routes.instruments.instrument.build.questionItems.all, { instrument_id: instrumentId })}>Question Items</Link>\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.control}>\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 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=\"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        {Object.values(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          {Object.values(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 ResponseDomainForm = (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    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              </Grid>\n            </Paper>\n            <pre>{JSON.stringify(values, 0, 2)}</pre>\n          </form>\n        )}\n      />\n    </div>\n  );\n}\n","import React, { useEffect } from 'react';\nimport { useDispatch, useSelector } from 'react-redux'\nimport { ResponseDomainNumerics } from '../actions'\nimport { Dashboard } from '../components/Dashboard'\nimport { ResponseDomainForm } from '../components/ResponseDomainForm'\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  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  const [responseDomainId, setresponseDomainId] = React.useState(get(props, \"match.params.responseDomainId\", null));\n\n  const instrumentId = get(props, \"match.params.instrument_id\", \"\")\n  const responseDomainNumerics = useSelector(state => get(state.responseDomainNumerics, instrumentId, {}));\n  console.log(responseDomainNumerics)\n  const responseDomains = Object.values(responseDomainNumerics)\n  console.log(responseDomains)\n  const selectedResponseDomain = get(responseDomains, responseDomainId, {used_by: []})\n\n  useEffect(() => {\n    dispatch(ResponseDomainNumerics.all(instrumentId));\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  },[]);\n\n  const ResponseDomainItem = (props) => {\n    const {label, value, id} = props\n    return (\n      <ListItem>\n        <ListItemText\n          primary={label} onClick={()=>{handleResponseDomainSelection(id)}}/>\n        <ListItemSecondaryAction>\n          <Chip label={value} />\n        </ListItemSecondaryAction>\n      </ListItem>\n    )\n  }\n\n  const handleResponseDomainSelection = (id) => {\n    const path = url(routes.instruments.instrument.build.responseDomains.show, { instrument_id: instrumentId, responseDomainId: id })\n    history.push(path);\n    setresponseDomainId(id)\n  }\n\n  return (\n    <div style={{ height: 500, width: '100%' }}>\n      <Dashboard title={instrumentId}>\n        <Grid container spacing={3}>\n          <Grid item xs={4}>\n            <Paper className={classes.control}>\n              <h2>Response Domains</h2>\n              <List dense={true}>\n                {Object.values(responseDomains).map((responseDomain) => {\n                  return <ResponseDomainItem label={responseDomain.label} value={responseDomain.type} id={responseDomain.id} />\n                })}\n              </List>\n            </Paper>\n          </Grid>\n          <Grid item xs={8}>\n            <Paper className={classes.control}>\n              {!isNil(selectedResponseDomain) && (\n                <ResponseDomainForm responseDomain={selectedResponseDomain} instrumentId={instrumentId} />\n              )}\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 from 'react';\nimport { Switch, BrowserRouter as Router } 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 InstrumentBuildCodeLists from './pages/InstrumentBuildCodeLists';\nimport InstrumentBuildQuestionItems from './pages/InstrumentBuildQuestionItems';\nimport InstrumentBuildQuestionGrids from './pages/InstrumentBuildQuestionGrids';\nimport InstrumentBuildResponseDomains from './pages/InstrumentBuildResponseDomains';\nimport NoMatch from './pages/NoMatch';\n\nconst App = () => {\n\n  return (\n    <Router>\n     <div>\n        <Switch>\n          <AuthRoute type=\"guest\" exact path={routes.login} component={Login} />\n          <AuthRoute type=\"private\" exact path={routes.instruments.all} component={Instruments} />\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=\"guest\" component={NoMatch} />\n        </Switch>\n      </div>\n    </Router>\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    console.log(action.payload)\n    console.log({...state, ...{[action.payload.instrumentId]: serializeArrayToObject(action.payload.sequences)}})\n      return {...state, ...{[action.payload.instrumentId]: serializeArrayToObject(action.payload.sequences)}}\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    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    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    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    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    default:\n      return state\n  }\n}\n\nconst responseDomainNumerics = (state = {}, action) => {\n\n  console.log(action.type)\n  console.log(action)\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    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      return {...state, ...{[key]: {error: true, errorMessage: action.payload.error}}}\n    default:\n      return state\n  }\n}\n\nconst appReducer = combineReducers({\n    auth,\n    instruments,\n    instrumentStats,\n    cc_sequences,\n    cc_statements,\n    cc_conditions,\n    cc_questions,\n    questionItems,\n    questionGrids,\n    categories,\n    codeLists,\n    responseDomainNumerics,\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":""}