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

@ -10,25 +10,28 @@ import { MainRouter } from '~/containers/main/MainRouter';
import { DragDetectorProvider } from '~/utils/hooks/useDragDetector';
import { useUser } from '~/utils/hooks/user/userUser';
import { UserContextProvider } from '~/utils/context/UserContextProvider';
import { SWRProvider } from '~/utils/providers/SWRProvider';
const App: VFC = () => {
const user = useUser();
return (
<ConnectedRouter history={history}>
<UserContextProvider user={user}>
<DragDetectorProvider>
<PageCover />
<SWRProvider>
<UserContextProvider user={user}>
<DragDetectorProvider>
<PageCover />
<MainLayout>
<Modal />
<Sprites />
<MainLayout>
<Modal />
<Sprites />
<MainRouter />
</MainLayout>
<BottomContainer />
</DragDetectorProvider>
</UserContextProvider>
<MainRouter />
</MainLayout>
<BottomContainer />
</DragDetectorProvider>
</UserContextProvider>
</SWRProvider>
</ConnectedRouter>
);
};

View file

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

View file

@ -1,18 +1,35 @@
import { INodeRelated } from '~/redux/node/types';
import React, { createContext, FC, useContext } from 'react';
import React, { FC } 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 {
related: INodeRelated;
isLoading: boolean;
id: INode['id'];
}
const NodeRelatedContext = createContext<NodeRelatedProviderProps>({
related: { albums: {}, similar: [] },
isLoading: false,
});
const defaultValue: INodeRelated = {
albums: {},
similar: [],
};
export const NodeRelatedProvider: FC<NodeRelatedProviderProps> = ({ children, ...rest }) => (
<NodeRelatedContext.Provider value={rest}>{children}</NodeRelatedContext.Provider>
);
const NodeRelatedProvider: FC<NodeRelatedProviderProps> = ({ id, children }) => {
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>;