oro-sdk 3.12.0 → 3.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "3.12.0",
2
+ "version": "3.13.0",
3
3
  "main": "dist/index.js",
4
4
  "typings": "dist/index.d.ts",
5
5
  "files": [
@@ -54,8 +54,8 @@
54
54
  "form-data": "^4.0.0",
55
55
  "formdata-node": "^4.3.1",
56
56
  "idb-keyval": "^5.0.6",
57
- "oro-sdk-apis": "1.47.0",
57
+ "oro-sdk-apis": "1.48.0",
58
58
  "oro-toolbox": "0.0.6",
59
59
  "uuid": "^8.3.2"
60
60
  }
61
- }
61
+ }
@@ -179,13 +179,71 @@ async function populateWorkflowField(
179
179
  })
180
180
  }
181
181
 
182
- export function isTriggered(triggers: string[], answers: string[]): boolean {
183
- for (let trigger of triggers) {
184
- if (!answers.includes(trigger)) {
185
- return false
182
+ /**
183
+ * Determine if a question is triggered by some answers
184
+ *
185
+ * We use the following logical combinations of rules:
186
+ *
187
+ * #### Single string
188
+ *
189
+ * ```
190
+ * // Required: rule1
191
+ * rules: rule1
192
+ * ```
193
+ *
194
+ * #### Array of strings (AND is applied between statements):
195
+ *
196
+ * ```
197
+ * // Required: rule1 AND rule2
198
+ * rules: [ rule1, rule2 ]
199
+ * ```
200
+ *
201
+ * #### Array of arrays of strings (OR is applied between inner arrays. AND is applied between inner arrays statements)
202
+ *
203
+ * ```
204
+ * // Required: rule1 OR rule2
205
+ * rules: [
206
+ * [ rule1 ],
207
+ * [ rule2 ]
208
+ * ]
209
+ *
210
+ * // Required: rule1 OR (rule2 AND rule3)
211
+ * rules: [
212
+ * [ rule1 ],
213
+ * [ rule2, rule3 ]
214
+ * ]
215
+ *
216
+ * // THIS IS FORBIDDEN
217
+ * rules: [
218
+ * rule1, // <-- THIS IS FORBIDDEN. Instead use [ rule1 ]
219
+ * [ rule2, rule3 ]
220
+ * ]
221
+ * ```
222
+ *
223
+ * @param triggers the triggering rules
224
+ * @param answers the answers to check againts triggering rules
225
+ * @returns `true` if triggers are verified against ansers. Otherwise, returns `false`.
226
+ * @throws an Error if triggers typing is wrong
227
+ */
228
+ export function isTriggered(triggers: string[][] | string[] | string, answers: string[]): boolean {
229
+ // is triggers contained in answers
230
+ if (typeof triggers === 'string') {
231
+ return answers.includes(triggers)
232
+ }
233
+
234
+ if (Array.isArray(triggers)) {
235
+ // rule combination kind: rule1 OR (rule2 AND rule3)
236
+ if (Array.isArray(triggers[0])) {
237
+ return (triggers as string[][]).some((subSetTriggers) =>
238
+ subSetTriggers.every((trigger) => answers.includes(trigger))
239
+ )
240
+ } else {
241
+ // rule combination kind: rule1 AND rule2
242
+ return (triggers as string[]).every((trigger) => answers.includes(trigger))
186
243
  }
187
244
  }
188
- return true
245
+
246
+ throw Error('[isTriggered] triggers is not typed well')
189
247
  }
190
248
 
191
249
  export function flattenSelectedAnswers(answers: SelectedAnswersData) {