@sneat/extension-contactus 0.13.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/README.md +37 -0
- package/fesm2022/sneat-extension-contactus-contact-base-page-D6vHs5em.mjs +63 -0
- package/fesm2022/sneat-extension-contactus-contact-base-page-D6vHs5em.mjs.map +1 -0
- package/fesm2022/sneat-extension-contactus-contacts-page.component-BzTRhfPJ.mjs +118 -0
- package/fesm2022/sneat-extension-contactus-contacts-page.component-BzTRhfPJ.mjs.map +1 -0
- package/fesm2022/sneat-extension-contactus-index-DVC9hDgV.mjs +352 -0
- package/fesm2022/sneat-extension-contactus-index-DVC9hDgV.mjs.map +1 -0
- package/fesm2022/sneat-extension-contactus-index-weKgp-3B.mjs +272 -0
- package/fesm2022/sneat-extension-contactus-index-weKgp-3B.mjs.map +1 -0
- package/fesm2022/sneat-extension-contactus-members-page.component-DPXZ6eSl.mjs +188 -0
- package/fesm2022/sneat-extension-contactus-members-page.component-DPXZ6eSl.mjs.map +1 -0
- package/fesm2022/sneat-extension-contactus-sneat-extension-contactus-BkVEPHoJ.mjs +560 -0
- package/fesm2022/sneat-extension-contactus-sneat-extension-contactus-BkVEPHoJ.mjs.map +1 -0
- package/fesm2022/sneat-extension-contactus-space-member-page.component-BgZCwQmN.mjs +124 -0
- package/fesm2022/sneat-extension-contactus-space-member-page.component-BgZCwQmN.mjs.map +1 -0
- package/fesm2022/sneat-extension-contactus.mjs +2 -0
- package/fesm2022/sneat-extension-contactus.mjs.map +1 -0
- package/package.json +48 -0
- package/types/sneat-extension-contactus.d.ts +15 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sneat-extension-contactus-sneat-extension-contactus-BkVEPHoJ.mjs","sources":["../../../../../../libs/extensions/contactus/runtime/src/lib/services/contact-group-service.ts","../../../../../../libs/extensions/contactus/runtime/src/lib/services/contact-nav-service.ts","../../../../../../libs/extensions/contactus/runtime/src/lib/services/contactus-space.service.ts","../../../../../../libs/extensions/contactus/runtime/src/lib/services/contact-service.ts","../../../../../../libs/extensions/contactus/runtime/src/lib/services/contactus-space-context.service.ts","../../../../../../libs/extensions/contactus/runtime/src/lib/services/contact-role.service.ts","../../../../../../libs/extensions/contactus/runtime/src/lib/services/member.service.ts","../../../../../../libs/extensions/contactus/runtime/src/lib/services/contactus-services.module.ts","../../../../../../libs/extensions/contactus/runtime/src/lib/services/member-group.service.ts","../../../../../../libs/extensions/contactus/runtime/src/lib/services/invite.service.ts","../../../../../../libs/extensions/contactus/runtime/src/lib/services/contactus-nav.service.ts","../../../../../../libs/extensions/contactus/runtime/src/lib/provide-contactus.ts","../../../../../../libs/extensions/contactus/runtime/src/lib/members/members-routing.ts","../../../../../../libs/extensions/contactus/runtime/src/lib/contactus-routing.module.ts","../../../../../../libs/extensions/contactus/runtime/src/sneat-extension-contactus.ts"],"sourcesContent":["import { Injectable, Injector, inject } from '@angular/core';\nimport { Firestore as AngularFirestore } from '@angular/fire/firestore';\nimport { SneatApiService } from '@sneat/api';\nimport { IIdAndDbo, ISpaceRef } from '@sneat/core';\nimport {\n defaultFamilyContactGroupDTOs,\n defaultFamilyContactGroups,\n IContactGroupBrief,\n IContactGroupDbo,\n} from '@sneat/extension-contactus-contract';\nimport { ModuleSpaceItemService } from '@sneat/space-services';\nimport { Observable, of } from 'rxjs';\n\n\n@Injectable()\nexport class ContactGroupService {\n private readonly spaceItemService: ModuleSpaceItemService<\n IContactGroupBrief,\n IContactGroupDbo\n >;\n\n constructor() {\n const afs = inject(AngularFirestore);\n const sneatApiService = inject(SneatApiService);\n const injector = inject(Injector);\n\n this.spaceItemService = new ModuleSpaceItemService(\n injector,\n 'contactus',\n 'contact_groups',\n afs,\n sneatApiService,\n );\n }\n\n getContactGroups(): Observable<readonly IIdAndDbo<IContactGroupDbo>[]> {\n return of(defaultFamilyContactGroupDTOs);\n }\n\n getContactGroupByID(\n id: string,\n space: ISpaceRef,\n ): Observable<IIdAndDbo<IContactGroupDbo>> {\n const cg = defaultFamilyContactGroups.find((cg) => cg.id === id);\n if (!cg) {\n return of({ id, space, dbo: { title: id } });\n }\n return of(cg);\n }\n\n watchMemberGroupsBySpace(\n space: ISpaceRef,\n status: 'active' | 'archived' = 'active',\n ): Observable<IIdAndDbo<IContactGroupDbo>[]> {\n // console.log('watchMemberGroupsByTeamID()', spaceID);\n return this.spaceItemService.watchModuleSpaceItemsWithSpaceRef(space, {\n filter: [{ field: 'status', operator: '==', value: status }],\n });\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { excludeUndefined } from '@sneat/core';\nimport { ContactRole } from '@sneat/extension-contactus-contract';\nimport { ErrorLogger, IErrorLogger } from '@sneat/core';\nimport { ISpaceContext } from '@sneat/space-models';\nimport { SpaceNavService } from '@sneat/space-services';\n\nexport interface INewContactPageParams {\n group?: string;\n role?: ContactRole;\n asset?: string;\n document?: string;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class ContactNavService {\n private readonly errorLogger = inject<IErrorLogger>(ErrorLogger);\n private readonly spaceNavService = inject(SpaceNavService);\n\n goNewContactPage(space: ISpaceContext, params?: INewContactPageParams): void {\n this.spaceNavService\n .navigateForwardToSpacePage(space, 'new-contact', {\n queryParams: excludeUndefined(params),\n })\n .catch(\n this.errorLogger.logErrorHandler(\n 'failed to navigate to \"new-contact\" page',\n ),\n );\n }\n}\n","import { Injectable, Injector, inject } from '@angular/core';\nimport { Firestore as AngularFirestore } from '@angular/fire/firestore';\nimport { IContactBrief, IContactusSpaceDbo } from '@sneat/extension-contactus-contract';\nimport { SpaceModuleService } from '@sneat/space-services';\n\n@Injectable()\nexport class ContactusSpaceService extends SpaceModuleService<IContactusSpaceDbo> {\n public constructor() {\n const afs = inject(AngularFirestore);\n const injector = inject(Injector);\n super(injector, 'contactus', afs);\n }\n\n public readonly watchContactBriefs = (spaceID: string) => {\n // console.log(`ContactusSpaceService.watchContactBriefs(${spaceID})`);\n return this.watchBriefs<IContactBrief>(\n spaceID,\n (dto) => dto?.contacts || {},\n );\n };\n}\n","import { Injectable, Injector, inject } from '@angular/core';\nimport { Firestore as AngularFirestore } from '@angular/fire/firestore';\nimport { IFilter, SneatApiService } from '@sneat/api';\nimport { SneatUserService } from '@sneat/auth-core';\nimport { IIdAndBriefAndOptionalDbo, ISpaceRef } from '@sneat/core';\nimport {\n IContactBrief,\n IContactDbo,\n IContactContext,\n ICreateContactRequest,\n IContactWithDboAndSpace,\n IChangeMemberRoleRequest,\n IContactsFilter,\n IAddContactCommChannelRequest,\n IContactCommChannelRequest,\n IContactRequest,\n IContactRequestWithOptionalMessage,\n ISetContactsStatusRequest,\n IUpdateContactCommChannelRequest,\n IUpdateContactRequest,\n validateContactRequest,\n validateUpdateContactRequest,\n} from '@sneat/extension-contactus-contract';\nimport {\n ISpaceContext,\n ISpaceItemWithOptionalBriefAndOptionalDbo,\n} from '@sneat/space-models';\nimport { ModuleSpaceItemService } from '@sneat/space-services';\nimport { ContactusSpaceService } from './contactus-space.service';\nimport { map, Observable, tap, throwError } from 'rxjs';\n\n@Injectable()\nexport class ContactService extends ModuleSpaceItemService<\n IContactBrief,\n IContactDbo\n> {\n protected contactusSpaceService = inject(ContactusSpaceService);\n private readonly userService = inject(SneatUserService);\n\n constructor() {\n const afs = inject(AngularFirestore);\n const sneatApiService = inject(SneatApiService);\n const injector = inject(Injector);\n super(injector, 'contactus', 'contacts', afs, sneatApiService);\n // this.briefService = new TeamItemService<{id: string}, IContactsBrief>('briefs', afs, sneatApiService);\n }\n\n public createContact(\n spaceRef: ISpaceRef,\n request: ICreateContactRequest,\n endpoint = 'contactus/create_contact',\n ): Observable<IContactWithDboAndSpace> {\n return this.createSpaceItem(endpoint, spaceRef, request);\n }\n\n public deleteContact(request: IContactRequest): Observable<void> {\n validateContactRequest(request);\n return this.deleteSpaceItem('contactus/delete_contact', request);\n }\n\n public updateContact(request: IUpdateContactRequest): Observable<void> {\n validateUpdateContactRequest(request);\n return this.sneatApiService.post('contactus/update_contact', request);\n }\n\n public addContactCommChannel(\n request: IAddContactCommChannelRequest,\n ): Observable<void> {\n return this.sneatApiService.post(\n 'contactus/add_contact_comm_channel',\n request,\n );\n }\n\n public updateContactCommChannel(\n request: IUpdateContactCommChannelRequest,\n ): Observable<void> {\n return this.sneatApiService.post(\n 'contactus/update_contact_comm_channel',\n request,\n );\n }\n\n public deleteContactCommChannel(\n request: IContactCommChannelRequest,\n ): Observable<void> {\n return this.sneatApiService.post(\n 'contactus/delete_contact_comm_channel',\n request,\n );\n }\n\n public setContactsStatus(\n request: ISetContactsStatusRequest,\n ): Observable<void> {\n if (!request.contactIDs?.length) {\n return throwError(() => 'at least 1 contact is required');\n }\n return this.sneatApiService.post('contactus/set_contacts_status', request);\n }\n\n watchContactsWithRole(\n space: ISpaceContext,\n role: string,\n status: 'active' | 'archived' = 'active',\n filter?: readonly IFilter[],\n ): Observable<IIdAndBriefAndOptionalDbo<IContactBrief, IContactDbo>[]> {\n filter = [\n ...(filter || []),\n { field: 'roles', operator: '==', value: role },\n ];\n return this.watchSpaceContacts(space, status, filter);\n }\n\n public watchSpaceContacts(\n space: ISpaceContext,\n status: 'active' | 'archived' = 'active',\n filter?: readonly IFilter[],\n ): Observable<IIdAndBriefAndOptionalDbo<IContactBrief, IContactDbo>[]> {\n filter = [\n {\n field: 'status',\n value: status,\n operator: '==',\n },\n {\n field: 'parentContactID',\n operator: '==',\n value: '',\n },\n ...(filter || []),\n ];\n return this.watchModuleSpaceItemsWithSpaceRef<IContactDbo>(space, {\n filter,\n });\n }\n\n watchContactById(\n space: ISpaceContext,\n contactID: string,\n ): Observable<\n ISpaceItemWithOptionalBriefAndOptionalDbo<IContactBrief, IContactDbo>\n > {\n return this.watchSpaceItemByIdWithSpaceRef(space, contactID).pipe(\n tap((contact) => console.log('contact loaded:', contactID, contact)),\n );\n }\n\n watchContactsByRole(\n space: ISpaceContext,\n filter?: IContactsFilter,\n ): Observable<IContactContext[]> {\n const f: IFilter[] = [\n // { field: 'spaceID', value: team.id, operator: '==' },\n ];\n if (filter?.status) {\n f.push({ field: 'status', value: filter.status, operator: '==' });\n }\n if (filter?.role) {\n f.push({\n field: 'roles',\n operator: 'array-contains',\n value: filter.role,\n });\n }\n return this.watchModuleSpaceItemsWithSpaceRef(space, { filter: f });\n }\n\n watchChildContacts(\n space: ISpaceContext,\n id: string,\n filter: IContactsFilter = { status: 'active' },\n ): Observable<IContactContext[]> {\n const f: IFilter[] = [\n { field: 'parentContactID', value: id, operator: '==' },\n ];\n if (filter.status) {\n f.push({ field: 'status', value: filter.status, operator: '==' });\n }\n if (filter.role) {\n f.push({\n field: 'roles',\n operator: 'array-contains',\n value: filter.role,\n });\n }\n return this.watchModuleSpaceItemsWithSpaceRef(space, { filter: f });\n }\n\n public changeContactRole(\n request: IChangeMemberRoleRequest,\n ): Observable<void> {\n return this.sneatApiService\n .post(`contactus/change_member_role`, request)\n .pipe(\n map(() => {\n return;\n }),\n );\n }\n\n public removeSpaceMember(\n request: IContactRequestWithOptionalMessage,\n ): Observable<ISpaceContext> {\n console.log(\n `removeTeamMember(spaceID=${request.spaceID}, contactID=${request.contactID})`,\n );\n try {\n validateContactRequest(request);\n } catch (ex) {\n return throwError(() => ex);\n }\n\n // const request: IContactRequest = { spaceID, contactID };\n return this.sneatApiService.post('contactus/remove_team_member', request);\n }\n}\n","import { inject } from '@angular/core';\nimport { SneatUserService } from '@sneat/auth-core';\nimport { IContactusSpaceDboAndID } from '@sneat/extension-contactus-contract';\nimport { ContactusSpaceService } from './contactus-space.service';\nimport { ErrorLogger } from '@sneat/core';\nimport { Observable, Subject, Subscription, takeUntil } from 'rxjs';\n\n// TODO: ContactusSpaceContextService can be abstracted and reused by other entities\nexport class ContactusSpaceContextService {\n // Is used to emit contactus space record changes\n private readonly contactusSpaceContext = new Subject<\n IContactusSpaceDboAndID | undefined\n >();\n\n public readonly contactusSpaceContext$ =\n this.contactusSpaceContext.asObservable();\n\n private spaceID?: string;\n private spaceModuleRecordSub?: Subscription;\n\n private readonly errorLogger = inject(ErrorLogger);\n private readonly userService = inject(SneatUserService);\n private readonly contactusSpaceService = inject(ContactusSpaceService);\n\n constructor(\n private readonly destroyed$: Observable<void>,\n private readonly spaceID$: Observable<string | undefined>,\n ) {\n destroyed$.subscribe({\n next: () => {\n this.contactusSpaceContext.complete();\n },\n });\n spaceID$.pipe(takeUntil(destroyed$)).subscribe({\n next: (spaceID) => {\n this.spaceID = spaceID;\n if (this.userService.currentUserID) {\n this.subscribeForContactusSpaceChanges(spaceID);\n }\n },\n });\n this.userService.userChanged.pipe(takeUntil(destroyed$)).subscribe({\n next: (uid) => {\n if (uid) {\n this.subscribeForContactusSpaceChanges(this.spaceID);\n } else {\n this.spaceModuleRecordSub?.unsubscribe();\n this.contactusSpaceContext.next(undefined);\n }\n },\n });\n }\n\n private readonly subscribeForContactusSpaceChanges = (\n spaceID?: string,\n ): void => {\n this.spaceModuleRecordSub?.unsubscribe();\n if (!spaceID) {\n return;\n }\n this.spaceModuleRecordSub = this.contactusSpaceService\n .watchSpaceModuleRecord(spaceID)\n .pipe(takeUntil(this.spaceID$), takeUntil(this.destroyed$))\n .subscribe({\n next: this.onContactusSpaceChanged,\n error: this.errorLogger.logErrorHandler(\n 'ContactusSpaceContextService: failed to get contactus space record',\n ),\n });\n };\n\n private readonly onContactusSpaceChanged = (\n contactusSpace: IContactusSpaceDboAndID,\n ): void => {\n console.log(\n 'ContactusSpaceContextService.onContactusSpaceChanged()',\n contactusSpace,\n );\n this.contactusSpaceContext.next(contactusSpace);\n };\n}\n","import { Injectable } from '@angular/core';\nimport { IIdAndBrief } from '@sneat/core';\nimport {\n defaultFamilyContactGroups,\n IContactRoleBrief,\n} from '@sneat/extension-contactus-contract';\nimport { Observable, of } from 'rxjs';\n\n@Injectable()\nexport class ContactRoleService {\n getContactRoleByID(id: string): Observable<IIdAndBrief<IContactRoleBrief>> {\n for (const cg of defaultFamilyContactGroups) {\n for (let j = 0; j < (cg?.dbo?.roles?.length || 0); j++) {\n const role = cg.dbo?.roles && cg.dbo.roles[j];\n if (role?.id === id) {\n return of({ id, brief: role.brief });\n }\n }\n }\n return of({ id, brief: { title: id } });\n }\n}\n","import { Injectable } from '@angular/core';\nimport { trimNames } from '@sneat/auth-models';\nimport {\n IMemberBrief,\n IAcceptPersonalInviteRequest,\n IAddSpaceMemberResponse,\n ICreateSpaceMemberRequest,\n validateCreateSpaceMemberRequest,\n} from '@sneat/extension-contactus-contract';\nimport { ContactService } from './contact-service';\nimport { Observable } from 'rxjs';\n\n@Injectable()\nexport class MemberService extends ContactService {\n public acceptPersonalInvite(\n request: IAcceptPersonalInviteRequest,\n firebaseToken: string,\n ): Observable<IMemberBrief> {\n // console.log('MemberService.acceptPersonalInvite()');\n if (firebaseToken) {\n this.sneatApiService.setApiAuthToken(firebaseToken);\n }\n return this.sneatApiService.post('invites/accept_personal_invite', request);\n }\n\n public createMember(\n request: ICreateSpaceMemberRequest,\n ): Observable<IAddSpaceMemberResponse> {\n // console.log(`MemberService.addMember()`, request);\n if (request.names) {\n request = { ...request, names: trimNames(request.names) };\n }\n validateCreateSpaceMemberRequest(request);\n return this.sneatApiService.post<IAddSpaceMemberResponse>(\n 'contactus/create_member',\n request,\n );\n }\n}\n","import { NgModule } from '@angular/core';\nimport { ContactGroupService } from './contact-group-service';\nimport { ContactNavService } from './contact-nav-service';\nimport { ContactRoleService } from './contact-role.service';\nimport { ContactService } from './contact-service';\nimport { ContactusSpaceService } from './contactus-space.service';\nimport { MemberService } from './member.service';\n\n@NgModule({\n imports: [],\n providers: [\n ContactService,\n ContactNavService,\n ContactGroupService,\n ContactRoleService,\n ContactusSpaceService,\n MemberService,\n ],\n})\nexport class ContactusServicesModule {}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class MemberGroupService {\n // TODO: Move to ContactGroupService or delete\n}\n","import { Injectable, inject } from '@angular/core';\nimport { Auth, createUserWithEmailAndPassword } from '@angular/fire/auth';\nimport { SneatApiService } from '@sneat/api';\nimport { SneatAuthStateService } from '@sneat/auth-core';\nimport {\n IAcceptPersonalInviteRequest,\n ICreatePersonalInviteRequest,\n ICreatePersonalInviteResponse,\n IJoinSpaceInfoResponse,\n} from '@sneat/extension-contactus-contract';\nimport { excludeEmpty } from '@sneat/core';\nimport { ErrorLogger, IErrorLogger } from '@sneat/core';\nimport { RandomIdService } from '@sneat/random';\nimport {\n IAcceptInviteResponse,\n IRejectPersonalInviteRequest,\n} from '@sneat/space-models';\nimport { from, Observable, switchMap, throwError } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\n@Injectable()\nexport class InviteService {\n private readonly errorLogger = inject<IErrorLogger>(ErrorLogger);\n private readonly sneatAuthService = inject(SneatAuthStateService);\n private readonly sneatApiService = inject(SneatApiService);\n private readonly afAuth = inject(Auth);\n private readonly randomService = inject(RandomIdService);\n\n public createInviteForMember(\n request: ICreatePersonalInviteRequest,\n ): Observable<ICreatePersonalInviteResponse> {\n return this.sneatApiService.post<ICreatePersonalInviteResponse>(\n 'invites/create_invite_for_member',\n excludeEmpty(request),\n );\n }\n\n public getInviteLinkForMember(\n request: ICreatePersonalInviteRequest,\n ): Observable<ICreatePersonalInviteResponse> {\n // TODO: Should we pass `request.message`? If not should be excluded from request\n return this.sneatApiService.get<ICreatePersonalInviteResponse>(\n `invites/invite_link_for_member?space=${request.spaceID}&member=${request.to.memberID}`,\n );\n }\n\n public getSpaceJoinInfo(\n inviteID: string,\n pin: string,\n ): Observable<IJoinSpaceInfoResponse> {\n return this.sneatApiService\n .postAsAnonymous<IJoinSpaceInfoResponse>('space/join_info', {\n inviteID,\n pin,\n })\n .pipe(\n map((response) => ({\n ...response,\n invite: {\n ...response.invite,\n id: inviteID,\n pin,\n },\n })),\n );\n }\n\n public rejectPersonalInvite(\n request: IRejectPersonalInviteRequest,\n ): Observable<void> {\n return this.sneatApiService.post('invites/reject_personal_invite', request);\n }\n\n public acceptInviteByAuthenticatedUser(\n inviteInfo: IJoinSpaceInfoResponse,\n ): Observable<IAcceptInviteResponse> {\n const request: IAcceptPersonalInviteRequest = {\n spaceID: inviteInfo.space.id,\n inviteID: inviteInfo.invite.id,\n pin: inviteInfo.invite.pin,\n member: inviteInfo.member,\n // email: this.email,\n // fullName: this.fullName,\n };\n return this.sneatApiService.post('invites/accept_personal_invite', request);\n }\n\n public acceptInviteByUnauthenticatedUser(\n inviteInfo: IJoinSpaceInfoResponse,\n ): Observable<IAcceptInviteResponse> {\n if (\n inviteInfo.invite.to.channel === 'email' &&\n inviteInfo.invite.to.address\n ) {\n return this.acceptEmailInviteByUnauthenticatedUser(inviteInfo);\n }\n return throwError(\n () => 'Only join from an email invites is implemented yet',\n );\n }\n\n private acceptEmailInviteByUnauthenticatedUser(\n inviteInfo: IJoinSpaceInfoResponse,\n ): Observable<IAcceptInviteResponse> {\n const email = inviteInfo.invite.to.address;\n if (!email) {\n return throwError(() => 'No value in inviteInfo.invite.to.address');\n }\n const password = this.randomService.newRandomId({ len: 12 });\n const credentialPromise = createUserWithEmailAndPassword(\n this.afAuth,\n email,\n password,\n );\n const credentialObserver = from(credentialPromise);\n return credentialObserver.pipe(\n switchMap((userCredential) => {\n if (!userCredential.user) {\n throw new Error('!userCredential.user');\n }\n // We call it to be 100% sure user fully authenticated\n return from(userCredential.user.getIdToken());\n }),\n switchMap((firebaseToken) => {\n this.sneatApiService.setApiAuthToken(firebaseToken);\n return this.acceptInviteByAuthenticatedUser(inviteInfo);\n }),\n );\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { IContactContext } from '@sneat/extension-contactus-contract';\nimport { ISpaceContext } from '@sneat/space-models';\nimport { SpaceNavService } from '@sneat/space-services';\n\n@Injectable()\nexport class ContactusNavService {\n private readonly spaceNavService = inject(SpaceNavService);\n\n public navigateToAddMember = (space: ISpaceContext): Promise<boolean> =>\n this.spaceNavService.navigateForwardToSpacePage(space, 'add-member');\n\n public navigateToMember(memberContext: IContactContext): void {\n console.log(\n `navigateToMember(team.id=${memberContext?.space?.id}, memberInfo.id=${memberContext?.id})`,\n );\n // const id = `${memberContext?.space?.id}:${memberContext?.id}`;\n // const { space } = memberContext;\n // if (!space) {\n // \tthis.errorLogger.logError(\n // \t\t'not able to navigate to member without team context',\n // \t);\n // \treturn;\n // }\n // this.spaceNavService.navigateForwardToSpacePage(\n // \tspace,\n // \t`member/${memberContext.id}`,\n // \t{\n // \t\tstate: {\n // \t\t\tcontact: memberContext,\n // \t\t},\n // \t},\n // );\n }\n}\n","import { Provider } from '@angular/core';\nimport {\n CONTACT_GROUP_SERVICE,\n CONTACT_NAV_SERVICE,\n CONTACT_ROLE_SERVICE,\n CONTACT_SERVICE,\n CONTACTUS_NAV_SERVICE,\n CONTACTUS_SPACE_SERVICE,\n INVITE_SERVICE,\n} from '@sneat/extension-contactus-contract';\nimport {\n ContactGroupService,\n ContactNavService,\n ContactRoleService,\n ContactService,\n ContactusNavService,\n ContactusSpaceService,\n InviteService,\n MemberGroupService,\n MemberService,\n} from './services';\n\n/**\n * Provides the concrete contactus services and binds them to the\n * contract injection tokens. Consumed at app bootstrap; other\n * extensions must NOT import this.\n */\nexport function provideContactus(): Provider[] {\n // NOTE: ContactusSpaceContextService is intentionally NOT provided here — it\n // is manually instantiated (its constructor takes plain Observables: the\n // destroyed$ and spaceID$ streams), so it has no Angular DI factory and\n // registering it as a provider throws NG0204. Consumers `new` it directly.\n return [\n ContactService,\n ContactNavService,\n ContactGroupService,\n ContactRoleService,\n ContactusSpaceService,\n ContactusNavService,\n MemberService,\n MemberGroupService,\n InviteService,\n { provide: CONTACT_SERVICE, useExisting: ContactService },\n { provide: CONTACTUS_SPACE_SERVICE, useExisting: ContactusSpaceService },\n { provide: CONTACT_NAV_SERVICE, useExisting: ContactNavService },\n { provide: CONTACTUS_NAV_SERVICE, useExisting: ContactusNavService },\n { provide: CONTACT_GROUP_SERVICE, useExisting: ContactGroupService },\n { provide: CONTACT_ROLE_SERVICE, useExisting: ContactRoleService },\n { provide: INVITE_SERVICE, useExisting: InviteService },\n ];\n}\n","import { Route } from '@angular/router';\n\nexport const membersRoutes: Route[] = [\n {\n path: 'members',\n data: { title: 'Members' },\n loadComponent: () =>\n import('./pages/members/members-page.component').then(\n (m) => m.MembersPageComponent,\n ),\n // ...guardRoute,\n },\n {\n path: 'new-member',\n data: { title: 'New member' },\n loadComponent: () =>\n import('./pages/new-member').then((m) => m.NewMemberPageComponent),\n // ...guardRoute,\n },\n {\n path: 'member/:contactID',\n data: { title: 'Member' },\n loadComponent: () =>\n import('./pages/member/space-member-page.component').then(\n (m) => m.SpaceMemberPageComponent,\n ),\n },\n\n // {\n // \tpath: 'pupils',\n // \tloadChildren: () => import('./pupils/pupils.module')\n // \t\t.then(m => m.PupilsPageModule),\n // \t// ...guardRoute,\n // },\n // {\n // \tpath: 'staff',\n // \tloadChildren: () => import('./staff/staff.module')\n // \t\t.then(m => m.StaffPageModule),\n // \t// ...guardRoute,\n // },\n];\n","import { Route } from '@angular/router';\nimport { membersRoutes } from './members';\n\n// import {guardRoute} from '../../utils/guard-route';\n\nexport const contactusRoutes: Route[] = [\n {\n path: 'contacts',\n data: { title: 'Contacts' },\n loadComponent: () =>\n import('./pages/contacts/contacts-page.component').then(\n (m) => m.ContactsPageComponent,\n ),\n // ...guardRoute,\n },\n {\n path: 'new-contact',\n data: { title: 'New Contact' },\n loadComponent: () =>\n import('./pages').then((m) => m.NewContactPageComponent),\n // ...guardRoute,\n },\n {\n path: 'contact/:contactID',\n data: { title: 'Contact' },\n loadComponent: () => import('./pages').then((m) => m.ContactPageComponent),\n // ...guardRoute,\n },\n {\n path: 'contact/:contactID/new-location',\n data: { title: 'New location' },\n loadComponent: () =>\n import('./pages').then((m) => m.NewLocationPageComponent),\n // ...guardRoute,\n },\n ...membersRoutes,\n // {\n // \tpath: 'applicants',\n // \tloadChildren: () => import('./pages/contacts/contacts-page.module')\n // \t\t.then(m => m.ContactsPageModule),\n // \t// ...guardRoute,\n // },\n // {\n // \tpath: 'tenants',\n // \tloadChildren: () => import('./pages/contacts/contacts-page.module')\n // \t\t.then(m => m.ContactsPageModule),\n // \t// ...guardRoute,\n // },\n // {\n // \tpath: 'landlords',\n // \tloadChildren: () => import('./pages/contacts/contacts-page.module')\n // \t\t.then(m => m.ContactsPageModule),\n // \t// ...guardRoute,\n // },\n];\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["AngularFirestore","map"],"mappings":"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"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { inject, Component } from '@angular/core';
|
|
3
|
+
import { FormsModule } from '@angular/forms';
|
|
4
|
+
import { IonHeader, IonToolbar, IonButtons, IonBackButton, IonTitle, IonIcon, IonMenuButton, IonContent, IonButton } from '@ionic/angular/standalone';
|
|
5
|
+
import { ContactDetailsComponent, PersonTitle } from '@sneat/extension-contactus-ui';
|
|
6
|
+
import { C as ContactService, a as ContactusServicesModule } from './sneat-extension-contactus-sneat-extension-contactus-BkVEPHoJ.mjs';
|
|
7
|
+
import { SpaceServiceModule } from '@sneat/space-services';
|
|
8
|
+
import { ClassName } from '@sneat/ui';
|
|
9
|
+
import { C as ContactBasePage } from './sneat-extension-contactus-contact-base-page-D6vHs5em.mjs';
|
|
10
|
+
|
|
11
|
+
class MemberBasePage extends ContactBasePage {
|
|
12
|
+
segment = 'summary';
|
|
13
|
+
// override defaultBackUrl = CommuneTopPage.members;
|
|
14
|
+
// public isDeleted?: boolean;
|
|
15
|
+
// protected currentUserDto: IUserDto | undefined;
|
|
16
|
+
memberContext;
|
|
17
|
+
constructor(contactService) {
|
|
18
|
+
super(contactService, 'members');
|
|
19
|
+
}
|
|
20
|
+
get member() {
|
|
21
|
+
return this.memberContext;
|
|
22
|
+
}
|
|
23
|
+
goNew = (
|
|
24
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
25
|
+
_event,
|
|
26
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
27
|
+
_type,
|
|
28
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
29
|
+
_relation) => {
|
|
30
|
+
// this.navigateForward(
|
|
31
|
+
// type,
|
|
32
|
+
// { member: this.memberContext, relation },
|
|
33
|
+
// { memberDto: this.memberDto });
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
class SpaceMemberPageComponent extends MemberBasePage {
|
|
38
|
+
relatedAs;
|
|
39
|
+
constructor() {
|
|
40
|
+
super(inject(ContactService));
|
|
41
|
+
}
|
|
42
|
+
// protected setMemberId(memberId: string): void {
|
|
43
|
+
// super.setMemberId(memberId);
|
|
44
|
+
// if (this.currentUserDto && this.communeRealId) {
|
|
45
|
+
// this.setRelatedAs();
|
|
46
|
+
// }
|
|
47
|
+
// }
|
|
48
|
+
// protected setPageCommuneIds(source: string, communeIds: ICommuneIds, communeDto?: ICommuneDto): void {
|
|
49
|
+
// super.setPageCommuneIds(source, communeIds, communeDto);
|
|
50
|
+
// if (this.currentUserDto && this.memberId) {
|
|
51
|
+
// this.setRelatedAs();
|
|
52
|
+
// }
|
|
53
|
+
// }
|
|
54
|
+
// protected setCurrentUser(dto: IUserDto): void {
|
|
55
|
+
// super.setCurrentUser(dto);
|
|
56
|
+
// this.logger.debug('CommuneMemberPage.setCurrentUser()', dto);
|
|
57
|
+
// if (this.memberId && this.communeRealId) {
|
|
58
|
+
// this.setRelatedAs();
|
|
59
|
+
// }
|
|
60
|
+
// }
|
|
61
|
+
removeMember() {
|
|
62
|
+
if (!confirm(`Are you sure you want to remove ${this.member?.brief?.title || this.member?.id} from ${this.space?.brief?.title}?`)) {
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
if (!this.space) {
|
|
66
|
+
this.errorLogger.logError('Can not remove team member without team context');
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
if (!this.member?.id) {
|
|
70
|
+
this.errorLogger.logError('Can not remove team member without knowing member ID');
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
this.contactService
|
|
74
|
+
.removeSpaceMember({ spaceID: this.space.id, contactID: this.member?.id })
|
|
75
|
+
.subscribe({
|
|
76
|
+
next: () => {
|
|
77
|
+
this.navController
|
|
78
|
+
.pop()
|
|
79
|
+
.catch((err) => this.errorLogger.logError(err, 'Failed to pop navigator state'));
|
|
80
|
+
},
|
|
81
|
+
error: (err) => this.errorLogger.logError(err, 'Failed to remove member'),
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
setRelatedAs() {
|
|
85
|
+
// this.logger.debug('CommuneMemberPage.setRelatedAs()', this.currentUserDto);
|
|
86
|
+
// if (!this.currentUserDto) {
|
|
87
|
+
// return;
|
|
88
|
+
// }
|
|
89
|
+
// const userCommunes = this.currentUserDto && this.currentUserDto.communes;
|
|
90
|
+
// if (userCommunes) {
|
|
91
|
+
// const userCommuneInfo = userCommunes.find(c => eq(c.id, this.communeRealId));
|
|
92
|
+
// if (userCommuneInfo && userCommuneInfo.members) {
|
|
93
|
+
// const memberInfo = userCommuneInfo.members[this.memberId];
|
|
94
|
+
// if (memberInfo) {
|
|
95
|
+
// this.relatedAs = memberInfo.relatedAs;
|
|
96
|
+
// }
|
|
97
|
+
// }
|
|
98
|
+
// }
|
|
99
|
+
}
|
|
100
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: SpaceMemberPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
101
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: SpaceMemberPageComponent, isStandalone: true, selector: "sneat-space-member-page", providers: [{ provide: ClassName, useValue: 'SpaceMemberPageComponent' }], usesInheritance: true, ngImport: i0, template: "<ion-header>\n <ion-toolbar color=\"light\">\n <ion-buttons slot=\"start\">\n <ion-back-button [defaultHref]=\"spacePageUrl('members')\" />\n </ion-buttons>\n <ion-title>\n @switch (space.type) {\n @case (\"family\") {\n @if ($contact(); as contact) {\n Family member: {{ contact | personTitle }}\n } @else {\n Family member\n }\n }\n @case (\"cohabit\") {\n Housemates\n }\n @default {\n <ion-title>Member</ion-title>\n }\n }\n </ion-title>\n <!--<ion-title *ngIf=\"member else titleNoMember\">{{member.title}}</ion-title>-->\n <!--<ng-template #titleNoMember>-->\n <!--<ion-title>Member</ion-title>-->\n <!--</ng-template>-->\n <ion-buttons slot=\"end\">\n @if (member) {\n <ion-button\n [title]=\"\n member.brief?.userID === spaceParams.userService.currentUserID\n ? 'Leave team'\n : 'Remove team member'\n \"\n (click)=\"removeMember()\"\n >\n <ion-icon name=\"trash\" />\n </ion-button>\n }\n <ion-menu-button menu=\"mainMenu\" />\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n\n<ion-content class=\"cardy\">\n <sneat-contact-details [$contact]=\"$contact()\" [$space]=\"$space()\" />\n</ion-content>\n", dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "component", type: ContactDetailsComponent, selector: "sneat-contact-details", inputs: ["$contact"], outputs: ["contactChange"] }, { kind: "ngmodule", type: ContactusServicesModule }, { kind: "ngmodule", type: SpaceServiceModule }, { kind: "component", type: IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: IonBackButton, selector: "ion-back-button" }, { kind: "component", type: IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonMenuButton, selector: "ion-menu-button", inputs: ["autoHide", "color", "disabled", "menu", "mode", "type"] }, { kind: "component", type: IonContent, selector: "ion-content", inputs: ["color", "fixedSlotPlacement", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "pipe", type: PersonTitle, name: "personTitle" }] });
|
|
102
|
+
}
|
|
103
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: SpaceMemberPageComponent, decorators: [{
|
|
104
|
+
type: Component,
|
|
105
|
+
args: [{ selector: 'sneat-space-member-page', imports: [
|
|
106
|
+
FormsModule,
|
|
107
|
+
ContactDetailsComponent,
|
|
108
|
+
ContactusServicesModule,
|
|
109
|
+
PersonTitle,
|
|
110
|
+
SpaceServiceModule,
|
|
111
|
+
IonHeader,
|
|
112
|
+
IonToolbar,
|
|
113
|
+
IonButtons,
|
|
114
|
+
IonBackButton,
|
|
115
|
+
IonTitle,
|
|
116
|
+
IonIcon,
|
|
117
|
+
IonMenuButton,
|
|
118
|
+
IonContent,
|
|
119
|
+
IonButton,
|
|
120
|
+
], providers: [{ provide: ClassName, useValue: 'SpaceMemberPageComponent' }], template: "<ion-header>\n <ion-toolbar color=\"light\">\n <ion-buttons slot=\"start\">\n <ion-back-button [defaultHref]=\"spacePageUrl('members')\" />\n </ion-buttons>\n <ion-title>\n @switch (space.type) {\n @case (\"family\") {\n @if ($contact(); as contact) {\n Family member: {{ contact | personTitle }}\n } @else {\n Family member\n }\n }\n @case (\"cohabit\") {\n Housemates\n }\n @default {\n <ion-title>Member</ion-title>\n }\n }\n </ion-title>\n <!--<ion-title *ngIf=\"member else titleNoMember\">{{member.title}}</ion-title>-->\n <!--<ng-template #titleNoMember>-->\n <!--<ion-title>Member</ion-title>-->\n <!--</ng-template>-->\n <ion-buttons slot=\"end\">\n @if (member) {\n <ion-button\n [title]=\"\n member.brief?.userID === spaceParams.userService.currentUserID\n ? 'Leave team'\n : 'Remove team member'\n \"\n (click)=\"removeMember()\"\n >\n <ion-icon name=\"trash\" />\n </ion-button>\n }\n <ion-menu-button menu=\"mainMenu\" />\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n\n<ion-content class=\"cardy\">\n <sneat-contact-details [$contact]=\"$contact()\" [$space]=\"$space()\" />\n</ion-content>\n" }]
|
|
121
|
+
}], ctorParameters: () => [] });
|
|
122
|
+
|
|
123
|
+
export { SpaceMemberPageComponent };
|
|
124
|
+
//# sourceMappingURL=sneat-extension-contactus-space-member-page.component-BgZCwQmN.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sneat-extension-contactus-space-member-page.component-BgZCwQmN.mjs","sources":["../../../../../../libs/extensions/contactus/runtime/src/lib/members/pages/member-base-page.ts","../../../../../../libs/extensions/contactus/runtime/src/lib/members/pages/member/space-member-page.component.ts","../../../../../../libs/extensions/contactus/runtime/src/lib/members/pages/member/space-member-page.component.html"],"sourcesContent":["import { IContactContext } from '@sneat/extension-contactus-contract';\nimport { ContactService } from '../../services';\nimport { ContactBasePage } from '../../pages/contact-base-page';\n\nexport abstract class MemberBasePage extends ContactBasePage {\n public segment: 'friends' | 'other' | 'summary' = 'summary';\n\n // override defaultBackUrl = CommuneTopPage.members;\n // public isDeleted?: boolean;\n // protected currentUserDto: IUserDto | undefined;\n private memberContext?: IContactContext;\n\n protected constructor(contactService: ContactService) {\n super(contactService, 'members');\n }\n\n public get member(): IContactContext | undefined {\n return this.memberContext;\n }\n\n protected goNew = (\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _event: Event,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _type: 'new-contact' | 'new-document' | 'new-liability' | 'new-asset',\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _relation?: string,\n ): void => {\n // this.navigateForward(\n // \ttype,\n // \t{ member: this.memberContext, relation },\n // \t{ memberDto: this.memberDto });\n };\n\n // protected setCurrentUser(dto?: IUserDto): void {\n // \tthis.currentUserDto = dto;\n // }\n\n // protected setMemberId(memberId: string): void {\n // \tconsole.log(`CommuneMemberPage.setMemberId(${memberId})`);\n // \tif (this.memberId === memberId) {\n // \t\treturn;\n // \t}\n // \tthis.memberId = memberId;\n // \tif (this.memberInfo && this.memberInfo.id !== memberId) {\n // \t\tthis.memberInfo = undefined;\n // \t}\n // \tif (this.memberDto && this.memberDto.id !== memberId) {\n // \t\tthis.memberDto = undefined;\n // \t}\n // \tthis.subscriptions.push(\n // \t\tthis.membersService.watchById(this.memberId)\n // \t\t\t.subscribe({\n // \t\t\t\tnext: memberDto => {\n // \t\t\t\t\tconsole.log('Loaded memberDto:', memberDto);\n // \t\t\t\t\tthis.setMemberDto(memberDto);\n // \t\t\t\t\tif (!memberDto) {\n // \t\t\t\t\t\treturn;\n // \t\t\t\t\t}\n // \t\t\t\t\tif (!eq(memberDto.communeId, this.communeRealId)) {\n // \t\t\t\t\t\tthis.setPageCommuneIds('MemberPage.memberFromObservable', { real: memberDto.communeId });\n // \t\t\t\t\t}\n // \t\t\t\t},\n // \t\t\t\terror: err => {\n // \t\t\t\t\tthis.errorLogger.logError(err, 'Failed to get member by ID');\n // \t\t\t\t},\n // \t\t\t}));\n // }\n //\n // protected setMemberInfo(memberInfo: ICommuneMemberInfo): void {\n // \tthis.memberInfo = memberInfo;\n // \tif (memberInfo && memberInfo.id && memberInfo.id !== this.memberId) {\n // \t\tthis.setMemberId(memberInfo.id);\n // \t}\n // }\n //\n // protected onCommuneChanged(source?: string): void {\n // \tsuper.onCommuneChanged(source);\n // \tif (!this.commune) {\n // \t\tthrow new Error('!this.commune');\n // \t}\n // \tif (!this.memberId && this.commune.dto.members) {\n // \t\tconst memberInfo = this.commune.dto.members.find(m => !m.id);\n // \t\tif (memberInfo) {\n // \t\t\tthis.setMemberInfo(memberInfo);\n // \t\t}\n // \t}\n // }\n\n // protected setMemberDto(memberDto?: IMemberDto): void {\n // \tconsole.log('setMemberDto', memberDto);\n // \tif (memberDto || this.memberDto) {\n // \t\tthis.isDeleted = !!this.memberDto && !memberDto;\n // \t}\n // \tthis.memberDto = memberDto;\n // \tif (!memberDto) {\n // \t\treturn;\n // \t}\n // \tif (!this.memberInfo || !eq(this.memberInfo.id, memberDto.id)) {\n // \t\tthis.setMemberInfo(newCommuneMemberInfo(memberDto));\n // \t}\n // \tif (memberDto.communeId && !eq(memberDto.communeId, this.communeRealId)) {\n // \t\tthis.setPageCommuneIds('MemberPage.memberFromHistoryState', { real: memberDto.communeId });\n // \t}\n // }\n}\n","import { Component, inject } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport {\n IonBackButton,\n IonButton,\n IonButtons,\n IonContent,\n IonHeader,\n IonIcon,\n IonMenuButton,\n IonTitle,\n IonToolbar,\n} from '@ionic/angular/standalone';\nimport { PersonTitle } from '@sneat/extension-contactus-ui';\nimport {\n ContactService,\n ContactusServicesModule,\n} from '../../../services';\nimport { ContactDetailsComponent } from '@sneat/extension-contactus-ui';\nimport { MemberRelationship } from '@sneat/extension-contactus-contract';\nimport { SpaceServiceModule } from '@sneat/space-services';\nimport { ClassName } from '@sneat/ui';\nimport { MemberBasePage } from '../member-base-page';\n\n@Component({\n selector: 'sneat-space-member-page',\n templateUrl: './space-member-page.component.html',\n imports: [\n FormsModule,\n ContactDetailsComponent,\n ContactusServicesModule,\n PersonTitle,\n SpaceServiceModule,\n IonHeader,\n IonToolbar,\n IonButtons,\n IonBackButton,\n IonTitle,\n IonIcon,\n IonMenuButton,\n IonContent,\n IonButton,\n ],\n providers: [{ provide: ClassName, useValue: 'SpaceMemberPageComponent' }],\n})\nexport class SpaceMemberPageComponent extends MemberBasePage {\n public relatedAs?: MemberRelationship;\n\n public constructor() {\n super(inject(ContactService));\n }\n\n // protected setMemberId(memberId: string): void {\n // \tsuper.setMemberId(memberId);\n // \tif (this.currentUserDto && this.communeRealId) {\n // \t\tthis.setRelatedAs();\n // \t}\n // }\n\n // protected setPageCommuneIds(source: string, communeIds: ICommuneIds, communeDto?: ICommuneDto): void {\n // \tsuper.setPageCommuneIds(source, communeIds, communeDto);\n // \tif (this.currentUserDto && this.memberId) {\n // \t\tthis.setRelatedAs();\n // \t}\n // }\n\n // protected setCurrentUser(dto: IUserDto): void {\n // \tsuper.setCurrentUser(dto);\n // \tthis.logger.debug('CommuneMemberPage.setCurrentUser()', dto);\n // \tif (this.memberId && this.communeRealId) {\n // \t\tthis.setRelatedAs();\n // \t}\n // }\n\n public removeMember() {\n if (\n !confirm(\n `Are you sure you want to remove ${\n this.member?.brief?.title || this.member?.id\n } from ${this.space?.brief?.title}?`,\n )\n ) {\n return;\n }\n if (!this.space) {\n this.errorLogger.logError(\n 'Can not remove team member without team context',\n );\n return;\n }\n if (!this.member?.id) {\n this.errorLogger.logError(\n 'Can not remove team member without knowing member ID',\n );\n return;\n }\n this.contactService\n .removeSpaceMember({ spaceID: this.space.id, contactID: this.member?.id })\n .subscribe({\n next: () => {\n this.navController\n .pop()\n .catch((err) =>\n this.errorLogger.logError(err, 'Failed to pop navigator state'),\n );\n },\n error: (err) =>\n this.errorLogger.logError(err, 'Failed to remove member'),\n });\n }\n\n private setRelatedAs(): void {\n // this.logger.debug('CommuneMemberPage.setRelatedAs()', this.currentUserDto);\n // if (!this.currentUserDto) {\n // \treturn;\n // }\n // const userCommunes = this.currentUserDto && this.currentUserDto.communes;\n // if (userCommunes) {\n // \tconst userCommuneInfo = userCommunes.find(c => eq(c.id, this.communeRealId));\n // \tif (userCommuneInfo && userCommuneInfo.members) {\n // \t\tconst memberInfo = userCommuneInfo.members[this.memberId];\n // \t\tif (memberInfo) {\n // \t\t\tthis.relatedAs = memberInfo.relatedAs;\n // \t\t}\n // \t}\n // }\n }\n}\n","<ion-header>\n <ion-toolbar color=\"light\">\n <ion-buttons slot=\"start\">\n <ion-back-button [defaultHref]=\"spacePageUrl('members')\" />\n </ion-buttons>\n <ion-title>\n @switch (space.type) {\n @case (\"family\") {\n @if ($contact(); as contact) {\n Family member: {{ contact | personTitle }}\n } @else {\n Family member\n }\n }\n @case (\"cohabit\") {\n Housemates\n }\n @default {\n <ion-title>Member</ion-title>\n }\n }\n </ion-title>\n <!--<ion-title *ngIf=\"member else titleNoMember\">{{member.title}}</ion-title>-->\n <!--<ng-template #titleNoMember>-->\n <!--<ion-title>Member</ion-title>-->\n <!--</ng-template>-->\n <ion-buttons slot=\"end\">\n @if (member) {\n <ion-button\n [title]=\"\n member.brief?.userID === spaceParams.userService.currentUserID\n ? 'Leave team'\n : 'Remove team member'\n \"\n (click)=\"removeMember()\"\n >\n <ion-icon name=\"trash\" />\n </ion-button>\n }\n <ion-menu-button menu=\"mainMenu\" />\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n\n<ion-content class=\"cardy\">\n <sneat-contact-details [$contact]=\"$contact()\" [$space]=\"$space()\" />\n</ion-content>\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sneat-extension-contactus.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
package/package.json
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@sneat/extension-contactus",
|
|
3
|
+
"version": "0.13.0",
|
|
4
|
+
"publishConfig": {
|
|
5
|
+
"access": "public"
|
|
6
|
+
},
|
|
7
|
+
"peerDependencies": {
|
|
8
|
+
"@angular/common": "^21.0.0",
|
|
9
|
+
"@angular/core": "^21.0.0",
|
|
10
|
+
"@angular/fire": "^20.0.0",
|
|
11
|
+
"@angular/forms": "^21.0.0",
|
|
12
|
+
"@angular/router": "^21.0.0",
|
|
13
|
+
"@ionic/angular": ">=8",
|
|
14
|
+
"angularx-qrcode": "^21.0.0",
|
|
15
|
+
"rxjs": "^7.0.0",
|
|
16
|
+
"@sneat/api": "^0.22.0",
|
|
17
|
+
"@sneat/auth-core": "^0.22.0",
|
|
18
|
+
"@sneat/auth-models": "^0.22.0",
|
|
19
|
+
"@sneat/auth-ui": "^0.22.0",
|
|
20
|
+
"@sneat/components": "^0.22.0",
|
|
21
|
+
"@sneat/core": "^0.22.0",
|
|
22
|
+
"@sneat/dto": "^0.22.0",
|
|
23
|
+
"@sneat/extension-assetus-contract": "^0.0.5",
|
|
24
|
+
"@sneat/extension-contactus-contract": "^0.12.0",
|
|
25
|
+
"@sneat/extension-contactus-ui": "^0.13.0",
|
|
26
|
+
"@sneat/random": "^0.0.4",
|
|
27
|
+
"@sneat/space-components": "^0.22.0",
|
|
28
|
+
"@sneat/space-models": "^0.22.0",
|
|
29
|
+
"@sneat/space-services": "^0.22.0",
|
|
30
|
+
"@sneat/ui": "^0.22.0"
|
|
31
|
+
},
|
|
32
|
+
"sideEffects": false,
|
|
33
|
+
"module": "fesm2022/sneat-extension-contactus.mjs",
|
|
34
|
+
"typings": "types/sneat-extension-contactus.d.ts",
|
|
35
|
+
"exports": {
|
|
36
|
+
"./package.json": {
|
|
37
|
+
"default": "./package.json"
|
|
38
|
+
},
|
|
39
|
+
".": {
|
|
40
|
+
"types": "./types/sneat-extension-contactus.d.ts",
|
|
41
|
+
"default": "./fesm2022/sneat-extension-contactus.mjs"
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
"type": "module",
|
|
45
|
+
"dependencies": {
|
|
46
|
+
"tslib": "^2.3.0"
|
|
47
|
+
}
|
|
48
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Provider } from '@angular/core';
|
|
2
|
+
import { Route } from '@angular/router';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Provides the concrete contactus services and binds them to the
|
|
6
|
+
* contract injection tokens. Consumed at app bootstrap; other
|
|
7
|
+
* extensions must NOT import this.
|
|
8
|
+
*/
|
|
9
|
+
declare function provideContactus(): Provider[];
|
|
10
|
+
|
|
11
|
+
declare const contactusRoutes: Route[];
|
|
12
|
+
|
|
13
|
+
declare const membersRoutes: Route[];
|
|
14
|
+
|
|
15
|
+
export { contactusRoutes, membersRoutes, provideContactus };
|