perf: member group (#4324)

* sync collection

* remove lock

* perf: member group
This commit is contained in:
Archer
2025-03-26 00:02:14 +08:00
committed by archer
parent 64fb09146f
commit 4871a6980f
14 changed files with 213 additions and 255 deletions

View File

@@ -1,4 +1,4 @@
import { putGroupChangeOwner, putUpdateGroup } from '@/web/support/user/team/group/api';
import { putGroupChangeOwner } from '@/web/support/user/team/group/api';
import {
Box,
Flex,
@@ -15,26 +15,24 @@ 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, { useMemo, useState } from 'react';
import React, { useState } from 'react';
import { TeamContext } from '../context';
import { useContextSelector } from 'use-context-selector';
import { MemberGroupListType } from '@fastgpt/global/support/permission/memberGroup/type';
import { MemberGroupListItemType } from '@fastgpt/global/support/permission/memberGroup/type';
import { GetSearchUserGroupOrg } from '@/web/support/user/api';
import { Omit } from '@fastgpt/web/components/common/DndDrag';
export type ChangeOwnerModalProps = {
groupId: string;
groups: MemberGroupListType;
refetchGroups: () => void;
};
export function ChangeOwnerModal({
onClose,
groupId,
groups,
refetchGroups
}: ChangeOwnerModalProps & { onClose: () => void }) {
group,
onSuccess,
onClose
}: {
group: MemberGroupListItemType<true>;
onSuccess: () => void;
onClose: () => void;
}) {
const { t } = useTranslation();
const [inputValue, setInputValue] = React.useState('');
const { data: searchedData } = useRequest2(
async () => {
@@ -50,14 +48,8 @@ export function ChangeOwnerModal({
);
const { members: allMembers } = useContextSelector(TeamContext, (v) => v);
const group = useMemo(() => {
return groups.find((item) => item._id === groupId);
}, [groupId, groups]);
const memberList = searchedData ? searchedData.members : allMembers;
const [keepAdmin, setKeepAdmin] = useState(true);
const {
isOpen: isOpenMemberListMenu,
onClose: onCloseMemberListMenu,
@@ -69,10 +61,12 @@ export function ChangeOwnerModal({
'permission' | 'teamId'
> | null>(null);
const { runAsync, loading } = useRequest2(
(tmbId: string) => putGroupChangeOwner(groupId, tmbId),
const [keepAdmin, setKeepAdmin] = useState(true);
const { runAsync: onTransfer, loading } = useRequest2(
(tmbId: string) => putGroupChangeOwner(group._id, tmbId),
{
onSuccess: () => Promise.all([onClose(), refetchGroups()]),
onSuccess: () => Promise.all([onClose(), onSuccess()]),
successToast: t('common:permission.change_owner_success'),
errorToast: t('common:permission.change_owner_failed')
}
@@ -82,7 +76,7 @@ export function ChangeOwnerModal({
if (!selectedMember) {
return;
}
await runAsync(selectedMember.tmbId);
await onTransfer(selectedMember.tmbId);
};
return (
@@ -92,7 +86,6 @@ export function ChangeOwnerModal({
iconColor="primary.600"
onClose={onClose}
title={t('common:permission.change_owner')}
isLoading={loading}
>
<ModalBody>
<HStack>
@@ -181,7 +174,9 @@ export function ChangeOwnerModal({
<Button onClick={onClose} variant={'whiteBase'}>
{t('common:common.Cancel')}
</Button>
<Button onClick={onConfirm}>{t('common:common.Confirm')}</Button>
<Button isLoading={loading} isDisabled={!selectedMember} onClick={onConfirm}>
{t('common:common.Confirm')}
</Button>
</HStack>
</ModalFooter>
</MyModal>