mirror of
https://github.com/muerwre/vault-frontend.git
synced 2025-04-25 12:56:41 +07:00
moved messages to separate reducer
This commit is contained in:
parent
bc09810802
commit
737a4396de
14 changed files with 212 additions and 153 deletions
|
@ -2,57 +2,62 @@ import React, { FC, useCallback, useEffect, useState } from 'react';
|
|||
import { connect } from 'react-redux';
|
||||
import { selectAuthProfile, selectAuthUser } from '~/redux/auth/selectors';
|
||||
import styles from './styles.scss';
|
||||
import * as AUTH_ACTIONS from '~/redux/auth/actions';
|
||||
import * as AUTH_ACTIONS from '~/redux/messages/actions';
|
||||
import { Message } from '~/components/profile/Message';
|
||||
import { Group } from '~/components/containers/Group';
|
||||
import pick from 'ramda/es/pick';
|
||||
import { NodeNoComments } from '~/components/node/NodeNoComments';
|
||||
import { selectMessages } from '~/redux/messages/selectors';
|
||||
|
||||
const mapStateToProps = state => ({
|
||||
profile: selectAuthProfile(state),
|
||||
messages: selectMessages(state),
|
||||
user: pick(['id'], selectAuthUser(state)),
|
||||
});
|
||||
|
||||
const mapDispatchToProps = {
|
||||
authGetMessages: AUTH_ACTIONS.authGetMessages,
|
||||
authDeleteMessage: AUTH_ACTIONS.authDeleteMessage,
|
||||
messagesGetMessages: AUTH_ACTIONS.messagesGetMessages,
|
||||
messagesDeleteMessage: AUTH_ACTIONS.messagesDeleteMessage,
|
||||
};
|
||||
|
||||
type IProps = ReturnType<typeof mapStateToProps> & typeof mapDispatchToProps & {};
|
||||
|
||||
const ProfileMessagesUnconnected: FC<IProps> = ({
|
||||
profile,
|
||||
messages,
|
||||
user: { id },
|
||||
authGetMessages,
|
||||
authDeleteMessage,
|
||||
messagesGetMessages,
|
||||
messagesDeleteMessage,
|
||||
}) => {
|
||||
const [editingMessageId, setEditingMessageId] = useState(0);
|
||||
|
||||
const onEditMessage = useCallback((id: number) => setEditingMessageId(id), [setEditingMessageId]);
|
||||
const onCancelEdit = useCallback(() => setEditingMessageId(0), [setEditingMessageId]);
|
||||
const onDeleteMessage = useCallback((id: number) => authDeleteMessage(id), [authDeleteMessage]);
|
||||
const onDeleteMessage = useCallback((id: number) => messagesDeleteMessage(id), [
|
||||
messagesDeleteMessage,
|
||||
]);
|
||||
|
||||
useEffect(() => {
|
||||
if (profile.is_loading || !profile.user || !profile.user.username) return;
|
||||
|
||||
authGetMessages(profile.user.username);
|
||||
messagesGetMessages(profile.user.username);
|
||||
}, [profile.user]);
|
||||
|
||||
useEffect(() => {
|
||||
if (profile.is_loading || !profile.user || !profile.user.username || profile.messages_error)
|
||||
if (profile.is_loading || !profile.user || !profile.user.username || messages.messages_error)
|
||||
return;
|
||||
|
||||
const timer = setTimeout(() => authGetMessages(profile.user.username), 20000);
|
||||
const timer = setTimeout(() => messagesGetMessages(profile.user.username), 20000);
|
||||
|
||||
return () => clearTimeout(timer);
|
||||
}, [profile.user, profile.messages]);
|
||||
}, [profile.user, messages.messages]);
|
||||
|
||||
if (!profile.messages.length || profile.is_loading)
|
||||
return <NodeNoComments is_loading={profile.is_loading_messages || profile.is_loading} />;
|
||||
if (!messages.messages.length || profile.is_loading)
|
||||
return <NodeNoComments is_loading={messages.is_loading_messages || profile.is_loading} />;
|
||||
|
||||
return (
|
||||
<Group className={styles.messages}>
|
||||
{profile.messages
|
||||
{messages.messages
|
||||
.filter(message => !!message.text)
|
||||
.map((
|
||||
message // TODO: show files / memo
|
||||
|
@ -68,7 +73,7 @@ const ProfileMessagesUnconnected: FC<IProps> = ({
|
|||
/>
|
||||
))}
|
||||
|
||||
{!profile.is_loading_messages && profile.messages.length > 0 && (
|
||||
{!messages.is_loading_messages && messages.messages.length > 0 && (
|
||||
<div className={styles.placeholder}>Когда-нибудь здесь будут еще сообщения</div>
|
||||
)}
|
||||
</Group>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue