@sneat/extension-contactus 0.13.2 → 0.13.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (18) hide show
  1. package/fesm2022/{sneat-extension-contactus-contact-base-page-D6vHs5em.mjs → sneat-extension-contactus-contact-base-page-DOV4aKLy.mjs} +2 -2
  2. package/fesm2022/{sneat-extension-contactus-contact-base-page-D6vHs5em.mjs.map → sneat-extension-contactus-contact-base-page-DOV4aKLy.mjs.map} +1 -1
  3. package/fesm2022/{sneat-extension-contactus-contacts-page.component-BzTRhfPJ.mjs → sneat-extension-contactus-contacts-page.component-dpcKveLW.mjs} +2 -2
  4. package/fesm2022/{sneat-extension-contactus-contacts-page.component-BzTRhfPJ.mjs.map → sneat-extension-contactus-contacts-page.component-dpcKveLW.mjs.map} +1 -1
  5. package/fesm2022/{sneat-extension-contactus-index-weKgp-3B.mjs → sneat-extension-contactus-index--ZEjpmgM.mjs} +4 -4
  6. package/fesm2022/{sneat-extension-contactus-index-weKgp-3B.mjs.map → sneat-extension-contactus-index--ZEjpmgM.mjs.map} +1 -1
  7. package/fesm2022/{sneat-extension-contactus-index-DVC9hDgV.mjs → sneat-extension-contactus-index-1vVX7Aa3.mjs} +2 -2
  8. package/fesm2022/{sneat-extension-contactus-index-DVC9hDgV.mjs.map → sneat-extension-contactus-index-1vVX7Aa3.mjs.map} +1 -1
  9. package/fesm2022/{sneat-extension-contactus-members-page.component-DPXZ6eSl.mjs → sneat-extension-contactus-members-page.component-CWulwfet.mjs} +2 -2
  10. package/fesm2022/{sneat-extension-contactus-members-page.component-DPXZ6eSl.mjs.map → sneat-extension-contactus-members-page.component-CWulwfet.mjs.map} +1 -1
  11. package/fesm2022/{sneat-extension-contactus-space-member-page.component-BgZCwQmN.mjs → sneat-extension-contactus-space-member-page.component-BY_SJdUs.mjs} +3 -3
  12. package/fesm2022/{sneat-extension-contactus-space-member-page.component-BgZCwQmN.mjs.map → sneat-extension-contactus-space-member-page.component-BY_SJdUs.mjs.map} +1 -1
  13. package/fesm2022/sneat-extension-contactus.mjs +559 -1
  14. package/fesm2022/sneat-extension-contactus.mjs.map +1 -1
  15. package/package.json +12 -12
  16. package/types/sneat-extension-contactus.d.ts +128 -1
  17. package/fesm2022/sneat-extension-contactus-sneat-extension-contactus-BkVEPHoJ.mjs +0 -560
  18. package/fesm2022/sneat-extension-contactus-sneat-extension-contactus-BkVEPHoJ.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"sneat-extension-contactus-members-page.component-DPXZ6eSl.mjs","sources":["../../../../../../libs/extensions/contactus/runtime/src/lib/members/members-base-page.ts","../../../../../../libs/extensions/contactus/runtime/src/lib/members/pages/members/members-page.component.ts","../../../../../../libs/extensions/contactus/runtime/src/lib/members/pages/members/members-page.component.html"],"sourcesContent":["import { SpaceMemberType } from '@sneat/auth-models';\nimport { ContactusModuleBaseComponent } from '@sneat/extension-contactus-ui';\nimport { IIdAndBriefAndOptionalDbo } from '@sneat/core';\nimport { isSpaceSupportsMemberGroups } from '@sneat/dto';\nimport { ContactusSpaceService } from '../services';\nimport { IContactBrief, IContactDbo } from '@sneat/extension-contactus-contract';\n\nexport abstract class MembersBasePage extends ContactusModuleBaseComponent {\n public members?: readonly IIdAndBriefAndOptionalDbo<\n IContactBrief,\n IContactDbo\n >[];\n\n // protected currentUserDto: IDtoUser;\n\n abstract get memberType(): SpaceMemberType;\n\n // protected setCurrentUser(dto: IDtoUser) {\n // this.currentUserDto = dto;\n // }\n\n protected constructor(contactusTeamService: ContactusSpaceService) {\n super(contactusTeamService);\n // this.userService.currentUserLoaded.subscribe(user => this.setCurrentUser(user));\n }\n\n goNewMember = () => {\n // TODO: use it?\n this.navigateForwardToSpacePage('new-member').catch(\n this.logErrorHandler('failed to navigate to new member page'),\n );\n };\n\n // goMember = (member: IMemberContext, page?: MemberPages) => {\n // \tthis.navigateForwardToSpacePage(\n // \t\t(page || 'member') + '/' + member.id,\n // \t).catch(this.logErrorHandler('failed to navigate to team member page'));\n // };\n //\n // goContact = (id: string, event: Event) => {\n // \tevent.stopPropagation();\n // \tthis.navigateForwardToSpacePage(`contact/${id}`)\n // \t\t.catch(this.logErrorHandler('failed to navigate to contact page'));\n // };\n\n public get supportsMemberGroups(): boolean {\n return (\n !!this.space?.brief && isSpaceSupportsMemberGroups(this.space.brief.type)\n );\n }\n\n // protected setPageCommuneIds(source: string, communeIds: ICommuneIds, communeDto?: ICommuneDto): void {\n // \tsuper.setPageCommuneIds(source, communeIds, communeDto);\n // \tif (this.communeRealId) {\n // \t\tthis.membersService.selectByType(this.communeRealId, this.memberType)\n // \t\t\t.subscribe(\n // \t\t\t\tmembers => {\n // \t\t\t\t\tthis.members = members;\n // \t\t\t\t},\n // \t\t\t\tthis.errorLogger.logError,\n // \t\t\t);\n // \t}\n // }\n}\n","import { AsyncPipe } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { Params } from '@angular/router';\nimport {\n IonBackButton,\n IonBadge,\n IonButton,\n IonButtons,\n IonCard,\n IonContent,\n IonFooter,\n IonHeader,\n IonIcon,\n IonItem,\n IonItemDivider,\n IonItemGroup,\n IonLabel,\n IonMenuButton,\n IonSegment,\n IonSegmentButton,\n IonToolbar,\n} from '@ionic/angular/standalone';\nimport { SpaceMemberType } from '@sneat/auth-models';\nimport {\n ContactusServicesModule,\n ContactusSpaceService,\n} from '../../../services';\nimport { FamilyMembersComponent, MemberGroup } from '@sneat/extension-contactus-ui';\nimport { IMemberGroupContext } from '@sneat/extension-contactus-contract';\nimport { isSpaceSupportsMemberGroups } from '@sneat/dto';\nimport {\n SpaceComponentBaseParams,\n SpacePageTitleComponent,\n} from '@sneat/space-components';\nimport { SpaceServiceModule } from '@sneat/space-services';\nimport { ClassName } from '@sneat/ui';\nimport { MembersBasePage } from '../../members-base-page';\nimport { Component, inject } from '@angular/core';\n\n@Component({\n imports: [\n FormsModule,\n SpacePageTitleComponent,\n ContactusServicesModule,\n FamilyMembersComponent,\n SpaceServiceModule,\n IonHeader,\n IonToolbar,\n IonButtons,\n IonBackButton,\n IonMenuButton,\n IonContent,\n IonSegment,\n IonSegmentButton,\n IonLabel,\n IonCard,\n AsyncPipe,\n IonItemGroup,\n IonItemDivider,\n IonIcon,\n IonBadge,\n IonItem,\n IonFooter,\n IonButton,\n ],\n providers: [\n { provide: ClassName, useValue: 'MembersPageComponent' },\n SpaceComponentBaseParams,\n ],\n selector: 'sneat-members-page',\n templateUrl: 'members-page.component.html',\n})\nexport class MembersPageComponent extends MembersBasePage {\n // private readonly memberGroupService = inject(MemberGroupService);\n\n public memberGroups?: readonly IMemberGroupContext[];\n // public loadingStubs?: number[];\n public segment: 'all' | 'groups' = 'all';\n // public listMode: 'list' | 'cards' = 'list';\n // public membersByGroupId: { [id: string]: IMemberContext[] } = {};\n\n readonly memberType: SpaceMemberType = 'member';\n\n constructor() {\n const contactusTeamService = inject(ContactusSpaceService);\n\n super(contactusTeamService);\n }\n\n protected goGroup(memberGroup: IMemberGroupContext): void {\n this.navigateForwardToSpacePage(`group/${memberGroup.id}`, {\n state: { memberGroup },\n }).catch(this.logErrorHandler('failed to navigate to members group page'));\n }\n\n protected goNewMemberPage(group?: MemberGroup): void {\n const queryParams: Params | undefined = group\n ? { group: group.id }\n : undefined;\n this.navigateForwardToSpacePage('new-member', {\n queryParams,\n state: { group },\n }).catch(\n this.logErrorHandler(\n 'failed to navigate to new member page with age parameter',\n ),\n );\n }\n\n public goNew(): void {\n switch (this.segment) {\n case 'all':\n this.goNewMemberPage();\n break;\n case 'groups':\n this.navigateForwardToSpacePage('new-group').catch(\n this.logErrorHandler('failed to navigate to new group page'),\n );\n break;\n default:\n alert(`Unknown segment: ${this.segment}`);\n return;\n }\n }\n\n override onSpaceDboChanged(): void {\n super.onSpaceDboChanged();\n if (!this.space) {\n throw new Error('!this.commune');\n }\n // console.log(`MembersPageComponent.onSpaceDboChanged()`);\n // if (this.team?.dto?.numberOf?.members) {\n // \tthis.loadingStubs = Array(this.team?.dto?.numberOf?.members).fill(1);\n // }\n // if (!isNaN(this.prevMembersCount) && this.prevMembersCount != this.commune.numberOf.members) {\n // this.loadData();\n // }\n this.loadData('onSpaceDboChanged');\n // this.prevMembersCount = this.team?.dto?.numberOf?.members || 0;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n private loadData(_source: string): void {\n // console.log(`MembersPageComponent.loadData(source=${source})`);\n\n // this.unsubscribe();\n const space = this.space;\n if (!space) {\n throw new Error('!this.team');\n }\n // this.noGroupMembers = this.team?.brief && isTeamSupportsMemberGroups(this.team.brief.type) ? [] : undefined;\n\n // const contactusTeam = this.teamModuleDto;\n //\n // if (contactusTeam?.dto?.contacts) {\n // \tthis.processContactusSpaceDbo(contactusTeam.dto);\n // } else {\n // \tthis.contactService\n // \t\t.watchContactsWithRole(space, 'space_member') // TODO: use constant\n // \t\t.pipe(takeUntil(this.spaceIDChanged$))\n // \t\t.subscribe({\n // \t\t\tnext: (members) => {\n // \t\t\t\tconsole.log(\n // \t\t\t\t\t`MembersPageComponent.loadData(source=${source}), members =>`,\n // \t\t\t\t\tmembers,\n // \t\t\t\t);\n // \t\t\t\tif (members?.length) {\n // \t\t\t\t\t// TODO: deep equal\n // \t\t\t\t\tmembers.forEach((m) => {\n // \t\t\t\t\t\tif (m.id) {\n // \t\t\t\t\t\t\tif (m.dto?.related) {\n // \t\t\t\t\t\t\t\t// this.contactsByMember[m.id] = zipMapBriefsWithIDs(\n // \t\t\t\t\t\t\t\t// \tm.dto.relatedContacts,\n // \t\t\t\t\t\t\t\t// );\n // \t\t\t\t\t\t\t} else if (this.contactsByMember[m.id]) {\n // \t\t\t\t\t\t\t\tdelete this.contactsByMember[m.id];\n // \t\t\t\t\t\t\t}\n // \t\t\t\t\t\t}\n // \t\t\t\t\t});\n // \t\t\t\t\tthis.members = members;\n // \t\t\t\t\tthis.processMembers();\n // \t\t\t\t}\n // \t\t\t},\n // \t\t});\n // }\n\n if (space.type && isSpaceSupportsMemberGroups(space.type)) {\n throw new Error('not implemented yet due to refactoring');\n // this.contactService.watchContactsByRole(team)\n // \t.subscribe(memberGroups => {\n // \t\tif (memberGroups && (!this.memberGroups || memberGroups.length !== this.memberGroups.length)) { // TODO: deep equal\n // \t\t\tthis.memberGroups = memberGroups;\n // \t\t}\n // \t});\n }\n }\n}\n","<ion-header>\n <ion-toolbar color=\"light\" class=\"with-back-button with-end-buttons\">\n <ion-buttons slot=\"start\">\n <ion-back-button [defaultHref]=\"$defaultBackUrl()\" />\n </ion-buttons>\n <sneat-space-page-title\n [space]=\"space\"\n generalTitle=\"Members\"\n icon=\"👪\"\n [titlesBySpaceType]=\"{\n family: 'Family members',\n }\"\n />\n <ion-buttons slot=\"end\">\n <ion-menu-button menu=\"mainMenu\" />\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n\n<ion-content class=\"cardy\">\n @if (supportsMemberGroups) {\n <div class=\"segment\">\n <ion-segment [(ngModel)]=\"segment\">\n <ion-segment-button value=\"all\">\n <ion-label>All</ion-label>\n </ion-segment-button>\n <ion-segment-button value=\"groups\">\n <ion-label>\n @if (space.type === \"cohabit\") {\n By room\n } @else {\n By group\n }\n </ion-label>\n </ion-segment-button>\n </ion-segment>\n </div>\n }\n\n <!--\t<div class=\"segment\" *ngIf=\"spaceType === 'family'\">-->\n <!--\t\t<ion-segment [(ngModel)]=\"listMode\">-->\n <!--\t\t\t<ion-segment-button value=\"list\">List</ion-segment-button>-->\n <!--\t\t\t<ion-segment-button value=\"cards\">Cards</ion-segment-button>-->\n <!--\t\t</ion-segment>-->\n <!--\t</div>-->\n\n <!--\t<ion-list *ngIf=\"segment === 'all' && teamType === 'family'\">-->\n <!--\t\t<sneat-members-list *ngIf=\"adults\"-->\n <!--\t\t\t\t\t\t\t\t\t\t\t\t[team]=\"team\"-->\n <!--\t\t\t\t\t\t\t\t\t\t\t\t[allMembers]=\"members\"-->\n <!--\t\t\t\t\t\t\t\t\t\t\t\t[contactsByMember]=\"contactsByMember\"-->\n <!--\t\t></sneat-members-list>-->\n <!--\t</ion-list>-->\n\n @if (segment === \"all\" && $spaceType() === \"family\") {\n <ion-card>\n <sneat-family-members\n [$space]=\"$space()\"\n [contactusSpaceDbo]=\"spaceModuleDbo$ | async\"\n (addMember)=\"goNewMemberPage($event)\"\n />\n </ion-card>\n }\n\n @if (segment === \"groups\") {\n @if ($spaceType() === \"cohabit\") {\n @if (memberGroups) {\n @for (group of memberGroups; track group.id) {\n <ion-item-group>\n <ion-item-divider>\n <ion-icon name=\"people\" style=\"margin-right: 0.5em\" />\n <ion-label>\n {{ group.brief?.title }}\n </ion-label>\n @if (group.dbo?.numberOf?.members) {\n <ion-badge color=\"light\">\n {{ group.dbo?.numberOf?.members }} members\n </ion-badge>\n }\n </ion-item-divider>\n <!--\t\t\t\t\t<ng-container *ngIf=\"membersByGroupId[group.id]\">-->\n <!--\t\t\t\t\t\t<sneat-members-list [members]=\"this.membersByGroupId[group.id]\"-->\n <!--\t\t\t\t\t\t></sneat-members-list>-->\n <!--\t\t\t\t\t</ng-container>-->\n </ion-item-group>\n }\n\n <!--\t\t\t\t<ng-container *ngIf=\"noGroupMembers && noGroupMembers.length\">-->\n <!--\t\t\t\t\t<ion-item-divider>-->\n <!--\t\t\t\t\t\t<ion-label>No group members</ion-label>-->\n <!--\t\t\t\t\t</ion-item-divider>-->\n <!--\t\t\t\t\t<sneat-members-list [members]=\"noGroupMembers\"-->\n <!--\t\t\t\t\t></sneat-members-list>-->\n <!--\t\t\t\t</ng-container>-->\n }\n } @else if (memberGroups) {\n @for (group of memberGroups; track group.id) {\n <ion-item-group>\n <ion-item button=\"button\" (click)=\"goGroup(group)\">\n <ion-icon name=\"people\" style=\"margin-right: 0.5em\" />\n <ion-label>\n {{ group.brief?.title }}\n </ion-label>\n @if (group.dbo?.numberOf?.members) {\n <ion-badge color=\"light\">\n {{ group?.dbo?.numberOf?.members }} members\n </ion-badge>\n }\n </ion-item>\n </ion-item-group>\n }\n <!--\t\t\t\t<ng-container *ngIf=\"noGroupMembers && noGroupMembers.length\">-->\n <!--\t\t\t\t\t<ion-item-divider>-->\n <!--\t\t\t\t\t\t<ion-label>No group members</ion-label>-->\n <!--\t\t\t\t\t\t<ion-badge color=\"light\" slot=\"end\"-->\n <!--\t\t\t\t\t\t\t\t\t\t\t style=\"margin-right: 1em\">{{noGroupMembers.length}}</ion-badge>-->\n <!--\t\t\t\t\t</ion-item-divider>-->\n <!--\t\t\t\t\t<sneat-members-list-->\n <!--\t\t\t\t\t\t[members]=\"noGroupMembers\"-->\n <!--\t\t\t\t\t\t[contactsByMember]=\"contactsByMember\"-->\n <!--\t\t\t\t\t></sneat-members-list>-->\n <!--\t\t\t\t</ng-container>-->\n }\n }\n</ion-content>\n\n<ion-footer>\n <ion-toolbar color=\"light\">\n @if (space.dbo) {\n @switch (segment) {\n @case (\"all\") {\n <ion-label>\n <b>Total</b>:\n <!--\t\t\t{{ team.dto.numberOf?.members ?? 0 }}-->\n <!--\t\t\t{{ team.dto.numberOf?.members === 1 ? \"member\" : \"members\" }}-->\n </ion-label>\n }\n @case (\"groups\") {\n <ion-label>\n <b>Total</b>:\n <!--\t\t\t{{ team.dto.numberOf?.memberGroups || 0 }}-->\n <!--\t\t\t{{ team.dto.numberOf?.memberGroups === 1 ? \"group\" : \"groups\" }}-->\n </ion-label>\n }\n }\n } @else {\n <ion-label>Loading...</ion-label>\n }\n\n <ion-buttons slot=\"end\">\n <ion-button\n size=\"small\"\n color=\"primary\"\n [disabled]=\"!space.brief\"\n (click)=\"goNew()\"\n [title]=\"segment === 'groups' ? 'Add new group' : 'Add new member'\"\n >\n <ion-icon name=\"add\" />\n <ion-label>Add</ion-label>\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n</ion-footer>\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sneat-extension-contactus-members-page.component-CWulwfet.mjs","sources":["../../../../../../libs/extensions/contactus/runtime/src/lib/members/members-base-page.ts","../../../../../../libs/extensions/contactus/runtime/src/lib/members/pages/members/members-page.component.ts","../../../../../../libs/extensions/contactus/runtime/src/lib/members/pages/members/members-page.component.html"],"sourcesContent":["import { SpaceMemberType } from '@sneat/auth-models';\nimport { ContactusModuleBaseComponent } from '@sneat/extension-contactus-ui';\nimport { IIdAndBriefAndOptionalDbo } from '@sneat/core';\nimport { isSpaceSupportsMemberGroups } from '@sneat/dto';\nimport { ContactusSpaceService } from '../services';\nimport { IContactBrief, IContactDbo } from '@sneat/extension-contactus-contract';\n\nexport abstract class MembersBasePage extends ContactusModuleBaseComponent {\n public members?: readonly IIdAndBriefAndOptionalDbo<\n IContactBrief,\n IContactDbo\n >[];\n\n // protected currentUserDto: IDtoUser;\n\n abstract get memberType(): SpaceMemberType;\n\n // protected setCurrentUser(dto: IDtoUser) {\n // this.currentUserDto = dto;\n // }\n\n protected constructor(contactusTeamService: ContactusSpaceService) {\n super(contactusTeamService);\n // this.userService.currentUserLoaded.subscribe(user => this.setCurrentUser(user));\n }\n\n goNewMember = () => {\n // TODO: use it?\n this.navigateForwardToSpacePage('new-member').catch(\n this.logErrorHandler('failed to navigate to new member page'),\n );\n };\n\n // goMember = (member: IMemberContext, page?: MemberPages) => {\n // \tthis.navigateForwardToSpacePage(\n // \t\t(page || 'member') + '/' + member.id,\n // \t).catch(this.logErrorHandler('failed to navigate to team member page'));\n // };\n //\n // goContact = (id: string, event: Event) => {\n // \tevent.stopPropagation();\n // \tthis.navigateForwardToSpacePage(`contact/${id}`)\n // \t\t.catch(this.logErrorHandler('failed to navigate to contact page'));\n // };\n\n public get supportsMemberGroups(): boolean {\n return (\n !!this.space?.brief && isSpaceSupportsMemberGroups(this.space.brief.type)\n );\n }\n\n // protected setPageCommuneIds(source: string, communeIds: ICommuneIds, communeDto?: ICommuneDto): void {\n // \tsuper.setPageCommuneIds(source, communeIds, communeDto);\n // \tif (this.communeRealId) {\n // \t\tthis.membersService.selectByType(this.communeRealId, this.memberType)\n // \t\t\t.subscribe(\n // \t\t\t\tmembers => {\n // \t\t\t\t\tthis.members = members;\n // \t\t\t\t},\n // \t\t\t\tthis.errorLogger.logError,\n // \t\t\t);\n // \t}\n // }\n}\n","import { AsyncPipe } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { Params } from '@angular/router';\nimport {\n IonBackButton,\n IonBadge,\n IonButton,\n IonButtons,\n IonCard,\n IonContent,\n IonFooter,\n IonHeader,\n IonIcon,\n IonItem,\n IonItemDivider,\n IonItemGroup,\n IonLabel,\n IonMenuButton,\n IonSegment,\n IonSegmentButton,\n IonToolbar,\n} from '@ionic/angular/standalone';\nimport { SpaceMemberType } from '@sneat/auth-models';\nimport {\n ContactusServicesModule,\n ContactusSpaceService,\n} from '../../../services';\nimport { FamilyMembersComponent, MemberGroup } from '@sneat/extension-contactus-ui';\nimport { IMemberGroupContext } from '@sneat/extension-contactus-contract';\nimport { isSpaceSupportsMemberGroups } from '@sneat/dto';\nimport {\n SpaceComponentBaseParams,\n SpacePageTitleComponent,\n} from '@sneat/space-components';\nimport { SpaceServiceModule } from '@sneat/space-services';\nimport { ClassName } from '@sneat/ui';\nimport { MembersBasePage } from '../../members-base-page';\nimport { Component, inject } from '@angular/core';\n\n@Component({\n imports: [\n FormsModule,\n SpacePageTitleComponent,\n ContactusServicesModule,\n FamilyMembersComponent,\n SpaceServiceModule,\n IonHeader,\n IonToolbar,\n IonButtons,\n IonBackButton,\n IonMenuButton,\n IonContent,\n IonSegment,\n IonSegmentButton,\n IonLabel,\n IonCard,\n AsyncPipe,\n IonItemGroup,\n IonItemDivider,\n IonIcon,\n IonBadge,\n IonItem,\n IonFooter,\n IonButton,\n ],\n providers: [\n { provide: ClassName, useValue: 'MembersPageComponent' },\n SpaceComponentBaseParams,\n ],\n selector: 'sneat-members-page',\n templateUrl: 'members-page.component.html',\n})\nexport class MembersPageComponent extends MembersBasePage {\n // private readonly memberGroupService = inject(MemberGroupService);\n\n public memberGroups?: readonly IMemberGroupContext[];\n // public loadingStubs?: number[];\n public segment: 'all' | 'groups' = 'all';\n // public listMode: 'list' | 'cards' = 'list';\n // public membersByGroupId: { [id: string]: IMemberContext[] } = {};\n\n readonly memberType: SpaceMemberType = 'member';\n\n constructor() {\n const contactusTeamService = inject(ContactusSpaceService);\n\n super(contactusTeamService);\n }\n\n protected goGroup(memberGroup: IMemberGroupContext): void {\n this.navigateForwardToSpacePage(`group/${memberGroup.id}`, {\n state: { memberGroup },\n }).catch(this.logErrorHandler('failed to navigate to members group page'));\n }\n\n protected goNewMemberPage(group?: MemberGroup): void {\n const queryParams: Params | undefined = group\n ? { group: group.id }\n : undefined;\n this.navigateForwardToSpacePage('new-member', {\n queryParams,\n state: { group },\n }).catch(\n this.logErrorHandler(\n 'failed to navigate to new member page with age parameter',\n ),\n );\n }\n\n public goNew(): void {\n switch (this.segment) {\n case 'all':\n this.goNewMemberPage();\n break;\n case 'groups':\n this.navigateForwardToSpacePage('new-group').catch(\n this.logErrorHandler('failed to navigate to new group page'),\n );\n break;\n default:\n alert(`Unknown segment: ${this.segment}`);\n return;\n }\n }\n\n override onSpaceDboChanged(): void {\n super.onSpaceDboChanged();\n if (!this.space) {\n throw new Error('!this.commune');\n }\n // console.log(`MembersPageComponent.onSpaceDboChanged()`);\n // if (this.team?.dto?.numberOf?.members) {\n // \tthis.loadingStubs = Array(this.team?.dto?.numberOf?.members).fill(1);\n // }\n // if (!isNaN(this.prevMembersCount) && this.prevMembersCount != this.commune.numberOf.members) {\n // this.loadData();\n // }\n this.loadData('onSpaceDboChanged');\n // this.prevMembersCount = this.team?.dto?.numberOf?.members || 0;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n private loadData(_source: string): void {\n // console.log(`MembersPageComponent.loadData(source=${source})`);\n\n // this.unsubscribe();\n const space = this.space;\n if (!space) {\n throw new Error('!this.team');\n }\n // this.noGroupMembers = this.team?.brief && isTeamSupportsMemberGroups(this.team.brief.type) ? [] : undefined;\n\n // const contactusTeam = this.teamModuleDto;\n //\n // if (contactusTeam?.dto?.contacts) {\n // \tthis.processContactusSpaceDbo(contactusTeam.dto);\n // } else {\n // \tthis.contactService\n // \t\t.watchContactsWithRole(space, 'space_member') // TODO: use constant\n // \t\t.pipe(takeUntil(this.spaceIDChanged$))\n // \t\t.subscribe({\n // \t\t\tnext: (members) => {\n // \t\t\t\tconsole.log(\n // \t\t\t\t\t`MembersPageComponent.loadData(source=${source}), members =>`,\n // \t\t\t\t\tmembers,\n // \t\t\t\t);\n // \t\t\t\tif (members?.length) {\n // \t\t\t\t\t// TODO: deep equal\n // \t\t\t\t\tmembers.forEach((m) => {\n // \t\t\t\t\t\tif (m.id) {\n // \t\t\t\t\t\t\tif (m.dto?.related) {\n // \t\t\t\t\t\t\t\t// this.contactsByMember[m.id] = zipMapBriefsWithIDs(\n // \t\t\t\t\t\t\t\t// \tm.dto.relatedContacts,\n // \t\t\t\t\t\t\t\t// );\n // \t\t\t\t\t\t\t} else if (this.contactsByMember[m.id]) {\n // \t\t\t\t\t\t\t\tdelete this.contactsByMember[m.id];\n // \t\t\t\t\t\t\t}\n // \t\t\t\t\t\t}\n // \t\t\t\t\t});\n // \t\t\t\t\tthis.members = members;\n // \t\t\t\t\tthis.processMembers();\n // \t\t\t\t}\n // \t\t\t},\n // \t\t});\n // }\n\n if (space.type && isSpaceSupportsMemberGroups(space.type)) {\n throw new Error('not implemented yet due to refactoring');\n // this.contactService.watchContactsByRole(team)\n // \t.subscribe(memberGroups => {\n // \t\tif (memberGroups && (!this.memberGroups || memberGroups.length !== this.memberGroups.length)) { // TODO: deep equal\n // \t\t\tthis.memberGroups = memberGroups;\n // \t\t}\n // \t});\n }\n }\n}\n","<ion-header>\n <ion-toolbar color=\"light\" class=\"with-back-button with-end-buttons\">\n <ion-buttons slot=\"start\">\n <ion-back-button [defaultHref]=\"$defaultBackUrl()\" />\n </ion-buttons>\n <sneat-space-page-title\n [space]=\"space\"\n generalTitle=\"Members\"\n icon=\"👪\"\n [titlesBySpaceType]=\"{\n family: 'Family members',\n }\"\n />\n <ion-buttons slot=\"end\">\n <ion-menu-button menu=\"mainMenu\" />\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n\n<ion-content class=\"cardy\">\n @if (supportsMemberGroups) {\n <div class=\"segment\">\n <ion-segment [(ngModel)]=\"segment\">\n <ion-segment-button value=\"all\">\n <ion-label>All</ion-label>\n </ion-segment-button>\n <ion-segment-button value=\"groups\">\n <ion-label>\n @if (space.type === \"cohabit\") {\n By room\n } @else {\n By group\n }\n </ion-label>\n </ion-segment-button>\n </ion-segment>\n </div>\n }\n\n <!--\t<div class=\"segment\" *ngIf=\"spaceType === 'family'\">-->\n <!--\t\t<ion-segment [(ngModel)]=\"listMode\">-->\n <!--\t\t\t<ion-segment-button value=\"list\">List</ion-segment-button>-->\n <!--\t\t\t<ion-segment-button value=\"cards\">Cards</ion-segment-button>-->\n <!--\t\t</ion-segment>-->\n <!--\t</div>-->\n\n <!--\t<ion-list *ngIf=\"segment === 'all' && teamType === 'family'\">-->\n <!--\t\t<sneat-members-list *ngIf=\"adults\"-->\n <!--\t\t\t\t\t\t\t\t\t\t\t\t[team]=\"team\"-->\n <!--\t\t\t\t\t\t\t\t\t\t\t\t[allMembers]=\"members\"-->\n <!--\t\t\t\t\t\t\t\t\t\t\t\t[contactsByMember]=\"contactsByMember\"-->\n <!--\t\t></sneat-members-list>-->\n <!--\t</ion-list>-->\n\n @if (segment === \"all\" && $spaceType() === \"family\") {\n <ion-card>\n <sneat-family-members\n [$space]=\"$space()\"\n [contactusSpaceDbo]=\"spaceModuleDbo$ | async\"\n (addMember)=\"goNewMemberPage($event)\"\n />\n </ion-card>\n }\n\n @if (segment === \"groups\") {\n @if ($spaceType() === \"cohabit\") {\n @if (memberGroups) {\n @for (group of memberGroups; track group.id) {\n <ion-item-group>\n <ion-item-divider>\n <ion-icon name=\"people\" style=\"margin-right: 0.5em\" />\n <ion-label>\n {{ group.brief?.title }}\n </ion-label>\n @if (group.dbo?.numberOf?.members) {\n <ion-badge color=\"light\">\n {{ group.dbo?.numberOf?.members }} members\n </ion-badge>\n }\n </ion-item-divider>\n <!--\t\t\t\t\t<ng-container *ngIf=\"membersByGroupId[group.id]\">-->\n <!--\t\t\t\t\t\t<sneat-members-list [members]=\"this.membersByGroupId[group.id]\"-->\n <!--\t\t\t\t\t\t></sneat-members-list>-->\n <!--\t\t\t\t\t</ng-container>-->\n </ion-item-group>\n }\n\n <!--\t\t\t\t<ng-container *ngIf=\"noGroupMembers && noGroupMembers.length\">-->\n <!--\t\t\t\t\t<ion-item-divider>-->\n <!--\t\t\t\t\t\t<ion-label>No group members</ion-label>-->\n <!--\t\t\t\t\t</ion-item-divider>-->\n <!--\t\t\t\t\t<sneat-members-list [members]=\"noGroupMembers\"-->\n <!--\t\t\t\t\t></sneat-members-list>-->\n <!--\t\t\t\t</ng-container>-->\n }\n } @else if (memberGroups) {\n @for (group of memberGroups; track group.id) {\n <ion-item-group>\n <ion-item button=\"button\" (click)=\"goGroup(group)\">\n <ion-icon name=\"people\" style=\"margin-right: 0.5em\" />\n <ion-label>\n {{ group.brief?.title }}\n </ion-label>\n @if (group.dbo?.numberOf?.members) {\n <ion-badge color=\"light\">\n {{ group?.dbo?.numberOf?.members }} members\n </ion-badge>\n }\n </ion-item>\n </ion-item-group>\n }\n <!--\t\t\t\t<ng-container *ngIf=\"noGroupMembers && noGroupMembers.length\">-->\n <!--\t\t\t\t\t<ion-item-divider>-->\n <!--\t\t\t\t\t\t<ion-label>No group members</ion-label>-->\n <!--\t\t\t\t\t\t<ion-badge color=\"light\" slot=\"end\"-->\n <!--\t\t\t\t\t\t\t\t\t\t\t style=\"margin-right: 1em\">{{noGroupMembers.length}}</ion-badge>-->\n <!--\t\t\t\t\t</ion-item-divider>-->\n <!--\t\t\t\t\t<sneat-members-list-->\n <!--\t\t\t\t\t\t[members]=\"noGroupMembers\"-->\n <!--\t\t\t\t\t\t[contactsByMember]=\"contactsByMember\"-->\n <!--\t\t\t\t\t></sneat-members-list>-->\n <!--\t\t\t\t</ng-container>-->\n }\n }\n</ion-content>\n\n<ion-footer>\n <ion-toolbar color=\"light\">\n @if (space.dbo) {\n @switch (segment) {\n @case (\"all\") {\n <ion-label>\n <b>Total</b>:\n <!--\t\t\t{{ team.dto.numberOf?.members ?? 0 }}-->\n <!--\t\t\t{{ team.dto.numberOf?.members === 1 ? \"member\" : \"members\" }}-->\n </ion-label>\n }\n @case (\"groups\") {\n <ion-label>\n <b>Total</b>:\n <!--\t\t\t{{ team.dto.numberOf?.memberGroups || 0 }}-->\n <!--\t\t\t{{ team.dto.numberOf?.memberGroups === 1 ? \"group\" : \"groups\" }}-->\n </ion-label>\n }\n }\n } @else {\n <ion-label>Loading...</ion-label>\n }\n\n <ion-buttons slot=\"end\">\n <ion-button\n size=\"small\"\n color=\"primary\"\n [disabled]=\"!space.brief\"\n (click)=\"goNew()\"\n [title]=\"segment === 'groups' ? 'Add new group' : 'Add new member'\"\n >\n <ion-icon name=\"add\" />\n <ion-label>Add</ion-label>\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n</ion-footer>\n"],"names":[],"mappings":"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"}
