1
0
Fork 0
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:
Fedor Katurov 2020-09-08 10:58:55 +07:00
parent bc09810802
commit 737a4396de
14 changed files with 212 additions and 153 deletions

View file

@ -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>