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 | 102x 102x 102x 102x 102x 102x 102x 166x 166x 166x 166x 166x 1x 1x 166x | /* * 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 { parse } from 'yaml' import { useParams } from 'react-router-dom' import { isEmpty, merge, set } from 'lodash-es' import { SelectorData, TemplateDrawerTypes } from '@pipeline/components/PipelineStudio/PipelineContext/PipelineActions' import { findAllByKey, getTemplateTypesByRef, usePipelineContext } from '@pipeline/components/PipelineStudio/PipelineContext/PipelineContext' import type { TemplateSummaryResponse } from 'services/template-ng' import type { ProjectPathProps } from '@common/interfaces/RouteInterfaces' export interface GetTemplateResponse { template: TemplateSummaryResponse isCopied: boolean } export type GetTemplateProps = Omit<SelectorData, 'onSubmit' | 'onCancel'> interface TemplateActionsReturnType { getTemplate: (data: GetTemplateProps) => Promise<GetTemplateResponse> } export function useTemplateSelector(): TemplateActionsReturnType { const { state: { templateTypes, gitDetails }, updateTemplateView, setTemplateTypes } = usePipelineContext() const { accountId, orgIdentifier, projectIdentifier } = useParams<ProjectPathProps>() const closeTemplateSelector = React.useCallback(() => { updateTemplateView({ isTemplateDrawerOpened: false, templateDrawerData: { type: TemplateDrawerTypes.UseTemplate } }) }, [updateTemplateView]) const updateTemplateTypes = React.useCallback( (template: TemplateSummaryResponse, isCopied: boolean) => { if (isCopied) { const templateRefs = findAllByKey('templateRef', parse(template?.yaml || '')?.template.spec) if (!isEmpty(templateRefs)) { getTemplateTypesByRef( { accountIdentifier: accountId, orgIdentifier: orgIdentifier, projectIdentifier: projectIdentifier, templateListType: 'Stable', repoIdentifier: gitDetails.repoIdentifier, branch: gitDetails.branch, getDefaultFromOtherRepo: true }, templateRefs ).then(resp => { setTemplateTypes(merge(templateTypes, resp)) }) } } else if (template?.identifier && template?.childType) { set(templateTypes, template.identifier, template.childType) setTemplateTypes(templateTypes) } }, [accountId, orgIdentifier, projectIdentifier, gitDetails, templateTypes, setTemplateTypes] ) const getTemplate = React.useCallback( (selectorData: GetTemplateProps): Promise<GetTemplateResponse> => { return new Promise((resolve, reject) => { updateTemplateView({ isTemplateDrawerOpened: true, templateDrawerData: { type: TemplateDrawerTypes.UseTemplate, data: { selectorData: { ...selectorData, onSubmit: (template: TemplateSummaryResponse, isCopied: boolean) => { closeTemplateSelector() updateTemplateTypes(template, isCopied) resolve({ template, isCopied }) }, onCancel: () => { closeTemplateSelector() reject() } } } } }) }) }, [updateTemplateView, closeTemplateSelector, updateTemplateTypes] ) return { getTemplate } } |