@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.
Files changed (71) hide show
  1. package/esm2022/index.js +2 -0
  2. package/esm2022/index.js.map +1 -0
  3. package/esm2022/lib/contactus-routing.module.js +48 -0
  4. package/esm2022/lib/contactus-routing.module.js.map +1 -0
  5. package/esm2022/lib/index.js +3 -0
  6. package/esm2022/lib/index.js.map +1 -0
  7. package/esm2022/lib/members/index.js +4 -0
  8. package/esm2022/lib/members/index.js.map +1 -0
  9. package/esm2022/lib/members/members-base-page.js +30 -0
  10. package/esm2022/lib/members/members-base-page.js.map +1 -0
  11. package/esm2022/lib/members/members-routing.js +32 -0
  12. package/esm2022/lib/members/members-routing.js.map +1 -0
  13. package/esm2022/lib/members/pages/member/space-member-page.component.js +95 -0
  14. package/esm2022/lib/members/pages/member/space-member-page.component.js.map +1 -0
  15. package/esm2022/lib/members/pages/member-base-page.js +23 -0
  16. package/esm2022/lib/members/pages/member-base-page.js.map +1 -0
  17. package/esm2022/lib/members/pages/members/members-page.component.js +155 -0
  18. package/esm2022/lib/members/pages/members/members-page.component.js.map +1 -0
  19. package/esm2022/lib/members/pages/new-member/index.js +2 -0
  20. package/esm2022/lib/members/pages/new-member/index.js.map +1 -0
  21. package/esm2022/lib/members/pages/new-member/new-member-form.component.js +223 -0
  22. package/esm2022/lib/members/pages/new-member/new-member-form.component.js.map +1 -0
  23. package/esm2022/lib/members/pages/new-member/new-member-page.component.js +132 -0
  24. package/esm2022/lib/members/pages/new-member/new-member-page.component.js.map +1 -0
  25. package/esm2022/lib/pages/contact/contact-page.component.js +96 -0
  26. package/esm2022/lib/pages/contact/contact-page.component.js.map +1 -0
  27. package/esm2022/lib/pages/contact/index.js +2 -0
  28. package/esm2022/lib/pages/contact/index.js.map +1 -0
  29. package/esm2022/lib/pages/contact-base-page.js +59 -0
  30. package/esm2022/lib/pages/contact-base-page.js.map +1 -0
  31. package/esm2022/lib/pages/contacts/contacts-page.component.js +113 -0
  32. package/esm2022/lib/pages/contacts/contacts-page.component.js.map +1 -0
  33. package/esm2022/lib/pages/contacts/index.js +2 -0
  34. package/esm2022/lib/pages/contacts/index.js.map +1 -0
  35. package/esm2022/lib/pages/index.js +5 -0
  36. package/esm2022/lib/pages/index.js.map +1 -0
  37. package/esm2022/lib/pages/new-contact/index.js +2 -0
  38. package/esm2022/lib/pages/new-contact/index.js.map +1 -0
  39. package/esm2022/lib/pages/new-contact/new-contact-page.component.js +104 -0
  40. package/esm2022/lib/pages/new-contact/new-contact-page.component.js.map +1 -0
  41. package/esm2022/lib/pages/new-location/index.js +2 -0
  42. package/esm2022/lib/pages/new-location/index.js.map +1 -0
  43. package/esm2022/lib/pages/new-location/new-location-page.component.js +55 -0
  44. package/esm2022/lib/pages/new-location/new-location-page.component.js.map +1 -0
  45. package/esm2022/sneat-contactus-internal.js +5 -0
  46. package/esm2022/sneat-contactus-internal.js.map +1 -0
  47. package/index.d.ts +1 -0
  48. package/lib/contactus-routing.module.d.ts +2 -0
  49. package/lib/index.d.ts +2 -0
  50. package/lib/members/index.d.ts +2 -0
  51. package/lib/members/members-base-page.d.ts +12 -0
  52. package/lib/members/members-routing.d.ts +2 -0
  53. package/lib/members/pages/member/space-member-page.component.d.ts +11 -0
  54. package/lib/members/pages/member-base-page.d.ts +10 -0
  55. package/lib/members/pages/members/members-page.component.d.ts +18 -0
  56. package/lib/members/pages/new-member/index.d.ts +1 -0
  57. package/lib/members/pages/new-member/new-member-form.component.d.ts +26 -0
  58. package/lib/members/pages/new-member/new-member-page.component.d.ts +17 -0
  59. package/lib/pages/contact/contact-page.component.d.ts +15 -0
  60. package/lib/pages/contact/index.d.ts +1 -0
  61. package/lib/pages/contact-base-page.d.ts +16 -0
  62. package/lib/pages/contacts/contacts-page.component.d.ts +22 -0
  63. package/lib/pages/contacts/index.d.ts +1 -0
  64. package/lib/pages/index.d.ts +4 -0
  65. package/lib/pages/new-contact/index.d.ts +1 -0
  66. package/lib/pages/new-contact/new-contact-page.component.d.ts +24 -0
  67. package/lib/pages/new-location/index.d.ts +1 -0
  68. package/lib/pages/new-location/new-location-page.component.d.ts +12 -0
  69. package/package.json +26 -0
  70. package/sneat-contactus-internal.d.ts +5 -0
  71. package/tsconfig.lib.prod.tsbuildinfo +1 -0
