import React, { useCallback, useEffect, useRef, useState } from 'react'; import { useGroupInfo, GroupPanel as GroupPanelInfo, t, modifyGroupField, useAsyncRequest, showToasts, } from 'tailchat-shared'; import { Button } from 'antd'; import _isEqual from 'lodash/isEqual'; import { GroupPanelTree } from './GroupPanelTree'; import { FullModalCommonTitle } from '@/components/FullModal/CommonTitle'; import { closeModal, openModal } from '@/components/Modal'; import { ModalCreateGroupPanel } from '../../CreateGroupPanel'; export const GroupPanel: React.FC<{ groupId: string; }> = React.memo((props) => { const groupId = props.groupId; const groupInfo = useGroupInfo(groupId); const groupPanels = groupInfo?.panels ?? []; const [editingGroupPanels, setEditingGroupPanels] = useState(groupPanels); const isEditingRef = useRef(false); useEffect(() => { // 如果不处于编辑状态, 则一直更新最新的面板 if (isEditingRef.current === true) { return; } setEditingGroupPanels(groupPanels); }, [groupPanels]); const handleChange = useCallback((newGroupPanels: GroupPanelInfo[]) => { isEditingRef.current = true; setEditingGroupPanels(newGroupPanels); }, []); const [{ loading }, handleSave] = useAsyncRequest(async () => { await modifyGroupField(groupId, 'panels', editingGroupPanels); isEditingRef.current = false; showToasts(t('保存成功'), 'success'); }, [editingGroupPanels]); const handleReset = useCallback(() => { setEditingGroupPanels(groupPanels); isEditingRef.current = false; }, [groupPanels]); const handleOpenCreatePanelModal = useCallback(() => { const key = openModal( { closeModal(key); isEditingRef.current = false; }} /> ); }, []); return (
{t('创建面板')} } > {t('面板管理')} {!_isEqual(groupPanels, editingGroupPanels) && (
)}
); }); GroupPanel.displayName = 'GroupPanel';