|
1 | | -<h1>Membership</h1> |
2 | | - |
3 | 1 | @if (user(); as user) { |
4 | 2 | <!-- Authenticated User View --> |
5 | 3 | <div class="authenticated-view"> |
@@ -79,116 +77,112 @@ <h3>Create Your Doula Profile</h3> |
79 | 77 | } |
80 | 78 |
|
81 | 79 | <div class="welcome-section"> |
82 | | - <p>Welcome back, {{ userDisplayName() }}!</p> |
| 80 | + <h1 class="welcome-greeting">Welcome back, {{ userDisplayName() }}!</h1> |
83 | 81 |
|
84 | | - <!-- User Membership Information --> |
85 | 82 | @if (userDocument(); as userDoc) { |
86 | | - <div class="membership-info-section"> |
87 | | - <h3>Your Account Details</h3> |
88 | | - <div class="membership-details"> |
| 83 | + @if (userDoc.membershipActive) { |
| 84 | + <span class="membership-badge">Active Member</span> |
| 85 | + } |
| 86 | + } |
| 87 | + </div> |
| 88 | + |
| 89 | + @if (userDocument(); as userDoc) { |
| 90 | + <div class="membership-cards"> |
| 91 | + <!-- Account Details Card --> |
| 92 | + <section class="membership-card card-1" aria-labelledby="account-heading"> |
| 93 | + <h2 id="account-heading" class="section-heading">Your Account Details</h2> |
| 94 | + <dl class="details-list"> |
89 | 95 | @if (userFullName(); as fullName) { |
90 | | - <div class="detail-item"> |
91 | | - <span class="detail-label">Full Name:</span> |
92 | | - <span class="detail-value">{{ fullName }}</span> |
93 | | - </div> |
| 96 | + <dt>Full Name</dt> |
| 97 | + <dd>{{ fullName }}</dd> |
94 | 98 | } |
95 | 99 |
|
96 | 100 | @if (membershipCreated(); as createdDate) { |
97 | | - <div class="detail-item"> |
98 | | - <span class="detail-label">Account Created:</span> |
99 | | - <span class="detail-value">{{ createdDate | date: 'MMMM d, yyyy' }}</span> |
100 | | - </div> |
| 101 | + <dt>Account Created</dt> |
| 102 | + <dd>{{ createdDate | date: 'MMMM d, yyyy' }}</dd> |
101 | 103 | } |
102 | 104 |
|
103 | 105 | @if (subscriptionStarted(); as subscriptionDate) { |
104 | | - <div class="detail-item"> |
105 | | - <span class="detail-label">Doula Cooperative Subscription:</span> |
106 | | - <span class="detail-value">{{ subscriptionDate | date: 'MMMM d, yyyy' }}</span> |
107 | | - </div> |
| 106 | + <dt>Subscription Started</dt> |
| 107 | + <dd>{{ subscriptionDate | date: 'MMMM d, yyyy' }}</dd> |
108 | 108 | } |
109 | 109 |
|
110 | | - <div class="detail-item"> |
111 | | - <span class="detail-label">Email:</span> |
112 | | - <span class="detail-value">{{ userDoc.email }}</span> |
113 | | - </div> |
114 | | - |
115 | | - <div class="detail-item"> |
116 | | - <span class="detail-label">Email Verified:</span> |
117 | | - <span class="detail-value">{{ user.emailVerified ? 'Yes' : 'No' }}</span> |
118 | | - </div> |
119 | | - </div> |
120 | | - |
121 | | - @if (!hasClaimableProfile()) { |
122 | | - <h3>Newsletter Preferences</h3> |
123 | | - <div class="membership-details"> |
124 | | - <div class="detail-item newsletter-preference"> |
125 | | - <span class="detail-label">Monthly Newsletter:</span> |
126 | | - <div class="newsletter-controls"> |
127 | | - <label class="toggle-label"> |
128 | | - <input |
129 | | - type="checkbox" |
130 | | - [checked]="newsletterSubscribed()" |
131 | | - (change)="onUpdateNewsletterPreference(!newsletterSubscribed())" |
132 | | - [disabled]="newsletterUpdateInProgress()" |
133 | | - /> |
134 | | - <span class="toggle-text"> |
135 | | - @if (newsletterSubscribed()) { |
136 | | - Subscribed |
137 | | - } @else { |
138 | | - Not subscribed |
139 | | - } |
140 | | - </span> |
141 | | - </label> |
142 | | - @if (newsletterUpdateInProgress()) { |
143 | | - <span class="update-status">Updating...</span> |
| 110 | + <dt>Email</dt> |
| 111 | + <dd>{{ userDoc.email }}</dd> |
| 112 | + |
| 113 | + <dt>Email Verified</dt> |
| 114 | + <dd>{{ user.emailVerified ? 'Yes' : 'No' }}</dd> |
| 115 | + </dl> |
| 116 | + </section> |
| 117 | + |
| 118 | + <!-- Newsletter Preferences Card --> |
| 119 | + @if (!hasClaimableProfile()) { |
| 120 | + <section class="membership-card card-2" aria-labelledby="newsletter-heading"> |
| 121 | + <h2 id="newsletter-heading" class="section-heading">Newsletter Preferences</h2> |
| 122 | + <div class="newsletter-content"> |
| 123 | + <label class="toggle-switch"> |
| 124 | + <input |
| 125 | + type="checkbox" |
| 126 | + [checked]="newsletterSubscribed()" |
| 127 | + (change)="onUpdateNewsletterPreference(!newsletterSubscribed())" |
| 128 | + [disabled]="newsletterUpdateInProgress()" |
| 129 | + /> |
| 130 | + <span class="toggle-track" aria-hidden="true"></span> |
| 131 | + <span class="toggle-text"> |
| 132 | + @if (newsletterSubscribed()) { |
| 133 | + Subscribed |
| 134 | + } @else { |
| 135 | + Not subscribed |
144 | 136 | } |
145 | | - </div> |
146 | | - <p class="newsletter-description"> |
147 | | - Receive monthly updates about cooperative news, events, and resources for birth |
148 | | - workers. |
149 | | - </p> |
150 | | - @if (newsletterUpdateError(); as error) { |
151 | | - <p class="error-message">{{ error }}</p> |
152 | | - } |
153 | | - </div> |
| 137 | + </span> |
| 138 | + </label> |
| 139 | + @if (newsletterUpdateInProgress()) { |
| 140 | + <span class="update-status">Updating...</span> |
| 141 | + } |
| 142 | + <p class="newsletter-description"> |
| 143 | + Receive monthly updates about cooperative news, events, and resources for birth |
| 144 | + workers. |
| 145 | + </p> |
| 146 | + @if (newsletterUpdateError(); as error) { |
| 147 | + <p class="error-message">{{ error }}</p> |
| 148 | + } |
154 | 149 | </div> |
155 | | - } |
| 150 | + </section> |
| 151 | + } |
156 | 152 |
|
157 | | - @if (lastPaymentDate() || nextPaymentDate() || membershipExpiresDate()) { |
158 | | - <h3>Payment Information</h3> |
159 | | - <div class="membership-details"> |
| 153 | + <!-- Payment Information Card --> |
| 154 | + @if (lastPaymentDate() || nextPaymentDate() || membershipExpiresDate()) { |
| 155 | + <section class="membership-card card-3" aria-labelledby="payment-heading"> |
| 156 | + <h2 id="payment-heading" class="section-heading">Payment Information</h2> |
| 157 | + <dl class="details-list"> |
160 | 158 | @if (lastPaymentDate(); as lastPayment) { |
161 | | - <div class="detail-item"> |
162 | | - <span class="detail-label">Last Payment:</span> |
163 | | - <span class="detail-value">{{ lastPayment | date: 'MMMM d, yyyy' }}</span> |
164 | | - </div> |
| 159 | + <dt>Last Payment</dt> |
| 160 | + <dd>{{ lastPayment | date: 'MMMM d, yyyy' }}</dd> |
165 | 161 | } |
166 | 162 |
|
167 | 163 | @if (nextPaymentDate(); as nextPayment) { |
168 | | - <div class="detail-item"> |
169 | | - <span class="detail-label">Next Payment:</span> |
170 | | - <span class="detail-value">{{ nextPayment | date: 'MMMM d, yyyy' }}</span> |
171 | | - </div> |
| 164 | + <dt>Next Payment</dt> |
| 165 | + <dd>{{ nextPayment | date: 'MMMM d, yyyy' }}</dd> |
172 | 166 | } |
173 | 167 |
|
174 | 168 | @if (membershipExpiresDate(); as expiresDate) { |
175 | | - <div class="detail-item"> |
176 | | - <span class="detail-label">Membership Expires:</span> |
177 | | - <span class="detail-value">{{ expiresDate | date: 'MMMM d, yyyy' }}</span> |
178 | | - </div> |
| 169 | + <dt>Membership Expires</dt> |
| 170 | + <dd>{{ expiresDate | date: 'MMMM d, yyyy' }}</dd> |
179 | 171 | } |
180 | | - </div> |
181 | | - } |
182 | | - </div> |
183 | | - } @else { |
184 | | - <div class="loading-info"> |
185 | | - <p>Loading membership information...</p> |
186 | | - </div> |
187 | | - } |
188 | | - </div> |
| 172 | + </dl> |
| 173 | + </section> |
| 174 | + } |
| 175 | + </div> |
| 176 | + } @else { |
| 177 | + <div class="loading-info"> |
| 178 | + <p>Loading membership information...</p> |
| 179 | + </div> |
| 180 | + } |
189 | 181 |
|
190 | 182 | <div class="membership-actions"> |
191 | | - <button type="button" class="button" (click)="onSignOut()">Sign Out</button> |
| 183 | + <button type="button" class="button button--secondary sign-out-button" (click)="onSignOut()"> |
| 184 | + Sign Out |
| 185 | + </button> |
192 | 186 | </div> |
193 | 187 | </div> |
194 | 188 | } |
0 commit comments