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 }
}
|