Improve the frontend and repository layer
This commit is contained in:
@@ -38,7 +38,7 @@ import {
|
||||
|
||||
const ProductionAnalyticsPage: React.FC = () => {
|
||||
const { t } = useTranslation('production');
|
||||
const { canAccessAnalytics } = useSubscription();
|
||||
const { canAccessAnalytics, subscriptionInfo } = useSubscription();
|
||||
const currentTenant = useCurrentTenant();
|
||||
const tenantId = currentTenant?.id || '';
|
||||
|
||||
@@ -49,6 +49,24 @@ const ProductionAnalyticsPage: React.FC = () => {
|
||||
// Check if user has access to advanced analytics (professional/enterprise)
|
||||
const hasAdvancedAccess = canAccessAnalytics('advanced');
|
||||
|
||||
// Show loading state while subscription data is being fetched
|
||||
if (subscriptionInfo.loading) {
|
||||
return (
|
||||
<div className="space-y-6">
|
||||
<PageHeader
|
||||
title={t('analytics.production_analytics')}
|
||||
description={t('analytics.advanced_insights_professionals_enterprises')}
|
||||
/>
|
||||
<Card className="p-8 text-center">
|
||||
<div className="flex flex-col items-center gap-4">
|
||||
<div className="animate-spin rounded-full h-12 w-12 border-b-2 border-[var(--color-primary)]"></div>
|
||||
<p className="text-[var(--text-secondary)]">{t('common.loading') || 'Cargando información de suscripción...'}</p>
|
||||
</div>
|
||||
</Card>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
// If user doesn't have access to advanced analytics, show upgrade message
|
||||
if (!hasAdvancedAccess) {
|
||||
return (
|
||||
@@ -177,87 +195,57 @@ const ProductionAnalyticsPage: React.FC = () => {
|
||||
<div className="min-h-screen">
|
||||
{/* Overview Tab - Mixed Dashboard */}
|
||||
{activeTab === 'overview' && (
|
||||
<div className="grid gap-6 lg:grid-cols-2 xl:grid-cols-3">
|
||||
<div className="lg:col-span-2 xl:col-span-2">
|
||||
<LiveBatchTrackerWidget />
|
||||
</div>
|
||||
<div>
|
||||
<OnTimeCompletionWidget />
|
||||
</div>
|
||||
<div>
|
||||
<QualityScoreTrendsWidget />
|
||||
</div>
|
||||
<div>
|
||||
<WasteDefectTrackerWidget />
|
||||
</div>
|
||||
<div className="lg:col-span-2 xl:col-span-1">
|
||||
<CapacityUtilizationWidget />
|
||||
</div>
|
||||
<div className="grid gap-6">
|
||||
<LiveBatchTrackerWidget />
|
||||
<OnTimeCompletionWidget />
|
||||
<QualityScoreTrendsWidget />
|
||||
<WasteDefectTrackerWidget />
|
||||
<CapacityUtilizationWidget />
|
||||
</div>
|
||||
)}
|
||||
|
||||
{/* Bakery Operations Tab */}
|
||||
{activeTab === 'operations' && (
|
||||
<div className="grid gap-6">
|
||||
<div className="grid gap-6 lg:grid-cols-2">
|
||||
<TodaysScheduleSummaryWidget />
|
||||
<OnTimeCompletionWidget />
|
||||
</div>
|
||||
<div>
|
||||
<LiveBatchTrackerWidget />
|
||||
</div>
|
||||
<div>
|
||||
<CapacityUtilizationWidget />
|
||||
</div>
|
||||
<TodaysScheduleSummaryWidget />
|
||||
<OnTimeCompletionWidget />
|
||||
<LiveBatchTrackerWidget />
|
||||
<CapacityUtilizationWidget />
|
||||
</div>
|
||||
)}
|
||||
|
||||
{/* Cost & Efficiency Tab */}
|
||||
{activeTab === 'cost-efficiency' && (
|
||||
<div className="grid gap-6">
|
||||
<div className="grid gap-6 lg:grid-cols-2">
|
||||
<CostPerUnitWidget />
|
||||
<WasteDefectTrackerWidget />
|
||||
</div>
|
||||
<div>
|
||||
<YieldPerformanceWidget />
|
||||
</div>
|
||||
<CostPerUnitWidget />
|
||||
<WasteDefectTrackerWidget />
|
||||
<YieldPerformanceWidget />
|
||||
</div>
|
||||
)}
|
||||
|
||||
{/* Quality Assurance Tab */}
|
||||
{activeTab === 'quality' && (
|
||||
<div className="grid gap-6">
|
||||
<div className="grid gap-6 lg:grid-cols-2">
|
||||
<QualityScoreTrendsWidget />
|
||||
<WasteDefectTrackerWidget />
|
||||
</div>
|
||||
<div>
|
||||
<TopDefectTypesWidget />
|
||||
</div>
|
||||
<QualityScoreTrendsWidget />
|
||||
<WasteDefectTrackerWidget />
|
||||
<TopDefectTypesWidget />
|
||||
</div>
|
||||
)}
|
||||
|
||||
{/* Equipment & Maintenance Tab */}
|
||||
{activeTab === 'equipment' && (
|
||||
<div className="grid gap-6">
|
||||
<div className="grid gap-6 lg:grid-cols-2">
|
||||
<EquipmentStatusWidget />
|
||||
<MaintenanceScheduleWidget />
|
||||
</div>
|
||||
<div>
|
||||
<EquipmentEfficiencyWidget />
|
||||
</div>
|
||||
<EquipmentStatusWidget />
|
||||
<MaintenanceScheduleWidget />
|
||||
<EquipmentEfficiencyWidget />
|
||||
</div>
|
||||
)}
|
||||
|
||||
{/* AI Insights Tab */}
|
||||
{activeTab === 'ai-insights' && (
|
||||
<div className="grid gap-6">
|
||||
<div className="grid gap-6 lg:grid-cols-2">
|
||||
<AIInsightsWidget />
|
||||
<PredictiveMaintenanceWidget />
|
||||
</div>
|
||||
<AIInsightsWidget />
|
||||
<PredictiveMaintenanceWidget />
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user