1
0
Fork 0
mirror of https://github.com/muerwre/vault-frontend.git synced 2025-04-24 20:36:40 +07:00

added node related provider

This commit is contained in:
Fedor Katurov 2021-11-21 17:09:58 +07:00
parent 3090f3a306
commit d202a8cb18
6 changed files with 67 additions and 26 deletions

View file

@ -41,6 +41,7 @@
"redux-saga": "^1.1.1", "redux-saga": "^1.1.1",
"sticky-sidebar": "^3.3.1", "sticky-sidebar": "^3.3.1",
"swiper": "^6.8.4", "swiper": "^6.8.4",
"swr": "^1.0.1",
"throttle-debounce": "^2.1.0", "throttle-debounce": "^2.1.0",
"typescript": "^4.0.5", "typescript": "^4.0.5",
"typograf": "^6.11.3", "typograf": "^6.11.3",

View file

@ -10,12 +10,14 @@ import { MainRouter } from '~/containers/main/MainRouter';
import { DragDetectorProvider } from '~/utils/hooks/useDragDetector'; import { DragDetectorProvider } from '~/utils/hooks/useDragDetector';
import { useUser } from '~/utils/hooks/user/userUser'; import { useUser } from '~/utils/hooks/user/userUser';
import { UserContextProvider } from '~/utils/context/UserContextProvider'; import { UserContextProvider } from '~/utils/context/UserContextProvider';
import { SWRProvider } from '~/utils/providers/SWRProvider';
const App: VFC = () => { const App: VFC = () => {
const user = useUser(); const user = useUser();
return ( return (
<ConnectedRouter history={history}> <ConnectedRouter history={history}>
<SWRProvider>
<UserContextProvider user={user}> <UserContextProvider user={user}>
<DragDetectorProvider> <DragDetectorProvider>
<PageCover /> <PageCover />
@ -29,6 +31,7 @@ const App: VFC = () => {
<BottomContainer /> <BottomContainer />
</DragDetectorProvider> </DragDetectorProvider>
</UserContextProvider> </UserContextProvider>
</SWRProvider>
</ConnectedRouter> </ConnectedRouter>
); );
}; };

View file

@ -11,7 +11,7 @@ import { NodeContextProvider } from '~/utils/context/NodeContextProvider';
import { CommentContextProvider } from '~/utils/context/CommentContextProvider'; import { CommentContextProvider } from '~/utils/context/CommentContextProvider';
import { TagsContextProvider } from '~/utils/context/TagsContextProvider'; import { TagsContextProvider } from '~/utils/context/TagsContextProvider';
import { useNodePermissions } from '~/utils/hooks/node/useNodePermissions'; import { useNodePermissions } from '~/utils/hooks/node/useNodePermissions';
import { NodeRelatedContextProvider } from '~/utils/context/NodeRelatedContextProvider'; import { NodeRelatedProvider } from '~/utils/providers/NodeRelatedProvider';
type Props = RouteComponentProps<{ id: string }> & {}; type Props = RouteComponentProps<{ id: string }> & {};
@ -42,7 +42,7 @@ const NodePage: FC<Props> = ({
return ( return (
<NodeContextProvider node={node} isLoading={isLoading}> <NodeContextProvider node={node} isLoading={isLoading}>
<NodeRelatedContextProvider related={related} isLoading={isLoading}> <NodeRelatedProvider id={parseInt(id, 10)}>
<CommentContextProvider <CommentContextProvider
comments={comments} comments={comments}
count={commentsCount} count={commentsCount}
@ -64,7 +64,7 @@ const NodePage: FC<Props> = ({
<NodeLayout /> <NodeLayout />
</TagsContextProvider> </TagsContextProvider>
</CommentContextProvider> </CommentContextProvider>
</NodeRelatedContextProvider> </NodeRelatedProvider>
</NodeContextProvider> </NodeContextProvider>
); );
}; };

View file

@ -1,18 +1,35 @@
import { INodeRelated } from '~/redux/node/types'; import React, { FC } from 'react';
import React, { createContext, FC, useContext } from 'react'; import { INode } from '~/redux/types';
import { NodeRelatedContextProvider } from '~/utils/context/NodeRelatedContextProvider';
import { ApiGetNodeRelatedResult, INodeRelated } from '~/redux/node/types';
import useSWR from 'swr';
import { API } from '~/constants/api';
import { api } from '~/utils/api';
import { AxiosResponse } from 'axios';
interface NodeRelatedProviderProps { interface NodeRelatedProviderProps {
related: INodeRelated; id: INode['id'];
isLoading: boolean;
} }
const NodeRelatedContext = createContext<NodeRelatedProviderProps>({ const defaultValue: INodeRelated = {
related: { albums: {}, similar: [] }, albums: {},
isLoading: false, similar: [],
}); };
export const NodeRelatedProvider: FC<NodeRelatedProviderProps> = ({ children, ...rest }) => ( const NodeRelatedProvider: FC<NodeRelatedProviderProps> = ({ id, children }) => {
<NodeRelatedContext.Provider value={rest}>{children}</NodeRelatedContext.Provider> const { data, isValidating } = useSWR<AxiosResponse<ApiGetNodeRelatedResult>>(
API.NODE.RELATED(id),
api.get
); );
export const useNodeRelatedContext = () => useContext<NodeRelatedProviderProps>(NodeRelatedContext); return (
<NodeRelatedContextProvider
related={data?.data?.related || defaultValue}
isLoading={isValidating}
>
{children}
</NodeRelatedContextProvider>
);
};
export { NodeRelatedProvider };

View file

@ -0,0 +1,8 @@
import React, { FC } from 'react';
import { SWRConfig, SWRConfiguration } from 'swr';
const config: SWRConfiguration = {
revalidateOnFocus: false,
};
export const SWRProvider: FC = ({ children }) => <SWRConfig value={config}>{children}</SWRConfig>;

View file

@ -4016,6 +4016,11 @@ depd@~1.1.2:
resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9"
integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=
dequal@2.0.2:
version "2.0.2"
resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.2.tgz#85ca22025e3a87e65ef75a7a437b35284a7e319d"
integrity sha512-q9K8BlJVxK7hQYqa6XISGmBZbtQQWVXSrRrWreHC94rMt1QL/Impruc+7p2CYSYuVIUr+YCt6hjrs1kkdJRTug==
des.js@^1.0.0: des.js@^1.0.0:
version "1.0.1" version "1.0.1"
resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843"
@ -10917,6 +10922,13 @@ swiper@^6.8.4:
dom7 "^3.0.0" dom7 "^3.0.0"
ssr-window "^3.0.0" ssr-window "^3.0.0"
swr@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/swr/-/swr-1.0.1.tgz#15f62846b87ee000e52fa07812bb65eb62d79483"
integrity sha512-EPQAxSjoD4IaM49rpRHK0q+/NzcwoT8c0/Ylu/u3/6mFj/CWnQVjNJ0MV2Iuw/U+EJSd2TX5czdAwKPYZIG0YA==
dependencies:
dequal "2.0.2"
symbol-observable@^1.2.0: symbol-observable@^1.2.0:
version "1.2.0" version "1.2.0"
resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804"