diff --git a/client/components/Header/Header.tsx b/client/components/Header/Header.tsx
index c4ff170efc411..09e4da968cb10 100644
--- a/client/components/Header/Header.tsx
+++ b/client/components/Header/Header.tsx
@@ -1,4 +1,4 @@
-import React, { FC } from 'react';
+import React, { FC, isValidElement, ReactElement } from 'react';
import { css } from '@rocket.chat/css-in-js';
import colors from '@rocket.chat/fuselage-tokens/colors';
import {
@@ -12,14 +12,19 @@ import {
Tag,
TagProps,
BoxProps,
+ Skeleton,
} from '@rocket.chat/fuselage';
+type HeaderIconProps = {icon: ReactElement | { name: string; color?: string } | null};
+
const Title: FC = (props: any) => ;
const Subtitle: FC = (props: any) => ;
const Row: FC = (props: any) => ;
-const HeaderIcon: FC<{ icon: JSX.Element | { name: string; color?: string } | null}> = ({ icon }) => icon && {React.isValidElement(icon) ? icon : };
+const HeaderIcon: FC = ({ icon }) => icon &&
+ {React.isValidElement(icon) ? icon : }
+;
const ToolBox: FC = (props: any) => ;
@@ -41,6 +46,12 @@ const HeaderLink: FC = (props: BoxProps) => {children};
+const HeaderTagIcon: FC = ({ icon }) => (icon ?
+ {isValidElement(icon) ? icon : }
+ : null);
+
+const HeaderTagSkeleton: FC = () => ;
+
const ToolBoxAction: FC = ({ id, icon, color, title, action, className, tabId, index, ...props }: any) => {
return ;
});
-const HeaderIcon = ({ room }) => {
+const HeaderIconWithRoom = ({ room }) => {
const icon = useRoomIcon(room);
- return
- {icon.name ? : icon}
- ;
+ return ;
};
const RoomTitle = ({ room }) => <>
-
+
{room.name}
>;
@@ -73,7 +70,7 @@ const ParentRoomWithEndpointData = ({ rid }) => {
}, [reset, getData, rid, resolve, reject]);
if (AsyncStatePhase.LOADING === phase) {
- return ;
+ return ;
}
if (AsyncStatePhase.ERROR === phase || !value?.room) {
@@ -87,7 +84,7 @@ const ParentRoom = ({ room }) => {
const href = roomTypes.getRouteLink(room.t, room);
return
-
+
{roomTypes.getRoomName(room.t, room)}
@@ -95,26 +92,33 @@ const ParentRoom = ({ room }) => {
};
const ParentTeam = ({ room }) => {
- const query = useMemo(() => ({ teamId: room.teamId }), [room.teamId]);
- const userTeamQuery = useMemo(() => ({ userId: Meteor.userId() }), []);
+ const userId = useUserId();
- const { value, phase } = useEndpointData('teams.info', query);
- const { value: userTeams, phase: userTeamsPhase } = useEndpointData('users.listTeams', userTeamQuery);
+ const { value, phase } = useEndpointData('teams.info', useMemo(() => ({ teamId: room.teamId }), [room.teamId]));
+ const { value: userTeams, phase: userTeamsPhase } = useEndpointData('users.listTeams', useMemo(() => ({ userId }), [userId]));
- const teamLoading = phase === AsyncStatePhase.LOADING;
- const userTeamsLoading = userTeamsPhase === AsyncStatePhase.LOADING;
const belongsToTeam = userTeams?.teams?.find((team) => team._id === room.teamId);
const teamMainRoom = useUserSubscription(value?.teamInfo?.roomId);
const teamMainRoomHref = teamMainRoom ? roomTypes.getRouteLink(teamMainRoom.t, teamMainRoom) : null;
- return teamLoading || userTeamsLoading || room.teamMain ? null :
-
- {belongsToTeam
- ? {teamMainRoom?.name}
- : teamMainRoom?.name
- }
- ;
+ if (phase === AsyncStatePhase.LOADING || userTeamsPhase === AsyncStatePhase.LOADING) {
+ return ;
+ }
+
+ if (phase === AsyncStatePhase.REJECTED || !value.teamInfo) {
+ return null;
+ }
+
+ return (
+
+
+ {belongsToTeam && teamMainRoom
+ ? {teamMainRoom?.name}
+ : value.teamInfo.name
+ }
+
+ );
};
const DirectRoomHeader = ({ room }) => {
const userId = useUserId();
@@ -138,7 +142,7 @@ const RoomHeader = ({ room, topic }) => {
{room.prid && }
- {room.teamId && }
+ {room.teamId && !room.teamMain && }
{ showQuickActions &&