import React from 'react'; import ReactDOM from 'react-dom/client'; import Schema from 'schemastery'; import Notification from 'vj/components/notification'; import DomComponent from 'vj/components/react/DomComponent'; import { NamedPage } from 'vj/misc/Page'; import { i18n, request } from 'vj/utils'; const page = new NamedPage('manage_config', async () => { if (document.documentElement.className.includes('theme--dark')) { document.documentElement.className += ' dark'; } const [{ ConfigEditor, ComponentsProvider }, { load }] = await Promise.all([ import('@hydrooj/components'), import('vj/components/monaco/loader'), ]); const { monaco, registerAction, renderMarkdown } = await load(['yaml']); function Markdown({ source }) { const rendered = React.useMemo(() => { const res = renderMarkdown({ value: source }); const value = res.element.innerHTML; res.dispose(); return value; }, [source]); // Markdown snippet come from trusted backend code, no need to sanitize here return
; } ReactDOM.createRoot(document.getElementById('app')!).render( { request.post('', { value }).then(() => { Notification.success(i18n('Changes saved successfully')); window.location.reload(); }).catch((e) => { Notification.error(i18n('Failed to save changes:'), e.message); }); }} sidebar={} dynamic={UiContext.dynamic || {}} /> , ); }); export default page;