@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.
- package/esm2022/index.js +2 -0
- package/esm2022/index.js.map +1 -0
- package/esm2022/lib/contact-group-service.js +192 -0
- package/esm2022/lib/contact-group-service.js.map +1 -0
- package/esm2022/lib/contact-nav-service.js +25 -0
- package/esm2022/lib/contact-nav-service.js.map +1 -0
- package/esm2022/lib/contact-role.service.js +23 -0
- package/esm2022/lib/contact-role.service.js.map +1 -0
- package/esm2022/lib/contact-service.js +130 -0
- package/esm2022/lib/contact-service.js.map +1 -0
- package/esm2022/lib/contactus-nav.service.js +35 -0
- package/esm2022/lib/contactus-nav.service.js.map +1 -0
- package/esm2022/lib/contactus-services.module.js +35 -0
- package/esm2022/lib/contactus-services.module.js.map +1 -0
- package/esm2022/lib/contactus-space-context.service.js +60 -0
- package/esm2022/lib/contactus-space-context.service.js.map +1 -0
- package/esm2022/lib/contactus-space.service.js +21 -0
- package/esm2022/lib/contactus-space.service.js.map +1 -0
- package/esm2022/lib/dto/contact.js +28 -0
- package/esm2022/lib/dto/contact.js.map +1 -0
- package/esm2022/lib/dto/index.js +2 -0
- package/esm2022/lib/dto/index.js.map +1 -0
- package/esm2022/lib/index.js +13 -0
- package/esm2022/lib/index.js.map +1 -0
- package/esm2022/lib/invite.service.js +87 -0
- package/esm2022/lib/invite.service.js.map +1 -0
- package/esm2022/lib/member-group.service.js +13 -0
- package/esm2022/lib/member-group.service.js.map +1 -0
- package/esm2022/lib/member.service.js +28 -0
- package/esm2022/lib/member.service.js.map +1 -0
- package/esm2022/sneat-contactus-services.js +5 -0
- package/esm2022/sneat-contactus-services.js.map +1 -0
- package/index.d.ts +1 -0
- package/lib/contact-group-service.d.ts +15 -0
- package/lib/contact-nav-service.d.ts +16 -0
- package/lib/contact-role.service.d.ts +9 -0
- package/lib/contact-service.d.ts +39 -0
- package/lib/contactus-nav.service.d.ts +10 -0
- package/lib/contactus-services.module.d.ts +6 -0
- package/lib/contactus-space-context.service.d.ts +16 -0
- package/lib/contactus-space.service.d.ts +9 -0
- package/lib/dto/contact.d.ts +41 -0
- package/lib/dto/index.d.ts +1 -0
- package/lib/index.d.ts +12 -0
- package/lib/invite.service.d.ts +20 -0
- package/lib/member-group.service.d.ts +5 -0
- package/lib/member.service.d.ts +10 -0
- package/package.json +26 -0
- package/sneat-contactus-services.d.ts +5 -0
- package/tsconfig.lib.prod.tsbuildinfo +1 -0
package/esm2022/index.js
ADDED
|
@@ -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"]}
|