@sneat/contactus-internal 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/index.js +2 -0
- package/esm2022/index.js.map +1 -0
- package/esm2022/lib/contactus-routing.module.js +48 -0
- package/esm2022/lib/contactus-routing.module.js.map +1 -0
- package/esm2022/lib/index.js +3 -0
- package/esm2022/lib/index.js.map +1 -0
- package/esm2022/lib/members/index.js +4 -0
- package/esm2022/lib/members/index.js.map +1 -0
- package/esm2022/lib/members/members-base-page.js +30 -0
- package/esm2022/lib/members/members-base-page.js.map +1 -0
- package/esm2022/lib/members/members-routing.js +32 -0
- package/esm2022/lib/members/members-routing.js.map +1 -0
- package/esm2022/lib/members/pages/member/space-member-page.component.js +95 -0
- package/esm2022/lib/members/pages/member/space-member-page.component.js.map +1 -0
- package/esm2022/lib/members/pages/member-base-page.js +23 -0
- package/esm2022/lib/members/pages/member-base-page.js.map +1 -0
- package/esm2022/lib/members/pages/members/members-page.component.js +155 -0
- package/esm2022/lib/members/pages/members/members-page.component.js.map +1 -0
- package/esm2022/lib/members/pages/new-member/index.js +2 -0
- package/esm2022/lib/members/pages/new-member/index.js.map +1 -0
- package/esm2022/lib/members/pages/new-member/new-member-form.component.js +223 -0
- package/esm2022/lib/members/pages/new-member/new-member-form.component.js.map +1 -0
- package/esm2022/lib/members/pages/new-member/new-member-page.component.js +132 -0
- package/esm2022/lib/members/pages/new-member/new-member-page.component.js.map +1 -0
- package/esm2022/lib/pages/contact/contact-page.component.js +96 -0
- package/esm2022/lib/pages/contact/contact-page.component.js.map +1 -0
- package/esm2022/lib/pages/contact/index.js +2 -0
- package/esm2022/lib/pages/contact/index.js.map +1 -0
- package/esm2022/lib/pages/contact-base-page.js +59 -0
- package/esm2022/lib/pages/contact-base-page.js.map +1 -0
- package/esm2022/lib/pages/contacts/contacts-page.component.js +113 -0
- package/esm2022/lib/pages/contacts/contacts-page.component.js.map +1 -0
- package/esm2022/lib/pages/contacts/index.js +2 -0
- package/esm2022/lib/pages/contacts/index.js.map +1 -0
- package/esm2022/lib/pages/index.js +5 -0
- package/esm2022/lib/pages/index.js.map +1 -0
- package/esm2022/lib/pages/new-contact/index.js +2 -0
- package/esm2022/lib/pages/new-contact/index.js.map +1 -0
- package/esm2022/lib/pages/new-contact/new-contact-page.component.js +104 -0
- package/esm2022/lib/pages/new-contact/new-contact-page.component.js.map +1 -0
- package/esm2022/lib/pages/new-location/index.js +2 -0
- package/esm2022/lib/pages/new-location/index.js.map +1 -0
- package/esm2022/lib/pages/new-location/new-location-page.component.js +55 -0
- package/esm2022/lib/pages/new-location/new-location-page.component.js.map +1 -0
- package/esm2022/sneat-contactus-internal.js +5 -0
- package/esm2022/sneat-contactus-internal.js.map +1 -0
- package/index.d.ts +1 -0
- package/lib/contactus-routing.module.d.ts +2 -0
- package/lib/index.d.ts +2 -0
- package/lib/members/index.d.ts +2 -0
- package/lib/members/members-base-page.d.ts +12 -0
- package/lib/members/members-routing.d.ts +2 -0
- package/lib/members/pages/member/space-member-page.component.d.ts +11 -0
- package/lib/members/pages/member-base-page.d.ts +10 -0
- package/lib/members/pages/members/members-page.component.d.ts +18 -0
- package/lib/members/pages/new-member/index.d.ts +1 -0
- package/lib/members/pages/new-member/new-member-form.component.d.ts +26 -0
- package/lib/members/pages/new-member/new-member-page.component.d.ts +17 -0
- package/lib/pages/contact/contact-page.component.d.ts +15 -0
- package/lib/pages/contact/index.d.ts +1 -0
- package/lib/pages/contact-base-page.d.ts +16 -0
- package/lib/pages/contacts/contacts-page.component.d.ts +22 -0
- package/lib/pages/contacts/index.d.ts +1 -0
- package/lib/pages/index.d.ts +4 -0
- package/lib/pages/new-contact/index.d.ts +1 -0
- package/lib/pages/new-contact/new-contact-page.component.d.ts +24 -0
- package/lib/pages/new-location/index.d.ts +1 -0
- package/lib/pages/new-location/new-location-page.component.d.ts +12 -0
- package/package.json +26 -0
- package/sneat-contactus-internal.d.ts +5 -0
- package/tsconfig.lib.prod.tsbuildinfo +1 -0
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { inject } from '@angular/core';
|
|
2
|
+
import { ContactusSpaceService, } from '@sneat/contactus-services';
|
|
3
|
+
import { SpaceItemPageBaseComponent } from '@sneat/space-components';
|
|
4
|
+
import { takeUntil, throwError } from 'rxjs';
|
|
5
|
+
export class ContactBasePage extends SpaceItemPageBaseComponent {
|
|
6
|
+
get contact() {
|
|
7
|
+
return this.$contact();
|
|
8
|
+
}
|
|
9
|
+
constructor(contactService, defaultBackPage = 'contacts') {
|
|
10
|
+
super(defaultBackPage, 'contact', contactService);
|
|
11
|
+
this.contactService = contactService;
|
|
12
|
+
this.$contact = this.$item.asReadonly();
|
|
13
|
+
this.$contactID = this.$itemID;
|
|
14
|
+
this.contactusSpaceService = inject(ContactusSpaceService);
|
|
15
|
+
}
|
|
16
|
+
watchItemChanges() {
|
|
17
|
+
const itemID = this.$itemID();
|
|
18
|
+
if (!itemID) {
|
|
19
|
+
return throwError(() => new Error('no contact context'));
|
|
20
|
+
}
|
|
21
|
+
const space = this.space;
|
|
22
|
+
if (!space) {
|
|
23
|
+
return throwError(() => new Error('no team context'));
|
|
24
|
+
}
|
|
25
|
+
return this.contactService.watchContactById(space, itemID);
|
|
26
|
+
// .pipe(this.takeUntilNeeded(), takeUntil(this.spaceIDChanged$))
|
|
27
|
+
}
|
|
28
|
+
briefs() {
|
|
29
|
+
return undefined;
|
|
30
|
+
// throw new Error('Method not implemented.'); // return this.contactusTeam?.dto?.contacts;
|
|
31
|
+
}
|
|
32
|
+
onSpaceIdChanged() {
|
|
33
|
+
super.onSpaceIdChanged();
|
|
34
|
+
this.watchSpaceContactusEntry();
|
|
35
|
+
}
|
|
36
|
+
watchSpaceContactusEntry() {
|
|
37
|
+
if (this.space?.id) {
|
|
38
|
+
this.contactusSpaceService
|
|
39
|
+
.watchContactBriefs(this.space.id)
|
|
40
|
+
.pipe(this.takeUntilDestroyed(), takeUntil(this.spaceIDChanged$))
|
|
41
|
+
.subscribe({
|
|
42
|
+
next: (contacts) => {
|
|
43
|
+
console.log('watchSpaceContactusEntry() => contacts:', contacts, 'this.contact:', this.contact);
|
|
44
|
+
if (this.contact?.id && !this.contact?.dbo) {
|
|
45
|
+
const contactID = this.contact.id;
|
|
46
|
+
const contact = contacts.find((c) => c.id === contactID);
|
|
47
|
+
if (contact) {
|
|
48
|
+
console.log('setItemContext from contact space brief', contact.brief);
|
|
49
|
+
this.setItemContext({ ...this.contact, brief: contact.brief });
|
|
50
|
+
// this.contact = { brief: contact.brief, ...this.contact };
|
|
51
|
+
// this.teamParams.changeDetectorRef.detectChanges();
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=contact-base-page.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contact-base-page.js","sourceRoot":"","sources":["../../../../../../../libs/contactus/internal/src/lib/pages/contact-base-page.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACvC,OAAO,EAEL,qBAAqB,GACtB,MAAM,2BAA2B,CAAC;AAMnC,OAAO,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,EAAc,SAAS,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAEzD,MAAM,OAAgB,eAAgB,SAAQ,0BAG7C;IAIC,IAAW,OAAO;QAChB,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;IACzB,CAAC;IAID,YACqB,cAA8B,EACjD,kBAA0C,UAAU;QAEpD,KAAK,CAAC,eAAe,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC;QAH/B,mBAAc,GAAd,cAAc,CAAgB;QAVhC,aAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;QACnC,eAAU,GAAG,IAAI,CAAC,OAAO,CAAC;QAM1B,0BAAqB,GAAG,MAAM,CAAC,qBAAqB,CAAC,CAAC;IAOzE,CAAC;IAEkB,gBAAgB;QACjC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAC9B,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAC;QAC3D,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACzB,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC;QACxD,CAAC;QACD,OAAO,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAC3D,iEAAiE;IACnE,CAAC;IAEkB,MAAM;QACvB,OAAO,SAAS,CAAC;QACjB,2FAA2F;IAC7F,CAAC;IAEkB,gBAAgB;QACjC,KAAK,CAAC,gBAAgB,EAAE,CAAC;QACzB,IAAI,CAAC,wBAAwB,EAAE,CAAC;IAClC,CAAC;IAEO,wBAAwB;QAC9B,IAAI,IAAI,CAAC,KAAK,EAAE,EAAE,EAAE,CAAC;YACnB,IAAI,CAAC,qBAAqB;iBACvB,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;iBACjC,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;iBAChE,SAAS,CAAC;gBACT,IAAI,EAAE,CAAC,QAAQ,EAAE,EAAE;oBACjB,OAAO,CAAC,GAAG,CACT,yCAAyC,EACzC,QAAQ,EACR,eAAe,EACf,IAAI,CAAC,OAAO,CACb,CAAC;oBACF,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC;wBAC3C,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;wBAClC,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC;wBACzD,IAAI,OAAO,EAAE,CAAC;4BACZ,OAAO,CAAC,GAAG,CACT,yCAAyC,EACzC,OAAO,CAAC,KAAK,CACd,CAAC;4BACF,IAAI,CAAC,cAAc,CAAC,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;4BAC/D,4DAA4D;4BAC5D,qDAAqD;wBACvD,CAAC;oBACH,CAAC;gBACH,CAAC;aACF,CAAC,CAAC;QACP,CAAC;IACH,CAAC;CAqDF","sourcesContent":["import { inject } from '@angular/core';\nimport {\n ContactService,\n ContactusSpaceService,\n} from '@sneat/contactus-services';\nimport {\n IContactBrief,\n IContactDbo,\n IContactContext,\n} from '@sneat/contactus-core';\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"]}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, computed, signal, inject, } from '@angular/core';
|
|
2
|
+
import { IonBackButton, IonButton, IonButtons, IonContent, IonFooter, IonHeader, IonIcon, IonLabel, IonMenuButton, IonTitle, IonToolbar, } from '@ionic/angular/standalone';
|
|
3
|
+
import { ContactsComponent, } from '@sneat/contactus-shared';
|
|
4
|
+
import { setHrefQueryParam } from '@sneat/core';
|
|
5
|
+
import { addSpace, } from '@sneat/contactus-core';
|
|
6
|
+
import { SpacePageTitleComponent, SpaceItemsBaseComponent, } from '@sneat/space-components';
|
|
7
|
+
import { ContactusServicesModule, ContactusSpaceService, } from '@sneat/contactus-services';
|
|
8
|
+
import { SpaceServiceModule } from '@sneat/space-services';
|
|
9
|
+
import { ClassName } from '@sneat/ui';
|
|
10
|
+
import { Subject } from 'rxjs';
|
|
11
|
+
import * as i0 from "@angular/core";
|
|
12
|
+
export class ContactsPageComponent extends SpaceItemsBaseComponent {
|
|
13
|
+
constructor() {
|
|
14
|
+
super('');
|
|
15
|
+
this.contactusSpaceService = inject(ContactusSpaceService);
|
|
16
|
+
this.$allContacts = signal(undefined, ...(ngDevMode ? [{ debugName: "$allContacts" }] : []));
|
|
17
|
+
// public readonly $filter = signal<string>('');
|
|
18
|
+
this.$role = signal(undefined, ...(ngDevMode ? [{ debugName: "$role" }] : []));
|
|
19
|
+
this.$pageTitle = computed(() => {
|
|
20
|
+
const role = this.$role();
|
|
21
|
+
if (role) {
|
|
22
|
+
return `${role.toUpperCase() + role.substr(1)}s`;
|
|
23
|
+
}
|
|
24
|
+
return 'Contacts';
|
|
25
|
+
}, ...(ngDevMode ? [{ debugName: "$pageTitle" }] : []));
|
|
26
|
+
this.$selectedContacts = computed(() => this.$allContacts()?.filter((c) => c.isChecked), ...(ngDevMode ? [{ debugName: "$selectedContacts" }] : []));
|
|
27
|
+
this.$titleIcon = computed(() => {
|
|
28
|
+
switch (this.$role()) {
|
|
29
|
+
case 'tenant':
|
|
30
|
+
return '🤠';
|
|
31
|
+
case 'landlord':
|
|
32
|
+
return '🤴';
|
|
33
|
+
case 'applicant':
|
|
34
|
+
return '🤔';
|
|
35
|
+
default:
|
|
36
|
+
return '📇';
|
|
37
|
+
}
|
|
38
|
+
}, ...(ngDevMode ? [{ debugName: "$titleIcon" }] : []));
|
|
39
|
+
this.setSpaceContacts = (contacts) => {
|
|
40
|
+
this.$allContacts.set(contacts);
|
|
41
|
+
};
|
|
42
|
+
this.command = new Subject();
|
|
43
|
+
const role = location.pathname.match(/(applicant|landlord|tenant)/);
|
|
44
|
+
if (role) {
|
|
45
|
+
this.$role.set(role[1]);
|
|
46
|
+
}
|
|
47
|
+
// const allContacts = window.history.state.contacts as IContactWithSpace[];
|
|
48
|
+
// if (allContacts) {
|
|
49
|
+
// this.$allContacts.set(allContacts);
|
|
50
|
+
// }
|
|
51
|
+
this.route.queryParamMap.pipe(this.takeUntilDestroyed()).subscribe({
|
|
52
|
+
next: (q) => {
|
|
53
|
+
this.$role.set(q.get('role') || undefined);
|
|
54
|
+
},
|
|
55
|
+
});
|
|
56
|
+
this.spaceIDChanged$.subscribe({
|
|
57
|
+
next: (spaceID) => {
|
|
58
|
+
if (!spaceID) {
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
this.contactusSpaceService
|
|
62
|
+
.watchContactBriefs(this.space.id)
|
|
63
|
+
.pipe(this.takeUntilDestroyed(), this.takeUntilSpaceIdChanged())
|
|
64
|
+
.subscribe({
|
|
65
|
+
next: (contacts) => {
|
|
66
|
+
const space = this.$space();
|
|
67
|
+
if (space.id !== spaceID) {
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
this.setSpaceContacts(contacts.map(addSpace(space)) || []);
|
|
71
|
+
},
|
|
72
|
+
});
|
|
73
|
+
},
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
onRoleChanged(role) {
|
|
77
|
+
this.$role.set(role);
|
|
78
|
+
const url = setHrefQueryParam('role', role || '');
|
|
79
|
+
history.replaceState(undefined, document.title, url);
|
|
80
|
+
}
|
|
81
|
+
sendCommand(event, name) {
|
|
82
|
+
this.command.next({ name, event });
|
|
83
|
+
}
|
|
84
|
+
ngOnDestroy() {
|
|
85
|
+
this.command.complete();
|
|
86
|
+
super.ngOnDestroy();
|
|
87
|
+
}
|
|
88
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ContactsPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
89
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: ContactsPageComponent, isStandalone: true, selector: "sneat-contacts-page", providers: [{ provide: ClassName, useValue: 'ContactsPageComponent' }], usesInheritance: true, ngImport: i0, template: "<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 [$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", dependencies: [{ kind: "component", type: SpacePageTitleComponent, selector: "sneat-space-page-title", inputs: ["icon", "generalTitle", "space", "titlesBySpaceType"] }, { kind: "ngmodule", type: ContactusServicesModule }, { kind: "ngmodule", type: SpaceServiceModule }, { kind: "component", type: ContactsComponent, selector: "sneat-contacts", inputs: ["$space", "$roleID", "command", "goToNewContactPage", "$allContacts", "contactClicked"], outputs: ["roleChange", "contactsChange", "addContactEvent", "addContactClick"] }, { kind: "component", type: IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: IonBackButton, selector: "ion-back-button" }, { kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonFooter, selector: "ion-footer", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: IonContent, selector: "ion-content", inputs: ["color", "fixedSlotPlacement", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: IonMenuButton, selector: "ion-menu-button", inputs: ["autoHide", "color", "disabled", "menu", "mode", "type"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
90
|
+
}
|
|
91
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ContactsPageComponent, decorators: [{
|
|
92
|
+
type: Component,
|
|
93
|
+
args: [{ imports: [
|
|
94
|
+
SpacePageTitleComponent,
|
|
95
|
+
ContactusServicesModule,
|
|
96
|
+
SpaceServiceModule,
|
|
97
|
+
ContactsComponent,
|
|
98
|
+
IonHeader,
|
|
99
|
+
IonToolbar,
|
|
100
|
+
IonButtons,
|
|
101
|
+
IonBackButton,
|
|
102
|
+
IonButtons,
|
|
103
|
+
IonButton,
|
|
104
|
+
IonBackButton,
|
|
105
|
+
IonTitle,
|
|
106
|
+
IonIcon,
|
|
107
|
+
IonFooter,
|
|
108
|
+
IonLabel,
|
|
109
|
+
IonContent,
|
|
110
|
+
IonMenuButton,
|
|
111
|
+
], providers: [{ provide: ClassName, useValue: 'ContactsPageComponent' }], changeDetection: ChangeDetectionStrategy.OnPush, selector: 'sneat-contacts-page', template: "<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 [$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" }]
|
|
112
|
+
}], ctorParameters: () => [] });
|
|
113
|
+
//# sourceMappingURL=contacts-page.component.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contacts-page.component.js","sourceRoot":"","sources":["../../../../../../../../libs/contactus/internal/src/lib/pages/contacts/contacts-page.component.ts","../../../../../../../../libs/contactus/internal/src/lib/pages/contacts/contacts-page.component.html"],"names":[],"mappings":"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","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/contactus-shared';\nimport { setHrefQueryParam } from '@sneat/core';\nimport {\n addSpace,\n ContactRole,\n IContactWithCheck,\n} from '@sneat/contactus-core';\nimport {\n SpacePageTitleComponent,\n SpaceItemsBaseComponent,\n} from '@sneat/space-components';\nimport {\n ContactusServicesModule,\n ContactusSpaceService,\n} from '@sneat/contactus-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\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 },\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 [$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"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../../libs/contactus/internal/src/lib/pages/contacts/index.ts"],"names":[],"mappings":"AAAA,cAAc,2BAA2B,CAAC","sourcesContent":["export * from './contacts-page.component';\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../libs/contactus/internal/src/lib/pages/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC","sourcesContent":["export * from './contact';\nexport * from './contacts';\nexport * from './new-contact';\nexport * from './new-location';\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../../libs/contactus/internal/src/lib/pages/new-contact/index.ts"],"names":[],"mappings":"AAAA,cAAc,8BAA8B,CAAC","sourcesContent":["export * from './new-contact-page.component';\n"]}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, computed, signal, } from '@angular/core';
|
|
2
|
+
import { FormsModule } from '@angular/forms';
|
|
3
|
+
import { IonBackButton, IonButtons, IonContent, IonHeader, IonNav, IonTitle, IonToolbar, } from '@ionic/angular/standalone';
|
|
4
|
+
import { ContactusServicesModule } from '@sneat/contactus-services';
|
|
5
|
+
import { NewContactFormComponent, } from '@sneat/contactus-shared';
|
|
6
|
+
import { emptySpaceRef } from '@sneat/core';
|
|
7
|
+
import { SpaceBaseComponent, SpaceComponentBaseParams, } from '@sneat/space-components';
|
|
8
|
+
import { SpaceServiceModule } from '@sneat/space-services';
|
|
9
|
+
import { ClassName } from '@sneat/ui';
|
|
10
|
+
import * as i0 from "@angular/core";
|
|
11
|
+
export class NewContactPageComponent extends SpaceBaseComponent {
|
|
12
|
+
constructor() {
|
|
13
|
+
super();
|
|
14
|
+
// @ViewChild('nameInput', { static: true }) nameInput?: IonInput;
|
|
15
|
+
// TODO: relationship is not implemented yet
|
|
16
|
+
this.$relation = signal(undefined, ...(ngDevMode ? [{ debugName: "$relation" }] : []));
|
|
17
|
+
this.$contact = signal({
|
|
18
|
+
space: emptySpaceRef,
|
|
19
|
+
dbo: {
|
|
20
|
+
type: 'person',
|
|
21
|
+
gender: 'unknown', // Undefined would indicate "loading" and gender form would be disabled.
|
|
22
|
+
},
|
|
23
|
+
}, ...(ngDevMode ? [{ debugName: "$contact" }] : []));
|
|
24
|
+
this.$contactGroupID = signal('', ...(ngDevMode ? [{ debugName: "$contactGroupID" }] : []));
|
|
25
|
+
this.$contactRoleID = signal(undefined, ...(ngDevMode ? [{ debugName: "$contactRoleID" }] : []));
|
|
26
|
+
this.$assetID = signal('', ...(ngDevMode ? [{ debugName: "$assetID" }] : []));
|
|
27
|
+
this.$contactRole = signal(undefined, ...(ngDevMode ? [{ debugName: "$contactRole" }] : []));
|
|
28
|
+
this.$contactGroup = signal(undefined, ...(ngDevMode ? [{ debugName: "$contactGroup" }] : []));
|
|
29
|
+
this.$parentContactID = signal('', ...(ngDevMode ? [{ debugName: "$parentContactID" }] : []));
|
|
30
|
+
this.$title = computed(() => {
|
|
31
|
+
const contactRoleBrief = this.$contactRole()?.brief;
|
|
32
|
+
return contactRoleBrief
|
|
33
|
+
? `${contactRoleBrief.emoji} New ${contactRoleBrief.title.toLowerCase()}`
|
|
34
|
+
: 'New contact';
|
|
35
|
+
}, ...(ngDevMode ? [{ debugName: "$title" }] : []));
|
|
36
|
+
this.$asset = signal(undefined, ...(ngDevMode ? [{ debugName: "$asset" }] : []));
|
|
37
|
+
this.onUrlParamsChanged = (params) => {
|
|
38
|
+
const relation = params.get('relation');
|
|
39
|
+
if (relation) {
|
|
40
|
+
this.$relation.set(relation);
|
|
41
|
+
}
|
|
42
|
+
const contactGroupID = params.get('group');
|
|
43
|
+
if (contactGroupID && contactGroupID !== this.$contactGroupID()) {
|
|
44
|
+
this.$contactGroupID.set(contactGroupID);
|
|
45
|
+
}
|
|
46
|
+
const contactRole = params.get('role');
|
|
47
|
+
if (contactRole && !this.$contactRole()) {
|
|
48
|
+
this.$contactRoleID.set(contactRole);
|
|
49
|
+
}
|
|
50
|
+
const space = this.space;
|
|
51
|
+
if (!space) {
|
|
52
|
+
throw new Error('Space is not defined');
|
|
53
|
+
}
|
|
54
|
+
const assetId = params.get('asset');
|
|
55
|
+
if (assetId && assetId !== this.$assetID()) {
|
|
56
|
+
this.$assetID.set(assetId);
|
|
57
|
+
}
|
|
58
|
+
const parentContactID = params.get('contact');
|
|
59
|
+
if (parentContactID && this.$parentContactID() !== parentContactID) {
|
|
60
|
+
this.$parentContactID.set(parentContactID);
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
this.defaultBackPage = 'contacts';
|
|
64
|
+
this.$asset.set(window.history.state?.asset);
|
|
65
|
+
}
|
|
66
|
+
// onContactTypeChanged(v: ContactRole): void {
|
|
67
|
+
//
|
|
68
|
+
// }
|
|
69
|
+
ngOnInit() {
|
|
70
|
+
super.ngOnInit();
|
|
71
|
+
this.route.queryParamMap
|
|
72
|
+
.pipe(this.takeUntilDestroyed())
|
|
73
|
+
.subscribe(this.onUrlParamsChanged);
|
|
74
|
+
}
|
|
75
|
+
onContactChanged(contact) {
|
|
76
|
+
// console.log('onContactChanged', contact);
|
|
77
|
+
this.$contact.set(contact);
|
|
78
|
+
}
|
|
79
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: NewContactPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
80
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.0", type: NewContactPageComponent, isStandalone: true, selector: "sneat-new-contact-page", providers: [
|
|
81
|
+
SpaceComponentBaseParams,
|
|
82
|
+
{ provide: ClassName, useValue: 'NewContactPageComponent' },
|
|
83
|
+
], usesInheritance: true, ngImport: i0, template: "<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 (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", dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: SpaceServiceModule }, { kind: "ngmodule", type: ContactusServicesModule }, { kind: "component", type: IonNav, selector: "ion-nav" }, { kind: "component", type: IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: IonBackButton, selector: "ion-back-button" }, { kind: "component", type: IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: IonContent, selector: "ion-content", inputs: ["color", "fixedSlotPlacement", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: NewContactFormComponent, selector: "sneat-new-contact-form", inputs: ["command", "selectGroupAndRole$"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
84
|
+
}
|
|
85
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: NewContactPageComponent, decorators: [{
|
|
86
|
+
type: Component,
|
|
87
|
+
args: [{ imports: [
|
|
88
|
+
FormsModule,
|
|
89
|
+
SpaceServiceModule,
|
|
90
|
+
ContactusServicesModule,
|
|
91
|
+
IonNav,
|
|
92
|
+
IonHeader,
|
|
93
|
+
IonToolbar,
|
|
94
|
+
IonButtons,
|
|
95
|
+
IonBackButton,
|
|
96
|
+
IonTitle,
|
|
97
|
+
IonContent,
|
|
98
|
+
NewContactFormComponent,
|
|
99
|
+
], providers: [
|
|
100
|
+
SpaceComponentBaseParams,
|
|
101
|
+
{ provide: ClassName, useValue: 'NewContactPageComponent' },
|
|
102
|
+
], changeDetection: ChangeDetectionStrategy.OnPush, selector: 'sneat-new-contact-page', template: "<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 (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" }]
|
|
103
|
+
}], ctorParameters: () => [] });
|
|
104
|
+
//# sourceMappingURL=new-contact-page.component.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"new-contact-page.component.js","sourceRoot":"","sources":["../../../../../../../../libs/contactus/internal/src/lib/pages/new-contact/new-contact-page.component.ts","../../../../../../../../libs/contactus/internal/src/lib/pages/new-contact/new-contact-page.component.html"],"names":[],"mappings":"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","sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n computed,\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 '@sneat/contactus-services';\nimport {\n OptionalContactGroupIdAndBrief,\n OptionalContactRoleIdAndBrief,\n NewContactFormComponent,\n} from '@sneat/contactus-shared';\nimport {\n ContactIdAndDboWithSpaceRef,\n ContactRole,\n ContactToContactRelation,\n NewContactBaseDboAndSpaceRef,\n} from '@sneat/contactus-core';\nimport { emptySpaceRef } from '@sneat/core';\nimport {\n SpaceBaseComponent,\n SpaceComponentBaseParams,\n} from '@sneat/space-components';\nimport { IAssetContext } from '@sneat/mod-assetus-core';\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 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\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\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 (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"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../../libs/contactus/internal/src/lib/pages/new-location/index.ts"],"names":[],"mappings":"AAAA,cAAc,+BAA+B,CAAC","sourcesContent":["export * from './new-location-page.component';\n"]}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { Component, inject } from '@angular/core';
|
|
2
|
+
import { IonBackButton, IonContent, IonHeader, IonTitle, IonToolbar, } from '@ionic/angular/standalone';
|
|
3
|
+
import { PersonTitle } from '@sneat/contactus-shared';
|
|
4
|
+
import { ContactService } from '@sneat/contactus-services';
|
|
5
|
+
import { LocationFormComponent } from '@sneat/contactus-shared';
|
|
6
|
+
import { ClassName } from '@sneat/ui';
|
|
7
|
+
import { ContactBasePage } from '../contact-base-page';
|
|
8
|
+
import * as i0 from "@angular/core";
|
|
9
|
+
export class NewLocationPageComponent extends ContactBasePage {
|
|
10
|
+
constructor() {
|
|
11
|
+
super(inject(ContactService));
|
|
12
|
+
this.newLocation = {
|
|
13
|
+
id: '',
|
|
14
|
+
brief: { type: 'location' },
|
|
15
|
+
// space: this.space,
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
onSpaceDboChanged() {
|
|
19
|
+
super.onSpaceDboChanged();
|
|
20
|
+
// if (this.team?.dto?.countryID && !this.newLocationDto.countryID) {
|
|
21
|
+
// this.newLocationDto = { ...this.newLocationDto, countryID: this.team.dto.countryID };
|
|
22
|
+
// }
|
|
23
|
+
}
|
|
24
|
+
onLocationChanged(contact) {
|
|
25
|
+
this.newLocation = contact;
|
|
26
|
+
}
|
|
27
|
+
onContactCreated(contact) {
|
|
28
|
+
this.newLocation = contact;
|
|
29
|
+
const space = this.space;
|
|
30
|
+
if (!space) {
|
|
31
|
+
throw new Error('Space is not defined');
|
|
32
|
+
}
|
|
33
|
+
const url = this.spacePageUrl(`contact/${this.$contactID()}`);
|
|
34
|
+
if (url) {
|
|
35
|
+
this.navController
|
|
36
|
+
.navigateBack(url)
|
|
37
|
+
.catch(this.errorLogger.logErrorHandler('failed navigate to parent contact'));
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: NewLocationPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
41
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: NewLocationPageComponent, isStandalone: true, selector: "sneat-new-location-page", providers: [{ provide: ClassName, useValue: 'NewLocationPageComponent' }], usesInheritance: true, ngImport: i0, template: "<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", dependencies: [{ kind: "component", type: LocationFormComponent, selector: "sneat-location-form", inputs: ["$space", "contactRole", "countryID", "location", "parentContact", "hideSubmitButton", "label", "contactType"], outputs: ["locationChange", "locationCreated"] }, { kind: "component", type: IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: IonBackButton, selector: "ion-back-button" }, { kind: "component", type: IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: IonContent, selector: "ion-content", inputs: ["color", "fixedSlotPlacement", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "pipe", type: PersonTitle, name: "personTitle" }] }); }
|
|
42
|
+
}
|
|
43
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: NewLocationPageComponent, decorators: [{
|
|
44
|
+
type: Component,
|
|
45
|
+
args: [{ selector: 'sneat-new-location-page', imports: [
|
|
46
|
+
LocationFormComponent,
|
|
47
|
+
PersonTitle,
|
|
48
|
+
IonHeader,
|
|
49
|
+
IonToolbar,
|
|
50
|
+
IonBackButton,
|
|
51
|
+
IonTitle,
|
|
52
|
+
IonContent,
|
|
53
|
+
], providers: [{ provide: ClassName, useValue: 'NewLocationPageComponent' }], template: "<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" }]
|
|
54
|
+
}], ctorParameters: () => [] });
|
|
55
|
+
//# sourceMappingURL=new-location-page.component.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"new-location-page.component.js","sourceRoot":"","sources":["../../../../../../../../libs/contactus/internal/src/lib/pages/new-location/new-location-page.component.ts","../../../../../../../../libs/contactus/internal/src/lib/pages/new-location/new-location-page.component.html"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EACL,aAAa,EACb,UAAU,EACV,SAAS,EACT,QAAQ,EACR,UAAU,GACX,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAEhE,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;;AAgBvD,MAAM,OAAO,wBAAyB,SAAQ,eAAe;IAO3D;QACE,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC;QAPhC,gBAAW,GAA4B;YACrC,EAAE,EAAE,EAAE;YACN,KAAK,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;YAC3B,qBAAqB;SACtB,CAAC;IAIF,CAAC;IAEkB,iBAAiB;QAClC,KAAK,CAAC,iBAAiB,EAAE,CAAC;QAC1B,qEAAqE;QACrE,yFAAyF;QACzF,IAAI;IACN,CAAC;IAED,iBAAiB,CAAC,OAAgC;QAChD,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC;IAC7B,CAAC;IAED,gBAAgB,CAAC,OAAgC;QAC/C,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC;QAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACzB,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;QAC1C,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QAC9D,IAAI,GAAG,EAAE,CAAC;YACR,IAAI,CAAC,aAAa;iBACf,YAAY,CAAC,GAAG,CAAC;iBACjB,KAAK,CACJ,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,mCAAmC,CAAC,CACtE,CAAC;QACN,CAAC;IACH,CAAC;8GApCU,wBAAwB;kGAAxB,wBAAwB,sEAFxB,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,0BAA0B,EAAE,CAAC,iDC3B3E,8nBAyBA,4CDNI,qBAAqB,yOAErB,SAAS,oGACT,UAAU,mFACV,aAAa,4DACb,QAAQ,iFACR,UAAU,mKALV,WAAW;;2FASF,wBAAwB;kBAdpC,SAAS;+BACE,yBAAyB,WAE1B;wBACP,qBAAqB;wBACrB,WAAW;wBACX,SAAS;wBACT,UAAU;wBACV,aAAa;wBACb,QAAQ;wBACR,UAAU;qBACX,aACU,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,0BAA0B,EAAE,CAAC","sourcesContent":["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/contactus-shared';\nimport { ContactService } from '@sneat/contactus-services';\nimport { LocationFormComponent } from '@sneat/contactus-shared';\nimport { IContactWithOptionalDbo } from '@sneat/contactus-core';\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"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sneat-contactus-internal.js","sourceRoot":"","sources":["../../../../../libs/contactus/internal/src/sneat-contactus-internal.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,SAAS,CAAC","sourcesContent":["/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"]}
|
package/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './lib';
|
package/lib/index.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { SpaceMemberType } from '@sneat/auth-models';
|
|
2
|
+
import { ContactusModuleBaseComponent } from '@sneat/contactus-shared';
|
|
3
|
+
import { IIdAndBriefAndOptionalDbo } from '@sneat/core';
|
|
4
|
+
import { ContactusSpaceService } from '@sneat/contactus-services';
|
|
5
|
+
import { IContactBrief, IContactDbo } from '@sneat/contactus-core';
|
|
6
|
+
export declare abstract class MembersBasePage extends ContactusModuleBaseComponent {
|
|
7
|
+
members?: readonly IIdAndBriefAndOptionalDbo<IContactBrief, IContactDbo>[];
|
|
8
|
+
abstract get memberType(): SpaceMemberType;
|
|
9
|
+
protected constructor(contactusTeamService: ContactusSpaceService);
|
|
10
|
+
goNewMember: () => void;
|
|
11
|
+
get supportsMemberGroups(): boolean;
|
|
12
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { MemberRelationship } from '@sneat/contactus-core';
|
|
2
|
+
import { MemberBasePage } from '../member-base-page';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export declare class SpaceMemberPageComponent extends MemberBasePage {
|
|
5
|
+
relatedAs?: MemberRelationship;
|
|
6
|
+
constructor();
|
|
7
|
+
removeMember(): void;
|
|
8
|
+
private setRelatedAs;
|
|
9
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<SpaceMemberPageComponent, never>;
|
|
10
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<SpaceMemberPageComponent, "sneat-space-member-page", never, {}, {}, never, never, true, never>;
|
|
11
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { IContactContext } from '@sneat/contactus-core';
|
|
2
|
+
import { ContactService } from '@sneat/contactus-services';
|
|
3
|
+
import { ContactBasePage } from '../../pages/contact-base-page';
|
|
4
|
+
export declare abstract class MemberBasePage extends ContactBasePage {
|
|
5
|
+
segment: 'friends' | 'other' | 'summary';
|
|
6
|
+
private memberContext?;
|
|
7
|
+
protected constructor(contactService: ContactService);
|
|
8
|
+
get member(): IContactContext | undefined;
|
|
9
|
+
protected goNew: (_event: Event, _type: "new-contact" | "new-document" | "new-liability" | "new-asset", _relation?: string) => void;
|
|
10
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { SpaceMemberType } from '@sneat/auth-models';
|
|
2
|
+
import { MemberGroup } from '@sneat/contactus-shared';
|
|
3
|
+
import { IMemberGroupContext } from '@sneat/contactus-core';
|
|
4
|
+
import { MembersBasePage } from '../../members-base-page';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
export declare class MembersPageComponent extends MembersBasePage {
|
|
7
|
+
memberGroups?: readonly IMemberGroupContext[];
|
|
8
|
+
segment: 'all' | 'groups';
|
|
9
|
+
readonly memberType: SpaceMemberType;
|
|
10
|
+
constructor();
|
|
11
|
+
protected goGroup(memberGroup: IMemberGroupContext): void;
|
|
12
|
+
protected goNewMemberPage(group?: MemberGroup): void;
|
|
13
|
+
goNew(): void;
|
|
14
|
+
onSpaceDboChanged(): void;
|
|
15
|
+
private loadData;
|
|
16
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<MembersPageComponent, never>;
|
|
17
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<MembersPageComponent, "sneat-members-page", never, {}, {}, never, never, true, never>;
|
|
18
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './new-member-page.component';
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { OnChanges, SimpleChanges } from '@angular/core';
|
|
2
|
+
import { UntypedFormGroup } from '@angular/forms';
|
|
3
|
+
import { PersonWizardComponent } from '@sneat/contactus-shared';
|
|
4
|
+
import { IContactusSpaceDboAndID, IPersonRequirements, NewContactBaseDboAndSpaceRef } from '@sneat/contactus-core';
|
|
5
|
+
import { WithNewContactInput } from '@sneat/contactus-shared';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
export declare class NewMemberFormComponent extends WithNewContactInput implements OnChanges {
|
|
8
|
+
personRequirements: IPersonRequirements;
|
|
9
|
+
private readonly navController;
|
|
10
|
+
private readonly hasNavHistory;
|
|
11
|
+
protected readonly $isSubmitting: import("@angular/core").WritableSignal<boolean>;
|
|
12
|
+
protected readonly $canSubmit: import("@angular/core").Signal<boolean | "">;
|
|
13
|
+
protected readonly $qrData: import("@angular/core").Signal<string>;
|
|
14
|
+
protected contactusSpace?: IContactusSpaceDboAndID;
|
|
15
|
+
protected readonly $isContactReady: import("@angular/core").Signal<boolean>;
|
|
16
|
+
personFormComponent?: PersonWizardComponent;
|
|
17
|
+
addMemberForm: UntypedFormGroup;
|
|
18
|
+
private readonly memberService;
|
|
19
|
+
constructor();
|
|
20
|
+
ngOnChanges(changes: SimpleChanges): void;
|
|
21
|
+
private setPersonRequirements;
|
|
22
|
+
submit(): void;
|
|
23
|
+
onContactChanged(contact: NewContactBaseDboAndSpaceRef): void;
|
|
24
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<NewMemberFormComponent, never>;
|
|
25
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<NewMemberFormComponent, "sneat-new-member-form", never, {}, {}, never, never, true, never>;
|
|
26
|
+
}
|