Skip to content

Commit f9702a5

Browse files
committed
Clean up of plan
1 parent 3a25555 commit f9702a5

File tree

4 files changed

+20
-65
lines changed

4 files changed

+20
-65
lines changed

src/components/Header/Header.tsx

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -25,17 +25,11 @@ const Header: React.FC<HeaderProps> = ({isSubpage = false}) => {
2525
<button onClick={() => window.location.hash = 'pricing'} className="nav-link">Pricing</button>
2626
{user ? (
2727
<button
28-
className="profile-button"
28+
className="nav-link"
2929
onClick={() => window.location.hash = 'account'}
3030
title={`${user.displayName || user.email} - View Account`}
3131
>
32-
{user.picture ? (
33-
<img src={user.picture} alt="Profile" className="profile-image"/>
34-
) : (
35-
<div className="profile-avatar">
36-
{user.displayName ? user.displayName[0].toUpperCase() : user.email[0].toUpperCase()}
37-
</div>
38-
)}
32+
Profile
3933
</button>
4034
) : (
4135
<>

src/contexts/AuthContext.tsx

Lines changed: 11 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,14 @@
11
import React, {createContext, ReactNode, useCallback, useContext, useEffect, useState} from 'react';
22
import {GoogleAuthProvider, signInWithCredential} from 'firebase/auth';
33
import {auth} from '../config/firebase';
4-
import {getUserFromFirestore} from '../services/userService';
5-
6-
interface AppUser {
7-
id: string;
8-
displayName?: string;
9-
email: string;
10-
tier: 'free' | 'premium' | 'unlimited';
11-
remainingMessages: number;
12-
lastMessageReset?: Date;
13-
picture?: string;
14-
}
4+
import {getUserFromFirestore, User} from '../services/userService';
155

166
interface AuthContextType {
17-
user: AppUser | null;
7+
user: User | null;
188
isLoading: boolean;
199
login: (credential: string) => Promise<void>;
2010
logout: () => void;
21-
updateUser: (user: AppUser) => void;
11+
updateUser: (user: User) => void;
2212
refreshUserData: () => Promise<void>;
2313
}
2414

@@ -29,7 +19,7 @@ interface AuthProviderProps {
2919
}
3020

3121
export const AuthProvider: React.FC<AuthProviderProps> = ({children}) => {
32-
const [user, setUser] = useState<AppUser | null>(null);
22+
const [user, setUser] = useState<User | null>(null);
3323
const [isLoading, setIsLoading] = useState(true);
3424

3525
useEffect(() => {
@@ -71,14 +61,12 @@ export const AuthProvider: React.FC<AuthProviderProps> = ({children}) => {
7161
let userData = await getUserFromFirestore(firebaseUser.uid);
7262

7363
// Convert Firestore user to AppUser
74-
const appUser: AppUser = {
64+
const appUser: User = {
7565
id: userData.id,
7666
displayName: userData.displayName,
7767
email: userData.email,
78-
picture: userData.picture,
79-
tier: userData.tier,
80-
remainingMessages: userData.messagesRemaining, // Map messagesRemaining to remainingMessages
81-
lastMessageReset: userData.lastMessageReset,
68+
plan: userData.plan,
69+
messagesRemaining: userData.messagesRemaining, // Map messagesRemaining to remainingMessages
8270
};
8371

8472
// Store user data and token
@@ -112,7 +100,7 @@ export const AuthProvider: React.FC<AuthProviderProps> = ({children}) => {
112100
}
113101
};
114102

115-
const updateUser = (updatedUser: AppUser) => {
103+
const updateUser = (updatedUser: User) => {
116104
setUser(updatedUser);
117105
localStorage.setItem('salamander_user', JSON.stringify(updatedUser));
118106
};
@@ -123,14 +111,12 @@ export const AuthProvider: React.FC<AuthProviderProps> = ({children}) => {
123111
try {
124112
const userData = await getUserFromFirestore(user.id);
125113
if (userData) {
126-
const appUser: AppUser = {
114+
const appUser: User = {
127115
id: userData.id,
128116
displayName: userData.displayName,
129117
email: userData.email,
130-
picture: userData.picture,
131-
tier: userData.tier,
132-
remainingMessages: userData.messagesRemaining,
133-
lastMessageReset: userData.lastMessageReset,
118+
plan: userData.plan,
119+
messagesRemaining: userData.messagesRemaining,
134120
};
135121

136122
setUser(appUser);

src/pages/Account/Account.tsx

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -243,7 +243,7 @@ const Account: React.FC = () => {
243243
);
244244
}
245245

246-
const plan = getPlanById(user.tier);
246+
const plan = getPlanById(user.plan);
247247
if (!plan) {
248248
return (
249249
<div className="account-container">
@@ -260,7 +260,7 @@ const Account: React.FC = () => {
260260
const isUnlimited = plan.messageLimit === -1;
261261
const usagePercent = isUnlimited
262262
? 0.0
263-
: plan.messageLimit > 0 ? (plan.messageLimit - user.remainingMessages) / plan.messageLimit : 0;
263+
: plan.messageLimit > 0 ? (plan.messageLimit - user.messagesRemaining) / plan.messageLimit : 0;
264264

265265
return (
266266
<div className="account-container">
@@ -269,13 +269,6 @@ const Account: React.FC = () => {
269269
{/* User Header Card */}
270270
<div className="account-card user-card">
271271
<div className="user-info">
272-
<div className="user-avatar">
273-
{user.picture ? (
274-
<img src={user.picture} alt="Profile" className="user-avatar-image"/>
275-
) : (
276-
<span>{user.displayName ? user.displayName[0].toUpperCase() : user.email[0].toUpperCase()}</span>
277-
)}
278-
</div>
279272
<div className="user-details">
280273
<h2>{user.displayName || 'User'}</h2>
281274
<p className="user-email">{user.email}</p>
@@ -300,7 +293,7 @@ const Account: React.FC = () => {
300293
<div className="usage-stats">
301294
<span className="usage-label">Messages Remaining</span>
302295
<span className="usage-count">
303-
{user.remainingMessages}/{plan.messageLimit}
296+
{user.messagesRemaining}/{plan.messageLimit}
304297
</span>
305298
</div>
306299
<div className="usage-bar">
@@ -330,7 +323,7 @@ const Account: React.FC = () => {
330323
</div>
331324
<div className="plans-list">
332325
{plans.map((planOption) => {
333-
const isCurrentPlan = planOption.id === user.tier;
326+
const isCurrentPlan = planOption.id === user.plan;
334327
const planPrice = planOption.priceInCents === 0 ? 'Free' : `$${(planOption.priceInCents / 100).toFixed(2)}/month`;
335328
const messageText = planOption.messageLimit === -1 ? 'Unlimited messages' : `${planOption.messageLimit} messages per day`;
336329

src/services/userService.ts

Lines changed: 3 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,12 @@
1-
import {collection, doc, getDoc, getDocs, updateDoc, query, where} from 'firebase/firestore';
1+
import {collection, doc, getDoc, getDocs, query, where} from 'firebase/firestore';
22
import {db} from '../config/firebase';
33

44
export interface User {
55
id: string;
66
displayName?: string;
77
email: string;
8-
tier: 'free' | 'premium' | 'unlimited';
8+
plan: 'free' | 'pro';
99
messagesRemaining: number;
10-
lastMessageReset?: Date;
11-
picture?: string;
1210
}
1311

1412
export interface Plan {
@@ -25,7 +23,6 @@ export interface Runner {
2523
id: string;
2624
userId: string;
2725
name: string;
28-
status: 'online' | 'offline' | 'running';
2926
lastSeen?: Date;
3027
createdAt: Date;
3128
directory?: string;
@@ -51,10 +48,8 @@ export const getUserFromFirestore = async (userId: string): Promise<User> => {
5148
id: userId,
5249
displayName: data.displayName,
5350
email: data.email,
54-
tier: data.tier || 'free',
51+
plan: data.plan || 'free',
5552
messagesRemaining: data.messagesRemaining || 0,
56-
lastMessageReset: data.lastMessageReset?.toDate(),
57-
picture: data.picture,
5853
};
5954
} else {
6055
console.log('User not found in Firestore, returning null for userId:', userId);
@@ -72,18 +67,6 @@ export const getUserFromFirestore = async (userId: string): Promise<User> => {
7267
}
7368
};
7469

75-
export const updateUserInFirestore = async (userId: string, updates: Partial<User>): Promise<void> => {
76-
try {
77-
await updateDoc(doc(db, 'users', userId), {
78-
...updates,
79-
updatedAt: new Date(),
80-
});
81-
} catch (error) {
82-
console.error('Error updating user in Firestore:', error);
83-
throw error;
84-
}
85-
};
86-
8770
export const getPlansFromFirestore = async (): Promise<Plan[]> => {
8871
try {
8972
const plansCollection = collection(db, 'plans');
@@ -123,7 +106,6 @@ export const getRunnersFromFirestore = async (userId: string): Promise<Runner[]>
123106
id: doc.id,
124107
userId: data.userId,
125108
name: data.name || 'Unnamed Runner',
126-
status: data.online ? 'online' : 'offline',
127109
lastSeen: data.lastUsed?.toDate(),
128110
createdAt: data.createdAt?.toDate() || new Date(),
129111
directory: data.directory,

0 commit comments

Comments
 (0)