feat: add subscription loading and display logic to HomePage component; implement error handling for subscription retrieval

This commit is contained in:
Usman Baig
2026-01-31 17:52:05 +01:00
parent c77968c797
commit c78874ea88

View File

@@ -5,6 +5,7 @@ import Link from 'next/link'
import { useAuth } from '@/lib/auth/context' import { useAuth } from '@/lib/auth/context'
import { initiateOAuthFlow, initiateSignupFlow } from '@/lib/api/oauth' import { initiateOAuthFlow, initiateSignupFlow } from '@/lib/api/oauth'
import { listSites, deleteSite, type Site } from '@/lib/api/sites' import { listSites, deleteSite, type Site } from '@/lib/api/sites'
import { getSubscription, type SubscriptionDetails } from '@/lib/api/billing'
import { LoadingOverlay } from '@ciphera-net/ui' import { LoadingOverlay } from '@ciphera-net/ui'
import SiteList from '@/components/sites/SiteList' import SiteList from '@/components/sites/SiteList'
import { Button } from '@ciphera-net/ui' import { Button } from '@ciphera-net/ui'
@@ -97,10 +98,13 @@ export default function HomePage() {
const { user, loading: authLoading } = useAuth() const { user, loading: authLoading } = useAuth()
const [sites, setSites] = useState<Site[]>([]) const [sites, setSites] = useState<Site[]>([])
const [sitesLoading, setSitesLoading] = useState(true) const [sitesLoading, setSitesLoading] = useState(true)
const [subscription, setSubscription] = useState<SubscriptionDetails | null>(null)
const [subscriptionLoading, setSubscriptionLoading] = useState(false)
useEffect(() => { useEffect(() => {
if (user?.org_id) { if (user?.org_id) {
loadSites() loadSites()
loadSubscription()
} }
}, [user]) }, [user])
@@ -117,6 +121,18 @@ export default function HomePage() {
} }
} }
const loadSubscription = async () => {
try {
setSubscriptionLoading(true)
const sub = await getSubscription()
setSubscription(sub)
} catch {
setSubscription(null)
} finally {
setSubscriptionLoading(false)
}
}
const handleDelete = async (id: string) => { const handleDelete = async (id: string) => {
if (!confirm('Are you sure you want to delete this site? This action cannot be undone.')) { if (!confirm('Are you sure you want to delete this site? This action cannot be undone.')) {
return return
@@ -258,7 +274,21 @@ export default function HomePage() {
</div> </div>
<div className="rounded-xl border border-neutral-200 bg-brand-orange/10 p-4 dark:border-neutral-800"> <div className="rounded-xl border border-neutral-200 bg-brand-orange/10 p-4 dark:border-neutral-800">
<p className="text-sm text-brand-orange">Plan Status</p> <p className="text-sm text-brand-orange">Plan Status</p>
<p className="text-lg font-bold text-brand-orange">Pro Plan</p> <p className="text-lg font-bold text-brand-orange">
{subscriptionLoading
? '...'
: (() => {
if (!subscription) return 'Free Plan'
const raw =
subscription.plan_id?.startsWith('price_')
? 'Pro'
: subscription.plan_id === 'free' || !subscription.plan_id
? 'Free'
: subscription.plan_id
const label = raw === 'Free' || raw === 'Pro' ? raw : raw.charAt(0).toUpperCase() + raw.slice(1)
return `${label} Plan`
})()}
</p>
</div> </div>
</div> </div>