@seniorsistemas/angular-components 19.9.15-develop-11ab86f5 → 19.9.15
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 +2 -84
- package/accordion/README.md +4 -5
- package/accordion/lib/accordion/accordion.module.d.ts +0 -7
- package/alert/lib/alert/alert.module.d.ts +0 -7
- package/badge/README.md +4 -5
- package/badge/lib/badge/badge.module.d.ts +0 -10
- package/bignumber-input/README.md +4 -5
- package/bignumber-input/lib/bignumber-input/bignumber-input.directive.d.ts +39 -16
- package/bignumber-input/lib/bignumber-input/bignumber-input.module.d.ts +0 -7
- package/breadcrumb/README.md +4 -5
- package/breadcrumb/lib/dynamic-breadcrumb/dynamic-breadcrumb.module.d.ts +1 -5
- package/button/lib/button/button.module.d.ts +0 -7
- package/calendar-mask/README.md +4 -5
- package/calendar-mask/lib/calendar-mask/calendar-mask.module.d.ts +0 -7
- package/card/README.md +5 -6
- package/card/lib/card/card.module.d.ts +0 -7
- package/chat/README.md +8 -11
- package/chat/lib/chat/chat.module.d.ts +0 -7
- package/checkbox-list/README.md +4 -5
- package/checkbox-list/lib/checkbox-list/checkbox-list.module.d.ts +0 -7
- package/chips/README.md +4 -5
- package/chips/lib/chips/chips.module.d.ts +0 -7
- package/code-editor/README.md +4 -5
- package/code-editor/lib/code-editor/code-editor.module.d.ts +0 -7
- package/collapse-link/README.md +4 -5
- package/collapse-link/lib/collapse-link/collapse-link.module.d.ts +0 -7
- package/common/lib/angular-components.module.d.ts +0 -9
- package/common/lib/svg-factory/svg-factory.module.d.ts +0 -7
- package/common/public-api.d.ts +0 -1
- package/content-generator/README.md +2 -2
- package/content-generator/lib/content-generator/content-generator.module.d.ts +0 -7
- package/control-errors/README.md +2 -2
- package/control-errors/lib/control-errors/control-errors.module.d.ts +0 -7
- package/country-phone-picker/README.md +2 -2
- package/country-phone-picker/lib/country-phone-picker/country-phone-picker.module.d.ts +0 -7
- package/currency/README.md +1 -1
- package/custom-fields/README.md +3 -14
- package/custom-fields/lib/custom-fields/custom-fields.module.d.ts +0 -7
- package/custom-fields/lib/custom-fields/models/index.d.ts +0 -1
- package/dialog/README.md +1 -1
- package/drawer/README.md +4 -8
- package/drawer/lib/drawer/drawer.module.d.ts +0 -10
- package/dynamic-form/README.md +2 -18
- package/dynamic-form/dynamic-form/dynamic-form.module.d.ts +0 -7
- package/dynamic-form/dynamic-form/form-field/addon-config.d.ts +1 -10
- package/dynamic-form/dynamic-form/form-field/configurations/fields/currency-field.d.ts +15 -15
- package/dynamic-form/dynamic-form/form-field/configurations/fields/number-field.d.ts +6 -8
- package/dynamic-form/dynamic-form/form-field/fields/bignumber/bignumber-field.component.d.ts +2 -5
- package/dynamic-form/dynamic-form/form-field/fields/currency/currency-field.component.d.ts +664 -0
- package/dynamic-form/dynamic-form/form-field/fields/number/number-field.component.d.ts +29 -0
- package/dynamic-form/public-api.d.ts +1 -0
- package/editable-overlay/README.md +2 -2
- package/editable-overlay/lib/editable-overlay/editable-overlay.module.d.ts +0 -7
- package/empty-state/README.md +2 -5
- package/empty-state/lib/empty-state/empty-state.module.d.ts +0 -7
- package/esm2022/accordion/lib/accordion/accordion.module.mjs +1 -8
- package/esm2022/alert/lib/alert/alert.module.mjs +1 -8
- package/esm2022/badge/lib/badge/badge.module.mjs +1 -11
- package/esm2022/bignumber-input/lib/bignumber-input/bignumber-input.directive.mjs +127 -19
- package/esm2022/bignumber-input/lib/bignumber-input/bignumber-input.module.mjs +1 -8
- package/esm2022/breadcrumb/lib/dynamic-breadcrumb/dynamic-breadcrumb.module.mjs +2 -6
- package/esm2022/button/lib/button/button.module.mjs +1 -8
- package/esm2022/calendar-mask/lib/calendar-mask/calendar-mask.module.mjs +1 -8
- package/esm2022/card/lib/card/card.module.mjs +1 -8
- package/esm2022/chat/lib/chat/chat.module.mjs +1 -8
- package/esm2022/checkbox-list/lib/checkbox-list/checkbox-list.module.mjs +1 -8
- package/esm2022/chips/lib/chips/chips.module.mjs +1 -8
- package/esm2022/code-editor/lib/code-editor/code-editor.component.mjs +1 -10
- package/esm2022/code-editor/lib/code-editor/code-editor.module.mjs +15 -9
- package/esm2022/collapse-link/lib/collapse-link/collapse-link.module.mjs +1 -8
- package/esm2022/common/lib/angular-components.module.mjs +1 -10
- package/esm2022/common/lib/svg-factory/svg-factory.module.mjs +1 -8
- package/esm2022/common/public-api.mjs +1 -2
- package/esm2022/content-generator/lib/content-generator/content-generator.module.mjs +1 -8
- package/esm2022/control-errors/lib/control-errors/control-errors.module.mjs +1 -8
- package/esm2022/country-phone-picker/lib/country-phone-picker/country-phone-picker.module.mjs +1 -8
- package/esm2022/country-phone-picker/lib/country-phone-picker/country-phone-picker.service.mjs +3 -4
- package/esm2022/custom-fields/lib/custom-fields/custom-fields.component.mjs +13 -17
- package/esm2022/custom-fields/lib/custom-fields/custom-fields.module.mjs +1 -8
- package/esm2022/custom-fields/lib/custom-fields/custom-fields.service.mjs +3 -4
- package/esm2022/custom-fields/lib/custom-fields/models/custom-field-type.mjs +2 -4
- package/esm2022/custom-fields/lib/custom-fields/models/index.mjs +1 -2
- package/esm2022/drawer/lib/drawer/drawer.module.mjs +1 -11
- package/esm2022/dynamic-form/dynamic-form/dynamic-form.module.mjs +1 -8
- package/esm2022/dynamic-form/dynamic-form/form-field/addon-config.mjs +2 -6
- package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/currency-field.mjs +1 -1
- package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/number-field.mjs +1 -1
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/bignumber/bignumber-field.component.mjs +10 -33
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/currency/currency-field.component.mjs +96 -0
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/number/number-field.component.mjs +124 -0
- package/esm2022/dynamic-form/public-api.mjs +7 -2
- package/esm2022/editable-overlay/lib/editable-overlay/editable-overlay.module.mjs +1 -8
- package/esm2022/empty-state/lib/empty-state/empty-state.module.mjs +1 -8
- package/esm2022/fieldset/lib/fieldset/fieldset.module.mjs +1 -8
- package/esm2022/file-picker/lib/file-picker/file-picker.module.mjs +1 -8
- package/esm2022/file-picker/lib/file-picker/file-picker.service.mjs +3 -4
- package/esm2022/gantt/lib/gantt/gantt.module.mjs +1 -8
- package/esm2022/global-search/lib/global-search/global-search.module.mjs +1 -19
- package/esm2022/grid-menu/lib/grid-menu/grid-menu.module.mjs +1 -8
- package/esm2022/help-popover/lib/help-popover/help-popover.module.mjs +1 -8
- package/esm2022/image-cropper/lib/image-cropper/image-cropper.module.mjs +1 -12
- package/esm2022/image-cropper/lib/image-cropper/image-cropper.service.mjs +3 -4
- package/esm2022/infinite-scroll/lib/infinite-scroll/infinite-scroll.module.mjs +1 -8
- package/esm2022/info-sign/lib/info-sign/info-sign.module.mjs +1 -8
- package/esm2022/inline-edit/lib/inline-edit/components/fields/inline-edit-number/inline-edit-number.component.mjs +5 -5
- package/esm2022/inline-edit/lib/inline-edit/inline-edit.module.mjs +1 -8
- package/esm2022/input-group/lib/input-group/input-group.module.mjs +1 -8
- package/esm2022/input-mask/lib/input-mask/input-mask.module.mjs +1 -8
- package/esm2022/input-text/lib/input-text/input-text.module.mjs +1 -8
- package/esm2022/insights/lib/insights/insights.module.mjs +1 -11
- package/esm2022/kanban/lib/kanban/kanban-event.service.mjs +3 -4
- package/esm2022/kanban/lib/kanban/kanban.module.mjs +1 -11
- package/esm2022/label-value/lib/label-value/label-value.module.mjs +1 -8
- package/esm2022/loading-state/lib/loading-state/loading-state.module.mjs +1 -8
- package/esm2022/locale/lib/locale/locale.module.mjs +1 -14
- package/esm2022/locale/lib/locale/locale.service.mjs +3 -4
- package/esm2022/locale/lib/locale/options/index.mjs +13 -1
- package/esm2022/locale/lib/locale/pipes/localized-bignumber-impure.pipe.mjs +1 -1
- package/esm2022/locale/lib/locale/pipes/localized-bignumber.pipe.mjs +2 -10
- package/esm2022/locale/public-api.mjs +1 -2
- package/esm2022/localized-number-input/lib/localized-number-input/localized-number-input.directive.mjs +1 -5
- package/esm2022/localized-number-input/lib/localized-number-input/localized-number-input.module.mjs +1 -8
- package/esm2022/mask/lib/mask/mask-formatter.module.mjs +1 -8
- package/esm2022/mouse-events/lib/mouse-events/mouse-events.module.mjs +1 -8
- package/esm2022/navigation-button/lib/navigation-button/navigation-button.module.mjs +1 -8
- package/esm2022/number-input/lib/number-input/number-input.directive.mjs +2 -2
- package/esm2022/number-input/lib/number-input/number-input.module.mjs +2 -9
- package/esm2022/numeric/lib/numeric.module.mjs +1 -8
- package/esm2022/numeric-mask/lib/numeric-mask/numeric-mask.directive.mjs +15 -178
- package/esm2022/numeric-mask/lib/numeric-mask/numeric-mask.module.mjs +1 -8
- package/esm2022/object-card/lib/object-card/object-card.module.mjs +1 -12
- package/esm2022/panel/lib/panel/panel.module.mjs +1 -11
- package/esm2022/password-strength/lib/password-strength/password-strength.module.mjs +1 -8
- package/esm2022/picklist/lib/picklist/picklist.module.mjs +1 -8
- package/esm2022/pin-code-field/lib/pin-code-field.module.mjs +1 -8
- package/esm2022/profile-picture-picker/lib/profile-picture-picker/profile-picture-picker.module.mjs +1 -8
- package/esm2022/progressbar/lib/progressbar/progressbar.module.mjs +1 -8
- package/esm2022/rating-scale/lib/rating-scale/rating-scale.module.mjs +1 -8
- package/esm2022/select/lib/select/select.component.mjs +3 -16
- package/esm2022/select-button/lib/select-button/select-button.module.mjs +1 -8
- package/esm2022/shared/lib/shared/border-button/border-button.module.mjs +1 -8
- package/esm2022/slide-in-bar/lib/slide-in-bar/slide-in-bar.module.mjs +1 -8
- package/esm2022/slide-in-bar/lib/slide-in-bar/slide-in-bar.service.mjs +3 -4
- package/esm2022/slider/lib/slider/slider.module.mjs +1 -8
- package/esm2022/speech-recognition/lib/speech-recognition/speech-recognition.module.mjs +1 -8
- package/esm2022/split-button/lib/split-button/split-button.module.mjs +1 -8
- package/esm2022/stats-card/lib/stats-card/stats-card.module.mjs +1 -8
- package/esm2022/stepper/lib/stepper/stepper.module.mjs +1 -8
- package/esm2022/structure/lib/structure/structure.module.mjs +1 -8
- package/esm2022/switch/lib/switch/switch.module.mjs +1 -8
- package/esm2022/table/lib/table/table.module.mjs +1 -9
- package/esm2022/table-header/lib/table-header/table-header-checkox.module.mjs +1 -8
- package/esm2022/template/lib/template/template.module.mjs +1 -8
- package/esm2022/text-area/lib/text-area.module.mjs +1 -8
- package/esm2022/thumbnail/lib/thumbnail/thumbnail.module.mjs +1 -8
- package/esm2022/thumbnails/lib/thumbnails/thumbnails.module.mjs +1 -8
- package/esm2022/tiered-menu/lib/tiered-menu/tiered-menu.module.mjs +1 -8
- package/esm2022/tile/lib/tile/tile.module.mjs +1 -11
- package/esm2022/timeline/lib/timeline/timeline.module.mjs +1 -8
- package/esm2022/toast/lib/toast/toast.module.mjs +1 -8
- package/esm2022/token-list/lib/token-list/token-list.module.mjs +1 -8
- package/esm2022/tooltip/lib/tooltip/tooltip.module.mjs +1 -8
- package/esm2022/topbar/lib/topbar/topbar.module.mjs +1 -11
- package/esm2022/tree/lib/tree/tree.module.mjs +1 -8
- package/esm2022/workspace-switch/lib/workspace-switch/workspace-switch.module.mjs +1 -8
- package/fesm2022/seniorsistemas-angular-components-accordion.mjs +0 -7
- package/fesm2022/seniorsistemas-angular-components-accordion.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-alert.mjs +0 -7
- package/fesm2022/seniorsistemas-angular-components-alert.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-badge.mjs +0 -10
- package/fesm2022/seniorsistemas-angular-components-badge.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-bignumber-input.mjs +126 -25
- package/fesm2022/seniorsistemas-angular-components-bignumber-input.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-breadcrumb.mjs +1 -5
- package/fesm2022/seniorsistemas-angular-components-breadcrumb.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-button.mjs +0 -7
- package/fesm2022/seniorsistemas-angular-components-button.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-calendar-mask.mjs +0 -7
- package/fesm2022/seniorsistemas-angular-components-calendar-mask.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-card.mjs +0 -7
- package/fesm2022/seniorsistemas-angular-components-card.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-chat.mjs +0 -7
- package/fesm2022/seniorsistemas-angular-components-chat.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-checkbox-list.mjs +0 -7
- package/fesm2022/seniorsistemas-angular-components-checkbox-list.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-chips.mjs +0 -7
- package/fesm2022/seniorsistemas-angular-components-chips.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-code-editor.mjs +160 -164
- package/fesm2022/seniorsistemas-angular-components-code-editor.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-collapse-link.mjs +0 -7
- package/fesm2022/seniorsistemas-angular-components-collapse-link.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-common.mjs +2 -38
- package/fesm2022/seniorsistemas-angular-components-common.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-content-generator.mjs +0 -7
- package/fesm2022/seniorsistemas-angular-components-content-generator.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-control-errors.mjs +0 -7
- package/fesm2022/seniorsistemas-angular-components-control-errors.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-country-phone-picker.mjs +2 -10
- package/fesm2022/seniorsistemas-angular-components-country-phone-picker.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-custom-fields.mjs +15 -75
- package/fesm2022/seniorsistemas-angular-components-custom-fields.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-drawer.mjs +0 -10
- package/fesm2022/seniorsistemas-angular-components-drawer.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs +208 -52
- package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-editable-overlay.mjs +0 -7
- package/fesm2022/seniorsistemas-angular-components-editable-overlay.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-empty-state.mjs +0 -7
- package/fesm2022/seniorsistemas-angular-components-empty-state.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-fieldset.mjs +0 -7
- package/fesm2022/seniorsistemas-angular-components-fieldset.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-file-picker.mjs +2 -10
- package/fesm2022/seniorsistemas-angular-components-file-picker.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-gantt.mjs +0 -7
- package/fesm2022/seniorsistemas-angular-components-gantt.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-global-search.mjs +0 -18
- package/fesm2022/seniorsistemas-angular-components-global-search.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-grid-menu.mjs +0 -7
- package/fesm2022/seniorsistemas-angular-components-grid-menu.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-help-popover.mjs +0 -7
- package/fesm2022/seniorsistemas-angular-components-help-popover.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-image-cropper.mjs +2 -14
- package/fesm2022/seniorsistemas-angular-components-image-cropper.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-infinite-scroll.mjs +0 -7
- package/fesm2022/seniorsistemas-angular-components-infinite-scroll.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-info-sign.mjs +0 -7
- package/fesm2022/seniorsistemas-angular-components-info-sign.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-inline-edit.mjs +4 -11
- package/fesm2022/seniorsistemas-angular-components-inline-edit.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-input-group.mjs +0 -7
- package/fesm2022/seniorsistemas-angular-components-input-group.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-input-mask.mjs +0 -7
- package/fesm2022/seniorsistemas-angular-components-input-mask.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-input-text.mjs +0 -7
- package/fesm2022/seniorsistemas-angular-components-input-text.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-insights.mjs +0 -10
- package/fesm2022/seniorsistemas-angular-components-insights.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-kanban.mjs +2 -13
- package/fesm2022/seniorsistemas-angular-components-kanban.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-label-value.mjs +0 -7
- package/fesm2022/seniorsistemas-angular-components-label-value.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-loading-state.mjs +0 -7
- package/fesm2022/seniorsistemas-angular-components-loading-state.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-locale.mjs +5 -58
- package/fesm2022/seniorsistemas-angular-components-locale.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-localized-number-input.mjs +0 -11
- package/fesm2022/seniorsistemas-angular-components-localized-number-input.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-mask.mjs +0 -7
- package/fesm2022/seniorsistemas-angular-components-mask.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-mouse-events.mjs +0 -7
- package/fesm2022/seniorsistemas-angular-components-mouse-events.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-navigation-button.mjs +0 -7
- package/fesm2022/seniorsistemas-angular-components-navigation-button.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-number-input.mjs +2 -9
- package/fesm2022/seniorsistemas-angular-components-number-input.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-numeric-mask.mjs +14 -184
- package/fesm2022/seniorsistemas-angular-components-numeric-mask.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-numeric.mjs +0 -7
- package/fesm2022/seniorsistemas-angular-components-numeric.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-object-card.mjs +0 -11
- package/fesm2022/seniorsistemas-angular-components-object-card.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-panel.mjs +0 -10
- package/fesm2022/seniorsistemas-angular-components-panel.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-password-strength.mjs +0 -7
- package/fesm2022/seniorsistemas-angular-components-password-strength.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-picklist.mjs +0 -7
- package/fesm2022/seniorsistemas-angular-components-picklist.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-pin-code-field.mjs +0 -7
- package/fesm2022/seniorsistemas-angular-components-pin-code-field.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-profile-picture-picker.mjs +0 -7
- package/fesm2022/seniorsistemas-angular-components-profile-picture-picker.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-progressbar.mjs +0 -7
- package/fesm2022/seniorsistemas-angular-components-progressbar.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-rating-scale.mjs +0 -7
- package/fesm2022/seniorsistemas-angular-components-rating-scale.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-select-button.mjs +0 -7
- package/fesm2022/seniorsistemas-angular-components-select-button.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-select.mjs +2 -15
- package/fesm2022/seniorsistemas-angular-components-select.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-shared.mjs +0 -7
- package/fesm2022/seniorsistemas-angular-components-shared.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-slide-in-bar.mjs +2 -10
- package/fesm2022/seniorsistemas-angular-components-slide-in-bar.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-slider.mjs +0 -7
- package/fesm2022/seniorsistemas-angular-components-slider.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-speech-recognition.mjs +0 -7
- package/fesm2022/seniorsistemas-angular-components-speech-recognition.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-split-button.mjs +0 -7
- package/fesm2022/seniorsistemas-angular-components-split-button.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-stats-card.mjs +0 -7
- package/fesm2022/seniorsistemas-angular-components-stats-card.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-stepper.mjs +0 -7
- package/fesm2022/seniorsistemas-angular-components-stepper.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-structure.mjs +0 -7
- package/fesm2022/seniorsistemas-angular-components-structure.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-switch.mjs +0 -7
- package/fesm2022/seniorsistemas-angular-components-switch.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-table-header.mjs +0 -7
- package/fesm2022/seniorsistemas-angular-components-table-header.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-table.mjs +0 -8
- package/fesm2022/seniorsistemas-angular-components-table.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-template.mjs +0 -7
- package/fesm2022/seniorsistemas-angular-components-template.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-text-area.mjs +0 -7
- package/fesm2022/seniorsistemas-angular-components-text-area.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-thumbnail.mjs +0 -7
- package/fesm2022/seniorsistemas-angular-components-thumbnail.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-thumbnails.mjs +0 -7
- package/fesm2022/seniorsistemas-angular-components-thumbnails.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-tiered-menu.mjs +0 -7
- package/fesm2022/seniorsistemas-angular-components-tiered-menu.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-tile.mjs +0 -10
- package/fesm2022/seniorsistemas-angular-components-tile.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-timeline.mjs +0 -7
- package/fesm2022/seniorsistemas-angular-components-timeline.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-toast.mjs +0 -7
- package/fesm2022/seniorsistemas-angular-components-toast.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-token-list.mjs +0 -7
- package/fesm2022/seniorsistemas-angular-components-token-list.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-tooltip.mjs +0 -7
- package/fesm2022/seniorsistemas-angular-components-tooltip.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-topbar.mjs +0 -10
- package/fesm2022/seniorsistemas-angular-components-topbar.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-tree.mjs +0 -7
- package/fesm2022/seniorsistemas-angular-components-tree.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-workspace-switch.mjs +0 -7
- package/fesm2022/seniorsistemas-angular-components-workspace-switch.mjs.map +1 -1
- package/fieldset/README.md +2 -2
- package/fieldset/lib/fieldset/fieldset.module.d.ts +0 -7
- package/file-picker/README.md +2 -2
- package/file-picker/lib/file-picker/file-picker.module.d.ts +0 -7
- package/file-upload/README.md +1 -1
- package/gantt/README.md +2 -2
- package/gantt/lib/gantt/gantt.module.d.ts +0 -7
- package/global-search/README.md +2 -5
- package/global-search/lib/global-search/global-search.module.d.ts +0 -18
- package/grid-menu/README.md +4 -5
- package/grid-menu/lib/grid-menu/grid-menu.module.d.ts +0 -7
- package/help-popover/README.md +4 -5
- package/help-popover/lib/help-popover/help-popover.module.d.ts +0 -7
- package/ia-insight/README.md +1 -1
- package/image-cropper/README.md +5 -6
- package/image-cropper/lib/image-cropper/image-cropper.module.d.ts +0 -11
- package/infinite-scroll/README.md +4 -5
- package/infinite-scroll/lib/infinite-scroll/infinite-scroll.module.d.ts +0 -7
- package/info-sign/README.md +4 -5
- package/info-sign/lib/info-sign/info-sign.module.d.ts +0 -7
- package/inline-edit/README.md +4 -5
- package/inline-edit/lib/inline-edit/inline-edit.module.d.ts +0 -7
- package/input-group/lib/input-group/input-group.module.d.ts +0 -7
- package/input-mask/lib/input-mask/input-mask.module.d.ts +0 -7
- package/input-text/lib/input-text/input-text.module.d.ts +0 -7
- package/insights/README.md +4 -6
- package/insights/lib/insights/insights.module.d.ts +0 -10
- package/kanban/README.md +4 -6
- package/kanban/lib/kanban/kanban.module.d.ts +0 -10
- package/label-value/README.md +4 -5
- package/label-value/lib/label-value/label-value.module.d.ts +0 -7
- package/loading-state/README.md +5 -9
- package/loading-state/lib/loading-state/loading-state.module.d.ts +0 -7
- package/locale/lib/locale/locale.module.d.ts +0 -13
- package/locale/lib/locale/pipes/localized-bignumber-impure.pipe.d.ts +2 -2
- package/locale/lib/locale/pipes/localized-bignumber.pipe.d.ts +1 -20
- package/locale/public-api.d.ts +0 -1
- package/localized-number-input/README.md +8 -32
- package/localized-number-input/lib/localized-number-input/localized-number-input.directive.d.ts +0 -4
- package/localized-number-input/lib/localized-number-input/localized-number-input.module.d.ts +0 -7
- package/mask/lib/mask/mask-formatter.module.d.ts +0 -7
- package/mouse-events/README.md +4 -5
- package/mouse-events/lib/mouse-events/mouse-events.module.d.ts +0 -7
- package/navigation-button/README.md +4 -5
- package/navigation-button/lib/navigation-button/navigation-button.module.d.ts +0 -7
- package/number-input/lib/number-input/number-input.directive.d.ts +1 -1
- package/number-input/lib/number-input/number-input.module.d.ts +1 -8
- package/numeric/README.md +5 -6
- package/numeric/lib/numeric.module.d.ts +0 -7
- package/numeric-mask/README.md +1 -44
- package/numeric-mask/lib/numeric-mask/numeric-mask.directive.d.ts +4 -65
- package/numeric-mask/lib/numeric-mask/numeric-mask.module.d.ts +0 -7
- package/object-card/README.md +4 -11
- package/object-card/lib/object-card/object-card.module.d.ts +0 -11
- package/package.json +1 -1
- package/panel/README.md +4 -8
- package/panel/lib/panel/panel.module.d.ts +0 -10
- package/password-strength/README.md +3 -6
- package/password-strength/lib/password-strength/password-strength.module.d.ts +0 -7
- package/picklist/README.md +5 -8
- package/picklist/lib/picklist/picklist.module.d.ts +0 -7
- package/pin-code-field/lib/pin-code-field.module.d.ts +0 -7
- package/product-header/README.md +2 -2
- package/profile-picture-picker/README.md +3 -6
- package/profile-picture-picker/lib/profile-picture-picker/profile-picture-picker.module.d.ts +0 -7
- package/progressbar/README.md +3 -6
- package/progressbar/lib/progressbar/progressbar.module.d.ts +0 -7
- package/rating-scale/README.md +3 -6
- package/rating-scale/lib/rating-scale/rating-scale.module.d.ts +0 -7
- package/schematics/collection.json +0 -40
- package/schematics/migrations.json +1 -5
- package/schematics/utils/ast-utils.js +0 -16
- package/schematics/utils/ast-utils.js.map +1 -1
- package/select/lib/select/select.component.d.ts +0 -8
- package/select-button/README.md +3 -6
- package/select-button/lib/select-button/select-button.module.d.ts +0 -7
- package/shared/lib/shared/border-button/border-button.module.d.ts +0 -7
- package/sidebar/README.md +2 -2
- package/slide-in-bar/README.md +5 -5
- package/slide-in-bar/lib/slide-in-bar/slide-in-bar.module.d.ts +0 -7
- package/slider/README.md +3 -6
- package/slider/lib/slider/slider.module.d.ts +0 -7
- package/speech-recognition/README.md +3 -6
- package/speech-recognition/lib/speech-recognition/speech-recognition.module.d.ts +0 -7
- package/split-button/README.md +3 -6
- package/split-button/lib/split-button/split-button.module.d.ts +0 -7
- package/stats-card/README.md +3 -6
- package/stats-card/lib/stats-card/stats-card.module.d.ts +0 -7
- package/stepper/README.md +3 -6
- package/stepper/lib/stepper/stepper.module.d.ts +0 -7
- package/structure/lib/structure/structure.module.d.ts +0 -7
- package/switch/README.md +3 -6
- package/switch/lib/switch/switch.module.d.ts +0 -7
- package/table/README.md +4 -12
- package/table/lib/table/table.module.d.ts +0 -8
- package/table-header/lib/table-header/table-header-checkox.module.d.ts +0 -7
- package/template/README.md +11 -0
- package/template/lib/template/template.module.d.ts +0 -7
- package/text-area/lib/text-area.module.d.ts +0 -7
- package/text-area-ia/README.md +1 -1
- package/thumbnail/lib/thumbnail/thumbnail.module.d.ts +0 -7
- package/thumbnails/lib/thumbnails/thumbnails.module.d.ts +0 -7
- package/tiered-menu/lib/tiered-menu/tiered-menu.module.d.ts +0 -7
- package/tile/lib/tile/tile.module.d.ts +0 -10
- package/timeline/lib/timeline/timeline.module.d.ts +0 -7
- package/toast/lib/toast/toast.module.d.ts +0 -7
- package/token-list/lib/token-list/token-list.module.d.ts +0 -7
- package/tooltip/lib/tooltip/tooltip.module.d.ts +0 -7
- package/topbar/lib/topbar/topbar.module.d.ts +0 -10
- package/tree/lib/tree/tree.module.d.ts +0 -7
- package/workspace-switch/lib/workspace-switch/workspace-switch.module.d.ts +0 -7
- package/common/lib/provide-angular-components.d.ts +0 -19
- package/custom-fields/lib/custom-fields/models/custom-field-value-parser.d.ts +0 -21
- package/esm2022/common/lib/provide-angular-components.mjs +0 -22
- package/esm2022/custom-fields/lib/custom-fields/models/custom-field-value-parser.mjs +0 -46
- package/esm2022/locale/lib/locale/provide-locale.mjs +0 -42
- package/locale/lib/locale/provide-locale.d.ts +0 -18
- package/schematics/migrations/migrate-app-to-standalone/index.d.ts +0 -32
- package/schematics/migrations/migrate-app-to-standalone/index.js +0 -98
- package/schematics/migrations/migrate-app-to-standalone/index.js.map +0 -1
- package/schematics/migrations/migrate-deprecated-apis/index.d.ts +0 -49
- package/schematics/migrations/migrate-deprecated-apis/index.js +0 -660
- package/schematics/migrations/migrate-deprecated-apis/index.js.map +0 -1
- package/schematics/migrations/migrate-deprecated-datepicker/index.d.ts +0 -31
- package/schematics/migrations/migrate-deprecated-datepicker/index.js +0 -115
- package/schematics/migrations/migrate-deprecated-datepicker/index.js.map +0 -1
- package/schematics/migrations/migrate-deprecated-dynamic-form/index.d.ts +0 -52
- package/schematics/migrations/migrate-deprecated-dynamic-form/index.js +0 -661
- package/schematics/migrations/migrate-deprecated-dynamic-form/index.js.map +0 -1
- package/schematics/migrations/migrate-deprecated-imports/index.d.ts +0 -23
- package/schematics/migrations/migrate-deprecated-imports/index.js +0 -335
- package/schematics/migrations/migrate-deprecated-imports/index.js.map +0 -1
- package/schematics/migrations/migrate-deprecated-selectors/index.d.ts +0 -15
- package/schematics/migrations/migrate-deprecated-selectors/index.js +0 -76
- package/schematics/migrations/migrate-deprecated-selectors/index.js.map +0 -1
- package/schematics/migrations/migrate-modules-to-standalone/index.d.ts +0 -51
- package/schematics/migrations/migrate-modules-to-standalone/index.js +0 -632
- package/schematics/migrations/migrate-modules-to-standalone/index.js.map +0 -1
- package/schematics/migrations/migrate-modules-to-standalone/modules-map.json +0 -1656
- package/schematics/migrations/migrate-v20/index.d.ts +0 -9
- package/schematics/migrations/migrate-v20/index.js +0 -90
- package/schematics/migrations/migrate-v20/index.js.map +0 -1
- package/schematics/migrations/migrate-v20/items.d.ts +0 -7
- package/schematics/migrations/migrate-v20/items.js +0 -54
- package/schematics/migrations/migrate-v20/items.js.map +0 -1
- package/schematics/migrations/migrate-v20/plan.d.ts +0 -32
- package/schematics/migrations/migrate-v20/plan.js +0 -29
- package/schematics/migrations/migrate-v20/plan.js.map +0 -1
- package/schematics/schema/app-standalone.schema.json +0 -21
- package/schematics/schema/migrate-v20.schema.json +0 -33
- package/schematics/schema/scope.schema.json +0 -17
- package/schematics/utils/eol.d.ts +0 -5
- package/schematics/utils/eol.js +0 -17
- package/schematics/utils/eol.js.map +0 -1
- package/schematics/utils/prompt-utils.d.ts +0 -62
- package/schematics/utils/prompt-utils.js +0 -166
- package/schematics/utils/prompt-utils.js.map +0 -1
- package/schematics/utils/report.d.ts +0 -27
- package/schematics/utils/report.js +0 -70
- package/schematics/utils/report.js.map +0 -1
- package/schematics/utils/scope.d.ts +0 -17
- package/schematics/utils/scope.js +0 -55
- package/schematics/utils/scope.js.map +0 -1
- package/schematics/utils/selection.d.ts +0 -21
- package/schematics/utils/selection.js +0 -60
- package/schematics/utils/selection.js.map +0 -1
- package/schematics/utils/symbol-utils.d.ts +0 -31
- package/schematics/utils/symbol-utils.js +0 -202
- package/schematics/utils/symbol-utils.js.map +0 -1
- package/schematics/utils/template-utils.d.ts +0 -62
- package/schematics/utils/template-utils.js +0 -165
- package/schematics/utils/template-utils.js.map +0 -1
- package/schematics/utils/tsconfig-paths.d.ts +0 -5
- package/schematics/utils/tsconfig-paths.js +0 -73
- package/schematics/utils/tsconfig-paths.js.map +0 -1
|
@@ -4,12 +4,12 @@ import { inject, Injectable, Component, Input, NgModule } from '@angular/core';
|
|
|
4
4
|
import { ControlContainer, FormGroup, Validators, FormControl, FormArray, NG_VALUE_ACCESSOR, NG_VALIDATORS } from '@angular/forms';
|
|
5
5
|
import { DomSanitizer } from '@angular/platform-browser';
|
|
6
6
|
import { TranslateService } from '@ngx-translate/core';
|
|
7
|
+
import BigNumber from 'bignumber.js';
|
|
7
8
|
import { Subject, of, forkJoin, throwError } from 'rxjs';
|
|
8
9
|
import { takeUntil, finalize, catchError } from 'rxjs/operators';
|
|
9
10
|
import { dynamicTypeToDynamicStructure, DynamicFormComponent } from '@seniorsistemas/angular-components/dynamic-form';
|
|
10
11
|
import { LocaleService } from '@seniorsistemas/angular-components/locale';
|
|
11
12
|
import moment from 'moment';
|
|
12
|
-
import BigNumber from 'bignumber.js';
|
|
13
13
|
|
|
14
14
|
class CustomFieldsService {
|
|
15
15
|
http = inject(HttpClient);
|
|
@@ -34,11 +34,10 @@ class CustomFieldsService {
|
|
|
34
34
|
return this.http.get(permanentUrl, { responseType: 'blob' });
|
|
35
35
|
}
|
|
36
36
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CustomFieldsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
37
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CustomFieldsService
|
|
37
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CustomFieldsService });
|
|
38
38
|
}
|
|
39
39
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CustomFieldsService, decorators: [{
|
|
40
|
-
type: Injectable
|
|
41
|
-
args: [{ providedIn: 'root' }]
|
|
40
|
+
type: Injectable
|
|
42
41
|
}] });
|
|
43
42
|
|
|
44
43
|
var CustomFieldType;
|
|
@@ -77,59 +76,12 @@ const apiTypesToDynamicFormType = (type) => {
|
|
|
77
76
|
case 'Boolean':
|
|
78
77
|
return 'boolean';
|
|
79
78
|
case 'Money':
|
|
80
|
-
return 'money';
|
|
81
79
|
case 'Double':
|
|
82
|
-
return 'double';
|
|
83
80
|
case 'Integer':
|
|
84
|
-
return '
|
|
81
|
+
return 'legacyNumber';
|
|
85
82
|
}
|
|
86
83
|
};
|
|
87
84
|
|
|
88
|
-
/**
|
|
89
|
-
* Tipos de campo do dynamic-form que representam valores numéricos no custom-fields.
|
|
90
|
-
*/
|
|
91
|
-
const NUMERIC_FIELD_TYPES = ['integer', 'double', 'money'];
|
|
92
|
-
/**
|
|
93
|
-
* Verifica se o tipo do campo (já mapeado para o dynamic-form) é numérico.
|
|
94
|
-
*/
|
|
95
|
-
const isNumericFieldType = (type) => NUMERIC_FIELD_TYPES.includes(type);
|
|
96
|
-
/**
|
|
97
|
-
* Converte o valor numérico recebido do backend para o formato aceito pelo campo numérico
|
|
98
|
-
* do dynamic-form (string em formato internacional, ex.: `'1234.50'`).
|
|
99
|
-
*
|
|
100
|
-
* Valores vazios ou inválidos resultam em `null`.
|
|
101
|
-
*/
|
|
102
|
-
const parseNumericValueFromApi = (value) => {
|
|
103
|
-
if (value === null || value === undefined || value === '') {
|
|
104
|
-
return null;
|
|
105
|
-
}
|
|
106
|
-
const bigNumber = new BigNumber(value);
|
|
107
|
-
return bigNumber.isNaN() ? null : bigNumber.toFixed();
|
|
108
|
-
};
|
|
109
|
-
/**
|
|
110
|
-
* Converte o valor do campo numérico (string em formato internacional) para `number`,
|
|
111
|
-
* que é o formato esperado pelo backend do custom-fields.
|
|
112
|
-
*
|
|
113
|
-
* - Valores vazios resultam em `null`.
|
|
114
|
-
* - Valores que não são numéricos (ex.: campos com máscara de texto) são devolvidos como estão.
|
|
115
|
-
* - Valores que não cabem em `number` sem perda de precisão são convertidos mesmo assim,
|
|
116
|
-
* emitindo um aviso no console.
|
|
117
|
-
*/
|
|
118
|
-
const parseNumericValueToApi = (value) => {
|
|
119
|
-
if (value === null || value === undefined || value === '') {
|
|
120
|
-
return null;
|
|
121
|
-
}
|
|
122
|
-
const bigNumber = new BigNumber(value);
|
|
123
|
-
if (bigNumber.isNaN()) {
|
|
124
|
-
return value;
|
|
125
|
-
}
|
|
126
|
-
const numeric = bigNumber.toNumber();
|
|
127
|
-
if (!new BigNumber(numeric).isEqualTo(bigNumber)) {
|
|
128
|
-
console.warn(`[s-custom-fields] O valor ${bigNumber.toFixed()} perde precisão ao ser convertido para number.`);
|
|
129
|
-
}
|
|
130
|
-
return numeric;
|
|
131
|
-
};
|
|
132
|
-
|
|
133
85
|
/**
|
|
134
86
|
* @description Componente que carrega e renderiza campos customizados dinamicamente
|
|
135
87
|
* a partir da API de customização de campos do Senior. Realiza chamadas HTTP para
|
|
@@ -385,10 +337,6 @@ class CustomFieldsComponent {
|
|
|
385
337
|
}
|
|
386
338
|
}
|
|
387
339
|
}
|
|
388
|
-
if (isNumericFieldType(type)) {
|
|
389
|
-
parsedValues[name] = parseNumericValueFromApi(value);
|
|
390
|
-
return;
|
|
391
|
-
}
|
|
392
340
|
if (!value) {
|
|
393
341
|
return;
|
|
394
342
|
}
|
|
@@ -433,12 +381,13 @@ class CustomFieldsComponent {
|
|
|
433
381
|
const { type } = field;
|
|
434
382
|
const name = field.name;
|
|
435
383
|
let value = this.formGroup.get(name)?.value;
|
|
436
|
-
if (isNumericFieldType(type)) {
|
|
437
|
-
parsedValues[name] = parseNumericValueToApi(value);
|
|
438
|
-
return;
|
|
439
|
-
}
|
|
440
384
|
if (value) {
|
|
441
385
|
switch (type) {
|
|
386
|
+
case 'number':
|
|
387
|
+
const { mask, scale } = field;
|
|
388
|
+
if (mask)
|
|
389
|
+
value = new BigNumber(value).toFixed(scale).toString();
|
|
390
|
+
break;
|
|
442
391
|
case 'date':
|
|
443
392
|
value = moment(value).format('YYYY-MM-DD');
|
|
444
393
|
break;
|
|
@@ -455,7 +404,7 @@ class CustomFieldsComponent {
|
|
|
455
404
|
break;
|
|
456
405
|
}
|
|
457
406
|
}
|
|
458
|
-
if ((value === null || value === undefined) && type === 'enum') {
|
|
407
|
+
if ((value === null || value === undefined) && (type === 'number' || type === 'enum')) {
|
|
459
408
|
const isMultiple = field.multiple;
|
|
460
409
|
parsedValues[name] = isMultiple ? [] : null;
|
|
461
410
|
}
|
|
@@ -484,10 +433,9 @@ class CustomFieldsComponent {
|
|
|
484
433
|
break;
|
|
485
434
|
case CustomFieldType.Money:
|
|
486
435
|
parameters = {
|
|
487
|
-
type: '
|
|
436
|
+
type: 'legacyNumber',
|
|
488
437
|
precision: 15,
|
|
489
438
|
scale: 2,
|
|
490
|
-
allowNegative: true,
|
|
491
439
|
leftAddon: {
|
|
492
440
|
label: localeOptions?.number?.currencySymbol ?? 'R$',
|
|
493
441
|
},
|
|
@@ -495,18 +443,17 @@ class CustomFieldsComponent {
|
|
|
495
443
|
break;
|
|
496
444
|
case CustomFieldType.Double:
|
|
497
445
|
parameters = {
|
|
498
|
-
type: '
|
|
446
|
+
type: 'legacyNumber',
|
|
499
447
|
precision: 15,
|
|
500
448
|
scale: 2,
|
|
501
|
-
|
|
449
|
+
localizedNumber: true,
|
|
502
450
|
};
|
|
503
451
|
break;
|
|
504
452
|
case CustomFieldType.Integer:
|
|
505
453
|
parameters = {
|
|
506
|
-
type: '
|
|
454
|
+
type: 'legacyNumber',
|
|
507
455
|
precision: 15,
|
|
508
456
|
scale: 0,
|
|
509
|
-
allowNegative: true,
|
|
510
457
|
};
|
|
511
458
|
break;
|
|
512
459
|
case CustomFieldType.Any:
|
|
@@ -827,13 +774,6 @@ function errorOnUpload(file) {
|
|
|
827
774
|
return () => (file.error ? { uploadError: true } : null);
|
|
828
775
|
}
|
|
829
776
|
|
|
830
|
-
/**
|
|
831
|
-
* @deprecated Será removido na v20. Importe diretamente o standalone `CustomFieldsComponent` (de
|
|
832
|
-
* `@seniorsistemas/angular-components/custom-fields`) no lugar deste módulo.
|
|
833
|
-
*
|
|
834
|
-
* Migração automática (também executada pelo `ng update` na v20):
|
|
835
|
-
* `ng generate @seniorsistemas/angular-components:migrate-modules-to-standalone`
|
|
836
|
-
*/
|
|
837
777
|
class CustomFieldsModule {
|
|
838
778
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CustomFieldsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
839
779
|
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: CustomFieldsModule, imports: [CustomFieldsComponent], exports: [CustomFieldsComponent] });
|
|
@@ -852,5 +792,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
852
792
|
* Generated bundle index. Do not edit.
|
|
853
793
|
*/
|
|
854
794
|
|
|
855
|
-
export { CustomFieldType, CustomFieldsComponent, CustomFieldsModule, CustomFieldsService, apiTypesToDynamicFormType
|
|
795
|
+
export { CustomFieldType, CustomFieldsComponent, CustomFieldsModule, CustomFieldsService, apiTypesToDynamicFormType };
|
|
856
796
|
//# sourceMappingURL=seniorsistemas-angular-components-custom-fields.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seniorsistemas-angular-components-custom-fields.mjs","sources":["../../projects/angular-components/custom-fields/src/lib/custom-fields/custom-fields.service.ts","../../projects/angular-components/custom-fields/src/lib/custom-fields/models/custom-field-type.ts","../../projects/angular-components/custom-fields/src/lib/custom-fields/models/custom-field-value-parser.ts","../../projects/angular-components/custom-fields/src/lib/custom-fields/custom-fields.component.ts","../../projects/angular-components/custom-fields/src/lib/custom-fields/custom-fields.component.html","../../projects/angular-components/custom-fields/src/lib/custom-fields/custom-fields.module.ts","../../projects/angular-components/custom-fields/src/seniorsistemas-angular-components-custom-fields.ts"],"sourcesContent":["import { HttpClient } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { CustomFieldsResponse } from './models';\n\n@Injectable({ providedIn: 'root' })\nexport class CustomFieldsService {\n private http = inject(HttpClient);\n\n\n public getCustomFields(\n domain: string,\n service: string,\n entity: string,\n endpoint: string,\n ): Observable<CustomFieldsResponse> {\n const entityDto = { entityId: { domain_: domain, service_: service, id: entity } };\n return this.http.post<CustomFieldsResponse>(endpoint, entityDto);\n }\n\n public getFileLocationUrl(\n dto: {\n domain: string;\n service: string;\n entityName: string;\n field: string;\n fileName: string;\n },\n endpoint: string,\n ): Observable<any> {\n return this.http.post(endpoint, dto);\n }\n\n public uploadTempFile(location: string, file: File) {\n return this.http.put(location, file, {\n reportProgress: true,\n observe: 'events',\n headers: { 'Content-Type': file.type },\n });\n }\n\n public requestAccess(objectId: string, endpoint: string) {\n return this.http.post(endpoint, { objectId });\n }\n\n public getFile(permanentUrl: string) {\n return this.http.get(permanentUrl, { responseType: 'blob' });\n }\n}\n\n","import { FieldType } from '@seniorsistemas/angular-components/dynamic-form';\n\nexport enum CustomFieldType {\n String = 'String',\n Boolean = 'Boolean',\n Integer = 'Integer',\n Double = 'Double',\n Date = 'Date',\n DateTime = 'DateTime',\n LocalDateTime = 'LocalDateTime',\n Time = 'Time',\n Money = 'Money',\n Blob = 'Blob',\n Binary = 'Binary',\n Any = 'Any',\n Enum = 'Enum',\n}\n\nexport type CustomFieldsTypeAPI = 'Enumeration' | keyof typeof CustomFieldType;\n\nexport const apiTypesToDynamicFormType = (type: CustomFieldsTypeAPI): FieldType => {\n switch (type) {\n case 'String':\n case 'Any':\n return 'string';\n case 'Binary':\n return 'binary';\n case 'Blob':\n return 'blob';\n case 'DateTime':\n case 'Time':\n case 'Date':\n case 'LocalDateTime':\n return 'date';\n case 'Enumeration':\n case 'Enum':\n return 'enum';\n case 'Boolean':\n return 'boolean';\n case 'Money':\n return 'money';\n case 'Double':\n return 'double';\n case 'Integer':\n return 'integer';\n }\n};\n\nexport interface FieldFromAPI {\n id: string;\n type: CustomFieldsTypeAPI;\n customizable: boolean;\n customization: FieldCustomization;\n}\n\nexport interface FieldCustomization {\n active: boolean;\n label: string;\n tooltip: string;\n mask?: string;\n validationRegex?: string;\n customEnumeration?: CustomEnumeration;\n infoSign?: string;\n mandatory?: boolean;\n}\n\nexport interface CustomEnumeration {\n multiple?: boolean;\n values: EnumValue[];\n}\n\nexport interface EnumValue {\n key: string;\n value: string;\n}\n\nexport interface CustomFieldsResponse {\n entity_: {\n active: boolean;\n fields: FieldFromAPI[];\n };\n}\n\n","import BigNumber from 'bignumber.js';\n\n/**\n * Tipos de campo do dynamic-form que representam valores numéricos no custom-fields.\n */\nconst NUMERIC_FIELD_TYPES: readonly string[] = ['integer', 'double', 'money'];\n\n/**\n * Verifica se o tipo do campo (já mapeado para o dynamic-form) é numérico.\n */\nexport const isNumericFieldType = (type: string): boolean => NUMERIC_FIELD_TYPES.includes(type);\n\n/**\n * Converte o valor numérico recebido do backend para o formato aceito pelo campo numérico\n * do dynamic-form (string em formato internacional, ex.: `'1234.50'`).\n *\n * Valores vazios ou inválidos resultam em `null`.\n */\nexport const parseNumericValueFromApi = (value: unknown): string | null => {\n if (value === null || value === undefined || value === '') {\n return null;\n }\n\n const bigNumber = new BigNumber(value as BigNumber.Value);\n return bigNumber.isNaN() ? null : bigNumber.toFixed();\n};\n\n/**\n * Converte o valor do campo numérico (string em formato internacional) para `number`,\n * que é o formato esperado pelo backend do custom-fields.\n *\n * - Valores vazios resultam em `null`.\n * - Valores que não são numéricos (ex.: campos com máscara de texto) são devolvidos como estão.\n * - Valores que não cabem em `number` sem perda de precisão são convertidos mesmo assim,\n * emitindo um aviso no console.\n */\nexport const parseNumericValueToApi = (value: unknown): number | string | null => {\n if (value === null || value === undefined || value === '') {\n return null;\n }\n\n const bigNumber = new BigNumber(value as BigNumber.Value);\n if (bigNumber.isNaN()) {\n return value as string;\n }\n\n const numeric = bigNumber.toNumber();\n if (!new BigNumber(numeric).isEqualTo(bigNumber)) {\n console.warn(`[s-custom-fields] O valor ${bigNumber.toFixed()} perde precisão ao ser convertido para number.`);\n }\n return numeric;\n};\n","import { HttpErrorResponse, HttpEventType } from '@angular/common/http';\r\nimport {\r\n AfterViewInit,\r\n Component,\r\n ElementRef,\r\n Input,\r\n OnChanges,\r\n OnDestroy,\r\n OnInit,\r\n SimpleChanges,\r\n inject,\r\n} from '@angular/core';\r\nimport {\r\n ControlContainer,\r\n ControlValueAccessor,\r\n FormArray,\r\n FormControl,\r\n FormGroup,\r\n NG_VALIDATORS,\r\n NG_VALUE_ACCESSOR,\r\n Validator,\r\n ValidatorFn,\r\n Validators,\r\n} from '@angular/forms';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\n\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { BehaviorSubject, forkJoin, Observable, of, Subject, throwError } from 'rxjs';\r\nimport { catchError, finalize, takeUntil } from 'rxjs/operators';\r\n\r\nimport {\r\n BignumberFieldConfig,\r\n BlobFieldConfig,\r\n BooleanFieldConfig,\r\n DynamicStructure,\r\n DynamicType,\r\n dynamicTypeToDynamicStructure,\r\n ExpandedDynamicType,\r\n SelectFieldConfig,\r\n StructureType,\r\n} from '@seniorsistemas/angular-components/dynamic-form';\r\nimport { FileDto } from '@seniorsistemas/angular-components/file-upload';\r\nimport {\r\n CalendarLocaleOptions,\r\n LocaleOptions,\r\n LocaleService,\r\n NumberLocaleOptions,\r\n} from '@seniorsistemas/angular-components/locale';\r\nimport moment from 'moment';\r\nimport { CustomFieldsService } from './custom-fields.service';\r\nimport {\r\n apiTypesToDynamicFormType,\r\n CustomFieldsResponse,\r\n CustomFieldsTypeAPI,\r\n CustomFieldType,\r\n FieldFromAPI,\r\n isNumericFieldType,\r\n parseNumericValueFromApi,\r\n parseNumericValueToApi,\r\n} from './models';\r\nimport { DynamicFormComponent as DynamicFormComponent_1 } from '@seniorsistemas/angular-components/dynamic-form';\r\n\r\n/**\r\n * @description Componente que carrega e renderiza campos customizados dinamicamente\r\n * a partir da API de customização de campos do Senior. Realiza chamadas HTTP para\r\n * obter a configuração dos campos, gera o formulário reativamente via {@link DynamicFormComponent}\r\n * e implementa {@link ControlValueAccessor} e {@link Validator} para integração completa\r\n * com formulários Angular.\r\n *\r\n * @example\r\n * ```html\r\n * <s-custom-fields\r\n * formControlName=\"camposCustomizados\"\r\n * domain=\"plataforma\"\r\n * service=\"servico\"\r\n * entity=\"entidade\" />\r\n * ```\r\n *\r\n * @category Inputs\r\n */\r\n@Component({\r\n selector: 's-custom-fields',\r\n templateUrl: './custom-fields.component.html',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: CustomFieldsComponent,\r\n multi: true,\r\n },\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: CustomFieldsComponent,\r\n multi: true,\r\n },\r\n ],\r\n standalone: true,\r\n imports: [DynamicFormComponent_1],\r\n})\r\nexport class CustomFieldsComponent\r\n implements OnInit, OnDestroy, ControlValueAccessor, Validator, OnChanges, AfterViewInit\r\n{\r\n private readonly customFieldsService = inject(CustomFieldsService);\r\n private readonly localeService = inject(LocaleService);\r\n private readonly sanitizer = inject(DomSanitizer);\r\n private readonly translateService = inject(TranslateService);\r\n private readonly controlContainer = inject(ControlContainer, { optional: true });\r\n\r\n /** @description Domínio utilizado para buscar os campos customizados na API. Campo obrigatório. */\r\n @Input({ required: true })\r\n public domain!: string;\r\n\r\n /** @description Nome do serviço utilizado para identificar os campos customizados. Campo obrigatório. */\r\n @Input({ required: true })\r\n public service!: string;\r\n\r\n /** @description Nome da entidade para a qual os campos customizados são carregados. Campo obrigatório. */\r\n @Input({ required: true })\r\n public entity!: string;\r\n\r\n /** @description Mensagem de erro exibida quando algum campo customizado está inválido. @default '' */\r\n @Input()\r\n public invalidErrorLabel = '';\r\n\r\n /** @description Objeto com dados pré-carregados da entidade, evitando chamadas extras à API. */\r\n @Input()\r\n public entityObject?: CustomFieldsResponse;\r\n\r\n /** @description Endpoint para buscar a configuração dos campos customizados. */\r\n @Input()\r\n public customFieldsEndpoint = 'platform/field_customization/queries/getEntity';\r\n\r\n /** @description Endpoint para solicitar o upload de arquivos em campos do tipo blob. */\r\n @Input()\r\n public fileLocationEndpoint = 'platform/field_customization/actions/requestUpload';\r\n\r\n /** @description Endpoint para solicitar acesso a arquivos já enviados. */\r\n @Input()\r\n public requestAccessEndpoint = 'platform/field_customization/actions/requestAccess';\r\n\r\n /** @description Mensagem de erro exibida quando um campo obrigatório não está preenchido. @default '' */\r\n @Input()\r\n public requiredErrorMessage = '';\r\n\r\n /** @description Tempo em ms após o qual o info-sign de campos do tipo data é exibido. @default 0 */\r\n @Input()\r\n public displayTimeInfoSign = 0;\r\n\r\n /** @description Exibe a data de upload nos campos do tipo arquivo. @default false */\r\n @Input()\r\n public showFileUploadDate = false;\r\n\r\n /** @description Observable que sinaliza quando o componente deve iniciar o carregamento dos campos. @default null */\r\n @Input()\r\n public ready$: BehaviorSubject<boolean> | null = null;\r\n\r\n /** @description Quando `true`, todos os campos customizados são desabilitados. */\r\n @Input()\r\n public disableFields: boolean | undefined;\r\n\r\n protected rowType: StructureType = 'row';\r\n\r\n public fields: DynamicType[] = [];\r\n public formGroup: FormGroup = new FormGroup({});\r\n\r\n protected dynamicStructure: DynamicStructure[] = [];\r\n\r\n private ready = false;\r\n private onChange: any;\r\n private onTouched: any;\r\n private value: any;\r\n private readonly ngUsubscribe: Subject<void> = new Subject();\r\n private uploadCanceled: boolean | undefined;\r\n private hasBlob: boolean | undefined;\r\n private hasUploaded: boolean | undefined;\r\n\r\n constructor() {\r\n this.invalidErrorLabel = this.translateService.instant('platform.angular_components.invalid_value');\r\n }\r\n\r\n public get hasCustomFields(): boolean {\r\n return !!this.fields?.length;\r\n }\r\n\r\n public get parentForm(): FormGroup {\r\n return this.controlContainer!.control as FormGroup;\r\n }\r\n\r\n public get parentControl(): FormControl {\r\n return this.parentForm.get('custom') as FormControl;\r\n }\r\n\r\n public ngOnInit(): void {\r\n this._validateInputs();\r\n this._createForm();\r\n this.addDisplayTimeInfoSignToFields();\r\n }\r\n\r\n public ngAfterViewInit(): void {\r\n this.enableOrDisableFields(!!this.disableFields);\r\n\r\n this.formGroup.valueChanges.subscribe(() => this.onChange?.(this.parseFieldsValues()));\r\n }\r\n\r\n public ngOnChanges(changes: SimpleChanges): void {\r\n const _disableFields = changes['disableFields'];\r\n if (_disableFields) {\r\n this.enableOrDisableFields(_disableFields.currentValue);\r\n }\r\n }\r\n\r\n public ngOnDestroy() {\r\n this.ngUsubscribe.next();\r\n this.ngUsubscribe.complete();\r\n }\r\n\r\n public registerOnChange(fn: Function) {\r\n this.onChange = fn;\r\n }\r\n\r\n public registerOnTouched(fn: Function) {\r\n this.onTouched = fn;\r\n }\r\n\r\n public writeValue(value: any) {\r\n if (this.ready) {\r\n const newValue = this.parseValuesForFields(value);\r\n this.formGroup.patchValue(newValue);\r\n this.value = newValue;\r\n this.createFilesIfSetFormValuesAfterInit();\r\n } else {\r\n this.formGroup.patchValue(value || {});\r\n this.value = value;\r\n }\r\n }\r\n\r\n public setDisabledState(isDisabled: boolean) {\r\n if (isDisabled) {\r\n this.formGroup.disable({ emitEvent: false });\r\n } else {\r\n this.formGroup.enable({ emitEvent: false });\r\n }\r\n }\r\n\r\n public getCustomFields(): Observable<CustomFieldsResponse> {\r\n if (this.entityObject?.entity_) {\r\n return of(this.entityObject);\r\n }\r\n return this.customFieldsService.getCustomFields(\r\n this.domain,\r\n this.service,\r\n this.entity,\r\n this.customFieldsEndpoint,\r\n );\r\n }\r\n\r\n public validate() {\r\n const errors: any = {};\r\n Object.keys(this.formGroup.controls).forEach((field) => {\r\n const { errors: controlErrors } = this.formGroup.get(field) as FormGroup;\r\n if (controlErrors) {\r\n errors[field] = controlErrors;\r\n }\r\n });\r\n return errors;\r\n }\r\n\r\n public cleanFields() {\r\n this.formGroup.reset();\r\n }\r\n\r\n private enableOrDisableFields(disabled: boolean): void {\r\n if (!this.formGroup) {\r\n return;\r\n }\r\n\r\n for (const controlName of Object.keys(this.formGroup.value)) {\r\n disabled ? this.formGroup.get(controlName)?.disable() : this.formGroup.get(controlName)?.enable();\r\n }\r\n }\r\n\r\n private _validateInputs(): void {\r\n if (!this.domain) {\r\n throw new Error('You need to specify the custom-fields domain!');\r\n }\r\n if (!this.service) {\r\n throw new Error('You need to specify the custom-fields service!');\r\n }\r\n if (!this.entity) {\r\n throw new Error('You need to specify the custom-fields entity!');\r\n }\r\n }\r\n\r\n private _createForm(): void {\r\n this.formGroup = new FormGroup({});\r\n const observables = [this.getCustomFields(), this.localeService.get()];\r\n forkJoin(observables)\r\n .pipe(\r\n takeUntil(this.ngUsubscribe),\r\n finalize(() => {\r\n this.formGroup.markAsPristine();\r\n this.parentControl?.markAsPristine();\r\n\r\n if (this.ready$) {\r\n this.ready$.next(true);\r\n }\r\n }),\r\n )\r\n .subscribe((response) => {\r\n const [customFieldsResponse, localeOptions] = response as [CustomFieldsResponse, LocaleOptions];\r\n const defaults: { [key in string]: { defaultValue?: boolean; defaultMask?: string } } = {};\r\n defaults[CustomFieldType.String] = {};\r\n defaults[CustomFieldType.Boolean] = { defaultValue: false };\r\n defaults[CustomFieldType.Integer] = {};\r\n defaults[CustomFieldType.Double] = { defaultMask: '' };\r\n defaults[CustomFieldType.Money] = {};\r\n defaults[CustomFieldType.Date] = {};\r\n defaults[CustomFieldType.DateTime] = {};\r\n defaults[CustomFieldType.LocalDateTime] = {};\r\n defaults[CustomFieldType.Time] = {};\r\n defaults[CustomFieldType.Blob] = {};\r\n defaults[CustomFieldType.Enum] = {};\r\n defaults[CustomFieldType.Binary] = {};\r\n defaults[CustomFieldType.Any] = {};\r\n\r\n if (!customFieldsResponse || !customFieldsResponse.entity_) {\r\n return;\r\n }\r\n const { active, fields } = customFieldsResponse.entity_;\r\n if (!active) {\r\n return;\r\n }\r\n\r\n fields\r\n .filter((field) => field.customizable && field.customization?.active)\r\n .forEach((field) => {\r\n const dynamicType = this.getDynamicType(field, localeOptions);\r\n\r\n const fieldType = field.type;\r\n\r\n if (field.type === CustomFieldType.Blob && this.value && this.value[dynamicType.name]) {\r\n this.createBlobToFileUpload(dynamicType as BlobFieldConfig);\r\n }\r\n\r\n const { validationRegex } = field.customization;\r\n\r\n const asIsTypes: CustomFieldsTypeAPI[] = [\r\n CustomFieldType.Boolean,\r\n CustomFieldType.Money,\r\n CustomFieldType.Date,\r\n CustomFieldType.DateTime,\r\n CustomFieldType.LocalDateTime,\r\n CustomFieldType.Time,\r\n ];\r\n\r\n const validators = [];\r\n if (validationRegex && !asIsTypes.includes(fieldType)) {\r\n validators.push(Validators.pattern(validationRegex));\r\n }\r\n if (fieldType === CustomFieldType.Integer && !(dynamicType as BignumberFieldConfig).mask) {\r\n validators.push(Validators.pattern(/^\\-?\\d*$/));\r\n }\r\n\r\n if (dynamicType.required?.()) {\r\n validators.push(Validators.required);\r\n }\r\n\r\n const control = new FormControl(\r\n { value: defaults[fieldType].defaultValue, disabled: this.formGroup.disabled },\r\n validators,\r\n );\r\n\r\n this.formGroup.addControl(dynamicType.name, control);\r\n\r\n this.fields.push(dynamicType);\r\n });\r\n this.dynamicStructure = dynamicTypeToDynamicStructure(this.fields);\r\n\r\n this.createFieldCustomization(fields);\r\n this.formGroup.patchValue(this.parseValuesForFields(this.value));\r\n this.ready = true;\r\n });\r\n }\r\n\r\n private parseValuesForFields(values: any) {\r\n const parsedValues = { ...values };\r\n\r\n this.fields.forEach((field) => {\r\n const type = field.type;\r\n const name = field.name;\r\n const value = values?.[name];\r\n\r\n /**\r\n * Tratamento exclusivo para campos boolean que tem o status Empty\r\n * Essa condicional necessita estar antes do if (!value) return;\r\n * Pois ela tem um status que usa null no valor do campo radio boolean\r\n */\r\n if (type === 'boolean') {\r\n const isString = typeof value === 'string';\r\n const notValid = !isString && typeof value !== 'boolean';\r\n if (notValid) {\r\n parsedValues[name] = null;\r\n } else {\r\n // Condicional para campos que retornam string de boolen do backand\r\n if (isString) {\r\n parsedValues[name] = value === 'true' ? true : false;\r\n } else {\r\n parsedValues[name] = value;\r\n }\r\n }\r\n }\r\n\r\n if (isNumericFieldType(type)) {\r\n parsedValues[name] = parseNumericValueFromApi(value);\r\n return;\r\n }\r\n\r\n if (!value) {\r\n return;\r\n }\r\n\r\n switch (type) {\r\n case 'date':\r\n parsedValues[name] = moment(value).toDate();\r\n break;\r\n case 'dateTime':\r\n parsedValues[name] = moment(value).toDate();\r\n break;\r\n case 'localDateTime':\r\n parsedValues[name] = moment(value, 'YYYY-MM-DD[T]HH:mm:ss.SSS').toDate();\r\n break;\r\n case 'time':\r\n parsedValues[name] = moment(value, 'HH:mm:ss').toDate();\r\n break;\r\n default:\r\n break;\r\n }\r\n });\r\n\r\n return parsedValues;\r\n }\r\n\r\n /**\r\n * Algumas equipes só setam valor no formulário, após o carregamento da tela\r\n * Como é bem padrão isso, foi necessário criar esse método para gerar o file\r\n * após setar o valor no formulário\r\n */\r\n private createFilesIfSetFormValuesAfterInit() {\r\n if (!this.hasUploaded) {\r\n this.fields\r\n .filter((field) => field.type === 'blob')\r\n .forEach((field) => {\r\n if (this.formGroup.get(field.name)?.value) {\r\n this.createBlobToFileUpload(field);\r\n }\r\n });\r\n }\r\n }\r\n\r\n private parseFieldsValues() {\r\n const parsedValues: any = {};\r\n\r\n this.fields.forEach((field) => {\r\n const { type } = field;\r\n const name = field.name;\r\n let value = this.formGroup.get(name)?.value;\r\n\r\n if (isNumericFieldType(type)) {\r\n parsedValues[name] = parseNumericValueToApi(value);\r\n return;\r\n }\r\n\r\n if (value) {\r\n switch (type) {\r\n case 'date':\r\n value = moment(value).format('YYYY-MM-DD');\r\n break;\r\n case 'dateTime':\r\n value = moment(value).format();\r\n break;\r\n case 'localDateTime':\r\n value = moment(value).format('YYYY-MM-DD[T]HH:mm:ss.SSS');\r\n break;\r\n case 'time':\r\n value = moment(value).format('HH:mm:ss');\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n if ((value === null || value === undefined) && type === 'enum') {\r\n const isMultiple = (field as SelectFieldConfig).multiple;\r\n parsedValues[name] = isMultiple ? [] : null;\r\n } else {\r\n parsedValues[name] = value;\r\n }\r\n });\r\n\r\n if (this.hasBlob) {\r\n parsedValues['fieldCustomization'] = this.formGroup.get('fieldCustomization')?.value;\r\n }\r\n return parsedValues;\r\n }\r\n\r\n private getDynamicType(field: FieldFromAPI, localeOptions: LocaleOptions): DynamicType {\r\n let parameters: Partial<DynamicType> = {};\r\n\r\n switch (field.type) {\r\n case CustomFieldType.Blob:\r\n parameters = this.getBlobParameters();\r\n break;\r\n case CustomFieldType.Boolean:\r\n parameters = this.getBooleanParameters();\r\n break;\r\n case 'Enumeration':\r\n case CustomFieldType.Enum:\r\n field.type = 'Enum';\r\n parameters = this.getSelectParameters(field);\r\n break;\r\n case CustomFieldType.Money:\r\n parameters = {\r\n type: 'money',\r\n precision: 15,\r\n scale: 2,\r\n allowNegative: true,\r\n leftAddon: {\r\n label: localeOptions?.number?.currencySymbol ?? 'R$',\r\n },\r\n };\r\n break;\r\n case CustomFieldType.Double:\r\n parameters = {\r\n type: 'double',\r\n precision: 15,\r\n scale: 2,\r\n allowNegative: true,\r\n };\r\n break;\r\n case CustomFieldType.Integer:\r\n parameters = {\r\n type: 'integer',\r\n precision: 15,\r\n scale: 0,\r\n allowNegative: true,\r\n };\r\n break;\r\n case CustomFieldType.Any:\r\n field.type = 'String';\r\n parameters = {\r\n type: 'string',\r\n };\r\n break;\r\n }\r\n\r\n const dynamicType: DynamicType & {\r\n calendarOptions: CalendarLocaleOptions;\r\n currencyOptions: NumberLocaleOptions;\r\n } = {\r\n ...parameters,\r\n name: field.id,\r\n label: field.customization.label,\r\n tooltip: field.customization.tooltip,\r\n infoSign: field.customization.infoSign,\r\n type: apiTypesToDynamicFormType(field.type),\r\n mask: field.customization.mask,\r\n required: () => field.customization.mandatory ?? false,\r\n calendarOptions: localeOptions.calendar,\r\n currencyOptions: localeOptions.number,\r\n } as DynamicType & { calendarOptions: CalendarLocaleOptions; currencyOptions: NumberLocaleOptions };\r\n return dynamicType;\r\n }\r\n\r\n private getSelectParameters(field: any): Partial<SelectFieldConfig> {\r\n return {\r\n type: 'enum',\r\n showClear: true,\r\n multiple: field.customization.customEnumeration.multiple,\r\n options: field.customization.customEnumeration.values.map((e: any) => ({ label: e.value, value: e.key })),\r\n };\r\n }\r\n\r\n private getBooleanParameters(): Partial<BooleanFieldConfig> {\r\n return {\r\n type: 'boolean',\r\n optionsLabel: {\r\n true: this.getTranslateLabel(`true_label`),\r\n false: this.getTranslateLabel(`false_label`),\r\n empty: this.getTranslateLabel(`empty_label`),\r\n },\r\n };\r\n }\r\n\r\n private getBlobParameters(): Partial<ExpandedDynamicType> {\r\n return {\r\n type: 'blob',\r\n size: {\r\n sm: 12,\r\n md: 12,\r\n lg: 12,\r\n xl: 12,\r\n }, // Como vai ser filho de Row, faz sentido habilitar o tipo expandido.\r\n accept: 'image/*, application/*, text/*',\r\n chooseLabel: this.getTranslateLabel(`choose_label`),\r\n removeLabel: this.getTranslateLabel(`remove_label`),\r\n cancelLabel: this.getTranslateLabel(`cancel_label`),\r\n successTooltip: this.getTranslateLabel(`success_tooltip`),\r\n multiple: false,\r\n onUploadFile: (event: { files: FileDto[] }, blobField: BlobFieldConfig) => {\r\n this.hasUploaded = true;\r\n this.uploadFile(event, blobField);\r\n },\r\n onRemoveFile: (event: FileDto, blobField: BlobFieldConfig) => {\r\n this.removeFile({ file: event }, blobField);\r\n },\r\n onCancelUpload: (event: number, blobField: BlobFieldConfig) => {\r\n this.cancelUpload(event, blobField);\r\n },\r\n onDownloadFile: (event: { index: number; anchor: ElementRef }, blobField: BlobFieldConfig) => {\r\n this.downloadFile(event, blobField);\r\n },\r\n showFileUploadDate: this.showFileUploadDate,\r\n };\r\n }\r\n\r\n /**\r\n * É necessário criar o fieldCustomization quando há um Blob na entidade para gerar o\r\n * com os fields inseridos e deletados.\r\n */\r\n private createFieldCustomization(fields: FieldFromAPI[]): void {\r\n this.hasBlob = !!fields.filter((field) => field.type === CustomFieldType.Blob).length;\r\n if (this.hasBlob) {\r\n this.formGroup.addControl(\r\n 'fieldCustomization',\r\n new FormArray([\r\n new FormGroup({\r\n domain: new FormControl(this.domain),\r\n service: new FormControl(this.service),\r\n entity: new FormControl(this.entity),\r\n toDelete: new FormControl({ value: {}, disabled: false }),\r\n toInsert: new FormControl({ value: {}, disabled: false }),\r\n }),\r\n ]),\r\n );\r\n }\r\n }\r\n\r\n private createBlobToFileUpload(field: BlobFieldConfig) {\r\n const _name = field.name;\r\n const objectId = this.value[_name] ? this.value[_name] : this.formGroup.get(_name)?.value;\r\n const fileName = objectId.substring(objectId.lastIndexOf('/') + 1);\r\n const file: Partial<FileDto> = { objectId, name: fileName, savedFile: true };\r\n field.files = [file as FileDto];\r\n }\r\n\r\n private downloadFile(event: { index: number; anchor: ElementRef }, field: BlobFieldConfig) {\r\n const { index, anchor } = event;\r\n const _files = field.files || [];\r\n if (!_files.length) {\r\n return;\r\n }\r\n const currentFile = _files[index];\r\n if (currentFile.objectURL) {\r\n anchor.nativeElement.click();\r\n } else {\r\n const _objectId = currentFile.objectId as string;\r\n this.customFieldsService\r\n .requestAccess(_objectId, this.requestAccessEndpoint)\r\n .pipe(takeUntil(this.ngUsubscribe))\r\n .subscribe((data: any) => {\r\n const { fileName, uri } = data;\r\n this.customFieldsService\r\n .getFile(uri)\r\n .pipe(takeUntil(this.ngUsubscribe))\r\n .subscribe((blob: any) => {\r\n const newFile = new File([blob], fileName) as FileDto;\r\n newFile.objectURL = this.sanitizer.bypassSecurityTrustUrl(uri);\r\n anchor.nativeElement.setAttribute('href', uri);\r\n newFile.objectId = currentFile.objectId;\r\n newFile.savedFile = true;\r\n _files[index] = newFile;\r\n field.files = [..._files];\r\n anchor.nativeElement.click();\r\n });\r\n });\r\n }\r\n }\r\n\r\n private uploadFile(event: { files: FileDto[] }, formField: BlobFieldConfig): void {\r\n const { files } = event;\r\n const field = this.fields.find((record) => record.name === formField.name) as BlobFieldConfig;\r\n if (!field) {\r\n return;\r\n }\r\n\r\n // Se ocorrer um upload, já existindo um arquivo com upload feito. É necessário excluir o mesmo.\r\n if (field?.files?.length) {\r\n this.removeFile({ file: field.files[0] }, field);\r\n }\r\n field.files = files;\r\n const _name = field.name;\r\n\r\n for (let i = 0; i < files.length; i++) {\r\n const file = files[i];\r\n if (!file.savedFile && !file.progress) {\r\n file.isUploading = true;\r\n this.formGroup.get(_name)?.setValidators(isUploading(file));\r\n this.formGroup.get(_name)?.updateValueAndValidity();\r\n this.customFieldsService\r\n .getFileLocationUrl(\r\n {\r\n domain: this.domain,\r\n service: this.service,\r\n entityName: this.entity,\r\n field: _name,\r\n fileName: file.name,\r\n },\r\n this.fileLocationEndpoint,\r\n )\r\n .pipe(\r\n takeUntil(this.ngUsubscribe),\r\n catchError((err: HttpErrorResponse) => of(this.defaltCatchError(field, err, i))),\r\n )\r\n .subscribe((data: any) => {\r\n const { location, version, objectId } = data;\r\n file.version = version;\r\n file.objectId = objectId;\r\n file.uploadSubscribe = this.customFieldsService\r\n .uploadTempFile(location, file)\r\n .pipe(\r\n takeUntil(this.ngUsubscribe),\r\n catchError((err: HttpErrorResponse) => of(this.defaltCatchError(field, err, i))),\r\n finalize(() => {\r\n file.isUploading = false;\r\n }),\r\n )\r\n .subscribe((response: any) => {\r\n const { type } = response;\r\n if (!this.uploadCanceled) {\r\n if (type === HttpEventType.UploadProgress) {\r\n file.progress = Math.round(response.loaded / response.total) * 100;\r\n } else if (type === HttpEventType.Response) {\r\n file.objectURL = this.sanitizer.bypassSecurityTrustUrl(\r\n URL.createObjectURL(file),\r\n );\r\n\r\n const value = { objectId, name: file.name, version: file.version };\r\n const toInsert = this.formGroup.get('fieldCustomization')?.value[0].toInsert;\r\n const fieldCustomization = this.formGroup.get('fieldCustomization')?.value;\r\n if (fieldCustomization?.value?.[0]) {\r\n fieldCustomization.value[0].toInsert = {\r\n ...toInsert,\r\n [_name]: value,\r\n };\r\n }\r\n this.formGroup.get(_name)?.setValue(`${file.objectId}/${file.name}`);\r\n this.formGroup.get(_name)?.clearValidators();\r\n this.formGroup.get(_name)?.updateValueAndValidity();\r\n field.files = [file];\r\n }\r\n } else if (this.uploadCanceled && type === HttpEventType.Response) {\r\n this.uploadCanceled = false;\r\n }\r\n });\r\n field.files = [file];\r\n });\r\n }\r\n }\r\n }\r\n\r\n private removeFile(event: { file: FileDto }, blobField: BlobFieldConfig): void {\r\n const { file } = event;\r\n\r\n const field = this.fields.find((record) => record.name === blobField.name) as BlobFieldConfig;\r\n\r\n field!.files = [];\r\n\r\n if (file.objectId) {\r\n // Quando é um arquivo já salvo o objectId já é no formato \"objectId/name\"\r\n const value = file.savedFile ? `${file.objectId}` : `${file.objectId}/${file.name}`;\r\n const toDelete = this.formGroup.get('fieldCustomization')!.value[0].toDelete;\r\n delete this.formGroup.get('fieldCustomization')!.value[0].toInsert[field!.name];\r\n this.formGroup.get('fieldCustomization')!.value[0].toDelete = {\r\n ...toDelete,\r\n [field!.name]: [...(toDelete[field!.name] || []), value],\r\n };\r\n }\r\n\r\n this.formGroup.get(field!.name)!.clearValidators();\r\n this.formGroup.get(field!.name)!.setValue('');\r\n this.formGroup.get(field!.name)!.updateValueAndValidity();\r\n }\r\n\r\n private cancelUpload(index: number, formField: BlobFieldConfig): void {\r\n this.uploadCanceled = true;\r\n const field = this.fields.find((record) => record.name === formField.name) as BlobFieldConfig;\r\n if (!field) {\r\n return;\r\n }\r\n const _name = field.name;\r\n const _files = field.files || [];\r\n _files[index]?.uploadSubscribe?.unsubscribe();\r\n field.files = [];\r\n const fieldCustomization = this.formGroup.get('fieldCustomization')?.value[0];\r\n delete fieldCustomization.toInsert[_name];\r\n this.formGroup.get(_name)?.clearValidators();\r\n this.formGroup.get(_name)?.setValue('');\r\n this.formGroup.get(_name)?.updateValueAndValidity();\r\n }\r\n\r\n private defaltCatchError(field: BlobFieldConfig, err: HttpErrorResponse, index: number): Observable<never> {\r\n const { files } = field;\r\n if (files) {\r\n files[index].error = err;\r\n files[index].isUploading = false;\r\n field.files = [...files];\r\n const _name = field.name;\r\n this.formGroup.get(_name)?.setValidators([errorOnUpload(files[index])]);\r\n this.formGroup.get(_name)?.updateValueAndValidity();\r\n return throwError(() => new Error('error in upload file. Details: ' + err.message));\r\n } else {\r\n return throwError(() => new Error('error in upload file. Details: ' + err.message));\r\n }\r\n }\r\n\r\n private getTranslateLabel(label: string): string {\r\n return this.translateService.instant(`${this.domain}.${this.service}.${label}`);\r\n }\r\n\r\n private addDisplayTimeInfoSignToFields(): void {\r\n this.fields.forEach((field) => {\r\n field.displayTimeInfoSign = this.displayTimeInfoSign;\r\n });\r\n }\r\n}\r\n\r\nfunction isUploading(file: FileDto): ValidatorFn {\r\n return () => (file.isUploading ? { isUploading: true } : null);\r\n}\r\n\r\nfunction errorOnUpload(file: FileDto): ValidatorFn {\r\n return () => (file.error ? { uploadError: true } : null);\r\n}\r\n","@let errorMessages =\n {\n pattern: invalidErrorLabel,\n required: requiredErrorMessage,\n };\n\n<s-dynamic-form\n [configs]=\"dynamicStructure\"\n [form]=\"formGroup\"\n [errorMessages]=\"errorMessages\"\n>\n</s-dynamic-form>\n\n","import { NgModule } from '@angular/core';\r\nimport { CustomFieldsComponent } from './custom-fields.component';\r\nimport { CustomFieldsService } from './custom-fields.service';\r\nimport { TranslateService } from '@ngx-translate/core';\r\n\r\n/**\r\n * @deprecated Será removido na v20. Importe diretamente o standalone `CustomFieldsComponent` (de\r\n * `@seniorsistemas/angular-components/custom-fields`) no lugar deste módulo.\r\n *\r\n * Migração automática (também executada pelo `ng update` na v20):\r\n * `ng generate @seniorsistemas/angular-components:migrate-modules-to-standalone`\r\n */\r\n@NgModule({\r\n imports: [CustomFieldsComponent],\r\n exports: [CustomFieldsComponent],\r\n providers: [CustomFieldsService, TranslateService],\r\n})\r\nexport class CustomFieldsModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["DynamicFormComponent_1"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"seniorsistemas-angular-components-custom-fields.mjs","sources":["../../projects/angular-components/custom-fields/src/lib/custom-fields/custom-fields.service.ts","../../projects/angular-components/custom-fields/src/lib/custom-fields/models/custom-field-type.ts","../../projects/angular-components/custom-fields/src/lib/custom-fields/custom-fields.component.ts","../../projects/angular-components/custom-fields/src/lib/custom-fields/custom-fields.component.html","../../projects/angular-components/custom-fields/src/lib/custom-fields/custom-fields.module.ts","../../projects/angular-components/custom-fields/src/seniorsistemas-angular-components-custom-fields.ts"],"sourcesContent":["import { HttpClient } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { CustomFieldsResponse } from './models';\n\n@Injectable()\nexport class CustomFieldsService {\n private http = inject(HttpClient);\n\n\n public getCustomFields(\n domain: string,\n service: string,\n entity: string,\n endpoint: string,\n ): Observable<CustomFieldsResponse> {\n const entityDto = { entityId: { domain_: domain, service_: service, id: entity } };\n return this.http.post<CustomFieldsResponse>(endpoint, entityDto);\n }\n\n public getFileLocationUrl(\n dto: {\n domain: string;\n service: string;\n entityName: string;\n field: string;\n fileName: string;\n },\n endpoint: string,\n ): Observable<any> {\n return this.http.post(endpoint, dto);\n }\n\n public uploadTempFile(location: string, file: File) {\n return this.http.put(location, file, {\n reportProgress: true,\n observe: 'events',\n headers: { 'Content-Type': file.type },\n });\n }\n\n public requestAccess(objectId: string, endpoint: string) {\n return this.http.post(endpoint, { objectId });\n }\n\n public getFile(permanentUrl: string) {\n return this.http.get(permanentUrl, { responseType: 'blob' });\n }\n}\n\n","import { FieldType } from '@seniorsistemas/angular-components/dynamic-form';\n\nexport enum CustomFieldType {\n String = 'String',\n Boolean = 'Boolean',\n Integer = 'Integer',\n Double = 'Double',\n Date = 'Date',\n DateTime = 'DateTime',\n LocalDateTime = 'LocalDateTime',\n Time = 'Time',\n Money = 'Money',\n Blob = 'Blob',\n Binary = 'Binary',\n Any = 'Any',\n Enum = 'Enum',\n}\n\nexport type CustomFieldsTypeAPI = 'Enumeration' | keyof typeof CustomFieldType;\n\nexport const apiTypesToDynamicFormType = (type: CustomFieldsTypeAPI): FieldType => {\n switch (type) {\n case 'String':\n case 'Any':\n return 'string';\n case 'Binary':\n return 'binary';\n case 'Blob':\n return 'blob';\n case 'DateTime':\n case 'Time':\n case 'Date':\n case 'LocalDateTime':\n return 'date';\n case 'Enumeration':\n case 'Enum':\n return 'enum';\n case 'Boolean':\n return 'boolean';\n case 'Money':\n case 'Double':\n case 'Integer':\n return 'legacyNumber';\n }\n};\n\nexport interface FieldFromAPI {\n id: string;\n type: CustomFieldsTypeAPI;\n customizable: boolean;\n customization: FieldCustomization;\n}\n\nexport interface FieldCustomization {\n active: boolean;\n label: string;\n tooltip: string;\n mask?: string;\n validationRegex?: string;\n customEnumeration?: CustomEnumeration;\n infoSign?: string;\n mandatory?: boolean;\n}\n\nexport interface CustomEnumeration {\n multiple?: boolean;\n values: EnumValue[];\n}\n\nexport interface EnumValue {\n key: string;\n value: string;\n}\n\nexport interface CustomFieldsResponse {\n entity_: {\n active: boolean;\n fields: FieldFromAPI[];\n };\n}\n\n","import { HttpErrorResponse, HttpEventType } from '@angular/common/http';\r\nimport {\r\n AfterViewInit,\r\n Component,\r\n ElementRef,\r\n Input,\r\n OnChanges,\r\n OnDestroy,\r\n OnInit,\r\n SimpleChanges,\r\n inject,\r\n} from '@angular/core';\r\nimport {\r\n ControlContainer,\r\n ControlValueAccessor,\r\n FormArray,\r\n FormControl,\r\n FormGroup,\r\n NG_VALIDATORS,\r\n NG_VALUE_ACCESSOR,\r\n Validator,\r\n ValidatorFn,\r\n Validators,\r\n} from '@angular/forms';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\n\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport BigNumber from 'bignumber.js';\r\nimport { BehaviorSubject, forkJoin, Observable, of, Subject, throwError } from 'rxjs';\r\nimport { catchError, finalize, takeUntil } from 'rxjs/operators';\r\n\r\nimport {\r\n BlobFieldConfig,\r\n BooleanFieldConfig,\r\n DynamicStructure,\r\n DynamicType,\r\n dynamicTypeToDynamicStructure,\r\n ExpandedDynamicType,\r\n NumberFieldConfig,\r\n SelectFieldConfig,\r\n StructureType,\r\n} from '@seniorsistemas/angular-components/dynamic-form';\r\nimport { FileDto } from '@seniorsistemas/angular-components/file-upload';\r\nimport {\r\n CalendarLocaleOptions,\r\n LocaleOptions,\r\n LocaleService,\r\n NumberLocaleOptions,\r\n} from '@seniorsistemas/angular-components/locale';\r\nimport moment from 'moment';\r\nimport { CustomFieldsService } from './custom-fields.service';\r\nimport {\r\n apiTypesToDynamicFormType,\r\n CustomFieldsResponse,\r\n CustomFieldsTypeAPI,\r\n CustomFieldType,\r\n FieldFromAPI,\r\n} from './models';\r\nimport { DynamicFormComponent as DynamicFormComponent_1 } from '@seniorsistemas/angular-components/dynamic-form';\r\n\r\n/**\r\n * @description Componente que carrega e renderiza campos customizados dinamicamente\r\n * a partir da API de customização de campos do Senior. Realiza chamadas HTTP para\r\n * obter a configuração dos campos, gera o formulário reativamente via {@link DynamicFormComponent}\r\n * e implementa {@link ControlValueAccessor} e {@link Validator} para integração completa\r\n * com formulários Angular.\r\n *\r\n * @example\r\n * ```html\r\n * <s-custom-fields\r\n * formControlName=\"camposCustomizados\"\r\n * domain=\"plataforma\"\r\n * service=\"servico\"\r\n * entity=\"entidade\" />\r\n * ```\r\n *\r\n * @category Inputs\r\n */\r\n@Component({\r\n selector: 's-custom-fields',\r\n templateUrl: './custom-fields.component.html',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: CustomFieldsComponent,\r\n multi: true,\r\n },\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: CustomFieldsComponent,\r\n multi: true,\r\n },\r\n ],\r\n standalone: true,\r\n imports: [DynamicFormComponent_1],\r\n})\r\nexport class CustomFieldsComponent\r\n implements OnInit, OnDestroy, ControlValueAccessor, Validator, OnChanges, AfterViewInit\r\n{\r\n private readonly customFieldsService = inject(CustomFieldsService);\r\n private readonly localeService = inject(LocaleService);\r\n private readonly sanitizer = inject(DomSanitizer);\r\n private readonly translateService = inject(TranslateService);\r\n private readonly controlContainer = inject(ControlContainer, { optional: true });\r\n\r\n /** @description Domínio utilizado para buscar os campos customizados na API. Campo obrigatório. */\r\n @Input({ required: true })\r\n public domain!: string;\r\n\r\n /** @description Nome do serviço utilizado para identificar os campos customizados. Campo obrigatório. */\r\n @Input({ required: true })\r\n public service!: string;\r\n\r\n /** @description Nome da entidade para a qual os campos customizados são carregados. Campo obrigatório. */\r\n @Input({ required: true })\r\n public entity!: string;\r\n\r\n /** @description Mensagem de erro exibida quando algum campo customizado está inválido. @default '' */\r\n @Input()\r\n public invalidErrorLabel = '';\r\n\r\n /** @description Objeto com dados pré-carregados da entidade, evitando chamadas extras à API. */\r\n @Input()\r\n public entityObject?: CustomFieldsResponse;\r\n\r\n /** @description Endpoint para buscar a configuração dos campos customizados. */\r\n @Input()\r\n public customFieldsEndpoint = 'platform/field_customization/queries/getEntity';\r\n\r\n /** @description Endpoint para solicitar o upload de arquivos em campos do tipo blob. */\r\n @Input()\r\n public fileLocationEndpoint = 'platform/field_customization/actions/requestUpload';\r\n\r\n /** @description Endpoint para solicitar acesso a arquivos já enviados. */\r\n @Input()\r\n public requestAccessEndpoint = 'platform/field_customization/actions/requestAccess';\r\n\r\n /** @description Mensagem de erro exibida quando um campo obrigatório não está preenchido. @default '' */\r\n @Input()\r\n public requiredErrorMessage = '';\r\n\r\n /** @description Tempo em ms após o qual o info-sign de campos do tipo data é exibido. @default 0 */\r\n @Input()\r\n public displayTimeInfoSign = 0;\r\n\r\n /** @description Exibe a data de upload nos campos do tipo arquivo. @default false */\r\n @Input()\r\n public showFileUploadDate = false;\r\n\r\n /** @description Observable que sinaliza quando o componente deve iniciar o carregamento dos campos. @default null */\r\n @Input()\r\n public ready$: BehaviorSubject<boolean> | null = null;\r\n\r\n /** @description Quando `true`, todos os campos customizados são desabilitados. */\r\n @Input()\r\n public disableFields: boolean | undefined;\r\n\r\n protected rowType: StructureType = 'row';\r\n\r\n public fields: DynamicType[] = [];\r\n public formGroup: FormGroup = new FormGroup({});\r\n\r\n protected dynamicStructure: DynamicStructure[] = [];\r\n\r\n private ready = false;\r\n private onChange: any;\r\n private onTouched: any;\r\n private value: any;\r\n private readonly ngUsubscribe: Subject<void> = new Subject();\r\n private uploadCanceled: boolean | undefined;\r\n private hasBlob: boolean | undefined;\r\n private hasUploaded: boolean | undefined;\r\n\r\n constructor() {\r\n this.invalidErrorLabel = this.translateService.instant('platform.angular_components.invalid_value');\r\n }\r\n\r\n public get hasCustomFields(): boolean {\r\n return !!this.fields?.length;\r\n }\r\n\r\n public get parentForm(): FormGroup {\r\n return this.controlContainer!.control as FormGroup;\r\n }\r\n\r\n public get parentControl(): FormControl {\r\n return this.parentForm.get('custom') as FormControl;\r\n }\r\n\r\n public ngOnInit(): void {\r\n this._validateInputs();\r\n this._createForm();\r\n this.addDisplayTimeInfoSignToFields();\r\n }\r\n\r\n public ngAfterViewInit(): void {\r\n this.enableOrDisableFields(!!this.disableFields);\r\n\r\n this.formGroup.valueChanges.subscribe(() => this.onChange?.(this.parseFieldsValues()));\r\n }\r\n\r\n public ngOnChanges(changes: SimpleChanges): void {\r\n const _disableFields = changes['disableFields'];\r\n if (_disableFields) {\r\n this.enableOrDisableFields(_disableFields.currentValue);\r\n }\r\n }\r\n\r\n public ngOnDestroy() {\r\n this.ngUsubscribe.next();\r\n this.ngUsubscribe.complete();\r\n }\r\n\r\n public registerOnChange(fn: Function) {\r\n this.onChange = fn;\r\n }\r\n\r\n public registerOnTouched(fn: Function) {\r\n this.onTouched = fn;\r\n }\r\n\r\n public writeValue(value: any) {\r\n if (this.ready) {\r\n const newValue = this.parseValuesForFields(value);\r\n this.formGroup.patchValue(newValue);\r\n this.value = newValue;\r\n this.createFilesIfSetFormValuesAfterInit();\r\n } else {\r\n this.formGroup.patchValue(value || {});\r\n this.value = value;\r\n }\r\n }\r\n\r\n public setDisabledState(isDisabled: boolean) {\r\n if (isDisabled) {\r\n this.formGroup.disable({ emitEvent: false });\r\n } else {\r\n this.formGroup.enable({ emitEvent: false });\r\n }\r\n }\r\n\r\n public getCustomFields(): Observable<CustomFieldsResponse> {\r\n if (this.entityObject?.entity_) {\r\n return of(this.entityObject);\r\n }\r\n return this.customFieldsService.getCustomFields(\r\n this.domain,\r\n this.service,\r\n this.entity,\r\n this.customFieldsEndpoint,\r\n );\r\n }\r\n\r\n public validate() {\r\n const errors: any = {};\r\n Object.keys(this.formGroup.controls).forEach((field) => {\r\n const { errors: controlErrors } = this.formGroup.get(field) as FormGroup;\r\n if (controlErrors) {\r\n errors[field] = controlErrors;\r\n }\r\n });\r\n return errors;\r\n }\r\n\r\n public cleanFields() {\r\n this.formGroup.reset();\r\n }\r\n\r\n private enableOrDisableFields(disabled: boolean): void {\r\n if (!this.formGroup) {\r\n return;\r\n }\r\n\r\n for (const controlName of Object.keys(this.formGroup.value)) {\r\n disabled ? this.formGroup.get(controlName)?.disable() : this.formGroup.get(controlName)?.enable();\r\n }\r\n }\r\n\r\n private _validateInputs(): void {\r\n if (!this.domain) {\r\n throw new Error('You need to specify the custom-fields domain!');\r\n }\r\n if (!this.service) {\r\n throw new Error('You need to specify the custom-fields service!');\r\n }\r\n if (!this.entity) {\r\n throw new Error('You need to specify the custom-fields entity!');\r\n }\r\n }\r\n\r\n private _createForm(): void {\r\n this.formGroup = new FormGroup({});\r\n const observables = [this.getCustomFields(), this.localeService.get()];\r\n forkJoin(observables)\r\n .pipe(\r\n takeUntil(this.ngUsubscribe),\r\n finalize(() => {\r\n this.formGroup.markAsPristine();\r\n this.parentControl?.markAsPristine();\r\n\r\n if (this.ready$) {\r\n this.ready$.next(true);\r\n }\r\n }),\r\n )\r\n .subscribe((response) => {\r\n const [customFieldsResponse, localeOptions] = response as [CustomFieldsResponse, LocaleOptions];\r\n const defaults: { [key in string]: { defaultValue?: boolean; defaultMask?: string } } = {};\r\n defaults[CustomFieldType.String] = {};\r\n defaults[CustomFieldType.Boolean] = { defaultValue: false };\r\n defaults[CustomFieldType.Integer] = {};\r\n defaults[CustomFieldType.Double] = { defaultMask: '' };\r\n defaults[CustomFieldType.Money] = {};\r\n defaults[CustomFieldType.Date] = {};\r\n defaults[CustomFieldType.DateTime] = {};\r\n defaults[CustomFieldType.LocalDateTime] = {};\r\n defaults[CustomFieldType.Time] = {};\r\n defaults[CustomFieldType.Blob] = {};\r\n defaults[CustomFieldType.Enum] = {};\r\n defaults[CustomFieldType.Binary] = {};\r\n defaults[CustomFieldType.Any] = {};\r\n\r\n if (!customFieldsResponse || !customFieldsResponse.entity_) {\r\n return;\r\n }\r\n const { active, fields } = customFieldsResponse.entity_;\r\n if (!active) {\r\n return;\r\n }\r\n\r\n fields\r\n .filter((field) => field.customizable && field.customization?.active)\r\n .forEach((field) => {\r\n const dynamicType = this.getDynamicType(field, localeOptions);\r\n\r\n const fieldType = field.type;\r\n\r\n if (field.type === CustomFieldType.Blob && this.value && this.value[dynamicType.name]) {\r\n this.createBlobToFileUpload(dynamicType as BlobFieldConfig);\r\n }\r\n\r\n const { validationRegex } = field.customization;\r\n\r\n const asIsTypes: CustomFieldsTypeAPI[] = [\r\n CustomFieldType.Boolean,\r\n CustomFieldType.Money,\r\n CustomFieldType.Date,\r\n CustomFieldType.DateTime,\r\n CustomFieldType.LocalDateTime,\r\n CustomFieldType.Time,\r\n ];\r\n\r\n const validators = [];\r\n if (validationRegex && !asIsTypes.includes(fieldType)) {\r\n validators.push(Validators.pattern(validationRegex));\r\n }\r\n if (fieldType === CustomFieldType.Integer && !(dynamicType as NumberFieldConfig).mask) {\r\n validators.push(Validators.pattern(/^\\-?\\d*$/));\r\n }\r\n\r\n if (dynamicType.required?.()) {\r\n validators.push(Validators.required);\r\n }\r\n\r\n const control = new FormControl(\r\n { value: defaults[fieldType].defaultValue, disabled: this.formGroup.disabled },\r\n validators,\r\n );\r\n\r\n this.formGroup.addControl(dynamicType.name, control);\r\n\r\n this.fields.push(dynamicType);\r\n });\r\n this.dynamicStructure = dynamicTypeToDynamicStructure(this.fields);\r\n\r\n this.createFieldCustomization(fields);\r\n this.formGroup.patchValue(this.parseValuesForFields(this.value));\r\n this.ready = true;\r\n });\r\n }\r\n\r\n private parseValuesForFields(values: any) {\r\n const parsedValues = { ...values };\r\n\r\n this.fields.forEach((field) => {\r\n const type = field.type;\r\n const name = field.name;\r\n const value = values?.[name];\r\n\r\n /**\r\n * Tratamento exclusivo para campos boolean que tem o status Empty\r\n * Essa condicional necessita estar antes do if (!value) return;\r\n * Pois ela tem um status que usa null no valor do campo radio boolean\r\n */\r\n if (type === 'boolean') {\r\n const isString = typeof value === 'string';\r\n const notValid = !isString && typeof value !== 'boolean';\r\n if (notValid) {\r\n parsedValues[name] = null;\r\n } else {\r\n // Condicional para campos que retornam string de boolen do backand\r\n if (isString) {\r\n parsedValues[name] = value === 'true' ? true : false;\r\n } else {\r\n parsedValues[name] = value;\r\n }\r\n }\r\n }\r\n\r\n if (!value) {\r\n return;\r\n }\r\n\r\n switch (type) {\r\n case 'date':\r\n parsedValues[name] = moment(value).toDate();\r\n break;\r\n case 'dateTime':\r\n parsedValues[name] = moment(value).toDate();\r\n break;\r\n case 'localDateTime':\r\n parsedValues[name] = moment(value, 'YYYY-MM-DD[T]HH:mm:ss.SSS').toDate();\r\n break;\r\n case 'time':\r\n parsedValues[name] = moment(value, 'HH:mm:ss').toDate();\r\n break;\r\n default:\r\n break;\r\n }\r\n });\r\n\r\n return parsedValues;\r\n }\r\n\r\n /**\r\n * Algumas equipes só setam valor no formulário, após o carregamento da tela\r\n * Como é bem padrão isso, foi necessário criar esse método para gerar o file\r\n * após setar o valor no formulário\r\n */\r\n private createFilesIfSetFormValuesAfterInit() {\r\n if (!this.hasUploaded) {\r\n this.fields\r\n .filter((field) => field.type === 'blob')\r\n .forEach((field) => {\r\n if (this.formGroup.get(field.name)?.value) {\r\n this.createBlobToFileUpload(field);\r\n }\r\n });\r\n }\r\n }\r\n\r\n private parseFieldsValues() {\r\n const parsedValues: any = {};\r\n\r\n this.fields.forEach((field) => {\r\n const { type } = field;\r\n const name = field.name;\r\n let value = this.formGroup.get(name)?.value;\r\n\r\n if (value) {\r\n switch (type) {\r\n case 'number':\r\n const { mask, scale } = field;\r\n if (mask) value = new BigNumber(value).toFixed(scale as number).toString();\r\n break;\r\n case 'date':\r\n value = moment(value).format('YYYY-MM-DD');\r\n break;\r\n case 'dateTime':\r\n value = moment(value).format();\r\n break;\r\n case 'localDateTime':\r\n value = moment(value).format('YYYY-MM-DD[T]HH:mm:ss.SSS');\r\n break;\r\n case 'time':\r\n value = moment(value).format('HH:mm:ss');\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n if ((value === null || value === undefined) && (type === 'number' || type === 'enum')) {\r\n const isMultiple = (field as SelectFieldConfig).multiple;\r\n parsedValues[name] = isMultiple ? [] : null;\r\n } else {\r\n parsedValues[name] = value;\r\n }\r\n });\r\n\r\n if (this.hasBlob) {\r\n parsedValues['fieldCustomization'] = this.formGroup.get('fieldCustomization')?.value;\r\n }\r\n return parsedValues;\r\n }\r\n\r\n private getDynamicType(field: FieldFromAPI, localeOptions: LocaleOptions): DynamicType {\r\n let parameters: Partial<DynamicType> = {};\r\n\r\n switch (field.type) {\r\n case CustomFieldType.Blob:\r\n parameters = this.getBlobParameters();\r\n break;\r\n case CustomFieldType.Boolean:\r\n parameters = this.getBooleanParameters();\r\n break;\r\n case 'Enumeration':\r\n case CustomFieldType.Enum:\r\n field.type = 'Enum';\r\n parameters = this.getSelectParameters(field);\r\n break;\r\n case CustomFieldType.Money:\r\n parameters = {\r\n type: 'legacyNumber',\r\n precision: 15,\r\n scale: 2,\r\n leftAddon: {\r\n label: localeOptions?.number?.currencySymbol ?? 'R$',\r\n },\r\n };\r\n break;\r\n case CustomFieldType.Double:\r\n parameters = {\r\n type: 'legacyNumber',\r\n precision: 15,\r\n scale: 2,\r\n localizedNumber: true,\r\n };\r\n break;\r\n case CustomFieldType.Integer:\r\n parameters = {\r\n type: 'legacyNumber',\r\n precision: 15,\r\n scale: 0,\r\n };\r\n break;\r\n case CustomFieldType.Any:\r\n field.type = 'String';\r\n parameters = {\r\n type: 'string',\r\n };\r\n break;\r\n }\r\n\r\n const dynamicType: DynamicType & {\r\n calendarOptions: CalendarLocaleOptions;\r\n currencyOptions: NumberLocaleOptions;\r\n } = {\r\n ...parameters,\r\n name: field.id,\r\n label: field.customization.label,\r\n tooltip: field.customization.tooltip,\r\n infoSign: field.customization.infoSign,\r\n type: apiTypesToDynamicFormType(field.type),\r\n mask: field.customization.mask,\r\n required: () => field.customization.mandatory ?? false,\r\n calendarOptions: localeOptions.calendar,\r\n currencyOptions: localeOptions.number,\r\n } as DynamicType & { calendarOptions: CalendarLocaleOptions; currencyOptions: NumberLocaleOptions };\r\n return dynamicType;\r\n }\r\n\r\n private getSelectParameters(field: any): Partial<SelectFieldConfig> {\r\n return {\r\n type: 'enum',\r\n showClear: true,\r\n multiple: field.customization.customEnumeration.multiple,\r\n options: field.customization.customEnumeration.values.map((e: any) => ({ label: e.value, value: e.key })),\r\n };\r\n }\r\n\r\n private getBooleanParameters(): Partial<BooleanFieldConfig> {\r\n return {\r\n type: 'boolean',\r\n optionsLabel: {\r\n true: this.getTranslateLabel(`true_label`),\r\n false: this.getTranslateLabel(`false_label`),\r\n empty: this.getTranslateLabel(`empty_label`),\r\n },\r\n };\r\n }\r\n\r\n private getBlobParameters(): Partial<ExpandedDynamicType> {\r\n return {\r\n type: 'blob',\r\n size: {\r\n sm: 12,\r\n md: 12,\r\n lg: 12,\r\n xl: 12,\r\n }, // Como vai ser filho de Row, faz sentido habilitar o tipo expandido.\r\n accept: 'image/*, application/*, text/*',\r\n chooseLabel: this.getTranslateLabel(`choose_label`),\r\n removeLabel: this.getTranslateLabel(`remove_label`),\r\n cancelLabel: this.getTranslateLabel(`cancel_label`),\r\n successTooltip: this.getTranslateLabel(`success_tooltip`),\r\n multiple: false,\r\n onUploadFile: (event: { files: FileDto[] }, blobField: BlobFieldConfig) => {\r\n this.hasUploaded = true;\r\n this.uploadFile(event, blobField);\r\n },\r\n onRemoveFile: (event: FileDto, blobField: BlobFieldConfig) => {\r\n this.removeFile({ file: event }, blobField);\r\n },\r\n onCancelUpload: (event: number, blobField: BlobFieldConfig) => {\r\n this.cancelUpload(event, blobField);\r\n },\r\n onDownloadFile: (event: { index: number; anchor: ElementRef }, blobField: BlobFieldConfig) => {\r\n this.downloadFile(event, blobField);\r\n },\r\n showFileUploadDate: this.showFileUploadDate,\r\n };\r\n }\r\n\r\n /**\r\n * É necessário criar o fieldCustomization quando há um Blob na entidade para gerar o\r\n * com os fields inseridos e deletados.\r\n */\r\n private createFieldCustomization(fields: FieldFromAPI[]): void {\r\n this.hasBlob = !!fields.filter((field) => field.type === CustomFieldType.Blob).length;\r\n if (this.hasBlob) {\r\n this.formGroup.addControl(\r\n 'fieldCustomization',\r\n new FormArray([\r\n new FormGroup({\r\n domain: new FormControl(this.domain),\r\n service: new FormControl(this.service),\r\n entity: new FormControl(this.entity),\r\n toDelete: new FormControl({ value: {}, disabled: false }),\r\n toInsert: new FormControl({ value: {}, disabled: false }),\r\n }),\r\n ]),\r\n );\r\n }\r\n }\r\n\r\n private createBlobToFileUpload(field: BlobFieldConfig) {\r\n const _name = field.name;\r\n const objectId = this.value[_name] ? this.value[_name] : this.formGroup.get(_name)?.value;\r\n const fileName = objectId.substring(objectId.lastIndexOf('/') + 1);\r\n const file: Partial<FileDto> = { objectId, name: fileName, savedFile: true };\r\n field.files = [file as FileDto];\r\n }\r\n\r\n private downloadFile(event: { index: number; anchor: ElementRef }, field: BlobFieldConfig) {\r\n const { index, anchor } = event;\r\n const _files = field.files || [];\r\n if (!_files.length) {\r\n return;\r\n }\r\n const currentFile = _files[index];\r\n if (currentFile.objectURL) {\r\n anchor.nativeElement.click();\r\n } else {\r\n const _objectId = currentFile.objectId as string;\r\n this.customFieldsService\r\n .requestAccess(_objectId, this.requestAccessEndpoint)\r\n .pipe(takeUntil(this.ngUsubscribe))\r\n .subscribe((data: any) => {\r\n const { fileName, uri } = data;\r\n this.customFieldsService\r\n .getFile(uri)\r\n .pipe(takeUntil(this.ngUsubscribe))\r\n .subscribe((blob: any) => {\r\n const newFile = new File([blob], fileName) as FileDto;\r\n newFile.objectURL = this.sanitizer.bypassSecurityTrustUrl(uri);\r\n anchor.nativeElement.setAttribute('href', uri);\r\n newFile.objectId = currentFile.objectId;\r\n newFile.savedFile = true;\r\n _files[index] = newFile;\r\n field.files = [..._files];\r\n anchor.nativeElement.click();\r\n });\r\n });\r\n }\r\n }\r\n\r\n private uploadFile(event: { files: FileDto[] }, formField: BlobFieldConfig): void {\r\n const { files } = event;\r\n const field = this.fields.find((record) => record.name === formField.name) as BlobFieldConfig;\r\n if (!field) {\r\n return;\r\n }\r\n\r\n // Se ocorrer um upload, já existindo um arquivo com upload feito. É necessário excluir o mesmo.\r\n if (field?.files?.length) {\r\n this.removeFile({ file: field.files[0] }, field);\r\n }\r\n field.files = files;\r\n const _name = field.name;\r\n\r\n for (let i = 0; i < files.length; i++) {\r\n const file = files[i];\r\n if (!file.savedFile && !file.progress) {\r\n file.isUploading = true;\r\n this.formGroup.get(_name)?.setValidators(isUploading(file));\r\n this.formGroup.get(_name)?.updateValueAndValidity();\r\n this.customFieldsService\r\n .getFileLocationUrl(\r\n {\r\n domain: this.domain,\r\n service: this.service,\r\n entityName: this.entity,\r\n field: _name,\r\n fileName: file.name,\r\n },\r\n this.fileLocationEndpoint,\r\n )\r\n .pipe(\r\n takeUntil(this.ngUsubscribe),\r\n catchError((err: HttpErrorResponse) => of(this.defaltCatchError(field, err, i))),\r\n )\r\n .subscribe((data: any) => {\r\n const { location, version, objectId } = data;\r\n file.version = version;\r\n file.objectId = objectId;\r\n file.uploadSubscribe = this.customFieldsService\r\n .uploadTempFile(location, file)\r\n .pipe(\r\n takeUntil(this.ngUsubscribe),\r\n catchError((err: HttpErrorResponse) => of(this.defaltCatchError(field, err, i))),\r\n finalize(() => {\r\n file.isUploading = false;\r\n }),\r\n )\r\n .subscribe((response: any) => {\r\n const { type } = response;\r\n if (!this.uploadCanceled) {\r\n if (type === HttpEventType.UploadProgress) {\r\n file.progress = Math.round(response.loaded / response.total) * 100;\r\n } else if (type === HttpEventType.Response) {\r\n file.objectURL = this.sanitizer.bypassSecurityTrustUrl(\r\n URL.createObjectURL(file),\r\n );\r\n\r\n const value = { objectId, name: file.name, version: file.version };\r\n const toInsert = this.formGroup.get('fieldCustomization')?.value[0].toInsert;\r\n const fieldCustomization = this.formGroup.get('fieldCustomization')?.value;\r\n if (fieldCustomization?.value?.[0]) {\r\n fieldCustomization.value[0].toInsert = {\r\n ...toInsert,\r\n [_name]: value,\r\n };\r\n }\r\n this.formGroup.get(_name)?.setValue(`${file.objectId}/${file.name}`);\r\n this.formGroup.get(_name)?.clearValidators();\r\n this.formGroup.get(_name)?.updateValueAndValidity();\r\n field.files = [file];\r\n }\r\n } else if (this.uploadCanceled && type === HttpEventType.Response) {\r\n this.uploadCanceled = false;\r\n }\r\n });\r\n field.files = [file];\r\n });\r\n }\r\n }\r\n }\r\n\r\n private removeFile(event: { file: FileDto }, blobField: BlobFieldConfig): void {\r\n const { file } = event;\r\n\r\n const field = this.fields.find((record) => record.name === blobField.name) as BlobFieldConfig;\r\n\r\n field!.files = [];\r\n\r\n if (file.objectId) {\r\n // Quando é um arquivo já salvo o objectId já é no formato \"objectId/name\"\r\n const value = file.savedFile ? `${file.objectId}` : `${file.objectId}/${file.name}`;\r\n const toDelete = this.formGroup.get('fieldCustomization')!.value[0].toDelete;\r\n delete this.formGroup.get('fieldCustomization')!.value[0].toInsert[field!.name];\r\n this.formGroup.get('fieldCustomization')!.value[0].toDelete = {\r\n ...toDelete,\r\n [field!.name]: [...(toDelete[field!.name] || []), value],\r\n };\r\n }\r\n\r\n this.formGroup.get(field!.name)!.clearValidators();\r\n this.formGroup.get(field!.name)!.setValue('');\r\n this.formGroup.get(field!.name)!.updateValueAndValidity();\r\n }\r\n\r\n private cancelUpload(index: number, formField: BlobFieldConfig): void {\r\n this.uploadCanceled = true;\r\n const field = this.fields.find((record) => record.name === formField.name) as BlobFieldConfig;\r\n if (!field) {\r\n return;\r\n }\r\n const _name = field.name;\r\n const _files = field.files || [];\r\n _files[index]?.uploadSubscribe?.unsubscribe();\r\n field.files = [];\r\n const fieldCustomization = this.formGroup.get('fieldCustomization')?.value[0];\r\n delete fieldCustomization.toInsert[_name];\r\n this.formGroup.get(_name)?.clearValidators();\r\n this.formGroup.get(_name)?.setValue('');\r\n this.formGroup.get(_name)?.updateValueAndValidity();\r\n }\r\n\r\n private defaltCatchError(field: BlobFieldConfig, err: HttpErrorResponse, index: number): Observable<never> {\r\n const { files } = field;\r\n if (files) {\r\n files[index].error = err;\r\n files[index].isUploading = false;\r\n field.files = [...files];\r\n const _name = field.name;\r\n this.formGroup.get(_name)?.setValidators([errorOnUpload(files[index])]);\r\n this.formGroup.get(_name)?.updateValueAndValidity();\r\n return throwError(() => new Error('error in upload file. Details: ' + err.message));\r\n } else {\r\n return throwError(() => new Error('error in upload file. Details: ' + err.message));\r\n }\r\n }\r\n\r\n private getTranslateLabel(label: string): string {\r\n return this.translateService.instant(`${this.domain}.${this.service}.${label}`);\r\n }\r\n\r\n private addDisplayTimeInfoSignToFields(): void {\r\n this.fields.forEach((field) => {\r\n field.displayTimeInfoSign = this.displayTimeInfoSign;\r\n });\r\n }\r\n}\r\n\r\nfunction isUploading(file: FileDto): ValidatorFn {\r\n return () => (file.isUploading ? { isUploading: true } : null);\r\n}\r\n\r\nfunction errorOnUpload(file: FileDto): ValidatorFn {\r\n return () => (file.error ? { uploadError: true } : null);\r\n}\r\n","@let errorMessages =\n {\n pattern: invalidErrorLabel,\n required: requiredErrorMessage,\n };\n\n<s-dynamic-form\n [configs]=\"dynamicStructure\"\n [form]=\"formGroup\"\n [errorMessages]=\"errorMessages\"\n>\n</s-dynamic-form>\n\n","import { NgModule } from '@angular/core';\r\nimport { CustomFieldsComponent } from './custom-fields.component';\r\nimport { CustomFieldsService } from './custom-fields.service';\r\nimport { TranslateService } from '@ngx-translate/core';\r\n\r\n@NgModule({\r\n imports: [CustomFieldsComponent],\r\n exports: [CustomFieldsComponent],\r\n providers: [CustomFieldsService, TranslateService],\r\n})\r\nexport class CustomFieldsModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["DynamicFormComponent_1"],"mappings":"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"}
|
|
@@ -213,16 +213,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
213
213
|
type: Input
|
|
214
214
|
}] } });
|
|
215
215
|
|
|
216
|
-
/**
|
|
217
|
-
* @deprecated Será removido na v20. Importe diretamente o standalone `DrawerComponent` (de
|
|
218
|
-
* `@seniorsistemas/angular-components/drawer`) no lugar deste módulo.
|
|
219
|
-
*
|
|
220
|
-
* Este módulo também reexportava `TemplateDirective` (`@seniorsistemas/angular-components/template`, usado em
|
|
221
|
-
* templates por `[sTemplate]`). Se o seu template usa algum deles, importe-o diretamente.
|
|
222
|
-
*
|
|
223
|
-
* Migração automática (também executada pelo `ng update` na v20):
|
|
224
|
-
* `ng generate @seniorsistemas/angular-components:migrate-modules-to-standalone`
|
|
225
|
-
*/
|
|
226
216
|
class DrawerModule {
|
|
227
217
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DrawerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
228
218
|
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: DrawerModule, imports: [DrawerComponent], exports: [DrawerComponent, TemplateModule] });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seniorsistemas-angular-components-drawer.mjs","sources":["../../projects/angular-components/drawer/src/lib/drawer/drawer.component.ts","../../projects/angular-components/drawer/src/lib/drawer/drawer.component.html","../../projects/angular-components/drawer/src/lib/drawer/drawer.module.ts","../../projects/angular-components/drawer/src/seniorsistemas-angular-components-drawer.ts"],"sourcesContent":["import { animate, style, transition, trigger } from '@angular/animations';\nimport { CdkTrapFocus } from '@angular/cdk/a11y';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n AfterContentInit,\n Component,\n contentChild,\n ContentChildren,\n effect,\n Input,\n model,\n OnDestroy,\n QueryList,\n TemplateRef,\n} from '@angular/core';\n\nimport { TranslateModule } from '@ngx-translate/core';\nimport { DEPRECATED_CONFIG, DeprecatedSelectorDirective } from '@seniorsistemas/angular-components/common/deprecated-selector';\nimport { FooterComponent } from '@seniorsistemas/angular-components/structure';\nimport { TemplateDirective } from '@seniorsistemas/angular-components/template';\nimport { createScrollLock, randomHash } from '@seniorsistemas/angular-components/utils';\n\n/**\n * @description Componente de painel lateral deslizante (drawer) que aparece sobre o conteúdo\n * vindo do lado direito da tela. Suporta templates customizados para cabeçalho, corpo e rodapé\n * via `sTemplate`, bloqueio de scroll automático e confirmação de fechamento.\n *\n * Também responde ao seletor legado `s-sidebar`.\n *\n * @example\n * ```html\n * <s-drawer [(visible)]=\"drawerOpen\" header=\"Filtros\" [closable]=\"true\">\n * <ng-template sTemplate=\"body\">Conteúdo</ng-template>\n * </s-drawer>\n * ```\n *\n * @category Overlay\n */\n@Component({\n selector: 's-drawer, s-sidebar',\n templateUrl: './drawer.component.html',\n styleUrls: ['./drawer.component.scss'],\n host: {\n '(document:keydown.escape)': 'handleEscape()',\n },\n hostDirectives: [DeprecatedSelectorDirective],\n providers: [\n {\n provide: DEPRECATED_CONFIG,\n useValue: {\n oldSelector: 's-sidebar',\n newSelector: 's-drawer',\n removalVersion: '20.0.0',\n },\n },\n ],\n animations: [\n trigger('visibilityChanged', [\n transition(':enter', [\n style({ transform: 'translateX(100%)' }),\n animate('300ms', style({ transform: 'translateX(0)' })),\n ]),\n transition(':leave', [\n style({ transform: 'translateX(0)' }),\n animate('300ms', style({ transform: 'translateX(100%)' })),\n ]),\n ]),\n ],\n standalone: true,\n imports: [CdkTrapFocus, NgTemplateOutlet, TranslateModule],\n})\nexport class DrawerComponent implements AfterContentInit, OnDestroy {\n @ContentChildren(TemplateDirective)\n public templates: QueryList<TemplateDirective> | null = null;\n\n /**\n * @description Controla a visibilidade do drawer. Suporta two-way binding via `[(visible)]`.\n *\n * @default false\n */\n public visible = model<boolean>(false);\n\n /**\n * @description Quando `true`, exibe o botão de fechar (X) no cabeçalho do drawer.\n *\n * @default true\n */\n @Input()\n public closable = true;\n\n /**\n * @description Quando `true`, clicar no backdrop (área escurecida fora do drawer) fecha o painel.\n *\n * @default true\n */\n @Input()\n public dismissible = true;\n\n /**\n * @description Quando `true`, pressionar a tecla Escape fecha o drawer.\n *\n * @default true\n */\n @Input()\n public closeOnEscape = true;\n\n /**\n * @description Texto exibido no cabeçalho padrão do drawer.\n * Pode ser substituído por um template customizado via `sTemplate=\"header\"`.\n */\n @Input()\n public header?: string;\n\n /**\n * @description Nome acessível do drawer, usado quando o cabeçalho é um template\n * customizado via `sTemplate=\"header\"` (nesse caso não há `header` para associar\n * via `aria-labelledby`). Ignorado quando `header` está definido.\n */\n @Input()\n public ariaLabel?: string;\n\n /**\n * @description Quando `true`, aumenta a largura do drawer para acomodar mais conteúdo.\n *\n * @default false\n */\n @Input()\n public largeSized = false;\n\n /**\n * @description Quando `true`, mantém o conteúdo do drawer no DOM mesmo quando oculto,\n * preservando o estado interno dos componentes filhos.\n *\n * @default false\n */\n @Input()\n public cache = false;\n\n /**\n * @description Função de confirmação chamada antes de fechar o drawer.\n * Quando retornar `false`, o fechamento é bloqueado. Útil para validar formulários não salvos.\n */\n @Input()\n public set registerConfirmClose(fn: () => boolean) {\n this._confirmClose = fn;\n }\n\n /** @description Id único usado para associar o título ao painel via `aria-labelledby`. */\n protected readonly titleId = randomHash('drawer-title');\n\n public headerTemplate: TemplateRef<unknown> | null = null;\n public bodyTemplate: TemplateRef<unknown> | null = null;\n public footerTemplate: TemplateRef<unknown> | null = null;\n\n protected readonly footerComponent = contentChild(FooterComponent);\n\n private _confirmClose = () => true;\n\n private _elementToRefocus: HTMLElement | null = null;\n\n private readonly _scrollLock = createScrollLock();\n\n private readonly visibleEffect = effect(() => {\n const visible = this.visible();\n if (visible) {\n this._scrollLock.lock();\n this._elementToRefocus = document.activeElement as HTMLElement | null;\n } else {\n this._scrollLock.unlock();\n this._restoreFocus();\n }\n });\n\n public ngAfterContentInit(): void {\n this._getTemplates();\n }\n\n public ngOnDestroy(): void {\n this.visibleEffect.destroy();\n this._scrollLock.unlock();\n this._restoreFocus();\n }\n\n public closeDrawer(): void {\n if (this._confirmClose()) {\n this.visible.set(false);\n }\n }\n\n public handleEscape(): void {\n if (!this.visible() || !this.closeOnEscape) {\n return;\n }\n\n this.closeDrawer();\n }\n\n private _restoreFocus(): void {\n this._elementToRefocus?.focus();\n this._elementToRefocus = null;\n }\n\n private _getCustomTemplate(type: string): TemplateRef<any> | null {\n return this.templates?.find((template: TemplateDirective) => template.type === type)?.template ?? null;\n }\n\n private getHeaderTemplate(): TemplateRef<unknown> | null {\n return this._getCustomTemplate('header') ?? null;\n }\n\n private getBodyTemplate(): TemplateRef<unknown> | null {\n return this._getCustomTemplate('body') ?? null;\n }\n\n private getFooterTemplate(): TemplateRef<unknown> | null {\n return this._getCustomTemplate('footer') ?? null;\n }\n\n private _getTemplates(): void {\n this.headerTemplate = this.getHeaderTemplate();\n this.bodyTemplate = this.getBodyTemplate();\n this.footerTemplate = this.getFooterTemplate();\n }\n}\n","@if (visible()) {\n <div\n class=\"backdrop\"\n (click)=\"dismissible && closeDrawer()\"\n ></div>\n}\n\n@if (cache || visible()) {\n <div\n [cdkTrapFocus]=\"visible()\"\n [cdkTrapFocusAutoCapture]=\"visible()\"\n [@visibilityChanged]\n class=\"drawer\"\n [class.drawer--open]=\"visible()\"\n [class.drawer--large-size]=\"largeSized\"\n [attr.role]=\"visible() ? 'dialog' : null\"\n [attr.aria-modal]=\"visible() ? true : null\"\n [attr.aria-labelledby]=\"headerTemplate ? null : titleId\"\n [attr.aria-label]=\"headerTemplate ? ariaLabel : null\"\n [attr.inert]=\"visible() ? null : ''\"\n [attr.aria-hidden]=\"visible() ? null : 'true'\"\n >\n <div class=\"drawer__header\">\n @if (headerTemplate) {\n <ng-template *ngTemplateOutlet=\"headerTemplate\"></ng-template>\n } @else {\n <h2\n [id]=\"titleId\"\n tabindex=\"-1\"\n class=\"drawer__header__title\"\n >\n {{ header }}\n </h2>\n }\n @if (closable) {\n <button\n type=\"button\"\n class=\"drawer__header__close\"\n [attr.aria-label]=\"'platform.angular_components.close' | translate\"\n (click)=\"closeDrawer()\"\n >\n <i\n class=\"fas fa-times\"\n [attr.aria-hidden]=\"true\"\n ></i>\n </button>\n }\n </div>\n <div class=\"drawer__body\">\n @if (bodyTemplate) {\n <ng-template [ngTemplateOutlet]=\"bodyTemplate\"></ng-template>\n } @else {\n <ng-content select=\":not(s-footer)\"></ng-content>\n }\n </div>\n @if (footerTemplate || footerComponent()) {\n <div class=\"drawer__footer\">\n @if (footerTemplate) {\n <ng-template [ngTemplateOutlet]=\"footerTemplate\"></ng-template>\n } @else {\n <ng-content select=\"s-footer\"></ng-content>\n }\n </div>\n }\n </div>\n}\n\n","import { NgModule } from '@angular/core';\n\nimport { TemplateModule } from '@seniorsistemas/angular-components/template';\n\nimport { DrawerComponent } from './drawer.component';\n\n/**\n * @deprecated Será removido na v20. Importe diretamente o standalone `DrawerComponent` (de\n * `@seniorsistemas/angular-components/drawer`) no lugar deste módulo.\n *\n * Este módulo também reexportava `TemplateDirective` (`@seniorsistemas/angular-components/template`, usado em\n * templates por `[sTemplate]`). Se o seu template usa algum deles, importe-o diretamente.\n *\n * Migração automática (também executada pelo `ng update` na v20):\n * `ng generate @seniorsistemas/angular-components:migrate-modules-to-standalone`\n */\n@NgModule({\n imports: [DrawerComponent],\n exports: [DrawerComponent, TemplateModule],\n})\nexport class DrawerModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"seniorsistemas-angular-components-drawer.mjs","sources":["../../projects/angular-components/drawer/src/lib/drawer/drawer.component.ts","../../projects/angular-components/drawer/src/lib/drawer/drawer.component.html","../../projects/angular-components/drawer/src/lib/drawer/drawer.module.ts","../../projects/angular-components/drawer/src/seniorsistemas-angular-components-drawer.ts"],"sourcesContent":["import { animate, style, transition, trigger } from '@angular/animations';\nimport { CdkTrapFocus } from '@angular/cdk/a11y';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n AfterContentInit,\n Component,\n contentChild,\n ContentChildren,\n effect,\n Input,\n model,\n OnDestroy,\n QueryList,\n TemplateRef,\n} from '@angular/core';\n\nimport { TranslateModule } from '@ngx-translate/core';\nimport { DEPRECATED_CONFIG, DeprecatedSelectorDirective } from '@seniorsistemas/angular-components/common/deprecated-selector';\nimport { FooterComponent } from '@seniorsistemas/angular-components/structure';\nimport { TemplateDirective } from '@seniorsistemas/angular-components/template';\nimport { createScrollLock, randomHash } from '@seniorsistemas/angular-components/utils';\n\n/**\n * @description Componente de painel lateral deslizante (drawer) que aparece sobre o conteúdo\n * vindo do lado direito da tela. Suporta templates customizados para cabeçalho, corpo e rodapé\n * via `sTemplate`, bloqueio de scroll automático e confirmação de fechamento.\n *\n * Também responde ao seletor legado `s-sidebar`.\n *\n * @example\n * ```html\n * <s-drawer [(visible)]=\"drawerOpen\" header=\"Filtros\" [closable]=\"true\">\n * <ng-template sTemplate=\"body\">Conteúdo</ng-template>\n * </s-drawer>\n * ```\n *\n * @category Overlay\n */\n@Component({\n selector: 's-drawer, s-sidebar',\n templateUrl: './drawer.component.html',\n styleUrls: ['./drawer.component.scss'],\n host: {\n '(document:keydown.escape)': 'handleEscape()',\n },\n hostDirectives: [DeprecatedSelectorDirective],\n providers: [\n {\n provide: DEPRECATED_CONFIG,\n useValue: {\n oldSelector: 's-sidebar',\n newSelector: 's-drawer',\n removalVersion: '20.0.0',\n },\n },\n ],\n animations: [\n trigger('visibilityChanged', [\n transition(':enter', [\n style({ transform: 'translateX(100%)' }),\n animate('300ms', style({ transform: 'translateX(0)' })),\n ]),\n transition(':leave', [\n style({ transform: 'translateX(0)' }),\n animate('300ms', style({ transform: 'translateX(100%)' })),\n ]),\n ]),\n ],\n standalone: true,\n imports: [CdkTrapFocus, NgTemplateOutlet, TranslateModule],\n})\nexport class DrawerComponent implements AfterContentInit, OnDestroy {\n @ContentChildren(TemplateDirective)\n public templates: QueryList<TemplateDirective> | null = null;\n\n /**\n * @description Controla a visibilidade do drawer. Suporta two-way binding via `[(visible)]`.\n *\n * @default false\n */\n public visible = model<boolean>(false);\n\n /**\n * @description Quando `true`, exibe o botão de fechar (X) no cabeçalho do drawer.\n *\n * @default true\n */\n @Input()\n public closable = true;\n\n /**\n * @description Quando `true`, clicar no backdrop (área escurecida fora do drawer) fecha o painel.\n *\n * @default true\n */\n @Input()\n public dismissible = true;\n\n /**\n * @description Quando `true`, pressionar a tecla Escape fecha o drawer.\n *\n * @default true\n */\n @Input()\n public closeOnEscape = true;\n\n /**\n * @description Texto exibido no cabeçalho padrão do drawer.\n * Pode ser substituído por um template customizado via `sTemplate=\"header\"`.\n */\n @Input()\n public header?: string;\n\n /**\n * @description Nome acessível do drawer, usado quando o cabeçalho é um template\n * customizado via `sTemplate=\"header\"` (nesse caso não há `header` para associar\n * via `aria-labelledby`). Ignorado quando `header` está definido.\n */\n @Input()\n public ariaLabel?: string;\n\n /**\n * @description Quando `true`, aumenta a largura do drawer para acomodar mais conteúdo.\n *\n * @default false\n */\n @Input()\n public largeSized = false;\n\n /**\n * @description Quando `true`, mantém o conteúdo do drawer no DOM mesmo quando oculto,\n * preservando o estado interno dos componentes filhos.\n *\n * @default false\n */\n @Input()\n public cache = false;\n\n /**\n * @description Função de confirmação chamada antes de fechar o drawer.\n * Quando retornar `false`, o fechamento é bloqueado. Útil para validar formulários não salvos.\n */\n @Input()\n public set registerConfirmClose(fn: () => boolean) {\n this._confirmClose = fn;\n }\n\n /** @description Id único usado para associar o título ao painel via `aria-labelledby`. */\n protected readonly titleId = randomHash('drawer-title');\n\n public headerTemplate: TemplateRef<unknown> | null = null;\n public bodyTemplate: TemplateRef<unknown> | null = null;\n public footerTemplate: TemplateRef<unknown> | null = null;\n\n protected readonly footerComponent = contentChild(FooterComponent);\n\n private _confirmClose = () => true;\n\n private _elementToRefocus: HTMLElement | null = null;\n\n private readonly _scrollLock = createScrollLock();\n\n private readonly visibleEffect = effect(() => {\n const visible = this.visible();\n if (visible) {\n this._scrollLock.lock();\n this._elementToRefocus = document.activeElement as HTMLElement | null;\n } else {\n this._scrollLock.unlock();\n this._restoreFocus();\n }\n });\n\n public ngAfterContentInit(): void {\n this._getTemplates();\n }\n\n public ngOnDestroy(): void {\n this.visibleEffect.destroy();\n this._scrollLock.unlock();\n this._restoreFocus();\n }\n\n public closeDrawer(): void {\n if (this._confirmClose()) {\n this.visible.set(false);\n }\n }\n\n public handleEscape(): void {\n if (!this.visible() || !this.closeOnEscape) {\n return;\n }\n\n this.closeDrawer();\n }\n\n private _restoreFocus(): void {\n this._elementToRefocus?.focus();\n this._elementToRefocus = null;\n }\n\n private _getCustomTemplate(type: string): TemplateRef<any> | null {\n return this.templates?.find((template: TemplateDirective) => template.type === type)?.template ?? null;\n }\n\n private getHeaderTemplate(): TemplateRef<unknown> | null {\n return this._getCustomTemplate('header') ?? null;\n }\n\n private getBodyTemplate(): TemplateRef<unknown> | null {\n return this._getCustomTemplate('body') ?? null;\n }\n\n private getFooterTemplate(): TemplateRef<unknown> | null {\n return this._getCustomTemplate('footer') ?? null;\n }\n\n private _getTemplates(): void {\n this.headerTemplate = this.getHeaderTemplate();\n this.bodyTemplate = this.getBodyTemplate();\n this.footerTemplate = this.getFooterTemplate();\n }\n}\n","@if (visible()) {\n <div\n class=\"backdrop\"\n (click)=\"dismissible && closeDrawer()\"\n ></div>\n}\n\n@if (cache || visible()) {\n <div\n [cdkTrapFocus]=\"visible()\"\n [cdkTrapFocusAutoCapture]=\"visible()\"\n [@visibilityChanged]\n class=\"drawer\"\n [class.drawer--open]=\"visible()\"\n [class.drawer--large-size]=\"largeSized\"\n [attr.role]=\"visible() ? 'dialog' : null\"\n [attr.aria-modal]=\"visible() ? true : null\"\n [attr.aria-labelledby]=\"headerTemplate ? null : titleId\"\n [attr.aria-label]=\"headerTemplate ? ariaLabel : null\"\n [attr.inert]=\"visible() ? null : ''\"\n [attr.aria-hidden]=\"visible() ? null : 'true'\"\n >\n <div class=\"drawer__header\">\n @if (headerTemplate) {\n <ng-template *ngTemplateOutlet=\"headerTemplate\"></ng-template>\n } @else {\n <h2\n [id]=\"titleId\"\n tabindex=\"-1\"\n class=\"drawer__header__title\"\n >\n {{ header }}\n </h2>\n }\n @if (closable) {\n <button\n type=\"button\"\n class=\"drawer__header__close\"\n [attr.aria-label]=\"'platform.angular_components.close' | translate\"\n (click)=\"closeDrawer()\"\n >\n <i\n class=\"fas fa-times\"\n [attr.aria-hidden]=\"true\"\n ></i>\n </button>\n }\n </div>\n <div class=\"drawer__body\">\n @if (bodyTemplate) {\n <ng-template [ngTemplateOutlet]=\"bodyTemplate\"></ng-template>\n } @else {\n <ng-content select=\":not(s-footer)\"></ng-content>\n }\n </div>\n @if (footerTemplate || footerComponent()) {\n <div class=\"drawer__footer\">\n @if (footerTemplate) {\n <ng-template [ngTemplateOutlet]=\"footerTemplate\"></ng-template>\n } @else {\n <ng-content select=\"s-footer\"></ng-content>\n }\n </div>\n }\n </div>\n}\n\n","import { NgModule } from '@angular/core';\n\nimport { TemplateModule } from '@seniorsistemas/angular-components/template';\n\nimport { DrawerComponent } from './drawer.component';\n\n@NgModule({\n imports: [DrawerComponent],\n exports: [DrawerComponent, TemplateModule],\n})\nexport class DrawerModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|