@@ -0,0 +1,2 @@
1
+ export * from './lib';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../libs/contactus/internal/src/index.ts"],"names":[],"mappings":"AAAA,cAAc,OAAO,CAAC","sourcesContent":["export * from './lib';\n"]}
@@ -0,0 +1,48 @@
1
+ import { membersRoutes } from './members';
2
+ // import {guardRoute} from '../../utils/guard-route';
3
+ export const contactusRoutes = [
4
+ {
5
+ path: 'contacts',
6
+ data: { title: 'Contacts' },
7
+ loadComponent: () => import('./pages/contacts/contacts-page.component').then((m) => m.ContactsPageComponent),
8
+ // ...guardRoute,
9
+ },
10
+ {
11
+ path: 'new-contact',
12
+ data: { title: 'New Contact' },
13
+ loadComponent: () => import('./pages').then((m) => m.NewContactPageComponent),
14
+ // ...guardRoute,
15
+ },
16
+ {
17
+ path: 'contact/:contactID',
18
+ data: { title: 'Contact' },
19
+ loadComponent: () => import('./pages').then((m) => m.ContactPageComponent),
20
+ // ...guardRoute,
21
+ },
22
+ {
23
+ path: 'contact/:contactID/new-location',
24
+ data: { title: 'New location' },
25
+ loadComponent: () => import('./pages').then((m) => m.NewLocationPageComponent),
26
+ // ...guardRoute,
27
+ },
28
+ ...membersRoutes,
29
+ // {
30
+ // path: 'applicants',
31
+ // loadChildren: () => import('./pages/contacts/contacts-page.module')
32
+ // .then(m => m.ContactsPageModule),
33
+ // // ...guardRoute,
34
+ // },
35
+ // {
36
+ // path: 'tenants',
37
+ // loadChildren: () => import('./pages/contacts/contacts-page.module')
38
+ // .then(m => m.ContactsPageModule),
39
+ // // ...guardRoute,
40
+ // },
41
+ // {
42
+ // path: 'landlords',
43
+ // loadChildren: () => import('./pages/contacts/contacts-page.module')
44
+ // .then(m => m.ContactsPageModule),
45
+ // // ...guardRoute,
46
+ // },
47
+ ];
48
+ //# sourceMappingURL=contactus-routing.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contactus-routing.module.js","sourceRoot":"","sources":["../../../../../../libs/contactus/internal/src/lib/contactus-routing.module.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE1C,sDAAsD;AAEtD,MAAM,CAAC,MAAM,eAAe,GAAY;IACtC;QACE,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE;QAC3B,aAAa,EAAE,GAAG,EAAE,CAClB,MAAM,CAAC,0CAA0C,CAAC,CAAC,IAAI,CACrD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,qBAAqB,CAC/B;QACH,iBAAiB;KAClB;IACD;QACE,IAAI,EAAE,aAAa;QACnB,IAAI,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE;QAC9B,aAAa,EAAE,GAAG,EAAE,CAClB,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,uBAAuB,CAAC;QAC1D,iBAAiB;KAClB;IACD;QACE,IAAI,EAAE,oBAAoB;QAC1B,IAAI,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE;QAC1B,aAAa,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,oBAAoB,CAAC;QAC1E,iBAAiB;KAClB;IACD;QACE,IAAI,EAAE,iCAAiC;QACvC,IAAI,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE;QAC/B,aAAa,EAAE,GAAG,EAAE,CAClB,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,wBAAwB,CAAC;QAC3D,iBAAiB;KAClB;IACD,GAAG,aAAa;IAChB,IAAI;IACJ,uBAAuB;IACvB,uEAAuE;IACvE,sCAAsC;IACtC,qBAAqB;IACrB,KAAK;IACL,IAAI;IACJ,oBAAoB;IACpB,uEAAuE;IACvE,sCAAsC;IACtC,qBAAqB;IACrB,KAAK;IACL,IAAI;IACJ,sBAAsB;IACtB,uEAAuE;IACvE,sCAAsC;IACtC,qBAAqB;IACrB,KAAK;CACN,CAAC","sourcesContent":["import { Route } from '@angular/router';\nimport { membersRoutes } from './members';\n\n// import {guardRoute} from '../../utils/guard-route';\n\nexport const contactusRoutes: Route[] = [\n {\n path: 'contacts',\n data: { title: 'Contacts' },\n loadComponent: () =>\n import('./pages/contacts/contacts-page.component').then(\n (m) => m.ContactsPageComponent,\n ),\n // ...guardRoute,\n },\n {\n path: 'new-contact',\n data: { title: 'New Contact' },\n loadComponent: () =>\n import('./pages').then((m) => m.NewContactPageComponent),\n // ...guardRoute,\n },\n {\n path: 'contact/:contactID',\n data: { title: 'Contact' },\n loadComponent: () => import('./pages').then((m) => m.ContactPageComponent),\n // ...guardRoute,\n },\n {\n path: 'contact/:contactID/new-location',\n data: { title: 'New location' },\n loadComponent: () =>\n import('./pages').then((m) => m.NewLocationPageComponent),\n // ...guardRoute,\n },\n ...membersRoutes,\n // {\n // \tpath: 'applicants',\n // \tloadChildren: () => import('./pages/contacts/contacts-page.module')\n // \t\t.then(m => m.ContactsPageModule),\n // \t// ...guardRoute,\n // },\n // {\n // \tpath: 'tenants',\n // \tloadChildren: () => import('./pages/contacts/contacts-page.module')\n // \t\t.then(m => m.ContactsPageModule),\n // \t// ...guardRoute,\n // },\n // {\n // \tpath: 'landlords',\n // \tloadChildren: () => import('./pages/contacts/contacts-page.module')\n // \t\t.then(m => m.ContactsPageModule),\n // \t// ...guardRoute,\n // },\n];\n"]}
@@ -0,0 +1,3 @@
1
+ export * from './contactus-routing.module';
2
+ export { membersRoutes } from './members/members-routing';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../libs/contactus/internal/src/lib/index.ts"],"names":[],"mappings":"AAAA,cAAc,4BAA4B,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC","sourcesContent":["export * from './contactus-routing.module';\nexport { membersRoutes } from './members/members-routing';\n"]}
@@ -0,0 +1,4 @@
1
+ export * from './members-routing';
2
+ // export * from './pages/member-routing';
3
+ export * from './members-routing';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../libs/contactus/internal/src/lib/members/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,0CAA0C;AAC1C,cAAc,mBAAmB,CAAC","sourcesContent":["export * from './members-routing';\n// export * from './pages/member-routing';\nexport * from './members-routing';\n"]}
@@ -0,0 +1,30 @@
1
+ import { ContactusModuleBaseComponent } from '@sneat/contactus-shared';
2
+ import { isSpaceSupportsMemberGroups } from '@sneat/dto';
3
+ export class MembersBasePage extends ContactusModuleBaseComponent {
4
+ // protected setCurrentUser(dto: IDtoUser) {
5
+ // this.currentUserDto = dto;
6
+ // }
7
+ constructor(contactusTeamService) {
8
+ super(contactusTeamService);
9
+ this.goNewMember = () => {
10
+ // TODO: use it?
11
+ this.navigateForwardToSpacePage('new-member').catch(this.logErrorHandler('failed to navigate to new member page'));
12
+ };
13
+ // this.userService.currentUserLoaded.subscribe(user => this.setCurrentUser(user));
14
+ }
15
+ // goMember = (member: IMemberContext, page?: MemberPages) => {
16
+ // this.navigateForwardToSpacePage(
17
+ // (page || 'member') + '/' + member.id,
18
+ // ).catch(this.logErrorHandler('failed to navigate to team member page'));
19
+ // };
20
+ //
21
+ // goContact = (id: string, event: Event) => {
22
+ // event.stopPropagation();
23
+ // this.navigateForwardToSpacePage(`contact/${id}`)
24
+ // .catch(this.logErrorHandler('failed to navigate to contact page'));
25
+ // };
26
+ get supportsMemberGroups() {
27
+ return (!!this.space?.brief && isSpaceSupportsMemberGroups(this.space.brief.type));
28
+ }
29
+ }
30
+ //# sourceMappingURL=members-base-page.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"members-base-page.js","sourceRoot":"","sources":["../../../../../../../libs/contactus/internal/src/lib/members/members-base-page.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,4BAA4B,EAAE,MAAM,yBAAyB,CAAC;AAEvE,OAAO,EAAE,2BAA2B,EAAE,MAAM,YAAY,CAAC;AAIzD,MAAM,OAAgB,eAAgB,SAAQ,4BAA4B;IAUxE,4CAA4C;IAC5C,iCAAiC;IACjC,IAAI;IAEJ,YAAsB,oBAA2C;QAC/D,KAAK,CAAC,oBAAoB,CAAC,CAAC;QAI9B,gBAAW,GAAG,GAAG,EAAE;YACjB,gBAAgB;YAChB,IAAI,CAAC,0BAA0B,CAAC,YAAY,CAAC,CAAC,KAAK,CACjD,IAAI,CAAC,eAAe,CAAC,uCAAuC,CAAC,CAC9D,CAAC;QACJ,CAAC,CAAC;QARA,mFAAmF;IACrF,CAAC;IASD,+DAA+D;IAC/D,oCAAoC;IACpC,0CAA0C;IAC1C,4EAA4E;IAC5E,KAAK;IACL,EAAE;IACF,8CAA8C;IAC9C,4BAA4B;IAC5B,oDAAoD;IACpD,wEAAwE;IACxE,KAAK;IAEL,IAAW,oBAAoB;QAC7B,OAAO,CACL,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,IAAI,2BAA2B,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAC1E,CAAC;IACJ,CAAC;CAcF","sourcesContent":["import { SpaceMemberType } from '@sneat/auth-models';\nimport { ContactusModuleBaseComponent } from '@sneat/contactus-shared';\nimport { IIdAndBriefAndOptionalDbo } from '@sneat/core';\nimport { isSpaceSupportsMemberGroups } from '@sneat/dto';\nimport { ContactusSpaceService } from '@sneat/contactus-services';\nimport { IContactBrief, IContactDbo } from '@sneat/contactus-core';\n\nexport abstract class MembersBasePage extends ContactusModuleBaseComponent {\n public members?: readonly IIdAndBriefAndOptionalDbo<\n IContactBrief,\n IContactDbo\n >[];\n\n // protected currentUserDto: IDtoUser;\n\n abstract get memberType(): SpaceMemberType;\n\n // protected setCurrentUser(dto: IDtoUser) {\n // this.currentUserDto = dto;\n // }\n\n protected constructor(contactusTeamService: ContactusSpaceService) {\n super(contactusTeamService);\n // this.userService.currentUserLoaded.subscribe(user => this.setCurrentUser(user));\n }\n\n goNewMember = () => {\n // TODO: use it?\n this.navigateForwardToSpacePage('new-member').catch(\n this.logErrorHandler('failed to navigate to new member page'),\n );\n };\n\n // goMember = (member: IMemberContext, page?: MemberPages) => {\n // \tthis.navigateForwardToSpacePage(\n // \t\t(page || 'member') + '/' + member.id,\n // \t).catch(this.logErrorHandler('failed to navigate to team member page'));\n // };\n //\n // goContact = (id: string, event: Event) => {\n // \tevent.stopPropagation();\n // \tthis.navigateForwardToSpacePage(`contact/${id}`)\n // \t\t.catch(this.logErrorHandler('failed to navigate to contact page'));\n // };\n\n public get supportsMemberGroups(): boolean {\n return (\n !!this.space?.brief && isSpaceSupportsMemberGroups(this.space.brief.type)\n );\n }\n\n // protected setPageCommuneIds(source: string, communeIds: ICommuneIds, communeDto?: ICommuneDto): void {\n // \tsuper.setPageCommuneIds(source, communeIds, communeDto);\n // \tif (this.communeRealId) {\n // \t\tthis.membersService.selectByType(this.communeRealId, this.memberType)\n // \t\t\t.subscribe(\n // \t\t\t\tmembers => {\n // \t\t\t\t\tthis.members = members;\n // \t\t\t\t},\n // \t\t\t\tthis.errorLogger.logError,\n // \t\t\t);\n // \t}\n // }\n}\n"]}
@@ -0,0 +1,32 @@
1
+ export const membersRoutes = [
2
+ {
3
+ path: 'members',
4
+ data: { title: 'Members' },
5
+ loadComponent: () => import('./pages/members/members-page.component').then((m) => m.MembersPageComponent),
6
+ // ...guardRoute,
7
+ },
8
+ {
9
+ path: 'new-member',
10
+ data: { title: 'New member' },
11
+ loadComponent: () => import('./pages/new-member').then((m) => m.NewMemberPageComponent),
12
+ // ...guardRoute,
13
+ },
14
+ {
15
+ path: 'member/:contactID',
16
+ data: { title: 'Member' },
17
+ loadComponent: () => import('./pages/member/space-member-page.component').then((m) => m.SpaceMemberPageComponent),
18
+ },
19
+ // {
20
+ // path: 'pupils',
21
+ // loadChildren: () => import('./pupils/pupils.module')
22
+ // .then(m => m.PupilsPageModule),
23
+ // // ...guardRoute,
24
+ // },
25
+ // {
26
+ // path: 'staff',
27
+ // loadChildren: () => import('./staff/staff.module')
28
+ // .then(m => m.StaffPageModule),
29
+ // // ...guardRoute,
30
+ // },
31
+ ];
32
+ //# sourceMappingURL=members-routing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"members-routing.js","sourceRoot":"","sources":["../../../../../../../libs/contactus/internal/src/lib/members/members-routing.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,aAAa,GAAY;IACpC;QACE,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE;QAC1B,aAAa,EAAE,GAAG,EAAE,CAClB,MAAM,CAAC,wCAAwC,CAAC,CAAC,IAAI,CACnD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,oBAAoB,CAC9B;QACH,iBAAiB;KAClB;IACD;QACE,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE;QAC7B,aAAa,EAAE,GAAG,EAAE,CAClB,MAAM,CAAC,oBAAoB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,sBAAsB,CAAC;QACpE,iBAAiB;KAClB;IACD;QACE,IAAI,EAAE,mBAAmB;QACzB,IAAI,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE;QACzB,aAAa,EAAE,GAAG,EAAE,CAClB,MAAM,CAAC,4CAA4C,CAAC,CAAC,IAAI,CACvD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,wBAAwB,CAClC;KACJ;IAED,IAAI;IACJ,mBAAmB;IACnB,wDAAwD;IACxD,oCAAoC;IACpC,qBAAqB;IACrB,KAAK;IACL,IAAI;IACJ,kBAAkB;IAClB,sDAAsD;IACtD,mCAAmC;IACnC,qBAAqB;IACrB,KAAK;CACN,CAAC","sourcesContent":["import { Route } from '@angular/router';\n\nexport const membersRoutes: Route[] = [\n {\n path: 'members',\n data: { title: 'Members' },\n loadComponent: () =>\n import('./pages/members/members-page.component').then(\n (m) => m.MembersPageComponent,\n ),\n // ...guardRoute,\n },\n {\n path: 'new-member',\n data: { title: 'New member' },\n loadComponent: () =>\n import('./pages/new-member').then((m) => m.NewMemberPageComponent),\n // ...guardRoute,\n },\n {\n path: 'member/:contactID',\n data: { title: 'Member' },\n loadComponent: () =>\n import('./pages/member/space-member-page.component').then(\n (m) => m.SpaceMemberPageComponent,\n ),\n },\n\n // {\n // \tpath: 'pupils',\n // \tloadChildren: () => import('./pupils/pupils.module')\n // \t\t.then(m => m.PupilsPageModule),\n // \t// ...guardRoute,\n // },\n // {\n // \tpath: 'staff',\n // \tloadChildren: () => import('./staff/staff.module')\n // \t\t.then(m => m.StaffPageModule),\n // \t// ...guardRoute,\n // },\n];\n"]}
@@ -0,0 +1,95 @@
1
+ import { Component, inject } from '@angular/core';
2
+ import { FormsModule } from '@angular/forms';
3
+ import { IonBackButton, IonButton, IonButtons, IonContent, IonHeader, IonIcon, IonMenuButton, IonTitle, IonToolbar, } from '@ionic/angular/standalone';
4
+ import { PersonTitle } from '@sneat/contactus-shared';
5
+ import { ContactService, ContactusServicesModule, } from '@sneat/contactus-services';
6
+ import { ContactDetailsComponent } from '@sneat/contactus-shared';
7
+ import { SpaceServiceModule } from '@sneat/space-services';
8
+ import { ClassName } from '@sneat/ui';
9
+ import { MemberBasePage } from '../member-base-page';
10
+ import * as i0 from "@angular/core";
11
+ export class SpaceMemberPageComponent extends MemberBasePage {
12
+ constructor() {
13
+ super(inject(ContactService));
14
+ }
15
+ // protected setMemberId(memberId: string): void {
16
+ // super.setMemberId(memberId);
17
+ // if (this.currentUserDto && this.communeRealId) {
18
+ // this.setRelatedAs();
19
+ // }
20
+ // }
21
+ // protected setPageCommuneIds(source: string, communeIds: ICommuneIds, communeDto?: ICommuneDto): void {
22
+ // super.setPageCommuneIds(source, communeIds, communeDto);
23
+ // if (this.currentUserDto && this.memberId) {
24
+ // this.setRelatedAs();
25
+ // }
26
+ // }
27
+ // protected setCurrentUser(dto: IUserDto): void {
28
+ // super.setCurrentUser(dto);
29
+ // this.logger.debug('CommuneMemberPage.setCurrentUser()', dto);
30
+ // if (this.memberId && this.communeRealId) {
31
+ // this.setRelatedAs();
32
+ // }
33
+ // }
34
+ removeMember() {
35
+ if (!confirm(`Are you sure you want to remove ${this.member?.brief?.title || this.member?.id} from ${this.space?.brief?.title}?`)) {
36
+ return;
37
+ }
38
+ if (!this.space) {
39
+ this.errorLogger.logError('Can not remove team member without team context');
40
+ return;
41
+ }
42
+ if (!this.member?.id) {
43
+ this.errorLogger.logError('Can not remove team member without knowing member ID');
44
+ return;
45
+ }
46
+ this.contactService
47
+ .removeSpaceMember({ spaceID: this.space.id, contactID: this.member?.id })
48
+ .subscribe({
49
+ next: () => {
50
+ this.navController
51
+ .pop()
52
+ .catch((err) => this.errorLogger.logError(err, 'Failed to pop navigator state'));
53
+ },
54
+ error: (err) => this.errorLogger.logError(err, 'Failed to remove member'),
55
+ });
56
+ }
57
+ setRelatedAs() {
58
+ // this.logger.debug('CommuneMemberPage.setRelatedAs()', this.currentUserDto);
59
+ // if (!this.currentUserDto) {
60
+ // return;
61
+ // }
62
+ // const userCommunes = this.currentUserDto && this.currentUserDto.communes;
63
+ // if (userCommunes) {
64
+ // const userCommuneInfo = userCommunes.find(c => eq(c.id, this.communeRealId));
65
+ // if (userCommuneInfo && userCommuneInfo.members) {
66
+ // const memberInfo = userCommuneInfo.members[this.memberId];
67
+ // if (memberInfo) {
68
+ // this.relatedAs = memberInfo.relatedAs;
69
+ // }
70
+ // }
71
+ // }
72
+ }
73
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: SpaceMemberPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
74
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: SpaceMemberPageComponent, isStandalone: true, selector: "sneat-space-member-page", providers: [{ provide: ClassName, useValue: 'SpaceMemberPageComponent' }], usesInheritance: true, ngImport: i0, template: "<ion-header>\n <ion-toolbar color=\"light\">\n <ion-buttons slot=\"start\">\n <ion-back-button [defaultHref]=\"spacePageUrl('members')\" />\n </ion-buttons>\n <ion-title>\n @switch (space.type) {\n @case (\"family\") {\n @if ($contact(); as contact) {\n Family member: {{ contact | personTitle }}\n } @else {\n Family member\n }\n }\n @case (\"cohabit\") {\n Housemates\n }\n @default {\n <ion-title>Member</ion-title>\n }\n }\n </ion-title>\n <!--<ion-title *ngIf=\"member else titleNoMember\">{{member.title}}</ion-title>-->\n <!--<ng-template #titleNoMember>-->\n <!--<ion-title>Member</ion-title>-->\n <!--</ng-template>-->\n <ion-buttons slot=\"end\">\n @if (member) {\n <ion-button\n [title]=\"\n member.brief?.userID === spaceParams.userService.currentUserID\n ? 'Leave team'\n : 'Remove team member'\n \"\n (click)=\"removeMember()\"\n >\n <ion-icon name=\"trash\" />\n </ion-button>\n }\n <ion-menu-button menu=\"mainMenu\" />\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n\n<ion-content class=\"cardy\">\n <sneat-contact-details [$contact]=\"$contact()\" [$space]=\"$space()\" />\n</ion-content>\n", dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "component", type: ContactDetailsComponent, selector: "sneat-contact-details", inputs: ["$contact"], outputs: ["contactChange"] }, { kind: "ngmodule", type: ContactusServicesModule }, { kind: "ngmodule", type: SpaceServiceModule }, { kind: "component", type: IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: IonBackButton, selector: "ion-back-button" }, { kind: "component", type: IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonMenuButton, selector: "ion-menu-button", inputs: ["autoHide", "color", "disabled", "menu", "mode", "type"] }, { kind: "component", type: IonContent, selector: "ion-content", inputs: ["color", "fixedSlotPlacement", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "pipe", type: PersonTitle, name: "personTitle" }] }); }
75
+ }
76
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: SpaceMemberPageComponent, decorators: [{
77
+ type: Component,
78
+ args: [{ selector: 'sneat-space-member-page', imports: [
79
+ FormsModule,
80
+ ContactDetailsComponent,
81
+ ContactusServicesModule,
82
+ PersonTitle,
83
+ SpaceServiceModule,
84
+ IonHeader,
85
+ IonToolbar,
86
+ IonButtons,
87
+ IonBackButton,
88
+ IonTitle,
89
+ IonIcon,
90
+ IonMenuButton,
91
+ IonContent,
92
+ IonButton,
93
+ ], providers: [{ provide: ClassName, useValue: 'SpaceMemberPageComponent' }], template: "<ion-header>\n <ion-toolbar color=\"light\">\n <ion-buttons slot=\"start\">\n <ion-back-button [defaultHref]=\"spacePageUrl('members')\" />\n </ion-buttons>\n <ion-title>\n @switch (space.type) {\n @case (\"family\") {\n @if ($contact(); as contact) {\n Family member: {{ contact | personTitle }}\n } @else {\n Family member\n }\n }\n @case (\"cohabit\") {\n Housemates\n }\n @default {\n <ion-title>Member</ion-title>\n }\n }\n </ion-title>\n <!--<ion-title *ngIf=\"member else titleNoMember\">{{member.title}}</ion-title>-->\n <!--<ng-template #titleNoMember>-->\n <!--<ion-title>Member</ion-title>-->\n <!--</ng-template>-->\n <ion-buttons slot=\"end\">\n @if (member) {\n <ion-button\n [title]=\"\n member.brief?.userID === spaceParams.userService.currentUserID\n ? 'Leave team'\n : 'Remove team member'\n \"\n (click)=\"removeMember()\"\n >\n <ion-icon name=\"trash\" />\n </ion-button>\n }\n <ion-menu-button menu=\"mainMenu\" />\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n\n<ion-content class=\"cardy\">\n <sneat-contact-details [$contact]=\"$contact()\" [$space]=\"$space()\" />\n</ion-content>\n" }]
94
+ }], ctorParameters: () => [] });
95
+ //# sourceMappingURL=space-member-page.component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"space-member-page.component.js","sourceRoot":"","sources":["../../../../../../../../../libs/contactus/internal/src/lib/members/pages/member/space-member-page.component.ts","../../../../../../../../../libs/contactus/internal/src/lib/members/pages/member/space-member-page.component.html"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EACL,aAAa,EACb,SAAS,EACT,UAAU,EACV,UAAU,EACV,SAAS,EACT,OAAO,EACP,aAAa,EACb,QAAQ,EACR,UAAU,GACX,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EACL,cAAc,EACd,uBAAuB,GACxB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAElE,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;;AAuBrD,MAAM,OAAO,wBAAyB,SAAQ,cAAc;IAG1D;QACE,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC;IAChC,CAAC;IAED,kDAAkD;IAClD,gCAAgC;IAChC,oDAAoD;IACpD,yBAAyB;IACzB,KAAK;IACL,IAAI;IAEJ,yGAAyG;IACzG,4DAA4D;IAC5D,+CAA+C;IAC/C,yBAAyB;IACzB,KAAK;IACL,IAAI;IAEJ,kDAAkD;IAClD,8BAA8B;IAC9B,iEAAiE;IACjE,8CAA8C;IAC9C,yBAAyB;IACzB,KAAK;IACL,IAAI;IAEG,YAAY;QACjB,IACE,CAAC,OAAO,CACN,mCACE,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,EAC5C,SAAS,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,GAAG,CACrC,EACD,CAAC;YACD,OAAO;QACT,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC,WAAW,CAAC,QAAQ,CACvB,iDAAiD,CAClD,CAAC;YACF,OAAO;QACT,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,CAAC;YACrB,IAAI,CAAC,WAAW,CAAC,QAAQ,CACvB,sDAAsD,CACvD,CAAC;YACF,OAAO;QACT,CAAC;QACD,IAAI,CAAC,cAAc;aAChB,iBAAiB,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,CAAC;aACzE,SAAS,CAAC;YACT,IAAI,EAAE,GAAG,EAAE;gBACT,IAAI,CAAC,aAAa;qBACf,GAAG,EAAE;qBACL,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CACb,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,EAAE,+BAA+B,CAAC,CAChE,CAAC;YACN,CAAC;YACD,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE,CACb,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,EAAE,yBAAyB,CAAC;SAC5D,CAAC,CAAC;IACP,CAAC;IAEO,YAAY;QAClB,8EAA8E;QAC9E,8BAA8B;QAC9B,WAAW;QACX,IAAI;QACJ,4EAA4E;QAC5E,sBAAsB;QACtB,iFAAiF;QACjF,qDAAqD;QACrD,+DAA+D;QAC/D,sBAAsB;QACtB,4CAA4C;QAC5C,MAAM;QACN,KAAK;QACL,IAAI;IACN,CAAC;8GAjFU,wBAAwB;kGAAxB,wBAAwB,sEAFxB,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,0BAA0B,EAAE,CAAC,iDC3C3E,m2CA+CA,2CDnBI,WAAW,+BACX,uBAAuB,mHACvB,uBAAuB,8BAEvB,kBAAkB,+BAClB,SAAS,oGACT,UAAU,mFACV,UAAU,8EACV,aAAa,4DACb,QAAQ,iFACR,OAAO,2JACP,aAAa,+HACb,UAAU,wKACV,SAAS,+OAVT,WAAW;;2FAcF,wBAAwB;kBArBpC,SAAS;+BACE,yBAAyB,WAE1B;wBACP,WAAW;wBACX,uBAAuB;wBACvB,uBAAuB;wBACvB,WAAW;wBACX,kBAAkB;wBAClB,SAAS;wBACT,UAAU;wBACV,UAAU;wBACV,aAAa;wBACb,QAAQ;wBACR,OAAO;wBACP,aAAa;wBACb,UAAU;wBACV,SAAS;qBACV,aACU,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,0BAA0B,EAAE,CAAC","sourcesContent":["import { Component, inject } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport {\n IonBackButton,\n IonButton,\n IonButtons,\n IonContent,\n IonHeader,\n IonIcon,\n IonMenuButton,\n IonTitle,\n IonToolbar,\n} from '@ionic/angular/standalone';\nimport { PersonTitle } from '@sneat/contactus-shared';\nimport {\n ContactService,\n ContactusServicesModule,\n} from '@sneat/contactus-services';\nimport { ContactDetailsComponent } from '@sneat/contactus-shared';\nimport { MemberRelationship } from '@sneat/contactus-core';\nimport { SpaceServiceModule } from '@sneat/space-services';\nimport { ClassName } from '@sneat/ui';\nimport { MemberBasePage } from '../member-base-page';\n\n@Component({\n selector: 'sneat-space-member-page',\n templateUrl: './space-member-page.component.html',\n imports: [\n FormsModule,\n ContactDetailsComponent,\n ContactusServicesModule,\n PersonTitle,\n SpaceServiceModule,\n IonHeader,\n IonToolbar,\n IonButtons,\n IonBackButton,\n IonTitle,\n IonIcon,\n IonMenuButton,\n IonContent,\n IonButton,\n ],\n providers: [{ provide: ClassName, useValue: 'SpaceMemberPageComponent' }],\n})\nexport class SpaceMemberPageComponent extends MemberBasePage {\n public relatedAs?: MemberRelationship;\n\n public constructor() {\n super(inject(ContactService));\n }\n\n // protected setMemberId(memberId: string): void {\n // \tsuper.setMemberId(memberId);\n // \tif (this.currentUserDto && this.communeRealId) {\n // \t\tthis.setRelatedAs();\n // \t}\n // }\n\n // protected setPageCommuneIds(source: string, communeIds: ICommuneIds, communeDto?: ICommuneDto): void {\n // \tsuper.setPageCommuneIds(source, communeIds, communeDto);\n // \tif (this.currentUserDto && this.memberId) {\n // \t\tthis.setRelatedAs();\n // \t}\n // }\n\n // protected setCurrentUser(dto: IUserDto): void {\n // \tsuper.setCurrentUser(dto);\n // \tthis.logger.debug('CommuneMemberPage.setCurrentUser()', dto);\n // \tif (this.memberId && this.communeRealId) {\n // \t\tthis.setRelatedAs();\n // \t}\n // }\n\n public removeMember() {\n if (\n !confirm(\n `Are you sure you want to remove ${\n this.member?.brief?.title || this.member?.id\n } from ${this.space?.brief?.title}?`,\n )\n ) {\n return;\n }\n if (!this.space) {\n this.errorLogger.logError(\n 'Can not remove team member without team context',\n );\n return;\n }\n if (!this.member?.id) {\n this.errorLogger.logError(\n 'Can not remove team member without knowing member ID',\n );\n return;\n }\n this.contactService\n .removeSpaceMember({ spaceID: this.space.id, contactID: this.member?.id })\n .subscribe({\n next: () => {\n this.navController\n .pop()\n .catch((err) =>\n this.errorLogger.logError(err, 'Failed to pop navigator state'),\n );\n },\n error: (err) =>\n this.errorLogger.logError(err, 'Failed to remove member'),\n });\n }\n\n private setRelatedAs(): void {\n // this.logger.debug('CommuneMemberPage.setRelatedAs()', this.currentUserDto);\n // if (!this.currentUserDto) {\n // \treturn;\n // }\n // const userCommunes = this.currentUserDto && this.currentUserDto.communes;\n // if (userCommunes) {\n // \tconst userCommuneInfo = userCommunes.find(c => eq(c.id, this.communeRealId));\n // \tif (userCommuneInfo && userCommuneInfo.members) {\n // \t\tconst memberInfo = userCommuneInfo.members[this.memberId];\n // \t\tif (memberInfo) {\n // \t\t\tthis.relatedAs = memberInfo.relatedAs;\n // \t\t}\n // \t}\n // }\n }\n}\n","<ion-header>\n <ion-toolbar color=\"light\">\n <ion-buttons slot=\"start\">\n <ion-back-button [defaultHref]=\"spacePageUrl('members')\" />\n </ion-buttons>\n <ion-title>\n @switch (space.type) {\n @case (\"family\") {\n @if ($contact(); as contact) {\n Family member: {{ contact | personTitle }}\n } @else {\n Family member\n }\n }\n @case (\"cohabit\") {\n Housemates\n }\n @default {\n <ion-title>Member</ion-title>\n }\n }\n </ion-title>\n <!--<ion-title *ngIf=\"member else titleNoMember\">{{member.title}}</ion-title>-->\n <!--<ng-template #titleNoMember>-->\n <!--<ion-title>Member</ion-title>-->\n <!--</ng-template>-->\n <ion-buttons slot=\"end\">\n @if (member) {\n <ion-button\n [title]=\"\n member.brief?.userID === spaceParams.userService.currentUserID\n ? 'Leave team'\n : 'Remove team member'\n \"\n (click)=\"removeMember()\"\n >\n <ion-icon name=\"trash\" />\n </ion-button>\n }\n <ion-menu-button menu=\"mainMenu\" />\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n\n<ion-content class=\"cardy\">\n <sneat-contact-details [$contact]=\"$contact()\" [$space]=\"$space()\" />\n</ion-content>\n"]}
@@ -0,0 +1,23 @@
1
+ import { ContactBasePage } from '../../pages/contact-base-page';
2
+ export class MemberBasePage extends ContactBasePage {
3
+ constructor(contactService) {
4
+ super(contactService, 'members');
5
+ this.segment = 'summary';
6
+ this.goNew = (
7
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
8
+ _event,
9
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
10
+ _type,
11
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
12
+ _relation) => {
13
+ // this.navigateForward(
14
+ // type,
15
+ // { member: this.memberContext, relation },
16
+ // { memberDto: this.memberDto });
17
+ };
18
+ }
19
+ get member() {
20
+ return this.memberContext;
21
+ }
22
+ }
23
+ //# sourceMappingURL=member-base-page.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"member-base-page.js","sourceRoot":"","sources":["../../../../../../../../libs/contactus/internal/src/lib/members/pages/member-base-page.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAEhE,MAAM,OAAgB,cAAe,SAAQ,eAAe;IAQ1D,YAAsB,cAA8B;QAClD,KAAK,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;QAR5B,YAAO,GAAoC,SAAS,CAAC;QAelD,UAAK,GAAG;QAChB,6DAA6D;QAC7D,MAAa;QACb,6DAA6D;QAC7D,KAAqE;QACrE,6DAA6D;QAC7D,SAAkB,EACZ,EAAE;YACR,wBAAwB;YACxB,SAAS;YACT,6CAA6C;YAC7C,mCAAmC;QACrC,CAAC,CAAC;IAlBF,CAAC;IAED,IAAW,MAAM;QACf,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;CAuFF","sourcesContent":["import { IContactContext } from '@sneat/contactus-core';\nimport { ContactService } from '@sneat/contactus-services';\nimport { ContactBasePage } from '../../pages/contact-base-page';\n\nexport abstract class MemberBasePage extends ContactBasePage {\n public segment: 'friends' | 'other' | 'summary' = 'summary';\n\n // override defaultBackUrl = CommuneTopPage.members;\n // public isDeleted?: boolean;\n // protected currentUserDto: IUserDto | undefined;\n private memberContext?: IContactContext;\n\n protected constructor(contactService: ContactService) {\n super(contactService, 'members');\n }\n\n public get member(): IContactContext | undefined {\n return this.memberContext;\n }\n\n protected goNew = (\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _event: Event,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _type: 'new-contact' | 'new-document' | 'new-liability' | 'new-asset',\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _relation?: string,\n ): void => {\n // this.navigateForward(\n // \ttype,\n // \t{ member: this.memberContext, relation },\n // \t{ memberDto: this.memberDto });\n };\n\n // protected setCurrentUser(dto?: IUserDto): void {\n // \tthis.currentUserDto = dto;\n // }\n\n // protected setMemberId(memberId: string): void {\n // \tconsole.log(`CommuneMemberPage.setMemberId(${memberId})`);\n // \tif (this.memberId === memberId) {\n // \t\treturn;\n // \t}\n // \tthis.memberId = memberId;\n // \tif (this.memberInfo && this.memberInfo.id !== memberId) {\n // \t\tthis.memberInfo = undefined;\n // \t}\n // \tif (this.memberDto && this.memberDto.id !== memberId) {\n // \t\tthis.memberDto = undefined;\n // \t}\n // \tthis.subscriptions.push(\n // \t\tthis.membersService.watchById(this.memberId)\n // \t\t\t.subscribe({\n // \t\t\t\tnext: memberDto => {\n // \t\t\t\t\tconsole.log('Loaded memberDto:', memberDto);\n // \t\t\t\t\tthis.setMemberDto(memberDto);\n // \t\t\t\t\tif (!memberDto) {\n // \t\t\t\t\t\treturn;\n // \t\t\t\t\t}\n // \t\t\t\t\tif (!eq(memberDto.communeId, this.communeRealId)) {\n // \t\t\t\t\t\tthis.setPageCommuneIds('MemberPage.memberFromObservable', { real: memberDto.communeId });\n // \t\t\t\t\t}\n // \t\t\t\t},\n // \t\t\t\terror: err => {\n // \t\t\t\t\tthis.errorLogger.logError(err, 'Failed to get member by ID');\n // \t\t\t\t},\n // \t\t\t}));\n // }\n //\n // protected setMemberInfo(memberInfo: ICommuneMemberInfo): void {\n // \tthis.memberInfo = memberInfo;\n // \tif (memberInfo && memberInfo.id && memberInfo.id !== this.memberId) {\n // \t\tthis.setMemberId(memberInfo.id);\n // \t}\n // }\n //\n // protected onCommuneChanged(source?: string): void {\n // \tsuper.onCommuneChanged(source);\n // \tif (!this.commune) {\n // \t\tthrow new Error('!this.commune');\n // \t}\n // \tif (!this.memberId && this.commune.dto.members) {\n // \t\tconst memberInfo = this.commune.dto.members.find(m => !m.id);\n // \t\tif (memberInfo) {\n // \t\t\tthis.setMemberInfo(memberInfo);\n // \t\t}\n // \t}\n // }\n\n // protected setMemberDto(memberDto?: IMemberDto): void {\n // \tconsole.log('setMemberDto', memberDto);\n // \tif (memberDto || this.memberDto) {\n // \t\tthis.isDeleted = !!this.memberDto && !memberDto;\n // \t}\n // \tthis.memberDto = memberDto;\n // \tif (!memberDto) {\n // \t\treturn;\n // \t}\n // \tif (!this.memberInfo || !eq(this.memberInfo.id, memberDto.id)) {\n // \t\tthis.setMemberInfo(newCommuneMemberInfo(memberDto));\n // \t}\n // \tif (memberDto.communeId && !eq(memberDto.communeId, this.communeRealId)) {\n // \t\tthis.setPageCommuneIds('MemberPage.memberFromHistoryState', { real: memberDto.communeId });\n // \t}\n // }\n}\n"]}
@@ -0,0 +1,155 @@
1
+ import { AsyncPipe } from '@angular/common';
2
+ import { FormsModule } from '@angular/forms';
3
+ import { IonBackButton, IonBadge, IonButton, IonButtons, IonCard, IonContent, IonFooter, IonHeader, IonIcon, IonItem, IonItemDivider, IonItemGroup, IonLabel, IonMenuButton, IonSegment, IonSegmentButton, IonToolbar, } from '@ionic/angular/standalone';
4
+ import { ContactusServicesModule, ContactusSpaceService, } from '@sneat/contactus-services';
5
+ import { FamilyMembersComponent } from '@sneat/contactus-shared';
6
+ import { isSpaceSupportsMemberGroups } from '@sneat/dto';
7
+ import { SpaceComponentBaseParams, SpacePageTitleComponent, } from '@sneat/space-components';
8
+ import { SpaceServiceModule } from '@sneat/space-services';
9
+ import { ClassName } from '@sneat/ui';
10
+ import { MembersBasePage } from '../../members-base-page';
11
+ import { Component, inject } from '@angular/core';
12
+ import * as i0 from "@angular/core";
13
+ import * as i1 from "@angular/forms";
14
+ export class MembersPageComponent extends MembersBasePage {
15
+ constructor() {
16
+ const contactusTeamService = inject(ContactusSpaceService);
17
+ super(contactusTeamService);
18
+ // public loadingStubs?: number[];
19
+ this.segment = 'all';
20
+ // public listMode: 'list' | 'cards' = 'list';
21
+ // public membersByGroupId: { [id: string]: IMemberContext[] } = {};
22
+ this.memberType = 'member';
23
+ }
24
+ goGroup(memberGroup) {
25
+ this.navigateForwardToSpacePage(`group/${memberGroup.id}`, {
26
+ state: { memberGroup },
27
+ }).catch(this.logErrorHandler('failed to navigate to members group page'));
28
+ }
29
+ goNewMemberPage(group) {
30
+ const queryParams = group
31
+ ? { group: group.id }
32
+ : undefined;
33
+ this.navigateForwardToSpacePage('new-member', {
34
+ queryParams,
35
+ state: { group },
36
+ }).catch(this.logErrorHandler('failed to navigate to new member page with age parameter'));
37
+ }
38
+ goNew() {
39
+ switch (this.segment) {
40
+ case 'all':
41
+ this.goNewMemberPage();
42
+ break;
43
+ case 'groups':
44
+ this.navigateForwardToSpacePage('new-group').catch(this.logErrorHandler('failed to navigate to new group page'));
45
+ break;
46
+ default:
47
+ alert(`Unknown segment: ${this.segment}`);
48
+ return;
49
+ }
50
+ }
51
+ onSpaceDboChanged() {
52
+ super.onSpaceDboChanged();
53
+ if (!this.space) {
54
+ throw new Error('!this.commune');
55
+ }
56
+ // console.log(`MembersPageComponent.onSpaceDboChanged()`);
57
+ // if (this.team?.dto?.numberOf?.members) {
58
+ // this.loadingStubs = Array(this.team?.dto?.numberOf?.members).fill(1);
59
+ // }
60
+ // if (!isNaN(this.prevMembersCount) && this.prevMembersCount != this.commune.numberOf.members) {
61
+ // this.loadData();
62
+ // }
63
+ this.loadData('onSpaceDboChanged');
64
+ // this.prevMembersCount = this.team?.dto?.numberOf?.members || 0;
65
+ }
66
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
67
+ loadData(_source) {
68
+ // console.log(`MembersPageComponent.loadData(source=${source})`);
69
+ // this.unsubscribe();
70
+ const space = this.space;
71
+ if (!space) {
72
+ throw new Error('!this.team');
73
+ }
74
+ // this.noGroupMembers = this.team?.brief && isTeamSupportsMemberGroups(this.team.brief.type) ? [] : undefined;
75
+ // const contactusTeam = this.teamModuleDto;
76
+ //
77
+ // if (contactusTeam?.dto?.contacts) {
78
+ // this.processContactusSpaceDbo(contactusTeam.dto);
79
+ // } else {
80
+ // this.contactService
81
+ // .watchContactsWithRole(space, 'space_member') // TODO: use constant
82
+ // .pipe(takeUntil(this.spaceIDChanged$))
83
+ // .subscribe({
84
+ // next: (members) => {
85
+ // console.log(
86
+ // `MembersPageComponent.loadData(source=${source}), members =>`,
87
+ // members,
88
+ // );
89
+ // if (members?.length) {
90
+ // // TODO: deep equal
91
+ // members.forEach((m) => {
92
+ // if (m.id) {
93
+ // if (m.dto?.related) {
94
+ // // this.contactsByMember[m.id] = zipMapBriefsWithIDs(
95
+ // // m.dto.relatedContacts,
96
+ // // );
97
+ // } else if (this.contactsByMember[m.id]) {
98
+ // delete this.contactsByMember[m.id];
99
+ // }
100
+ // }
101
+ // });
102
+ // this.members = members;
103
+ // this.processMembers();
104
+ // }
105
+ // },
106
+ // });
107
+ // }
108
+ if (space.type && isSpaceSupportsMemberGroups(space.type)) {
109
+ throw new Error('not implemented yet due to refactoring');
110
+ // this.contactService.watchContactsByRole(team)
111
+ // .subscribe(memberGroups => {
112
+ // if (memberGroups && (!this.memberGroups || memberGroups.length !== this.memberGroups.length)) { // TODO: deep equal
113
+ // this.memberGroups = memberGroups;
114
+ // }
115
+ // });
116
+ }
117
+ }
118
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: MembersPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
119
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: MembersPageComponent, isStandalone: true, selector: "sneat-members-page", providers: [
120
+ { provide: ClassName, useValue: 'MembersPageComponent' },
121
+ SpaceComponentBaseParams,
122
+ ], 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]=\"space\"\n generalTitle=\"Members\"\n icon=\"\uD83D\uDC6A\"\n [titlesBySpaceType]=\"{\n family: 'Family members',\n }\"\n />\n <ion-buttons slot=\"end\">\n <ion-menu-button menu=\"mainMenu\" />\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n\n<ion-content class=\"cardy\">\n @if (supportsMemberGroups) {\n <div class=\"segment\">\n <ion-segment [(ngModel)]=\"segment\">\n <ion-segment-button value=\"all\">\n <ion-label>All</ion-label>\n </ion-segment-button>\n <ion-segment-button value=\"groups\">\n <ion-label>\n @if (space.type === \"cohabit\") {\n By room\n } @else {\n By group\n }\n </ion-label>\n </ion-segment-button>\n </ion-segment>\n </div>\n }\n\n <!--\t<div class=\"segment\" *ngIf=\"spaceType === 'family'\">-->\n <!--\t\t<ion-segment [(ngModel)]=\"listMode\">-->\n <!--\t\t\t<ion-segment-button value=\"list\">List</ion-segment-button>-->\n <!--\t\t\t<ion-segment-button value=\"cards\">Cards</ion-segment-button>-->\n <!--\t\t</ion-segment>-->\n <!--\t</div>-->\n\n <!--\t<ion-list *ngIf=\"segment === 'all' && teamType === 'family'\">-->\n <!--\t\t<sneat-members-list *ngIf=\"adults\"-->\n <!--\t\t\t\t\t\t\t\t\t\t\t\t[team]=\"team\"-->\n <!--\t\t\t\t\t\t\t\t\t\t\t\t[allMembers]=\"members\"-->\n <!--\t\t\t\t\t\t\t\t\t\t\t\t[contactsByMember]=\"contactsByMember\"-->\n <!--\t\t></sneat-members-list>-->\n <!--\t</ion-list>-->\n\n @if (segment === \"all\" && $spaceType() === \"family\") {\n <ion-card>\n <sneat-family-members\n [$space]=\"$space()\"\n [contactusSpaceDbo]=\"spaceModuleDbo$ | async\"\n (addMember)=\"goNewMemberPage($event)\"\n />\n </ion-card>\n }\n\n @if (segment === \"groups\") {\n @if ($spaceType() === \"cohabit\") {\n @if (memberGroups) {\n @for (group of memberGroups; track group.id) {\n <ion-item-group>\n <ion-item-divider>\n <ion-icon name=\"people\" style=\"margin-right: 0.5em\" />\n <ion-label>\n {{ group.brief?.title }}\n </ion-label>\n @if (group.dbo?.numberOf?.members) {\n <ion-badge color=\"light\">\n {{ group.dbo?.numberOf?.members }} members\n </ion-badge>\n }\n </ion-item-divider>\n <!--\t\t\t\t\t<ng-container *ngIf=\"membersByGroupId[group.id]\">-->\n <!--\t\t\t\t\t\t<sneat-members-list [members]=\"this.membersByGroupId[group.id]\"-->\n <!--\t\t\t\t\t\t></sneat-members-list>-->\n <!--\t\t\t\t\t</ng-container>-->\n </ion-item-group>\n }\n\n <!--\t\t\t\t<ng-container *ngIf=\"noGroupMembers && noGroupMembers.length\">-->\n <!--\t\t\t\t\t<ion-item-divider>-->\n <!--\t\t\t\t\t\t<ion-label>No group members</ion-label>-->\n <!--\t\t\t\t\t</ion-item-divider>-->\n <!--\t\t\t\t\t<sneat-members-list [members]=\"noGroupMembers\"-->\n <!--\t\t\t\t\t></sneat-members-list>-->\n <!--\t\t\t\t</ng-container>-->\n }\n } @else if (memberGroups) {\n @for (group of memberGroups; track group.id) {\n <ion-item-group>\n <ion-item button=\"button\" (click)=\"goGroup(group)\">\n <ion-icon name=\"people\" style=\"margin-right: 0.5em\" />\n <ion-label>\n {{ group.brief?.title }}\n </ion-label>\n @if (group.dbo?.numberOf?.members) {\n <ion-badge color=\"light\">\n {{ group?.dbo?.numberOf?.members }} members\n </ion-badge>\n }\n </ion-item>\n </ion-item-group>\n }\n <!--\t\t\t\t<ng-container *ngIf=\"noGroupMembers && noGroupMembers.length\">-->\n <!--\t\t\t\t\t<ion-item-divider>-->\n <!--\t\t\t\t\t\t<ion-label>No group members</ion-label>-->\n <!--\t\t\t\t\t\t<ion-badge color=\"light\" slot=\"end\"-->\n <!--\t\t\t\t\t\t\t\t\t\t\t style=\"margin-right: 1em\">{{noGroupMembers.length}}</ion-badge>-->\n <!--\t\t\t\t\t</ion-item-divider>-->\n <!--\t\t\t\t\t<sneat-members-list-->\n <!--\t\t\t\t\t\t[members]=\"noGroupMembers\"-->\n <!--\t\t\t\t\t\t[contactsByMember]=\"contactsByMember\"-->\n <!--\t\t\t\t\t></sneat-members-list>-->\n <!--\t\t\t\t</ng-container>-->\n }\n }\n</ion-content>\n\n<ion-footer>\n <ion-toolbar color=\"light\">\n @if (space.dbo) {\n @switch (segment) {\n @case (\"all\") {\n <ion-label>\n <b>Total</b>:\n <!--\t\t\t{{ team.dto.numberOf?.members ?? 0 }}-->\n <!--\t\t\t{{ team.dto.numberOf?.members === 1 ? \"member\" : \"members\" }}-->\n </ion-label>\n }\n @case (\"groups\") {\n <ion-label>\n <b>Total</b>:\n <!--\t\t\t{{ team.dto.numberOf?.memberGroups || 0 }}-->\n <!--\t\t\t{{ team.dto.numberOf?.memberGroups === 1 ? \"group\" : \"groups\" }}-->\n </ion-label>\n }\n }\n } @else {\n <ion-label>Loading...</ion-label>\n }\n\n <ion-buttons slot=\"end\">\n <ion-button\n size=\"small\"\n color=\"primary\"\n [disabled]=\"!space.brief\"\n (click)=\"goNew()\"\n [title]=\"segment === 'groups' ? 'Add new group' : 'Add new member'\"\n >\n <ion-icon name=\"add\" />\n <ion-label>Add</ion-label>\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n</ion-footer>\n", dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: SpacePageTitleComponent, selector: "sneat-space-page-title", inputs: ["icon", "generalTitle", "space", "titlesBySpaceType"] }, { kind: "ngmodule", type: ContactusServicesModule }, { kind: "component", type: FamilyMembersComponent, selector: "sneat-family-members", inputs: ["contactusSpaceDbo"], outputs: ["addMember"] }, { kind: "ngmodule", type: SpaceServiceModule }, { kind: "component", type: IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: IonBackButton, selector: "ion-back-button" }, { kind: "component", type: IonMenuButton, selector: "ion-menu-button", inputs: ["autoHide", "color", "disabled", "menu", "mode", "type"] }, { kind: "component", type: IonContent, selector: "ion-content", inputs: ["color", "fixedSlotPlacement", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: IonSegment, selector: "ion-segment", inputs: ["color", "disabled", "mode", "scrollable", "selectOnFocus", "swipeGesture", "value"] }, { kind: "component", type: IonSegmentButton, selector: "ion-segment-button", inputs: ["contentId", "disabled", "layout", "mode", "type", "value"] }, { kind: "component", type: IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: IonCard, selector: "ion-card", inputs: ["button", "color", "disabled", "download", "href", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: IonItemGroup, selector: "ion-item-group" }, { kind: "component", type: IonItemDivider, selector: "ion-item-divider", inputs: ["color", "mode", "sticky"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonBadge, selector: "ion-badge", inputs: ["color", "mode"] }, { kind: "component", type: IonItem, selector: "ion-item", inputs: ["button", "color", "detail", "detailIcon", "disabled", "download", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: IonFooter, selector: "ion-footer", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "pipe", type: AsyncPipe, name: "async" }] }); }
123
+ }
124
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: MembersPageComponent, decorators: [{
125
+ type: Component,
126
+ args: [{ imports: [
127
+ FormsModule,
128
+ SpacePageTitleComponent,
129
+ ContactusServicesModule,
130
+ FamilyMembersComponent,
131
+ SpaceServiceModule,
132
+ IonHeader,
133
+ IonToolbar,
134
+ IonButtons,
135
+ IonBackButton,
136
+ IonMenuButton,
137
+ IonContent,
138
+ IonSegment,
139
+ IonSegmentButton,
140
+ IonLabel,
141
+ IonCard,
142
+ AsyncPipe,
143
+ IonItemGroup,
144
+ IonItemDivider,
145
+ IonIcon,
146
+ IonBadge,
147
+ IonItem,
148
+ IonFooter,
149
+ IonButton,
150
+ ], providers: [
151
+ { provide: ClassName, useValue: 'MembersPageComponent' },
152
+ SpaceComponentBaseParams,
153
+ ], selector: 'sneat-members-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]=\"space\"\n generalTitle=\"Members\"\n icon=\"\uD83D\uDC6A\"\n [titlesBySpaceType]=\"{\n family: 'Family members',\n }\"\n />\n <ion-buttons slot=\"end\">\n <ion-menu-button menu=\"mainMenu\" />\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n\n<ion-content class=\"cardy\">\n @if (supportsMemberGroups) {\n <div class=\"segment\">\n <ion-segment [(ngModel)]=\"segment\">\n <ion-segment-button value=\"all\">\n <ion-label>All</ion-label>\n </ion-segment-button>\n <ion-segment-button value=\"groups\">\n <ion-label>\n @if (space.type === \"cohabit\") {\n By room\n } @else {\n By group\n }\n </ion-label>\n </ion-segment-button>\n </ion-segment>\n </div>\n }\n\n <!--\t<div class=\"segment\" *ngIf=\"spaceType === 'family'\">-->\n <!--\t\t<ion-segment [(ngModel)]=\"listMode\">-->\n <!--\t\t\t<ion-segment-button value=\"list\">List</ion-segment-button>-->\n <!--\t\t\t<ion-segment-button value=\"cards\">Cards</ion-segment-button>-->\n <!--\t\t</ion-segment>-->\n <!--\t</div>-->\n\n <!--\t<ion-list *ngIf=\"segment === 'all' && teamType === 'family'\">-->\n <!--\t\t<sneat-members-list *ngIf=\"adults\"-->\n <!--\t\t\t\t\t\t\t\t\t\t\t\t[team]=\"team\"-->\n <!--\t\t\t\t\t\t\t\t\t\t\t\t[allMembers]=\"members\"-->\n <!--\t\t\t\t\t\t\t\t\t\t\t\t[contactsByMember]=\"contactsByMember\"-->\n <!--\t\t></sneat-members-list>-->\n <!--\t</ion-list>-->\n\n @if (segment === \"all\" && $spaceType() === \"family\") {\n <ion-card>\n <sneat-family-members\n [$space]=\"$space()\"\n [contactusSpaceDbo]=\"spaceModuleDbo$ | async\"\n (addMember)=\"goNewMemberPage($event)\"\n />\n </ion-card>\n }\n\n @if (segment === \"groups\") {\n @if ($spaceType() === \"cohabit\") {\n @if (memberGroups) {\n @for (group of memberGroups; track group.id) {\n <ion-item-group>\n <ion-item-divider>\n <ion-icon name=\"people\" style=\"margin-right: 0.5em\" />\n <ion-label>\n {{ group.brief?.title }}\n </ion-label>\n @if (group.dbo?.numberOf?.members) {\n <ion-badge color=\"light\">\n {{ group.dbo?.numberOf?.members }} members\n </ion-badge>\n }\n </ion-item-divider>\n <!--\t\t\t\t\t<ng-container *ngIf=\"membersByGroupId[group.id]\">-->\n <!--\t\t\t\t\t\t<sneat-members-list [members]=\"this.membersByGroupId[group.id]\"-->\n <!--\t\t\t\t\t\t></sneat-members-list>-->\n <!--\t\t\t\t\t</ng-container>-->\n </ion-item-group>\n }\n\n <!--\t\t\t\t<ng-container *ngIf=\"noGroupMembers && noGroupMembers.length\">-->\n <!--\t\t\t\t\t<ion-item-divider>-->\n <!--\t\t\t\t\t\t<ion-label>No group members</ion-label>-->\n <!--\t\t\t\t\t</ion-item-divider>-->\n <!--\t\t\t\t\t<sneat-members-list [members]=\"noGroupMembers\"-->\n <!--\t\t\t\t\t></sneat-members-list>-->\n <!--\t\t\t\t</ng-container>-->\n }\n } @else if (memberGroups) {\n @for (group of memberGroups; track group.id) {\n <ion-item-group>\n <ion-item button=\"button\" (click)=\"goGroup(group)\">\n <ion-icon name=\"people\" style=\"margin-right: 0.5em\" />\n <ion-label>\n {{ group.brief?.title }}\n </ion-label>\n @if (group.dbo?.numberOf?.members) {\n <ion-badge color=\"light\">\n {{ group?.dbo?.numberOf?.members }} members\n </ion-badge>\n }\n </ion-item>\n </ion-item-group>\n }\n <!--\t\t\t\t<ng-container *ngIf=\"noGroupMembers && noGroupMembers.length\">-->\n <!--\t\t\t\t\t<ion-item-divider>-->\n <!--\t\t\t\t\t\t<ion-label>No group members</ion-label>-->\n <!--\t\t\t\t\t\t<ion-badge color=\"light\" slot=\"end\"-->\n <!--\t\t\t\t\t\t\t\t\t\t\t style=\"margin-right: 1em\">{{noGroupMembers.length}}</ion-badge>-->\n <!--\t\t\t\t\t</ion-item-divider>-->\n <!--\t\t\t\t\t<sneat-members-list-->\n <!--\t\t\t\t\t\t[members]=\"noGroupMembers\"-->\n <!--\t\t\t\t\t\t[contactsByMember]=\"contactsByMember\"-->\n <!--\t\t\t\t\t></sneat-members-list>-->\n <!--\t\t\t\t</ng-container>-->\n }\n }\n</ion-content>\n\n<ion-footer>\n <ion-toolbar color=\"light\">\n @if (space.dbo) {\n @switch (segment) {\n @case (\"all\") {\n <ion-label>\n <b>Total</b>:\n <!--\t\t\t{{ team.dto.numberOf?.members ?? 0 }}-->\n <!--\t\t\t{{ team.dto.numberOf?.members === 1 ? \"member\" : \"members\" }}-->\n </ion-label>\n }\n @case (\"groups\") {\n <ion-label>\n <b>Total</b>:\n <!--\t\t\t{{ team.dto.numberOf?.memberGroups || 0 }}-->\n <!--\t\t\t{{ team.dto.numberOf?.memberGroups === 1 ? \"group\" : \"groups\" }}-->\n </ion-label>\n }\n }\n } @else {\n <ion-label>Loading...</ion-label>\n }\n\n <ion-buttons slot=\"end\">\n <ion-button\n size=\"small\"\n color=\"primary\"\n [disabled]=\"!space.brief\"\n (click)=\"goNew()\"\n [title]=\"segment === 'groups' ? 'Add new group' : 'Add new member'\"\n >\n <ion-icon name=\"add\" />\n <ion-label>Add</ion-label>\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n</ion-footer>\n" }]
154
+ }], ctorParameters: () => [] });
155
+ //# sourceMappingURL=members-page.component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"members-page.component.js","sourceRoot":"","sources":["../../../../../../../../../libs/contactus/internal/src/lib/members/pages/members/members-page.component.ts","../../../../../../../../../libs/contactus/internal/src/lib/members/pages/members/members-page.component.html"],"names":[],"mappings":"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","sourcesContent":["import { AsyncPipe } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { Params } from '@angular/router';\nimport {\n IonBackButton,\n IonBadge,\n IonButton,\n IonButtons,\n IonCard,\n IonContent,\n IonFooter,\n IonHeader,\n IonIcon,\n IonItem,\n IonItemDivider,\n IonItemGroup,\n IonLabel,\n IonMenuButton,\n IonSegment,\n IonSegmentButton,\n IonToolbar,\n} from '@ionic/angular/standalone';\nimport { SpaceMemberType } from '@sneat/auth-models';\nimport {\n ContactusServicesModule,\n ContactusSpaceService,\n} from '@sneat/contactus-services';\nimport { FamilyMembersComponent, MemberGroup } from '@sneat/contactus-shared';\nimport { IMemberGroupContext } from '@sneat/contactus-core';\nimport { isSpaceSupportsMemberGroups } from '@sneat/dto';\nimport {\n SpaceComponentBaseParams,\n SpacePageTitleComponent,\n} from '@sneat/space-components';\nimport { SpaceServiceModule } from '@sneat/space-services';\nimport { ClassName } from '@sneat/ui';\nimport { MembersBasePage } from '../../members-base-page';\nimport { Component, inject } from '@angular/core';\n\n@Component({\n imports: [\n FormsModule,\n SpacePageTitleComponent,\n ContactusServicesModule,\n FamilyMembersComponent,\n SpaceServiceModule,\n IonHeader,\n IonToolbar,\n IonButtons,\n IonBackButton,\n IonMenuButton,\n IonContent,\n IonSegment,\n IonSegmentButton,\n IonLabel,\n IonCard,\n AsyncPipe,\n IonItemGroup,\n IonItemDivider,\n IonIcon,\n IonBadge,\n IonItem,\n IonFooter,\n IonButton,\n ],\n providers: [\n { provide: ClassName, useValue: 'MembersPageComponent' },\n SpaceComponentBaseParams,\n ],\n selector: 'sneat-members-page',\n templateUrl: 'members-page.component.html',\n})\nexport class MembersPageComponent extends MembersBasePage {\n // private readonly memberGroupService = inject(MemberGroupService);\n\n public memberGroups?: readonly IMemberGroupContext[];\n // public loadingStubs?: number[];\n public segment: 'all' | 'groups' = 'all';\n // public listMode: 'list' | 'cards' = 'list';\n // public membersByGroupId: { [id: string]: IMemberContext[] } = {};\n\n readonly memberType: SpaceMemberType = 'member';\n\n constructor() {\n const contactusTeamService = inject(ContactusSpaceService);\n\n super(contactusTeamService);\n }\n\n protected goGroup(memberGroup: IMemberGroupContext): void {\n this.navigateForwardToSpacePage(`group/${memberGroup.id}`, {\n state: { memberGroup },\n }).catch(this.logErrorHandler('failed to navigate to members group page'));\n }\n\n protected goNewMemberPage(group?: MemberGroup): void {\n const queryParams: Params | undefined = group\n ? { group: group.id }\n : undefined;\n this.navigateForwardToSpacePage('new-member', {\n queryParams,\n state: { group },\n }).catch(\n this.logErrorHandler(\n 'failed to navigate to new member page with age parameter',\n ),\n );\n }\n\n public goNew(): void {\n switch (this.segment) {\n case 'all':\n this.goNewMemberPage();\n break;\n case 'groups':\n this.navigateForwardToSpacePage('new-group').catch(\n this.logErrorHandler('failed to navigate to new group page'),\n );\n break;\n default:\n alert(`Unknown segment: ${this.segment}`);\n return;\n }\n }\n\n override onSpaceDboChanged(): void {\n super.onSpaceDboChanged();\n if (!this.space) {\n throw new Error('!this.commune');\n }\n // console.log(`MembersPageComponent.onSpaceDboChanged()`);\n // if (this.team?.dto?.numberOf?.members) {\n // \tthis.loadingStubs = Array(this.team?.dto?.numberOf?.members).fill(1);\n // }\n // if (!isNaN(this.prevMembersCount) && this.prevMembersCount != this.commune.numberOf.members) {\n // this.loadData();\n // }\n this.loadData('onSpaceDboChanged');\n // this.prevMembersCount = this.team?.dto?.numberOf?.members || 0;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n private loadData(_source: string): void {\n // console.log(`MembersPageComponent.loadData(source=${source})`);\n\n // this.unsubscribe();\n const space = this.space;\n if (!space) {\n throw new Error('!this.team');\n }\n // this.noGroupMembers = this.team?.brief && isTeamSupportsMemberGroups(this.team.brief.type) ? [] : undefined;\n\n // const contactusTeam = this.teamModuleDto;\n //\n // if (contactusTeam?.dto?.contacts) {\n // \tthis.processContactusSpaceDbo(contactusTeam.dto);\n // } else {\n // \tthis.contactService\n // \t\t.watchContactsWithRole(space, 'space_member') // TODO: use constant\n // \t\t.pipe(takeUntil(this.spaceIDChanged$))\n // \t\t.subscribe({\n // \t\t\tnext: (members) => {\n // \t\t\t\tconsole.log(\n // \t\t\t\t\t`MembersPageComponent.loadData(source=${source}), members =>`,\n // \t\t\t\t\tmembers,\n // \t\t\t\t);\n // \t\t\t\tif (members?.length) {\n // \t\t\t\t\t// TODO: deep equal\n // \t\t\t\t\tmembers.forEach((m) => {\n // \t\t\t\t\t\tif (m.id) {\n // \t\t\t\t\t\t\tif (m.dto?.related) {\n // \t\t\t\t\t\t\t\t// this.contactsByMember[m.id] = zipMapBriefsWithIDs(\n // \t\t\t\t\t\t\t\t// \tm.dto.relatedContacts,\n // \t\t\t\t\t\t\t\t// );\n // \t\t\t\t\t\t\t} else if (this.contactsByMember[m.id]) {\n // \t\t\t\t\t\t\t\tdelete this.contactsByMember[m.id];\n // \t\t\t\t\t\t\t}\n // \t\t\t\t\t\t}\n // \t\t\t\t\t});\n // \t\t\t\t\tthis.members = members;\n // \t\t\t\t\tthis.processMembers();\n // \t\t\t\t}\n // \t\t\t},\n // \t\t});\n // }\n\n if (space.type && isSpaceSupportsMemberGroups(space.type)) {\n throw new Error('not implemented yet due to refactoring');\n // this.contactService.watchContactsByRole(team)\n // \t.subscribe(memberGroups => {\n // \t\tif (memberGroups && (!this.memberGroups || memberGroups.length !== this.memberGroups.length)) { // TODO: deep equal\n // \t\t\tthis.memberGroups = memberGroups;\n // \t\t}\n // \t});\n }\n }\n}\n","<ion-header>\n <ion-toolbar color=\"light\" class=\"with-back-button with-end-buttons\">\n <ion-buttons slot=\"start\">\n <ion-back-button [defaultHref]=\"$defaultBackUrl()\" />\n </ion-buttons>\n <sneat-space-page-title\n [space]=\"space\"\n generalTitle=\"Members\"\n icon=\"👪\"\n [titlesBySpaceType]=\"{\n family: 'Family members',\n }\"\n />\n <ion-buttons slot=\"end\">\n <ion-menu-button menu=\"mainMenu\" />\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n\n<ion-content class=\"cardy\">\n @if (supportsMemberGroups) {\n <div class=\"segment\">\n <ion-segment [(ngModel)]=\"segment\">\n <ion-segment-button value=\"all\">\n <ion-label>All</ion-label>\n </ion-segment-button>\n <ion-segment-button value=\"groups\">\n <ion-label>\n @if (space.type === \"cohabit\") {\n By room\n } @else {\n By group\n }\n </ion-label>\n </ion-segment-button>\n </ion-segment>\n </div>\n }\n\n <!--\t<div class=\"segment\" *ngIf=\"spaceType === 'family'\">-->\n <!--\t\t<ion-segment [(ngModel)]=\"listMode\">-->\n <!--\t\t\t<ion-segment-button value=\"list\">List</ion-segment-button>-->\n <!--\t\t\t<ion-segment-button value=\"cards\">Cards</ion-segment-button>-->\n <!--\t\t</ion-segment>-->\n <!--\t</div>-->\n\n <!--\t<ion-list *ngIf=\"segment === 'all' && teamType === 'family'\">-->\n <!--\t\t<sneat-members-list *ngIf=\"adults\"-->\n <!--\t\t\t\t\t\t\t\t\t\t\t\t[team]=\"team\"-->\n <!--\t\t\t\t\t\t\t\t\t\t\t\t[allMembers]=\"members\"-->\n <!--\t\t\t\t\t\t\t\t\t\t\t\t[contactsByMember]=\"contactsByMember\"-->\n <!--\t\t></sneat-members-list>-->\n <!--\t</ion-list>-->\n\n @if (segment === \"all\" && $spaceType() === \"family\") {\n <ion-card>\n <sneat-family-members\n [$space]=\"$space()\"\n [contactusSpaceDbo]=\"spaceModuleDbo$ | async\"\n (addMember)=\"goNewMemberPage($event)\"\n />\n </ion-card>\n }\n\n @if (segment === \"groups\") {\n @if ($spaceType() === \"cohabit\") {\n @if (memberGroups) {\n @for (group of memberGroups; track group.id) {\n <ion-item-group>\n <ion-item-divider>\n <ion-icon name=\"people\" style=\"margin-right: 0.5em\" />\n <ion-label>\n {{ group.brief?.title }}\n </ion-label>\n @if (group.dbo?.numberOf?.members) {\n <ion-badge color=\"light\">\n {{ group.dbo?.numberOf?.members }} members\n </ion-badge>\n }\n </ion-item-divider>\n <!--\t\t\t\t\t<ng-container *ngIf=\"membersByGroupId[group.id]\">-->\n <!--\t\t\t\t\t\t<sneat-members-list [members]=\"this.membersByGroupId[group.id]\"-->\n <!--\t\t\t\t\t\t></sneat-members-list>-->\n <!--\t\t\t\t\t</ng-container>-->\n </ion-item-group>\n }\n\n <!--\t\t\t\t<ng-container *ngIf=\"noGroupMembers && noGroupMembers.length\">-->\n <!--\t\t\t\t\t<ion-item-divider>-->\n <!--\t\t\t\t\t\t<ion-label>No group members</ion-label>-->\n <!--\t\t\t\t\t</ion-item-divider>-->\n <!--\t\t\t\t\t<sneat-members-list [members]=\"noGroupMembers\"-->\n <!--\t\t\t\t\t></sneat-members-list>-->\n <!--\t\t\t\t</ng-container>-->\n }\n } @else if (memberGroups) {\n @for (group of memberGroups; track group.id) {\n <ion-item-group>\n <ion-item button=\"button\" (click)=\"goGroup(group)\">\n <ion-icon name=\"people\" style=\"margin-right: 0.5em\" />\n <ion-label>\n {{ group.brief?.title }}\n </ion-label>\n @if (group.dbo?.numberOf?.members) {\n <ion-badge color=\"light\">\n {{ group?.dbo?.numberOf?.members }} members\n </ion-badge>\n }\n </ion-item>\n </ion-item-group>\n }\n <!--\t\t\t\t<ng-container *ngIf=\"noGroupMembers && noGroupMembers.length\">-->\n <!--\t\t\t\t\t<ion-item-divider>-->\n <!--\t\t\t\t\t\t<ion-label>No group members</ion-label>-->\n <!--\t\t\t\t\t\t<ion-badge color=\"light\" slot=\"end\"-->\n <!--\t\t\t\t\t\t\t\t\t\t\t style=\"margin-right: 1em\">{{noGroupMembers.length}}</ion-badge>-->\n <!--\t\t\t\t\t</ion-item-divider>-->\n <!--\t\t\t\t\t<sneat-members-list-->\n <!--\t\t\t\t\t\t[members]=\"noGroupMembers\"-->\n <!--\t\t\t\t\t\t[contactsByMember]=\"contactsByMember\"-->\n <!--\t\t\t\t\t></sneat-members-list>-->\n <!--\t\t\t\t</ng-container>-->\n }\n }\n</ion-content>\n\n<ion-footer>\n <ion-toolbar color=\"light\">\n @if (space.dbo) {\n @switch (segment) {\n @case (\"all\") {\n <ion-label>\n <b>Total</b>:\n <!--\t\t\t{{ team.dto.numberOf?.members ?? 0 }}-->\n <!--\t\t\t{{ team.dto.numberOf?.members === 1 ? \"member\" : \"members\" }}-->\n </ion-label>\n }\n @case (\"groups\") {\n <ion-label>\n <b>Total</b>:\n <!--\t\t\t{{ team.dto.numberOf?.memberGroups || 0 }}-->\n <!--\t\t\t{{ team.dto.numberOf?.memberGroups === 1 ? \"group\" : \"groups\" }}-->\n </ion-label>\n }\n }\n } @else {\n <ion-label>Loading...</ion-label>\n }\n\n <ion-buttons slot=\"end\">\n <ion-button\n size=\"small\"\n color=\"primary\"\n [disabled]=\"!space.brief\"\n (click)=\"goNew()\"\n [title]=\"segment === 'groups' ? 'Add new group' : 'Add new member'\"\n >\n <ion-icon name=\"add\" />\n <ion-label>Add</ion-label>\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n</ion-footer>\n"]}
@@ -0,0 +1,2 @@
1
+ export * from './new-member-page.component';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../../../libs/contactus/internal/src/lib/members/pages/new-member/index.ts"],"names":[],"mappings":"AAAA,cAAc,6BAA6B,CAAC","sourcesContent":["export * from './new-member-page.component';\n"]}