diff --git a/src/pages/Dashboard.js b/src/pages/Dashboard.js index eb9429a..ee8ad38 100644 --- a/src/pages/Dashboard.js +++ b/src/pages/Dashboard.js @@ -7,7 +7,7 @@ import { Button } from '../components/ui/button'; import { Badge } from '../components/ui/badge'; import Navbar from '../components/Navbar'; import MemberFooter from '../components/MemberFooter'; -import { Calendar, User, CheckCircle, Clock, AlertCircle, Mail, Users, Image, FileText, DollarSign, Scale } from 'lucide-react'; +import { Calendar, User, CheckCircle, Clock, AlertCircle, Mail, Users, Image, FileText, DollarSign, Scale, Receipt, Heart, CreditCard } from 'lucide-react'; import { toast } from 'sonner'; const Dashboard = () => { @@ -17,6 +17,7 @@ const Dashboard = () => { const [resendLoading, setResendLoading] = useState(false); const [eventActivity, setEventActivity] = useState(null); const [activityLoading, setActivityLoading] = useState(true); + const [activeTransactionTab, setActiveTransactionTab] = useState('all'); const joinedDate = user?.member_since || user?.created_at; useEffect(() => { @@ -180,7 +181,7 @@ const Dashboard = () => { {/* Grid Layout */} -
+
{/* Quick Stats */}

@@ -219,19 +220,41 @@ const Dashboard = () => { )}

+ +

+ Membership Info +

+
+ + {user?.subscription_start_date && user?.subscription_end_date && ( + <> +
+

Membership Period

+

+ {new Date(user.subscription_start_date).toLocaleDateString()} - {new Date(user.subscription_end_date).toLocaleDateString()} +

+
+
+

Days Remaining

+

+ {Math.max(0, Math.ceil((new Date(user.subscription_end_date) - new Date()) / (1000 * 60 * 60 * 24)))} days +

+
+ + )} +
+
{/* Upcoming Events */} - +

- Upcoming Events + My Event Activity

-
@@ -313,155 +336,129 @@ const Dashboard = () => {
)} - {/* Event Activity Section */} -
-
-

- My Event Activity + {/* Transaction History Section */} + + {/* Header */} +
+
+ +
+

+ Transaction History

- {activityLoading ? ( -

Loading event activity...

- ) : eventActivity ? ( -
- {/* Stats Cards */} -
- -
-
- -
-
-

Total RSVPs

-

- {eventActivity.total_rsvps} -

-
-
-
- -
-
- -
-
-

Events Attended

-

- {eventActivity.total_attended} -

-
-
-
+ {/* Stats Row */} +
+
+
+ + + Total Subscriptions +
- - {/* Upcoming RSVP'd Events */} - {eventActivity.upcoming_events && eventActivity.upcoming_events.length > 0 && ( - -

- Upcoming Events (RSVP'd) -

-
- {eventActivity.upcoming_events.map((event) => ( - -
-
-
-

{event.title}

-

- {new Date(event.start_at).toLocaleDateString()} at{' '} - {new Date(event.start_at).toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })} -

-

{event.location}

-
- - {event.rsvp_status === 'yes' ? 'Going' : - event.rsvp_status === 'maybe' ? 'Maybe' : 'Not Going'} - -
-
- - ))} -
-
- )} - - {/* Past Events & Attendance */} - {eventActivity.past_events && eventActivity.past_events.length > 0 && ( - -

- Past Events -

-
- {eventActivity.past_events.slice(0, 5).map((event) => ( -
-
-
-

{event.title}

-

- {new Date(event.start_at).toLocaleDateString()} at{' '} - {new Date(event.start_at).toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })} -

-
-
- - {event.attended ? 'Attended' : 'Did not attend'} - - {event.attended && event.attended_at && ( -

- Checked in: {new Date(event.attended_at).toLocaleDateString()} -

- )} -
-
-
- ))} -
- {eventActivity.past_events.length > 5 && ( -

- Showing 5 of {eventActivity.past_events.length} past events -

- )} -
- )} - - {/* No Events Message */} - {(!eventActivity.upcoming_events || eventActivity.upcoming_events.length === 0) && - (!eventActivity.past_events || eventActivity.past_events.length === 0) && ( - -
- -

- No Event Activity Yet -

-

- Browse upcoming events and RSVP to start building your event history! -

- - - -
-
- )} +

+ $30.00 +

+

+ 1 payment(s) +

- ) : ( - -
- -

- Failed to load event activity. Please try refreshing the page. +

+
+ + + Total Donations + +
+

+ $0.00 +

+

+ 0 donation(s) +

+
+
+ + {/* Filter Tabs */} +
+ + + +
+ + {/* Transaction List */} +
+ {(activeTransactionTab === 'all' || activeTransactionTab === 'subscriptions') && ( +
+
+
+
+
+ + Annual Membership + + + active + +
+
+ + Dec 16, 2025 + + Custom +
+ + Manual Payment + +
+
+ + $30.00 + +
+ )} + {activeTransactionTab === 'donations' && ( +
+ +

+ No donations yet

- - )} -
+ )} +
+ +
diff --git a/src/pages/members/Financials.js b/src/pages/members/Financials.js index 5953851..7f8ac96 100644 --- a/src/pages/members/Financials.js +++ b/src/pages/members/Financials.js @@ -160,13 +160,9 @@ export default function Financials() {
{/* Year Badge */} -
- -
- {report.year} -
-
Fiscal Year
-
+
+ +
{/* Report Details */}
diff --git a/src/pages/members/NewsletterArchive.js b/src/pages/members/NewsletterArchive.js index 45576d4..9febb0a 100644 --- a/src/pages/members/NewsletterArchive.js +++ b/src/pages/members/NewsletterArchive.js @@ -167,9 +167,9 @@ export default function NewsletterArchive() { {groupedNewsletters[year].map(newsletter => (
-
- -
+
+ +

{newsletter.title}