import { createFileRoute, useNavigate } from '@tanstack/react-router' import { useState, useMemo, useRef, useEffect } from 'react' import { MiniQuantifier } from 'web-components' import { useAllProducts, useStores } from '../hooks/prominent-api-hooks' import { useCentralProductStore } from '../lib/stores/central-product-store' import { useCentralSlotStore } from '../lib/stores/central-slot-store' import { useAddToCart, useGetCart, useUpdateCartItem, useRemoveFromCart } from '../hooks/cart-query-hooks' import { usePopulateCentralStores } from '../hooks/usePopulateCentralStores' import { usePopulateCentralProductStore } from '../hooks/usePopulateCentralProductStore' import { AppLayout } from '../components/AppLayout' import { Zap, ShoppingCart } from 'lucide-react' import type { CompactProductCardProps } from '@packages/shared' export const Route = createFileRoute('/flash')({ component: FlashDeliveryPage, }) function FlashDeliveryPage() { const navigate = useNavigate() // Populate central stores so flash-eligible products resolve on direct load usePopulateCentralStores() usePopulateCentralProductStore() const { data: storesData } = useStores() const { productsById } = useCentralProductStore() const productSlotsMap = useCentralSlotStore((state) => state.productSlotsMap) const stores = storesData?.stores || [] const addToCart = useAddToCart('flash') const { data: cartData } = useGetCart('flash') // Store tabs — one tab per store (same model as home's category tabs) const storesWithFlash = useMemo(() => { return stores.filter((store: any) => Object.values(productsById).some( (p: any) => p?.storeId === store.id && productSlotsMap[p.id]?.isFlashAvailable && !productSlotsMap[p.id]?.isOutOfStock ) ) }, [stores, productsById, productSlotsMap]) const [selectedStoreId, setSelectedStoreId] = useState(null) const activeStoreId = selectedStoreId ?? storesWithFlash[0]?.id ?? null // Auto-scroll the active store tab into view (matches user-ui tab behavior) const tabsScrollRef = useRef(null) const tabPositions = useRef([]) const activeTabIndex = Math.max( 0, storesWithFlash.findIndex((s: any) => s.id === activeStoreId) ) useEffect(() => { const x = tabPositions.current[activeTabIndex] if (x != null) { tabsScrollRef.current?.scrollTo({ left: Math.max(0, x - 16), behavior: 'smooth' }) } }, [activeTabIndex]) // Get flash products from central store const allFlashProducts = useMemo(() => { return Object.values(productsById).filter( (product: any) => product && productSlotsMap[product.id]?.isFlashAvailable && !productSlotsMap[product.id]?.isOutOfStock ) }, [productsById, productSlotsMap]) // Products to show: active store's flash items, or all flash items when no stores const filteredProducts = useMemo(() => { if (activeStoreId != null) { return allFlashProducts.filter((p: any) => p.storeId === activeStoreId) } return allFlashProducts }, [activeStoreId, allFlashProducts]) const handleAddToCart = (productId: number) => { const item = filteredProducts.find((p: any) => p.id === productId) addToCart.mutate( { skuId: productId, quantity: 1, storeId: item?.storeId ?? 0 }, { onSuccess: () => { alert(`Added ${item?.name || 'item'} for 1 Hr Delivery`) }, } ) } return (
{/* Page header */}

Express Counter

Delivery within 1 hour

{/* Info Banner */}

Get these products delivered within 1 hour! Only available for select items.

{/* Store tabs — same model as home page tabs */} {storesWithFlash.length > 0 && (
{storesWithFlash.map((store: any, i: number) => { const active = activeStoreId === store.id return ( ) })}
)}

{activeStoreId != null ? stores.find((s: any) => s.id === activeStoreId)?.name.replace(/^The\s+/i, '') || 'Store Products' : 'All Products'}

{filteredProducts.length} items

{filteredProducts.map((product: any) => ( navigate({ to: '/flash/product/$id', params: { id: String(product.id) }, }) } /> ))}
{filteredProducts.length === 0 && (

No flash delivery products available.

)}
) } const formatQuantity = ( quantity: number, unit: string, ): { value: string; display: string } => { if (unit?.toLowerCase() === 'kg' && quantity < 1) { return { value: `${Math.round(quantity * 1000)} g`, display: `${Math.round(quantity * 1000)}g`, }; } return { value: `${quantity} ${unit}(s)`, display: `${quantity}${unit}` }; }; function CompactProductCard({ item, handleAddToCart, onPress, }: CompactProductCardProps) { const { data: cartData } = useGetCart('flash'); const productSlotsMap = useCentralSlotStore((state) => state.productSlotsMap); const updateCartItem = useUpdateCartItem('flash'); const removeFromCart = useRemoveFromCart('flash'); const cartItem = cartData?.items?.find( (cartItem: any) => cartItem.skuId === item.id, ); const quantity = cartItem?.quantity || 0; const isOutOfStock = productSlotsMap[item.id]?.isOutOfStock; const handleQuantityChange = (newQuantity: number) => { if (newQuantity === 0 && cartItem) { removeFromCart.mutate(cartItem.id); } else if (newQuantity === 1 && !cartItem) { handleAddToCart(item.id); } else if (cartItem) { updateCartItem.mutate({ skuId: cartItem.skuId, quantity: newQuantity }); } }; const price = item.flashPrice ?? item.price return (
{item.name} {isOutOfStock && (

Out of Stock

)}
{quantity > 0 ? ( ) : (
{ e.stopPropagation(); handleQuantityChange(1); }} >
)}

{item.name}

₹{price}

{item.marketPrice && Number(item.marketPrice) > Number(item.price) && (

₹{item.marketPrice}

)}

{formatQuantity(item.productQuantity || 1, item.unit || item.unitNotation).display}

); }