@rsuci/shared-form-components 1.0.50 → 1.0.51
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/dist/components/form-renderer/FormRenderer.d.ts.map +1 -1
- package/dist/components/form-renderer/FormRenderer.js +49 -3
- package/dist/hooks/useFormTree.d.ts +5 -1
- package/dist/hooks/useFormTree.d.ts.map +1 -1
- package/dist/hooks/useFormTree.js +6 -1
- package/dist/lib/form-tree.d.ts +8 -0
- package/dist/lib/form-tree.d.ts.map +1 -1
- package/dist/lib/form-tree.js +37 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FormRenderer.d.ts","sourceRoot":"","sources":["../../../src/components/form-renderer/FormRenderer.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,
|
|
1
|
+
{"version":3,"file":"FormRenderer.d.ts","sourceRoot":"","sources":["../../../src/components/form-renderer/FormRenderer.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAA4D,MAAM,OAAO,CAAC;AACjF,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,cAAc,EAIf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EAEtB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAqBlF;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,6BAA6B;IAC7B,UAAU,EAAE,iBAAiB,CAAC;IAC9B,6DAA6D;IAC7D,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B,yBAAyB;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAClD,oCAAoC;IACpC,MAAM,EAAE,kBAAkB,CAAC;IAC3B,iCAAiC;IACjC,SAAS,EAAE,qBAAqB,CAAC;IACjC,wBAAwB;IACxB,QAAQ,CAAC,EAAE,oBAAoB,CAAC;IAChC,wCAAwC;IACxC,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;IAC5C,iCAAiC;IACjC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,iCAAiC;IACjC,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AA2lBD;;;GAGG;AACH,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAgBpD,CAAC;AAEF,eAAe,YAAY,CAAC"}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
*/
|
|
6
6
|
'use client';
|
|
7
7
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
8
|
-
import { useMemo, useCallback, useState } from 'react';
|
|
8
|
+
import { useMemo, useCallback, useState, useEffect, useRef } from 'react';
|
|
9
9
|
// Contexte et Provider
|
|
10
10
|
import { FormRendererProvider, useFormRendererContext } from './FormRendererContext';
|
|
11
11
|
// Sous-composants
|
|
@@ -34,8 +34,54 @@ const FormRendererInner = () => {
|
|
|
34
34
|
const [validationAction, setValidationAction] = useState('valider');
|
|
35
35
|
const [isSavingDraft, setIsSavingDraft] = useState(false);
|
|
36
36
|
const [isSubmittingForm, setIsSubmittingForm] = useState(false);
|
|
37
|
-
// FormTree pour la visibilité des variables
|
|
38
|
-
const { formTree, getVisibleVariables } = useFormTree(groupesWithInstances.length > 0 ? groupesWithInstances : formulaire?.groupes || [], responses, { debug: false });
|
|
37
|
+
// FormTree pour la visibilité des variables et les autoactions
|
|
38
|
+
const { formTree, getVisibleVariables, evaluateAutoActionsForInstance } = useFormTree(groupesWithInstances.length > 0 ? groupesWithInstances : formulaire?.groupes || [], responses, { debug: false });
|
|
39
|
+
// Refs pour éviter les boucles infinies lors de l'application des autoactions
|
|
40
|
+
const isApplyingAutoActions = useRef(false);
|
|
41
|
+
const lastProcessedResponsesKey = useRef('');
|
|
42
|
+
// useEffect pour évaluer et appliquer les autoactions (calculs automatiques comme setValeur)
|
|
43
|
+
useEffect(() => {
|
|
44
|
+
// Éviter les boucles infinies: ne pas exécuter si on est déjà en train d'appliquer des autoactions
|
|
45
|
+
if (isApplyingAutoActions.current)
|
|
46
|
+
return;
|
|
47
|
+
// Éviter de re-traiter les mêmes réponses
|
|
48
|
+
const responsesKey = JSON.stringify(responses);
|
|
49
|
+
if (responsesKey === lastProcessedResponsesKey.current)
|
|
50
|
+
return;
|
|
51
|
+
lastProcessedResponsesKey.current = responsesKey;
|
|
52
|
+
// Pas de groupe courant, rien à faire
|
|
53
|
+
if (!currentGroup)
|
|
54
|
+
return;
|
|
55
|
+
// Déterminer le numéro d'instance pour les groupes multiples
|
|
56
|
+
const instanceNumber = currentGroup.estMultiple
|
|
57
|
+
? currentInstance?.numeroInstance
|
|
58
|
+
: undefined;
|
|
59
|
+
// Évaluer les autoactions pour le groupe courant
|
|
60
|
+
const autoUpdates = evaluateAutoActionsForInstance(currentGroup.code, instanceNumber);
|
|
61
|
+
// Appliquer les mises à jour si nécessaire
|
|
62
|
+
if (autoUpdates.size > 0) {
|
|
63
|
+
isApplyingAutoActions.current = true;
|
|
64
|
+
autoUpdates.forEach((value, targetKey) => {
|
|
65
|
+
// Trouver la variable correspondante dans le groupe courant
|
|
66
|
+
const targetVariable = currentGroup.variables?.find(v => {
|
|
67
|
+
const expectedKey = instanceNumber ? `${v.code}_${instanceNumber}` : v.code;
|
|
68
|
+
return expectedKey === targetKey || v.code === targetKey;
|
|
69
|
+
});
|
|
70
|
+
if (targetVariable) {
|
|
71
|
+
// Vérifier que la valeur est différente avant de mettre à jour
|
|
72
|
+
const currentResponseKey = instanceNumber
|
|
73
|
+
? `${targetVariable.code}_${instanceNumber}`
|
|
74
|
+
: targetVariable.code;
|
|
75
|
+
const currentValue = responses[currentResponseKey]?.valeur;
|
|
76
|
+
if (currentValue !== value) {
|
|
77
|
+
console.log(`🔄 [AutoAction] Setting ${targetKey} = ${JSON.stringify(value)}`);
|
|
78
|
+
updateResponse(targetVariable.code, value, targetVariable, instanceNumber);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
isApplyingAutoActions.current = false;
|
|
83
|
+
}
|
|
84
|
+
}, [responses, currentGroup, currentInstance, evaluateAutoActionsForInstance, updateResponse]);
|
|
39
85
|
// Vérifier si une variable est visible
|
|
40
86
|
const isVariableVisible = useCallback((variable) => {
|
|
41
87
|
if (!currentGroup?.code)
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Hook React pour utiliser le FormTree
|
|
3
3
|
* RSU v2 - Gestion centralisée de l'état de visibilité et des jumps
|
|
4
4
|
*/
|
|
5
|
-
import { GroupeFormulaire, EnqueteReponse, VariableFormulaire } from '../types/enquete';
|
|
5
|
+
import { GroupeFormulaire, EnqueteReponse, VariableFormulaire, VariableValue } from '../types/enquete';
|
|
6
6
|
import { FormTree } from '../lib/form-tree';
|
|
7
7
|
import { JumpError, JumpRange, VariableNodeState, GroupNodeState } from '../types/form-tree';
|
|
8
8
|
export interface UseFormTreeOptions {
|
|
@@ -43,6 +43,10 @@ export interface UseFormTreeReturn {
|
|
|
43
43
|
forceEvaluate: () => void;
|
|
44
44
|
/** Compteur de mise à jour (pour forcer le re-render) */
|
|
45
45
|
updateCount: number;
|
|
46
|
+
/** Exécute les autoactions globales et retourne les mises à jour */
|
|
47
|
+
executeAutoActions: () => Map<string, VariableValue>;
|
|
48
|
+
/** Évalue les autoactions pour une instance spécifique d'un groupe multiple */
|
|
49
|
+
evaluateAutoActionsForInstance: (groupeCode?: string, instanceNumber?: number) => Map<string, VariableValue>;
|
|
46
50
|
}
|
|
47
51
|
/**
|
|
48
52
|
* Hook pour utiliser le FormTree dans les composants React
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFormTree.d.ts","sourceRoot":"","sources":["../../src/hooks/useFormTree.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"useFormTree.d.ts","sourceRoot":"","sources":["../../src/hooks/useFormTree.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACvG,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAE7F,MAAM,WAAW,kBAAkB;IACjC,8CAA8C;IAC9C,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC;IACzC,kCAAkC;IAClC,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,2BAA2B;IAC3B,QAAQ,EAAE,QAAQ,CAAC;IAEnB,kDAAkD;IAClD,mBAAmB,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,kBAAkB,EAAE,CAAC;IAElE,mGAAmG;IACnG,8BAA8B,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,KAAK,kBAAkB,EAAE,CAAC;IAErG,8DAA8D;IAC9D,sBAAsB,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC,CAAC;IAE5D,gGAAgG;IAChG,iCAAiC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC,CAAC;IAE/F,+CAA+C;IAC/C,aAAa,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAE9E,uEAAuE;IACvE,yBAAyB,EAAE,MAAM,MAAM,EAAE,CAAC;IAE1C,qCAAqC;IACrC,gBAAgB,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,iBAAiB,GAAG,SAAS,CAAC;IAE1E,kCAAkC;IAClC,aAAa,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,cAAc,GAAG,SAAS,CAAC;IAElE,0CAA0C;IAC1C,UAAU,EAAE,SAAS,EAAE,CAAC;IAExB,6BAA6B;IAC7B,WAAW,EAAE,SAAS,EAAE,CAAC;IAEzB,6DAA6D;IAC7D,yBAAyB,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,KAAK,SAAS,EAAE,CAAC;IAEvF,sDAAsD;IACtD,aAAa,EAAE,MAAM,IAAI,CAAC;IAE1B,yDAAyD;IACzD,WAAW,EAAE,MAAM,CAAC;IAEpB,oEAAoE;IACpE,kBAAkB,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAErD,+EAA+E;IAC/E,8BAA8B,EAAE,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,KAAK,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;CAC9G;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,WAAW,CACzB,OAAO,EAAE,gBAAgB,EAAE,EAC3B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,EACzC,OAAO,GAAE,kBAAuB,GAC/B,iBAAiB,CA4HnB;AAED,eAAe,WAAW,CAAC"}
|
|
@@ -69,6 +69,9 @@ export function useFormTree(groupes, responses, options = {}) {
|
|
|
69
69
|
formTree.evaluateAll();
|
|
70
70
|
setUpdateCount(c => c + 1);
|
|
71
71
|
}, [formTree]);
|
|
72
|
+
// Méthodes pour les autoactions
|
|
73
|
+
const executeAutoActions = useCallback(() => formTree.executeAutoActions(), [formTree, updateCount]);
|
|
74
|
+
const evaluateAutoActionsForInstance = useCallback((groupeCode, instanceNumber) => formTree.evaluateAutoActionsForInstance(groupeCode, instanceNumber), [formTree, updateCount]);
|
|
72
75
|
// Valeurs dérivées
|
|
73
76
|
const jumpErrors = useMemo(() => formTree.getJumpErrors(), [formTree, updateCount]);
|
|
74
77
|
const activeJumps = useMemo(() => formTree.getActiveJumps(), [formTree, updateCount]);
|
|
@@ -86,7 +89,9 @@ export function useFormTree(groupes, responses, options = {}) {
|
|
|
86
89
|
activeJumps,
|
|
87
90
|
getActiveJumpsForInstance,
|
|
88
91
|
forceEvaluate,
|
|
89
|
-
updateCount
|
|
92
|
+
updateCount,
|
|
93
|
+
executeAutoActions,
|
|
94
|
+
evaluateAutoActionsForInstance
|
|
90
95
|
};
|
|
91
96
|
}
|
|
92
97
|
export default useFormTree;
|
package/dist/lib/form-tree.d.ts
CHANGED
|
@@ -102,6 +102,14 @@ export declare class FormTree implements IFormTree {
|
|
|
102
102
|
* Méthode utilitaire combinant evaluateAll() et executeAutoActions()
|
|
103
103
|
*/
|
|
104
104
|
evaluateAndExecuteActions(): Map<string, VariableValue>;
|
|
105
|
+
/**
|
|
106
|
+
* Évalue les conditions setValeur pour une instance spécifique d'un groupe multiple
|
|
107
|
+
* et retourne les mises à jour à appliquer
|
|
108
|
+
* @param groupeCode Code du groupe (optionnel pour tous les groupes)
|
|
109
|
+
* @param instanceNumber Numéro d'instance (undefined pour groupes simples)
|
|
110
|
+
* @returns Map<variableCode_suffixé, valeur> des variables à mettre à jour
|
|
111
|
+
*/
|
|
112
|
+
evaluateAutoActionsForInstance(groupeCode?: string, instanceNumber?: number): Map<string, VariableValue>;
|
|
105
113
|
/**
|
|
106
114
|
* Retourne un snapshot de l'état complet pour debug
|
|
107
115
|
*/
|
|
@@ -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,EAAc,MAAM,oBAAoB,CAAC;AAEjE,qBAAa,QAAS,YAAW,SAAS;IACxC,OAAO,CAAC,UAAU,CAA0C;IAC5D,OAAO,CAAC,aAAa,CAA6C;IAClE,OAAO,CAAC,gBAAgB,CAA4B;IACpD,OAAO,CAAC,UAAU,CAAmB;IACrC,OAAO,CAAC,UAAU,CAAmB;IACrC,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,SAAS,CAAiC;IAClD,OAAO,CAAC,KAAK,CAAU;IAIvB,OAAO,CAAC,cAAc,CAA0D;IAGhF,OAAO,CAAC,kBAAkB,CAAuC;IAE1D,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC;gBAG9C,SAAS,GAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAM,EAC9C,OAAO,GAAE,eAAoB;IAU/B,OAAO,CAAC,GAAG;IAQX,mBAAmB,CAAC,OAAO,EAAE,gBAAgB,EAAE,GAAG,IAAI;IAmDtD,eAAe,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,GAAG,IAAI;IAkBhE,WAAW,IAAI,IAAI;IA+BnB,OAAO,CAAC,uBAAuB;IAkC/B,OAAO,CAAC,YAAY;IAIpB;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAiB3B,OAAO,CAAC,oBAAoB;IA6C5B,OAAO,CAAC,YAAY;IA+DpB,OAAO,CAAC,eAAe;IAsBvB,OAAO,CAAC,sBAAsB;IAY9B,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,kBAAkB,EAAE;IAS7D;;;;;OAKG;IACH,8BAA8B,CAAC,UAAU,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,kBAAkB,EAAE;IA4BhG;;;OAGG;IACH,OAAO,CAAC,sBAAsB;IAwE9B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAmBxB;;OAEG;IACH,OAAO,CAAC,+BAA+B;IA6DvC;;OAEG;IACH,OAAO,CAAC,8BAA8B;IAiBtC;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAuB/B;;OAEG;IACH,yBAAyB,CAAC,UAAU,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,SAAS,EAAE;IAMlF;;OAEG;IACH,iCAAiC,CAAC,UAAU,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;IAgB1F,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAI7D,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS;IAIrE,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;IAYvD,cAAc,IAAI,SAAS,EAAE;IAI7B,aAAa,IAAI,SAAS,EAAE;IAM5B,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE;IA+BzE,OAAO,CAAC,YAAY;IAOpB,yBAAyB,IAAI,MAAM,EAAE;IAcrC;;;OAGG;IACH,kBAAkB,IAAI,eAAe;IAMrC;;;OAGG;IACH,kBAAkB,IAAI,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC;IAmBhD;;;OAGG;IACH,yBAAyB,IAAI,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC;
|
|
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
|
@@ -597,6 +597,43 @@ export class FormTree {
|
|
|
597
597
|
this.evaluateAll();
|
|
598
598
|
return this.executeAutoActions();
|
|
599
599
|
}
|
|
600
|
+
/**
|
|
601
|
+
* Évalue les conditions setValeur pour une instance spécifique d'un groupe multiple
|
|
602
|
+
* et retourne les mises à jour à appliquer
|
|
603
|
+
* @param groupeCode Code du groupe (optionnel pour tous les groupes)
|
|
604
|
+
* @param instanceNumber Numéro d'instance (undefined pour groupes simples)
|
|
605
|
+
* @returns Map<variableCode_suffixé, valeur> des variables à mettre à jour
|
|
606
|
+
*/
|
|
607
|
+
evaluateAutoActionsForInstance(groupeCode, instanceNumber) {
|
|
608
|
+
const updates = new Map();
|
|
609
|
+
// Déterminer quels groupes évaluer
|
|
610
|
+
const groupesToEvaluate = groupeCode
|
|
611
|
+
? [this.groupNodes.get(groupeCode)].filter((g) => g !== undefined)
|
|
612
|
+
: Array.from(this.groupNodes.values());
|
|
613
|
+
this.log(`Evaluating autoactions for ${groupesToEvaluate.length} groups, instance: ${instanceNumber}`);
|
|
614
|
+
for (const groupNode of groupesToEvaluate) {
|
|
615
|
+
// Parcourir les variables du groupe
|
|
616
|
+
for (const varState of groupNode.variables) {
|
|
617
|
+
const condition = varState.variable.conditionsAffichage;
|
|
618
|
+
if (!condition || !condition.includes('setValeur('))
|
|
619
|
+
continue;
|
|
620
|
+
this.log(`Evaluating setValeur for ${varState.variable.code}, condition: ${condition}`);
|
|
621
|
+
// Évaluer la condition avec le numéro d'instance
|
|
622
|
+
this.conditionEngine.evaluate(condition, instanceNumber);
|
|
623
|
+
}
|
|
624
|
+
}
|
|
625
|
+
// Récupérer et retourner les autoactions
|
|
626
|
+
const actions = this.conditionEngine.getAutoActions();
|
|
627
|
+
this.log(`Got ${actions.length} autoactions after evaluation`);
|
|
628
|
+
for (const action of actions) {
|
|
629
|
+
if (action.shouldExecute && action.type === 'setValue') {
|
|
630
|
+
updates.set(action.targetVariable, action.value);
|
|
631
|
+
this.log(`AutoAction for instance: ${action.targetVariable} = ${JSON.stringify(action.value)}`);
|
|
632
|
+
}
|
|
633
|
+
}
|
|
634
|
+
this.conditionEngine.clearAutoActions();
|
|
635
|
+
return updates;
|
|
636
|
+
}
|
|
600
637
|
// ============ DEBUG ============
|
|
601
638
|
/**
|
|
602
639
|
* Retourne un snapshot de l'état complet pour debug
|
package/package.json
CHANGED