UNPKG

pagamio-frontend-commons-lib

Version:

Pagamio library for Frontend reusable components like the form engine and table container

344 lines (343 loc) 12.6 kB
// Common product data const products = { PROCESSED_MILK: 'Processed Milk', BILTONG: 'Biltong Sliced Chill', MUFFIN: 'Muffin', BLUEBERRY_MUFFIN: 'Blueberry Muffin', JELLY_TOTS: 'Jelly Tots', CHOCOLATE_BAR: 'Chocolate Bar', COLA: 'Cola 330ml', PREMIUM_BEER: 'Premium Beer', DRY_PEANUTS: 'Dry Roasted Peanuts', }; // Common locations const locations = { VIP_LOUNGE: 'VIP LOUNGE', SPIRIT_BAR: 'SPIRIT BAR', MAIN_ENTRANCE: 'MAIN ENTRANCE', FOOD_COURT: 'FOOD COURT', }; // Common metrics config const metricEndpoints = { METRICS: '/dashboard/metrics', QUERY: '/dashboard/query', }; // Common query parameter configurations const queryParams = { METRICS: { COUNT: { aggregationType: 'COUNT' }, SUM: { aggregationType: 'SUM' }, }, SORT: { ASC: 'ASC', DESC: 'DESC', }, DIMENSIONS: { PRODUCT: ['productName'], LOCATION_PRODUCT: ['stationName', 'productName'], TIME_PRODUCT: ['date', 'productName'], STOCK_DETAIL: ['stationName', 'productName', 'initialStock', 'reorderLevel', 'unitPrice'], }, }; // Helper function to create metric response const createMetricResponse = (metric, currentValue, previousValue) => ({ metric, currentValue, previousValue, percentageChange: ((currentValue - previousValue) / previousValue) * 100, formattedValue: null, formattedChange: null, additionalData: { [metric]: currentValue, }, }); // Helper function to create product stock data const createProductStock = (stationName, productName, { currentStock, initialStock, reorderLevel, unitPrice, daysInStock, }) => { const stockRatio = Math.round((currentStock / initialStock) * 100); return { stationName, productName, currentStock, initialStock, reorderLevel, unitPrice, daysInStock, stockRatio, }; }; // Helper function for time series data const generateTimeSeriesData = (date, products) => products.map((p) => ({ date, productName: p.name, stockLevel: p.level })); // Helper function to create query params const createQueryParams = (dimensions, metrics, { limit, sortBy, sortDirection, aggregationType, } = {}) => ({ dimensions, metrics, ...(limit && { limit }), ...(sortBy && { sortBy }), ...(sortDirection && { sortDirection }), ...(aggregationType && { aggregationType }), }); // Helper function for depletion metrics const createDepletionData = (productName, { depletionPercentage, initialStock, currentStock, }) => ({ productName, depletionPercentage, initialStock, currentStock, }); export const mockApiRequestsConfig = [ // Total SKUs metric { path: metricEndpoints.METRICS, method: 'POST', params: createQueryParams(queryParams.DIMENSIONS.PRODUCT, ['totalSKUs'], queryParams.METRICS.COUNT), response: createMetricResponse('totalSKUs', 156, 142), }, // Stock Value metric { path: metricEndpoints.METRICS, method: 'POST', params: createQueryParams(queryParams.DIMENSIONS.PRODUCT, ['stockValue'], queryParams.METRICS.SUM), response: createMetricResponse('stockValue', 1256780.45, 1345890.23), }, // Low Stock Items metric { path: metricEndpoints.METRICS, method: 'POST', params: createQueryParams(queryParams.DIMENSIONS.PRODUCT, ['lowStockCount'], queryParams.METRICS.COUNT), response: createMetricResponse('lowStockCount', 12, 8), }, // Initial vs Current Inventory per SKU { path: metricEndpoints.QUERY, method: 'POST', params: createQueryParams(queryParams.DIMENSIONS.PRODUCT, ['initialStock', 'currentStock'], { limit: 10, sortBy: 'initialStock', sortDirection: queryParams.SORT.DESC, }), response: [ createProductStock(locations.VIP_LOUNGE, products.BLUEBERRY_MUFFIN, { currentStock: 2, initialStock: 40, reorderLevel: 10, unitPrice: 3.0, daysInStock: 5, }), createProductStock(locations.SPIRIT_BAR, products.BLUEBERRY_MUFFIN, { currentStock: 5, initialStock: 50, reorderLevel: 10, unitPrice: 2.25, daysInStock: 3, }), createProductStock(locations.MAIN_ENTRANCE, products.PREMIUM_BEER, { currentStock: 8, initialStock: 100, reorderLevel: 20, unitPrice: 4.75, daysInStock: 15, }), createProductStock(locations.FOOD_COURT, products.BLUEBERRY_MUFFIN, { currentStock: 12, initialStock: 120, reorderLevel: 30, unitPrice: 2.25, daysInStock: 10, }), createProductStock(locations.SPIRIT_BAR, products.COLA, { currentStock: 15, initialStock: 100, reorderLevel: 30, unitPrice: 2.5, daysInStock: 45, }), createProductStock(locations.MAIN_ENTRANCE, products.DRY_PEANUTS, { currentStock: 15, initialStock: 50, reorderLevel: 15, unitPrice: 1.99, daysInStock: 40, }), createProductStock(locations.SPIRIT_BAR, products.PREMIUM_BEER, { currentStock: 27, initialStock: 120, reorderLevel: 25, unitPrice: 4.75, daysInStock: 30, }), createProductStock(locations.FOOD_COURT, products.PREMIUM_BEER, { currentStock: 29, initialStock: 80, reorderLevel: 20, unitPrice: 4.5, daysInStock: 20, }), createProductStock(locations.VIP_LOUNGE, products.DRY_PEANUTS, { currentStock: 30, initialStock: 50, reorderLevel: 15, unitPrice: 2.5, daysInStock: 45, }), createProductStock(locations.MAIN_ENTRANCE, products.COLA, { currentStock: 32, initialStock: 150, reorderLevel: 40, unitPrice: 2.5, daysInStock: 20, }), ], }, // SKU Depletion Over Time { path: metricEndpoints.QUERY, method: 'POST', params: createQueryParams(queryParams.DIMENSIONS.TIME_PRODUCT, ['stockLevel'], { limit: 30, sortBy: 'date', sortDirection: queryParams.SORT.ASC, }), response: [ ...generateTimeSeriesData('2025-01-01', [ { name: products.PROCESSED_MILK, level: 100 }, { name: products.BILTONG, level: 100 }, { name: products.MUFFIN, level: 100 }, { name: products.JELLY_TOTS, level: 100 }, { name: products.CHOCOLATE_BAR, level: 100 }, ]), ...generateTimeSeriesData('2025-01-08', [ { name: products.PROCESSED_MILK, level: 78 }, { name: products.BILTONG, level: 82 }, { name: products.MUFFIN, level: 85 }, { name: products.JELLY_TOTS, level: 92 }, { name: products.CHOCOLATE_BAR, level: 87 }, ]), ...generateTimeSeriesData('2025-01-15', [ { name: products.PROCESSED_MILK, level: 62 }, { name: products.BILTONG, level: 72 }, { name: products.MUFFIN, level: 73 }, { name: products.JELLY_TOTS, level: 85 }, { name: products.CHOCOLATE_BAR, level: 78 }, ]), ...generateTimeSeriesData('2025-01-22', [ { name: products.PROCESSED_MILK, level: 48 }, { name: products.BILTONG, level: 59 }, { name: products.MUFFIN, level: 62 }, { name: products.JELLY_TOTS, level: 73 }, { name: products.CHOCOLATE_BAR, level: 65 }, ]), ...generateTimeSeriesData('2025-01-29', [ { name: products.PROCESSED_MILK, level: 32 }, { name: products.BILTONG, level: 45 }, { name: products.MUFFIN, level: 50 }, { name: products.JELLY_TOTS, level: 62 }, { name: products.CHOCOLATE_BAR, level: 53 }, ]), ...generateTimeSeriesData('2025-02-05', [ { name: products.PROCESSED_MILK, level: 20 }, { name: products.BILTONG, level: 32 }, { name: products.MUFFIN, level: 35 }, { name: products.JELLY_TOTS, level: 43 }, { name: products.CHOCOLATE_BAR, level: 40 }, ]), ], }, // Top Fast-Moving SKUs { path: metricEndpoints.QUERY, method: 'POST', params: createQueryParams(queryParams.DIMENSIONS.PRODUCT, ['depletionRate'], { limit: 3, sortBy: 'depletionRate', sortDirection: queryParams.SORT.DESC, }), response: [ { productName: products.PROCESSED_MILK, depletionRate: 80.0 }, { productName: products.BILTONG, depletionRate: 68.0 }, { productName: products.MUFFIN, depletionRate: 65.0 }, ], }, // Stock Status for Critical Items { path: metricEndpoints.QUERY, method: 'POST', params: createQueryParams(queryParams.DIMENSIONS.PRODUCT, ['stockPercentage'], { limit: 4, sortBy: 'stockPercentage', sortDirection: queryParams.SORT.ASC, }), response: [ { productName: products.PROCESSED_MILK, stockPercentage: 20.0 }, { productName: products.BILTONG, stockPercentage: 32.0 }, { productName: products.MUFFIN, stockPercentage: 35.0 }, ], }, // Inventory Depletion by Product { path: metricEndpoints.QUERY, method: 'POST', params: createQueryParams(queryParams.DIMENSIONS.PRODUCT, ['depletionPercentage'], { limit: 5, sortBy: 'depletionPercentage', sortDirection: queryParams.SORT.DESC, }), response: [ createDepletionData(products.PROCESSED_MILK, { depletionPercentage: 80, initialStock: 500, currentStock: 100, }), createDepletionData(products.BILTONG, { depletionPercentage: 68, initialStock: 625, currentStock: 200, }), createDepletionData(products.MUFFIN, { depletionPercentage: 65, initialStock: 800, currentStock: 280, }), createDepletionData(products.JELLY_TOTS, { depletionPercentage: 57, initialStock: 300, currentStock: 129, }), createDepletionData(products.CHOCOLATE_BAR, { depletionPercentage: 64, initialStock: 750, currentStock: 270, }), ], }, // Low Stock Items by Location { path: metricEndpoints.QUERY, method: 'POST', params: createQueryParams(queryParams.DIMENSIONS.STOCK_DETAIL, ['currentStock'], { sortBy: 'currentStock', sortDirection: queryParams.SORT.ASC, }), response: [ createProductStock(locations.VIP_LOUNGE, products.BLUEBERRY_MUFFIN, { currentStock: 2, initialStock: 40, reorderLevel: 10, unitPrice: 3.0, daysInStock: 5, }), createProductStock(locations.MAIN_ENTRANCE, products.PREMIUM_BEER, { currentStock: 8, initialStock: 100, reorderLevel: 20, unitPrice: 4.75, daysInStock: 15, }), createProductStock(locations.SPIRIT_BAR, products.BLUEBERRY_MUFFIN, { currentStock: 5, initialStock: 50, reorderLevel: 10, unitPrice: 2.25, daysInStock: 3, }), ], }, ];