/v1.0

ModalManager

ModalManager actúa como punto de montaje único para gestionar múltiples tipos de modales a través de un objeto modalConfig unificado. Dado un type, renderiza el modal correspondiente (ListModal, FormModal, MultiSelectModal, RelatedRecordsModal, ExportManyModal, ImportManyModal o ImportOneModal) y distribuye cualquier configuración adicional del campo config. Úsalo para gestionar el estado de los modales desde un componente padre con un único objeto de estado.

Props

| Prop | Tipo | Requerido | Por defecto | Descripción | |------|------|-----------|-------------|-------------| | modalConfig | ModalConfig | Sí | — | Objeto que describe qué modal renderizar y su estado. | | onClose | (reason: string, result?: any) => void | Sí | — | Se llama cuando cualquier modal gestionado se cierra. Recibe la razón de cierre y datos opcionales de resultado. |

Estructura de ModalConfig

| Campo | Tipo | Requerido | Descripción | |-------|------|----------|-------------| | type | 'list' \| 'form' \| 'multiSelect' \| 'relatedRecords' \| 'exportMany' \| 'importMany' \| 'importOne' | Sí | Qué modal renderizar. | | isOpen | boolean | Sí | Si el modal está visible. | | title | string | Sí | Título pasado al modal. | | data | any | No | Datos pasados al modal. | | config | any | No | Props adicionales distribuidos en el componente modal. |

Uso

Básico

import React from 'react';
import ModalManager, { ModalConfig } from '@/components/modals/ModalManager';

export default function Example() {
  const [modalConfig, setModalConfig] = React.useState<ModalConfig>({
    type: 'list',
    isOpen: false,
    title: '',
  });

  const openListModal = () => {
    setModalConfig({
      type: 'list',
      isOpen: true,
      title: 'Products',
      config: {
        listPath: '/v1/products',
        useAuthToken: true,
      },
    });
  };

  const openFormModal = () => {
    setModalConfig({
      type: 'form',
      isOpen: true,
      title: 'New Product',
      config: {
        fields: [{ type: 'text', name: 'name', label: 'Name' }],
        savePath: '/v1/products',
        mode: 'create',
      },
    });
  };

  return (
    <>
      <button onClick={openListModal}>Open List</button>
      <button onClick={openFormModal}>Open Form</button>
      <ModalManager
        modalConfig={modalConfig}
        onClose={(reason) => {
          console.log('Closed:', reason);
          setModalConfig((prev) => ({ ...prev, isOpen: false }));
        }}
      />
    </>
  );
}