Add role-based filtering and imporve code

This commit is contained in:
Urtzi Alfaro
2025-10-15 16:12:49 +02:00
parent 96ad5c6692
commit 8f9e9a7edc
158 changed files with 11033 additions and 1544 deletions

View File

@@ -4,11 +4,9 @@
import { useState, useEffect, useCallback } from 'react';
import { subscriptionService } from '../services/subscription';
import {
SUBSCRIPTION_PLANS,
ANALYTICS_LEVELS,
AnalyticsLevel,
SubscriptionPlanKey
import {
SUBSCRIPTION_TIERS,
SubscriptionTier
} from '../types/subscription';
import { useCurrentTenant } from '../../stores';
import { useAuthUser } from '../../stores/auth.store';
@@ -28,7 +26,7 @@ export interface SubscriptionLimits {
export interface SubscriptionInfo {
plan: string;
status: 'active' | 'inactive' | 'past_due' | 'cancelled';
status: 'active' | 'inactive' | 'past_due' | 'cancelled' | 'trialing';
features: Record<string, any>;
loading: boolean;
error?: string;
@@ -101,14 +99,14 @@ export const useSubscription = () => {
const getAnalyticsAccess = useCallback((): { hasAccess: boolean; level: string; reason?: string } => {
const { plan } = subscriptionInfo;
// Convert plan to typed plan key if it matches our known plans
let planKey: keyof typeof SUBSCRIPTION_PLANS | undefined;
if (plan === SUBSCRIPTION_PLANS.STARTER) planKey = SUBSCRIPTION_PLANS.STARTER;
else if (plan === SUBSCRIPTION_PLANS.PROFESSIONAL) planKey = SUBSCRIPTION_PLANS.PROFESSIONAL;
else if (plan === SUBSCRIPTION_PLANS.ENTERPRISE) planKey = SUBSCRIPTION_PLANS.ENTERPRISE;
// Convert plan string to typed SubscriptionTier
let tierKey: SubscriptionTier | undefined;
if (plan === SUBSCRIPTION_TIERS.STARTER) tierKey = SUBSCRIPTION_TIERS.STARTER;
else if (plan === SUBSCRIPTION_TIERS.PROFESSIONAL) tierKey = SUBSCRIPTION_TIERS.PROFESSIONAL;
else if (plan === SUBSCRIPTION_TIERS.ENTERPRISE) tierKey = SUBSCRIPTION_TIERS.ENTERPRISE;
if (planKey) {
const analyticsLevel = subscriptionService.getAnalyticsLevelForPlan(planKey);
if (tierKey) {
const analyticsLevel = subscriptionService.getAnalyticsLevelForTier(tierKey);
return { hasAccess: true, level: analyticsLevel };
}