32 lines
735 B
TypeScript
32 lines
735 B
TypeScript
import type { Product } from '@/models/products'
|
|
|
|
type ProductListHandler = (products: Product[]) => void
|
|
|
|
const handlers = new Set<ProductListHandler>()
|
|
let lastProductsList: Product[] | null = null
|
|
|
|
export function subscribeProductListStream(handler: ProductListHandler) {
|
|
handlers.add(handler)
|
|
|
|
if (lastProductsList?.length) {
|
|
handler(lastProductsList)
|
|
}
|
|
|
|
return () => {
|
|
handlers.delete(handler)
|
|
}
|
|
}
|
|
|
|
export function applyProductsListFromStream(products: Product[]) {
|
|
if (!Array.isArray(products) || !products.length) {
|
|
return
|
|
}
|
|
|
|
lastProductsList = products
|
|
handlers.forEach((handler) => handler(products))
|
|
}
|
|
|
|
export function getLastStreamProductsList(): Product[] | null {
|
|
return lastProductsList
|
|
}
|