From 0b6e64d99e344e2b808eaa9f46dcc21a527de900 Mon Sep 17 00:00:00 2001 From: Oleg Vavilov Date: Mon, 9 Jun 2025 23:05:44 +0300 Subject: [PATCH] [Feature]: Add showing information balloon for Run status #2752 --- frontend/src/libs/run.ts | 3 +- .../pages/Runs/Details/RunDetails/index.tsx | 23 ++------ .../Runs/List/hooks/useColumnsDefinitions.tsx | 32 ++--------- .../components/RunStatusIndicator/index.tsx | 53 +++++++++++++++++++ .../RunStatusIndicator/styles.module.scss | 15 ++++++ 5 files changed, 79 insertions(+), 47 deletions(-) create mode 100644 frontend/src/pages/Runs/components/RunStatusIndicator/index.tsx create mode 100644 frontend/src/pages/Runs/components/RunStatusIndicator/styles.module.scss diff --git a/frontend/src/libs/run.ts b/frontend/src/libs/run.ts index de96c16c30..e49e4c28fa 100644 --- a/frontend/src/libs/run.ts +++ b/frontend/src/libs/run.ts @@ -2,6 +2,7 @@ import { get as _get } from 'lodash'; import { StatusIndicatorProps } from '@cloudscape-design/components'; import { capitalize } from 'libs'; + import { finishedRunStatuses } from '../pages/Runs/constants'; import { IModelExtended } from '../pages/Models/List/types'; @@ -45,7 +46,7 @@ export const getStatusIconColor = ( switch (status) { case 'submitted': case 'pending': - return 'blue'; + return 'blue'; case 'pulling': return 'green'; case 'aborted': diff --git a/frontend/src/pages/Runs/Details/RunDetails/index.tsx b/frontend/src/pages/Runs/Details/RunDetails/index.tsx index f623fbe55b..c4707364c3 100644 --- a/frontend/src/pages/Runs/Details/RunDetails/index.tsx +++ b/frontend/src/pages/Runs/Details/RunDetails/index.tsx @@ -4,15 +4,14 @@ import { useParams } from 'react-router-dom'; import { get as _get } from 'lodash'; import { format } from 'date-fns'; -import { Box, ColumnLayout, Container, Header, Loader, NavigateLink, StatusIndicator } from 'components'; +import { Box, ColumnLayout, Container, Header, Loader, NavigateLink } from 'components'; import { DATE_TIME_FORMAT } from 'consts'; -import { getRunError, getRunPriority, getRunStatusMessage, getStatusIconColor, getStatusIconType } from 'libs/run'; +import { getRunError, getRunPriority } from 'libs/run'; +import { ROUTES } from 'routes'; import { useGetRunQuery } from 'services/run'; -import { finishedRunStatuses } from 'pages/Runs/constants'; - -import { ROUTES } from '../../../../routes'; +import { RunStatusIndicator } from '../../components/RunStatusIndicator'; import { getRunListItemBackend, getRunListItemInstanceId, @@ -50,13 +49,6 @@ export const RunDetails = () => { if (!runData) return null; - const status = finishedRunStatuses.includes(runData.status) - ? runData.latest_job_submission?.status ?? runData.status - : runData.status; - const terminationReason = finishedRunStatuses.includes(runData.status) - ? runData.latest_job_submission?.termination_reason - : null; - return ( <> {t('common.general')}}> @@ -105,12 +97,7 @@ export const RunDetails = () => {
{t('projects.run.status')}
- - {getRunStatusMessage(runData)} - +
diff --git a/frontend/src/pages/Runs/List/hooks/useColumnsDefinitions.tsx b/frontend/src/pages/Runs/List/hooks/useColumnsDefinitions.tsx index 74b6187b38..51b27d8134 100644 --- a/frontend/src/pages/Runs/List/hooks/useColumnsDefinitions.tsx +++ b/frontend/src/pages/Runs/List/hooks/useColumnsDefinitions.tsx @@ -2,21 +2,13 @@ import React from 'react'; import { useTranslation } from 'react-i18next'; import { format } from 'date-fns'; -import { NavigateLink, StatusIndicator } from 'components'; +import { NavigateLink } from 'components'; import { DATE_TIME_FORMAT } from 'consts'; -import { - getRepoNameFromRun, - getRunError, - getRunPriority, - getRunStatusMessage, - getStatusIconColor, - getStatusIconType, -} from 'libs/run'; +import { getRepoNameFromRun, getRunError, getRunPriority } from 'libs/run'; import { ROUTES } from 'routes'; -import { finishedRunStatuses } from 'pages/Runs/constants'; - +import { RunStatusIndicator } from '../../components/RunStatusIndicator'; import { getRunListItemBackend, getRunListItemInstance, @@ -73,23 +65,7 @@ export const useColumnsDefinitions = () => { { id: 'status', header: t('projects.run.status'), - cell: (item: IRun) => { - const status = finishedRunStatuses.includes(item.status) - ? item.latest_job_submission?.status ?? item.status - : item.status; - const terminationReason = finishedRunStatuses.includes(item.status) - ? item.latest_job_submission?.termination_reason - : null; - - return ( - - {getRunStatusMessage(item)} - - ); - }, + cell: (item: IRun) => , }, { id: 'error', diff --git a/frontend/src/pages/Runs/components/RunStatusIndicator/index.tsx b/frontend/src/pages/Runs/components/RunStatusIndicator/index.tsx new file mode 100644 index 0000000000..1a2075cb81 --- /dev/null +++ b/frontend/src/pages/Runs/components/RunStatusIndicator/index.tsx @@ -0,0 +1,53 @@ +import React, { useRef } from 'react'; + +import { Box, Icon, Popover, StatusIndicator } from 'components'; + +import { getRunStatusMessage, getStatusIconColor, getStatusIconType } from 'libs/run'; + +import { finishedRunStatuses } from '../../constants'; + +import styles from './styles.module.scss'; + +type RunStatusIndicatorProps = { + run: IRun; +}; + +export const RunStatusIndicator: React.FC = ({ run }) => { + const buttonRef = useRef(null); + const status = finishedRunStatuses.includes(run.status) ? run.latest_job_submission?.status ?? run.status : run.status; + + const terminationReason = finishedRunStatuses.includes(run.status) ? run.latest_job_submission?.termination_reason : null; + + const isShowInfo = ['no offers', 'error'].includes(run.latest_job_submission?.status_message ?? ''); + + return ( +
+ + {getRunStatusMessage(run)} + + + {isShowInfo && ( +
buttonRef.current?.click()} + onMouseLeave={() => document.dispatchEvent(new MouseEvent('mousedown'))} + > + + + Type your text here} + > +
+ )} +
+ ); +}; diff --git a/frontend/src/pages/Runs/components/RunStatusIndicator/styles.module.scss b/frontend/src/pages/Runs/components/RunStatusIndicator/styles.module.scss new file mode 100644 index 0000000000..015917986c --- /dev/null +++ b/frontend/src/pages/Runs/components/RunStatusIndicator/styles.module.scss @@ -0,0 +1,15 @@ +.runStatus { + display: flex; + align-items: center; + gap: 10px +} + +.infoIcon { + position: relative; + + [class*="awsui_popover"] { + & > div { + transform: translate(-8px, -14px); + } + } +}