diff --git a/rdmo/projects/assets/js/interview/actions/interviewActions.js b/rdmo/projects/assets/js/interview/actions/interviewActions.js index 31d43a85c..66e57e873 100644 --- a/rdmo/projects/assets/js/interview/actions/interviewActions.js +++ b/rdmo/projects/assets/js/interview/actions/interviewActions.js @@ -275,19 +275,21 @@ export function storeValue(value) { return {type: NOOP} } else { return (dispatch, getState) => { - const valueIndex = getState().interview.values.findIndex((v) => compareValues(v, value)) + const page = getState().interview.page + const sets = getState().interview.sets + const question = page.questions.find((question) => question.attribute === value.attribute) + const refresh = question && question.optionsets.some((optionset) => optionset.has_refresh) + const widget_type = question && question.widget_type + + const valueIndex = getState().interview.values.findIndex((v) => compareValues(v, value, widget_type)) const valueFile = value.file const valueSuccess = value.success dispatch(addToPending(pendingId)) dispatch(storeValueInit(valueIndex)) - return ValueApi.storeValue(projectId, value) + return ValueApi.storeValue(projectId, { ...value, widget_type }) .then((value) => { - const page = getState().interview.page - const sets = getState().interview.sets - const question = page.questions.find((question) => question.attribute === value.attribute) - const refresh = question && question.optionsets.some((optionset) => optionset.has_refresh) dispatch(fetchNavigation(page)) dispatch(updateProgress()) diff --git a/rdmo/projects/assets/js/interview/components/main/Breadcrump.js b/rdmo/projects/assets/js/interview/components/main/Breadcrumb.js similarity index 89% rename from rdmo/projects/assets/js/interview/components/main/Breadcrump.js rename to rdmo/projects/assets/js/interview/components/main/Breadcrumb.js index 9479b6387..a47394aa9 100644 --- a/rdmo/projects/assets/js/interview/components/main/Breadcrump.js +++ b/rdmo/projects/assets/js/interview/components/main/Breadcrumb.js @@ -3,7 +3,7 @@ import PropTypes from 'prop-types' import { baseUrl } from 'rdmo/core/assets/js/utils/meta' -const Breadcrump = ({ overview, page, fetchPage }) => { +const Breadcrumb = ({ overview, page, fetchPage }) => { const handleClick = (event) => { event.preventDefault() @@ -35,10 +35,10 @@ const Breadcrump = ({ overview, page, fetchPage }) => { ) } -Breadcrump.propTypes = { +Breadcrumb.propTypes = { overview: PropTypes.object.isRequired, page: PropTypes.object, fetchPage: PropTypes.func.isRequired } -export default Breadcrump +export default Breadcrumb diff --git a/rdmo/projects/assets/js/interview/components/main/page/Page.js b/rdmo/projects/assets/js/interview/components/main/page/Page.js index d276ff8c3..0aea9662f 100644 --- a/rdmo/projects/assets/js/interview/components/main/page/Page.js +++ b/rdmo/projects/assets/js/interview/components/main/page/Page.js @@ -3,13 +3,12 @@ import PropTypes from 'prop-types' import get from 'lodash/get' import { isNil, minBy } from 'lodash' -import Html from 'rdmo/core/assets/js/components/Html' - import Question from '../question/Question' import QuestionSet from '../questionset/QuestionSet' import PageButtons from './PageButtons' import PageHead from './PageHead' +import PageHelp from './PageHelp' const Page = ({ config, settings, templates, overview, page, sets, values, fetchPage, fetchContact, createValue, updateValue, deleteValue, copyValue, @@ -30,12 +29,13 @@ const Page = ({ config, settings, templates, overview, page, sets, values, fetch return (

{page.title}

- + (set.set_prefix == currentSetPrefix))} values={isNil(page.attribute) ? [] : values.filter((value) => (value.attribute == page.attribute))} + disabled={overview.read_only} currentSet={currentSet} activateSet={activateSet} createSet={createSet} diff --git a/rdmo/projects/assets/js/interview/components/main/page/PageHead.js b/rdmo/projects/assets/js/interview/components/main/page/PageHead.js index f30e0547d..ca9e9ffdb 100644 --- a/rdmo/projects/assets/js/interview/components/main/page/PageHead.js +++ b/rdmo/projects/assets/js/interview/components/main/page/PageHead.js @@ -3,14 +3,15 @@ import PropTypes from 'prop-types' import classNames from 'classnames' import { capitalize, isEmpty, isNil, last } from 'lodash' -import Html from 'rdmo/core/assets/js/components/Html' import useModal from 'rdmo/core/assets/js/hooks/useModal' import PageHeadDeleteModal from './PageHeadDeleteModal' import PageHeadFormModal from './PageHeadFormModal' import PageHeadReuseModal from './PageHeadReuseModal' -const PageHead = ({ templates, page, sets, values, currentSet, +import PageTabsHelp from './PageTabsHelp' + +const PageHead = ({ templates, page, sets, values, disabled, currentSet, activateSet, createSet, updateSet, deleteSet, copySet }) => { const currentSetValue = isNil(currentSet) ? null : ( @@ -83,8 +84,7 @@ const PageHead = ({ templates, page, sets, values, currentSet, return page.is_collection && (
- - + { currentSet ? ( <> @@ -103,22 +103,39 @@ const PageHead = ({ templates, page, sets, values, currentSet, ) }) } -
  • - - {capitalize(page.verbose_name)} - -
  • - -
    { - page.attribute && ( -
    + + { + !disabled && ( +
    + { + page.attribute && ( +
    + ) + } ) : (
    ) } @@ -185,6 +206,7 @@ PageHead.propTypes = { page: PropTypes.object.isRequired, sets: PropTypes.array.isRequired, values: PropTypes.array.isRequired, + disabled: PropTypes.bool.isRequired, currentSet: PropTypes.object, activateSet: PropTypes.func.isRequired, createSet: PropTypes.func.isRequired, diff --git a/rdmo/projects/assets/js/interview/components/main/page/PageHelp.js b/rdmo/projects/assets/js/interview/components/main/page/PageHelp.js new file mode 100644 index 000000000..00d9ab1d0 --- /dev/null +++ b/rdmo/projects/assets/js/interview/components/main/page/PageHelp.js @@ -0,0 +1,16 @@ +import React from 'react' +import PropTypes from 'prop-types' + +import Html from 'rdmo/core/assets/js/components/Html' + +const PageHelp = ({ page }) => { + return
    + +
    +} + +PageHelp.propTypes = { + page: PropTypes.object.isRequired +} + +export default PageHelp diff --git a/rdmo/projects/assets/js/interview/components/main/page/PageTabsHelp.js b/rdmo/projects/assets/js/interview/components/main/page/PageTabsHelp.js new file mode 100644 index 000000000..ac5f5af39 --- /dev/null +++ b/rdmo/projects/assets/js/interview/components/main/page/PageTabsHelp.js @@ -0,0 +1,15 @@ +import React from 'react' +import PropTypes from 'prop-types' + +import Html from 'rdmo/core/assets/js/components/Html' + +const PageTabsHelp = ({ templates, disabled }) => { + return !disabled && +} + +PageTabsHelp.propTypes = { + templates: PropTypes.object.isRequired, + disabled: PropTypes.bool.isRequired +} + +export default PageTabsHelp diff --git a/rdmo/projects/assets/js/interview/components/main/question/Question.js b/rdmo/projects/assets/js/interview/components/main/question/Question.js index d760d32bf..c902d1a18 100644 --- a/rdmo/projects/assets/js/interview/components/main/question/Question.js +++ b/rdmo/projects/assets/js/interview/components/main/question/Question.js @@ -17,12 +17,14 @@ const Question = ({ settings, templates, page, question, sets, values, siblings, currentSet, createValue, updateValue, deleteValue, copyValue, fetchContact }) => { return checkQuestion(question, currentSet) && (
    - - +
    + + +
    - + { - return question.is_collection && ( +const QuestionAddValueHelp = ({ templates, question, disabled }) => { + return !disabled && question.is_collection && ( ) } @@ -12,6 +12,7 @@ const QuestionAddValueHelp = ({ templates, question }) => { QuestionAddValueHelp.propTypes = { templates: PropTypes.object.isRequired, question: PropTypes.object.isRequired, + disabled: PropTypes.bool.isRequired, } export default QuestionAddValueHelp diff --git a/rdmo/projects/assets/js/interview/components/main/question/QuestionContact.js b/rdmo/projects/assets/js/interview/components/main/question/QuestionContact.js index 32b3cd138..06b7a0069 100644 --- a/rdmo/projects/assets/js/interview/components/main/question/QuestionContact.js +++ b/rdmo/projects/assets/js/interview/components/main/question/QuestionContact.js @@ -3,7 +3,7 @@ import PropTypes from 'prop-types' const QuestionContact = ({ settings, question, values, fetchContact }) => { return settings.project_contact && ( - diff --git a/rdmo/projects/assets/js/interview/components/main/question/QuestionHelp.js b/rdmo/projects/assets/js/interview/components/main/question/QuestionHelp.js index eec017251..2c29b1ed0 100644 --- a/rdmo/projects/assets/js/interview/components/main/question/QuestionHelp.js +++ b/rdmo/projects/assets/js/interview/components/main/question/QuestionHelp.js @@ -5,12 +5,13 @@ import classNames from 'classnames' import Html from 'rdmo/core/assets/js/components/Html' const QuestionHelp = ({ question }) => { - const classnames = classNames({ - 'help-text': true, + const classnames = classNames('interview-question-help', { 'text-muted': question.is_optional }) - return + return
    + +
    } QuestionHelp.propTypes = { diff --git a/rdmo/projects/assets/js/interview/components/main/question/QuestionReuseValue.js b/rdmo/projects/assets/js/interview/components/main/question/QuestionReuseValue.js index c8346d866..550509175 100644 --- a/rdmo/projects/assets/js/interview/components/main/question/QuestionReuseValue.js +++ b/rdmo/projects/assets/js/interview/components/main/question/QuestionReuseValue.js @@ -9,7 +9,7 @@ import Modal from 'rdmo/core/assets/js/components/Modal' import Search from '../Search' -const QuestionReuseValue = ({ page, question, value, updateValue }) => { +const QuestionReuseValue = ({ page, question, value, disabled, updateValue }) => { const initialFormValues = { value: '' } @@ -63,7 +63,7 @@ const QuestionReuseValue = ({ page, question, value, updateValue }) => { - return <> + return !disabled && <> @@ -96,6 +96,7 @@ QuestionReuseValue.propTypes = { page: PropTypes.object.isRequired, question: PropTypes.object.isRequired, value: PropTypes.object.isRequired, + disabled: PropTypes.bool.isRequired, updateValue: PropTypes.func.isRequired } diff --git a/rdmo/projects/assets/js/interview/components/main/question/QuestionReuseValues.js b/rdmo/projects/assets/js/interview/components/main/question/QuestionReuseValues.js index 6c1c3a73a..c2bb8bec7 100644 --- a/rdmo/projects/assets/js/interview/components/main/question/QuestionReuseValues.js +++ b/rdmo/projects/assets/js/interview/components/main/question/QuestionReuseValues.js @@ -9,7 +9,7 @@ import Modal from 'rdmo/core/assets/js/components/Modal' import Search from '../Search' -const QuestionReuseValues = ({ page, question, values, createValues, updateValue, deleteValue }) => { +const QuestionReuseValues = ({ page, question, values, disabled, createValues, updateValue, deleteValue }) => { const initialFormValues = { value: '', @@ -75,7 +75,7 @@ const QuestionReuseValues = ({ page, question, values, createValues, updateValue } }, [formValues, formValues.value]) - return <> + return !disabled && <> @@ -110,6 +110,7 @@ QuestionReuseValues.propTypes = { page: PropTypes.object.isRequired, question: PropTypes.object.isRequired, values: PropTypes.array.isRequired, + disabled: PropTypes.bool.isRequired, createValues: PropTypes.func.isRequired, updateValue: PropTypes.func.isRequired, deleteValue: PropTypes.func.isRequired diff --git a/rdmo/projects/assets/js/interview/components/main/questionset/QuestionSet.js b/rdmo/projects/assets/js/interview/components/main/questionset/QuestionSet.js index 57b2cbd69..6c92a4c4b 100644 --- a/rdmo/projects/assets/js/interview/components/main/questionset/QuestionSet.js +++ b/rdmo/projects/assets/js/interview/components/main/questionset/QuestionSet.js @@ -30,14 +30,14 @@ const QuestionSet = ({ settings, templates, page, questionset, sets, values, dis
    - +
    { currentSets.map((set, setIndex) => (
    - - + +
    { @@ -108,7 +108,13 @@ const QuestionSet = ({ settings, templates, page, questionset, sets, values, dis }
    - +
    ) } diff --git a/rdmo/projects/assets/js/interview/components/main/questionset/QuestionSetAddSet.js b/rdmo/projects/assets/js/interview/components/main/questionset/QuestionSetAddSet.js index 2141af09e..e7434998b 100644 --- a/rdmo/projects/assets/js/interview/components/main/questionset/QuestionSetAddSet.js +++ b/rdmo/projects/assets/js/interview/components/main/questionset/QuestionSetAddSet.js @@ -2,7 +2,7 @@ import React from 'react' import PropTypes from 'prop-types' import { capitalize, maxBy } from 'lodash' -const QuestionSetAddSet = ({ questionset, sets, setPrefix, createSet }) => { +const QuestionSetAddSet = ({ questionset, sets, setPrefix, disabled, createSet }) => { const handleClick = () => { const lastSet = maxBy(sets, (s) => s.set_index) const setIndex = lastSet ? lastSet.set_index + 1 : 0 @@ -13,7 +13,7 @@ const QuestionSetAddSet = ({ questionset, sets, setPrefix, createSet }) => { }) } - return questionset.is_collection && ( + return !disabled && questionset.is_collection && ( @@ -24,6 +24,7 @@ QuestionSetAddSet.propTypes = { questionset: PropTypes.object.isRequired, sets: PropTypes.array.isRequired, setPrefix: PropTypes.string.isRequired, + disabled: PropTypes.bool.isRequired, createSet: PropTypes.func.isRequired } diff --git a/rdmo/projects/assets/js/interview/components/main/questionset/QuestionSetAddSetHelp.js b/rdmo/projects/assets/js/interview/components/main/questionset/QuestionSetAddSetHelp.js index adbd97275..5374b0708 100644 --- a/rdmo/projects/assets/js/interview/components/main/questionset/QuestionSetAddSetHelp.js +++ b/rdmo/projects/assets/js/interview/components/main/questionset/QuestionSetAddSetHelp.js @@ -3,15 +3,16 @@ import PropTypes from 'prop-types' import Html from 'rdmo/core/assets/js/components/Html' -const QuestionSetAddSetHelp = ({ templates, questionset }) => { - return questionset.is_collection && ( +const QuestionSetAddSetHelp = ({ templates, questionset, disabled }) => { + return !disabled && questionset.is_collection && ( ) } QuestionSetAddSetHelp.propTypes = { templates: PropTypes.object.isRequired, - questionset: PropTypes.object.isRequired + questionset: PropTypes.object.isRequired, + disabled: PropTypes.bool.isRequired } export default QuestionSetAddSetHelp diff --git a/rdmo/projects/assets/js/interview/components/main/questionset/QuestionSetCopySet.js b/rdmo/projects/assets/js/interview/components/main/questionset/QuestionSetCopySet.js index 3c5b1fc24..44370dc25 100644 --- a/rdmo/projects/assets/js/interview/components/main/questionset/QuestionSetCopySet.js +++ b/rdmo/projects/assets/js/interview/components/main/questionset/QuestionSetCopySet.js @@ -6,7 +6,7 @@ import Modal from 'rdmo/core/assets/js/components/Modal' import useModal from 'rdmo/core/assets/js/hooks/useModal' -const QuestionCopySet = ({ questionset, sets, currentSet, copySet }) => { +const QuestionCopySet = ({ questionset, sets, currentSet, disabled, copySet }) => { const modal = useModal() @@ -18,7 +18,7 @@ const QuestionCopySet = ({ questionset, sets, currentSet, copySet }) => { modal.close() } - return questionset.is_collection && ( + return !disabled && questionset.is_collection && ( <>