@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.
- package/esm2022/index.js +4 -0
- package/esm2022/index.js.map +1 -0
- package/esm2022/lib/components/address-form/address-form.component.js +182 -0
- package/esm2022/lib/components/address-form/address-form.component.js.map +1 -0
- package/esm2022/lib/components/address-form/index.js +2 -0
- package/esm2022/lib/components/address-form/index.js.map +1 -0
- package/esm2022/lib/components/basic-contact-form/basic-contact-form.component.js +71 -0
- package/esm2022/lib/components/basic-contact-form/basic-contact-form.component.js.map +1 -0
- package/esm2022/lib/components/basic-contact-form/index.js +2 -0
- package/esm2022/lib/components/basic-contact-form/index.js.map +1 -0
- package/esm2022/lib/components/contact-comm-channels/comm-channel-form.component.js +90 -0
- package/esm2022/lib/components/contact-comm-channels/comm-channel-form.component.js.map +1 -0
- package/esm2022/lib/components/contact-comm-channels/comm-channel-item.component.js +128 -0
- package/esm2022/lib/components/contact-comm-channels/comm-channel-item.component.js.map +1 -0
- package/esm2022/lib/components/contact-comm-channels/comm-channels-list.component.js +30 -0
- package/esm2022/lib/components/contact-comm-channels/comm-channels-list.component.js.map +1 -0
- package/esm2022/lib/components/contact-comm-channels/contact-comm-channels.component.js +16 -0
- package/esm2022/lib/components/contact-comm-channels/contact-comm-channels.component.js.map +1 -0
- package/esm2022/lib/components/contact-comm-channels/contact-emails.component.js +30 -0
- package/esm2022/lib/components/contact-comm-channels/contact-emails.component.js.map +1 -0
- package/esm2022/lib/components/contact-comm-channels/contact-phones.component.js +30 -0
- package/esm2022/lib/components/contact-comm-channels/contact-phones.component.js.map +1 -0
- package/esm2022/lib/components/contact-comm-channels/index.js +2 -0
- package/esm2022/lib/components/contact-comm-channels/index.js.map +1 -0
- package/esm2022/lib/components/contact-details/contact-details.component.js +235 -0
- package/esm2022/lib/components/contact-details/contact-details.component.js.map +1 -0
- package/esm2022/lib/components/contact-details/index.js +2 -0
- package/esm2022/lib/components/contact-details/index.js.map +1 -0
- package/esm2022/lib/components/contact-details/related-contacts.component.js +116 -0
- package/esm2022/lib/components/contact-details/related-contacts.component.js.map +1 -0
- package/esm2022/lib/components/contact-dob/contact-dob.component.js +57 -0
- package/esm2022/lib/components/contact-dob/contact-dob.component.js.map +1 -0
- package/esm2022/lib/components/contact-dob/index.js +2 -0
- package/esm2022/lib/components/contact-dob/index.js.map +1 -0
- package/esm2022/lib/components/contact-events.js +2 -0
- package/esm2022/lib/components/contact-events.js.map +1 -0
- package/esm2022/lib/components/contact-forms/contact-form-base.component.js +30 -0
- package/esm2022/lib/components/contact-forms/contact-form-base.component.js.map +1 -0
- package/esm2022/lib/components/contact-forms/emails-form/emails-form.component.js +76 -0
- package/esm2022/lib/components/contact-forms/emails-form/emails-form.component.js.map +1 -0
- package/esm2022/lib/components/contact-forms/emails-form/index.js +2 -0
- package/esm2022/lib/components/contact-forms/emails-form/index.js.map +1 -0
- package/esm2022/lib/components/contact-forms/index.js +11 -0
- package/esm2022/lib/components/contact-forms/index.js.map +1 -0
- package/esm2022/lib/components/contact-forms/location-form/index.js +2 -0
- package/esm2022/lib/components/contact-forms/location-form/index.js.map +1 -0
- package/esm2022/lib/components/contact-forms/location-form/location-form.component.js +194 -0
- package/esm2022/lib/components/contact-forms/location-form/location-form.component.js.map +1 -0
- package/esm2022/lib/components/contact-forms/new-contact/index.js +5 -0
- package/esm2022/lib/components/contact-forms/new-contact/index.js.map +1 -0
- package/esm2022/lib/components/contact-forms/new-contact/new-company-form.component.js +115 -0
- package/esm2022/lib/components/contact-forms/new-contact/new-company-form.component.js.map +1 -0
- package/esm2022/lib/components/contact-forms/new-contact/new-contact-form-base.component.js +34 -0
- package/esm2022/lib/components/contact-forms/new-contact/new-contact-form-base.component.js.map +1 -0
- package/esm2022/lib/components/contact-forms/new-contact/new-contact-form.component.js +82 -0
- package/esm2022/lib/components/contact-forms/new-contact/new-contact-form.component.js.map +1 -0
- package/esm2022/lib/components/contact-forms/new-contact/new-person-form.component.js +282 -0
- package/esm2022/lib/components/contact-forms/new-contact/new-person-form.component.js.map +1 -0
- package/esm2022/lib/components/contact-forms/new-contact/new-pet-form.component.js +25 -0
- package/esm2022/lib/components/contact-forms/new-contact/new-pet-form.component.js.map +1 -0
- package/esm2022/lib/components/contact-forms/person-forms/age-group/age-group-form.component.js +64 -0
- package/esm2022/lib/components/contact-forms/person-forms/age-group/age-group-form.component.js.map +1 -0
- package/esm2022/lib/components/contact-forms/person-forms/age-group/index.js +2 -0
- package/esm2022/lib/components/contact-forms/person-forms/age-group/index.js.map +1 -0
- package/esm2022/lib/components/contact-forms/person-forms/gender-form/gender-form.component.js +118 -0
- package/esm2022/lib/components/contact-forms/person-forms/gender-form/gender-form.component.js.map +1 -0
- package/esm2022/lib/components/contact-forms/person-forms/gender-form/index.js +2 -0
- package/esm2022/lib/components/contact-forms/person-forms/gender-form/index.js.map +1 -0
- package/esm2022/lib/components/contact-forms/person-forms/names-form/index.js +2 -0
- package/esm2022/lib/components/contact-forms/person-forms/names-form/index.js.map +1 -0
- package/esm2022/lib/components/contact-forms/person-forms/names-form/names-form.component.js +296 -0
- package/esm2022/lib/components/contact-forms/person-forms/names-form/names-form.component.js.map +1 -0
- package/esm2022/lib/components/contact-forms/pesson-wizard/index.js +2 -0
- package/esm2022/lib/components/contact-forms/pesson-wizard/index.js.map +1 -0
- package/esm2022/lib/components/contact-forms/pesson-wizard/person-wizard.component.js +369 -0
- package/esm2022/lib/components/contact-forms/pesson-wizard/person-wizard.component.js.map +1 -0
- package/esm2022/lib/components/contact-forms/pet-kind-and-breed-form/index.js +2 -0
- package/esm2022/lib/components/contact-forms/pet-kind-and-breed-form/index.js.map +1 -0
- package/esm2022/lib/components/contact-forms/pet-kind-and-breed-form/pet-kind-and-breed-form.component.js +66 -0
- package/esm2022/lib/components/contact-forms/pet-kind-and-breed-form/pet-kind-and-breed-form.component.js.map +1 -0
- package/esm2022/lib/components/contact-forms/phones-form/index.js +2 -0
- package/esm2022/lib/components/contact-forms/phones-form/index.js.map +1 -0
- package/esm2022/lib/components/contact-forms/phones-form/phones-form.component.js +79 -0
- package/esm2022/lib/components/contact-forms/phones-form/phones-form.component.js.map +1 -0
- package/esm2022/lib/components/contact-forms/relationship-form/contact-relationship-form.component.js +125 -0
- package/esm2022/lib/components/contact-forms/relationship-form/contact-relationship-form.component.js.map +1 -0
- package/esm2022/lib/components/contact-forms/relationship-form/index.js +2 -0
- package/esm2022/lib/components/contact-forms/relationship-form/index.js.map +1 -0
- package/esm2022/lib/components/contact-forms/relationship-form/relationship-form.component.js +136 -0
- package/esm2022/lib/components/contact-forms/relationship-form/relationship-form.component.js.map +1 -0
- package/esm2022/lib/components/contact-forms/role-form/contact-role-form.component.js +98 -0
- package/esm2022/lib/components/contact-forms/role-form/contact-role-form.component.js.map +1 -0
- package/esm2022/lib/components/contact-forms/role-form/index.js +2 -0
- package/esm2022/lib/components/contact-forms/role-form/index.js.map +1 -0
- package/esm2022/lib/components/contact-forms/roles-form/index.js +2 -0
- package/esm2022/lib/components/contact-forms/roles-form/index.js.map +1 -0
- package/esm2022/lib/components/contact-forms/roles-form/roles-form.component.js +59 -0
- package/esm2022/lib/components/contact-forms/roles-form/roles-form.component.js.map +1 -0
- package/esm2022/lib/components/contact-forms/space-related-form.component.js +32 -0
- package/esm2022/lib/components/contact-forms/space-related-form.component.js.map +1 -0
- package/esm2022/lib/components/contact-input/contact-input.component.js +151 -0
- package/esm2022/lib/components/contact-input/contact-input.component.js.map +1 -0
- package/esm2022/lib/components/contact-input/index.js +2 -0
- package/esm2022/lib/components/contact-input/index.js.map +1 -0
- package/esm2022/lib/components/contact-locations/contact-locations.component.js +52 -0
- package/esm2022/lib/components/contact-locations/contact-locations.component.js.map +1 -0
- package/esm2022/lib/components/contact-locations/index.js +2 -0
- package/esm2022/lib/components/contact-locations/index.js.map +1 -0
- package/esm2022/lib/components/contact-modules-menu/contact-modules-menu.component.js +29 -0
- package/esm2022/lib/components/contact-modules-menu/contact-modules-menu.component.js.map +1 -0
- package/esm2022/lib/components/contact-modules-menu/index.js +2 -0
- package/esm2022/lib/components/contact-modules-menu/index.js.map +1 -0
- package/esm2022/lib/components/contact-role-badges/contact-role-badges.component.js +44 -0
- package/esm2022/lib/components/contact-role-badges/contact-role-badges.component.js.map +1 -0
- package/esm2022/lib/components/contact-roles-input/contact-roles-input.component.js +37 -0
- package/esm2022/lib/components/contact-roles-input/contact-roles-input.component.js.map +1 -0
- package/esm2022/lib/components/contact-roles-input/index.js +2 -0
- package/esm2022/lib/components/contact-roles-input/index.js.map +1 -0
- package/esm2022/lib/components/contacts-by-type/contacts-by-type.component.js +200 -0
- package/esm2022/lib/components/contacts-by-type/contacts-by-type.component.js.map +1 -0
- package/esm2022/lib/components/contacts-by-type/index.js +2 -0
- package/esm2022/lib/components/contacts-by-type/index.js.map +1 -0
- package/esm2022/lib/components/contacts-checklist/contacts-checklist-item.component.js +32 -0
- package/esm2022/lib/components/contacts-checklist/contacts-checklist-item.component.js.map +1 -0
- package/esm2022/lib/components/contacts-checklist/contacts-checklist.component.js +140 -0
- package/esm2022/lib/components/contacts-checklist/contacts-checklist.component.js.map +1 -0
- package/esm2022/lib/components/contacts-checklist/index.js +2 -0
- package/esm2022/lib/components/contacts-checklist/index.js.map +1 -0
- package/esm2022/lib/components/contacts-component/contacts.component.js +200 -0
- package/esm2022/lib/components/contacts-component/contacts.component.js.map +1 -0
- package/esm2022/lib/components/contacts-component.commands.js +2 -0
- package/esm2022/lib/components/contacts-component.commands.js.map +1 -0
- package/esm2022/lib/components/contacts-list/contacts-list.component.js +32 -0
- package/esm2022/lib/components/contacts-list/contacts-list.component.js.map +1 -0
- package/esm2022/lib/components/contacts-list/index.js +3 -0
- package/esm2022/lib/components/contacts-list/index.js.map +1 -0
- package/esm2022/lib/components/contacts-list-item/contacts-list-item.component.js +138 -0
- package/esm2022/lib/components/contacts-list-item/contacts-list-item.component.js.map +1 -0
- package/esm2022/lib/components/contacts-list-item/related-as.component.js +34 -0
- package/esm2022/lib/components/contacts-list-item/related-as.component.js.map +1 -0
- package/esm2022/lib/components/contacts-selector/contacts-selector-input.component.js +91 -0
- package/esm2022/lib/components/contacts-selector/contacts-selector-input.component.js.map +1 -0
- package/esm2022/lib/components/contacts-selector/contacts-selector.component.js +415 -0
- package/esm2022/lib/components/contacts-selector/contacts-selector.component.js.map +1 -0
- package/esm2022/lib/components/contacts-selector/contacts-selector.interfaces.js +2 -0
- package/esm2022/lib/components/contacts-selector/contacts-selector.interfaces.js.map +1 -0
- package/esm2022/lib/components/contacts-selector/contacts-selector.module.js +28 -0
- package/esm2022/lib/components/contacts-selector/contacts-selector.module.js.map +1 -0
- package/esm2022/lib/components/contacts-selector/contacts-selector.service.js +18 -0
- package/esm2022/lib/components/contacts-selector/contacts-selector.service.js.map +1 -0
- package/esm2022/lib/components/contacts-selector/lib-exports.js +6 -0
- package/esm2022/lib/components/contacts-selector/lib-exports.js.map +1 -0
- package/esm2022/lib/components/contactus-module.base.component.js +4 -0
- package/esm2022/lib/components/contactus-module.base.component.js.map +1 -0
- package/esm2022/lib/components/inlist-options/inlist-age-group.component.js +53 -0
- package/esm2022/lib/components/inlist-options/inlist-age-group.component.js.map +1 -0
- package/esm2022/lib/components/inlist-options/inlist-options.component.js +27 -0
- package/esm2022/lib/components/inlist-options/inlist-options.component.js.map +1 -0
- package/esm2022/lib/components/invite-links/invite-links.component.js +87 -0
- package/esm2022/lib/components/invite-links/invite-links.component.js.map +1 -0
- package/esm2022/lib/components/lib-exports.js +29 -0
- package/esm2022/lib/components/lib-exports.js.map +1 -0
- package/esm2022/lib/components/members-as-badges/contacts-as-badges.component.js +39 -0
- package/esm2022/lib/components/members-as-badges/contacts-as-badges.component.js.map +1 -0
- package/esm2022/lib/components/members-as-badges/index.js +2 -0
- package/esm2022/lib/components/members-as-badges/index.js.map +1 -0
- package/esm2022/lib/components/members-by-role/family-members.component.js +180 -0
- package/esm2022/lib/components/members-by-role/family-members.component.js.map +1 -0
- package/esm2022/lib/components/members-by-role/index.js +4 -0
- package/esm2022/lib/components/members-by-role/index.js.map +1 -0
- package/esm2022/lib/components/members-by-role/member-group.js +2 -0
- package/esm2022/lib/components/members-by-role/member-group.js.map +1 -0
- package/esm2022/lib/components/members-by-role/members-by-role.component.js +34 -0
- package/esm2022/lib/components/members-by-role/members-by-role.component.js.map +1 -0
- package/esm2022/lib/components/members-card-header/members-card-header.component.js +33 -0
- package/esm2022/lib/components/members-card-header/members-card-header.component.js.map +1 -0
- package/esm2022/lib/components/members-list/index.js +2 -0
- package/esm2022/lib/components/members-list/index.js.map +1 -0
- package/esm2022/lib/components/members-list/members-list.component.js +164 -0
- package/esm2022/lib/components/members-list/members-list.component.js.map +1 -0
- package/esm2022/lib/components/members-short-list-card/members-short-list-card.component.js +60 -0
- package/esm2022/lib/components/members-short-list-card/members-short-list-card.component.js.map +1 -0
- package/esm2022/lib/components/shared-with/index.js +2 -0
- package/esm2022/lib/components/shared-with/index.js.map +1 -0
- package/esm2022/lib/components/shared-with/shared-with.component.js +25 -0
- package/esm2022/lib/components/shared-with/shared-with.component.js.map +1 -0
- package/esm2022/lib/components/with-new-contact-input.js +18 -0
- package/esm2022/lib/components/with-new-contact-input.js.map +1 -0
- package/esm2022/lib/constants.js +2 -0
- package/esm2022/lib/constants.js.map +1 -0
- package/esm2022/lib/index.js +3 -0
- package/esm2022/lib/index.js.map +1 -0
- package/esm2022/lib/modals/contact-names-modal/contact-names-modal.component.js +88 -0
- package/esm2022/lib/modals/contact-names-modal/contact-names-modal.component.js.map +1 -0
- package/esm2022/lib/modals/invite-modal/index.js +2 -0
- package/esm2022/lib/modals/invite-modal/index.js.map +1 -0
- package/esm2022/lib/modals/invite-modal/invite-modal.component.js +255 -0
- package/esm2022/lib/modals/invite-modal/invite-modal.component.js.map +1 -0
- package/esm2022/lib/pipes/contact-title.pipe.js +25 -0
- package/esm2022/lib/pipes/contact-title.pipe.js.map +1 -0
- package/esm2022/lib/pipes/index.js +4 -0
- package/esm2022/lib/pipes/index.js.map +1 -0
- package/esm2022/lib/pipes/person-title.pipe.js +21 -0
- package/esm2022/lib/pipes/person-title.pipe.js.map +1 -0
- package/esm2022/lib/pipes/selected-contacts.pipe.js +22 -0
- package/esm2022/lib/pipes/selected-contacts.pipe.js.map +1 -0
- package/esm2022/lib/providers/user-space-brief.provider.js +30 -0
- package/esm2022/lib/providers/user-space-brief.provider.js.map +1 -0
- package/esm2022/lib/ui-types.js +2 -0
- package/esm2022/lib/ui-types.js.map +1 -0
- package/esm2022/sneat-contactus-shared.js +5 -0
- package/esm2022/sneat-contactus-shared.js.map +1 -0
- package/index.d.ts +3 -0
- package/lib/components/address-form/address-form.component.d.ts +51 -0
- package/lib/components/address-form/index.d.ts +1 -0
- package/lib/components/basic-contact-form/basic-contact-form.component.d.ts +20 -0
- package/lib/components/basic-contact-form/index.d.ts +1 -0
- package/lib/components/contact-comm-channels/comm-channel-form.component.d.ts +20 -0
- package/lib/components/contact-comm-channels/comm-channel-item.component.d.ts +24 -0
- package/lib/components/contact-comm-channels/comm-channels-list.component.d.ts +15 -0
- package/lib/components/contact-comm-channels/contact-comm-channels.component.d.ts +7 -0
- package/lib/components/contact-comm-channels/contact-emails.component.d.ts +9 -0
- package/lib/components/contact-comm-channels/contact-phones.component.d.ts +9 -0
- package/lib/components/contact-comm-channels/index.d.ts +1 -0
- package/lib/components/contact-details/contact-details.component.d.ts +32 -0
- package/lib/components/contact-details/index.d.ts +1 -0
- package/lib/components/contact-details/related-contacts.component.d.ts +24 -0
- package/lib/components/contact-dob/contact-dob.component.d.ts +13 -0
- package/lib/components/contact-dob/index.d.ts +1 -0
- package/lib/components/contact-events.d.ts +6 -0
- package/lib/components/contact-forms/contact-form-base.component.d.ts +15 -0
- package/lib/components/contact-forms/emails-form/emails-form.component.d.ts +27 -0
- package/lib/components/contact-forms/emails-form/index.d.ts +1 -0
- package/lib/components/contact-forms/index.d.ts +10 -0
- package/lib/components/contact-forms/location-form/index.d.ts +1 -0
- package/lib/components/contact-forms/location-form/location-form.component.d.ts +39 -0
- package/lib/components/contact-forms/new-contact/index.d.ts +4 -0
- package/lib/components/contact-forms/new-contact/new-company-form.component.d.ts +26 -0
- package/lib/components/contact-forms/new-contact/new-contact-form-base.component.d.ts +15 -0
- package/lib/components/contact-forms/new-contact/new-contact-form.component.d.ts +20 -0
- package/lib/components/contact-forms/new-contact/new-person-form.component.d.ts +51 -0
- package/lib/components/contact-forms/new-contact/new-pet-form.component.d.ts +8 -0
- package/lib/components/contact-forms/person-forms/age-group/age-group-form.component.d.ts +17 -0
- package/lib/components/contact-forms/person-forms/age-group/index.d.ts +1 -0
- package/lib/components/contact-forms/person-forms/gender-form/gender-form.component.d.ts +22 -0
- package/lib/components/contact-forms/person-forms/gender-form/index.d.ts +1 -0
- package/lib/components/contact-forms/person-forms/names-form/index.d.ts +1 -0
- package/lib/components/contact-forms/person-forms/names-form/names-form.component.d.ts +63 -0
- package/lib/components/contact-forms/pesson-wizard/index.d.ts +1 -0
- package/lib/components/contact-forms/pesson-wizard/person-wizard.component.d.ts +63 -0
- package/lib/components/contact-forms/pet-kind-and-breed-form/index.d.ts +1 -0
- package/lib/components/contact-forms/pet-kind-and-breed-form/pet-kind-and-breed-form.component.d.ts +14 -0
- package/lib/components/contact-forms/phones-form/index.d.ts +1 -0
- package/lib/components/contact-forms/phones-form/phones-form.component.d.ts +21 -0
- package/lib/components/contact-forms/relationship-form/contact-relationship-form.component.d.ts +24 -0
- package/lib/components/contact-forms/relationship-form/index.d.ts +1 -0
- package/lib/components/contact-forms/relationship-form/relationship-form.component.d.ts +34 -0
- package/lib/components/contact-forms/role-form/contact-role-form.component.d.ts +33 -0
- package/lib/components/contact-forms/role-form/index.d.ts +1 -0
- package/lib/components/contact-forms/roles-form/index.d.ts +1 -0
- package/lib/components/contact-forms/roles-form/roles-form.component.d.ts +21 -0
- package/lib/components/contact-forms/space-related-form.component.d.ts +11 -0
- package/lib/components/contact-input/contact-input.component.d.ts +36 -0
- package/lib/components/contact-input/index.d.ts +1 -0
- package/lib/components/contact-locations/contact-locations.component.d.ts +14 -0
- package/lib/components/contact-locations/index.d.ts +1 -0
- package/lib/components/contact-modules-menu/contact-modules-menu.component.d.ts +12 -0
- package/lib/components/contact-modules-menu/index.d.ts +1 -0
- package/lib/components/contact-role-badges/contact-role-badges.component.d.ts +12 -0
- package/lib/components/contact-roles-input/contact-roles-input.component.d.ts +18 -0
- package/lib/components/contact-roles-input/index.d.ts +1 -0
- package/lib/components/contacts-by-type/contacts-by-type.component.d.ts +38 -0
- package/lib/components/contacts-by-type/index.d.ts +1 -0
- package/lib/components/contacts-checklist/contacts-checklist-item.component.d.ts +21 -0
- package/lib/components/contacts-checklist/contacts-checklist.component.d.ts +40 -0
- package/lib/components/contacts-checklist/index.d.ts +1 -0
- package/lib/components/contacts-component/contacts.component.d.ts +45 -0
- package/lib/components/contacts-component.commands.d.ts +5 -0
- package/lib/components/contacts-list/contacts-list.component.d.ts +11 -0
- package/lib/components/contacts-list/index.d.ts +2 -0
- package/lib/components/contacts-list-item/contacts-list-item.component.d.ts +29 -0
- package/lib/components/contacts-list-item/related-as.component.d.ts +16 -0
- package/lib/components/contacts-selector/contacts-selector-input.component.d.ts +24 -0
- package/lib/components/contacts-selector/contacts-selector.component.d.ts +80 -0
- package/lib/components/contacts-selector/contacts-selector.interfaces.d.ts +22 -0
- package/lib/components/contacts-selector/contacts-selector.module.d.ts +6 -0
- package/lib/components/contacts-selector/contacts-selector.service.d.ts +10 -0
- package/lib/components/contacts-selector/lib-exports.d.ts +5 -0
- package/lib/components/contactus-module.base.component.d.ts +4 -0
- package/lib/components/inlist-options/inlist-age-group.component.d.ts +12 -0
- package/lib/components/inlist-options/inlist-options.component.d.ts +18 -0
- package/lib/components/invite-links/invite-links.component.d.ts +28 -0
- package/lib/components/lib-exports.d.ts +27 -0
- package/lib/components/members-as-badges/contacts-as-badges.component.d.ts +18 -0
- package/lib/components/members-as-badges/index.d.ts +1 -0
- package/lib/components/members-by-role/family-members.component.d.ts +21 -0
- package/lib/components/members-by-role/index.d.ts +3 -0
- package/lib/components/members-by-role/member-group.d.ts +9 -0
- package/lib/components/members-by-role/members-by-role.component.d.ts +12 -0
- package/lib/components/members-card-header/members-card-header.component.d.ts +13 -0
- package/lib/components/members-list/index.d.ts +1 -0
- package/lib/components/members-list/members-list.component.d.ts +32 -0
- package/lib/components/members-short-list-card/members-short-list-card.component.d.ts +12 -0
- package/lib/components/shared-with/index.d.ts +1 -0
- package/lib/components/shared-with/shared-with.component.d.ts +6 -0
- package/lib/components/with-new-contact-input.d.ts +10 -0
- package/lib/constants.d.ts +13 -0
- package/lib/index.d.ts +2 -0
- package/lib/modals/contact-names-modal/contact-names-modal.component.d.ts +15 -0
- package/lib/modals/invite-modal/index.d.ts +1 -0
- package/lib/modals/invite-modal/invite-modal.component.d.ts +49 -0
- package/lib/pipes/contact-title.pipe.d.ts +10 -0
- package/lib/pipes/index.d.ts +3 -0
- package/lib/pipes/person-title.pipe.d.ts +9 -0
- package/lib/pipes/selected-contacts.pipe.d.ts +8 -0
- package/lib/providers/user-space-brief.provider.d.ts +12 -0
- package/lib/ui-types.d.ts +9 -0
- package/package.json +27 -0
- package/sneat-contactus-shared.d.ts +5 -0
- package/tsconfig.lib.prod.tsbuildinfo +1 -0
|
@@ -0,0 +1,369 @@
|
|
|
1
|
+
import { Component, computed, EventEmitter, input, Input, Output, signal, ViewChild, inject, } from '@angular/core';
|
|
2
|
+
import { FormsModule } from '@angular/forms';
|
|
3
|
+
import { IonButton, IonCard, IonIcon, IonLabel, IonSegment, IonSegmentButton, } from '@ionic/angular/standalone';
|
|
4
|
+
import { SneatUserService } from '@sneat/auth-core';
|
|
5
|
+
import { isNameEmpty } from '@sneat/auth-models';
|
|
6
|
+
import { excludeUndefined, formNexInAnimation, } from '@sneat/core';
|
|
7
|
+
import { getRelatedItemIDs, } from '@sneat/dto';
|
|
8
|
+
import { ClassName } from '@sneat/ui';
|
|
9
|
+
import { UserSpaceBriefProvider } from '../../../providers/user-space-brief.provider';
|
|
10
|
+
import { NewContactFormBaseComponent } from '../new-contact/new-contact-form-base.component';
|
|
11
|
+
import { AgeGroupFormComponent } from '../person-forms/age-group';
|
|
12
|
+
import { EmailsFormComponent } from '../emails-form';
|
|
13
|
+
import { GenderFormComponent } from '../person-forms/gender-form';
|
|
14
|
+
import { NamesFormComponent, } from '../person-forms/names-form';
|
|
15
|
+
import { PhonesFormComponent } from '../phones-form';
|
|
16
|
+
import { ContactRelationshipFormComponent } from '../relationship-form/contact-relationship-form.component';
|
|
17
|
+
import { RolesFormComponent } from '../roles-form';
|
|
18
|
+
import * as i0 from "@angular/core";
|
|
19
|
+
import * as i1 from "@angular/forms";
|
|
20
|
+
export class PersonWizardComponent extends NewContactFormBaseComponent {
|
|
21
|
+
constructor() {
|
|
22
|
+
super(...arguments);
|
|
23
|
+
this.userService = inject(SneatUserService);
|
|
24
|
+
this.requires = {};
|
|
25
|
+
this.disabled = false;
|
|
26
|
+
this.hideRelationship = false;
|
|
27
|
+
this.hidePetOption = true;
|
|
28
|
+
this.displayAgeGroupValue = false;
|
|
29
|
+
this.nameFields = {
|
|
30
|
+
firstName: { hide: false },
|
|
31
|
+
lastName: { hide: false },
|
|
32
|
+
middleName: { hide: false },
|
|
33
|
+
nickName: { hide: true, required: false },
|
|
34
|
+
fullName: { hide: false, required: false },
|
|
35
|
+
};
|
|
36
|
+
this.$fields = input.required(...(ngDevMode ? [{ debugName: "$fields" }] : []));
|
|
37
|
+
this.isReadyToSubmit = false;
|
|
38
|
+
this.isReadyToSubmitChange = new EventEmitter();
|
|
39
|
+
this.show = {};
|
|
40
|
+
this.$wizardStep = signal('contactType', ...(ngDevMode ? [{ debugName: "$wizardStep" }] : []));
|
|
41
|
+
this.tab = 'emails';
|
|
42
|
+
this.$relatedToUser = computed(() => {
|
|
43
|
+
const userContactID = this.userSpaceBrief.$userContactID();
|
|
44
|
+
return userContactID
|
|
45
|
+
? {
|
|
46
|
+
spaceID: this.$spaceID(),
|
|
47
|
+
module: 'contactus',
|
|
48
|
+
collection: 'contacts',
|
|
49
|
+
itemID: userContactID,
|
|
50
|
+
}
|
|
51
|
+
: undefined;
|
|
52
|
+
}, ...(ngDevMode ? [{ debugName: "$relatedToUser" }] : []));
|
|
53
|
+
this.$relatedTo = computed(() => {
|
|
54
|
+
const key = this.$relatedToUser();
|
|
55
|
+
if (!key) {
|
|
56
|
+
return undefined;
|
|
57
|
+
}
|
|
58
|
+
return {
|
|
59
|
+
key,
|
|
60
|
+
title: '', // getContactTitle({ id: '', ...this.$contact() }),
|
|
61
|
+
related: this.$contact().dbo.related || {},
|
|
62
|
+
};
|
|
63
|
+
}, ...(ngDevMode ? [{ debugName: "$relatedTo" }] : []));
|
|
64
|
+
// private readonly $userSpaces = signal<
|
|
65
|
+
// Readonly<Record<string, IUserSpaceBrief>> | undefined
|
|
66
|
+
// >(undefined);
|
|
67
|
+
this.userSpaceBrief = new UserSpaceBriefProvider(this.destroyed$, this.$spaceID, this.userService);
|
|
68
|
+
this.formOrder = [
|
|
69
|
+
{ id: 'contactType' },
|
|
70
|
+
{ id: 'ageGroup' },
|
|
71
|
+
{ id: 'gender' },
|
|
72
|
+
// relatedAs to current user or a specific contact
|
|
73
|
+
{
|
|
74
|
+
id: 'relatedAs',
|
|
75
|
+
filter: (a) => a.contactType === 'person',
|
|
76
|
+
},
|
|
77
|
+
{ id: 'name' },
|
|
78
|
+
{
|
|
79
|
+
id: 'roles',
|
|
80
|
+
filter: (a) => a.contactType !== 'animal' && a.spaceType !== 'family',
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
id: 'communicationChannels',
|
|
84
|
+
filter: (a) => a.contactType !== 'animal',
|
|
85
|
+
},
|
|
86
|
+
{ id: 'submitButton' },
|
|
87
|
+
];
|
|
88
|
+
}
|
|
89
|
+
ngOnInit() {
|
|
90
|
+
this.setContactData(this.$contact().dbo, {
|
|
91
|
+
name: 'contactType',
|
|
92
|
+
hasValue: true,
|
|
93
|
+
});
|
|
94
|
+
// runInInjectionContext(this.injector, () => {
|
|
95
|
+
// effect(() => {
|
|
96
|
+
// // This effect currently does not makes sense
|
|
97
|
+
// // as we have different component for different contact types
|
|
98
|
+
// const contact = this.$contact();
|
|
99
|
+
// console.log('$contact() changed', contact);
|
|
100
|
+
// if (this.$wizardStep() === 'contactType') {
|
|
101
|
+
// if (contact.dbo.type) {
|
|
102
|
+
// this.onContactTypeChanged();
|
|
103
|
+
// this.setContactData(contact.dbo, {
|
|
104
|
+
// name: 'contactType',
|
|
105
|
+
// hasValue: true,
|
|
106
|
+
// });
|
|
107
|
+
// }
|
|
108
|
+
// }
|
|
109
|
+
// });
|
|
110
|
+
// });
|
|
111
|
+
}
|
|
112
|
+
ngOnChanges(changes) {
|
|
113
|
+
if (changes['fields']) {
|
|
114
|
+
this.openNext('contactType');
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
setContactData(dbo, changedProp) {
|
|
118
|
+
this.contactChange.emit({ ...this.$contact(), dbo });
|
|
119
|
+
if (changedProp.hasValue) {
|
|
120
|
+
this.openNext(changedProp.name);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
onNameChanged(name) {
|
|
124
|
+
if (!this.show.nameNext && !isNameEmpty(name)) {
|
|
125
|
+
this.show = { ...this.show, nameNext: true };
|
|
126
|
+
}
|
|
127
|
+
this.setContactData({ ...this.$contact().dbo, names: name }, { name: 'name', hasValue: false });
|
|
128
|
+
}
|
|
129
|
+
onContactChanged() {
|
|
130
|
+
// this.setRelatedPerson(
|
|
131
|
+
// { ...this.newPerson, petKind },
|
|
132
|
+
// { name: 'petKind', hasValue: !!petKind },
|
|
133
|
+
// );
|
|
134
|
+
}
|
|
135
|
+
onGenderChanged(gender) {
|
|
136
|
+
this.setContactData({ ...this.$contact().dbo, gender }, { name: 'gender', hasValue: !!gender });
|
|
137
|
+
}
|
|
138
|
+
onContactTypeChanged() {
|
|
139
|
+
switch (this.$contact().dbo.type) {
|
|
140
|
+
case 'animal':
|
|
141
|
+
this.nameFields = {
|
|
142
|
+
...this.nameFields,
|
|
143
|
+
nickName: { hide: false, required: true },
|
|
144
|
+
firstName: { hide: true },
|
|
145
|
+
lastName: { hide: true },
|
|
146
|
+
middleName: { hide: true },
|
|
147
|
+
};
|
|
148
|
+
break;
|
|
149
|
+
case 'person':
|
|
150
|
+
this.nameFields = {
|
|
151
|
+
...this.nameFields,
|
|
152
|
+
nickName: { hide: true, required: false },
|
|
153
|
+
firstName: { hide: false },
|
|
154
|
+
lastName: { hide: false },
|
|
155
|
+
middleName: { hide: false },
|
|
156
|
+
};
|
|
157
|
+
break;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
onAgeGroupChanged(ageGroup) {
|
|
161
|
+
if (ageGroup) {
|
|
162
|
+
this.show = { ...this.show, ageGroup: this.displayAgeGroupValue };
|
|
163
|
+
}
|
|
164
|
+
if (this.$contact().dbo.type !== 'person') {
|
|
165
|
+
this.setContactData({ ...this.$contact().dbo, type: 'person' }, {
|
|
166
|
+
name: 'contactType',
|
|
167
|
+
hasValue: true,
|
|
168
|
+
});
|
|
169
|
+
this.onContactTypeChanged();
|
|
170
|
+
}
|
|
171
|
+
const relatedPerson = excludeUndefined({
|
|
172
|
+
...this.$contact().dbo,
|
|
173
|
+
ageGroup: ageGroup === 'pet' ? undefined : ageGroup,
|
|
174
|
+
type: ageGroup === 'pet' ? 'animal' : 'person',
|
|
175
|
+
});
|
|
176
|
+
this.setContactData(relatedPerson, {
|
|
177
|
+
name: 'ageGroup',
|
|
178
|
+
hasValue: !!ageGroup || this.$contact().dbo.type === 'animal',
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
onEmailsChanged(emails) {
|
|
182
|
+
this.setContactData({ ...this.$contact().dbo, emails: {} }, {
|
|
183
|
+
name: 'communicationChannels',
|
|
184
|
+
hasValue: !!Object.keys(emails || {})?.length ||
|
|
185
|
+
!!Object.keys(this.$contact().dbo.phones || {})?.length,
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
onPhoneChanged(phones) {
|
|
189
|
+
this.setContactData({ ...this.$contact().dbo, phones: {} }, {
|
|
190
|
+
name: 'communicationChannels',
|
|
191
|
+
hasValue: !!Object.keys(phones || {})?.length ||
|
|
192
|
+
!!Object.keys(this.$contact().dbo.emails || {})?.length,
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
onRelatedAsChanged(rolesToTarget) {
|
|
196
|
+
// 'PersonWizardState.onRelatedAsChanged() rolesToTarget=',
|
|
197
|
+
// rolesToTarget,
|
|
198
|
+
const itemID = this.userSpaceBrief.$userContactID();
|
|
199
|
+
if (!itemID) {
|
|
200
|
+
throw new Error('!$userContactID()');
|
|
201
|
+
}
|
|
202
|
+
const userContactRelatedItem = {
|
|
203
|
+
rolesToItem: rolesToTarget,
|
|
204
|
+
};
|
|
205
|
+
const related = {
|
|
206
|
+
contactus: {
|
|
207
|
+
contacts: { [itemID]: userContactRelatedItem },
|
|
208
|
+
},
|
|
209
|
+
};
|
|
210
|
+
let contactDbo = {
|
|
211
|
+
...this.$contact().dbo,
|
|
212
|
+
related,
|
|
213
|
+
};
|
|
214
|
+
if (!this.$contact().dbo.ageGroup) {
|
|
215
|
+
const relationship = Object.keys(rolesToTarget || []).length
|
|
216
|
+
? Object.keys(rolesToTarget)[0]
|
|
217
|
+
: undefined;
|
|
218
|
+
contactDbo = {
|
|
219
|
+
...this.$contact().dbo,
|
|
220
|
+
ageGroup: relationship === 'parent' ||
|
|
221
|
+
relationship === 'spouse' ||
|
|
222
|
+
relationship === 'partner' ||
|
|
223
|
+
relationship === 'grandparent'
|
|
224
|
+
? 'adult'
|
|
225
|
+
: 'child',
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
this.setContactData(contactDbo, {
|
|
229
|
+
name: 'relatedAs',
|
|
230
|
+
hasValue: !!rolesToTarget,
|
|
231
|
+
});
|
|
232
|
+
}
|
|
233
|
+
nextFromName(event) {
|
|
234
|
+
event.stopPropagation();
|
|
235
|
+
if (!this.namesFormComponent) {
|
|
236
|
+
throw Error('!namesFormComponent');
|
|
237
|
+
}
|
|
238
|
+
if (!this.namesFormComponent.namesForm) {
|
|
239
|
+
throw Error('!namesFormComponent.namesForm');
|
|
240
|
+
}
|
|
241
|
+
this.namesFormComponent.namesForm.markAllAsTouched();
|
|
242
|
+
if (!this.namesFormComponent.namesForm.valid) {
|
|
243
|
+
const errors = this.namesFormComponent?.namesForm.errors;
|
|
244
|
+
if (errors) {
|
|
245
|
+
alert('Problem with names:\n' +
|
|
246
|
+
Object.entries(errors)
|
|
247
|
+
.map((err) => `\t${err[0]}: ${err[1]}`)
|
|
248
|
+
.join('\n'));
|
|
249
|
+
}
|
|
250
|
+
return;
|
|
251
|
+
}
|
|
252
|
+
this.openNext('name');
|
|
253
|
+
this.show = { ...this.show, nameNext: false };
|
|
254
|
+
}
|
|
255
|
+
skipStep(step) {
|
|
256
|
+
if (!step.filter) {
|
|
257
|
+
return false;
|
|
258
|
+
}
|
|
259
|
+
const { dbo } = this.$contact();
|
|
260
|
+
const spaceType = this.$spaceType(), contactType = this.$contactType();
|
|
261
|
+
if (!spaceType || !contactType) {
|
|
262
|
+
return false;
|
|
263
|
+
}
|
|
264
|
+
if (!step?.filter({
|
|
265
|
+
spaceType: spaceType,
|
|
266
|
+
contactType: contactType,
|
|
267
|
+
dbo: dbo,
|
|
268
|
+
})) {
|
|
269
|
+
return false;
|
|
270
|
+
}
|
|
271
|
+
return false;
|
|
272
|
+
}
|
|
273
|
+
openNext(currentStepID) {
|
|
274
|
+
for (;;) {
|
|
275
|
+
const i = this.formOrder.findIndex((step) => step.id === currentStepID);
|
|
276
|
+
if (i < 0) {
|
|
277
|
+
// `openNext have not found ${currentStepID} in this.formOrder=${this.formOrder.join(
|
|
278
|
+
// ',',
|
|
279
|
+
// )}`,
|
|
280
|
+
return;
|
|
281
|
+
}
|
|
282
|
+
if (i === this.formOrder.length - 1) {
|
|
283
|
+
// last element
|
|
284
|
+
return;
|
|
285
|
+
}
|
|
286
|
+
const nextStep = this.formOrder[i + 1];
|
|
287
|
+
if (this.skipStep(nextStep)) {
|
|
288
|
+
currentStepID = nextStep.id;
|
|
289
|
+
continue;
|
|
290
|
+
}
|
|
291
|
+
if (!this.show[nextStep.id]) {
|
|
292
|
+
const nextField = this.$fields()[nextStep.id];
|
|
293
|
+
const showNextField = nextField ? !nextField.hide : true;
|
|
294
|
+
this.show = { ...this.show, [nextStep.id]: showNextField };
|
|
295
|
+
if (!showNextField) {
|
|
296
|
+
this.openNext(nextStep.id);
|
|
297
|
+
}
|
|
298
|
+
this.$wizardStep.set(nextStep.id);
|
|
299
|
+
if (this.stepHasValue(nextStep.id)) {
|
|
300
|
+
currentStepID = nextStep.id;
|
|
301
|
+
continue;
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
break; // <---------- Exit point
|
|
305
|
+
}
|
|
306
|
+
if (this.show.submitButton) {
|
|
307
|
+
this.isReadyToSubmit = true;
|
|
308
|
+
this.isReadyToSubmitChange.emit();
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
stepHasValue(name) {
|
|
312
|
+
const p = this.$contact().dbo;
|
|
313
|
+
switch (name) {
|
|
314
|
+
case 'name':
|
|
315
|
+
return !!p.names && Object.values(p.names).some((v) => !!v);
|
|
316
|
+
case 'ageGroup':
|
|
317
|
+
return !!p.ageGroup;
|
|
318
|
+
case 'gender':
|
|
319
|
+
return !!p.gender && p.gender !== 'unknown';
|
|
320
|
+
case 'relatedAs':
|
|
321
|
+
return (getRelatedItemIDs(p.related, 'contactus', 'contacts', this.$contact().space.id).length > 0);
|
|
322
|
+
case 'roles':
|
|
323
|
+
return !!p.roles?.length;
|
|
324
|
+
}
|
|
325
|
+
return undefined;
|
|
326
|
+
}
|
|
327
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: PersonWizardComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
328
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: PersonWizardComponent, isStandalone: true, selector: "sneat-person-wizard", inputs: { requires: { classPropertyName: "requires", publicName: "requires", isSignal: false, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: false, isRequired: false, transformFunction: null }, hideRelationship: { classPropertyName: "hideRelationship", publicName: "hideRelationship", isSignal: false, isRequired: false, transformFunction: null }, hidePetOption: { classPropertyName: "hidePetOption", publicName: "hidePetOption", isSignal: false, isRequired: false, transformFunction: null }, displayAgeGroupValue: { classPropertyName: "displayAgeGroupValue", publicName: "displayAgeGroupValue", isSignal: false, isRequired: false, transformFunction: null }, nameFields: { classPropertyName: "nameFields", publicName: "nameFields", isSignal: false, isRequired: false, transformFunction: null }, $fields: { classPropertyName: "$fields", publicName: "$fields", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { isReadyToSubmitChange: "isReadyToSubmitChange" }, providers: [{ provide: ClassName, useValue: 'PersonWizardComponent' }], viewQueries: [{ propertyName: "namesFormComponent", first: true, predicate: NamesFormComponent, descendants: true }, { propertyName: "genderFormComponent", first: true, predicate: GenderFormComponent, descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<!--<h2>Person wizard</h2>-->\n<!--<p>wizardStep: {{ wizardStep }}</p>-->\n<!--<p>fields: {{ fields | json }}</p>-->\n<!--<p>nameFields: {{ nameFields | json }}</p>-->\n<!--<p>show: {{ show | json }};</p>-->\n<!--<p>contact: {{ $contact() | json }}</p>-->\n<!--<p>wizardStep: {{wizardStep}}</p>-->\n\n<p>$wizardStep: {{ $wizardStep() }}</p>\n\n@if (show.ageGroup) {\n <sneat-age-group-form\n [spaceType]=\"$contact().space.type\"\n [hidePetOption]=\"hidePetOption\"\n [disabled]=\"disabled\"\n [$ageGroup]=\"$contact().dbo.ageGroup\"\n (ageGroupChange)=\"onAgeGroupChanged($event)\"\n />\n}\n\n@if (show.gender) {\n <ion-card>\n <sneat-gender-form\n [disabled]=\"disabled\"\n [$spaceID]=\"$spaceID()\"\n [$contactID]=\"undefined\"\n [$genderID]=\"$contact().dbo.gender\"\n (genderChange)=\"onGenderChanged($event)\"\n />\n </ion-card>\n}\n\n@if (!requires.relatedAs?.hide && show.relatedAs && $contact().space.id) {\n <sneat-contact-relationship-form\n [$contactID]=\"''\"\n [$userSpaceContactID]=\"null\"\n [isActive]=\"$wizardStep() === 'relatedAs'\"\n [disabled]=\"disabled\"\n [$space]=\"$contact().space\"\n [$relatedTo]=\"$relatedTo()\"\n [$ageGroup]=\"$contact().dbo.ageGroup\"\n (relatedAsChange)=\"onRelatedAsChanged($event)\"\n />\n <!--[relatedAs]=\"newPerson.related?.relatedAs?.length === 1 ? newPerson.relatedTo?.relatedAs?.[0] : undefined\"-->\n}\n\n@if (show.name) {\n <ion-card>\n <sneat-names-form\n [name]=\"$contact().dbo.names\"\n [isActive]=\"$wizardStep() === 'name'\"\n [showNextButton]=\"false\"\n [fields]=\"nameFields\"\n (namesChanged)=\"onNameChanged($event)\"\n [disabled]=\"disabled\"\n (next)=\"nextFromName($event)\"\n />\n </ion-card>\n}\n\n@if (!requires.roles?.hide && show.roles) {\n <sneat-roles-form\n [$space]=\"$contact().space\"\n [isActive]=\"$wizardStep() === 'roles'\"\n [disabled]=\"disabled\"\n />\n}\n\n@if (show.communicationChannels) {\n <ion-segment [(ngModel)]=\"tab\">\n <ion-segment-button value=\"emails\">Emails</ion-segment-button>\n <ion-segment-button value=\"phones\">Phones</ion-segment-button>\n </ion-segment>\n @switch (tab) {\n @case (\"emails\") {\n <sneat-emails-form\n [hideHeader]=\"true\"\n [emails]=\"$emails()\"\n (emailsChange)=\"onEmailsChanged($event)\"\n />\n }\n @case (\"phones\") {\n <sneat-phones-form\n [hideHeader]=\"true\"\n [phones]=\"$phones()\"\n (phonesChange)=\"onPhoneChanged($event)\"\n />\n }\n }\n}\n\n@if ($wizardStep() === \"communicationChannels\") {\n <ion-button\n class=\"ion-margin\"\n size=\"medium\"\n [color]=\"show.nameNext ? 'primary' : 'medium'\"\n (click)=\"openNext($wizardStep())\"\n >\n <ion-label>Next</ion-label>\n <ion-icon name=\"arrow-forward-circle-outline\" slot=\"end\"></ion-icon>\n </ion-button>\n}\n", dependencies: [{ kind: "component", type: AgeGroupFormComponent, selector: "sneat-age-group-form", inputs: ["spaceType", "$ageGroup", "disabled", "hidePetOption", "hideUndisclosedOption"], outputs: ["ageGroupChange"] }, { kind: "component", type: GenderFormComponent, selector: "sneat-gender-form", inputs: ["lastItemLines", "hideSkipButton", "disabled", "$spaceID", "$contactID", "$genderID"], outputs: ["genderChange"] }, { kind: "component", type: NamesFormComponent, selector: "sneat-names-form", inputs: ["showHeader", "name", "isActive", "disabled", "fields", "showNextButton"], outputs: ["keyupEnter", "namesChanged", "next"] }, { kind: "component", type: RolesFormComponent, selector: "sneat-roles-form", inputs: ["isActive", "disabled"], outputs: ["rolesChange"] }, { 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: PhonesFormComponent, selector: "sneat-phones-form", inputs: ["disabled", "hideHeader", "isActiveInWizard", "phones"], outputs: ["phonesChange"] }, { kind: "component", type: EmailsFormComponent, selector: "sneat-emails-form", inputs: ["hideHeader", "isActiveInWizard", "disabled", "emails"], outputs: ["emailsChange"] }, { 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: IonCard, selector: "ion-card", inputs: ["button", "color", "disabled", "download", "href", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: ContactRelationshipFormComponent, selector: "sneat-contact-relationship-form", inputs: ["$contactID", "$ageGroup", "$relatedTo", "$userSpaceContactID", "isActive", "disabled"], outputs: ["relatedAsChange"] }, { 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"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }], animations: [formNexInAnimation] }); }
|
|
329
|
+
}
|
|
330
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: PersonWizardComponent, decorators: [{
|
|
331
|
+
type: Component,
|
|
332
|
+
args: [{ animations: [formNexInAnimation], imports: [
|
|
333
|
+
AgeGroupFormComponent,
|
|
334
|
+
GenderFormComponent,
|
|
335
|
+
NamesFormComponent,
|
|
336
|
+
RolesFormComponent,
|
|
337
|
+
FormsModule,
|
|
338
|
+
PhonesFormComponent,
|
|
339
|
+
EmailsFormComponent,
|
|
340
|
+
IonSegment,
|
|
341
|
+
IonSegmentButton,
|
|
342
|
+
IonCard,
|
|
343
|
+
ContactRelationshipFormComponent,
|
|
344
|
+
IonButton,
|
|
345
|
+
IonLabel,
|
|
346
|
+
IonIcon,
|
|
347
|
+
], selector: 'sneat-person-wizard', providers: [{ provide: ClassName, useValue: 'PersonWizardComponent' }], template: "<!--<h2>Person wizard</h2>-->\n<!--<p>wizardStep: {{ wizardStep }}</p>-->\n<!--<p>fields: {{ fields | json }}</p>-->\n<!--<p>nameFields: {{ nameFields | json }}</p>-->\n<!--<p>show: {{ show | json }};</p>-->\n<!--<p>contact: {{ $contact() | json }}</p>-->\n<!--<p>wizardStep: {{wizardStep}}</p>-->\n\n<p>$wizardStep: {{ $wizardStep() }}</p>\n\n@if (show.ageGroup) {\n <sneat-age-group-form\n [spaceType]=\"$contact().space.type\"\n [hidePetOption]=\"hidePetOption\"\n [disabled]=\"disabled\"\n [$ageGroup]=\"$contact().dbo.ageGroup\"\n (ageGroupChange)=\"onAgeGroupChanged($event)\"\n />\n}\n\n@if (show.gender) {\n <ion-card>\n <sneat-gender-form\n [disabled]=\"disabled\"\n [$spaceID]=\"$spaceID()\"\n [$contactID]=\"undefined\"\n [$genderID]=\"$contact().dbo.gender\"\n (genderChange)=\"onGenderChanged($event)\"\n />\n </ion-card>\n}\n\n@if (!requires.relatedAs?.hide && show.relatedAs && $contact().space.id) {\n <sneat-contact-relationship-form\n [$contactID]=\"''\"\n [$userSpaceContactID]=\"null\"\n [isActive]=\"$wizardStep() === 'relatedAs'\"\n [disabled]=\"disabled\"\n [$space]=\"$contact().space\"\n [$relatedTo]=\"$relatedTo()\"\n [$ageGroup]=\"$contact().dbo.ageGroup\"\n (relatedAsChange)=\"onRelatedAsChanged($event)\"\n />\n <!--[relatedAs]=\"newPerson.related?.relatedAs?.length === 1 ? newPerson.relatedTo?.relatedAs?.[0] : undefined\"-->\n}\n\n@if (show.name) {\n <ion-card>\n <sneat-names-form\n [name]=\"$contact().dbo.names\"\n [isActive]=\"$wizardStep() === 'name'\"\n [showNextButton]=\"false\"\n [fields]=\"nameFields\"\n (namesChanged)=\"onNameChanged($event)\"\n [disabled]=\"disabled\"\n (next)=\"nextFromName($event)\"\n />\n </ion-card>\n}\n\n@if (!requires.roles?.hide && show.roles) {\n <sneat-roles-form\n [$space]=\"$contact().space\"\n [isActive]=\"$wizardStep() === 'roles'\"\n [disabled]=\"disabled\"\n />\n}\n\n@if (show.communicationChannels) {\n <ion-segment [(ngModel)]=\"tab\">\n <ion-segment-button value=\"emails\">Emails</ion-segment-button>\n <ion-segment-button value=\"phones\">Phones</ion-segment-button>\n </ion-segment>\n @switch (tab) {\n @case (\"emails\") {\n <sneat-emails-form\n [hideHeader]=\"true\"\n [emails]=\"$emails()\"\n (emailsChange)=\"onEmailsChanged($event)\"\n />\n }\n @case (\"phones\") {\n <sneat-phones-form\n [hideHeader]=\"true\"\n [phones]=\"$phones()\"\n (phonesChange)=\"onPhoneChanged($event)\"\n />\n }\n }\n}\n\n@if ($wizardStep() === \"communicationChannels\") {\n <ion-button\n class=\"ion-margin\"\n size=\"medium\"\n [color]=\"show.nameNext ? 'primary' : 'medium'\"\n (click)=\"openNext($wizardStep())\"\n >\n <ion-label>Next</ion-label>\n <ion-icon name=\"arrow-forward-circle-outline\" slot=\"end\"></ion-icon>\n </ion-button>\n}\n" }]
|
|
348
|
+
}], propDecorators: { requires: [{
|
|
349
|
+
type: Input
|
|
350
|
+
}], disabled: [{
|
|
351
|
+
type: Input
|
|
352
|
+
}], hideRelationship: [{
|
|
353
|
+
type: Input
|
|
354
|
+
}], hidePetOption: [{
|
|
355
|
+
type: Input
|
|
356
|
+
}], displayAgeGroupValue: [{
|
|
357
|
+
type: Input
|
|
358
|
+
}], nameFields: [{
|
|
359
|
+
type: Input
|
|
360
|
+
}], $fields: [{ type: i0.Input, args: [{ isSignal: true, alias: "$fields", required: true }] }], isReadyToSubmitChange: [{
|
|
361
|
+
type: Output
|
|
362
|
+
}], namesFormComponent: [{
|
|
363
|
+
type: ViewChild,
|
|
364
|
+
args: [NamesFormComponent]
|
|
365
|
+
}], genderFormComponent: [{
|
|
366
|
+
type: ViewChild,
|
|
367
|
+
args: [GenderFormComponent]
|
|
368
|
+
}] } });
|
|
369
|
+
//# sourceMappingURL=person-wizard.component.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"person-wizard.component.js","sourceRoot":"","sources":["../../../../../../../../../libs/contactus/shared/src/lib/components/contact-forms/pesson-wizard/person-wizard.component.ts","../../../../../../../../../libs/contactus/shared/src/lib/components/contact-forms/pesson-wizard/person-wizard.component.html"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n computed,\n EventEmitter,\n input,\n Input,\n OnChanges,\n OnInit,\n Output,\n signal,\n SimpleChanges,\n ViewChild,\n inject,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport {\n IonButton,\n IonCard,\n IonIcon,\n IonLabel,\n IonSegment,\n IonSegmentButton,\n} from '@ionic/angular/standalone';\nimport { SneatUserService } from '@sneat/auth-core';\nimport { IPersonNames, isNameEmpty } from '@sneat/auth-models';\nimport {\n AgeGroupID,\n excludeUndefined,\n formNexInAnimation,\n Gender,\n SpaceType,\n} from '@sneat/core';\nimport { IFormField } from '@sneat/core';\nimport {\n ContactType,\n IContactBase,\n IEmail,\n IPersonRequirements,\n IPhone,\n IRelatedPerson,\n} from '@sneat/contactus-core';\nimport {\n getRelatedItemIDs,\n IRelatedItem,\n IRelatedModules,\n IRelatedTo,\n IRelationshipRoles,\n ISpaceModuleItemRef,\n} from '@sneat/dto';\nimport { ClassName } from '@sneat/ui';\nimport { UserSpaceBriefProvider } from '../../../providers/user-space-brief.provider';\nimport { NewContactFormBaseComponent } from '../new-contact/new-contact-form-base.component';\nimport { AgeGroupFormComponent } from '../person-forms/age-group';\nimport { EmailsFormComponent } from '../emails-form';\nimport { GenderFormComponent } from '../person-forms/gender-form';\nimport {\n INamesFormFields,\n NamesFormComponent,\n} from '../person-forms/names-form';\nimport { PhonesFormComponent } from '../phones-form';\nimport { ContactRelationshipFormComponent } from '../relationship-form/contact-relationship-form.component';\nimport { RolesFormComponent } from '../roles-form';\n\nexport interface PersonWizardState {\n // wizard state\n readonly contactType?: boolean;\n readonly ageGroup?: boolean;\n readonly name?: boolean;\n readonly nameNext?: boolean;\n readonly gender?: boolean;\n readonly roles?: boolean;\n readonly relatedAs?: boolean;\n readonly communicationChannels?: boolean;\n readonly submitButton?: boolean;\n}\n\ntype WizardStepID = keyof PersonWizardState;\n\n// interface WizardStepCondition {\n// \treadonly contactTypes: readonly MemberContactType[];\n// \treadonly contactRoles?: readonly string[];\n// \treadonly spaceTypes?: readonly SpaceType[];\n// \treadonly isRelatedToSpaceItem?: boolean;\n// \treadonly isMember?: boolean;\n// }\n\ninterface IWizardFilterArgs {\n readonly contactType: ContactType;\n readonly spaceType: SpaceType;\n readonly dbo?: IContactBase;\n}\n\ntype StepFilterFunc = (args: IWizardFilterArgs) => boolean;\n\n// interface WizardStepFilter {\n// \treadonly hideFor?: WizardStepCondition;\n// \treadonly showFor?: WizardStepCondition;\n// }\n\ninterface WizardStepDef {\n readonly id: WizardStepID;\n readonly filter?: StepFilterFunc;\n}\n\nexport type IPersonFormWizardFields = {\n [id in keyof PersonWizardState]: IFormField;\n};\n\n@Component({\n animations: [formNexInAnimation],\n imports: [\n AgeGroupFormComponent,\n GenderFormComponent,\n NamesFormComponent,\n RolesFormComponent,\n FormsModule,\n PhonesFormComponent,\n EmailsFormComponent,\n IonSegment,\n IonSegmentButton,\n IonCard,\n ContactRelationshipFormComponent,\n IonButton,\n IonLabel,\n IonIcon,\n ],\n selector: 'sneat-person-wizard',\n templateUrl: './person-wizard.component.html',\n providers: [{ provide: ClassName, useValue: 'PersonWizardComponent' }],\n})\nexport class PersonWizardComponent\n extends NewContactFormBaseComponent\n implements OnInit, OnChanges\n{\n private readonly userService = inject(SneatUserService);\n\n @Input() requires: IPersonRequirements = {};\n @Input() disabled = false;\n @Input() hideRelationship = false;\n @Input() hidePetOption = true;\n\n @Input() displayAgeGroupValue = false;\n\n @Input() nameFields: INamesFormFields = {\n firstName: { hide: false },\n lastName: { hide: false },\n middleName: { hide: false },\n nickName: { hide: true, required: false },\n fullName: { hide: false, required: false },\n };\n\n public readonly $fields = input.required<Readonly<IPersonFormWizardFields>>();\n\n public isReadyToSubmit = false;\n @Output() readonly isReadyToSubmitChange = new EventEmitter<boolean>();\n\n public show: PersonWizardState = {};\n\n public readonly $wizardStep = signal<WizardStepID>('contactType');\n\n tab?: 'emails' | 'phones' = 'emails';\n\n @ViewChild(NamesFormComponent) namesFormComponent?: NamesFormComponent;\n @ViewChild(GenderFormComponent) genderFormComponent?: GenderFormComponent;\n\n protected readonly $relatedToUser = computed<ISpaceModuleItemRef | undefined>(\n () => {\n const userContactID = this.userSpaceBrief.$userContactID();\n return userContactID\n ? {\n spaceID: this.$spaceID(),\n module: 'contactus',\n collection: 'contacts',\n itemID: userContactID,\n }\n : undefined;\n },\n );\n protected readonly $relatedTo = computed<IRelatedTo | undefined>(() => {\n const key = this.$relatedToUser();\n if (!key) {\n return undefined;\n }\n return {\n key,\n title: '', // getContactTitle({ id: '', ...this.$contact() }),\n related: this.$contact().dbo.related || {},\n };\n });\n\n // private readonly $userSpaces = signal<\n // \tReadonly<Record<string, IUserSpaceBrief>> | undefined\n // >(undefined);\n\n protected readonly userSpaceBrief = new UserSpaceBriefProvider(\n this.destroyed$,\n this.$spaceID,\n this.userService,\n );\n\n public ngOnInit() {\n this.setContactData(this.$contact().dbo, {\n name: 'contactType',\n hasValue: true,\n });\n // runInInjectionContext(this.injector, () => {\n // \teffect(() => {\n // \t\t// This effect currently does not makes sense\n // \t\t// as we have different component for different contact types\n // \t\tconst contact = this.$contact();\n // \t\tconsole.log('$contact() changed', contact);\n // \t\tif (this.$wizardStep() === 'contactType') {\n // \t\t\tif (contact.dbo.type) {\n // \t\t\t\tthis.onContactTypeChanged();\n // \t\t\t\tthis.setContactData(contact.dbo, {\n // \t\t\t\t\tname: 'contactType',\n // \t\t\t\t\thasValue: true,\n // \t\t\t\t});\n // \t\t\t}\n // \t\t}\n // \t});\n // });\n }\n\n private readonly formOrder: readonly WizardStepDef[] = [\n { id: 'contactType' },\n { id: 'ageGroup' },\n { id: 'gender' },\n // relatedAs to current user or a specific contact\n {\n id: 'relatedAs',\n filter: (a) => a.contactType === 'person',\n },\n { id: 'name' },\n {\n id: 'roles',\n filter: (a) => a.contactType !== 'animal' && a.spaceType !== 'family',\n },\n {\n id: 'communicationChannels',\n filter: (a) => a.contactType !== 'animal',\n },\n { id: 'submitButton' },\n ];\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes['fields']) {\n this.openNext('contactType');\n }\n }\n\n private setContactData(\n dbo: IContactBase,\n changedProp: Readonly<{\n readonly name: WizardStepID;\n readonly hasValue: boolean;\n }>,\n ): void {\n this.contactChange.emit({ ...this.$contact(), dbo });\n if (changedProp.hasValue) {\n this.openNext(changedProp.name);\n }\n }\n\n protected onNameChanged(name: IPersonNames): void {\n if (!this.show.nameNext && !isNameEmpty(name)) {\n this.show = { ...this.show, nameNext: true };\n }\n this.setContactData(\n { ...this.$contact().dbo, names: name },\n { name: 'name', hasValue: false },\n );\n }\n\n protected onContactChanged(): void {\n // this.setRelatedPerson(\n // \t{ ...this.newPerson, petKind },\n // \t{ name: 'petKind', hasValue: !!petKind },\n // );\n }\n\n protected onGenderChanged(gender?: Gender): void {\n this.setContactData(\n { ...this.$contact().dbo, gender },\n { name: 'gender', hasValue: !!gender },\n );\n }\n\n private onContactTypeChanged(): void {\n switch (this.$contact().dbo.type) {\n case 'animal':\n this.nameFields = {\n ...this.nameFields,\n nickName: { hide: false, required: true },\n firstName: { hide: true },\n lastName: { hide: true },\n middleName: { hide: true },\n };\n break;\n case 'person':\n this.nameFields = {\n ...this.nameFields,\n nickName: { hide: true, required: false },\n firstName: { hide: false },\n lastName: { hide: false },\n middleName: { hide: false },\n };\n break;\n }\n }\n\n protected onAgeGroupChanged(ageGroup?: AgeGroupID): void {\n if (ageGroup) {\n this.show = { ...this.show, ageGroup: this.displayAgeGroupValue };\n }\n if (this.$contact().dbo.type !== 'person') {\n this.setContactData(\n { ...this.$contact().dbo, type: 'person' },\n {\n name: 'contactType',\n hasValue: true,\n },\n );\n this.onContactTypeChanged();\n }\n const relatedPerson: IRelatedPerson = excludeUndefined({\n ...this.$contact().dbo,\n ageGroup: ageGroup === 'pet' ? undefined : ageGroup,\n type: ageGroup === 'pet' ? 'animal' : 'person',\n });\n this.setContactData(relatedPerson, {\n name: 'ageGroup',\n hasValue: !!ageGroup || this.$contact().dbo.type === 'animal',\n });\n }\n\n protected onEmailsChanged(emails: readonly IEmail[]): void {\n this.setContactData(\n { ...this.$contact().dbo, emails: {} },\n {\n name: 'communicationChannels',\n hasValue:\n !!Object.keys(emails || {})?.length ||\n !!Object.keys(this.$contact().dbo.phones || {})?.length,\n },\n );\n }\n\n protected onPhoneChanged(phones: readonly IPhone[]): void {\n this.setContactData(\n { ...this.$contact().dbo, phones: {} },\n {\n name: 'communicationChannels',\n hasValue:\n !!Object.keys(phones || {})?.length ||\n !!Object.keys(this.$contact().dbo.emails || {})?.length,\n },\n );\n }\n\n protected onRelatedAsChanged(rolesToTarget: IRelationshipRoles): void {\n // 'PersonWizardState.onRelatedAsChanged() rolesToTarget=',\n // rolesToTarget,\n\n const itemID = this.userSpaceBrief.$userContactID();\n if (!itemID) {\n throw new Error('!$userContactID()');\n }\n\n const userContactRelatedItem: IRelatedItem = {\n rolesToItem: rolesToTarget,\n };\n\n const related: IRelatedModules = {\n contactus: {\n contacts: { [itemID]: userContactRelatedItem },\n },\n };\n\n let contactDbo: IContactBase = {\n ...this.$contact().dbo,\n related,\n };\n\n if (!this.$contact().dbo.ageGroup) {\n const relationship = Object.keys(rolesToTarget || []).length\n ? Object.keys(rolesToTarget)[0]\n : undefined;\n contactDbo = {\n ...this.$contact().dbo,\n ageGroup:\n relationship === 'parent' ||\n relationship === 'spouse' ||\n relationship === 'partner' ||\n relationship === 'grandparent'\n ? 'adult'\n : 'child',\n };\n }\n this.setContactData(contactDbo, {\n name: 'relatedAs',\n hasValue: !!rolesToTarget,\n });\n }\n\n protected nextFromName(event: Event): void {\n event.stopPropagation();\n\n if (!this.namesFormComponent) {\n throw Error('!namesFormComponent');\n }\n if (!this.namesFormComponent.namesForm) {\n throw Error('!namesFormComponent.namesForm');\n }\n\n this.namesFormComponent.namesForm.markAllAsTouched();\n if (!this.namesFormComponent.namesForm.valid) {\n const errors = this.namesFormComponent?.namesForm.errors;\n if (errors) {\n alert(\n 'Problem with names:\\n' +\n Object.entries(errors)\n .map((err) => `\\t${err[0]}: ${err[1]}`)\n .join('\\n'),\n );\n }\n return;\n }\n this.openNext('name');\n this.show = { ...this.show, nameNext: false };\n }\n\n private skipStep(step: WizardStepDef): boolean {\n if (!step.filter) {\n return false;\n }\n\n const { dbo } = this.$contact();\n const spaceType = this.$spaceType(),\n contactType = this.$contactType();\n if (!spaceType || !contactType) {\n return false;\n }\n if (\n !step?.filter({\n spaceType: spaceType,\n contactType: contactType,\n dbo: dbo,\n })\n ) {\n return false;\n }\n\n return false;\n }\n\n protected openNext(currentStepID: keyof PersonWizardState): void {\n for (;;) {\n const i = this.formOrder.findIndex((step) => step.id === currentStepID);\n if (i < 0) {\n // `openNext have not found ${currentStepID} in this.formOrder=${this.formOrder.join(\n // ',',\n // )}`,\n return;\n }\n if (i === this.formOrder.length - 1) {\n // last element\n return;\n }\n const nextStep = this.formOrder[i + 1];\n if (this.skipStep(nextStep)) {\n currentStepID = nextStep.id;\n continue;\n }\n\n if (!this.show[nextStep.id]) {\n const nextField = this.$fields()[nextStep.id];\n const showNextField = nextField ? !nextField.hide : true;\n this.show = { ...this.show, [nextStep.id]: showNextField };\n if (!showNextField) {\n this.openNext(nextStep.id);\n }\n this.$wizardStep.set(nextStep.id);\n if (this.stepHasValue(nextStep.id)) {\n currentStepID = nextStep.id;\n continue;\n }\n }\n break; // <---------- Exit point\n }\n if (this.show.submitButton) {\n this.isReadyToSubmit = true;\n this.isReadyToSubmitChange.emit();\n }\n }\n\n private stepHasValue(name: WizardStepID): boolean | undefined {\n const p = this.$contact().dbo;\n switch (name) {\n case 'name':\n return !!p.names && Object.values(p.names).some((v) => !!v);\n case 'ageGroup':\n return !!p.ageGroup;\n case 'gender':\n return !!p.gender && p.gender !== 'unknown';\n case 'relatedAs':\n return (\n getRelatedItemIDs(\n p.related,\n 'contactus',\n 'contacts',\n this.$contact().space.id,\n ).length > 0\n );\n case 'roles':\n return !!p.roles?.length;\n }\n return undefined;\n }\n}\n","<!--<h2>Person wizard</h2>-->\n<!--<p>wizardStep: {{ wizardStep }}</p>-->\n<!--<p>fields: {{ fields | json }}</p>-->\n<!--<p>nameFields: {{ nameFields | json }}</p>-->\n<!--<p>show: {{ show | json }};</p>-->\n<!--<p>contact: {{ $contact() | json }}</p>-->\n<!--<p>wizardStep: {{wizardStep}}</p>-->\n\n<p>$wizardStep: {{ $wizardStep() }}</p>\n\n@if (show.ageGroup) {\n <sneat-age-group-form\n [spaceType]=\"$contact().space.type\"\n [hidePetOption]=\"hidePetOption\"\n [disabled]=\"disabled\"\n [$ageGroup]=\"$contact().dbo.ageGroup\"\n (ageGroupChange)=\"onAgeGroupChanged($event)\"\n />\n}\n\n@if (show.gender) {\n <ion-card>\n <sneat-gender-form\n [disabled]=\"disabled\"\n [$spaceID]=\"$spaceID()\"\n [$contactID]=\"undefined\"\n [$genderID]=\"$contact().dbo.gender\"\n (genderChange)=\"onGenderChanged($event)\"\n />\n </ion-card>\n}\n\n@if (!requires.relatedAs?.hide && show.relatedAs && $contact().space.id) {\n <sneat-contact-relationship-form\n [$contactID]=\"''\"\n [$userSpaceContactID]=\"null\"\n [isActive]=\"$wizardStep() === 'relatedAs'\"\n [disabled]=\"disabled\"\n [$space]=\"$contact().space\"\n [$relatedTo]=\"$relatedTo()\"\n [$ageGroup]=\"$contact().dbo.ageGroup\"\n (relatedAsChange)=\"onRelatedAsChanged($event)\"\n />\n <!--[relatedAs]=\"newPerson.related?.relatedAs?.length === 1 ? newPerson.relatedTo?.relatedAs?.[0] : undefined\"-->\n}\n\n@if (show.name) {\n <ion-card>\n <sneat-names-form\n [name]=\"$contact().dbo.names\"\n [isActive]=\"$wizardStep() === 'name'\"\n [showNextButton]=\"false\"\n [fields]=\"nameFields\"\n (namesChanged)=\"onNameChanged($event)\"\n [disabled]=\"disabled\"\n (next)=\"nextFromName($event)\"\n />\n </ion-card>\n}\n\n@if (!requires.roles?.hide && show.roles) {\n <sneat-roles-form\n [$space]=\"$contact().space\"\n [isActive]=\"$wizardStep() === 'roles'\"\n [disabled]=\"disabled\"\n />\n}\n\n@if (show.communicationChannels) {\n <ion-segment [(ngModel)]=\"tab\">\n <ion-segment-button value=\"emails\">Emails</ion-segment-button>\n <ion-segment-button value=\"phones\">Phones</ion-segment-button>\n </ion-segment>\n @switch (tab) {\n @case (\"emails\") {\n <sneat-emails-form\n [hideHeader]=\"true\"\n [emails]=\"$emails()\"\n (emailsChange)=\"onEmailsChanged($event)\"\n />\n }\n @case (\"phones\") {\n <sneat-phones-form\n [hideHeader]=\"true\"\n [phones]=\"$phones()\"\n (phonesChange)=\"onPhoneChanged($event)\"\n />\n }\n }\n}\n\n@if ($wizardStep() === \"communicationChannels\") {\n <ion-button\n class=\"ion-margin\"\n size=\"medium\"\n [color]=\"show.nameNext ? 'primary' : 'medium'\"\n (click)=\"openNext($wizardStep())\"\n >\n <ion-label>Next</ion-label>\n <ion-icon name=\"arrow-forward-circle-outline\" slot=\"end\"></ion-icon>\n </ion-button>\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../../../libs/contactus/shared/src/lib/components/contact-forms/pet-kind-and-breed-form/index.ts"],"names":[],"mappings":"AAAA,cAAc,qCAAqC,CAAC","sourcesContent":["export * from './pet-kind-and-breed-form.component';\n"]}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { Component, EventEmitter, Output } from '@angular/core';
|
|
2
|
+
import { IonCard, IonItemDivider, IonLabel } from '@ionic/angular/standalone';
|
|
3
|
+
import { ClassName, SelectFromListComponent } from '@sneat/ui';
|
|
4
|
+
import { ContactTypeAnimal } from '@sneat/contactus-core';
|
|
5
|
+
import { EditContactFormBaseComponent } from '../contact-form-base.component';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
export class PetKindAndBreedFormComponent extends EditContactFormBaseComponent {
|
|
8
|
+
constructor() {
|
|
9
|
+
super();
|
|
10
|
+
this.petKindChange = new EventEmitter();
|
|
11
|
+
this.breeds = [
|
|
12
|
+
{ id: 'bulldog', title: 'Bulldog' },
|
|
13
|
+
{ id: 'beagle', title: 'Beagle' },
|
|
14
|
+
{ id: 'poodle', title: 'Poodle' },
|
|
15
|
+
{ id: 'golden-retriever', title: 'Golden Retriever' },
|
|
16
|
+
{ id: 'other', title: 'Other' },
|
|
17
|
+
];
|
|
18
|
+
this.petKinds = [
|
|
19
|
+
{ id: 'dog', emoji: '🐕', title: 'Dog' },
|
|
20
|
+
{ id: 'cat', emoji: '🐈', title: 'Cat' },
|
|
21
|
+
{ id: 'amphibian', title: 'Amphibian', emoji: '🐸' },
|
|
22
|
+
{ id: 'bird', emoji: '🐦', title: 'Bird' },
|
|
23
|
+
{ id: 'fish', emoji: '🐠', title: 'Fish' },
|
|
24
|
+
{ id: 'rodent', title: 'Rodent', emoji: '🐹' },
|
|
25
|
+
// { id: 'mouse', emoji: '🐭', title: 'Mouse' },
|
|
26
|
+
// { id: 'rat', emoji: '🐁', title: 'Rat' },
|
|
27
|
+
// { id: 'hamster', emoji: '🐹', title: 'Hamster' },
|
|
28
|
+
{ id: 'horse', emoji: '🐴', title: 'Horse' },
|
|
29
|
+
{ id: 'reptile', title: 'Reptile', emoji: '🐍' },
|
|
30
|
+
{ id: 'turtle', emoji: '🐢', title: 'Turtle' },
|
|
31
|
+
// { id: 'snake', emoji: '🐍', title: 'Snake' },
|
|
32
|
+
// { id: 'lizard', emoji: '🦎', title: 'Lizard' },
|
|
33
|
+
{ id: 'other', emoji: '🐾', title: 'Other' },
|
|
34
|
+
];
|
|
35
|
+
}
|
|
36
|
+
onPetKindChanged(petKind) {
|
|
37
|
+
const contact = this.$contact();
|
|
38
|
+
this.contactChange.emit({
|
|
39
|
+
...contact,
|
|
40
|
+
dbo: {
|
|
41
|
+
...(contact?.dbo || { type: ContactTypeAnimal }),
|
|
42
|
+
petKind: petKind,
|
|
43
|
+
petBreed: petKind ? contact?.dbo?.petBreed : undefined,
|
|
44
|
+
},
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
onPetBreedChanged(petBreed) {
|
|
48
|
+
const contact = this.$contact();
|
|
49
|
+
this.contactChange.emit({
|
|
50
|
+
...contact,
|
|
51
|
+
dbo: {
|
|
52
|
+
...(contact?.dbo || { type: ContactTypeAnimal }),
|
|
53
|
+
petBreed,
|
|
54
|
+
},
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: PetKindAndBreedFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
58
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: PetKindAndBreedFormComponent, isStandalone: true, selector: "sneat-pet-kind-and-breed-form", outputs: { petKindChange: "petKindChange" }, providers: [{ provide: ClassName, useValue: 'PetKindAndBreedFormComponent' }], usesInheritance: true, ngImport: i0, template: "@let petKind = $contact().dbo.petKind;\n\n<ion-card>\n @if (!petKind) {\n <ion-item-divider color=\"primary\">\n <ion-label>What kind of an animal is your pet?</ion-label>\n </ion-item-divider>\n }\n <sneat-select-from-list\n label=\"Pet kind\"\n [value]=\"petKind\"\n [items]=\"petKinds\"\n (valueChange)=\"onPetKindChanged($event)\"\n />\n\n @if (petKind === \"dog\") {\n @if (!$contact().dbo.petBreed) {\n <ion-item-divider color=\"primary\">\n <ion-label>What breed is your dog?</ion-label>\n </ion-item-divider>\n }\n <sneat-select-from-list\n label=\"Breed\"\n [value]=\"\"\n [items]=\"breeds\"\n (valueChange)=\"onPetBreedChanged($event)\"\n />\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"] }, { kind: "component", type: IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }] }); }
|
|
59
|
+
}
|
|
60
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: PetKindAndBreedFormComponent, decorators: [{
|
|
61
|
+
type: Component,
|
|
62
|
+
args: [{ imports: [SelectFromListComponent, IonCard, IonItemDivider, IonLabel], selector: 'sneat-pet-kind-and-breed-form', providers: [{ provide: ClassName, useValue: 'PetKindAndBreedFormComponent' }], template: "@let petKind = $contact().dbo.petKind;\n\n<ion-card>\n @if (!petKind) {\n <ion-item-divider color=\"primary\">\n <ion-label>What kind of an animal is your pet?</ion-label>\n </ion-item-divider>\n }\n <sneat-select-from-list\n label=\"Pet kind\"\n [value]=\"petKind\"\n [items]=\"petKinds\"\n (valueChange)=\"onPetKindChanged($event)\"\n />\n\n @if (petKind === \"dog\") {\n @if (!$contact().dbo.petBreed) {\n <ion-item-divider color=\"primary\">\n <ion-label>What breed is your dog?</ion-label>\n </ion-item-divider>\n }\n <sneat-select-from-list\n label=\"Breed\"\n [value]=\"\"\n [items]=\"breeds\"\n (valueChange)=\"onPetBreedChanged($event)\"\n />\n }\n</ion-card>\n" }]
|
|
63
|
+
}], ctorParameters: () => [], propDecorators: { petKindChange: [{
|
|
64
|
+
type: Output
|
|
65
|
+
}] } });
|
|
66
|
+
//# sourceMappingURL=pet-kind-and-breed-form.component.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pet-kind-and-breed-form.component.js","sourceRoot":"","sources":["../../../../../../../../../libs/contactus/shared/src/lib/components/contact-forms/pet-kind-and-breed-form/pet-kind-and-breed-form.component.ts","../../../../../../../../../libs/contactus/shared/src/lib/components/contact-forms/pet-kind-and-breed-form/pet-kind-and-breed-form.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, EventEmitter, Output } from '@angular/core';\nimport { IonCard, IonItemDivider, IonLabel } from '@ionic/angular/standalone';\nimport { ClassName, ISelectItem, SelectFromListComponent } from '@sneat/ui';\nimport { ContactTypeAnimal, PetKind } from '@sneat/contactus-core';\nimport { EditContactFormBaseComponent } from '../contact-form-base.component';\n\n@Component({\n imports: [SelectFromListComponent, IonCard, IonItemDivider, IonLabel],\n selector: 'sneat-pet-kind-and-breed-form',\n templateUrl: './pet-kind-and-breed-form.component.html',\n providers: [{ provide: ClassName, useValue: 'PetKindAndBreedFormComponent' }],\n})\nexport class PetKindAndBreedFormComponent extends EditContactFormBaseComponent {\n @Output() readonly petKindChange = new EventEmitter<PetKind | undefined>();\n\n protected breeds: readonly ISelectItem[] = [\n { id: 'bulldog', title: 'Bulldog' },\n { id: 'beagle', title: 'Beagle' },\n { id: 'poodle', title: 'Poodle' },\n { id: 'golden-retriever', title: 'Golden Retriever' },\n { id: 'other', title: 'Other' },\n ];\n\n protected readonly petKinds: ISelectItem[] = [\n { id: 'dog', emoji: '🐕', title: 'Dog' },\n { id: 'cat', emoji: '🐈', title: 'Cat' },\n { id: 'amphibian', title: 'Amphibian', emoji: '🐸' },\n { id: 'bird', emoji: '🐦', title: 'Bird' },\n { id: 'fish', emoji: '🐠', title: 'Fish' },\n { id: 'rodent', title: 'Rodent', emoji: '🐹' },\n // { id: 'mouse', emoji: '🐭', title: 'Mouse' },\n // { id: 'rat', emoji: '🐁', title: 'Rat' },\n // { id: 'hamster', emoji: '🐹', title: 'Hamster' },\n { id: 'horse', emoji: '🐴', title: 'Horse' },\n { id: 'reptile', title: 'Reptile', emoji: '🐍' },\n { id: 'turtle', emoji: '🐢', title: 'Turtle' },\n // { id: 'snake', emoji: '🐍', title: 'Snake' },\n // { id: 'lizard', emoji: '🦎', title: 'Lizard' },\n { id: 'other', emoji: '🐾', title: 'Other' },\n ];\n\n public constructor() {\n super();\n }\n\n protected onPetKindChanged(petKind: string): void {\n const contact = this.$contact();\n this.contactChange.emit({\n ...contact,\n dbo: {\n ...(contact?.dbo || { type: ContactTypeAnimal }),\n petKind: petKind as PetKind,\n petBreed: petKind ? contact?.dbo?.petBreed : undefined,\n },\n });\n }\n\n protected onPetBreedChanged(petBreed: string): void {\n const contact = this.$contact();\n this.contactChange.emit({\n ...contact,\n dbo: {\n ...(contact?.dbo || { type: ContactTypeAnimal }),\n petBreed,\n },\n });\n }\n}\n","@let petKind = $contact().dbo.petKind;\n\n<ion-card>\n @if (!petKind) {\n <ion-item-divider color=\"primary\">\n <ion-label>What kind of an animal is your pet?</ion-label>\n </ion-item-divider>\n }\n <sneat-select-from-list\n label=\"Pet kind\"\n [value]=\"petKind\"\n [items]=\"petKinds\"\n (valueChange)=\"onPetKindChanged($event)\"\n />\n\n @if (petKind === \"dog\") {\n @if (!$contact().dbo.petBreed) {\n <ion-item-divider color=\"primary\">\n <ion-label>What breed is your dog?</ion-label>\n </ion-item-divider>\n }\n <sneat-select-from-list\n label=\"Breed\"\n [value]=\"\"\n [items]=\"breeds\"\n (valueChange)=\"onPetBreedChanged($event)\"\n />\n }\n</ion-card>\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../../../libs/contactus/shared/src/lib/components/contact-forms/phones-form/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC","sourcesContent":["export * from './phones-form.component';\n"]}
|