import { Box, HStack, Text, VStack } from '@chakra-ui/react'; import type { OrgType } from '@fastgpt/global/support/user/team/org/type'; import Avatar from '@fastgpt/web/components/common/Avatar'; import { useToggle } from 'ahooks'; import { useMemo, useState } from 'react'; import IconButton from './IconButton'; function OrgTreeNode({ org, list, selectedOrg, selectOrg, indent = 0 }: { org: OrgType; list: OrgType[]; selectedOrg?: OrgType; selectOrg?: (org?: OrgType) => void; indent?: number; }) { const children = useMemo( () => list.filter((item) => item.path === `${org.path}/${org._id}`), [org, list] ); const [isExpanded, toggleIsExpanded] = useToggle(false); return ( {children.length > 0 ? ( toggleIsExpanded.toggle()} /> ) : ( )} selectOrg?.(org)} cursor="pointer"> {org.name} {isExpanded && children.length > 0 && children.map((child) => ( ))} ); } function OrgTree({ orgs, teamName, teamAvatar, selectedOrg, selectOrg }: { orgs: OrgType[]; teamAvatar: string; teamName: string; selectedOrg?: OrgType; selectOrg?: (org?: OrgType) => void; }) { const root = orgs[0]; if (!root) return null; const children = useMemo( () => orgs.filter((item) => item.path === `${root.path}/${root._id}`), [root, orgs] ); return ( selectOrg?.(root)} cursor="pointer" _hover={{ bgColor: selectedOrg === root ? 'blue.200' : 'gray.100' }} borderRadius="4px" p="4px" transition={'background 0.1s'} {...(selectedOrg === root ? { bgColor: 'blue.100' } : {})} > {teamName} {children.map((child) => ( ))} ); } export default OrgTree;