@sneat/extension-contactus 0.13.6 → 0.13.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/{sneat-extension-contactus-contacts-page.component-4EsaJkXj.mjs → sneat-extension-contactus-contacts-page.component-DpxKHMRk.mjs} +17 -11
- package/fesm2022/sneat-extension-contactus-contacts-page.component-DpxKHMRk.mjs.map +1 -0
- package/fesm2022/{sneat-extension-contactus-index-BoDcqthC.mjs → sneat-extension-contactus-index-CE4ekMpM.mjs} +23 -16
- package/fesm2022/sneat-extension-contactus-index-CE4ekMpM.mjs.map +1 -0
- package/fesm2022/{sneat-extension-contactus-index-Cp1af1MR.mjs → sneat-extension-contactus-index-DjS9XHI0.mjs} +36 -26
- package/fesm2022/sneat-extension-contactus-index-DjS9XHI0.mjs.map +1 -0
- package/fesm2022/{sneat-extension-contactus-members-page.component-Bv9xVCKk.mjs → sneat-extension-contactus-members-page.component-DVALKWUC.mjs} +8 -8
- package/fesm2022/sneat-extension-contactus-members-page.component-DVALKWUC.mjs.map +1 -0
- package/fesm2022/sneat-extension-contactus-space-member-page.component-Dm4BHHEv.mjs +124 -0
- package/fesm2022/sneat-extension-contactus-space-member-page.component-Dm4BHHEv.mjs.map +1 -0
- package/fesm2022/sneat-extension-contactus.mjs +38 -38
- package/fesm2022/sneat-extension-contactus.mjs.map +1 -1
- package/package.json +7 -7
- package/fesm2022/sneat-extension-contactus-contacts-page.component-4EsaJkXj.mjs.map +0 -1
- package/fesm2022/sneat-extension-contactus-index-BoDcqthC.mjs.map +0 -1
- package/fesm2022/sneat-extension-contactus-index-Cp1af1MR.mjs.map +0 -1
- package/fesm2022/sneat-extension-contactus-members-page.component-Bv9xVCKk.mjs.map +0 -1
- package/fesm2022/sneat-extension-contactus-space-member-page.component-Ds2b-oB9.mjs +0 -124
- package/fesm2022/sneat-extension-contactus-space-member-page.component-Ds2b-oB9.mjs.map +0 -1
|
@@ -36,10 +36,10 @@ class ContactGroupService {
|
|
|
36
36
|
filter: [{ field: 'status', operator: '==', value: status }],
|
|
37
37
|
});
|
|
38
38
|
}
|
|
39
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
40
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
39
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: ContactGroupService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
40
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: ContactGroupService });
|
|
41
41
|
}
|
|
42
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
42
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: ContactGroupService, decorators: [{
|
|
43
43
|
type: Injectable
|
|
44
44
|
}], ctorParameters: () => [] });
|
|
45
45
|
|
|
@@ -53,10 +53,10 @@ class ContactNavService {
|
|
|
53
53
|
})
|
|
54
54
|
.catch(this.errorLogger.logErrorHandler('failed to navigate to "new-contact" page'));
|
|
55
55
|
}
|
|
56
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
57
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
56
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: ContactNavService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
57
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: ContactNavService, providedIn: 'root' });
|
|
58
58
|
}
|
|
59
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
59
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: ContactNavService, decorators: [{
|
|
60
60
|
type: Injectable,
|
|
61
61
|
args: [{ providedIn: 'root' }]
|
|
62
62
|
}] });
|
|
@@ -71,10 +71,10 @@ class ContactusSpaceService extends SpaceModuleService {
|
|
|
71
71
|
// console.log(`ContactusSpaceService.watchContactBriefs(${spaceID})`);
|
|
72
72
|
return this.watchBriefs(spaceID, (dto) => dto?.contacts || {});
|
|
73
73
|
};
|
|
74
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
75
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
74
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: ContactusSpaceService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
75
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: ContactusSpaceService });
|
|
76
76
|
}
|
|
77
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
77
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: ContactusSpaceService, decorators: [{
|
|
78
78
|
type: Injectable
|
|
79
79
|
}], ctorParameters: () => [] });
|
|
80
80
|
|
|
@@ -192,10 +192,10 @@ class ContactService extends ModuleSpaceItemService {
|
|
|
192
192
|
// const request: IContactRequest = { spaceID, contactID };
|
|
193
193
|
return this.sneatApiService.post('contactus/remove_team_member', request);
|
|
194
194
|
}
|
|
195
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
196
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
195
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: ContactService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
196
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: ContactService });
|
|
197
197
|
}
|
|
198
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
198
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: ContactService, decorators: [{
|
|
199
199
|
type: Injectable
|
|
200
200
|
}], ctorParameters: () => [] });
|
|
201
201
|
|
|
@@ -270,10 +270,10 @@ class ContactRoleService {
|
|
|
270
270
|
}
|
|
271
271
|
return of({ id, brief: { title: id } });
|
|
272
272
|
}
|
|
273
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
274
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
273
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: ContactRoleService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
274
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: ContactRoleService });
|
|
275
275
|
}
|
|
276
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
276
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: ContactRoleService, decorators: [{
|
|
277
277
|
type: Injectable
|
|
278
278
|
}] });
|
|
279
279
|
|
|
@@ -293,17 +293,17 @@ class MemberService extends ContactService {
|
|
|
293
293
|
validateCreateSpaceMemberRequest(request);
|
|
294
294
|
return this.sneatApiService.post('contactus/create_member', request);
|
|
295
295
|
}
|
|
296
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
297
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
296
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: MemberService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
|
|
297
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: MemberService });
|
|
298
298
|
}
|
|
299
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
299
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: MemberService, decorators: [{
|
|
300
300
|
type: Injectable
|
|
301
301
|
}] });
|
|
302
302
|
|
|
303
303
|
class ContactusServicesModule {
|
|
304
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
305
|
-
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "
|
|
306
|
-
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "
|
|
304
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: ContactusServicesModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
305
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "22.1.3", ngImport: i0, type: ContactusServicesModule });
|
|
306
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: ContactusServicesModule, providers: [
|
|
307
307
|
ContactService,
|
|
308
308
|
ContactNavService,
|
|
309
309
|
ContactGroupService,
|
|
@@ -312,7 +312,7 @@ class ContactusServicesModule {
|
|
|
312
312
|
MemberService,
|
|
313
313
|
] });
|
|
314
314
|
}
|
|
315
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
315
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: ContactusServicesModule, decorators: [{
|
|
316
316
|
type: NgModule,
|
|
317
317
|
args: [{
|
|
318
318
|
imports: [],
|
|
@@ -328,10 +328,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.19", ngImpo
|
|
|
328
328
|
}] });
|
|
329
329
|
|
|
330
330
|
class MemberGroupService {
|
|
331
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
332
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
331
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: MemberGroupService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
332
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: MemberGroupService, providedIn: 'root' });
|
|
333
333
|
}
|
|
334
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
334
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: MemberGroupService, decorators: [{
|
|
335
335
|
type: Injectable,
|
|
336
336
|
args: [{
|
|
337
337
|
providedIn: 'root',
|
|
@@ -406,10 +406,10 @@ class InviteService {
|
|
|
406
406
|
return this.acceptInviteByAuthenticatedUser(inviteInfo);
|
|
407
407
|
}));
|
|
408
408
|
}
|
|
409
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
410
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
409
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: InviteService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
410
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: InviteService });
|
|
411
411
|
}
|
|
412
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
412
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: InviteService, decorators: [{
|
|
413
413
|
type: Injectable
|
|
414
414
|
}] });
|
|
415
415
|
|
|
@@ -436,10 +436,10 @@ class ContactusNavService {
|
|
|
436
436
|
// },
|
|
437
437
|
// );
|
|
438
438
|
}
|
|
439
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
440
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
439
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: ContactusNavService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
440
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: ContactusNavService });
|
|
441
441
|
}
|
|
442
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
442
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: ContactusNavService, decorators: [{
|
|
443
443
|
type: Injectable
|
|
444
444
|
}] });
|
|
445
445
|
|
|
@@ -477,19 +477,19 @@ const membersRoutes = [
|
|
|
477
477
|
{
|
|
478
478
|
path: 'members',
|
|
479
479
|
data: { title: 'Members' },
|
|
480
|
-
loadComponent: () => import('./sneat-extension-contactus-members-page.component-
|
|
480
|
+
loadComponent: () => import('./sneat-extension-contactus-members-page.component-DVALKWUC.mjs').then((m) => m.MembersPageComponent),
|
|
481
481
|
// ...guardRoute,
|
|
482
482
|
},
|
|
483
483
|
{
|
|
484
484
|
path: 'new-member',
|
|
485
485
|
data: { title: 'New member' },
|
|
486
|
-
loadComponent: () => import('./sneat-extension-contactus-index-
|
|
486
|
+
loadComponent: () => import('./sneat-extension-contactus-index-CE4ekMpM.mjs').then((m) => m.NewMemberPageComponent),
|
|
487
487
|
// ...guardRoute,
|
|
488
488
|
},
|
|
489
489
|
{
|
|
490
490
|
path: 'member/:contactID',
|
|
491
491
|
data: { title: 'Member' },
|
|
492
|
-
loadComponent: () => import('./sneat-extension-contactus-space-member-page.component-
|
|
492
|
+
loadComponent: () => import('./sneat-extension-contactus-space-member-page.component-Dm4BHHEv.mjs').then((m) => m.SpaceMemberPageComponent),
|
|
493
493
|
},
|
|
494
494
|
// {
|
|
495
495
|
// path: 'pupils',
|
|
@@ -510,25 +510,25 @@ const contactusRoutes = [
|
|
|
510
510
|
{
|
|
511
511
|
path: 'contacts',
|
|
512
512
|
data: { title: 'Contacts' },
|
|
513
|
-
loadComponent: () => import('./sneat-extension-contactus-contacts-page.component-
|
|
513
|
+
loadComponent: () => import('./sneat-extension-contactus-contacts-page.component-DpxKHMRk.mjs').then((m) => m.ContactsPageComponent),
|
|
514
514
|
// ...guardRoute,
|
|
515
515
|
},
|
|
516
516
|
{
|
|
517
517
|
path: 'new-contact',
|
|
518
518
|
data: { title: 'New Contact' },
|
|
519
|
-
loadComponent: () => import('./sneat-extension-contactus-index-
|
|
519
|
+
loadComponent: () => import('./sneat-extension-contactus-index-DjS9XHI0.mjs').then((m) => m.NewContactPageComponent),
|
|
520
520
|
// ...guardRoute,
|
|
521
521
|
},
|
|
522
522
|
{
|
|
523
523
|
path: 'contact/:contactID',
|
|
524
524
|
data: { title: 'Contact' },
|
|
525
|
-
loadComponent: () => import('./sneat-extension-contactus-index-
|
|
525
|
+
loadComponent: () => import('./sneat-extension-contactus-index-DjS9XHI0.mjs').then((m) => m.ContactPageComponent),
|
|
526
526
|
// ...guardRoute,
|
|
527
527
|
},
|
|
528
528
|
{
|
|
529
529
|
path: 'contact/:contactID/new-location',
|
|
530
530
|
data: { title: 'New location' },
|
|
531
|
-
loadComponent: () => import('./sneat-extension-contactus-index-
|
|
531
|
+
loadComponent: () => import('./sneat-extension-contactus-index-DjS9XHI0.mjs').then((m) => m.NewLocationPageComponent),
|
|
532
532
|
// ...guardRoute,
|
|
533
533
|
},
|
|
534
534
|
...membersRoutes,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sneat-extension-contactus.mjs","sources":["../../../../../../libs/extensions/contactus/runtime/src/lib/services/contact-group-service.ts","../../../../../../libs/extensions/contactus/runtime/src/lib/services/contact-nav-service.ts","../../../../../../libs/extensions/contactus/runtime/src/lib/services/contactus-space.service.ts","../../../../../../libs/extensions/contactus/runtime/src/lib/services/contact-service.ts","../../../../../../libs/extensions/contactus/runtime/src/lib/services/contactus-space-context.service.ts","../../../../../../libs/extensions/contactus/runtime/src/lib/services/contact-role.service.ts","../../../../../../libs/extensions/contactus/runtime/src/lib/services/member.service.ts","../../../../../../libs/extensions/contactus/runtime/src/lib/services/contactus-services.module.ts","../../../../../../libs/extensions/contactus/runtime/src/lib/services/member-group.service.ts","../../../../../../libs/extensions/contactus/runtime/src/lib/services/invite.service.ts","../../../../../../libs/extensions/contactus/runtime/src/lib/services/contactus-nav.service.ts","../../../../../../libs/extensions/contactus/runtime/src/lib/provide-contactus.ts","../../../../../../libs/extensions/contactus/runtime/src/lib/members/members-routing.ts","../../../../../../libs/extensions/contactus/runtime/src/lib/contactus-routing.module.ts","../../../../../../libs/extensions/contactus/runtime/src/sneat-extension-contactus.ts"],"sourcesContent":["import { Injectable, Injector, inject } from '@angular/core';\nimport { Firestore as AngularFirestore } from '@angular/fire/firestore';\nimport { SneatApiService } from '@sneat/api';\nimport { IIdAndDbo, ISpaceRef } from '@sneat/core';\nimport {\n defaultFamilyContactGroupDTOs,\n defaultFamilyContactGroups,\n IContactGroupBrief,\n IContactGroupDbo,\n} from '@sneat/extension-contactus-contract';\nimport { ModuleSpaceItemService } from '@sneat/space-services';\nimport { Observable, of } from 'rxjs';\n\n\n@Injectable()\nexport class ContactGroupService {\n private readonly spaceItemService: ModuleSpaceItemService<\n IContactGroupBrief,\n IContactGroupDbo\n >;\n\n constructor() {\n const afs = inject(AngularFirestore);\n const sneatApiService = inject(SneatApiService);\n const injector = inject(Injector);\n\n this.spaceItemService = new ModuleSpaceItemService(\n injector,\n 'contactus',\n 'contact_groups',\n afs,\n sneatApiService,\n );\n }\n\n getContactGroups(): Observable<readonly IIdAndDbo<IContactGroupDbo>[]> {\n return of(defaultFamilyContactGroupDTOs);\n }\n\n getContactGroupByID(\n id: string,\n space: ISpaceRef,\n ): Observable<IIdAndDbo<IContactGroupDbo>> {\n const cg = defaultFamilyContactGroups.find((cg) => cg.id === id);\n if (!cg) {\n return of({ id, space, dbo: { title: id } });\n }\n return of(cg);\n }\n\n watchMemberGroupsBySpace(\n space: ISpaceRef,\n status: 'active' | 'archived' = 'active',\n ): Observable<IIdAndDbo<IContactGroupDbo>[]> {\n // console.log('watchMemberGroupsByTeamID()', spaceID);\n return this.spaceItemService.watchModuleSpaceItemsWithSpaceRef(space, {\n filter: [{ field: 'status', operator: '==', value: status }],\n });\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { excludeUndefined } from '@sneat/core';\nimport { ContactRole } from '@sneat/extension-contactus-contract';\nimport { ErrorLogger, IErrorLogger } from '@sneat/core';\nimport { ISpaceContext } from '@sneat/space-models';\nimport { SpaceNavService } from '@sneat/space-services';\n\nexport interface INewContactPageParams {\n group?: string;\n role?: ContactRole;\n asset?: string;\n document?: string;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class ContactNavService {\n private readonly errorLogger = inject<IErrorLogger>(ErrorLogger);\n private readonly spaceNavService = inject(SpaceNavService);\n\n goNewContactPage(space: ISpaceContext, params?: INewContactPageParams): void {\n this.spaceNavService\n .navigateForwardToSpacePage(space, 'new-contact', {\n queryParams: excludeUndefined(params),\n })\n .catch(\n this.errorLogger.logErrorHandler(\n 'failed to navigate to \"new-contact\" page',\n ),\n );\n }\n}\n","import { Injectable, Injector, inject } from '@angular/core';\nimport { Firestore as AngularFirestore } from '@angular/fire/firestore';\nimport { IContactBrief, IContactusSpaceDbo } from '@sneat/extension-contactus-contract';\nimport { SpaceModuleService } from '@sneat/space-services';\n\n@Injectable()\nexport class ContactusSpaceService extends SpaceModuleService<IContactusSpaceDbo> {\n public constructor() {\n const afs = inject(AngularFirestore);\n const injector = inject(Injector);\n super(injector, 'contactus', afs);\n }\n\n public readonly watchContactBriefs = (spaceID: string) => {\n // console.log(`ContactusSpaceService.watchContactBriefs(${spaceID})`);\n return this.watchBriefs<IContactBrief>(\n spaceID,\n (dto) => dto?.contacts || {},\n );\n };\n}\n","import { Injectable, Injector, inject } from '@angular/core';\nimport { Firestore as AngularFirestore } from '@angular/fire/firestore';\nimport { IFilter, SneatApiService } from '@sneat/api';\nimport { SneatUserService } from '@sneat/auth-core';\nimport { IIdAndBriefAndOptionalDbo, ISpaceRef } from '@sneat/core';\nimport {\n IContactBrief,\n IContactDbo,\n IContactContext,\n ICreateContactRequest,\n IContactWithDboAndSpace,\n IChangeMemberRoleRequest,\n IContactsFilter,\n IAddContactCommChannelRequest,\n IContactCommChannelRequest,\n IContactRequest,\n IContactRequestWithOptionalMessage,\n ISetContactsStatusRequest,\n IUpdateContactCommChannelRequest,\n IUpdateContactRequest,\n validateContactRequest,\n validateUpdateContactRequest,\n} from '@sneat/extension-contactus-contract';\nimport {\n ISpaceContext,\n ISpaceItemWithOptionalBriefAndOptionalDbo,\n} from '@sneat/space-models';\nimport { ModuleSpaceItemService } from '@sneat/space-services';\nimport { ContactusSpaceService } from './contactus-space.service';\nimport { map, Observable, tap, throwError } from 'rxjs';\n\n@Injectable()\nexport class ContactService extends ModuleSpaceItemService<\n IContactBrief,\n IContactDbo\n> {\n protected contactusSpaceService = inject(ContactusSpaceService);\n private readonly userService = inject(SneatUserService);\n\n constructor() {\n const afs = inject(AngularFirestore);\n const sneatApiService = inject(SneatApiService);\n const injector = inject(Injector);\n super(injector, 'contactus', 'contacts', afs, sneatApiService);\n // this.briefService = new TeamItemService<{id: string}, IContactsBrief>('briefs', afs, sneatApiService);\n }\n\n public createContact(\n spaceRef: ISpaceRef,\n request: ICreateContactRequest,\n endpoint = 'contactus/create_contact',\n ): Observable<IContactWithDboAndSpace> {\n return this.createSpaceItem(endpoint, spaceRef, request);\n }\n\n public deleteContact(request: IContactRequest): Observable<void> {\n validateContactRequest(request);\n return this.deleteSpaceItem('contactus/delete_contact', request);\n }\n\n public updateContact(request: IUpdateContactRequest): Observable<void> {\n validateUpdateContactRequest(request);\n return this.sneatApiService.post('contactus/update_contact', request);\n }\n\n public addContactCommChannel(\n request: IAddContactCommChannelRequest,\n ): Observable<void> {\n return this.sneatApiService.post(\n 'contactus/add_contact_comm_channel',\n request,\n );\n }\n\n public updateContactCommChannel(\n request: IUpdateContactCommChannelRequest,\n ): Observable<void> {\n return this.sneatApiService.post(\n 'contactus/update_contact_comm_channel',\n request,\n );\n }\n\n public deleteContactCommChannel(\n request: IContactCommChannelRequest,\n ): Observable<void> {\n return this.sneatApiService.post(\n 'contactus/delete_contact_comm_channel',\n request,\n );\n }\n\n public setContactsStatus(\n request: ISetContactsStatusRequest,\n ): Observable<void> {\n if (!request.contactIDs?.length) {\n return throwError(() => 'at least 1 contact is required');\n }\n return this.sneatApiService.post('contactus/set_contacts_status', request);\n }\n\n watchContactsWithRole(\n space: ISpaceContext,\n role: string,\n status: 'active' | 'archived' = 'active',\n filter?: readonly IFilter[],\n ): Observable<IIdAndBriefAndOptionalDbo<IContactBrief, IContactDbo>[]> {\n filter = [\n ...(filter || []),\n { field: 'roles', operator: '==', value: role },\n ];\n return this.watchSpaceContacts(space, status, filter);\n }\n\n public watchSpaceContacts(\n space: ISpaceContext,\n status: 'active' | 'archived' = 'active',\n filter?: readonly IFilter[],\n ): Observable<IIdAndBriefAndOptionalDbo<IContactBrief, IContactDbo>[]> {\n filter = [\n {\n field: 'status',\n value: status,\n operator: '==',\n },\n {\n field: 'parentContactID',\n operator: '==',\n value: '',\n },\n ...(filter || []),\n ];\n return this.watchModuleSpaceItemsWithSpaceRef<IContactDbo>(space, {\n filter,\n });\n }\n\n watchContactById(\n space: ISpaceContext,\n contactID: string,\n ): Observable<\n ISpaceItemWithOptionalBriefAndOptionalDbo<IContactBrief, IContactDbo>\n > {\n return this.watchSpaceItemByIdWithSpaceRef(space, contactID).pipe(\n tap((contact) => console.log('contact loaded:', contactID, contact)),\n );\n }\n\n watchContactsByRole(\n space: ISpaceContext,\n filter?: IContactsFilter,\n ): Observable<IContactContext[]> {\n const f: IFilter[] = [\n // { field: 'spaceID', value: team.id, operator: '==' },\n ];\n if (filter?.status) {\n f.push({ field: 'status', value: filter.status, operator: '==' });\n }\n if (filter?.role) {\n f.push({\n field: 'roles',\n operator: 'array-contains',\n value: filter.role,\n });\n }\n return this.watchModuleSpaceItemsWithSpaceRef(space, { filter: f });\n }\n\n watchChildContacts(\n space: ISpaceContext,\n id: string,\n filter: IContactsFilter = { status: 'active' },\n ): Observable<IContactContext[]> {\n const f: IFilter[] = [\n { field: 'parentContactID', value: id, operator: '==' },\n ];\n if (filter.status) {\n f.push({ field: 'status', value: filter.status, operator: '==' });\n }\n if (filter.role) {\n f.push({\n field: 'roles',\n operator: 'array-contains',\n value: filter.role,\n });\n }\n return this.watchModuleSpaceItemsWithSpaceRef(space, { filter: f });\n }\n\n public changeContactRole(\n request: IChangeMemberRoleRequest,\n ): Observable<void> {\n return this.sneatApiService\n .post(`contactus/change_member_role`, request)\n .pipe(\n map(() => {\n return;\n }),\n );\n }\n\n public removeSpaceMember(\n request: IContactRequestWithOptionalMessage,\n ): Observable<ISpaceContext> {\n console.log(\n `removeTeamMember(spaceID=${request.spaceID}, contactID=${request.contactID})`,\n );\n try {\n validateContactRequest(request);\n } catch (ex) {\n return throwError(() => ex);\n }\n\n // const request: IContactRequest = { spaceID, contactID };\n return this.sneatApiService.post('contactus/remove_team_member', request);\n }\n}\n","import { inject } from '@angular/core';\nimport { SneatUserService } from '@sneat/auth-core';\nimport { IContactusSpaceDboAndID } from '@sneat/extension-contactus-contract';\nimport { ContactusSpaceService } from './contactus-space.service';\nimport { ErrorLogger } from '@sneat/core';\nimport { Observable, Subject, Subscription, takeUntil } from 'rxjs';\n\n// TODO: ContactusSpaceContextService can be abstracted and reused by other entities\nexport class ContactusSpaceContextService {\n // Is used to emit contactus space record changes\n private readonly contactusSpaceContext = new Subject<\n IContactusSpaceDboAndID | undefined\n >();\n\n public readonly contactusSpaceContext$ =\n this.contactusSpaceContext.asObservable();\n\n private spaceID?: string;\n private spaceModuleRecordSub?: Subscription;\n\n private readonly errorLogger = inject(ErrorLogger);\n private readonly userService = inject(SneatUserService);\n private readonly contactusSpaceService = inject(ContactusSpaceService);\n\n constructor(\n private readonly destroyed$: Observable<void>,\n private readonly spaceID$: Observable<string | undefined>,\n ) {\n destroyed$.subscribe({\n next: () => {\n this.contactusSpaceContext.complete();\n },\n });\n spaceID$.pipe(takeUntil(destroyed$)).subscribe({\n next: (spaceID) => {\n this.spaceID = spaceID;\n if (this.userService.currentUserID) {\n this.subscribeForContactusSpaceChanges(spaceID);\n }\n },\n });\n this.userService.userChanged.pipe(takeUntil(destroyed$)).subscribe({\n next: (uid) => {\n if (uid) {\n this.subscribeForContactusSpaceChanges(this.spaceID);\n } else {\n this.spaceModuleRecordSub?.unsubscribe();\n this.contactusSpaceContext.next(undefined);\n }\n },\n });\n }\n\n private readonly subscribeForContactusSpaceChanges = (\n spaceID?: string,\n ): void => {\n this.spaceModuleRecordSub?.unsubscribe();\n if (!spaceID) {\n return;\n }\n this.spaceModuleRecordSub = this.contactusSpaceService\n .watchSpaceModuleRecord(spaceID)\n .pipe(takeUntil(this.spaceID$), takeUntil(this.destroyed$))\n .subscribe({\n next: this.onContactusSpaceChanged,\n error: this.errorLogger.logErrorHandler(\n 'ContactusSpaceContextService: failed to get contactus space record',\n ),\n });\n };\n\n private readonly onContactusSpaceChanged = (\n contactusSpace: IContactusSpaceDboAndID,\n ): void => {\n console.log(\n 'ContactusSpaceContextService.onContactusSpaceChanged()',\n contactusSpace,\n );\n this.contactusSpaceContext.next(contactusSpace);\n };\n}\n","import { Injectable } from '@angular/core';\nimport { IIdAndBrief } from '@sneat/core';\nimport {\n defaultFamilyContactGroups,\n IContactRoleBrief,\n} from '@sneat/extension-contactus-contract';\nimport { Observable, of } from 'rxjs';\n\n@Injectable()\nexport class ContactRoleService {\n getContactRoleByID(id: string): Observable<IIdAndBrief<IContactRoleBrief>> {\n for (const cg of defaultFamilyContactGroups) {\n for (let j = 0; j < (cg?.dbo?.roles?.length || 0); j++) {\n const role = cg.dbo?.roles && cg.dbo.roles[j];\n if (role?.id === id) {\n return of({ id, brief: role.brief });\n }\n }\n }\n return of({ id, brief: { title: id } });\n }\n}\n","import { Injectable } from '@angular/core';\nimport { trimNames } from '@sneat/auth-models';\nimport {\n IMemberBrief,\n IAcceptPersonalInviteRequest,\n IAddSpaceMemberResponse,\n ICreateSpaceMemberRequest,\n validateCreateSpaceMemberRequest,\n} from '@sneat/extension-contactus-contract';\nimport { ContactService } from './contact-service';\nimport { Observable } from 'rxjs';\n\n@Injectable()\nexport class MemberService extends ContactService {\n public acceptPersonalInvite(\n request: IAcceptPersonalInviteRequest,\n firebaseToken: string,\n ): Observable<IMemberBrief> {\n // console.log('MemberService.acceptPersonalInvite()');\n if (firebaseToken) {\n this.sneatApiService.setApiAuthToken(firebaseToken);\n }\n return this.sneatApiService.post('invites/accept_personal_invite', request);\n }\n\n public createMember(\n request: ICreateSpaceMemberRequest,\n ): Observable<IAddSpaceMemberResponse> {\n // console.log(`MemberService.addMember()`, request);\n if (request.names) {\n request = { ...request, names: trimNames(request.names) };\n }\n validateCreateSpaceMemberRequest(request);\n return this.sneatApiService.post<IAddSpaceMemberResponse>(\n 'contactus/create_member',\n request,\n );\n }\n}\n","import { NgModule } from '@angular/core';\nimport { ContactGroupService } from './contact-group-service';\nimport { ContactNavService } from './contact-nav-service';\nimport { ContactRoleService } from './contact-role.service';\nimport { ContactService } from './contact-service';\nimport { ContactusSpaceService } from './contactus-space.service';\nimport { MemberService } from './member.service';\n\n@NgModule({\n imports: [],\n providers: [\n ContactService,\n ContactNavService,\n ContactGroupService,\n ContactRoleService,\n ContactusSpaceService,\n MemberService,\n ],\n})\nexport class ContactusServicesModule {}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class MemberGroupService {\n // TODO: Move to ContactGroupService or delete\n}\n","import { Injectable, inject } from '@angular/core';\nimport { Auth, createUserWithEmailAndPassword } from '@angular/fire/auth';\nimport { SneatApiService } from '@sneat/api';\nimport { SneatAuthStateService } from '@sneat/auth-core';\nimport {\n IAcceptPersonalInviteRequest,\n ICreatePersonalInviteRequest,\n ICreatePersonalInviteResponse,\n IJoinSpaceInfoResponse,\n} from '@sneat/extension-contactus-contract';\nimport { excludeEmpty } from '@sneat/core';\nimport { ErrorLogger, IErrorLogger } from '@sneat/core';\nimport { RandomIdService } from '@sneat/random';\nimport {\n IAcceptInviteResponse,\n IRejectPersonalInviteRequest,\n} from '@sneat/space-models';\nimport { from, Observable, switchMap, throwError } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\n@Injectable()\nexport class InviteService {\n private readonly errorLogger = inject<IErrorLogger>(ErrorLogger);\n private readonly sneatAuthService = inject(SneatAuthStateService);\n private readonly sneatApiService = inject(SneatApiService);\n private readonly afAuth = inject(Auth);\n private readonly randomService = inject(RandomIdService);\n\n public createInviteForMember(\n request: ICreatePersonalInviteRequest,\n ): Observable<ICreatePersonalInviteResponse> {\n return this.sneatApiService.post<ICreatePersonalInviteResponse>(\n 'invites/create_invite_for_member',\n excludeEmpty(request),\n );\n }\n\n public getInviteLinkForMember(\n request: ICreatePersonalInviteRequest,\n ): Observable<ICreatePersonalInviteResponse> {\n // TODO: Should we pass `request.message`? If not should be excluded from request\n return this.sneatApiService.get<ICreatePersonalInviteResponse>(\n `invites/invite_link_for_member?space=${request.spaceID}&member=${request.to.memberID}`,\n );\n }\n\n public getSpaceJoinInfo(\n inviteID: string,\n pin: string,\n ): Observable<IJoinSpaceInfoResponse> {\n return this.sneatApiService\n .postAsAnonymous<IJoinSpaceInfoResponse>('space/join_info', {\n inviteID,\n pin,\n })\n .pipe(\n map((response) => ({\n ...response,\n invite: {\n ...response.invite,\n id: inviteID,\n pin,\n },\n })),\n );\n }\n\n public rejectPersonalInvite(\n request: IRejectPersonalInviteRequest,\n ): Observable<void> {\n return this.sneatApiService.post('invites/reject_personal_invite', request);\n }\n\n public acceptInviteByAuthenticatedUser(\n inviteInfo: IJoinSpaceInfoResponse,\n ): Observable<IAcceptInviteResponse> {\n const request: IAcceptPersonalInviteRequest = {\n spaceID: inviteInfo.space.id,\n inviteID: inviteInfo.invite.id,\n pin: inviteInfo.invite.pin,\n member: inviteInfo.member,\n // email: this.email,\n // fullName: this.fullName,\n };\n return this.sneatApiService.post('invites/accept_personal_invite', request);\n }\n\n public acceptInviteByUnauthenticatedUser(\n inviteInfo: IJoinSpaceInfoResponse,\n ): Observable<IAcceptInviteResponse> {\n if (\n inviteInfo.invite.to.channel === 'email' &&\n inviteInfo.invite.to.address\n ) {\n return this.acceptEmailInviteByUnauthenticatedUser(inviteInfo);\n }\n return throwError(\n () => 'Only join from an email invites is implemented yet',\n );\n }\n\n private acceptEmailInviteByUnauthenticatedUser(\n inviteInfo: IJoinSpaceInfoResponse,\n ): Observable<IAcceptInviteResponse> {\n const email = inviteInfo.invite.to.address;\n if (!email) {\n return throwError(() => 'No value in inviteInfo.invite.to.address');\n }\n const password = this.randomService.newRandomId({ len: 12 });\n const credentialPromise = createUserWithEmailAndPassword(\n this.afAuth,\n email,\n password,\n );\n const credentialObserver = from(credentialPromise);\n return credentialObserver.pipe(\n switchMap((userCredential) => {\n if (!userCredential.user) {\n throw new Error('!userCredential.user');\n }\n // We call it to be 100% sure user fully authenticated\n return from(userCredential.user.getIdToken());\n }),\n switchMap((firebaseToken) => {\n this.sneatApiService.setApiAuthToken(firebaseToken);\n return this.acceptInviteByAuthenticatedUser(inviteInfo);\n }),\n );\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { IContactContext } from '@sneat/extension-contactus-contract';\nimport { ISpaceContext } from '@sneat/space-models';\nimport { SpaceNavService } from '@sneat/space-services';\n\n@Injectable()\nexport class ContactusNavService {\n private readonly spaceNavService = inject(SpaceNavService);\n\n public navigateToAddMember = (space: ISpaceContext): Promise<boolean> =>\n this.spaceNavService.navigateForwardToSpacePage(space, 'add-member');\n\n public navigateToMember(memberContext: IContactContext): void {\n console.log(\n `navigateToMember(team.id=${memberContext?.space?.id}, memberInfo.id=${memberContext?.id})`,\n );\n // const id = `${memberContext?.space?.id}:${memberContext?.id}`;\n // const { space } = memberContext;\n // if (!space) {\n // \tthis.errorLogger.logError(\n // \t\t'not able to navigate to member without team context',\n // \t);\n // \treturn;\n // }\n // this.spaceNavService.navigateForwardToSpacePage(\n // \tspace,\n // \t`member/${memberContext.id}`,\n // \t{\n // \t\tstate: {\n // \t\t\tcontact: memberContext,\n // \t\t},\n // \t},\n // );\n }\n}\n","import { Provider } from '@angular/core';\nimport {\n CONTACT_GROUP_SERVICE,\n CONTACT_NAV_SERVICE,\n CONTACT_ROLE_SERVICE,\n CONTACT_SERVICE,\n CONTACTUS_NAV_SERVICE,\n CONTACTUS_SPACE_SERVICE,\n INVITE_SERVICE,\n} from '@sneat/extension-contactus-contract';\nimport {\n ContactGroupService,\n ContactNavService,\n ContactRoleService,\n ContactService,\n ContactusNavService,\n ContactusSpaceService,\n InviteService,\n MemberGroupService,\n MemberService,\n} from './services';\n\n/**\n * Provides the concrete contactus services and binds them to the\n * contract injection tokens. Consumed at app bootstrap; other\n * extensions must NOT import this.\n */\nexport function provideContactus(): Provider[] {\n // NOTE: ContactusSpaceContextService is intentionally NOT provided here — it\n // is manually instantiated (its constructor takes plain Observables: the\n // destroyed$ and spaceID$ streams), so it has no Angular DI factory and\n // registering it as a provider throws NG0204. Consumers `new` it directly.\n return [\n ContactService,\n ContactNavService,\n ContactGroupService,\n ContactRoleService,\n ContactusSpaceService,\n ContactusNavService,\n MemberService,\n MemberGroupService,\n InviteService,\n { provide: CONTACT_SERVICE, useExisting: ContactService },\n { provide: CONTACTUS_SPACE_SERVICE, useExisting: ContactusSpaceService },\n { provide: CONTACT_NAV_SERVICE, useExisting: ContactNavService },\n { provide: CONTACTUS_NAV_SERVICE, useExisting: ContactusNavService },\n { provide: CONTACT_GROUP_SERVICE, useExisting: ContactGroupService },\n { provide: CONTACT_ROLE_SERVICE, useExisting: ContactRoleService },\n { provide: INVITE_SERVICE, useExisting: InviteService },\n ];\n}\n","import { Route } from '@angular/router';\n\nexport const membersRoutes: Route[] = [\n {\n path: 'members',\n data: { title: 'Members' },\n loadComponent: () =>\n import('./pages/members/members-page.component').then(\n (m) => m.MembersPageComponent,\n ),\n // ...guardRoute,\n },\n {\n path: 'new-member',\n data: { title: 'New member' },\n loadComponent: () =>\n import('./pages/new-member').then((m) => m.NewMemberPageComponent),\n // ...guardRoute,\n },\n {\n path: 'member/:contactID',\n data: { title: 'Member' },\n loadComponent: () =>\n import('./pages/member/space-member-page.component').then(\n (m) => m.SpaceMemberPageComponent,\n ),\n },\n\n // {\n // \tpath: 'pupils',\n // \tloadChildren: () => import('./pupils/pupils.module')\n // \t\t.then(m => m.PupilsPageModule),\n // \t// ...guardRoute,\n // },\n // {\n // \tpath: 'staff',\n // \tloadChildren: () => import('./staff/staff.module')\n // \t\t.then(m => m.StaffPageModule),\n // \t// ...guardRoute,\n // },\n];\n","import { Route } from '@angular/router';\nimport { membersRoutes } from './members';\n\n// import {guardRoute} from '../../utils/guard-route';\n\nexport const contactusRoutes: Route[] = [\n {\n path: 'contacts',\n data: { title: 'Contacts' },\n loadComponent: () =>\n import('./pages/contacts/contacts-page.component').then(\n (m) => m.ContactsPageComponent,\n ),\n // ...guardRoute,\n },\n {\n path: 'new-contact',\n data: { title: 'New Contact' },\n loadComponent: () =>\n import('./pages').then((m) => m.NewContactPageComponent),\n // ...guardRoute,\n },\n {\n path: 'contact/:contactID',\n data: { title: 'Contact' },\n loadComponent: () => import('./pages').then((m) => m.ContactPageComponent),\n // ...guardRoute,\n },\n {\n path: 'contact/:contactID/new-location',\n data: { title: 'New location' },\n loadComponent: () =>\n import('./pages').then((m) => m.NewLocationPageComponent),\n // ...guardRoute,\n },\n ...membersRoutes,\n // {\n // \tpath: 'applicants',\n // \tloadChildren: () => import('./pages/contacts/contacts-page.module')\n // \t\t.then(m => m.ContactsPageModule),\n // \t// ...guardRoute,\n // },\n // {\n // \tpath: 'tenants',\n // \tloadChildren: () => import('./pages/contacts/contacts-page.module')\n // \t\t.then(m => m.ContactsPageModule),\n // \t// ...guardRoute,\n // },\n // {\n // \tpath: 'landlords',\n // \tloadChildren: () => import('./pages/contacts/contacts-page.module')\n // \t\t.then(m => m.ContactsPageModule),\n // \t// ...guardRoute,\n // },\n];\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["AngularFirestore","map"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sneat-extension-contactus.mjs","sources":["../../../../../../libs/extensions/contactus/runtime/src/lib/services/contact-group-service.ts","../../../../../../libs/extensions/contactus/runtime/src/lib/services/contact-nav-service.ts","../../../../../../libs/extensions/contactus/runtime/src/lib/services/contactus-space.service.ts","../../../../../../libs/extensions/contactus/runtime/src/lib/services/contact-service.ts","../../../../../../libs/extensions/contactus/runtime/src/lib/services/contactus-space-context.service.ts","../../../../../../libs/extensions/contactus/runtime/src/lib/services/contact-role.service.ts","../../../../../../libs/extensions/contactus/runtime/src/lib/services/member.service.ts","../../../../../../libs/extensions/contactus/runtime/src/lib/services/contactus-services.module.ts","../../../../../../libs/extensions/contactus/runtime/src/lib/services/member-group.service.ts","../../../../../../libs/extensions/contactus/runtime/src/lib/services/invite.service.ts","../../../../../../libs/extensions/contactus/runtime/src/lib/services/contactus-nav.service.ts","../../../../../../libs/extensions/contactus/runtime/src/lib/provide-contactus.ts","../../../../../../libs/extensions/contactus/runtime/src/lib/members/members-routing.ts","../../../../../../libs/extensions/contactus/runtime/src/lib/contactus-routing.module.ts","../../../../../../libs/extensions/contactus/runtime/src/sneat-extension-contactus.ts"],"sourcesContent":["import { Injectable, Injector, inject } from '@angular/core';\nimport { Firestore as AngularFirestore } from '@angular/fire/firestore';\nimport { SneatApiService } from '@sneat/api';\nimport { IIdAndDbo, ISpaceRef } from '@sneat/core';\nimport {\n defaultFamilyContactGroupDTOs,\n defaultFamilyContactGroups,\n IContactGroupBrief,\n IContactGroupDbo,\n} from '@sneat/extension-contactus-contract';\nimport { ModuleSpaceItemService } from '@sneat/space-services';\nimport { Observable, of } from 'rxjs';\n\n\n@Injectable()\nexport class ContactGroupService {\n private readonly spaceItemService: ModuleSpaceItemService<\n IContactGroupBrief,\n IContactGroupDbo\n >;\n\n constructor() {\n const afs = inject(AngularFirestore);\n const sneatApiService = inject(SneatApiService);\n const injector = inject(Injector);\n\n this.spaceItemService = new ModuleSpaceItemService(\n injector,\n 'contactus',\n 'contact_groups',\n afs,\n sneatApiService,\n );\n }\n\n getContactGroups(): Observable<readonly IIdAndDbo<IContactGroupDbo>[]> {\n return of(defaultFamilyContactGroupDTOs);\n }\n\n getContactGroupByID(\n id: string,\n space: ISpaceRef,\n ): Observable<IIdAndDbo<IContactGroupDbo>> {\n const cg = defaultFamilyContactGroups.find((cg) => cg.id === id);\n if (!cg) {\n return of({ id, space, dbo: { title: id } });\n }\n return of(cg);\n }\n\n watchMemberGroupsBySpace(\n space: ISpaceRef,\n status: 'active' | 'archived' = 'active',\n ): Observable<IIdAndDbo<IContactGroupDbo>[]> {\n // console.log('watchMemberGroupsByTeamID()', spaceID);\n return this.spaceItemService.watchModuleSpaceItemsWithSpaceRef(space, {\n filter: [{ field: 'status', operator: '==', value: status }],\n });\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { excludeUndefined } from '@sneat/core';\nimport { ContactRole } from '@sneat/extension-contactus-contract';\nimport { ErrorLogger, IErrorLogger } from '@sneat/core';\nimport { ISpaceContext } from '@sneat/space-models';\nimport { SpaceNavService } from '@sneat/space-services';\n\nexport interface INewContactPageParams {\n group?: string;\n role?: ContactRole;\n asset?: string;\n document?: string;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class ContactNavService {\n private readonly errorLogger = inject<IErrorLogger>(ErrorLogger);\n private readonly spaceNavService = inject(SpaceNavService);\n\n goNewContactPage(space: ISpaceContext, params?: INewContactPageParams): void {\n this.spaceNavService\n .navigateForwardToSpacePage(space, 'new-contact', {\n queryParams: excludeUndefined(params),\n })\n .catch(\n this.errorLogger.logErrorHandler(\n 'failed to navigate to \"new-contact\" page',\n ),\n );\n }\n}\n","import { Injectable, Injector, inject } from '@angular/core';\nimport { Firestore as AngularFirestore } from '@angular/fire/firestore';\nimport { IContactBrief, IContactusSpaceDbo } from '@sneat/extension-contactus-contract';\nimport { SpaceModuleService } from '@sneat/space-services';\n\n@Injectable()\nexport class ContactusSpaceService extends SpaceModuleService<IContactusSpaceDbo> {\n public constructor() {\n const afs = inject(AngularFirestore);\n const injector = inject(Injector);\n super(injector, 'contactus', afs);\n }\n\n public readonly watchContactBriefs = (spaceID: string) => {\n // console.log(`ContactusSpaceService.watchContactBriefs(${spaceID})`);\n return this.watchBriefs<IContactBrief>(\n spaceID,\n (dto) => dto?.contacts || {},\n );\n };\n}\n","import { Injectable, Injector, inject } from '@angular/core';\nimport { Firestore as AngularFirestore } from '@angular/fire/firestore';\nimport { IFilter, SneatApiService } from '@sneat/api';\nimport { SneatUserService } from '@sneat/auth-core';\nimport { IIdAndBriefAndOptionalDbo, ISpaceRef } from '@sneat/core';\nimport {\n IContactBrief,\n IContactDbo,\n IContactContext,\n ICreateContactRequest,\n IContactWithDboAndSpace,\n IChangeMemberRoleRequest,\n IContactsFilter,\n IAddContactCommChannelRequest,\n IContactCommChannelRequest,\n IContactRequest,\n IContactRequestWithOptionalMessage,\n ISetContactsStatusRequest,\n IUpdateContactCommChannelRequest,\n IUpdateContactRequest,\n validateContactRequest,\n validateUpdateContactRequest,\n} from '@sneat/extension-contactus-contract';\nimport {\n ISpaceContext,\n ISpaceItemWithOptionalBriefAndOptionalDbo,\n} from '@sneat/space-models';\nimport { ModuleSpaceItemService } from '@sneat/space-services';\nimport { ContactusSpaceService } from './contactus-space.service';\nimport { map, Observable, tap, throwError } from 'rxjs';\n\n@Injectable()\nexport class ContactService extends ModuleSpaceItemService<\n IContactBrief,\n IContactDbo\n> {\n protected contactusSpaceService = inject(ContactusSpaceService);\n private readonly userService = inject(SneatUserService);\n\n constructor() {\n const afs = inject(AngularFirestore);\n const sneatApiService = inject(SneatApiService);\n const injector = inject(Injector);\n super(injector, 'contactus', 'contacts', afs, sneatApiService);\n // this.briefService = new TeamItemService<{id: string}, IContactsBrief>('briefs', afs, sneatApiService);\n }\n\n public createContact(\n spaceRef: ISpaceRef,\n request: ICreateContactRequest,\n endpoint = 'contactus/create_contact',\n ): Observable<IContactWithDboAndSpace> {\n return this.createSpaceItem(endpoint, spaceRef, request);\n }\n\n public deleteContact(request: IContactRequest): Observable<void> {\n validateContactRequest(request);\n return this.deleteSpaceItem('contactus/delete_contact', request);\n }\n\n public updateContact(request: IUpdateContactRequest): Observable<void> {\n validateUpdateContactRequest(request);\n return this.sneatApiService.post('contactus/update_contact', request);\n }\n\n public addContactCommChannel(\n request: IAddContactCommChannelRequest,\n ): Observable<void> {\n return this.sneatApiService.post(\n 'contactus/add_contact_comm_channel',\n request,\n );\n }\n\n public updateContactCommChannel(\n request: IUpdateContactCommChannelRequest,\n ): Observable<void> {\n return this.sneatApiService.post(\n 'contactus/update_contact_comm_channel',\n request,\n );\n }\n\n public deleteContactCommChannel(\n request: IContactCommChannelRequest,\n ): Observable<void> {\n return this.sneatApiService.post(\n 'contactus/delete_contact_comm_channel',\n request,\n );\n }\n\n public setContactsStatus(\n request: ISetContactsStatusRequest,\n ): Observable<void> {\n if (!request.contactIDs?.length) {\n return throwError(() => 'at least 1 contact is required');\n }\n return this.sneatApiService.post('contactus/set_contacts_status', request);\n }\n\n watchContactsWithRole(\n space: ISpaceContext,\n role: string,\n status: 'active' | 'archived' = 'active',\n filter?: readonly IFilter[],\n ): Observable<IIdAndBriefAndOptionalDbo<IContactBrief, IContactDbo>[]> {\n filter = [\n ...(filter || []),\n { field: 'roles', operator: '==', value: role },\n ];\n return this.watchSpaceContacts(space, status, filter);\n }\n\n public watchSpaceContacts(\n space: ISpaceContext,\n status: 'active' | 'archived' = 'active',\n filter?: readonly IFilter[],\n ): Observable<IIdAndBriefAndOptionalDbo<IContactBrief, IContactDbo>[]> {\n filter = [\n {\n field: 'status',\n value: status,\n operator: '==',\n },\n {\n field: 'parentContactID',\n operator: '==',\n value: '',\n },\n ...(filter || []),\n ];\n return this.watchModuleSpaceItemsWithSpaceRef<IContactDbo>(space, {\n filter,\n });\n }\n\n watchContactById(\n space: ISpaceContext,\n contactID: string,\n ): Observable<\n ISpaceItemWithOptionalBriefAndOptionalDbo<IContactBrief, IContactDbo>\n > {\n return this.watchSpaceItemByIdWithSpaceRef(space, contactID).pipe(\n tap((contact) => console.log('contact loaded:', contactID, contact)),\n );\n }\n\n watchContactsByRole(\n space: ISpaceContext,\n filter?: IContactsFilter,\n ): Observable<IContactContext[]> {\n const f: IFilter[] = [\n // { field: 'spaceID', value: team.id, operator: '==' },\n ];\n if (filter?.status) {\n f.push({ field: 'status', value: filter.status, operator: '==' });\n }\n if (filter?.role) {\n f.push({\n field: 'roles',\n operator: 'array-contains',\n value: filter.role,\n });\n }\n return this.watchModuleSpaceItemsWithSpaceRef(space, { filter: f });\n }\n\n watchChildContacts(\n space: ISpaceContext,\n id: string,\n filter: IContactsFilter = { status: 'active' },\n ): Observable<IContactContext[]> {\n const f: IFilter[] = [\n { field: 'parentContactID', value: id, operator: '==' },\n ];\n if (filter.status) {\n f.push({ field: 'status', value: filter.status, operator: '==' });\n }\n if (filter.role) {\n f.push({\n field: 'roles',\n operator: 'array-contains',\n value: filter.role,\n });\n }\n return this.watchModuleSpaceItemsWithSpaceRef(space, { filter: f });\n }\n\n public changeContactRole(\n request: IChangeMemberRoleRequest,\n ): Observable<void> {\n return this.sneatApiService\n .post(`contactus/change_member_role`, request)\n .pipe(\n map(() => {\n return;\n }),\n );\n }\n\n public removeSpaceMember(\n request: IContactRequestWithOptionalMessage,\n ): Observable<ISpaceContext> {\n console.log(\n `removeTeamMember(spaceID=${request.spaceID}, contactID=${request.contactID})`,\n );\n try {\n validateContactRequest(request);\n } catch (ex) {\n return throwError(() => ex);\n }\n\n // const request: IContactRequest = { spaceID, contactID };\n return this.sneatApiService.post('contactus/remove_team_member', request);\n }\n}\n","import { inject } from '@angular/core';\nimport { SneatUserService } from '@sneat/auth-core';\nimport { IContactusSpaceDboAndID } from '@sneat/extension-contactus-contract';\nimport { ContactusSpaceService } from './contactus-space.service';\nimport { ErrorLogger } from '@sneat/core';\nimport { Observable, Subject, Subscription, takeUntil } from 'rxjs';\n\n// TODO: ContactusSpaceContextService can be abstracted and reused by other entities\nexport class ContactusSpaceContextService {\n // Is used to emit contactus space record changes\n private readonly contactusSpaceContext = new Subject<\n IContactusSpaceDboAndID | undefined\n >();\n\n public readonly contactusSpaceContext$ =\n this.contactusSpaceContext.asObservable();\n\n private spaceID?: string;\n private spaceModuleRecordSub?: Subscription;\n\n private readonly errorLogger = inject(ErrorLogger);\n private readonly userService = inject(SneatUserService);\n private readonly contactusSpaceService = inject(ContactusSpaceService);\n\n constructor(\n private readonly destroyed$: Observable<void>,\n private readonly spaceID$: Observable<string | undefined>,\n ) {\n destroyed$.subscribe({\n next: () => {\n this.contactusSpaceContext.complete();\n },\n });\n spaceID$.pipe(takeUntil(destroyed$)).subscribe({\n next: (spaceID) => {\n this.spaceID = spaceID;\n if (this.userService.currentUserID) {\n this.subscribeForContactusSpaceChanges(spaceID);\n }\n },\n });\n this.userService.userChanged.pipe(takeUntil(destroyed$)).subscribe({\n next: (uid) => {\n if (uid) {\n this.subscribeForContactusSpaceChanges(this.spaceID);\n } else {\n this.spaceModuleRecordSub?.unsubscribe();\n this.contactusSpaceContext.next(undefined);\n }\n },\n });\n }\n\n private readonly subscribeForContactusSpaceChanges = (\n spaceID?: string,\n ): void => {\n this.spaceModuleRecordSub?.unsubscribe();\n if (!spaceID) {\n return;\n }\n this.spaceModuleRecordSub = this.contactusSpaceService\n .watchSpaceModuleRecord(spaceID)\n .pipe(takeUntil(this.spaceID$), takeUntil(this.destroyed$))\n .subscribe({\n next: this.onContactusSpaceChanged,\n error: this.errorLogger.logErrorHandler(\n 'ContactusSpaceContextService: failed to get contactus space record',\n ),\n });\n };\n\n private readonly onContactusSpaceChanged = (\n contactusSpace: IContactusSpaceDboAndID,\n ): void => {\n console.log(\n 'ContactusSpaceContextService.onContactusSpaceChanged()',\n contactusSpace,\n );\n this.contactusSpaceContext.next(contactusSpace);\n };\n}\n","import { Injectable } from '@angular/core';\nimport { IIdAndBrief } from '@sneat/core';\nimport {\n defaultFamilyContactGroups,\n IContactRoleBrief,\n} from '@sneat/extension-contactus-contract';\nimport { Observable, of } from 'rxjs';\n\n@Injectable()\nexport class ContactRoleService {\n getContactRoleByID(id: string): Observable<IIdAndBrief<IContactRoleBrief>> {\n for (const cg of defaultFamilyContactGroups) {\n for (let j = 0; j < (cg?.dbo?.roles?.length || 0); j++) {\n const role = cg.dbo?.roles && cg.dbo.roles[j];\n if (role?.id === id) {\n return of({ id, brief: role.brief });\n }\n }\n }\n return of({ id, brief: { title: id } });\n }\n}\n","import { Injectable } from '@angular/core';\nimport { trimNames } from '@sneat/auth-models';\nimport {\n IMemberBrief,\n IAcceptPersonalInviteRequest,\n IAddSpaceMemberResponse,\n ICreateSpaceMemberRequest,\n validateCreateSpaceMemberRequest,\n} from '@sneat/extension-contactus-contract';\nimport { ContactService } from './contact-service';\nimport { Observable } from 'rxjs';\n\n@Injectable()\nexport class MemberService extends ContactService {\n public acceptPersonalInvite(\n request: IAcceptPersonalInviteRequest,\n firebaseToken: string,\n ): Observable<IMemberBrief> {\n // console.log('MemberService.acceptPersonalInvite()');\n if (firebaseToken) {\n this.sneatApiService.setApiAuthToken(firebaseToken);\n }\n return this.sneatApiService.post('invites/accept_personal_invite', request);\n }\n\n public createMember(\n request: ICreateSpaceMemberRequest,\n ): Observable<IAddSpaceMemberResponse> {\n // console.log(`MemberService.addMember()`, request);\n if (request.names) {\n request = { ...request, names: trimNames(request.names) };\n }\n validateCreateSpaceMemberRequest(request);\n return this.sneatApiService.post<IAddSpaceMemberResponse>(\n 'contactus/create_member',\n request,\n );\n }\n}\n","import { NgModule } from '@angular/core';\nimport { ContactGroupService } from './contact-group-service';\nimport { ContactNavService } from './contact-nav-service';\nimport { ContactRoleService } from './contact-role.service';\nimport { ContactService } from './contact-service';\nimport { ContactusSpaceService } from './contactus-space.service';\nimport { MemberService } from './member.service';\n\n@NgModule({\n imports: [],\n providers: [\n ContactService,\n ContactNavService,\n ContactGroupService,\n ContactRoleService,\n ContactusSpaceService,\n MemberService,\n ],\n})\nexport class ContactusServicesModule {}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class MemberGroupService {\n // TODO: Move to ContactGroupService or delete\n}\n","import { Injectable, inject } from '@angular/core';\nimport { Auth, createUserWithEmailAndPassword } from '@angular/fire/auth';\nimport { SneatApiService } from '@sneat/api';\nimport { SneatAuthStateService } from '@sneat/auth-core';\nimport {\n IAcceptPersonalInviteRequest,\n ICreatePersonalInviteRequest,\n ICreatePersonalInviteResponse,\n IJoinSpaceInfoResponse,\n} from '@sneat/extension-contactus-contract';\nimport { excludeEmpty } from '@sneat/core';\nimport { ErrorLogger, IErrorLogger } from '@sneat/core';\nimport { RandomIdService } from '@sneat/random';\nimport {\n IAcceptInviteResponse,\n IRejectPersonalInviteRequest,\n} from '@sneat/space-models';\nimport { from, Observable, switchMap, throwError } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\n@Injectable()\nexport class InviteService {\n private readonly errorLogger = inject<IErrorLogger>(ErrorLogger);\n private readonly sneatAuthService = inject(SneatAuthStateService);\n private readonly sneatApiService = inject(SneatApiService);\n private readonly afAuth = inject(Auth);\n private readonly randomService = inject(RandomIdService);\n\n public createInviteForMember(\n request: ICreatePersonalInviteRequest,\n ): Observable<ICreatePersonalInviteResponse> {\n return this.sneatApiService.post<ICreatePersonalInviteResponse>(\n 'invites/create_invite_for_member',\n excludeEmpty(request),\n );\n }\n\n public getInviteLinkForMember(\n request: ICreatePersonalInviteRequest,\n ): Observable<ICreatePersonalInviteResponse> {\n // TODO: Should we pass `request.message`? If not should be excluded from request\n return this.sneatApiService.get<ICreatePersonalInviteResponse>(\n `invites/invite_link_for_member?space=${request.spaceID}&member=${request.to.memberID}`,\n );\n }\n\n public getSpaceJoinInfo(\n inviteID: string,\n pin: string,\n ): Observable<IJoinSpaceInfoResponse> {\n return this.sneatApiService\n .postAsAnonymous<IJoinSpaceInfoResponse>('space/join_info', {\n inviteID,\n pin,\n })\n .pipe(\n map((response) => ({\n ...response,\n invite: {\n ...response.invite,\n id: inviteID,\n pin,\n },\n })),\n );\n }\n\n public rejectPersonalInvite(\n request: IRejectPersonalInviteRequest,\n ): Observable<void> {\n return this.sneatApiService.post('invites/reject_personal_invite', request);\n }\n\n public acceptInviteByAuthenticatedUser(\n inviteInfo: IJoinSpaceInfoResponse,\n ): Observable<IAcceptInviteResponse> {\n const request: IAcceptPersonalInviteRequest = {\n spaceID: inviteInfo.space.id,\n inviteID: inviteInfo.invite.id,\n pin: inviteInfo.invite.pin,\n member: inviteInfo.member,\n // email: this.email,\n // fullName: this.fullName,\n };\n return this.sneatApiService.post('invites/accept_personal_invite', request);\n }\n\n public acceptInviteByUnauthenticatedUser(\n inviteInfo: IJoinSpaceInfoResponse,\n ): Observable<IAcceptInviteResponse> {\n if (\n inviteInfo.invite.to.channel === 'email' &&\n inviteInfo.invite.to.address\n ) {\n return this.acceptEmailInviteByUnauthenticatedUser(inviteInfo);\n }\n return throwError(\n () => 'Only join from an email invites is implemented yet',\n );\n }\n\n private acceptEmailInviteByUnauthenticatedUser(\n inviteInfo: IJoinSpaceInfoResponse,\n ): Observable<IAcceptInviteResponse> {\n const email = inviteInfo.invite.to.address;\n if (!email) {\n return throwError(() => 'No value in inviteInfo.invite.to.address');\n }\n const password = this.randomService.newRandomId({ len: 12 });\n const credentialPromise = createUserWithEmailAndPassword(\n this.afAuth,\n email,\n password,\n );\n const credentialObserver = from(credentialPromise);\n return credentialObserver.pipe(\n switchMap((userCredential) => {\n if (!userCredential.user) {\n throw new Error('!userCredential.user');\n }\n // We call it to be 100% sure user fully authenticated\n return from(userCredential.user.getIdToken());\n }),\n switchMap((firebaseToken) => {\n this.sneatApiService.setApiAuthToken(firebaseToken);\n return this.acceptInviteByAuthenticatedUser(inviteInfo);\n }),\n );\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { IContactContext } from '@sneat/extension-contactus-contract';\nimport { ISpaceContext } from '@sneat/space-models';\nimport { SpaceNavService } from '@sneat/space-services';\n\n@Injectable()\nexport class ContactusNavService {\n private readonly spaceNavService = inject(SpaceNavService);\n\n public navigateToAddMember = (space: ISpaceContext): Promise<boolean> =>\n this.spaceNavService.navigateForwardToSpacePage(space, 'add-member');\n\n public navigateToMember(memberContext: IContactContext): void {\n console.log(\n `navigateToMember(team.id=${memberContext?.space?.id}, memberInfo.id=${memberContext?.id})`,\n );\n // const id = `${memberContext?.space?.id}:${memberContext?.id}`;\n // const { space } = memberContext;\n // if (!space) {\n // \tthis.errorLogger.logError(\n // \t\t'not able to navigate to member without team context',\n // \t);\n // \treturn;\n // }\n // this.spaceNavService.navigateForwardToSpacePage(\n // \tspace,\n // \t`member/${memberContext.id}`,\n // \t{\n // \t\tstate: {\n // \t\t\tcontact: memberContext,\n // \t\t},\n // \t},\n // );\n }\n}\n","import { Provider } from '@angular/core';\nimport {\n CONTACT_GROUP_SERVICE,\n CONTACT_NAV_SERVICE,\n CONTACT_ROLE_SERVICE,\n CONTACT_SERVICE,\n CONTACTUS_NAV_SERVICE,\n CONTACTUS_SPACE_SERVICE,\n INVITE_SERVICE,\n} from '@sneat/extension-contactus-contract';\nimport {\n ContactGroupService,\n ContactNavService,\n ContactRoleService,\n ContactService,\n ContactusNavService,\n ContactusSpaceService,\n InviteService,\n MemberGroupService,\n MemberService,\n} from './services';\n\n/**\n * Provides the concrete contactus services and binds them to the\n * contract injection tokens. Consumed at app bootstrap; other\n * extensions must NOT import this.\n */\nexport function provideContactus(): Provider[] {\n // NOTE: ContactusSpaceContextService is intentionally NOT provided here — it\n // is manually instantiated (its constructor takes plain Observables: the\n // destroyed$ and spaceID$ streams), so it has no Angular DI factory and\n // registering it as a provider throws NG0204. Consumers `new` it directly.\n return [\n ContactService,\n ContactNavService,\n ContactGroupService,\n ContactRoleService,\n ContactusSpaceService,\n ContactusNavService,\n MemberService,\n MemberGroupService,\n InviteService,\n { provide: CONTACT_SERVICE, useExisting: ContactService },\n { provide: CONTACTUS_SPACE_SERVICE, useExisting: ContactusSpaceService },\n { provide: CONTACT_NAV_SERVICE, useExisting: ContactNavService },\n { provide: CONTACTUS_NAV_SERVICE, useExisting: ContactusNavService },\n { provide: CONTACT_GROUP_SERVICE, useExisting: ContactGroupService },\n { provide: CONTACT_ROLE_SERVICE, useExisting: ContactRoleService },\n { provide: INVITE_SERVICE, useExisting: InviteService },\n ];\n}\n","import { Route } from '@angular/router';\n\nexport const membersRoutes: Route[] = [\n {\n path: 'members',\n data: { title: 'Members' },\n loadComponent: () =>\n import('./pages/members/members-page.component').then(\n (m) => m.MembersPageComponent,\n ),\n // ...guardRoute,\n },\n {\n path: 'new-member',\n data: { title: 'New member' },\n loadComponent: () =>\n import('./pages/new-member').then((m) => m.NewMemberPageComponent),\n // ...guardRoute,\n },\n {\n path: 'member/:contactID',\n data: { title: 'Member' },\n loadComponent: () =>\n import('./pages/member/space-member-page.component').then(\n (m) => m.SpaceMemberPageComponent,\n ),\n },\n\n // {\n // \tpath: 'pupils',\n // \tloadChildren: () => import('./pupils/pupils.module')\n // \t\t.then(m => m.PupilsPageModule),\n // \t// ...guardRoute,\n // },\n // {\n // \tpath: 'staff',\n // \tloadChildren: () => import('./staff/staff.module')\n // \t\t.then(m => m.StaffPageModule),\n // \t// ...guardRoute,\n // },\n];\n","import { Route } from '@angular/router';\nimport { membersRoutes } from './members';\n\n// import {guardRoute} from '../../utils/guard-route';\n\nexport const contactusRoutes: Route[] = [\n {\n path: 'contacts',\n data: { title: 'Contacts' },\n loadComponent: () =>\n import('./pages/contacts/contacts-page.component').then(\n (m) => m.ContactsPageComponent,\n ),\n // ...guardRoute,\n },\n {\n path: 'new-contact',\n data: { title: 'New Contact' },\n loadComponent: () =>\n import('./pages').then((m) => m.NewContactPageComponent),\n // ...guardRoute,\n },\n {\n path: 'contact/:contactID',\n data: { title: 'Contact' },\n loadComponent: () => import('./pages').then((m) => m.ContactPageComponent),\n // ...guardRoute,\n },\n {\n path: 'contact/:contactID/new-location',\n data: { title: 'New location' },\n loadComponent: () =>\n import('./pages').then((m) => m.NewLocationPageComponent),\n // ...guardRoute,\n },\n ...membersRoutes,\n // {\n // \tpath: 'applicants',\n // \tloadChildren: () => import('./pages/contacts/contacts-page.module')\n // \t\t.then(m => m.ContactsPageModule),\n // \t// ...guardRoute,\n // },\n // {\n // \tpath: 'tenants',\n // \tloadChildren: () => import('./pages/contacts/contacts-page.module')\n // \t\t.then(m => m.ContactsPageModule),\n // \t// ...guardRoute,\n // },\n // {\n // \tpath: 'landlords',\n // \tloadChildren: () => import('./pages/contacts/contacts-page.module')\n // \t\t.then(m => m.ContactsPageModule),\n // \t// ...guardRoute,\n // },\n];\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["AngularFirestore","map"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sneat/extension-contactus",
|
|
3
|
-
"version": "0.13.
|
|
3
|
+
"version": "0.13.7",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
7
7
|
"peerDependencies": {
|
|
8
|
-
"@angular/common": "^
|
|
9
|
-
"@angular/core": "^
|
|
8
|
+
"@angular/common": "^22.0.0",
|
|
9
|
+
"@angular/core": "^22.0.0",
|
|
10
10
|
"@angular/fire": "^20.0.0",
|
|
11
|
-
"@angular/forms": "^
|
|
12
|
-
"@angular/router": "^
|
|
13
|
-
"@ionic/angular": ">=
|
|
14
|
-
"angularx-qrcode": "^
|
|
11
|
+
"@angular/forms": "^22.0.0",
|
|
12
|
+
"@angular/router": "^22.0.0",
|
|
13
|
+
"@ionic/angular": ">=9 <10",
|
|
14
|
+
"angularx-qrcode": "^22.0.0",
|
|
15
15
|
"rxjs": "^7.0.0",
|
|
16
16
|
"@sneat/api": "^0.22.0 || ^0.23.0",
|
|
17
17
|
"@sneat/auth-core": "^0.22.0 || ^0.23.0",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sneat-extension-contactus-contacts-page.component-4EsaJkXj.mjs","sources":["../../../../../../libs/extensions/contactus/runtime/src/lib/pages/contacts/contacts-page.component.ts","../../../../../../libs/extensions/contactus/runtime/src/lib/pages/contacts/contacts-page.component.html"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n computed,\n OnDestroy,\n signal,\n inject,\n} from '@angular/core';\nimport {\n IonBackButton,\n IonButton,\n IonButtons,\n IonContent,\n IonFooter,\n IonHeader,\n IonIcon,\n IonLabel,\n IonMenuButton,\n IonTitle,\n IonToolbar,\n} from '@ionic/angular/standalone';\nimport {\n ContactsComponent,\n ContactsComponentCommand,\n ContactsComponentCommandName,\n} from '@sneat/extension-contactus-ui';\nimport { setHrefQueryParam } from '@sneat/core';\nimport {\n addSpace,\n ContactRole,\n IContactWithCheck,\n} from '@sneat/extension-contactus-contract';\nimport {\n SpacePageTitleComponent,\n SpaceItemsBaseComponent,\n} from '@sneat/space-components';\nimport {\n ContactusServicesModule,\n ContactusSpaceService,\n} from '../../services';\nimport { SpaceServiceModule } from '@sneat/space-services';\nimport { ClassName } from '@sneat/ui';\nimport { Subject } from 'rxjs';\n\n@Component({\n imports: [\n SpacePageTitleComponent,\n ContactusServicesModule,\n SpaceServiceModule,\n ContactsComponent,\n IonHeader,\n IonToolbar,\n IonButtons,\n IonBackButton,\n IonButtons,\n IonButton,\n IonBackButton,\n IonTitle,\n IonIcon,\n IonFooter,\n IonLabel,\n IonContent,\n IonMenuButton,\n ],\n providers: [{ provide: ClassName, useValue: 'ContactsPageComponent' }],\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'sneat-contacts-page',\n templateUrl: './contacts-page.component.html',\n})\nexport class ContactsPageComponent\n extends SpaceItemsBaseComponent\n implements OnDestroy\n{\n private readonly contactusSpaceService = inject(ContactusSpaceService);\n\n protected readonly $allContacts = signal<\n undefined | readonly IContactWithCheck[]\n >(undefined);\n\n // public readonly $filter = signal<string>('');\n public readonly $role = signal<ContactRole | undefined>(undefined);\n public readonly $group = signal<string | undefined>(undefined);\n\n protected $pageTitle = computed(() => {\n const role = this.$role();\n if (role) {\n return `${role.toUpperCase() + role.substr(1)}s`;\n }\n return 'Contacts';\n });\n\n protected readonly $selectedContacts = computed(() =>\n this.$allContacts()?.filter((c) => c.isChecked),\n );\n\n constructor() {\n super('');\n const role = location.pathname.match(/(applicant|landlord|tenant)/);\n if (role) {\n this.$role.set(role[1] as ContactRole);\n }\n\n // const allContacts = window.history.state.contacts as IContactWithSpace[];\n // if (allContacts) {\n // \tthis.$allContacts.set(allContacts);\n // }\n\n this.route.queryParamMap.pipe(this.takeUntilDestroyed()).subscribe({\n next: (q) => {\n this.$role.set((q.get('role') as ContactRole) || undefined);\n this.$group.set(q.get('group') || undefined);\n },\n });\n this.spaceIDChanged$.subscribe({\n next: (spaceID) => {\n if (!spaceID) {\n return;\n }\n this.contactusSpaceService\n .watchContactBriefs(this.space.id)\n .pipe(this.takeUntilDestroyed(), this.takeUntilSpaceIdChanged())\n .subscribe({\n next: (contacts) => {\n const space = this.$space();\n if (space.id !== spaceID) {\n return;\n }\n this.setSpaceContacts(contacts.map(addSpace(space)) || []);\n },\n });\n },\n });\n }\n\n protected $titleIcon = computed(() => {\n switch (this.$role()) {\n case 'tenant':\n return '🤠';\n case 'landlord':\n return '🤴';\n case 'applicant':\n return '🤔';\n default:\n return '📇';\n }\n });\n\n private readonly setSpaceContacts = (contacts: IContactWithCheck[]): void => {\n this.$allContacts.set(contacts);\n };\n\n protected onRoleChanged(role?: ContactRole): void {\n this.$role.set(role);\n const url = setHrefQueryParam('role', role || '');\n history.replaceState(undefined, document.title, url);\n }\n\n protected readonly command = new Subject<ContactsComponentCommand>();\n\n protected sendCommand(\n event: Event,\n name: ContactsComponentCommandName,\n ): void {\n this.command.next({ name, event });\n }\n\n public override ngOnDestroy(): void {\n this.command.complete();\n super.ngOnDestroy();\n }\n}\n","<ion-header>\n <ion-toolbar color=\"light\" class=\"with-back-button with-end-buttons\">\n <ion-buttons slot=\"start\">\n <ion-back-button [defaultHref]=\"$defaultBackUrl()\" />\n </ion-buttons>\n <sneat-space-page-title\n [space]=\"$role() ? undefined : $space()\"\n [generalTitle]=\"$pageTitle()\"\n [icon]=\"$titleIcon()\"\n [titlesBySpaceType]=\"{\n personal: 'Personal contacts',\n family: 'Family contacts',\n }\"\n />\n <ion-buttons slot=\"end\">\n <ion-button\n color=\"primary\"\n size=\"small\"\n title=\"Add contact\"\n (click)=\"sendCommand($event, 'new_contact')\"\n >\n <ion-icon name=\"add\" slot=\"start\" />\n <ion-label>Add</ion-label>\n </ion-button>\n <ion-menu-button />\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n\n<ion-content class=\"cardy\">\n <sneat-contacts\n [$space]=\"$space()\"\n [$roleID]=\"$role()\"\n [$groupID]=\"$group()\"\n [$allContacts]=\"$allContacts()\"\n [command]=\"command.asObservable()\"\n (contactsChange)=\"$allContacts.set($event)\"\n (roleChange)=\"onRoleChanged($event)\"\n />\n <div style=\"height: 30px\"></div>\n</ion-content>\n\n@if ($selectedContacts()?.length; as numberOfSelectedContacts) {\n <ion-footer>\n <ion-toolbar color=\"light\">\n <ion-buttons slot=\"start\">\n <ion-button\n title=\"Reset\"\n (click)=\"sendCommand($event, 'reset_selected')\"\n >\n <ion-icon name=\"close-circle-outline\"></ion-icon>\n </ion-button>\n </ion-buttons>\n <ion-title>\n @if (numberOfSelectedContacts === 1) {\n {{ numberOfSelectedContacts }} contact selected\n } @else {\n {{ numberOfSelectedContacts }} contacts selected\n }\n </ion-title>\n <ion-buttons slot=\"end\">\n <ion-button color=\"success\">Share</ion-button>\n <ion-button color=\"warning\">Archive</ion-button>\n <!--\t\t\t\t<ion-button color=\"danger\">Delete</ion-button>-->\n </ion-buttons>\n </ion-toolbar>\n </ion-footer>\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sneat-extension-contactus-index-BoDcqthC.mjs","sources":["../../../../../../libs/extensions/contactus/runtime/src/lib/members/pages/new-member/new-member-form.component.ts","../../../../../../libs/extensions/contactus/runtime/src/lib/members/pages/new-member/new-member-form.component.html","../../../../../../libs/extensions/contactus/runtime/src/lib/members/pages/new-member/new-member-page.component.ts","../../../../../../libs/extensions/contactus/runtime/src/lib/members/pages/new-member/new-member-page.component.html"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n OnChanges,\n signal,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport {\n FormsModule,\n ReactiveFormsModule,\n UntypedFormGroup,\n} from '@angular/forms';\nimport {\n IonButton,\n IonCard,\n IonCardContent,\n IonCardHeader,\n IonCardSubtitle,\n IonCardTitle,\n IonCol,\n IonGrid,\n IonLabel,\n IonRow,\n IonSpinner,\n NavController,\n} from '@ionic/angular/standalone';\nimport { namesToUrlParams } from '@sneat/auth-models';\nimport { MemberService } from '../../../services';\nimport { PersonWizardComponent } from '@sneat/extension-contactus-ui';\nimport { formNexInAnimation } from '@sneat/core';\nimport { personNames } from '@sneat/auth-ui';\nimport { RoutingState } from '@sneat/core';\nimport {\n IContactusSpaceDboAndID,\n ICreateSpaceMemberRequest,\n IPersonRequirements,\n isRelatedPersonReady,\n MemberContactType,\n NewContactBaseDboAndSpaceRef,\n} from '@sneat/extension-contactus-contract';\nimport { zipMapBriefsWithIDs } from '@sneat/space-models';\nimport { QRCodeComponent } from 'angularx-qrcode';\nimport { WithNewContactInput } from '@sneat/extension-contactus-ui';\nimport { ClassName } from '@sneat/ui';\n\n@Component({\n animations: [formNexInAnimation],\n imports: [\n FormsModule,\n ReactiveFormsModule,\n PersonWizardComponent,\n IonCard,\n IonCardContent,\n IonCardHeader,\n IonCardTitle,\n IonCardSubtitle,\n QRCodeComponent,\n IonButton,\n IonSpinner,\n IonLabel,\n IonRow,\n IonGrid,\n IonCol,\n ],\n providers: [{ provide: ClassName, useValue: 'NewMemberFormComponent' }],\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'sneat-new-member-form',\n templateUrl: 'new-member-form.component.html',\n})\nexport class NewMemberFormComponent\n extends WithNewContactInput\n implements OnChanges\n{\n public personRequirements: IPersonRequirements = {\n ageGroup: { required: true },\n gender: { required: true },\n };\n\n private readonly navController = inject(NavController);\n\n private readonly hasNavHistory: boolean;\n protected readonly $isSubmitting = signal(false);\n\n protected readonly $canSubmit = computed(\n () =>\n this.$spaceRef().id &&\n !this.$isSubmitting() &&\n this.$isContactReady() &&\n !this.addMemberForm.disabled && //TODO(check) Could be a problem with Push detection strategy?\n this.addMemberForm.valid,\n );\n\n protected readonly $qrData = computed(() => {\n const contact = this.$contact();\n let url = `https://sneat.app/pwa/join?family=${contact.space.id}`;\n const { gender, ageGroup } = contact.dbo;\n if (\n gender &&\n gender !== 'unknown' &&\n gender !== 'undisclosed' &&\n gender !== 'other'\n ) {\n url += '&gender=' + gender;\n }\n if (ageGroup) {\n url += '&ageGroup=' + ageGroup;\n }\n url += namesToUrlParams(contact.dbo.names);\n url += '&utm_source=sneat.app&utm_medium=qr_code&utm_campaign=new_member';\n return url;\n });\n\n protected contactusSpace?: IContactusSpaceDboAndID;\n\n protected readonly $isContactReady = computed(() => {\n const contact = this.$contact();\n return (\n contact && isRelatedPersonReady(contact.dbo, this.personRequirements)\n );\n });\n\n @ViewChild(PersonWizardComponent, { static: false })\n personFormComponent?: PersonWizardComponent;\n // @ViewChild('emailInput', { static: false }) emailInput?: IonInput;\n // @ViewChild('genderFirstInput', { static: false }) genderFirstInput?: IonRadio;\n\n // public get isPersonFormReady(): boolean {\n // \treturn isRelatedPersonNotReady(this.member, this.personRequirements);\n // }\n //\n // public readonly setFocusToInput = createSetFocusToInput(\n // \tthis.params.errorLogger,\n // );\n\n // public readonly memberType = new FormControl<TeamMemberType>('member', [\n // \tValidators.required,\n // ]);\n\n public addMemberForm = new UntypedFormGroup({\n // email: this.email,\n // phone: this.phone,\n // ageGroup: this.ageGroup,\n // relationship: this.relationship,\n });\n\n private readonly memberService = inject(MemberService);\n\n public constructor() {\n super();\n const routingState = inject(RoutingState);\n this.hasNavHistory = routingState.hasHistory();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['$space']) {\n this.setPersonRequirements(this.$contact());\n }\n }\n\n private setPersonRequirements(contact: NewContactBaseDboAndSpaceRef): void {\n const spaceRef = this.$spaceRef();\n this.personRequirements = {\n // TODO: Should we move it inside person form wizard?\n ...this.personRequirements,\n ageGroup:\n spaceRef.type === 'family' && contact.dbo.type !== 'animal'\n ? { required: true }\n : { hide: true },\n roles:\n spaceRef.type === 'family' && contact.dbo.type !== 'animal'\n ? { hide: true }\n : { required: true },\n relatedAs:\n spaceRef.type === 'family' && contact.dbo.type !== 'animal'\n ? { required: true }\n : { hide: true },\n };\n }\n\n submit(): void {\n // if (!this.hasNames) {\n // \talert('Please enter first or last or full name of the new member');\n // \tif (!this.firstName.value && !this.lastName.value) {\n // \t\tthis.setFocusToInput(this.firstNameInput);\n // \t} else {\n // \t\tthis.setFocusToInput(this.fullNameInput);\n // \t}\n // \treturn;\n // }\n if (!this.personFormComponent) {\n throw '!this.personFormComponent';\n }\n const spaceRef = this.$spaceRef();\n const contact = this.$contact();\n if (!spaceRef?.id) {\n this.errorLogger.logError(\n 'not able to add new member without space context',\n );\n return;\n }\n if (!contact) {\n this.errorLogger.logError('member field is undefined');\n return;\n }\n if (this.personRequirements.ageGroup?.required && !contact.dbo.ageGroup) {\n throw new Error('Age group is a required field');\n }\n if (this.personRequirements.gender?.required && !contact.dbo.gender) {\n throw new Error('Gender is a required field');\n }\n const displayName = personNames(contact.dbo.names);\n const duplicateMember = zipMapBriefsWithIDs(\n this.contactusSpace?.dbo?.contacts,\n )?.find((m) => personNames(m.brief.names) === displayName);\n if (duplicateMember) {\n alert('There is already a member with same name: ' + displayName);\n return;\n }\n\n const request: ICreateSpaceMemberRequest = {\n ...contact.dbo,\n type: contact.dbo.type as MemberContactType,\n status: 'active',\n countryID: '--',\n roles: ['contributor'],\n spaceID: spaceRef.id,\n };\n\n this.$isSubmitting.set(true);\n this.addMemberForm.disable();\n this.memberService.createMember(request).subscribe({\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n next: (_member) => {\n // console.log('member created:', member);\n if (this.hasNavHistory) {\n this.navController\n .pop()\n .catch(\n this.errorLogger.logErrorHandler(\n 'failed to navigate to prev page',\n ),\n );\n } else {\n this.spaceNavService\n .navigateBackToSpacePage(spaceRef, 'members')\n .catch(\n this.errorLogger.logErrorHandler(\n 'failed to navigate back to members page',\n ),\n );\n }\n },\n error: (err) => {\n this.errorLogger.logError(err, 'Failed to create a new member');\n this.addMemberForm.enable();\n setTimeout(() => {\n this.$isSubmitting.set(false);\n }, 1000);\n },\n });\n\n // this.startCommuneReadwriteTx([MemberKind], (tx, communeDto, userDto) =>\n // \tthis.membersService.addCommuneItem(\n // \t\t{\n // \t\t\t...memberDto,\n // \t\t\tcommuneId: communeDto.id,\n // \t\t},\n // \t\ttx,\n // \t))\n // \t.subscribe({\n // \t\t\tnext: member => {\n // \t\t\t\tconsole.log('New member ID:', member.id);\n // \t\t\t\tsetTimeout(\n // \t\t\t\t\t() => {\n // \t\t\t\t\t\tthis.navigateRoot(\n // \t\t\t\t\t\t\t'member',\n // \t\t\t\t\t\t\t{ id: member.id },\n // \t\t\t\t\t\t\t{ memberDto: member },\n // \t\t\t\t\t\t);\n // \t\t\t\t\t},\n // \t\t\t\t\t// tslint:disable-next-line:no-magic-numbers\n // \t\t\t\t\t100,\n // \t\t\t\t);\n // \t\t\t},\n // \t\t\terror: err => {\n // \t\t\t\tthis.errorLogger.logError(err, 'Failed to create new member');\n // \t\t\t},\n // \t\t},\n // \t);\n }\n\n onContactChanged(contact: NewContactBaseDboAndSpaceRef): void {\n // console.log('NewMemberFormComponent.onContactChanged()', contact);\n this.setPersonRequirements(contact);\n this.contactChange.emit(contact);\n }\n}\n","<form [formGroup]=\"addMemberForm\" (ngSubmit)=\"submit()\">\n <sneat-person-wizard\n [$space]=\"$spaceRef()\"\n [$contact]=\"$contact()\"\n (contactChange)=\"onContactChanged($event)\"\n [displayAgeGroupValue]=\"true\"\n [disabled]=\"$isSubmitting()\"\n [requires]=\"personRequirements\"\n [$fields]=\"{ contactType: { hide: true } }\"\n />\n\n @if (addMemberForm.errors) {\n <ion-card>\n <ion-card-header color=\"danger\">\n <ion-card-title>Errors</ion-card-title>\n </ion-card-header>\n <ion-card-content> Errors: {{ addMemberForm.errors }}</ion-card-content>\n </ion-card>\n }\n\n <ion-card>\n <ion-grid>\n <ion-row>\n <ion-col size=\"5\">\n <!--\t\t\t\t\tpersonRequirements: {{personRequirements|json}}-->\n <!--\t\t\t\t\t$isContactReady: {{$isContactReady()}}-->\n <ion-button\n expand=\"full\"\n size=\"large\"\n (click)=\"submit()\"\n [disabled]=\"!$canSubmit()\"\n >\n @if ($isSubmitting()) {\n <ion-spinner\n name=\"lines-small\"\n slot=\"start\"\n class=\"ion-margin-end\"\n />\n }\n <ion-label>Add member</ion-label>\n </ion-button>\n </ion-col>\n <ion-col size=\"1\" style=\"text-align: center\">\n <p>or</p>\n </ion-col>\n @if (!$isSubmitting()) {\n <ion-col size=\"6\">\n <qrcode\n style=\"float: left\"\n [qrdata]=\"$qrData()\"\n [width]=\"140\"\n errorCorrectionLevel=\"M\"\n />\n <ion-card-header>\n <ion-card-title>Self-add</ion-card-title>\n <ion-card-subtitle>\n Ask the new member to scan this QR code and fill the form to\n join this space. Or send them this\n <a target=\"_blank\" [href]=\"$qrData()\">link</a>.\n </ion-card-subtitle>\n </ion-card-header>\n </ion-col>\n }\n </ion-row>\n </ion-grid>\n </ion-card>\n</form>\n","import { Component, computed, effect, signal } from '@angular/core';\nimport {\n IonBackButton,\n IonButtons,\n IonCard,\n IonCardContent,\n IonContent,\n IonHeader,\n IonSegment,\n IonSegmentButton,\n IonTitle,\n IonToolbar,\n} from '@ionic/angular/standalone';\nimport {\n ContactusServicesModule,\n ContactusSpaceContextService,\n} from '../../../services';\nimport {\n InviteLinksComponent,\n NewPetFormComponent,\n} from '@sneat/extension-contactus-ui';\nimport {\n ContactType,\n IContactusSpaceDboAndID,\n NewContactBaseDboAndSpaceRef,\n RoleSpaceMember,\n} from '@sneat/extension-contactus-contract';\nimport { AgeGroupID } from '@sneat/core';\nimport { SpacePageBaseComponent } from '@sneat/space-components';\nimport { SpaceServiceModule } from '@sneat/space-services';\nimport { filter, first, takeUntil } from 'rxjs';\nimport { NewMemberFormComponent } from './new-member-form.component';\nimport { ClassName } from '@sneat/ui';\n\ntype InviteType = 'personal' | 'mass';\n\n@Component({\n imports: [\n ContactusServicesModule,\n NewMemberFormComponent,\n InviteLinksComponent,\n SpaceServiceModule,\n IonContent,\n IonSegment,\n IonSegmentButton,\n IonHeader,\n IonToolbar,\n IonButtons,\n IonBackButton,\n IonTitle,\n IonCard,\n IonCardContent,\n NewPetFormComponent,\n ],\n providers: [{ provide: ClassName, useValue: 'NewMemberPageComponent' }],\n selector: 'sneat-new-member-page',\n templateUrl: './new-member-page.component.html',\n})\nexport class NewMemberPageComponent extends SpacePageBaseComponent {\n // @ViewChild('nameInput', { static: false }) nameInput?: IonInput;\n\n protected onContactTypeChanged(event: CustomEvent): void {\n this.$contact.update((contact) => ({\n ...contact,\n dbo: {\n ...contact.dbo,\n type: event.detail.value as ContactType,\n },\n }));\n }\n\n protected readonly $inviteType = signal<InviteType>('mass');\n\n protected readonly $contact = signal<NewContactBaseDboAndSpaceRef>({\n space: { id: '' },\n dbo: {\n type: 'person',\n gender: 'unknown', // Undefined would indicate \"loading\" and gender form would be disabled.\n roles: [RoleSpaceMember],\n },\n });\n\n protected readonly $contactType = computed(() => this.$contact().dbo?.type);\n\n public constructor() {\n super();\n this.$defaultBackUrlSpacePath.set('members');\n const contactusSpaceContextService = new ContactusSpaceContextService(\n this.destroyed$,\n this.spaceIDChanged$,\n );\n effect(() => {\n const space = this.$spaceRef();\n this.$contact.update((contact) => ({\n ...contact,\n space: space || { id: '' },\n }));\n });\n this.trackFirstSpaceTypeChanged();\n this.route.queryParams.subscribe((params) => {\n const group = params['group'];\n const setContactTypeAndAgeGroup = (\n contact: NewContactBaseDboAndSpaceRef,\n contactType: ContactType,\n ageGroup?: AgeGroupID,\n ) => ({\n ...contact,\n dbo: {\n ...contact.dbo,\n type: contactType,\n ageGroup,\n },\n });\n switch (group) {\n case 'adults':\n this.$contact.update((contact) =>\n setContactTypeAndAgeGroup(contact, 'person', 'adult'),\n );\n break;\n case 'kids':\n this.$contact.update((contact) =>\n setContactTypeAndAgeGroup(contact, 'person', 'child'),\n );\n break;\n case 'pets':\n this.$contact.update((contact) =>\n setContactTypeAndAgeGroup(contact, 'animal'),\n );\n break;\n default:\n this.$contact.update((contact) =>\n setContactTypeAndAgeGroup(contact, 'person'),\n );\n break;\n }\n const roles = params['roles'] || '';\n if (roles) {\n this.$contact.update((contact) => ({\n ...contact,\n dbo: {\n ...contact.dbo,\n roles: roles.split(',').map((s: string) => s.trim()),\n },\n }));\n }\n });\n\n contactusSpaceContextService.contactusSpaceContext$\n .pipe(this.takeUntilDestroyed())\n .subscribe({\n next: (contactusTeam) => {\n this.contactusSpace = contactusTeam;\n },\n });\n }\n\n protected contactusSpace?: IContactusSpaceDboAndID;\n\n private readonly trackFirstSpaceTypeChanged = (): void => {\n try {\n this.spaceTypeChanged$\n .pipe(\n takeUntil(this.destroyed$),\n filter((v) => !!v),\n first(),\n )\n .subscribe({\n next: (spaceType) => {\n console.log(\n 'NewMemberPageComponent: spaceTypeChanged$ =>',\n spaceType,\n );\n if (spaceType === 'family' && this.$inviteType() === 'mass') {\n this.$inviteType.set('personal');\n }\n },\n error: this.logErrorHandler('failed to process space type changes'),\n });\n } catch (e) {\n this.logError(e, 'failed to subscribe for first space type change');\n }\n };\n\n protected onTabChanged(event: CustomEvent): void {\n this.$inviteType.set(event.detail.value as InviteType);\n }\n}\n","<ion-header>\n <ion-toolbar color=\"light\" class=\"with-back-button\">\n <ion-buttons slot=\"start\">\n <ion-back-button [defaultHref]=\"$defaultBackUrl()\" />\n </ion-buttons>\n <ion-title>\n @if (space.brief || space.type) {\n @if ($contact().dbo.type === \"animal\") {\n New pet\n } @else {\n @switch ($contact().dbo.ageGroup) {\n @case (\"child\") {\n New child\n }\n @case (\"adult\") {\n New adult\n }\n @default {\n New member\n }\n }\n }\n @ {{ $space().brief?.title || space.type }}\n } @else {\n New member\n }\n </ion-title>\n </ion-toolbar>\n</ion-header>\n\n<ion-segment\n [value]=\"$contactType()\"\n (ionChange)=\"onContactTypeChanged($event)\"\n>\n <ion-segment-button value=\"person\">Person</ion-segment-button>\n <ion-segment-button value=\"animal\">Pet</ion-segment-button>\n</ion-segment>\n\n<ion-content class=\"cardy\">\n @switch ($contactType()) {\n @case (\"person\") {\n @if (space.id && space.type !== \"family\") {\n <ion-segment [value]=\"$inviteType()\" (ionChange)=\"onTabChanged($event)\">\n <ion-segment-button value=\"mass\">\n Mass invite [{{ space.id }} - {{ space.type }}]\n </ion-segment-button>\n <ion-segment-button value=\"personal\"\n >Personal invite</ion-segment-button\n >\n </ion-segment>\n }\n\n @switch ($inviteType()) {\n @case (\"personal\") {\n <sneat-new-member-form\n [$space]=\"$space()\"\n [$contact]=\"$contact()\"\n (contactChange)=\"$contact.set($event)\"\n />\n }\n @case (\"mass\") {\n <ion-card>\n <ion-card-content>\n <sneat-invite-links [contactusSpace]=\"contactusSpace\" />\n\n <p>\n <b>Or</b> you can send\n <a\n href=\"\"\n (click)=\"$inviteType.set('personal'); $event.preventDefault()\"\n >personal invite</a\n >\n by email.\n </p>\n </ion-card-content>\n </ion-card>\n }\n }\n }\n @case (\"animal\") {\n <sneat-new-pet-form\n [$space]=\"$space()\"\n [$contact]=\"$contact()\"\n (contactChange)=\"$contact.set($event)\"\n />\n }\n }\n</ion-content>\n"],"names":[],"mappings":"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"}
|