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 && ( +