@softheon/armature 15.21.2 → 17.1.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/README.md +142 -18
- package/assets/styles/_utility.scss +35 -0
- package/assets/styles/material-overrides.scss +0 -1
- package/assets/styles/sof-styles.scss +8 -7
- package/{esm2020 → esm2022}/lib/alert-banner/alert-banner-api.mjs +9 -9
- package/{esm2020 → esm2022}/lib/alert-banner/alert-banner.module.mjs +41 -41
- package/{esm2020 → esm2022}/lib/alert-banner/components/alert-banner/alert-banner.component.mjs +83 -83
- package/{esm2020 → esm2022}/lib/alert-banner/models/alert-banner-config.mjs +1 -1
- package/{esm2020 → esm2022}/lib/alert-banner/models/alert-banner-context.mjs +1 -1
- package/{esm2020 → esm2022}/lib/alert-banner/models/constants.mjs +15 -15
- package/{esm2020 → esm2022}/lib/alert-banner/services/alert-banner.service.mjs +44 -44
- package/esm2022/lib/armature.module.mjs +176 -0
- package/{esm2020 → esm2022}/lib/base-components/base-component-api.mjs +14 -14
- package/{esm2020 → esm2022}/lib/base-components/base-component.module.mjs +123 -123
- package/{esm2020 → esm2022}/lib/base-components/sof-alert/sof-alert.component.mjs +79 -79
- package/{esm2020 → esm2022}/lib/base-components/sof-badge/sof-badge.component.mjs +49 -49
- package/esm2022/lib/base-components/sof-banner/sof-banner.component.mjs +49 -0
- package/{esm2020 → esm2022}/lib/base-components/sof-button-toggle-group/sof-button-toggle-group.component.mjs +188 -188
- package/{esm2020 → esm2022}/lib/base-components/sof-confirm-address/sof-confirm-address.component.mjs +59 -59
- package/esm2022/lib/base-components/sof-image-checkbox/sof-image-checkbox.component.mjs +58 -0
- package/esm2022/lib/base-components/sof-modal/sof-modal.component.mjs +57 -0
- package/esm2022/lib/base-components/sof-progress-bar/sof-progress-bar.component.mjs +79 -0
- package/{esm2020 → esm2022}/lib/base-components/sof-radio-card/sof-radio-card.component.mjs +35 -35
- package/{esm2020 → esm2022}/lib/base-components/sof-simple-alert/sof-simple-alert.component.mjs +49 -49
- package/esm2022/lib/base-components/sof-star-rating/sof-star-rating.component.mjs +40 -0
- package/{esm2020 → esm2022}/lib/component-save-print/components/component-save-print/component-save-print.component.mjs +91 -91
- package/{esm2020 → esm2022}/lib/component-save-print/services/component-save-print.service.mjs +30 -30
- package/esm2022/lib/component-save-print/sof-ar-component-save-print.module.mjs +29 -0
- package/{esm2020 → esm2022}/lib/core/client-generated/api/session.service.mjs +242 -242
- package/{esm2020 → esm2022}/lib/core/client-generated/configuration.mjs +58 -58
- package/{esm2020 → esm2022}/lib/core/client-generated/encoder.mjs +16 -16
- package/{esm2020 → esm2022}/lib/core/client-generated/model/applicationUserModel.mjs +19 -19
- package/{esm2020 → esm2022}/lib/core/client-generated/model/assertedUserModel.mjs +1 -1
- package/{esm2020 → esm2022}/lib/core/client-generated/model/brandingModel.mjs +1 -1
- package/{esm2020 → esm2022}/lib/core/client-generated/model/errorModel.mjs +12 -12
- package/{esm2020 → esm2022}/lib/core/client-generated/model/folderLink.mjs +12 -12
- package/{esm2020 → esm2022}/lib/core/client-generated/model/identityProfile.mjs +1 -1
- package/{esm2020 → esm2022}/lib/core/client-generated/model/models.mjs +19 -19
- package/{esm2020 → esm2022}/lib/core/client-generated/model/oAuthModel.mjs +12 -12
- package/{esm2020 → esm2022}/lib/core/client-generated/model/preferencesRow.mjs +12 -12
- package/{esm2020 → esm2022}/lib/core/client-generated/model/rolesRow.mjs +12 -12
- package/{esm2020 → esm2022}/lib/core/client-generated/model/sessionGetResponseModel.mjs +1 -1
- package/{esm2020 → esm2022}/lib/core/client-generated/model/sessionPostRequestModel.mjs +1 -1
- package/{esm2020 → esm2022}/lib/core/client-generated/model/sessionPostResponseModel.mjs +1 -1
- package/{esm2020 → esm2022}/lib/core/client-generated/model/sessionPutRequestModel.mjs +1 -1
- package/{esm2020 → esm2022}/lib/core/client-generated/model/sessionPutResponseModel.mjs +1 -1
- package/{esm2020 → esm2022}/lib/core/client-generated/model/sessionResponseModel.mjs +1 -1
- package/{esm2020 → esm2022}/lib/core/client-generated/model/settingsProfile.mjs +1 -1
- package/{esm2020 → esm2022}/lib/core/client-generated/model/themePaletteColorsModel.mjs +12 -12
- package/{esm2020 → esm2022}/lib/core/client-generated/model/themePaletteModel.mjs +1 -1
- package/{esm2020 → esm2022}/lib/core/client-generated/model/trackingModel.mjs +12 -12
- package/{esm2020 → esm2022}/lib/core/client-generated/model/validationRecordsRow.mjs +12 -12
- package/{esm2020 → esm2022}/lib/core/client-generated/variables.mjs +8 -8
- package/{esm2020 → esm2022}/lib/core/components/app-template/app-template.component.mjs +250 -250
- package/{esm2020 → esm2022}/lib/core/functions/guid.mjs +10 -10
- package/{esm2020 → esm2022}/lib/core/functions/naming-convention.mjs +32 -32
- package/{esm2020 → esm2022}/lib/core/functions/route-to-pre-login-route.mjs +12 -12
- package/{esm2020 → esm2022}/lib/core/initializer/abstract-startup-service.mjs +3 -3
- package/{esm2020 → esm2022}/lib/core/initializer/initializer.service.mjs +286 -286
- package/{esm2020 → esm2022}/lib/core/interceptors/armature-auth-token-append.interceptor.mjs +73 -73
- package/{esm2020 → esm2022}/lib/core/models/base-config.mjs +1 -1
- package/{esm2020 → esm2022}/lib/core/models/constants.mjs +12 -12
- package/{esm2020 → esm2022}/lib/core/models/data-store-config.mjs +3 -3
- package/{esm2020 → esm2022}/lib/core/models/header-config.mjs +1 -1
- package/{esm2020 → esm2022}/lib/core/models/http-verbs.mjs +8 -8
- package/{esm2020 → esm2022}/lib/core/models/navigation-config.mjs +1 -1
- package/{esm2020 → esm2022}/lib/core/models/oidc-auth-settings.mjs +1 -1
- package/{esm2020 → esm2022}/lib/core/models/route-path.mjs +6 -6
- package/{esm2020 → esm2022}/lib/core/models/session-config.mjs +3 -3
- package/{esm2020 → esm2022}/lib/core/models/styles.mjs +1 -1
- package/{esm2020 → esm2022}/lib/core/models/subdomain-config.mjs +1 -1
- package/{esm2020 → esm2022}/lib/core/models/typed-session.mjs +3 -3
- package/{esm2020 → esm2022}/lib/core/models/user-entity-service-config.mjs +11 -11
- package/{esm2020 → esm2022}/lib/core/services/authorization.service.mjs +175 -175
- package/{esm2020 → esm2022}/lib/core/services/banner.service.mjs +43 -43
- package/{esm2020 → esm2022}/lib/core/services/base-config.service.mjs +32 -32
- package/{esm2020 → esm2022}/lib/core/services/custom-auth-config.service.mjs +3 -3
- package/{esm2020 → esm2022}/lib/core/services/default-config.service.mjs +19 -19
- package/{esm2020 → esm2022}/lib/core/services/session.service.mjs +385 -385
- package/{esm2020 → esm2022}/lib/core/services/user-entity.service.mjs +140 -140
- package/{esm2020 → esm2022}/lib/distributed-cache/client-generated/api/api.mjs +3 -3
- package/{esm2020 → esm2022}/lib/distributed-cache/client-generated/api/cache.service.mjs +213 -213
- package/{esm2020 → esm2022}/lib/distributed-cache/client-generated/configuration.mjs +58 -58
- package/{esm2020 → esm2022}/lib/distributed-cache/client-generated/encoder.mjs +16 -16
- package/{esm2020 → esm2022}/lib/distributed-cache/client-generated/model/cacheExpirationType.mjs +15 -15
- package/{esm2020 → esm2022}/lib/distributed-cache/client-generated/model/createCacheEntryRequestModel.mjs +1 -1
- package/{esm2020 → esm2022}/lib/distributed-cache/client-generated/model/models.mjs +4 -4
- package/{esm2020 → esm2022}/lib/distributed-cache/client-generated/model/retrieveCacheEntryResponseModel.mjs +12 -12
- package/{esm2020 → esm2022}/lib/distributed-cache/client-generated/model/updateCacheEntryRequestModel.mjs +12 -12
- package/{esm2020 → esm2022}/lib/distributed-cache/client-generated/variables.mjs +8 -8
- package/{esm2020 → esm2022}/lib/distributed-cache/distributed-cache-api.mjs +7 -7
- package/esm2022/lib/distributed-cache/distributed-cache.module.mjs +38 -0
- package/{esm2020 → esm2022}/lib/distributed-cache/models/constants.mjs +2 -2
- package/{esm2020 → esm2022}/lib/distributed-cache/models/policy-person.mjs +8 -8
- package/{esm2020 → esm2022}/lib/distributed-cache/services/server-cache.service.mjs +48 -48
- package/{esm2020 → esm2022}/lib/error/components/error-common/error-common.component.mjs +25 -25
- package/{esm2020 → esm2022}/lib/error/error-api.mjs +6 -6
- package/{esm2020 → esm2022}/lib/error/error.module.mjs +31 -31
- package/{esm2020 → esm2022}/lib/error/models/error-common-config.mjs +7 -7
- package/esm2022/lib/faq/components/faq/faq.component.mjs +40 -0
- package/{esm2020 → esm2022}/lib/faq/faq-api.mjs +7 -7
- package/{esm2020 → esm2022}/lib/faq/faq.module.mjs +41 -41
- package/{esm2020 → esm2022}/lib/faq/models/faq-config.mjs +3 -3
- package/{esm2020 → esm2022}/lib/faq/models/faq.mjs +7 -7
- package/esm2022/lib/feedback-tool/components/feedback-tool/feedback-tool.component.mjs +81 -0
- package/esm2022/lib/feedback-tool/feedback-tool-api.mjs +5 -0
- package/esm2022/lib/feedback-tool/feedback-tool.module.mjs +44 -0
- package/esm2022/lib/footer/components/footer/footer.component.mjs +25 -0
- package/{esm2020 → esm2022}/lib/footer/components/site-map/site-map.component.mjs +25 -25
- package/{esm2020 → esm2022}/lib/footer/footer-api.mjs +9 -9
- package/{esm2020 → esm2022}/lib/footer/footer.module.mjs +45 -45
- package/{esm2020 → esm2022}/lib/footer/models/enum/site-map-direction.mjs +14 -14
- package/{esm2020 → esm2022}/lib/footer/models/footer-config.mjs +3 -3
- package/{esm2020 → esm2022}/lib/footer/models/site-map-models.mjs +1 -1
- package/{esm2020 → esm2022}/lib/forms/components/sof-address/sof-address.component.mjs +110 -110
- package/{esm2020 → esm2022}/lib/forms/directives/alphanumeric/alphanumeric.directive.mjs +78 -78
- package/{esm2020 → esm2022}/lib/forms/directives/input-trim/input-trim.directive.mjs +110 -110
- package/{esm2020 → esm2022}/lib/forms/directives/letters-characters/letters-characters.directive.mjs +87 -87
- package/{esm2020 → esm2022}/lib/forms/directives/letters-only/letters-only.directive.mjs +85 -85
- package/{esm2020 → esm2022}/lib/forms/directives/numbers-only/numbers-only.directive.mjs +55 -55
- package/{esm2020 → esm2022}/lib/forms/forms-api.mjs +19 -19
- package/{esm2020 → esm2022}/lib/forms/forms.module.mjs +87 -87
- package/{esm2020 → esm2022}/lib/forms/models/address.mjs +1 -1
- package/esm2022/lib/forms/models/constants.mjs +10 -0
- package/{esm2020 → esm2022}/lib/forms/models/county.mjs +1 -1
- package/{esm2020 → esm2022}/lib/forms/models/enums/states.mjs +65 -65
- package/{esm2020 → esm2022}/lib/forms/pipes/phone-format.pipe.mjs +33 -33
- package/{esm2020 → esm2022}/lib/forms/services/alert.service.mjs +167 -167
- package/esm2022/lib/header/components/header/header.component.mjs +161 -0
- package/{esm2020 → esm2022}/lib/header/components/mobile-header-menu/mobile-header-menu.component.mjs +39 -39
- package/{esm2020 → esm2022}/lib/header/header-api.mjs +11 -11
- package/{esm2020 → esm2022}/lib/header/header.module.mjs +85 -85
- package/{esm2020 → esm2022}/lib/header/models/header-auth.settings.mjs +31 -31
- package/{esm2020 → esm2022}/lib/header/models/header-language.settings.mjs +1 -1
- package/{esm2020 → esm2022}/lib/header/models/header-theme.settings.mjs +1 -1
- package/{esm2020 → esm2022}/lib/header/models/header.settings.mjs +1 -1
- package/{esm2020 → esm2022}/lib/header/models/mobile-header-nav.settings.mjs +1 -1
- package/esm2022/lib/navigation/components/navigation/navigation.component.mjs +556 -0
- package/{esm2020 → esm2022}/lib/navigation/models/nav-theme.settings.mjs +1 -1
- package/{esm2020 → esm2022}/lib/navigation/models/nav.settings.mjs +1 -1
- package/{esm2020 → esm2022}/lib/navigation/models/navigation.mjs +1 -1
- package/{esm2020 → esm2022}/lib/navigation/navigation-api.mjs +8 -8
- package/{esm2020 → esm2022}/lib/navigation/navigation.module.mjs +126 -126
- package/{esm2020 → esm2022}/lib/oauth/models/constants.mjs +5 -5
- package/{esm2020 → esm2022}/lib/oauth/models/generated/accountManagementAssertionModel.mjs +1 -1
- package/{esm2020 → esm2022}/lib/oauth/models/generated/accountManagementRefreshRequestModel.mjs +1 -1
- package/{esm2020 → esm2022}/lib/oauth/models/generated/accountManagementResponseModel.mjs +1 -1
- package/{esm2020 → esm2022}/lib/oauth/models/generated/coverageDetail.mjs +18 -18
- package/{esm2020 → esm2022}/lib/oauth/models/generated/finance.mjs +12 -12
- package/{esm2020 → esm2022}/lib/oauth/models/generated/iSsoResponseModel.mjs +12 -12
- package/{esm2020 → esm2022}/lib/oauth/models/generated/iSsoResponseModelAccountManagementAssertionModel.mjs +1 -1
- package/{esm2020 → esm2022}/lib/oauth/models/generated/person.mjs +12 -12
- package/{esm2020 → esm2022}/lib/oauth/models/generated/policy.mjs +1 -1
- package/{esm2020 → esm2022}/lib/oauth/models/generated/refreshResponseModel.mjs +12 -12
- package/{esm2020 → esm2022}/lib/oauth/models/hybrid-saml-oauth-config.mjs +3 -3
- package/{esm2020 → esm2022}/lib/oauth/oauth-api.mjs +14 -14
- package/{esm2020 → esm2022}/lib/oauth/oauth.module.mjs +29 -29
- package/{esm2020 → esm2022}/lib/oauth/services/hybrid-saml-oauth.service.mjs +201 -201
- package/{esm2020 → esm2022}/lib/rbac/directives/rbac-action.directive.mjs +50 -50
- package/{esm2020 → esm2022}/lib/rbac/models/access-token-claims.mjs +22 -22
- package/{esm2020 → esm2022}/lib/rbac/models/constants.mjs +3 -3
- package/{esm2020 → esm2022}/lib/rbac/models/decoded-access-token.mjs +68 -68
- package/{esm2020 → esm2022}/lib/rbac/models/rbac-config.mjs +3 -3
- package/{esm2020 → esm2022}/lib/rbac/models/role-access.mjs +9 -9
- package/{esm2020 → esm2022}/lib/rbac/rbac-api.mjs +14 -14
- package/{esm2020 → esm2022}/lib/rbac/rbac.module.mjs +51 -51
- package/{esm2020 → esm2022}/lib/rbac/services/ar-role-nav.service.mjs +104 -104
- package/{esm2020 → esm2022}/lib/rbac/services/oauth2-role.service.mjs +114 -114
- package/{esm2020 → esm2022}/lib/rbac/services/role-nav.service.mjs +3 -3
- package/{esm2020 → esm2022}/lib/rbac/services/tokens.mjs +3 -3
- package/{esm2020 → esm2022}/lib/resize-panels/components/resize-panels/resize-panels.component.mjs +156 -156
- package/{esm2020 → esm2022}/lib/resize-panels/models/resize-event.mjs +1 -1
- package/{esm2020 → esm2022}/lib/resize-panels/resize-panels-api.mjs +4 -4
- package/{esm2020 → esm2022}/lib/resize-panels/resize-panels.module.mjs +23 -23
- package/{esm2020 → esm2022}/lib/rum/models/arm-error.mjs +28 -28
- package/{esm2020 → esm2022}/lib/rum/models/rum-config.mjs +3 -3
- package/{esm2020 → esm2022}/lib/rum/rum-api.mjs +9 -9
- package/{esm2020 → esm2022}/lib/rum/rum.module.mjs +48 -48
- package/{esm2020 → esm2022}/lib/rum/services/rum.service.mjs +115 -115
- package/{esm2020 → esm2022}/lib/rum/services/shared-error.service.mjs +45 -45
- package/{esm2020 → esm2022}/lib/rum/services/softheon-error-handler.service.mjs +76 -76
- package/{esm2020 → esm2022}/lib/saml/components/redirect-saml/redirect-saml.component.mjs +79 -79
- package/{esm2020 → esm2022}/lib/saml/models/i-saml-request.mjs +1 -1
- package/{esm2020 → esm2022}/lib/saml/models/i-saml-response.mjs +1 -1
- package/{esm2020 → esm2022}/lib/saml/models/redirect-saml-request.mjs +3 -3
- package/{esm2020 → esm2022}/lib/saml/models/sso-gateway-model.mjs +3 -3
- package/{esm2020 → esm2022}/lib/saml/saml-api.mjs +14 -14
- package/{esm2020 → esm2022}/lib/saml/saml.module.mjs +43 -43
- package/{esm2020 → esm2022}/lib/saml/services/entry/abstract-saml-entry.service.mjs +3 -3
- package/{esm2020 → esm2022}/lib/saml/services/entry/sso-gateway-entry.service.mjs +36 -36
- package/{esm2020 → esm2022}/lib/saml/services/send-off/abstract-saml.service.mjs +3 -3
- package/{esm2020 → esm2022}/lib/saml/services/send-off/saml.service.mjs +39 -39
- package/{esm2020 → esm2022}/lib/sof-pipe/constants/constants.mjs +16 -16
- package/{esm2020 → esm2022}/lib/sof-pipe/models/sof-date-pipe-format.mjs +1 -1
- package/{esm2020 → esm2022}/lib/sof-pipe/pipes/sof-blank/sof-blank.pipe.mjs +39 -39
- package/{esm2020 → esm2022}/lib/sof-pipe/pipes/sof-date/sof-date.pipe.mjs +59 -59
- package/{esm2020 → esm2022}/lib/sof-pipe/pipes/sof-ssn/sof-ssn.pipe.mjs +28 -28
- package/{esm2020 → esm2022}/lib/sof-pipe/sof-pipe.api.mjs +8 -8
- package/{esm2020 → esm2022}/lib/sof-pipe/sof-pipe.module.mjs +39 -39
- package/{esm2020 → esm2022}/lib/theming/directives/css-override.directive.mjs +69 -69
- package/{esm2020 → esm2022}/lib/theming/models/css-override.mjs +10 -10
- package/{esm2020 → esm2022}/lib/theming/services/theme.service.mjs +169 -169
- package/{esm2020 → esm2022}/lib/theming/theme-api.mjs +5 -5
- package/{esm2020 → esm2022}/lib/theming/theme.module.mjs +31 -31
- package/{esm2020 → esm2022}/public-api.mjs +52 -51
- package/{esm2020 → esm2022}/softheon-armature.mjs +4 -4
- package/fesm2022/softheon-armature.mjs +7439 -0
- package/fesm2022/softheon-armature.mjs.map +1 -0
- package/index.d.ts +5 -5
- package/lib/alert-banner/alert-banner-api.d.ts +7 -7
- package/lib/alert-banner/alert-banner.module.d.ts +11 -11
- package/lib/alert-banner/components/alert-banner/alert-banner.component.d.ts +40 -40
- package/lib/alert-banner/models/alert-banner-config.d.ts +20 -20
- package/lib/alert-banner/models/alert-banner-context.d.ts +18 -18
- package/lib/alert-banner/models/constants.d.ts +15 -15
- package/lib/alert-banner/services/alert-banner.service.d.ts +28 -28
- package/lib/armature.module.d.ts +46 -46
- package/lib/base-components/base-component-api.d.ts +13 -13
- package/lib/base-components/base-component.module.d.ts +35 -35
- package/lib/base-components/sof-alert/sof-alert.component.d.ts +40 -40
- package/lib/base-components/sof-badge/sof-badge.component.d.ts +26 -26
- package/lib/base-components/sof-banner/sof-banner.component.d.ts +34 -34
- package/lib/base-components/sof-button-toggle-group/sof-button-toggle-group.component.d.ts +100 -100
- package/lib/base-components/sof-confirm-address/sof-confirm-address.component.d.ts +61 -61
- package/lib/base-components/sof-image-checkbox/sof-image-checkbox.component.d.ts +28 -28
- package/lib/base-components/sof-modal/sof-modal.component.d.ts +51 -51
- package/lib/base-components/sof-progress-bar/sof-progress-bar.component.d.ts +40 -40
- package/lib/base-components/sof-radio-card/sof-radio-card.component.d.ts +20 -20
- package/lib/base-components/sof-simple-alert/sof-simple-alert.component.d.ts +29 -29
- package/lib/base-components/sof-star-rating/sof-star-rating.component.d.ts +25 -25
- package/lib/component-save-print/components/component-save-print/component-save-print.component.d.ts +46 -46
- package/lib/component-save-print/services/component-save-print.service.d.ts +18 -18
- package/lib/component-save-print/sof-ar-component-save-print.module.d.ts +9 -9
- package/lib/core/client-generated/api/session.service.d.ts +94 -94
- package/lib/core/client-generated/configuration.d.ts +48 -48
- package/lib/core/client-generated/encoder.d.ts +10 -10
- package/lib/core/client-generated/model/applicationUserModel.d.ts +54 -54
- package/lib/core/client-generated/model/assertedUserModel.d.ts +25 -25
- package/lib/core/client-generated/model/brandingModel.d.ts +33 -33
- package/lib/core/client-generated/model/errorModel.d.ts +24 -24
- package/lib/core/client-generated/model/folderLink.d.ts +34 -34
- package/lib/core/client-generated/model/identityProfile.d.ts +82 -82
- package/lib/core/client-generated/model/models.d.ts +19 -19
- package/lib/core/client-generated/model/oAuthModel.d.ts +28 -28
- package/lib/core/client-generated/model/preferencesRow.d.ts +15 -15
- package/lib/core/client-generated/model/rolesRow.d.ts +17 -17
- package/lib/core/client-generated/model/sessionGetResponseModel.d.ts +23 -23
- package/lib/core/client-generated/model/sessionPostRequestModel.d.ts +39 -39
- package/lib/core/client-generated/model/sessionPostResponseModel.d.ts +23 -23
- package/lib/core/client-generated/model/sessionPutRequestModel.d.ts +39 -39
- package/lib/core/client-generated/model/sessionPutResponseModel.d.ts +23 -23
- package/lib/core/client-generated/model/sessionResponseModel.d.ts +43 -43
- package/lib/core/client-generated/model/settingsProfile.d.ts +21 -21
- package/lib/core/client-generated/model/themePaletteColorsModel.d.ts +72 -72
- package/lib/core/client-generated/model/themePaletteModel.d.ts +65 -65
- package/lib/core/client-generated/model/trackingModel.d.ts +24 -24
- package/lib/core/client-generated/model/validationRecordsRow.d.ts +17 -17
- package/lib/core/client-generated/variables.d.ts +8 -8
- package/lib/core/components/app-template/app-template.component.d.ts +61 -61
- package/lib/core/functions/guid.d.ts +4 -4
- package/lib/core/functions/naming-convention.d.ts +6 -6
- package/lib/core/functions/route-to-pre-login-route.d.ts +6 -6
- package/lib/core/initializer/abstract-startup-service.d.ts +5 -5
- package/lib/core/initializer/initializer.service.d.ts +79 -79
- package/lib/core/interceptors/armature-auth-token-append.interceptor.d.ts +31 -31
- package/lib/core/models/base-config.d.ts +18 -18
- package/lib/core/models/constants.d.ts +13 -13
- package/lib/core/models/data-store-config.d.ts +27 -27
- package/lib/core/models/header-config.d.ts +9 -9
- package/lib/core/models/http-verbs.d.ts +10 -10
- package/lib/core/models/navigation-config.d.ts +14 -14
- package/lib/core/models/oidc-auth-settings.d.ts +11 -11
- package/lib/core/models/route-path.d.ts +5 -5
- package/lib/core/models/session-config.d.ts +18 -18
- package/lib/core/models/styles.d.ts +11 -11
- package/lib/core/models/subdomain-config.d.ts +7 -7
- package/lib/core/models/typed-session.d.ts +17 -17
- package/lib/core/models/user-entity-service-config.d.ts +14 -14
- package/lib/core/services/authorization.service.d.ts +54 -54
- package/lib/core/services/banner.service.d.ts +31 -31
- package/lib/core/services/base-config.service.d.ts +21 -21
- package/lib/core/services/custom-auth-config.service.d.ts +6 -6
- package/lib/core/services/default-config.service.d.ts +8 -8
- package/lib/core/services/session.service.d.ts +127 -127
- package/lib/core/services/user-entity.service.d.ts +47 -47
- package/lib/distributed-cache/client-generated/api/api.d.ts +3 -3
- package/lib/distributed-cache/client-generated/api/cache.service.d.ts +72 -72
- package/lib/distributed-cache/client-generated/configuration.d.ts +48 -48
- package/lib/distributed-cache/client-generated/encoder.d.ts +10 -10
- package/lib/distributed-cache/client-generated/model/cacheExpirationType.d.ts +19 -19
- package/lib/distributed-cache/client-generated/model/createCacheEntryRequestModel.d.ts +33 -33
- package/lib/distributed-cache/client-generated/model/models.d.ts +4 -4
- package/lib/distributed-cache/client-generated/model/retrieveCacheEntryResponseModel.d.ts +20 -20
- package/lib/distributed-cache/client-generated/model/updateCacheEntryRequestModel.d.ts +20 -20
- package/lib/distributed-cache/client-generated/variables.d.ts +8 -8
- package/lib/distributed-cache/distributed-cache-api.d.ts +7 -7
- package/lib/distributed-cache/distributed-cache.module.d.ts +8 -8
- package/lib/distributed-cache/models/constants.d.ts +2 -2
- package/lib/distributed-cache/models/policy-person.d.ts +19 -19
- package/lib/distributed-cache/services/server-cache.service.d.ts +72 -72
- package/lib/error/components/error-common/error-common.component.d.ts +14 -14
- package/lib/error/error-api.d.ts +4 -4
- package/lib/error/error.module.d.ts +11 -11
- package/lib/error/models/error-common-config.d.ts +21 -21
- package/lib/faq/components/faq/faq.component.d.ts +19 -19
- package/lib/faq/faq-api.d.ts +5 -5
- package/lib/faq/faq.module.d.ts +15 -15
- package/lib/faq/models/faq-config.d.ts +13 -13
- package/lib/faq/models/faq.d.ts +9 -9
- package/lib/feedback-tool/components/feedback-tool/feedback-tool.component.d.ts +62 -0
- package/lib/feedback-tool/feedback-tool-api.d.ts +3 -0
- package/lib/feedback-tool/feedback-tool.module.d.ts +14 -0
- package/lib/footer/components/footer/footer.component.d.ts +14 -14
- package/lib/footer/components/site-map/site-map.component.d.ts +13 -13
- package/lib/footer/footer-api.d.ts +7 -7
- package/lib/footer/footer.module.d.ts +14 -14
- package/lib/footer/models/enum/site-map-direction.d.ts +13 -13
- package/lib/footer/models/footer-config.d.ts +7 -7
- package/lib/footer/models/site-map-models.d.ts +41 -41
- package/lib/forms/components/sof-address/sof-address.component.d.ts +53 -53
- package/lib/forms/directives/alphanumeric/alphanumeric.directive.d.ts +31 -31
- package/lib/forms/directives/input-trim/input-trim.directive.d.ts +58 -58
- package/lib/forms/directives/letters-characters/letters-characters.directive.d.ts +27 -27
- package/lib/forms/directives/letters-only/letters-only.directive.d.ts +27 -27
- package/lib/forms/directives/numbers-only/numbers-only.directive.d.ts +22 -22
- package/lib/forms/forms-api.d.ts +14 -14
- package/lib/forms/forms.module.d.ts +21 -21
- package/lib/forms/models/address.d.ts +14 -14
- package/lib/forms/models/constants.d.ts +9 -9
- package/lib/forms/models/county.d.ts +13 -13
- package/lib/forms/models/enums/states.d.ts +64 -64
- package/lib/forms/pipes/phone-format.pipe.d.ts +10 -10
- package/lib/forms/services/alert.service.d.ts +60 -60
- package/lib/header/components/header/header.component.d.ts +120 -120
- package/lib/header/components/mobile-header-menu/mobile-header-menu.component.d.ts +26 -26
- package/lib/header/header-api.d.ts +9 -9
- package/lib/header/header.module.d.ts +20 -20
- package/lib/header/models/header-auth.settings.d.ts +30 -30
- package/lib/header/models/header-language.settings.d.ts +10 -10
- package/lib/header/models/header-theme.settings.d.ts +19 -19
- package/lib/header/models/header.settings.d.ts +53 -53
- package/lib/header/models/mobile-header-nav.settings.d.ts +11 -11
- package/lib/navigation/components/navigation/navigation.component.d.ts +200 -200
- package/lib/navigation/models/nav-theme.settings.d.ts +25 -25
- package/lib/navigation/models/nav.settings.d.ts +64 -64
- package/lib/navigation/models/navigation.d.ts +40 -40
- package/lib/navigation/navigation-api.d.ts +6 -6
- package/lib/navigation/navigation.module.d.ts +25 -25
- package/lib/oauth/models/constants.d.ts +6 -6
- package/lib/oauth/models/generated/accountManagementAssertionModel.d.ts +49 -49
- package/lib/oauth/models/generated/accountManagementRefreshRequestModel.d.ts +21 -21
- package/lib/oauth/models/generated/accountManagementResponseModel.d.ts +45 -45
- package/lib/oauth/models/generated/coverageDetail.d.ts +67 -67
- package/lib/oauth/models/generated/finance.d.ts +36 -36
- package/lib/oauth/models/generated/iSsoResponseModel.d.ts +44 -44
- package/lib/oauth/models/generated/iSsoResponseModelAccountManagementAssertionModel.d.ts +45 -45
- package/lib/oauth/models/generated/person.d.ts +53 -53
- package/lib/oauth/models/generated/policy.d.ts +51 -51
- package/lib/oauth/models/generated/refreshResponseModel.d.ts +20 -20
- package/lib/oauth/models/hybrid-saml-oauth-config.d.ts +14 -14
- package/lib/oauth/oauth-api.d.ts +12 -12
- package/lib/oauth/oauth.module.d.ts +9 -9
- package/lib/oauth/services/hybrid-saml-oauth.service.d.ts +59 -59
- package/lib/rbac/directives/rbac-action.directive.d.ts +27 -27
- package/lib/rbac/models/access-token-claims.d.ts +18 -18
- package/lib/rbac/models/constants.d.ts +4 -4
- package/lib/rbac/models/decoded-access-token.d.ts +43 -43
- package/lib/rbac/models/rbac-config.d.ts +15 -15
- package/lib/rbac/models/role-access.d.ts +7 -7
- package/lib/rbac/rbac-api.d.ts +11 -11
- package/lib/rbac/rbac.module.d.ts +19 -19
- package/lib/rbac/services/ar-role-nav.service.d.ts +25 -25
- package/lib/rbac/services/oauth2-role.service.d.ts +51 -51
- package/lib/rbac/services/role-nav.service.d.ts +12 -12
- package/lib/rbac/services/tokens.d.ts +3 -3
- package/lib/resize-panels/components/resize-panels/resize-panels.component.d.ts +64 -64
- package/lib/resize-panels/models/resize-event.d.ts +6 -6
- package/lib/resize-panels/resize-panels-api.d.ts +4 -4
- package/lib/resize-panels/resize-panels.module.d.ts +9 -9
- package/lib/rum/models/arm-error.d.ts +27 -27
- package/lib/rum/models/rum-config.d.ts +9 -9
- package/lib/rum/rum-api.d.ts +7 -7
- package/lib/rum/rum.module.d.ts +14 -14
- package/lib/rum/services/rum.service.d.ts +47 -47
- package/lib/rum/services/shared-error.service.d.ts +27 -27
- package/lib/rum/services/softheon-error-handler.service.d.ts +32 -32
- package/lib/saml/components/redirect-saml/redirect-saml.component.d.ts +41 -41
- package/lib/saml/models/i-saml-request.d.ts +4 -4
- package/lib/saml/models/i-saml-response.d.ts +4 -4
- package/lib/saml/models/redirect-saml-request.d.ts +24 -24
- package/lib/saml/models/sso-gateway-model.d.ts +17 -17
- package/lib/saml/saml-api.d.ts +11 -11
- package/lib/saml/saml.module.d.ts +9 -9
- package/lib/saml/services/entry/abstract-saml-entry.service.d.ts +16 -16
- package/lib/saml/services/entry/sso-gateway-entry.service.d.ts +22 -22
- package/lib/saml/services/send-off/abstract-saml.service.d.ts +20 -20
- package/lib/saml/services/send-off/saml.service.d.ts +32 -32
- package/lib/sof-pipe/constants/constants.d.ts +8 -8
- package/lib/sof-pipe/models/sof-date-pipe-format.d.ts +7 -7
- package/lib/sof-pipe/pipes/sof-blank/sof-blank.pipe.d.ts +19 -19
- package/lib/sof-pipe/pipes/sof-date/sof-date.pipe.d.ts +21 -21
- package/lib/sof-pipe/pipes/sof-ssn/sof-ssn.pipe.d.ts +12 -12
- package/lib/sof-pipe/sof-pipe.api.d.ts +7 -7
- package/lib/sof-pipe/sof-pipe.module.d.ts +10 -10
- package/lib/theming/directives/css-override.directive.d.ts +20 -20
- package/lib/theming/models/css-override.d.ts +15 -15
- package/lib/theming/services/theme.service.d.ts +48 -48
- package/lib/theming/theme-api.d.ts +5 -5
- package/lib/theming/theme.module.d.ts +9 -9
- package/package.json +17 -23
- package/public-api.d.ts +49 -48
- package/esm2020/lib/armature.module.mjs +0 -176
- package/esm2020/lib/base-components/sof-banner/sof-banner.component.mjs +0 -49
- package/esm2020/lib/base-components/sof-image-checkbox/sof-image-checkbox.component.mjs +0 -58
- package/esm2020/lib/base-components/sof-modal/sof-modal.component.mjs +0 -58
- package/esm2020/lib/base-components/sof-progress-bar/sof-progress-bar.component.mjs +0 -79
- package/esm2020/lib/base-components/sof-star-rating/sof-star-rating.component.mjs +0 -40
- package/esm2020/lib/component-save-print/sof-ar-component-save-print.module.mjs +0 -32
- package/esm2020/lib/distributed-cache/distributed-cache.module.mjs +0 -38
- package/esm2020/lib/faq/components/faq/faq.component.mjs +0 -40
- package/esm2020/lib/footer/components/footer/footer.component.mjs +0 -25
- package/esm2020/lib/forms/models/constants.mjs +0 -10
- package/esm2020/lib/header/components/header/header.component.mjs +0 -161
- package/esm2020/lib/navigation/components/navigation/navigation.component.mjs +0 -556
- package/fesm2015/softheon-armature.mjs +0 -7275
- package/fesm2015/softheon-armature.mjs.map +0 -1
- package/fesm2020/softheon-armature.mjs +0 -7332
- package/fesm2020/softheon-armature.mjs.map +0 -1
|
@@ -1,66 +1,66 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The States enum
|
|
3
|
-
*/
|
|
4
|
-
export var States;
|
|
5
|
-
(function (States) {
|
|
6
|
-
States["AL"] = "Alabama";
|
|
7
|
-
States["AK"] = "Alaska";
|
|
8
|
-
States["AS"] = "American Samoa";
|
|
9
|
-
States["AZ"] = "Arizona";
|
|
10
|
-
States["AR"] = "Arkansas";
|
|
11
|
-
States["CA"] = "California";
|
|
12
|
-
States["CO"] = "Colorado";
|
|
13
|
-
States["CT"] = "Connecticut";
|
|
14
|
-
States["DE"] = "Delaware";
|
|
15
|
-
States["DC"] = "District of Columbia";
|
|
16
|
-
States["FL"] = "Florida";
|
|
17
|
-
States["FM"] = "Micronesia";
|
|
18
|
-
States["GA"] = "Georgia";
|
|
19
|
-
States["GU"] = "Guam";
|
|
20
|
-
States["HI"] = "Hawaii";
|
|
21
|
-
States["ID"] = "Idaho";
|
|
22
|
-
States["IL"] = "Illinois";
|
|
23
|
-
States["IN"] = "Indiana";
|
|
24
|
-
States["IA"] = "Iowa";
|
|
25
|
-
States["KS"] = "Kansas";
|
|
26
|
-
States["KY"] = "Kentucky";
|
|
27
|
-
States["LA"] = "Louisiana";
|
|
28
|
-
States["ME"] = "Maine";
|
|
29
|
-
States["MD"] = "Maryland";
|
|
30
|
-
States["MA"] = "Massachusetts";
|
|
31
|
-
States["MH"] = "Marshall Islands";
|
|
32
|
-
States["MI"] = "Michigan";
|
|
33
|
-
States["MN"] = "Minnesota";
|
|
34
|
-
States["MP"] = "Northern Mariana Islands";
|
|
35
|
-
States["MS"] = "Mississippi";
|
|
36
|
-
States["MO"] = "Missouri";
|
|
37
|
-
States["MT"] = "Montana";
|
|
38
|
-
States["NE"] = "Nebraska";
|
|
39
|
-
States["NV"] = "Nevada";
|
|
40
|
-
States["NH"] = "New Hampshire";
|
|
41
|
-
States["NJ"] = "New Jersey";
|
|
42
|
-
States["NM"] = "New Mexico";
|
|
43
|
-
States["NY"] = "New York";
|
|
44
|
-
States["NC"] = "North Carolina";
|
|
45
|
-
States["ND"] = "North Dakota";
|
|
46
|
-
States["OH"] = "Ohio";
|
|
47
|
-
States["OK"] = "Oklahoma";
|
|
48
|
-
States["OR"] = "Oregon";
|
|
49
|
-
States["PA"] = "Pennsylvania";
|
|
50
|
-
States["PR"] = "Puerto Rico";
|
|
51
|
-
States["PW"] = "Palau";
|
|
52
|
-
States["RI"] = "Rhode Island";
|
|
53
|
-
States["SC"] = "South Carolina";
|
|
54
|
-
States["SD"] = "South Dakota";
|
|
55
|
-
States["TN"] = "Tennessee";
|
|
56
|
-
States["TX"] = "Texas";
|
|
57
|
-
States["UT"] = "Utah";
|
|
58
|
-
States["VT"] = "Vermont";
|
|
59
|
-
States["VA"] = "Virginia";
|
|
60
|
-
States["VI"] = "Virgin Islands";
|
|
61
|
-
States["WA"] = "Washington";
|
|
62
|
-
States["WV"] = "West Virginia";
|
|
63
|
-
States["WI"] = "Wisconsin";
|
|
64
|
-
States["WY"] = "Wyoming";
|
|
65
|
-
})(States || (States = {}));
|
|
1
|
+
/**
|
|
2
|
+
* The States enum
|
|
3
|
+
*/
|
|
4
|
+
export var States;
|
|
5
|
+
(function (States) {
|
|
6
|
+
States["AL"] = "Alabama";
|
|
7
|
+
States["AK"] = "Alaska";
|
|
8
|
+
States["AS"] = "American Samoa";
|
|
9
|
+
States["AZ"] = "Arizona";
|
|
10
|
+
States["AR"] = "Arkansas";
|
|
11
|
+
States["CA"] = "California";
|
|
12
|
+
States["CO"] = "Colorado";
|
|
13
|
+
States["CT"] = "Connecticut";
|
|
14
|
+
States["DE"] = "Delaware";
|
|
15
|
+
States["DC"] = "District of Columbia";
|
|
16
|
+
States["FL"] = "Florida";
|
|
17
|
+
States["FM"] = "Micronesia";
|
|
18
|
+
States["GA"] = "Georgia";
|
|
19
|
+
States["GU"] = "Guam";
|
|
20
|
+
States["HI"] = "Hawaii";
|
|
21
|
+
States["ID"] = "Idaho";
|
|
22
|
+
States["IL"] = "Illinois";
|
|
23
|
+
States["IN"] = "Indiana";
|
|
24
|
+
States["IA"] = "Iowa";
|
|
25
|
+
States["KS"] = "Kansas";
|
|
26
|
+
States["KY"] = "Kentucky";
|
|
27
|
+
States["LA"] = "Louisiana";
|
|
28
|
+
States["ME"] = "Maine";
|
|
29
|
+
States["MD"] = "Maryland";
|
|
30
|
+
States["MA"] = "Massachusetts";
|
|
31
|
+
States["MH"] = "Marshall Islands";
|
|
32
|
+
States["MI"] = "Michigan";
|
|
33
|
+
States["MN"] = "Minnesota";
|
|
34
|
+
States["MP"] = "Northern Mariana Islands";
|
|
35
|
+
States["MS"] = "Mississippi";
|
|
36
|
+
States["MO"] = "Missouri";
|
|
37
|
+
States["MT"] = "Montana";
|
|
38
|
+
States["NE"] = "Nebraska";
|
|
39
|
+
States["NV"] = "Nevada";
|
|
40
|
+
States["NH"] = "New Hampshire";
|
|
41
|
+
States["NJ"] = "New Jersey";
|
|
42
|
+
States["NM"] = "New Mexico";
|
|
43
|
+
States["NY"] = "New York";
|
|
44
|
+
States["NC"] = "North Carolina";
|
|
45
|
+
States["ND"] = "North Dakota";
|
|
46
|
+
States["OH"] = "Ohio";
|
|
47
|
+
States["OK"] = "Oklahoma";
|
|
48
|
+
States["OR"] = "Oregon";
|
|
49
|
+
States["PA"] = "Pennsylvania";
|
|
50
|
+
States["PR"] = "Puerto Rico";
|
|
51
|
+
States["PW"] = "Palau";
|
|
52
|
+
States["RI"] = "Rhode Island";
|
|
53
|
+
States["SC"] = "South Carolina";
|
|
54
|
+
States["SD"] = "South Dakota";
|
|
55
|
+
States["TN"] = "Tennessee";
|
|
56
|
+
States["TX"] = "Texas";
|
|
57
|
+
States["UT"] = "Utah";
|
|
58
|
+
States["VT"] = "Vermont";
|
|
59
|
+
States["VA"] = "Virginia";
|
|
60
|
+
States["VI"] = "Virgin Islands";
|
|
61
|
+
States["WA"] = "Washington";
|
|
62
|
+
States["WV"] = "West Virginia";
|
|
63
|
+
States["WI"] = "Wisconsin";
|
|
64
|
+
States["WY"] = "Wyoming";
|
|
65
|
+
})(States || (States = {}));
|
|
66
66
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJtYXR1cmUvc3JjL2xpYi9mb3Jtcy9tb2RlbHMvZW51bXMvc3RhdGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFOLElBQVksTUE0RFg7QUE1REQsV0FBWSxNQUFNO0lBQ2Qsd0JBQWMsQ0FBQTtJQUNkLHVCQUFhLENBQUE7SUFDYiwrQkFBcUIsQ0FBQTtJQUNyQix3QkFBYyxDQUFBO0lBQ2QseUJBQWUsQ0FBQTtJQUNmLDJCQUFpQixDQUFBO0lBQ2pCLHlCQUFlLENBQUE7SUFDZiw0QkFBa0IsQ0FBQTtJQUNsQix5QkFBZSxDQUFBO0lBQ2YscUNBQTJCLENBQUE7SUFDM0Isd0JBQWMsQ0FBQTtJQUNkLDJCQUFpQixDQUFBO0lBQ2pCLHdCQUFjLENBQUE7SUFDZCxxQkFBVyxDQUFBO0lBQ1gsdUJBQWEsQ0FBQTtJQUNiLHNCQUFZLENBQUE7SUFDWix5QkFBZSxDQUFBO0lBQ2Ysd0JBQWMsQ0FBQTtJQUNkLHFCQUFXLENBQUE7SUFDWCx1QkFBYSxDQUFBO0lBQ2IseUJBQWUsQ0FBQTtJQUNmLDBCQUFnQixDQUFBO0lBQ2hCLHNCQUFZLENBQUE7SUFDWix5QkFBZSxDQUFBO0lBQ2YsOEJBQW9CLENBQUE7SUFDcEIsaUNBQXVCLENBQUE7SUFDdkIseUJBQWUsQ0FBQTtJQUNmLDBCQUFnQixDQUFBO0lBQ2hCLHlDQUErQixDQUFBO0lBQy9CLDRCQUFrQixDQUFBO0lBQ2xCLHlCQUFlLENBQUE7SUFDZix3QkFBYyxDQUFBO0lBQ2QseUJBQWUsQ0FBQTtJQUNmLHVCQUFhLENBQUE7SUFDYiw4QkFBb0IsQ0FBQTtJQUNwQiwyQkFBaUIsQ0FBQTtJQUNqQiwyQkFBaUIsQ0FBQTtJQUNqQix5QkFBZSxDQUFBO0lBQ2YsK0JBQXFCLENBQUE7SUFDckIsNkJBQW1CLENBQUE7SUFDbkIscUJBQVcsQ0FBQTtJQUNYLHlCQUFlLENBQUE7SUFDZix1QkFBYSxDQUFBO0lBQ2IsNkJBQW1CLENBQUE7SUFDbkIsNEJBQWtCLENBQUE7SUFDbEIsc0JBQVksQ0FBQTtJQUNaLDZCQUFtQixDQUFBO0lBQ25CLCtCQUFxQixDQUFBO0lBQ3JCLDZCQUFtQixDQUFBO0lBQ25CLDBCQUFnQixDQUFBO0lBQ2hCLHNCQUFZLENBQUE7SUFDWixxQkFBVyxDQUFBO0lBQ1gsd0JBQWMsQ0FBQTtJQUNkLHlCQUFlLENBQUE7SUFDZiwrQkFBcUIsQ0FBQTtJQUNyQiwyQkFBaUIsQ0FBQTtJQUNqQiw4QkFBb0IsQ0FBQTtJQUNwQiwwQkFBZ0IsQ0FBQTtJQUNoQix3QkFBYyxDQUFBO0FBQ2xCLENBQUMsRUE1RFcsTUFBTSxLQUFOLE1BQU0sUUE0RGpCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIFRoZSBTdGF0ZXMgZW51bVxyXG4gKi9cclxuZXhwb3J0IGVudW0gU3RhdGVzIHtcclxuICAgIEFMID0gJ0FsYWJhbWEnLFxyXG4gICAgQUsgPSAnQWxhc2thJyxcclxuICAgIEFTID0gJ0FtZXJpY2FuIFNhbW9hJyxcclxuICAgIEFaID0gJ0FyaXpvbmEnLFxyXG4gICAgQVIgPSAnQXJrYW5zYXMnLFxyXG4gICAgQ0EgPSAnQ2FsaWZvcm5pYScsXHJcbiAgICBDTyA9ICdDb2xvcmFkbycsXHJcbiAgICBDVCA9ICdDb25uZWN0aWN1dCcsXHJcbiAgICBERSA9ICdEZWxhd2FyZScsXHJcbiAgICBEQyA9ICdEaXN0cmljdCBvZiBDb2x1bWJpYScsXHJcbiAgICBGTCA9ICdGbG9yaWRhJyxcclxuICAgIEZNID0gJ01pY3JvbmVzaWEnLFxyXG4gICAgR0EgPSAnR2VvcmdpYScsXHJcbiAgICBHVSA9ICdHdWFtJyxcclxuICAgIEhJID0gJ0hhd2FpaScsXHJcbiAgICBJRCA9ICdJZGFobycsXHJcbiAgICBJTCA9ICdJbGxpbm9pcycsXHJcbiAgICBJTiA9ICdJbmRpYW5hJyxcclxuICAgIElBID0gJ0lvd2EnLFxyXG4gICAgS1MgPSAnS2Fuc2FzJyxcclxuICAgIEtZID0gJ0tlbnR1Y2t5JyxcclxuICAgIExBID0gJ0xvdWlzaWFuYScsXHJcbiAgICBNRSA9ICdNYWluZScsXHJcbiAgICBNRCA9ICdNYXJ5bGFuZCcsXHJcbiAgICBNQSA9ICdNYXNzYWNodXNldHRzJyxcclxuICAgIE1IID0gJ01hcnNoYWxsIElzbGFuZHMnLFxyXG4gICAgTUkgPSAnTWljaGlnYW4nLFxyXG4gICAgTU4gPSAnTWlubmVzb3RhJyxcclxuICAgIE1QID0gJ05vcnRoZXJuIE1hcmlhbmEgSXNsYW5kcycsXHJcbiAgICBNUyA9ICdNaXNzaXNzaXBwaScsXHJcbiAgICBNTyA9ICdNaXNzb3VyaScsXHJcbiAgICBNVCA9ICdNb250YW5hJyxcclxuICAgIE5FID0gJ05lYnJhc2thJyxcclxuICAgIE5WID0gJ05ldmFkYScsXHJcbiAgICBOSCA9ICdOZXcgSGFtcHNoaXJlJyxcclxuICAgIE5KID0gJ05ldyBKZXJzZXknLFxyXG4gICAgTk0gPSAnTmV3IE1leGljbycsXHJcbiAgICBOWSA9ICdOZXcgWW9yaycsXHJcbiAgICBOQyA9ICdOb3J0aCBDYXJvbGluYScsXHJcbiAgICBORCA9ICdOb3J0aCBEYWtvdGEnLFxyXG4gICAgT0ggPSAnT2hpbycsXHJcbiAgICBPSyA9ICdPa2xhaG9tYScsXHJcbiAgICBPUiA9ICdPcmVnb24nLFxyXG4gICAgUEEgPSAnUGVubnN5bHZhbmlhJyxcclxuICAgIFBSID0gJ1B1ZXJ0byBSaWNvJyxcclxuICAgIFBXID0gJ1BhbGF1JyxcclxuICAgIFJJID0gJ1Job2RlIElzbGFuZCcsXHJcbiAgICBTQyA9ICdTb3V0aCBDYXJvbGluYScsXHJcbiAgICBTRCA9ICdTb3V0aCBEYWtvdGEnLFxyXG4gICAgVE4gPSAnVGVubmVzc2VlJyxcclxuICAgIFRYID0gJ1RleGFzJyxcclxuICAgIFVUID0gJ1V0YWgnLFxyXG4gICAgVlQgPSAnVmVybW9udCcsXHJcbiAgICBWQSA9ICdWaXJnaW5pYScsXHJcbiAgICBWSSA9ICdWaXJnaW4gSXNsYW5kcycsXHJcbiAgICBXQSA9ICdXYXNoaW5ndG9uJyxcclxuICAgIFdWID0gJ1dlc3QgVmlyZ2luaWEnLFxyXG4gICAgV0kgPSAnV2lzY29uc2luJyxcclxuICAgIFdZID0gJ1d5b21pbmcnXHJcbn1cclxuIl19
|
|
@@ -1,33 +1,33 @@
|
|
|
1
|
-
import { Pipe } from '@angular/core';
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
/**
|
|
4
|
-
* A pipe that takes a simple string phone number and formats it
|
|
5
|
-
*/
|
|
6
|
-
export class PhoneFormatPipe {
|
|
7
|
-
transform(phoneNumber) {
|
|
8
|
-
// If input is undefined, then return empty string
|
|
9
|
-
if (!phoneNumber) {
|
|
10
|
-
return '';
|
|
11
|
-
}
|
|
12
|
-
// Check for more than 10 digits
|
|
13
|
-
let formattedPhoneNumber = ('' + phoneNumber).replace(/\D/g, '');
|
|
14
|
-
if (formattedPhoneNumber.length > 10) {
|
|
15
|
-
return '';
|
|
16
|
-
}
|
|
17
|
-
// Check for correct pattern
|
|
18
|
-
let formattedPhoneArray = formattedPhoneNumber.match(/^(1|)?(\d{3})(\d{3})(\d{4})$/);
|
|
19
|
-
if (!!formattedPhoneArray) {
|
|
20
|
-
return ['(', formattedPhoneArray[2], ') ', formattedPhoneArray[3], '-', formattedPhoneArray[4]].join('');
|
|
21
|
-
}
|
|
22
|
-
else {
|
|
23
|
-
return '';
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
30
|
-
type: Pipe,
|
|
31
|
-
args: [{ name: 'sofArPhone' }]
|
|
32
|
-
}] });
|
|
33
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
import { Pipe } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
/**
|
|
4
|
+
* A pipe that takes a simple string phone number and formats it
|
|
5
|
+
*/
|
|
6
|
+
export class PhoneFormatPipe {
|
|
7
|
+
transform(phoneNumber) {
|
|
8
|
+
// If input is undefined, then return empty string
|
|
9
|
+
if (!phoneNumber) {
|
|
10
|
+
return '';
|
|
11
|
+
}
|
|
12
|
+
// Check for more than 10 digits
|
|
13
|
+
let formattedPhoneNumber = ('' + phoneNumber).replace(/\D/g, '');
|
|
14
|
+
if (formattedPhoneNumber.length > 10) {
|
|
15
|
+
return '';
|
|
16
|
+
}
|
|
17
|
+
// Check for correct pattern
|
|
18
|
+
let formattedPhoneArray = formattedPhoneNumber.match(/^(1|)?(\d{3})(\d{3})(\d{4})$/);
|
|
19
|
+
if (!!formattedPhoneArray) {
|
|
20
|
+
return ['(', formattedPhoneArray[2], ') ', formattedPhoneArray[3], '-', formattedPhoneArray[4]].join('');
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
return '';
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: PhoneFormatPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
27
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.1.2", ngImport: i0, type: PhoneFormatPipe, name: "sofArPhone" }); }
|
|
28
|
+
}
|
|
29
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: PhoneFormatPipe, decorators: [{
|
|
30
|
+
type: Pipe,
|
|
31
|
+
args: [{ name: 'sofArPhone' }]
|
|
32
|
+
}] });
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGhvbmUtZm9ybWF0LnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hcm1hdHVyZS9zcmMvbGliL2Zvcm1zL3BpcGVzL3Bob25lLWZvcm1hdC5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQWlCLE1BQU0sZUFBZSxDQUFDOztBQUVwRDs7R0FFRztBQUVILE1BQU0sT0FBTyxlQUFlO0lBQzFCLFNBQVMsQ0FBQyxXQUFtQjtRQUUzQixrREFBa0Q7UUFDbEQsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNoQixPQUFPLEVBQUUsQ0FBQztTQUNYO1FBRUQsZ0NBQWdDO1FBQ2hDLElBQUksb0JBQW9CLEdBQUcsQ0FBQyxFQUFFLEdBQUcsV0FBVyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNqRSxJQUFJLG9CQUFvQixDQUFDLE1BQU0sR0FBRyxFQUFFLEVBQUM7WUFDbkMsT0FBTyxFQUFFLENBQUM7U0FDWDtRQUVELDRCQUE0QjtRQUM1QixJQUFJLG1CQUFtQixHQUFHLG9CQUFvQixDQUFDLEtBQUssQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO1FBQ3JGLElBQUksQ0FBQyxDQUFDLG1CQUFtQixFQUFFO1lBQ3pCLE9BQU8sQ0FBQyxHQUFHLEVBQUUsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUMxRzthQUFNO1lBQ0wsT0FBTyxFQUFFLENBQUM7U0FDWDtJQUNILENBQUM7OEdBckJVLGVBQWU7NEdBQWYsZUFBZTs7MkZBQWYsZUFBZTtrQkFEM0IsSUFBSTttQkFBQyxFQUFDLElBQUksRUFBRSxZQUFZLEVBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG4vKipcclxuICogQSBwaXBlIHRoYXQgdGFrZXMgYSBzaW1wbGUgc3RyaW5nIHBob25lIG51bWJlciBhbmQgZm9ybWF0cyBpdFxyXG4gKi9cclxuQFBpcGUoe25hbWU6ICdzb2ZBclBob25lJ30pXHJcbmV4cG9ydCBjbGFzcyBQaG9uZUZvcm1hdFBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcclxuICB0cmFuc2Zvcm0ocGhvbmVOdW1iZXI6IHN0cmluZyk6IHN0cmluZyB7XHJcblxyXG4gICAgLy8gSWYgaW5wdXQgaXMgdW5kZWZpbmVkLCB0aGVuIHJldHVybiBlbXB0eSBzdHJpbmdcclxuICAgIGlmICghcGhvbmVOdW1iZXIpIHtcclxuICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENoZWNrIGZvciBtb3JlIHRoYW4gMTAgZGlnaXRzXHJcbiAgICBsZXQgZm9ybWF0dGVkUGhvbmVOdW1iZXIgPSAoJycgKyBwaG9uZU51bWJlcikucmVwbGFjZSgvXFxEL2csICcnKTtcclxuICAgIGlmIChmb3JtYXR0ZWRQaG9uZU51bWJlci5sZW5ndGggPiAxMCl7XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuXHJcbiAgICAvLyBDaGVjayBmb3IgY29ycmVjdCBwYXR0ZXJuXHJcbiAgICBsZXQgZm9ybWF0dGVkUGhvbmVBcnJheSA9IGZvcm1hdHRlZFBob25lTnVtYmVyLm1hdGNoKC9eKDF8KT8oXFxkezN9KShcXGR7M30pKFxcZHs0fSkkLyk7XHJcbiAgICBpZiAoISFmb3JtYXR0ZWRQaG9uZUFycmF5KSB7XHJcbiAgICAgIHJldHVybiBbJygnLCBmb3JtYXR0ZWRQaG9uZUFycmF5WzJdLCAnKSAnLCBmb3JtYXR0ZWRQaG9uZUFycmF5WzNdLCAnLScsIGZvcm1hdHRlZFBob25lQXJyYXlbNF1dLmpvaW4oJycpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG4gIH1cclxufSJdfQ==
|
|
@@ -1,167 +1,167 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
2
|
-
import { FormArray, FormGroup } from '@angular/forms';
|
|
3
|
-
import { MatSnackBarConfig } from '@angular/material/snack-bar';
|
|
4
|
-
import { ValidationKeys } from '../models/constants';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
import * as i1 from "@angular/material/snack-bar";
|
|
7
|
-
import * as i2 from "@ngx-translate/core";
|
|
8
|
-
/**
|
|
9
|
-
* Service to handle error alerts
|
|
10
|
-
*/
|
|
11
|
-
export class AlertService {
|
|
12
|
-
/**
|
|
13
|
-
* The constructor
|
|
14
|
-
* @param snackBar the angular material snackbar
|
|
15
|
-
* @param translateService the translate service
|
|
16
|
-
*/
|
|
17
|
-
constructor(snackBar, translateService) {
|
|
18
|
-
this.snackBar = snackBar;
|
|
19
|
-
this.translateService = translateService;
|
|
20
|
-
/** the translation ket for close text */
|
|
21
|
-
this.closeTextKey = 'common.dismiss';
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* Opens a generic snack bar alert
|
|
25
|
-
* @param detailsTextKey text to show in the alert
|
|
26
|
-
* @param durationLength how long the alert should be shown before it fades
|
|
27
|
-
*/
|
|
28
|
-
openCustomSnackBarAlert(detailsTextKey, params = {}, durationLength = 3000) {
|
|
29
|
-
const snackBarConfig = new MatSnackBarConfig();
|
|
30
|
-
snackBarConfig.duration = durationLength;
|
|
31
|
-
snackBarConfig.panelClass = ['red-snackbar'];
|
|
32
|
-
this.snackBar.open(this.translateService.instant(detailsTextKey, params), this.translateService.instant(this.closeTextKey), snackBarConfig);
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* Opens an alert with a the specific form validation error
|
|
36
|
-
* @param form the form to validate
|
|
37
|
-
* @param el the element reference from the forms page, used to set focus on invalid form
|
|
38
|
-
* @param durationLength how long the alert should be shown before it fades
|
|
39
|
-
*/
|
|
40
|
-
openFormInvalidSnackBarAlert(form, el, durationLength = 5000) {
|
|
41
|
-
this.getWhatIsNotFilledOut(form, el, durationLength);
|
|
42
|
-
}
|
|
43
|
-
/**
|
|
44
|
-
* Iterates through a form (form group/form array) recursively to get the individual form control that is invalid
|
|
45
|
-
* @param form the form to validate
|
|
46
|
-
* @param el the element reference from the forms page, used to set focus on invalid form
|
|
47
|
-
* @param durationLength how long the alert should be shown before it fades
|
|
48
|
-
*/
|
|
49
|
-
getWhatIsNotFilledOut(form, el, durationLength) {
|
|
50
|
-
for (let field in form.controls) {
|
|
51
|
-
let control = form.get(field);
|
|
52
|
-
if (!control.invalid) {
|
|
53
|
-
continue;
|
|
54
|
-
}
|
|
55
|
-
if (control instanceof FormArray) {
|
|
56
|
-
for (let formArrayField in control.controls) {
|
|
57
|
-
let formArrayControl = control.get(formArrayField);
|
|
58
|
-
if (!formArrayControl.invalid) {
|
|
59
|
-
continue;
|
|
60
|
-
}
|
|
61
|
-
if (formArrayControl instanceof FormGroup) {
|
|
62
|
-
return this.getWhatIsNotFilledOut(formArrayControl, el, durationLength);
|
|
63
|
-
}
|
|
64
|
-
else {
|
|
65
|
-
return this.getErrorMessage(formArrayControl, formArrayField, el, durationLength);
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
else if (control instanceof FormGroup) {
|
|
70
|
-
for (let formGroupField in control.controls) {
|
|
71
|
-
let formGroupControl = control.get(formGroupField);
|
|
72
|
-
if (!formGroupControl.invalid) {
|
|
73
|
-
continue;
|
|
74
|
-
}
|
|
75
|
-
if (formGroupControl instanceof FormGroup) {
|
|
76
|
-
return this.getWhatIsNotFilledOut(formGroupControl, el, durationLength);
|
|
77
|
-
}
|
|
78
|
-
else {
|
|
79
|
-
return this.getErrorMessage(formGroupControl, formGroupField, el, durationLength);
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
else {
|
|
84
|
-
return this.getErrorMessage(control, field, el, durationLength);
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
/**
|
|
89
|
-
* Gets the error message based on the form control that is invalid
|
|
90
|
-
* @param control the invalid form control
|
|
91
|
-
* @param field the field name that is invalid
|
|
92
|
-
* @param el the element reference from the forms page, used to set focus on invalid form
|
|
93
|
-
* @param durationLength how long the alert should be shown before it fades
|
|
94
|
-
*/
|
|
95
|
-
getErrorMessage(control, field, el, durationLength) {
|
|
96
|
-
let errorText = '';
|
|
97
|
-
const error = control.errors;
|
|
98
|
-
const errorKey = Object.keys(control.errors)[0]; // will only ever be one at a time even if multiple validation errors
|
|
99
|
-
const formattedFieldText = this.getFieldFormattedText(field);
|
|
100
|
-
switch (errorKey) {
|
|
101
|
-
case ValidationKeys.required: {
|
|
102
|
-
errorText = this.translateService.instant('error.requiredError', { 'fieldName': formattedFieldText });
|
|
103
|
-
break;
|
|
104
|
-
}
|
|
105
|
-
case ValidationKeys.maxLength: {
|
|
106
|
-
const errorValues = Object.values(error)[0];
|
|
107
|
-
const requiredLength = Object.values(errorValues)[0];
|
|
108
|
-
const actualValue = Object.values(errorValues)[1];
|
|
109
|
-
errorText = this.translateService.instant('error.maxLengthError', { 'fieldName': formattedFieldText, 'actualValue': actualValue, 'requiredLength': requiredLength });
|
|
110
|
-
break;
|
|
111
|
-
}
|
|
112
|
-
case ValidationKeys.minLength: {
|
|
113
|
-
let errorValues = Object.values(error)[0];
|
|
114
|
-
let requiredLength = Object.values(errorValues)[0];
|
|
115
|
-
let actualValue = Object.values(errorValues)[1];
|
|
116
|
-
errorText = this.translateService.instant('error.minLengthError', { 'fieldName': formattedFieldText, 'actualValue': actualValue, 'requiredLength': requiredLength });
|
|
117
|
-
break;
|
|
118
|
-
}
|
|
119
|
-
case ValidationKeys.pattern:
|
|
120
|
-
case ValidationKeys.maskError:
|
|
121
|
-
case ValidationKeys.email: {
|
|
122
|
-
errorText = this.translateService.instant('error.formatError', { 'fieldName': formattedFieldText });
|
|
123
|
-
break;
|
|
124
|
-
}
|
|
125
|
-
default: {
|
|
126
|
-
errorText = this.translateService.instant('error.allFieldsRequired');
|
|
127
|
-
break;
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
this.setFocusToFormControl(el);
|
|
131
|
-
this.openCustomSnackBarAlert(errorText, durationLength);
|
|
132
|
-
return;
|
|
133
|
-
}
|
|
134
|
-
/**
|
|
135
|
-
* Formats the form control name to readable text to display to the user in an error alert
|
|
136
|
-
* @param field The field
|
|
137
|
-
*/
|
|
138
|
-
getFieldFormattedText(field) {
|
|
139
|
-
let split = field.split(/(?=[A-Z])/); // splits a string by word
|
|
140
|
-
let formattedFieldText = '';
|
|
141
|
-
for (let i = 0; i < split.length; i++) {
|
|
142
|
-
split[i] = split[i].charAt(0).toUpperCase() + split[i].substring(1);
|
|
143
|
-
formattedFieldText += split[i] + ' ';
|
|
144
|
-
}
|
|
145
|
-
return formattedFieldText;
|
|
146
|
-
}
|
|
147
|
-
/**
|
|
148
|
-
* Sets focus to the first invalid form control element
|
|
149
|
-
* @param el Element to focus on
|
|
150
|
-
*/
|
|
151
|
-
setFocusToFormControl(el) {
|
|
152
|
-
// find all invalid controls and focus the first control found
|
|
153
|
-
const invalidElements = el.nativeElement.querySelectorAll('input.ng-invalid, select.ng-invalid');
|
|
154
|
-
if (invalidElements.length > 0) {
|
|
155
|
-
invalidElements[0].focus(); // [0] will always be the form itself [1] will be the first control
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
162
|
-
type: Injectable,
|
|
163
|
-
args: [{
|
|
164
|
-
providedIn: 'root'
|
|
165
|
-
}]
|
|
166
|
-
}], ctorParameters:
|
|
167
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxlcnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FybWF0dXJlL3NyYy9saWIvZm9ybXMvc2VydmljZXMvYWxlcnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWMsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZELE9BQU8sRUFBbUIsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZFLE9BQU8sRUFBZSxpQkFBaUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRTdFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7OztBQUVyRDs7R0FFRztBQUlILE1BQU0sT0FBTyxZQUFZO0lBS3ZCOzs7O09BSUc7SUFDSCxZQUNTLFFBQXFCLEVBQ3BCLGdCQUFrQztRQURuQyxhQUFRLEdBQVIsUUFBUSxDQUFhO1FBQ3BCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFWNUMseUNBQXlDO1FBQ3pCLGlCQUFZLEdBQVcsZ0JBQWdCLENBQUM7SUFVcEQsQ0FBQztJQUVMOzs7O09BSUc7SUFDSSx1QkFBdUIsQ0FBQyxjQUFzQixFQUFFLFNBQWMsRUFBRSxFQUFFLGlCQUF5QixJQUFJO1FBRXBHLE1BQU0sY0FBYyxHQUFHLElBQUksaUJBQWlCLEVBQUUsQ0FBQztRQUMvQyxjQUFjLENBQUMsUUFBUSxHQUFHLGNBQWMsQ0FBQztRQUN6QyxjQUFjLENBQUMsVUFBVSxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7UUFFN0MsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUUsTUFBTSxDQUFDLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsY0FBYyxDQUFDLENBQUM7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QUU7WUFDOUIsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsbUVBQW1FO1NBQ2hHO0lBRUgsQ0FBQzs7eUdBL0pVLFlBQVk7NkdBQVosWUFBWSxjQUZYLE1BQU07MkZBRVAsWUFBWTtrQkFIeEIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbGVtZW50UmVmLCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUFycmF5LCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE1hdFNuYWNrQmFyLCBNYXRTbmFja0JhckNvbmZpZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NuYWNrLWJhcic7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuaW1wb3J0IHsgVmFsaWRhdGlvbktleXMgfSBmcm9tICcuLi9tb2RlbHMvY29uc3RhbnRzJztcclxuXHJcbi8qKlxyXG4gKiBTZXJ2aWNlIHRvIGhhbmRsZSBlcnJvciBhbGVydHNcclxuICovXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEFsZXJ0U2VydmljZSB7XHJcblxyXG4gIC8qKiB0aGUgdHJhbnNsYXRpb24ga2V0IGZvciBjbG9zZSB0ZXh0ICovXHJcbiAgcHVibGljIHJlYWRvbmx5IGNsb3NlVGV4dEtleTogc3RyaW5nID0gJ2NvbW1vbi5kaXNtaXNzJztcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIGNvbnN0cnVjdG9yXHJcbiAgICogQHBhcmFtIHNuYWNrQmFyIHRoZSBhbmd1bGFyIG1hdGVyaWFsIHNuYWNrYmFyXHJcbiAgICogQHBhcmFtIHRyYW5zbGF0ZVNlcnZpY2UgdGhlIHRyYW5zbGF0ZSBzZXJ2aWNlXHJcbiAgICovXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgc25hY2tCYXI6IE1hdFNuYWNrQmFyLFxyXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlXHJcbiAgKSB7IH1cclxuXHJcbiAgLyoqXHJcbiAgICogT3BlbnMgYSBnZW5lcmljIHNuYWNrIGJhciBhbGVydFxyXG4gICAqIEBwYXJhbSBkZXRhaWxzVGV4dEtleSB0ZXh0IHRvIHNob3cgaW4gdGhlIGFsZXJ0XHJcbiAgICogQHBhcmFtIGR1cmF0aW9uTGVuZ3RoIGhvdyBsb25nIHRoZSBhbGVydCBzaG91bGQgYmUgc2hvd24gYmVmb3JlIGl0IGZhZGVzXHJcbiAgICovXHJcbiAgcHVibGljIG9wZW5DdXN0b21TbmFja0JhckFsZXJ0KGRldGFpbHNUZXh0S2V5OiBzdHJpbmcsIHBhcmFtczogYW55ID0ge30sIGR1cmF0aW9uTGVuZ3RoOiBudW1iZXIgPSAzMDAwKTogdm9pZCB7XHJcblxyXG4gICAgY29uc3Qgc25hY2tCYXJDb25maWcgPSBuZXcgTWF0U25hY2tCYXJDb25maWcoKTtcclxuICAgIHNuYWNrQmFyQ29uZmlnLmR1cmF0aW9uID0gZHVyYXRpb25MZW5ndGg7XHJcbiAgICBzbmFja0JhckNvbmZpZy5wYW5lbENsYXNzID0gWydyZWQtc25hY2tiYXInXTtcclxuXHJcbiAgICB0aGlzLnNuYWNrQmFyLm9wZW4odGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoZGV0YWlsc1RleHRLZXksIHBhcmFtcyksIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KHRoaXMuY2xvc2VUZXh0S2V5KSwgc25hY2tCYXJDb25maWcpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogT3BlbnMgYW4gYWxlcnQgd2l0aCBhIHRoZSBzcGVjaWZpYyBmb3JtIHZhbGlkYXRpb24gZXJyb3JcclxuICAgKiBAcGFyYW0gZm9ybSB0aGUgZm9ybSB0byB2YWxpZGF0ZVxyXG4gICAqIEBwYXJhbSBlbCB0aGUgZWxlbWVudCByZWZlcmVuY2UgZnJvbSB0aGUgZm9ybXMgcGFnZSwgdXNlZCB0byBzZXQgZm9jdXMgb24gaW52YWxpZCBmb3JtXHJcbiAgICogQHBhcmFtIGR1cmF0aW9uTGVuZ3RoIGhvdyBsb25nIHRoZSBhbGVydCBzaG91bGQgYmUgc2hvd24gYmVmb3JlIGl0IGZhZGVzXHJcbiAgICovXHJcbiAgcHVibGljIG9wZW5Gb3JtSW52YWxpZFNuYWNrQmFyQWxlcnQoZm9ybTogRm9ybUdyb3VwLCBlbDogRWxlbWVudFJlZiwgZHVyYXRpb25MZW5ndGg6IG51bWJlciA9IDUwMDApOiB2b2lkIHtcclxuICAgIHRoaXMuZ2V0V2hhdElzTm90RmlsbGVkT3V0KGZvcm0sIGVsLCBkdXJhdGlvbkxlbmd0aCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJdGVyYXRlcyB0aHJvdWdoIGEgZm9ybSAoZm9ybSBncm91cC9mb3JtIGFycmF5KSByZWN1cnNpdmVseSB0byBnZXQgdGhlIGluZGl2aWR1YWwgZm9ybSBjb250cm9sIHRoYXQgaXMgaW52YWxpZFxyXG4gICAqIEBwYXJhbSBmb3JtIHRoZSBmb3JtIHRvIHZhbGlkYXRlXHJcbiAgICogQHBhcmFtIGVsIHRoZSBlbGVtZW50IHJlZmVyZW5jZSBmcm9tIHRoZSBmb3JtcyBwYWdlLCB1c2VkIHRvIHNldCBmb2N1cyBvbiBpbnZhbGlkIGZvcm1cclxuICAgKiBAcGFyYW0gZHVyYXRpb25MZW5ndGggaG93IGxvbmcgdGhlIGFsZXJ0IHNob3VsZCBiZSBzaG93biBiZWZvcmUgaXQgZmFkZXNcclxuICAgKi9cclxuICBwdWJsaWMgZ2V0V2hhdElzTm90RmlsbGVkT3V0KGZvcm06IEZvcm1Hcm91cCwgZWw6IEVsZW1lbnRSZWYsIGR1cmF0aW9uTGVuZ3RoOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgZm9yIChsZXQgZmllbGQgaW4gZm9ybS5jb250cm9scykge1xyXG4gICAgICBsZXQgY29udHJvbCA9IGZvcm0uZ2V0KGZpZWxkKTtcclxuICAgICAgaWYgKCFjb250cm9sLmludmFsaWQpIHtcclxuICAgICAgICBjb250aW51ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1BcnJheSkge1xyXG4gICAgICAgIGZvciAobGV0IGZvcm1BcnJheUZpZWxkIGluIGNvbnRyb2wuY29udHJvbHMpIHtcclxuICAgICAgICAgIGxldCBmb3JtQXJyYXlDb250cm9sID0gY29udHJvbC5nZXQoZm9ybUFycmF5RmllbGQpO1xyXG4gICAgICAgICAgaWYgKCFmb3JtQXJyYXlDb250cm9sLmludmFsaWQpIHtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoZm9ybUFycmF5Q29udHJvbCBpbnN0YW5jZW9mIEZvcm1Hcm91cCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRXaGF0SXNOb3RGaWxsZWRPdXQoZm9ybUFycmF5Q29udHJvbCwgZWwsIGR1cmF0aW9uTGVuZ3RoKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEVycm9yTWVzc2FnZShmb3JtQXJyYXlDb250cm9sLCBmb3JtQXJyYXlGaWVsZCwgZWwsIGR1cmF0aW9uTGVuZ3RoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1Hcm91cCkge1xyXG4gICAgICAgIGZvciAobGV0IGZvcm1Hcm91cEZpZWxkIGluIGNvbnRyb2wuY29udHJvbHMpIHtcclxuICAgICAgICAgIGxldCBmb3JtR3JvdXBDb250cm9sID0gY29udHJvbC5nZXQoZm9ybUdyb3VwRmllbGQpO1xyXG4gICAgICAgICAgaWYgKCFmb3JtR3JvdXBDb250cm9sLmludmFsaWQpIHtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoZm9ybUdyb3VwQ29udHJvbCBpbnN0YW5jZW9mIEZvcm1Hcm91cCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRXaGF0SXNOb3RGaWxsZWRPdXQoZm9ybUdyb3VwQ29udHJvbCwgZWwsIGR1cmF0aW9uTGVuZ3RoKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEVycm9yTWVzc2FnZShmb3JtR3JvdXBDb250cm9sLCBmb3JtR3JvdXBGaWVsZCwgZWwsIGR1cmF0aW9uTGVuZ3RoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RXJyb3JNZXNzYWdlKGNvbnRyb2wsIGZpZWxkLCBlbCwgZHVyYXRpb25MZW5ndGgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBlcnJvciBtZXNzYWdlIGJhc2VkIG9uIHRoZSBmb3JtIGNvbnRyb2wgdGhhdCBpcyBpbnZhbGlkXHJcbiAgICogQHBhcmFtIGNvbnRyb2wgdGhlIGludmFsaWQgZm9ybSBjb250cm9sXHJcbiAgICogQHBhcmFtIGZpZWxkIHRoZSBmaWVsZCBuYW1lIHRoYXQgaXMgaW52YWxpZFxyXG4gICAqIEBwYXJhbSBlbCB0aGUgZWxlbWVudCByZWZlcmVuY2UgZnJvbSB0aGUgZm9ybXMgcGFnZSwgdXNlZCB0byBzZXQgZm9jdXMgb24gaW52YWxpZCBmb3JtXHJcbiAgICogQHBhcmFtIGR1cmF0aW9uTGVuZ3RoIGhvdyBsb25nIHRoZSBhbGVydCBzaG91bGQgYmUgc2hvd24gYmVmb3JlIGl0IGZhZGVzXHJcbiAgICovXHJcbiAgcHVibGljIGdldEVycm9yTWVzc2FnZShjb250cm9sOiBBYnN0cmFjdENvbnRyb2wsIGZpZWxkOiBzdHJpbmcsIGVsOiBFbGVtZW50UmVmLCBkdXJhdGlvbkxlbmd0aDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIGxldCBlcnJvclRleHQgPSAnJztcclxuICAgIGNvbnN0IGVycm9yID0gY29udHJvbC5lcnJvcnM7XHJcbiAgICBjb25zdCBlcnJvcktleSA9IE9iamVjdC5rZXlzKGNvbnRyb2wuZXJyb3JzKVswXTsgLy8gd2lsbCBvbmx5IGV2ZXIgYmUgb25lIGF0IGEgdGltZSBldmVuIGlmIG11bHRpcGxlIHZhbGlkYXRpb24gZXJyb3JzXHJcblxyXG4gICAgY29uc3QgZm9ybWF0dGVkRmllbGRUZXh0ID0gdGhpcy5nZXRGaWVsZEZvcm1hdHRlZFRleHQoZmllbGQpO1xyXG4gICAgc3dpdGNoIChlcnJvcktleSkge1xyXG4gICAgICBjYXNlIFZhbGlkYXRpb25LZXlzLnJlcXVpcmVkOiB7XHJcbiAgICAgICAgZXJyb3JUZXh0ID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ2Vycm9yLnJlcXVpcmVkRXJyb3InLCB7ICdmaWVsZE5hbWUnOiBmb3JtYXR0ZWRGaWVsZFRleHQgfSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSBWYWxpZGF0aW9uS2V5cy5tYXhMZW5ndGg6IHtcclxuICAgICAgICBjb25zdCBlcnJvclZhbHVlcyA9IE9iamVjdC52YWx1ZXMoZXJyb3IpWzBdO1xyXG4gICAgICAgIGNvbnN0IHJlcXVpcmVkTGVuZ3RoID0gT2JqZWN0LnZhbHVlcyhlcnJvclZhbHVlcylbMF07XHJcbiAgICAgICAgY29uc3QgYWN0dWFsVmFsdWUgPSBPYmplY3QudmFsdWVzKGVycm9yVmFsdWVzKVsxXTtcclxuICAgICAgICBlcnJvclRleHQgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnZXJyb3IubWF4TGVuZ3RoRXJyb3InLCB7ICdmaWVsZE5hbWUnOiBmb3JtYXR0ZWRGaWVsZFRleHQsICdhY3R1YWxWYWx1ZSc6IGFjdHVhbFZhbHVlLCAncmVxdWlyZWRMZW5ndGgnOiByZXF1aXJlZExlbmd0aCB9KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlIFZhbGlkYXRpb25LZXlzLm1pbkxlbmd0aDoge1xyXG4gICAgICAgIGxldCBlcnJvclZhbHVlcyA9IE9iamVjdC52YWx1ZXMoZXJyb3IpWzBdO1xyXG4gICAgICAgIGxldCByZXF1aXJlZExlbmd0aCA9IE9iamVjdC52YWx1ZXMoZXJyb3JWYWx1ZXMpWzBdO1xyXG4gICAgICAgIGxldCBhY3R1YWxWYWx1ZSA9IE9iamVjdC52YWx1ZXMoZXJyb3JWYWx1ZXMpWzFdO1xyXG4gICAgICAgIGVycm9yVGV4dCA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdlcnJvci5taW5MZW5ndGhFcnJvcicsIHsgJ2ZpZWxkTmFtZSc6IGZvcm1hdHRlZEZpZWxkVGV4dCwgJ2FjdHVhbFZhbHVlJzogYWN0dWFsVmFsdWUsICdyZXF1aXJlZExlbmd0aCc6IHJlcXVpcmVkTGVuZ3RoIH0pO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgVmFsaWRhdGlvbktleXMucGF0dGVybjpcclxuICAgICAgY2FzZSBWYWxpZGF0aW9uS2V5cy5tYXNrRXJyb3I6XHJcbiAgICAgIGNhc2UgVmFsaWRhdGlvbktleXMuZW1haWw6IHtcclxuICAgICAgICBlcnJvclRleHQgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnZXJyb3IuZm9ybWF0RXJyb3InLCB7ICdmaWVsZE5hbWUnOiBmb3JtYXR0ZWRGaWVsZFRleHQgfSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgZGVmYXVsdDoge1xyXG4gICAgICAgIGVycm9yVGV4dCA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdlcnJvci5hbGxGaWVsZHNSZXF1aXJlZCcpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLnNldEZvY3VzVG9Gb3JtQ29udHJvbChlbCk7XHJcbiAgICB0aGlzLm9wZW5DdXN0b21TbmFja0JhckFsZXJ0KGVycm9yVGV4dCwgZHVyYXRpb25MZW5ndGgpO1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRm9ybWF0cyB0aGUgZm9ybSBjb250cm9sIG5hbWUgdG8gcmVhZGFibGUgdGV4dCB0byBkaXNwbGF5IHRvIHRoZSB1c2VyIGluIGFuIGVycm9yIGFsZXJ0XHJcbiAgICogQHBhcmFtIGZpZWxkIFRoZSBmaWVsZFxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXRGaWVsZEZvcm1hdHRlZFRleHQoZmllbGQ6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBsZXQgc3BsaXQgPSBmaWVsZC5zcGxpdCgvKD89W0EtWl0pLyk7IC8vIHNwbGl0cyBhIHN0cmluZyBieSB3b3JkXHJcbiAgICBsZXQgZm9ybWF0dGVkRmllbGRUZXh0ID0gJyc7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNwbGl0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIHNwbGl0W2ldID0gc3BsaXRbaV0uY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBzcGxpdFtpXS5zdWJzdHJpbmcoMSk7XHJcbiAgICAgIGZvcm1hdHRlZEZpZWxkVGV4dCArPSBzcGxpdFtpXSArICcgJztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZm9ybWF0dGVkRmllbGRUZXh0O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyBmb2N1cyB0byB0aGUgZmlyc3QgaW52YWxpZCBmb3JtIGNvbnRyb2wgZWxlbWVudFxyXG4gICAqIEBwYXJhbSBlbCBFbGVtZW50IHRvIGZvY3VzIG9uXHJcbiAgICovXHJcbiAgcHVibGljIHNldEZvY3VzVG9Gb3JtQ29udHJvbChlbDogRWxlbWVudFJlZik6IHZvaWQge1xyXG4gICAgLy8gZmluZCBhbGwgaW52YWxpZCBjb250cm9scyBhbmQgZm9jdXMgdGhlIGZpcnN0IGNvbnRyb2wgZm91bmRcclxuICAgIGNvbnN0IGludmFsaWRFbGVtZW50cyA9IGVsLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnaW5wdXQubmctaW52YWxpZCwgc2VsZWN0Lm5nLWludmFsaWQnKTtcclxuICAgIGlmIChpbnZhbGlkRWxlbWVudHMubGVuZ3RoID4gMCkge1xyXG4gICAgICBpbnZhbGlkRWxlbWVudHNbMF0uZm9jdXMoKTsgLy8gWzBdIHdpbGwgYWx3YXlzIGJlIHRoZSBmb3JtIGl0c2VsZiBbMV0gd2lsbCBiZSB0aGUgZmlyc3QgY29udHJvbFxyXG4gICAgfVxyXG5cclxuICB9XHJcbn1cclxuIl19
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { FormArray, FormGroup } from '@angular/forms';
|
|
3
|
+
import { MatSnackBarConfig } from '@angular/material/snack-bar';
|
|
4
|
+
import { ValidationKeys } from '../models/constants';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "@angular/material/snack-bar";
|
|
7
|
+
import * as i2 from "@ngx-translate/core";
|
|
8
|
+
/**
|
|
9
|
+
* Service to handle error alerts
|
|
10
|
+
*/
|
|
11
|
+
export class AlertService {
|
|
12
|
+
/**
|
|
13
|
+
* The constructor
|
|
14
|
+
* @param snackBar the angular material snackbar
|
|
15
|
+
* @param translateService the translate service
|
|
16
|
+
*/
|
|
17
|
+
constructor(snackBar, translateService) {
|
|
18
|
+
this.snackBar = snackBar;
|
|
19
|
+
this.translateService = translateService;
|
|
20
|
+
/** the translation ket for close text */
|
|
21
|
+
this.closeTextKey = 'common.dismiss';
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Opens a generic snack bar alert
|
|
25
|
+
* @param detailsTextKey text to show in the alert
|
|
26
|
+
* @param durationLength how long the alert should be shown before it fades
|
|
27
|
+
*/
|
|
28
|
+
openCustomSnackBarAlert(detailsTextKey, params = {}, durationLength = 3000) {
|
|
29
|
+
const snackBarConfig = new MatSnackBarConfig();
|
|
30
|
+
snackBarConfig.duration = durationLength;
|
|
31
|
+
snackBarConfig.panelClass = ['red-snackbar'];
|
|
32
|
+
this.snackBar.open(this.translateService.instant(detailsTextKey, params), this.translateService.instant(this.closeTextKey), snackBarConfig);
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Opens an alert with a the specific form validation error
|
|
36
|
+
* @param form the form to validate
|
|
37
|
+
* @param el the element reference from the forms page, used to set focus on invalid form
|
|
38
|
+
* @param durationLength how long the alert should be shown before it fades
|
|
39
|
+
*/
|
|
40
|
+
openFormInvalidSnackBarAlert(form, el, durationLength = 5000) {
|
|
41
|
+
this.getWhatIsNotFilledOut(form, el, durationLength);
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Iterates through a form (form group/form array) recursively to get the individual form control that is invalid
|
|
45
|
+
* @param form the form to validate
|
|
46
|
+
* @param el the element reference from the forms page, used to set focus on invalid form
|
|
47
|
+
* @param durationLength how long the alert should be shown before it fades
|
|
48
|
+
*/
|
|
49
|
+
getWhatIsNotFilledOut(form, el, durationLength) {
|
|
50
|
+
for (let field in form.controls) {
|
|
51
|
+
let control = form.get(field);
|
|
52
|
+
if (!control.invalid) {
|
|
53
|
+
continue;
|
|
54
|
+
}
|
|
55
|
+
if (control instanceof FormArray) {
|
|
56
|
+
for (let formArrayField in control.controls) {
|
|
57
|
+
let formArrayControl = control.get(formArrayField);
|
|
58
|
+
if (!formArrayControl.invalid) {
|
|
59
|
+
continue;
|
|
60
|
+
}
|
|
61
|
+
if (formArrayControl instanceof FormGroup) {
|
|
62
|
+
return this.getWhatIsNotFilledOut(formArrayControl, el, durationLength);
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
return this.getErrorMessage(formArrayControl, formArrayField, el, durationLength);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
else if (control instanceof FormGroup) {
|
|
70
|
+
for (let formGroupField in control.controls) {
|
|
71
|
+
let formGroupControl = control.get(formGroupField);
|
|
72
|
+
if (!formGroupControl.invalid) {
|
|
73
|
+
continue;
|
|
74
|
+
}
|
|
75
|
+
if (formGroupControl instanceof FormGroup) {
|
|
76
|
+
return this.getWhatIsNotFilledOut(formGroupControl, el, durationLength);
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
return this.getErrorMessage(formGroupControl, formGroupField, el, durationLength);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
return this.getErrorMessage(control, field, el, durationLength);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Gets the error message based on the form control that is invalid
|
|
90
|
+
* @param control the invalid form control
|
|
91
|
+
* @param field the field name that is invalid
|
|
92
|
+
* @param el the element reference from the forms page, used to set focus on invalid form
|
|
93
|
+
* @param durationLength how long the alert should be shown before it fades
|
|
94
|
+
*/
|
|
95
|
+
getErrorMessage(control, field, el, durationLength) {
|
|
96
|
+
let errorText = '';
|
|
97
|
+
const error = control.errors;
|
|
98
|
+
const errorKey = Object.keys(control.errors)[0]; // will only ever be one at a time even if multiple validation errors
|
|
99
|
+
const formattedFieldText = this.getFieldFormattedText(field);
|
|
100
|
+
switch (errorKey) {
|
|
101
|
+
case ValidationKeys.required: {
|
|
102
|
+
errorText = this.translateService.instant('error.requiredError', { 'fieldName': formattedFieldText });
|
|
103
|
+
break;
|
|
104
|
+
}
|
|
105
|
+
case ValidationKeys.maxLength: {
|
|
106
|
+
const errorValues = Object.values(error)[0];
|
|
107
|
+
const requiredLength = Object.values(errorValues)[0];
|
|
108
|
+
const actualValue = Object.values(errorValues)[1];
|
|
109
|
+
errorText = this.translateService.instant('error.maxLengthError', { 'fieldName': formattedFieldText, 'actualValue': actualValue, 'requiredLength': requiredLength });
|
|
110
|
+
break;
|
|
111
|
+
}
|
|
112
|
+
case ValidationKeys.minLength: {
|
|
113
|
+
let errorValues = Object.values(error)[0];
|
|
114
|
+
let requiredLength = Object.values(errorValues)[0];
|
|
115
|
+
let actualValue = Object.values(errorValues)[1];
|
|
116
|
+
errorText = this.translateService.instant('error.minLengthError', { 'fieldName': formattedFieldText, 'actualValue': actualValue, 'requiredLength': requiredLength });
|
|
117
|
+
break;
|
|
118
|
+
}
|
|
119
|
+
case ValidationKeys.pattern:
|
|
120
|
+
case ValidationKeys.maskError:
|
|
121
|
+
case ValidationKeys.email: {
|
|
122
|
+
errorText = this.translateService.instant('error.formatError', { 'fieldName': formattedFieldText });
|
|
123
|
+
break;
|
|
124
|
+
}
|
|
125
|
+
default: {
|
|
126
|
+
errorText = this.translateService.instant('error.allFieldsRequired');
|
|
127
|
+
break;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
this.setFocusToFormControl(el);
|
|
131
|
+
this.openCustomSnackBarAlert(errorText, durationLength);
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Formats the form control name to readable text to display to the user in an error alert
|
|
136
|
+
* @param field The field
|
|
137
|
+
*/
|
|
138
|
+
getFieldFormattedText(field) {
|
|
139
|
+
let split = field.split(/(?=[A-Z])/); // splits a string by word
|
|
140
|
+
let formattedFieldText = '';
|
|
141
|
+
for (let i = 0; i < split.length; i++) {
|
|
142
|
+
split[i] = split[i].charAt(0).toUpperCase() + split[i].substring(1);
|
|
143
|
+
formattedFieldText += split[i] + ' ';
|
|
144
|
+
}
|
|
145
|
+
return formattedFieldText;
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Sets focus to the first invalid form control element
|
|
149
|
+
* @param el Element to focus on
|
|
150
|
+
*/
|
|
151
|
+
setFocusToFormControl(el) {
|
|
152
|
+
// find all invalid controls and focus the first control found
|
|
153
|
+
const invalidElements = el.nativeElement.querySelectorAll('input.ng-invalid, select.ng-invalid');
|
|
154
|
+
if (invalidElements.length > 0) {
|
|
155
|
+
invalidElements[0].focus(); // [0] will always be the form itself [1] will be the first control
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: AlertService, deps: [{ token: i1.MatSnackBar }, { token: i2.TranslateService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
159
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: AlertService, providedIn: 'root' }); }
|
|
160
|
+
}
|
|
161
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: AlertService, decorators: [{
|
|
162
|
+
type: Injectable,
|
|
163
|
+
args: [{
|
|
164
|
+
providedIn: 'root'
|
|
165
|
+
}]
|
|
166
|
+
}], ctorParameters: () => [{ type: i1.MatSnackBar }, { type: i2.TranslateService }] });
|
|
167
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxlcnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FybWF0dXJlL3NyYy9saWIvZm9ybXMvc2VydmljZXMvYWxlcnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWMsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZELE9BQU8sRUFBbUIsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZFLE9BQU8sRUFBZSxpQkFBaUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRTdFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7OztBQUVyRDs7R0FFRztBQUlILE1BQU0sT0FBTyxZQUFZO0lBS3ZCOzs7O09BSUc7SUFDSCxZQUNTLFFBQXFCLEVBQ3BCLGdCQUFrQztRQURuQyxhQUFRLEdBQVIsUUFBUSxDQUFhO1FBQ3BCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFWNUMseUNBQXlDO1FBQ3pCLGlCQUFZLEdBQVcsZ0JBQWdCLENBQUM7SUFVcEQsQ0FBQztJQUVMOzs7O09BSUc7SUFDSSx1QkFBdUIsQ0FBQyxjQUFzQixFQUFFLFNBQWMsRUFBRSxFQUFFLGlCQUF5QixJQUFJO1FBRXBHLE1BQU0sY0FBYyxHQUFHLElBQUksaUJBQWlCLEVBQUUsQ0FBQztRQUMvQyxjQUFjLENBQUMsUUFBUSxHQUFHLGNBQWMsQ0FBQztRQUN6QyxjQUFjLENBQUMsVUFBVSxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7UUFFN0MsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUUsTUFBTSxDQUFDLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsY0FBYyxDQUFDLENBQUM7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QUU7WUFDOUIsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsbUVBQW1FO1NBQ2hHO0lBRUgsQ0FBQzs4R0EvSlUsWUFBWTtrSEFBWixZQUFZLGNBRlgsTUFBTTs7MkZBRVAsWUFBWTtrQkFIeEIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbGVtZW50UmVmLCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUFycmF5LCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE1hdFNuYWNrQmFyLCBNYXRTbmFja0JhckNvbmZpZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NuYWNrLWJhcic7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuaW1wb3J0IHsgVmFsaWRhdGlvbktleXMgfSBmcm9tICcuLi9tb2RlbHMvY29uc3RhbnRzJztcclxuXHJcbi8qKlxyXG4gKiBTZXJ2aWNlIHRvIGhhbmRsZSBlcnJvciBhbGVydHNcclxuICovXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEFsZXJ0U2VydmljZSB7XHJcblxyXG4gIC8qKiB0aGUgdHJhbnNsYXRpb24ga2V0IGZvciBjbG9zZSB0ZXh0ICovXHJcbiAgcHVibGljIHJlYWRvbmx5IGNsb3NlVGV4dEtleTogc3RyaW5nID0gJ2NvbW1vbi5kaXNtaXNzJztcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIGNvbnN0cnVjdG9yXHJcbiAgICogQHBhcmFtIHNuYWNrQmFyIHRoZSBhbmd1bGFyIG1hdGVyaWFsIHNuYWNrYmFyXHJcbiAgICogQHBhcmFtIHRyYW5zbGF0ZVNlcnZpY2UgdGhlIHRyYW5zbGF0ZSBzZXJ2aWNlXHJcbiAgICovXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgc25hY2tCYXI6IE1hdFNuYWNrQmFyLFxyXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlXHJcbiAgKSB7IH1cclxuXHJcbiAgLyoqXHJcbiAgICogT3BlbnMgYSBnZW5lcmljIHNuYWNrIGJhciBhbGVydFxyXG4gICAqIEBwYXJhbSBkZXRhaWxzVGV4dEtleSB0ZXh0IHRvIHNob3cgaW4gdGhlIGFsZXJ0XHJcbiAgICogQHBhcmFtIGR1cmF0aW9uTGVuZ3RoIGhvdyBsb25nIHRoZSBhbGVydCBzaG91bGQgYmUgc2hvd24gYmVmb3JlIGl0IGZhZGVzXHJcbiAgICovXHJcbiAgcHVibGljIG9wZW5DdXN0b21TbmFja0JhckFsZXJ0KGRldGFpbHNUZXh0S2V5OiBzdHJpbmcsIHBhcmFtczogYW55ID0ge30sIGR1cmF0aW9uTGVuZ3RoOiBudW1iZXIgPSAzMDAwKTogdm9pZCB7XHJcblxyXG4gICAgY29uc3Qgc25hY2tCYXJDb25maWcgPSBuZXcgTWF0U25hY2tCYXJDb25maWcoKTtcclxuICAgIHNuYWNrQmFyQ29uZmlnLmR1cmF0aW9uID0gZHVyYXRpb25MZW5ndGg7XHJcbiAgICBzbmFja0JhckNvbmZpZy5wYW5lbENsYXNzID0gWydyZWQtc25hY2tiYXInXTtcclxuXHJcbiAgICB0aGlzLnNuYWNrQmFyLm9wZW4odGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoZGV0YWlsc1RleHRLZXksIHBhcmFtcyksIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KHRoaXMuY2xvc2VUZXh0S2V5KSwgc25hY2tCYXJDb25maWcpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogT3BlbnMgYW4gYWxlcnQgd2l0aCBhIHRoZSBzcGVjaWZpYyBmb3JtIHZhbGlkYXRpb24gZXJyb3JcclxuICAgKiBAcGFyYW0gZm9ybSB0aGUgZm9ybSB0byB2YWxpZGF0ZVxyXG4gICAqIEBwYXJhbSBlbCB0aGUgZWxlbWVudCByZWZlcmVuY2UgZnJvbSB0aGUgZm9ybXMgcGFnZSwgdXNlZCB0byBzZXQgZm9jdXMgb24gaW52YWxpZCBmb3JtXHJcbiAgICogQHBhcmFtIGR1cmF0aW9uTGVuZ3RoIGhvdyBsb25nIHRoZSBhbGVydCBzaG91bGQgYmUgc2hvd24gYmVmb3JlIGl0IGZhZGVzXHJcbiAgICovXHJcbiAgcHVibGljIG9wZW5Gb3JtSW52YWxpZFNuYWNrQmFyQWxlcnQoZm9ybTogRm9ybUdyb3VwLCBlbDogRWxlbWVudFJlZiwgZHVyYXRpb25MZW5ndGg6IG51bWJlciA9IDUwMDApOiB2b2lkIHtcclxuICAgIHRoaXMuZ2V0V2hhdElzTm90RmlsbGVkT3V0KGZvcm0sIGVsLCBkdXJhdGlvbkxlbmd0aCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJdGVyYXRlcyB0aHJvdWdoIGEgZm9ybSAoZm9ybSBncm91cC9mb3JtIGFycmF5KSByZWN1cnNpdmVseSB0byBnZXQgdGhlIGluZGl2aWR1YWwgZm9ybSBjb250cm9sIHRoYXQgaXMgaW52YWxpZFxyXG4gICAqIEBwYXJhbSBmb3JtIHRoZSBmb3JtIHRvIHZhbGlkYXRlXHJcbiAgICogQHBhcmFtIGVsIHRoZSBlbGVtZW50IHJlZmVyZW5jZSBmcm9tIHRoZSBmb3JtcyBwYWdlLCB1c2VkIHRvIHNldCBmb2N1cyBvbiBpbnZhbGlkIGZvcm1cclxuICAgKiBAcGFyYW0gZHVyYXRpb25MZW5ndGggaG93IGxvbmcgdGhlIGFsZXJ0IHNob3VsZCBiZSBzaG93biBiZWZvcmUgaXQgZmFkZXNcclxuICAgKi9cclxuICBwdWJsaWMgZ2V0V2hhdElzTm90RmlsbGVkT3V0KGZvcm06IEZvcm1Hcm91cCwgZWw6IEVsZW1lbnRSZWYsIGR1cmF0aW9uTGVuZ3RoOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgZm9yIChsZXQgZmllbGQgaW4gZm9ybS5jb250cm9scykge1xyXG4gICAgICBsZXQgY29udHJvbCA9IGZvcm0uZ2V0KGZpZWxkKTtcclxuICAgICAgaWYgKCFjb250cm9sLmludmFsaWQpIHtcclxuICAgICAgICBjb250aW51ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1BcnJheSkge1xyXG4gICAgICAgIGZvciAobGV0IGZvcm1BcnJheUZpZWxkIGluIGNvbnRyb2wuY29udHJvbHMpIHtcclxuICAgICAgICAgIGxldCBmb3JtQXJyYXlDb250cm9sID0gY29udHJvbC5nZXQoZm9ybUFycmF5RmllbGQpO1xyXG4gICAgICAgICAgaWYgKCFmb3JtQXJyYXlDb250cm9sLmludmFsaWQpIHtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoZm9ybUFycmF5Q29udHJvbCBpbnN0YW5jZW9mIEZvcm1Hcm91cCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRXaGF0SXNOb3RGaWxsZWRPdXQoZm9ybUFycmF5Q29udHJvbCwgZWwsIGR1cmF0aW9uTGVuZ3RoKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEVycm9yTWVzc2FnZShmb3JtQXJyYXlDb250cm9sLCBmb3JtQXJyYXlGaWVsZCwgZWwsIGR1cmF0aW9uTGVuZ3RoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1Hcm91cCkge1xyXG4gICAgICAgIGZvciAobGV0IGZvcm1Hcm91cEZpZWxkIGluIGNvbnRyb2wuY29udHJvbHMpIHtcclxuICAgICAgICAgIGxldCBmb3JtR3JvdXBDb250cm9sID0gY29udHJvbC5nZXQoZm9ybUdyb3VwRmllbGQpO1xyXG4gICAgICAgICAgaWYgKCFmb3JtR3JvdXBDb250cm9sLmludmFsaWQpIHtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoZm9ybUdyb3VwQ29udHJvbCBpbnN0YW5jZW9mIEZvcm1Hcm91cCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRXaGF0SXNOb3RGaWxsZWRPdXQoZm9ybUdyb3VwQ29udHJvbCwgZWwsIGR1cmF0aW9uTGVuZ3RoKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEVycm9yTWVzc2FnZShmb3JtR3JvdXBDb250cm9sLCBmb3JtR3JvdXBGaWVsZCwgZWwsIGR1cmF0aW9uTGVuZ3RoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RXJyb3JNZXNzYWdlKGNvbnRyb2wsIGZpZWxkLCBlbCwgZHVyYXRpb25MZW5ndGgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBlcnJvciBtZXNzYWdlIGJhc2VkIG9uIHRoZSBmb3JtIGNvbnRyb2wgdGhhdCBpcyBpbnZhbGlkXHJcbiAgICogQHBhcmFtIGNvbnRyb2wgdGhlIGludmFsaWQgZm9ybSBjb250cm9sXHJcbiAgICogQHBhcmFtIGZpZWxkIHRoZSBmaWVsZCBuYW1lIHRoYXQgaXMgaW52YWxpZFxyXG4gICAqIEBwYXJhbSBlbCB0aGUgZWxlbWVudCByZWZlcmVuY2UgZnJvbSB0aGUgZm9ybXMgcGFnZSwgdXNlZCB0byBzZXQgZm9jdXMgb24gaW52YWxpZCBmb3JtXHJcbiAgICogQHBhcmFtIGR1cmF0aW9uTGVuZ3RoIGhvdyBsb25nIHRoZSBhbGVydCBzaG91bGQgYmUgc2hvd24gYmVmb3JlIGl0IGZhZGVzXHJcbiAgICovXHJcbiAgcHVibGljIGdldEVycm9yTWVzc2FnZShjb250cm9sOiBBYnN0cmFjdENvbnRyb2wsIGZpZWxkOiBzdHJpbmcsIGVsOiBFbGVtZW50UmVmLCBkdXJhdGlvbkxlbmd0aDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIGxldCBlcnJvclRleHQgPSAnJztcclxuICAgIGNvbnN0IGVycm9yID0gY29udHJvbC5lcnJvcnM7XHJcbiAgICBjb25zdCBlcnJvcktleSA9IE9iamVjdC5rZXlzKGNvbnRyb2wuZXJyb3JzKVswXTsgLy8gd2lsbCBvbmx5IGV2ZXIgYmUgb25lIGF0IGEgdGltZSBldmVuIGlmIG11bHRpcGxlIHZhbGlkYXRpb24gZXJyb3JzXHJcblxyXG4gICAgY29uc3QgZm9ybWF0dGVkRmllbGRUZXh0ID0gdGhpcy5nZXRGaWVsZEZvcm1hdHRlZFRleHQoZmllbGQpO1xyXG4gICAgc3dpdGNoIChlcnJvcktleSkge1xyXG4gICAgICBjYXNlIFZhbGlkYXRpb25LZXlzLnJlcXVpcmVkOiB7XHJcbiAgICAgICAgZXJyb3JUZXh0ID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ2Vycm9yLnJlcXVpcmVkRXJyb3InLCB7ICdmaWVsZE5hbWUnOiBmb3JtYXR0ZWRGaWVsZFRleHQgfSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSBWYWxpZGF0aW9uS2V5cy5tYXhMZW5ndGg6IHtcclxuICAgICAgICBjb25zdCBlcnJvclZhbHVlcyA9IE9iamVjdC52YWx1ZXMoZXJyb3IpWzBdO1xyXG4gICAgICAgIGNvbnN0IHJlcXVpcmVkTGVuZ3RoID0gT2JqZWN0LnZhbHVlcyhlcnJvclZhbHVlcylbMF07XHJcbiAgICAgICAgY29uc3QgYWN0dWFsVmFsdWUgPSBPYmplY3QudmFsdWVzKGVycm9yVmFsdWVzKVsxXTtcclxuICAgICAgICBlcnJvclRleHQgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnZXJyb3IubWF4TGVuZ3RoRXJyb3InLCB7ICdmaWVsZE5hbWUnOiBmb3JtYXR0ZWRGaWVsZFRleHQsICdhY3R1YWxWYWx1ZSc6IGFjdHVhbFZhbHVlLCAncmVxdWlyZWRMZW5ndGgnOiByZXF1aXJlZExlbmd0aCB9KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlIFZhbGlkYXRpb25LZXlzLm1pbkxlbmd0aDoge1xyXG4gICAgICAgIGxldCBlcnJvclZhbHVlcyA9IE9iamVjdC52YWx1ZXMoZXJyb3IpWzBdO1xyXG4gICAgICAgIGxldCByZXF1aXJlZExlbmd0aCA9IE9iamVjdC52YWx1ZXMoZXJyb3JWYWx1ZXMpWzBdO1xyXG4gICAgICAgIGxldCBhY3R1YWxWYWx1ZSA9IE9iamVjdC52YWx1ZXMoZXJyb3JWYWx1ZXMpWzFdO1xyXG4gICAgICAgIGVycm9yVGV4dCA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdlcnJvci5taW5MZW5ndGhFcnJvcicsIHsgJ2ZpZWxkTmFtZSc6IGZvcm1hdHRlZEZpZWxkVGV4dCwgJ2FjdHVhbFZhbHVlJzogYWN0dWFsVmFsdWUsICdyZXF1aXJlZExlbmd0aCc6IHJlcXVpcmVkTGVuZ3RoIH0pO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgVmFsaWRhdGlvbktleXMucGF0dGVybjpcclxuICAgICAgY2FzZSBWYWxpZGF0aW9uS2V5cy5tYXNrRXJyb3I6XHJcbiAgICAgIGNhc2UgVmFsaWRhdGlvbktleXMuZW1haWw6IHtcclxuICAgICAgICBlcnJvclRleHQgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnZXJyb3IuZm9ybWF0RXJyb3InLCB7ICdmaWVsZE5hbWUnOiBmb3JtYXR0ZWRGaWVsZFRleHQgfSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgZGVmYXVsdDoge1xyXG4gICAgICAgIGVycm9yVGV4dCA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdlcnJvci5hbGxGaWVsZHNSZXF1aXJlZCcpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLnNldEZvY3VzVG9Gb3JtQ29udHJvbChlbCk7XHJcbiAgICB0aGlzLm9wZW5DdXN0b21TbmFja0JhckFsZXJ0KGVycm9yVGV4dCwgZHVyYXRpb25MZW5ndGgpO1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRm9ybWF0cyB0aGUgZm9ybSBjb250cm9sIG5hbWUgdG8gcmVhZGFibGUgdGV4dCB0byBkaXNwbGF5IHRvIHRoZSB1c2VyIGluIGFuIGVycm9yIGFsZXJ0XHJcbiAgICogQHBhcmFtIGZpZWxkIFRoZSBmaWVsZFxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXRGaWVsZEZvcm1hdHRlZFRleHQoZmllbGQ6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBsZXQgc3BsaXQgPSBmaWVsZC5zcGxpdCgvKD89W0EtWl0pLyk7IC8vIHNwbGl0cyBhIHN0cmluZyBieSB3b3JkXHJcbiAgICBsZXQgZm9ybWF0dGVkRmllbGRUZXh0ID0gJyc7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNwbGl0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIHNwbGl0W2ldID0gc3BsaXRbaV0uY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBzcGxpdFtpXS5zdWJzdHJpbmcoMSk7XHJcbiAgICAgIGZvcm1hdHRlZEZpZWxkVGV4dCArPSBzcGxpdFtpXSArICcgJztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZm9ybWF0dGVkRmllbGRUZXh0O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyBmb2N1cyB0byB0aGUgZmlyc3QgaW52YWxpZCBmb3JtIGNvbnRyb2wgZWxlbWVudFxyXG4gICAqIEBwYXJhbSBlbCBFbGVtZW50IHRvIGZvY3VzIG9uXHJcbiAgICovXHJcbiAgcHVibGljIHNldEZvY3VzVG9Gb3JtQ29udHJvbChlbDogRWxlbWVudFJlZik6IHZvaWQge1xyXG4gICAgLy8gZmluZCBhbGwgaW52YWxpZCBjb250cm9scyBhbmQgZm9jdXMgdGhlIGZpcnN0IGNvbnRyb2wgZm91bmRcclxuICAgIGNvbnN0IGludmFsaWRFbGVtZW50cyA9IGVsLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnaW5wdXQubmctaW52YWxpZCwgc2VsZWN0Lm5nLWludmFsaWQnKTtcclxuICAgIGlmIChpbnZhbGlkRWxlbWVudHMubGVuZ3RoID4gMCkge1xyXG4gICAgICBpbnZhbGlkRWxlbWVudHNbMF0uZm9jdXMoKTsgLy8gWzBdIHdpbGwgYWx3YXlzIGJlIHRoZSBmb3JtIGl0c2VsZiBbMV0gd2lsbCBiZSB0aGUgZmlyc3QgY29udHJvbFxyXG4gICAgfVxyXG5cclxuICB9XHJcbn1cclxuIl19
|