From e6a145d7046dd1ed7dc295e4c88cdc4c63196bba Mon Sep 17 00:00:00 2001 From: Victor Skvortsov Date: Thu, 25 Dec 2025 15:11:46 +0500 Subject: [PATCH] Revert "No fleets notification #373 (#3418)" This reverts commit 06448719889dc2da5e7fa88735b7823f20969b28. --- .../useCheckingForFleetsInProjectsOfMember.ts | 51 -------- frontend/src/locale/en.json | 5 - frontend/src/pages/Fleets/List/index.tsx | 71 +++-------- .../src/pages/Fleets/List/styles.module.scss | 12 -- .../pages/Project/Details/Settings/index.tsx | 32 +---- .../Details/Settings/styles.module.scss | 11 -- frontend/src/pages/Runs/List/index.tsx | 119 +++++++----------- .../src/pages/Runs/List/styles.module.scss | 12 -- frontend/src/services/fleet.ts | 2 +- 9 files changed, 66 insertions(+), 249 deletions(-) delete mode 100644 frontend/src/hooks/useCheckingForFleetsInProjectsOfMember.ts diff --git a/frontend/src/hooks/useCheckingForFleetsInProjectsOfMember.ts b/frontend/src/hooks/useCheckingForFleetsInProjectsOfMember.ts deleted file mode 100644 index 1028336070..0000000000 --- a/frontend/src/hooks/useCheckingForFleetsInProjectsOfMember.ts +++ /dev/null @@ -1,51 +0,0 @@ -import { useEffect, useMemo, useState } from 'react'; - -import { useLazyGetFleetsQuery } from '../services/fleet'; -import { useGetProjectsQuery } from '../services/project'; - -type Args = { projectNames?: IProject['project_name'][] }; - -export const useCheckingForFleetsInProjects = ({ projectNames }: Args) => { - const [projectFleetMap, setProjectFleetMap] = useState>({}); - const { data: projectsData } = useGetProjectsQuery(undefined, { - skip: !!projectNames?.length, - }); - - const [getFleets] = useLazyGetFleetsQuery(); - - const projectNameForChecking = useMemo(() => { - if (projectNames) { - return projectNames; - } - - if (projectsData) { - return projectsData.map((project) => project.project_name); - } - - return []; - }, [projectNames, projectsData]); - - useEffect(() => { - const fetchFleets = async () => { - const map: Record = {}; - - await Promise.all( - projectNameForChecking.map((projectName) => - getFleets({ - limit: 1, - project_name: projectName, - only_active: true, - }) - .unwrap() - .then((data) => (map[projectName] = Boolean(data.length))), - ), - ); - - setProjectFleetMap(map); - }; - - fetchFleets(); - }, [projectNameForChecking]); - - return projectFleetMap; -}; diff --git a/frontend/src/locale/en.json b/frontend/src/locale/en.json index f026151083..7c07a5f938 100644 --- a/frontend/src/locale/en.json +++ b/frontend/src/locale/en.json @@ -564,11 +564,6 @@ }, "fleets": { - "no_alert": { - "title": "No fleets", - "description": "The project has no fleets. Create one before submitting a run.", - "button_title": "Create a fleet" - }, "fleet": "Fleet", "fleet_placeholder": "Filtering by fleet", "fleet_name": "Fleet name", diff --git a/frontend/src/pages/Fleets/List/index.tsx b/frontend/src/pages/Fleets/List/index.tsx index 0966d89d1e..3ac92310fb 100644 --- a/frontend/src/pages/Fleets/List/index.tsx +++ b/frontend/src/pages/Fleets/List/index.tsx @@ -1,13 +1,10 @@ import React from 'react'; import { useTranslation } from 'react-i18next'; -import { ButtonProps } from '@cloudscape-design/components/button'; -import { Alert, Button, Header, Loader, PropertyFilter, SpaceBetween, Table, Toggle } from 'components'; +import { Button, Header, Loader, PropertyFilter, SpaceBetween, Table, Toggle } from 'components'; import { DEFAULT_TABLE_PAGE_SIZE } from 'consts'; import { useBreadcrumbs, useCollection, useInfiniteScroll } from 'hooks'; -import { useCheckingForFleetsInProjects } from 'hooks/useCheckingForFleetsInProjectsOfMember'; -import { goToUrl } from 'libs'; import { ROUTES } from 'routes'; import { useLazyGetFleetsQuery } from 'services/fleet'; @@ -38,8 +35,6 @@ export const FleetList: React.FC = () => { isDisabledClearFilter, } = useFilters(); - const projectHavingFleetMap = useCheckingForFleetsInProjects({}); - const { data, isLoading, refreshList, isLoadingMore } = useInfiniteScroll({ useLazyQuery: useLazyGetFleetsQuery, args: { ...filteringRequestParams, limit: DEFAULT_TABLE_PAGE_SIZE }, @@ -72,13 +67,6 @@ export const FleetList: React.FC = () => { deleteFleets([...selectedItems]).catch(console.log); }; - const projectDontHasFleet = Object.keys(projectHavingFleetMap).find((project) => !projectHavingFleetMap[project]); - - const onCreateAFleet: ButtonProps['onClick'] = (event) => { - event.preventDefault(); - goToUrl('https://dstack.ai/docs/quickstart/#create-a-fleet', true); - }; - return ( { stickyHeader={true} selectionType="multi" header={ - <> - {projectDontHasFleet && ( -
- - {t('fleets.no_alert.button_title')} - - } - > - The project {projectDontHasFleet} has no fleets. Create one before submitting a - run. - -
- )} - -
- - -
- +
+ + +
} filter={
diff --git a/frontend/src/pages/Fleets/List/styles.module.scss b/frontend/src/pages/Fleets/List/styles.module.scss index 1972454295..022678e83e 100644 --- a/frontend/src/pages/Fleets/List/styles.module.scss +++ b/frontend/src/pages/Fleets/List/styles.module.scss @@ -1,15 +1,3 @@ -.alertBox { - margin-bottom: 12px; - - :global { - & [class^="awsui_alert"] { - & [class^="awsui_action-slot"] { - display: flex; - align-items: center; - } - } - } -} .filters { display: flex; flex-wrap: wrap; diff --git a/frontend/src/pages/Project/Details/Settings/index.tsx b/frontend/src/pages/Project/Details/Settings/index.tsx index 7a0fbfb8e6..2cd6b4915a 100644 --- a/frontend/src/pages/Project/Details/Settings/index.tsx +++ b/frontend/src/pages/Project/Details/Settings/index.tsx @@ -3,11 +3,9 @@ import { useTranslation } from 'react-i18next'; import { useNavigate, useParams } from 'react-router-dom'; import { debounce } from 'lodash'; import { ExpandableSection, Tabs } from '@cloudscape-design/components'; -import { ButtonProps } from '@cloudscape-design/components/button'; import Wizard from '@cloudscape-design/components/wizard'; import { - Alert, Box, Button, ButtonWithConfirmation, @@ -24,7 +22,7 @@ import { import { HotspotIds } from 'layouts/AppLayout/TutorialPanel/constants'; import { useBreadcrumbs, useNotifications } from 'hooks'; -import { goToUrl, riseRouterException } from 'libs'; +import { riseRouterException } from 'libs'; import { copyToClipboard } from 'libs'; import { ROUTES } from 'routes'; import { useGetProjectQuery, useUpdateProjectMembersMutation, useUpdateProjectMutation } from 'services/project'; @@ -37,7 +35,6 @@ import { useDeleteProject } from 'pages/Project/hooks/useDeleteProject'; import { ProjectMembers } from 'pages/Project/Members'; import { getProjectRoleByUserName } from 'pages/Project/utils'; -import { useCheckingForFleetsInProjects } from '../../../../hooks/useCheckingForFleetsInProjectsOfMember'; import { useBackendsTable } from '../../Backends/hooks'; import { BackendsTable } from '../../Backends/Table'; import { GatewaysTable } from '../../Gateways'; @@ -63,10 +60,6 @@ export const ProjectSettings: React.FC = () => { const { deleteProject, isDeleting } = useDeleteProject(); const { data: currentUser } = useGetUserDataQuery({}); - const projectNames = useMemo(() => [paramProjectName], [paramProjectName]); - - const projectHavingFleetMap = useCheckingForFleetsInProjects({ projectNames }); - const { data, isLoading, error } = useGetProjectQuery({ name: paramProjectName }); const { data: runsData } = useGetRunsQuery({ @@ -187,13 +180,6 @@ export const ProjectSettings: React.FC = () => { const [activeStepIndex, setActiveStepIndex] = React.useState(0); - const projectDontHasFleet = !projectHavingFleetMap?.[paramProjectName]; - - const onCreateAFleet: ButtonProps['onClick'] = (event) => { - event.preventDefault(); - goToUrl('https://dstack.ai/docs/quickstart/#create-a-fleet', true); - }; - if (isLoadingPage) return ( @@ -205,22 +191,6 @@ export const ProjectSettings: React.FC = () => { <> {data && backendsData && gatewaysData && ( - {projectDontHasFleet && ( -
- - {t('fleets.no_alert.button_title')} - - } - > - The project {paramProjectName} has no fleets. Create one before submitting a run. - -
- )} - {isProjectMember && ( { localStorePrefix: 'administration-run-list-page', }); - const projectHavingFleetMap = useCheckingForFleetsInProjects({}); - const { data, isLoading, refreshList, isLoadingMore } = useInfiniteScroll({ useLazyQuery: useLazyGetRunsQuery, args: { ...filteringRequestParams, limit: DEFAULT_TABLE_PAGE_SIZE, job_submissions_limit: 1 }, @@ -122,13 +117,6 @@ export const RunList: React.FC = () => { } }; - const projectDontHasFleet = Object.keys(projectHavingFleetMap).find((project) => !projectHavingFleetMap[project]); - - const onCreateAFleet: ButtonProps['onClick'] = (event) => { - event.preventDefault(); - goToUrl('https://dstack.ai/docs/quickstart/#create-a-fleet', true); - }; - return (
{ columnDisplay={preferences.contentDisplay} preferences={} header={ - <> - {projectDontHasFleet && ( -
- - {t('fleets.no_alert.button_title')} - - } +
+ - The project {projectDontHasFleet} has no fleets. Create one before submitting a - run. - -
- )} - -
- - {t('common.new')} - - - - - - - {/**/} - -
- + {t('common.new')} + + + + + + + {/**/} + +