'use client' import { skipToken } from '@tanstack/react-query' import { atom } from 'jotai' import { atomWithQuery } from 'jotai-tanstack-query' import { selectAtom } from 'jotai/utils' import { nextPathnameAtom } from '@/app/components/next-route-state/atoms' import { consoleQuery } from '@/service/client' import { deploymentRouteAppInstanceIdAtom } from '../route-state' import { deploymentStatusPollingInterval, hasRuntimeInstanceDeployment, } from '../shared/domain/runtime-status' import { isInstanceDetailTabKey } from './tabs' export const deploymentDetailActiveTabAtom = atom((get) => { const pathnameSegments = get(nextPathnameAtom).split('/').filter(Boolean) const deploymentsSegmentIndex = pathnameSegments.indexOf('deployments') const selectedSegment = deploymentsSegmentIndex >= 0 ? pathnameSegments[deploymentsSegmentIndex + 2] : undefined return isInstanceDetailTabKey(selectedSegment) ? selectedSegment : 'overview' }) export const deploymentDetailAppInstanceQueryAtom = atomWithQuery((get) => { const appInstanceId = get(deploymentRouteAppInstanceIdAtom) return consoleQuery.enterprise.appInstanceService.getAppInstance.queryOptions({ input: appInstanceId ? { params: { appInstanceId }, } : skipToken, enabled: Boolean(appInstanceId), }) }) export const deploymentDetailAppInstanceAtom = selectAtom(deploymentDetailAppInstanceQueryAtom, query => query.data) export const deploymentDetailAppInstanceIsLoadingAtom = selectAtom(deploymentDetailAppInstanceQueryAtom, query => query.isLoading) export const deploymentDetailAppInstanceIsErrorAtom = selectAtom(deploymentDetailAppInstanceQueryAtom, query => query.isError) export const deploymentEnvironmentDeploymentsQueryAtom = atomWithQuery((get) => { const appInstanceId = get(deploymentRouteAppInstanceIdAtom) return consoleQuery.enterprise.deploymentService.listEnvironmentDeployments.queryOptions({ input: appInstanceId ? { params: { appInstanceId }, } : skipToken, enabled: Boolean(appInstanceId), refetchInterval: query => deploymentStatusPollingInterval(query.state.data?.environmentDeployments), }) }) export const deploymentEnvironmentDeploymentsAtom = selectAtom(deploymentEnvironmentDeploymentsQueryAtom, query => query.data) export const deploymentEnvironmentDeploymentsIsLoadingAtom = selectAtom(deploymentEnvironmentDeploymentsQueryAtom, query => query.isLoading) export const deploymentEnvironmentDeploymentsIsErrorAtom = selectAtom(deploymentEnvironmentDeploymentsQueryAtom, query => query.isError) export const deploymentRuntimeInstanceRowsAtom = atom((get) => { return get(deploymentEnvironmentDeploymentsAtom)?.environmentDeployments.filter(hasRuntimeInstanceDeployment) ?? [] })