5180 fichiers 38.5 Mo 0 téléchargements 191 vues mis à jour il y a 5 heures ui
nitro-v36-with-renderer-v36 / src / components / plugins / ExternalPluginLoader.tsx
ExternalPluginLoader.tsx 2.3 Ko Télécharger le fichier
import { FC, useEffect, useState } from 'react';
import { GetOptionalConfigurationValue } from '../../api/octane/GetConfigurationValue';
import { PluginEntry, PluginScript, resolvePluginScripts } from '../../api/utils/resolvePluginScripts';
import { subscribePlugins } from './OctanePluginApi';

import './OctanePluginApi';

export const ExternalPluginLoader: FC<{}> = () => {
    const [, forceUpdate] = useState(0);
    const [pluginScripts, setPluginScripts] = useState<PluginScript[]>([]);

    useEffect(() => {
        return subscribePlugins(() => forceUpdate((n) => n + 1));
    }, []);

    useEffect(() => {
        let entries: PluginEntry[] = [];
        let allowedHosts: string[] = [];

        // Both keys are optional (no plugins is the default), so a config without them does not warn.
        try {
            entries = GetOptionalConfigurationValue<PluginEntry[]>('external.plugins', []) || [];
            allowedHosts = GetOptionalConfigurationValue<string[]>('external.plugins.allowed.hosts', []) || [];
        } catch (e) {
            console.warn('[OctanePlugins] Could not read external.plugins config:', e);
            return;
        }

        if (!Array.isArray(entries) || !entries.length) {
            console.log('[OctanePlugins] No external plugins configured');
            return;
        }

        const scripts = resolvePluginScripts(
            entries,
            Array.isArray(allowedHosts) ? allowedHosts : [],
            window.location.origin,
            (message) => console.warn(`[OctanePlugins] ${message}`)
        );

        console.log(
            '[OctanePlugins] Loading external plugins:',
            scripts.map((script) => script.src)
        );
        setPluginScripts(scripts);
    }, []);

    if (!pluginScripts.length) return null;

    return (
        <>
            {pluginScripts.map((script) => (
                <script
                    key={script.src}
                    async
                    src={script.src}
                    integrity={script.integrity}
                    crossOrigin={script.integrity ? 'anonymous' : undefined}
                    onLoad={() => console.log(`[OctanePlugins] Loaded: ${script.src}`)}
                    onError={() => console.warn(`[OctanePlugins] Failed to load: ${script.src}`)}
                />
            ))}
        </>
    );
};
15Sujets
1Dépôts
20Membres
2En ligne
Profile
Inscrit
Dernière visite
Messages
0
Votes positifs
0
Votes négatifs
0

Nous utilisons des cookies pour assurer le bon fonctionnement du site et améliorer votre expérience. en savoir plus

Autoriser