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 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 | 218x 218x 218x 218x 218x 218x 218x 218x 218x 2386x 218x 38x 37x 37x 37x 37x 37x 37x 37x 8x 1x 37x 8x 37x | /* * 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 React from 'react' import { useParams } from 'react-router-dom' import { defaultTo, get } from 'lodash-es' import { parse } from 'yaml' import { useMutateAsGet, useQueryParams } from '@common/hooks' import type { GitQueryParams, TemplateStudioPathProps } from '@common/interfaces/RouteInterfaces' import { yamlStringify } from '@common/utils/YamlHelperMethods' import { Failure, NGTemplateInfoConfig, useCreateVariables, useGetYamlWithTemplateRefsResolved, VariableMergeServiceResponse } from 'services/template-ng' import type { UseMutateAsGetReturn } from '@common/hooks/useMutateAsGet' import type { StageElementConfig, StepElementConfig } from 'services/cd-ng' export interface TemplateVariablesData { variablesTemplate: StepElementConfig | StageElementConfig originalTemplate: NGTemplateInfoConfig metadataMap: Required<VariableMergeServiceResponse>['metadataMap'] error?: UseMutateAsGetReturn<Failure | Error>['error'] | null initLoading: boolean loading: boolean } export const TemplateVariablesContext = React.createContext<TemplateVariablesData>({ variablesTemplate: { name: '', identifier: '' }, originalTemplate: { name: '', identifier: '', versionLabel: '', type: 'Step' }, metadataMap: {}, error: null, initLoading: true, loading: false }) export function useTemplateVariables(): TemplateVariablesData { return React.useContext(TemplateVariablesContext) } export function TemplateVariablesContextProvider( props: React.PropsWithChildren<{ template: NGTemplateInfoConfig }> ): React.ReactElement { const { template: originalTemplate } = props const [{ variablesTemplate, metadataMap }, setTemplateVariablesData] = React.useState< Pick<TemplateVariablesData, 'metadataMap' | 'variablesTemplate'> >({ variablesTemplate: { name: '', identifier: '' }, metadataMap: {} }) const { accountId, orgIdentifier, projectIdentifier } = useParams<TemplateStudioPathProps>() const { repoIdentifier, branch } = useQueryParams<GitQueryParams>() const [resolvedTemplate, setResolvedTemplate] = React.useState<NGTemplateInfoConfig>(originalTemplate) const { data, error, initLoading, loading } = useMutateAsGet(useCreateVariables, { body: yamlStringify({ template: resolvedTemplate }) as unknown as void, requestOptions: { headers: { 'content-type': 'application/yaml' } }, queryParams: { accountIdentifier: accountId, orgIdentifier, projectIdentifier }, debounce: 800 }) const { data: resolvedTemplateResponse, initLoading: initLoadingResolvedTemplate, loading: loadingResolvedTemplate } = useMutateAsGet(useGetYamlWithTemplateRefsResolved, { queryParams: { accountIdentifier: accountId, orgIdentifier, projectIdentifier, repoIdentifier, branch, getDefaultFromOtherRepo: true }, body: { originalEntityYaml: yamlStringify(originalTemplate) } }) React.useEffect(() => { if (resolvedTemplateResponse?.data?.mergedPipelineYaml) { setResolvedTemplate(parse(resolvedTemplateResponse.data.mergedPipelineYaml)) } }, [resolvedTemplateResponse]) React.useEffect(() => { setTemplateVariablesData({ metadataMap: defaultTo(data?.data?.metadataMap, {}), variablesTemplate: get(parse(defaultTo(data?.data?.yaml, '')), resolvedTemplate.type.toLowerCase()) }) }, [data?.data?.metadataMap, data?.data?.yaml]) return ( <TemplateVariablesContext.Provider value={{ variablesTemplate, originalTemplate: resolvedTemplate, metadataMap, error, initLoading: initLoading || initLoadingResolvedTemplate, loading: loading || loadingResolvedTemplate }} > {props.children} </TemplateVariablesContext.Provider> ) } |