@@ -3,10 +3,10 @@ import { inject, Component } from '@angular/core';
3
3
  import { FormsModule } from '@angular/forms';
4
4
  import { IonHeader, IonToolbar, IonButtons, IonBackButton, IonTitle, IonIcon, IonMenuButton, IonContent, IonButton } from '@ionic/angular/standalone';
5
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';
6
+ import { ContactService, ContactusServicesModule } from './sneat-extension-contactus.mjs';
7
7
  import { SpaceServiceModule } from '@sneat/space-services';
8
8
  import { ClassName } from '@sneat/ui';
9
- import { C as ContactBasePage } from './sneat-extension-contactus-contact-base-page-D6vHs5em.mjs';
9
+ import { C as ContactBasePage } from './sneat-extension-contactus-contact-base-page-DOV4aKLy.mjs';
10
10
 
11
11
  class MemberBasePage extends ContactBasePage {
12
12
  segment = 'summary';
@@ -121,4 +121,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
121
121
  }], ctorParameters: () => [] });
122
122
 
123
123
  export { SpaceMemberPageComponent };
124
- //# sourceMappingURL=sneat-extension-contactus-space-member-page.component-BgZCwQmN.mjs.map
124
+ //# sourceMappingURL=sneat-extension-contactus-space-member-page.component-BY_SJdUs.mjs.map
@@ -1 +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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"}
1
+ {"version":3,"file":"sneat-extension-contactus-space-member-page.component-BY_SJdUs.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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"}