All files / modules/70-pipeline/components/PipelineStudio/Stages StagesCollection.tsx

90.91% Statements 10/11
80% Branches 8/10
83.33% Functions 5/6
90.91% Lines 10/11

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                                    82x                   2x               15x 15x       104x 104x       5x 5x     5x       82x  
/*
 * 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 type { UseStringsReturn } from 'framework/strings'
import type { PipelineStageProps } from '@pipeline/components/PipelineStages/PipelineStage'
import type { StageAttributes, StagesMap } from '../PipelineContext/PipelineContext'
 
export type StageFactory = (
  isEnabled: boolean,
  getString: UseStringsReturn['getString']
) => React.ReactElement<PipelineStageProps>
export type StageAttributesFactory = (getString: UseStringsReturn['getString']) => StageAttributes
 
class StagesCollection {
  protected stagesByType = new Map<
    string,
    { stageFactory: StageFactory; stageAttributesFactory: StageAttributesFactory }
  >()
 
  registerStageFactory(
    stageType: string,
    stageAttributesFactory: StageAttributesFactory,
    stageFactory: StageFactory
  ): void {
    this.stagesByType.set(stageType, { stageFactory, stageAttributesFactory })
  }
 
  getStage(
    stageType: string,
    isEnabled: boolean,
    getString: UseStringsReturn['getString']
  ): React.ReactElement<PipelineStageProps> | null {
    const stageFactories = this.stagesByType.get(stageType)
    return stageFactories?.stageFactory(isEnabled, getString) || null
  }
 
  getStageAttributes(stageType: string, getString: UseStringsReturn['getString']): StageAttributes | undefined {
    const stageFactories = this.stagesByType.get(stageType)
    return stageFactories?.stageAttributesFactory(getString)
  }
 
  getAllStagesAttributes(getString: UseStringsReturn['getString']): StagesMap {
    const stagesMap: StagesMap = {}
    this.stagesByType.forEach((value, key) => {
      stagesMap[key] = value.stageAttributesFactory(getString)
    })
    return stagesMap
  }
}
 
export const stagesCollection = new StagesCollection()