diff --git a/app/View/Label.php b/app/View/Label.php index f47ad6acd..3ec3a4099 100644 --- a/app/View/Label.php +++ b/app/View/Label.php @@ -142,7 +142,32 @@ class Label implements View // Remove Duplicates $toAdd = $field ->filter(fn($o) => !$myFields->contains('dataSource', $o['dataSource'])) - ->first(); + // For fields that have multiple options, we need to combine them + // into a single field so all values are displayed. + ->reduce(function ($previous, $current) { + // On the first iteration we simply return the item. + // If there is only one item to be processed for the row + // then this effectively skips everything below this if block. + if (is_null($previous)) { + return $current; + } + + // At this point we are dealing with a row with multiple items being displayed. + // We need to combine the label and value of the current item with the previous item. + + // The end result of this will be in this format: + // {labelOne} {valueOne} | {labelTwo} {valueTwo} | {labelThree} {valueThree} + $previous['value'] = trim(implode(' | ', [ + implode(' ', [$previous['label'], $previous['value']]), + implode(' ', [$current['label'], $current['value']]), + ])); + + // We'll set the label to an empty string since we + // injected the label into the value field above. + $previous['label'] = ''; + + return $previous; + }); return $toAdd ? $myFields->push($toAdd) : $myFields; }, new Collection());