@rsuci/shared-form-components 1.0.49 → 1.0.50
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.
|
@@ -69,10 +69,12 @@ export declare class ConditionEngine {
|
|
|
69
69
|
* Évalue la fonction setValeur(value, variable, condition)
|
|
70
70
|
* Enregistre l'action automatique si la condition est vraie
|
|
71
71
|
* Retourne toujours true (n'affecte pas la visibilité)
|
|
72
|
+
* CORRIGÉ: Suffixe la variable cible et passe currentIteration à parseValue
|
|
72
73
|
*/
|
|
73
74
|
private evaluateSetValeur;
|
|
74
75
|
/**
|
|
75
76
|
* Parse les paramètres de setValeur(value, variable, condition)
|
|
77
|
+
* CORRIGÉ: Extrait le nom de variable sans les ${}
|
|
76
78
|
*/
|
|
77
79
|
private parseSetValeurParams;
|
|
78
80
|
/**
|
|
@@ -81,6 +83,7 @@ export declare class ConditionEngine {
|
|
|
81
83
|
private smartSplit;
|
|
82
84
|
/**
|
|
83
85
|
* Parse une valeur depuis une chaîne (string, number, boolean, etc.)
|
|
86
|
+
* CORRIGÉ: Accepte currentIteration et supporte dateDiff() et expressions complexes
|
|
84
87
|
*/
|
|
85
88
|
private parseValue;
|
|
86
89
|
/**
|
|
@@ -97,8 +100,18 @@ export declare class ConditionEngine {
|
|
|
97
100
|
private buildContext;
|
|
98
101
|
/**
|
|
99
102
|
* Remplace les références aux variables en tenant compte des itérations
|
|
103
|
+
* ORDRE CORRIGÉ: suffixer d'abord, puis traiter les fonctions de date
|
|
100
104
|
*/
|
|
101
105
|
private replaceVariableReferencesWithIterations;
|
|
106
|
+
/**
|
|
107
|
+
* Suffixe les références de variables ${VAR} → ${VAR_N} pour les groupes multiples
|
|
108
|
+
* Ne suffixe que si la variable a une version itérative dans le contexte
|
|
109
|
+
*/
|
|
110
|
+
private suffixVariableReferences;
|
|
111
|
+
/**
|
|
112
|
+
* Vérifie si une variable est de type itératif (groupe multiple)
|
|
113
|
+
*/
|
|
114
|
+
private isIterativeVariable;
|
|
102
115
|
/**
|
|
103
116
|
* Remplace les fonctions d'agrégation pour les groupes multiples
|
|
104
117
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"condition-engine.d.ts","sourceRoot":"","sources":["../../src/lib/condition-engine.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAIjE,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,UAAU,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,aAAa,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,OAAO,CAAC;CACxB;AAGD,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,WAAW,CAAC;IACxC,MAAM,EAAE,OAAO,GAAG,UAAU,EAAE,CAAC;IAC/B,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,qBAAa,eAAe;IAId,OAAO,CAAC,SAAS;IAH7B,OAAO,CAAC,OAAO,CAAqC;IACpD,OAAO,CAAC,WAAW,CAAoB;gBAEnB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC;IAI7D;;;;;;;;;;;;;;;;;OAiBG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,gBAAgB,CAAC,EAAE,MAAM,GAAG,OAAO;IAuB/D;;OAEG;IACH,aAAa,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,GAAG,IAAI;IAMjE;;OAEG;IACH,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE;IAKnD;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAIzB;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAkB/B;;;OAGG;IACH,OAAO,CAAC,cAAc;IAoCtB;;;OAGG;IACH,OAAO,CAAC,cAAc;IAuBtB
|
|
1
|
+
{"version":3,"file":"condition-engine.d.ts","sourceRoot":"","sources":["../../src/lib/condition-engine.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAIjE,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,UAAU,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,aAAa,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,OAAO,CAAC;CACxB;AAGD,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,WAAW,CAAC;IACxC,MAAM,EAAE,OAAO,GAAG,UAAU,EAAE,CAAC;IAC/B,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,qBAAa,eAAe;IAId,OAAO,CAAC,SAAS;IAH7B,OAAO,CAAC,OAAO,CAAqC;IACpD,OAAO,CAAC,WAAW,CAAoB;gBAEnB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC;IAI7D;;;;;;;;;;;;;;;;;OAiBG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,gBAAgB,CAAC,EAAE,MAAM,GAAG,OAAO;IAuB/D;;OAEG;IACH,aAAa,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,GAAG,IAAI;IAMjE;;OAEG;IACH,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE;IAKnD;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAIzB;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAkB/B;;;OAGG;IACH,OAAO,CAAC,cAAc;IAoCtB;;;OAGG;IACH,OAAO,CAAC,cAAc;IAuBtB;;;;;OAKG;IACH,OAAO,CAAC,iBAAiB;IA+CzB;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAwB5B;;OAEG;IACH,OAAO,CAAC,UAAU;IA0ClB;;;OAGG;IACH,OAAO,CAAC,UAAU;IA8FlB;;OAEG;IACH,cAAc,IAAI,UAAU,EAAE;IAI9B;;OAEG;IACH,gBAAgB,IAAI,IAAI;IAIxB;;OAEG;IACH,OAAO,CAAC,YAAY;IAepB;;;OAGG;IACH,OAAO,CAAC,uCAAuC;IAmC/C;;;OAGG;IACH,OAAO,CAAC,wBAAwB;IAahC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAK3B;;OAEG;IACH,OAAO,CAAC,2BAA2B;IAuDnC;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAU5B;;;OAGG;IACH,OAAO,CAAC,cAAc;IA8BtB;;OAEG;IACH,OAAO,CAAC,eAAe;IA6BvB;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IA2CzB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAY1B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAUzB;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAyBhC;;OAEG;IACH,OAAO,CAAC,YAAY;IA6CpB;;OAEG;IACH,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE;IAwGhF;;OAEG;IACH,uBAAuB,CAAC,gBAAgB,EAAE,MAAM,GAAG,MAAM,EAAE;CAwE5D;AAED;;GAEG;AACH,eAAO,MAAM,kBAAkB,GAAI,WAAW,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,oBAS3E,CAAC"}
|
|
@@ -142,6 +142,7 @@ export class ConditionEngine {
|
|
|
142
142
|
* Évalue la fonction setValeur(value, variable, condition)
|
|
143
143
|
* Enregistre l'action automatique si la condition est vraie
|
|
144
144
|
* Retourne toujours true (n'affecte pas la visibilité)
|
|
145
|
+
* CORRIGÉ: Suffixe la variable cible et passe currentIteration à parseValue
|
|
145
146
|
*/
|
|
146
147
|
evaluateSetValeur(expression, currentIteration) {
|
|
147
148
|
try {
|
|
@@ -159,11 +160,17 @@ export class ConditionEngine {
|
|
|
159
160
|
const processedCondition = this.replaceVariableReferencesWithIterations(condition, currentIteration);
|
|
160
161
|
shouldExecute = this.safeEvaluate(processedCondition);
|
|
161
162
|
}
|
|
163
|
+
// CORRECTION 3: Suffixer la variable cible si dans une itération
|
|
164
|
+
let targetVariable = variable;
|
|
165
|
+
if (currentIteration !== undefined && this.isIterativeVariable(variable)) {
|
|
166
|
+
targetVariable = `${variable}_${currentIteration}`;
|
|
167
|
+
}
|
|
162
168
|
// Créer l'action automatique
|
|
169
|
+
// CORRECTION 4: Passer currentIteration à parseValue
|
|
163
170
|
const action = {
|
|
164
171
|
type: 'setValue',
|
|
165
|
-
targetVariable:
|
|
166
|
-
value: this.parseValue(value),
|
|
172
|
+
targetVariable: targetVariable,
|
|
173
|
+
value: this.parseValue(value, currentIteration),
|
|
167
174
|
condition: condition || '',
|
|
168
175
|
shouldExecute
|
|
169
176
|
};
|
|
@@ -178,6 +185,7 @@ export class ConditionEngine {
|
|
|
178
185
|
}
|
|
179
186
|
/**
|
|
180
187
|
* Parse les paramètres de setValeur(value, variable, condition)
|
|
188
|
+
* CORRIGÉ: Extrait le nom de variable sans les ${}
|
|
181
189
|
*/
|
|
182
190
|
parseSetValeurParams(paramsString) {
|
|
183
191
|
try {
|
|
@@ -186,7 +194,12 @@ export class ConditionEngine {
|
|
|
186
194
|
if (params.length < 2)
|
|
187
195
|
return null;
|
|
188
196
|
const value = params[0].trim();
|
|
189
|
-
|
|
197
|
+
let variable = params[1].trim();
|
|
198
|
+
// CORRECTION 9: Extraire le nom de variable sans ${}
|
|
199
|
+
const varMatch = variable.match(/^\$\{([A-Z_][A-Z0-9_]*(?:_\d+)?)\}$/);
|
|
200
|
+
if (varMatch) {
|
|
201
|
+
variable = varMatch[1]; // "AGE" au lieu de "${AGE}"
|
|
202
|
+
}
|
|
190
203
|
const condition = params.length > 2 ? params.slice(2).join(',').trim() : '';
|
|
191
204
|
return { value, variable, condition };
|
|
192
205
|
}
|
|
@@ -236,8 +249,9 @@ export class ConditionEngine {
|
|
|
236
249
|
}
|
|
237
250
|
/**
|
|
238
251
|
* Parse une valeur depuis une chaîne (string, number, boolean, etc.)
|
|
252
|
+
* CORRIGÉ: Accepte currentIteration et supporte dateDiff() et expressions complexes
|
|
239
253
|
*/
|
|
240
|
-
parseValue(valueStr) {
|
|
254
|
+
parseValue(valueStr, currentIteration) {
|
|
241
255
|
const trimmed = valueStr.trim();
|
|
242
256
|
// Chaîne entre guillemets
|
|
243
257
|
if ((trimmed.startsWith('"') && trimmed.endsWith('"')) ||
|
|
@@ -263,7 +277,12 @@ export class ConditionEngine {
|
|
|
263
277
|
return new Date();
|
|
264
278
|
// Fonction dateAdd() - traiter et retourner la date calculée
|
|
265
279
|
if (trimmed.startsWith('dateAdd(')) {
|
|
266
|
-
|
|
280
|
+
// CORRECTION: Suffixer les variables si nécessaire
|
|
281
|
+
let processed = trimmed;
|
|
282
|
+
if (currentIteration !== undefined) {
|
|
283
|
+
processed = this.suffixVariableReferences(processed, currentIteration);
|
|
284
|
+
}
|
|
285
|
+
processed = this.processDateAdd(processed);
|
|
267
286
|
// Si le traitement a réussi, processed contient "new Date("ISO_STRING")"
|
|
268
287
|
const dateMatch = processed.match(/^new Date\(["']([^"']+)["']\)$/);
|
|
269
288
|
if (dateMatch) {
|
|
@@ -271,10 +290,51 @@ export class ConditionEngine {
|
|
|
271
290
|
}
|
|
272
291
|
return null;
|
|
273
292
|
}
|
|
274
|
-
//
|
|
275
|
-
if (trimmed.startsWith('
|
|
276
|
-
|
|
277
|
-
|
|
293
|
+
// CORRECTION 7: Fonction dateDiff() - traiter et retourner le nombre calculé
|
|
294
|
+
if (trimmed.startsWith('dateDiff(')) {
|
|
295
|
+
// Suffixer les variables si nécessaire
|
|
296
|
+
let processed = trimmed;
|
|
297
|
+
if (currentIteration !== undefined) {
|
|
298
|
+
processed = this.suffixVariableReferences(processed, currentIteration);
|
|
299
|
+
}
|
|
300
|
+
processed = this.processDateDiff(processed);
|
|
301
|
+
// Si le traitement a réussi, processed est un nombre
|
|
302
|
+
const numValue = parseFloat(processed);
|
|
303
|
+
if (!isNaN(numValue)) {
|
|
304
|
+
return numValue;
|
|
305
|
+
}
|
|
306
|
+
return null;
|
|
307
|
+
}
|
|
308
|
+
// Variable référence simple ${VAR} ou ${VAR_N}
|
|
309
|
+
const simpleVarMatch = trimmed.match(/^\$\{([A-Z_][A-Z0-9_]*(?:_\d+)?)\}$/);
|
|
310
|
+
if (simpleVarMatch) {
|
|
311
|
+
const varCode = simpleVarMatch[1];
|
|
312
|
+
// CORRECTION 4: Chercher d'abord la version itérative
|
|
313
|
+
if (currentIteration !== undefined && !varCode.match(/_\d+$/)) {
|
|
314
|
+
const iterativeKey = `${varCode}_${currentIteration}`;
|
|
315
|
+
if (this.context[iterativeKey] !== undefined) {
|
|
316
|
+
return this.context[iterativeKey];
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
// Sinon chercher la version globale
|
|
320
|
+
return this.context[varCode] ?? null;
|
|
321
|
+
}
|
|
322
|
+
// CORRECTION 8: Expression complexe contenant des variables (ex: ${AGE} + 1)
|
|
323
|
+
if (trimmed.includes('${')) {
|
|
324
|
+
try {
|
|
325
|
+
// Remplacer les variables et évaluer
|
|
326
|
+
let processed = trimmed;
|
|
327
|
+
if (currentIteration !== undefined) {
|
|
328
|
+
processed = this.suffixVariableReferences(processed, currentIteration);
|
|
329
|
+
}
|
|
330
|
+
processed = this.replaceVariableReferencesWithIterations(processed, currentIteration);
|
|
331
|
+
// Évaluer l'expression
|
|
332
|
+
const result = new Function(`"use strict"; return (${processed})`)();
|
|
333
|
+
return result;
|
|
334
|
+
}
|
|
335
|
+
catch {
|
|
336
|
+
return null;
|
|
337
|
+
}
|
|
278
338
|
}
|
|
279
339
|
// Par défaut, traiter comme chaîne
|
|
280
340
|
return trimmed;
|
|
@@ -308,16 +368,21 @@ export class ConditionEngine {
|
|
|
308
368
|
}
|
|
309
369
|
/**
|
|
310
370
|
* Remplace les références aux variables en tenant compte des itérations
|
|
371
|
+
* ORDRE CORRIGÉ: suffixer d'abord, puis traiter les fonctions de date
|
|
311
372
|
*/
|
|
312
373
|
replaceVariableReferencesWithIterations(condition, currentIteration) {
|
|
313
|
-
//
|
|
374
|
+
// ÉTAPE 1 (NOUVEAU): Suffixer les références ${VAR} → ${VAR_index} AVANT les fonctions de date
|
|
375
|
+
if (currentIteration !== undefined) {
|
|
376
|
+
condition = this.suffixVariableReferences(condition, currentIteration);
|
|
377
|
+
}
|
|
378
|
+
// ÉTAPE 2: Gérer les fonctions de date (maintenant avec variables suffixées)
|
|
314
379
|
condition = this.replaceDateFunctions(condition);
|
|
315
|
-
// Gérer les fonctions d'agrégation pour les groupes multiples
|
|
380
|
+
// ÉTAPE 3: Gérer les fonctions d'agrégation pour les groupes multiples
|
|
316
381
|
condition = this.replaceAggregationFunctions(condition);
|
|
317
|
-
// Remplacer les références aux variables
|
|
382
|
+
// ÉTAPE 4: Remplacer les références aux variables par leurs valeurs
|
|
318
383
|
return condition.replace(/\$\{([A-Z_][A-Z0-9_]*)(?:_(\d+))?\}/g, (match, varCode, iteration) => {
|
|
319
384
|
if (iteration) {
|
|
320
|
-
// Référence à une itération spécifique
|
|
385
|
+
// Référence à une itération spécifique (ex: ${VAR_2})
|
|
321
386
|
const value = this.context[`${varCode}_${iteration}`];
|
|
322
387
|
return this.formatValueForExpression(value);
|
|
323
388
|
}
|
|
@@ -328,11 +393,34 @@ export class ConditionEngine {
|
|
|
328
393
|
return this.formatValueForExpression(iterativeValue);
|
|
329
394
|
}
|
|
330
395
|
}
|
|
331
|
-
// Référence normale à une variable
|
|
396
|
+
// Référence normale à une variable globale
|
|
332
397
|
const value = this.context[varCode];
|
|
333
398
|
return this.formatValueForExpression(value);
|
|
334
399
|
});
|
|
335
400
|
}
|
|
401
|
+
/**
|
|
402
|
+
* Suffixe les références de variables ${VAR} → ${VAR_N} pour les groupes multiples
|
|
403
|
+
* Ne suffixe que si la variable a une version itérative dans le contexte
|
|
404
|
+
*/
|
|
405
|
+
suffixVariableReferences(condition, iteration) {
|
|
406
|
+
// Regex pour capturer ${VAR} mais pas ${VAR_N} (déjà suffixé)
|
|
407
|
+
return condition.replace(/\$\{([A-Z_][A-Z0-9_]*)(?!_\d)\}/g, (match, varCode) => {
|
|
408
|
+
// Vérifier si cette variable a une version itérative
|
|
409
|
+
const iterativeKey = `${varCode}_${iteration}`;
|
|
410
|
+
if (this.context[iterativeKey] !== undefined) {
|
|
411
|
+
return `\${${iterativeKey}}`;
|
|
412
|
+
}
|
|
413
|
+
// Garder la référence globale si pas de version itérative
|
|
414
|
+
return match;
|
|
415
|
+
});
|
|
416
|
+
}
|
|
417
|
+
/**
|
|
418
|
+
* Vérifie si une variable est de type itératif (groupe multiple)
|
|
419
|
+
*/
|
|
420
|
+
isIterativeVariable(varCode) {
|
|
421
|
+
// Chercher si au moins une version itérative existe
|
|
422
|
+
return this.context[`${varCode}_1`] !== undefined;
|
|
423
|
+
}
|
|
336
424
|
/**
|
|
337
425
|
* Remplace les fonctions d'agrégation pour les groupes multiples
|
|
338
426
|
*/
|
|
@@ -466,8 +554,9 @@ export class ConditionEngine {
|
|
|
466
554
|
if (quotedMatch) {
|
|
467
555
|
return parseDateString(quotedMatch[1]);
|
|
468
556
|
}
|
|
469
|
-
// Référence de variable ${CODE} - récupérer la valeur du contexte
|
|
470
|
-
|
|
557
|
+
// Référence de variable ${CODE} ou ${CODE_N} - récupérer la valeur du contexte
|
|
558
|
+
// CORRIGÉ: Accepter aussi les suffixes _N (ex: ${VAR_1}, ${VAR_2})
|
|
559
|
+
const varMatch = trimmed.match(/^\$\{([A-Z_][A-Z0-9_]*(?:_\d+)?)\}$/);
|
|
471
560
|
if (varMatch) {
|
|
472
561
|
const value = this.context[varMatch[1]];
|
|
473
562
|
if (value instanceof Date) {
|
package/dist/lib/form-tree.d.ts
CHANGED
|
@@ -92,6 +92,16 @@ export declare class FormTree implements IFormTree {
|
|
|
92
92
|
* (showMe, hideMe, setValeur, etc.)
|
|
93
93
|
*/
|
|
94
94
|
getConditionEngine(): ConditionEngine;
|
|
95
|
+
/**
|
|
96
|
+
* Exécute les AutoActions créées par setValeur() et retourne les mises à jour à appliquer
|
|
97
|
+
* @returns Map<variableCode, valeur> des variables à mettre à jour
|
|
98
|
+
*/
|
|
99
|
+
executeAutoActions(): Map<string, VariableValue>;
|
|
100
|
+
/**
|
|
101
|
+
* Évalue les conditions et exécute les auto-actions, retournant toutes les mises à jour
|
|
102
|
+
* Méthode utilitaire combinant evaluateAll() et executeAutoActions()
|
|
103
|
+
*/
|
|
104
|
+
evaluateAndExecuteActions(): Map<string, VariableValue>;
|
|
95
105
|
/**
|
|
96
106
|
* Retourne un snapshot de l'état complet pour debug
|
|
97
107
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"form-tree.d.ts","sourceRoot":"","sources":["../../src/lib/form-tree.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,cAAc,EACd,aAAa,EACd,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,SAAS,EACT,iBAAiB,EACjB,cAAc,EACd,SAAS,EACT,SAAS,EACT,eAAe,EAEhB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,eAAe,
|
|
1
|
+
{"version":3,"file":"form-tree.d.ts","sourceRoot":"","sources":["../../src/lib/form-tree.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/form-tree.js
CHANGED
|
@@ -570,6 +570,33 @@ export class FormTree {
|
|
|
570
570
|
getConditionEngine() {
|
|
571
571
|
return this.conditionEngine;
|
|
572
572
|
}
|
|
573
|
+
// ============ AUTO-ACTIONS ============
|
|
574
|
+
/**
|
|
575
|
+
* Exécute les AutoActions créées par setValeur() et retourne les mises à jour à appliquer
|
|
576
|
+
* @returns Map<variableCode, valeur> des variables à mettre à jour
|
|
577
|
+
*/
|
|
578
|
+
executeAutoActions() {
|
|
579
|
+
const actions = this.conditionEngine.getAutoActions();
|
|
580
|
+
const updates = new Map();
|
|
581
|
+
this.log(`Executing ${actions.length} auto-actions`);
|
|
582
|
+
for (const action of actions) {
|
|
583
|
+
if (action.shouldExecute && action.type === 'setValue') {
|
|
584
|
+
updates.set(action.targetVariable, action.value);
|
|
585
|
+
this.log(`AutoAction: Setting ${action.targetVariable} = ${JSON.stringify(action.value)}`);
|
|
586
|
+
}
|
|
587
|
+
}
|
|
588
|
+
// Nettoyer les auto-actions après exécution
|
|
589
|
+
this.conditionEngine.clearAutoActions();
|
|
590
|
+
return updates;
|
|
591
|
+
}
|
|
592
|
+
/**
|
|
593
|
+
* Évalue les conditions et exécute les auto-actions, retournant toutes les mises à jour
|
|
594
|
+
* Méthode utilitaire combinant evaluateAll() et executeAutoActions()
|
|
595
|
+
*/
|
|
596
|
+
evaluateAndExecuteActions() {
|
|
597
|
+
this.evaluateAll();
|
|
598
|
+
return this.executeAutoActions();
|
|
599
|
+
}
|
|
573
600
|
// ============ DEBUG ============
|
|
574
601
|
/**
|
|
575
602
|
* Retourne un snapshot de l'état complet pour debug
|
package/package.json
CHANGED