File size: 802 Bytes
d9494a5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import { hasRecordFieldValue } from 'src/engine/api/graphql/graphql-query-runner/utils/has-record-field-value.util';

type RecordWithValue<T> = { value: T; recordId: string };

export const mergeArrayFieldValues = <T>(
  recordsWithValues: RecordWithValue<T>[],
): T[] | null => {
  const allValues: T[] = [];

  recordsWithValues.forEach((record) => {
    if (record.value === null || record.value === undefined) {
      return;
    }

    if (!Array.isArray(record.value)) {
      throw new Error(
        `Expected array value but received ${typeof record.value}`,
      );
    }

    allValues.push(
      ...record.value.filter((value) => hasRecordFieldValue(value)),
    );
  });

  const uniqueValues = Array.from(new Set(allValues));

  return uniqueValues.length > 0 ? uniqueValues : null;
};