diff --git a/web/src/components/Panel/common/Header.tsx b/web/src/components/Panel/common/Header.tsx new file mode 100644 index 00000000..533091dc --- /dev/null +++ b/web/src/components/Panel/common/Header.tsx @@ -0,0 +1,31 @@ +import { SectionHeader } from '@/components/SectionHeader'; +import { Space } from 'antd'; +import React from 'react'; + +interface PanelCommonHeaderProps { + prefix?: React.ReactNode; + suffix?: React.ReactNode; + actions?: React.ReactNode[]; +} + +/** + * 右侧面板的头部 + */ +export const PanelCommonHeader: React.FC = React.memo( + (props) => { + return ( + +
+
+
{props.prefix}
+
{props.children}
+
{props.suffix}
+
+ + {props.actions} +
+
+ ); + } +); +PanelCommonHeader.displayName = 'PanelCommonHeader'; diff --git a/web/src/components/Panel/group/TextPanel.tsx b/web/src/components/Panel/group/TextPanel.tsx index d97c216c..5509dbd3 100644 --- a/web/src/components/Panel/group/TextPanel.tsx +++ b/web/src/components/Panel/group/TextPanel.tsx @@ -1,5 +1,7 @@ import { ChatBox } from '@/components/ChatBox'; import React from 'react'; +import { useGroupPanel } from 'tailchat-shared'; +import { GroupPanelWrapper } from './Wrapper'; interface TextPanelProps { groupId: string; @@ -7,7 +9,16 @@ interface TextPanelProps { } export const TextPanel: React.FC = React.memo( ({ groupId, panelId }) => { - return ; + const panelInfo = useGroupPanel(groupId, panelId); + if (panelInfo === undefined) { + return null; + } + + return ( + + + + ); } ); TextPanel.displayName = 'TextPanel'; diff --git a/web/src/components/Panel/group/Wrapper.tsx b/web/src/components/Panel/group/Wrapper.tsx new file mode 100644 index 00000000..718b0b4c --- /dev/null +++ b/web/src/components/Panel/group/Wrapper.tsx @@ -0,0 +1,27 @@ +import React from 'react'; +import { useGroupPanel } from 'tailchat-shared'; +import { PanelCommonHeader } from '../common/Header'; + +/** + * 群组面板通用包装器 + */ +interface GroupPanelWrapperProps { + groupId: string; + panelId: string; +} +export const GroupPanelWrapper: React.FC = React.memo( + (props) => { + const panelInfo = useGroupPanel(props.groupId, props.panelId); + if (panelInfo === undefined) { + return null; + } + + return ( +
+ {panelInfo.name} +
{props.children}
+
+ ); + } +); +GroupPanelWrapper.displayName = 'GroupPanelWrapper';