feat: topic更新时自动变更列表

pull/56/head
moonrailgun 3 years ago
parent fe249db5dd
commit c2ba44186f

@ -44,6 +44,7 @@ export {
} from '@/components/Modal'; } from '@/components/Modal';
export { Loadable } from '@/components/Loadable'; export { Loadable } from '@/components/Loadable';
export { Loading } from '@/components/Loading'; export { Loading } from '@/components/Loading';
export { LoadingOnFirst } from '@/components/LoadingOnFirst';
export { SidebarView } from '@/components/SidebarView'; export { SidebarView } from '@/components/SidebarView';
export { GroupPanelSelector } from '@/components/GroupPanelSelector'; export { GroupPanelSelector } from '@/components/GroupPanelSelector';
export { Emoji } from '@/components/Emoji'; export { Emoji } from '@/components/Emoji';

@ -332,7 +332,7 @@ declare module '@capital/component' {
export const PillTabPane: any; export const PillTabPane: any;
export const LoadingSpinner: any; export const LoadingSpinner: React.FC<{ tip?: string }>;
export const WebFastForm: any; export const WebFastForm: any;
@ -382,7 +382,19 @@ declare module '@capital/component' {
export const Loadable: any; export const Loadable: any;
export const Loading: any; export const Loading: React.FC<{
spinning: boolean;
className?: string;
style?: React.CSSProperties;
children?: React.ReactNode;
}>;
export const LoadingOnFirst: React.FC<{
spinning: boolean;
className?: string;
style?: React.CSSProperties;
children?: React.ReactNode;
}>;
export const SidebarView: any; export const SidebarView: any;

@ -72,6 +72,7 @@ export const TopicCard: React.FC<{
}); });
setComment(''); setComment('');
toggleShowReply();
showSuccessToasts(); showSuccessToasts();
}, [topic.groupId, topic.panelId, topic._id, comment]); }, [topic.groupId, topic.panelId, topic._id, comment]);

@ -1,20 +1,24 @@
import React, { useCallback, useEffect } from 'react'; import React, { useCallback, useEffect } from 'react';
import { TopicCard } from '../components/TopicCard'; import { TopicCard } from '../components/TopicCard';
import { useAsyncRequest, useGroupPanelContext } from '@capital/common'; import {
useAsyncRequest,
useGlobalSocketEvent,
useGroupPanelContext,
} from '@capital/common';
import { import {
Button, Button,
Empty, Empty,
IconBtn, IconBtn,
openModal, openModal,
closeModal, closeModal,
LoadingSpinner, LoadingOnFirst,
} from '@capital/component'; } from '@capital/component';
import { request } from '../request'; import { request } from '../request';
import { Translate } from '../translate'; import { Translate } from '../translate';
import { TopicCreate } from '../components/modals/TopicCreate'; import { TopicCreate } from '../components/modals/TopicCreate';
import styled from 'styled-components'; import styled from 'styled-components';
const Root = styled.div({ const Root = styled(LoadingOnFirst)({
display: 'flex', display: 'flex',
flexDirection: 'column', flexDirection: 'column',
width: '100%', width: '100%',
@ -53,6 +57,14 @@ const GroupTopicPanelRender: React.FC = React.memo(() => {
fetch(); fetch();
}, [fetch]); }, [fetch]);
useGlobalSocketEvent('plugin:com.msgbyte.topic.create', () => {
fetch();
});
useGlobalSocketEvent('plugin:com.msgbyte.topic.createComment', () => {
fetch();
});
const handleCreateTopic = useCallback(() => { const handleCreateTopic = useCallback(() => {
const key = openModal( const key = openModal(
<TopicCreate <TopicCreate
@ -71,12 +83,8 @@ const GroupTopicPanelRender: React.FC = React.memo(() => {
); );
}, [panelInfo, fetch]); }, [panelInfo, fetch]);
if (loading) {
return <LoadingSpinner />;
}
return ( return (
<Root> <Root spinning={loading}>
{Array.isArray(list) && list.length > 0 ? ( {Array.isArray(list) && list.length > 0 ? (
list.map((item, i) => <TopicCard key={i} topic={item} />) list.map((item, i) => <TopicCard key={i} topic={item} />)
) : ( ) : (

@ -72,6 +72,11 @@ declare module '@capital/common' {
export const getGlobalState: any; export const getGlobalState: any;
export const useGlobalSocketEvent: <T>(
eventName: string,
callback: (data: T) => void
) => void;
export const getJWTUserInfo: () => Promise<{ export const getJWTUserInfo: () => Promise<{
_id?: string; _id?: string;
nickname?: string; nickname?: string;

Loading…
Cancel
Save