All files / modules/85-cv/hooks/GroupedSideNaveHook useGroupedSideNaveHook.tsx

100% Statements 14/14
100% Branches 0/0
100% Functions 3/3
100% Lines 14/14

Press n or j to go to the next uncovered block, b, p or k for the previous block.

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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59              30x 30x 30x           30x                       30x 63x 62x 62x       62x       62x       62x 53x 53x   62x                        
/*
 * Copyright 2022 Harness Inc. All rights reserved.
 * Use of this source code is governed by the PolyForm Shield 1.0.0 license
 * that can be found in the licenses directory at the root of this repository, also available at
 * https://polyformproject.org/wp-content/uploads/2020/06/PolyForm-Shield-1.0.0.txt.
 */
 
import { useState } from 'react'
import { flatten } from 'lodash-es'
import { useStrings } from 'framework/strings'
import type {
  CreatedMetricsWithSelectedIndex,
  CustomSelectedAndMappedMetrics,
  GroupedCreatedMetrics
} from '@cv/pages/health-source/common/CustomMetric/CustomMetric.types'
import {
  initializeSelectedMetricsMap,
  initializeCreatedMetrics,
  initGroupedCreatedMetrics
} from '@cv/pages/health-source/common/CustomMetric/CustomMetric.utils'
 
interface UseGroupedSideNaveHookInterface {
  defaultCustomMetricName: string
  initCustomMetricData: any
  mappedServicesAndEnvs: Map<string, any>
}
 
export default function useGroupedSideNaveHook(props: UseGroupedSideNaveHookInterface) {
  const { getString } = useStrings()
  const { defaultCustomMetricName, initCustomMetricData, mappedServicesAndEnvs } = props
  const [{ selectedMetric, mappedMetrics }, setMappedMetrics] = useState<CustomSelectedAndMappedMetrics>(
    initializeSelectedMetricsMap(defaultCustomMetricName, initCustomMetricData, mappedServicesAndEnvs)
  )
 
  const [{ createdMetrics, selectedMetricIndex }, setCreatedMetrics] = useState<CreatedMetricsWithSelectedIndex>(
    initializeCreatedMetrics(defaultCustomMetricName, selectedMetric, mappedMetrics)
  )
 
  const [groupedCreatedMetrics, setGroupedCreatedMetrics] = useState<GroupedCreatedMetrics>(
    initGroupedCreatedMetrics(mappedMetrics, getString)
  )
 
  const groupedCreatedMetricsList = flatten(Object.values(groupedCreatedMetrics))
    .map(item => item.metricName)
    .filter(item => Boolean(item)) as string[]
 
  return {
    createdMetrics,
    mappedMetrics,
    selectedMetric,
    selectedMetricIndex,
    groupedCreatedMetrics,
    groupedCreatedMetricsList,
    setMappedMetrics,
    setCreatedMetrics,
    setGroupedCreatedMetrics
  }
}