npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@cbm-common/stocks-by-warehouse

v0.0.1

Published

Componente y utilidades para mostrar inventario por bodegas (stocks por warehouse). Esta librería exporta el componente independiente `CbmStocksByWarehouseComponent`, la directiva `NavMenuDirective` y tipos auxiliares (ver `src/lib/type.ts`).

Readme

Cbm StocksByWarehouse — Documentación (español)

Componente y utilidades para mostrar inventario por bodegas (stocks por warehouse). Esta librería exporta el componente independiente CbmStocksByWarehouseComponent, la directiva NavMenuDirective y tipos auxiliares (ver src/lib/type.ts).

Resumen rápido:

  • Componente: cbm-stocks-by-warehouse (standalone, Shadow DOM).
  • Directiva: appNavMenu (gestiona menús verticales/botones con contenido asociado).
  • Tipos exportados: cbmStockWarehouseModalModel, IPagination, status.

Propósito

Proveer una vista reutilizable para consultar y paginar stock por bodega, stock por lote (batch) y stock por serie. El componente maneja llamadas al repositorio de stock (CbmStockItemRepository) para obtener los datos y ofrece paginación integrada.

Exportados

  • CbmStocksByWarehouseComponent — Componente standalone. Selector: cbm-stocks-by-warehouse.
  • NavMenuDirective — Directiva standalone. Selector de atributo: appNavMenu.
  • Tipos: cbmStockWarehouseModalModel, IPagination, status (definidos en src/lib/type.ts).

Requisitos / Peer dependencies

El componente depende de los siguientes símbolos/paquetes disponibles en el monorepo (o como dependencias peer):

  • @cbm-common/stock-item-repository — para CbmStockItemRepository y CbmStockItemModel.
  • @cbm-common/notification-service — para CbmNotificationService (envío de alertas/toasts).
  • @cbm-common/pagination-nav — para CbmPaginationNavComponent (control de paginación usado en el template).

Antes de usar el componente en la aplicación host, asegúrate de tener instaladas/registradas estas dependencias y sus providers (por ejemplo, llamar a CbmStockItemModule.forRoot({ baseUrl }) si corresponde).

Cómo usar

  1. Instala/integra la librería en tu proyecto (si está empaquetada) o importa directamente desde la librería local del monorepo.

  2. Usar el componente en un template:

<!-- Ejemplo: mostrar inventario para un ítem -->
<cbm-stocks-by-warehouse
  [data]="{ code: 'A123', name: 'Producto A', _id: 'obj_1', manage_by: 'lot' }"
  [modalId]="'modal-'+item._id">
</cbm-stocks-by-warehouse>

Inputs disponibles (component):

  • data: cbmStockWarehouseModalModel.item | null — elemento cuyo _id se usa para consultar stock. Si es null, no se realizarán consultas útiles.
  • modalId: string — id único usado internamente si se necesita mostrar modal (por defecto se genera un UUID si no se pasa).

El componente realiza las consultas automáticamente en ngOnInit() (llama a getWarehouseStock, getSerieStock, getBatchStock) tomando this.data()?._id y los parámetros de paginación.

API interna y comportamiento

Funciones principales (métodos públicos del componente):

  • getWarehouseStock() — solicita stock por bodega (usa CbmStockItemRepository.warehouseStock).
  • getBatchStock() — solicita stock por lote (usa CbmStockItemRepository.batchStock).
  • getSerieStock() — solicita stock por serie (usa CbmStockItemRepository.serieStock).

Estado y señales (signals):

  • statusOfGetWarehouseStock, statusOfGetBatchStock, statusOfGetSerieStock — estado tipo status ('init'|'loading'|'success'|'failed').
  • Paginación: paginationWarehouseStock, paginationBatchStock, paginationSerieStock — estructura IPagination con page, pages, records, size.
  • Datos: warehouseStock, batchStock, serieStock — arrays con los ítems obtenidos.

Eventos de paginación:

  • onGoToPage*, onNextPage*, onPreviousPage*, onPageSizeChange* — métodos que actualizan la paginación y vuelven a solicitar datos.

Errores y notificaciones: si ocurre un error en la consulta, el componente envía una alerta vía CbmNotificationService.sendAlert(...) y actualiza el estado a 'failed'.

Directiva appNavMenu

Uso:

<div appNavMenu>
  <button data-target="tab-warehouse">Bodegas</button>
  <button data-target="tab-batch">Lotes</button>
  <button data-target="tab-serie">Series</button>
</div>

<!-- Contenido relacionado: los divs deben tener un id que coincida con data-target -->
<div id="tab-warehouse"> ... </div>
<div id="tab-batch" class="hidden"> ... </div>
<div id="tab-serie" class="hidden"> ... </div>

La directiva gestiona la clase activa en los botones y la visibilidad (hidden) de las secciones asociadas. Está pensada para usarse junto al template exportado por el componente o en vistas que requieran un menú de pestañas simple.

Estilos y encapsulación

El componente utiliza ViewEncapsulation.ShadowDom, por lo que sus estilos (archivo src/lib/styles.css) quedan encapsulados dentro del Shadow DOM. Si necesitas sobreescribir estilos desde la aplicación host, considera usar CSS Custom Properties o no usar Shadow DOM.

Tipos y definiciones

Los tipos principales se encuentran en src/lib/type.ts e incluyen:

  • cbmStockWarehouseModalModel.item — shape básico del ítem esperado en data.
  • IPagination — formato de paginación usado por el componente.
  • status — tipo literal para estados.

Además el componente consume tipos desde @cbm-common/stock-item-repository (por ejemplo CbmStockItemModel) para anotar las respuestas de las APIs.

Desarrollo y pruebas

Comandos disponibles (desde la raíz del workspace):

  • Construir la librería:
ng build stocks-by-warehouse
  • Ejecutar pruebas unitarias del workspace (Karma/Jasmine si están configuradas):
ng test

Si publicas la librería como paquete NPM desde dist/stocks-by-warehouse:

cd dist/stocks-by-warehouse
npm publish

Notas de integración y buenas prácticas

  • Asegúrate de que las dependencias peer estén registradas en la aplicación host. Por ejemplo, el provider de CbmStockItemRepository suele exponerse mediante CbmStockItemModule.forRoot({ baseUrl }). Sin ese provider el componente lanzará errores en tiempo de ejecución.
  • La librería asume que existe un CbmNotificationService para informar errores; puedes sustituirlo por un provider compatible si lo deseas.
  • Por su uso de ShadowDom, la librería aísla estilos — útil para evitar conflictos, pero limita la personalización CSS directa desde la app host.

Dónde mirar el código

  • Componente: src/lib/stocks-by-warehouse/stocks-by-warehouse.component.ts
  • Tipos: src/lib/type.ts
  • Directiva: src/lib/directives/drop-down-menu.directive.ts
  • Public API: src/public-api.ts

Si quieres, puedo: 1) añadir ejemplos de integración concretos (módulo/app.module), 2) crear un spec de ejemplo que use HttpClientTestingModule para simular CbmStockItemRepository, o 3) adaptar el componente para no usar Shadow DOM si prefieres estilos globales.