Skip to content

Commit 32f47c8

Browse files
shrikha56claude
andcommitted
feat(concierge): rebrand to UCLA, fix new events appearing in list
- Replace all hancock.com references with ucla.edu across event services - Add refresh() to EventApprovalStateService to re-emit status after new events - Wire wizard to call refresh() on submit so new events appear in list tab - Add event request wizard route, quotes tab, and jspdf dependency Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 5c76ff0 commit 32f47c8

8 files changed

Lines changed: 1070 additions & 9 deletions

File tree

apps/concierge/src/app/events/event-approval-state.service.ts

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,11 @@ export class EventApprovalStateService {
4747
});
4848
}
4949

50+
/** Force all observables to re-evaluate (e.g. after adding mock events) */
51+
public refresh(): void {
52+
this._status.next({ ...this._status.getValue() });
53+
}
54+
5055
public readonly approved_calendar_events$ = this._status.pipe(
5156
map((statuses) => {
5257
const approved_ids = Object.entries(statuses)
@@ -173,7 +178,7 @@ export class EventApprovalStateService {
173178
const room_email =
174179
event.location
175180
.toLowerCase()
176-
.replace(/[^a-z0-9]/g, '.') + '@hancock.com';
181+
.replace(/[^a-z0-9]/g, '.') + '@ucla.edu';
177182
if (seen.has(room_email)) return null;
178183
seen.add(room_email);
179184
return new Space({
@@ -196,11 +201,11 @@ export class EventApprovalStateService {
196201
const organiser_email =
197202
mock.organiser
198203
.toLowerCase()
199-
.replace(/[^a-z0-9]/g, '.') + '@hancock.com';
204+
.replace(/[^a-z0-9]/g, '.') + '@ucla.edu';
200205
const room_email =
201206
mock.location
202207
.toLowerCase()
203-
.replace(/[^a-z0-9]/g, '.') + '@hancock.com';
208+
.replace(/[^a-z0-9]/g, '.') + '@ucla.edu';
204209

205210
let body = '';
206211
if (requirements) {

apps/concierge/src/app/events/event-request-wizard.component.ts

Lines changed: 837 additions & 0 deletions
Large diffs are not rendered by default.

apps/concierge/src/app/events/event-summary-dialog.component.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -438,7 +438,7 @@ export class EventSummaryDialogComponent {
438438
return (
439439
this.event.organiser
440440
.toLowerCase()
441-
.replace(/[^a-z0-9]/g, '.') + '@hancock.com'
441+
.replace(/[^a-z0-9]/g, '.') + '@ucla.edu'
442442
);
443443
}
444444

apps/concierge/src/app/events/events-list.component.ts

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import {
2121
import { distinctUntilChanged, map } from 'rxjs/operators';
2222
import { EventApprovalsComponent } from './event-approvals.component';
2323
import { EventListingComponent } from './event-listing.component';
24+
import { EventQuotesComponent } from './event-quotes.component';
2425
import { EventStateService } from './event-state.service';
2526

2627
@Component({
@@ -90,6 +91,16 @@ import { EventStateService } from './event-state.service';
9091
>
9192
Approvals
9293
</button>
94+
<button
95+
matRipple
96+
class="rounded-full px-4 py-1.5 text-sm font-medium transition-colors"
97+
[class.bg-primary]="view === 'quotes'"
98+
[class.text-primary-content]="view === 'quotes'"
99+
[class.bg-base-200]="view !== 'quotes'"
100+
(click)="view = 'quotes'"
101+
>
102+
Quotes &amp; Invoices
103+
</button>
93104
</div>
94105
<div class="relative h-1/2 w-full flex-1 overflow-y-auto px-8">
95106
@if (view === 'approvals') {
@@ -100,6 +111,9 @@ import { EventStateService } from './event-state.service';
100111
<event-listing class="block"></event-listing>
101112
</div>
102113
}
114+
@if (view === 'quotes') {
115+
<event-quotes></event-quotes>
116+
}
103117
</div>
104118
</div>
105119
@if (!has_calendar) {
@@ -126,6 +140,7 @@ import { EventStateService } from './event-state.service';
126140
MatSelectModule,
127141
EventApprovalsComponent,
128142
EventListingComponent,
143+
EventQuotesComponent,
129144
MatRippleModule,
130145
RouterModule,
131146
FormsModule,
@@ -144,7 +159,7 @@ export class EventsListComponent extends AsyncHandler implements OnInit {
144159

145160
public period_list = [];
146161
public selected_range: number;
147-
public view: 'list' | 'approvals' = 'list';
162+
public view: 'list' | 'approvals' | 'quotes' = 'list';
148163

149164
public get has_calendar() {
150165
return isMock() || this._settings.get('app.group_events_calendar');

apps/concierge/src/app/events/events.module.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { Route, RouterModule } from '@angular/router';
33
import { EventsComponent } from './events.component';
44

55
import { EventManageComponent } from './event-manage.component';
6+
import { EventRequestWizardComponent } from './event-request-wizard.component';
67
import { EventViewComponent } from './event-view.component';
78
import { EventsListComponent } from './events-list.component';
89

@@ -12,7 +13,7 @@ const ROUTES: Route[] = [
1213
component: EventsComponent,
1314
children: [{ path: '', component: EventsListComponent }],
1415
},
15-
{ path: 'manage', component: EventManageComponent },
16+
{ path: 'manage', component: EventRequestWizardComponent },
1617
{ path: 'manage/:id', component: EventManageComponent },
1718
{ path: 'view/:id', component: EventViewComponent },
1819
{ path: '**', redirectTo: '' },
@@ -24,6 +25,7 @@ const ROUTES: Route[] = [
2425
EventsComponent,
2526
EventsListComponent,
2627
EventManageComponent,
28+
EventRequestWizardComponent,
2729
RouterModule.forChild(ROUTES),
2830
],
2931
})

apps/concierge/src/environments/settings.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@ const app = {
8686
*/
8787
export const DEFAULT_SETTINGS: any = {
8888
debug: true,
89+
mock: true,
8990
composer: {
9091
domain: '',
9192
route: '/concierge',

0 commit comments

Comments
 (0)