perf: 抽象群组输入框状态逻辑

pull/49/head
moonrailgun 3 years ago
parent 53ed4d4858
commit dfd3fe6857

@ -12,20 +12,14 @@ import {
} from 'tailchat-shared'; } from 'tailchat-shared';
import { GroupPanelWrapper } from './Wrapper'; import { GroupPanelWrapper } from './Wrapper';
interface TextPanelProps { /**
groupId: string; *
panelId: string; */
} function useChatInputInfo(groupId: string) {
export const TextPanel: React.FC<TextPanelProps> = React.memo(
({ groupId, panelId }) => {
const groupMembers = useGroupMemberInfos(groupId);
const panelInfo = useGroupPanelInfo(groupId, panelId);
const userId = useUserId(); const userId = useUserId();
const muteUntil = useGroupMemberMute(groupId, userId ?? ''); const muteUntil = useGroupMemberMute(groupId, userId ?? '');
const [placeholder, setPlaceholder] = useState<string | undefined>( const [placeholder, setPlaceholder] = useState<string | undefined>(undefined);
undefined
);
const updatePlaceholder = useCallback(() => { const updatePlaceholder = useCallback(() => {
if (muteUntil) { if (muteUntil) {
setPlaceholder( setPlaceholder(
@ -50,6 +44,22 @@ export const TextPanel: React.FC<TextPanelProps> = React.memo(
updatePlaceholder(); updatePlaceholder();
}, [muteUntil]); }, [muteUntil]);
return {
disabled: Boolean(muteUntil),
placeholder,
};
}
interface TextPanelProps {
groupId: string;
panelId: string;
}
export const TextPanel: React.FC<TextPanelProps> = React.memo(
({ groupId, panelId }) => {
const groupMembers = useGroupMemberInfos(groupId);
const panelInfo = useGroupPanelInfo(groupId, panelId);
const { disabled, placeholder } = useChatInputInfo(groupId);
if (panelInfo === undefined) { if (panelInfo === undefined) {
return null; return null;
} }
@ -61,7 +71,7 @@ export const TextPanel: React.FC<TextPanelProps> = React.memo(
id: m._id, id: m._id,
display: m.nickname, display: m.nickname,
}))} }))}
disabled={Boolean(muteUntil)} disabled={disabled}
placeholder={placeholder} placeholder={placeholder}
> >
<ChatBox converseId={panelId} isGroup={true} groupId={groupId} /> <ChatBox converseId={panelId} isGroup={true} groupId={groupId} />

Loading…
Cancel
Save