From da69273893807f5336b95db21fcb57696aa4bce1 Mon Sep 17 00:00:00 2001
From: "mathias.chouet" <mathias.chouet@irstea.fr>
Date: Fri, 21 Feb 2020 14:34:40 +0100
Subject: [PATCH] Adaptation to jalhyd#199

---
 src/app/util.ts             | 28 +++++++++++++++++-----------
 src/locale/messages.en.json |  3 ++-
 src/locale/messages.fr.json |  3 ++-
 3 files changed, 21 insertions(+), 13 deletions(-)

diff --git a/src/app/util.ts b/src/app/util.ts
index a8fbfd572..f4a315c75 100644
--- a/src/app/util.ts
+++ b/src/app/util.ts
@@ -1,7 +1,7 @@
 import { NgParameter } from "./formulaire/elements/ngparam";
 import { ServiceFactory } from "./services/service-factory";
 
-import { formattedValue } from "jalhyd";
+import { formattedValue, Nub, ParamDefinition, ParamValues } from "jalhyd";
 
 export function logObject(obj: {}, m?: string) {
     // évite le message "Value below was evaluated just now" dans le debugger de Chrome
@@ -48,20 +48,26 @@ export function decodeHtml(html: string): string {
  * @param varParams
  */
 export function longestVarParam(varParams: NgParameter[]): { param: NgParameter, index: number, size: number } {
-    let i = 0;
-    let longest = 0;
-    let size = 0;
-    for (const v of varParams) {
-        const s = v.valuesIterator.count();
-        if (s > size) {
-            size = s;
-            longest = i;
+    const variated: { param: ParamDefinition, values: ParamValues }[] = [];
+    for (const vp of varParams) {
+        variated.push({
+            param: vp.paramDefinition,
+            values: vp.paramDefinition.paramValues
+        });
+    }
+    const { size, longest, minLinkedResultParam } = Nub.findVariatedSize(variated);
+    let realSize = size;
+    // if at least one linked variated result was found
+    if (minLinkedResultParam !== undefined) {
+        // if the size limited by linked variated results is shorter
+        // than the size of the longest variating element, limit it
+        if (minLinkedResultParam.values.valuesIterator.count() < realSize) {
+            realSize = minLinkedResultParam.values.valuesIterator.count();
         }
-        i++;
     }
     return {
         param: varParams[longest],
         index: longest,
-        size: size
+        size: realSize
     };
 }
diff --git a/src/locale/messages.en.json b/src/locale/messages.en.json
index 89299e905..90fafec0d 100644
--- a/src/locale/messages.en.json
+++ b/src/locale/messages.en.json
@@ -510,5 +510,6 @@
     "WARNING_SECTION_OVERFLOW": "Overflow: water elevation exceeds embankment elevation",
     "WARNING_SECTION_OVERFLOW_ABSC": "Overflow: water elevation exceeds embankment elevation between abscissae %xa% et %xb%",
     "WARNING_SESSION_LOAD_NOTES_MERGED": "Notes have been merged",
-    "WARNING_VALUE_ROUNDED_TO_INTEGER": "Value of %symbol% was rounded to %rounded%"
+    "WARNING_VALUE_ROUNDED_TO_INTEGER": "Value of %symbol% was rounded to %rounded%",
+    "WARNING_VARIATED_LENGTH_LIMITED_BY_LINKED_RESULT": "Number of results is limited by linked result %symbol%"
 }
diff --git a/src/locale/messages.fr.json b/src/locale/messages.fr.json
index b9c0993ee..db945e314 100644
--- a/src/locale/messages.fr.json
+++ b/src/locale/messages.fr.json
@@ -509,5 +509,6 @@
     "WARNING_SECTION_OVERFLOW": "Débordement: la cote de l'eau dépasse la cote de berge",
     "WARNING_SECTION_OVERFLOW_ABSC": "Débordement: la cote de l'eau dépasse la cote de berge entre les abscisses %xa% et %xb%",
     "WARNING_SESSION_LOAD_NOTES_MERGED": "Les notes ont été fusionnées",
-    "WARNING_VALUE_ROUNDED_TO_INTEGER": "La valeur de %symbol% a été arrondie à %rounded%"
+    "WARNING_VALUE_ROUNDED_TO_INTEGER": "La valeur de %symbol% a été arrondie à %rounded%",
+    "WARNING_VARIATED_LENGTH_LIMITED_BY_LINKED_RESULT": "Le nombre de résultats est limité par le résultat lié %symbol%"
 }
-- 
GitLab