Skip to content

Commit 0fd7b03

Browse files
authored
Merge pull request #2658 from devtron-labs/fix/webhook-external-image
fix: webhook external image
2 parents 596461a + c93bc02 commit 0fd7b03

File tree

6 files changed

+69
-20
lines changed

6 files changed

+69
-20
lines changed

src/components/ApplicationGroup/Details/TriggerView/EnvTriggerView.tsx

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,7 @@ import CIMaterialModal from '../../../app/details/triggerView/CIMaterialModal'
127127
import { RenderCDMaterialContentProps } from './types'
128128
import { WebhookReceivedPayloadModal } from '@Components/app/details/triggerView/WebhookReceivedPayloadModal'
129129
import { getExternalCIConfig } from '@Components/ciPipeline/Webhook/webhook.service'
130+
import { shouldRenderWebhookAddImageModal } from '@Components/app/details/triggerView/TriggerView.utils'
130131

131132
const ApprovalMaterialModal = importComponentFromFELibrary('ApprovalMaterialModal')
132133
const getCIBlockState: (...props) => Promise<BlockedStateData> = importComponentFromFELibrary(
@@ -2396,6 +2397,21 @@ export default function EnvTriggerView({ filteredAppIds, isVirtualEnv }: AppGrou
23962397
setSelectedWebhookNode(null)
23972398
}
23982399

2400+
const renderWebhookAddImageModal = () => {
2401+
if (
2402+
WebhookAddImageModal &&
2403+
shouldRenderWebhookAddImageModal(location) &&
2404+
!location.pathname.includes('bulk-deploy/request') &&
2405+
selectedWebhookNode
2406+
) {
2407+
return (
2408+
<WebhookAddImageModal getWebhookDetails={getWebhookDetails} onClose={handleWebhookAddImageModalClose} />
2409+
)
2410+
}
2411+
2412+
return null
2413+
}
2414+
23992415
const renderWorkflow = (): JSX.Element => {
24002416
return (
24012417
<>
@@ -2423,12 +2439,7 @@ export default function EnvTriggerView({ filteredAppIds, isVirtualEnv }: AppGrou
24232439
)
24242440
})}
24252441
<LinkedCIDetail workflows={filteredWorkflows} handleClose={handleModalClose} />
2426-
{WebhookAddImageModal && selectedWebhookNode && (
2427-
<WebhookAddImageModal
2428-
getWebhookDetails={getWebhookDetails}
2429-
onClose={handleWebhookAddImageModalClose}
2430-
/>
2431-
)}
2442+
{renderWebhookAddImageModal()}
24322443
</>
24332444
)
24342445
}

src/components/app/details/triggerView/TriggerView.tsx

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@ import { LinkedCIDetail } from '../../../../Pages/Shared/LinkedCIDetailsModal'
9696
import { CIMaterialModal } from './CIMaterialModal'
9797
import { WebhookReceivedPayloadModal } from './WebhookReceivedPayloadModal'
9898
import { getExternalCIConfig } from '@Components/ciPipeline/Webhook/webhook.service'
99+
import { shouldRenderWebhookAddImageModal } from './TriggerView.utils'
99100

100101
const ApprovalMaterialModal = importComponentFromFELibrary('ApprovalMaterialModal')
101102
const getCIBlockState: (...props) => Promise<BlockedStateData> = importComponentFromFELibrary(
@@ -1365,6 +1366,23 @@ class TriggerView extends Component<TriggerViewProps, TriggerViewState> {
13651366
return null
13661367
}
13671368

1369+
renderWebhookAddImageModal() {
1370+
if (
1371+
WebhookAddImageModal &&
1372+
shouldRenderWebhookAddImageModal(this.props.location) &&
1373+
this.state.selectedWebhookNodeId
1374+
) {
1375+
return (
1376+
<WebhookAddImageModal
1377+
getWebhookDetails={this.getWebhookDetails}
1378+
onClose={this.handleWebhookAddImageModalClose}
1379+
/>
1380+
)
1381+
}
1382+
1383+
return null
1384+
}
1385+
13681386
handleModalClose = () => {
13691387
this.props.history.push(this.props.match.url)
13701388
}
@@ -1397,12 +1415,7 @@ class TriggerView extends Component<TriggerViewProps, TriggerViewState> {
13971415
)
13981416
})}
13991417
<LinkedCIDetail workflows={this.state.workflows} handleClose={this.handleModalClose} />
1400-
{WebhookAddImageModal && this.state.selectedWebhookNodeId && (
1401-
<WebhookAddImageModal
1402-
getWebhookDetails={this.getWebhookDetails}
1403-
onClose={this.handleWebhookAddImageModalClose}
1404-
/>
1405-
)}
1418+
{this.renderWebhookAddImageModal()}
14061419
</>
14071420
)
14081421
}

