pacificclimate/climate-explorer-frontend

View on GitHub
src/components/graphs/DualTimeSeriesGraph.js

Summary

Maintainability
A
3 hrs
Test Coverage
import React from "react";

import _ from "lodash";

import { timeseriesToTimeseriesGraph } from "../../core/chart-generators";
import TimeSeriesGraph from "./TimeSeriesGraph";

export default function DualTimeSeriesGraph(props) {
  function getMetadata() {
    const {
      model_id,
      experiment,
      variable_id,
      meta,
      comparand_id,
      comparandMeta,
    } = props;

    // Set up metadata sets for primary variable
    const primaryVariableMetadata = _.find(meta, {
      model_id,
      experiment,
      variable_id,
    });

    let metadataSets = [primaryVariableMetadata];

    // Extend metadata sets with comparand, if present and different from variable
    const secondaryVariableMetadata = _.find(comparandMeta, {
      model_id,
      experiment,
      variable_id: comparand_id,
    });
    if (
      primaryVariableMetadata &&
      secondaryVariableMetadata &&
      primaryVariableMetadata.unique_id !== secondaryVariableMetadata.unique_id
    ) {
      metadataSets.push(secondaryVariableMetadata);
    }

    return metadataSets;
  }

  function dataToGraphSpec(meta, data) {
    // Convert `data` (described by `meta`) to a graph specification compatible
    // with `DataGraph`.
    return timeseriesToTimeseriesGraph(meta, ...data);
  }

  const graphProps = _.pick(
    props,
    "model_id",
    "variable_id",
    "comparand_id",
    "experiment",
    "meta",
    "comparandMeta",
    "area",
  );

  return (
    <TimeSeriesGraph
      {...graphProps}
      getMetadata={getMetadata}
      dataToGraphSpec={dataToGraphSpec}
    />
  );
}