Sistema de Plugins
Resumen
Sección titulada «Resumen»Los plugins son el mecanismo de extensión principal en Rebase. Pueden:
- Envolver toda la aplicación con un proveedor (contexto, gestión de estado)
- Añadir acciones y widgets a la página de inicio
- Inyectar componentes de la vista de colección (barra de herramientas, constructores de columnas)
- Añadir componentes de formulario (constructores de campos, paneles adicionales)
- Inyectar o modificar colecciones dinámicamente
Interfaz del Plugin
Sección titulada «Interfaz del Plugin»interface RebasePlugin { key: string; // Unique identifier loading?: boolean; // Show loading state while initializing
// Wrap the app with a provider provider?: { Component: React.ComponentType; };
// Home page customization homePage?: { additionalActions?: React.ReactNode; additionalChildrenStart?: React.ReactNode; additionalChildrenEnd?: React.ReactNode; };
// Collection view customization collectionView?: { showTextSearchBar?: boolean; CollectionActions?: React.ComponentType[]; AddColumnComponent?: React.ComponentType; onCellValueChange?: (params) => void; };
// Entity form customization form?: { Actions?: React.ComponentType; provider?: { Component: React.ComponentType }; fieldBuilder?: (params) => React.ReactNode | null; };
// Collection injection/modification collection?: { injectCollections?: (params) => EntityCollection[]; modifyCollection?: (params) => EntityCollection; };}Uso de Plugins
Sección titulada «Uso de Plugins»Pasa las instancias de los plugins al controlador de navegación:
const dataEnhancementPlugin = useDataEnhancementPlugin();
const plugins = [dataEnhancementPlugin];
const navigationStateController = useBuildNavigationStateController({ plugins, collections: () => collections, // ...});Construyendo un Plugin
Sección titulada «Construyendo un Plugin»Aquí tienes un plugin mínimo que añade una acción a la barra de herramientas de cada colección:
import { RebasePlugin } from "@rebasepro/types";
function useMyPlugin(): RebasePlugin { return { key: "my_plugin",
collectionView: { CollectionActions: [MyToolbarAction] },
form: { fieldBuilder: ({ property, ...rest }) => { // Return a custom field for specific property configs if (property.propertyConfig === "my_custom_field") { return <MyCustomField {...rest} />; } return null; // Use default field } } };}Plugins Integrados
Sección titulada «Plugins Integrados»Plugin de Mejora de Datos
Sección titulada «Plugin de Mejora de Datos»Autocompletado de campos impulsado por IA:
import { useDataEnhancementPlugin } from "@rebasepro/data_enhancement";
const enhancementPlugin = useDataEnhancementPlugin();
Inyección de Colecciones
Sección titulada «Inyección de Colecciones»Los plugins pueden añadir nuevas colecciones dinámicamente:
collection: { injectCollections: ({ collections, user }) => { // Add an audit log collection for admins if (user?.roles?.includes("admin")) { return [auditLogCollection]; } return []; }}Modificación de Colecciones
Sección titulada «Modificación de Colecciones»Los plugins pueden modificar colecciones existentes:
collection: { modifyCollection: ({ collection }) => { // Add a "last_modified_by" field to every collection return { ...collection, properties: { ...collection.properties, last_modified_by: { type: "string", name: "Modified By", readOnly: true } } }; }}Próximos Pasos
Sección titulada «Próximos Pasos»- Herramientas del Estudio — consola SQL, consola JS, editor RLS
- Campos Personalizados — Construcción de campos de formulario personalizados