import React from 'react';
import Document, {
DocumentContext, DocumentInitialProps,
Html, Head, Main, NextScript,
} from 'next/document';
import { ActivatePluginService, GrowiPluginManifestEntries } from '~/client/services/activate-plugin';
import { GrowiPlugin, GrowiPluginResourceType } from '~/interfaces/plugin';
// FIXME: dummy data
// ------------------
const growiPluginsExample: GrowiPlugin[] = [
{
isEnabled: true,
installedPath: 'weseek/growi-plugin-copy-code-to-clipboard',
origin: {
url: 'https://github.com/weseek/growi-plugin-copy-code-to-clipboard',
},
meta: {
name: 'weseek/growi-plugin-copy-code-to-clipboard',
types: [GrowiPluginResourceType.Script],
},
},
];
// ------------------
type HeadersForGrowiPluginProps = {
pluginManifestEntries: GrowiPluginManifestEntries;
}
const HeadersForGrowiPlugin = (props: HeadersForGrowiPluginProps): JSX.Element => {
const { pluginManifestEntries } = props;
return (
<>
{ pluginManifestEntries.map(([growiPlugin, manifest]) => {
// type: script
if (growiPlugin.meta.types.includes(GrowiPluginResourceType.Script)) {
return (
<>
{/* eslint-disable-next-line @next/next/no-sync-scripts */ }
>
);
}
return <>>;
}) }
>
);
};
interface GrowiDocumentProps {
pluginManifestEntries: GrowiPluginManifestEntries;
}
declare type GrowiDocumentInitialProps = DocumentInitialProps & GrowiDocumentProps;
class GrowiDocument extends Document {
static override async getInitialProps(ctx: DocumentContext): Promise {
const initialProps: DocumentInitialProps = await Document.getInitialProps(ctx);
// TODO: load GrowiPlugin documents from DB
// const pluginManifestEntries: GrowiPluginManifestEntries = await ActivatePluginService.retrievePluginManifests(growiPluginsExample);
const pluginManifestEntries: GrowiPluginManifestEntries = await ActivatePluginService.retrievePluginManifests([]);
return { ...initialProps, pluginManifestEntries };
}
override render(): JSX.Element {
const { pluginManifestEntries } = this.props;
return (
{/*
{renderScriptTagsByGroup('basis')}
{renderStyleTagsByGroup('basis')}
*/}
);
}
}
export default GrowiDocument;