Skip to content

Contexto Global

Sistema que gestiona configuración y estado compartido — el "centro de comando" que coordina todo schepta.

Provider

El patrón Provider centraliza configuraciones que todos los componentes necesitan compartir:

🔧 Qué Hace:

ConfiguraciónAlcanceBeneficioEjemplo
Component RegistryGlobalComponentes estandarizadosMUI como predeterminado
Middleware StackGlobalComportamiento consistenteValidación uniforme
Context ProvidersGlobalEstado compartidoUsuario, permisos, locale

📊 Jerarquía de Configuración:

Jerarquía de Provider:

text
scheptaProvider (Nivel de App)
    ├── Global Component Registry
    ├── Global Middleware  
    └── Context Providers
        └── FormFactory/MenuFactory (Local)
            ├── Local Component Overrides
            └── Local Middleware Overrides

Ejemplo Rápido:

jsx
<scheptaProvider
  components={{ InputText: MUITextField, Button: MUIButton }}
  middleware={{ withValidation, withAnalytics }}
>
  <App />
</scheptaProvider>

💡 Resultado: Configurar una vez → Disponible en toda la aplicación.

🚀 Tipos de Provider

Cada provider gestiona un aspecto específico del sistema:

🎨 scheptaProvider - Provider Maestro:

ConfiguraciónPropósitoPredeterminadoNivel de Override
componentsRegistro global de componentesComponentes integradosProps de factory local
middlewarePila global de middlewareMiddleware básicoProps de factory local
debugConfiguración del panel de debugAuto (modo dev)Variables de entorno

🎛️ Component Registry Provider:

Tipo de RegistroAlcancePrioridadCaso de Uso
Default RegistryTodo el sistemaMás bajaComponentes integrados
Global RegistryToda la aplicaciónMediaLibrería de UI consistente
Local RegistryEspecífico de factoryMás altaOverrides de componentes
Dynamic RegistryRuntimeVariableA/B testing, temas

🔧 Middleware Provider:

Tipo de MiddlewareAlcanceEjecuciónPropósito
Core MiddlewareSistemaSiempre ejecutadoFuncionalidad esencial
Global MiddlewareAplicaciónConfigurableComportamiento consistente
Local MiddlewareFactoryOverride/extendFuncionalidad específica
Conditional MiddlewareBasado en contextoCondicionalEspecífico de rol/tenant

⚙️ Arquitectura del Provider

Cómo funciona el sistema de providers:

📋 Inicialización del Provider:

FaseProcesoResultadoDependencias
1. Provider SetupInicializar contexto del providerContexto disponibleNinguna
2. Registry RegistrationRegistrar componentes globalesRegistro global pobladoDefiniciones de componentes
3. Middleware RegistrationRegistrar middleware globalPila de middleware listaFunciones de middleware
4. Context PropagationPropagar a componentes hijosProviders activosContexto React/Vue

🎯 Propagación de Contexto:

Uso de Contexto React:

typescript
// Contextos de Provider
const scheptaContext = createContext<scheptaConfig>();
const ComponentRegistryContext = createContext<ComponentRegistry>();
const MiddlewareContext = createContext<MiddlewareStack>();

// Acceso mediante hooks
const useschepta = () => useContext(scheptaContext);
const useComponentRegistry = () => useContext(ComponentRegistryContext);
const useMiddleware = () => useContext(MiddlewareContext);
const usescheptaTheme = () => useContext(ThemeContext);

Herencia de Configuración:

typescript
const mergedConfig = {
  // Configuración predeterminada
  ...defaultscheptaConfig,
  
  // Configuración del Provider  
  ...providerConfig,
  
  // Overrides de runtime
  ...runtimeConfig
};

📊 Patrones de Configuración

Patrones comunes de configuración de provider:

🎯 Patrones a Nivel de Aplicación:

PatrónCaso de UsoConfiguraciónBeneficios
Component LibrarySistema de diseñoComponentes consistentesVelocidad de desarrollo
Micro-frontendsApp distribuidaConfiguraciones con alcanceIndependencia de equipos

🔧 Integración con Librería de Componentes:

Integración Material-UI:

typescript
<scheptaProvider
  components={{
    InputText: MuiTextField,
    Button: MuiButton,
    Select: MuiSelect,
    Checkbox: MuiCheckbox
  }}
>
  <App />
</scheptaProvider>

Integración Ant Design:

typescript
<scheptaProvider
  components={{
    InputText: AntInput,
    Button: AntButton,
    Select: AntSelect,
    Checkbox: AntCheckbox
  }}
>
  <App />
</scheptaProvider>

🎨 Configuración Multi-Tenant:

Providers Específicos por Tenant:

typescript
const TenantProvider = ({ tenant, children }) => {
  const tenantConfig = getTenantConfig(tenant);
  
  return (
    <scheptaProvider
      components={tenantConfig.components}
      middleware={tenantConfig.middleware}
    >
      {children}
    </scheptaProvider>
  );
};

💡 Conceptos Relacionados

El patrón Provider gestiona la configuración para todos los demás conceptos: