@sneat/extension-contactus 0.14.17 → 0.14.19

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.
@@ -207,7 +207,9 @@ class ContactusSpaceContextService {
207
207
  contactusSpaceContext = new Subject();
208
208
  contactusSpaceContext$ = this.contactusSpaceContext.asObservable();
209
209
  spaceID;
210
- isRootSpaceLoaded = false;
210
+ spaceDbo;
211
+ currentUserID;
212
+ currentSubscribedSpaceID;
211
213
  spaceModuleRecordSub;
212
214
  errorLogger = inject(ErrorLogger);
213
215
  userService = inject(SneatUserService);
@@ -216,6 +218,7 @@ class ContactusSpaceContextService {
216
218
  this.destroyed$ = destroyed$;
217
219
  this.spaceID$ = spaceID$;
218
220
  this.spaceDbo$ = spaceDbo$;
221
+ this.currentUserID = this.userService.currentUserID;
219
222
  destroyed$.subscribe({
220
223
  next: () => {
221
224
  this.contactusSpaceContext.complete();
@@ -223,44 +226,50 @@ class ContactusSpaceContextService {
223
226
  });
224
227
  spaceID$.pipe(takeUntil(destroyed$)).subscribe({
225
228
  next: (spaceID) => {
226
- this.spaceModuleRecordSub?.unsubscribe();
227
- this.spaceModuleRecordSub = undefined;
228
- this.contactusSpaceContext.next(undefined);
229
+ if (this.spaceID === spaceID && this.spaceDbo) {
230
+ return;
231
+ }
229
232
  this.spaceID = spaceID;
230
- this.isRootSpaceLoaded = false;
233
+ this.spaceDbo = undefined;
234
+ this.checkAndSubscribe();
231
235
  },
232
236
  });
233
237
  spaceDbo$.pipe(takeUntil(destroyed$)).subscribe({
234
238
  next: (spaceDbo) => {
235
- this.isRootSpaceLoaded = !!spaceDbo;
236
- if (spaceDbo && this.userService.currentUserID) {
237
- this.subscribeForContactusSpaceChanges(this.spaceID);
238
- }
239
- else {
240
- this.spaceModuleRecordSub?.unsubscribe();
241
- this.spaceModuleRecordSub = undefined;
242
- this.contactusSpaceContext.next(undefined);
243
- }
239
+ this.spaceDbo = spaceDbo;
240
+ this.checkAndSubscribe();
244
241
  },
245
242
  });
246
243
  this.userService.userChanged.pipe(takeUntil(destroyed$)).subscribe({
247
244
  next: (uid) => {
248
- if (uid && this.isRootSpaceLoaded) {
249
- this.subscribeForContactusSpaceChanges(this.spaceID);
250
- }
251
- else {
252
- this.spaceModuleRecordSub?.unsubscribe();
253
- this.spaceModuleRecordSub = undefined;
254
- this.contactusSpaceContext.next(undefined);
255
- }
245
+ this.currentUserID = uid;
246
+ this.checkAndSubscribe();
256
247
  },
257
248
  });
258
249
  }
250
+ checkAndSubscribe() {
251
+ const shouldSubscribe = !!(this.spaceID &&
252
+ this.spaceDbo &&
253
+ (this.currentUserID || this.userService.currentUserID));
254
+ if (shouldSubscribe) {
255
+ if (this.currentSubscribedSpaceID !== this.spaceID) {
256
+ this.subscribeForContactusSpaceChanges(this.spaceID);
257
+ }
258
+ }
259
+ else {
260
+ this.currentSubscribedSpaceID = undefined;
261
+ this.spaceModuleRecordSub?.unsubscribe();
262
+ this.spaceModuleRecordSub = undefined;
263
+ this.contactusSpaceContext.next(undefined);
264
+ }
265
+ }
259
266
  subscribeForContactusSpaceChanges = (spaceID) => {
260
267
  this.spaceModuleRecordSub?.unsubscribe();
261
268
  if (!spaceID) {
269
+ this.currentSubscribedSpaceID = undefined;
262
270
  return;
263
271
  }
272
+ this.currentSubscribedSpaceID = spaceID;
264
273
  this.spaceModuleRecordSub = this.contactusSpaceService
265
274
  .watchSpaceModuleRecord(spaceID)
266
275
  .pipe(takeUntil(this.destroyed$))
@@ -1 +1 @@
1
- {"version":3,"file":"sneat-extension-contactus.mjs","sources":["../../../../../../libs/extensions/contactus/runtime/src/lib/services/contact-group-service.ts","../../../../../../libs/extensions/contactus/runtime/src/lib/services/contact-nav-service.ts","../../../../../../libs/extensions/contactus/runtime/src/lib/services/contactus-space.service.ts","../../../../../../libs/extensions/contactus/runtime/src/lib/services/contact-service.ts","../../../../../../libs/extensions/contactus/runtime/src/lib/services/contactus-space-context.service.ts","../../../../../../libs/extensions/contactus/runtime/src/lib/services/contact-role.service.ts","../../../../../../libs/extensions/contactus/runtime/src/lib/services/member.service.ts","../../../../../../libs/extensions/contactus/runtime/src/lib/services/contactus-services.module.ts","../../../../../../libs/extensions/contactus/runtime/src/lib/services/member-group.service.ts","../../../../../../libs/extensions/contactus/runtime/src/lib/services/invite.service.ts","../../../../../../libs/extensions/contactus/runtime/src/lib/services/contactus-nav.service.ts","../../../../../../libs/extensions/contactus/runtime/src/lib/provide-contactus.ts","../../../../../../libs/extensions/contactus/runtime/src/lib/members/members-routing.ts","../../../../../../libs/extensions/contactus/runtime/src/lib/contactus-routing.module.ts","../../../../../../libs/extensions/contactus/runtime/src/sneat-extension-contactus.ts"],"sourcesContent":["import { Injectable, Injector, inject } from '@angular/core';\nimport { SneatApiService } from '@sneat/api';\nimport { IIdAndDbo, ISpaceRef } from '@sneat/core';\nimport {\n defaultFamilyContactGroupDTOs,\n defaultFamilyContactGroups,\n IContactGroupBrief,\n IContactGroupDbo,\n} from '@sneat/extension-contactus-contract';\nimport { ModuleSpaceItemService } from '@sneat/space-services';\nimport { Observable, of } from 'rxjs';\n\n@Injectable()\nexport class ContactGroupService {\n private readonly spaceItemService: ModuleSpaceItemService<\n IContactGroupBrief,\n IContactGroupDbo\n >;\n\n constructor() {\n const sneatApiService = inject(SneatApiService);\n const injector = inject(Injector);\n\n this.spaceItemService = new ModuleSpaceItemService(\n injector,\n 'contactus',\n 'contact_groups',\n sneatApiService,\n );\n }\n\n getContactGroups(): Observable<readonly IIdAndDbo<IContactGroupDbo>[]> {\n return of(defaultFamilyContactGroupDTOs);\n }\n\n getContactGroupByID(\n id: string,\n space: ISpaceRef,\n ): Observable<IIdAndDbo<IContactGroupDbo>> {\n const cg = defaultFamilyContactGroups.find((cg) => cg.id === id);\n if (!cg) {\n return of({ id, space, dbo: { title: id } });\n }\n return of(cg);\n }\n\n watchMemberGroupsBySpace(\n space: ISpaceRef,\n status: 'active' | 'archived' = 'active',\n ): Observable<IIdAndDbo<IContactGroupDbo>[]> {\n // console.log('watchMemberGroupsByTeamID()', spaceID);\n return this.spaceItemService.watchModuleSpaceItemsWithSpaceRef(space, {\n filter: [{ field: 'status', operator: '==', value: status }],\n });\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { excludeUndefined } from '@sneat/core';\nimport { ContactRole } from '@sneat/extension-contactus-contract';\nimport { ErrorLogger, IErrorLogger } from '@sneat/core';\nimport { ISpaceContext } from '@sneat/space-models';\nimport { SpaceNavService } from '@sneat/space-services';\n\nexport interface INewContactPageParams {\n group?: string;\n role?: ContactRole;\n asset?: string;\n document?: string;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class ContactNavService {\n private readonly errorLogger = inject<IErrorLogger>(ErrorLogger);\n private readonly spaceNavService = inject(SpaceNavService);\n\n goNewContactPage(space: ISpaceContext, params?: INewContactPageParams): void {\n this.spaceNavService\n .navigateForwardToSpacePage(space, 'new-contact', {\n queryParams: excludeUndefined(params),\n })\n .catch(\n this.errorLogger.logErrorHandler(\n 'failed to navigate to \"new-contact\" page',\n ),\n );\n }\n}\n","import { Injectable, Injector, inject } from '@angular/core';\nimport {\n IContactBrief,\n IContactusSpaceDbo,\n} from '@sneat/extension-contactus-contract';\nimport { SpaceModuleService } from '@sneat/space-services';\n\n@Injectable()\nexport class ContactusSpaceService extends SpaceModuleService<IContactusSpaceDbo> {\n public constructor() {\n const injector = inject(Injector);\n super(injector, 'contactus');\n }\n\n public readonly watchContactBriefs = (spaceID: string) => {\n // console.log(`ContactusSpaceService.watchContactBriefs(${spaceID})`);\n return this.watchBriefs<IContactBrief>(\n spaceID,\n (dto) => dto?.contacts || {},\n );\n };\n}\n","import { Injectable, Injector, inject } from '@angular/core';\nimport { IFilter, SneatApiService } from '@sneat/api';\nimport { SneatUserService } from '@sneat/auth-core';\nimport { IIdAndBriefAndOptionalDbo, ISpaceRef } from '@sneat/core';\nimport {\n IContactBrief,\n IContactDbo,\n IContactContext,\n ICreateContactRequest,\n IContactWithDboAndSpace,\n IChangeMemberRoleRequest,\n IContactsFilter,\n IAddContactCommChannelRequest,\n IContactCommChannelRequest,\n IContactRequest,\n IContactRequestWithOptionalMessage,\n ISetContactsStatusRequest,\n IUpdateContactCommChannelRequest,\n IUpdateContactRequest,\n validateContactRequest,\n validateUpdateContactRequest,\n} from '@sneat/extension-contactus-contract';\nimport {\n ISpaceContext,\n ISpaceItemWithOptionalBriefAndOptionalDbo,\n} from '@sneat/space-models';\nimport { ModuleSpaceItemService } from '@sneat/space-services';\nimport { ContactusSpaceService } from './contactus-space.service';\nimport { map, Observable, tap, throwError } from 'rxjs';\n\n@Injectable()\nexport class ContactService extends ModuleSpaceItemService<\n IContactBrief,\n IContactDbo\n> {\n protected contactusSpaceService = inject(ContactusSpaceService);\n private readonly userService = inject(SneatUserService);\n\n constructor() {\n const sneatApiService = inject(SneatApiService);\n const injector = inject(Injector);\n super(injector, 'contactus', 'contacts', 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 `removeSpaceMember(spaceID=${request.spaceID}, contactID=${request.contactID})`,\n );\n try {\n validateContactRequest(request);\n } catch (ex) {\n return throwError(() => ex);\n }\n\n // `contactus/remove_space_member` is the route the backend actually\n // registers (api4contactus/routes.go). This used to post to\n // `contactus/remove_team_member`, which is registered nowhere, so every\n // member removal from the browser 404'd -- including the \"Leave team\"\n // button. See issue #89.\n return this.sneatApiService.post('contactus/remove_space_member', request);\n }\n}\n","import { inject } from '@angular/core';\nimport { SneatUserService } from '@sneat/auth-core';\nimport { IContactusSpaceDboAndID } from '@sneat/extension-contactus-contract';\nimport { ContactusSpaceService } from './contactus-space.service';\nimport { ErrorLogger } from '@sneat/core';\nimport { ISpaceDbo } from '@sneat/dto';\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 isRootSpaceLoaded = false;\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 private readonly spaceDbo$: Observable<ISpaceDbo | undefined | null>,\n ) {\n destroyed$.subscribe({\n next: () => {\n this.contactusSpaceContext.complete();\n },\n });\n spaceID$.pipe(takeUntil(destroyed$)).subscribe({\n next: (spaceID) => {\n this.spaceModuleRecordSub?.unsubscribe();\n this.spaceModuleRecordSub = undefined;\n this.contactusSpaceContext.next(undefined);\n this.spaceID = spaceID;\n this.isRootSpaceLoaded = false;\n },\n });\n spaceDbo$.pipe(takeUntil(destroyed$)).subscribe({\n next: (spaceDbo) => {\n this.isRootSpaceLoaded = !!spaceDbo;\n if (spaceDbo && this.userService.currentUserID) {\n this.subscribeForContactusSpaceChanges(this.spaceID);\n } else {\n this.spaceModuleRecordSub?.unsubscribe();\n this.spaceModuleRecordSub = undefined;\n this.contactusSpaceContext.next(undefined);\n }\n },\n });\n this.userService.userChanged.pipe(takeUntil(destroyed$)).subscribe({\n next: (uid) => {\n if (uid && this.isRootSpaceLoaded) {\n this.subscribeForContactusSpaceChanges(this.spaceID);\n } else {\n this.spaceModuleRecordSub?.unsubscribe();\n this.spaceModuleRecordSub = undefined;\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.destroyed$))\n .subscribe({\n next: this.onContactusSpaceChanged,\n error: this.errorLogger.logErrorHandler(\n 'ContactusSpaceContextService: failed to get contactus space record',\n ),\n });\n };\n\n private readonly onContactusSpaceChanged = (\n contactusSpace: IContactusSpaceDboAndID,\n ): void => {\n console.log(\n 'ContactusSpaceContextService.onContactusSpaceChanged()',\n contactusSpace,\n );\n this.contactusSpaceContext.next(contactusSpace);\n };\n}\n","import { Injectable } from '@angular/core';\nimport { IIdAndBrief } from '@sneat/core';\nimport {\n defaultFamilyContactGroups,\n IContactRoleBrief,\n} from '@sneat/extension-contactus-contract';\nimport { Observable, of } from 'rxjs';\n\n@Injectable()\nexport class ContactRoleService {\n getContactRoleByID(id: string): Observable<IIdAndBrief<IContactRoleBrief>> {\n for (const cg of defaultFamilyContactGroups) {\n for (let j = 0; j < (cg?.dbo?.roles?.length || 0); j++) {\n const role = cg.dbo?.roles && cg.dbo.roles[j];\n if (role?.id === id) {\n return of({ id, brief: role.brief });\n }\n }\n }\n return of({ id, brief: { title: id } });\n }\n}\n","import { Injectable } from '@angular/core';\nimport { trimNames } from '@sneat/auth-models';\nimport {\n IMemberBrief,\n IAcceptPersonalInviteRequest,\n IAddSpaceMemberResponse,\n ICreateSpaceMemberRequest,\n validateCreateSpaceMemberRequest,\n} from '@sneat/extension-contactus-contract';\nimport { ContactService } from './contact-service';\nimport { Observable } from 'rxjs';\n\n@Injectable()\nexport class MemberService extends ContactService {\n public acceptPersonalInvite(\n request: IAcceptPersonalInviteRequest,\n firebaseToken: string,\n ): Observable<IMemberBrief> {\n // console.log('MemberService.acceptPersonalInvite()');\n if (firebaseToken) {\n this.sneatApiService.setApiAuthToken(firebaseToken);\n }\n return this.sneatApiService.post('invites/accept_personal_invite', request);\n }\n\n public createMember(\n request: ICreateSpaceMemberRequest,\n ): Observable<IAddSpaceMemberResponse> {\n // console.log(`MemberService.addMember()`, request);\n if (request.names) {\n request = { ...request, names: trimNames(request.names) };\n }\n validateCreateSpaceMemberRequest(request);\n return this.sneatApiService.post<IAddSpaceMemberResponse>(\n 'contactus/create_member',\n request,\n );\n }\n}\n","import { NgModule } from '@angular/core';\nimport { ContactGroupService } from './contact-group-service';\nimport { ContactNavService } from './contact-nav-service';\nimport { ContactRoleService } from './contact-role.service';\nimport { ContactService } from './contact-service';\nimport { ContactusSpaceService } from './contactus-space.service';\nimport { MemberService } from './member.service';\n\n@NgModule({\n imports: [],\n providers: [\n ContactService,\n ContactNavService,\n ContactGroupService,\n ContactRoleService,\n ContactusSpaceService,\n MemberService,\n ],\n})\nexport class ContactusServicesModule {}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class MemberGroupService {\n // TODO: Move to ContactGroupService or delete\n}\n","import { Injectable, inject } from '@angular/core';\nimport { SneatApiService } from '@sneat/api';\nimport { SneatAuthStateService } from '@sneat/auth-core';\nimport {\n IAcceptPersonalInviteRequest,\n ICreatePersonalInviteRequest,\n ICreatePersonalInviteResponse,\n IJoinSpaceInfoResponse,\n} from '@sneat/extension-contactus-contract';\nimport { excludeEmpty } from '@sneat/core';\nimport { ErrorLogger, IErrorLogger } from '@sneat/core';\nimport { RandomIdService } from '@sneat/random';\nimport {\n IAcceptInviteResponse,\n IRejectPersonalInviteRequest,\n} from '@sneat/space-models';\nimport { from, Observable, switchMap, throwError } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\n@Injectable()\nexport class InviteService {\n private readonly errorLogger = inject<IErrorLogger>(ErrorLogger);\n private readonly sneatAuthService = inject(SneatAuthStateService);\n private readonly sneatApiService = inject(SneatApiService);\n private readonly randomService = inject(RandomIdService);\n\n public createInviteForMember(\n request: ICreatePersonalInviteRequest,\n ): Observable<ICreatePersonalInviteResponse> {\n const contactID = request.to.memberID;\n return this.sneatApiService.post<ICreatePersonalInviteResponse>(\n 'invites/create_invite_for_member',\n excludeEmpty({\n ...request,\n contactID,\n to: {\n ...request.to,\n memberID: undefined,\n contactID,\n },\n }),\n );\n }\n\n public getInviteLinkForMember(\n request: ICreatePersonalInviteRequest,\n ): Observable<ICreatePersonalInviteResponse> {\n // TODO: Should we pass `request.message`? If not should be excluded from request\n return this.sneatApiService.get<ICreatePersonalInviteResponse>(\n `invites/invite_link_for_member?space=${request.spaceID}&member=${request.to.memberID}`,\n );\n }\n\n public getSpaceJoinInfo(\n inviteID: string,\n pin: string,\n ): Observable<IJoinSpaceInfoResponse> {\n return this.sneatApiService\n .postAsAnonymous<IJoinSpaceInfoResponse>('space/join_info', {\n inviteID,\n pin,\n })\n .pipe(\n map((response) => ({\n ...response,\n invite: {\n ...response.invite,\n id: inviteID,\n pin,\n },\n })),\n );\n }\n\n public rejectPersonalInvite(\n request: IRejectPersonalInviteRequest,\n ): Observable<void> {\n return this.sneatApiService.post('invites/reject_personal_invite', request);\n }\n\n public acceptInviteByAuthenticatedUser(\n inviteInfo: IJoinSpaceInfoResponse,\n ): Observable<IAcceptInviteResponse> {\n const request: IAcceptPersonalInviteRequest = {\n spaceID: inviteInfo.space.id,\n inviteID: inviteInfo.invite.id,\n pin: inviteInfo.invite.pin,\n member: inviteInfo.member,\n // email: this.email,\n // fullName: this.fullName,\n };\n return this.sneatApiService.post('invites/accept_personal_invite', request);\n }\n\n public acceptInviteByUnauthenticatedUser(\n inviteInfo: IJoinSpaceInfoResponse,\n ): Observable<IAcceptInviteResponse> {\n if (\n inviteInfo.invite.to.channel === 'email' &&\n inviteInfo.invite.to.address\n ) {\n return this.acceptEmailInviteByUnauthenticatedUser(inviteInfo);\n }\n return throwError(\n () => 'Only join from an email invites is implemented yet',\n );\n }\n\n private acceptEmailInviteByUnauthenticatedUser(\n inviteInfo: IJoinSpaceInfoResponse,\n ): Observable<IAcceptInviteResponse> {\n const email = inviteInfo.invite.to.address;\n if (!email) {\n return throwError(() => 'No value in inviteInfo.invite.to.address');\n }\n const password = this.randomService.newRandomId({ len: 12 });\n return from(\n this.sneatAuthService.createUserWithEmailAndPassword(email, password),\n ).pipe(\n switchMap(({ token }) => {\n this.sneatApiService.setApiAuthToken(token);\n return this.acceptInviteByAuthenticatedUser(inviteInfo);\n }),\n );\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { IContactContext } from '@sneat/extension-contactus-contract';\nimport { ISpaceContext } from '@sneat/space-models';\nimport { SpaceNavService } from '@sneat/space-services';\n\n@Injectable()\nexport class ContactusNavService {\n private readonly spaceNavService = inject(SpaceNavService);\n\n public navigateToAddMember = (space: ISpaceContext): Promise<boolean> =>\n this.spaceNavService.navigateForwardToSpacePage(space, 'add-member');\n\n public navigateToMember(memberContext: IContactContext): void {\n console.log(\n `navigateToMember(team.id=${memberContext?.space?.id}, memberInfo.id=${memberContext?.id})`,\n );\n // const id = `${memberContext?.space?.id}:${memberContext?.id}`;\n // const { space } = memberContext;\n // if (!space) {\n // \tthis.errorLogger.logError(\n // \t\t'not able to navigate to member without team context',\n // \t);\n // \treturn;\n // }\n // this.spaceNavService.navigateForwardToSpacePage(\n // \tspace,\n // \t`member/${memberContext.id}`,\n // \t{\n // \t\tstate: {\n // \t\t\tcontact: memberContext,\n // \t\t},\n // \t},\n // );\n }\n}\n","import { Provider } from '@angular/core';\nimport {\n CONTACT_GROUP_SERVICE,\n CONTACT_NAV_SERVICE,\n CONTACT_ROLE_SERVICE,\n CONTACT_SERVICE,\n CONTACTUS_NAV_SERVICE,\n CONTACTUS_SPACE_SERVICE,\n INVITE_SERVICE,\n} from '@sneat/extension-contactus-contract';\nimport {\n ContactGroupService,\n ContactNavService,\n ContactRoleService,\n ContactService,\n ContactusNavService,\n ContactusSpaceService,\n InviteService,\n MemberGroupService,\n MemberService,\n} from './services';\n\n/**\n * Provides the concrete contactus services and binds them to the\n * contract injection tokens. Consumed at app bootstrap; other\n * extensions must NOT import this.\n */\nexport function provideContactus(): Provider[] {\n // NOTE: ContactusSpaceContextService is intentionally NOT provided here — it\n // is manually instantiated (its constructor takes plain Observables: the\n // destroyed$ and spaceID$ streams), so it has no Angular DI factory and\n // registering it as a provider throws NG0204. Consumers `new` it directly.\n return [\n ContactService,\n ContactNavService,\n ContactGroupService,\n ContactRoleService,\n ContactusSpaceService,\n ContactusNavService,\n MemberService,\n MemberGroupService,\n InviteService,\n { provide: CONTACT_SERVICE, useExisting: ContactService },\n { provide: CONTACTUS_SPACE_SERVICE, useExisting: ContactusSpaceService },\n { provide: CONTACT_NAV_SERVICE, useExisting: ContactNavService },\n { provide: CONTACTUS_NAV_SERVICE, useExisting: ContactusNavService },\n { provide: CONTACT_GROUP_SERVICE, useExisting: ContactGroupService },\n { provide: CONTACT_ROLE_SERVICE, useExisting: ContactRoleService },\n { provide: INVITE_SERVICE, useExisting: InviteService },\n ];\n}\n","import { Route } from '@angular/router';\n\nexport const membersRoutes: Route[] = [\n {\n path: 'members',\n data: { title: 'Members' },\n loadComponent: () =>\n import('./pages/members/members-page.component').then(\n (m) => m.MembersPageComponent,\n ),\n // ...guardRoute,\n },\n {\n path: 'new-member',\n data: { title: 'New member' },\n loadComponent: () =>\n import('./pages/new-member').then((m) => m.NewMemberPageComponent),\n // ...guardRoute,\n },\n {\n path: 'member/:contactID',\n data: { title: 'Member' },\n loadComponent: () =>\n import('./pages/member/space-member-page.component').then(\n (m) => m.SpaceMemberPageComponent,\n ),\n },\n\n // {\n // \tpath: 'pupils',\n // \tloadChildren: () => import('./pupils/pupils.module')\n // \t\t.then(m => m.PupilsPageModule),\n // \t// ...guardRoute,\n // },\n // {\n // \tpath: 'staff',\n // \tloadChildren: () => import('./staff/staff.module')\n // \t\t.then(m => m.StaffPageModule),\n // \t// ...guardRoute,\n // },\n];\n","import { Route } from '@angular/router';\nimport { membersRoutes } from './members';\n\n// import {guardRoute} from '../../utils/guard-route';\n\nexport const contactusRoutes: Route[] = [\n {\n path: 'contacts',\n data: { title: 'Contacts' },\n loadComponent: () =>\n import('./pages/contacts/contacts-page.component').then(\n (m) => m.ContactsPageComponent,\n ),\n // ...guardRoute,\n },\n {\n path: 'new-contact',\n data: { title: 'New Contact' },\n loadComponent: () =>\n import('./pages').then((m) => m.NewContactPageComponent),\n // ...guardRoute,\n },\n {\n path: 'contact/:contactID',\n data: { title: 'Contact' },\n loadComponent: () => import('./pages').then((m) => m.ContactPageComponent),\n // ...guardRoute,\n },\n {\n path: 'contact/:contactID/new-location',\n data: { title: 'New location' },\n loadComponent: () =>\n import('./pages').then((m) => m.NewLocationPageComponent),\n // ...guardRoute,\n },\n ...membersRoutes,\n // {\n // \tpath: 'applicants',\n // \tloadChildren: () => import('./pages/contacts/contacts-page.module')\n // \t\t.then(m => m.ContactsPageModule),\n // \t// ...guardRoute,\n // },\n // {\n // \tpath: 'tenants',\n // \tloadChildren: () => import('./pages/contacts/contacts-page.module')\n // \t\t.then(m => m.ContactsPageModule),\n // \t// ...guardRoute,\n // },\n // {\n // \tpath: 'landlords',\n // \tloadChildren: () => import('./pages/contacts/contacts-page.module')\n // \t\t.then(m => m.ContactsPageModule),\n // \t// ...guardRoute,\n // },\n];\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["map"],"mappings":"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"}
1
+ {"version":3,"file":"sneat-extension-contactus.mjs","sources":["../../../../../../libs/extensions/contactus/runtime/src/lib/services/contact-group-service.ts","../../../../../../libs/extensions/contactus/runtime/src/lib/services/contact-nav-service.ts","../../../../../../libs/extensions/contactus/runtime/src/lib/services/contactus-space.service.ts","../../../../../../libs/extensions/contactus/runtime/src/lib/services/contact-service.ts","../../../../../../libs/extensions/contactus/runtime/src/lib/services/contactus-space-context.service.ts","../../../../../../libs/extensions/contactus/runtime/src/lib/services/contact-role.service.ts","../../../../../../libs/extensions/contactus/runtime/src/lib/services/member.service.ts","../../../../../../libs/extensions/contactus/runtime/src/lib/services/contactus-services.module.ts","../../../../../../libs/extensions/contactus/runtime/src/lib/services/member-group.service.ts","../../../../../../libs/extensions/contactus/runtime/src/lib/services/invite.service.ts","../../../../../../libs/extensions/contactus/runtime/src/lib/services/contactus-nav.service.ts","../../../../../../libs/extensions/contactus/runtime/src/lib/provide-contactus.ts","../../../../../../libs/extensions/contactus/runtime/src/lib/members/members-routing.ts","../../../../../../libs/extensions/contactus/runtime/src/lib/contactus-routing.module.ts","../../../../../../libs/extensions/contactus/runtime/src/sneat-extension-contactus.ts"],"sourcesContent":["import { Injectable, Injector, inject } from '@angular/core';\nimport { SneatApiService } from '@sneat/api';\nimport { IIdAndDbo, ISpaceRef } from '@sneat/core';\nimport {\n defaultFamilyContactGroupDTOs,\n defaultFamilyContactGroups,\n IContactGroupBrief,\n IContactGroupDbo,\n} from '@sneat/extension-contactus-contract';\nimport { ModuleSpaceItemService } from '@sneat/space-services';\nimport { Observable, of } from 'rxjs';\n\n@Injectable()\nexport class ContactGroupService {\n private readonly spaceItemService: ModuleSpaceItemService<\n IContactGroupBrief,\n IContactGroupDbo\n >;\n\n constructor() {\n const sneatApiService = inject(SneatApiService);\n const injector = inject(Injector);\n\n this.spaceItemService = new ModuleSpaceItemService(\n injector,\n 'contactus',\n 'contact_groups',\n sneatApiService,\n );\n }\n\n getContactGroups(): Observable<readonly IIdAndDbo<IContactGroupDbo>[]> {\n return of(defaultFamilyContactGroupDTOs);\n }\n\n getContactGroupByID(\n id: string,\n space: ISpaceRef,\n ): Observable<IIdAndDbo<IContactGroupDbo>> {\n const cg = defaultFamilyContactGroups.find((cg) => cg.id === id);\n if (!cg) {\n return of({ id, space, dbo: { title: id } });\n }\n return of(cg);\n }\n\n watchMemberGroupsBySpace(\n space: ISpaceRef,\n status: 'active' | 'archived' = 'active',\n ): Observable<IIdAndDbo<IContactGroupDbo>[]> {\n // console.log('watchMemberGroupsByTeamID()', spaceID);\n return this.spaceItemService.watchModuleSpaceItemsWithSpaceRef(space, {\n filter: [{ field: 'status', operator: '==', value: status }],\n });\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { excludeUndefined } from '@sneat/core';\nimport { ContactRole } from '@sneat/extension-contactus-contract';\nimport { ErrorLogger, IErrorLogger } from '@sneat/core';\nimport { ISpaceContext } from '@sneat/space-models';\nimport { SpaceNavService } from '@sneat/space-services';\n\nexport interface INewContactPageParams {\n group?: string;\n role?: ContactRole;\n asset?: string;\n document?: string;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class ContactNavService {\n private readonly errorLogger = inject<IErrorLogger>(ErrorLogger);\n private readonly spaceNavService = inject(SpaceNavService);\n\n goNewContactPage(space: ISpaceContext, params?: INewContactPageParams): void {\n this.spaceNavService\n .navigateForwardToSpacePage(space, 'new-contact', {\n queryParams: excludeUndefined(params),\n })\n .catch(\n this.errorLogger.logErrorHandler(\n 'failed to navigate to \"new-contact\" page',\n ),\n );\n }\n}\n","import { Injectable, Injector, inject } from '@angular/core';\nimport {\n IContactBrief,\n IContactusSpaceDbo,\n} from '@sneat/extension-contactus-contract';\nimport { SpaceModuleService } from '@sneat/space-services';\n\n@Injectable()\nexport class ContactusSpaceService extends SpaceModuleService<IContactusSpaceDbo> {\n public constructor() {\n const injector = inject(Injector);\n super(injector, 'contactus');\n }\n\n public readonly watchContactBriefs = (spaceID: string) => {\n // console.log(`ContactusSpaceService.watchContactBriefs(${spaceID})`);\n return this.watchBriefs<IContactBrief>(\n spaceID,\n (dto) => dto?.contacts || {},\n );\n };\n}\n","import { Injectable, Injector, inject } from '@angular/core';\nimport { IFilter, SneatApiService } from '@sneat/api';\nimport { SneatUserService } from '@sneat/auth-core';\nimport { IIdAndBriefAndOptionalDbo, ISpaceRef } from '@sneat/core';\nimport {\n IContactBrief,\n IContactDbo,\n IContactContext,\n ICreateContactRequest,\n IContactWithDboAndSpace,\n IChangeMemberRoleRequest,\n IContactsFilter,\n IAddContactCommChannelRequest,\n IContactCommChannelRequest,\n IContactRequest,\n IContactRequestWithOptionalMessage,\n ISetContactsStatusRequest,\n IUpdateContactCommChannelRequest,\n IUpdateContactRequest,\n validateContactRequest,\n validateUpdateContactRequest,\n} from '@sneat/extension-contactus-contract';\nimport {\n ISpaceContext,\n ISpaceItemWithOptionalBriefAndOptionalDbo,\n} from '@sneat/space-models';\nimport { ModuleSpaceItemService } from '@sneat/space-services';\nimport { ContactusSpaceService } from './contactus-space.service';\nimport { map, Observable, tap, throwError } from 'rxjs';\n\n@Injectable()\nexport class ContactService extends ModuleSpaceItemService<\n IContactBrief,\n IContactDbo\n> {\n protected contactusSpaceService = inject(ContactusSpaceService);\n private readonly userService = inject(SneatUserService);\n\n constructor() {\n const sneatApiService = inject(SneatApiService);\n const injector = inject(Injector);\n super(injector, 'contactus', 'contacts', 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 `removeSpaceMember(spaceID=${request.spaceID}, contactID=${request.contactID})`,\n );\n try {\n validateContactRequest(request);\n } catch (ex) {\n return throwError(() => ex);\n }\n\n // `contactus/remove_space_member` is the route the backend actually\n // registers (api4contactus/routes.go). This used to post to\n // `contactus/remove_team_member`, which is registered nowhere, so every\n // member removal from the browser 404'd -- including the \"Leave team\"\n // button. See issue #89.\n return this.sneatApiService.post('contactus/remove_space_member', request);\n }\n}\n","import { inject } from '@angular/core';\nimport { SneatUserService } from '@sneat/auth-core';\nimport { IContactusSpaceDboAndID } from '@sneat/extension-contactus-contract';\nimport { ContactusSpaceService } from './contactus-space.service';\nimport { ErrorLogger } from '@sneat/core';\nimport { ISpaceDbo } from '@sneat/dto';\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 spaceDbo?: ISpaceDbo | null;\n private currentUserID?: string;\n private currentSubscribedSpaceID?: 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 private readonly spaceDbo$: Observable<ISpaceDbo | undefined | null>,\n ) {\n this.currentUserID = this.userService.currentUserID;\n\n destroyed$.subscribe({\n next: () => {\n this.contactusSpaceContext.complete();\n },\n });\n spaceID$.pipe(takeUntil(destroyed$)).subscribe({\n next: (spaceID) => {\n if (this.spaceID === spaceID && this.spaceDbo) {\n return;\n }\n this.spaceID = spaceID;\n this.spaceDbo = undefined;\n this.checkAndSubscribe();\n },\n });\n spaceDbo$.pipe(takeUntil(destroyed$)).subscribe({\n next: (spaceDbo) => {\n this.spaceDbo = spaceDbo;\n this.checkAndSubscribe();\n },\n });\n this.userService.userChanged.pipe(takeUntil(destroyed$)).subscribe({\n next: (uid) => {\n this.currentUserID = uid;\n this.checkAndSubscribe();\n },\n });\n }\n\n private checkAndSubscribe(): void {\n const shouldSubscribe = !!(\n this.spaceID &&\n this.spaceDbo &&\n (this.currentUserID || this.userService.currentUserID)\n );\n if (shouldSubscribe) {\n if (this.currentSubscribedSpaceID !== this.spaceID) {\n this.subscribeForContactusSpaceChanges(this.spaceID);\n }\n } else {\n this.currentSubscribedSpaceID = undefined;\n this.spaceModuleRecordSub?.unsubscribe();\n this.spaceModuleRecordSub = undefined;\n this.contactusSpaceContext.next(undefined);\n }\n }\n\n private readonly subscribeForContactusSpaceChanges = (\n spaceID?: string,\n ): void => {\n this.spaceModuleRecordSub?.unsubscribe();\n if (!spaceID) {\n this.currentSubscribedSpaceID = undefined;\n return;\n }\n this.currentSubscribedSpaceID = spaceID;\n this.spaceModuleRecordSub = this.contactusSpaceService\n .watchSpaceModuleRecord(spaceID)\n .pipe(takeUntil(this.destroyed$))\n .subscribe({\n next: this.onContactusSpaceChanged,\n error: this.errorLogger.logErrorHandler(\n 'ContactusSpaceContextService: failed to get contactus space record',\n ),\n });\n };\n\n private readonly onContactusSpaceChanged = (\n contactusSpace: IContactusSpaceDboAndID,\n ): void => {\n console.log(\n 'ContactusSpaceContextService.onContactusSpaceChanged()',\n contactusSpace,\n );\n this.contactusSpaceContext.next(contactusSpace);\n };\n}\n","import { Injectable } from '@angular/core';\nimport { IIdAndBrief } from '@sneat/core';\nimport {\n defaultFamilyContactGroups,\n IContactRoleBrief,\n} from '@sneat/extension-contactus-contract';\nimport { Observable, of } from 'rxjs';\n\n@Injectable()\nexport class ContactRoleService {\n getContactRoleByID(id: string): Observable<IIdAndBrief<IContactRoleBrief>> {\n for (const cg of defaultFamilyContactGroups) {\n for (let j = 0; j < (cg?.dbo?.roles?.length || 0); j++) {\n const role = cg.dbo?.roles && cg.dbo.roles[j];\n if (role?.id === id) {\n return of({ id, brief: role.brief });\n }\n }\n }\n return of({ id, brief: { title: id } });\n }\n}\n","import { Injectable } from '@angular/core';\nimport { trimNames } from '@sneat/auth-models';\nimport {\n IMemberBrief,\n IAcceptPersonalInviteRequest,\n IAddSpaceMemberResponse,\n ICreateSpaceMemberRequest,\n validateCreateSpaceMemberRequest,\n} from '@sneat/extension-contactus-contract';\nimport { ContactService } from './contact-service';\nimport { Observable } from 'rxjs';\n\n@Injectable()\nexport class MemberService extends ContactService {\n public acceptPersonalInvite(\n request: IAcceptPersonalInviteRequest,\n firebaseToken: string,\n ): Observable<IMemberBrief> {\n // console.log('MemberService.acceptPersonalInvite()');\n if (firebaseToken) {\n this.sneatApiService.setApiAuthToken(firebaseToken);\n }\n return this.sneatApiService.post('invites/accept_personal_invite', request);\n }\n\n public createMember(\n request: ICreateSpaceMemberRequest,\n ): Observable<IAddSpaceMemberResponse> {\n // console.log(`MemberService.addMember()`, request);\n if (request.names) {\n request = { ...request, names: trimNames(request.names) };\n }\n validateCreateSpaceMemberRequest(request);\n return this.sneatApiService.post<IAddSpaceMemberResponse>(\n 'contactus/create_member',\n request,\n );\n }\n}\n","import { NgModule } from '@angular/core';\nimport { ContactGroupService } from './contact-group-service';\nimport { ContactNavService } from './contact-nav-service';\nimport { ContactRoleService } from './contact-role.service';\nimport { ContactService } from './contact-service';\nimport { ContactusSpaceService } from './contactus-space.service';\nimport { MemberService } from './member.service';\n\n@NgModule({\n imports: [],\n providers: [\n ContactService,\n ContactNavService,\n ContactGroupService,\n ContactRoleService,\n ContactusSpaceService,\n MemberService,\n ],\n})\nexport class ContactusServicesModule {}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class MemberGroupService {\n // TODO: Move to ContactGroupService or delete\n}\n","import { Injectable, inject } from '@angular/core';\nimport { SneatApiService } from '@sneat/api';\nimport { SneatAuthStateService } from '@sneat/auth-core';\nimport {\n IAcceptPersonalInviteRequest,\n ICreatePersonalInviteRequest,\n ICreatePersonalInviteResponse,\n IJoinSpaceInfoResponse,\n} from '@sneat/extension-contactus-contract';\nimport { excludeEmpty } from '@sneat/core';\nimport { ErrorLogger, IErrorLogger } from '@sneat/core';\nimport { RandomIdService } from '@sneat/random';\nimport {\n IAcceptInviteResponse,\n IRejectPersonalInviteRequest,\n} from '@sneat/space-models';\nimport { from, Observable, switchMap, throwError } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\n@Injectable()\nexport class InviteService {\n private readonly errorLogger = inject<IErrorLogger>(ErrorLogger);\n private readonly sneatAuthService = inject(SneatAuthStateService);\n private readonly sneatApiService = inject(SneatApiService);\n private readonly randomService = inject(RandomIdService);\n\n public createInviteForMember(\n request: ICreatePersonalInviteRequest,\n ): Observable<ICreatePersonalInviteResponse> {\n const contactID = request.to.memberID;\n return this.sneatApiService.post<ICreatePersonalInviteResponse>(\n 'invites/create_invite_for_member',\n excludeEmpty({\n ...request,\n contactID,\n to: {\n ...request.to,\n memberID: undefined,\n contactID,\n },\n }),\n );\n }\n\n public getInviteLinkForMember(\n request: ICreatePersonalInviteRequest,\n ): Observable<ICreatePersonalInviteResponse> {\n // TODO: Should we pass `request.message`? If not should be excluded from request\n return this.sneatApiService.get<ICreatePersonalInviteResponse>(\n `invites/invite_link_for_member?space=${request.spaceID}&member=${request.to.memberID}`,\n );\n }\n\n public getSpaceJoinInfo(\n inviteID: string,\n pin: string,\n ): Observable<IJoinSpaceInfoResponse> {\n return this.sneatApiService\n .postAsAnonymous<IJoinSpaceInfoResponse>('space/join_info', {\n inviteID,\n pin,\n })\n .pipe(\n map((response) => ({\n ...response,\n invite: {\n ...response.invite,\n id: inviteID,\n pin,\n },\n })),\n );\n }\n\n public rejectPersonalInvite(\n request: IRejectPersonalInviteRequest,\n ): Observable<void> {\n return this.sneatApiService.post('invites/reject_personal_invite', request);\n }\n\n public acceptInviteByAuthenticatedUser(\n inviteInfo: IJoinSpaceInfoResponse,\n ): Observable<IAcceptInviteResponse> {\n const request: IAcceptPersonalInviteRequest = {\n spaceID: inviteInfo.space.id,\n inviteID: inviteInfo.invite.id,\n pin: inviteInfo.invite.pin,\n member: inviteInfo.member,\n // email: this.email,\n // fullName: this.fullName,\n };\n return this.sneatApiService.post('invites/accept_personal_invite', request);\n }\n\n public acceptInviteByUnauthenticatedUser(\n inviteInfo: IJoinSpaceInfoResponse,\n ): Observable<IAcceptInviteResponse> {\n if (\n inviteInfo.invite.to.channel === 'email' &&\n inviteInfo.invite.to.address\n ) {\n return this.acceptEmailInviteByUnauthenticatedUser(inviteInfo);\n }\n return throwError(\n () => 'Only join from an email invites is implemented yet',\n );\n }\n\n private acceptEmailInviteByUnauthenticatedUser(\n inviteInfo: IJoinSpaceInfoResponse,\n ): Observable<IAcceptInviteResponse> {\n const email = inviteInfo.invite.to.address;\n if (!email) {\n return throwError(() => 'No value in inviteInfo.invite.to.address');\n }\n const password = this.randomService.newRandomId({ len: 12 });\n return from(\n this.sneatAuthService.createUserWithEmailAndPassword(email, password),\n ).pipe(\n switchMap(({ token }) => {\n this.sneatApiService.setApiAuthToken(token);\n return this.acceptInviteByAuthenticatedUser(inviteInfo);\n }),\n );\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { IContactContext } from '@sneat/extension-contactus-contract';\nimport { ISpaceContext } from '@sneat/space-models';\nimport { SpaceNavService } from '@sneat/space-services';\n\n@Injectable()\nexport class ContactusNavService {\n private readonly spaceNavService = inject(SpaceNavService);\n\n public navigateToAddMember = (space: ISpaceContext): Promise<boolean> =>\n this.spaceNavService.navigateForwardToSpacePage(space, 'add-member');\n\n public navigateToMember(memberContext: IContactContext): void {\n console.log(\n `navigateToMember(team.id=${memberContext?.space?.id}, memberInfo.id=${memberContext?.id})`,\n );\n // const id = `${memberContext?.space?.id}:${memberContext?.id}`;\n // const { space } = memberContext;\n // if (!space) {\n // \tthis.errorLogger.logError(\n // \t\t'not able to navigate to member without team context',\n // \t);\n // \treturn;\n // }\n // this.spaceNavService.navigateForwardToSpacePage(\n // \tspace,\n // \t`member/${memberContext.id}`,\n // \t{\n // \t\tstate: {\n // \t\t\tcontact: memberContext,\n // \t\t},\n // \t},\n // );\n }\n}\n","import { Provider } from '@angular/core';\nimport {\n CONTACT_GROUP_SERVICE,\n CONTACT_NAV_SERVICE,\n CONTACT_ROLE_SERVICE,\n CONTACT_SERVICE,\n CONTACTUS_NAV_SERVICE,\n CONTACTUS_SPACE_SERVICE,\n INVITE_SERVICE,\n} from '@sneat/extension-contactus-contract';\nimport {\n ContactGroupService,\n ContactNavService,\n ContactRoleService,\n ContactService,\n ContactusNavService,\n ContactusSpaceService,\n InviteService,\n MemberGroupService,\n MemberService,\n} from './services';\n\n/**\n * Provides the concrete contactus services and binds them to the\n * contract injection tokens. Consumed at app bootstrap; other\n * extensions must NOT import this.\n */\nexport function provideContactus(): Provider[] {\n // NOTE: ContactusSpaceContextService is intentionally NOT provided here — it\n // is manually instantiated (its constructor takes plain Observables: the\n // destroyed$ and spaceID$ streams), so it has no Angular DI factory and\n // registering it as a provider throws NG0204. Consumers `new` it directly.\n return [\n ContactService,\n ContactNavService,\n ContactGroupService,\n ContactRoleService,\n ContactusSpaceService,\n ContactusNavService,\n MemberService,\n MemberGroupService,\n InviteService,\n { provide: CONTACT_SERVICE, useExisting: ContactService },\n { provide: CONTACTUS_SPACE_SERVICE, useExisting: ContactusSpaceService },\n { provide: CONTACT_NAV_SERVICE, useExisting: ContactNavService },\n { provide: CONTACTUS_NAV_SERVICE, useExisting: ContactusNavService },\n { provide: CONTACT_GROUP_SERVICE, useExisting: ContactGroupService },\n { provide: CONTACT_ROLE_SERVICE, useExisting: ContactRoleService },\n { provide: INVITE_SERVICE, useExisting: InviteService },\n ];\n}\n","import { Route } from '@angular/router';\n\nexport const membersRoutes: Route[] = [\n {\n path: 'members',\n data: { title: 'Members' },\n loadComponent: () =>\n import('./pages/members/members-page.component').then(\n (m) => m.MembersPageComponent,\n ),\n // ...guardRoute,\n },\n {\n path: 'new-member',\n data: { title: 'New member' },\n loadComponent: () =>\n import('./pages/new-member').then((m) => m.NewMemberPageComponent),\n // ...guardRoute,\n },\n {\n path: 'member/:contactID',\n data: { title: 'Member' },\n loadComponent: () =>\n import('./pages/member/space-member-page.component').then(\n (m) => m.SpaceMemberPageComponent,\n ),\n },\n\n // {\n // \tpath: 'pupils',\n // \tloadChildren: () => import('./pupils/pupils.module')\n // \t\t.then(m => m.PupilsPageModule),\n // \t// ...guardRoute,\n // },\n // {\n // \tpath: 'staff',\n // \tloadChildren: () => import('./staff/staff.module')\n // \t\t.then(m => m.StaffPageModule),\n // \t// ...guardRoute,\n // },\n];\n","import { Route } from '@angular/router';\nimport { membersRoutes } from './members';\n\n// import {guardRoute} from '../../utils/guard-route';\n\nexport const contactusRoutes: Route[] = [\n {\n path: 'contacts',\n data: { title: 'Contacts' },\n loadComponent: () =>\n import('./pages/contacts/contacts-page.component').then(\n (m) => m.ContactsPageComponent,\n ),\n // ...guardRoute,\n },\n {\n path: 'new-contact',\n data: { title: 'New Contact' },\n loadComponent: () =>\n import('./pages').then((m) => m.NewContactPageComponent),\n // ...guardRoute,\n },\n {\n path: 'contact/:contactID',\n data: { title: 'Contact' },\n loadComponent: () => import('./pages').then((m) => m.ContactPageComponent),\n // ...guardRoute,\n },\n {\n path: 'contact/:contactID/new-location',\n data: { title: 'New location' },\n loadComponent: () =>\n import('./pages').then((m) => m.NewLocationPageComponent),\n // ...guardRoute,\n },\n ...membersRoutes,\n // {\n // \tpath: 'applicants',\n // \tloadChildren: () => import('./pages/contacts/contacts-page.module')\n // \t\t.then(m => m.ContactsPageModule),\n // \t// ...guardRoute,\n // },\n // {\n // \tpath: 'tenants',\n // \tloadChildren: () => import('./pages/contacts/contacts-page.module')\n // \t\t.then(m => m.ContactsPageModule),\n // \t// ...guardRoute,\n // },\n // {\n // \tpath: 'landlords',\n // \tloadChildren: () => import('./pages/contacts/contacts-page.module')\n // \t\t.then(m => m.ContactsPageModule),\n // \t// ...guardRoute,\n // },\n];\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["map"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sneat/extension-contactus",
3
- "version": "0.14.17",
3
+ "version": "0.14.19",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -14,13 +14,13 @@
14
14
  "rxjs": "^7.0.0",
15
15
  "@sneat/api": "^0.27.14",
16
16
  "@sneat/auth-core": "^0.27.14",
17
- "@sneat/auth-models": "^0.27.14",
17
+ "@sneat/auth-models": "^0.27.19",
18
18
  "@sneat/auth-ui": "^0.27.14",
19
19
  "@sneat/components": "^0.27.14",
20
20
  "@sneat/core": "^0.27.14",
21
21
  "@sneat/dto": "^0.27.14",
22
22
  "@sneat/extension-assetus-contract": "^0.2.2",
23
- "@sneat/extension-contactus-contract": "^0.12.5",
23
+ "@sneat/extension-contactus-contract": "^0.12.10",
24
24
  "@sneat/extension-contactus-ui": "^0.14.0",
25
25
  "@sneat/random": ">=0.0.4 <0.1.0",
26
26
  "@sneat/space-components": "^0.27.14",
@@ -82,12 +82,15 @@ declare class ContactusSpaceContextService {
82
82
  private readonly contactusSpaceContext;
83
83
  readonly contactusSpaceContext$: Observable<IContactusSpaceDboAndID | undefined>;
84
84
  private spaceID?;
85
- private isRootSpaceLoaded;
85
+ private spaceDbo?;
86
+ private currentUserID?;
87
+ private currentSubscribedSpaceID?;
86
88
  private spaceModuleRecordSub?;
87
89
  private readonly errorLogger;
88
90
  private readonly userService;
89
91
  private readonly contactusSpaceService;
90
92
  constructor(destroyed$: Observable<void>, spaceID$: Observable<string | undefined>, spaceDbo$: Observable<ISpaceDbo | undefined | null>);
93
+ private checkAndSubscribe;
91
94
  private readonly subscribeForContactusSpaceChanges;
92
95
  private readonly onContactusSpaceChanged;
93
96
  }