diff --git a/app/models/templateversion.js b/app/models/templateversion.js index 235347a79..49389afd0 100644 --- a/app/models/templateversion.js +++ b/app/models/templateversion.js @@ -61,7 +61,12 @@ export default Resource.extend({ const subquestions = get(q, 'subquestions'); if ( subquestions ) { subquestions.forEach((subq) => { - subq.showIf = `${q.variable}=${q.showSubquestionIf}`; + if ( get(subq, 'showIf.length') > 0 ) { + subq.showIf = `${q.variable}=${q.showSubquestionIf}&&${subq.showIf}`; + } else { + subq.showIf = `${q.variable}=${q.showSubquestionIf}`; + } + if ( q.group ) { subq.group = q.group; } diff --git a/lib/shared/addon/utils/evaluate.js b/lib/shared/addon/utils/evaluate.js index 79ab34a72..2236ea06f 100644 --- a/lib/shared/addon/utils/evaluate.js +++ b/lib/shared/addon/utils/evaluate.js @@ -27,18 +27,19 @@ export function evaluate(question, allQuestions) { return true; } - const showIf = question.showIf.trim(); + const and = question.showIf.split('&&'); - let variables = getVariables(showIf, '='); - - if ( variables ) { - const left = stringifyAnswer(getAnswer(variables.left, allQuestions)); - const right = stringifyAnswer(variables.right); - - return left === right; - } - - return false; + const result = and.every((showIf) => { + showIf = showIf.trim(); + const variables = getVariables(showIf, '='); + if ( variables ) { + const left = stringifyAnswer(getAnswer(variables.left, allQuestions)); + const right = stringifyAnswer(variables.right); + return left === right; + } + return false; + }); + return result; } export function stringifyAnswer(answer) {