Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
55 commits
Select commit Hold shift + click to select a range
e50452b
feat: add ResourceConflictDeployDialog for handling resource ownershi…
AbhishekA1509 Dec 4, 2025
c9f566f
feat: implement ResourceConflictDetailsModal and ConflictedResourcesT…
AbhishekA1509 Dec 4, 2025
7f658c5
feat: enhance resource conflict handling with redeploy functionality …
AbhishekA1509 Dec 8, 2025
60936ef
feat: add resource conflict management components and enhance related…
AbhishekA1509 Dec 8, 2025
2236a28
feat: enhance ConflictedResourcesTable styling and improve resource c…
AbhishekA1509 Dec 8, 2025
13407fd
fix: update alignment of content in ResourceConflictDetailsModal
AbhishekA1509 Dec 8, 2025
ddf9e21
fix: disable deploy button when no resource conflict details are avai…
AbhishekA1509 Dec 8, 2025
b907e3f
fix: rename wfrId to wfrIdForDeploymentWithSpecificTrigger in redeplo…
AbhishekA1509 Dec 8, 2025
2bb1aed
fix: remove toast notifications from redeploy functions and update ar…
AbhishekA1509 Dec 8, 2025
a9545ee
refactor: Extract navigation types into a dedicated module and refine…
arunjaindev Dec 10, 2025
cef8fd0
chore: remove external links and chart repository from navigation sub…
arunjaindev Dec 10, 2025
d8f7911
fix: update resource conflict routes and payload structure for redepl…
AbhishekA1509 Dec 10, 2025
dfa9ec4
feat: add external links and chart repository to global configuration…
arunjaindev Dec 10, 2025
37acab1
Merge pull request #979 from devtron-labs/feat/ent-navigation
arunjaindev Dec 10, 2025
c4c7515
fix: update version to 1.21.0-beta-4 in package.json and package-lock…
AbhishekA1509 Dec 11, 2025
1008067
fix: remove 'isAvailableInEA' from subItems type definition in Naviga…
arunjaindev Dec 11, 2025
6a794ee
Merge pull request #980 from devtron-labs/feat/ent-navigation
arunjaindev Dec 12, 2025
084ac49
feat: add components for overview section
arunjaindev Dec 12, 2025
a45a097
fix: integrate useMainContext to conditionally display resource confl…
AbhishekA1509 Dec 12, 2025
87b59cc
fix: update version to 1.21.1 in package.json and package-lock.json
AbhishekA1509 Dec 12, 2025
4c73a76
fix: streamline loading state handling in ResourceConflictDeployDialo…
AbhishekA1509 Dec 12, 2025
0f1d57f
fix: update button styles to warning in TriggerDetails component
AbhishekA1509 Dec 12, 2025
12f9a58
Merge pull request #976 from devtron-labs/feat/resource-conflict-main
AbhishekA1509 Dec 12, 2025
4eb6140
fix: update class name from 'flex' to 'flexbox' in InfoBlock componen…
AbhishekA1509 Dec 8, 2025
a81c2b1
chore: version bump
arunjaindev Dec 12, 2025
c96dd1e
Merge pull request #982 from devtron-labs/chore/remove-switch
arunjaindev Dec 12, 2025
facb1ca
Merge branch 'release-candidate-v0.44.0' of https://github.com/devtro…
arunjaindev Dec 12, 2025
cb1ab3b
chore: version bump
arunjaindev Dec 16, 2025
8f66725
fix: remove unused bulk selection identifiers for multi page selection
arunjaindev Dec 16, 2025
c6b52bb
Merge pull request #984 from devtron-labs/fix/table-bulk
arunjaindev Dec 16, 2025
6f0fceb
feat: Help action menu dynamic doc link support added
shivani170 Dec 17, 2025
0053c7c
feat: add ic-chart-repo and ic-external-link SVG icons to the icon li…
arunjaindev Dec 17, 2025
556fd5c
Merge pull request #981 from devtron-labs/feat/overview-oss
arunjaindev Dec 17, 2025
cb8524c
feat: constants link updfated
shivani170 Dec 18, 2025
547084d
fix: doc path fix for internal click
shivani170 Dec 18, 2025
90ee1a5
Merge remote-tracking branch 'origin/release-candidate-v0.44.0' into …
shivani170 Dec 18, 2025
10da12e
fix: foc path fix
shivani170 Dec 18, 2025
8c46840
Merge branch 'release-candidate-v0.44.0' into feat/page-header-doclink
shivani170 Dec 18, 2025
38221aa
fix: doc link updated
shivani170 Dec 18, 2025
29a3fde
fix: code cleanup
shivani170 Dec 18, 2025
8fc9024
fix: code refactoring
shivani170 Dec 18, 2025
5b4cb2b
chore: version bump
shivani170 Dec 18, 2025
aed107b
chore: link fix
shivani170 Dec 18, 2025
d8bd1b3
chore: link fix
shivani170 Dec 18, 2025
c64b6ca
chore: link fix
shivani170 Dec 18, 2025
e1482da
chore: version bump
shivani170 Dec 18, 2025
8606e70
Merge pull request #985 from devtron-labs/feat/page-header-doclink
shivani170 Dec 18, 2025
2185577
Merge branch 'main' of https://github.com/devtron-labs/devtron-fe-com…
arunjaindev Dec 18, 2025
d9a84f0
chore: version bump
arunjaindev Dec 18, 2025
5ed7e51
Merge pull request #986 from devtron-labs/chore/sync-main-rc-44
arunjaindev Dec 18, 2025
9cba76e
chore: update routing for application management in conflict dialogs
arunjaindev Dec 18, 2025
d255ebe
Merge pull request #988 from devtron-labs/chore/redirection-for-helm-own
arunjaindev Dec 18, 2025
61bda34
Merge pull request #987 from devtron-labs/release-candidate-v0.44.0
arunjaindev Dec 18, 2025
7e535d4
Merge branch 'main' of https://github.com/devtron-labs/devtron-fe-com…
arunjaindev Dec 19, 2025
6a63597
chore: version bump
arunjaindev Dec 19, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@devtron-labs/devtron-fe-common-lib",
"version": "1.21.0-pre-2",
"version": "1.22.0-pre-0",
"description": "Supporting common component library",
"type": "module",
"main": "dist/index.js",
Expand Down
5 changes: 5 additions & 0 deletions src/Assets/IconV2/ic-chart-repo.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 4 additions & 0 deletions src/Assets/IconV2/ic-external-link.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions src/Common/Constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -223,6 +223,7 @@ export const ROUTES = {
LICENSE_DATA: 'license/data',
ENV: 'env',
APP_METADATA: 'app-metadata',
RESOURCE_CONFLICTS_LIST: 'app/:appId/cd-pipeline/:pipelineId/history/:wfrId/helm-ownership-conflicts',
} as const

