From 716e58bc15c8dd6a379ff6f7394aca7a47b406f9 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Fri, 19 Nov 2021 17:23:25 +0700 Subject: [PATCH] moved related out of node context --- src/components/boris/BorisComments/index.tsx | 2 +- src/pages/node/[id].tsx | 45 +++++++++++--------- src/utils/providers/CommentProvider.tsx | 4 +- src/utils/providers/NodeProvider.tsx | 32 -------------- src/utils/providers/NodeRelatedProvider.tsx | 18 ++++++++ src/views/node/NodeBottomBlock/index.tsx | 8 ++-- 6 files changed, 50 insertions(+), 59 deletions(-) create mode 100644 src/utils/providers/NodeRelatedProvider.tsx diff --git a/src/components/boris/BorisComments/index.tsx b/src/components/boris/BorisComments/index.tsx index b78bf835..7b5ebb8e 100644 --- a/src/components/boris/BorisComments/index.tsx +++ b/src/components/boris/BorisComments/index.tsx @@ -44,7 +44,7 @@ const BorisComments: FC = ({ onDeleteComment={onDeleteComment} onLoadMoreComments={onLoadMoreComments} onShowImageModal={onShowImageModal} - isLoadingComments={isLoadingComments} + isLoading={isLoadingComments} > diff --git a/src/pages/node/[id].tsx b/src/pages/node/[id].tsx index 4e14e92f..56b8fe40 100644 --- a/src/pages/node/[id].tsx +++ b/src/pages/node/[id].tsx @@ -11,6 +11,7 @@ import { NodeProvider } from '~/utils/providers/NodeProvider'; import { CommentProvider } from '~/utils/providers/CommentProvider'; import { TagProvider } from '~/utils/providers/TagProvider'; import { useNodePermissions } from '~/utils/hooks/node/useNodePermissions'; +import { NodeRelatedProvider } from '~/utils/providers/NodeRelatedProvider'; type Props = RouteComponentProps<{ id: string }> & {}; @@ -40,28 +41,30 @@ const NodePage: FC = ({ useScrollToTop([id, isLoadingComments]); return ( - - - + + - - - + + + + + ); }; diff --git a/src/utils/providers/CommentProvider.tsx b/src/utils/providers/CommentProvider.tsx index 8457f3fa..9badfe16 100644 --- a/src/utils/providers/CommentProvider.tsx +++ b/src/utils/providers/CommentProvider.tsx @@ -6,7 +6,7 @@ export interface CommentProviderProps { comments: IComment[]; count: number; lastSeenCurrent?: string; - isLoadingComments: boolean; + isLoading: boolean; onShowImageModal: (images: IFile[], index: number) => void; onLoadMoreComments: () => void; onDeleteComment: (id: IComment['id'], isLocked: boolean) => void; @@ -17,7 +17,7 @@ const CommentContext = createContext({ comments: [], count: 0, lastSeenCurrent: undefined, - isLoadingComments: false, + isLoading: false, onShowImageModal: () => {}, onLoadMoreComments: () => {}, onDeleteComment: () => {}, diff --git a/src/utils/providers/NodeProvider.tsx b/src/utils/providers/NodeProvider.tsx index f6646f6d..a044268c 100644 --- a/src/utils/providers/NodeProvider.tsx +++ b/src/utils/providers/NodeProvider.tsx @@ -1,47 +1,15 @@ import { INode } from '~/redux/types'; -import { INodeRelated } from '~/redux/node/types'; import { EMPTY_NODE } from '~/redux/node/constants'; import React, { createContext, FC, useContext } from 'react'; export interface NodeContextProps { node: INode; - related: INodeRelated; isLoading: boolean; - // isUser: boolean; - // user: IUser; - // isLoadingComments: boolean; - // lastSeenCurrent?: string; - // commentsCount: number; - // comments: IComment[]; - // onShowImageModal: (images: IFile[], index: number) => void; - // onLoadMoreComments: () => void; - // onDeleteComment: (id: IComment['id'], isLocked: boolean) => void; - // onTagsChange: (tags: string[]) => void; - // onTagClick: (tag: Partial) => void; - // onTagDelete: (id: ITag['ID']) => void; } export const NodeContext = createContext({ node: EMPTY_NODE, - related: { albums: {}, similar: [] }, isLoading: false, - - // UserContext - // isUser: false, - // CommentContext - // user: EMPTY_USER, - // lastSeenCurrent: undefined, - // comments: [], - // commentsCount: 0, - // onLoadMoreComments: () => {}, - // onShowImageModal: () => {}, - // onDeleteComment: () => {}, - // isLoadingComments: false, - - // TagContext - // onTagsChange: () => {}, - // onTagClick: () => {}, - // onTagDelete: () => {}, }); export const NodeProvider: FC = ({ children, ...contextValue }) => { diff --git a/src/utils/providers/NodeRelatedProvider.tsx b/src/utils/providers/NodeRelatedProvider.tsx new file mode 100644 index 00000000..26576c3d --- /dev/null +++ b/src/utils/providers/NodeRelatedProvider.tsx @@ -0,0 +1,18 @@ +import { INodeRelated } from '~/redux/node/types'; +import React, { createContext, FC, useContext } from 'react'; + +interface NodeRelatedProviderProps { + related: INodeRelated; + isLoading: boolean; +} + +const NodeRelatedContext = createContext({ + related: { albums: {}, similar: [] }, + isLoading: false, +}); + +export const NodeRelatedProvider: FC = ({ children, ...rest }) => ( + {children} +); + +export const useNodeRelatedContext = () => useContext(NodeRelatedContext); diff --git a/src/views/node/NodeBottomBlock/index.tsx b/src/views/node/NodeBottomBlock/index.tsx index 75904e3f..aa95a2c9 100644 --- a/src/views/node/NodeBottomBlock/index.tsx +++ b/src/views/node/NodeBottomBlock/index.tsx @@ -14,6 +14,7 @@ import { useCommentContext } from '~/utils/providers/CommentProvider'; import { NodeNoComments } from '~/components/node/NodeNoComments'; import { NodeComments } from '~/views/node/NodeComments'; import { useUserContext } from '~/utils/providers/UserProvider'; +import { useNodeRelatedContext } from '~/utils/providers/NodeRelatedProvider'; interface IProps { commentsOrder: 'ASC' | 'DESC'; @@ -21,8 +22,9 @@ interface IProps { const NodeBottomBlock: FC = ({ commentsOrder }) => { const { is_user: isUser } = useUserContext(); - const { node, related, isLoading } = useNodeContext(); - const { comments, isLoadingComments } = useCommentContext(); + const { node, isLoading } = useNodeContext(); + const { comments, isLoading: isLoadingComments } = useCommentContext(); + const { related, isLoading: isLoadingRelated } = useNodeRelatedContext(); const { inline } = useNodeBlocks(node, isLoading); if (node.deleted_at) { @@ -56,7 +58,7 @@ const NodeBottomBlock: FC = ({ commentsOrder }) => {
- +