diff --git a/ui/src/features/project/list/create-project-modal.tsx b/ui/src/features/project/list/create-project-modal.tsx index 2a7008b50..ee25f44ce 100644 --- a/ui/src/features/project/list/create-project-modal.tsx +++ b/ui/src/features/project/list/create-project-modal.tsx @@ -1,5 +1,5 @@ -import { zodResolver } from '@hookform/resolvers/zod'; import { createConnectQueryKey, useMutation } from '@connectrpc/connect-query'; +import { zodResolver } from '@hookform/resolvers/zod'; import { useQueryClient } from '@tanstack/react-query'; import { Form, Input, Modal, Tabs } from 'antd'; import type { JSONSchema4 } from 'json-schema'; @@ -44,7 +44,8 @@ export const CreateProjectModal = ({ visible, hide }: ModalComponentProps) => { manifest: textEncoder.encode(data.value) }, { - onSuccess: () => queryClient.invalidateQueries({ queryKey: createConnectQueryKey(listProjects) }) + onSuccess: () => + queryClient.invalidateQueries({ queryKey: createConnectQueryKey(listProjects) }) } ); }); diff --git a/ui/src/features/project/project-details/project-details.tsx b/ui/src/features/project/project-details/project-details.tsx index cd3907331..077e12201 100644 --- a/ui/src/features/project/project-details/project-details.tsx +++ b/ui/src/features/project/project-details/project-details.tsx @@ -57,7 +57,7 @@ import { Images } from './images'; import { RepoNode } from './nodes/repo-node'; import { Nodule, StageNode } from './nodes/stage-node'; import styles from './project-details.module.less'; -import { NodeType, NodesItemType, NodesRepoType } from './types'; +import { NewWarehouseNode, NodeType, NodesItemType, NodesRepoType } from './types'; import { UpdateFreightAliasModal } from './update-freight-alias-modal'; const lineThickness = 2; @@ -224,6 +224,10 @@ export const ProjectDetails = () => { const warehouseNodeMap = {} as { [key: string]: NodesRepoType }; + (warehouseData?.warehouses || []).map((warehouse) => { + warehouseNodeMap[warehouse.metadata?.name || ''] = NewWarehouseNode(warehouse); + }); + const myNodes = data.stages .slice() .sort((a, b) => a.metadata?.name?.localeCompare(b.metadata?.name || '') || 0) @@ -240,13 +244,7 @@ export const ProjectDetails = () => { if (warehouseName) { const cur = warehouseMap[warehouseName]; if (!warehouseNodeMap[warehouseName] && cur) { - warehouseNodeMap[warehouseName] = { - data: cur?.metadata?.name || '', - stageNames: [stage.metadata?.name || ''], - warehouseName: cur?.metadata?.name || '', - refreshing: !!cur?.metadata?.annotations['kargo.akuity.io/refresh'], - type: NodeType.WAREHOUSE - }; + warehouseNodeMap[warehouseName] = NewWarehouseNode(cur, [stage.metadata?.name || '']); } else { const stageNames = [ ...(warehouseNodeMap[warehouseName]?.stageNames || []), @@ -528,8 +526,14 @@ export const ProjectDetails = () => { if (isLoading || isLoadingFreight) return ; - if (!data || data.stages.length === 0) return ; - const stage = stageName && data.stages.find((item) => item.metadata?.name === stageName); + if ( + (!data || data.stages.length === 0) && + (!warehouseData || warehouseData.warehouses.length === 0) + ) { + return ; + } + + const stage = stageName && (data?.stages || []).find((item) => item.metadata?.name === stageName); const isFaded = (stage: Stage): boolean => { if (!promotingStage || !confirmingPromotion) { diff --git a/ui/src/features/project/project-details/types.ts b/ui/src/features/project/project-details/types.ts index fbe63f5b3..970c1bddf 100644 --- a/ui/src/features/project/project-details/types.ts +++ b/ui/src/features/project/project-details/types.ts @@ -2,7 +2,8 @@ import { ChartSubscription, GitSubscription, ImageSubscription, - Stage + Stage, + Warehouse } from '@ui/gen/v1alpha1/generated_pb'; export enum NodeType { @@ -46,3 +47,14 @@ export type NodesItemType = color: string; } | NodesRepoType; + +export const NewWarehouseNode = (warehouse: Warehouse, stageNames?: string[]): NodesRepoType => { + const name = warehouse?.metadata?.name || ''; + return { + data: name, + stageNames: stageNames || [], + warehouseName: name, + refreshing: !!warehouse?.metadata?.annotations['kargo.akuity.io/refresh'], + type: NodeType.WAREHOUSE + }; +};