diff --git a/src/components/TeamCard.tsx b/src/components/TeamCard.tsx index 894d8c1..bc1c6d3 100644 --- a/src/components/TeamCard.tsx +++ b/src/components/TeamCard.tsx @@ -1,54 +1,78 @@ -import React, { useState } from 'react'; +import React, { useState } from 'react' import { - Box, Image, Text, VStack, Link, Badge, Button, - Modal, ModalOverlay, ModalContent, ModalHeader, ModalBody, ModalCloseButton, ModalFooter, - useDisclosure, Heading, List, ListItem, useColorModeValue, HStack, Avatar -} from '@chakra-ui/react'; -import { motion } from 'framer-motion'; -import { ITeam } from '../interfaces/ITeam'; -import { teamService } from '../service/teamService'; -import { IMember } from '../interfaces/IMember'; -import { memberService } from '../service/memberService'; + Box, + Image, + Text, + VStack, + Link, + Badge, + Button, + Modal, + ModalOverlay, + ModalContent, + ModalHeader, + ModalBody, + ModalCloseButton, + ModalFooter, + useDisclosure, + Heading, + List, + ListItem, + useColorModeValue, + HStack, + Avatar +} from '@chakra-ui/react' +import { motion } from 'framer-motion' +import { ITeam } from '../interfaces/ITeam' +import { teamService } from '../service/teamService' +import { IMember } from '../interfaces/IMember' +import { memberService } from '../service/memberService' interface TeamCardProps { - team: ITeam; + team: ITeam } -const MotionBox = motion(Box); +const MotionBox = motion(Box) export const TeamCard: React.FC = ({ team }) => { - const { isOpen, onOpen, onClose } = useDisclosure(); - const [teamMembers, setTeamMembers] = useState([]); - const [isLoading, setIsLoading] = useState(false); + const { isOpen, onOpen, onClose } = useDisclosure() + const [teamMembers, setTeamMembers] = useState([]) + const [isLoading, setIsLoading] = useState(false) - const bgColor = useColorModeValue('white', 'gray.800'); - const borderColor = useColorModeValue('gray.200', 'gray.600'); + const bgColor = useColorModeValue('white', 'gray.800') + const borderColor = useColorModeValue('gray.200', 'gray.600') const handleClick = async () => { try { - setIsLoading(true); - const relations = await teamService.getTeamMembers(team.teamId!); - const members = (await Promise.all( - relations.map(relation => memberService.getMemberById(relation.memberId)) - )).filter(member => member !== undefined) as IMember[]; + setIsLoading(true) + const relations = await teamService.getTeamMembers(team.teamId!) + const members = ( + await Promise.all( + relations.map(relation => + relation.memberId + ? memberService.getMemberById(relation.memberId) + : undefined + ) + ) + ).filter(member => member !== undefined) as IMember[] - setTeamMembers(members); - onOpen(); + setTeamMembers(members) + onOpen() } catch (error) { - console.error("Error fetching team members:", error); + console.error('Error fetching team members:', error) } finally { - setIsLoading(false); + setIsLoading(false) } - }; + } return ( <> = ({ team }) => { bg={bgColor} borderColor={borderColor} > - + {team.logo && ( - Team Logo + Team Logo )} - {team.name || `Team ${team.teamId}`} + + {team.name || `Team ${team.teamId}`} + {team.teamId !== null && team.teamId !== undefined && ( - PM ID: {team.teamId.toString()} + PM ID: {team.teamId.toString()} )} {team.deployLink && ( - e.stopPropagation()}> + e.stopPropagation()} + > View Deployment )} - - Created: {team.createdAt && new Date(team.createdAt).toLocaleDateString()} + + Created:{' '} + {team.createdAt && new Date(team.createdAt).toLocaleDateString()} @@ -81,15 +119,22 @@ export const TeamCard: React.FC = ({ team }) => { {team.name || `Team ${team.teamId}`} - - Team Members - - {teamMembers.map((member) => ( + + Team Members + + {teamMembers.map(member => ( - - {member.firstName} {member.lastName} - {member.email} + + + {member.firstName} {member.lastName} + + + {member.email} + ))} @@ -98,12 +143,12 @@ export const TeamCard: React.FC = ({ team }) => { - - ); -}; \ No newline at end of file + ) +}