diff --git a/package-lock.json b/package-lock.json
index f667e2a96..86faa444d 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "@devtron-labs/devtron-fe-common-lib",
- "version": "1.20.6-pre-47",
+ "version": "1.20.6-pre-48",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@devtron-labs/devtron-fe-common-lib",
- "version": "1.20.6-pre-47",
+ "version": "1.20.6-pre-48",
"hasInstallScript": true,
"license": "ISC",
"dependencies": {
diff --git a/package.json b/package.json
index f3a35a518..21e93b6f3 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "@devtron-labs/devtron-fe-common-lib",
- "version": "1.20.6-pre-47",
+ "version": "1.20.6-pre-48",
"description": "Supporting common component library",
"type": "module",
"main": "dist/index.js",
diff --git a/src/Assets/IconV2/ic-bell.svg b/src/Assets/IconV2/ic-bell.svg
new file mode 100644
index 000000000..a67b2859b
--- /dev/null
+++ b/src/Assets/IconV2/ic-bell.svg
@@ -0,0 +1,3 @@
+
diff --git a/src/Assets/IconV2/ic-bulb.svg b/src/Assets/IconV2/ic-bulb.svg
new file mode 100644
index 000000000..a167e3b3a
--- /dev/null
+++ b/src/Assets/IconV2/ic-bulb.svg
@@ -0,0 +1,7 @@
+
diff --git a/src/Assets/IconV2/ic-close-circle.svg b/src/Assets/IconV2/ic-close-circle.svg
new file mode 100644
index 000000000..5c48b3451
--- /dev/null
+++ b/src/Assets/IconV2/ic-close-circle.svg
@@ -0,0 +1,3 @@
+
diff --git a/src/Assets/IconV2/ic-comment.svg b/src/Assets/IconV2/ic-comment.svg
new file mode 100644
index 000000000..096533e21
--- /dev/null
+++ b/src/Assets/IconV2/ic-comment.svg
@@ -0,0 +1,3 @@
+
diff --git a/src/Assets/IconV2/ic-dot-circle.svg b/src/Assets/IconV2/ic-dot-circle.svg
new file mode 100644
index 000000000..149c94bab
--- /dev/null
+++ b/src/Assets/IconV2/ic-dot-circle.svg
@@ -0,0 +1,3 @@
+
diff --git a/src/Assets/IconV2/ic-line.svg b/src/Assets/IconV2/ic-line.svg
new file mode 100644
index 000000000..caacdc6a9
--- /dev/null
+++ b/src/Assets/IconV2/ic-line.svg
@@ -0,0 +1,3 @@
+
diff --git a/src/Assets/IconV2/ic-new-chat.svg b/src/Assets/IconV2/ic-new-chat.svg
new file mode 100644
index 000000000..a5d366419
--- /dev/null
+++ b/src/Assets/IconV2/ic-new-chat.svg
@@ -0,0 +1,5 @@
+
diff --git a/src/Assets/IconV2/ic-piggybank.svg b/src/Assets/IconV2/ic-piggybank.svg
new file mode 100644
index 000000000..44619eebe
--- /dev/null
+++ b/src/Assets/IconV2/ic-piggybank.svg
@@ -0,0 +1,3 @@
+
diff --git a/src/Assets/IconV2/ic-priority-high-fill.svg b/src/Assets/IconV2/ic-priority-high-fill.svg
new file mode 100644
index 000000000..9e084e5ee
--- /dev/null
+++ b/src/Assets/IconV2/ic-priority-high-fill.svg
@@ -0,0 +1,3 @@
+
diff --git a/src/Assets/IconV2/ic-priority-low-fill.svg b/src/Assets/IconV2/ic-priority-low-fill.svg
new file mode 100644
index 000000000..0b7c7a735
--- /dev/null
+++ b/src/Assets/IconV2/ic-priority-low-fill.svg
@@ -0,0 +1,4 @@
+
diff --git a/src/Assets/IconV2/ic-priority-urgent-fill.svg b/src/Assets/IconV2/ic-priority-urgent-fill.svg
new file mode 100644
index 000000000..ec8140320
--- /dev/null
+++ b/src/Assets/IconV2/ic-priority-urgent-fill.svg
@@ -0,0 +1,10 @@
+
diff --git a/src/Assets/IconV2/ic-red-bulb.svg b/src/Assets/IconV2/ic-red-bulb.svg
new file mode 100644
index 000000000..f6d6482af
--- /dev/null
+++ b/src/Assets/IconV2/ic-red-bulb.svg
@@ -0,0 +1,9 @@
+
diff --git a/src/Assets/IconV2/ic-runbook-color.svg b/src/Assets/IconV2/ic-runbook-color.svg
new file mode 100644
index 000000000..c19e9d175
--- /dev/null
+++ b/src/Assets/IconV2/ic-runbook-color.svg
@@ -0,0 +1,11 @@
+
diff --git a/src/Common/API/CoreAPI.ts b/src/Common/API/CoreAPI.ts
index c5056e8d9..368649cbe 100644
--- a/src/Common/API/CoreAPI.ts
+++ b/src/Common/API/CoreAPI.ts
@@ -55,6 +55,9 @@ class CoreAPI {
method: type,
signal,
body: data ? JSON.stringify(data) : undefined,
+ headers: {
+ 'Content-Type': 'application/json',
+ },
}
// eslint-disable-next-line dot-notation
options['credentials'] = 'include' as RequestCredentials
diff --git a/src/Common/API/reactQueryHooks.ts b/src/Common/API/reactQueryHooks.ts
index 4b1ceed8d..18866134b 100644
--- a/src/Common/API/reactQueryHooks.ts
+++ b/src/Common/API/reactQueryHooks.ts
@@ -16,6 +16,9 @@
import {
QueryKey,
+ useInfiniteQuery as rqUseInfiniteQuery,
+ UseInfiniteQueryOptions,
+ UseInfiniteQueryResult,
useMutation as rqUseMutation,
UseMutationOptions,
UseMutationResult,
@@ -46,4 +49,19 @@ export const useMutation = , ServerErrors, TVariables, TContext>,
): UseMutationResult, ServerErrors, TVariables, TContext> => rqUseMutation(options)
+export const useInfiniteQuery = <
+ TQueryFnData = unknown,
+ TData = TQueryFnData,
+ TQueryKey extends QueryKey = QueryKey,
+ WrapWithResponseType extends boolean = true,
+>(
+ options: UseInfiniteQueryOptions<
+ WrapWithResponseType extends true ? ResponseType : TQueryFnData,
+ ServerErrors,
+ TData,
+ WrapWithResponseType extends true ? ResponseType : TQueryFnData,
+ TQueryKey
+ >,
+): UseInfiniteQueryResult => rqUseInfiniteQuery(options)
+
export { useQueryClient }
diff --git a/src/Common/Constants.ts b/src/Common/Constants.ts
index 8275ea0d1..e84c48198 100644
--- a/src/Common/Constants.ts
+++ b/src/Common/Constants.ts
@@ -64,7 +64,6 @@ const DATA_PROTECTION_ROOT = '/data-protection-management'
const DATA_PROTECTION_BACKUP_AND_SCHEDULE =
`${DATA_PROTECTION_ROOT}/backup-and-schedule/:view(${Object.values(BackupAndScheduleListViewEnum).join('|')})` as const
const GLOBAL_CONFIG_ROOT = '/global-configuration'
-const AI_RECOMMENDATIONS_ROOT = '/ai-recommendations'
export const URLS = {
LOGIN: '/login',
@@ -116,6 +115,7 @@ export const URLS = {
INFRASTRUCTURE_MANAGEMENT_CHART_STORE_DISCOVER: `${INFRASTRUCTURE_MANAGEMENT_ROOT}/chart-store/discover`,
INFRASTRUCTURE_MANAGEMENT_RESOURCE_BROWSER: `${INFRASTRUCTURE_MANAGEMENT_ROOT}/resource-browser`,
INFRASTRUCTURE_MANAGEMENT_RESOURCE_WATCHER: `${INFRASTRUCTURE_MANAGEMENT_ROOT}/resource-watcher`,
+ INFRASTRUCTURE_MANAGEMENT_AUDIT_LOGS: `${INFRASTRUCTURE_MANAGEMENT_ROOT}/audit-logs`,
// SOFTWARE RELEASE MANAGEMENT
SOFTWARE_RELEASE_MANAGEMENT: SOFTWARE_RELEASE_MANAGEMENT_ROOT,
// COST VISIBILITY
@@ -136,6 +136,7 @@ export const URLS = {
// AUTOMATION AND ENABLEMENT
AUTOMATION_AND_ENABLEMENT: AUTOMATION_AND_ENABLEMENT_ROOT,
AUTOMATION_AND_ENABLEMENT_JOB: `${AUTOMATION_AND_ENABLEMENT_ROOT}/job`,
+ AUTOMATION_ENABLEMENT_RUNBOOKS: `${AUTOMATION_AND_ENABLEMENT_ROOT}/runbooks`,
// DATA PROTECTION
DATA_PROTECTION: DATA_PROTECTION_ROOT,
DATA_PROTECTION_OVERVIEW: `${DATA_PROTECTION_ROOT}/overview`,
@@ -150,9 +151,6 @@ export const URLS = {
GLOBAL_CONFIG_DOCKER: `${GLOBAL_CONFIG_ROOT}/docker`,
GLOBAL_CONFIG_EDIT_CLUSTER: `${GLOBAL_CONFIG_ROOT}/cluster-env/edit/:clusterId`,
PERMISSION_GROUPS: `${GLOBAL_CONFIG_ROOT}/auth/groups`,
- // AI RECOMMENDATIONS
- AI_RECOMMENDATIONS: AI_RECOMMENDATIONS_ROOT,
- AI_RECOMMENDATIONS_OVERVIEW: `${AI_RECOMMENDATIONS_ROOT}/overview`,
EXTERNAL_APPS: 'ea',
} as const
diff --git a/src/Shared/Components/Charts/types.ts b/src/Shared/Components/Charts/types.ts
index 00304ec0e..7af462a1c 100644
--- a/src/Shared/Components/Charts/types.ts
+++ b/src/Shared/Components/Charts/types.ts
@@ -130,9 +130,7 @@ export type ChartProps = {
placement?: TooltipProps['placement']
datasetValueFormatter?: (value: number) => string | number
}
- /** A title for x axis */
xScaleTitle?: string
- /** A title for y axis */
yScaleTitle?: string
} & TypeAndDatasetsType
diff --git a/src/Shared/Components/DocLink/constants.ts b/src/Shared/Components/DocLink/constants.ts
index c4775d779..6ecbe6658 100644
--- a/src/Shared/Components/DocLink/constants.ts
+++ b/src/Shared/Components/DocLink/constants.ts
@@ -116,7 +116,8 @@ export const DOCUMENTATION = {
GLOBAL_CONFIG_SSO_LOGIN_MICROSOFT: 'global-configurations/authorization/sso-login/microsoft',
GLOBAL_CONFIG_PULL_IMAGE_DIGEST: 'global-configurations/pull-image-digest',
GLOBAL_CONFIG_TAGS: 'getting-started/global-configurations/tags-policy',
-
+ // TODO: Replace with correct Url
+ SAMPLE_RUNBOOK_LINK: 'https://docs.devtron.ai/user-guide/ai-recommendations/runbook#add-runbook-spec',
// Software Release Management
SOFTWARE_DISTRIBUTION_HUB: 'usage/software-distribution-hub',
RELEASE_TRACKS: 'usage/software-distribution-hub/release-hub#creating-release-tracks-and-versions',
diff --git a/src/Shared/Components/Header/PageHeader.tsx b/src/Shared/Components/Header/PageHeader.tsx
index 2ccb423ff..46d4152e6 100644
--- a/src/Shared/Components/Header/PageHeader.tsx
+++ b/src/Shared/Components/Header/PageHeader.tsx
@@ -29,6 +29,7 @@ import { Button, ButtonStyleType, ButtonVariantType } from '../Button'
import { Icon } from '../Icon'
import { ImageWithFallback } from '../ImageWithFallback'
import { InfoIconTippy } from '../InfoIconTippy'
+import { NOTIFICATIONS_TEMP_WINDOW_TITLE } from './constants'
import { HelpButton } from './HelpButton'
import { IframePromoButton } from './IframePromoButton'
import { ProfileMenu } from './ProfileMenu'
@@ -51,8 +52,16 @@ const PageHeader = ({
tippyProps,
closeIcon,
}: PageHeaderType) => {
- const { setLoginCount, setShowGettingStartedCard, setSidePanelConfig, sidePanelConfig, tempAppWindowConfig } =
- useMainContext()
+ const {
+ setLoginCount,
+ setShowGettingStartedCard,
+ setSidePanelConfig,
+ sidePanelConfig,
+ tempAppWindowConfig,
+ AIRecommendations,
+ setTempAppWindowConfig,
+ isSuperAdmin,
+ } = useMainContext()
const { showSwitchThemeLocationTippy, handleShowSwitchThemeLocationTippyChange } = useTheme()
const {
@@ -137,6 +146,19 @@ const PageHeader = ({
setSidePanelConfig((prev) => ({ ...prev, state: SidePanelTab.ASK_DEVTRON }))
}
+ const handleNotificationsButtonClick = () => {
+ handleAnalyticsEvent({
+ category: 'AI',
+ action: `NOTIFICATIONS_AI_RECOMMENDATIONS`,
+ })
+
+ setTempAppWindowConfig({
+ open: true,
+ title: NOTIFICATIONS_TEMP_WINDOW_TITLE,
+ component: ,
+ })
+ }
+
const renderLogoutHelpSection = () => (
<>
{window._env_?.FEATURE_ASK_DEVTRON_EXPERT &&
@@ -153,6 +175,20 @@ const PageHeader = ({
)}
+
+ {AIRecommendations && isSuperAdmin && tempAppWindowConfig.title !== NOTIFICATIONS_TEMP_WINDOW_TITLE && (
+ }
+ ariaLabel="Open AI Recommendations Notifications"
+ size={ComponentSizeType.medium}
+ onClick={handleNotificationsButtonClick}
+ showAriaLabelInTippy={false}
+ />
+ )}
+
>
+ AIRecommendations?: FunctionComponent
}
| {
isLicenseDashboard: true
@@ -170,6 +172,7 @@ export type MainContext = CommonMainContextProps &
aiAgentContext: null
tempAppWindowConfig: null
setTempAppWindowConfig: null
+ AIRecommendations?: null
}
)
diff --git a/src/index.ts b/src/index.ts
index 0bc61d960..beebaf10f 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -183,11 +183,13 @@ export interface customEnv {
* Time interval in seconds to refetch command bar data - Applications List
*/
COMMAND_BAR_REFETCH_INTERVAL?: number
+ HIDE_AUDIT_LOGS?: boolean
}
declare global {
interface Window {
__BASE_URL__: string
__ORCHESTRATOR_ROOT__: string
+ __ATHENA_ROOT__: string
_env_: customEnv
}
}