@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,60 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, Input, input, computed, } from '@angular/core';
|
|
2
|
+
import { IonCard } from '@ionic/angular/standalone';
|
|
3
|
+
import { zipMapBriefsWithIDs } from '@sneat/space-models';
|
|
4
|
+
import { MembersCardHeaderComponent } from '../members-card-header/members-card-header.component';
|
|
5
|
+
import { MembersListComponent } from '../members-list';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
export class MembersShortListCardComponent {
|
|
8
|
+
constructor() {
|
|
9
|
+
this.$space = input.required(...(ngDevMode ? [{ debugName: "$space" }] : []));
|
|
10
|
+
this.$contactusSpaceDbo = input.required(...(ngDevMode ? [{ debugName: "$contactusSpaceDbo" }] : []));
|
|
11
|
+
this.$spaceContacts = computed(() => zipMapBriefsWithIDs(this.$contactusSpaceDbo()?.contacts), ...(ngDevMode ? [{ debugName: "$spaceContacts" }] : []));
|
|
12
|
+
this.filterMembers = (contacts) => {
|
|
13
|
+
return !this.role
|
|
14
|
+
? contacts
|
|
15
|
+
: contacts?.filter((m) => m.brief?.roles?.some((r) => r === this.role));
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: MembersShortListCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
19
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.0", type: MembersShortListCardComponent, isStandalone: true, selector: "sneat-members-short-list", inputs: { $space: { classPropertyName: "$space", publicName: "$space", isSignal: true, isRequired: true, transformFunction: null }, $contactusSpaceDbo: { classPropertyName: "$contactusSpaceDbo", publicName: "$contactusSpaceDbo", isSignal: true, isRequired: true, transformFunction: null }, role: { classPropertyName: "role", publicName: "role", isSignal: false, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
|
|
20
|
+
<ion-card>
|
|
21
|
+
<sneat-members-card-header
|
|
22
|
+
[$space]="$space()"
|
|
23
|
+
[$contactusSpace]="{
|
|
24
|
+
id: $space().id || '',
|
|
25
|
+
dbo: $contactusSpaceDbo() || null,
|
|
26
|
+
}"
|
|
27
|
+
/>
|
|
28
|
+
<sneat-members-list
|
|
29
|
+
[$space]="$space()"
|
|
30
|
+
[$members]="$spaceContacts()"
|
|
31
|
+
></sneat-members-list>
|
|
32
|
+
</ion-card>
|
|
33
|
+
`, isInline: true, dependencies: [{ kind: "component", type: IonCard, selector: "ion-card", inputs: ["button", "color", "disabled", "download", "href", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: MembersListComponent, selector: "sneat-members-list", inputs: ["$members", "$role", "contactsByMember", "hideRoles"], outputs: ["selfRemoved"] }, { kind: "component", type: MembersCardHeaderComponent, selector: "sneat-members-card-header", inputs: ["$space", "$contactusSpace"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
34
|
+
}
|
|
35
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: MembersShortListCardComponent, decorators: [{
|
|
36
|
+
type: Component,
|
|
37
|
+
args: [{
|
|
38
|
+
selector: 'sneat-members-short-list',
|
|
39
|
+
template: `
|
|
40
|
+
<ion-card>
|
|
41
|
+
<sneat-members-card-header
|
|
42
|
+
[$space]="$space()"
|
|
43
|
+
[$contactusSpace]="{
|
|
44
|
+
id: $space().id || '',
|
|
45
|
+
dbo: $contactusSpaceDbo() || null,
|
|
46
|
+
}"
|
|
47
|
+
/>
|
|
48
|
+
<sneat-members-list
|
|
49
|
+
[$space]="$space()"
|
|
50
|
+
[$members]="$spaceContacts()"
|
|
51
|
+
></sneat-members-list>
|
|
52
|
+
</ion-card>
|
|
53
|
+
`,
|
|
54
|
+
imports: [IonCard, MembersListComponent, MembersCardHeaderComponent],
|
|
55
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
56
|
+
}]
|
|
57
|
+
}], propDecorators: { $space: [{ type: i0.Input, args: [{ isSignal: true, alias: "$space", required: true }] }], $contactusSpaceDbo: [{ type: i0.Input, args: [{ isSignal: true, alias: "$contactusSpaceDbo", required: true }] }], role: [{
|
|
58
|
+
type: Input
|
|
59
|
+
}] } });
|
|
60
|
+
//# sourceMappingURL=members-short-list-card.component.js.map
|
package/esm2022/lib/components/members-short-list-card/members-short-list-card.component.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"members-short-list-card.component.js","sourceRoot":"","sources":["../../../../../../../../libs/contactus/shared/src/lib/components/members-short-list-card/members-short-list-card.component.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,SAAS,EACT,KAAK,EACL,KAAK,EACL,QAAQ,GACT,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AAEpD,OAAO,EAAiB,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AACzE,OAAO,EAAE,0BAA0B,EAAE,MAAM,sDAAsD,CAAC;AAClG,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;;AAsBvD,MAAM,OAAO,6BAA6B;IApB1C;QAqBkB,WAAM,GAAG,KAAK,CAAC,QAAQ,iDAAiB,CAAC;QAEzC,uBAAkB,GAAG,KAAK,CAAC,QAAQ,6DAEhD,CAAC;QAEe,mBAAc,GAAG,QAAQ,CAAC,GAAG,EAAE,CAChD,mBAAmB,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,QAAQ,CAAC,0DACzD,CAAC;QAIe,kBAAa,GAAG,CAC/B,QAAuC,EACG,EAAE;YAC5C,OAAO,CAAC,IAAI,CAAC,IAAI;gBACf,CAAC,CAAC,QAAQ;gBACV,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC5E,CAAC,CAAC;KACH;8GApBY,6BAA6B;kGAA7B,6BAA6B,8eAlB9B;;;;;;;;;;;;;;GAcT,4DACS,OAAO,yLAAE,oBAAoB,yJAAE,0BAA0B;;2FAGxD,6BAA6B;kBApBzC,SAAS;mBAAC;oBACT,QAAQ,EAAE,0BAA0B;oBACpC,QAAQ,EAAE;;;;;;;;;;;;;;GAcT;oBACD,OAAO,EAAE,CAAC,OAAO,EAAE,oBAAoB,EAAE,0BAA0B,CAAC;oBACpE,eAAe,EAAE,uBAAuB,CAAC,MAAM;iBAChD;;sBAYE,KAAK","sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n Input,\n input,\n computed,\n} from '@angular/core';\nimport { IonCard } from '@ionic/angular/standalone';\nimport { IContactusSpaceDbo, IContactWithBrief } from '@sneat/contactus-core';\nimport { ISpaceContext, zipMapBriefsWithIDs } from '@sneat/space-models';\nimport { MembersCardHeaderComponent } from '../members-card-header/members-card-header.component';\nimport { MembersListComponent } from '../members-list';\n\n@Component({\n selector: 'sneat-members-short-list',\n template: `\n <ion-card>\n <sneat-members-card-header\n [$space]=\"$space()\"\n [$contactusSpace]=\"{\n id: $space().id || '',\n dbo: $contactusSpaceDbo() || null,\n }\"\n />\n <sneat-members-list\n [$space]=\"$space()\"\n [$members]=\"$spaceContacts()\"\n ></sneat-members-list>\n </ion-card>\n `,\n imports: [IonCard, MembersListComponent, MembersCardHeaderComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MembersShortListCardComponent {\n public readonly $space = input.required<ISpaceContext>();\n\n public readonly $contactusSpaceDbo = input.required<\n IContactusSpaceDbo | null | undefined\n >();\n\n protected readonly $spaceContacts = computed(() =>\n zipMapBriefsWithIDs(this.$contactusSpaceDbo()?.contacts),\n );\n\n @Input() public role?: string;\n\n private readonly filterMembers = (\n contacts?: readonly IContactWithBrief[],\n ): readonly IContactWithBrief[] | undefined => {\n return !this.role\n ? contacts\n : contacts?.filter((m) => m.brief?.roles?.some((r) => r === this.role));\n };\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../../libs/contactus/shared/src/lib/components/shared-with/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC","sourcesContent":["export * from './shared-with.component';\n"]}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { Component, Input } from '@angular/core';
|
|
2
|
+
import { IonCard, IonCardHeader, IonCardTitle, IonCheckbox, IonIcon, IonItem, IonLabel, IonSelect, IonSelectOption, IonToggle, } from '@ionic/angular/standalone';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export class SharedWithComponent {
|
|
5
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: SharedWithComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
6
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.0", type: SharedWithComponent, isStandalone: true, selector: "sneat-shared-with", inputs: { title: "title" }, ngImport: i0, template: "<ion-card>\n <ion-card-header>\n <ion-card-title>{{ title }}</ion-card-title>\n </ion-card-header>\n <ion-item>\n <ion-label>Group</ion-label>\n <ion-select disabled=\"true\" value=\"family\" interface=\"popover\">\n <ion-select-option value=\"personal\">Personal</ion-select-option>\n <ion-select-option value=\"family\">Family</ion-select-option>\n </ion-select>\n </ion-item>\n <ion-item color=\"light\">\n <ion-checkbox slot=\"start\" />\n <ion-label><b>Adults</b></ion-label>\n </ion-item>\n <ion-item>\n <ion-toggle slot=\"end\" />\n <ion-label>Janet</ion-label>\n </ion-item>\n <ion-item>\n <ion-toggle slot=\"end\" />\n <ion-label>Jack</ion-label>\n </ion-item>\n <ion-item color=\"light\">\n <ion-checkbox slot=\"start\" />\n <ion-label>Kids</ion-label>\n </ion-item>\n <ion-item>\n <ion-toggle slot=\"end\" />\n <ion-label>Janet</ion-label>\n </ion-item>\n <ion-item>\n <ion-toggle slot=\"end\" />\n <ion-label>Jack</ion-label>\n </ion-item>\n <ion-item button=\"\">\n <ion-icon name=\"add\" slot=\"start\" color=\"primary\" />\n <ion-label color=\"primary\">Add member</ion-label>\n </ion-item>\n</ion-card>\n", dependencies: [{ kind: "component", type: IonCard, selector: "ion-card", inputs: ["button", "color", "disabled", "download", "href", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: IonCardHeader, selector: "ion-card-header", inputs: ["color", "mode", "translucent"] }, { 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: IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: IonSelect, selector: "ion-select", inputs: ["cancelText", "color", "compareWith", "disabled", "errorText", "expandedIcon", "fill", "helperText", "interface", "interfaceOptions", "justify", "label", "labelPlacement", "mode", "multiple", "name", "okText", "placeholder", "selectedText", "shape", "toggleIcon", "value"] }, { kind: "component", type: IonSelectOption, selector: "ion-select-option", inputs: ["disabled", "value"] }, { kind: "component", type: IonCardTitle, selector: "ion-card-title", inputs: ["color", "mode"] }, { kind: "component", type: IonCheckbox, selector: "ion-checkbox", inputs: ["checked", "color", "disabled", "errorText", "helperText", "indeterminate", "justify", "labelPlacement", "mode", "name", "value"] }, { kind: "component", type: IonToggle, selector: "ion-toggle", inputs: ["checked", "color", "disabled", "enableOnOffLabels", "errorText", "helperText", "justify", "labelPlacement", "mode", "name", "value"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }] }); }
|
|
7
|
+
}
|
|
8
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: SharedWithComponent, decorators: [{
|
|
9
|
+
type: Component,
|
|
10
|
+
args: [{ selector: 'sneat-shared-with', imports: [
|
|
11
|
+
IonCard,
|
|
12
|
+
IonCardHeader,
|
|
13
|
+
IonItem,
|
|
14
|
+
IonLabel,
|
|
15
|
+
IonSelect,
|
|
16
|
+
IonSelectOption,
|
|
17
|
+
IonCardTitle,
|
|
18
|
+
IonCheckbox,
|
|
19
|
+
IonToggle,
|
|
20
|
+
IonIcon,
|
|
21
|
+
], template: "<ion-card>\n <ion-card-header>\n <ion-card-title>{{ title }}</ion-card-title>\n </ion-card-header>\n <ion-item>\n <ion-label>Group</ion-label>\n <ion-select disabled=\"true\" value=\"family\" interface=\"popover\">\n <ion-select-option value=\"personal\">Personal</ion-select-option>\n <ion-select-option value=\"family\">Family</ion-select-option>\n </ion-select>\n </ion-item>\n <ion-item color=\"light\">\n <ion-checkbox slot=\"start\" />\n <ion-label><b>Adults</b></ion-label>\n </ion-item>\n <ion-item>\n <ion-toggle slot=\"end\" />\n <ion-label>Janet</ion-label>\n </ion-item>\n <ion-item>\n <ion-toggle slot=\"end\" />\n <ion-label>Jack</ion-label>\n </ion-item>\n <ion-item color=\"light\">\n <ion-checkbox slot=\"start\" />\n <ion-label>Kids</ion-label>\n </ion-item>\n <ion-item>\n <ion-toggle slot=\"end\" />\n <ion-label>Janet</ion-label>\n </ion-item>\n <ion-item>\n <ion-toggle slot=\"end\" />\n <ion-label>Jack</ion-label>\n </ion-item>\n <ion-item button=\"\">\n <ion-icon name=\"add\" slot=\"start\" color=\"primary\" />\n <ion-label color=\"primary\">Add member</ion-label>\n </ion-item>\n</ion-card>\n" }]
|
|
22
|
+
}], propDecorators: { title: [{
|
|
23
|
+
type: Input
|
|
24
|
+
}] } });
|
|
25
|
+
//# sourceMappingURL=shared-with.component.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared-with.component.js","sourceRoot":"","sources":["../../../../../../../../libs/contactus/shared/src/lib/components/shared-with/shared-with.component.ts","../../../../../../../../libs/contactus/shared/src/lib/components/shared-with/shared-with.component.html"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EACL,OAAO,EACP,aAAa,EACb,YAAY,EACZ,WAAW,EACX,OAAO,EACP,OAAO,EACP,QAAQ,EACR,SAAS,EACT,eAAe,EACf,SAAS,GACV,MAAM,2BAA2B,CAAC;;AAkBnC,MAAM,OAAO,mBAAmB;8GAAnB,mBAAmB;kGAAnB,mBAAmB,yGC9BhC,orCAwCA,4CDtBI,OAAO,yLACP,aAAa,sGACb,OAAO,0NACP,QAAQ,6FACR,SAAS,kVACT,eAAe,6FACf,YAAY,sFACZ,WAAW,qMACX,SAAS,uMACT,OAAO;;2FAGE,mBAAmB;kBAhB/B,SAAS;+BACE,mBAAmB,WAEpB;wBACP,OAAO;wBACP,aAAa;wBACb,OAAO;wBACP,QAAQ;wBACR,SAAS;wBACT,eAAe;wBACf,YAAY;wBACZ,WAAW;wBACX,SAAS;wBACT,OAAO;qBACR;;sBAGA,KAAK","sourcesContent":["import { Component, Input } from '@angular/core';\nimport {\n IonCard,\n IonCardHeader,\n IonCardTitle,\n IonCheckbox,\n IonIcon,\n IonItem,\n IonLabel,\n IonSelect,\n IonSelectOption,\n IonToggle,\n} from '@ionic/angular/standalone';\n\n@Component({\n selector: 'sneat-shared-with',\n templateUrl: './shared-with.component.html',\n imports: [\n IonCard,\n IonCardHeader,\n IonItem,\n IonLabel,\n IonSelect,\n IonSelectOption,\n IonCardTitle,\n IonCheckbox,\n IonToggle,\n IonIcon,\n ],\n})\nexport class SharedWithComponent {\n @Input() title?: string;\n}\n","<ion-card>\n <ion-card-header>\n <ion-card-title>{{ title }}</ion-card-title>\n </ion-card-header>\n <ion-item>\n <ion-label>Group</ion-label>\n <ion-select disabled=\"true\" value=\"family\" interface=\"popover\">\n <ion-select-option value=\"personal\">Personal</ion-select-option>\n <ion-select-option value=\"family\">Family</ion-select-option>\n </ion-select>\n </ion-item>\n <ion-item color=\"light\">\n <ion-checkbox slot=\"start\" />\n <ion-label><b>Adults</b></ion-label>\n </ion-item>\n <ion-item>\n <ion-toggle slot=\"end\" />\n <ion-label>Janet</ion-label>\n </ion-item>\n <ion-item>\n <ion-toggle slot=\"end\" />\n <ion-label>Jack</ion-label>\n </ion-item>\n <ion-item color=\"light\">\n <ion-checkbox slot=\"start\" />\n <ion-label>Kids</ion-label>\n </ion-item>\n <ion-item>\n <ion-toggle slot=\"end\" />\n <ion-label>Janet</ion-label>\n </ion-item>\n <ion-item>\n <ion-toggle slot=\"end\" />\n <ion-label>Jack</ion-label>\n </ion-item>\n <ion-item button=\"\">\n <ion-icon name=\"add\" slot=\"start\" color=\"primary\" />\n <ion-label color=\"primary\">Add member</ion-label>\n </ion-item>\n</ion-card>\n"]}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Directive, EventEmitter, input, Output } from '@angular/core';
|
|
2
|
+
import { WithSpaceInput } from '@sneat/space-services';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export class WithNewContactInput extends WithSpaceInput {
|
|
5
|
+
constructor() {
|
|
6
|
+
super(...arguments);
|
|
7
|
+
this.$contact = input.required(...(ngDevMode ? [{ debugName: "$contact" }] : []));
|
|
8
|
+
this.contactChange = new EventEmitter();
|
|
9
|
+
}
|
|
10
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: WithNewContactInput, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
|
|
11
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.0", type: WithNewContactInput, isStandalone: true, inputs: { $contact: { classPropertyName: "$contact", publicName: "$contact", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { contactChange: "contactChange" }, usesInheritance: true, ngImport: i0 }); }
|
|
12
|
+
}
|
|
13
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: WithNewContactInput, decorators: [{
|
|
14
|
+
type: Directive
|
|
15
|
+
}], propDecorators: { $contact: [{ type: i0.Input, args: [{ isSignal: true, alias: "$contact", required: true }] }], contactChange: [{
|
|
16
|
+
type: Output
|
|
17
|
+
}] } });
|
|
18
|
+
//# sourceMappingURL=with-new-contact-input.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"with-new-contact-input.js","sourceRoot":"","sources":["../../../../../../../libs/contactus/shared/src/lib/components/with-new-contact-input.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAEvE,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;;AAGvD,MAAM,OAAO,mBAAoB,SAAQ,cAAc;IADvD;;QAEkB,aAAQ,GAAG,KAAK,CAAC,QAAQ,mDAAgC,CAAC;QACvD,kBAAa,GAC9B,IAAI,YAAY,EAAgC,CAAC;KACpD;8GAJY,mBAAmB;kGAAnB,mBAAmB;;2FAAnB,mBAAmB;kBAD/B,SAAS;;sBAGP,MAAM","sourcesContent":["import { Directive, EventEmitter, input, Output } from '@angular/core';\nimport { NewContactBaseDboAndSpaceRef } from '@sneat/contactus-core';\nimport { WithSpaceInput } from '@sneat/space-services';\n\n@Directive()\nexport class WithNewContactInput extends WithSpaceInput {\n public readonly $contact = input.required<NewContactBaseDboAndSpaceRef>();\n @Output() readonly contactChange =\n new EventEmitter<NewContactBaseDboAndSpaceRef>();\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../../../libs/contactus/shared/src/lib/constants.ts"],"names":[],"mappings":"","sourcesContent":["import { EnumAsUnionOfKeys } from '@sneat/core';\n\nexport const enum MemberPageID {\n // Read README-DEV-FAQ.md#enum-as-union-of-keys\n member = 'member',\n 'edit-member' = 'edit-member',\n 'member-budget' = 'member-budget',\n 'member-assets' = 'member-assets',\n 'member-contacts' = 'member-contacts',\n 'member-documents' = 'member-documents',\n 'member-schedule' = 'member-schedule',\n 'remove-member' = 'remove-member',\n 'member-sizes' = 'member-sizes',\n}\n\nexport type MemberPages = EnumAsUnionOfKeys<typeof MemberPageID>; // Read README-DEV-FAQ.md#enum-as-union-of-keys\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../libs/contactus/shared/src/lib/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC","sourcesContent":["export * from './ui-types';\nexport * from './constants';\n"]}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, inject, Input, signal, } from '@angular/core';
|
|
2
|
+
import { IonButton, IonButtons, IonContent, IonFooter, IonHeader, IonIcon, IonLabel, IonTitle, IonToolbar, } from '@ionic/angular/standalone';
|
|
3
|
+
import { ContactService, } from '@sneat/contactus-services';
|
|
4
|
+
import { NamesFormComponent } from '../../components/contact-forms/person-forms/names-form';
|
|
5
|
+
import { ClassName, SneatBaseModalComponent } from '@sneat/ui';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
export class ContactNamesModalComponent extends SneatBaseModalComponent {
|
|
8
|
+
constructor() {
|
|
9
|
+
super(...arguments);
|
|
10
|
+
this.names = {};
|
|
11
|
+
this.contactService = inject(ContactService);
|
|
12
|
+
this.$saving = signal(false, ...(ngDevMode ? [{ debugName: "$saving" }] : []));
|
|
13
|
+
this.personalbar = personalbar;
|
|
14
|
+
}
|
|
15
|
+
onNamesChanged(names) {
|
|
16
|
+
this.names = names;
|
|
17
|
+
}
|
|
18
|
+
saveChanges() {
|
|
19
|
+
this.$saving.set(true);
|
|
20
|
+
const contactID = this.contactID;
|
|
21
|
+
if (!contactID) {
|
|
22
|
+
this.errorLogger.logError('Contact ID is required');
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
const spaceID = this.spaceID;
|
|
26
|
+
if (!spaceID) {
|
|
27
|
+
this.errorLogger.logError('Space ID is required');
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
const names = this.names;
|
|
31
|
+
if (!names) {
|
|
32
|
+
this.errorLogger.logError('Names are required');
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
const request = {
|
|
36
|
+
contactID,
|
|
37
|
+
spaceID,
|
|
38
|
+
names,
|
|
39
|
+
};
|
|
40
|
+
this.contactService.updateContact(request).subscribe({
|
|
41
|
+
next: () => {
|
|
42
|
+
this.$saving.set(false);
|
|
43
|
+
this.dismissModal(names);
|
|
44
|
+
},
|
|
45
|
+
error: (err) => {
|
|
46
|
+
this.$saving.set(false);
|
|
47
|
+
this.errorLogger.logError(err);
|
|
48
|
+
},
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ContactNamesModalComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
52
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.0", type: ContactNamesModalComponent, isStandalone: true, selector: "sneat-contact-names-modal", inputs: { spaceID: "spaceID", contactID: "contactID", names: "names" }, providers: [
|
|
53
|
+
{
|
|
54
|
+
provide: ClassName,
|
|
55
|
+
useValue: 'ContactNamesModalComponent',
|
|
56
|
+
},
|
|
57
|
+
], usesInheritance: true, ngImport: i0, template: "<ion-header>\n <ion-toolbar color=\"light\">\n <ion-title>Edit names</ion-title>\n <ion-buttons slot=\"end\">\n <ion-button (click)=\"close()\">\n <ion-icon name=\"close-outline\" />\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n\n<ion-content>\n <sneat-names-form\n [name]=\"names\"\n [showHeader]=\"false\"\n (namesChanged)=\"onNamesChanged($event)\"\n />\n</ion-content>\n\n<ion-footer>\n <ion-toolbar>\n <ion-buttons slot=\"end\">\n <ion-button\n [disabled]=\"$saving()\"\n fill=\"solid\"\n color=\"primary\"\n (click)=\"saveChanges()\"\n >\n <ion-label>Save</ion-label>\n </ion-button>\n <ion-button (click)=\"close()\">\n <ion-label>Cancel</ion-label>\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n</ion-footer>\n", dependencies: [{ 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: IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: IonContent, selector: "ion-content", inputs: ["color", "fixedSlotPlacement", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: NamesFormComponent, selector: "sneat-names-form", inputs: ["showHeader", "name", "isActive", "disabled", "fields", "showNextButton"], outputs: ["keyupEnter", "namesChanged", "next"] }, { kind: "component", type: IonFooter, selector: "ion-footer", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
58
|
+
}
|
|
59
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ContactNamesModalComponent, decorators: [{
|
|
60
|
+
type: Component,
|
|
61
|
+
args: [{ imports: [
|
|
62
|
+
IonButton,
|
|
63
|
+
IonButtons,
|
|
64
|
+
IonContent,
|
|
65
|
+
IonHeader,
|
|
66
|
+
IonIcon,
|
|
67
|
+
IonTitle,
|
|
68
|
+
IonToolbar,
|
|
69
|
+
NamesFormComponent,
|
|
70
|
+
IonFooter,
|
|
71
|
+
IonLabel,
|
|
72
|
+
], providers: [
|
|
73
|
+
{
|
|
74
|
+
provide: ClassName,
|
|
75
|
+
useValue: 'ContactNamesModalComponent',
|
|
76
|
+
},
|
|
77
|
+
], selector: 'sneat-contact-names-modal', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ion-header>\n <ion-toolbar color=\"light\">\n <ion-title>Edit names</ion-title>\n <ion-buttons slot=\"end\">\n <ion-button (click)=\"close()\">\n <ion-icon name=\"close-outline\" />\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n\n<ion-content>\n <sneat-names-form\n [name]=\"names\"\n [showHeader]=\"false\"\n (namesChanged)=\"onNamesChanged($event)\"\n />\n</ion-content>\n\n<ion-footer>\n <ion-toolbar>\n <ion-buttons slot=\"end\">\n <ion-button\n [disabled]=\"$saving()\"\n fill=\"solid\"\n color=\"primary\"\n (click)=\"saveChanges()\"\n >\n <ion-label>Save</ion-label>\n </ion-button>\n <ion-button (click)=\"close()\">\n <ion-label>Cancel</ion-label>\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n</ion-footer>\n" }]
|
|
78
|
+
}], propDecorators: { spaceID: [{
|
|
79
|
+
type: Input,
|
|
80
|
+
args: [{ required: true }]
|
|
81
|
+
}], contactID: [{
|
|
82
|
+
type: Input,
|
|
83
|
+
args: [{ required: true }]
|
|
84
|
+
}], names: [{
|
|
85
|
+
type: Input,
|
|
86
|
+
args: [{ required: true }]
|
|
87
|
+
}] } });
|
|
88
|
+
//# sourceMappingURL=contact-names-modal.component.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contact-names-modal.component.js","sourceRoot":"","sources":["../../../../../../../../libs/contactus/shared/src/lib/modals/contact-names-modal/contact-names-modal.component.ts","../../../../../../../../libs/contactus/shared/src/lib/modals/contact-names-modal/contact-names-modal.component.html"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,SAAS,EACT,MAAM,EACN,KAAK,EACL,MAAM,GACP,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,SAAS,EACT,UAAU,EACV,UAAU,EACV,SAAS,EACT,SAAS,EACT,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,UAAU,GACX,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EACL,cAAc,GAEf,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,kBAAkB,EAAE,MAAM,wDAAwD,CAAC;AAC5F,OAAO,EAAE,SAAS,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAC;;AAyB/D,MAAM,OAAO,0BAA2B,SAAQ,uBAAuB;IAvBvE;;QA0BoC,UAAK,GAAiB,EAAE,CAAC;QAE1C,mBAAc,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC;QAEtC,YAAO,GAAG,MAAM,CAAC,KAAK,mDAAC,CAAC;QAwCxB,gBAAW,GAAG,WAAW,CAAC;KAC9C;IAvCW,cAAc,CAAC,KAAmB;QAC1C,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAES,WAAW;QACnB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACvB,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QACjC,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAAC;YACpD,OAAO;QACT,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC7B,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC;YAClD,OAAO;QACT,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACzB,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC;YAChD,OAAO;QACT,CAAC;QACD,MAAM,OAAO,GAA0B;YACrC,SAAS;YACT,OAAO;YACP,KAAK;SACN,CAAC;QACF,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC;YACnD,IAAI,EAAE,GAAG,EAAE;gBACT,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBACxB,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YAC3B,CAAC;YACD,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE;gBACb,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBACxB,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YACjC,CAAC;SACF,CAAC,CAAC;IACL,CAAC;8GA7CU,0BAA0B;kGAA1B,0BAA0B,gJAV1B;YACT;gBACE,OAAO,EAAE,SAAS;gBAClB,QAAQ,EAAE,4BAA4B;aACvC;SACF,iDC5CH,41BAoCA,4CDRI,SAAS,oPACT,UAAU,8EACV,UAAU,wKACV,SAAS,oGACT,OAAO,2JACP,QAAQ,iFACR,UAAU,mFACV,kBAAkB,kMAClB,SAAS,oGACT,QAAQ;;2FAYC,0BAA0B;kBAvBtC,SAAS;8BACC;wBACP,SAAS;wBACT,UAAU;wBACV,UAAU;wBACV,SAAS;wBACT,OAAO;wBACP,QAAQ;wBACR,UAAU;wBACV,kBAAkB;wBAClB,SAAS;wBACT,QAAQ;qBACT,aACU;wBACT;4BACE,OAAO,EAAE,SAAS;4BAClB,QAAQ,EAAE,4BAA4B;yBACvC;qBACF,YACS,2BAA2B,mBAEpB,uBAAuB,CAAC,MAAM;;sBAG9C,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;;sBACxB,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;;sBACxB,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE","sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n inject,\n Input,\n signal,\n} from '@angular/core';\nimport {\n IonButton,\n IonButtons,\n IonContent,\n IonFooter,\n IonHeader,\n IonIcon,\n IonLabel,\n IonTitle,\n IonToolbar,\n} from '@ionic/angular/standalone';\nimport { IPersonNames } from '@sneat/auth-models';\nimport {\n ContactService,\n IUpdateContactRequest,\n} from '@sneat/contactus-services';\nimport { NamesFormComponent } from '../../components/contact-forms/person-forms/names-form';\nimport { ClassName, SneatBaseModalComponent } from '@sneat/ui';\n\n@Component({\n imports: [\n IonButton,\n IonButtons,\n IonContent,\n IonHeader,\n IonIcon,\n IonTitle,\n IonToolbar,\n NamesFormComponent,\n IonFooter,\n IonLabel,\n ],\n providers: [\n {\n provide: ClassName,\n useValue: 'ContactNamesModalComponent',\n },\n ],\n selector: 'sneat-contact-names-modal',\n templateUrl: './contact-names-modal.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ContactNamesModalComponent extends SneatBaseModalComponent {\n @Input({ required: true }) spaceID?: string;\n @Input({ required: true }) contactID?: string;\n @Input({ required: true }) public names: IPersonNames = {};\n\n private readonly contactService = inject(ContactService);\n\n protected readonly $saving = signal(false);\n\n protected onNamesChanged(names: IPersonNames): void {\n this.names = names;\n }\n\n protected saveChanges(): void {\n this.$saving.set(true);\n const contactID = this.contactID;\n if (!contactID) {\n this.errorLogger.logError('Contact ID is required');\n return;\n }\n const spaceID = this.spaceID;\n if (!spaceID) {\n this.errorLogger.logError('Space ID is required');\n return;\n }\n const names = this.names;\n if (!names) {\n this.errorLogger.logError('Names are required');\n return;\n }\n const request: IUpdateContactRequest = {\n contactID,\n spaceID,\n names,\n };\n this.contactService.updateContact(request).subscribe({\n next: () => {\n this.$saving.set(false);\n this.dismissModal(names);\n },\n error: (err) => {\n this.$saving.set(false);\n this.errorLogger.logError(err);\n },\n });\n }\n\n protected readonly personalbar = personalbar;\n}\n","<ion-header>\n <ion-toolbar color=\"light\">\n <ion-title>Edit names</ion-title>\n <ion-buttons slot=\"end\">\n <ion-button (click)=\"close()\">\n <ion-icon name=\"close-outline\" />\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n\n<ion-content>\n <sneat-names-form\n [name]=\"names\"\n [showHeader]=\"false\"\n (namesChanged)=\"onNamesChanged($event)\"\n />\n</ion-content>\n\n<ion-footer>\n <ion-toolbar>\n <ion-buttons slot=\"end\">\n <ion-button\n [disabled]=\"$saving()\"\n fill=\"solid\"\n color=\"primary\"\n (click)=\"saveChanges()\"\n >\n <ion-label>Save</ion-label>\n </ion-button>\n <ion-button (click)=\"close()\">\n <ion-label>Cancel</ion-label>\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n</ion-footer>\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../../libs/contactus/shared/src/lib/modals/invite-modal/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAC","sourcesContent":["export * from './invite-modal.component';\n"]}
|
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, Input, Pipe, inject, } from '@angular/core';
|
|
2
|
+
import { FormControl, FormsModule, ReactiveFormsModule, UntypedFormGroup, Validators, } from '@angular/forms';
|
|
3
|
+
import { IonButton, IonButtons, IonCardContent, IonContent, IonHeader, IonIcon, IonInput, IonItem, IonLabel, IonSegment, IonSegmentButton, IonSpinner, IonText, IonTextarea, IonTitle, IonToolbar, ModalController, ToastController, } from '@ionic/angular/standalone';
|
|
4
|
+
import { ContactTitlePipe, getContactTitle, } from '../../pipes/contact-title.pipe';
|
|
5
|
+
import { ErrorLogger } from '@sneat/core';
|
|
6
|
+
import { InviteService } from '@sneat/contactus-services';
|
|
7
|
+
import { throwError } from 'rxjs';
|
|
8
|
+
import * as i0 from "@angular/core";
|
|
9
|
+
import * as i1 from "@angular/forms";
|
|
10
|
+
export class EncodeSmsText {
|
|
11
|
+
transform(text) {
|
|
12
|
+
return encodeURIComponent(text);
|
|
13
|
+
}
|
|
14
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: EncodeSmsText, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
15
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.2.0", ngImport: i0, type: EncodeSmsText, isStandalone: true, name: "encodeSmsText" }); }
|
|
16
|
+
}
|
|
17
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: EncodeSmsText, decorators: [{
|
|
18
|
+
type: Pipe,
|
|
19
|
+
args: [{ name: 'encodeSmsText' }]
|
|
20
|
+
}] });
|
|
21
|
+
export class InviteModalComponent {
|
|
22
|
+
constructor() {
|
|
23
|
+
this.errorLogger = inject(ErrorLogger);
|
|
24
|
+
this.modalController = inject(ModalController);
|
|
25
|
+
this.toastController = inject(ToastController);
|
|
26
|
+
this.inviteService = inject(InviteService);
|
|
27
|
+
this.tab = 'email';
|
|
28
|
+
this.creatingInvite = false;
|
|
29
|
+
this.email = new FormControl('', [
|
|
30
|
+
Validators.required,
|
|
31
|
+
Validators.email,
|
|
32
|
+
]);
|
|
33
|
+
this.phone = new FormControl('', Validators.required);
|
|
34
|
+
this.message = new FormControl('');
|
|
35
|
+
this.emailForm = new UntypedFormGroup({
|
|
36
|
+
email: this.email,
|
|
37
|
+
message: this.message,
|
|
38
|
+
});
|
|
39
|
+
this.smsForm = new UntypedFormGroup({
|
|
40
|
+
phone: this.phone,
|
|
41
|
+
message: this.message,
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
async close() {
|
|
45
|
+
await this.modalController.dismiss();
|
|
46
|
+
}
|
|
47
|
+
getInviteText(invite) {
|
|
48
|
+
if (!this.member) {
|
|
49
|
+
throw new Error('!this.member');
|
|
50
|
+
}
|
|
51
|
+
const receiver = getContactTitle(this.member);
|
|
52
|
+
let m = `Hi ${receiver}, please join our family @ Sneat.app - https://sneat.app/pwa/join/family?id=${invite.id}#pin=${invite.pin}`;
|
|
53
|
+
if (this.message.value) {
|
|
54
|
+
m += '\n\n' + this.message.value;
|
|
55
|
+
}
|
|
56
|
+
return m;
|
|
57
|
+
}
|
|
58
|
+
composeInvite(channel, protocol, address) {
|
|
59
|
+
this.creatingInvite = true;
|
|
60
|
+
switch (protocol) {
|
|
61
|
+
case 'sms':
|
|
62
|
+
this.smsForm.disable();
|
|
63
|
+
break;
|
|
64
|
+
case 'mailto':
|
|
65
|
+
this.emailForm.disable();
|
|
66
|
+
break;
|
|
67
|
+
}
|
|
68
|
+
this.createInvite({ channel, address }).subscribe({
|
|
69
|
+
next: (response) => {
|
|
70
|
+
const m = this.getInviteText(response.invite);
|
|
71
|
+
const body = encodeURIComponent(m);
|
|
72
|
+
const url = protocol +
|
|
73
|
+
`:${address}?subject=You+are+invited+to+join+${this.space?.type}&body=${body}`;
|
|
74
|
+
this.creatingInvite = false;
|
|
75
|
+
switch (protocol) {
|
|
76
|
+
case 'sms':
|
|
77
|
+
this.smsForm.enable();
|
|
78
|
+
break;
|
|
79
|
+
case 'mailto':
|
|
80
|
+
this.emailForm.enable();
|
|
81
|
+
break;
|
|
82
|
+
}
|
|
83
|
+
window.open(url);
|
|
84
|
+
},
|
|
85
|
+
error: (err) => {
|
|
86
|
+
this.creatingInvite = false;
|
|
87
|
+
switch (protocol) {
|
|
88
|
+
case 'sms':
|
|
89
|
+
this.smsForm.enable();
|
|
90
|
+
break;
|
|
91
|
+
case 'mailto':
|
|
92
|
+
this.emailForm.enable();
|
|
93
|
+
break;
|
|
94
|
+
}
|
|
95
|
+
this.errorLogger.logError(err, 'failed to create an invite for SMS channel');
|
|
96
|
+
},
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
composeEmail() {
|
|
100
|
+
this.composeInvite('email', 'mailto', this.email.value || '');
|
|
101
|
+
}
|
|
102
|
+
composeSMS() {
|
|
103
|
+
this.composeInvite('sms', 'sms', this.phone.value || '');
|
|
104
|
+
}
|
|
105
|
+
sendInvite() {
|
|
106
|
+
if (!this.space) {
|
|
107
|
+
this.errorLogger.logError('can not send invite without team context');
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
if (!this.member) {
|
|
111
|
+
this.errorLogger.logError('can not send invite without member context');
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
switch (this.tab) {
|
|
115
|
+
case 'email':
|
|
116
|
+
this.emailForm.markAllAsTouched();
|
|
117
|
+
break;
|
|
118
|
+
case 'sms':
|
|
119
|
+
this.smsForm.markAllAsTouched();
|
|
120
|
+
break;
|
|
121
|
+
}
|
|
122
|
+
if (this.tab === 'email' && !this.email.value) {
|
|
123
|
+
this.error = 'Email address is required';
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
if (this.tab === 'sms' && !this.phone.value) {
|
|
127
|
+
this.error = 'Phone number is required';
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
const address = this.tab === 'email' ? this.email.value : this.phone.value;
|
|
131
|
+
this.createInvite({
|
|
132
|
+
channel: this.tab,
|
|
133
|
+
address: address || '',
|
|
134
|
+
send: true,
|
|
135
|
+
}).subscribe({
|
|
136
|
+
next: async () => {
|
|
137
|
+
// console.log('personal invite created:', response);
|
|
138
|
+
await this.showToast('Invite has been created and will be sent shortly', 2000);
|
|
139
|
+
await this.modalController.dismiss();
|
|
140
|
+
},
|
|
141
|
+
error: this.errorLogger.logErrorHandler('failed to create an invite for a member'),
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
createInvite(to) {
|
|
145
|
+
if (!this.space) {
|
|
146
|
+
return throwError(() => 'can not create invite without team context');
|
|
147
|
+
}
|
|
148
|
+
if (!this.member) {
|
|
149
|
+
return throwError(() => 'can not create invite without member context');
|
|
150
|
+
}
|
|
151
|
+
const request = {
|
|
152
|
+
spaceID: this.space.id,
|
|
153
|
+
to: {
|
|
154
|
+
...to,
|
|
155
|
+
memberID: this.member.id,
|
|
156
|
+
},
|
|
157
|
+
message: this.message.value || '',
|
|
158
|
+
};
|
|
159
|
+
return this.inviteService.createInviteForMember(request);
|
|
160
|
+
}
|
|
161
|
+
async copyLinkToClipboard() {
|
|
162
|
+
if (!this.link) {
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
await navigator.clipboard.writeText(this.link);
|
|
166
|
+
await this.showToast('Invite link has been copied to your clipboard');
|
|
167
|
+
}
|
|
168
|
+
async copyLinkWithInviteTextToClipboard() {
|
|
169
|
+
if (!this.link) {
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
await navigator.clipboard.writeText(this.link);
|
|
173
|
+
await this.showToast('Invite text with a link has been copied to your clipboard');
|
|
174
|
+
}
|
|
175
|
+
async showToast(message, duration = 1500) {
|
|
176
|
+
await this.modalController.dismiss();
|
|
177
|
+
const toast = await this.toastController.create({
|
|
178
|
+
message,
|
|
179
|
+
duration,
|
|
180
|
+
position: 'middle',
|
|
181
|
+
keyboardClose: true,
|
|
182
|
+
color: 'tertiary',
|
|
183
|
+
buttons: [{ role: 'cancel', icon: 'close' }],
|
|
184
|
+
});
|
|
185
|
+
await toast.present();
|
|
186
|
+
}
|
|
187
|
+
onTabChanged() {
|
|
188
|
+
if (this.tab === 'link' && !this.link) {
|
|
189
|
+
this.generateLink();
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
generateLink() {
|
|
193
|
+
// console.log('generateLink()', this.space, this.member);
|
|
194
|
+
if (!this.space) {
|
|
195
|
+
return;
|
|
196
|
+
}
|
|
197
|
+
if (!this.member) {
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
const request = {
|
|
201
|
+
spaceID: this.space.id,
|
|
202
|
+
to: {
|
|
203
|
+
channel: 'link',
|
|
204
|
+
memberID: this.member.id,
|
|
205
|
+
},
|
|
206
|
+
message: this.message.value || '',
|
|
207
|
+
};
|
|
208
|
+
this.inviteService.getInviteLinkForMember(request).subscribe({
|
|
209
|
+
next: (response) => {
|
|
210
|
+
// console.log('response', response);
|
|
211
|
+
const { id, pin } = response.invite;
|
|
212
|
+
const host = location.host.startsWith('localhost:')
|
|
213
|
+
? location.host
|
|
214
|
+
: 'sneat.app/pwa';
|
|
215
|
+
const protocol = location.host.startsWith('localhost:')
|
|
216
|
+
? 'http'
|
|
217
|
+
: 'https';
|
|
218
|
+
this.link = `${protocol}://${host}/join/${this.space?.brief?.type}?id=${id}#pin=${pin}`;
|
|
219
|
+
},
|
|
220
|
+
error: this.errorLogger.logErrorHandler('failed to generate an invite link'),
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: InviteModalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
224
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: InviteModalComponent, isStandalone: true, selector: "sneat-invite-modal", inputs: { space: "space", member: "member" }, providers: [InviteService], ngImport: i0, template: "<ion-header>\n <ion-toolbar color=\"primary\">\n <ion-title>\n @if (member) {\n Invite {{ member | contactTitle }} to join\n } @else {\n Invite member to join\n }\n </ion-title>\n <ion-buttons slot=\"end\">\n <ion-button (click)=\"close()\">\n <ion-icon name=\"close-outline\" />\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n<ion-content>\n <ion-segment [(ngModel)]=\"tab\" (ionChange)=\"onTabChanged()\">\n <ion-segment-button value=\"email\">By Email</ion-segment-button>\n <ion-segment-button value=\"sms\">By SMS</ion-segment-button>\n <ion-segment-button value=\"link\">Get link</ion-segment-button>\n </ion-segment>\n <form>\n <ion-item>\n @if (tab === \"email\") {\n <ion-input\n placeholder=\"email@address\"\n label=\"To\"\n labelPlacement=\"stacked\"\n [required]=\"true\"\n [formControl]=\"email\"\n />\n }\n @if (tab === \"sms\") {\n <ion-input\n label=\"Invite link\"\n labelPlacement=\"stacked\"\n placeholder=\"phone #\"\n [formControl]=\"phone\"\n />\n }\n @if (tab === \"link\") {\n <ion-input\n label=\"Invite link\"\n labelPlacement=\"stacked\"\n readonly=\"readonly\"\n [disabled]=\"!link\"\n [value]=\"link ?? 'Generating...'\"\n [color]=\"link ? 'primary' : 'medium'\"\n />\n @if (link) {\n <ion-buttons slot=\"end\">\n <ion-button color=\"medium\" (click)=\"copyLinkToClipboard()\">\n <ion-icon name=\"copy-outline\" />\n </ion-button>\n </ion-buttons>\n } @else {\n <ion-spinner color=\"warning\" slot=\"end\" name=\"lines\"></ion-spinner>\n }\n }\n </ion-item>\n <ion-item>\n <ion-textarea\n [formControl]=\"message\"\n maxlength=\"100\"\n label=\"Message\"\n labelPlacement=\"stacked\"\n />\n </ion-item>\n @switch (tab) {\n @case (\"email\") {\n <ion-card-content>\n <p>\n @if (!email.value) {\n <ion-text color=\"danger\"\n >Email address is required for sending an invite.</ion-text\n >\n }\n @if (email.value && !email.valid) {\n <ion-text color=\"danger\">\n A valid email address is required for sending an invite.\n </ion-text>\n }\n </p>\n <ion-button (click)=\"sendInvite()\" [disabled]=\"!email.valid\">\n <ion-icon name=\"mail-outline\" slot=\"start\" />\n <ion-label>Send invite</ion-label>\n </ion-button>\n <ion-button\n [disabled]=\"true\"\n fill=\"clear\"\n color=\"medium\"\n style=\"text-transform: none\"\n >or\n </ion-button>\n <ion-button\n (click)=\"composeEmail()\"\n fill=\"outline\"\n [disabled]=\"!email.valid\"\n >\n <ion-icon name=\"mail-outline\" slot=\"start\" />\n <ion-label>Compose email</ion-label>\n </ion-button>\n </ion-card-content>\n }\n @case (\"sms\") {\n <ion-card-content>\n <ion-button\n style=\"text-transform: none\"\n fill=\"outline\"\n (click)=\"composeSMS()\"\n >\n <ion-icon name=\"phone-portrait-outline\" slot=\"start\" />\n <ion-label>Compose SMS</ion-label>\n @if (creatingInvite) {\n <ion-spinner\n name=\"lines-small\"\n color=\"medium\"\n class=\"ion-margin-start\"\n slot=\"end\"\n />\n }\n </ion-button>\n <p>\n <ion-text color=\"medium\"\n >This works on mobiles or if your computer supports sending SMS\n </ion-text>\n </p>\n </ion-card-content>\n }\n @case (\"link\") {\n <ion-card-content>\n <ion-button\n fill=\"outline\"\n (click)=\"copyLinkWithInviteTextToClipboard()\"\n [disabled]=\"creatingInvite || !link\"\n >\n <ion-icon slot=\"start\" name=\"copy-outline\" />\n <ion-label style=\"text-transform: none\"\n >Copy invite text with a link\n </ion-label>\n </ion-button>\n </ion-card-content>\n }\n }\n\n @if (error) {\n <ion-card-content>\n <ion-text class=\"ion-margin\" color=\"danger\">{{ error }}</ion-text>\n </ion-card-content>\n }\n </form>\n</ion-content>\n", dependencies: [{ kind: "component", type: IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { 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: IonContent, selector: "ion-content", inputs: ["color", "fixedSlotPlacement", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: IonSegment, selector: "ion-segment", inputs: ["color", "disabled", "mode", "scrollable", "selectOnFocus", "swipeGesture", "value"] }, { kind: "component", type: IonSegmentButton, selector: "ion-segment-button", inputs: ["contentId", "disabled", "layout", "mode", "type", "value"] }, { kind: "component", type: 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: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1.NgForm, selector: "form:not([ngNoForm]):not([formGroup]):not([formArray]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: IonCardContent, selector: "ion-card-content", inputs: ["mode"] }, { kind: "component", type: IonTextarea, selector: "ion-textarea", inputs: ["autoGrow", "autocapitalize", "autofocus", "clearOnEdit", "color", "cols", "counter", "counterFormatter", "debounce", "disabled", "enterkeyhint", "errorText", "fill", "helperText", "inputmode", "label", "labelPlacement", "maxlength", "minlength", "mode", "name", "placeholder", "readonly", "required", "rows", "shape", "spellcheck", "value", "wrap"] }, { kind: "component", type: IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "component", type: IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "pipe", type: ContactTitlePipe, name: "contactTitle" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
225
|
+
}
|
|
226
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: InviteModalComponent, decorators: [{
|
|
227
|
+
type: Component,
|
|
228
|
+
args: [{ imports: [
|
|
229
|
+
IonHeader,
|
|
230
|
+
IonToolbar,
|
|
231
|
+
IonTitle,
|
|
232
|
+
IonButtons,
|
|
233
|
+
IonButton,
|
|
234
|
+
IonIcon,
|
|
235
|
+
IonContent,
|
|
236
|
+
IonSegment,
|
|
237
|
+
IonSegmentButton,
|
|
238
|
+
IonItem,
|
|
239
|
+
IonInput,
|
|
240
|
+
ReactiveFormsModule,
|
|
241
|
+
FormsModule,
|
|
242
|
+
IonCardContent,
|
|
243
|
+
IonTextarea,
|
|
244
|
+
IonLabel,
|
|
245
|
+
IonText,
|
|
246
|
+
IonSpinner,
|
|
247
|
+
ContactTitlePipe,
|
|
248
|
+
], providers: [InviteService], changeDetection: ChangeDetectionStrategy.OnPush, selector: 'sneat-invite-modal', template: "<ion-header>\n <ion-toolbar color=\"primary\">\n <ion-title>\n @if (member) {\n Invite {{ member | contactTitle }} to join\n } @else {\n Invite member to join\n }\n </ion-title>\n <ion-buttons slot=\"end\">\n <ion-button (click)=\"close()\">\n <ion-icon name=\"close-outline\" />\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n<ion-content>\n <ion-segment [(ngModel)]=\"tab\" (ionChange)=\"onTabChanged()\">\n <ion-segment-button value=\"email\">By Email</ion-segment-button>\n <ion-segment-button value=\"sms\">By SMS</ion-segment-button>\n <ion-segment-button value=\"link\">Get link</ion-segment-button>\n </ion-segment>\n <form>\n <ion-item>\n @if (tab === \"email\") {\n <ion-input\n placeholder=\"email@address\"\n label=\"To\"\n labelPlacement=\"stacked\"\n [required]=\"true\"\n [formControl]=\"email\"\n />\n }\n @if (tab === \"sms\") {\n <ion-input\n label=\"Invite link\"\n labelPlacement=\"stacked\"\n placeholder=\"phone #\"\n [formControl]=\"phone\"\n />\n }\n @if (tab === \"link\") {\n <ion-input\n label=\"Invite link\"\n labelPlacement=\"stacked\"\n readonly=\"readonly\"\n [disabled]=\"!link\"\n [value]=\"link ?? 'Generating...'\"\n [color]=\"link ? 'primary' : 'medium'\"\n />\n @if (link) {\n <ion-buttons slot=\"end\">\n <ion-button color=\"medium\" (click)=\"copyLinkToClipboard()\">\n <ion-icon name=\"copy-outline\" />\n </ion-button>\n </ion-buttons>\n } @else {\n <ion-spinner color=\"warning\" slot=\"end\" name=\"lines\"></ion-spinner>\n }\n }\n </ion-item>\n <ion-item>\n <ion-textarea\n [formControl]=\"message\"\n maxlength=\"100\"\n label=\"Message\"\n labelPlacement=\"stacked\"\n />\n </ion-item>\n @switch (tab) {\n @case (\"email\") {\n <ion-card-content>\n <p>\n @if (!email.value) {\n <ion-text color=\"danger\"\n >Email address is required for sending an invite.</ion-text\n >\n }\n @if (email.value && !email.valid) {\n <ion-text color=\"danger\">\n A valid email address is required for sending an invite.\n </ion-text>\n }\n </p>\n <ion-button (click)=\"sendInvite()\" [disabled]=\"!email.valid\">\n <ion-icon name=\"mail-outline\" slot=\"start\" />\n <ion-label>Send invite</ion-label>\n </ion-button>\n <ion-button\n [disabled]=\"true\"\n fill=\"clear\"\n color=\"medium\"\n style=\"text-transform: none\"\n >or\n </ion-button>\n <ion-button\n (click)=\"composeEmail()\"\n fill=\"outline\"\n [disabled]=\"!email.valid\"\n >\n <ion-icon name=\"mail-outline\" slot=\"start\" />\n <ion-label>Compose email</ion-label>\n </ion-button>\n </ion-card-content>\n }\n @case (\"sms\") {\n <ion-card-content>\n <ion-button\n style=\"text-transform: none\"\n fill=\"outline\"\n (click)=\"composeSMS()\"\n >\n <ion-icon name=\"phone-portrait-outline\" slot=\"start\" />\n <ion-label>Compose SMS</ion-label>\n @if (creatingInvite) {\n <ion-spinner\n name=\"lines-small\"\n color=\"medium\"\n class=\"ion-margin-start\"\n slot=\"end\"\n />\n }\n </ion-button>\n <p>\n <ion-text color=\"medium\"\n >This works on mobiles or if your computer supports sending SMS\n </ion-text>\n </p>\n </ion-card-content>\n }\n @case (\"link\") {\n <ion-card-content>\n <ion-button\n fill=\"outline\"\n (click)=\"copyLinkWithInviteTextToClipboard()\"\n [disabled]=\"creatingInvite || !link\"\n >\n <ion-icon slot=\"start\" name=\"copy-outline\" />\n <ion-label style=\"text-transform: none\"\n >Copy invite text with a link\n </ion-label>\n </ion-button>\n </ion-card-content>\n }\n }\n\n @if (error) {\n <ion-card-content>\n <ion-text class=\"ion-margin\" color=\"danger\">{{ error }}</ion-text>\n </ion-card-content>\n }\n </form>\n</ion-content>\n" }]
|
|
249
|
+
}], propDecorators: { space: [{
|
|
250
|
+
type: Input,
|
|
251
|
+
args: [{ required: true }]
|
|
252
|
+
}], member: [{
|
|
253
|
+
type: Input
|
|
254
|
+
}] } });
|
|
255
|
+
//# sourceMappingURL=invite-modal.component.js.map
|