Fixing vendor dashboard area

This commit is contained in:
2025-11-21 23:15:25 +01:00
parent 5aff76a27e
commit 86f1e16ef2
38 changed files with 312 additions and 433 deletions

View File

@@ -3,8 +3,23 @@
* Vendor dashboard page logic
*/
// ✅ Use centralized logger
const vendorDashLog = window.LogConfig.loggers.dashboard;
console.log('[VENDOR DASHBOARD] Loading...');
console.log('[VENDOR DASHBOARD] data function exists?', typeof data);
function vendorDashboard() {
console.log('[VENDOR DASHBOARD] vendorDashboard() called');
console.log('[VENDOR DASHBOARD] data function exists inside?', typeof data);
return {
// ✅ Inherit base layout state (includes vendorCode, dark mode, menu states)
...data(),
// ✅ Set page identifier
currentPage: 'dashboard',
loading: false,
error: '',
stats: {
@@ -17,6 +32,18 @@ function vendorDashboard() {
recentProducts: [],
async init() {
// Guard against multiple initialization
if (window._vendorDashboardInitialized) {
return;
}
window._vendorDashboardInitialized = true;
// IMPORTANT: Call parent init first to set vendorCode from URL
const parentInit = data().init;
if (parentInit) {
await parentInit.call(this);
}
await this.loadDashboardData();
},
@@ -26,31 +53,40 @@ function vendorDashboard() {
try {
// Load stats
// NOTE: apiClient prepends /api/v1, and vendor context middleware handles vendor detection
// So we just call /vendor/dashboard/stats → becomes /api/v1/vendor/dashboard/stats
const statsResponse = await apiClient.get(
`/api/v1/vendors/${this.vendorCode}/stats`
`/vendor/dashboard/stats`
);
this.stats = statsResponse;
// Map API response to stats (similar to admin dashboard pattern)
this.stats = {
products_count: statsResponse.products?.total || 0,
orders_count: statsResponse.orders?.total || 0,
customers_count: statsResponse.customers?.total || 0,
revenue: statsResponse.revenue?.total || 0
};
// Load recent orders
const ordersResponse = await apiClient.get(
`/api/v1/vendors/${this.vendorCode}/orders?limit=5&sort=created_at:desc`
`/vendor/orders?limit=5&sort=created_at:desc`
);
this.recentOrders = ordersResponse.items || [];
// Load recent products
const productsResponse = await apiClient.get(
`/api/v1/vendors/${this.vendorCode}/products?limit=5&sort=created_at:desc`
`/vendor/products?limit=5&sort=created_at:desc`
);
this.recentProducts = productsResponse.items || [];
logInfo('Dashboard data loaded', {
vendorDashLog.info('Dashboard data loaded', {
stats: this.stats,
orders: this.recentOrders.length,
products: this.recentProducts.length
});
} catch (error) {
logError('Failed to load dashboard data', error);
vendorDashLog.error('Failed to load dashboard data', error);
this.error = 'Failed to load dashboard data. Please try refreshing the page.';
} finally {
this.loading = false;