@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.
@@ -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,2 @@
1
+ export { d as contactusRoutes, m as membersRoutes, p as provideContactus } from './sneat-extension-contactus-sneat-extension-contactus-BkVEPHoJ.mjs';
2
+ //# sourceMappingURL=sneat-extension-contactus.mjs.map
@@ -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 };