Skip to content

Commit 4ca340d

Browse files
committed
Add append to reuse value functionality
1 parent c0eecfa commit 4ca340d

File tree

10 files changed

+36
-15
lines changed

10 files changed

+36
-15
lines changed

rdmo/core/assets/js/components/Modal.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import React from 'react'
22
import PropTypes from 'prop-types'
33
import { Modal as BootstrapModal } from 'react-bootstrap'
44

5-
const Modal = ({ title, show, modalProps, submitLabel, submitProps, onClose, onSubmit, children }) => {
5+
const Modal = ({ title, show, modalProps, submitLabel, submitProps, onClose, onSubmit, children, buttons }) => {
66
return (
77
<BootstrapModal className="element-modal" onHide={onClose} show={show} {...modalProps}>
88
<BootstrapModal.Header closeButton>
@@ -19,6 +19,7 @@ const Modal = ({ title, show, modalProps, submitLabel, submitProps, onClose, onS
1919
<button type="button" className="btn btn-default" onClick={onClose}>
2020
{gettext('Close')}
2121
</button>
22+
{buttons}
2223
{
2324
onSubmit && (
2425
<button type="button" className="btn btn-primary" onClick={onSubmit} {...submitProps}>
@@ -40,6 +41,7 @@ Modal.propTypes = {
4041
onClose: PropTypes.func.isRequired,
4142
onSubmit: PropTypes.func,
4243
children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]).isRequired,
44+
buttons: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]).isRequired,
4345
}
4446

4547
export default Modal

rdmo/projects/assets/js/interview/components/main/question/QuestionReuseValue.js

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import Modal from 'rdmo/core/assets/js/components/Modal'
99

1010
import Search from '../Search'
1111

12-
const QuestionReuseValue = ({ page, value, updateValue }) => {
12+
const QuestionReuseValue = ({ page, question, value, updateValue }) => {
1313
const initialFormValues = {
1414
value: ''
1515
}
@@ -20,12 +20,18 @@ const QuestionReuseValue = ({ page, value, updateValue }) => {
2020
] = useLsState('rdmo.interview.reuse', initialFormValues, ['value'])
2121
const [formErrors, setFormErrors] = useState([])
2222

23-
const handleSubmit = () => {
23+
const handleSubmit = (mode) => {
2424
if (isEmpty(formValues.value)) {
2525
setFormErrors({ value: true })
2626
} else {
2727
const { text, option, external_id } = formValues.value
28-
updateValue(value, { text, option, external_id })
28+
29+
if (mode == 'append') {
30+
updateValue(value, { text: `${value.text} ${text}`, option, external_id })
31+
} else if (mode == 'replace') {
32+
updateValue(value, { text, option, external_id })
33+
}
34+
2935
setShow(false)
3036
}
3137
}
@@ -44,14 +50,26 @@ const QuestionReuseValue = ({ page, value, updateValue }) => {
4450
}
4551
}, [formValues, formValues.value])
4652

53+
const modalButtons = <>
54+
{
55+
['text', 'textarea'].includes(question.widget_type) && (
56+
<button type="button" className="btn btn-primary" onClick={() => handleSubmit('append')}>
57+
{gettext('Append')}
58+
</button>
59+
)
60+
}
61+
<button type="button" className="btn btn-primary" onClick={() => handleSubmit('replace')}>
62+
{gettext('Replace')}
63+
</button>
64+
</>
65+
4766
return <>
4867
<button type="button" className="btn btn-link btn-reuse-value" onClick={() => setShow(true)}>
4968
<i className="fa fa-arrow-circle-down fa-btn"></i>
5069
</button>
5170

52-
<Modal title={gettext('Reuse answer')} show={show} submitLabel={gettext('Reuse')}
53-
submitProps={{className: 'btn btn-primary'}}
54-
onClose={() => setShow(false)} onSubmit={handleSubmit}>
71+
<Modal title={gettext('Reuse answer')} show={show} buttons={modalButtons}
72+
onClose={() => setShow(false)} >
5573
<div className={classNames({'form-group': true, 'has-error': formErrors.value })}>
5674
<label className="control-label" htmlFor="interview-page-tabs-modal-form-import">
5775
{gettext('Answer')}
@@ -75,6 +93,7 @@ const QuestionReuseValue = ({ page, value, updateValue }) => {
7593

7694
QuestionReuseValue.propTypes = {
7795
page: PropTypes.object.isRequired,
96+
question: PropTypes.object.isRequired,
7897
value: PropTypes.object.isRequired,
7998
updateValue: PropTypes.func.isRequired
8099
}

rdmo/projects/assets/js/interview/components/main/question/QuestionReuseValues.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ const QuestionReuseValues = ({ page, question, values, createValues, updateValue
8080
<i className="fa fa-arrow-circle-down fa-btn"></i>
8181
</button>
8282

83-
<Modal title={gettext('Reuse answer')} show={show} submitLabel={gettext('Reuse')}
83+
<Modal title={gettext('Reuse answer')} show={show} submitLabel={gettext('Replace')}
8484
submitProps={{className: 'btn btn-primary'}}
8585
onClose={() => setShow(false)} onSubmit={handleSubmit}>
8686
<div className={classNames({'form-group': true, 'has-error': formErrors.value })}>

rdmo/projects/assets/js/interview/components/main/widget/DateWidget.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ const DateWidget = ({ page, question, values, siblings, currentSet, disabled, cr
2828
buttons={
2929
<div className="buttons">
3030
<QuestionSuccess value={value}/>
31-
<QuestionReuseValue page={page} value={value} updateValue={updateValue}/>
31+
<QuestionReuseValue page={page} question={question} value={value} updateValue={updateValue}/>
3232
<QuestionEraseValue value={value} disabled={disabled} updateValue={updateValue}/>
3333
<QuestionRemoveValue
3434
question={question}

rdmo/projects/assets/js/interview/components/main/widget/RadioWidget.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ const RadioWidget = ({ page, question, values, siblings, currentSet, disabled,
3232
buttons={
3333
<div className="buttons">
3434
<QuestionSuccess value={value}/>
35-
<QuestionReuseValue page={page} value={value} updateValue={updateValue}/>
35+
<QuestionReuseValue page={page} question={question} value={value} updateValue={updateValue}/>
3636
<QuestionEraseValue value={value} disabled={disabled} updateValue={updateValue}/>
3737
<QuestionRemoveValue
3838
question={question}

rdmo/projects/assets/js/interview/components/main/widget/RangeWidget.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ const RangeWidget = ({ page, question, values, siblings, currentSet, disabled,
4242
buttons={
4343
<div className="buttons">
4444
<QuestionSuccess value={value}/>
45-
<QuestionReuseValue page={page} value={value} updateValue={updateValue}/>
45+
<QuestionReuseValue page={page} question={question} value={value} updateValue={updateValue}/>
4646
<QuestionEraseValue value={value} disabled={disabled} updateValue={handleEraseValue}/>
4747
<QuestionRemoveValue
4848
question={question}

rdmo/projects/assets/js/interview/components/main/widget/SelectWidget.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ const SelectWidget = ({ page, question, values, siblings, currentSet, disabled,
3232
buttons={
3333
<div className="buttons">
3434
<QuestionSuccess value={value}/>
35-
<QuestionReuseValue page={page} value={value} updateValue={updateValue}/>
35+
<QuestionReuseValue page={page} question={question} value={value} updateValue={updateValue}/>
3636
<QuestionRemoveValue
3737
question={question}
3838
values={values}

rdmo/projects/assets/js/interview/components/main/widget/TextWidget.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ const TextWidget = ({ page, question, values, siblings, currentSet, disabled,
2828
buttons={
2929
<div className="buttons">
3030
<QuestionSuccess value={value}/>
31-
<QuestionReuseValue page={page} value={value} updateValue={updateValue}/>
31+
<QuestionReuseValue page={page} question={question} value={value} updateValue={updateValue}/>
3232
<QuestionRemoveValue
3333
question={question}
3434
values={values}

rdmo/projects/assets/js/interview/components/main/widget/TextareaWidget.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ const TextareaWidget = ({ page, question, values, siblings, currentSet, disabled
2828
buttons={
2929
<div className="buttons">
3030
<QuestionSuccess value={value}/>
31-
<QuestionReuseValue page={page} value={value} updateValue={updateValue}/>
31+
<QuestionReuseValue page={page} question={question} value={value} updateValue={updateValue}/>
3232
<QuestionRemoveValue
3333
question={question}
3434
values={values}

rdmo/projects/assets/js/interview/components/main/widget/YesNoWidget.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ const YesNoWidget = ({ page, question, values, siblings, currentSet, disabled,
2929
buttons={
3030
<div className="buttons">
3131
<QuestionSuccess value={value}/>
32-
<QuestionReuseValue page={page} value={value} updateValue={updateValue}/>
32+
<QuestionReuseValue page={page} question={question} value={value} updateValue={updateValue}/>
3333
<QuestionEraseValue value={value} disabled={disabled} updateValue={updateValue}/>
3434
<QuestionRemoveValue
3535
question={question}

0 commit comments

Comments
 (0)