// eslint-disable-next-line @typescript-eslint/no-unused-vars /* eslint-disable @nx/enforce-module-boundaries */ // nx-ignore-next-line import { ProjectGraphProjectNode } from '@nx/devkit'; import { EyeIcon } from '@heroicons/react/24/outline'; import { PropertyInfoTooltip, Tooltip } from '@nx/graph/ui-tooltips'; import { TargetConfigurationDetails, TargetConfigurationDetailsHandle, } from '../target-configuration-details/target-configuration-details'; import { TooltipTriggerText } from '../target-configuration-details/tooltip-trigger-text'; import { createRef, ForwardedRef, forwardRef, RefObject, useImperativeHandle, useRef, } from 'react'; import { twMerge } from 'tailwind-merge'; export interface ProjectDetailsProps { project: ProjectGraphProjectNode; sourceMap: Record; variant?: 'default' | 'compact'; onTargetCollapse?: (targetName: string) => void; onTargetExpand?: (targetName: string) => void; onViewInProjectGraph?: (data: { projectName: string }) => void; onViewInTaskGraph?: (data: { projectName: string; targetName: string; }) => void; onRunTarget?: (data: { projectName: string; targetName: string }) => void; } export interface ProjectDetailsImperativeHandle { collapseTarget: (targetName: string) => void; expandTarget: (targetName: string) => void; } export const ProjectDetails = forwardRef( ( { project: { name, data: { root, ...projectData }, }, sourceMap, variant, onTargetCollapse, onTargetExpand, onViewInProjectGraph, onViewInTaskGraph, onRunTarget, }: ProjectDetailsProps, ref: ForwardedRef ) => { const isCompact = variant === 'compact'; const projectTargets = Object.keys(projectData.targets ?? {}); const targetRefs = useRef( projectTargets.reduce((acc, targetName) => { acc[targetName] = createRef(); return acc; }, {} as Record>) ); const displayType = projectData.projectType && projectData.projectType?.charAt(0)?.toUpperCase() + projectData.projectType?.slice(1); useImperativeHandle(ref, () => ({ collapseTarget: (targetName: string) => { targetRefs.current[targetName]?.current?.collapse(); }, expandTarget: (targetName: string) => { targetRefs.current[targetName]?.current?.expand(); }, })); return ( <>

{name}{' '} {onViewInProjectGraph ? ( onViewInProjectGraph({ projectName: name })} > ) : null}{' '}

{projectData.tags ? (

{projectData.tags?.map((tag) => ( {tag} ))}

) : null}

Root: {root}

{displayType ? (

Type: {displayType}

) : null}

) as any} > Targets

    {projectTargets.map((targetName) => { const target = projectData.targets?.[targetName]; return target && targetRefs.current[targetName] ? (
  • ) : null; })}
); } ); export default ProjectDetails;