import React, { useEffect } from 'react'; import { useSearchParams } from 'react-router-dom'; import { PreviewThemeValue, previewThemes, ThemeValue, Context, markdownString } from './context'; import { useMdSource } from './getMdSource'; export const Provider: React.FC = ({ children }) => { const [searchParams, setSearchParams] = useSearchParams(); const paramPreviewTheme = searchParams.get('theme') as PreviewThemeValue; const initPreviewTheme = paramPreviewTheme || 'underscore'; const mdurl = searchParams.get('md'); const [markdown, setMarkdown] = React.useState(mdurl ? '' : markdownString); const [css, setCss] = React.useState(previewThemes[initPreviewTheme].value); const [previewTheme, setPreviewTheme] = React.useState(initPreviewTheme); const [theme, setTheme] = React.useState('default'); const [preColor, setPreColor] = React.useState( previewThemes[initPreviewTheme] ? previewThemes[initPreviewTheme].color : '', ); const [isLoading, setIsLoading] = React.useState(true); const { data: mddata, isLoading: loading } = useMdSource(mdurl); useEffect(() => { if (paramPreviewTheme !== previewTheme) { searchParams.set('theme', previewTheme); setSearchParams(searchParams); } }, [paramPreviewTheme, previewTheme, searchParams, setSearchParams]); useEffect(() => { if (mdurl) { setMarkdown(mddata || ''); } }, [mddata, mdurl]); useEffect(() => setIsLoading(loading), [loading]); useEffect(() => setPreColor(previewThemes[initPreviewTheme].color), [initPreviewTheme]); return ( {children} ); };