WellNuo/hooks/useSubscription.ts
Sergei 7cb07c09ce Major UI/UX updates: Voice, Subscription, Beneficiaries, Profile
- Voice tab: simplified interface, voice picker improvements
- Subscription: Stripe integration, purchase flow updates
- Beneficiaries: dashboard, sharing, improved management
- Profile: drawer, edit, help, privacy sections
- Theme: expanded constants, new colors
- New components: MockDashboard, ProfileDrawer, Toast
- Backend: Stripe routes additions
- Auth: activate, add-loved-one, purchase screens
2025-12-29 15:36:44 -08:00

46 lines
1.3 KiB
TypeScript

import { useMemo } from 'react';
import { useBeneficiary } from '@/contexts/BeneficiaryContext';
import type { BeneficiarySubscription } from '@/types';
export interface SubscriptionState {
subscription: BeneficiarySubscription | null;
beneficiaryName: string | null;
beneficiaryId: number | null;
isActive: boolean;
daysRemaining: number;
loading: boolean;
}
export function useSubscription(): SubscriptionState {
const { currentBeneficiary } = useBeneficiary();
const subscription = useMemo(() => {
if (!currentBeneficiary?.subscription) return null;
const sub = currentBeneficiary.subscription;
// Check if expired
if (sub.endDate && new Date(sub.endDate) < new Date()) {
return { ...sub, status: 'expired' as const };
}
return sub;
}, [currentBeneficiary?.subscription]);
const isActive = subscription?.status === 'active';
const daysRemaining = useMemo(() => {
if (!subscription?.endDate) return 0;
return Math.max(0, Math.ceil((new Date(subscription.endDate).getTime() - Date.now()) / (1000 * 60 * 60 * 24)));
}, [subscription?.endDate]);
return {
subscription,
beneficiaryName: currentBeneficiary?.name || null,
beneficiaryId: currentBeneficiary?.id || null,
isActive,
daysRemaining,
loading: false,
};
}