export function mergeWithSeparatePool()

in src/pages/Home/Home.state.ts [161:199]


export function mergeWithSeparatePool(
  runs: Run[],
  initialData: DataAndNew,
  params: Record<string, string>,
): DataAndNew {
  return runs.reduce((data, item): DataAndNew => {
    const groupKey = item[params._group as keyof Run] || 'undefined';
    if (typeof groupKey === 'string') {
      // If we already have same group, we need to check if we can add current item there
      if (data.rungroups[groupKey]) {
        const index = data.rungroups[groupKey].findIndex((r) => r.run_number === item.run_number);
        // If we already have this run, we can update it....
        if (index > -1) {
          return {
            rungroups: {
              ...data.rungroups,
              [groupKey]: sortRuns(
                data.rungroups[groupKey].map((r) => (r.run_number === item.run_number ? item : r)),
                params._order,
              ),
            },
            newRuns: data.newRuns,
          };
        }
      }
      //...else we need to merge or add it to newData
      const indexInNewData = data.newRuns.findIndex((r) => r.run_number === item.run_number);

      return {
        rungroups: data.rungroups,
        newRuns:
          indexInNewData > -1
            ? data.newRuns.map((r) => (r.run_number === item.run_number ? item : r))
            : [...data.newRuns, item],
      };
    }
    return data;
  }, initialData);
}