mirror of https://github.com/msgbyte/tailchat
feat: 增加GroupPanelSelector
parent
be6983b591
commit
487c8cd93a
@ -1,3 +1,3 @@
|
|||||||
Tailchat 的前端组件
|
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