import type { IRoom } from '@rocket.chat/core-typings'; import { TeamType } from '@rocket.chat/core-typings'; import { useUserId } from '@rocket.chat/ui-contexts'; import { useTranslation } from 'react-i18next'; import ParentRoomButton from './ParentRoomButton'; import { useTeamInfoQuery } from '../../../../hooks/useTeamInfoQuery'; import { useGoToRoom } from '../../hooks/useGoToRoom'; import { useUserTeamsQuery } from '../../hooks/useUserTeamsQuery'; type APIErrorResult = { success: boolean; error: string }; export type ParentTeamProps = { room: IRoom; }; const ParentTeam = ({ room }: ParentTeamProps) => { const { t } = useTranslation(); const { teamId } = room; const userId = useUserId(); if (!teamId) { throw new Error('invalid rid'); } if (!userId) { throw new Error('invalid uid'); } const { data: teamInfo, isLoading: teamInfoLoading, isError: teamInfoError, } = useTeamInfoQuery(teamId, { retry: (_, error) => (error as unknown as APIErrorResult)?.error !== 'unauthorized' }); const { data: userTeams, isLoading: userTeamsLoading } = useUserTeamsQuery(userId); const userBelongsToTeam = Boolean(userTeams?.find((team) => team._id === teamId)) || false; const isPublicTeam = teamInfo?.type === TeamType.PUBLIC; const shouldDisplayTeam = isPublicTeam || userBelongsToTeam; const goToRoom = useGoToRoom(); const redirectToMainRoom = (): void => { const rid = teamInfo?.roomId; if (!rid) { return; } goToRoom(rid); }; if (teamInfoError || !shouldDisplayTeam) { return null; } return ( ); }; export default ParentTeam;