oro-sdk 3.12.0 → 3.13.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -978,6 +978,53 @@ function _getImagesFromIndexDb() {
978
978
  function populateWorkflowField(_x6, _x7) {
979
979
  return _populateWorkflowField.apply(this, arguments);
980
980
  }
981
+ /**
982
+ * Determine if a question is triggered by some answers
983
+ *
984
+ * We use the following logical combinations of rules:
985
+ *
986
+ * #### Single string
987
+ *
988
+ * ```
989
+ * // Required: rule1
990
+ * rules: rule1
991
+ * ```
992
+ *
993
+ * #### Array of strings (AND is applied between statements):
994
+ *
995
+ * ```
996
+ * // Required: rule1 AND rule2
997
+ * rules: [ rule1, rule2 ]
998
+ * ```
999
+ *
1000
+ * #### Array of arrays of strings (OR is applied between inner arrays. AND is applied between inner arrays statements)
1001
+ *
1002
+ * ```
1003
+ * // Required: rule1 OR rule2
1004
+ * rules: [
1005
+ * [ rule1 ],
1006
+ * [ rule2 ]
1007
+ * ]
1008
+ *
1009
+ * // Required: rule1 OR (rule2 AND rule3)
1010
+ * rules: [
1011
+ * [ rule1 ],
1012
+ * [ rule2, rule3 ]
1013
+ * ]
1014
+ *
1015
+ * // THIS IS FORBIDDEN
1016
+ * rules: [
1017
+ * rule1, // <-- THIS IS FORBIDDEN. Instead use [ rule1 ]
1018
+ * [ rule2, rule3 ]
1019
+ * ]
1020
+ * ```
1021
+ *
1022
+ * @param triggers the triggering rules
1023
+ * @param answers the answers to check againts triggering rules
1024
+ * @returns `true` if triggers are verified against ansers. Otherwise, returns `false`.
1025
+ * @throws an Error if triggers typing is wrong
1026
+ */
1027
+
981
1028
 
982
1029
  function _populateWorkflowField() {
983
1030
  _populateWorkflowField = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee4(question, answerValue) {
@@ -1056,21 +1103,34 @@ function _populateWorkflowField() {
1056
1103
  }
1057
1104
 
1058
1105
  function isTriggered(triggers, answers) {
1059
- for (var _iterator = _createForOfIteratorHelperLoose(triggers), _step; !(_step = _iterator()).done;) {
1060
- var trigger = _step.value;
1106
+ // is triggers contained in answers
1107
+ if (typeof triggers === 'string') {
1108
+ return answers.includes(triggers);
1109
+ }
1061
1110
 
1062
- if (!answers.includes(trigger)) {
1063
- return false;
1111
+ if (Array.isArray(triggers)) {
1112
+ // rule combination kind: rule1 OR (rule2 AND rule3)
1113
+ if (Array.isArray(triggers[0])) {
1114
+ return triggers.some(function (subSetTriggers) {
1115
+ return subSetTriggers.every(function (trigger) {
1116
+ return answers.includes(trigger);
1117
+ });
1118
+ });
1119
+ } else {
1120
+ // rule combination kind: rule1 AND rule2
1121
+ return triggers.every(function (trigger) {
1122
+ return answers.includes(trigger);
1123
+ });
1064
1124
  }
1065
1125
  }
1066
1126
 
1067
- return true;
1127
+ throw Error('[isTriggered] triggers is not typed well');
1068
1128
  }
1069
1129
  function flattenSelectedAnswers(answers) {
1070
1130
  var linearAnswers = [];
1071
1131
 
1072
- for (var _iterator2 = _createForOfIteratorHelperLoose(answers), _step2; !(_step2 = _iterator2()).done;) {
1073
- var answer = _step2.value;
1132
+ for (var _iterator = _createForOfIteratorHelperLoose(answers), _step; !(_step = _iterator()).done;) {
1133
+ var answer = _step.value;
1074
1134
  linearAnswers.push.apply(linearAnswers, Object.values(answer));
1075
1135
  }
1076
1136