src/components/app/details/triggerView/TriggerView.utils.tsx

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,15 @@
1414
* limitations under the License.
1515
*/
1616

17+
import { useLocation } from 'react-router-dom'
18+
1719
import { DeploymentWithConfigType } from '@devtron-labs/devtron-fe-common-lib'
1820

21+
import { URLS } from '@Config/routes'
22+
1923
import { deepEqual } from '../../../common'
2024
import { DeploymentHistoryDetail } from '../cdDetails/cd.type'
25+
import { TRIGGER_VIEW_PARAMS } from './Constants'
2126
import { TriggerViewDeploymentConfigType } from './types'
2227

2328
export const DEPLOYMENT_CONFIGURATION_NAV_MAP = {
@@ -163,3 +168,26 @@ export const checkForDiff = (configA: TriggerViewDeploymentConfigType, configB:
163168

164169
return diffForOptions
165170
}
171+
172+
/**
173+
* Determines whether the "Webhook Add Image" modal should be rendered based on the current location.
174+
*
175+
* This function checks the `location` object to ensure that the modal is not displayed
176+
* when certain other modals or views are active. Specifically, the modal will not be shown
177+
* if any of the following conditions are met:
178+
* - The URL query string contains 'cd-node' or 'rollback-node'.
179+
* - The URL path includes the `BUILD` route.
180+
* - The URL path includes the `LINKED_CI_DETAILS` route.
181+
* - The URL query string contains the `APPROVAL_NODE` parameter.
182+
*
183+
* @param location - The current location object, typically obtained from the `useLocation` hook.
184+
* @returns A boolean indicating whether the "Webhook Add Image" modal should be rendered.
185+
*/
186+
export const shouldRenderWebhookAddImageModal = (location: ReturnType<typeof useLocation>) =>
187+
!(
188+
location.search.includes('cd-node') ||
189+
location.search.includes('rollback-node') ||
190+
location.search.includes(TRIGGER_VIEW_PARAMS.APPROVAL_NODE) ||
191+
location.pathname.includes(URLS.BUILD) ||
192+
location.pathname.includes(URLS.LINKED_CI_DETAILS)
193+
)

src/components/app/details/triggerView/workflow/Workflow.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ export class Workflow extends Component<WorkflowProps> {
124124
key={`webhook-${node.id}`}
125125
id={node.id}
126126
isTemplateView={false}
127-
addImageButtonConfig={{ show: true, onClick: this.props.handleWebhookAddImageClick }}
127+
addImageButtonClick={this.props.handleWebhookAddImageClick}
128128
/>
129129
)
130130
}

src/components/workflowEditor/nodes/WebhookNode.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,14 +47,14 @@ export const WebhookNode = ({
4747
isLastNode,
4848
isReadonlyView = false,
4949
isTemplateView,
50-
addImageButtonConfig,
50+
addImageButtonClick,
5151
}: WebhookNodeProps) => {
5252
const [isWebhookTippyOpen, setIsWebhookTippyOpen] = useState(false)
5353

5454
const selectedNodeKey = `${selectedNode?.nodeType}-${selectedNode?.id}`
5555
const currentNodeKey = `${WorkflowNodeType.WEBHOOK}-${id ?? ''}`
5656

57-
const showWebhookAddImageButton = WebhookAddImageButton && (addImageButtonConfig?.show || false)
57+
const showWebhookAddImageButton = WebhookAddImageButton && !!addImageButtonClick
5858

5959
const addNewCD = (event): void => {
6060
event.preventDefault()
@@ -78,7 +78,7 @@ export const WebhookNode = ({
7878
setIsWebhookTippyOpen((prev) => !prev)
7979
}
8080

81-
const onWebhookAddImageClick = () => addImageButtonConfig?.onClick(id)
81+
const onWebhookAddImageClick = () => addImageButtonClick(id)
8282

8383
const renderWrapWithLinkOrTippy = (children: ReactElement) =>
8484
isTemplateView ? (

src/components/workflowEditor/types.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -204,10 +204,7 @@ export interface WebhookNodeProps extends Required<Pick<AppConfigProps, 'isTempl
204204
* @default false
205205
*/
206206
isReadonlyView?: boolean
207-
addImageButtonConfig?: {
208-
show: boolean
209-
onClick?: (webhookId: number) => void
210-
}
207+
addImageButtonClick?: (webhookId: number) => void
211208
}
212209

213210
export interface WebhookTippyType {

0 commit comments

Comments
 (0)