add membership features endpoint and use it in mobile
This commit is contained in:
1 parent
091cb5ba85
commit
50ece15089
4 files changed
+90
-6
No files matched your search
@@ -1,14 +1,18 @@
|
||||
import { useAuth, useUser } from "@clerk/clerk-expo";
|
||||
import { useEffect, useState } from "react";
|
||||
import {
|
||||
getCurrentMembershipType,
|
||||
getMembershipFeatures,
|
||||
getCurrentMembershipFeaturesFromServer,
|
||||
type MembershipFeatures,
|
||||
type MembershipType,
|
||||
} from "../api/membership";
|
||||
import log from "../utils/logger";
|
||||
|
||||
const BASIC_FEATURES = getMembershipFeatures("basic");
|
||||
const BASIC_FEATURES: MembershipFeatures = {
|
||||
recommendationsPerMonth: 1,
|
||||
hydrationTracking: false,
|
||||
nutritionTracking: false,
|
||||
advancedStatistics: false,
|
||||
};
|
||||
|
||||
interface UseMembershipResult {
|
||||
membershipType: MembershipType;
|
||||
@@ -20,6 +24,7 @@ export function useMembership(): UseMembershipResult {
|
||||
const { user } = useUser();
|
||||
const { getToken, isSignedIn } = useAuth();
|
||||
const [membershipType, setMembershipType] = useState<MembershipType>("basic");
|
||||
const [features, setFeatures] = useState<MembershipFeatures>(BASIC_FEATURES);
|
||||
const [loading, setLoading] = useState(true);
|
||||
|
||||
useEffect(() => {
|
||||
@@ -29,6 +34,7 @@ export function useMembership(): UseMembershipResult {
|
||||
if (!isSignedIn || !user?.id) {
|
||||
if (isMounted) {
|
||||
setMembershipType("basic");
|
||||
setFeatures(BASIC_FEATURES);
|
||||
setLoading(false);
|
||||
}
|
||||
return;
|
||||
@@ -37,14 +43,16 @@ export function useMembership(): UseMembershipResult {
|
||||
try {
|
||||
setLoading(true);
|
||||
const token = await getToken();
|
||||
const type = await getCurrentMembershipType(user.id, token);
|
||||
const result = await getCurrentMembershipFeaturesFromServer(token);
|
||||
if (isMounted) {
|
||||
setMembershipType(type);
|
||||
setMembershipType(result.membershipType);
|
||||
setFeatures(result.features);
|
||||
}
|
||||
} catch (error) {
|
||||
log.error("Failed to load membership", error, { userId: user.id });
|
||||
if (isMounted) {
|
||||
setMembershipType("basic");
|
||||
setFeatures(BASIC_FEATURES);
|
||||
}
|
||||
} finally {
|
||||
if (isMounted) {
|
||||
@@ -62,7 +70,7 @@ export function useMembership(): UseMembershipResult {
|
||||
|
||||
return {
|
||||
membershipType,
|
||||
features: getMembershipFeatures(membershipType) || BASIC_FEATURES,
|
||||
features,
|
||||
loading,
|
||||
};
|
||||
}
|
||||
Reference in new issue
Block a user