@sneat/contactus-services 0.2.0

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.
Files changed (50) hide show
  1. package/esm2022/index.js +2 -0
  2. package/esm2022/index.js.map +1 -0
  3. package/esm2022/lib/contact-group-service.js +192 -0
  4. package/esm2022/lib/contact-group-service.js.map +1 -0
  5. package/esm2022/lib/contact-nav-service.js +25 -0
  6. package/esm2022/lib/contact-nav-service.js.map +1 -0
  7. package/esm2022/lib/contact-role.service.js +23 -0
  8. package/esm2022/lib/contact-role.service.js.map +1 -0
  9. package/esm2022/lib/contact-service.js +130 -0
  10. package/esm2022/lib/contact-service.js.map +1 -0
  11. package/esm2022/lib/contactus-nav.service.js +35 -0
  12. package/esm2022/lib/contactus-nav.service.js.map +1 -0
  13. package/esm2022/lib/contactus-services.module.js +35 -0
  14. package/esm2022/lib/contactus-services.module.js.map +1 -0
  15. package/esm2022/lib/contactus-space-context.service.js +60 -0
  16. package/esm2022/lib/contactus-space-context.service.js.map +1 -0
  17. package/esm2022/lib/contactus-space.service.js +21 -0
  18. package/esm2022/lib/contactus-space.service.js.map +1 -0
  19. package/esm2022/lib/dto/contact.js +28 -0
  20. package/esm2022/lib/dto/contact.js.map +1 -0
  21. package/esm2022/lib/dto/index.js +2 -0
  22. package/esm2022/lib/dto/index.js.map +1 -0
  23. package/esm2022/lib/index.js +13 -0
  24. package/esm2022/lib/index.js.map +1 -0
  25. package/esm2022/lib/invite.service.js +87 -0
  26. package/esm2022/lib/invite.service.js.map +1 -0
  27. package/esm2022/lib/member-group.service.js +13 -0
  28. package/esm2022/lib/member-group.service.js.map +1 -0
  29. package/esm2022/lib/member.service.js +28 -0
  30. package/esm2022/lib/member.service.js.map +1 -0
  31. package/esm2022/sneat-contactus-services.js +5 -0
  32. package/esm2022/sneat-contactus-services.js.map +1 -0
  33. package/index.d.ts +1 -0
  34. package/lib/contact-group-service.d.ts +15 -0
  35. package/lib/contact-nav-service.d.ts +16 -0
  36. package/lib/contact-role.service.d.ts +9 -0
  37. package/lib/contact-service.d.ts +39 -0
  38. package/lib/contactus-nav.service.d.ts +10 -0
  39. package/lib/contactus-services.module.d.ts +6 -0
  40. package/lib/contactus-space-context.service.d.ts +16 -0
  41. package/lib/contactus-space.service.d.ts +9 -0
  42. package/lib/dto/contact.d.ts +41 -0
  43. package/lib/dto/index.d.ts +1 -0
  44. package/lib/index.d.ts +12 -0
  45. package/lib/invite.service.d.ts +20 -0
  46. package/lib/member-group.service.d.ts +5 -0
  47. package/lib/member.service.d.ts +10 -0
  48. package/package.json +26 -0
  49. package/sneat-contactus-services.d.ts +5 -0
  50. package/tsconfig.lib.prod.tsbuildinfo +1 -0
