@sneat/contactus-shared 0.2.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 (320) hide show
  1. package/esm2022/index.js +4 -0
  2. package/esm2022/index.js.map +1 -0
  3. package/esm2022/lib/components/address-form/address-form.component.js +182 -0
  4. package/esm2022/lib/components/address-form/address-form.component.js.map +1 -0
  5. package/esm2022/lib/components/address-form/index.js +2 -0
  6. package/esm2022/lib/components/address-form/index.js.map +1 -0
  7. package/esm2022/lib/components/basic-contact-form/basic-contact-form.component.js +71 -0
  8. package/esm2022/lib/components/basic-contact-form/basic-contact-form.component.js.map +1 -0
  9. package/esm2022/lib/components/basic-contact-form/index.js +2 -0
  10. package/esm2022/lib/components/basic-contact-form/index.js.map +1 -0
  11. package/esm2022/lib/components/contact-comm-channels/comm-channel-form.component.js +90 -0
  12. package/esm2022/lib/components/contact-comm-channels/comm-channel-form.component.js.map +1 -0
  13. package/esm2022/lib/components/contact-comm-channels/comm-channel-item.component.js +128 -0
  14. package/esm2022/lib/components/contact-comm-channels/comm-channel-item.component.js.map +1 -0
  15. package/esm2022/lib/components/contact-comm-channels/comm-channels-list.component.js +30 -0
  16. package/esm2022/lib/components/contact-comm-channels/comm-channels-list.component.js.map +1 -0
  17. package/esm2022/lib/components/contact-comm-channels/contact-comm-channels.component.js +16 -0
  18. package/esm2022/lib/components/contact-comm-channels/contact-comm-channels.component.js.map +1 -0
  19. package/esm2022/lib/components/contact-comm-channels/contact-emails.component.js +30 -0
  20. package/esm2022/lib/components/contact-comm-channels/contact-emails.component.js.map +1 -0
  21. package/esm2022/lib/components/contact-comm-channels/contact-phones.component.js +30 -0
  22. package/esm2022/lib/components/contact-comm-channels/contact-phones.component.js.map +1 -0
  23. package/esm2022/lib/components/contact-comm-channels/index.js +2 -0
  24. package/esm2022/lib/components/contact-comm-channels/index.js.map +1 -0
  25. package/esm2022/lib/components/contact-details/contact-details.component.js +235 -0
  26. package/esm2022/lib/components/contact-details/contact-details.component.js.map +1 -0
  27. package/esm2022/lib/components/contact-details/index.js +2 -0
  28. package/esm2022/lib/components/contact-details/index.js.map +1 -0
  29. package/esm2022/lib/components/contact-details/related-contacts.component.js +116 -0
  30. package/esm2022/lib/components/contact-details/related-contacts.component.js.map +1 -0
  31. package/esm2022/lib/components/contact-dob/contact-dob.component.js +57 -0
  32. package/esm2022/lib/components/contact-dob/contact-dob.component.js.map +1 -0
  33. package/esm2022/lib/components/contact-dob/index.js +2 -0
  34. package/esm2022/lib/components/contact-dob/index.js.map +1 -0
  35. package/esm2022/lib/components/contact-events.js +2 -0
  36. package/esm2022/lib/components/contact-events.js.map +1 -0
  37. package/esm2022/lib/components/contact-forms/contact-form-base.component.js +30 -0
  38. package/esm2022/lib/components/contact-forms/contact-form-base.component.js.map +1 -0
  39. package/esm2022/lib/components/contact-forms/emails-form/emails-form.component.js +76 -0
  40. package/esm2022/lib/components/contact-forms/emails-form/emails-form.component.js.map +1 -0
  41. package/esm2022/lib/components/contact-forms/emails-form/index.js +2 -0
  42. package/esm2022/lib/components/contact-forms/emails-form/index.js.map +1 -0
  43. package/esm2022/lib/components/contact-forms/index.js +11 -0
  44. package/esm2022/lib/components/contact-forms/index.js.map +1 -0
  45. package/esm2022/lib/components/contact-forms/location-form/index.js +2 -0
  46. package/esm2022/lib/components/contact-forms/location-form/index.js.map +1 -0
  47. package/esm2022/lib/components/contact-forms/location-form/location-form.component.js +194 -0
  48. package/esm2022/lib/components/contact-forms/location-form/location-form.component.js.map +1 -0
  49. package/esm2022/lib/components/contact-forms/new-contact/index.js +5 -0
  50. package/esm2022/lib/components/contact-forms/new-contact/index.js.map +1 -0
  51. package/esm2022/lib/components/contact-forms/new-contact/new-company-form.component.js +115 -0
  52. package/esm2022/lib/components/contact-forms/new-contact/new-company-form.component.js.map +1 -0
  53. package/esm2022/lib/components/contact-forms/new-contact/new-contact-form-base.component.js +34 -0
  54. package/esm2022/lib/components/contact-forms/new-contact/new-contact-form-base.component.js.map +1 -0
  55. package/esm2022/lib/components/contact-forms/new-contact/new-contact-form.component.js +82 -0
  56. package/esm2022/lib/components/contact-forms/new-contact/new-contact-form.component.js.map +1 -0
  57. package/esm2022/lib/components/contact-forms/new-contact/new-person-form.component.js +282 -0
  58. package/esm2022/lib/components/contact-forms/new-contact/new-person-form.component.js.map +1 -0
  59. package/esm2022/lib/components/contact-forms/new-contact/new-pet-form.component.js +25 -0
  60. package/esm2022/lib/components/contact-forms/new-contact/new-pet-form.component.js.map +1 -0
  61. package/esm2022/lib/components/contact-forms/person-forms/age-group/age-group-form.component.js +64 -0
  62. package/esm2022/lib/components/contact-forms/person-forms/age-group/age-group-form.component.js.map +1 -0
  63. package/esm2022/lib/components/contact-forms/person-forms/age-group/index.js +2 -0
  64. package/esm2022/lib/components/contact-forms/person-forms/age-group/index.js.map +1 -0
  65. package/esm2022/lib/components/contact-forms/person-forms/gender-form/gender-form.component.js +118 -0
  66. package/esm2022/lib/components/contact-forms/person-forms/gender-form/gender-form.component.js.map +1 -0
  67. package/esm2022/lib/components/contact-forms/person-forms/gender-form/index.js +2 -0
  68. package/esm2022/lib/components/contact-forms/person-forms/gender-form/index.js.map +1 -0
  69. package/esm2022/lib/components/contact-forms/person-forms/names-form/index.js +2 -0
  70. package/esm2022/lib/components/contact-forms/person-forms/names-form/index.js.map +1 -0
  71. package/esm2022/lib/components/contact-forms/person-forms/names-form/names-form.component.js +296 -0
  72. package/esm2022/lib/components/contact-forms/person-forms/names-form/names-form.component.js.map +1 -0
  73. package/esm2022/lib/components/contact-forms/pesson-wizard/index.js +2 -0
  74. package/esm2022/lib/components/contact-forms/pesson-wizard/index.js.map +1 -0
  75. package/esm2022/lib/components/contact-forms/pesson-wizard/person-wizard.component.js +369 -0
  76. package/esm2022/lib/components/contact-forms/pesson-wizard/person-wizard.component.js.map +1 -0
  77. package/esm2022/lib/components/contact-forms/pet-kind-and-breed-form/index.js +2 -0
  78. package/esm2022/lib/components/contact-forms/pet-kind-and-breed-form/index.js.map +1 -0
  79. package/esm2022/lib/components/contact-forms/pet-kind-and-breed-form/pet-kind-and-breed-form.component.js +66 -0
  80. package/esm2022/lib/components/contact-forms/pet-kind-and-breed-form/pet-kind-and-breed-form.component.js.map +1 -0
  81. package/esm2022/lib/components/contact-forms/phones-form/index.js +2 -0
  82. package/esm2022/lib/components/contact-forms/phones-form/index.js.map +1 -0
  83. package/esm2022/lib/components/contact-forms/phones-form/phones-form.component.js +79 -0
  84. package/esm2022/lib/components/contact-forms/phones-form/phones-form.component.js.map +1 -0
  85. package/esm2022/lib/components/contact-forms/relationship-form/contact-relationship-form.component.js +125 -0
  86. package/esm2022/lib/components/contact-forms/relationship-form/contact-relationship-form.component.js.map +1 -0
  87. package/esm2022/lib/components/contact-forms/relationship-form/index.js +2 -0
  88. package/esm2022/lib/components/contact-forms/relationship-form/index.js.map +1 -0
  89. package/esm2022/lib/components/contact-forms/relationship-form/relationship-form.component.js +136 -0
  90. package/esm2022/lib/components/contact-forms/relationship-form/relationship-form.component.js.map +1 -0
  91. package/esm2022/lib/components/contact-forms/role-form/contact-role-form.component.js +98 -0
  92. package/esm2022/lib/components/contact-forms/role-form/contact-role-form.component.js.map +1 -0
  93. package/esm2022/lib/components/contact-forms/role-form/index.js +2 -0
  94. package/esm2022/lib/components/contact-forms/role-form/index.js.map +1 -0
  95. package/esm2022/lib/components/contact-forms/roles-form/index.js +2 -0
  96. package/esm2022/lib/components/contact-forms/roles-form/index.js.map +1 -0
  97. package/esm2022/lib/components/contact-forms/roles-form/roles-form.component.js +59 -0
  98. package/esm2022/lib/components/contact-forms/roles-form/roles-form.component.js.map +1 -0
  99. package/esm2022/lib/components/contact-forms/space-related-form.component.js +32 -0
  100. package/esm2022/lib/components/contact-forms/space-related-form.component.js.map +1 -0
  101. package/esm2022/lib/components/contact-input/contact-input.component.js +151 -0
  102. package/esm2022/lib/components/contact-input/contact-input.component.js.map +1 -0
  103. package/esm2022/lib/components/contact-input/index.js +2 -0
  104. package/esm2022/lib/components/contact-input/index.js.map +1 -0
  105. package/esm2022/lib/components/contact-locations/contact-locations.component.js +52 -0
  106. package/esm2022/lib/components/contact-locations/contact-locations.component.js.map +1 -0
  107. package/esm2022/lib/components/contact-locations/index.js +2 -0
  108. package/esm2022/lib/components/contact-locations/index.js.map +1 -0
  109. package/esm2022/lib/components/contact-modules-menu/contact-modules-menu.component.js +29 -0
  110. package/esm2022/lib/components/contact-modules-menu/contact-modules-menu.component.js.map +1 -0
  111. package/esm2022/lib/components/contact-modules-menu/index.js +2 -0
  112. package/esm2022/lib/components/contact-modules-menu/index.js.map +1 -0
  113. package/esm2022/lib/components/contact-role-badges/contact-role-badges.component.js +44 -0
  114. package/esm2022/lib/components/contact-role-badges/contact-role-badges.component.js.map +1 -0
  115. package/esm2022/lib/components/contact-roles-input/contact-roles-input.component.js +37 -0
  116. package/esm2022/lib/components/contact-roles-input/contact-roles-input.component.js.map +1 -0
  117. package/esm2022/lib/components/contact-roles-input/index.js +2 -0
  118. package/esm2022/lib/components/contact-roles-input/index.js.map +1 -0
  119. package/esm2022/lib/components/contacts-by-type/contacts-by-type.component.js +200 -0
  120. package/esm2022/lib/components/contacts-by-type/contacts-by-type.component.js.map +1 -0
  121. package/esm2022/lib/components/contacts-by-type/index.js +2 -0
  122. package/esm2022/lib/components/contacts-by-type/index.js.map +1 -0
  123. package/esm2022/lib/components/contacts-checklist/contacts-checklist-item.component.js +32 -0
  124. package/esm2022/lib/components/contacts-checklist/contacts-checklist-item.component.js.map +1 -0
  125. package/esm2022/lib/components/contacts-checklist/contacts-checklist.component.js +140 -0
  126. package/esm2022/lib/components/contacts-checklist/contacts-checklist.component.js.map +1 -0
  127. package/esm2022/lib/components/contacts-checklist/index.js +2 -0
  128. package/esm2022/lib/components/contacts-checklist/index.js.map +1 -0
  129. package/esm2022/lib/components/contacts-component/contacts.component.js +200 -0
  130. package/esm2022/lib/components/contacts-component/contacts.component.js.map +1 -0
  131. package/esm2022/lib/components/contacts-component.commands.js +2 -0
  132. package/esm2022/lib/components/contacts-component.commands.js.map +1 -0
  133. package/esm2022/lib/components/contacts-list/contacts-list.component.js +32 -0
  134. package/esm2022/lib/components/contacts-list/contacts-list.component.js.map +1 -0
  135. package/esm2022/lib/components/contacts-list/index.js +3 -0
  136. package/esm2022/lib/components/contacts-list/index.js.map +1 -0
  137. package/esm2022/lib/components/contacts-list-item/contacts-list-item.component.js +138 -0
  138. package/esm2022/lib/components/contacts-list-item/contacts-list-item.component.js.map +1 -0
  139. package/esm2022/lib/components/contacts-list-item/related-as.component.js +34 -0
  140. package/esm2022/lib/components/contacts-list-item/related-as.component.js.map +1 -0
  141. package/esm2022/lib/components/contacts-selector/contacts-selector-input.component.js +91 -0
  142. package/esm2022/lib/components/contacts-selector/contacts-selector-input.component.js.map +1 -0
  143. package/esm2022/lib/components/contacts-selector/contacts-selector.component.js +415 -0
  144. package/esm2022/lib/components/contacts-selector/contacts-selector.component.js.map +1 -0
  145. package/esm2022/lib/components/contacts-selector/contacts-selector.interfaces.js +2 -0
  146. package/esm2022/lib/components/contacts-selector/contacts-selector.interfaces.js.map +1 -0
  147. package/esm2022/lib/components/contacts-selector/contacts-selector.module.js +28 -0
  148. package/esm2022/lib/components/contacts-selector/contacts-selector.module.js.map +1 -0
  149. package/esm2022/lib/components/contacts-selector/contacts-selector.service.js +18 -0
  150. package/esm2022/lib/components/contacts-selector/contacts-selector.service.js.map +1 -0
  151. package/esm2022/lib/components/contacts-selector/lib-exports.js +6 -0
  152. package/esm2022/lib/components/contacts-selector/lib-exports.js.map +1 -0
  153. package/esm2022/lib/components/contactus-module.base.component.js +4 -0
  154. package/esm2022/lib/components/contactus-module.base.component.js.map +1 -0
  155. package/esm2022/lib/components/inlist-options/inlist-age-group.component.js +53 -0
  156. package/esm2022/lib/components/inlist-options/inlist-age-group.component.js.map +1 -0
  157. package/esm2022/lib/components/inlist-options/inlist-options.component.js +27 -0
  158. package/esm2022/lib/components/inlist-options/inlist-options.component.js.map +1 -0
  159. package/esm2022/lib/components/invite-links/invite-links.component.js +87 -0
  160. package/esm2022/lib/components/invite-links/invite-links.component.js.map +1 -0
  161. package/esm2022/lib/components/lib-exports.js +29 -0
  162. package/esm2022/lib/components/lib-exports.js.map +1 -0
  163. package/esm2022/lib/components/members-as-badges/contacts-as-badges.component.js +39 -0
  164. package/esm2022/lib/components/members-as-badges/contacts-as-badges.component.js.map +1 -0
  165. package/esm2022/lib/components/members-as-badges/index.js +2 -0
  166. package/esm2022/lib/components/members-as-badges/index.js.map +1 -0
  167. package/esm2022/lib/components/members-by-role/family-members.component.js +180 -0
  168. package/esm2022/lib/components/members-by-role/family-members.component.js.map +1 -0
  169. package/esm2022/lib/components/members-by-role/index.js +4 -0
  170. package/esm2022/lib/components/members-by-role/index.js.map +1 -0
  171. package/esm2022/lib/components/members-by-role/member-group.js +2 -0
  172. package/esm2022/lib/components/members-by-role/member-group.js.map +1 -0
  173. package/esm2022/lib/components/members-by-role/members-by-role.component.js +34 -0
  174. package/esm2022/lib/components/members-by-role/members-by-role.component.js.map +1 -0
  175. package/esm2022/lib/components/members-card-header/members-card-header.component.js +33 -0
  176. package/esm2022/lib/components/members-card-header/members-card-header.component.js.map +1 -0
  177. package/esm2022/lib/components/members-list/index.js +2 -0
  178. package/esm2022/lib/components/members-list/index.js.map +1 -0
  179. package/esm2022/lib/components/members-list/members-list.component.js +164 -0
  180. package/esm2022/lib/components/members-list/members-list.component.js.map +1 -0
  181. package/esm2022/lib/components/members-short-list-card/members-short-list-card.component.js +60 -0
  182. package/esm2022/lib/components/members-short-list-card/members-short-list-card.component.js.map +1 -0
  183. package/esm2022/lib/components/shared-with/index.js +2 -0
  184. package/esm2022/lib/components/shared-with/index.js.map +1 -0
  185. package/esm2022/lib/components/shared-with/shared-with.component.js +25 -0
  186. package/esm2022/lib/components/shared-with/shared-with.component.js.map +1 -0
  187. package/esm2022/lib/components/with-new-contact-input.js +18 -0
  188. package/esm2022/lib/components/with-new-contact-input.js.map +1 -0
  189. package/esm2022/lib/constants.js +2 -0
  190. package/esm2022/lib/constants.js.map +1 -0
  191. package/esm2022/lib/index.js +3 -0
  192. package/esm2022/lib/index.js.map +1 -0
  193. package/esm2022/lib/modals/contact-names-modal/contact-names-modal.component.js +88 -0
  194. package/esm2022/lib/modals/contact-names-modal/contact-names-modal.component.js.map +1 -0
  195. package/esm2022/lib/modals/invite-modal/index.js +2 -0
  196. package/esm2022/lib/modals/invite-modal/index.js.map +1 -0
  197. package/esm2022/lib/modals/invite-modal/invite-modal.component.js +255 -0
  198. package/esm2022/lib/modals/invite-modal/invite-modal.component.js.map +1 -0
  199. package/esm2022/lib/pipes/contact-title.pipe.js +25 -0
  200. package/esm2022/lib/pipes/contact-title.pipe.js.map +1 -0
  201. package/esm2022/lib/pipes/index.js +4 -0
  202. package/esm2022/lib/pipes/index.js.map +1 -0
  203. package/esm2022/lib/pipes/person-title.pipe.js +21 -0
  204. package/esm2022/lib/pipes/person-title.pipe.js.map +1 -0
  205. package/esm2022/lib/pipes/selected-contacts.pipe.js +22 -0
  206. package/esm2022/lib/pipes/selected-contacts.pipe.js.map +1 -0
  207. package/esm2022/lib/providers/user-space-brief.provider.js +30 -0
  208. package/esm2022/lib/providers/user-space-brief.provider.js.map +1 -0
  209. package/esm2022/lib/ui-types.js +2 -0
  210. package/esm2022/lib/ui-types.js.map +1 -0
  211. package/esm2022/sneat-contactus-shared.js +5 -0
  212. package/esm2022/sneat-contactus-shared.js.map +1 -0
  213. package/index.d.ts +3 -0
  214. package/lib/components/address-form/address-form.component.d.ts +51 -0
  215. package/lib/components/address-form/index.d.ts +1 -0
  216. package/lib/components/basic-contact-form/basic-contact-form.component.d.ts +20 -0
  217. package/lib/components/basic-contact-form/index.d.ts +1 -0
  218. package/lib/components/contact-comm-channels/comm-channel-form.component.d.ts +20 -0
  219. package/lib/components/contact-comm-channels/comm-channel-item.component.d.ts +24 -0
  220. package/lib/components/contact-comm-channels/comm-channels-list.component.d.ts +15 -0
  221. package/lib/components/contact-comm-channels/contact-comm-channels.component.d.ts +7 -0
  222. package/lib/components/contact-comm-channels/contact-emails.component.d.ts +9 -0
  223. package/lib/components/contact-comm-channels/contact-phones.component.d.ts +9 -0
  224. package/lib/components/contact-comm-channels/index.d.ts +1 -0
  225. package/lib/components/contact-details/contact-details.component.d.ts +32 -0
  226. package/lib/components/contact-details/index.d.ts +1 -0
  227. package/lib/components/contact-details/related-contacts.component.d.ts +24 -0
  228. package/lib/components/contact-dob/contact-dob.component.d.ts +13 -0
  229. package/lib/components/contact-dob/index.d.ts +1 -0
  230. package/lib/components/contact-events.d.ts +6 -0
  231. package/lib/components/contact-forms/contact-form-base.component.d.ts +15 -0
  232. package/lib/components/contact-forms/emails-form/emails-form.component.d.ts +27 -0
  233. package/lib/components/contact-forms/emails-form/index.d.ts +1 -0
  234. package/lib/components/contact-forms/index.d.ts +10 -0
  235. package/lib/components/contact-forms/location-form/index.d.ts +1 -0
  236. package/lib/components/contact-forms/location-form/location-form.component.d.ts +39 -0
  237. package/lib/components/contact-forms/new-contact/index.d.ts +4 -0
  238. package/lib/components/contact-forms/new-contact/new-company-form.component.d.ts +26 -0
  239. package/lib/components/contact-forms/new-contact/new-contact-form-base.component.d.ts +15 -0
  240. package/lib/components/contact-forms/new-contact/new-contact-form.component.d.ts +20 -0
  241. package/lib/components/contact-forms/new-contact/new-person-form.component.d.ts +51 -0
  242. package/lib/components/contact-forms/new-contact/new-pet-form.component.d.ts +8 -0
  243. package/lib/components/contact-forms/person-forms/age-group/age-group-form.component.d.ts +17 -0
  244. package/lib/components/contact-forms/person-forms/age-group/index.d.ts +1 -0
  245. package/lib/components/contact-forms/person-forms/gender-form/gender-form.component.d.ts +22 -0
  246. package/lib/components/contact-forms/person-forms/gender-form/index.d.ts +1 -0
  247. package/lib/components/contact-forms/person-forms/names-form/index.d.ts +1 -0
  248. package/lib/components/contact-forms/person-forms/names-form/names-form.component.d.ts +63 -0
  249. package/lib/components/contact-forms/pesson-wizard/index.d.ts +1 -0
  250. package/lib/components/contact-forms/pesson-wizard/person-wizard.component.d.ts +63 -0
  251. package/lib/components/contact-forms/pet-kind-and-breed-form/index.d.ts +1 -0
  252. package/lib/components/contact-forms/pet-kind-and-breed-form/pet-kind-and-breed-form.component.d.ts +14 -0
  253. package/lib/components/contact-forms/phones-form/index.d.ts +1 -0
  254. package/lib/components/contact-forms/phones-form/phones-form.component.d.ts +21 -0
  255. package/lib/components/contact-forms/relationship-form/contact-relationship-form.component.d.ts +24 -0
  256. package/lib/components/contact-forms/relationship-form/index.d.ts +1 -0
  257. package/lib/components/contact-forms/relationship-form/relationship-form.component.d.ts +34 -0
  258. package/lib/components/contact-forms/role-form/contact-role-form.component.d.ts +33 -0
  259. package/lib/components/contact-forms/role-form/index.d.ts +1 -0
  260. package/lib/components/contact-forms/roles-form/index.d.ts +1 -0
  261. package/lib/components/contact-forms/roles-form/roles-form.component.d.ts +21 -0
  262. package/lib/components/contact-forms/space-related-form.component.d.ts +11 -0
  263. package/lib/components/contact-input/contact-input.component.d.ts +36 -0
  264. package/lib/components/contact-input/index.d.ts +1 -0
  265. package/lib/components/contact-locations/contact-locations.component.d.ts +14 -0
  266. package/lib/components/contact-locations/index.d.ts +1 -0
  267. package/lib/components/contact-modules-menu/contact-modules-menu.component.d.ts +12 -0
  268. package/lib/components/contact-modules-menu/index.d.ts +1 -0
  269. package/lib/components/contact-role-badges/contact-role-badges.component.d.ts +12 -0
  270. package/lib/components/contact-roles-input/contact-roles-input.component.d.ts +18 -0
  271. package/lib/components/contact-roles-input/index.d.ts +1 -0
  272. package/lib/components/contacts-by-type/contacts-by-type.component.d.ts +38 -0
  273. package/lib/components/contacts-by-type/index.d.ts +1 -0
  274. package/lib/components/contacts-checklist/contacts-checklist-item.component.d.ts +21 -0
  275. package/lib/components/contacts-checklist/contacts-checklist.component.d.ts +40 -0
  276. package/lib/components/contacts-checklist/index.d.ts +1 -0
  277. package/lib/components/contacts-component/contacts.component.d.ts +45 -0
  278. package/lib/components/contacts-component.commands.d.ts +5 -0
  279. package/lib/components/contacts-list/contacts-list.component.d.ts +11 -0
  280. package/lib/components/contacts-list/index.d.ts +2 -0
  281. package/lib/components/contacts-list-item/contacts-list-item.component.d.ts +29 -0
  282. package/lib/components/contacts-list-item/related-as.component.d.ts +16 -0
  283. package/lib/components/contacts-selector/contacts-selector-input.component.d.ts +24 -0
  284. package/lib/components/contacts-selector/contacts-selector.component.d.ts +80 -0
  285. package/lib/components/contacts-selector/contacts-selector.interfaces.d.ts +22 -0
  286. package/lib/components/contacts-selector/contacts-selector.module.d.ts +6 -0
  287. package/lib/components/contacts-selector/contacts-selector.service.d.ts +10 -0
  288. package/lib/components/contacts-selector/lib-exports.d.ts +5 -0
  289. package/lib/components/contactus-module.base.component.d.ts +4 -0
  290. package/lib/components/inlist-options/inlist-age-group.component.d.ts +12 -0
  291. package/lib/components/inlist-options/inlist-options.component.d.ts +18 -0
  292. package/lib/components/invite-links/invite-links.component.d.ts +28 -0
  293. package/lib/components/lib-exports.d.ts +27 -0
  294. package/lib/components/members-as-badges/contacts-as-badges.component.d.ts +18 -0
  295. package/lib/components/members-as-badges/index.d.ts +1 -0
  296. package/lib/components/members-by-role/family-members.component.d.ts +21 -0
  297. package/lib/components/members-by-role/index.d.ts +3 -0
  298. package/lib/components/members-by-role/member-group.d.ts +9 -0
  299. package/lib/components/members-by-role/members-by-role.component.d.ts +12 -0
  300. package/lib/components/members-card-header/members-card-header.component.d.ts +13 -0
  301. package/lib/components/members-list/index.d.ts +1 -0
  302. package/lib/components/members-list/members-list.component.d.ts +32 -0
  303. package/lib/components/members-short-list-card/members-short-list-card.component.d.ts +12 -0
  304. package/lib/components/shared-with/index.d.ts +1 -0
  305. package/lib/components/shared-with/shared-with.component.d.ts +6 -0
  306. package/lib/components/with-new-contact-input.d.ts +10 -0
  307. package/lib/constants.d.ts +13 -0
  308. package/lib/index.d.ts +2 -0
  309. package/lib/modals/contact-names-modal/contact-names-modal.component.d.ts +15 -0
  310. package/lib/modals/invite-modal/index.d.ts +1 -0
  311. package/lib/modals/invite-modal/invite-modal.component.d.ts +49 -0
  312. package/lib/pipes/contact-title.pipe.d.ts +10 -0
  313. package/lib/pipes/index.d.ts +3 -0
  314. package/lib/pipes/person-title.pipe.d.ts +9 -0
  315. package/lib/pipes/selected-contacts.pipe.d.ts +8 -0
  316. package/lib/providers/user-space-brief.provider.d.ts +12 -0
  317. package/lib/ui-types.d.ts +9 -0
  318. package/package.json +27 -0
  319. package/sneat-contactus-shared.d.ts +5 -0
  320. package/tsconfig.lib.prod.tsbuildinfo +1 -0
