feat(renderer): Use callback instead of redux for renderer ready

Signed-off-by: Tilman Vatteroth <git@tilmanvatteroth.de>
This commit is contained in:
Tilman Vatteroth 2022-10-06 22:48:36 +02:00
parent 285daeef8b
commit 2817740c94
12 changed files with 82 additions and 118 deletions

View file

@ -4,43 +4,34 @@
* SPDX-License-Identifier: AGPL-3.0-only
*/
import React, { Fragment, useMemo } from 'react'
import { useIntroPageContent } from './hooks/use-intro-page-content'
import { useApplicationState } from '../../hooks/common/use-application-state'
import React, { useEffect, useState } from 'react'
import { WaitSpinner } from '../common/wait-spinner/wait-spinner'
import { RenderIframe } from '../editor-page/renderer-pane/render-iframe'
import { RendererType } from '../render-page/window-post-message-communicator/rendering-message'
import { useTranslation } from 'react-i18next'
import { fetchFrontPageContent } from './requests'
/**
* Fetches the content for the customizable part of the intro page and renders it.
*/
export const IntroCustomContent: React.FC = () => {
const introPageContent = useIntroPageContent()
const rendererReady = useApplicationState((state) => state.rendererStatus.rendererReady)
const { t } = useTranslation()
const [content, setContent] = useState<string[] | undefined>(undefined)
const spinner = useMemo(() => {
if (!rendererReady && introPageContent !== undefined) {
return <WaitSpinner />
}
}, [introPageContent, rendererReady])
useEffect(() => {
fetchFrontPageContent()
.then((content) => setContent(content.split('\n')))
.catch(() => setContent(undefined))
}, [t])
const introContent = useMemo(() => {
if (introPageContent !== undefined) {
return (
<RenderIframe
frameClasses={'w-100 overflow-y-hidden'}
markdownContentLines={introPageContent}
rendererType={RendererType.INTRO}
forcedDarkMode={true}
/>
)
}
}, [introPageContent])
return (
<Fragment>
{spinner}
{introContent}
</Fragment>
return content === undefined ? (
<WaitSpinner />
) : (
<RenderIframe
frameClasses={'w-100 overflow-y-hidden'}
markdownContentLines={content}
rendererType={RendererType.INTRO}
forcedDarkMode={true}
/>
)
}