export enum KEY_VALUE {
Expand Down
1 change: 1 addition & 0 deletions src/Pages-Devtron-2.0/Navigation/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export * from './types'
116 changes: 116 additions & 0 deletions src/Pages-Devtron-2.0/Navigation/types.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
import { customEnv, Never } from 'src'

import { IconsProps } from '@Shared/Components'

export type NavigationItemID =
| 'application-management-overview'
| 'application-management-devtron-applications'
| 'application-management-application-groups'
| 'application-management-bulk-edit'
| 'application-management-application-templates'
| 'application-management-projects'
| 'application-management-configurations'
| 'application-management-policies'
| 'infrastructure-management-overview'
| 'infrastructure-management-applications'
| 'infrastructure-management-chart-store'
| 'infrastructure-management-resource-browser'
| 'infrastructure-management-resource-watcher'
| 'infrastructure-management-catalog-framework'
| 'software-release-management-overview'
| 'software-release-management-release-hub'
| 'software-release-management-tenants'
| 'cost-visibility-overview'
| 'cost-visibility-cost-breakdown'
| 'cost-visibility-configurations'
| 'security-center-overview'
| 'security-center-security-vulnerabilities'
| 'security-center-security-enablement'
| 'security-center-security-policy'
| 'automation-and-enablement-jobs'
| 'automation-and-enablement-alerting'
| 'automation-and-enablement-incident-response'
| 'automation-and-enablement-api-portal'
| 'automation-and-enablement-runbook-automation'
| 'global-configuration-sso-login-services'
| 'global-configuration-host-urls'
| 'global-configuration-external-links'
| 'global-configuration-chart-repository'
| 'global-configuration-cluster-and-environments'
| 'global-configuration-container-oci-registry'
| 'global-configuration-authorization'
| 'data-protection-overview'
| 'data-protection-backup-and-schedule'
| 'data-protection-restores'
| 'data-protection-backup-repositories'
| 'data-protection-backup-locations'
| 'data-protection-history-and-logs'

export type NavigationSubMenuItemID =
| 'application-management-configurations-gitops'
| 'application-management-configurations-git-accounts'
| 'application-management-configurations-deployment-charts'
| 'application-management-configurations-notifications'
| 'application-management-configurations-catalog-frameworks'
| 'application-management-configurations-scoped-variables'
| 'application-management-configurations-build-infra'
| 'application-management-policies-deployment-window'
| 'application-management-policies-approval-policy'
| 'application-management-policies-plugin-policy'
| 'application-management-policies-pull-image-digest'
| 'application-management-policies-tag-policy'
| 'application-management-policies-filter-conditions'
| 'application-management-policies-image-promotion'
| 'application-management-policies-lock-deployment-configuration'
| 'cost-visibility-cost-breakdown-clusters'
| 'cost-visibility-cost-breakdown-environments'
| 'cost-visibility-cost-breakdown-projects'
| 'cost-visibility-cost-breakdown-applications'
| 'global-configuration-authorization-user-permissions'
| 'global-configuration-authorization-permission-groups'
| 'global-configuration-authorization-api-tokens'

export type NavigationRootItemID =
| 'application-management'
| 'infrastructure-management'
| 'software-release-management'
| 'cost-visibility'
| 'security-center'
| 'automation-and-enablement'
| 'data-protection-management'
| 'global-configuration'

export type CommonNavigationItemType = {
title: string
dataTestId: string
icon: IconsProps['name']
href: string
disabled?: boolean
keywords?: string[]
forceHideEnvKey?: keyof customEnv
hideNav?: boolean
isAvailableInEA?: boolean
}

export type NavigationItemType = Pick<
CommonNavigationItemType,
'dataTestId' | 'title' | 'disabled' | 'keywords' | 'hideNav' | 'forceHideEnvKey' | 'isAvailableInEA'
> & {
id: NavigationItemID
} & (
| (Pick<CommonNavigationItemType, 'icon' | 'href'> & {
hasSubMenu?: false
subItems?: never
})
| (Never<Pick<CommonNavigationItemType, 'icon' | 'href'>> & {
hasSubMenu: true
subItems: (Omit<CommonNavigationItemType, 'icon'> & { id: NavigationSubMenuItemID })[]
})
)

export interface NavigationGroupType
extends Pick<CommonNavigationItemType, 'title' | 'icon' | 'hideNav' | 'forceHideEnvKey' | 'isAvailableInEA'> {
id: NavigationRootItemID
items: NavigationItemType[]
disabled?: boolean
}
128 changes: 128 additions & 0 deletions src/Pages-Devtron-2.0/Shared/Overview/components.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,128 @@
import { ReactNode, useState } from 'react'
import { NavLink } from 'react-router-dom'
import { motion } from 'framer-motion'

import { ConditionalWrap } from '@Common/Helper'
import { Tooltip } from '@Common/Tooltip'
import { Button, ButtonStyleType, ButtonVariantType, Icon } from '@Shared/Components'

import { MetricsInfoCardProps, SectionEmptyStateProps } from './types'

export const SectionEmptyState = ({
iconName = 'ic-priority-medium-fill',
iconColor,
title,
subtitle,
buttonConfig,
}: SectionEmptyStateProps) => (
<div className="flex column p-16 dc__gap-12">
<Icon name={iconName} size={24} color={iconColor} />
<div className="flexbox-col dc__gap-2 fs-13 lh-20">
<span className="text-center fw-6 cn-9">{title}</span>
{subtitle && <span className="text-center fw-4 cn-8">{subtitle}</span>}
</div>
{buttonConfig && <Button {...buttonConfig} />}
</div>
)

const navLinkWrap = (redirectionLink: string) => (children: ReactNode) => (
<NavLink to={redirectionLink}>{children}</NavLink>
)

export const MetricsInfoLoadingCard = ({ withSubtitle }: { withSubtitle?: boolean }) => (
<div className="flexbox-col br-8 bg__primary border__secondary">
<div className="flexbox dc__gap-12 p-16 dc__content-space">
<div className="flexbox-col">
<span className="h-12 mt-4 mb-4 w-40 shimmer" />
<span className="h-24 mt-6 mb-6 w-40 shimmer" />
</div>
<div className="h-24 w-24 m-6 shimmer" />
</div>
{withSubtitle && (
<div className="border__secondary--top px-16 py-8">
<span className="w-100px h-18 shimmer" />
</div>
)}
</div>
)

export const MetricsInfoCard = ({
dataTestId,
metricTitle,
metricValue,
metricUnit,
valueOutOf,
iconName,
subtitle,
redirectionLink,
tooltipContent,
subtitleRedirection,
}: MetricsInfoCardProps) => {
const [isHovering, setIsHovering] = useState(false)

const handleHoverStart = () => setIsHovering(true)
const handleHoverEnd = () => setIsHovering(false)

return (
<ConditionalWrap condition={!!redirectionLink} wrap={navLinkWrap(redirectionLink)}>
<motion.div
data-testid={dataTestId}
onHoverStart={handleHoverStart}
onHoverEnd={handleHoverEnd}
className={`flexbox-col br-8 bg__primary border__secondary cn-9 ${isHovering ? 'shadow__card--10' : ''}`}
>
<div className="flexbox dc__gap-12 p-16 dc__content-space">
<div className="flexbox-col">
<Tooltip alwaysShowTippyOnHover content={tooltipContent}>
<span className={`fs-13 fw-4 lh-20 ${isHovering ? 'dc__underline-dotted' : ''}`}>
{metricTitle}
</span>
</Tooltip>
<div className="flexbox dc__gap-4 dc__align-baseline font-ibm-plex-sans">
<span className="fs-24 fw-6 lh-1-5">{metricValue}</span>
{valueOutOf && (
<span className="fs-16 fw-4 lh-20 dc__first-letter-capitalize">/ {valueOutOf}</span>
)}
{metricUnit && (
<span className="fs-16 fw-4 lh-20 dc__first-letter-capitalize">{metricUnit}</span>
)}
</div>
</div>
<div>
{redirectionLink && isHovering ? (
<Button
dataTestId={`redirect-to-${metricTitle}`}
icon={<Icon name="ic-arrow-square-out" color="B500" />}
ariaLabel="redirect"
showAriaLabelInTippy={false}
style={ButtonStyleType.default}
variant={ButtonVariantType.borderLess}
/>
) : (
<Icon size={36} color={null} name={iconName} />
)}
</div>
</div>
{subtitle && (
<div className="border__secondary--top px-16 py-8">
<ConditionalWrap condition={!!subtitleRedirection} wrap={navLinkWrap(subtitleRedirection)}>
<span className={`fs-13 fw-4 lh-1-5 ${subtitleRedirection ? 'cb-5' : 'cn-7'}`}>
{subtitle}
</span>
</ConditionalWrap>
</div>
)}
</motion.div>
</ConditionalWrap>
)
}

export const LoadingDonutChart = () => (
<div className="flex p-20 dc__gap-20 h-200">
<div className="dc__border-radius-50-per h-150 w-150 shimmer" />
<div className="flexbox-col dc__gap-8">
<span className="shimmer w-80px" />
<span className="shimmer w-80px" />
</div>
</div>
)
27 changes: 27 additions & 0 deletions src/Pages-Devtron-2.0/Shared/Overview/constants.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
const OVERVIEW_DEFAULT_PAGE_SIZE = {
SMALL: 5,
MEDIUM: 10,
LARGE: 20,
}

export const OVERVIEW_PAGE_SIZE_OPTIONS = [
{
value: OVERVIEW_DEFAULT_PAGE_SIZE.MEDIUM,
selected: true,
},
{
value: OVERVIEW_DEFAULT_PAGE_SIZE.LARGE,
selected: false,
},
]

export const OVERVIEW_PAGE_SIZE_OPTIONS_SMALL = [
{
value: OVERVIEW_DEFAULT_PAGE_SIZE.SMALL,
selected: true,
},
{
value: OVERVIEW_DEFAULT_PAGE_SIZE.MEDIUM,
selected: false,
},
]
3 changes: 3 additions & 0 deletions src/Pages-Devtron-2.0/Shared/Overview/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
export * from './components'
export * from './constants'
export { type MetricsInfoCardProps, ProdNonProdSelectValueTypes } from './types'
29 changes: 29 additions & 0 deletions src/Pages-Devtron-2.0/Shared/Overview/types.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
import { ButtonComponentType, ButtonProps, IconName } from '@Shared/Components'
import { IconBaseColorType } from '@Shared/types'

export interface SectionEmptyStateProps {
iconColor?: IconBaseColorType
iconName?: IconName
title: string
subtitle?: string
buttonConfig?: ButtonProps<ButtonComponentType>
}

export interface MetricsInfoCardProps {
dataTestId: string
metricTitle: string
metricValue: string
metricUnit?: string
valueOutOf?: string
iconName: IconName
subtitle?: string
tooltipContent: string
redirectionLink?: string
subtitleRedirection?: string
}

export enum ProdNonProdSelectValueTypes {
ALL = 'All',
PRODUCTION = 'Prod',
NON_PRODUCTION = 'Non-Prod',
}
1 change: 1 addition & 0 deletions src/Pages-Devtron-2.0/Shared/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export * from './Overview'
2 changes: 2 additions & 0 deletions src/Pages-Devtron-2.0/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,6 @@ export * from './ApplicationManagement'
export * from './CostVisibility'
export * from './DataProtectionManagement'
export * from './InfrastructureManagement'
export * from './Navigation'
export * from './SecurityCenter'
export * from './Shared'
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
[id*="table__resource-conflict-details"] {
.generic-table__row {
.generic-table__cell {
display: flex;
align-items: center;
padding: 10px 0;
}
}
}
Loading