@@ -0,0 +1,282 @@
1
+ import { Component, computed, effect, EventEmitter, inject, Input, input, Output, signal, } from '@angular/core';
2
+ import { IonButton, IonItemDivider, IonLabel } from '@ionic/angular/standalone';
3
+ import { isRelatedPersonNotReady, } from '@sneat/contactus-core';
4
+ import { ContactGroupService, ContactRoleService, ContactService, } from '@sneat/contactus-services';
5
+ import { PersonWizardComponent } from '../pesson-wizard';
6
+ import { ContactRoleFormComponent } from '../role-form';
7
+ import { AssetService, AssetusServicesModule, } from '@sneat/ext-assetus-components';
8
+ import { first, Observable, Subject, takeUntil } from 'rxjs';
9
+ import { NewContactFormBaseComponent } from './new-contact-form-base.component';
10
+ import { ClassName } from '@sneat/ui';
11
+ import * as i0 from "@angular/core";
12
+ export class NewPersonFormComponent extends NewContactFormBaseComponent {
13
+ constructor() {
14
+ super();
15
+ this.isInModal = false;
16
+ // If set user can't change this.
17
+ this.$fixedGroupID = input(...(ngDevMode ? [undefined, { debugName: "$fixedGroupID" }] : []));
18
+ // If set user can't change role.
19
+ this.$fixedRoleID = input(...(ngDevMode ? [undefined, { debugName: "$fixedRoleID" }] : []));
20
+ this.$assetID = input(...(ngDevMode ? [undefined, { debugName: "$assetID" }] : []));
21
+ this.assetID$ = new Subject();
22
+ this.$asset = signal(undefined, ...(ngDevMode ? [{ debugName: "$asset" }] : []));
23
+ this.$selectedContactGroup = signal(undefined, ...(ngDevMode ? [{ debugName: "$selectedContactGroup" }] : []));
24
+ this.$selectedContactGroupID = computed(() => this.$selectedContactGroup()?.id, ...(ngDevMode ? [{ debugName: "$selectedContactGroupID" }] : []));
25
+ this.$selectedContactRole = signal(undefined, ...(ngDevMode ? [{ debugName: "$selectedContactRole" }] : []));
26
+ this.$selectedContactRoleID = computed(() => this.$selectedContactRole()?.id, ...(ngDevMode ? [{ debugName: "$selectedContactRoleID" }] : []));
27
+ this.$parentContactID = input(...(ngDevMode ? [undefined, { debugName: "$parentContactID" }] : []));
28
+ this.parentContactID$ = new Subject();
29
+ this.$parentContact = signal(undefined, ...(ngDevMode ? [{ debugName: "$parentContact" }] : []));
30
+ this.personRequires = {
31
+ ageGroup: { hide: true },
32
+ relatedAs: { hide: true },
33
+ roles: { hide: true },
34
+ };
35
+ this.contactRoleChange = new EventEmitter();
36
+ this.contactGroupChange = new EventEmitter();
37
+ this.$personFormIsReadyToSubmit = signal(false, ...(ngDevMode ? [{ debugName: "$personFormIsReadyToSubmit" }] : []));
38
+ this.$creating = signal(false, ...(ngDevMode ? [{ debugName: "$creating" }] : []));
39
+ this.assetService = inject(AssetService);
40
+ this.contactGroupService = inject(ContactGroupService);
41
+ this.contactService = inject(ContactService);
42
+ this.contactRoleService = inject(ContactRoleService);
43
+ this.onSelectGroupAndRole = (args) => {
44
+ if (args?.group?.id && args.group.id !== this.$fixedGroupID()) {
45
+ this.$selectedContactGroup.set({ id: args.group.id });
46
+ }
47
+ if (args?.role?.id) {
48
+ this.$selectedContactRole.set({ id: args?.role?.id });
49
+ }
50
+ };
51
+ this.onCommand = (command) => {
52
+ switch (command) {
53
+ case 'create': {
54
+ this.submit();
55
+ break;
56
+ }
57
+ case 'reset': {
58
+ this.$selectedContactRole.set(undefined);
59
+ this.$selectedContactGroup.set(undefined);
60
+ break;
61
+ }
62
+ default:
63
+ this.errorLogger.logError('NewContactPageComponent received unknown command: ' + command);
64
+ break;
65
+ }
66
+ };
67
+ // selectRel(rel: ITitledRecord): void {
68
+ // this.relation = rel.id as ContactToMemberRelation;
69
+ // setTimeout(
70
+ // () => {
71
+ // this.nameInput?.setFocus()
72
+ // .catch(this.logErrorHandler('failed to set focus to name input'));
73
+ // },
74
+ // 100);
75
+ // }
76
+ this.$isContactNotReady = computed(() => isRelatedPersonNotReady(this.$contact().dbo, {}), ...(ngDevMode ? [{ debugName: "$isContactNotReady" }] : []));
77
+ this.setupEffects();
78
+ }
79
+ ngOnInit() {
80
+ this.command?.pipe(this.takeUntilDestroyed()).subscribe(this.onCommand);
81
+ this.selectGroupAndRole$
82
+ ?.pipe(this.takeUntilDestroyed())
83
+ .subscribe(this.onSelectGroupAndRole);
84
+ }
85
+ setupEffects() {
86
+ effect(() => {
87
+ this.creatingChange.emit(this.$creating());
88
+ });
89
+ effect(() => {
90
+ const contactGroupID = this.$selectedContactGroupID();
91
+ if (!contactGroupID) {
92
+ return;
93
+ }
94
+ const spaceRef = this.$contact().space;
95
+ this.contactGroupService
96
+ .getContactGroupByID(contactGroupID, spaceRef)
97
+ .pipe(first(), this.takeUntilDestroyed())
98
+ .subscribe({
99
+ next: (contactGroup) => {
100
+ // 'effect for $selectedContactGroupID loaded contactGroup:',
101
+ // contactGroup,
102
+ this.$selectedContactGroup.set(contactGroup);
103
+ },
104
+ error: this.logErrorHandler('Failed to get contact group by ID'),
105
+ });
106
+ });
107
+ effect(() => {
108
+ const fixedGroupID = this.$fixedGroupID();
109
+ if (fixedGroupID && this.$selectedContactGroupID() !== fixedGroupID) {
110
+ this.$selectedContactGroup.set({ id: fixedGroupID });
111
+ }
112
+ });
113
+ effect(() => {
114
+ const contactRoleID = this.$fixedRoleID();
115
+ if (!contactRoleID) {
116
+ return;
117
+ }
118
+ this.$selectedContactRole.set({ id: contactRoleID });
119
+ this.contactRoleService
120
+ .getContactRoleByID(contactRoleID)
121
+ .pipe(first(), this.takeUntilDestroyed())
122
+ .subscribe({
123
+ next: (contactRole) => {
124
+ this.$selectedContactRole.set({
125
+ id: contactRole.id,
126
+ brief: contactRole.brief,
127
+ });
128
+ },
129
+ error: this.logErrorHandler('Failed to get contact role by ID'),
130
+ });
131
+ });
132
+ effect(() => {
133
+ const id = this.$assetID();
134
+ this.assetID$.next(id);
135
+ if (!id) {
136
+ return;
137
+ }
138
+ const space = this.$contact().space;
139
+ if (this.$asset()?.id !== id) {
140
+ this.$asset.set({ id, space });
141
+ }
142
+ this.assetService
143
+ .watchAssetByID(space, id)
144
+ .pipe(this.takeUntilDestroyed(), takeUntil(this.assetID$))
145
+ .subscribe({
146
+ next: (asset) => {
147
+ this.$asset.set(asset);
148
+ },
149
+ error: this.logErrorHandler('failed to get asset by ID'),
150
+ });
151
+ });
152
+ effect(() => {
153
+ const id = this.$parentContactID();
154
+ this.parentContactID$.next(id);
155
+ if (!id) {
156
+ return;
157
+ }
158
+ const space = this.$contact().space;
159
+ this.contactService
160
+ .watchContactById(space, id)
161
+ .pipe(this.takeUntilDestroyed(), takeUntil(this.parentContactID$))
162
+ .subscribe((parentContact) => {
163
+ this.$parentContact.set(parentContact);
164
+ });
165
+ });
166
+ }
167
+ onContactGroupChanged(contactGroup) {
168
+ this.$selectedContactGroup.set(contactGroup);
169
+ }
170
+ onContactRoleIDChanged(contactRoleID) {
171
+ const contactRole = this.$selectedContactGroup()?.dbo?.roles?.find((r) => r.id === contactRoleID);
172
+ this.$selectedContactRole.set(contactRole);
173
+ // 'onContactRoleIDChanged()',
174
+ // contactRoleID,
175
+ // this.$selectedContactRole,
176
+ }
177
+ onContactChanged(contact) {
178
+ this.contactChange.emit(contact);
179
+ }
180
+ onPersonFormIsReadyToSubmit() {
181
+ this.$personFormIsReadyToSubmit.set(true);
182
+ }
183
+ submit() {
184
+ this.console.log('NewContactFormComponent.submit()');
185
+ const space = this.$contact().space;
186
+ if (!space) {
187
+ throw new Error('Space is not defined');
188
+ }
189
+ this.$creating.set(true);
190
+ const contactDbo = this.$contact().dbo;
191
+ let request = {
192
+ status: 'active',
193
+ type: 'person',
194
+ spaceID: space.id,
195
+ person: {
196
+ ...contactDbo,
197
+ status: 'active',
198
+ type: 'person',
199
+ ageGroup: contactDbo.ageGroup || 'unknown',
200
+ },
201
+ };
202
+ const asset = this.$asset();
203
+ if (asset) {
204
+ if (!asset.id) {
205
+ throw new Error('!assetDto.id');
206
+ }
207
+ if (!asset.brief?.title) {
208
+ throw new Error('!asset.brief.title');
209
+ }
210
+ if (!this.assetRelation) {
211
+ throw new Error('!this.assetRelation');
212
+ }
213
+ const contact2Asset = {
214
+ id: asset.id,
215
+ title: asset.brief.title,
216
+ relation: this.assetRelation,
217
+ };
218
+ request = {
219
+ ...request,
220
+ relatedToAssets: [contact2Asset],
221
+ };
222
+ }
223
+ const roleID = this.$selectedContactRoleID();
224
+ if (roleID) {
225
+ if (request.person && !request.person.roles) {
226
+ request = {
227
+ ...request,
228
+ person: { ...request.person, roles: [roleID] },
229
+ };
230
+ }
231
+ else if (request.person &&
232
+ request.person.roles?.some((r) => r === roleID)) {
233
+ request = {
234
+ ...request,
235
+ person: {
236
+ ...request.person,
237
+ roles: [...request.person.roles, roleID],
238
+ },
239
+ };
240
+ }
241
+ }
242
+ this.contactService.createContact(space, request).subscribe({
243
+ next: (contact) => {
244
+ const space = this.$contact().space;
245
+ this.spaceNavService
246
+ .navigateForwardToSpacePage(space, `contact/${contact.id}`, {
247
+ replaceUrl: true,
248
+ state: { contact },
249
+ })
250
+ .catch(this.errorLogger.logErrorHandler('failed to navigate to contact page'));
251
+ },
252
+ error: (err) => {
253
+ this.$creating.set(false);
254
+ this.errorLogger.logError(err, 'Failed to create new contact');
255
+ },
256
+ });
257
+ }
258
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: NewPersonFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
259
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: NewPersonFormComponent, isStandalone: true, selector: "sneat-new-person-form", inputs: { isInModal: { classPropertyName: "isInModal", publicName: "isInModal", isSignal: false, isRequired: false, transformFunction: null }, command: { classPropertyName: "command", publicName: "command", isSignal: false, isRequired: false, transformFunction: null }, selectGroupAndRole$: { classPropertyName: "selectGroupAndRole$", publicName: "selectGroupAndRole$", isSignal: false, isRequired: false, transformFunction: null }, $fixedGroupID: { classPropertyName: "$fixedGroupID", publicName: "$fixedGroupID", isSignal: true, isRequired: false, transformFunction: null }, $fixedRoleID: { classPropertyName: "$fixedRoleID", publicName: "$fixedRoleID", isSignal: true, isRequired: false, transformFunction: null }, $assetID: { classPropertyName: "$assetID", publicName: "$assetID", isSignal: true, isRequired: false, transformFunction: null }, $parentContactID: { classPropertyName: "$parentContactID", publicName: "$parentContactID", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { contactRoleChange: "contactRoleChange", contactGroupChange: "contactGroupChange" }, providers: [{ provide: ClassName, useValue: 'NewContactFormComponent' }], usesInheritance: true, ngImport: i0, template: "@if ($asset()?.id) {\n <!-- Replace with related items -->\n <ion-item-divider color=\"light\">\n @let asset = $asset();\n <ion-label color=\"medium\"\n >{{ asset?.brief?.title || asset?.id }}\n </ion-label>\n </ion-item-divider>\n}\n\n<sneat-contact-role-form\n [$contactGroupID]=\"$selectedContactGroupID()\"\n (contactGroupChange)=\"onContactGroupChanged($event)\"\n [$contactRoleID]=\"$selectedContactRoleID()\"\n (contactRoleIDChange)=\"onContactRoleIDChanged($event)\"\n/>\n\n@if ($selectedContactRole()) {\n <sneat-person-wizard\n [$space]=\"$space()\"\n [$contact]=\"$contact()\"\n (contactChange)=\"onContactChanged($event)\"\n [hideRelationship]=\"true\"\n [hidePetOption]=\"true\"\n [$fields]=\"{ contactType: { hide: true }, relatedAs: { hide: true } }\"\n [displayAgeGroupValue]=\"true\"\n [requires]=\"personRequires\"\n (isReadyToSubmitChange)=\"onPersonFormIsReadyToSubmit()\"\n />\n}\n\n<!--\t<ng-container *ngIf=\"member && !relation\">-->\n<!--\t\t<p *ngIf=\"!member\">Please select relation to member</p>-->\n<!--\t\t<p *ngIf=\"member\">Please select relation to <b>{{member?.brief?.title || member?.id}}</b></p>-->\n<!--\t\t<ion-list mode=\"ios\">-->\n<!--\t\t\t<ion-item mode=\"ios\" button *ngFor=\"let rel of relations; trackBy: id\"-->\n<!--\t\t\t\t\t\t\t\t(click)=\"selectRel(rel)\">{{rel.title}}</ion-item>-->\n<!--\t\t</ion-list>-->\n<!--\t</ng-container>-->\n\n<!--\t<ion-list *ngIf=\"relation\">-->\n<!--\t\t<ion-item>-->\n<!--\t\t\t<ion-label>Relation</ion-label>-->\n<!--\t\t\t<ion-select [(ngModel)]=\"relation\" [disabled]=\"creating\" interface=\"action-sheet\">-->\n<!--\t\t\t\t<ion-select-option *ngFor=\"let rel of relations; trackBy: id\"-->\n<!--\t\t\t\t\t\t\t\t\t\t\t\t\t [value]=\"rel.id\">{{rel.title}}</ion-select-option>-->\n<!--\t\t\t</ion-select>-->\n<!--\t\t</ion-item>-->\n<!--\t</ion-list>-->\n\n<!--\t<div class=\"ion-padding\" *ngIf=\"!isContactNotReady\">-->\n\n@if (!isInModal) {\n <div class=\"ion-padding\">\n <ion-button\n expand=\"full\"\n [disabled]=\"$creating() || $isContactNotReady()\"\n (click)=\"submit()\"\n >\n <ion-label>Create contact</ion-label>\n </ion-button>\n </div>\n}\n", dependencies: [{ kind: "component", type: IonItemDivider, selector: "ion-item-divider", inputs: ["color", "mode", "sticky"] }, { kind: "component", type: IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: ContactRoleFormComponent, selector: "sneat-contact-role-form", inputs: ["$contactGroupID", "$contactRoleID"], outputs: ["contactGroupIDChange", "contactGroupChange", "contactRoleIDChange", "contactRoleChange"] }, { kind: "component", type: PersonWizardComponent, selector: "sneat-person-wizard", inputs: ["requires", "disabled", "hideRelationship", "hidePetOption", "displayAgeGroupValue", "nameFields", "$fields"], outputs: ["isReadyToSubmitChange"] }, { 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: "ngmodule", type: AssetusServicesModule }] }); }
260
+ }
261
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: NewPersonFormComponent, decorators: [{
262
+ type: Component,
263
+ args: [{ imports: [
264
+ IonItemDivider,
265
+ IonLabel,
266
+ ContactRoleFormComponent,
267
+ PersonWizardComponent,
268
+ IonButton,
269
+ AssetusServicesModule,
270
+ ], providers: [{ provide: ClassName, useValue: 'NewContactFormComponent' }], selector: 'sneat-new-person-form', template: "@if ($asset()?.id) {\n <!-- Replace with related items -->\n <ion-item-divider color=\"light\">\n @let asset = $asset();\n <ion-label color=\"medium\"\n >{{ asset?.brief?.title || asset?.id }}\n </ion-label>\n </ion-item-divider>\n}\n\n<sneat-contact-role-form\n [$contactGroupID]=\"$selectedContactGroupID()\"\n (contactGroupChange)=\"onContactGroupChanged($event)\"\n [$contactRoleID]=\"$selectedContactRoleID()\"\n (contactRoleIDChange)=\"onContactRoleIDChanged($event)\"\n/>\n\n@if ($selectedContactRole()) {\n <sneat-person-wizard\n [$space]=\"$space()\"\n [$contact]=\"$contact()\"\n (contactChange)=\"onContactChanged($event)\"\n [hideRelationship]=\"true\"\n [hidePetOption]=\"true\"\n [$fields]=\"{ contactType: { hide: true }, relatedAs: { hide: true } }\"\n [displayAgeGroupValue]=\"true\"\n [requires]=\"personRequires\"\n (isReadyToSubmitChange)=\"onPersonFormIsReadyToSubmit()\"\n />\n}\n\n<!--\t<ng-container *ngIf=\"member && !relation\">-->\n<!--\t\t<p *ngIf=\"!member\">Please select relation to member</p>-->\n<!--\t\t<p *ngIf=\"member\">Please select relation to <b>{{member?.brief?.title || member?.id}}</b></p>-->\n<!--\t\t<ion-list mode=\"ios\">-->\n<!--\t\t\t<ion-item mode=\"ios\" button *ngFor=\"let rel of relations; trackBy: id\"-->\n<!--\t\t\t\t\t\t\t\t(click)=\"selectRel(rel)\">{{rel.title}}</ion-item>-->\n<!--\t\t</ion-list>-->\n<!--\t</ng-container>-->\n\n<!--\t<ion-list *ngIf=\"relation\">-->\n<!--\t\t<ion-item>-->\n<!--\t\t\t<ion-label>Relation</ion-label>-->\n<!--\t\t\t<ion-select [(ngModel)]=\"relation\" [disabled]=\"creating\" interface=\"action-sheet\">-->\n<!--\t\t\t\t<ion-select-option *ngFor=\"let rel of relations; trackBy: id\"-->\n<!--\t\t\t\t\t\t\t\t\t\t\t\t\t [value]=\"rel.id\">{{rel.title}}</ion-select-option>-->\n<!--\t\t\t</ion-select>-->\n<!--\t\t</ion-item>-->\n<!--\t</ion-list>-->\n\n<!--\t<div class=\"ion-padding\" *ngIf=\"!isContactNotReady\">-->\n\n@if (!isInModal) {\n <div class=\"ion-padding\">\n <ion-button\n expand=\"full\"\n [disabled]=\"$creating() || $isContactNotReady()\"\n (click)=\"submit()\"\n >\n <ion-label>Create contact</ion-label>\n </ion-button>\n </div>\n}\n" }]
271
+ }], ctorParameters: () => [], propDecorators: { isInModal: [{
272
+ type: Input
273
+ }], command: [{
274
+ type: Input
275
+ }], selectGroupAndRole$: [{
276
+ type: Input
277
+ }], $fixedGroupID: [{ type: i0.Input, args: [{ isSignal: true, alias: "$fixedGroupID", required: false }] }], $fixedRoleID: [{ type: i0.Input, args: [{ isSignal: true, alias: "$fixedRoleID", required: false }] }], $assetID: [{ type: i0.Input, args: [{ isSignal: true, alias: "$assetID", required: false }] }], $parentContactID: [{ type: i0.Input, args: [{ isSignal: true, alias: "$parentContactID", required: false }] }], contactRoleChange: [{
278
+ type: Output
279
+ }], contactGroupChange: [{
280
+ type: Output
281
+ }] } });
282
+ //# sourceMappingURL=new-person-form.component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"new-person-form.component.js","sourceRoot":"","sources":["../../../../../../../../../libs/contactus/shared/src/lib/components/contact-forms/new-contact/new-person-form.component.ts","../../../../../../../../../libs/contactus/shared/src/lib/components/contact-forms/new-contact/new-person-form.component.html"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n computed,\n effect,\n EventEmitter,\n inject,\n Input,\n input,\n OnInit,\n Output,\n signal,\n} from '@angular/core';\nimport { IonButton, IonItemDivider, IonLabel } from '@ionic/angular/standalone';\nimport {\n IContactRoleWithIdAndBrief,\n ContactToAssetRelation,\n IContact2Asset,\n IContactContext,\n IContactGroupDbo,\n IPersonRequirements,\n isRelatedPersonNotReady,\n ContactRole,\n IContactRoleWithIdAndOptionalBrief,\n NewContactBaseDboAndSpaceRef,\n ICreateContactPersonRequest,\n} from '@sneat/contactus-core';\nimport {\n ContactGroupService,\n ContactRoleService,\n ContactService,\n} from '@sneat/contactus-services';\nimport { PersonWizardComponent } from '../pesson-wizard';\nimport { IContactAddEventArgs } from '../../contact-events';\nimport { ContactRoleFormComponent } from '../role-form';\nimport { IIdAndDbo, IIdAndOptionalDbo } from '@sneat/core';\nimport {\n AssetService,\n AssetusServicesModule,\n} from '@sneat/ext-assetus-components';\nimport { IAssetContext } from '@sneat/mod-assetus-core';\nimport { first, Observable, Subject, takeUntil } from 'rxjs';\nimport { NewContactFormBaseComponent } from './new-contact-form-base.component';\nimport { ClassName } from '@sneat/ui';\n\nexport type OptionalContactRoleIdAndBrief =\n | IContactRoleWithIdAndBrief\n | undefined;\n\nexport type OptionalContactGroupIdAndBrief =\n | IIdAndOptionalDbo<IContactGroupDbo>\n | undefined;\n\nexport type NewContactFormCommand = 'create' | 'reset';\n\n@Component({\n imports: [\n IonItemDivider,\n IonLabel,\n ContactRoleFormComponent,\n PersonWizardComponent,\n IonButton,\n AssetusServicesModule,\n ],\n providers: [{ provide: ClassName, useValue: 'NewContactFormComponent' }],\n selector: 'sneat-new-person-form',\n templateUrl: './new-person-form.component.html',\n})\nexport class NewPersonFormComponent\n extends NewContactFormBaseComponent\n implements OnInit\n{\n @Input() public isInModal = false;\n\n @Input() command?: Observable<NewContactFormCommand>;\n @Input() selectGroupAndRole$?: Observable<IContactAddEventArgs | undefined>;\n\n // If set user can't change this.\n public readonly $fixedGroupID = input<string>();\n\n // If set user can't change role.\n public readonly $fixedRoleID = input<ContactRole>();\n\n public readonly $assetID = input<string>();\n\n private readonly assetID$ = new Subject<string | undefined>();\n\n public readonly $asset = signal<IAssetContext | undefined>(undefined);\n\n protected readonly $selectedContactGroup = signal<\n OptionalContactGroupIdAndBrief | undefined\n >(undefined);\n\n protected readonly $selectedContactGroupID = computed(\n () => this.$selectedContactGroup()?.id,\n );\n\n protected readonly $selectedContactRole = signal<\n IContactRoleWithIdAndOptionalBrief | undefined\n >(undefined);\n\n protected readonly $selectedContactRoleID = computed(\n () => this.$selectedContactRole()?.id,\n );\n\n public readonly $parentContactID = input<string>();\n private readonly parentContactID$ = new Subject<string | undefined>();\n private readonly $parentContact = signal<IContactContext | undefined>(\n undefined,\n );\n\n protected readonly personRequires: IPersonRequirements = {\n ageGroup: { hide: true },\n relatedAs: { hide: true },\n roles: { hide: true },\n };\n\n @Output() readonly contactRoleChange =\n new EventEmitter<OptionalContactRoleIdAndBrief>();\n\n @Output() readonly contactGroupChange =\n new EventEmitter<OptionalContactGroupIdAndBrief>();\n\n protected assetRelation?: ContactToAssetRelation;\n protected readonly $personFormIsReadyToSubmit = signal(false);\n protected readonly $creating = signal(false);\n\n private readonly assetService = inject(AssetService);\n private readonly contactGroupService = inject(ContactGroupService);\n private readonly contactService = inject(ContactService);\n private readonly contactRoleService = inject(ContactRoleService);\n\n public constructor() {\n super();\n this.setupEffects();\n }\n\n public ngOnInit(): void {\n this.command?.pipe(this.takeUntilDestroyed()).subscribe(this.onCommand);\n this.selectGroupAndRole$\n ?.pipe(this.takeUntilDestroyed())\n .subscribe(this.onSelectGroupAndRole);\n }\n\n private readonly onSelectGroupAndRole = (\n args: IContactAddEventArgs | undefined,\n ) => {\n if (args?.group?.id && args.group.id !== this.$fixedGroupID()) {\n this.$selectedContactGroup.set({ id: args.group.id });\n }\n if (args?.role?.id) {\n this.$selectedContactRole.set({ id: args?.role?.id });\n }\n };\n\n private readonly onCommand = (command: NewContactFormCommand): void => {\n switch (command) {\n case 'create': {\n this.submit();\n break;\n }\n case 'reset': {\n this.$selectedContactRole.set(undefined);\n this.$selectedContactGroup.set(undefined);\n break;\n }\n default:\n this.errorLogger.logError(\n 'NewContactPageComponent received unknown command: ' + command,\n );\n break;\n }\n };\n\n private setupEffects(): void {\n effect(() => {\n this.creatingChange.emit(this.$creating());\n });\n effect(() => {\n const contactGroupID = this.$selectedContactGroupID();\n if (!contactGroupID) {\n return;\n }\n const spaceRef = this.$contact().space;\n this.contactGroupService\n .getContactGroupByID(contactGroupID, spaceRef)\n .pipe(first(), this.takeUntilDestroyed())\n .subscribe({\n next: (contactGroup) => {\n // 'effect for $selectedContactGroupID loaded contactGroup:',\n // contactGroup,\n this.$selectedContactGroup.set(contactGroup);\n },\n error: this.logErrorHandler('Failed to get contact group by ID'),\n });\n });\n effect(() => {\n const fixedGroupID = this.$fixedGroupID();\n if (fixedGroupID && this.$selectedContactGroupID() !== fixedGroupID) {\n this.$selectedContactGroup.set({ id: fixedGroupID });\n }\n });\n effect(() => {\n const contactRoleID = this.$fixedRoleID();\n if (!contactRoleID) {\n return;\n }\n this.$selectedContactRole.set({ id: contactRoleID });\n this.contactRoleService\n .getContactRoleByID(contactRoleID)\n .pipe(first(), this.takeUntilDestroyed())\n .subscribe({\n next: (contactRole) => {\n this.$selectedContactRole.set({\n id: contactRole.id as ContactRole,\n brief: contactRole.brief,\n });\n },\n error: this.logErrorHandler('Failed to get contact role by ID'),\n });\n });\n effect(() => {\n const id = this.$assetID();\n this.assetID$.next(id);\n if (!id) {\n return;\n }\n const space = this.$contact().space;\n if (this.$asset()?.id !== id) {\n this.$asset.set({ id, space });\n }\n this.assetService\n .watchAssetByID(space, id)\n .pipe(this.takeUntilDestroyed(), takeUntil(this.assetID$))\n .subscribe({\n next: (asset) => {\n this.$asset.set(asset);\n },\n error: this.logErrorHandler('failed to get asset by ID'),\n });\n });\n effect(() => {\n const id = this.$parentContactID();\n this.parentContactID$.next(id);\n if (!id) {\n return;\n }\n const space = this.$contact().space;\n this.contactService\n .watchContactById(space, id)\n .pipe(this.takeUntilDestroyed(), takeUntil(this.parentContactID$))\n .subscribe((parentContact) => {\n this.$parentContact.set(parentContact);\n });\n });\n }\n\n protected onContactGroupChanged(\n contactGroup?: IIdAndDbo<IContactGroupDbo>,\n ): void {\n this.$selectedContactGroup.set(contactGroup);\n }\n\n protected onContactRoleIDChanged(contactRoleID?: string): void {\n const contactRole = this.$selectedContactGroup()?.dbo?.roles?.find(\n (r) => r.id === contactRoleID,\n );\n this.$selectedContactRole.set(contactRole);\n // 'onContactRoleIDChanged()',\n // contactRoleID,\n // this.$selectedContactRole,\n }\n\n public onContactChanged(contact: NewContactBaseDboAndSpaceRef): void {\n this.contactChange.emit(contact);\n }\n\n public onPersonFormIsReadyToSubmit(): void {\n this.$personFormIsReadyToSubmit.set(true);\n }\n\n protected submit(): void {\n this.console.log('NewContactFormComponent.submit()');\n const space = this.$contact().space;\n if (!space) {\n throw new Error('Space is not defined');\n }\n this.$creating.set(true);\n const contactDbo = this.$contact().dbo;\n let request: ICreateContactPersonRequest = {\n status: 'active',\n type: 'person',\n spaceID: space.id,\n person: {\n ...contactDbo,\n status: 'active',\n type: 'person',\n ageGroup: contactDbo.ageGroup || 'unknown',\n },\n };\n\n const asset = this.$asset();\n if (asset) {\n if (!asset.id) {\n throw new Error('!assetDto.id');\n }\n if (!asset.brief?.title) {\n throw new Error('!asset.brief.title');\n }\n\n if (!this.assetRelation) {\n throw new Error('!this.assetRelation');\n }\n const contact2Asset: IContact2Asset = {\n id: asset.id,\n title: asset.brief.title,\n relation: this.assetRelation,\n };\n request = {\n ...request,\n relatedToAssets: [contact2Asset],\n };\n }\n const roleID = this.$selectedContactRoleID();\n if (roleID) {\n if (request.person && !request.person.roles) {\n request = {\n ...request,\n person: { ...request.person, roles: [roleID] },\n };\n } else if (\n request.person &&\n request.person.roles?.some((r) => r === roleID)\n ) {\n request = {\n ...request,\n person: {\n ...request.person,\n roles: [...request.person.roles, roleID],\n },\n };\n }\n }\n this.contactService.createContact(space, request).subscribe({\n next: (contact) => {\n const space = this.$contact().space;\n this.spaceNavService\n .navigateForwardToSpacePage(space, `contact/${contact.id}`, {\n replaceUrl: true,\n state: { contact },\n })\n .catch(\n this.errorLogger.logErrorHandler(\n 'failed to navigate to contact page',\n ),\n );\n },\n error: (err: unknown) => {\n this.$creating.set(false);\n this.errorLogger.logError(err, 'Failed to create new contact');\n },\n });\n }\n\n // selectRel(rel: ITitledRecord): void {\n // \tthis.relation = rel.id as ContactToMemberRelation;\n // \tsetTimeout(\n // \t\t() => {\n // \t\t\tthis.nameInput?.setFocus()\n // \t\t\t\t.catch(this.logErrorHandler('failed to set focus to name input'));\n // \t\t},\n // \t\t100);\n // }\n\n protected readonly $isContactNotReady = computed(() =>\n isRelatedPersonNotReady(this.$contact().dbo, {}),\n );\n}\n","@if ($asset()?.id) {\n <!-- Replace with related items -->\n <ion-item-divider color=\"light\">\n @let asset = $asset();\n <ion-label color=\"medium\"\n >{{ asset?.brief?.title || asset?.id }}\n </ion-label>\n </ion-item-divider>\n}\n\n<sneat-contact-role-form\n [$contactGroupID]=\"$selectedContactGroupID()\"\n (contactGroupChange)=\"onContactGroupChanged($event)\"\n [$contactRoleID]=\"$selectedContactRoleID()\"\n (contactRoleIDChange)=\"onContactRoleIDChanged($event)\"\n/>\n\n@if ($selectedContactRole()) {\n <sneat-person-wizard\n [$space]=\"$space()\"\n [$contact]=\"$contact()\"\n (contactChange)=\"onContactChanged($event)\"\n [hideRelationship]=\"true\"\n [hidePetOption]=\"true\"\n [$fields]=\"{ contactType: { hide: true }, relatedAs: { hide: true } }\"\n [displayAgeGroupValue]=\"true\"\n [requires]=\"personRequires\"\n (isReadyToSubmitChange)=\"onPersonFormIsReadyToSubmit()\"\n />\n}\n\n<!--\t<ng-container *ngIf=\"member && !relation\">-->\n<!--\t\t<p *ngIf=\"!member\">Please select relation to member</p>-->\n<!--\t\t<p *ngIf=\"member\">Please select relation to <b>{{member?.brief?.title || member?.id}}</b></p>-->\n<!--\t\t<ion-list mode=\"ios\">-->\n<!--\t\t\t<ion-item mode=\"ios\" button *ngFor=\"let rel of relations; trackBy: id\"-->\n<!--\t\t\t\t\t\t\t\t(click)=\"selectRel(rel)\">{{rel.title}}</ion-item>-->\n<!--\t\t</ion-list>-->\n<!--\t</ng-container>-->\n\n<!--\t<ion-list *ngIf=\"relation\">-->\n<!--\t\t<ion-item>-->\n<!--\t\t\t<ion-label>Relation</ion-label>-->\n<!--\t\t\t<ion-select [(ngModel)]=\"relation\" [disabled]=\"creating\" interface=\"action-sheet\">-->\n<!--\t\t\t\t<ion-select-option *ngFor=\"let rel of relations; trackBy: id\"-->\n<!--\t\t\t\t\t\t\t\t\t\t\t\t\t [value]=\"rel.id\">{{rel.title}}</ion-select-option>-->\n<!--\t\t\t</ion-select>-->\n<!--\t\t</ion-item>-->\n<!--\t</ion-list>-->\n\n<!--\t<div class=\"ion-padding\" *ngIf=\"!isContactNotReady\">-->\n\n@if (!isInModal) {\n <div class=\"ion-padding\">\n <ion-button\n expand=\"full\"\n [disabled]=\"$creating() || $isContactNotReady()\"\n (click)=\"submit()\"\n >\n <ion-label>Create contact</ion-label>\n </ion-button>\n </div>\n}\n"]}
@@ -0,0 +1,25 @@
1
+ import { ChangeDetectionStrategy, Component } from '@angular/core';
2
+ import { IonButton, IonCard, IonInput, IonItem, IonLabel, } from '@ionic/angular/standalone';
3
+ import { ClassName } from '@sneat/ui';
4
+ import { PetKindAndBreedFormComponent } from '../pet-kind-and-breed-form/pet-kind-and-breed-form.component';
5
+ import { NewContactFormBaseComponent } from './new-contact-form-base.component';
6
+ import * as i0 from "@angular/core";
7
+ export class NewPetFormComponent extends NewContactFormBaseComponent {
8
+ onContactChanged(contact) {
9
+ this.contactChange.emit(contact);
10
+ }
11
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: NewPetFormComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
12
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: NewPetFormComponent, isStandalone: true, selector: "sneat-new-pet-form", providers: [{ provide: ClassName, useValue: 'NewPetFormComponent' }], usesInheritance: true, ngImport: i0, template: "<sneat-pet-kind-and-breed-form\n [$space]=\"$space()\"\n [$contact]=\"$contact()\"\n (contactChange)=\"onContactChanged($event)\"\n/>\n\n@if ($contact().dbo.petBreed) {\n <ion-card>\n <ion-item>\n <ion-input label=\"Nickname\" />\n </ion-item>\n\n <ion-item>\n <ion-input label=\"Full name\" />\n </ion-item>\n </ion-card>\n <ion-button>\n <ion-label>Create</ion-label>\n </ion-button>\n}\n", dependencies: [{ 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: IonInput, selector: "ion-input", inputs: ["accept", "autocapitalize", "autocomplete", "autocorrect", "autofocus", "clearInput", "clearOnEdit", "color", "counter", "counterFormatter", "debounce", "disabled", "enterkeyhint", "errorText", "fill", "helperText", "inputmode", "label", "labelPlacement", "max", "maxlength", "min", "minlength", "mode", "multiple", "name", "pattern", "placeholder", "readonly", "required", "shape", "size", "spellcheck", "step", "type", "value"] }, { kind: "component", type: IonCard, selector: "ion-card", inputs: ["button", "color", "disabled", "download", "href", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: PetKindAndBreedFormComponent, selector: "sneat-pet-kind-and-breed-form", outputs: ["petKindChange"] }, { 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: IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
13
+ }
14
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: NewPetFormComponent, decorators: [{
15
+ type: Component,
16
+ args: [{ selector: 'sneat-new-pet-form', imports: [
17
+ IonItem,
18
+ IonInput,
19
+ IonCard,
20
+ PetKindAndBreedFormComponent,
21
+ IonButton,
22
+ IonLabel,
23
+ ], providers: [{ provide: ClassName, useValue: 'NewPetFormComponent' }], changeDetection: ChangeDetectionStrategy.OnPush, template: "<sneat-pet-kind-and-breed-form\n [$space]=\"$space()\"\n [$contact]=\"$contact()\"\n (contactChange)=\"onContactChanged($event)\"\n/>\n\n@if ($contact().dbo.petBreed) {\n <ion-card>\n <ion-item>\n <ion-input label=\"Nickname\" />\n </ion-item>\n\n <ion-item>\n <ion-input label=\"Full name\" />\n </ion-item>\n </ion-card>\n <ion-button>\n <ion-label>Create</ion-label>\n </ion-button>\n}\n" }]
24
+ }] });
25
+ //# sourceMappingURL=new-pet-form.component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"new-pet-form.component.js","sourceRoot":"","sources":["../../../../../../../../../libs/contactus/shared/src/lib/components/contact-forms/new-contact/new-pet-form.component.ts","../../../../../../../../../libs/contactus/shared/src/lib/components/contact-forms/new-contact/new-pet-form.component.html"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,EACL,SAAS,EACT,OAAO,EACP,QAAQ,EACR,OAAO,EACP,QAAQ,GACT,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,4BAA4B,EAAE,MAAM,8DAA8D,CAAC;AAC5G,OAAO,EAAE,2BAA2B,EAAE,MAAM,mCAAmC,CAAC;;AAgBhF,MAAM,OAAO,mBAAoB,SAAQ,2BAA2B;IACxD,gBAAgB,CAAC,OAAqC;QAC9D,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC;8GAHU,mBAAmB;kGAAnB,mBAAmB,iEAHnB,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,qBAAqB,EAAE,CAAC,iDCxBtE,waAoBA,4CDHI,OAAO,0NACP,QAAQ,8eACR,OAAO,yLACP,4BAA4B,sGAC5B,SAAS,oPACT,QAAQ;;2FAKC,mBAAmB;kBAd/B,SAAS;+BACE,oBAAoB,WAErB;wBACP,OAAO;wBACP,QAAQ;wBACR,OAAO;wBACP,4BAA4B;wBAC5B,SAAS;wBACT,QAAQ;qBACT,aACU,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,qBAAqB,EAAE,CAAC,mBACnD,uBAAuB,CAAC,MAAM","sourcesContent":["import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport {\n IonButton,\n IonCard,\n IonInput,\n IonItem,\n IonLabel,\n} from '@ionic/angular/standalone';\nimport { NewContactBaseDboAndSpaceRef } from '@sneat/contactus-core';\nimport { ClassName } from '@sneat/ui';\nimport { PetKindAndBreedFormComponent } from '../pet-kind-and-breed-form/pet-kind-and-breed-form.component';\nimport { NewContactFormBaseComponent } from './new-contact-form-base.component';\n\n@Component({\n selector: 'sneat-new-pet-form',\n templateUrl: './new-pet-form.component.html',\n imports: [\n IonItem,\n IonInput,\n IonCard,\n PetKindAndBreedFormComponent,\n IonButton,\n IonLabel,\n ],\n providers: [{ provide: ClassName, useValue: 'NewPetFormComponent' }],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NewPetFormComponent extends NewContactFormBaseComponent {\n protected onContactChanged(contact: NewContactBaseDboAndSpaceRef): void {\n this.contactChange.emit(contact);\n }\n}\n","<sneat-pet-kind-and-breed-form\n [$space]=\"$space()\"\n [$contact]=\"$contact()\"\n (contactChange)=\"onContactChanged($event)\"\n/>\n\n@if ($contact().dbo.petBreed) {\n <ion-card>\n <ion-item>\n <ion-input label=\"Nickname\" />\n </ion-item>\n\n <ion-item>\n <ion-input label=\"Full name\" />\n </ion-item>\n </ion-card>\n <ion-button>\n <ion-label>Create</ion-label>\n </ion-button>\n}\n"]}
@@ -0,0 +1,64 @@
1
+ import { Component, computed, EventEmitter, input, Input, Output, } from '@angular/core';
2
+ import { IonCard, IonItemDivider } from '@ionic/angular/standalone';
3
+ import { formNexInAnimation } from '@sneat/core';
4
+ import { SelectFromListComponent } from '@sneat/ui';
5
+ import * as i0 from "@angular/core";
6
+ export class AgeGroupFormComponent {
7
+ constructor() {
8
+ this.$ageGroup = input.required(...(ngDevMode ? [{ debugName: "$ageGroup" }] : []));
9
+ this.ageGroupChange = new EventEmitter();
10
+ this.disabled = false;
11
+ this.hidePetOption = input(...(ngDevMode ? [undefined, { debugName: "hidePetOption" }] : []));
12
+ this.hideUndisclosedOption = input(...(ngDevMode ? [undefined, { debugName: "hideUndisclosedOption" }] : []));
13
+ this.$ageGroupLabel = computed(() => {
14
+ const hidePetOptions = this.hidePetOption();
15
+ if (hidePetOptions) {
16
+ return 'Adult or child?';
17
+ }
18
+ return 'Adult/child or pet?';
19
+ }, ...(ngDevMode ? [{ debugName: "$ageGroupLabel" }] : []));
20
+ this.$ageGroupOptions = computed(() => {
21
+ const hidePetOptions = this.hidePetOption();
22
+ const items = [
23
+ {
24
+ id: 'adult',
25
+ title: 'Adult',
26
+ },
27
+ {
28
+ id: 'child',
29
+ title: 'Child',
30
+ },
31
+ ];
32
+ if (!hidePetOptions) {
33
+ items.push({
34
+ id: 'pet',
35
+ title: 'Pet',
36
+ });
37
+ }
38
+ if (!this.hideUndisclosedOption) {
39
+ items.push({
40
+ id: 'undisclosed',
41
+ title: 'Undisclosed',
42
+ });
43
+ }
44
+ return items;
45
+ }, ...(ngDevMode ? [{ debugName: "$ageGroupOptions" }] : []));
46
+ }
47
+ onAgeGroupChanged(ageGroup) {
48
+ this.ageGroupChange.emit(ageGroup);
49
+ }
50
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: AgeGroupFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
51
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: AgeGroupFormComponent, isStandalone: true, selector: "sneat-age-group-form", inputs: { spaceType: { classPropertyName: "spaceType", publicName: "spaceType", isSignal: false, isRequired: true, transformFunction: null }, $ageGroup: { classPropertyName: "$ageGroup", publicName: "$ageGroup", isSignal: true, isRequired: true, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: false, isRequired: false, transformFunction: null }, hidePetOption: { classPropertyName: "hidePetOption", publicName: "hidePetOption", isSignal: true, isRequired: false, transformFunction: null }, hideUndisclosedOption: { classPropertyName: "hideUndisclosedOption", publicName: "hideUndisclosedOption", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { ageGroupChange: "ageGroupChange" }, ngImport: i0, template: "<ion-card @formNextIn>\n @if (!$ageGroup()) {\n <ion-item-divider color=\"primary\">\n {{ $ageGroupLabel() }}\n </ion-item-divider>\n }\n <sneat-select-from-list\n label=\"Age group\"\n labelPlacement=\"end\"\n [value]=\"$ageGroup() || ''\"\n (valueChange)=\"onAgeGroupChanged($event)\"\n [items]=\"$ageGroupOptions()\"\n />\n</ion-card>\n", dependencies: [{ kind: "component", type: SelectFromListComponent, selector: "sneat-select-from-list", inputs: ["value", "filterLabel", "label", "listLabel", "listLabelColor", "isFilterable", "isLoading", "items", "items$", "lastItemLines", "labelPlacement", "justify", "other", "canAdd", "filterItem", "selectMode", "isReadonly", "$isProcessing", "sortBy"], outputs: ["valueChange", "filterChanged"] }, { kind: "component", type: IonCard, selector: "ion-card", inputs: ["button", "color", "disabled", "download", "href", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: IonItemDivider, selector: "ion-item-divider", inputs: ["color", "mode", "sticky"] }], animations: [formNexInAnimation] }); }
52
+ }
53
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: AgeGroupFormComponent, decorators: [{
54
+ type: Component,
55
+ args: [{ selector: 'sneat-age-group-form', animations: [formNexInAnimation], imports: [SelectFromListComponent, IonCard, IonItemDivider], template: "<ion-card @formNextIn>\n @if (!$ageGroup()) {\n <ion-item-divider color=\"primary\">\n {{ $ageGroupLabel() }}\n </ion-item-divider>\n }\n <sneat-select-from-list\n label=\"Age group\"\n labelPlacement=\"end\"\n [value]=\"$ageGroup() || ''\"\n (valueChange)=\"onAgeGroupChanged($event)\"\n [items]=\"$ageGroupOptions()\"\n />\n</ion-card>\n" }]
56
+ }], propDecorators: { spaceType: [{
57
+ type: Input,
58
+ args: [{ required: true }]
59
+ }], $ageGroup: [{ type: i0.Input, args: [{ isSignal: true, alias: "$ageGroup", required: true }] }], ageGroupChange: [{
60
+ type: Output
61
+ }], disabled: [{
62
+ type: Input
63
+ }], hidePetOption: [{ type: i0.Input, args: [{ isSignal: true, alias: "hidePetOption", required: false }] }], hideUndisclosedOption: [{ type: i0.Input, args: [{ isSignal: true, alias: "hideUndisclosedOption", required: false }] }] } });
64
+ //# sourceMappingURL=age-group-form.component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"age-group-form.component.js","sourceRoot":"","sources":["../../../../../../../../../../libs/contactus/shared/src/lib/components/contact-forms/person-forms/age-group/age-group-form.component.ts","../../../../../../../../../../libs/contactus/shared/src/lib/components/contact-forms/person-forms/age-group/age-group-form.component.html"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,QAAQ,EACR,YAAY,EACZ,KAAK,EACL,KAAK,EACL,MAAM,GACP,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAc,kBAAkB,EAAa,MAAM,aAAa,CAAC;AACxE,OAAO,EAAe,uBAAuB,EAAE,MAAM,WAAW,CAAC;;AAQjE,MAAM,OAAO,qBAAqB;IANlC;QASkB,cAAS,GAAG,KAAK,CAAC,QAAQ,oDAA0B,CAAC;QAElD,mBAAc,GAAG,IAAI,YAAY,EAEjD,CAAC;QACK,aAAQ,GAAG,KAAK,CAAC;QAEV,kBAAa,GAAG,KAAK,mEAAW,CAAC;QACjC,0BAAqB,GAAG,KAAK,2EAAW,CAAC;QAE/C,mBAAc,GAAG,QAAQ,CAAC,GAAG,EAAE;YACvC,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;YAE5C,IAAI,cAAc,EAAE,CAAC;gBACnB,OAAO,iBAAiB,CAAC;YAC3B,CAAC;YACD,OAAO,qBAAqB,CAAC;QAC/B,CAAC,0DAAC,CAAC;QAEgB,qBAAgB,GAAG,QAAQ,CAAyB,GAAG,EAAE;YAC1E,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;YAE5C,MAAM,KAAK,GAAkB;gBAC3B;oBACE,EAAE,EAAE,OAAO;oBACX,KAAK,EAAE,OAAO;iBACf;gBACD;oBACE,EAAE,EAAE,OAAO;oBACX,KAAK,EAAE,OAAO;iBACf;aACF,CAAC;YACF,IAAI,CAAC,cAAc,EAAE,CAAC;gBACpB,KAAK,CAAC,IAAI,CAAC;oBACT,EAAE,EAAE,KAAK;oBACT,KAAK,EAAE,KAAK;iBACb,CAAC,CAAC;YACL,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC;gBAChC,KAAK,CAAC,IAAI,CAAC;oBACT,EAAE,EAAE,aAAa;oBACjB,KAAK,EAAE,aAAa;iBACrB,CAAC,CAAC;YACL,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC,4DAAC,CAAC;KAKJ;IAHW,iBAAiB,CAAC,QAAgB;QAC1C,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,QAAsB,CAAC,CAAC;IACnD,CAAC;8GApDU,qBAAqB;kGAArB,qBAAqB,40BClBlC,mXAcA,4CDEY,uBAAuB,8WAAE,OAAO,yLAAE,cAAc,oFAD9C,CAAC,kBAAkB,CAAC;;2FAGrB,qBAAqB;kBANjC,SAAS;+BACE,sBAAsB,cAEpB,CAAC,kBAAkB,CAAC,WACvB,CAAC,uBAAuB,EAAE,OAAO,EAAE,cAAc,CAAC;;sBAG1D,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;;sBAIxB,MAAM;;sBAGN,KAAK","sourcesContent":["import {\n Component,\n computed,\n EventEmitter,\n input,\n Input,\n Output,\n} from '@angular/core';\nimport { IonCard, IonItemDivider } from '@ionic/angular/standalone';\nimport { AgeGroupID, formNexInAnimation, SpaceType } from '@sneat/core';\nimport { ISelectItem, SelectFromListComponent } from '@sneat/ui';\n\n@Component({\n selector: 'sneat-age-group-form',\n templateUrl: 'age-group-form.component.html',\n animations: [formNexInAnimation],\n imports: [SelectFromListComponent, IonCard, IonItemDivider],\n})\nexport class AgeGroupFormComponent {\n @Input({ required: true }) spaceType?: SpaceType;\n\n public readonly $ageGroup = input.required<AgeGroupID | undefined>();\n\n @Output() readonly ageGroupChange = new EventEmitter<\n AgeGroupID | undefined\n >();\n @Input() disabled = false;\n\n public readonly hidePetOption = input<boolean>();\n public readonly hideUndisclosedOption = input<boolean>();\n\n protected $ageGroupLabel = computed(() => {\n const hidePetOptions = this.hidePetOption();\n\n if (hidePetOptions) {\n return 'Adult or child?';\n }\n return 'Adult/child or pet?';\n });\n\n protected readonly $ageGroupOptions = computed<readonly ISelectItem[]>(() => {\n const hidePetOptions = this.hidePetOption();\n\n const items: ISelectItem[] = [\n {\n id: 'adult',\n title: 'Adult',\n },\n {\n id: 'child',\n title: 'Child',\n },\n ];\n if (!hidePetOptions) {\n items.push({\n id: 'pet',\n title: 'Pet',\n });\n }\n if (!this.hideUndisclosedOption) {\n items.push({\n id: 'undisclosed',\n title: 'Undisclosed',\n });\n }\n return items;\n });\n\n protected onAgeGroupChanged(ageGroup: string): void {\n this.ageGroupChange.emit(ageGroup as AgeGroupID);\n }\n}\n","<ion-card @formNextIn>\n @if (!$ageGroup()) {\n <ion-item-divider color=\"primary\">\n {{ $ageGroupLabel() }}\n </ion-item-divider>\n }\n <sneat-select-from-list\n label=\"Age group\"\n labelPlacement=\"end\"\n [value]=\"$ageGroup() || ''\"\n (valueChange)=\"onAgeGroupChanged($event)\"\n [items]=\"$ageGroupOptions()\"\n />\n</ion-card>\n"]}
@@ -0,0 +1,2 @@
1
+ export * from './age-group-form.component';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../../../../libs/contactus/shared/src/lib/components/contact-forms/person-forms/age-group/index.ts"],"names":[],"mappings":"AAAA,cAAc,4BAA4B,CAAC","sourcesContent":["export * from './age-group-form.component';\n"]}
@@ -0,0 +1,118 @@
1
+ import { animate, style, transition, trigger } from '@angular/animations';
2
+ import { ChangeDetectionStrategy, Component, EventEmitter, inject, input, Input, Output, signal, } from '@angular/core';
3
+ import { IonButton, IonButtons, IonIcon, IonItem, IonItemDivider, IonLabel, IonSpinner, } from '@ionic/angular/standalone';
4
+ import { genderColor } from '@sneat/components';
5
+ import { ContactService } from '@sneat/contactus-services';
6
+ import { GenderFemale, GenderMale, GenderOther, GenderUndisclosed, } from '@sneat/core';
7
+ import { ClassName, SelectFromListComponent, SneatBaseComponent, } from '@sneat/ui';
8
+ import * as i0 from "@angular/core";
9
+ const animationTimings = '150ms';
10
+ const genders = [
11
+ { id: GenderMale, title: 'Male', iconName: 'man-outline', emoji: '👨' },
12
+ { id: GenderFemale, title: 'Female', iconName: 'woman-outline', emoji: '👩' },
13
+ { id: GenderOther, title: 'Other', iconName: 'person-outline' },
14
+ // { id: GenderUnknown, title: 'Unknown', iconName: 'person-circle-outline' },
15
+ { id: GenderUndisclosed, title: 'Undisclosed', iconName: 'person' },
16
+ ];
17
+ export class GenderFormComponent extends SneatBaseComponent {
18
+ constructor() {
19
+ super(...arguments);
20
+ this.genderOptions = genders.map((g) => ({
21
+ id: g.id,
22
+ title: g.title,
23
+ iconName: g.iconName,
24
+ iconColor: genderColor(g.id),
25
+ emoji: g.emoji,
26
+ }));
27
+ this.hideSkipButton = false;
28
+ this.disabled = false;
29
+ this.$spaceID = input.required(...(ngDevMode ? [{ debugName: "$spaceID" }] : []));
30
+ this.$contactID = input.required(...(ngDevMode ? [{ debugName: "$contactID" }] : []));
31
+ this.$genderID = input.required(...(ngDevMode ? [{ debugName: "$genderID" }] : []));
32
+ this.$updatingToGender = signal(undefined, ...(ngDevMode ? [{ debugName: "$updatingToGender" }] : []));
33
+ this.genderChange = new EventEmitter();
34
+ this.contactService = inject(ContactService);
35
+ this.$isChanging = signal(false, ...(ngDevMode ? [{ debugName: "$isChanging" }] : []));
36
+ }
37
+ // @ViewChild(IonRadioGroup, { static: true }) radioGroup?: IonRadioGroup;
38
+ skip() {
39
+ this.onGenderChanged('undisclosed');
40
+ }
41
+ onGenderChanged(gender) {
42
+ const contactID = this.$contactID();
43
+ if (!gender) {
44
+ gender = 'unknown';
45
+ }
46
+ if (gender == this.$genderID()) {
47
+ return;
48
+ }
49
+ if (!contactID) {
50
+ this.genderChange.emit(gender);
51
+ return;
52
+ }
53
+ this.$updatingToGender.set(gender);
54
+ this.contactService
55
+ .updateContact({
56
+ gender: gender,
57
+ spaceID: this.$spaceID(),
58
+ contactID: contactID,
59
+ })
60
+ .subscribe({
61
+ next: () => {
62
+ this.genderChange.emit(gender);
63
+ this.$updatingToGender.set(undefined);
64
+ },
65
+ error: (err) => {
66
+ this.errorLogger.logError(err, 'Failed to change gender of a contact');
67
+ this.$updatingToGender.set(undefined);
68
+ },
69
+ });
70
+ }
71
+ onGenderIDChanged(genderID) {
72
+ this.onGenderChanged(genderID);
73
+ }
74
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: GenderFormComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
75
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: GenderFormComponent, isStandalone: true, selector: "sneat-gender-form", inputs: { lastItemLines: { classPropertyName: "lastItemLines", publicName: "lastItemLines", isSignal: false, isRequired: false, transformFunction: null }, hideSkipButton: { classPropertyName: "hideSkipButton", publicName: "hideSkipButton", isSignal: false, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: false, isRequired: false, transformFunction: null }, $spaceID: { classPropertyName: "$spaceID", publicName: "$spaceID", isSignal: true, isRequired: true, transformFunction: null }, $contactID: { classPropertyName: "$contactID", publicName: "$contactID", isSignal: true, isRequired: true, transformFunction: null }, $genderID: { classPropertyName: "$genderID", publicName: "$genderID", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { genderChange: "genderChange" }, providers: [{ provide: ClassName, useValue: 'GenderFormComponent' }], usesInheritance: true, ngImport: i0, template: "@let genderID = $genderID();\n\n<!--contactID={{ $contactID() }};-->\n<!--genderID={{ genderID }};-->\n<!--$updatingToGender={{ $updatingToGender() }}-->\n\n@if (genderID) {\n @if (genderID === \"unknown\" && !$updatingToGender()) {\n <ion-item-divider [color]=\"!genderID ? 'primary' : 'light'\">\n <ion-label><b>Gender</b></ion-label>\n @if (!hideSkipButton) {\n <ion-buttons slot=\"end\">\n <ion-button color=\"light\" (click)=\"skip()\">\n <ion-label>Skip</ion-label>\n <ion-icon name=\"close-circle-outline\" slot=\"end\" />\n </ion-button>\n </ion-buttons>\n }\n </ion-item-divider>\n }\n <sneat-select-from-list\n label=\"Gender\"\n labelPlacement=\"end\"\n [lastItemLines]=\"lastItemLines\"\n [$isProcessing]=\"!!$updatingToGender()\"\n [value]=\"$updatingToGender() || (genderID === 'unknown' ? '' : genderID)\"\n (valueChange)=\"onGenderIDChanged($event)\"\n [items]=\"genderOptions\"\n />\n} @else {\n <ion-item>\n <ion-label>Gender</ion-label>\n <ion-spinner name=\"lines-small\" color=\"medium\" slot=\"end\" />\n </ion-item>\n}\n", dependencies: [{ kind: "component", type: SelectFromListComponent, selector: "sneat-select-from-list", inputs: ["value", "filterLabel", "label", "listLabel", "listLabelColor", "isFilterable", "isLoading", "items", "items$", "lastItemLines", "labelPlacement", "justify", "other", "canAdd", "filterItem", "selectMode", "isReadonly", "$isProcessing", "sortBy"], outputs: ["valueChange", "filterChanged"] }, { kind: "component", type: IonItemDivider, selector: "ion-item-divider", inputs: ["color", "mode", "sticky"] }, { kind: "component", type: IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { 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: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "component", type: IonItem, selector: "ion-item", inputs: ["button", "color", "detail", "detailIcon", "disabled", "download", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }], animations: [
76
+ trigger('radioOut', [
77
+ transition(':leave', [animate(animationTimings, style({ height: 0 }))]),
78
+ ]),
79
+ trigger('selectIn', [
80
+ transition(':enter', [
81
+ // style({ display: 'none' }), // initial styles
82
+ animate(animationTimings),
83
+ ]),
84
+ ]),
85
+ ], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
86
+ }
87
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: GenderFormComponent, decorators: [{
88
+ type: Component,
89
+ args: [{ imports: [
90
+ SelectFromListComponent,
91
+ IonItemDivider,
92
+ IonLabel,
93
+ IonButtons,
94
+ IonButton,
95
+ IonIcon,
96
+ IonSpinner,
97
+ IonItem,
98
+ ], animations: [
99
+ trigger('radioOut', [
100
+ transition(':leave', [animate(animationTimings, style({ height: 0 }))]),
101
+ ]),
102
+ trigger('selectIn', [
103
+ transition(':enter', [
104
+ // style({ display: 'none' }), // initial styles
105
+ animate(animationTimings),
106
+ ]),
107
+ ]),
108
+ ], changeDetection: ChangeDetectionStrategy.OnPush, selector: 'sneat-gender-form', providers: [{ provide: ClassName, useValue: 'GenderFormComponent' }], template: "@let genderID = $genderID();\n\n<!--contactID={{ $contactID() }};-->\n<!--genderID={{ genderID }};-->\n<!--$updatingToGender={{ $updatingToGender() }}-->\n\n@if (genderID) {\n @if (genderID === \"unknown\" && !$updatingToGender()) {\n <ion-item-divider [color]=\"!genderID ? 'primary' : 'light'\">\n <ion-label><b>Gender</b></ion-label>\n @if (!hideSkipButton) {\n <ion-buttons slot=\"end\">\n <ion-button color=\"light\" (click)=\"skip()\">\n <ion-label>Skip</ion-label>\n <ion-icon name=\"close-circle-outline\" slot=\"end\" />\n </ion-button>\n </ion-buttons>\n }\n </ion-item-divider>\n }\n <sneat-select-from-list\n label=\"Gender\"\n labelPlacement=\"end\"\n [lastItemLines]=\"lastItemLines\"\n [$isProcessing]=\"!!$updatingToGender()\"\n [value]=\"$updatingToGender() || (genderID === 'unknown' ? '' : genderID)\"\n (valueChange)=\"onGenderIDChanged($event)\"\n [items]=\"genderOptions\"\n />\n} @else {\n <ion-item>\n <ion-label>Gender</ion-label>\n <ion-spinner name=\"lines-small\" color=\"medium\" slot=\"end\" />\n </ion-item>\n}\n" }]
109
+ }], propDecorators: { lastItemLines: [{
110
+ type: Input
111
+ }], hideSkipButton: [{
112
+ type: Input
113
+ }], disabled: [{
114
+ type: Input
115
+ }], $spaceID: [{ type: i0.Input, args: [{ isSignal: true, alias: "$spaceID", required: true }] }], $contactID: [{ type: i0.Input, args: [{ isSignal: true, alias: "$contactID", required: true }] }], $genderID: [{ type: i0.Input, args: [{ isSignal: true, alias: "$genderID", required: true }] }], genderChange: [{
116
+ type: Output
117
+ }] } });
118
+ //# sourceMappingURL=gender-form.component.js.map