import {Link, Navigate, Outlet, useLocation} from 'react-router-dom'; import {Fragment, useEffect, useRef} from 'react'; import {IconButton} from '../../ui/buttons/icon-button'; import {CloseIcon} from '../../icons/material/Close'; import {Button} from '../../ui/buttons/button'; import {appearanceState, AppearanceValues} from './appearance-store'; import {useSaveAppearanceChanges} from './requests/save-appearance-changes'; import {useAppearanceValues} from './requests/appearance-values'; import {Trans} from '../../i18n/trans'; import {useForm, useFormContext} from 'react-hook-form'; import {Form} from '../../ui/forms/form'; import {ProgressCircle} from '../../ui/progress/progress-circle'; import {SectionHeader} from './section-header'; import {FileUploadProvider} from '../../uploads/uploader/file-upload-provider'; import {useAppearanceEditorMode} from './commands/use-appearance-editor-mode'; import {StaticPageTitle} from '../../seo/static-page-title'; import {useSettings} from '../../core/settings/use-settings'; export function AppearanceLayout() { const {isAppearanceEditorActive} = useAppearanceEditorMode(); const {data} = useAppearanceValues(); const {base_url} = useSettings(); const iframeRef = useRef(null); const {pathname} = useLocation(); useEffect(() => { // only set defaults snapshot once on route init if (data?.defaults && !appearanceState().defaults) { appearanceState().setDefaults(data.defaults); } }, [data]); useEffect(() => { if (iframeRef.current) { appearanceState().setIframeWindow(iframeRef.current.contentWindow!); } }, []); useEffect(() => { const sectionName = pathname.split('/')[3]; appearanceState().preview.navigate(sectionName); }, [pathname]); // make sure appearance editor iframe can't be nested if (isAppearanceEditorActive) { return ; } return (