mirror of
https://github.com/muerwre/vault-frontend.git
synced 2025-04-25 12:56:41 +07:00
removed node reducer
This commit is contained in:
parent
168ba8cc04
commit
8d2b56cafc
14 changed files with 62 additions and 208 deletions
|
@ -1,27 +0,0 @@
|
|||
import React, { FC, memo } from 'react';
|
||||
import styles from './styles.module.scss';
|
||||
import { createPortal } from 'react-dom';
|
||||
import { selectNode } from '~/redux/node/selectors';
|
||||
import { connect } from 'react-redux';
|
||||
import { pick } from 'ramda';
|
||||
import { getURL } from '~/utils/dom';
|
||||
import { PRESETS } from '~/constants/urls';
|
||||
|
||||
const mapStateToProps = state => pick(['current_cover_image'], selectNode(state));
|
||||
|
||||
type IProps = ReturnType<typeof mapStateToProps> & {};
|
||||
|
||||
const PageCoverUnconnected: FC<IProps> = memo(({ current_cover_image }) =>
|
||||
current_cover_image
|
||||
? createPortal(
|
||||
<div
|
||||
className={styles.wrap}
|
||||
style={{ backgroundImage: `url("${getURL(current_cover_image, PRESETS.cover)}")` }}
|
||||
/>,
|
||||
document.body
|
||||
)
|
||||
: null
|
||||
);
|
||||
|
||||
const PageCover = connect(mapStateToProps)(PageCoverUnconnected);
|
||||
export { PageCover };
|
39
src/components/containers/PageCoverProvider/index.tsx
Normal file
39
src/components/containers/PageCoverProvider/index.tsx
Normal file
|
@ -0,0 +1,39 @@
|
|||
import React, { createContext, FC, memo, useContext, useState } from 'react';
|
||||
import styles from './styles.module.scss';
|
||||
import { createPortal } from 'react-dom';
|
||||
import { getURL } from '~/utils/dom';
|
||||
import { PRESETS } from '~/constants/urls';
|
||||
import { IFile } from '~/redux/types';
|
||||
|
||||
interface CoverContextValue {
|
||||
cover: IFile | null;
|
||||
setCover: (cover: IFile | null) => void;
|
||||
}
|
||||
|
||||
const CoverContext = createContext<CoverContextValue>({
|
||||
cover: null,
|
||||
setCover: () => {},
|
||||
});
|
||||
|
||||
const PageCoverProvider: FC = ({ children }) => {
|
||||
const [cover, setCover] = useState<IFile | null>(null);
|
||||
|
||||
return (
|
||||
<CoverContext.Provider value={{ cover, setCover }}>
|
||||
{!!cover &&
|
||||
createPortal(
|
||||
<div
|
||||
className={styles.wrap}
|
||||
style={{ backgroundImage: `url("${getURL(cover, PRESETS.cover)}")` }}
|
||||
/>,
|
||||
document.body
|
||||
)}
|
||||
|
||||
{children}
|
||||
</CoverContext.Provider>
|
||||
);
|
||||
};
|
||||
|
||||
const usePageCoverContext = () => useContext(CoverContext);
|
||||
|
||||
export { PageCoverProvider, usePageCoverContext };
|
12
src/components/containers/PageCoverProvider/usePageCover.ts
Normal file
12
src/components/containers/PageCoverProvider/usePageCover.ts
Normal file
|
@ -0,0 +1,12 @@
|
|||
import { useEffect } from 'react';
|
||||
import { IFile } from '~/redux/types';
|
||||
import { usePageCoverContext } from '~/components/containers/PageCoverProvider/index';
|
||||
|
||||
export const usePageCover = (cover?: IFile) => {
|
||||
const { setCover } = usePageCoverContext();
|
||||
|
||||
useEffect(() => {
|
||||
setCover(cover || null);
|
||||
return () => setCover(null);
|
||||
}, [setCover, cover]);
|
||||
};
|
Loading…
Add table
Add a link
Reference in a new issue