Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> - Business Dashboard: revenue/orders/customers/AOV/top products/low stock/recent activity/warnings/completion% (Overview tab) - Marketplace Health: real completion checks (images, SEO, categories, reviews, orders, translations, homepage, backend, performance) with clickable recommendations - Product Analytics: top selling/most reviewed/worst rated/hidden/archived counts; top-viewed honestly marked Unknown (no view tracking exists) - Customer Analytics: new/returning customers, average spend, retention - derived from real order data - Search & Traffic tabs: honest 'Unknown - available after backend integration' placeholders, no fabricated numbers - Recommendations engine: actionable cards (missing images/SEO/category, empty categories, incomplete homepage, unpublished static pages) linking to the relevant admin page - System Monitoring: added real draft/publish/sync/backend-connectivity state from AdminDashboardFacade - CSV export extended to top products and health checks; added print action - New adminAnalytics.* and adminMarketplaceHealth.* i18n namespaces (en/ru/hy), no raw i18n keys - Reused existing shared UI (app-table/app-badge/app-skeleton/app-empty-state) and content-health-widget completion-meter pattern - no new backend APIs, no storage changes
82 lines
1.9 KiB
TypeScript
82 lines
1.9 KiB
TypeScript
export type AdminAnalyticsDateRange = 7 | 30 | 90;
|
|
|
|
export interface AdminAnalyticsSummary {
|
|
revenueTotal: number;
|
|
currency: string;
|
|
ordersCount: number;
|
|
avgOrderValue: number;
|
|
productsCount: number;
|
|
categoriesCount: number;
|
|
customersCount: number;
|
|
/** null = unknown - no visitor/traffic tracking exists yet. Never fabricated. */
|
|
conversionRate: number | null;
|
|
}
|
|
|
|
export interface AdminAnalyticsSeriesPoint {
|
|
date: string;
|
|
value: number;
|
|
}
|
|
|
|
export interface AdminAnalyticsTopProduct {
|
|
productId: string;
|
|
name: string;
|
|
quantity: number;
|
|
revenue: number;
|
|
}
|
|
|
|
export interface AdminLowStockProduct {
|
|
productId: string;
|
|
name: string;
|
|
quantity: number;
|
|
stockStatus: 'low_stock' | 'out_of_stock';
|
|
}
|
|
|
|
export interface AdminRecentActivityEntry {
|
|
id: string;
|
|
labelKey: string;
|
|
timestamp: number;
|
|
}
|
|
|
|
export type AdminMarketplaceHealthStatus = 'healthy' | 'attention' | 'unhealthy' | 'unknown';
|
|
|
|
export interface AdminMarketplaceHealthCheck {
|
|
code: string;
|
|
labelKey: string;
|
|
status: AdminMarketplaceHealthStatus;
|
|
displayValue?: string | null;
|
|
actionRoute?: string[];
|
|
}
|
|
|
|
export interface AdminProductAnalyticsRow {
|
|
productId: string;
|
|
name: string;
|
|
value: number;
|
|
}
|
|
|
|
export interface AdminProductAnalytics {
|
|
topSelling: AdminAnalyticsTopProduct[];
|
|
mostReviewed: AdminProductAnalyticsRow[];
|
|
worstRated: AdminProductAnalyticsRow[];
|
|
hiddenCount: number;
|
|
archivedCount: number;
|
|
}
|
|
|
|
export interface AdminCustomerAnalytics {
|
|
newCustomers: number;
|
|
returningCustomers: number;
|
|
averageSpend: number;
|
|
currency: string;
|
|
/** null = unknown when there are no customers in range to compute a rate from. */
|
|
retentionPercent: number | null;
|
|
}
|
|
|
|
export type AdminRecommendationSeverity = 'info' | 'warning' | 'critical';
|
|
|
|
export interface AdminRecommendationCard {
|
|
id: string;
|
|
labelKey: string;
|
|
descriptionKey?: string;
|
|
severity: AdminRecommendationSeverity;
|
|
route: string[];
|
|
}
|