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({}); export const CustomerInvoicesProvider = ({ children }: PropsWithChildren) => { return {children}; };