import { Flex, Box, Grid, ModalBody, InputGroup, InputLeftElement, Input, Checkbox, ModalFooter, Button, useToast } from '@chakra-ui/react'; import MyModal from '@fastgpt/web/components/common/MyModal'; import MyIcon from '@fastgpt/web/components/common/Icon'; import { useContextSelector } from 'use-context-selector'; import MyAvatar from '@/components/Avatar'; import { useMemo, useState } from 'react'; import PermissionSelect from './PermissionSelect'; import PermissionTags from './PermissionTags'; import { CollaboratorContext } from './context'; import { useQuery } from '@tanstack/react-query'; import { useUserStore } from '@/web/support/user/useUserStore'; import { getTeamMembers } from '@/web/support/user/team/api'; import MyBox from '@fastgpt/web/components/common/MyBox'; import { Permission } from '@fastgpt/global/support/permission/controller'; import { ChevronDownIcon } from '@chakra-ui/icons'; import Avatar from '@/components/Avatar'; import { useRequest } from '@fastgpt/web/hooks/useRequest'; export type AddModalPropsType = { onClose: () => void; }; export function AddMemberModal({ onClose }: AddModalPropsType) { const toast = useToast(); const { userInfo } = useUserStore(); const { permissionList, collaboratorList, onUpdateCollaborators, getPreLabelList } = useContextSelector(CollaboratorContext, (v) => v); const [searchText, setSearchText] = useState(''); const { data: members = [], refetch: refetchMembers, isLoading: loadingMembers } = useQuery(['getMembers', userInfo?.team?.teamId], async () => { if (!userInfo?.team?.teamId) return []; const members = await getTeamMembers(); return members; }); const filterMembers = useMemo(() => { return members.filter((item) => { if (item.permission.isOwner) return false; if (item.tmbId === userInfo?.team?.tmbId) return false; if (!searchText) return true; return item.memberName.includes(searchText); }); }, [members, searchText, userInfo?.team?.tmbId]); const [selectedMemberIdList, setSelectedMembers] = useState([]); const [selectedPermission, setSelectedPermission] = useState(permissionList['read'].value); const perLabel = useMemo(() => { return getPreLabelList(selectedPermission).join('、'); }, [getPreLabelList, selectedPermission]); const { mutate: onConfirm, isLoading: isUpdating } = useRequest({ mutationFn: () => { return onUpdateCollaborators(selectedMemberIdList, selectedPermission); }, successToast: '添加成功', errorToast: 'Error', onSuccess() { onClose(); } }); return ( setSearchText(e.target.value)} /> {filterMembers.map((member) => { const onChange = () => { if (selectedMemberIdList.includes(member.tmbId)) { setSelectedMembers(selectedMemberIdList.filter((v) => v !== member.tmbId)); } else { setSelectedMembers([...selectedMemberIdList, member.tmbId]); } }; const collaborator = collaboratorList.find((v) => v.tmbId === member.tmbId); return ( {member.memberName} {!!collaborator && } ); })} 已选: {selectedMemberIdList.length} {selectedMemberIdList.map((tmbId) => { const member = filterMembers.find((v) => v.tmbId === tmbId); return member ? ( {member.memberName} setSelectedMembers(selectedMemberIdList.filter((v) => v !== tmbId)) } /> ) : null; })} {perLabel} } onChange={(v) => setSelectedPermission(v)} /> ); }