diff --git a/src/service/feature/member/types/memberAPI.ts b/src/service/feature/member/types/memberAPI.ts index 98fff08..e6694ef 100644 --- a/src/service/feature/member/types/memberAPI.ts +++ b/src/service/feature/member/types/memberAPI.ts @@ -11,6 +11,7 @@ export type MemberState = export interface MemberInfo { userId: string; email: string; + name: string; nickname: string; avatarUrl?: string; birth?: string; @@ -38,4 +39,4 @@ export interface SearchMemberResult { email: string; nickname: string; avatarUrl?: string; -} \ No newline at end of file +} diff --git a/src/view/layout/LayoutWithSidebar.tsx b/src/view/layout/LayoutWithSidebar.tsx index 367da0c..f6e64fb 100644 --- a/src/view/layout/LayoutWithSidebar.tsx +++ b/src/view/layout/LayoutWithSidebar.tsx @@ -4,6 +4,7 @@ import UserProfileBar from './profile/UserProfileBar.tsx'; import DirectChannelSidebar from './sidebar/channel/DirectChannelSidebar.tsx'; import ServerChannelSidebar from './sidebar/channel/ServerChannelSidebar.tsx'; import TopSidebar from '@components/layout/sidebar/top/TopSidebar.tsx'; +import TeamMemberSidebar from './sidebar/team/TeamMemberSidebar.tsx'; const LayoutWithSidebar = () => { const location = useLocation(); @@ -22,9 +23,16 @@ const LayoutWithSidebar = () => { {isDMView ? : } -
- -
+
+
+ +
+ {!isDMView && ( + + )} +
); diff --git a/src/view/layout/sidebar/components/team/TeamMember.tsx b/src/view/layout/sidebar/components/team/TeamMember.tsx new file mode 100644 index 0000000..b2b6d91 --- /dev/null +++ b/src/view/layout/sidebar/components/team/TeamMember.tsx @@ -0,0 +1,39 @@ +import { MemberInfo } from '@service/feature/member/types/memberAPI'; + +const TeamMember = ({ + user, + isActive = true, + isMe = false, +}: { + user: MemberInfo; + isActive?: boolean; + isMe?: boolean; +}) => { + console.log('user 출력: ', user); + return ( +
+
+
+ {user.name} +
+
+
+
+

+ {user.name} +

+
+
+ ); +}; +export default TeamMember; diff --git a/src/view/layout/sidebar/team/TeamMemberSidebar.tsx b/src/view/layout/sidebar/team/TeamMemberSidebar.tsx new file mode 100644 index 0000000..f78a7ae --- /dev/null +++ b/src/view/layout/sidebar/team/TeamMemberSidebar.tsx @@ -0,0 +1,60 @@ +import { useParams } from 'react-router-dom'; +import { useTeamDetailQuery } from '@service/feature/team/hook/query/useTeamServiceQuery.ts'; +import SkeletonTeamSidebar from '../components/skeletons/SkeletonTeamSidebar.tsx'; +import TeamMember from '../components/team/TeamMember.tsx'; +import { TeamMembers } from '@service/feature/team/types/team.ts'; +import SkeletonDMList from '../components/skeletons/SkeletonDMList.tsx'; + +const TeamMemberSidebar = () => { + const { serverId } = useParams<{ + serverId: string; + channelId: string; + }>(); + + const { data, isLoading, error } = useTeamDetailQuery(serverId); + + if (isLoading) return ; + if (error) return
에러
; + + console.log('팀 유저 리스트: ', data); + const offlineUsers = data?.teamMembers.filter( + (user: { memberInfo: { state: string } }) => + user.memberInfo.state === 'OFFLINE', + ); + const onlineUsers = data?.teamMembers.filter( + (user: { memberInfo: { state: string } }) => + user.memberInfo.state === 'ONLINE', + ); + + return ( +
+ {onlineUsers.length > 0 && ( +
+

+ 온라인 - {onlineUsers.length} +

+ {onlineUsers.map((user: TeamMembers) => ( + + ))} +
+ )} + {offlineUsers.length > 0 && ( +
+

+ 오프라인 - {offlineUsers.length} +

+ {offlineUsers.map((user: TeamMembers) => ( + + ))} +
+ )} +
+ ); +}; + +export default TeamMemberSidebar;