feat: adds does not include options in conditions (#4296)

This commit is contained in:
Piyush Gupta
2024-11-13 18:31:03 +05:30
committed by GitHub
parent 7a6dedf452
commit 844ea40c3a
7 changed files with 58 additions and 5 deletions

View File

@@ -244,7 +244,13 @@ export function LogicEditorConditions({
const conditionOperatorOptions = getConditionOperatorOptions(condition, localSurvey);
const { show, options, showInput = false, inputType } = getMatchValueProps(condition, localSurvey, t);
const allowMultiSelect = ["equalsOneOf", "includesAllOf", "includesOneOf"].includes(condition.operator);
const allowMultiSelect = [
"equalsOneOf",
"includesAllOf",
"includesOneOf",
"doesNotIncludeOneOf",
"doesNotIncludeAllOf",
].includes(condition.operator);
return (
<div key={condition.id} className="flex items-center gap-x-2">
<div className="w-10 shrink-0">

View File

@@ -116,6 +116,14 @@ export const logicRules = {
label: "environments.surveys.edit.does_not_equal",
value: ZSurveyLogicConditionsOperator.Enum.doesNotEqual,
},
{
label: "environments.surveys.edit.does_not_include_one_of",
value: ZSurveyLogicConditionsOperator.Enum.doesNotIncludeOneOf,
},
{
label: "environments.surveys.edit.does_not_include_all_of",
value: ZSurveyLogicConditionsOperator.Enum.doesNotIncludeAllOf,
},
{
label: "environments.surveys.edit.includes_all_of",
value: ZSurveyLogicConditionsOperator.Enum.includesAllOf,
@@ -144,6 +152,14 @@ export const logicRules = {
label: "environments.surveys.edit.does_not_equal",
value: ZSurveyLogicConditionsOperator.Enum.doesNotEqual,
},
{
label: "environments.surveys.edit.does_not_include_one_of",
value: ZSurveyLogicConditionsOperator.Enum.doesNotIncludeOneOf,
},
{
label: "environments.surveys.edit.does_not_include_all_of",
value: ZSurveyLogicConditionsOperator.Enum.doesNotIncludeAllOf,
},
{
label: "environments.surveys.edit.includes_all_of",
value: ZSurveyLogicConditionsOperator.Enum.includesAllOf,

View File

@@ -1351,6 +1351,8 @@
"does_not_contain": "Enthält nicht",
"does_not_end_with": "Endet nicht mit",
"does_not_equal": "Ungleich",
"does_not_include_all_of": "Enthält nicht alle von",
"does_not_include_one_of": "Enthält nicht eines von",
"does_not_start_with": "Fängt nicht an mit",
"edit_recall": "Erinnerung bearbeiten",
"edit_segment": "Segment bearbeiten",

View File

@@ -1351,6 +1351,8 @@
"does_not_contain": "Does not contain",
"does_not_end_with": "Does not end with",
"does_not_equal": "Does not equal",
"does_not_include_all_of": "Does not include all of",
"does_not_include_one_of": "Does not include one of",
"does_not_start_with": "Does not start with",
"edit_recall": "Edit Recall",
"edit_segment": "Edit Segment",

View File

@@ -1351,6 +1351,8 @@
"does_not_contain": "não contém",
"does_not_end_with": "Não termina com",
"does_not_equal": "não é igual",
"does_not_include_all_of": "Não inclui todos de",
"does_not_include_one_of": "Não inclui um de",
"does_not_start_with": "Não começa com",
"edit_recall": "Editar Lembrete",
"edit_segment": "Editar Segmento",

View File

@@ -425,6 +425,18 @@ const evaluateSingleCondition = (
Array.isArray(rightValue) &&
rightValue.some((v) => leftValue.includes(v))
);
case "doesNotIncludeAllOf":
return (
Array.isArray(leftValue) &&
Array.isArray(rightValue) &&
rightValue.every((v) => !leftValue.includes(v))
);
case "doesNotIncludeOneOf":
return (
Array.isArray(leftValue) &&
Array.isArray(rightValue) &&
rightValue.some((v) => !leftValue.includes(v))
);
case "isAccepted":
return leftValue === "accepted";
case "isClicked":

View File

@@ -249,6 +249,8 @@ export const ZSurveyLogicConditionsOperator = z.enum([
"equalsOneOf",
"includesAllOf",
"includesOneOf",
"doesNotIncludeOneOf",
"doesNotIncludeAllOf",
"isClicked",
"isAccepted",
"isBefore",
@@ -1212,9 +1214,16 @@ const isInvalidOperatorsForQuestionType = (
case TSurveyQuestionTypeEnum.MultipleChoiceMulti:
case TSurveyQuestionTypeEnum.PictureSelection:
if (
!["equals", "doesNotEqual", "includesAllOf", "includesOneOf", "isSubmitted", "isSkipped"].includes(
operator
)
![
"equals",
"doesNotEqual",
"includesAllOf",
"includesOneOf",
"doesNotIncludeAllOf",
"doesNotIncludeOneOf",
"isSubmitted",
"isSkipped",
].includes(operator)
) {
isInvalidOperator = true;
}
@@ -1553,7 +1562,11 @@ const validateConditions = (
});
}
}
} else if (condition.operator === "includesAllOf" || condition.operator === "includesOneOf") {
} else if (
["includesAllOf", "includesOneOf", "doesNotIncludeAllOf", "doesNotIncludeOneOf"].includes(
condition.operator
)
) {
if (!Array.isArray(rightOperand.value)) {
issues.push({
code: z.ZodIssueCode.custom,