1
0
Fork 0
mirror of https://github.com/muerwre/vault-frontend.git synced 2025-04-24 20:36:40 +07:00
vault-frontend/src/containers/node/NodeBottomBlock/index.tsx
2023-10-30 15:22:01 +06:00

92 lines
3.1 KiB
TypeScript

import { FC } from 'react';
import { Filler } from '~/components/containers/Filler';
import { Group } from '~/components/containers/Group';
import { Padder } from '~/components/containers/Padder';
import { Sticky } from '~/components/containers/Sticky';
import { NodeAuthorBlock } from '~/components/node/NodeAuthorBlock';
import { NodeDeletedBadge } from '~/components/node/NodeDeletedBadge';
import { NodeNoComments } from '~/components/node/NodeNoComments';
import { NodeRelatedBlock } from '~/components/node/NodeRelatedBlock';
import { NodeTagsBlock } from '~/components/node/NodeTagsBlock';
import { NodeBacklinks } from '~/containers/node/NodeBacklinks';
import { NodeCommentFormSSR } from '~/containers/node/NodeCommentForm/ssr';
import { NodeComments } from '~/containers/node/NodeComments';
import { useNodeBlocks } from '~/hooks/node/useNodeBlocks';
import { useCommentContext } from '~/utils/context/CommentContextProvider';
import { useNodeContext } from '~/utils/context/NodeContextProvider';
import { useNodeRelatedContext } from '~/utils/context/NodeRelatedContextProvider';
import styles from './styles.module.scss';
interface IProps {
commentsOrder: 'ASC' | 'DESC';
}
const NodeBottomBlock: FC<IProps> = ({ commentsOrder }) => {
const { node, isLoading, backlinks } = useNodeContext();
const {
comments,
isLoading: isLoadingComments,
onSaveComment,
} = useCommentContext();
const { related, isLoading: isLoadingRelated } = useNodeRelatedContext();
const { inline } = useNodeBlocks(node, isLoading);
if (node.deleted_at) {
return <NodeDeletedBadge />;
}
return (
<Group>
<Padder>
<Group horizontal className={styles.content}>
<Group className={styles.comments}>
{inline && <div className={styles.inline}>{inline}</div>}
<article>
{isLoading ||
isLoadingComments ||
(!comments.length && !inline) ? (
<NodeNoComments loading={isLoadingComments || isLoading} />
) : (
<NodeComments order={commentsOrder} />
)}
</article>
<NodeCommentFormSSR saveComment={onSaveComment} />
<div className={styles.subheader}>
<Filler className={styles.backlinks}>
<NodeBacklinks list={backlinks} />
</Filler>
</div>
</Group>
<aside className={styles.panel}>
<div className={styles.left}>
<Sticky>
<div className={styles.left_item}>
<NodeAuthorBlock user={node?.user} />
</div>
<div className={styles.left_item}>
<NodeTagsBlock />
</div>
<div className={styles.left_item}>
<NodeRelatedBlock
isLoading={isLoadingRelated}
node={node}
related={related}
/>
</div>
</Sticky>
</div>
</aside>
</Group>
</Padder>
</Group>
);
};
export { NodeBottomBlock };