@sneat/extension-contactus 0.13.1 → 0.13.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/{sneat-extension-contactus-contact-base-page-D6vHs5em.mjs → sneat-extension-contactus-contact-base-page-DOV4aKLy.mjs} +2 -2
- package/fesm2022/{sneat-extension-contactus-contact-base-page-D6vHs5em.mjs.map → sneat-extension-contactus-contact-base-page-DOV4aKLy.mjs.map} +1 -1
- package/fesm2022/{sneat-extension-contactus-contacts-page.component-BzTRhfPJ.mjs → sneat-extension-contactus-contacts-page.component-dpcKveLW.mjs} +2 -2
- package/fesm2022/{sneat-extension-contactus-contacts-page.component-BzTRhfPJ.mjs.map → sneat-extension-contactus-contacts-page.component-dpcKveLW.mjs.map} +1 -1
- package/fesm2022/{sneat-extension-contactus-index-weKgp-3B.mjs → sneat-extension-contactus-index--ZEjpmgM.mjs} +4 -4
- package/fesm2022/{sneat-extension-contactus-index-weKgp-3B.mjs.map → sneat-extension-contactus-index--ZEjpmgM.mjs.map} +1 -1
- package/fesm2022/{sneat-extension-contactus-index-DVC9hDgV.mjs → sneat-extension-contactus-index-1vVX7Aa3.mjs} +2 -2
- package/fesm2022/{sneat-extension-contactus-index-DVC9hDgV.mjs.map → sneat-extension-contactus-index-1vVX7Aa3.mjs.map} +1 -1
- package/fesm2022/{sneat-extension-contactus-members-page.component-DPXZ6eSl.mjs → sneat-extension-contactus-members-page.component-CWulwfet.mjs} +2 -2
- package/fesm2022/{sneat-extension-contactus-members-page.component-DPXZ6eSl.mjs.map → sneat-extension-contactus-members-page.component-CWulwfet.mjs.map} +1 -1
- package/fesm2022/{sneat-extension-contactus-space-member-page.component-BgZCwQmN.mjs → sneat-extension-contactus-space-member-page.component-BY_SJdUs.mjs} +3 -3
- 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
- package/fesm2022/sneat-extension-contactus.mjs +559 -1
- package/fesm2022/sneat-extension-contactus.mjs.map +1 -1
- package/package.json +1 -1
- package/types/sneat-extension-contactus.d.ts +128 -1
- package/fesm2022/sneat-extension-contactus-sneat-extension-contactus-BkVEPHoJ.mjs +0 -560
- package/fesm2022/sneat-extension-contactus-sneat-extension-contactus-BkVEPHoJ.mjs.map +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { inject } from '@angular/core';
|
|
2
|
-
import {
|
|
2
|
+
import { ContactusSpaceService } from './sneat-extension-contactus.mjs';
|
|
3
3
|
import { SpaceItemPageBaseComponent } from '@sneat/space-components';
|
|
4
4
|
import { throwError, takeUntil } from 'rxjs';
|
|
5
5
|
|
|
@@ -60,4 +60,4 @@ class ContactBasePage extends SpaceItemPageBaseComponent {
|
|
|
60
60
|
}
|
|
61
61
|
|
|
62
62
|
export { ContactBasePage as C };
|
|
63
|
-
//# sourceMappingURL=sneat-extension-contactus-contact-base-page-
|
|
63
|
+
//# sourceMappingURL=sneat-extension-contactus-contact-base-page-DOV4aKLy.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sneat-extension-contactus-contact-base-page-
|
|
1
|
+
{"version":3,"file":"sneat-extension-contactus-contact-base-page-DOV4aKLy.mjs","sources":["../../../../../../libs/extensions/contactus/runtime/src/lib/pages/contact-base-page.ts"],"sourcesContent":["import { inject } from '@angular/core';\nimport {\n ContactService,\n ContactusSpaceService,\n} from '../services';\nimport {\n IContactBrief,\n IContactDbo,\n IContactContext,\n} from '@sneat/extension-contactus-contract';\nimport { SpaceItemPageBaseComponent } from '@sneat/space-components';\nimport { Observable, takeUntil, throwError } from 'rxjs';\n\nexport abstract class ContactBasePage extends SpaceItemPageBaseComponent<\n IContactBrief,\n IContactDbo\n> {\n protected readonly $contact = this.$item.asReadonly();\n protected readonly $contactID = this.$itemID;\n\n public get contact() {\n return this.$contact();\n }\n\n protected readonly contactusSpaceService = inject(ContactusSpaceService);\n\n protected constructor(\n protected readonly contactService: ContactService,\n defaultBackPage: 'contacts' | 'members' = 'contacts',\n ) {\n super(defaultBackPage, 'contact', contactService);\n }\n\n protected override watchItemChanges(): Observable<IContactContext> {\n const itemID = this.$itemID();\n if (!itemID) {\n return throwError(() => new Error('no contact context'));\n }\n const space = this.space;\n if (!space) {\n return throwError(() => new Error('no team context'));\n }\n return this.contactService.watchContactById(space, itemID);\n // .pipe(this.takeUntilNeeded(), takeUntil(this.spaceIDChanged$))\n }\n\n protected override briefs(): Record<string, IContactBrief> | undefined {\n return undefined;\n // throw new Error('Method not implemented.'); // return this.contactusTeam?.dto?.contacts;\n }\n\n protected override onSpaceIdChanged(): void {\n super.onSpaceIdChanged();\n this.watchSpaceContactusEntry();\n }\n\n private watchSpaceContactusEntry(): void {\n if (this.space?.id) {\n this.contactusSpaceService\n .watchContactBriefs(this.space.id)\n .pipe(this.takeUntilDestroyed(), takeUntil(this.spaceIDChanged$))\n .subscribe({\n next: (contacts) => {\n console.log(\n 'watchSpaceContactusEntry() => contacts:',\n contacts,\n 'this.contact:',\n this.contact,\n );\n if (this.contact?.id && !this.contact?.dbo) {\n const contactID = this.contact.id;\n const contact = contacts.find((c) => c.id === contactID);\n if (contact) {\n console.log(\n 'setItemContext from contact space brief',\n contact.brief,\n );\n this.setItemContext({ ...this.contact, brief: contact.brief });\n // this.contact = { brief: contact.brief, ...this.contact };\n // this.teamParams.changeDetectorRef.detectChanges();\n }\n }\n },\n });\n }\n }\n\n // private watchContact(): void {\n // \tconsole.log('ContactBasePage.watchContact()');\n // \tif (!this.contact?.id) {\n // \t\treturn;\n // \t}\n // \tconst team = this.team;\n // \tif (!team) {\n // \t\treturn;\n // \t}\n // \tthis.contactService\n // \t\t.watchContactById(team, this.contact?.id)\n // \t\t.pipe(this.takeUntilNeeded())\n // \t\t.subscribe({\n // \t\t\tnext: (contact) => {\n // \t\t\t\tconsole.log('watchContact =>', contact);\n // \t\t\t\tif (!contact) {\n // \t\t\t\t\treturn;\n // \t\t\t\t}\n // \t\t\t\tthis.contact = contact;\n // \t\t\t},\n // \t\t\terror: this.errorLogger.logErrorHandler('failed to get contact by ID'),\n // \t\t});\n // }\n\n // private trackContactId(): void {\n // \tconsole.log('ContactBasePage.trackContactId()');\n // \tthis.route.paramMap\n // \t\t.pipe(\n // \t\t\tthis.takeUntilNeeded(),\n // \t\t\tmap((params) => params.get('contactID')),\n // \t\t\tdistinctUntilChanged(),\n // \t\t)\n // \t\t.subscribe({\n // \t\t\tnext: (contactID) => {\n // \t\t\t\tconsole.log('trackContactId() =>', contactID, this.contact);\n // \t\t\t\tif (!contactID) {\n // \t\t\t\t\tthis.contact = undefined;\n // \t\t\t\t\treturn;\n // \t\t\t\t}\n // \t\t\t\tconst team = this.team;\n // \t\t\t\tthis.contact = {\n // \t\t\t\t\tid: contactID,\n // \t\t\t\t\tbrief: undefined,\n // \t\t\t\t\tdto: undefined,\n // \t\t\t\t\tteam,\n // \t\t\t\t};\n // \t\t\t\tthis.onContactIdChanged(contactID);\n // \t\t\t},\n // \t\t\terror: this.logErrorHandler(),\n // \t\t});\n // }\n}\n"],"names":[],"mappings":";;;;;AAaM,MAAgB,eAAgB,SAAQ,0BAG7C,CAAA;AAWsB,IAAA,cAAA;AAVF,IAAA,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE;AAClC,IAAA,UAAU,GAAG,IAAI,CAAC,OAAO;AAE5C,IAAA,IAAW,OAAO,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,QAAQ,EAAE;IACxB;AAEmB,IAAA,qBAAqB,GAAG,MAAM,CAAC,qBAAqB,CAAC;IAExE,WAAA,CACqB,cAA8B,EACjD,eAAA,GAA0C,UAAU,EAAA;AAEpD,QAAA,KAAK,CAAC,eAAe,EAAE,SAAS,EAAE,cAAc,CAAC;QAH9B,IAAA,CAAA,cAAc,GAAd,cAAc;IAInC;IAEmB,gBAAgB,GAAA;AACjC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE;QAC7B,IAAI,CAAC,MAAM,EAAE;YACX,OAAO,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;QAC1D;AACA,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK;QACxB,IAAI,CAAC,KAAK,EAAE;YACV,OAAO,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACvD;QACA,OAAO,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,KAAK,EAAE,MAAM,CAAC;;IAE5D;IAEmB,MAAM,GAAA;AACvB,QAAA,OAAO,SAAS;;IAElB;IAEmB,gBAAgB,GAAA;QACjC,KAAK,CAAC,gBAAgB,EAAE;QACxB,IAAI,CAAC,wBAAwB,EAAE;IACjC;IAEQ,wBAAwB,GAAA;AAC9B,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE,EAAE,EAAE;AAClB,YAAA,IAAI,CAAC;AACF,iBAAA,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;AAChC,iBAAA,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC;AAC/D,iBAAA,SAAS,CAAC;AACT,gBAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,oBAAA,OAAO,CAAC,GAAG,CACT,yCAAyC,EACzC,QAAQ,EACR,eAAe,EACf,IAAI,CAAC,OAAO,CACb;AACD,oBAAA,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE;AAC1C,wBAAA,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE;AACjC,wBAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC;wBACxD,IAAI,OAAO,EAAE;4BACX,OAAO,CAAC,GAAG,CACT,yCAAyC,EACzC,OAAO,CAAC,KAAK,CACd;AACD,4BAAA,IAAI,CAAC,cAAc,CAAC,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC;;;wBAGhE;oBACF;gBACF,CAAC;AACF,aAAA,CAAC;QACN;IACF;AAqDD;;;;"}
|
|
@@ -5,7 +5,7 @@ import { ContactsComponent } from '@sneat/extension-contactus-ui';
|
|
|
5
5
|
import { setHrefQueryParam } from '@sneat/core';
|
|
6
6
|
import { addSpace } from '@sneat/extension-contactus-contract';
|
|
7
7
|
import { SpaceItemsBaseComponent, SpacePageTitleComponent } from '@sneat/space-components';
|
|
8
|
-
import {
|
|
8
|
+
import { ContactusSpaceService, ContactusServicesModule } from './sneat-extension-contactus.mjs';
|
|
9
9
|
import { SpaceServiceModule } from '@sneat/space-services';
|
|
10
10
|
import { ClassName } from '@sneat/ui';
|
|
11
11
|
import { Subject } from 'rxjs';
|
|
@@ -115,4 +115,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
|
|
|
115
115
|
}], ctorParameters: () => [] });
|
|
116
116
|
|
|
117
117
|
export { ContactsPageComponent };
|
|
118
|
-
//# sourceMappingURL=sneat-extension-contactus-contacts-page.component-
|
|
118
|
+
//# sourceMappingURL=sneat-extension-contactus-contacts-page.component-dpcKveLW.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sneat-extension-contactus-contacts-page.component-BzTRhfPJ.mjs","sources":["../../../../../../libs/extensions/contactus/runtime/src/lib/pages/contacts/contacts-page.component.ts","../../../../../../libs/extensions/contactus/runtime/src/lib/pages/contacts/contacts-page.component.html"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n computed,\n OnDestroy,\n signal,\n inject,\n} from '@angular/core';\nimport {\n IonBackButton,\n IonButton,\n IonButtons,\n IonContent,\n IonFooter,\n IonHeader,\n IonIcon,\n IonLabel,\n IonMenuButton,\n IonTitle,\n IonToolbar,\n} from '@ionic/angular/standalone';\nimport {\n ContactsComponent,\n ContactsComponentCommand,\n ContactsComponentCommandName,\n} from '@sneat/extension-contactus-ui';\nimport { setHrefQueryParam } from '@sneat/core';\nimport {\n addSpace,\n ContactRole,\n IContactWithCheck,\n} from '@sneat/extension-contactus-contract';\nimport {\n SpacePageTitleComponent,\n SpaceItemsBaseComponent,\n} from '@sneat/space-components';\nimport {\n ContactusServicesModule,\n ContactusSpaceService,\n} from '../../services';\nimport { SpaceServiceModule } from '@sneat/space-services';\nimport { ClassName } from '@sneat/ui';\nimport { Subject } from 'rxjs';\n\n@Component({\n imports: [\n SpacePageTitleComponent,\n ContactusServicesModule,\n SpaceServiceModule,\n ContactsComponent,\n IonHeader,\n IonToolbar,\n IonButtons,\n IonBackButton,\n IonButtons,\n IonButton,\n IonBackButton,\n IonTitle,\n IonIcon,\n IonFooter,\n IonLabel,\n IonContent,\n IonMenuButton,\n ],\n providers: [{ provide: ClassName, useValue: 'ContactsPageComponent' }],\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'sneat-contacts-page',\n templateUrl: './contacts-page.component.html',\n})\nexport class ContactsPageComponent\n extends SpaceItemsBaseComponent\n implements OnDestroy\n{\n private readonly contactusSpaceService = inject(ContactusSpaceService);\n\n protected readonly $allContacts = signal<\n undefined | readonly IContactWithCheck[]\n >(undefined);\n\n // public readonly $filter = signal<string>('');\n public readonly $role = signal<ContactRole | undefined>(undefined);\n public readonly $group = signal<string | undefined>(undefined);\n\n protected $pageTitle = computed(() => {\n const role = this.$role();\n if (role) {\n return `${role.toUpperCase() + role.substr(1)}s`;\n }\n return 'Contacts';\n });\n\n protected readonly $selectedContacts = computed(() =>\n this.$allContacts()?.filter((c) => c.isChecked),\n );\n\n constructor() {\n super('');\n const role = location.pathname.match(/(applicant|landlord|tenant)/);\n if (role) {\n this.$role.set(role[1] as ContactRole);\n }\n\n // const allContacts = window.history.state.contacts as IContactWithSpace[];\n // if (allContacts) {\n // \tthis.$allContacts.set(allContacts);\n // }\n\n this.route.queryParamMap.pipe(this.takeUntilDestroyed()).subscribe({\n next: (q) => {\n this.$role.set((q.get('role') as ContactRole) || undefined);\n this.$group.set(q.get('group') || undefined);\n },\n });\n this.spaceIDChanged$.subscribe({\n next: (spaceID) => {\n if (!spaceID) {\n return;\n }\n this.contactusSpaceService\n .watchContactBriefs(this.space.id)\n .pipe(this.takeUntilDestroyed(), this.takeUntilSpaceIdChanged())\n .subscribe({\n next: (contacts) => {\n const space = this.$space();\n if (space.id !== spaceID) {\n return;\n }\n this.setSpaceContacts(contacts.map(addSpace(space)) || []);\n },\n });\n },\n });\n }\n\n protected $titleIcon = computed(() => {\n switch (this.$role()) {\n case 'tenant':\n return '🤠';\n case 'landlord':\n return '🤴';\n case 'applicant':\n return '🤔';\n default:\n return '📇';\n }\n });\n\n private readonly setSpaceContacts = (contacts: IContactWithCheck[]): void => {\n this.$allContacts.set(contacts);\n };\n\n protected onRoleChanged(role?: ContactRole): void {\n this.$role.set(role);\n const url = setHrefQueryParam('role', role || '');\n history.replaceState(undefined, document.title, url);\n }\n\n protected readonly command = new Subject<ContactsComponentCommand>();\n\n protected sendCommand(\n event: Event,\n name: ContactsComponentCommandName,\n ): void {\n this.command.next({ name, event });\n }\n\n public override ngOnDestroy(): void {\n this.command.complete();\n super.ngOnDestroy();\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]=\"$role() ? undefined : $space()\"\n [generalTitle]=\"$pageTitle()\"\n [icon]=\"$titleIcon()\"\n [titlesBySpaceType]=\"{\n personal: 'Personal contacts',\n family: 'Family contacts',\n }\"\n />\n <ion-buttons slot=\"end\">\n <ion-button\n color=\"primary\"\n size=\"small\"\n title=\"Add contact\"\n (click)=\"sendCommand($event, 'new_contact')\"\n >\n <ion-icon name=\"add\" slot=\"start\" />\n <ion-label>Add</ion-label>\n </ion-button>\n <ion-menu-button />\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n\n<ion-content class=\"cardy\">\n <sneat-contacts\n [$space]=\"$space()\"\n [$roleID]=\"$role()\"\n [$groupID]=\"$group()\"\n [$allContacts]=\"$allContacts()\"\n [command]=\"command.asObservable()\"\n (contactsChange)=\"$allContacts.set($event)\"\n (roleChange)=\"onRoleChanged($event)\"\n />\n <div style=\"height: 30px\"></div>\n</ion-content>\n\n@if ($selectedContacts()?.length; as numberOfSelectedContacts) {\n <ion-footer>\n <ion-toolbar color=\"light\">\n <ion-buttons slot=\"start\">\n <ion-button\n title=\"Reset\"\n (click)=\"sendCommand($event, 'reset_selected')\"\n >\n <ion-icon name=\"close-circle-outline\"></ion-icon>\n </ion-button>\n </ion-buttons>\n <ion-title>\n @if (numberOfSelectedContacts === 1) {\n {{ numberOfSelectedContacts }} contact selected\n } @else {\n {{ numberOfSelectedContacts }} contacts selected\n }\n </ion-title>\n <ion-buttons slot=\"end\">\n <ion-button color=\"success\">Share</ion-button>\n <ion-button color=\"warning\">Archive</ion-button>\n <!--\t\t\t\t<ion-button color=\"danger\">Delete</ion-button>-->\n </ion-buttons>\n </ion-toolbar>\n </ion-footer>\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sneat-extension-contactus-contacts-page.component-dpcKveLW.mjs","sources":["../../../../../../libs/extensions/contactus/runtime/src/lib/pages/contacts/contacts-page.component.ts","../../../../../../libs/extensions/contactus/runtime/src/lib/pages/contacts/contacts-page.component.html"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n computed,\n OnDestroy,\n signal,\n inject,\n} from '@angular/core';\nimport {\n IonBackButton,\n IonButton,\n IonButtons,\n IonContent,\n IonFooter,\n IonHeader,\n IonIcon,\n IonLabel,\n IonMenuButton,\n IonTitle,\n IonToolbar,\n} from '@ionic/angular/standalone';\nimport {\n ContactsComponent,\n ContactsComponentCommand,\n ContactsComponentCommandName,\n} from '@sneat/extension-contactus-ui';\nimport { setHrefQueryParam } from '@sneat/core';\nimport {\n addSpace,\n ContactRole,\n IContactWithCheck,\n} from '@sneat/extension-contactus-contract';\nimport {\n SpacePageTitleComponent,\n SpaceItemsBaseComponent,\n} from '@sneat/space-components';\nimport {\n ContactusServicesModule,\n ContactusSpaceService,\n} from '../../services';\nimport { SpaceServiceModule } from '@sneat/space-services';\nimport { ClassName } from '@sneat/ui';\nimport { Subject } from 'rxjs';\n\n@Component({\n imports: [\n SpacePageTitleComponent,\n ContactusServicesModule,\n SpaceServiceModule,\n ContactsComponent,\n IonHeader,\n IonToolbar,\n IonButtons,\n IonBackButton,\n IonButtons,\n IonButton,\n IonBackButton,\n IonTitle,\n IonIcon,\n IonFooter,\n IonLabel,\n IonContent,\n IonMenuButton,\n ],\n providers: [{ provide: ClassName, useValue: 'ContactsPageComponent' }],\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'sneat-contacts-page',\n templateUrl: './contacts-page.component.html',\n})\nexport class ContactsPageComponent\n extends SpaceItemsBaseComponent\n implements OnDestroy\n{\n private readonly contactusSpaceService = inject(ContactusSpaceService);\n\n protected readonly $allContacts = signal<\n undefined | readonly IContactWithCheck[]\n >(undefined);\n\n // public readonly $filter = signal<string>('');\n public readonly $role = signal<ContactRole | undefined>(undefined);\n public readonly $group = signal<string | undefined>(undefined);\n\n protected $pageTitle = computed(() => {\n const role = this.$role();\n if (role) {\n return `${role.toUpperCase() + role.substr(1)}s`;\n }\n return 'Contacts';\n });\n\n protected readonly $selectedContacts = computed(() =>\n this.$allContacts()?.filter((c) => c.isChecked),\n );\n\n constructor() {\n super('');\n const role = location.pathname.match(/(applicant|landlord|tenant)/);\n if (role) {\n this.$role.set(role[1] as ContactRole);\n }\n\n // const allContacts = window.history.state.contacts as IContactWithSpace[];\n // if (allContacts) {\n // \tthis.$allContacts.set(allContacts);\n // }\n\n this.route.queryParamMap.pipe(this.takeUntilDestroyed()).subscribe({\n next: (q) => {\n this.$role.set((q.get('role') as ContactRole) || undefined);\n this.$group.set(q.get('group') || undefined);\n },\n });\n this.spaceIDChanged$.subscribe({\n next: (spaceID) => {\n if (!spaceID) {\n return;\n }\n this.contactusSpaceService\n .watchContactBriefs(this.space.id)\n .pipe(this.takeUntilDestroyed(), this.takeUntilSpaceIdChanged())\n .subscribe({\n next: (contacts) => {\n const space = this.$space();\n if (space.id !== spaceID) {\n return;\n }\n this.setSpaceContacts(contacts.map(addSpace(space)) || []);\n },\n });\n },\n });\n }\n\n protected $titleIcon = computed(() => {\n switch (this.$role()) {\n case 'tenant':\n return '🤠';\n case 'landlord':\n return '🤴';\n case 'applicant':\n return '🤔';\n default:\n return '📇';\n }\n });\n\n private readonly setSpaceContacts = (contacts: IContactWithCheck[]): void => {\n this.$allContacts.set(contacts);\n };\n\n protected onRoleChanged(role?: ContactRole): void {\n this.$role.set(role);\n const url = setHrefQueryParam('role', role || '');\n history.replaceState(undefined, document.title, url);\n }\n\n protected readonly command = new Subject<ContactsComponentCommand>();\n\n protected sendCommand(\n event: Event,\n name: ContactsComponentCommandName,\n ): void {\n this.command.next({ name, event });\n }\n\n public override ngOnDestroy(): void {\n this.command.complete();\n super.ngOnDestroy();\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]=\"$role() ? undefined : $space()\"\n [generalTitle]=\"$pageTitle()\"\n [icon]=\"$titleIcon()\"\n [titlesBySpaceType]=\"{\n personal: 'Personal contacts',\n family: 'Family contacts',\n }\"\n />\n <ion-buttons slot=\"end\">\n <ion-button\n color=\"primary\"\n size=\"small\"\n title=\"Add contact\"\n (click)=\"sendCommand($event, 'new_contact')\"\n >\n <ion-icon name=\"add\" slot=\"start\" />\n <ion-label>Add</ion-label>\n </ion-button>\n <ion-menu-button />\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n\n<ion-content class=\"cardy\">\n <sneat-contacts\n [$space]=\"$space()\"\n [$roleID]=\"$role()\"\n [$groupID]=\"$group()\"\n [$allContacts]=\"$allContacts()\"\n [command]=\"command.asObservable()\"\n (contactsChange)=\"$allContacts.set($event)\"\n (roleChange)=\"onRoleChanged($event)\"\n />\n <div style=\"height: 30px\"></div>\n</ion-content>\n\n@if ($selectedContacts()?.length; as numberOfSelectedContacts) {\n <ion-footer>\n <ion-toolbar color=\"light\">\n <ion-buttons slot=\"start\">\n <ion-button\n title=\"Reset\"\n (click)=\"sendCommand($event, 'reset_selected')\"\n >\n <ion-icon name=\"close-circle-outline\"></ion-icon>\n </ion-button>\n </ion-buttons>\n <ion-title>\n @if (numberOfSelectedContacts === 1) {\n {{ numberOfSelectedContacts }} contact selected\n } @else {\n {{ numberOfSelectedContacts }} contacts selected\n }\n </ion-title>\n <ion-buttons slot=\"end\">\n <ion-button color=\"success\">Share</ion-button>\n <ion-button color=\"warning\">Archive</ion-button>\n <!--\t\t\t\t<ion-button color=\"danger\">Delete</ion-button>-->\n </ion-buttons>\n </ion-toolbar>\n </ion-footer>\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -3,11 +3,11 @@ import { inject, Component, signal, computed, effect, ChangeDetectionStrategy }
|
|
|
3
3
|
import { IonHeader, IonToolbar, IonButtons, IonBackButton, IonTitle, IonButton, IonIcon, IonMenuButton, IonContent, IonNav } from '@ionic/angular/standalone';
|
|
4
4
|
import { ContactDetailsComponent, PersonTitle, NewContactFormComponent, LocationFormComponent } from '@sneat/extension-contactus-ui';
|
|
5
5
|
import { SneatNavService, emptySpaceRef } from '@sneat/core';
|
|
6
|
-
import {
|
|
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-
|
|
10
|
-
export { ContactsPageComponent } from './sneat-extension-contactus-contacts-page.component-
|
|
9
|
+
import { C as ContactBasePage } from './sneat-extension-contactus-contact-base-page-DOV4aKLy.mjs';
|
|
10
|
+
export { ContactsPageComponent } from './sneat-extension-contactus-contacts-page.component-dpcKveLW.mjs';
|
|
11
11
|
import { FormsModule } from '@angular/forms';
|
|
12
12
|
import { BehaviorSubject } from 'rxjs';
|
|
13
13
|
import { SpaceBaseComponent, SpaceComponentBaseParams } from '@sneat/space-components';
|
|
@@ -269,4 +269,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
|
|
|
269
269
|
}], ctorParameters: () => [] });
|
|
270
270
|
|
|
271
271
|
export { ContactPageComponent, NewContactPageComponent, NewLocationPageComponent };
|
|
272
|
-
//# sourceMappingURL=sneat-extension-contactus-index
|
|
272
|
+
//# sourceMappingURL=sneat-extension-contactus-index--ZEjpmgM.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sneat-extension-contactus-index-weKgp-3B.mjs","sources":["../../../../../../libs/extensions/contactus/runtime/src/lib/pages/contact/contact-page.component.ts","../../../../../../libs/extensions/contactus/runtime/src/lib/pages/contact/contact-page.component.html","../../../../../../libs/extensions/contactus/runtime/src/lib/pages/new-contact/new-contact-page.component.ts","../../../../../../libs/extensions/contactus/runtime/src/lib/pages/new-contact/new-contact-page.component.html","../../../../../../libs/extensions/contactus/runtime/src/lib/pages/new-location/new-location-page.component.ts","../../../../../../libs/extensions/contactus/runtime/src/lib/pages/new-location/new-location-page.component.html"],"sourcesContent":["import { Component, inject } from '@angular/core';\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 { ISaveEvent } from '@sneat/components';\nimport { ContactDetailsComponent, PersonTitle } from '@sneat/extension-contactus-ui';\nimport { SneatNavService } from '@sneat/core';\nimport {\n IAddress,\n IContactRequest,\n IUpdateContactRequest,\n} from '@sneat/extension-contactus-contract';\nimport {\n ContactService,\n ContactusServicesModule,\n} from '../../services';\nimport { SpaceServiceModule } from '@sneat/space-services';\nimport { ClassName } from '@sneat/ui';\nimport { ContactBasePage } from '../contact-base-page';\n\n@Component({\n selector: 'sneat-contact-page',\n templateUrl: './contact-page.component.html',\n imports: [\n ContactDetailsComponent,\n ContactusServicesModule,\n SpaceServiceModule,\n PersonTitle,\n IonHeader,\n IonToolbar,\n IonButtons,\n IonBackButton,\n IonTitle,\n IonButton,\n IonIcon,\n IonMenuButton,\n IonContent,\n ],\n providers: [{ provide: ClassName, useValue: 'ContactPageComponent' }],\n})\nexport class ContactPageComponent extends ContactBasePage {\n private readonly contactsService = inject(ContactService);\n private readonly sneatNavService = inject(SneatNavService);\n\n protected segment: 'contact' | 'members' | 'assets' = 'contact';\n\n constructor() {\n super(inject(ContactService));\n this.defaultBackPage = 'contacts';\n }\n\n // TODO: use or remove\n private watchChildContacts(): void {\n const contactID = this.$contactID();\n if (!contactID) {\n return;\n }\n const space = this.space;\n if (!space) {\n return;\n }\n this.contactsService\n .watchChildContacts(space, contactID)\n .pipe(this.takeUntilDestroyed())\n .subscribe({\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n next: (_children) => {\n // Handle children if needed\n },\n error: this.errorLogger.logErrorHandler('failed to get child contacts'),\n });\n }\n\n // TODO: use or remove\n protected saveAddress(save: ISaveEvent<IAddress>): void {\n const spaceID = this.space?.id,\n contactID = this.$contactID(),\n address = save.object;\n\n if (!spaceID || !contactID || !address) {\n save.error('Can not save address without team and contact context');\n return;\n }\n\n const request: IUpdateContactRequest = {\n spaceID,\n contactID,\n address,\n };\n\n this.contactService.updateContact(request).subscribe({\n next: () => save.success(),\n error: save.error,\n });\n }\n\n protected deleteContact(): void {\n const contact = this.$contact();\n if (!contact) {\n return;\n }\n if (\n !confirm(\n `Are you sure you want to delete contact \"${contact.brief?.title}\"?`,\n )\n ) {\n return;\n }\n const request: IContactRequest = {\n spaceID: this.space.id,\n contactID: contact.id,\n };\n\n this.contactsService.deleteContact(request).subscribe({\n next: () => {\n this.sneatNavService.goBack(`/space/${this.space?.id}/contacts`);\n },\n error: this.errorLogger.logErrorHandler('failed to delete contact'),\n });\n }\n}\n","<ion-header>\n <ion-toolbar color=\"light\">\n <ion-buttons slot=\"start\">\n <ion-back-button [defaultHref]=\"$defaultBackUrl()\" />\n </ion-buttons>\n <ion-title>\n @if ($contact(); as contact) {\n {{ contact | personTitle }}\n } @else {\n Contact\n }\n </ion-title>\n <ion-buttons slot=\"end\">\n <ion-button\n title=\"Delete contact\"\n color=\"medium\"\n (click)=\"deleteContact()\"\n >\n <ion-icon name=\"trash\" slot=\"start\" />\n </ion-button>\n <ion-menu-button />\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n\n<ion-content>\n <sneat-contact-details [$contact]=\"$contact()\" [$space]=\"$space()\" />\n</ion-content>\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n OnInit,\n signal,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ParamMap } from '@angular/router';\nimport {\n IonBackButton,\n IonButtons,\n IonContent,\n IonHeader,\n IonNav,\n IonTitle,\n IonToolbar,\n} from '@ionic/angular/standalone';\nimport { ContactusServicesModule } from '../../services';\nimport {\n IContactAddEventArgs,\n OptionalContactGroupIdAndBrief,\n OptionalContactRoleIdAndBrief,\n NewContactFormComponent,\n} from '@sneat/extension-contactus-ui';\nimport {\n ContactGroupWithIdAndBrief,\n ContactIdAndDboWithSpaceRef,\n ContactRole,\n ContactToContactRelation,\n IContactRoleWithIdAndBrief,\n NewContactBaseDboAndSpaceRef,\n} from '@sneat/extension-contactus-contract';\nimport { BehaviorSubject } from 'rxjs';\nimport { emptySpaceRef } from '@sneat/core';\nimport {\n SpaceBaseComponent,\n SpaceComponentBaseParams,\n} from '@sneat/space-components';\nimport type { IAssetContext } from '@sneat/extension-assetus-contract';\nimport { SpaceServiceModule } from '@sneat/space-services';\nimport { ClassName } from '@sneat/ui';\n\n@Component({\n imports: [\n FormsModule,\n SpaceServiceModule,\n ContactusServicesModule,\n IonNav,\n IonHeader,\n IonToolbar,\n IonButtons,\n IonBackButton,\n IonTitle,\n IonContent,\n NewContactFormComponent,\n ],\n providers: [\n SpaceComponentBaseParams,\n { provide: ClassName, useValue: 'NewContactPageComponent' },\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'sneat-new-contact-page',\n templateUrl: './new-contact-page.component.html',\n})\nexport class NewContactPageComponent\n extends SpaceBaseComponent\n implements OnInit\n{\n // @ViewChild('nameInput', { static: true }) nameInput?: IonInput;\n\n // TODO: relationship is not implemented yet\n protected $relation = signal<ContactToContactRelation | undefined>(undefined);\n\n public readonly $contact = signal<NewContactBaseDboAndSpaceRef>({\n space: emptySpaceRef,\n dbo: {\n type: 'person',\n gender: 'unknown', // Undefined would indicate \"loading\" and gender form would be disabled.\n },\n } as ContactIdAndDboWithSpaceRef);\n\n protected readonly $contactGroupID = signal<string>('');\n protected readonly $contactRoleID = signal<ContactRole | undefined>(\n undefined,\n );\n\n // Feeds the preselected group/role (from URL query params) into the contact\n // form so the wizard can skip the group/role steps the user already chose.\n // BehaviorSubject replays the latest value to the form when it subscribes.\n protected readonly selectGroupAndRole$ = new BehaviorSubject<\n IContactAddEventArgs | undefined\n >(undefined);\n protected readonly $assetID = signal<string>('');\n\n protected readonly $contactRole =\n signal<OptionalContactRoleIdAndBrief>(undefined);\n protected readonly $contactGroup =\n signal<OptionalContactGroupIdAndBrief>(undefined);\n\n protected readonly $parentContactID = signal<string>('');\n\n protected readonly $title = computed(() => {\n const contactRoleBrief = this.$contactRole()?.brief;\n return contactRoleBrief\n ? `${contactRoleBrief.emoji} New ${contactRoleBrief.title.toLowerCase()}`\n : 'New contact';\n });\n\n protected readonly $asset = signal<IAssetContext | undefined>(undefined);\n\n constructor() {\n super();\n this.defaultBackPage = 'contacts';\n this.$asset.set(window.history.state?.asset as IAssetContext);\n\n // The contact's space drives the create request's spaceID. $contact starts\n // with emptySpaceRef, so fill it once the route's space is loaded; otherwise\n // createContact fails backend validation (\"missing required field spaceID\").\n effect(() => {\n const space = this.$space();\n if (space?.id) {\n this.$contact.update((c) =>\n c.space?.id === space.id ? c : { ...c, space },\n );\n }\n });\n }\n\n // onContactTypeChanged(v: ContactRole): void {\n //\n // }\n\n override ngOnInit(): void {\n super.ngOnInit();\n this.route.queryParamMap\n .pipe(this.takeUntilDestroyed())\n .subscribe(this.onUrlParamsChanged);\n }\n\n private readonly onUrlParamsChanged = (params: ParamMap): void => {\n const relation = params.get('relation');\n if (relation) {\n this.$relation.set(relation as ContactToContactRelation);\n }\n const contactGroupID = params.get('group');\n if (contactGroupID && contactGroupID !== this.$contactGroupID()) {\n this.$contactGroupID.set(contactGroupID);\n }\n const contactRole = params.get('role');\n\n if (contactRole && !this.$contactRole()) {\n this.$contactRoleID.set(contactRole as ContactRole);\n }\n\n const space = this.space;\n if (!space) {\n throw new Error('Space is not defined');\n }\n\n const assetId = params.get('asset');\n if (assetId && assetId !== this.$assetID()) {\n this.$assetID.set(assetId);\n }\n const parentContactID = params.get('contact');\n if (parentContactID && this.$parentContactID() !== parentContactID) {\n this.$parentContactID.set(parentContactID);\n }\n\n // Preselect group/role in the form. The form's handler only reads `.id`\n // (it self-loads the brief by ID), so a minimal id-only object is enough;\n // the cast satisfies the brief-required event-args type. `event` is unused\n // by the handler but required by the type.\n if (contactGroupID || contactRole) {\n this.selectGroupAndRole$.next({\n event: new Event('preselect'),\n group: contactGroupID\n ? ({ id: contactGroupID } as ContactGroupWithIdAndBrief)\n : undefined,\n role: contactRole\n ? ({ id: contactRole } as IContactRoleWithIdAndBrief)\n : undefined,\n });\n }\n };\n\n protected onContactChanged(contact: NewContactBaseDboAndSpaceRef): void {\n // console.log('onContactChanged', contact);\n this.$contact.set(contact);\n }\n}\n","<ion-nav />\n\n<ion-header>\n <ion-toolbar color=\"light\" class=\"with-back-button\">\n <ion-buttons slot=\"start\">\n <ion-back-button [defaultHref]=\"$defaultBackUrl()\" />\n </ion-buttons>\n <ion-title>{{ $title() }}</ion-title>\n </ion-toolbar>\n</ion-header>\n\n<ion-content>\n <sneat-new-contact-form\n [$space]=\"$space()\"\n [$contact]=\"$contact()\"\n [selectGroupAndRole$]=\"selectGroupAndRole$\"\n (contactChange)=\"onContactChanged($event)\"\n />\n <!--\t<sneat-new-person-form-->\n <!--\t\t[$fixedGroupID]=\"$contactGroupID()\"-->\n <!--\t\t[$fixedRoleID]=\"$contactRoleID()\"-->\n <!--\t\t[$parentContactID]=\"$parentContactID()\"-->\n <!--\t\t(contactRoleChange)=\"$contactRole.set($event)\"-->\n <!--\t\t(contactGroupChange)=\"$contactGroup.set($event)\"-->\n <!--\t\t(contactChange)=\"$contact.set($event)\"-->\n <!--\t/>-->\n</ion-content>\n","import { Component, inject } from '@angular/core';\nimport {\n IonBackButton,\n IonContent,\n IonHeader,\n IonTitle,\n IonToolbar,\n} from '@ionic/angular/standalone';\nimport { PersonTitle } from '@sneat/extension-contactus-ui';\nimport { ContactService } from '../../services';\nimport { LocationFormComponent } from '@sneat/extension-contactus-ui';\nimport { IContactWithOptionalDbo } from '@sneat/extension-contactus-contract';\nimport { ClassName } from '@sneat/ui';\nimport { ContactBasePage } from '../contact-base-page';\n\n@Component({\n selector: 'sneat-new-location-page',\n templateUrl: './new-location-page.component.html',\n imports: [\n LocationFormComponent,\n PersonTitle,\n IonHeader,\n IonToolbar,\n IonBackButton,\n IonTitle,\n IonContent,\n ],\n providers: [{ provide: ClassName, useValue: 'NewLocationPageComponent' }],\n})\nexport class NewLocationPageComponent extends ContactBasePage {\n newLocation: IContactWithOptionalDbo = {\n id: '',\n brief: { type: 'location' },\n // space: this.space,\n };\n\n public constructor() {\n super(inject(ContactService));\n }\n\n protected override onSpaceDboChanged() {\n super.onSpaceDboChanged();\n // if (this.team?.dto?.countryID && !this.newLocationDto.countryID) {\n // \tthis.newLocationDto = { ...this.newLocationDto, countryID: this.team.dto.countryID };\n // }\n }\n\n onLocationChanged(contact: IContactWithOptionalDbo): void {\n this.newLocation = contact;\n }\n\n onContactCreated(contact: IContactWithOptionalDbo): void {\n this.newLocation = contact;\n const space = this.space;\n if (!space) {\n throw new Error('Space is not defined');\n }\n const url = this.spacePageUrl(`contact/${this.$contactID()}`);\n if (url) {\n this.navController\n .navigateBack(url)\n .catch(\n this.errorLogger.logErrorHandler('failed navigate to parent contact'),\n );\n }\n }\n}\n","<ion-header>\n <ion-toolbar color=\"light\">\n <ion-back-button\n slot=\"start\"\n [defaultHref]=\"spacePageUrl('contact/{{contact?.id}}')\"\n />\n <ion-title>\n @if ($contact(); as contact) {\n New location @ {{ contact | personTitle }}\n } @else {\n New location\n }\n </ion-title>\n </ion-toolbar>\n</ion-header>\n\n<ion-content>\n <sneat-location-form\n [$space]=\"$space()\"\n [parentContact]=\"$contact()\"\n [location]=\"newLocation\"\n (locationChange)=\"onLocationChanged($event)\"\n (locationCreated)=\"onContactCreated($event)\"\n />\n</ion-content>\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sneat-extension-contactus-index--ZEjpmgM.mjs","sources":["../../../../../../libs/extensions/contactus/runtime/src/lib/pages/contact/contact-page.component.ts","../../../../../../libs/extensions/contactus/runtime/src/lib/pages/contact/contact-page.component.html","../../../../../../libs/extensions/contactus/runtime/src/lib/pages/new-contact/new-contact-page.component.ts","../../../../../../libs/extensions/contactus/runtime/src/lib/pages/new-contact/new-contact-page.component.html","../../../../../../libs/extensions/contactus/runtime/src/lib/pages/new-location/new-location-page.component.ts","../../../../../../libs/extensions/contactus/runtime/src/lib/pages/new-location/new-location-page.component.html"],"sourcesContent":["import { Component, inject } from '@angular/core';\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 { ISaveEvent } from '@sneat/components';\nimport { ContactDetailsComponent, PersonTitle } from '@sneat/extension-contactus-ui';\nimport { SneatNavService } from '@sneat/core';\nimport {\n IAddress,\n IContactRequest,\n IUpdateContactRequest,\n} from '@sneat/extension-contactus-contract';\nimport {\n ContactService,\n ContactusServicesModule,\n} from '../../services';\nimport { SpaceServiceModule } from '@sneat/space-services';\nimport { ClassName } from '@sneat/ui';\nimport { ContactBasePage } from '../contact-base-page';\n\n@Component({\n selector: 'sneat-contact-page',\n templateUrl: './contact-page.component.html',\n imports: [\n ContactDetailsComponent,\n ContactusServicesModule,\n SpaceServiceModule,\n PersonTitle,\n IonHeader,\n IonToolbar,\n IonButtons,\n IonBackButton,\n IonTitle,\n IonButton,\n IonIcon,\n IonMenuButton,\n IonContent,\n ],\n providers: [{ provide: ClassName, useValue: 'ContactPageComponent' }],\n})\nexport class ContactPageComponent extends ContactBasePage {\n private readonly contactsService = inject(ContactService);\n private readonly sneatNavService = inject(SneatNavService);\n\n protected segment: 'contact' | 'members' | 'assets' = 'contact';\n\n constructor() {\n super(inject(ContactService));\n this.defaultBackPage = 'contacts';\n }\n\n // TODO: use or remove\n private watchChildContacts(): void {\n const contactID = this.$contactID();\n if (!contactID) {\n return;\n }\n const space = this.space;\n if (!space) {\n return;\n }\n this.contactsService\n .watchChildContacts(space, contactID)\n .pipe(this.takeUntilDestroyed())\n .subscribe({\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n next: (_children) => {\n // Handle children if needed\n },\n error: this.errorLogger.logErrorHandler('failed to get child contacts'),\n });\n }\n\n // TODO: use or remove\n protected saveAddress(save: ISaveEvent<IAddress>): void {\n const spaceID = this.space?.id,\n contactID = this.$contactID(),\n address = save.object;\n\n if (!spaceID || !contactID || !address) {\n save.error('Can not save address without team and contact context');\n return;\n }\n\n const request: IUpdateContactRequest = {\n spaceID,\n contactID,\n address,\n };\n\n this.contactService.updateContact(request).subscribe({\n next: () => save.success(),\n error: save.error,\n });\n }\n\n protected deleteContact(): void {\n const contact = this.$contact();\n if (!contact) {\n return;\n }\n if (\n !confirm(\n `Are you sure you want to delete contact \"${contact.brief?.title}\"?`,\n )\n ) {\n return;\n }\n const request: IContactRequest = {\n spaceID: this.space.id,\n contactID: contact.id,\n };\n\n this.contactsService.deleteContact(request).subscribe({\n next: () => {\n this.sneatNavService.goBack(`/space/${this.space?.id}/contacts`);\n },\n error: this.errorLogger.logErrorHandler('failed to delete contact'),\n });\n }\n}\n","<ion-header>\n <ion-toolbar color=\"light\">\n <ion-buttons slot=\"start\">\n <ion-back-button [defaultHref]=\"$defaultBackUrl()\" />\n </ion-buttons>\n <ion-title>\n @if ($contact(); as contact) {\n {{ contact | personTitle }}\n } @else {\n Contact\n }\n </ion-title>\n <ion-buttons slot=\"end\">\n <ion-button\n title=\"Delete contact\"\n color=\"medium\"\n (click)=\"deleteContact()\"\n >\n <ion-icon name=\"trash\" slot=\"start\" />\n </ion-button>\n <ion-menu-button />\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n\n<ion-content>\n <sneat-contact-details [$contact]=\"$contact()\" [$space]=\"$space()\" />\n</ion-content>\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n OnInit,\n signal,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ParamMap } from '@angular/router';\nimport {\n IonBackButton,\n IonButtons,\n IonContent,\n IonHeader,\n IonNav,\n IonTitle,\n IonToolbar,\n} from '@ionic/angular/standalone';\nimport { ContactusServicesModule } from '../../services';\nimport {\n IContactAddEventArgs,\n OptionalContactGroupIdAndBrief,\n OptionalContactRoleIdAndBrief,\n NewContactFormComponent,\n} from '@sneat/extension-contactus-ui';\nimport {\n ContactGroupWithIdAndBrief,\n ContactIdAndDboWithSpaceRef,\n ContactRole,\n ContactToContactRelation,\n IContactRoleWithIdAndBrief,\n NewContactBaseDboAndSpaceRef,\n} from '@sneat/extension-contactus-contract';\nimport { BehaviorSubject } from 'rxjs';\nimport { emptySpaceRef } from '@sneat/core';\nimport {\n SpaceBaseComponent,\n SpaceComponentBaseParams,\n} from '@sneat/space-components';\nimport type { IAssetContext } from '@sneat/extension-assetus-contract';\nimport { SpaceServiceModule } from '@sneat/space-services';\nimport { ClassName } from '@sneat/ui';\n\n@Component({\n imports: [\n FormsModule,\n SpaceServiceModule,\n ContactusServicesModule,\n IonNav,\n IonHeader,\n IonToolbar,\n IonButtons,\n IonBackButton,\n IonTitle,\n IonContent,\n NewContactFormComponent,\n ],\n providers: [\n SpaceComponentBaseParams,\n { provide: ClassName, useValue: 'NewContactPageComponent' },\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'sneat-new-contact-page',\n templateUrl: './new-contact-page.component.html',\n})\nexport class NewContactPageComponent\n extends SpaceBaseComponent\n implements OnInit\n{\n // @ViewChild('nameInput', { static: true }) nameInput?: IonInput;\n\n // TODO: relationship is not implemented yet\n protected $relation = signal<ContactToContactRelation | undefined>(undefined);\n\n public readonly $contact = signal<NewContactBaseDboAndSpaceRef>({\n space: emptySpaceRef,\n dbo: {\n type: 'person',\n gender: 'unknown', // Undefined would indicate \"loading\" and gender form would be disabled.\n },\n } as ContactIdAndDboWithSpaceRef);\n\n protected readonly $contactGroupID = signal<string>('');\n protected readonly $contactRoleID = signal<ContactRole | undefined>(\n undefined,\n );\n\n // Feeds the preselected group/role (from URL query params) into the contact\n // form so the wizard can skip the group/role steps the user already chose.\n // BehaviorSubject replays the latest value to the form when it subscribes.\n protected readonly selectGroupAndRole$ = new BehaviorSubject<\n IContactAddEventArgs | undefined\n >(undefined);\n protected readonly $assetID = signal<string>('');\n\n protected readonly $contactRole =\n signal<OptionalContactRoleIdAndBrief>(undefined);\n protected readonly $contactGroup =\n signal<OptionalContactGroupIdAndBrief>(undefined);\n\n protected readonly $parentContactID = signal<string>('');\n\n protected readonly $title = computed(() => {\n const contactRoleBrief = this.$contactRole()?.brief;\n return contactRoleBrief\n ? `${contactRoleBrief.emoji} New ${contactRoleBrief.title.toLowerCase()}`\n : 'New contact';\n });\n\n protected readonly $asset = signal<IAssetContext | undefined>(undefined);\n\n constructor() {\n super();\n this.defaultBackPage = 'contacts';\n this.$asset.set(window.history.state?.asset as IAssetContext);\n\n // The contact's space drives the create request's spaceID. $contact starts\n // with emptySpaceRef, so fill it once the route's space is loaded; otherwise\n // createContact fails backend validation (\"missing required field spaceID\").\n effect(() => {\n const space = this.$space();\n if (space?.id) {\n this.$contact.update((c) =>\n c.space?.id === space.id ? c : { ...c, space },\n );\n }\n });\n }\n\n // onContactTypeChanged(v: ContactRole): void {\n //\n // }\n\n override ngOnInit(): void {\n super.ngOnInit();\n this.route.queryParamMap\n .pipe(this.takeUntilDestroyed())\n .subscribe(this.onUrlParamsChanged);\n }\n\n private readonly onUrlParamsChanged = (params: ParamMap): void => {\n const relation = params.get('relation');\n if (relation) {\n this.$relation.set(relation as ContactToContactRelation);\n }\n const contactGroupID = params.get('group');\n if (contactGroupID && contactGroupID !== this.$contactGroupID()) {\n this.$contactGroupID.set(contactGroupID);\n }\n const contactRole = params.get('role');\n\n if (contactRole && !this.$contactRole()) {\n this.$contactRoleID.set(contactRole as ContactRole);\n }\n\n const space = this.space;\n if (!space) {\n throw new Error('Space is not defined');\n }\n\n const assetId = params.get('asset');\n if (assetId && assetId !== this.$assetID()) {\n this.$assetID.set(assetId);\n }\n const parentContactID = params.get('contact');\n if (parentContactID && this.$parentContactID() !== parentContactID) {\n this.$parentContactID.set(parentContactID);\n }\n\n // Preselect group/role in the form. The form's handler only reads `.id`\n // (it self-loads the brief by ID), so a minimal id-only object is enough;\n // the cast satisfies the brief-required event-args type. `event` is unused\n // by the handler but required by the type.\n if (contactGroupID || contactRole) {\n this.selectGroupAndRole$.next({\n event: new Event('preselect'),\n group: contactGroupID\n ? ({ id: contactGroupID } as ContactGroupWithIdAndBrief)\n : undefined,\n role: contactRole\n ? ({ id: contactRole } as IContactRoleWithIdAndBrief)\n : undefined,\n });\n }\n };\n\n protected onContactChanged(contact: NewContactBaseDboAndSpaceRef): void {\n // console.log('onContactChanged', contact);\n this.$contact.set(contact);\n }\n}\n","<ion-nav />\n\n<ion-header>\n <ion-toolbar color=\"light\" class=\"with-back-button\">\n <ion-buttons slot=\"start\">\n <ion-back-button [defaultHref]=\"$defaultBackUrl()\" />\n </ion-buttons>\n <ion-title>{{ $title() }}</ion-title>\n </ion-toolbar>\n</ion-header>\n\n<ion-content>\n <sneat-new-contact-form\n [$space]=\"$space()\"\n [$contact]=\"$contact()\"\n [selectGroupAndRole$]=\"selectGroupAndRole$\"\n (contactChange)=\"onContactChanged($event)\"\n />\n <!--\t<sneat-new-person-form-->\n <!--\t\t[$fixedGroupID]=\"$contactGroupID()\"-->\n <!--\t\t[$fixedRoleID]=\"$contactRoleID()\"-->\n <!--\t\t[$parentContactID]=\"$parentContactID()\"-->\n <!--\t\t(contactRoleChange)=\"$contactRole.set($event)\"-->\n <!--\t\t(contactGroupChange)=\"$contactGroup.set($event)\"-->\n <!--\t\t(contactChange)=\"$contact.set($event)\"-->\n <!--\t/>-->\n</ion-content>\n","import { Component, inject } from '@angular/core';\nimport {\n IonBackButton,\n IonContent,\n IonHeader,\n IonTitle,\n IonToolbar,\n} from '@ionic/angular/standalone';\nimport { PersonTitle } from '@sneat/extension-contactus-ui';\nimport { ContactService } from '../../services';\nimport { LocationFormComponent } from '@sneat/extension-contactus-ui';\nimport { IContactWithOptionalDbo } from '@sneat/extension-contactus-contract';\nimport { ClassName } from '@sneat/ui';\nimport { ContactBasePage } from '../contact-base-page';\n\n@Component({\n selector: 'sneat-new-location-page',\n templateUrl: './new-location-page.component.html',\n imports: [\n LocationFormComponent,\n PersonTitle,\n IonHeader,\n IonToolbar,\n IonBackButton,\n IonTitle,\n IonContent,\n ],\n providers: [{ provide: ClassName, useValue: 'NewLocationPageComponent' }],\n})\nexport class NewLocationPageComponent extends ContactBasePage {\n newLocation: IContactWithOptionalDbo = {\n id: '',\n brief: { type: 'location' },\n // space: this.space,\n };\n\n public constructor() {\n super(inject(ContactService));\n }\n\n protected override onSpaceDboChanged() {\n super.onSpaceDboChanged();\n // if (this.team?.dto?.countryID && !this.newLocationDto.countryID) {\n // \tthis.newLocationDto = { ...this.newLocationDto, countryID: this.team.dto.countryID };\n // }\n }\n\n onLocationChanged(contact: IContactWithOptionalDbo): void {\n this.newLocation = contact;\n }\n\n onContactCreated(contact: IContactWithOptionalDbo): void {\n this.newLocation = contact;\n const space = this.space;\n if (!space) {\n throw new Error('Space is not defined');\n }\n const url = this.spacePageUrl(`contact/${this.$contactID()}`);\n if (url) {\n this.navController\n .navigateBack(url)\n .catch(\n this.errorLogger.logErrorHandler('failed navigate to parent contact'),\n );\n }\n }\n}\n","<ion-header>\n <ion-toolbar color=\"light\">\n <ion-back-button\n slot=\"start\"\n [defaultHref]=\"spacePageUrl('contact/{{contact?.id}}')\"\n />\n <ion-title>\n @if ($contact(); as contact) {\n New location @ {{ contact | personTitle }}\n } @else {\n New location\n }\n </ion-title>\n </ion-toolbar>\n</ion-header>\n\n<ion-content>\n <sneat-location-form\n [$space]=\"$space()\"\n [parentContact]=\"$contact()\"\n [location]=\"newLocation\"\n (locationChange)=\"onLocationChanged($event)\"\n (locationCreated)=\"onContactCreated($event)\"\n />\n</ion-content>\n"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import { inject, signal, computed, ViewChild, ChangeDetectionStrategy, Component, effect } from '@angular/core';
|
|
3
3
|
import { NavController, IonCard, IonCardContent, IonCardHeader, IonCardTitle, IonCardSubtitle, IonButton, IonSpinner, IonLabel, IonRow, IonGrid, IonCol, IonContent, IonSegment, IonSegmentButton, IonHeader, IonToolbar, IonButtons, IonBackButton, IonTitle } from '@ionic/angular/standalone';
|
|
4
|
-
import {
|
|
4
|
+
import { MemberService, ContactusSpaceContextService, ContactusServicesModule } from './sneat-extension-contactus.mjs';
|
|
5
5
|
import { WithNewContactInput, PersonWizardComponent, InviteLinksComponent, NewPetFormComponent } from '@sneat/extension-contactus-ui';
|
|
6
6
|
import { isRelatedPersonReady, RoleSpaceMember } from '@sneat/extension-contactus-contract';
|
|
7
7
|
import { SpacePageBaseComponent } from '@sneat/space-components';
|
|
@@ -349,4 +349,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
|
|
|
349
349
|
}], ctorParameters: () => [] });
|
|
350
350
|
|
|
351
351
|
export { NewMemberPageComponent };
|
|
352
|
-
//# sourceMappingURL=sneat-extension-contactus-index-
|
|
352
|
+
//# sourceMappingURL=sneat-extension-contactus-index-1vVX7Aa3.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sneat-extension-contactus-index-DVC9hDgV.mjs","sources":["../../../../../../libs/extensions/contactus/runtime/src/lib/members/pages/new-member/new-member-form.component.ts","../../../../../../libs/extensions/contactus/runtime/src/lib/members/pages/new-member/new-member-form.component.html","../../../../../../libs/extensions/contactus/runtime/src/lib/members/pages/new-member/new-member-page.component.ts","../../../../../../libs/extensions/contactus/runtime/src/lib/members/pages/new-member/new-member-page.component.html"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n OnChanges,\n signal,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport {\n FormsModule,\n ReactiveFormsModule,\n UntypedFormGroup,\n} from '@angular/forms';\nimport {\n IonButton,\n IonCard,\n IonCardContent,\n IonCardHeader,\n IonCardSubtitle,\n IonCardTitle,\n IonCol,\n IonGrid,\n IonLabel,\n IonRow,\n IonSpinner,\n NavController,\n} from '@ionic/angular/standalone';\nimport { namesToUrlParams } from '@sneat/auth-models';\nimport { MemberService } from '../../../services';\nimport { PersonWizardComponent } from '@sneat/extension-contactus-ui';\nimport { formNexInAnimation } from '@sneat/core';\nimport { personNames } from '@sneat/auth-ui';\nimport { RoutingState } from '@sneat/core';\nimport {\n IContactusSpaceDboAndID,\n ICreateSpaceMemberRequest,\n IPersonRequirements,\n isRelatedPersonReady,\n MemberContactType,\n NewContactBaseDboAndSpaceRef,\n} from '@sneat/extension-contactus-contract';\nimport { zipMapBriefsWithIDs } from '@sneat/space-models';\nimport { QRCodeComponent } from 'angularx-qrcode';\nimport { WithNewContactInput } from '@sneat/extension-contactus-ui';\nimport { ClassName } from '@sneat/ui';\n\n@Component({\n animations: [formNexInAnimation],\n imports: [\n FormsModule,\n ReactiveFormsModule,\n PersonWizardComponent,\n IonCard,\n IonCardContent,\n IonCardHeader,\n IonCardTitle,\n IonCardSubtitle,\n QRCodeComponent,\n IonButton,\n IonSpinner,\n IonLabel,\n IonRow,\n IonGrid,\n IonCol,\n ],\n providers: [{ provide: ClassName, useValue: 'NewMemberFormComponent' }],\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'sneat-new-member-form',\n templateUrl: 'new-member-form.component.html',\n})\nexport class NewMemberFormComponent\n extends WithNewContactInput\n implements OnChanges\n{\n public personRequirements: IPersonRequirements = {\n ageGroup: { required: true },\n gender: { required: true },\n };\n\n private readonly navController = inject(NavController);\n\n private readonly hasNavHistory: boolean;\n protected readonly $isSubmitting = signal(false);\n\n protected readonly $canSubmit = computed(\n () =>\n this.$spaceRef().id &&\n !this.$isSubmitting() &&\n this.$isContactReady() &&\n !this.addMemberForm.disabled && //TODO(check) Could be a problem with Push detection strategy?\n this.addMemberForm.valid,\n );\n\n protected readonly $qrData = computed(() => {\n const contact = this.$contact();\n let url = `https://sneat.app/pwa/join?family=${contact.space.id}`;\n const { gender, ageGroup } = contact.dbo;\n if (\n gender &&\n gender !== 'unknown' &&\n gender !== 'undisclosed' &&\n gender !== 'other'\n ) {\n url += '&gender=' + gender;\n }\n if (ageGroup) {\n url += '&ageGroup=' + ageGroup;\n }\n url += namesToUrlParams(contact.dbo.names);\n url += '&utm_source=sneat.app&utm_medium=qr_code&utm_campaign=new_member';\n return url;\n });\n\n protected contactusSpace?: IContactusSpaceDboAndID;\n\n protected readonly $isContactReady = computed(() => {\n const contact = this.$contact();\n return (\n contact && isRelatedPersonReady(contact.dbo, this.personRequirements)\n );\n });\n\n @ViewChild(PersonWizardComponent, { static: false })\n personFormComponent?: PersonWizardComponent;\n // @ViewChild('emailInput', { static: false }) emailInput?: IonInput;\n // @ViewChild('genderFirstInput', { static: false }) genderFirstInput?: IonRadio;\n\n // public get isPersonFormReady(): boolean {\n // \treturn isRelatedPersonNotReady(this.member, this.personRequirements);\n // }\n //\n // public readonly setFocusToInput = createSetFocusToInput(\n // \tthis.params.errorLogger,\n // );\n\n // public readonly memberType = new FormControl<TeamMemberType>('member', [\n // \tValidators.required,\n // ]);\n\n public addMemberForm = new UntypedFormGroup({\n // email: this.email,\n // phone: this.phone,\n // ageGroup: this.ageGroup,\n // relationship: this.relationship,\n });\n\n private readonly memberService = inject(MemberService);\n\n public constructor() {\n super();\n const routingState = inject(RoutingState);\n this.hasNavHistory = routingState.hasHistory();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['$space']) {\n this.setPersonRequirements(this.$contact());\n }\n }\n\n private setPersonRequirements(contact: NewContactBaseDboAndSpaceRef): void {\n const spaceRef = this.$spaceRef();\n this.personRequirements = {\n // TODO: Should we move it inside person form wizard?\n ...this.personRequirements,\n ageGroup:\n spaceRef.type === 'family' && contact.dbo.type !== 'animal'\n ? { required: true }\n : { hide: true },\n roles:\n spaceRef.type === 'family' && contact.dbo.type !== 'animal'\n ? { hide: true }\n : { required: true },\n relatedAs:\n spaceRef.type === 'family' && contact.dbo.type !== 'animal'\n ? { required: true }\n : { hide: true },\n };\n }\n\n submit(): void {\n // if (!this.hasNames) {\n // \talert('Please enter first or last or full name of the new member');\n // \tif (!this.firstName.value && !this.lastName.value) {\n // \t\tthis.setFocusToInput(this.firstNameInput);\n // \t} else {\n // \t\tthis.setFocusToInput(this.fullNameInput);\n // \t}\n // \treturn;\n // }\n if (!this.personFormComponent) {\n throw '!this.personFormComponent';\n }\n const spaceRef = this.$spaceRef();\n const contact = this.$contact();\n if (!spaceRef?.id) {\n this.errorLogger.logError(\n 'not able to add new member without space context',\n );\n return;\n }\n if (!contact) {\n this.errorLogger.logError('member field is undefined');\n return;\n }\n if (this.personRequirements.ageGroup?.required && !contact.dbo.ageGroup) {\n throw new Error('Age group is a required field');\n }\n if (this.personRequirements.gender?.required && !contact.dbo.gender) {\n throw new Error('Gender is a required field');\n }\n const displayName = personNames(contact.dbo.names);\n const duplicateMember = zipMapBriefsWithIDs(\n this.contactusSpace?.dbo?.contacts,\n )?.find((m) => personNames(m.brief.names) === displayName);\n if (duplicateMember) {\n alert('There is already a member with same name: ' + displayName);\n return;\n }\n\n const request: ICreateSpaceMemberRequest = {\n ...contact.dbo,\n type: contact.dbo.type as MemberContactType,\n status: 'active',\n countryID: '--',\n roles: ['contributor'],\n spaceID: spaceRef.id,\n };\n\n this.$isSubmitting.set(true);\n this.addMemberForm.disable();\n this.memberService.createMember(request).subscribe({\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n next: (_member) => {\n // console.log('member created:', member);\n if (this.hasNavHistory) {\n this.navController\n .pop()\n .catch(\n this.errorLogger.logErrorHandler(\n 'failed to navigate to prev page',\n ),\n );\n } else {\n this.spaceNavService\n .navigateBackToSpacePage(spaceRef, 'members')\n .catch(\n this.errorLogger.logErrorHandler(\n 'failed to navigate back to members page',\n ),\n );\n }\n },\n error: (err) => {\n this.errorLogger.logError(err, 'Failed to create a new member');\n this.addMemberForm.enable();\n setTimeout(() => {\n this.$isSubmitting.set(false);\n }, 1000);\n },\n });\n\n // this.startCommuneReadwriteTx([MemberKind], (tx, communeDto, userDto) =>\n // \tthis.membersService.addCommuneItem(\n // \t\t{\n // \t\t\t...memberDto,\n // \t\t\tcommuneId: communeDto.id,\n // \t\t},\n // \t\ttx,\n // \t))\n // \t.subscribe({\n // \t\t\tnext: member => {\n // \t\t\t\tconsole.log('New member ID:', member.id);\n // \t\t\t\tsetTimeout(\n // \t\t\t\t\t() => {\n // \t\t\t\t\t\tthis.navigateRoot(\n // \t\t\t\t\t\t\t'member',\n // \t\t\t\t\t\t\t{ id: member.id },\n // \t\t\t\t\t\t\t{ memberDto: member },\n // \t\t\t\t\t\t);\n // \t\t\t\t\t},\n // \t\t\t\t\t// tslint:disable-next-line:no-magic-numbers\n // \t\t\t\t\t100,\n // \t\t\t\t);\n // \t\t\t},\n // \t\t\terror: err => {\n // \t\t\t\tthis.errorLogger.logError(err, 'Failed to create new member');\n // \t\t\t},\n // \t\t},\n // \t);\n }\n\n onContactChanged(contact: NewContactBaseDboAndSpaceRef): void {\n // console.log('NewMemberFormComponent.onContactChanged()', contact);\n this.setPersonRequirements(contact);\n this.contactChange.emit(contact);\n }\n}\n","<form [formGroup]=\"addMemberForm\" (ngSubmit)=\"submit()\">\n <sneat-person-wizard\n [$space]=\"$spaceRef()\"\n [$contact]=\"$contact()\"\n (contactChange)=\"onContactChanged($event)\"\n [displayAgeGroupValue]=\"true\"\n [disabled]=\"$isSubmitting()\"\n [requires]=\"personRequirements\"\n [$fields]=\"{ contactType: { hide: true } }\"\n />\n\n @if (addMemberForm.errors) {\n <ion-card>\n <ion-card-header color=\"danger\">\n <ion-card-title>Errors</ion-card-title>\n </ion-card-header>\n <ion-card-content> Errors: {{ addMemberForm.errors }}</ion-card-content>\n </ion-card>\n }\n\n <ion-card>\n <ion-grid>\n <ion-row>\n <ion-col size=\"5\">\n <!--\t\t\t\t\tpersonRequirements: {{personRequirements|json}}-->\n <!--\t\t\t\t\t$isContactReady: {{$isContactReady()}}-->\n <ion-button\n expand=\"full\"\n size=\"large\"\n (click)=\"submit()\"\n [disabled]=\"!$canSubmit()\"\n >\n @if ($isSubmitting()) {\n <ion-spinner\n name=\"lines-small\"\n slot=\"start\"\n class=\"ion-margin-end\"\n />\n }\n <ion-label>Add member</ion-label>\n </ion-button>\n </ion-col>\n <ion-col size=\"1\" style=\"text-align: center\">\n <p>or</p>\n </ion-col>\n @if (!$isSubmitting()) {\n <ion-col size=\"6\">\n <qrcode\n style=\"float: left\"\n [qrdata]=\"$qrData()\"\n [width]=\"140\"\n errorCorrectionLevel=\"M\"\n />\n <ion-card-header>\n <ion-card-title>Self-add</ion-card-title>\n <ion-card-subtitle>\n Ask the new member to scan this QR code and fill the form to\n join this space. Or send them this\n <a target=\"_blank\" [href]=\"$qrData()\">link</a>.\n </ion-card-subtitle>\n </ion-card-header>\n </ion-col>\n }\n </ion-row>\n </ion-grid>\n </ion-card>\n</form>\n","import { Component, computed, effect, signal } from '@angular/core';\nimport {\n IonBackButton,\n IonButtons,\n IonCard,\n IonCardContent,\n IonContent,\n IonHeader,\n IonSegment,\n IonSegmentButton,\n IonTitle,\n IonToolbar,\n} from '@ionic/angular/standalone';\nimport {\n ContactusServicesModule,\n ContactusSpaceContextService,\n} from '../../../services';\nimport {\n InviteLinksComponent,\n NewPetFormComponent,\n} from '@sneat/extension-contactus-ui';\nimport {\n ContactType,\n IContactusSpaceDboAndID,\n NewContactBaseDboAndSpaceRef,\n RoleSpaceMember,\n} from '@sneat/extension-contactus-contract';\nimport { AgeGroupID } from '@sneat/core';\nimport { SpacePageBaseComponent } from '@sneat/space-components';\nimport { SpaceServiceModule } from '@sneat/space-services';\nimport { filter, first, takeUntil } from 'rxjs';\nimport { NewMemberFormComponent } from './new-member-form.component';\nimport { ClassName } from '@sneat/ui';\n\ntype InviteType = 'personal' | 'mass';\n\n@Component({\n imports: [\n ContactusServicesModule,\n NewMemberFormComponent,\n InviteLinksComponent,\n SpaceServiceModule,\n IonContent,\n IonSegment,\n IonSegmentButton,\n IonHeader,\n IonToolbar,\n IonButtons,\n IonBackButton,\n IonTitle,\n IonCard,\n IonCardContent,\n NewPetFormComponent,\n ],\n providers: [{ provide: ClassName, useValue: 'NewMemberPageComponent' }],\n selector: 'sneat-new-member-page',\n templateUrl: './new-member-page.component.html',\n})\nexport class NewMemberPageComponent extends SpacePageBaseComponent {\n // @ViewChild('nameInput', { static: false }) nameInput?: IonInput;\n\n protected onContactTypeChanged(event: CustomEvent): void {\n this.$contact.update((contact) => ({\n ...contact,\n dbo: {\n ...contact.dbo,\n type: event.detail.value as ContactType,\n },\n }));\n }\n\n protected readonly $inviteType = signal<InviteType>('mass');\n\n protected readonly $contact = signal<NewContactBaseDboAndSpaceRef>({\n space: { id: '' },\n dbo: {\n type: 'person',\n gender: 'unknown', // Undefined would indicate \"loading\" and gender form would be disabled.\n roles: [RoleSpaceMember],\n },\n });\n\n protected readonly $contactType = computed(() => this.$contact().dbo?.type);\n\n public constructor() {\n super();\n this.$defaultBackUrlSpacePath.set('members');\n const contactusSpaceContextService = new ContactusSpaceContextService(\n this.destroyed$,\n this.spaceIDChanged$,\n );\n effect(() => {\n const space = this.$spaceRef();\n this.$contact.update((contact) => ({\n ...contact,\n space: space || { id: '' },\n }));\n });\n this.trackFirstSpaceTypeChanged();\n this.route.queryParams.subscribe((params) => {\n const group = params['group'];\n const setContactTypeAndAgeGroup = (\n contact: NewContactBaseDboAndSpaceRef,\n contactType: ContactType,\n ageGroup?: AgeGroupID,\n ) => ({\n ...contact,\n dbo: {\n ...contact.dbo,\n type: contactType,\n ageGroup,\n },\n });\n switch (group) {\n case 'adults':\n this.$contact.update((contact) =>\n setContactTypeAndAgeGroup(contact, 'person', 'adult'),\n );\n break;\n case 'kids':\n this.$contact.update((contact) =>\n setContactTypeAndAgeGroup(contact, 'person', 'child'),\n );\n break;\n case 'pets':\n this.$contact.update((contact) =>\n setContactTypeAndAgeGroup(contact, 'animal'),\n );\n break;\n default:\n this.$contact.update((contact) =>\n setContactTypeAndAgeGroup(contact, 'person'),\n );\n break;\n }\n const roles = params['roles'] || '';\n if (roles) {\n this.$contact.update((contact) => ({\n ...contact,\n dbo: {\n ...contact.dbo,\n roles: roles.split(',').map((s: string) => s.trim()),\n },\n }));\n }\n });\n\n contactusSpaceContextService.contactusSpaceContext$\n .pipe(this.takeUntilDestroyed())\n .subscribe({\n next: (contactusTeam) => {\n this.contactusSpace = contactusTeam;\n },\n });\n }\n\n protected contactusSpace?: IContactusSpaceDboAndID;\n\n private readonly trackFirstSpaceTypeChanged = (): void => {\n try {\n this.spaceTypeChanged$\n .pipe(\n takeUntil(this.destroyed$),\n filter((v) => !!v),\n first(),\n )\n .subscribe({\n next: (spaceType) => {\n console.log(\n 'NewMemberPageComponent: spaceTypeChanged$ =>',\n spaceType,\n );\n if (spaceType === 'family' && this.$inviteType() === 'mass') {\n this.$inviteType.set('personal');\n }\n },\n error: this.logErrorHandler('failed to process space type changes'),\n });\n } catch (e) {\n this.logError(e, 'failed to subscribe for first space type change');\n }\n };\n\n protected onTabChanged(event: CustomEvent): void {\n this.$inviteType.set(event.detail.value as InviteType);\n }\n}\n","<ion-header>\n <ion-toolbar color=\"light\" class=\"with-back-button\">\n <ion-buttons slot=\"start\">\n <ion-back-button [defaultHref]=\"$defaultBackUrl()\" />\n </ion-buttons>\n <ion-title>\n @if (space.brief || space.type) {\n @if ($contact().dbo.type === \"animal\") {\n New pet\n } @else {\n @switch ($contact().dbo.ageGroup) {\n @case (\"child\") {\n New child\n }\n @case (\"adult\") {\n New adult\n }\n @default {\n New member\n }\n }\n }\n @ {{ $space().brief?.title || space.type }}\n } @else {\n New member\n }\n </ion-title>\n </ion-toolbar>\n</ion-header>\n\n<ion-segment\n [value]=\"$contactType()\"\n (ionChange)=\"onContactTypeChanged($event)\"\n>\n <ion-segment-button value=\"person\">Person</ion-segment-button>\n <ion-segment-button value=\"animal\">Pet</ion-segment-button>\n</ion-segment>\n\n<ion-content class=\"cardy\">\n @switch ($contactType()) {\n @case (\"person\") {\n @if (space.id && space.type !== \"family\") {\n <ion-segment [value]=\"$inviteType()\" (ionChange)=\"onTabChanged($event)\">\n <ion-segment-button value=\"mass\">\n Mass invite [{{ space.id }} - {{ space.type }}]\n </ion-segment-button>\n <ion-segment-button value=\"personal\"\n >Personal invite</ion-segment-button\n >\n </ion-segment>\n }\n\n @switch ($inviteType()) {\n @case (\"personal\") {\n <sneat-new-member-form\n [$space]=\"$space()\"\n [$contact]=\"$contact()\"\n (contactChange)=\"$contact.set($event)\"\n />\n }\n @case (\"mass\") {\n <ion-card>\n <ion-card-content>\n <sneat-invite-links [contactusSpace]=\"contactusSpace\" />\n\n <p>\n <b>Or</b> you can send\n <a\n href=\"\"\n (click)=\"$inviteType.set('personal'); $event.preventDefault()\"\n >personal invite</a\n >\n by email.\n </p>\n </ion-card-content>\n </ion-card>\n }\n }\n }\n @case (\"animal\") {\n <sneat-new-pet-form\n [$space]=\"$space()\"\n [$contact]=\"$contact()\"\n (contactChange)=\"$contact.set($event)\"\n />\n }\n }\n</ion-content>\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sneat-extension-contactus-index-1vVX7Aa3.mjs","sources":["../../../../../../libs/extensions/contactus/runtime/src/lib/members/pages/new-member/new-member-form.component.ts","../../../../../../libs/extensions/contactus/runtime/src/lib/members/pages/new-member/new-member-form.component.html","../../../../../../libs/extensions/contactus/runtime/src/lib/members/pages/new-member/new-member-page.component.ts","../../../../../../libs/extensions/contactus/runtime/src/lib/members/pages/new-member/new-member-page.component.html"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n OnChanges,\n signal,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport {\n FormsModule,\n ReactiveFormsModule,\n UntypedFormGroup,\n} from '@angular/forms';\nimport {\n IonButton,\n IonCard,\n IonCardContent,\n IonCardHeader,\n IonCardSubtitle,\n IonCardTitle,\n IonCol,\n IonGrid,\n IonLabel,\n IonRow,\n IonSpinner,\n NavController,\n} from '@ionic/angular/standalone';\nimport { namesToUrlParams } from '@sneat/auth-models';\nimport { MemberService } from '../../../services';\nimport { PersonWizardComponent } from '@sneat/extension-contactus-ui';\nimport { formNexInAnimation } from '@sneat/core';\nimport { personNames } from '@sneat/auth-ui';\nimport { RoutingState } from '@sneat/core';\nimport {\n IContactusSpaceDboAndID,\n ICreateSpaceMemberRequest,\n IPersonRequirements,\n isRelatedPersonReady,\n MemberContactType,\n NewContactBaseDboAndSpaceRef,\n} from '@sneat/extension-contactus-contract';\nimport { zipMapBriefsWithIDs } from '@sneat/space-models';\nimport { QRCodeComponent } from 'angularx-qrcode';\nimport { WithNewContactInput } from '@sneat/extension-contactus-ui';\nimport { ClassName } from '@sneat/ui';\n\n@Component({\n animations: [formNexInAnimation],\n imports: [\n FormsModule,\n ReactiveFormsModule,\n PersonWizardComponent,\n IonCard,\n IonCardContent,\n IonCardHeader,\n IonCardTitle,\n IonCardSubtitle,\n QRCodeComponent,\n IonButton,\n IonSpinner,\n IonLabel,\n IonRow,\n IonGrid,\n IonCol,\n ],\n providers: [{ provide: ClassName, useValue: 'NewMemberFormComponent' }],\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'sneat-new-member-form',\n templateUrl: 'new-member-form.component.html',\n})\nexport class NewMemberFormComponent\n extends WithNewContactInput\n implements OnChanges\n{\n public personRequirements: IPersonRequirements = {\n ageGroup: { required: true },\n gender: { required: true },\n };\n\n private readonly navController = inject(NavController);\n\n private readonly hasNavHistory: boolean;\n protected readonly $isSubmitting = signal(false);\n\n protected readonly $canSubmit = computed(\n () =>\n this.$spaceRef().id &&\n !this.$isSubmitting() &&\n this.$isContactReady() &&\n !this.addMemberForm.disabled && //TODO(check) Could be a problem with Push detection strategy?\n this.addMemberForm.valid,\n );\n\n protected readonly $qrData = computed(() => {\n const contact = this.$contact();\n let url = `https://sneat.app/pwa/join?family=${contact.space.id}`;\n const { gender, ageGroup } = contact.dbo;\n if (\n gender &&\n gender !== 'unknown' &&\n gender !== 'undisclosed' &&\n gender !== 'other'\n ) {\n url += '&gender=' + gender;\n }\n if (ageGroup) {\n url += '&ageGroup=' + ageGroup;\n }\n url += namesToUrlParams(contact.dbo.names);\n url += '&utm_source=sneat.app&utm_medium=qr_code&utm_campaign=new_member';\n return url;\n });\n\n protected contactusSpace?: IContactusSpaceDboAndID;\n\n protected readonly $isContactReady = computed(() => {\n const contact = this.$contact();\n return (\n contact && isRelatedPersonReady(contact.dbo, this.personRequirements)\n );\n });\n\n @ViewChild(PersonWizardComponent, { static: false })\n personFormComponent?: PersonWizardComponent;\n // @ViewChild('emailInput', { static: false }) emailInput?: IonInput;\n // @ViewChild('genderFirstInput', { static: false }) genderFirstInput?: IonRadio;\n\n // public get isPersonFormReady(): boolean {\n // \treturn isRelatedPersonNotReady(this.member, this.personRequirements);\n // }\n //\n // public readonly setFocusToInput = createSetFocusToInput(\n // \tthis.params.errorLogger,\n // );\n\n // public readonly memberType = new FormControl<TeamMemberType>('member', [\n // \tValidators.required,\n // ]);\n\n public addMemberForm = new UntypedFormGroup({\n // email: this.email,\n // phone: this.phone,\n // ageGroup: this.ageGroup,\n // relationship: this.relationship,\n });\n\n private readonly memberService = inject(MemberService);\n\n public constructor() {\n super();\n const routingState = inject(RoutingState);\n this.hasNavHistory = routingState.hasHistory();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['$space']) {\n this.setPersonRequirements(this.$contact());\n }\n }\n\n private setPersonRequirements(contact: NewContactBaseDboAndSpaceRef): void {\n const spaceRef = this.$spaceRef();\n this.personRequirements = {\n // TODO: Should we move it inside person form wizard?\n ...this.personRequirements,\n ageGroup:\n spaceRef.type === 'family' && contact.dbo.type !== 'animal'\n ? { required: true }\n : { hide: true },\n roles:\n spaceRef.type === 'family' && contact.dbo.type !== 'animal'\n ? { hide: true }\n : { required: true },\n relatedAs:\n spaceRef.type === 'family' && contact.dbo.type !== 'animal'\n ? { required: true }\n : { hide: true },\n };\n }\n\n submit(): void {\n // if (!this.hasNames) {\n // \talert('Please enter first or last or full name of the new member');\n // \tif (!this.firstName.value && !this.lastName.value) {\n // \t\tthis.setFocusToInput(this.firstNameInput);\n // \t} else {\n // \t\tthis.setFocusToInput(this.fullNameInput);\n // \t}\n // \treturn;\n // }\n if (!this.personFormComponent) {\n throw '!this.personFormComponent';\n }\n const spaceRef = this.$spaceRef();\n const contact = this.$contact();\n if (!spaceRef?.id) {\n this.errorLogger.logError(\n 'not able to add new member without space context',\n );\n return;\n }\n if (!contact) {\n this.errorLogger.logError('member field is undefined');\n return;\n }\n if (this.personRequirements.ageGroup?.required && !contact.dbo.ageGroup) {\n throw new Error('Age group is a required field');\n }\n if (this.personRequirements.gender?.required && !contact.dbo.gender) {\n throw new Error('Gender is a required field');\n }\n const displayName = personNames(contact.dbo.names);\n const duplicateMember = zipMapBriefsWithIDs(\n this.contactusSpace?.dbo?.contacts,\n )?.find((m) => personNames(m.brief.names) === displayName);\n if (duplicateMember) {\n alert('There is already a member with same name: ' + displayName);\n return;\n }\n\n const request: ICreateSpaceMemberRequest = {\n ...contact.dbo,\n type: contact.dbo.type as MemberContactType,\n status: 'active',\n countryID: '--',\n roles: ['contributor'],\n spaceID: spaceRef.id,\n };\n\n this.$isSubmitting.set(true);\n this.addMemberForm.disable();\n this.memberService.createMember(request).subscribe({\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n next: (_member) => {\n // console.log('member created:', member);\n if (this.hasNavHistory) {\n this.navController\n .pop()\n .catch(\n this.errorLogger.logErrorHandler(\n 'failed to navigate to prev page',\n ),\n );\n } else {\n this.spaceNavService\n .navigateBackToSpacePage(spaceRef, 'members')\n .catch(\n this.errorLogger.logErrorHandler(\n 'failed to navigate back to members page',\n ),\n );\n }\n },\n error: (err) => {\n this.errorLogger.logError(err, 'Failed to create a new member');\n this.addMemberForm.enable();\n setTimeout(() => {\n this.$isSubmitting.set(false);\n }, 1000);\n },\n });\n\n // this.startCommuneReadwriteTx([MemberKind], (tx, communeDto, userDto) =>\n // \tthis.membersService.addCommuneItem(\n // \t\t{\n // \t\t\t...memberDto,\n // \t\t\tcommuneId: communeDto.id,\n // \t\t},\n // \t\ttx,\n // \t))\n // \t.subscribe({\n // \t\t\tnext: member => {\n // \t\t\t\tconsole.log('New member ID:', member.id);\n // \t\t\t\tsetTimeout(\n // \t\t\t\t\t() => {\n // \t\t\t\t\t\tthis.navigateRoot(\n // \t\t\t\t\t\t\t'member',\n // \t\t\t\t\t\t\t{ id: member.id },\n // \t\t\t\t\t\t\t{ memberDto: member },\n // \t\t\t\t\t\t);\n // \t\t\t\t\t},\n // \t\t\t\t\t// tslint:disable-next-line:no-magic-numbers\n // \t\t\t\t\t100,\n // \t\t\t\t);\n // \t\t\t},\n // \t\t\terror: err => {\n // \t\t\t\tthis.errorLogger.logError(err, 'Failed to create new member');\n // \t\t\t},\n // \t\t},\n // \t);\n }\n\n onContactChanged(contact: NewContactBaseDboAndSpaceRef): void {\n // console.log('NewMemberFormComponent.onContactChanged()', contact);\n this.setPersonRequirements(contact);\n this.contactChange.emit(contact);\n }\n}\n","<form [formGroup]=\"addMemberForm\" (ngSubmit)=\"submit()\">\n <sneat-person-wizard\n [$space]=\"$spaceRef()\"\n [$contact]=\"$contact()\"\n (contactChange)=\"onContactChanged($event)\"\n [displayAgeGroupValue]=\"true\"\n [disabled]=\"$isSubmitting()\"\n [requires]=\"personRequirements\"\n [$fields]=\"{ contactType: { hide: true } }\"\n />\n\n @if (addMemberForm.errors) {\n <ion-card>\n <ion-card-header color=\"danger\">\n <ion-card-title>Errors</ion-card-title>\n </ion-card-header>\n <ion-card-content> Errors: {{ addMemberForm.errors }}</ion-card-content>\n </ion-card>\n }\n\n <ion-card>\n <ion-grid>\n <ion-row>\n <ion-col size=\"5\">\n <!--\t\t\t\t\tpersonRequirements: {{personRequirements|json}}-->\n <!--\t\t\t\t\t$isContactReady: {{$isContactReady()}}-->\n <ion-button\n expand=\"full\"\n size=\"large\"\n (click)=\"submit()\"\n [disabled]=\"!$canSubmit()\"\n >\n @if ($isSubmitting()) {\n <ion-spinner\n name=\"lines-small\"\n slot=\"start\"\n class=\"ion-margin-end\"\n />\n }\n <ion-label>Add member</ion-label>\n </ion-button>\n </ion-col>\n <ion-col size=\"1\" style=\"text-align: center\">\n <p>or</p>\n </ion-col>\n @if (!$isSubmitting()) {\n <ion-col size=\"6\">\n <qrcode\n style=\"float: left\"\n [qrdata]=\"$qrData()\"\n [width]=\"140\"\n errorCorrectionLevel=\"M\"\n />\n <ion-card-header>\n <ion-card-title>Self-add</ion-card-title>\n <ion-card-subtitle>\n Ask the new member to scan this QR code and fill the form to\n join this space. Or send them this\n <a target=\"_blank\" [href]=\"$qrData()\">link</a>.\n </ion-card-subtitle>\n </ion-card-header>\n </ion-col>\n }\n </ion-row>\n </ion-grid>\n </ion-card>\n</form>\n","import { Component, computed, effect, signal } from '@angular/core';\nimport {\n IonBackButton,\n IonButtons,\n IonCard,\n IonCardContent,\n IonContent,\n IonHeader,\n IonSegment,\n IonSegmentButton,\n IonTitle,\n IonToolbar,\n} from '@ionic/angular/standalone';\nimport {\n ContactusServicesModule,\n ContactusSpaceContextService,\n} from '../../../services';\nimport {\n InviteLinksComponent,\n NewPetFormComponent,\n} from '@sneat/extension-contactus-ui';\nimport {\n ContactType,\n IContactusSpaceDboAndID,\n NewContactBaseDboAndSpaceRef,\n RoleSpaceMember,\n} from '@sneat/extension-contactus-contract';\nimport { AgeGroupID } from '@sneat/core';\nimport { SpacePageBaseComponent } from '@sneat/space-components';\nimport { SpaceServiceModule } from '@sneat/space-services';\nimport { filter, first, takeUntil } from 'rxjs';\nimport { NewMemberFormComponent } from './new-member-form.component';\nimport { ClassName } from '@sneat/ui';\n\ntype InviteType = 'personal' | 'mass';\n\n@Component({\n imports: [\n ContactusServicesModule,\n NewMemberFormComponent,\n InviteLinksComponent,\n SpaceServiceModule,\n IonContent,\n IonSegment,\n IonSegmentButton,\n IonHeader,\n IonToolbar,\n IonButtons,\n IonBackButton,\n IonTitle,\n IonCard,\n IonCardContent,\n NewPetFormComponent,\n ],\n providers: [{ provide: ClassName, useValue: 'NewMemberPageComponent' }],\n selector: 'sneat-new-member-page',\n templateUrl: './new-member-page.component.html',\n})\nexport class NewMemberPageComponent extends SpacePageBaseComponent {\n // @ViewChild('nameInput', { static: false }) nameInput?: IonInput;\n\n protected onContactTypeChanged(event: CustomEvent): void {\n this.$contact.update((contact) => ({\n ...contact,\n dbo: {\n ...contact.dbo,\n type: event.detail.value as ContactType,\n },\n }));\n }\n\n protected readonly $inviteType = signal<InviteType>('mass');\n\n protected readonly $contact = signal<NewContactBaseDboAndSpaceRef>({\n space: { id: '' },\n dbo: {\n type: 'person',\n gender: 'unknown', // Undefined would indicate \"loading\" and gender form would be disabled.\n roles: [RoleSpaceMember],\n },\n });\n\n protected readonly $contactType = computed(() => this.$contact().dbo?.type);\n\n public constructor() {\n super();\n this.$defaultBackUrlSpacePath.set('members');\n const contactusSpaceContextService = new ContactusSpaceContextService(\n this.destroyed$,\n this.spaceIDChanged$,\n );\n effect(() => {\n const space = this.$spaceRef();\n this.$contact.update((contact) => ({\n ...contact,\n space: space || { id: '' },\n }));\n });\n this.trackFirstSpaceTypeChanged();\n this.route.queryParams.subscribe((params) => {\n const group = params['group'];\n const setContactTypeAndAgeGroup = (\n contact: NewContactBaseDboAndSpaceRef,\n contactType: ContactType,\n ageGroup?: AgeGroupID,\n ) => ({\n ...contact,\n dbo: {\n ...contact.dbo,\n type: contactType,\n ageGroup,\n },\n });\n switch (group) {\n case 'adults':\n this.$contact.update((contact) =>\n setContactTypeAndAgeGroup(contact, 'person', 'adult'),\n );\n break;\n case 'kids':\n this.$contact.update((contact) =>\n setContactTypeAndAgeGroup(contact, 'person', 'child'),\n );\n break;\n case 'pets':\n this.$contact.update((contact) =>\n setContactTypeAndAgeGroup(contact, 'animal'),\n );\n break;\n default:\n this.$contact.update((contact) =>\n setContactTypeAndAgeGroup(contact, 'person'),\n );\n break;\n }\n const roles = params['roles'] || '';\n if (roles) {\n this.$contact.update((contact) => ({\n ...contact,\n dbo: {\n ...contact.dbo,\n roles: roles.split(',').map((s: string) => s.trim()),\n },\n }));\n }\n });\n\n contactusSpaceContextService.contactusSpaceContext$\n .pipe(this.takeUntilDestroyed())\n .subscribe({\n next: (contactusTeam) => {\n this.contactusSpace = contactusTeam;\n },\n });\n }\n\n protected contactusSpace?: IContactusSpaceDboAndID;\n\n private readonly trackFirstSpaceTypeChanged = (): void => {\n try {\n this.spaceTypeChanged$\n .pipe(\n takeUntil(this.destroyed$),\n filter((v) => !!v),\n first(),\n )\n .subscribe({\n next: (spaceType) => {\n console.log(\n 'NewMemberPageComponent: spaceTypeChanged$ =>',\n spaceType,\n );\n if (spaceType === 'family' && this.$inviteType() === 'mass') {\n this.$inviteType.set('personal');\n }\n },\n error: this.logErrorHandler('failed to process space type changes'),\n });\n } catch (e) {\n this.logError(e, 'failed to subscribe for first space type change');\n }\n };\n\n protected onTabChanged(event: CustomEvent): void {\n this.$inviteType.set(event.detail.value as InviteType);\n }\n}\n","<ion-header>\n <ion-toolbar color=\"light\" class=\"with-back-button\">\n <ion-buttons slot=\"start\">\n <ion-back-button [defaultHref]=\"$defaultBackUrl()\" />\n </ion-buttons>\n <ion-title>\n @if (space.brief || space.type) {\n @if ($contact().dbo.type === \"animal\") {\n New pet\n } @else {\n @switch ($contact().dbo.ageGroup) {\n @case (\"child\") {\n New child\n }\n @case (\"adult\") {\n New adult\n }\n @default {\n New member\n }\n }\n }\n @ {{ $space().brief?.title || space.type }}\n } @else {\n New member\n }\n </ion-title>\n </ion-toolbar>\n</ion-header>\n\n<ion-segment\n [value]=\"$contactType()\"\n (ionChange)=\"onContactTypeChanged($event)\"\n>\n <ion-segment-button value=\"person\">Person</ion-segment-button>\n <ion-segment-button value=\"animal\">Pet</ion-segment-button>\n</ion-segment>\n\n<ion-content class=\"cardy\">\n @switch ($contactType()) {\n @case (\"person\") {\n @if (space.id && space.type !== \"family\") {\n <ion-segment [value]=\"$inviteType()\" (ionChange)=\"onTabChanged($event)\">\n <ion-segment-button value=\"mass\">\n Mass invite [{{ space.id }} - {{ space.type }}]\n </ion-segment-button>\n <ion-segment-button value=\"personal\"\n >Personal invite</ion-segment-button\n >\n </ion-segment>\n }\n\n @switch ($inviteType()) {\n @case (\"personal\") {\n <sneat-new-member-form\n [$space]=\"$space()\"\n [$contact]=\"$contact()\"\n (contactChange)=\"$contact.set($event)\"\n />\n }\n @case (\"mass\") {\n <ion-card>\n <ion-card-content>\n <sneat-invite-links [contactusSpace]=\"contactusSpace\" />\n\n <p>\n <b>Or</b> you can send\n <a\n href=\"\"\n (click)=\"$inviteType.set('personal'); $event.preventDefault()\"\n >personal invite</a\n >\n by email.\n </p>\n </ion-card-content>\n </ion-card>\n }\n }\n }\n @case (\"animal\") {\n <sneat-new-pet-form\n [$space]=\"$space()\"\n [$contact]=\"$contact()\"\n (contactChange)=\"$contact.set($event)\"\n />\n }\n }\n</ion-content>\n"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@ import { AsyncPipe } from '@angular/common';
|
|
|
2
2
|
import * as i1 from '@angular/forms';
|
|
3
3
|
import { FormsModule } from '@angular/forms';
|
|
4
4
|
import { IonHeader, IonToolbar, IonButtons, IonBackButton, IonMenuButton, IonContent, IonSegment, IonSegmentButton, IonLabel, IonCard, IonItemGroup, IonItemDivider, IonIcon, IonBadge, IonItem, IonFooter, IonButton } from '@ionic/angular/standalone';
|
|
5
|
-
import {
|
|
5
|
+
import { ContactusSpaceService, ContactusServicesModule } from './sneat-extension-contactus.mjs';
|
|
6
6
|
import { ContactusModuleBaseComponent, FamilyMembersComponent } from '@sneat/extension-contactus-ui';
|
|
7
7
|
import { isSpaceSupportsMemberGroups } from '@sneat/dto';
|
|
8
8
|
import { SpacePageTitleComponent, SpaceComponentBaseParams } from '@sneat/space-components';
|
|
@@ -185,4 +185,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
|
|
|
185
185
|
}], ctorParameters: () => [] });
|
|
186
186
|
|
|
187
187
|
export { MembersPageComponent };
|
|
188
|
-
//# sourceMappingURL=sneat-extension-contactus-members-page.component-
|
|
188
|
+
//# sourceMappingURL=sneat-extension-contactus-members-page.component-CWulwfet.mjs.map
|