import { serviceSideProps } from '@/web/common/utils/i18n'; import AccountContainer from '../components/AccountContainer'; import { Box, Button, Flex, useDisclosure } from '@chakra-ui/react'; import Icon from '@fastgpt/web/components/common/Icon'; import { useTranslation } from 'next-i18next'; import TeamSelector from '../components/TeamSelector'; import { useUserStore } from '@/web/support/user/useUserStore'; import React, { useState } from 'react'; import { useContextSelector } from 'use-context-selector'; import { useRouter } from 'next/router'; import FillRowTabs from '@fastgpt/web/components/common/Tabs/FillRowTabs'; import SearchInput from '@fastgpt/web/components/common/Input/SearchInput'; import MyIcon from '@fastgpt/web/components/common/Icon'; import { useToast } from '@fastgpt/web/hooks/useToast'; import { delLeaveTeam } from '@/web/support/user/team/api'; import { useRequest2 } from '@fastgpt/web/hooks/useRequest'; import { useConfirm } from '@fastgpt/web/hooks/useConfirm'; import { useSystemStore } from '@/web/common/system/useSystemStore'; import { TeamMemberRoleEnum } from '@fastgpt/global/support/user/team/constant'; import { TeamContext, TeamModalContextProvider } from './components/context'; import dynamic from 'next/dynamic'; import TeamTagModal from '@/components/support/user/team/TeamTagModal'; import MemberTable from './components/MemberTable'; const InviteModal = dynamic(() => import('./components/InviteModal')); const PermissionManage = dynamic(() => import('./components/PermissionManage/index')); const GroupManage = dynamic(() => import('./components/GroupManage/index')); const GroupInfoModal = dynamic(() => import('./components/GroupManage/GroupInfoModal')); const ManageGroupMemberModal = dynamic(() => import('./components/GroupManage/GroupManageMember')); export enum TeamTabEnum { member = 'member', group = 'group', permission = 'permission' } const Team = () => { const router = useRouter(); const { toast } = useToast(); const { t } = useTranslation(); const { userInfo, teamPlanStatus } = useUserStore(); const { feConfigs } = useSystemStore(); const { myTeams, refetchTeams, members, refetchMembers, setEditTeamData, onSwitchTeam, searchKey, setSearchKey, teamSize, isLoading } = useContextSelector(TeamContext, (v) => v); const { teamTab = TeamTabEnum.member } = router.query as { teamTab: `${TeamTabEnum}` }; const { isOpen: isOpenTeamTagsAsync, onOpen: onOpenTeamTagsAsync, onClose: onCloseTeamTagsAsync } = useDisclosure(); const { isOpen: isOpenInvite, onOpen: onOpenInvite, onClose: onCloseInvite } = useDisclosure(); const { isOpen: isOpenGroupInfo, onOpen: onOpenGroupInfo, onClose: onCloseGroupInfo } = useDisclosure(); const { isOpen: isOpenManageGroupMember, onOpen: onOpenManageGroupMember, onClose: onCloseManageGroupMember } = useDisclosure(); const { runAsync: onLeaveTeam, loading: isLoadingLeaveTeam } = useRequest2( async (teamId?: string) => { if (!teamId) return; const defaultTeam = myTeams.find((item) => item.defaultTeam) || myTeams[0]; // change to personal team // get members onSwitchTeam(defaultTeam.teamId); return delLeaveTeam(teamId); }, { onSuccess() { refetchTeams(); }, errorToast: t('account_team:user_team_leave_team_failed') } ); const { ConfirmModal: ConfirmLeaveTeamModal, openConfirm: openLeaveConfirm } = useConfirm({ content: t('account_team:confirm_leave_team') }); const [editGroupId, setEditGroupId] = useState(); const onEditGroup = (groupId: string) => { setEditGroupId(groupId); onOpenGroupInfo(); }; const onManageMember = (groupId: string) => { setEditGroupId(groupId); onOpenManageGroupMember(); }; return ( {/* header */} {t('account:team')} {userInfo?.team.role === TeamMemberRoleEnum.owner && ( { if (!userInfo?.team) return; setEditTeamData({ id: userInfo.team.teamId, name: userInfo.team.teamName, avatar: userInfo.team.avatar }); }} /> )} {t('account_team:total_team_members', { amount: teamSize })} {/* table */} { router.replace({ query: { ...router.query, teamTab: e } }); }} /> {teamTab === TeamTabEnum.member && userInfo?.team.permission.hasManagePer && feConfigs?.show_team_chat && ( )} {teamTab === TeamTabEnum.member && userInfo?.team.permission.hasManagePer && ( )} {teamTab === TeamTabEnum.member && !userInfo?.team.permission.isOwner && ( )} {teamTab === TeamTabEnum.group && userInfo?.team.permission.hasManagePer && ( )} {teamTab === TeamTabEnum.permission && ( setSearchKey(e.target.value)} /> )} {teamTab === TeamTabEnum.member && } {teamTab === TeamTabEnum.group && ( )} {teamTab === TeamTabEnum.permission && } {isOpenInvite && userInfo?.team?.teamId && ( )} {isOpenTeamTagsAsync && } {isOpenGroupInfo && ( { onCloseGroupInfo(); setEditGroupId(undefined); }} editGroupId={editGroupId} /> )} {isOpenManageGroupMember && ( { onCloseManageGroupMember(); setEditGroupId(undefined); }} editGroupId={editGroupId} /> )} ); }; export async function getServerSideProps(content: any) { return { props: { ...(await serviceSideProps(content, ['account', 'account_team', 'user'])) } }; } const Render = () => { const { userInfo } = useUserStore(); return !!userInfo?.team ? ( ) : null; }; export default React.memo(Render);