Edifiko
Edifiko DocsDocumentación del proyecto
  • Overview
Proyecto
  • README
  • CONTRIBUTING
  • WORKFLOW
  • Workflows CI/CD
  • UI Components
  • Showcase: Works UI Components
  • Schemas
  • Servicios
  • Hooks
  • Utils
  • Types
  • Constants
  • Errors
  • API Materiales
Herramientas de IA
  • Agentes
  • Skills
  1. Documentación
  2. Types

Types

types/README.md

Types

Definiciones de tipos TypeScript centralizadas por dominio. Actúan como Single Source of Truth para los contratos entre hooks, componentes y servicios.

Descripción General

Los tipos se declaran como interface en archivos index.ts por dominio. Ningún componente ni hook declara tipos localmente — toda interfaz reside aquí y se importa desde @/types/<dominio>.

Los tipos de entidades de Firestore (schemas) se infieren de Zod en @/schemas/ y no se duplican aquí. En types/ solo viven los tipos propios de la capa de presentación: view models, props de componentes, contextos de diálogos y contratos de hooks.

Estructura de Archivos

text
types/
├── auth/
│   └── index.ts          # Tipos del módulo de autenticación
├── categories/
│   └── index.ts          # Tipos del módulo de categorías (ver detalle abajo)
├── icons/
│   └── index.ts          # IIconOption — forma de cada opción de ícono
├── materials/
│   └── index.ts          # Tipos del módulo de materiales (ver detalle abajo)
└── users/
    └── index.ts          # Tipos del módulo de usuarios

🗂️ types/categories

El archivo más completo del proyecto. Agrupa todos los contratos del módulo de categorías.

View Models

TipoDescripción
ISubcategoryView{ id, name, materialsCount }
ICategoryView{ id, name, subcategories: ISubcategoryView[] }
IGroupCatalogView{ id, title, description, iconName, categories: ICategoryView[] }

Contextos de Dialog

TipoDescripción
ICreateCategoryCtxDatos necesarios para crear una categoría: groupId, groupTitle
ICreateSubcategoryCtxExtiende con categoryId, categoryTitle
ISubcategoryOption{ id, name } — opción en el selector de subcategoría destino
IDeleteSubcategoryCtxDatos para el flow de eliminación con materiales asignados

Props de Componentes

Todos los componentes de components/categories/ tienen su interfaz de props aquí:

ICardSubcategoryProps, ICollapsableCategoryProps, IDialogCreateCategoryProps, IDialogCreateGroupProps, IDialogCreateSubcategoryProps, IDialogDeleteSubcategoryProps, IAlertDialogDeleteCategoryProps, IAlertDialogDeleteGroupProps, IAlertDialogConfirmDeleteProps, IDialogEditGroupProps, IDialogEditNameProps, IFormSlotProps

Retorno del Hook de Página

IUseCategoriesPageReturn — contrato completo de useCategoriesPage().

Params y Returns de Hooks por Componente

ParamsReturns
IUseCardSubcategoryParamsIUseCardSubcategoryReturn
IUseCollapsableCategoryParamsIUseCollapsableCategoryReturn
IUseDialogCreateGroupParamsIUseDialogCreateGroupReturn
IUseDialogCreateCategoryParamsIUseDialogCreateCategoryReturn
IUseDialogCreateSubcategoryParamsIUseDialogCreateSubcategoryReturn
IUseDialogDeleteSubcategoryParamsIUseDialogDeleteSubcategoryReturn

🔑 types/icons

ts
export interface IIconOption {
  key: string; // Identificador slug (ej. 'brick-wall')
  label: string; // Texto legible (ej. 'Mampostería')
  lucideName: string; // Nombre del componente en lucide-react
  Icon: LucideIcon; // Componente React listo para renderizar
}

Usado en: CONSTRUCTION_ICON_OPTIONS, DialogCreateGroup, DialogEditGroup, CollapsableCategory, FormSlot.


📦 types/materials

View Models

TipoDescripción
IMaterialRowModelo de vista para filas de tabla: { id, name, categorization, groupId, categoryId, subcategoryId, usageCount }

Filtros

TipoDescripción
IMaterialFiltersFiltros opcionales para consultas: { groupId?, categoryId?, subcategoryId? }

Props de Componentes

TipoDescripción
IMaterialFiltersBarPropsProps para MaterialFiltersBar: { categoryCatalog, filters, onFiltersChange }

Payloads de Operaciones

TipoDescripción
ICreateMaterialDataPayload para crear un material: los 7 campos (name, subcategoryId, categoryId, groupId, groupName, categoryName, subcategoryName)
IEditMaterialDataMismos 7 campos que ICreateMaterialData (para edición)

Contextos de Dialog

TipoDescripción
IEditMaterialCtx{ id, initialData: IEditMaterialData } — contexto para editar
IDeleteMaterialCtx{ id, name } — contexto para confirmar eliminación

Params y Returns de Hooks

TipoDescripción
IUseDialogCreateMaterialParams{ categoryCatalog, onOpenChange, onConfirm? }
IUseDialogEditMaterialParams{ open, categoryCatalog, initialData?, onOpenChange, onConfirm? }
IUseMaterialCatalogPageReturnContrato completo del hook de página: incluye materials, filters, setFilters, filteredMaterials, isMutating, handlers CRUD, etc.

Convención para Agregar Tipos

  1. Identificar el dominio (categories, materials, users, etc.).
  2. Abrir types/<dominio>/index.ts y agregar la interfaz al final.
  3. Nombrar con prefijo I + PascalCase.
  4. Si se necesita en un componente, exportarlo también desde components/<dominio>/index.ts.
  5. Nunca duplicar tipos que ya existen en @/schemas/ — usar z.infer<typeof Schema>.