import { FC, useEffect, useId, useMemo, useRef, useState } from 'react'; import JSXStyle from 'styled-jsx/style'; import { Article as TArticle } from '@cntrl-site/sdk'; import { Section } from './Section/Section'; import { Item } from './items/Item'; import { useArticleRectObserver } from '../utils/ArticleRectManager/useArticleRectObserver'; import { ArticleRectContext } from '../provider/ArticleRectContext'; import { ArticleWrapper } from './ArticleWrapper'; import { InteractionsProvider } from '../provider/InteractionsContext'; import { WebglContextManagerContext } from '../provider/WebGLContextManagerContext'; import { WebGLContextManager } from '@cntrl-site/effects'; import { StructuredContent } from './StructuredContent/StructuredContent'; interface Props { article: TArticle; sectionData: Record; } export const Article: FC = ({ article, sectionData }) => { const articleRef = useRef(null); const articleRectObserver = useArticleRectObserver(articleRef.current); const id = useId(); const [articleHeight, setArticleHeight] = useState(1); useEffect(() => { if (!articleRectObserver) return; return articleRectObserver.on('resize', (rect) => { setArticleHeight(rect.height / rect.width); }); }, [articleRectObserver]); const webglContextManager = useMemo(() => new WebGLContextManager(), []); const sectionsLength = article.sections.length; return (
{article.sections.map((section, i) => { const data = section.name ? sectionData[section.name] : {}; return (
); })}
{` .article { position: relative; overflow: clip; } `} ); }; type SectionName = string;