57 lines
3.1 KiB
TypeScript
57 lines
3.1 KiB
TypeScript
import { CustomerInvoiceService } from "@erp/customerCustomerInvoices/api/domain/services/customer-invoice.service";
|
|
import { PropsWithChildren, createContext } from "react";
|
|
|
|
/**
|
|
* ────────────────────────────────────────────────────────────────────────────────
|
|
* 💡 Posibles usos del InvoicingContext
|
|
* ────────────────────────────────────────────────────────────────────────────────
|
|
* Este contexto se diseña para encapsular estado y lógica compartida dentro del
|
|
* bounded context de facturación (facturas), proporcionando acceso global a datos
|
|
* o funciones relevantes para múltiples vistas (listado, detalle, edición, etc).
|
|
*
|
|
* ✅ Usos recomendados:
|
|
*
|
|
* 1. 🔎 Gestión de filtros globales:
|
|
* - Permite que los filtros aplicados en el listado de facturas se conserven
|
|
* cuando el usuario navega a otras vistas (detalle, edición) y luego regresa.
|
|
* - Mejora la experiencia de usuario evitando la necesidad de reestablecer filtros.
|
|
*
|
|
* 2. 🛡️ Gestión de permisos o configuración de acciones disponibles:
|
|
* - Permite definir qué acciones están habilitadas para el usuario actual
|
|
* (crear, editar, eliminar).
|
|
* - Útil para mostrar u ocultar botones de acción en diferentes pantallas.
|
|
*
|
|
* 3. 🧭 Control del layout:
|
|
* - Si el layout tiene elementos dinámicos (tabs, breadcrumb, loading global),
|
|
* este contexto puede coordinar su estado desde componentes hijos.
|
|
* - Ejemplo: seleccionar una pestaña activa que aplica en todas las subrutas.
|
|
*
|
|
* 4. 📦 Cacheo liviano de datos compartidos:
|
|
* - Puede almacenar la última factura abierta, borradores de edición,
|
|
* o referencias temporales para operaciones CRUD sin tener que usar la URL.
|
|
*
|
|
* 5. 🚀 Coordinación de side-effects:
|
|
* - Permite exponer funciones comunes como `refetch`, `resetFilters`,
|
|
* o `notifyInvoiceChanged`, usadas desde cualquier subcomponente del dominio.
|
|
*
|
|
* ⚠️ Alternativas:
|
|
* - Si el estado compartido es muy mutable, grande o requiere persistencia,
|
|
* podría ser preferible usar Zustand o Redux Toolkit.
|
|
* - No usar contextos para valores que cambian frecuentemente en tiempo real,
|
|
* ya que pueden causar renders innecesarios.
|
|
*
|
|
* ────────────────────────────────────────────────────────────────────────────────
|
|
*/
|
|
|
|
export type CustomerInvoicesContextType = {};
|
|
|
|
export type CustomerInvoicesContextParamsType = {
|
|
service: CustomerInvoiceService;
|
|
};
|
|
|
|
export const CustomerInvoicesContext = createContext<CustomerInvoicesContextType>({});
|
|
|
|
export const CustomerInvoicesProvider = ({ children }: PropsWithChildren) => {
|
|
return <CustomerInvoicesContext.Provider value={{}}>{children}</CustomerInvoicesContext.Provider>;
|
|
};
|