All files / modules/70-pipeline/components/NewPipelineSelect NewPipelineSelect.tsx

94.44% Statements 17/18
66.67% Branches 12/18
85.71% Functions 6/7
94.44% Lines 17/18

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 60 61 62 63 64 65 66 67 68 69 70              7x 7x   7x   7x 7x                 7x 24x 23x 23x   23x                       5x 5x   5x 10x   5x               23x       3x                        
/*
 * Copyright 2021 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 React from 'react'
import { useParams } from 'react-router-dom'
import type { SelectOption } from '@wings-software/uicore'
import { DropDown } from '@wings-software/uicore'
import type { PipelineType, ProjectPathProps } from '@common/interfaces/RouteInterfaces'
import { useGetPipelineList } from 'services/pipeline-ng'
import { useStrings } from 'framework/strings'
 
export interface NewPipelineSelectProps {
  selectedPipeline?: string
  onPipelineSelect(id: string): void
  defaultSelect?: string
  className?: string
}
 
export default function NewPipelineSelect(props: NewPipelineSelectProps): React.ReactElement {
  const { accountId, projectIdentifier, orgIdentifier, module } = useParams<PipelineType<ProjectPathProps>>()
  const [query, setQuery] = React.useState('')
  const { getString } = useStrings()
 
  const { mutate: reloadPipelines } = useGetPipelineList({
    queryParams: {
      accountIdentifier: accountId,
      projectIdentifier,
      module,
      orgIdentifier,
      searchTerm: query,
      size: 10
    }
  })
 
  function dummyPromise(): Promise<SelectOption[]> {
    return new Promise<SelectOption[]>(resolve => {
      reloadPipelines({ filterType: 'PipelineSetup' })
        .then(result => {
          const selectItems = result?.data?.content?.map(item => {
            return { label: item.name || '', value: item.identifier || '' }
          }) as SelectOption[]
          resolve(selectItems || [])
        })
        .catch(() => {
          resolve([])
        })
    })
  }
 
  return (
    <DropDown
      buttonTestId="pipeline-select"
      onChange={option => {
        props.onPipelineSelect(option.value as string)
      }}
      value={props.selectedPipeline}
      items={dummyPromise}
      usePortal={true}
      addClearBtn={true}
      query={query}
      onQueryChange={setQuery}
      placeholder={getString('pipelines')}
    />
  )
}