mirror of
https://github.com/funamitech/mastodon
synced 2024-12-15 23:28:31 +09:00
f6654e0842
Conflicts: - `app/javascript/packs/admin.jsx`: This file was split between `app/javascript/core/admin.js`, `app/javascript/pack/admin.jsx`, and `app/javascript/flavours/glitch/packs/admin.jsx`. Ported upstream's change, splitting the new file to `app/javascript/core/admin.ts`, `app/javascript/packs/admin.tsx`, and `app/javascript/flavours/glitch/packs/admin.tsx`
38 lines
975 B
TypeScript
38 lines
975 B
TypeScript
import 'packs/public-path';
|
|
import { createRoot } from 'react-dom/client';
|
|
|
|
import ready from 'flavours/glitch/ready';
|
|
|
|
async function mountReactComponent(element: Element) {
|
|
const componentName = element.getAttribute('data-admin-component');
|
|
const stringProps = element.getAttribute('data-props');
|
|
|
|
if (!stringProps) return;
|
|
|
|
const componentProps = JSON.parse(stringProps) as object;
|
|
|
|
const { default: AdminComponent } = await import(
|
|
'@/flavours/glitch/containers/admin_component'
|
|
);
|
|
|
|
const { default: Component } = (await import(
|
|
`@/flavours/glitch/components/admin/${componentName}`
|
|
)) as { default: React.ComponentType };
|
|
|
|
const root = createRoot(element);
|
|
|
|
root.render(
|
|
<AdminComponent>
|
|
<Component {...componentProps} />
|
|
</AdminComponent>,
|
|
);
|
|
}
|
|
|
|
ready(() => {
|
|
document.querySelectorAll('[data-admin-component]').forEach((element) => {
|
|
void mountReactComponent(element);
|
|
});
|
|
}).catch((reason) => {
|
|
throw reason;
|
|
});
|