diff --git a/.changeset/wild-otters-laugh.md b/.changeset/wild-otters-laugh.md new file mode 100644 index 000000000..8a17b7910 --- /dev/null +++ b/.changeset/wild-otters-laugh.md @@ -0,0 +1,5 @@ +--- +'@orchestrator-ui/orchestrator-ui-components': minor +--- + +1662 Make the navbar fixed when scrolling and notify user for failing websocket there. diff --git a/packages/orchestrator-ui-components/src/components/WfoBadges/WfoWebsocketStatusBadge/WfoWebsocketStatusBadge.tsx b/packages/orchestrator-ui-components/src/components/WfoBadges/WfoWebsocketStatusBadge/WfoWebsocketStatusBadge.tsx index 67c516d9e..f4ca03576 100644 --- a/packages/orchestrator-ui-components/src/components/WfoBadges/WfoWebsocketStatusBadge/WfoWebsocketStatusBadge.tsx +++ b/packages/orchestrator-ui-components/src/components/WfoBadges/WfoWebsocketStatusBadge/WfoWebsocketStatusBadge.tsx @@ -1,20 +1,26 @@ -import React, { useCallback, useEffect } from 'react'; +import React, { FC, useCallback, useEffect } from 'react'; import { useDispatch } from 'react-redux'; import { useTranslations } from 'next-intl'; import { EuiToolTip } from '@elastic/eui'; +import { WfoHeaderBadge } from '@/components'; import { useWithOrchestratorTheme } from '@/hooks'; import { useOrchestratorTheme } from '@/hooks/useOrchestratorTheme'; import { WfoBoltFill, WfoBoltSlashFill } from '@/icons'; import { orchestratorApi } from '@/rtk'; import { useStreamMessagesQuery } from '@/rtk/endpoints/streamMessages'; -import { WfoHeaderBadge } from '../WfoHeaderBadge'; import { getStyles } from './styles'; -export const WfoWebsocketStatusBadge = () => { +interface WfoWebsocketStatusBadgeProps { + hideWhenConnected?: boolean; +} + +export const WfoWebsocketStatusBadge: FC = ({ + hideWhenConnected = false, +}) => { const dispatch = useDispatch(); const { connectedStyle, disconnectedStyle } = useWithOrchestratorTheme(getStyles); @@ -23,6 +29,8 @@ export const WfoWebsocketStatusBadge = () => { const { theme } = useOrchestratorTheme(); const { data: websocketConnected } = useStreamMessagesQuery(); + const showBadge = !(websocketConnected && hideWhenConnected); + const reconnect = useCallback(() => { dispatch(orchestratorApi.util.resetApiState()); }, [dispatch]); @@ -56,7 +64,7 @@ export const WfoWebsocketStatusBadge = () => { }; }, [reconnect, websocketConnected]); - return ( + return showBadge ? ( { iconOnClickAriaLabel={undefined} /> + ) : ( + <> ); }; diff --git a/packages/orchestrator-ui-components/src/components/WfoPageTemplate/WfoPageHeader/WfoPageHeader.tsx b/packages/orchestrator-ui-components/src/components/WfoPageTemplate/WfoPageHeader/WfoPageHeader.tsx index 7c0692dd6..00e22621f 100644 --- a/packages/orchestrator-ui-components/src/components/WfoPageTemplate/WfoPageHeader/WfoPageHeader.tsx +++ b/packages/orchestrator-ui-components/src/components/WfoPageTemplate/WfoPageHeader/WfoPageHeader.tsx @@ -17,6 +17,7 @@ import { WfoEngineStatusBadge, WfoEnvironmentBadge, WfoFailedTasksBadge, + WfoWebsocketStatusBadge, } from '@/components'; import { WfoAppLogo } from '@/components/WfoPageTemplate/WfoPageHeader/WfoAppLogo'; import { getWfoPageHeaderStyles } from '@/components/WfoPageTemplate/WfoPageHeader/styles'; @@ -70,6 +71,7 @@ export const WfoPageHeader: FC = ({ + diff --git a/packages/orchestrator-ui-components/src/components/WfoPageTemplate/WfoPageTemplate/WfoPageTemplate.tsx b/packages/orchestrator-ui-components/src/components/WfoPageTemplate/WfoPageTemplate/WfoPageTemplate.tsx index 7e36e1c46..1d99cba6a 100644 --- a/packages/orchestrator-ui-components/src/components/WfoPageTemplate/WfoPageTemplate/WfoPageTemplate.tsx +++ b/packages/orchestrator-ui-components/src/components/WfoPageTemplate/WfoPageTemplate/WfoPageTemplate.tsx @@ -1,13 +1,11 @@ import React, { FC, ReactElement, ReactNode, useState } from 'react'; -import { EuiPageTemplate } from '@elastic/eui'; import type { EuiThemeColorMode } from '@elastic/eui'; +import { EuiPageTemplate } from '@elastic/eui'; import { EuiSideNavItemType } from '@elastic/eui/src/components/side_nav/side_nav_types'; -import { useOrchestratorTheme } from '../../../hooks/useOrchestratorTheme'; -import { WfoBreadcrumbs } from '../WfoBreadcrumbs'; -import { WfoPageHeader } from '../WfoPageHeader'; -import { WfoSidebar } from '../WfoSidebar'; +import { WfoBreadcrumbs, WfoPageHeader, WfoSidebar } from '@/components'; +import { useOrchestratorTheme } from '@/hooks'; export interface WfoPageTemplateProps { getAppLogo: (navigationHeight: number) => ReactElement; @@ -35,7 +33,6 @@ export const WfoPageTemplate: FC = ({ navigationHeight={navigationHeight} onThemeSwitch={onThemeSwitch} /> - {/* Sidebar and content area */} = ({ @@ -56,6 +55,8 @@ export const WfoPageTemplate: FC = ({ ({ streamMessages: build.query({ queryFn: () => { - return { data: false }; + return { data: true }; }, async onCacheEntryAdded( _,