mirror of https://github.com/msgbyte/tailchat
feat: 增加GroupPanelSelector
parent
be6983b591
commit
487c8cd93a
@ -1,3 +1,3 @@
|
||||
Tailchat 的前端组件
|
||||
|
||||
能进这个包的原则是该组件是一个业务无关的组件
|
||||
能进这个包的原则是该组件是一个业务无关的组件(无环境依赖)
|
||||
|
@ -0,0 +1,41 @@
|
||||
import React, { useMemo } from 'react';
|
||||
import { Select } from 'antd';
|
||||
import { GroupPanelType, useGroupPanels } from 'tailchat-shared';
|
||||
import { useGroupIdContext } from '@/context/GroupIdContext';
|
||||
|
||||
const { Option } = Select;
|
||||
|
||||
interface GroupPanelSelectorProps {
|
||||
value: string;
|
||||
onChange: (value: string) => void;
|
||||
groupId?: string;
|
||||
panelType?: GroupPanelType;
|
||||
}
|
||||
|
||||
/**
|
||||
* 群组面板选择器
|
||||
*/
|
||||
export const GroupPanelSelector: React.FC<GroupPanelSelectorProps> = React.memo(
|
||||
(props) => {
|
||||
const contextGroupId = useGroupIdContext();
|
||||
const groupId = props.groupId ?? contextGroupId;
|
||||
const panelType = props.panelType ?? GroupPanelType.TEXT;
|
||||
const panels = useGroupPanels(groupId);
|
||||
|
||||
const filteredPanels = useMemo(
|
||||
() => panels.filter((panel) => panel.type === panelType),
|
||||
[panels, panelType]
|
||||
);
|
||||
|
||||
return (
|
||||
<Select value={props.value} onChange={props.onChange}>
|
||||
{filteredPanels.map((p) => (
|
||||
<Option key={p.id} value={p.id}>
|
||||
{p.name}
|
||||
</Option>
|
||||
))}
|
||||
</Select>
|
||||
);
|
||||
}
|
||||
);
|
||||
GroupPanelSelector.displayName = 'GroupPanelSelector';
|
Loading…
Reference in New Issue