Salta ai contenuti

Plugin SDK frontend

Il frontend del Core carica il bundle ES di un plugin attivo da:

/plugins/{name}/frontend/bundle.js?v={version}

Usa le dichiarazioni types-only @xiquil/plugin-sdk contenute in sdk/typescript della release Core corrispondente. Non copiare localmente PluginModule o la forma di window.__XQ__: i contract test Core tengono allineati pacchetto pubblico e loader.

import type { PluginContext, PluginModule } from "@xiquil/plugin-sdk";
export const setup: PluginModule["setup"] = (context: PluginContext) => {
context.navigate("/plugins/xq_demo");
};
export default function DemoPlugin() {
return <section>Plugin Demo attivo</section>;
}
ExportUso
defaultComponente React renderizzato nella pagina host del plugin
setup(context)Hook opzionale eseguito al bootstrap frontend
routesPresente nel tipo ABI ma riservato: il loader attuale non registra route React da questo export

PluginContext espone soltanto:

CampoUso
apiClientClient HTTP fornito dal Core; il tipo v1 non promette internals Axios
navigateNavigazione verso un percorso del Core

Il bundle deve usare le librerie fornite dall’host:

const { React, ReactDOM, mui, muiStyles, muiIcons } = window.__XQ__;

window.__XQ__ espone inoltre useFormValidation, FormValidationSummary, SubmitButton e SegmentedActions. Non bundlare una seconda copia di React, ReactDOM o MUI: copie multiple possono rompere hook, context e tema.

Il sorgente canonico può vivere in frontend/plugin.tsx, ma l’archivio deve contenere il risultato eseguibile in frontend/bundle.js. Imposta provides_frontend=true nel manifest tecnico soltanto quando il bundle è presente.

Per un esempio minimo riproducibile consulta sdk/examples/frontend_only e sdk/examples/full_stack nel Core. Entrambi renderizzano contenuto visibile; il full-stack abbina anche la route backend /ping.

  • usa solo i simboli dichiarati nel pacchetto pubblico;
  • tratta apiClient come opaco;
  • non dipendere da file sotto frontend/src/ del Core;
  • non usare routes finché il loader non ne documenta e testa il call site;
  • aggiorna la dipendenza SDK insieme alla versione minima Core richiesta.