import { putGroupChangeOwner } from '@/web/support/user/team/group/api'; import { Box, Flex, HStack, Input, ModalBody, ModalFooter, Button, useDisclosure, Checkbox } from '@chakra-ui/react'; import { TeamMemberItemType } from '@fastgpt/global/support/user/team/type'; import Avatar from '@fastgpt/web/components/common/Avatar'; import MyModal from '@fastgpt/web/components/common/MyModal'; import { useRequest2 } from '@fastgpt/web/hooks/useRequest'; import { useTranslation } from 'next-i18next'; import React, { useEffect, useState } from 'react'; import { TeamContext } from '../context'; import { useContextSelector } from 'use-context-selector'; import { MemberGroupListItemType } from '@fastgpt/global/support/permission/memberGroup/type'; import { GetSearchUserGroupOrg } from '@/web/support/user/api'; import { Omit } from '@fastgpt/web/components/common/DndDrag'; import { getTeamMembers } from '@/web/support/user/team/api'; import { PaginationResponse } from '@fastgpt/web/common/fetch/type'; import { useScrollPagination } from '@fastgpt/web/hooks/useScrollPagination'; import _ from 'lodash'; export function ChangeOwnerModal({ group, onSuccess, onClose }: { group: MemberGroupListItemType; onSuccess: () => void; onClose: () => void; }) { const { t } = useTranslation(); const [searchKey, setSearchKey] = React.useState(''); const { data: members = [], ScrollData: MemberScrollData, refreshList } = useScrollPagination>>( getTeamMembers, { pageSize: 20, params: { searchKey }, refreshDeps: [searchKey], debounceWait: 200, throttleWait: 500 } ); const { isOpen: isOpenMemberListMenu, onClose: onCloseMemberListMenu, onOpen: onOpenMemberListMenu } = useDisclosure(); const [selectedMember, setSelectedMember] = useState | null>(null); const [keepAdmin, setKeepAdmin] = useState(true); const { runAsync: onTransfer, loading } = useRequest2( (tmbId: string) => putGroupChangeOwner(group._id, tmbId), { onSuccess: () => Promise.all([onClose(), onSuccess()]), successToast: t('common:permission.change_owner_success'), errorToast: t('common:permission.change_owner_failed') } ); const onConfirm = async () => { if (!selectedMember) { return; } await onTransfer(selectedMember.tmbId); }; return ( {group?.name} {t('common:permission.change_owner_to')} {selectedMember && ( )} { setSearchKey(e.target.value); setSelectedMember(null); }} onFocus={() => { onOpenMemberListMenu(); setSelectedMember(null); }} {...(selectedMember && { pl: '10' })} /> {isOpenMemberListMenu && members.length > 0 && ( {members.map((item) => ( { setSearchKey(item.memberName); setSelectedMember(item); onCloseMemberListMenu(); }} > {item.memberName} ))} )} { setKeepAdmin(e.target.checked); }} > {t('account_team:retain_admin_permissions')} ); } export default ChangeOwnerModal;