import {Fragment, useRef} from 'react';
import {Trans} from '@common/i18n/trans';
import {DialogTrigger} from '@common/ui/overlays/dialog/dialog-trigger';
import {AppearanceButton} from '@common/admin/appearance/appearance-button';
import {AceDialog} from '@common/ace-editor/ace-dialog';
import mergedAppearanceConfig from '@common/admin/appearance/config/merged-appearance-config';
import {SeoSettingsSectionConfig} from '@common/admin/appearance/types/appearance-editor-config';
import {MessageDescriptor} from '@common/i18n/message-descriptor';
import {useSeoTags} from '@common/admin/appearance/sections/seo/use-seo-tags';
import {useUpdateSeoTags} from '@common/admin/appearance/sections/seo/use-update-seo-tags';
import {useDialogContext} from '@common/ui/overlays/dialog/dialog-context';
import {FullPageLoader} from '@common/ui/progress/full-page-loader';
import {Button} from '@common/ui/buttons/button';
import type ReactAce from 'react-ace';
const pages =
(
mergedAppearanceConfig.sections['seo-settings']
.config as SeoSettingsSectionConfig
)?.pages || [];
const names = pages.map(page => page.key);
export function SeoSection() {
const {isLoading} = useSeoTags(names);
if (isLoading) {
return ;
}
return (
{pages.map(page => (
))}
);
}
interface TagEditorTriggerProps {
label: MessageDescriptor;
name: string;
}
function TagEditorTrigger({label, name}: TagEditorTriggerProps) {
const {data, isLoading} = useSeoTags(names);
return (
{data ? : null}
);
}
interface TagsEditorDialogProps {
name: string;
value: {custom: string | null; original: string};
}
function TagsEditorDialog({name, value}: TagsEditorDialogProps) {
const {close} = useDialogContext();
const updateTags = useUpdateSeoTags(name);
const editorRef = useRef(null);
const resetButton = (
);
return (
}
footerStartAction={resetButton}
editorRef={editorRef}
defaultValue={value.custom || value.original}
isSaving={updateTags.isPending}
beautify={false}
onSave={newValue => {
if (newValue != null) {
updateTags.mutate(
{tags: newValue},
{
onSuccess: () => close(),
},
);
}
}}
/>
);
}