@@ -0,0 +1,2 @@
1
+ export * from './lib';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../libs/contactus/services/src/index.ts"],"names":[],"mappings":"AAAA,cAAc,OAAO,CAAC","sourcesContent":["export * from './lib';\n"]}
@@ -0,0 +1,192 @@
1
+ import { Injectable, Injector, inject } from '@angular/core';
2
+ import { Firestore as AngularFirestore } from '@angular/fire/firestore';
3
+ import { SneatApiService } from '@sneat/api';
4
+ import { ModuleSpaceItemService } from '@sneat/space-services';
5
+ import { of } from 'rxjs';
6
+ import * as i0 from "@angular/core";
7
+ const contactTypeFamilyMember = {
8
+ id: 'member',
9
+ brief: {
10
+ title: 'Family member',
11
+ titlePlural: 'Members',
12
+ emoji: '👪',
13
+ },
14
+ }, contactTypePet = {
15
+ id: 'pet',
16
+ hideInNewContactForm: true,
17
+ brief: {
18
+ title: 'Family Pet',
19
+ titlePlural: 'Pets',
20
+ emoji: '👪',
21
+ },
22
+ }, contactTypeRelative = {
23
+ id: 'relative',
24
+ brief: {
25
+ title: 'Relative',
26
+ titlePlural: 'Relatives',
27
+ emoji: '👪',
28
+ },
29
+ }, contactTypeTeacher = {
30
+ id: 'teacher',
31
+ brief: {
32
+ title: 'Teacher',
33
+ titlePlural: 'Teachers',
34
+ emoji: '👩‍🏫',
35
+ },
36
+ }, contactTypeBabysitter = {
37
+ id: 'babysitter',
38
+ brief: {
39
+ title: 'Babysitter',
40
+ titlePlural: 'Babysitters',
41
+ emoji: '👧',
42
+ finder: 'babysitters.express',
43
+ },
44
+ }, contactTypeFriendOfKid = {
45
+ id: 'friend',
46
+ brief: {
47
+ title: 'Friend',
48
+ titlePlural: 'Friends',
49
+ emoji: '🚸',
50
+ },
51
+ },
52
+ // contactTypeGP: IContactRoleBrief = { id: 'gp', title: 'Family doctor', emoji: '👩‍⚕️', finder: 'gpconnect.app' },
53
+ contactTypePlumber = {
54
+ id: 'plumber',
55
+ brief: {
56
+ title: 'Plumber',
57
+ titlePlural: 'Plumbers',
58
+ emoji: '🚽',
59
+ finder: 'plumbers.express',
60
+ },
61
+ }, contactTypeElectrician = {
62
+ id: 'electrician',
63
+ brief: {
64
+ title: 'Electrician',
65
+ titlePlural: 'Electricians',
66
+ emoji: '🔌',
67
+ finder: 'electricians.express',
68
+ },
69
+ }, contactTypeHandyman = {
70
+ id: 'handyman',
71
+ brief: {
72
+ title: 'Handyman',
73
+ titlePlural: 'Handymen',
74
+ emoji: '🔨',
75
+ },
76
+ }, contactTypeGardener = {
77
+ id: 'gardener',
78
+ brief: {
79
+ title: 'Gardener',
80
+ titlePlural: 'Gardeners',
81
+ emoji: '👨‍🌾',
82
+ finder: 'gardeners.express',
83
+ },
84
+ }, contactTypeInsurer = {
85
+ id: 'insurer',
86
+ brief: {
87
+ title: 'Insurer',
88
+ titlePlural: 'Insurers',
89
+ emoji: '🧾',
90
+ },
91
+ }, contactTypeMechanic = {
92
+ id: 'mechanic',
93
+ brief: {
94
+ title: 'Mechanic',
95
+ titlePlural: 'Mechanics',
96
+ emoji: '👨‍🔧',
97
+ },
98
+ };
99
+ export const defaultFamilyContactGroupDTOs = [
100
+ {
101
+ id: 'family',
102
+ dbo: {
103
+ emoji: '👪',
104
+ title: 'Family',
105
+ roles: [
106
+ contactTypeFamilyMember,
107
+ contactTypePet,
108
+ contactTypeRelative,
109
+ contactTypeFriendOfKid,
110
+ ],
111
+ },
112
+ },
113
+ {
114
+ id: 'kid',
115
+ dbo: {
116
+ emoji: '🚸',
117
+ title: 'Kids',
118
+ roles: [
119
+ contactTypeTeacher,
120
+ contactTypeBabysitter,
121
+ contactTypeFriendOfKid,
122
+ ],
123
+ },
124
+ },
125
+ {
126
+ id: 'house',
127
+ dbo: {
128
+ emoji: '🏠',
129
+ title: 'House',
130
+ roles: [
131
+ contactTypeHandyman,
132
+ contactTypePlumber,
133
+ contactTypeElectrician,
134
+ contactTypeGardener,
135
+ contactTypeInsurer,
136
+ ],
137
+ },
138
+ },
139
+ {
140
+ id: 'med',
141
+ dbo: {
142
+ emoji: '⚕️',
143
+ title: 'Medical',
144
+ roles: [
145
+ { id: 'gp', brief: { title: 'GP / Family doctor', emoji: '🩺' } },
146
+ {
147
+ id: 'med_specialist',
148
+ brief: { title: 'Medical specialist', emoji: '🥼' },
149
+ },
150
+ ],
151
+ },
152
+ },
153
+ {
154
+ id: 'vehicle',
155
+ dbo: {
156
+ emoji: '🚗',
157
+ title: 'Vehicle',
158
+ roles: [contactTypeMechanic, contactTypeInsurer],
159
+ },
160
+ },
161
+ ];
162
+ export const defaultFamilyContactGroups = defaultFamilyContactGroupDTOs.map((cg) => ({ ...cg, brief: cg.dbo }));
163
+ export class ContactGroupService {
164
+ constructor() {
165
+ const afs = inject(AngularFirestore);
166
+ const sneatApiService = inject(SneatApiService);
167
+ const injector = inject(Injector);
168
+ this.spaceItemService = new ModuleSpaceItemService(injector, 'contactus', 'contact_groups', afs, sneatApiService);
169
+ }
170
+ getContactGroups() {
171
+ return of(defaultFamilyContactGroupDTOs);
172
+ }
173
+ getContactGroupByID(id, space) {
174
+ const cg = defaultFamilyContactGroups.find((cg) => cg.id === id);
175
+ if (!cg) {
176
+ return of({ id, space, dbo: { title: id } });
177
+ }
178
+ return of(cg);
179
+ }
180
+ watchMemberGroupsBySpace(space, status = 'active') {
181
+ // console.log('watchMemberGroupsByTeamID()', spaceID);
182
+ return this.spaceItemService.watchModuleSpaceItemsWithSpaceRef(space, {
183
+ filter: [{ field: 'status', operator: '==', value: status }],
184
+ });
185
+ }
186
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ContactGroupService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
187
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ContactGroupService }); }
188
+ }
189
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ContactGroupService, decorators: [{
190
+ type: Injectable
191
+ }], ctorParameters: () => [] });
192
+ //# sourceMappingURL=contact-group-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contact-group-service.js","sourceRoot":"","sources":["../../../../../../libs/contactus/services/src/lib/contact-group-service.ts"],"names":[],"mappings":"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","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 IContactGroupBrief,\n IContactGroupDbo,\n IContactRoleWithIdAndBrief,\n} from '@sneat/contactus-core';\nimport { ModuleSpaceItemService } from '@sneat/space-services';\nimport { Observable, of } from 'rxjs';\n\nconst contactTypeFamilyMember: IContactRoleWithIdAndBrief = {\n id: 'member',\n brief: {\n title: 'Family member',\n titlePlural: 'Members',\n emoji: '👪',\n },\n },\n contactTypePet: IContactRoleWithIdAndBrief = {\n id: 'pet',\n hideInNewContactForm: true,\n brief: {\n title: 'Family Pet',\n titlePlural: 'Pets',\n emoji: '👪',\n },\n },\n contactTypeRelative: IContactRoleWithIdAndBrief = {\n id: 'relative',\n brief: {\n title: 'Relative',\n titlePlural: 'Relatives',\n emoji: '👪',\n },\n },\n contactTypeTeacher: IContactRoleWithIdAndBrief = {\n id: 'teacher',\n brief: {\n title: 'Teacher',\n titlePlural: 'Teachers',\n emoji: '👩‍🏫',\n },\n },\n contactTypeBabysitter: IContactRoleWithIdAndBrief = {\n id: 'babysitter',\n brief: {\n title: 'Babysitter',\n titlePlural: 'Babysitters',\n emoji: '👧',\n finder: 'babysitters.express',\n },\n },\n contactTypeFriendOfKid: IContactRoleWithIdAndBrief = {\n id: 'friend',\n brief: {\n title: 'Friend',\n titlePlural: 'Friends',\n emoji: '🚸',\n },\n },\n // contactTypeGP: IContactRoleBrief = { id: 'gp', title: 'Family doctor', emoji: '👩‍⚕️', finder: 'gpconnect.app' },\n contactTypePlumber: IContactRoleWithIdAndBrief = {\n id: 'plumber',\n brief: {\n title: 'Plumber',\n titlePlural: 'Plumbers',\n emoji: '🚽',\n finder: 'plumbers.express',\n },\n },\n contactTypeElectrician: IContactRoleWithIdAndBrief = {\n id: 'electrician',\n brief: {\n title: 'Electrician',\n titlePlural: 'Electricians',\n emoji: '🔌',\n finder: 'electricians.express',\n },\n },\n contactTypeHandyman: IContactRoleWithIdAndBrief = {\n id: 'handyman',\n brief: {\n title: 'Handyman',\n titlePlural: 'Handymen',\n emoji: '🔨',\n },\n },\n contactTypeGardener: IContactRoleWithIdAndBrief = {\n id: 'gardener',\n brief: {\n title: 'Gardener',\n titlePlural: 'Gardeners',\n emoji: '👨‍🌾',\n finder: 'gardeners.express',\n },\n },\n contactTypeInsurer: IContactRoleWithIdAndBrief = {\n id: 'insurer',\n brief: {\n title: 'Insurer',\n titlePlural: 'Insurers',\n emoji: '🧾',\n },\n },\n contactTypeMechanic: IContactRoleWithIdAndBrief = {\n id: 'mechanic',\n brief: {\n title: 'Mechanic',\n titlePlural: 'Mechanics',\n emoji: '👨‍🔧',\n },\n };\n\nexport const defaultFamilyContactGroupDTOs: readonly IIdAndDbo<IContactGroupDbo>[] =\n [\n {\n id: 'family',\n dbo: {\n emoji: '👪',\n title: 'Family',\n roles: [\n contactTypeFamilyMember,\n contactTypePet,\n contactTypeRelative,\n contactTypeFriendOfKid,\n ],\n },\n },\n {\n id: 'kid',\n dbo: {\n emoji: '🚸',\n title: 'Kids',\n roles: [\n contactTypeTeacher,\n contactTypeBabysitter,\n contactTypeFriendOfKid,\n ],\n },\n },\n {\n id: 'house',\n dbo: {\n emoji: '🏠',\n title: 'House',\n roles: [\n contactTypeHandyman,\n contactTypePlumber,\n contactTypeElectrician,\n contactTypeGardener,\n contactTypeInsurer,\n ],\n },\n },\n {\n id: 'med',\n dbo: {\n emoji: '⚕️',\n title: 'Medical',\n roles: [\n { id: 'gp', brief: { title: 'GP / Family doctor', emoji: '🩺' } },\n {\n id: 'med_specialist',\n brief: { title: 'Medical specialist', emoji: '🥼' },\n },\n ],\n },\n },\n {\n id: 'vehicle',\n dbo: {\n emoji: '🚗',\n title: 'Vehicle',\n roles: [contactTypeMechanic, contactTypeInsurer],\n },\n },\n ];\n\nexport const defaultFamilyContactGroups: readonly IIdAndDbo<IContactGroupDbo>[] =\n defaultFamilyContactGroupDTOs.map((cg) => ({ ...cg, brief: cg.dbo }));\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"]}
@@ -0,0 +1,25 @@
1
+ import { Injectable, inject } from '@angular/core';
2
+ import { excludeUndefined } from '@sneat/core';
3
+ import { ErrorLogger } from '@sneat/core';
4
+ import { SpaceNavService } from '@sneat/space-services';
5
+ import * as i0 from "@angular/core";
6
+ export class ContactNavService {
7
+ constructor() {
8
+ this.errorLogger = inject(ErrorLogger);
9
+ this.spaceNavService = inject(SpaceNavService);
10
+ }
11
+ goNewContactPage(space, params) {
12
+ this.spaceNavService
13
+ .navigateForwardToSpacePage(space, 'new-contact', {
14
+ queryParams: excludeUndefined(params),
15
+ })
16
+ .catch(this.errorLogger.logErrorHandler('failed to navigate to "new-contact" page'));
17
+ }
18
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ContactNavService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
19
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ContactNavService, providedIn: 'root' }); }
20
+ }
21
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ContactNavService, decorators: [{
22
+ type: Injectable,
23
+ args: [{ providedIn: 'root' }]
24
+ }] });
25
+ //# sourceMappingURL=contact-nav-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contact-nav-service.js","sourceRoot":"","sources":["../../../../../../libs/contactus/services/src/lib/contact-nav-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C,OAAO,EAAE,WAAW,EAAgB,MAAM,aAAa,CAAC;AAExD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;;AAUxD,MAAM,OAAO,iBAAiB;IAD9B;QAEmB,gBAAW,GAAG,MAAM,CAAe,WAAW,CAAC,CAAC;QAChD,oBAAe,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC;KAa5D;IAXC,gBAAgB,CAAC,KAAoB,EAAE,MAA8B;QACnE,IAAI,CAAC,eAAe;aACjB,0BAA0B,CAAC,KAAK,EAAE,aAAa,EAAE;YAChD,WAAW,EAAE,gBAAgB,CAAC,MAAM,CAAC;SACtC,CAAC;aACD,KAAK,CACJ,IAAI,CAAC,WAAW,CAAC,eAAe,CAC9B,0CAA0C,CAC3C,CACF,CAAC;IACN,CAAC;8GAdU,iBAAiB;kHAAjB,iBAAiB,cADJ,MAAM;;2FACnB,iBAAiB;kBAD7B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE","sourcesContent":["import { Injectable, inject } from '@angular/core';\nimport { excludeUndefined } from '@sneat/core';\nimport { ContactRole } from '@sneat/contactus-core';\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"]}
@@ -0,0 +1,23 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { of } from 'rxjs';
3
+ import { defaultFamilyContactGroups } from './contact-group-service';
4
+ import * as i0 from "@angular/core";
5
+ export class ContactRoleService {
6
+ getContactRoleByID(id) {
7
+ for (const cg of defaultFamilyContactGroups) {
8
+ for (let j = 0; j < (cg?.dbo?.roles?.length || 0); j++) {
9
+ const role = cg.dbo?.roles && cg.dbo.roles[j];
10
+ if (role?.id === id) {
11
+ return of({ id, brief: role.brief });
12
+ }
13
+ }
14
+ }
15
+ return of({ id, brief: { title: id } });
16
+ }
17
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ContactRoleService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
18
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ContactRoleService }); }
19
+ }
20
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ContactRoleService, decorators: [{
21
+ type: Injectable
22
+ }] });
23
+ //# sourceMappingURL=contact-role.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contact-role.service.js","sourceRoot":"","sources":["../../../../../../libs/contactus/services/src/lib/contact-role.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAG3C,OAAO,EAAc,EAAE,EAAE,MAAM,MAAM,CAAC;AACtC,OAAO,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;;AAGrE,MAAM,OAAO,kBAAkB;IAC7B,kBAAkB,CAAC,EAAU;QAC3B,KAAK,MAAM,EAAE,IAAI,0BAA0B,EAAE,CAAC;YAC5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBACvD,MAAM,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,KAAK,IAAI,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBAC9C,IAAI,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC;oBACpB,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;gBACvC,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC1C,CAAC;8GAXU,kBAAkB;kHAAlB,kBAAkB;;2FAAlB,kBAAkB;kBAD9B,UAAU","sourcesContent":["import { Injectable } from '@angular/core';\nimport { IIdAndBrief } from '@sneat/core';\nimport { IContactRoleBrief } from '@sneat/contactus-core';\nimport { Observable, of } from 'rxjs';\nimport { defaultFamilyContactGroups } from './contact-group-service';\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"]}
@@ -0,0 +1,130 @@
1
+ import { Injectable, Injector, inject } from '@angular/core';
2
+ import { Firestore as AngularFirestore } from '@angular/fire/firestore';
3
+ import { SneatApiService } from '@sneat/api';
4
+ import { SneatUserService } from '@sneat/auth-core';
5
+ import { ModuleSpaceItemService } from '@sneat/space-services';
6
+ import { ContactusSpaceService } from './contactus-space.service';
7
+ import { map, tap, throwError } from 'rxjs';
8
+ import { validateContactRequest, validateUpdateContactRequest, } from './dto';
9
+ import * as i0 from "@angular/core";
10
+ export class ContactService extends ModuleSpaceItemService {
11
+ constructor() {
12
+ const afs = inject(AngularFirestore);
13
+ const sneatApiService = inject(SneatApiService);
14
+ const injector = inject(Injector);
15
+ super(injector, 'contactus', 'contacts', afs, sneatApiService);
16
+ this.contactusSpaceService = inject(ContactusSpaceService);
17
+ this.userService = inject(SneatUserService);
18
+ // this.briefService = new TeamItemService<{id: string}, IContactsBrief>('briefs', afs, sneatApiService);
19
+ }
20
+ createContact(spaceRef, request, endpoint = 'contactus/create_contact') {
21
+ return this.createSpaceItem(endpoint, spaceRef, request);
22
+ }
23
+ deleteContact(request) {
24
+ validateContactRequest(request);
25
+ return this.deleteSpaceItem('contactus/delete_contact', request);
26
+ }
27
+ updateContact(request) {
28
+ validateUpdateContactRequest(request);
29
+ return this.sneatApiService.post('contactus/update_contact', request);
30
+ }
31
+ addContactCommChannel(request) {
32
+ return this.sneatApiService.post('contactus/add_contact_comm_channel', request);
33
+ }
34
+ updateContactCommChannel(request) {
35
+ return this.sneatApiService.post('contactus/update_contact_comm_channel', request);
36
+ }
37
+ deleteContactCommChannel(request) {
38
+ return this.sneatApiService.post('contactus/delete_contact_comm_channel', request);
39
+ }
40
+ setContactsStatus(request) {
41
+ if (!request.contactIDs?.length) {
42
+ return throwError(() => 'at least 1 contact is required');
43
+ }
44
+ return this.sneatApiService.post('contactus/set_contacts_status', request);
45
+ }
46
+ watchContactsWithRole(space, role, status = 'active', filter) {
47
+ filter = [
48
+ ...(filter || []),
49
+ { field: 'roles', operator: '==', value: role },
50
+ ];
51
+ return this.watchSpaceContacts(space, status, filter);
52
+ }
53
+ watchSpaceContacts(space, status = 'active', filter) {
54
+ filter = [
55
+ {
56
+ field: 'status',
57
+ value: status,
58
+ operator: '==',
59
+ },
60
+ {
61
+ field: 'parentContactID',
62
+ operator: '==',
63
+ value: '',
64
+ },
65
+ ...(filter || []),
66
+ ];
67
+ return this.watchModuleSpaceItemsWithSpaceRef(space, {
68
+ filter,
69
+ });
70
+ }
71
+ watchContactById(space, contactID) {
72
+ return this.watchSpaceItemByIdWithSpaceRef(space, contactID).pipe(tap((contact) => console.log('contact loaded:', contactID, contact)));
73
+ }
74
+ watchContactsByRole(space, filter) {
75
+ const f = [
76
+ // { field: 'spaceID', value: team.id, operator: '==' },
77
+ ];
78
+ if (filter?.status) {
79
+ f.push({ field: 'status', value: filter.status, operator: '==' });
80
+ }
81
+ if (filter?.role) {
82
+ f.push({
83
+ field: 'roles',
84
+ operator: 'array-contains',
85
+ value: filter.role,
86
+ });
87
+ }
88
+ return this.watchModuleSpaceItemsWithSpaceRef(space, { filter: f });
89
+ }
90
+ watchChildContacts(space, id, filter = { status: 'active' }) {
91
+ const f = [
92
+ { field: 'parentContactID', value: id, operator: '==' },
93
+ ];
94
+ if (filter.status) {
95
+ f.push({ field: 'status', value: filter.status, operator: '==' });
96
+ }
97
+ if (filter.role) {
98
+ f.push({
99
+ field: 'roles',
100
+ operator: 'array-contains',
101
+ value: filter.role,
102
+ });
103
+ }
104
+ return this.watchModuleSpaceItemsWithSpaceRef(space, { filter: f });
105
+ }
106
+ changeContactRole(request) {
107
+ return this.sneatApiService
108
+ .post(`contactus/change_member_role`, request)
109
+ .pipe(map(() => {
110
+ return;
111
+ }));
112
+ }
113
+ removeSpaceMember(request) {
114
+ console.log(`removeTeamMember(spaceID=${request.spaceID}, contactID=${request.contactID})`);
115
+ try {
116
+ validateContactRequest(request);
117
+ }
118
+ catch (ex) {
119
+ return throwError(() => ex);
120
+ }
121
+ // const request: IContactRequest = { spaceID, contactID };
122
+ return this.sneatApiService.post('contactus/remove_team_member', request);
123
+ }
124
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ContactService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
125
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ContactService }); }
126
+ }
127
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ContactService, decorators: [{
128
+ type: Injectable
129
+ }], ctorParameters: () => [] });
130
+ //# sourceMappingURL=contact-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contact-service.js","sourceRoot":"","sources":["../../../../../../libs/contactus/services/src/lib/contact-service.ts"],"names":[],"mappings":"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","sourcesContent":["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 ContactRole,\n IContactBrief,\n IContactDbo,\n MemberRole,\n IContactContext,\n ICreateContactRequest,\n IContactWithDboAndSpace,\n} from '@sneat/contactus-core';\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';\nimport {\n IAddContactCommChannelRequest,\n IContactCommChannelRequest,\n IContactRequest,\n IContactRequestWithOptionalMessage,\n ISetContactsStatusRequest,\n IUpdateContactCommChannelRequest,\n IUpdateContactRequest,\n validateContactRequest,\n validateUpdateContactRequest,\n} from './dto';\n\nexport interface IChangeMemberRoleRequest {\n readonly spaceID: string;\n readonly contactID: string;\n readonly role: MemberRole;\n}\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\nexport interface IContactsFilter {\n status?: string;\n role?: ContactRole;\n}\n"]}
@@ -0,0 +1,35 @@
1
+ import { inject, Injectable } from '@angular/core';
2
+ import { SpaceNavService } from '@sneat/space-services';
3
+ import * as i0 from "@angular/core";
4
+ export class ContactusNavService {
5
+ constructor() {
6
+ this.spaceNavService = inject(SpaceNavService);
7
+ this.navigateToAddMember = (space) => this.spaceNavService.navigateForwardToSpacePage(space, 'add-member');
8
+ }
9
+ navigateToMember(memberContext) {
10
+ console.log(`navigateToMember(team.id=${memberContext?.space?.id}, memberInfo.id=${memberContext?.id})`);
11
+ // const id = `${memberContext?.space?.id}:${memberContext?.id}`;
12
+ // const { space } = memberContext;
13
+ // if (!space) {
14
+ // this.errorLogger.logError(
15
+ // 'not able to navigate to member without team context',
16
+ // );
17
+ // return;
18
+ // }
19
+ // this.spaceNavService.navigateForwardToSpacePage(
20
+ // space,
21
+ // `member/${memberContext.id}`,
22
+ // {
23
+ // state: {
24
+ // contact: memberContext,
25
+ // },
26
+ // },
27
+ // );
28
+ }
29
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ContactusNavService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
30
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ContactusNavService }); }
31
+ }
32
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ContactusNavService, decorators: [{
33
+ type: Injectable
34
+ }] });
35
+ //# sourceMappingURL=contactus-nav.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contactus-nav.service.js","sourceRoot":"","sources":["../../../../../../libs/contactus/services/src/lib/contactus-nav.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAGnD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;;AAGxD,MAAM,OAAO,mBAAmB;IADhC;QAEmB,oBAAe,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC;QAEpD,wBAAmB,GAAG,CAAC,KAAoB,EAAoB,EAAE,CACtE,IAAI,CAAC,eAAe,CAAC,0BAA0B,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;KAwBxE;IAtBQ,gBAAgB,CAAC,aAA8B;QACpD,OAAO,CAAC,GAAG,CACT,4BAA4B,aAAa,EAAE,KAAK,EAAE,EAAE,mBAAmB,aAAa,EAAE,EAAE,GAAG,CAC5F,CAAC;QACF,iEAAiE;QACjE,mCAAmC;QACnC,gBAAgB;QAChB,8BAA8B;QAC9B,2DAA2D;QAC3D,MAAM;QACN,WAAW;QACX,IAAI;QACJ,mDAAmD;QACnD,UAAU;QACV,iCAAiC;QACjC,KAAK;QACL,aAAa;QACb,6BAA6B;QAC7B,OAAO;QACP,MAAM;QACN,KAAK;IACP,CAAC;8GA3BU,mBAAmB;kHAAnB,mBAAmB;;2FAAnB,mBAAmB;kBAD/B,UAAU","sourcesContent":["import { inject, Injectable } from '@angular/core';\nimport { IContactContext } from '@sneat/contactus-core';\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"]}
@@ -0,0 +1,35 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { ContactGroupService } from './contact-group-service';
3
+ import { ContactNavService } from './contact-nav-service';
4
+ import { ContactRoleService } from './contact-role.service';
5
+ import { ContactService } from './contact-service';
6
+ import { ContactusSpaceService } from './contactus-space.service';
7
+ import { MemberService } from './member.service';
8
+ import * as i0 from "@angular/core";
9
+ export class ContactusServicesModule {
10
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ContactusServicesModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
11
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.0", ngImport: i0, type: ContactusServicesModule }); }
12
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ContactusServicesModule, providers: [
13
+ ContactService,
14
+ ContactNavService,
15
+ ContactGroupService,
16
+ ContactRoleService,
17
+ ContactusSpaceService,
18
+ MemberService,
19
+ ] }); }
20
+ }
21
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ContactusServicesModule, decorators: [{
22
+ type: NgModule,
23
+ args: [{
24
+ imports: [],
25
+ providers: [
26
+ ContactService,
27
+ ContactNavService,
28
+ ContactGroupService,
29
+ ContactRoleService,
30
+ ContactusSpaceService,
31
+ MemberService,
32
+ ],
33
+ }]
34
+ }] });
35
+ //# sourceMappingURL=contactus-services.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contactus-services.module.js","sourceRoot":"","sources":["../../../../../../libs/contactus/services/src/lib/contactus-services.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;;AAajD,MAAM,OAAO,uBAAuB;8GAAvB,uBAAuB;+GAAvB,uBAAuB;+GAAvB,uBAAuB,aATvB;YACT,cAAc;YACd,iBAAiB;YACjB,mBAAmB;YACnB,kBAAkB;YAClB,qBAAqB;YACrB,aAAa;SACd;;2FAEU,uBAAuB;kBAXnC,QAAQ;mBAAC;oBACR,OAAO,EAAE,EAAE;oBACX,SAAS,EAAE;wBACT,cAAc;wBACd,iBAAiB;wBACjB,mBAAmB;wBACnB,kBAAkB;wBAClB,qBAAqB;wBACrB,aAAa;qBACd;iBACF","sourcesContent":["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"]}
@@ -0,0 +1,60 @@
1
+ import { inject } from '@angular/core';
2
+ import { SneatUserService } from '@sneat/auth-core';
3
+ import { ContactusSpaceService } from './contactus-space.service';
4
+ import { ErrorLogger } from '@sneat/core';
5
+ import { Subject, takeUntil } from 'rxjs';
6
+ // TODO: ContactusSpaceContextService can be abstracted and reused by other entities
7
+ export class ContactusSpaceContextService {
8
+ constructor(destroyed$, spaceID$) {
9
+ this.destroyed$ = destroyed$;
10
+ this.spaceID$ = spaceID$;
11
+ // Is used to emit contactus space record changes
12
+ this.contactusSpaceContext = new Subject();
13
+ this.contactusSpaceContext$ = this.contactusSpaceContext.asObservable();
14
+ this.errorLogger = inject(ErrorLogger);
15
+ this.userService = inject(SneatUserService);
16
+ this.contactusSpaceService = inject(ContactusSpaceService);
17
+ this.subscribeForContactusSpaceChanges = (spaceID) => {
18
+ this.spaceModuleRecordSub?.unsubscribe();
19
+ if (!spaceID) {
20
+ return;
21
+ }
22
+ this.spaceModuleRecordSub = this.contactusSpaceService
23
+ .watchSpaceModuleRecord(spaceID)
24
+ .pipe(takeUntil(this.spaceID$), takeUntil(this.destroyed$))
25
+ .subscribe({
26
+ next: this.onContactusSpaceChanged,
27
+ error: this.errorLogger.logErrorHandler('ContactusSpaceContextService: failed to get contactus space record'),
28
+ });
29
+ };
30
+ this.onContactusSpaceChanged = (contactusSpace) => {
31
+ console.log('ContactusSpaceContextService.onContactusSpaceChanged()', contactusSpace);
32
+ this.contactusSpaceContext.next(contactusSpace);
33
+ };
34
+ destroyed$.subscribe({
35
+ next: () => {
36
+ this.contactusSpaceContext.complete();
37
+ },
38
+ });
39
+ spaceID$.pipe(takeUntil(destroyed$)).subscribe({
40
+ next: (spaceID) => {
41
+ this.spaceID = spaceID;
42
+ if (this.userService.currentUserID) {
43
+ this.subscribeForContactusSpaceChanges(spaceID);
44
+ }
45
+ },
46
+ });
47
+ this.userService.userChanged.pipe(takeUntil(destroyed$)).subscribe({
48
+ next: (uid) => {
49
+ if (uid) {
50
+ this.subscribeForContactusSpaceChanges(this.spaceID);
51
+ }
52
+ else {
53
+ this.spaceModuleRecordSub?.unsubscribe();
54
+ this.contactusSpaceContext.next(undefined);
55
+ }
56
+ },
57
+ });
58
+ }
59
+ }
60
+ //# sourceMappingURL=contactus-space-context.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contactus-space-context.service.js","sourceRoot":"","sources":["../../../../../../libs/contactus/services/src/lib/contactus-space-context.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAc,OAAO,EAAgB,SAAS,EAAE,MAAM,MAAM,CAAC;AAEpE,oFAAoF;AACpF,MAAM,OAAO,4BAA4B;IAgBvC,YACmB,UAA4B,EAC5B,QAAwC;QADxC,eAAU,GAAV,UAAU,CAAkB;QAC5B,aAAQ,GAAR,QAAQ,CAAgC;QAjB3D,iDAAiD;QAChC,0BAAqB,GAAG,IAAI,OAAO,EAEjD,CAAC;QAEY,2BAAsB,GACpC,IAAI,CAAC,qBAAqB,CAAC,YAAY,EAAE,CAAC;QAK3B,gBAAW,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;QAClC,gBAAW,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;QACvC,0BAAqB,GAAG,MAAM,CAAC,qBAAqB,CAAC,CAAC;QA+BtD,sCAAiC,GAAG,CACnD,OAAgB,EACV,EAAE;YACR,IAAI,CAAC,oBAAoB,EAAE,WAAW,EAAE,CAAC;YACzC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO;YACT,CAAC;YACD,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,qBAAqB;iBACnD,sBAAsB,CAAC,OAAO,CAAC;iBAC/B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;iBAC1D,SAAS,CAAC;gBACT,IAAI,EAAE,IAAI,CAAC,uBAAuB;gBAClC,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,eAAe,CACrC,oEAAoE,CACrE;aACF,CAAC,CAAC;QACP,CAAC,CAAC;QAEe,4BAAuB,GAAG,CACzC,cAAuC,EACjC,EAAE;YACR,OAAO,CAAC,GAAG,CACT,wDAAwD,EACxD,cAAc,CACf,CAAC;YACF,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAClD,CAAC,CAAC;QAnDA,UAAU,CAAC,SAAS,CAAC;YACnB,IAAI,EAAE,GAAG,EAAE;gBACT,IAAI,CAAC,qBAAqB,CAAC,QAAQ,EAAE,CAAC;YACxC,CAAC;SACF,CAAC,CAAC;QACH,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;YAC7C,IAAI,EAAE,CAAC,OAAO,EAAE,EAAE;gBAChB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;gBACvB,IAAI,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC;oBACnC,IAAI,CAAC,iCAAiC,CAAC,OAAO,CAAC,CAAC;gBAClD,CAAC;YACH,CAAC;SACF,CAAC,CAAC;QACH,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;YACjE,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE;gBACZ,IAAI,GAAG,EAAE,CAAC;oBACR,IAAI,CAAC,iCAAiC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACvD,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,oBAAoB,EAAE,WAAW,EAAE,CAAC;oBACzC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAC7C,CAAC;YACH,CAAC;SACF,CAAC,CAAC;IACL,CAAC;CA6BF","sourcesContent":["import { inject } from '@angular/core';\nimport { SneatUserService } from '@sneat/auth-core';\nimport { IContactusSpaceDboAndID } from '@sneat/contactus-core';\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"]}
@@ -0,0 +1,21 @@
1
+ import { Injectable, Injector, inject } from '@angular/core';
2
+ import { Firestore as AngularFirestore } from '@angular/fire/firestore';
3
+ import { SpaceModuleService } from '@sneat/space-services';
4
+ import * as i0 from "@angular/core";
5
+ export class ContactusSpaceService extends SpaceModuleService {
6
+ constructor() {
7
+ const afs = inject(AngularFirestore);
8
+ const injector = inject(Injector);
9
+ super(injector, 'contactus', afs);
10
+ this.watchContactBriefs = (spaceID) => {
11
+ // console.log(`ContactusSpaceService.watchContactBriefs(${spaceID})`);
12
+ return this.watchBriefs(spaceID, (dto) => dto?.contacts || {});
13
+ };
14
+ }
15
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ContactusSpaceService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
16
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ContactusSpaceService }); }
17
+ }
18
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ContactusSpaceService, decorators: [{
19
+ type: Injectable
20
+ }], ctorParameters: () => [] });
21
+ //# sourceMappingURL=contactus-space.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contactus-space.service.js","sourceRoot":"","sources":["../../../../../../libs/contactus/services/src/lib/contactus-space.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAE,SAAS,IAAI,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAExE,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;;AAG3D,MAAM,OAAO,qBAAsB,SAAQ,kBAAsC;IAC/E;QACE,MAAM,GAAG,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;QACrC,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;QAClC,KAAK,CAAC,QAAQ,EAAE,WAAW,EAAE,GAAG,CAAC,CAAC;QAGpB,uBAAkB,GAAG,CAAC,OAAe,EAAE,EAAE;YACvD,uEAAuE;YACvE,OAAO,IAAI,CAAC,WAAW,CACrB,OAAO,EACP,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,QAAQ,IAAI,EAAE,CAC7B,CAAC;QACJ,CAAC,CAAC;IARF,CAAC;8GALU,qBAAqB;kHAArB,qBAAqB;;2FAArB,qBAAqB;kBADjC,UAAU","sourcesContent":["import { Injectable, Injector, inject } from '@angular/core';\nimport { Firestore as AngularFirestore } from '@angular/fire/firestore';\nimport { IContactBrief, IContactusSpaceDbo } from '@sneat/contactus-core';\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"]}