1818
1919import { skipToken } from "@reduxjs/toolkit/query" ;
2020import cx from "classnames" ;
21- import { useContext , useMemo } from "react" ;
21+ import { useMemo } from "react" ;
2222import {
2323 CircleFill ,
2424 Link45deg ,
@@ -30,18 +30,12 @@ import { Card, CardBody, Col, DropdownItem, Row } from "reactstrap";
3030
3131import SessionEnvironmentGitLabWarningBadge from "~/features/legacy/SessionEnvironmentGitLabWarnBadge" ;
3232import { Loader } from "../../../components/Loader" ;
33- import AppContext from "../../../utils/context/appContext" ;
34- import { DEFAULT_APP_PARAMS } from "../../../utils/context/appParams.constants" ;
3533import PermissionsGuard from "../../permissionsV2/PermissionsGuard" ;
3634import useProjectPermissions from "../../ProjectPageV2/utils/useProjectPermissions.hook" ;
3735import { Project } from "../../projectsV2/api/projectV2.api" ;
3836import { computeResourcesApi } from "../api/computeResources.api" ;
3937import type { SessionLauncher } from "../api/sessionLaunchersV2.api" ;
40- import {
41- sessionLaunchersV2Api ,
42- useGetEnvironmentsByEnvironmentIdBuildsQuery as useGetBuildsQuery ,
43- } from "../api/sessionLaunchersV2.api" ;
44- import { useGetSessionsImagesQuery } from "../api/sessionsV2.api" ;
38+ import { sessionLaunchersV2Api } from "../api/sessionLaunchersV2.api" ;
4539import {
4640 BuildStatusBadge ,
4741 BuildStatusDescription ,
@@ -58,6 +52,7 @@ import {
5852 getLauncherCategoryDefinitionByLauncher ,
5953} from "../session.utils" ;
6054import { SessionV2 } from "../sessionsV2.types" ;
55+ import useLauncherEnvironmentReadiness from "../useLauncherEnvironmentReadiness.hook" ;
6156import SessionCard from "./SessionCard" ;
6257
6358import styles from "./Session.module.scss" ;
@@ -84,34 +79,29 @@ export default function SessionLauncherCard({
8479 toggleSessionView,
8580 toggleShareLink,
8681} : SessionLauncherCardProps ) {
87- const { params } = useContext ( AppContext ) ;
88- const environment = launcher ?. environment ;
89- const imageBuildersEnabled =
90- params ?. IMAGE_BUILDERS_ENABLED ?? DEFAULT_APP_PARAMS . IMAGE_BUILDERS_ENABLED ;
91- const isCodeEnvironment = environment ?. environment_image_source === "build" ;
92- const isExternalImageEnvironment =
93- environment ?. environment_kind === "CUSTOM" &&
94- environment ?. environment_image_source === "image" ;
95-
96- const { data : builds , isLoading } = useGetBuildsQuery (
97- imageBuildersEnabled && isCodeEnvironment
98- ? { environmentId : environment . id }
99- : skipToken ,
100- ) ;
82+ const {
83+ builds,
84+ isBuildInProgress,
85+ isCodeEnvironment,
86+ isCustomImageEnvironment,
87+ isGlobalEnvironment,
88+ isLoadingBuilds,
89+ isLoadingContainerImage,
90+ lastBuild,
91+ lastSuccessfulBuild,
92+ useOldImage,
93+ containerImage,
94+ } = useLauncherEnvironmentReadiness ( { launcher } ) ;
10195
102- const lastBuild = builds ?. at ( 0 ) ;
103- const lastSuccessfulBuild = builds ?. find (
104- ( build ) => build . status === "succeeded" && build . id !== lastBuild ?. id ,
105- ) ;
10696 const hasSession = ! ! sessions ?. length ;
10797 const launcherDefinition =
10898 launcher && getLauncherCategoryDefinitionByLauncher ( launcher ) ;
10999 const LauncherTypeIcon = launcherDefinition ?. icon || PlayCircle ;
110100 const launcherTypeLabel = launcherDefinition ?. text . display || null ;
111101
112102 sessionLaunchersV2Api . endpoints . getEnvironmentsByEnvironmentIdBuilds . useQuerySubscription (
113- isCodeEnvironment && lastBuild ?. status === "in_progress"
114- ? { environmentId : environment . id }
103+ launcher && isBuildInProgress
104+ ? { environmentId : launcher . environment . id }
115105 : skipToken ,
116106 {
117107 pollingInterval : 1_000 ,
@@ -142,13 +132,6 @@ export default function SessionLauncherCard({
142132 "text-muted" ,
143133 ] ;
144134
145- const { data : containerImage , isLoading : isLoadingContainerImage } =
146- useGetSessionsImagesQuery (
147- environment ?. container_image != null
148- ? { imageUrl : environment . container_image }
149- : skipToken ,
150- ) ;
151-
152135 const { data : resourcePools , isLoading : isLoadingResourcePools } =
153136 computeResourcesApi . endpoints . getResourcePools . useQueryState ( { } ) ;
154137 // Ref: https://github.com/facebook/react/issues/35577
@@ -205,7 +188,7 @@ export default function SessionLauncherCard({
205188 </ span >
206189 </ Col >
207190 < Col xs = { 12 } xl = "auto" >
208- { environment ?. environment_kind === "GLOBAL" ? (
191+ { isGlobalEnvironment ? (
209192 < span className = { cx ( ENVIRONMENT_KIND_CLASSES ) } >
210193 < EnvironmentIcon type = "global" />
211194 Global environment
@@ -215,7 +198,7 @@ export default function SessionLauncherCard({
215198 < EnvironmentIcon type = "codeBased" size = { 16 } />
216199 Code based environment
217200 </ span >
218- ) : isExternalImageEnvironment ? (
201+ ) : isCustomImageEnvironment ? (
219202 < span className = { cx ( ENVIRONMENT_KIND_CLASSES ) } >
220203 < EnvironmentIcon type = "custom" size = { 16 } />
221204 External image environment
@@ -250,7 +233,7 @@ export default function SessionLauncherCard({
250233 < Row className = "g-2" >
251234 < Col xs = { 12 } xl = { 4 } >
252235 { isCodeEnvironment &&
253- ( isLoading ||
236+ ( isLoadingBuilds ||
254237 isLoadingContainerImage ||
255238 isLoadingResourcePools ) ? (
256239 < SessionBadge
@@ -328,32 +311,26 @@ export default function SessionLauncherCard({
328311 >
329312 < LauncherActions
330313 placement = "launcher-card"
314+ builds = { builds }
331315 hasSession = { hasSession }
332316 lastBuild = { lastBuild }
333317 launcher = { launcher }
334318 namespace = { project . namespace }
335319 otherActions = { otherLauncherActions }
336320 slug = { project . slug }
337- useOldImage = {
338- isCodeEnvironment &&
339- lastBuild ?. status !== "succeeded" &&
340- ! ! lastSuccessfulBuild
341- }
342321 />
343- { isCodeEnvironment &&
344- lastBuild ?. status !== "succeeded" &&
345- lastSuccessfulBuild && (
346- < BuildStatusDescription
347- isOldImage = { true }
348- status = { lastSuccessfulBuild ?. status }
349- createdAt = { lastSuccessfulBuild ?. created_at }
350- completedAt = {
351- lastSuccessfulBuild ?. status === "succeeded"
352- ? lastSuccessfulBuild ?. result ?. completed_at
353- : undefined
354- }
355- />
356- ) }
322+ { useOldImage && lastSuccessfulBuild && (
323+ < BuildStatusDescription
324+ isOldImage = { true }
325+ status = { lastSuccessfulBuild ?. status }
326+ createdAt = { lastSuccessfulBuild ?. created_at }
327+ completedAt = {
328+ lastSuccessfulBuild ?. status === "succeeded"
329+ ? lastSuccessfulBuild ?. result ?. completed_at
330+ : undefined
331+ }
332+ />
333+ ) }
357334 </ div >
358335 ) }
359336 </ Col >
0 commit comments