spiderly 0.0.2
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 +3 -0
- package/esm2022/lib/components/auth/auth.module.mjs +65 -0
- package/esm2022/lib/components/auth/login/login.component.mjs +60 -0
- package/esm2022/lib/components/auth/partials/auth.component.mjs +53 -0
- package/esm2022/lib/components/auth/partials/login-verification.component.mjs +39 -0
- package/esm2022/lib/components/auth/partials/registration-verification.component.mjs +37 -0
- package/esm2022/lib/components/auth/partials/verification-wrapper.component.mjs +74 -0
- package/esm2022/lib/components/auth/registration/registration.component.mjs +59 -0
- package/esm2022/lib/components/base-details/role-base-details.component.mjs +171 -0
- package/esm2022/lib/components/base-form/base-form copy.mjs +247 -0
- package/esm2022/lib/components/card-skeleton/card-skeleton.component.mjs +25 -0
- package/esm2022/lib/components/footer/footer.component.mjs +16 -0
- package/esm2022/lib/components/index-card/index-card.component.mjs +57 -0
- package/esm2022/lib/components/info-card/info-card.component.mjs +29 -0
- package/esm2022/lib/components/layout/layout-base.component.mjs +120 -0
- package/esm2022/lib/components/layout/sidebar/menuitem.component.mjs +161 -0
- package/esm2022/lib/components/layout/sidebar/sidebar-menu.component.mjs +34 -0
- package/esm2022/lib/components/layout/sidebar/sidebar-menu.service.mjs +26 -0
- package/esm2022/lib/components/layout/sidebar/sidebar.component.mjs +21 -0
- package/esm2022/lib/components/layout/topbar/topbar.component.mjs +115 -0
- package/esm2022/lib/components/not-found/not-found.component.mjs +20 -0
- package/esm2022/lib/components/required/required.component.mjs +12 -0
- package/esm2022/lib/components/spiderly-buttons/google-button/google-button.component.mjs +43 -0
- package/esm2022/lib/components/spiderly-buttons/return-button/return-button.component.mjs +37 -0
- package/esm2022/lib/components/spiderly-buttons/spiderly-button/spiderly-button.component.mjs +20 -0
- package/esm2022/lib/components/spiderly-buttons/spiderly-button-base/spiderly-button-base.mjs +68 -0
- package/esm2022/lib/components/spiderly-buttons/spiderly-split-button/spiderly-split-button.component.mjs +22 -0
- package/esm2022/lib/components/spiderly-data-table/spiderly-data-table.component.mjs +502 -0
- package/esm2022/lib/components/spiderly-delete-dialog/spiderly-delete-confirmation.component.mjs +42 -0
- package/esm2022/lib/components/spiderly-form-control/spiderly-form-control.mjs +36 -0
- package/esm2022/lib/components/spiderly-panels/panel-body/panel-body.component.mjs +19 -0
- package/esm2022/lib/components/spiderly-panels/panel-footer/panel-footer.component.mjs +14 -0
- package/esm2022/lib/components/spiderly-panels/panel-header/panel-header.component.mjs +49 -0
- package/esm2022/lib/components/spiderly-panels/spiderly-card/spiderly-card.component.mjs +20 -0
- package/esm2022/lib/components/spiderly-panels/spiderly-panel/spiderly-panel.component.mjs +63 -0
- package/esm2022/lib/components/spiderly-panels/spiderly-panels.module.mjs +49 -0
- package/esm2022/lib/controls/base-autocomplete-control.mjs +18 -0
- package/esm2022/lib/controls/base-control.mjs +62 -0
- package/esm2022/lib/controls/base-dropdown-control.mjs +37 -0
- package/esm2022/lib/controls/spiderly-autocomplete/spiderly-autocomplete.component.mjs +60 -0
- package/esm2022/lib/controls/spiderly-calendar/spiderly-calendar.component.mjs +39 -0
- package/esm2022/lib/controls/spiderly-checkbox/spiderly-checkbox.component.mjs +45 -0
- package/esm2022/lib/controls/spiderly-colorpick/spiderly-colorpick.component.mjs +40 -0
- package/esm2022/lib/controls/spiderly-controls.module.mjs +112 -0
- package/esm2022/lib/controls/spiderly-dropdown/spiderly-dropdown.component.mjs +40 -0
- package/esm2022/lib/controls/spiderly-editor/spiderly-editor.component.mjs +59 -0
- package/esm2022/lib/controls/spiderly-file/spiderly-file.component.mjs +106 -0
- package/esm2022/lib/controls/spiderly-multiautocomplete/spiderly-multiautocomplete.component.mjs +38 -0
- package/esm2022/lib/controls/spiderly-multiselect/spiderly-multiselect.component.mjs +34 -0
- package/esm2022/lib/controls/spiderly-number/spiderly-number.component.mjs +44 -0
- package/esm2022/lib/controls/spiderly-password/spiderly-password.component.mjs +37 -0
- package/esm2022/lib/controls/spiderly-textarea/spiderly-textarea.component.mjs +34 -0
- package/esm2022/lib/controls/spiderly-textbox/spiderly-textbox.component.mjs +45 -0
- package/esm2022/lib/entities/base-entity.mjs +18 -0
- package/esm2022/lib/entities/codebook.mjs +10 -0
- package/esm2022/lib/entities/init-company-auth-dialog-details.mjs +9 -0
- package/esm2022/lib/entities/init-top-bar-data.mjs +12 -0
- package/esm2022/lib/entities/is-authorized-for-save-event.mjs +9 -0
- package/esm2022/lib/entities/last-menu-icon-index-clicked.mjs +8 -0
- package/esm2022/lib/entities/lazy-load-selected-ids-result.mjs +11 -0
- package/esm2022/lib/entities/menuchangeevent.mjs +3 -0
- package/esm2022/lib/entities/mime-type.mjs +15 -0
- package/esm2022/lib/entities/namebook.mjs +9 -0
- package/esm2022/lib/entities/primeng-option.mjs +9 -0
- package/esm2022/lib/entities/security-entities.mjs +169 -0
- package/esm2022/lib/entities/simple-save-result.mjs +9 -0
- package/esm2022/lib/entities/spiderly-button.mjs +11 -0
- package/esm2022/lib/entities/table-filter-context.mjs +3 -0
- package/esm2022/lib/entities/table-filter-sort-meta.mjs +3 -0
- package/esm2022/lib/entities/table-filter.mjs +15 -0
- package/esm2022/lib/entities/table-response.mjs +3 -0
- package/esm2022/lib/enums/security-enums.mjs +26 -0
- package/esm2022/lib/enums/verification-type-codes.mjs +6 -0
- package/esm2022/lib/guards/auth.guard.mjs +40 -0
- package/esm2022/lib/guards/not-auth.guard.mjs +32 -0
- package/esm2022/lib/handlers/spiderly-error-handler.mjs +30 -0
- package/esm2022/lib/handlers/spiderly-transloco-fallback-strategy.mjs +24 -0
- package/esm2022/lib/interceptors/http-loading.interceptor.mjs +27 -0
- package/esm2022/lib/interceptors/json-parser.interceptor.mjs +47 -0
- package/esm2022/lib/interceptors/jwt.interceptor.mjs +27 -0
- package/esm2022/lib/interceptors/unauthorized.interceptor.mjs +64 -0
- package/esm2022/lib/modules/core.module.mjs +140 -0
- package/esm2022/lib/modules/primeng.module.mjs +278 -0
- package/esm2022/lib/modules/spiderly-transloco.module.mjs +44 -0
- package/esm2022/lib/services/api.service.security.mjs +86 -0
- package/esm2022/lib/services/app-initializer.mjs +6 -0
- package/esm2022/lib/services/app-layout-base.service.mjs +132 -0
- package/esm2022/lib/services/auth-base.service.mjs +220 -0
- package/esm2022/lib/services/base-form.service.mjs +124 -0
- package/esm2022/lib/services/config-base.service.mjs +33 -0
- package/esm2022/lib/services/helper-functions.mjs +229 -0
- package/esm2022/lib/services/spiderly-message.service.mjs +64 -0
- package/esm2022/lib/services/spiderly-transloco-loader.mjs +20 -0
- package/esm2022/lib/services/translate-labels-abstract.service.mjs +15 -0
- package/esm2022/lib/services/validator-abstract.service.mjs +51 -0
- package/esm2022/public-api.mjs +94 -0
- package/esm2022/spiderly.mjs +5 -0
- package/fesm2022/spiderly.mjs +4807 -0
- package/fesm2022/spiderly.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/components/auth/auth.module.d.ts +17 -0
- package/lib/components/auth/login/login.component.d.ts +35 -0
- package/lib/components/auth/partials/auth.component.d.ts +21 -0
- package/lib/components/auth/partials/login-verification.component.d.ts +18 -0
- package/lib/components/auth/partials/registration-verification.component.d.ts +17 -0
- package/lib/components/auth/partials/verification-wrapper.component.d.ts +31 -0
- package/lib/components/auth/registration/registration.component.d.ts +34 -0
- package/lib/components/base-details/role-base-details.component.d.ts +50 -0
- package/lib/components/base-form/base-form copy.d.ts +54 -0
- package/lib/components/card-skeleton/card-skeleton.component.d.ts +12 -0
- package/lib/components/footer/footer.component.d.ts +9 -0
- package/lib/components/index-card/index-card.component.d.ts +22 -0
- package/lib/components/info-card/info-card.component.d.ts +11 -0
- package/lib/components/layout/layout-base.component.d.ts +37 -0
- package/lib/components/layout/sidebar/menuitem.component.d.ts +43 -0
- package/lib/components/layout/sidebar/sidebar-menu.component.d.ts +23 -0
- package/lib/components/layout/sidebar/sidebar-menu.service.d.ts +12 -0
- package/lib/components/layout/sidebar/sidebar.component.d.ts +11 -0
- package/lib/components/layout/topbar/topbar.component.d.ts +45 -0
- package/lib/components/not-found/not-found.component.d.ts +9 -0
- package/lib/components/required/required.component.d.ts +6 -0
- package/lib/components/spiderly-buttons/google-button/google-button.component.d.ts +17 -0
- package/lib/components/spiderly-buttons/return-button/return-button.component.d.ts +10 -0
- package/lib/components/spiderly-buttons/spiderly-button/spiderly-button.component.d.ts +6 -0
- package/lib/components/spiderly-buttons/spiderly-button-base/spiderly-button-base.d.ts +27 -0
- package/lib/components/spiderly-buttons/spiderly-split-button/spiderly-split-button.component.d.ts +8 -0
- package/lib/components/spiderly-data-table/spiderly-data-table.component.d.ts +157 -0
- package/lib/components/spiderly-delete-dialog/spiderly-delete-confirmation.component.d.ts +11 -0
- package/lib/components/spiderly-form-control/spiderly-form-control.d.ts +37 -0
- package/lib/components/spiderly-panels/panel-body/panel-body.component.d.ts +9 -0
- package/lib/components/spiderly-panels/panel-footer/panel-footer.component.d.ts +8 -0
- package/lib/components/spiderly-panels/panel-header/panel-header.component.d.ts +29 -0
- package/lib/components/spiderly-panels/spiderly-card/spiderly-card.component.d.ts +10 -0
- package/lib/components/spiderly-panels/spiderly-panel/spiderly-panel.component.d.ts +25 -0
- package/lib/components/spiderly-panels/spiderly-panels.module.d.ts +13 -0
- package/lib/controls/base-autocomplete-control.d.ts +9 -0
- package/lib/controls/base-control.d.ts +23 -0
- package/lib/controls/base-dropdown-control.d.ts +18 -0
- package/lib/controls/spiderly-autocomplete/spiderly-autocomplete.component.d.ts +18 -0
- package/lib/controls/spiderly-calendar/spiderly-calendar.component.d.ts +13 -0
- package/lib/controls/spiderly-checkbox/spiderly-checkbox.component.d.ts +14 -0
- package/lib/controls/spiderly-colorpick/spiderly-colorpick.component.d.ts +11 -0
- package/lib/controls/spiderly-controls.module.d.ts +22 -0
- package/lib/controls/spiderly-dropdown/spiderly-dropdown.component.d.ts +14 -0
- package/lib/controls/spiderly-editor/spiderly-editor.component.d.ts +16 -0
- package/lib/controls/spiderly-file/spiderly-file.component.d.ts +36 -0
- package/lib/controls/spiderly-multiautocomplete/spiderly-multiautocomplete.component.d.ts +13 -0
- package/lib/controls/spiderly-multiselect/spiderly-multiselect.component.d.ts +11 -0
- package/lib/controls/spiderly-number/spiderly-number.component.d.ts +15 -0
- package/lib/controls/spiderly-password/spiderly-password.component.d.ts +12 -0
- package/lib/controls/spiderly-textarea/spiderly-textarea.component.d.ts +11 -0
- package/lib/controls/spiderly-textbox/spiderly-textbox.component.d.ts +15 -0
- package/lib/entities/base-entity.d.ts +14 -0
- package/lib/entities/codebook.d.ts +9 -0
- package/lib/entities/init-company-auth-dialog-details.d.ts +9 -0
- package/lib/entities/init-top-bar-data.d.ts +16 -0
- package/lib/entities/is-authorized-for-save-event.d.ts +9 -0
- package/lib/entities/last-menu-icon-index-clicked.d.ts +7 -0
- package/lib/entities/lazy-load-selected-ids-result.d.ts +9 -0
- package/lib/entities/menuchangeevent.d.ts +4 -0
- package/lib/entities/mime-type.d.ts +11 -0
- package/lib/entities/namebook.d.ts +9 -0
- package/lib/entities/primeng-option.d.ts +9 -0
- package/lib/entities/security-entities.d.ts +211 -0
- package/lib/entities/simple-save-result.d.ts +7 -0
- package/lib/entities/spiderly-button.d.ts +13 -0
- package/lib/entities/table-filter-context.d.ts +5 -0
- package/lib/entities/table-filter-sort-meta.d.ts +4 -0
- package/lib/entities/table-filter.d.ts +23 -0
- package/lib/entities/table-response.d.ts +4 -0
- package/lib/enums/security-enums.d.ts +22 -0
- package/lib/enums/verification-type-codes.d.ts +4 -0
- package/lib/guards/auth.guard.d.ts +15 -0
- package/lib/guards/not-auth.guard.d.ts +12 -0
- package/lib/handlers/spiderly-error-handler.d.ts +14 -0
- package/lib/handlers/spiderly-transloco-fallback-strategy.d.ts +13 -0
- package/lib/interceptors/http-loading.interceptor.d.ts +11 -0
- package/lib/interceptors/json-parser.interceptor.d.ts +11 -0
- package/lib/interceptors/jwt.interceptor.d.ts +11 -0
- package/lib/interceptors/unauthorized.interceptor.d.ts +16 -0
- package/lib/modules/core.module.d.ts +13 -0
- package/lib/modules/primeng.module.d.ts +42 -0
- package/lib/modules/spiderly-transloco.module.d.ts +9 -0
- package/lib/services/api.service.security.d.ts +35 -0
- package/lib/services/app-initializer.d.ts +4 -0
- package/lib/services/app-layout-base.service.d.ts +60 -0
- package/lib/services/auth-base.service.d.ts +55 -0
- package/lib/services/base-form.service.d.ts +27 -0
- package/lib/services/config-base.service.d.ts +24 -0
- package/lib/services/helper-functions.d.ts +37 -0
- package/lib/services/spiderly-message.service.d.ts +17 -0
- package/lib/services/spiderly-transloco-loader.d.ts +10 -0
- package/lib/services/translate-labels-abstract.service.d.ts +7 -0
- package/lib/services/validator-abstract.service.d.ts +13 -0
- package/package.json +60 -0
- package/public-api.d.ts +90 -0
- package/styles/components/spiderly-data-table/spiderly-data-table.component.scss +34 -0
- package/styles/components/spiderly-panels/panel-footer/panel-footer.component.scss +10 -0
- package/styles/styles/layout/_config.scss +42 -0
- package/styles/styles/layout/_content.scss +12 -0
- package/styles/styles/layout/_footer.scss +9 -0
- package/styles/styles/layout/_main.scss +28 -0
- package/styles/styles/layout/_menu.scss +135 -0
- package/styles/styles/layout/_mixins.scss +13 -0
- package/styles/styles/layout/_preloading.scss +47 -0
- package/styles/styles/layout/_responsive.scss +100 -0
- package/styles/styles/layout/_spiderly-controls.scss +12 -0
- package/styles/styles/layout/_topbar.scss +231 -0
- package/styles/styles/layout/_typography.scss +63 -0
- package/styles/styles/layout/_utils.scss +20 -0
- package/styles/styles/layout/_variables.scss +903 -0
- package/styles/styles/layout/layout.scss +13 -0
- package/styles/styles/shared.scss +519 -0
- package/styles/styles/styles.scss +6 -0
- package/styles/styles/theme/base/_colors.scss +18 -0
- package/styles/styles/theme/base/_common.scss +75 -0
- package/styles/styles/theme/base/_components.scss +106 -0
- package/styles/styles/theme/base/_mixins.scss +343 -0
- package/styles/styles/theme/base/components/button/_button.scss +564 -0
- package/styles/styles/theme/base/components/button/_speeddial.scss +96 -0
- package/styles/styles/theme/base/components/button/_splitbutton.scss +381 -0
- package/styles/styles/theme/base/components/data/_carousel.scss +37 -0
- package/styles/styles/theme/base/components/data/_datatable.scss +338 -0
- package/styles/styles/theme/base/components/data/_dataview.scss +55 -0
- package/styles/styles/theme/base/components/data/_filter.scss +138 -0
- package/styles/styles/theme/base/components/data/_orderlist.scss +103 -0
- package/styles/styles/theme/base/components/data/_organizationchart.scss +50 -0
- package/styles/styles/theme/base/components/data/_paginator.scss +92 -0
- package/styles/styles/theme/base/components/data/_picklist.scss +103 -0
- package/styles/styles/theme/base/components/data/_timeline.scss +81 -0
- package/styles/styles/theme/base/components/data/_tree.scss +149 -0
- package/styles/styles/theme/base/components/data/_treetable.scss +256 -0
- package/styles/styles/theme/base/components/data/_virtualscroller.scss +28 -0
- package/styles/styles/theme/base/components/file/_fileupload.scss +64 -0
- package/styles/styles/theme/base/components/input/_autocomplete.scss +118 -0
- package/styles/styles/theme/base/components/input/_calendar.scss +263 -0
- package/styles/styles/theme/base/components/input/_cascadeselect.scss +130 -0
- package/styles/styles/theme/base/components/input/_checkbox.scss +90 -0
- package/styles/styles/theme/base/components/input/_chips.scss +55 -0
- package/styles/styles/theme/base/components/input/_colorpicker.scss +26 -0
- package/styles/styles/theme/base/components/input/_dropdown.scss +152 -0
- package/styles/styles/theme/base/components/input/_editor.scss +122 -0
- package/styles/styles/theme/base/components/input/_inputgroup.scss +75 -0
- package/styles/styles/theme/base/components/input/_inputmask.scss +16 -0
- package/styles/styles/theme/base/components/input/_inputnumber.scss +28 -0
- package/styles/styles/theme/base/components/input/_inputswitch.scss +60 -0
- package/styles/styles/theme/base/components/input/_inputtext.scss +100 -0
- package/styles/styles/theme/base/components/input/_listbox.scss +82 -0
- package/styles/styles/theme/base/components/input/_multiselect.scss +173 -0
- package/styles/styles/theme/base/components/input/_password.scss +52 -0
- package/styles/styles/theme/base/components/input/_radiobutton.scss +78 -0
- package/styles/styles/theme/base/components/input/_rating.scss +55 -0
- package/styles/styles/theme/base/components/input/_selectbutton.scss +50 -0
- package/styles/styles/theme/base/components/input/_slider.scss +71 -0
- package/styles/styles/theme/base/components/input/_togglebutton.scss +48 -0
- package/styles/styles/theme/base/components/input/_treeselect.scss +139 -0
- package/styles/styles/theme/base/components/menu/_breadcrumb.scss +42 -0
- package/styles/styles/theme/base/components/menu/_contextmenu.scss +39 -0
- package/styles/styles/theme/base/components/menu/_dock.scss +95 -0
- package/styles/styles/theme/base/components/menu/_megamenu.scss +55 -0
- package/styles/styles/theme/base/components/menu/_menu.scss +37 -0
- package/styles/styles/theme/base/components/menu/_menubar.scss +141 -0
- package/styles/styles/theme/base/components/menu/_panelmenu.scss +153 -0
- package/styles/styles/theme/base/components/menu/_slidemenu.scss +59 -0
- package/styles/styles/theme/base/components/menu/_steps.scss +56 -0
- package/styles/styles/theme/base/components/menu/_tabmenu.scss +74 -0
- package/styles/styles/theme/base/components/menu/_tieredmenu.scss +43 -0
- package/styles/styles/theme/base/components/messages/_inlinemessage.scss +69 -0
- package/styles/styles/theme/base/components/messages/_message.scss +107 -0
- package/styles/styles/theme/base/components/messages/_toast.scss +103 -0
- package/styles/styles/theme/base/components/misc/_avatar.scss +30 -0
- package/styles/styles/theme/base/components/misc/_badge.scss +48 -0
- package/styles/styles/theme/base/components/misc/_blockui.scss +0 -0
- package/styles/styles/theme/base/components/misc/_chip.scss +42 -0
- package/styles/styles/theme/base/components/misc/_inplace.scss +17 -0
- package/styles/styles/theme/base/components/misc/_progressbar.scss +17 -0
- package/styles/styles/theme/base/components/misc/_scrolltop.scss +25 -0
- package/styles/styles/theme/base/components/misc/_skeleton.scss +8 -0
- package/styles/styles/theme/base/components/misc/_tag.scss +40 -0
- package/styles/styles/theme/base/components/misc/_terminal.scss +12 -0
- package/styles/styles/theme/base/components/multimedia/_galleria.scss +155 -0
- package/styles/styles/theme/base/components/multimedia/_image.scss +49 -0
- package/styles/styles/theme/base/components/overlay/_confirmpopup.scss +72 -0
- package/styles/styles/theme/base/components/overlay/_dialog.scss +73 -0
- package/styles/styles/theme/base/components/overlay/_overlaypanel.scss +64 -0
- package/styles/styles/theme/base/components/overlay/_sidebar.scss +27 -0
- package/styles/styles/theme/base/components/overlay/_tooltip.scss +33 -0
- package/styles/styles/theme/base/components/panel/_accordion.scss +119 -0
- package/styles/styles/theme/base/components/panel/_card.scss +30 -0
- package/styles/styles/theme/base/components/panel/_divider.scss +31 -0
- package/styles/styles/theme/base/components/panel/_fieldset.scss +47 -0
- package/styles/styles/theme/base/components/panel/_panel.scss +58 -0
- package/styles/styles/theme/base/components/panel/_scrollpanel.scss +6 -0
- package/styles/styles/theme/base/components/panel/_splitter.scss +19 -0
- package/styles/styles/theme/base/components/panel/_tabview.scss +82 -0
- package/styles/styles/theme/base/components/panel/_toolbar.scss +11 -0
- package/styles/styles/theme/saga/_extensions.scss +27 -0
- package/styles/styles/theme/saga/_variables.scss +1 -0
- package/styles/styles/theme/saga/saga-blue/_extensions.scss +2 -0
- package/styles/styles/theme/saga/saga-blue/_fonts.scss +1 -0
- package/styles/styles/theme/saga/saga-blue/_variables.scss +1 -0
- package/styles/styles/theme/saga/saga-blue/theme.scss +4 -0
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
import { CommonModule } from '@angular/common';
|
|
2
|
+
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
|
|
3
|
+
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
4
|
+
import { TranslocoDirective } from '@jsverse/transloco';
|
|
5
|
+
import { combineLatest, forkJoin, map, of } from 'rxjs';
|
|
6
|
+
import { PrimengModule } from '../../modules/primeng.module';
|
|
7
|
+
import { CardSkeletonComponent } from '../card-skeleton/card-skeleton.component';
|
|
8
|
+
import { SpiderlyFormControl } from '../spiderly-form-control/spiderly-form-control';
|
|
9
|
+
import { Role, RoleSaveBody } from '../../entities/security-entities';
|
|
10
|
+
import { getControl, getPrimengAutocompleteNamebookOptions, getPrimengDropdownNamebookOptions, nameof } from '../../services/helper-functions';
|
|
11
|
+
import { IsAuthorizedForSaveEvent } from '../../entities/is-authorized-for-save-event';
|
|
12
|
+
import { SpiderlyTextboxComponent } from '../../controls/spiderly-textbox/spiderly-textbox.component';
|
|
13
|
+
import { SpiderlyTextareaComponent } from '../../controls/spiderly-textarea/spiderly-textarea.component';
|
|
14
|
+
import { SpiderlyMultiAutocompleteComponent } from '../../controls/spiderly-multiautocomplete/spiderly-multiautocomplete.component';
|
|
15
|
+
import { SpiderlyMultiSelectComponent } from '../../controls/spiderly-multiselect/spiderly-multiselect.component';
|
|
16
|
+
import { SpiderlyPanelsModule } from '../spiderly-panels/spiderly-panels.module';
|
|
17
|
+
import { SpiderlyButtonComponent } from '../spiderly-buttons/spiderly-button/spiderly-button.component';
|
|
18
|
+
import { SpiderlyReturnButtonComponent } from '../spiderly-buttons/return-button/return-button.component';
|
|
19
|
+
import * as i0 from "@angular/core";
|
|
20
|
+
import * as i1 from "../../services/api.service.security";
|
|
21
|
+
import * as i2 from "@angular/router";
|
|
22
|
+
import * as i3 from "../../services/base-form.service";
|
|
23
|
+
import * as i4 from "../../services/auth-base.service";
|
|
24
|
+
import * as i5 from "@angular/common";
|
|
25
|
+
import * as i6 from "@angular/forms";
|
|
26
|
+
import * as i7 from "../spiderly-panels/panel-header/panel-header.component";
|
|
27
|
+
import * as i8 from "../spiderly-panels/panel-body/panel-body.component";
|
|
28
|
+
import * as i9 from "../spiderly-panels/panel-footer/panel-footer.component";
|
|
29
|
+
import * as i10 from "../spiderly-panels/spiderly-panel/spiderly-panel.component";
|
|
30
|
+
export class RoleBaseDetailsComponent {
|
|
31
|
+
constructor(apiService, route, baseFormService, authService) {
|
|
32
|
+
this.apiService = apiService;
|
|
33
|
+
this.route = route;
|
|
34
|
+
this.baseFormService = baseFormService;
|
|
35
|
+
this.authService = authService;
|
|
36
|
+
this.onSave = new EventEmitter();
|
|
37
|
+
this.onRoleFormGroupInitFinish = new EventEmitter();
|
|
38
|
+
this.additionalButtons = [];
|
|
39
|
+
this.authorizedForSaveObservable = () => of(false);
|
|
40
|
+
this.isAuthorizedForSave = false;
|
|
41
|
+
this.onIsAuthorizedForSaveChange = new EventEmitter();
|
|
42
|
+
this.loading = true;
|
|
43
|
+
this.roleSaveBodyName = nameof('roleDTO');
|
|
44
|
+
this.selectedUsersForRole = new SpiderlyFormControl(null, { updateOn: 'change' });
|
|
45
|
+
this.selectedPermissionsForRole = new SpiderlyFormControl(null, { updateOn: 'change' });
|
|
46
|
+
this.handleAuthorizationForSave = () => {
|
|
47
|
+
return combineLatest([this.authService.currentUserPermissionCodes$, this.authorizedForSaveObservable()]).pipe(map(([currentUserPermissionCodes, isAuthorizedForSave]) => {
|
|
48
|
+
if (currentUserPermissionCodes != null && isAuthorizedForSave != null) {
|
|
49
|
+
this.isAuthorizedForSave =
|
|
50
|
+
(currentUserPermissionCodes.includes('InsertRole') && this.modelId <= 0) ||
|
|
51
|
+
(currentUserPermissionCodes.includes('UpdateRole') && this.modelId > 0) ||
|
|
52
|
+
isAuthorizedForSave;
|
|
53
|
+
if (this.isAuthorizedForSave) {
|
|
54
|
+
this.roleFormGroup.controls.name.enable();
|
|
55
|
+
this.roleFormGroup.controls.description.enable();
|
|
56
|
+
this.selectedUsersForRole.enable();
|
|
57
|
+
this.selectedPermissionsForRole.enable();
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
this.roleFormGroup.controls.name.disable();
|
|
61
|
+
this.roleFormGroup.controls.description.disable();
|
|
62
|
+
this.selectedUsersForRole.disable();
|
|
63
|
+
this.selectedPermissionsForRole.disable();
|
|
64
|
+
}
|
|
65
|
+
this.onIsAuthorizedForSaveChange.next(new IsAuthorizedForSaveEvent({
|
|
66
|
+
isAuthorizedForSave: this.isAuthorizedForSave,
|
|
67
|
+
currentUserPermissionCodes: currentUserPermissionCodes
|
|
68
|
+
}));
|
|
69
|
+
}
|
|
70
|
+
}));
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
ngOnInit() {
|
|
74
|
+
this.formGroup.initSaveBody = () => {
|
|
75
|
+
let saveBody = new RoleSaveBody();
|
|
76
|
+
saveBody.roleDTO = this.roleFormGroup.getRawValue();
|
|
77
|
+
saveBody.selectedPermissionsIds = this.selectedPermissionsForRole.getRawValue();
|
|
78
|
+
saveBody.selectedUsersIds = this.selectedUsersForRole.getRawValue()?.map(n => n.value);
|
|
79
|
+
return saveBody;
|
|
80
|
+
};
|
|
81
|
+
this.formGroup.saveObservableMethod = this.apiService.saveRole;
|
|
82
|
+
this.formGroup.mainDTOName = this.roleSaveBodyName;
|
|
83
|
+
this.route.params.subscribe(async (params) => {
|
|
84
|
+
this.modelId = params['id'];
|
|
85
|
+
getPrimengDropdownNamebookOptions(this.apiService.getPermissionsDropdownListForRole).subscribe(po => {
|
|
86
|
+
this.permissionsForRoleOptions = po;
|
|
87
|
+
});
|
|
88
|
+
if (this.modelId > 0) {
|
|
89
|
+
forkJoin({
|
|
90
|
+
mainUIFormDTO: this.apiService.getRoleMainUIFormDTO(this.modelId)
|
|
91
|
+
})
|
|
92
|
+
.subscribe(({ mainUIFormDTO }) => {
|
|
93
|
+
this.initRoleFormGroup(new Role(mainUIFormDTO.roleDTO));
|
|
94
|
+
this.selectedPermissionsForRole.setValue(mainUIFormDTO.permissionsNamebookDTOList.map(n => { return n.id; }));
|
|
95
|
+
this.selectedUsersForRole.setValue(mainUIFormDTO.usersNamebookDTOList.map(n => ({ label: n.displayName, value: n.id })));
|
|
96
|
+
this.authorizationForSaveSubscription = this.handleAuthorizationForSave().subscribe();
|
|
97
|
+
this.loading = false;
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
this.initRoleFormGroup(new Role({ id: 0 }));
|
|
102
|
+
this.authorizationForSaveSubscription = this.handleAuthorizationForSave().subscribe();
|
|
103
|
+
this.loading = false;
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
initRoleFormGroup(role) {
|
|
108
|
+
this.baseFormService.addFormGroup(this.roleFormGroup, this.formGroup, role, this.roleSaveBodyName, []);
|
|
109
|
+
this.roleFormGroup.mainDTOName = this.roleSaveBodyName;
|
|
110
|
+
this.onRoleFormGroupInitFinish.next();
|
|
111
|
+
}
|
|
112
|
+
searchUsersForRole(event) {
|
|
113
|
+
getPrimengAutocompleteNamebookOptions(this.apiService.getUsersAutocompleteListForRole, 50, event?.query ?? '').subscribe(po => {
|
|
114
|
+
this.usersForRoleOptions = po;
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
control(formControlName, formGroup) {
|
|
118
|
+
return getControl(formControlName, formGroup);
|
|
119
|
+
}
|
|
120
|
+
getFormArrayGroups(formArray) {
|
|
121
|
+
return this.baseFormService.getFormArrayGroups(formArray);
|
|
122
|
+
}
|
|
123
|
+
save() {
|
|
124
|
+
this.onSave.next();
|
|
125
|
+
}
|
|
126
|
+
ngOnDestroy() {
|
|
127
|
+
if (this.authorizationForSaveSubscription) {
|
|
128
|
+
this.authorizationForSaveSubscription.unsubscribe();
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: RoleBaseDetailsComponent, deps: [{ token: i1.ApiSecurityService }, { token: i2.ActivatedRoute }, { token: i3.BaseFormService }, { token: i4.AuthBaseService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
132
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: RoleBaseDetailsComponent, isStandalone: true, selector: "role-base-details", inputs: { getCrudMenuForOrderedData: "getCrudMenuForOrderedData", formGroup: "formGroup", roleFormGroup: "roleFormGroup", additionalButtons: "additionalButtons", authorizedForSaveObservable: "authorizedForSaveObservable" }, outputs: { onSave: "onSave", onRoleFormGroupInitFinish: "onRoleFormGroupInitFinish", onIsAuthorizedForSaveChange: "onIsAuthorizedForSaveChange" }, ngImport: i0, template: "<ng-container *transloco=\"let t\">\r\n <spiderly-panel>\r\n <panel-header></panel-header>\r\n\r\n <panel-body>\r\n <form *ngIf=\"loading === false\" class=\"grid\"> <!-- FT: Don't put @deffer it's not working as expected -->\r\n <div class=\"col-12\">\r\n <spiderly-textbox [control]=\"control('name', roleFormGroup)\"></spiderly-textbox>\r\n </div>\r\n <div class=\"col-12\">\r\n <spiderly-textarea [control]=\"control('description', roleFormGroup)\"></spiderly-textarea>\r\n </div>\r\n <div class=\"col-12\">\r\n <spiderly-multiautocomplete [control]=\"selectedUsersForRole\" [options]=\"usersForRoleOptions\" (onTextInput)=\"searchUsersForRole($event)\" [label]=\"t('Users')\"></spiderly-multiautocomplete>\r\n </div>\r\n <div class=\"col-12\">\r\n <spiderly-multiselect [control]=\"selectedPermissionsForRole\" [options]=\"permissionsForRoleOptions\" [label]=\"t('Permissions')\"></spiderly-multiselect>\r\n </div>\r\n </form>\r\n\r\n <card-skeleton *ngIf=\"loading === true\" [height]=\"502\"></card-skeleton>\r\n\r\n </panel-body>\r\n\r\n <panel-footer>\r\n <spiderly-button [disabled]=\"!isAuthorizedForSave\" (onClick)=\"save()\" [label]=\"t('Save')\" icon=\"pi pi-save\"></spiderly-button>\r\n @for (button of additionalButtons; track button.label) {\r\n <spiderly-button (onClick)=\"button.onClick()\" [disabled]=\"button.disabled\" [label]=\"button.label\" [icon]=\"button.icon\"></spiderly-button>\r\n }\r\n <return-button></return-button>\r\n </panel-footer>\r\n </spiderly-panel>\r\n</ng-container>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i6.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i6.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i6.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: PrimengModule }, { kind: "directive", type:
|
|
133
|
+
// SpiderlyControlsModule,
|
|
134
|
+
TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoPrefix", "translocoLang", "translocoLoadingTpl"] }, { kind: "component", type: CardSkeletonComponent, selector: "card-skeleton", inputs: ["height"] }, { kind: "component", type: SpiderlyTextboxComponent, selector: "spiderly-textbox", inputs: ["showButton", "buttonIcon"], outputs: ["onButtonClick"] }, { kind: "component", type: SpiderlyTextareaComponent, selector: "spiderly-textarea" }, { kind: "component", type: SpiderlyMultiAutocompleteComponent, selector: "spiderly-multiautocomplete" }, { kind: "component", type: SpiderlyMultiSelectComponent, selector: "spiderly-multiselect" }, { kind: "ngmodule", type: SpiderlyPanelsModule }, { kind: "component", type: i7.PanelHeaderComponent, selector: "panel-header", inputs: ["title", "showBigTitle", "showIcon", "icon", "index", "tabs"] }, { kind: "component", type: i8.PanelBodyComponent, selector: "panel-body", inputs: ["normalBottomPadding"] }, { kind: "component", type: i9.PanelFooterComponent, selector: "panel-footer" }, { kind: "component", type: i10.SpiderlyPanelComponent, selector: "spiderly-panel", inputs: ["isFirstMultiplePanel", "isMiddleMultiplePanel", "isLastMultiplePanel", "toggleable", "collapsed", "crudMenu", "showCrudMenu", "showRemoveIcon", "index", "showPanelHeader"], outputs: ["onMenuIconClick", "onRemoveIconClick"] }, { kind: "component", type: SpiderlyButtonComponent, selector: "spiderly-button" }, { kind: "component", type: SpiderlyReturnButtonComponent, selector: "return-button", inputs: ["navigateUrl"] }] }); }
|
|
135
|
+
}
|
|
136
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: RoleBaseDetailsComponent, decorators: [{
|
|
137
|
+
type: Component,
|
|
138
|
+
args: [{ selector: 'role-base-details', standalone: true, imports: [
|
|
139
|
+
CommonModule,
|
|
140
|
+
FormsModule,
|
|
141
|
+
ReactiveFormsModule,
|
|
142
|
+
PrimengModule,
|
|
143
|
+
// SpiderlyControlsModule,
|
|
144
|
+
TranslocoDirective,
|
|
145
|
+
CardSkeletonComponent,
|
|
146
|
+
SpiderlyTextboxComponent,
|
|
147
|
+
SpiderlyTextareaComponent,
|
|
148
|
+
SpiderlyMultiAutocompleteComponent,
|
|
149
|
+
SpiderlyMultiSelectComponent,
|
|
150
|
+
SpiderlyPanelsModule,
|
|
151
|
+
SpiderlyButtonComponent,
|
|
152
|
+
SpiderlyReturnButtonComponent
|
|
153
|
+
], template: "<ng-container *transloco=\"let t\">\r\n <spiderly-panel>\r\n <panel-header></panel-header>\r\n\r\n <panel-body>\r\n <form *ngIf=\"loading === false\" class=\"grid\"> <!-- FT: Don't put @deffer it's not working as expected -->\r\n <div class=\"col-12\">\r\n <spiderly-textbox [control]=\"control('name', roleFormGroup)\"></spiderly-textbox>\r\n </div>\r\n <div class=\"col-12\">\r\n <spiderly-textarea [control]=\"control('description', roleFormGroup)\"></spiderly-textarea>\r\n </div>\r\n <div class=\"col-12\">\r\n <spiderly-multiautocomplete [control]=\"selectedUsersForRole\" [options]=\"usersForRoleOptions\" (onTextInput)=\"searchUsersForRole($event)\" [label]=\"t('Users')\"></spiderly-multiautocomplete>\r\n </div>\r\n <div class=\"col-12\">\r\n <spiderly-multiselect [control]=\"selectedPermissionsForRole\" [options]=\"permissionsForRoleOptions\" [label]=\"t('Permissions')\"></spiderly-multiselect>\r\n </div>\r\n </form>\r\n\r\n <card-skeleton *ngIf=\"loading === true\" [height]=\"502\"></card-skeleton>\r\n\r\n </panel-body>\r\n\r\n <panel-footer>\r\n <spiderly-button [disabled]=\"!isAuthorizedForSave\" (onClick)=\"save()\" [label]=\"t('Save')\" icon=\"pi pi-save\"></spiderly-button>\r\n @for (button of additionalButtons; track button.label) {\r\n <spiderly-button (onClick)=\"button.onClick()\" [disabled]=\"button.disabled\" [label]=\"button.label\" [icon]=\"button.icon\"></spiderly-button>\r\n }\r\n <return-button></return-button>\r\n </panel-footer>\r\n </spiderly-panel>\r\n</ng-container>" }]
|
|
154
|
+
}], ctorParameters: () => [{ type: i1.ApiSecurityService }, { type: i2.ActivatedRoute }, { type: i3.BaseFormService }, { type: i4.AuthBaseService }], propDecorators: { onSave: [{
|
|
155
|
+
type: Output
|
|
156
|
+
}], onRoleFormGroupInitFinish: [{
|
|
157
|
+
type: Output
|
|
158
|
+
}], getCrudMenuForOrderedData: [{
|
|
159
|
+
type: Input
|
|
160
|
+
}], formGroup: [{
|
|
161
|
+
type: Input
|
|
162
|
+
}], roleFormGroup: [{
|
|
163
|
+
type: Input
|
|
164
|
+
}], additionalButtons: [{
|
|
165
|
+
type: Input
|
|
166
|
+
}], authorizedForSaveObservable: [{
|
|
167
|
+
type: Input
|
|
168
|
+
}], onIsAuthorizedForSaveChange: [{
|
|
169
|
+
type: Output
|
|
170
|
+
}] } });
|
|
171
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9sZS1iYXNlLWRldGFpbHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BpZGVybHkvc3JjL2xpYi9jb21wb25lbnRzL2Jhc2UtZGV0YWlscy9yb2xlLWJhc2UtZGV0YWlscy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zcGlkZXJseS9zcmMvbGliL2NvbXBvbmVudHMvYmFzZS1kZXRhaWxzL3JvbGUtYmFzZS1kZXRhaWxzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUV4RCxPQUFPLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQWMsRUFBRSxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUVsRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFN0QsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDakYsT0FBTyxFQUFxQixtQkFBbUIsRUFBcUIsTUFBTSxnREFBZ0QsQ0FBQztBQUczSCxPQUFPLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRXRFLE9BQU8sRUFBRSxVQUFVLEVBQUUscUNBQXFDLEVBQUUsaUNBQWlDLEVBQUUsTUFBTSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFLL0ksT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sNkNBQTZDLENB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QUFJLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRUQsV0FBVztRQUNQLElBQUksSUFBSSxDQUFDLGdDQUFnQyxFQUFFO1lBQ3ZDLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUN2RDtJQUNMLENBQUM7K0dBL0lRLHdCQUF3QjttR0FBeEIsd0JBQXdCLGdjQ25EckMsb3pEQWdDZSwyQ0RHUCxZQUFZLGtJQUNaLFdBQVcsdWRBQ1gsbUJBQW1CLDhCQUNuQixhQUFhO2dCQUNiLDBCQUEwQjtnQkFDMUIsa0JBQWtCLGdNQUNsQixxQkFBcUIsOEVBQ3JCLHdCQUF3QiwrSEFDeEIseUJBQXlCLDhEQUN6QixrQ0FBa0MsdUVBQ2xDLDRCQUE0QixnRUFDNUIsb0JBQW9CLG1yQkFDcEIsdUJBQXVCLDREQUN2Qiw2QkFBNkI7OzRGQUd4Qix3QkFBd0I7a0JBckJwQyxTQUFTOytCQUNJLG1CQUFtQixjQUVqQixJQUFJLFdBQ1A7d0JBQ0wsWUFBWTt3QkFDWixXQUFXO3dCQUNYLG1CQUFtQjt3QkFDbkIsYUFBYTt3QkFDYiwwQkFBMEI7d0JBQzFCLGtCQUFrQjt3QkFDbEIscUJBQXFCO3dCQUNyQix3QkFBd0I7d0JBQ3hCLHlCQUF5Qjt3QkFDekIsa0NBQWtDO3dCQUNsQyw0QkFBNEI7d0JBQzVCLG9CQUFvQjt3QkFDcEIsdUJBQXVCO3dCQUN2Qiw2QkFBNkI7cUJBQ2hDO2dMQUdTLE1BQU07c0JBQWYsTUFBTTtnQkFDRyx5QkFBeUI7c0JBQWxDLE1BQU07Z0JBQ0UseUJBQXlCO3NCQUFqQyxLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBR0csMkJBQTJCO3NCQUFuQyxLQUFLO2dCQUVJLDJCQUEyQjtzQkFBcEMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBUcmFuc2xvY29EaXJlY3RpdmUgfSBmcm9tICdAanN2ZXJzZS90cmFuc2xvY28nO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIGZvcmtKb2luLCBtYXAsIE9ic2VydmFibGUsIG9mLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgTWVudUl0ZW0gfSBmcm9tICdwcmltZW5nL2FwaSc7XHJcbmltcG9ydCB7IFByaW1lbmdNb2R1bGUgfSBmcm9tICcuLi8uLi9tb2R1bGVzL3ByaW1lbmcubW9kdWxlJztcclxuaW1wb3J0IHsgU3BpZGVybHlDb250cm9sc01vZHVsZSB9IGZyb20gJy4uLy4uL2NvbnRyb2xzL3NwaWRlcmx5LWNvbnRyb2xzLm1vZHVsZSc7XHJcbmltcG9ydCB7IENhcmRTa2VsZXRvbkNvbXBvbmVudCB9IGZyb20gJy4uL2NhcmQtc2tlbGV0b24vY2FyZC1za2VsZXRvbi5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBTcGlkZXJseUZvcm1BcnJheSwgU3BpZGVybHlGb3JtQ29udHJvbCwgU3BpZGVybHlGb3JtR3JvdXAgfSBmcm9tICcuLi9zcGlkZXJseS1mb3JtLWNvbnRyb2wvc3BpZGVybHktZm9ybS1jb250cm9sJztcclxuaW1wb3J0IHsgQmFzZUVudGl0eSB9IGZyb20gJy4uLy4uL2VudGl0aWVzL2Jhc2UtZW50aXR5JztcclxuaW1wb3J0IHsgTGFzdE1lbnVJY29uSW5kZXhDbGlja2VkIH0gZnJvbSAnLi4vLi4vZW50aXRpZXMvbGFzdC1tZW51LWljb24taW5kZXgtY2xpY2tlZCc7XHJcbmltcG9ydCB7IFJvbGUsIFJvbGVTYXZlQm9keSB9IGZyb20gJy4uLy4uL2VudGl0aWVzL3NlY3VyaXR5LWVudGl0aWVzJztcclxuaW1wb3J0IHsgU3BpZGVybHlCdXR0b24gfSBmcm9tICcuLi8uLi9lbnRpdGllcy9zcGlkZXJseS1idXR0b24nO1xyXG5pbXBvcnQgeyBnZXRDb250cm9sLCBnZXRQcmltZW5nQXV0b2NvbXBsZXRlTmFtZWJvb2tPcHRpb25zLCBnZXRQcmltZW5nRHJvcGRvd25OYW1lYm9va09wdGlvbnMsIG5hbWVvZiB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2hlbHBlci1mdW5jdGlvbnMnO1xyXG5pbXBvcnQgeyBCYXNlRm9ybVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9iYXNlLWZvcm0uc2VydmljZSc7XHJcbmltcG9ydCB7IEFwaVNlY3VyaXR5U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FwaS5zZXJ2aWNlLnNlY3VyaXR5JztcclxuaW1wb3J0IHsgUHJpbWVuZ09wdGlvbiB9IGZyb20gJy4uLy4uL2VudGl0aWVzL3ByaW1lbmctb3B0aW9uJztcclxuaW1wb3J0IHsgQXV0b0NvbXBsZXRlQ29tcGxldGVFdmVudCB9IGZyb20gJ3ByaW1lbmcvYXV0b2NvbXBsZXRlJztcclxuaW1wb3J0IHsgSXNBdXRob3JpemVkRm9yU2F2ZUV2ZW50IH0gZnJvbSAnLi4vLi4vZW50aXRpZXMvaXMtYXV0aG9yaXplZC1mb3Itc2F2ZS1ldmVudCc7XHJcbmltcG9ydCB7IEF1dGhCYXNlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2F1dGgtYmFzZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU3BpZGVybHlUZXh0Ym94Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29udHJvbHMvc3BpZGVybHktdGV4dGJveC9zcGlkZXJseS10ZXh0Ym94LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFNwaWRlcmx5VGV4dGFyZWFDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb250cm9scy9zcGlkZXJseS10ZXh0YXJlYS9zcGlkZXJseS10ZXh0YXJlYS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBTcGlkZXJseU11bHRpQXV0b2NvbXBsZXRlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29udHJvbHMvc3BpZGVybHktbXVsdGlhdXRvY29tcGxldGUvc3BpZGVybHktbXVsdGlhdXRvY29tcGxldGUuY29tcG9uZW50JztcclxuaW1wb3J0IHsgU3BpZGVybHlNdWx0aVNlbGVjdENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbnRyb2xzL3NwaWRlcmx5LW11bHRpc2VsZWN0L3NwaWRlcmx5LW11bHRpc2VsZWN0LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFNwaWRlcmx5UGFuZWxzTW9kdWxlIH0gZnJvbSAnLi4vc3BpZGVybHktcGFuZWxzL3NwaWRlcmx5LXBhbmVscy5tb2R1bGUnO1xyXG5pbXBvcnQgeyBTcGlkZXJseUJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4uL3NwaWRlcmx5LWJ1dHRvbnMvc3BpZGVybHktYnV0dG9uL3NwaWRlcmx5LWJ1dHRvbi5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBTcGlkZXJseVJldHVybkJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4uL3NwaWRlcmx5LWJ1dHRvbnMvcmV0dXJuLWJ1dHRvbi9yZXR1cm4tYnV0dG9uLmNvbXBvbmVudCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAncm9sZS1iYXNlLWRldGFpbHMnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICdyb2xlLWJhc2UtZGV0YWlscy5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gICAgaW1wb3J0czogW1xyXG4gICAgICAgIENvbW1vbk1vZHVsZSwgXHJcbiAgICAgICAgRm9ybXNNb2R1bGUsXHJcbiAgICAgICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcclxuICAgICAgICBQcmltZW5nTW9kdWxlLFxyXG4gICAgICAgIC8vIFNwaWRlcmx5Q29udHJvbHNNb2R1bGUsXHJcbiAgICAgICAgVHJhbnNsb2NvRGlyZWN0aXZlLFxyXG4gICAgICAgIENhcmRTa2VsZXRvbkNvbXBvbmVudCxcclxuICAgICAgICBTcGlkZXJseVRleHRib3hDb21wb25lbnQsXHJcbiAgICAgICAgU3BpZGVybHlUZXh0YXJlYUNvbXBvbmVudCxcclxuICAgICAgICBTcGlkZXJseU11bHRpQXV0b2NvbXBsZXRlQ29tcG9uZW50LFxyXG4gICAgICAgIFNwaWRlcmx5TXVsdGlTZWxlY3RDb21wb25lbnQsXHJcbiAgICAgICAgU3BpZGVybHlQYW5lbHNNb2R1bGUsXHJcbiAgICAgICAgU3BpZGVybHlCdXR0b25Db21wb25lbnQsXHJcbiAgICAgICAgU3BpZGVybHlSZXR1cm5CdXR0b25Db21wb25lbnRcclxuICAgIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIFJvbGVCYXNlRGV0YWlsc0NvbXBvbmVudCB7XHJcbiAgICBAT3V0cHV0KCkgb25TYXZlID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG4gICAgQE91dHB1dCgpIG9uUm9sZUZvcm1Hcm91cEluaXRGaW5pc2ggPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcbiAgICBASW5wdXQoKSBnZXRDcnVkTWVudUZvck9yZGVyZWREYXRhOiAoZm9ybUFycmF5OiBTcGlkZXJseUZvcm1BcnJheSwgbW9kZWxDb25zdHJ1Y3RvcjogQmFzZUVudGl0eSwgbGFzdE1lbnVJY29uSW5kZXhDbGlja2VkOiBMYXN0TWVudUljb25JbmRleENsaWNrZWQsIGFkanVzdEZvcm1BcnJheU1hbnVhbGx5OiBib29sZWFuKSA9PiBNZW51SXRlbVtdO1xyXG4gICAgQElucHV0KCkgZm9ybUdyb3VwOiBTcGlkZXJseUZvcm1Hcm91cDtcclxuICAgIEBJbnB1dCgpIHJvbGVGb3JtR3JvdXA6IFNwaWRlcmx5Rm9ybUdyb3VwPFJvbGU+O1xyXG4gICAgQElucHV0KCkgYWRkaXRpb25hbEJ1dHRvbnM6IFNwaWRlcmx5QnV0dG9uW10gPSBbXTtcclxuXHJcbiAgICBhdXRob3JpemF0aW9uRm9yU2F2ZVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG4gICAgQElucHV0KCkgYXV0aG9yaXplZEZvclNhdmVPYnNlcnZhYmxlOiAoKSA9PiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gKCkgPT4gb2YoZmFsc2UpO1xyXG4gICAgaXNBdXRob3JpemVkRm9yU2F2ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgQE91dHB1dCgpIG9uSXNBdXRob3JpemVkRm9yU2F2ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8SXNBdXRob3JpemVkRm9yU2F2ZUV2ZW50PigpOyBcclxuICAgIFxyXG4gICAgbW9kZWxJZDogbnVtYmVyO1xyXG4gICAgbG9hZGluZzogYm9vbGVhbiA9IHRydWU7XHJcbiAgICByb2xlU2F2ZUJvZHlOYW1lOiBzdHJpbmcgPSBuYW1lb2Y8Um9sZVNhdmVCb2R5Pigncm9sZURUTycpO1xyXG5cclxuICAgIHVzZXJzRm9yUm9sZU9wdGlvbnM6IFByaW1lbmdPcHRpb25bXTtcclxuICAgIHBlcm1pc3Npb25zRm9yUm9sZU9wdGlvbnM6IFByaW1lbmdPcHRpb25bXTtcclxuXHJcbiAgICBzZWxlY3RlZFVzZXJzRm9yUm9sZSA9IG5ldyBTcGlkZXJseUZvcm1Db250cm9sPFByaW1lbmdPcHRpb25bXT4obnVsbCwge3VwZGF0ZU9uOiAnY2hhbmdlJ30pO1xyXG4gICAgc2VsZWN0ZWRQZXJtaXNzaW9uc0ZvclJvbGUgPSBuZXcgU3BpZGVybHlGb3JtQ29udHJvbDxudW1iZXJbXT4obnVsbCwge3VwZGF0ZU9uOiAnY2hhbmdlJ30pO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgYXBpU2VydmljZTogQXBpU2VjdXJpdHlTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgICAgIHByaXZhdGUgYmFzZUZvcm1TZXJ2aWNlOiBCYXNlRm9ybVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aEJhc2VTZXJ2aWNlXHJcbiAgICApIHt9XHJcblxyXG4gICAgbmdPbkluaXQoKXtcclxuICAgICAgICB0aGlzLmZvcm1Hcm91cC5pbml0U2F2ZUJvZHkgPSAoKSA9PiB7IFxyXG4gICAgICAgICAgICBsZXQgc2F2ZUJvZHkgPSBuZXcgUm9sZVNhdmVCb2R5KCk7XHJcbiAgICAgICAgICAgIHNhdmVCb2R5LnJvbGVEVE8gPSB0aGlzLnJvbGVGb3JtR3JvdXAuZ2V0UmF3VmFsdWUoKTtcclxuXHJcbiAgICAgICAgICAgIHNhdmVCb2R5LnNlbGVjdGVkUGVybWlzc2lvbnNJZHMgPSB0aGlzLnNlbGVjdGVkUGVybWlzc2lvbnNGb3JSb2xlLmdldFJhd1ZhbHVlKCk7XHJcbiAgICAgICAgICAgIHNhdmVCb2R5LnNlbGVjdGVkVXNlcnNJZHMgPSB0aGlzLnNlbGVjdGVkVXNlcnNGb3JSb2xlLmdldFJhd1ZhbHVlKCk/Lm1hcChuID0+IG4udmFsdWUpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHNhdmVCb2R5O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuc2F2ZU9ic2VydmFibGVNZXRob2QgPSB0aGlzLmFwaVNlcnZpY2Uuc2F2ZVJvbGU7XHJcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAubWFpbkRUT05hbWUgPSB0aGlzLnJvbGVTYXZlQm9keU5hbWU7XHJcblxyXG4gICAgICAgIHRoaXMucm91dGUucGFyYW1zLnN1YnNjcmliZShhc3luYyAocGFyYW1zKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubW9kZWxJZCA9IHBhcmFtc1snaWQnXTtcclxuXHJcbiAgICAgICAgICAgIGdldFByaW1lbmdEcm9wZG93bk5hbWVib29rT3B0aW9ucyh0aGlzLmFwaVNlcnZpY2UuZ2V0UGVybWlzc2lvbnNEcm9wZG93bkxpc3RGb3JSb2xlKS5zdWJzY3JpYmUocG8gPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9uc0ZvclJvbGVPcHRpb25zID0gcG87XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgaWYodGhpcy5tb2RlbElkID4gMCl7XHJcbiAgICAgICAgICAgICAgICBmb3JrSm9pbih7XHJcbiAgICAgICAgICAgICAgICAgICAgbWFpblVJRm9ybURUTzogdGhpcy5hcGlTZXJ2aWNlLmdldFJvbGVNYWluVUlGb3JtRFRPKHRoaXMubW9kZWxJZClcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCh7IG1haW5VSUZvcm1EVE8gfSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5pdFJvbGVGb3JtR3JvdXAobmV3IFJvbGUobWFpblVJRm9ybURUTy5yb2xlRFRPKSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRQZXJtaXNzaW9uc0ZvclJvbGUuc2V0VmFsdWUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1haW5VSUZvcm1EVE8ucGVybWlzc2lvbnNOYW1lYm9va0RUT0xpc3QubWFwKG4gPT4geyByZXR1cm4gbi5pZCB9KVxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFVzZXJzRm9yUm9sZS5zZXRWYWx1ZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWFpblVJRm9ybURUTy51c2Vyc05hbWVib29rRFRPTGlzdC5tYXAobiA9PiAoeyBsYWJlbDogbi5kaXNwbGF5TmFtZSwgdmFsdWU6IG4uaWQgfSkpXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hdXRob3JpemF0aW9uRm9yU2F2ZVN1YnNjcmlwdGlvbiA9IHRoaXMuaGFuZGxlQXV0aG9yaXphdGlvbkZvclNhdmUoKS5zdWJzY3JpYmUoKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRSb2xlRm9ybUdyb3VwKG5ldyBSb2xlKHtpZDogMH0pKTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmF1dGhvcml6YXRpb25Gb3JTYXZlU3Vic2NyaXB0aW9uID0gdGhpcy5oYW5kbGVBdXRob3JpemF0aW9uRm9yU2F2ZSgpLnN1YnNjcmliZSgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBpbml0Um9sZUZvcm1Hcm91cChyb2xlOiBSb2xlKSB7XHJcbiAgICAgICAgdGhpcy5iYXNlRm9ybVNlcnZpY2UuYWRkRm9ybUdyb3VwPFJvbGU+KFxyXG4gICAgICAgICAgICB0aGlzLnJvbGVGb3JtR3JvdXAsIFxyXG4gICAgICAgICAgICB0aGlzLmZvcm1Hcm91cCwgXHJcbiAgICAgICAgICAgIHJvbGUsIFxyXG4gICAgICAgICAgICB0aGlzLnJvbGVTYXZlQm9keU5hbWUsXHJcbiAgICAgICAgICAgIFtdXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLnJvbGVGb3JtR3JvdXAubWFpbkRUT05hbWUgPSB0aGlzLnJvbGVTYXZlQm9keU5hbWU7XHJcbiAgICAgICAgdGhpcy5vblJvbGVGb3JtR3JvdXBJbml0RmluaXNoLm5leHQoKTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgaGFuZGxlQXV0aG9yaXphdGlvbkZvclNhdmUgPSAoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoW3RoaXMuYXV0aFNlcnZpY2UuY3VycmVudFVzZXJQZXJtaXNzaW9uQ29kZXMkLCB0aGlzLmF1dGhvcml6ZWRGb3JTYXZlT2JzZXJ2YWJsZSgpXSkucGlwZShcclxuICAgICAgICAgICAgbWFwKChbY3VycmVudFVzZXJQZXJtaXNzaW9uQ29kZXMsIGlzQXV0aG9yaXplZEZvclNhdmVdKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudFVzZXJQZXJtaXNzaW9uQ29kZXMgIT0gbnVsbCAmJiBpc0F1dGhvcml6ZWRGb3JTYXZlICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzQXV0aG9yaXplZEZvclNhdmUgPVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY3VycmVudFVzZXJQZXJtaXNzaW9uQ29kZXMuaW5jbHVkZXMoJ0luc2VydFJvbGUnKSAmJiB0aGlzLm1vZGVsSWQgPD0gMCkgfHwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjdXJyZW50VXNlclBlcm1pc3Npb25Db2Rlcy5pbmNsdWRlcygnVXBkYXRlUm9sZScpICYmIHRoaXMubW9kZWxJZCA+IDApIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzQXV0aG9yaXplZEZvclNhdmU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzQXV0aG9yaXplZEZvclNhdmUpIHsgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucm9sZUZvcm1Hcm91cC5jb250cm9scy5uYW1lLmVuYWJsZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJvbGVGb3JtR3JvdXAuY29udHJvbHMuZGVzY3JpcHRpb24uZW5hYmxlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRVc2Vyc0ZvclJvbGUuZW5hYmxlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRQZXJtaXNzaW9uc0ZvclJvbGUuZW5hYmxlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucm9sZUZvcm1Hcm91cC5jb250cm9scy5uYW1lLmRpc2FibGUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yb2xlRm9ybUdyb3VwLmNvbnRyb2xzLmRlc2NyaXB0aW9uLmRpc2FibGUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFVzZXJzRm9yUm9sZS5kaXNhYmxlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRQZXJtaXNzaW9uc0ZvclJvbGUuZGlzYWJsZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbklzQXV0aG9yaXplZEZvclNhdmVDaGFuZ2UubmV4dChuZXcgSXNBdXRob3JpemVkRm9yU2F2ZUV2ZW50KHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXNBdXRob3JpemVkRm9yU2F2ZTogdGhpcy5pc0F1dGhvcml6ZWRGb3JTYXZlLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFVzZXJQZXJtaXNzaW9uQ29kZXM6IGN1cnJlbnRVc2VyUGVybWlzc2lvbkNvZGVzXHJcbiAgICAgICAgICAgICAgICAgICAgfSkpOyBcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHNlYXJjaFVzZXJzRm9yUm9sZShldmVudDogQXV0b0NvbXBsZXRlQ29tcGxldGVFdmVudCkge1xyXG4gICAgICAgIGdldFByaW1lbmdBdXRvY29tcGxldGVOYW1lYm9va09wdGlvbnModGhpcy5hcGlTZXJ2aWNlLmdldFVzZXJzQXV0b2NvbXBsZXRlTGlzdEZvclJvbGUsIDUwLCBldmVudD8ucXVlcnkgPz8gJycpLnN1YnNjcmliZShwbyA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudXNlcnNGb3JSb2xlT3B0aW9ucyA9IHBvO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnRyb2woZm9ybUNvbnRyb2xOYW1lOiBzdHJpbmcsIGZvcm1Hcm91cDogU3BpZGVybHlGb3JtR3JvdXApe1xyXG4gICAgICAgIHJldHVybiBnZXRDb250cm9sKGZvcm1Db250cm9sTmFtZSwgZm9ybUdyb3VwKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRGb3JtQXJyYXlHcm91cHM8VD4oZm9ybUFycmF5OiBTcGlkZXJseUZvcm1BcnJheSk6IFNwaWRlcmx5Rm9ybUdyb3VwPFQ+W117XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYmFzZUZvcm1TZXJ2aWNlLmdldEZvcm1BcnJheUdyb3VwczxUPihmb3JtQXJyYXkpO1xyXG4gICAgfVxyXG5cclxuICAgIHNhdmUoKXtcclxuICAgICAgICB0aGlzLm9uU2F2ZS5uZXh0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkRlc3Ryb3koKXtcclxuICAgICAgICBpZiAodGhpcy5hdXRob3JpemF0aW9uRm9yU2F2ZVN1YnNjcmlwdGlvbikge1xyXG4gICAgICAgICAgICB0aGlzLmF1dGhvcml6YXRpb25Gb3JTYXZlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxufVxyXG4iLCI8bmctY29udGFpbmVyICp0cmFuc2xvY289XCJsZXQgdFwiPlxyXG4gICAgPHNwaWRlcmx5LXBhbmVsPlxyXG4gICAgICAgIDxwYW5lbC1oZWFkZXI+PC9wYW5lbC1oZWFkZXI+XHJcblxyXG4gICAgICAgIDxwYW5lbC1ib2R5PlxyXG4gICAgICAgICAgICA8Zm9ybSAqbmdJZj1cImxvYWRpbmcgPT09IGZhbHNlXCIgY2xhc3M9XCJncmlkXCI+IDwhLS0gRlQ6IERvbid0IHB1dCBAZGVmZmVyIGl0J3Mgbm90IHdvcmtpbmcgYXMgZXhwZWN0ZWQgLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwaWRlcmx5LXRleHRib3ggW2NvbnRyb2xdPVwiY29udHJvbCgnbmFtZScsIHJvbGVGb3JtR3JvdXApXCI+PC9zcGlkZXJseS10ZXh0Ym94PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwaWRlcmx5LXRleHRhcmVhIFtjb250cm9sXT1cImNvbnRyb2woJ2Rlc2NyaXB0aW9uJywgcm9sZUZvcm1Hcm91cClcIj48L3NwaWRlcmx5LXRleHRhcmVhPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwaWRlcmx5LW11bHRpYXV0b2NvbXBsZXRlIFtjb250cm9sXT1cInNlbGVjdGVkVXNlcnNGb3JSb2xlXCIgW29wdGlvbnNdPVwidXNlcnNGb3JSb2xlT3B0aW9uc1wiIChvblRleHRJbnB1dCk9XCJzZWFyY2hVc2Vyc0ZvclJvbGUoJGV2ZW50KVwiIFtsYWJlbF09XCJ0KCdVc2VycycpXCI+PC9zcGlkZXJseS1tdWx0aWF1dG9jb21wbGV0ZT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGlkZXJseS1tdWx0aXNlbGVjdCBbY29udHJvbF09XCJzZWxlY3RlZFBlcm1pc3Npb25zRm9yUm9sZVwiIFtvcHRpb25zXT1cInBlcm1pc3Npb25zRm9yUm9sZU9wdGlvbnNcIiBbbGFiZWxdPVwidCgnUGVybWlzc2lvbnMnKVwiPjwvc3BpZGVybHktbXVsdGlzZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9mb3JtPlxyXG5cclxuICAgICAgICAgICAgPGNhcmQtc2tlbGV0b24gKm5nSWY9XCJsb2FkaW5nID09PSB0cnVlXCIgW2hlaWdodF09XCI1MDJcIj48L2NhcmQtc2tlbGV0b24+XHJcblxyXG4gICAgICAgIDwvcGFuZWwtYm9keT5cclxuXHJcbiAgICAgICAgPHBhbmVsLWZvb3Rlcj5cclxuICAgICAgICAgICAgPHNwaWRlcmx5LWJ1dHRvbiBbZGlzYWJsZWRdPVwiIWlzQXV0aG9yaXplZEZvclNhdmVcIiAob25DbGljayk9XCJzYXZlKClcIiBbbGFiZWxdPVwidCgnU2F2ZScpXCIgaWNvbj1cInBpIHBpLXNhdmVcIj48L3NwaWRlcmx5LWJ1dHRvbj5cclxuICAgICAgICAgICAgQGZvciAoYnV0dG9uIG9mIGFkZGl0aW9uYWxCdXR0b25zOyB0cmFjayBidXR0b24ubGFiZWwpIHtcclxuICAgICAgICAgICAgICAgIDxzcGlkZXJseS1idXR0b24gKG9uQ2xpY2spPVwiYnV0dG9uLm9uQ2xpY2soKVwiIFtkaXNhYmxlZF09XCJidXR0b24uZGlzYWJsZWRcIiBbbGFiZWxdPVwiYnV0dG9uLmxhYmVsXCIgW2ljb25dPVwiYnV0dG9uLmljb25cIj48L3NwaWRlcmx5LWJ1dHRvbj5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA8cmV0dXJuLWJ1dHRvbj48L3JldHVybi1idXR0b24+XHJcbiAgICAgICAgPC9wYW5lbC1mb290ZXI+XHJcbiAgICA8L3NwaWRlcmx5LXBhbmVsPlxyXG48L25nLWNvbnRhaW5lcj4iXX0=
|
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
import { Component, } from '@angular/core';
|
|
2
|
+
import { SpiderlyFormArray, SpiderlyFormControl, SpiderlyFormGroup } from '../spiderly-form-control/spiderly-form-control';
|
|
3
|
+
import { getControl, getParentUrl } from '../../services/helper-functions';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "@angular/common/http";
|
|
6
|
+
import * as i2 from "../../services/spiderly-message.service";
|
|
7
|
+
import * as i3 from "@angular/router";
|
|
8
|
+
import * as i4 from "@jsverse/transloco";
|
|
9
|
+
import * as i5 from "./../../services/base-form.service";
|
|
10
|
+
export class BaseFormCopy {
|
|
11
|
+
constructor(differs, http, messageService, changeDetectorRef, router, route, translocoService, baseFormService) {
|
|
12
|
+
this.differs = differs;
|
|
13
|
+
this.http = http;
|
|
14
|
+
this.messageService = messageService;
|
|
15
|
+
this.changeDetectorRef = changeDetectorRef;
|
|
16
|
+
this.router = router;
|
|
17
|
+
this.route = route;
|
|
18
|
+
this.translocoService = translocoService;
|
|
19
|
+
this.baseFormService = baseFormService;
|
|
20
|
+
this.formGroup = new SpiderlyFormGroup({});
|
|
21
|
+
this.successfulSaveToastDescription = this.translocoService.translate('SuccessfulSaveToastDescription');
|
|
22
|
+
this.loading = true;
|
|
23
|
+
//#region Model
|
|
24
|
+
this.initFormGroup = (formGroup, parentFormGroup, modelConstructor, propertyNameInSaveBody, updateOnChangeControls) => {
|
|
25
|
+
return this.baseFormService.addFormGroup(formGroup, parentFormGroup, modelConstructor, propertyNameInSaveBody, updateOnChangeControls);
|
|
26
|
+
};
|
|
27
|
+
this.createFormGroup = (formGroup, modelConstructor, updateOnChangeControls) => {
|
|
28
|
+
return this.baseFormService.initFormGroup(formGroup, modelConstructor, updateOnChangeControls);
|
|
29
|
+
};
|
|
30
|
+
this.control = (formControlName, formGroup) => {
|
|
31
|
+
return getControl(formControlName, formGroup);
|
|
32
|
+
};
|
|
33
|
+
this.onSave = (reroute = true) => {
|
|
34
|
+
this.saveBody = this.formGroup.initSaveBody();
|
|
35
|
+
this.onBeforeSave(this.saveBody);
|
|
36
|
+
this.saveBody = this.saveBody ?? this.formGroup.getRawValue();
|
|
37
|
+
let isValid = this.areFormGroupsFromParentFormGroupValid();
|
|
38
|
+
let isFormArrayValid = this.areFormArraysValid();
|
|
39
|
+
if (isValid && isFormArrayValid) {
|
|
40
|
+
this.formGroup.saveObservableMethod(this.saveBody).subscribe(res => {
|
|
41
|
+
this.messageService.successMessage(this.successfulSaveToastDescription);
|
|
42
|
+
Object.keys(res).forEach((key) => {
|
|
43
|
+
const formControl = this.formGroup.get(key);
|
|
44
|
+
if (formControl) {
|
|
45
|
+
if (formControl instanceof SpiderlyFormArray) {
|
|
46
|
+
const formArray = formControl;
|
|
47
|
+
if (res[key].length !== 0) {
|
|
48
|
+
formArray.clear();
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
// FT: This is okay because when we have M2M association with additional fields, we will not give back the list because we are not checking version on the server.
|
|
52
|
+
// console.error(`You returned empty array for control: ${formArray.translationKey}.`);
|
|
53
|
+
}
|
|
54
|
+
res[key].forEach((model) => {
|
|
55
|
+
if (typeof model === 'object' && model !== null) {
|
|
56
|
+
Object.assign(formArray.modelConstructor, model);
|
|
57
|
+
let helperFormGroup = new SpiderlyFormGroup({});
|
|
58
|
+
this.baseFormService.initFormGroup(helperFormGroup, formArray.modelConstructor);
|
|
59
|
+
formArray.push(helperFormGroup);
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
console.error('Can not add primitive form control inside form array.');
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
formControl.patchValue(res[key]);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
// FT: It's okay to do this.
|
|
72
|
+
// console.error('You returned something that is not in the save DTO.');
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
if (reroute) {
|
|
76
|
+
const savedObjectId = res[this.formGroup.mainDTOName]?.id;
|
|
77
|
+
this.rerouteToSavedObject(savedObjectId); // You always need to have id, because of id == 0 and version change
|
|
78
|
+
}
|
|
79
|
+
this.onAfterSave();
|
|
80
|
+
});
|
|
81
|
+
this.onAfterSaveRequest();
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
this.baseFormService.showInvalidFieldsMessage();
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
this.rerouteToSavedObject = (rerouteId) => {
|
|
88
|
+
if (rerouteId == null) {
|
|
89
|
+
// console.error('You do not have rerouteId in your DTO.')
|
|
90
|
+
const currentUrl = this.router.url;
|
|
91
|
+
const parentUrl = getParentUrl(currentUrl);
|
|
92
|
+
this.router.navigateByUrl(parentUrl);
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
const segments = this.router.url.split('/');
|
|
96
|
+
segments[segments.length - 1] = rerouteId.toString();
|
|
97
|
+
const newUrl = segments.join('/');
|
|
98
|
+
this.router.navigateByUrl(newUrl);
|
|
99
|
+
};
|
|
100
|
+
this.onBeforeSave = (saveBody) => { };
|
|
101
|
+
this.onAfterSave = () => { };
|
|
102
|
+
this.onAfterSaveRequest = () => { };
|
|
103
|
+
// FT: Sending LastMenuIconIndexClicked class because of reference type
|
|
104
|
+
this.getCrudMenuForOrderedData = (formArray, modelConstructor, lastMenuIconIndexClicked, adjustFormArrayManually = false) => {
|
|
105
|
+
let crudMenuForOrderedData = [
|
|
106
|
+
{ label: this.translocoService.translate('Remove'), icon: 'pi pi-minus', command: () => {
|
|
107
|
+
this.onBeforeRemove(formArray, modelConstructor, lastMenuIconIndexClicked.index);
|
|
108
|
+
if (adjustFormArrayManually === false) {
|
|
109
|
+
this.removeFormControlFromTheFormArray(formArray, lastMenuIconIndexClicked.index);
|
|
110
|
+
}
|
|
111
|
+
} },
|
|
112
|
+
{ label: this.translocoService.translate('AddAbove'), icon: 'pi pi-arrow-up', command: () => {
|
|
113
|
+
this.onBeforeAddAbove(formArray, modelConstructor, lastMenuIconIndexClicked.index);
|
|
114
|
+
if (adjustFormArrayManually === false) {
|
|
115
|
+
this.baseFormService.addNewFormGroupToFormArray(formArray, modelConstructor, lastMenuIconIndexClicked.index);
|
|
116
|
+
}
|
|
117
|
+
} },
|
|
118
|
+
{ label: this.translocoService.translate('AddBelow'), icon: 'pi pi-arrow-down', command: () => {
|
|
119
|
+
this.onBeforeAddBelow(formArray, modelConstructor, lastMenuIconIndexClicked.index);
|
|
120
|
+
if (adjustFormArrayManually === false) {
|
|
121
|
+
this.baseFormService.addNewFormGroupToFormArray(formArray, modelConstructor, lastMenuIconIndexClicked.index + 1);
|
|
122
|
+
}
|
|
123
|
+
} },
|
|
124
|
+
];
|
|
125
|
+
return crudMenuForOrderedData;
|
|
126
|
+
};
|
|
127
|
+
this.onBeforeRemove = (formArray, modelConstructor, lastMenuIconIndexClicked) => { };
|
|
128
|
+
this.onBeforeAddAbove = (formArray, modelConstructor, lastMenuIconIndexClicked) => { };
|
|
129
|
+
this.onBeforeAddBelow = (formArray, modelConstructor, lastMenuIconIndexClicked) => { };
|
|
130
|
+
}
|
|
131
|
+
ngOnInit() {
|
|
132
|
+
}
|
|
133
|
+
areFormGroupsFromParentFormGroupValid() {
|
|
134
|
+
if (this.formGroup.controls == null)
|
|
135
|
+
return true;
|
|
136
|
+
let invalid = false;
|
|
137
|
+
Object.keys(this.formGroup.controls).forEach(key => {
|
|
138
|
+
const formGroupOrControl = this.formGroup.controls[key];
|
|
139
|
+
if (formGroupOrControl instanceof SpiderlyFormGroup) {
|
|
140
|
+
Object.keys(formGroupOrControl.controls).forEach(key => {
|
|
141
|
+
const formControl = formGroupOrControl.controls[key]; // this.formArray.markAsDirty(); // FT: For some reason this doesnt work
|
|
142
|
+
if (formGroupOrControl.controlNamesFromHtml.includes(formControl.label) && formControl.invalid) {
|
|
143
|
+
formControl.markAsDirty();
|
|
144
|
+
invalid = true;
|
|
145
|
+
}
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
else if (formGroupOrControl instanceof SpiderlyFormControl) {
|
|
149
|
+
if (formGroupOrControl.invalid) {
|
|
150
|
+
formGroupOrControl.markAsDirty();
|
|
151
|
+
invalid = true;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
});
|
|
155
|
+
if (invalid) {
|
|
156
|
+
return false;
|
|
157
|
+
}
|
|
158
|
+
return true;
|
|
159
|
+
}
|
|
160
|
+
//#endregion
|
|
161
|
+
//#region Model List
|
|
162
|
+
getFormArrayControlByIndex(formControlName, formArray, index, filter) {
|
|
163
|
+
if (formArray.controlNamesFromHtml.findIndex(x => x === formControlName) === -1)
|
|
164
|
+
formArray.controlNamesFromHtml.push(formControlName);
|
|
165
|
+
let filteredFormGroups;
|
|
166
|
+
if (filter) {
|
|
167
|
+
filteredFormGroups = filter(formArray.controls);
|
|
168
|
+
}
|
|
169
|
+
else {
|
|
170
|
+
return formArray.controls[index].controls[formControlName];
|
|
171
|
+
}
|
|
172
|
+
return filteredFormGroups[index]?.controls[formControlName]; // FT: Don't change this. It's always possible that change detection occurs before something.
|
|
173
|
+
}
|
|
174
|
+
getFormArrayControls(formControlName, formArray, filter) {
|
|
175
|
+
if (formArray.controlNamesFromHtml.findIndex(x => x === formControlName) === -1)
|
|
176
|
+
formArray.controlNamesFromHtml.push(formControlName);
|
|
177
|
+
let filteredFormGroups;
|
|
178
|
+
if (filter) {
|
|
179
|
+
filteredFormGroups = filter(formArray.controls);
|
|
180
|
+
}
|
|
181
|
+
else {
|
|
182
|
+
return formArray.controls.map(x => x.controls[formControlName]);
|
|
183
|
+
}
|
|
184
|
+
return filteredFormGroups.map(x => x.controls[formControlName]);
|
|
185
|
+
}
|
|
186
|
+
getFormArrayGroups(formArray) {
|
|
187
|
+
return this.baseFormService.getFormArrayGroups(formArray);
|
|
188
|
+
}
|
|
189
|
+
addNewFormGroupToFormArray(formArray, modelConstructor, index) {
|
|
190
|
+
return this.baseFormService.addNewFormGroupToFormArray(formArray, modelConstructor, index);
|
|
191
|
+
}
|
|
192
|
+
initFormArray(parentFormGroup, modelList, modelConstructor, formArraySaveBodyName, formArrayTranslationKey, required = false) {
|
|
193
|
+
return this.baseFormService.initFormArray(parentFormGroup, modelList, modelConstructor, formArraySaveBodyName, formArrayTranslationKey, required);
|
|
194
|
+
}
|
|
195
|
+
removeFormControlFromTheFormArray(formArray, index) {
|
|
196
|
+
if (index == null)
|
|
197
|
+
throw new Error('Can not pass null index.');
|
|
198
|
+
formArray.removeAt(index);
|
|
199
|
+
}
|
|
200
|
+
removeFormControlsFromTheFormArray(formArray, indexes) {
|
|
201
|
+
// Sort indexes in descending order to avoid index shifts when removing controls
|
|
202
|
+
const sortedIndexes = indexes.sort((a, b) => b - a);
|
|
203
|
+
sortedIndexes.forEach(index => {
|
|
204
|
+
if (index >= 0 && index < formArray.length) {
|
|
205
|
+
formArray.removeAt(index);
|
|
206
|
+
}
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
areFormArraysValid() {
|
|
210
|
+
if (this.formGroup.controls == null)
|
|
211
|
+
return true;
|
|
212
|
+
let invalid = false;
|
|
213
|
+
Object.keys(this.formGroup.controls).forEach(key => {
|
|
214
|
+
const formArray = this.formGroup.controls[key];
|
|
215
|
+
if (formArray instanceof SpiderlyFormArray) {
|
|
216
|
+
formArray.controls.forEach(formGroup => {
|
|
217
|
+
Object.keys(formGroup.controls).forEach(key => {
|
|
218
|
+
const formControl = formGroup.controls[key]; // this.formArray.markAsDirty(); // FT: For some reason this doesn't work
|
|
219
|
+
if ((formGroup.controlNamesFromHtml.includes(formControl.label) || formArray.controlNamesFromHtml.includes(formControl.label)) &&
|
|
220
|
+
formControl.invalid) {
|
|
221
|
+
formControl.markAsDirty();
|
|
222
|
+
invalid = true;
|
|
223
|
+
}
|
|
224
|
+
});
|
|
225
|
+
});
|
|
226
|
+
if (formArray.required == true && formArray.length == 0) {
|
|
227
|
+
invalid = true;
|
|
228
|
+
this.messageService.warningMessage(this.translocoService.translate('ListCanNotBeEmpty'));
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
});
|
|
232
|
+
if (invalid) {
|
|
233
|
+
return false;
|
|
234
|
+
}
|
|
235
|
+
return true;
|
|
236
|
+
}
|
|
237
|
+
onBeforeSaveList() { }
|
|
238
|
+
onAfterSaveList() { }
|
|
239
|
+
onAfterSaveListRequest() { }
|
|
240
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: BaseFormCopy, deps: [{ token: i0.KeyValueDiffers }, { token: i1.HttpClient }, { token: i2.SpiderlyMessageService }, { token: i0.ChangeDetectorRef }, { token: i3.Router }, { token: i3.ActivatedRoute }, { token: i4.TranslocoService }, { token: i5.BaseFormService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
241
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: BaseFormCopy, selector: "base-form", ngImport: i0, template: '', isInline: true }); }
|
|
242
|
+
}
|
|
243
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: BaseFormCopy, decorators: [{
|
|
244
|
+
type: Component,
|
|
245
|
+
args: [{ selector: 'base-form', template: '' }]
|
|
246
|
+
}], ctorParameters: () => [{ type: i0.KeyValueDiffers }, { type: i1.HttpClient }, { type: i2.SpiderlyMessageService }, { type: i0.ChangeDetectorRef }, { type: i3.Router }, { type: i3.ActivatedRoute }, { type: i4.TranslocoService }, { type: i5.BaseFormService }] });
|
|
247
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1mb3JtIGNvcHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zcGlkZXJseS9zcmMvbGliL2NvbXBvbmVudHMvYmFzZS1mb3JtL2Jhc2UtZm9ybSBjb3B5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFFTCxTQUFTLEdBSVYsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLG1CQUFtQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFLM0gsT0FBTyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7Ozs7OztBQVUzRSxNQUFNLE9BQU8sWUFBWTtJQVF2QixZQUNZLE9BQXdCLEVBQ3hCLElBQWdCLEVBQ2hCLGNBQXNDLEVBQ3RDLGlCQUFvQyxFQUNwQyxNQUFjLEVBQ2QsS0FBcUIsRUFDckIsZ0JBQWtDLEVBQ2xDLGVBQWdDO1FBUGhDLFlBQU8sR0FBUCxPQUFPLENBQWlCO1FBQ3hCLFNBQUksR0FBSixJQUFJLENBQVk7UUFDaEIsbUJBQWMsR0FBZCxjQUFjLENBQXdCO1FBQ3RDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDcEMsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLFVBQUssR0FBTCxLQUFLLENBQWdCO1FBQ3JCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBZjVDLGNBQVMsR0FBc0IsSUFBSSxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUV6RCxtQ0FBOEIsR0FBVyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLGdDQUFnQyxDQUFDLENBQUM7UUFDM0csWUFBTyxHQUFZLElBQUksQ0FBQztRQW1CeEIsZUFBZTtRQUVmLGtCQUFhLEdBQUcsQ0FDZCxTQUErQixFQUMvQixlQUFrQyxFQUNsQyxnQkFBcUIsRUFDckIsc0JBQThCLEVBQzlCLHNCQUFvQyxFQUNwQyxFQUFFO1lBQ0YsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FDdEMsU0FBUyxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxzQkFBc0IsRUFBRSxzQkFBc0IsQ0FDN0YsQ0FBQztRQUNKLENBQUMsQ0FBQTtRQUVELG9CQUFlLEdBQUcsQ0FDaEIsU0FBK0IsRUFDL0IsZ0JBQWdDLEVBQ2hDLHNCQUFvQyxFQUNwQyxFQUFFO1lBQ0YsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FDdkMsU0FBUyxFQUFFLGdCQUFnQixFQUFFLHNCQUFzQixDQUNwRCxDQUFDO1FBQ0osQ0FBQyxDQUFBO1FBRUQsWUFBTyxHQUFHLENBQXVCLGVBQWlDLEVBQUUsU0FBK0IsRUFBRSxFQUFFO1lBQ3JHLE9BQU8sVUFBVSxDQUFDLGVBQWUsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNoRCxDQUFDLENBQUE7UUFFRCxXQUFNLEdBQUcsQ0FBQyxVQUFtQixJQUFJLEVBQUUsRUFBRTtZQUNuQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDOUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFFakMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUM7WUFFOUQsSUFBSSxPQUFPLEdBQVksSUFBSSxDQUFDLHFDQUFxQyxFQUFFLENBQUM7WUFDcEUsSUFBSSxnQkFBZ0IsR0FBWSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUUxRCxJQUFHLE9BQU8sSUFBSSxnQkFBZ0IsRUFBQztnQkFDN0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFO29CQUNqRSxJQUFJLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsOEJBQThCLENBQUMsQ0FBQztvQkFFeEUsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTt3QkFDL0IsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7d0JBRTVDLElBQUksV0FBVyxFQUFFOzRCQUNmLElBQUksV0FBVyxZQUFZLGlCQUFpQixFQUFFO2dDQUM1QyxNQUFNLFNBQVMsR0FBRyxXQUFnQyxDQUFDO2dDQUNuRCxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO29DQUN6QixTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7aUNBQ25CO3FDQUNHO29DQUNGLGtLQUFrSztvQ0FDbEssdUZBQXVGO2lDQUN4RjtnQ0FFRCxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBVSxFQUFFLEVBQUU7b0NBQzlCLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssS0FBSyxJQUFJLEVBQUU7d0NBQy9DLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxDQUFDO3dDQUNqRCxJQUFJLGVBQWUsR0FBRyxJQUFJLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxDQUFDO3dDQUNoRCxJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQyxlQUFlLEVBQUUsU0FBUyxDQUFDLGdCQUFnQixDQUFDLENBQUE7d0NBQy9FLFNBQVMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7cUNBQ2pDO3lDQUFNO3dDQUNMLE9BQU8sQ0FBQyxLQUFLLENBQUMsdURBQXVELENBQUMsQ0FBQztxQ0FDeEU7Z0NBQ0gsQ0FBQyxDQUFDLENBQUM7NkJBRUo7aUNBQU07Z0NBQ0wsV0FBVyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQzs2QkFDbEM7eUJBQ0Y7NkJBQUk7NEJBQ0gsNEJBQTRCOzRCQUM1Qix3RUFBd0U7eUJBQ3pFO29CQUNILENBQUMsQ0FBQyxDQUFDO29CQUVILElBQUksT0FBTyxFQUFFO3dCQUNYLE1BQU0sYUFBYSxHQUFJLEdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsQ0FBQzt3QkFDbkUsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsb0VBQW9FO3FCQUMvRztvQkFFRCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ3JCLENBQUMsQ0FBQyxDQUFDO2dCQUVILElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO2FBQzNCO2lCQUFJO2dCQUNILElBQUksQ0FBQyxlQUFlLENBQUMsd0JBQXdCLEVBQUUsQ0FBQzthQUNqRDtRQUNILENBQUMsQ0FBQTtRQUVELHlCQUFvQixHQUFHLENBQUMsU0FBMEIsRUFBUSxFQUFFO1lBQzFELElBQUcsU0FBUyxJQUFJLElBQUksRUFBQztnQkFDbkIsMERBQTBEO2dCQUMxRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQztnQkFDbkMsTUFBTSxTQUFTLEdBQVcsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUNuRCxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDckMsT0FBTzthQUNSO1lBRUQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzVDLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUVyRCxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2xDLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3BDLENBQUMsQ0FBQTtRQUVELGlCQUFZLEdBQUcsQ0FBQyxRQUFjLEVBQUUsRUFBRSxHQUFFLENBQUMsQ0FBQTtRQUNyQyxnQkFBVyxHQUFHLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQTtRQUN0Qix1QkFBa0IsR0FBRyxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUE7UUE4SjdCLHVFQUF1RTtRQUN2RSw4QkFBeUIsR0FBRyxDQUMxQixTQUE0QixFQUM1QixnQkFBNEIsRUFDNUIsd0JBQWtELEVBQ2xELDBCQUFtQyxLQUFLLEVBQzVCLEVBQUU7WUFDZCxJQUFJLHNCQUFzQixHQUFlO2dCQUNyQyxFQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRTt3QkFDcEYsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsd0JBQXdCLENBQUMsS0FBSyxDQUFDLENBQUM7d0JBQ2pGLElBQUksdUJBQXVCLEtBQUssS0FBSyxFQUFFOzRCQUNyQyxJQUFJLENBQUMsaUNBQWlDLENBQUMsU0FBUyxFQUFFLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxDQUFDO3lCQUNuRjtvQkFDSCxDQUFDLEVBQUM7Z0JBQ0YsRUFBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRTt3QkFDekYsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSx3QkFBd0IsQ0FBQyxLQUFLLENBQUMsQ0FBQzt3QkFDbkYsSUFBSSx1QkFBdUIsS0FBSyxLQUFLLEVBQUU7NEJBQ3JDLElBQUksQ0FBQyxlQUFlLENBQUMsMEJBQTBCLENBQzdDLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSx3QkFBd0IsQ0FBQyxLQUFLLENBQzVELENBQUM7eUJBQ0g7b0JBQ0gsQ0FBQyxFQUFDO2dCQUNGLEVBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLEVBQUUsSUFBSSxFQUFFLGtCQUFrQixFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUU7d0JBQzNGLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsd0JBQXdCLENBQUMsS0FBSyxDQUFDLENBQUM7d0JBQ25GLElBQUksdUJBQXVCLEtBQUssS0FBSyxFQUFFOzRCQUNyQyxJQUFJLENBQUMsZUFBZSxDQUFDLDBCQUEwQixDQUM3QyxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsd0JBQXdCLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FDaEUsQ0FBQzt5QkFDSDtvQkFDSCxDQUFDLEVBQUM7YUFDTCxDQUFDO1lBRUYsT0FBTyxzQkFBc0IsQ0FBQztRQUNoQyxDQUFDLENBQUE7UUFFRCxtQkFBYyxHQUFHLENBQUMsU0FBNEIsRUFBRSxnQkFBcUIsRUFBRSx3QkFBZ0MsRUFBRSxFQUFFLEdBQUUsQ0FBQyxDQUFBO1FBRTlHLHFCQUFnQixHQUFHLENBQUMsU0FBNEIsRUFBRSxnQkFBcUIsRUFBRSx3QkFBZ0MsRUFBRSxFQUFFLEdBQUUsQ0FBQyxDQUFBO1FBRWhILHFCQUFnQixHQUFHLENBQUMsU0FBNEIsRUFBRSxnQkFBcUIsRUFBRSx3QkFBZ0MsRUFBRSxFQUFFLEdBQUUsQ0FBQyxDQUFBO0lBclRoSCxDQUFDO0lBRUQsUUFBUTtJQUNSLENBQUM7SUErR0QscUNBQXFDO1FBQ25DLElBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLElBQUksSUFBSTtZQUNoQyxPQUFPLElBQUksQ0FBQztRQUVkLElBQUksT0FBTyxHQUFZLEtBQUssQ0FBQztRQUU3QixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ2pELE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7WUFFeEQsSUFBSSxrQkFBa0IsWUFBWSxpQkFBaUIsRUFBQztnQkFDbEQsTUFBTSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7b0JBQ3JELE1BQU0sV0FBVyxHQUFHLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQXdCLENBQUMsQ0FBQyx3RUFBd0U7b0JBRXJKLElBQUksa0JBQWtCLENBQUMsb0JBQW9CLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsSUFBSSxXQUFXLENBQUMsT0FBTyxFQUFFO3dCQUM5RixXQUFXLENBQUMsV0FBVyxFQUFFLENBQUM7d0JBQzFCLE9BQU8sR0FBRyxJQUFJLENBQUM7cUJBQ2hCO2dCQUNILENBQUMsQ0FBQyxDQUFDO2FBQ0o7aUJBQ0ksSUFBSSxrQkFBa0IsWUFBWSxtQkFBbUIsRUFBQztnQkFDekQsSUFBSSxrQkFBa0IsQ0FBQyxPQUFPLEVBQUU7b0JBQzlCLGtCQUFrQixDQUFDLFdBQVcsRUFBRSxDQUFDO29CQUNqQyxPQUFPLEdBQUcsSUFBSSxDQUFDO2lCQUNoQjthQUNGO1FBRUgsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLE9BQU8sRUFBRTtZQUNYLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxZQUFZO0lBRVosb0JBQW9CO0lBRXBCLDBCQUEwQixDQUFJLGVBQWlDLEVBQUUsU0FBK0IsRUFBRSxLQUFhLEVBQUUsTUFBdUU7UUFDdEwsSUFBRyxTQUFTLENBQUMsb0JBQW9CLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM1RSxTQUFTLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBRXZELElBQUksa0JBQTBDLENBQUM7UUFFL0MsSUFBSSxNQUFNLEVBQUU7WUFDVixrQkFBa0IsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQWtDLENBQUMsQ0FBQztTQUMzRTthQUNHO1lBQ0YsT0FBUSxTQUFTLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBMEIsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUF3QixDQUFDO1NBQzdHO1FBRUQsT0FBTyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsRUFBRSxRQUFRLENBQUMsZUFBZSxDQUF3QixDQUFDLENBQUMsNkZBQTZGO0lBQ25MLENBQUM7SUFFRCxvQkFBb0IsQ0FBSSxlQUFpQyxFQUFFLFNBQStCLEVBQUUsTUFBdUU7UUFDakssSUFBRyxTQUFTLENBQUMsb0JBQW9CLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM1RSxTQUFTLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBRXZELElBQUksa0JBQTBDLENBQUM7UUFFL0MsSUFBSSxNQUFNLEVBQUU7WUFDVixrQkFBa0IsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQWtDLENBQUMsQ0FBQztTQUMzRTthQUNHO1lBQ0YsT0FBUSxTQUFTLENBQUMsUUFBbUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBd0IsQ0FBQyxDQUFDO1NBQ3BIO1FBRUQsT0FBTyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBd0IsQ0FBQyxDQUFDO0lBQ3pGLENBQUM7SUFFRCxrQkFBa0IsQ0FBSSxTQUErQjtRQUNuRCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVELDBCQUEwQixDQUN4QixTQUErQixFQUMvQixnQkFBZ0MsRUFDaEMsS0FBYTtRQUViLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQywwQkFBMEIsQ0FBQyxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLENBQUE7SUFDNUYsQ0FBQztJQUVELGFBQWEsQ0FDWCxlQUFrQyxFQUNsQyxTQUE2QixFQUM3QixnQkFBZ0MsRUFDaEMscUJBQTZCLEVBQzdCLHVCQUErQixFQUMvQixXQUFvQixLQUFLO1FBRXpCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQ3ZDLGVBQWUsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUscUJBQXFCLEVBQUUsdUJBQXVCLEVBQUUsUUFBUSxDQUN2RyxDQUFDO0lBQ0osQ0FBQztJQUVELGlDQUFpQyxDQUFDLFNBQTRCLEVBQUUsS0FBYTtRQUMzRSxJQUFHLEtBQUssSUFBSSxJQUFJO1lBQ2QsTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBRTlDLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUVELGtDQUFrQyxDQUFDLFNBQTRCLEVBQUUsT0FBaUI7UUFDaEYsZ0ZBQWdGO1FBQ2hGLE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFFcEQsYUFBYSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUM1QixJQUFJLEtBQUssSUFBSSxDQUFDLElBQUksS0FBSyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUU7Z0JBQzFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDM0I7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxrQkFBa0I7UUFDaEIsSUFBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsSUFBSSxJQUFJO1lBQ2hDLE9BQU8sSUFBSSxDQUFDO1FBRWQsSUFBSSxPQUFPLEdBQVksS0FBSyxDQUFDO1FBRTdCLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDakQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFpQyxDQUFDO1lBRS9FLElBQUksU0FBUyxZQUFZLGlCQUFpQixFQUFDO2dCQUN4QyxTQUFTLENBQUMsUUFBZ0MsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUU7b0JBQzlELE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTt3QkFDNUMsTUFBTSxXQUFXLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQXdCLENBQUMsQ0FBQyx5RUFBeUU7d0JBRTdJLElBQ0UsQ0FBQyxTQUFTLENBQUMsb0JBQW9CLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsSUFBSSxTQUFTLENBQUMsb0JBQW9CLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQzs0QkFDMUgsV0FBVyxDQUFDLE9BQU8sRUFDbkI7NEJBQ0EsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDOzRCQUMxQixPQUFPLEdBQUcsSUFBSSxDQUFDO3lCQUNoQjtvQkFDSCxDQUFDLENBQUMsQ0FBQztnQkFDTCxDQUFDLENBQUMsQ0FBQztnQkFFSCxJQUFJLFNBQVMsQ0FBQyxRQUFRLElBQUksSUFBSSxJQUFJLFNBQVMsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO29CQUN2RCxPQUFPLEdBQUcsSUFBSSxDQUFDO29CQUNmLElBQUksQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDO2lCQUMxRjthQUNGO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLE9BQU8sRUFBRTtZQUNYLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxnQkFBZ0IsS0FBRyxDQUFDO0lBQ3BCLGVBQWUsS0FBRyxDQUFDO0lBQ25CLHNCQUFzQixLQUFHLENBQUM7K0dBOVJmLFlBQVk7bUdBQVosWUFBWSxpREFIYixFQUFFOzs0RkFHRCxZQUFZO2tCQUx4QixTQUFTOytCQUNFLFdBQVcsWUFDWCxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmFzZUZvcm1TZXJ2aWNlIH0gZnJvbSAnLi8uLi8uLi9zZXJ2aWNlcy9iYXNlLWZvcm0uc2VydmljZSc7XHJcbmltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIEtleVZhbHVlRGlmZmVyLFxyXG4gIEtleVZhbHVlRGlmZmVycyxcclxuICBPbkluaXQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFNwaWRlcmx5Rm9ybUFycmF5LCBTcGlkZXJseUZvcm1Db250cm9sLCBTcGlkZXJseUZvcm1Hcm91cCB9IGZyb20gJy4uL3NwaWRlcmx5LWZvcm0tY29udHJvbC9zcGlkZXJseS1mb3JtLWNvbnRyb2wnO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBTcGlkZXJseU1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc3BpZGVybHktbWVzc2FnZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IE1lbnVJdGVtIH0gZnJvbSAncHJpbWVuZy9hcGknO1xyXG5pbXBvcnQgeyBnZXRDb250cm9sLCBnZXRQYXJlbnRVcmwgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9oZWxwZXItZnVuY3Rpb25zJztcclxuaW1wb3J0IHsgVHJhbnNsb2NvU2VydmljZSB9IGZyb20gJ0Bqc3ZlcnNlL3RyYW5zbG9jbyc7XHJcbmltcG9ydCB7IEJhc2VFbnRpdHkgfSBmcm9tICcuLi8uLi9lbnRpdGllcy9iYXNlLWVudGl0eSc7XHJcbmltcG9ydCB7IExhc3RNZW51SWNvbkluZGV4Q2xpY2tlZCB9IGZyb20gJy4uLy4uL2VudGl0aWVzL2xhc3QtbWVudS1pY29uLWluZGV4LWNsaWNrZWQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdiYXNlLWZvcm0nLFxyXG4gIHRlbXBsYXRlOiAnJyxcclxuICBzdHlsZXM6IFtdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQmFzZUZvcm1Db3B5IGltcGxlbWVudHMgT25Jbml0IHsgXHJcbiAgZm9ybUdyb3VwOiBTcGlkZXJseUZvcm1Hcm91cCA9IG5ldyBTcGlkZXJseUZvcm1Hcm91cCh7fSk7XHJcbiAgc2F2ZUJvZHk6IGFueTtcclxuICBzdWNjZXNzZnVsU2F2ZVRvYXN0RGVzY3JpcHRpb246IHN0cmluZyA9IHRoaXMudHJhbnNsb2NvU2VydmljZS50cmFuc2xhdGUoJ1N1Y2Nlc3NmdWxTYXZlVG9hc3REZXNjcmlwdGlvbicpO1xyXG4gIGxvYWRpbmc6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBwcml2YXRlIG1vZGVsRGlmZmVyOiBLZXlWYWx1ZURpZmZlcjxzdHJpbmcsIGFueT47XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJvdGVjdGVkIGRpZmZlcnM6IEtleVZhbHVlRGlmZmVycywgXHJcbiAgICBwcm90ZWN0ZWQgaHR0cDogSHR0cENsaWVudCwgXHJcbiAgICBwcm90ZWN0ZWQgbWVzc2FnZVNlcnZpY2U6IFNwaWRlcmx5TWVzc2FnZVNlcnZpY2UsIFxyXG4gICAgcHJvdGVjdGVkIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByb3RlY3RlZCByb3V0ZXI6IFJvdXRlciwgXHJcbiAgICBwcm90ZWN0ZWQgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgcHJvdGVjdGVkIHRyYW5zbG9jb1NlcnZpY2U6IFRyYW5zbG9jb1NlcnZpY2UsXHJcbiAgICBwcm90ZWN0ZWQgYmFzZUZvcm1TZXJ2aWNlOiBCYXNlRm9ybVNlcnZpY2UsXHJcbiAgKSB7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpe1xyXG4gIH1cclxuXHJcbiAgLy8jcmVnaW9uIE1vZGVsXHJcblxyXG4gIGluaXRGb3JtR3JvdXAgPSA8VD4oXHJcbiAgICBmb3JtR3JvdXA6IFNwaWRlcmx5Rm9ybUdyb3VwPFQ+LCBcclxuICAgIHBhcmVudEZvcm1Hcm91cDogU3BpZGVybHlGb3JtR3JvdXAsIFxyXG4gICAgbW9kZWxDb25zdHJ1Y3RvcjogYW55LCBcclxuICAgIHByb3BlcnR5TmFtZUluU2F2ZUJvZHk6IHN0cmluZyxcclxuICAgIHVwZGF0ZU9uQ2hhbmdlQ29udHJvbHM/OiAoa2V5b2YgVClbXVxyXG4gICkgPT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuYmFzZUZvcm1TZXJ2aWNlLmFkZEZvcm1Hcm91cChcclxuICAgICAgZm9ybUdyb3VwLCBwYXJlbnRGb3JtR3JvdXAsIG1vZGVsQ29uc3RydWN0b3IsIHByb3BlcnR5TmFtZUluU2F2ZUJvZHksIHVwZGF0ZU9uQ2hhbmdlQ29udHJvbHNcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBjcmVhdGVGb3JtR3JvdXAgPSA8VD4oXHJcbiAgICBmb3JtR3JvdXA6IFNwaWRlcmx5Rm9ybUdyb3VwPFQ+LCBcclxuICAgIG1vZGVsQ29uc3RydWN0b3I6IFQgJiBCYXNlRW50aXR5LCBcclxuICAgIHVwZGF0ZU9uQ2hhbmdlQ29udHJvbHM/OiAoa2V5b2YgVClbXVxyXG4gICkgPT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuYmFzZUZvcm1TZXJ2aWNlLmluaXRGb3JtR3JvdXAoXHJcbiAgICAgIGZvcm1Hcm91cCwgbW9kZWxDb25zdHJ1Y3RvciwgdXBkYXRlT25DaGFuZ2VDb250cm9sc1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGNvbnRyb2wgPSA8VCBleHRlbmRzIEJhc2VFbnRpdHk+KGZvcm1Db250cm9sTmFtZTogc3RyaW5nICYga2V5b2YgVCwgZm9ybUdyb3VwOiBTcGlkZXJseUZvcm1Hcm91cDxUPikgPT4ge1xyXG4gICAgcmV0dXJuIGdldENvbnRyb2woZm9ybUNvbnRyb2xOYW1lLCBmb3JtR3JvdXApO1xyXG4gIH1cclxuXHJcbiAgb25TYXZlID0gKHJlcm91dGU6IGJvb2xlYW4gPSB0cnVlKSA9PiB7XHJcbiAgICB0aGlzLnNhdmVCb2R5ID0gdGhpcy5mb3JtR3JvdXAuaW5pdFNhdmVCb2R5KCk7XHJcbiAgICB0aGlzLm9uQmVmb3JlU2F2ZSh0aGlzLnNhdmVCb2R5KTtcclxuXHJcbiAgICB0aGlzLnNhdmVCb2R5ID0gdGhpcy5zYXZlQm9keSA/PyB0aGlzLmZvcm1Hcm91cC5nZXRSYXdWYWx1ZSgpO1xyXG5cclxuICAgIGxldCBpc1ZhbGlkOiBib29sZWFuID0gdGhpcy5hcmVGb3JtR3JvdXBzRnJvbVBhcmVudEZvcm1Hcm91cFZhbGlkKCk7XHJcbiAgICBsZXQgaXNGb3JtQXJyYXlWYWxpZDogYm9vbGVhbiA9IHRoaXMuYXJlRm9ybUFycmF5c1ZhbGlkKCk7XHJcblxyXG4gICAgaWYoaXNWYWxpZCAmJiBpc0Zvcm1BcnJheVZhbGlkKXtcclxuICAgICAgdGhpcy5mb3JtR3JvdXAuc2F2ZU9ic2VydmFibGVNZXRob2QodGhpcy5zYXZlQm9keSkuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5zdWNjZXNzTWVzc2FnZSh0aGlzLnN1Y2Nlc3NmdWxTYXZlVG9hc3REZXNjcmlwdGlvbik7XHJcblxyXG4gICAgICAgIE9iamVjdC5rZXlzKHJlcykuZm9yRWFjaCgoa2V5KSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBmb3JtQ29udHJvbCA9IHRoaXMuZm9ybUdyb3VwLmdldChrZXkpO1xyXG4gICAgICAgICAgXHJcbiAgICAgICAgICBpZiAoZm9ybUNvbnRyb2wpIHtcclxuICAgICAgICAgICAgaWYgKGZvcm1Db250cm9sIGluc3RhbmNlb2YgU3BpZGVybHlGb3JtQXJyYXkpIHtcclxuICAgICAgICAgICAgICBjb25zdCBmb3JtQXJyYXkgPSBmb3JtQ29udHJvbCBhcyBTcGlkZXJseUZvcm1BcnJheTtcclxuICAgICAgICAgICAgICBpZiAocmVzW2tleV0ubGVuZ3RoICE9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBmb3JtQXJyYXkuY2xlYXIoKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgICAgIC8vIEZUOiBUaGlzIGlzIG9rYXkgYmVjYXVzZSB3aGVuIHdlIGhhdmUgTTJNIGFzc29jaWF0aW9uIHdpdGggYWRkaXRpb25hbCBmaWVsZHMsIHdlIHdpbGwgbm90IGdpdmUgYmFjayB0aGUgbGlzdCBiZWNhdXNlIHdlIGFyZSBub3QgY2hlY2tpbmcgdmVyc2lvbiBvbiB0aGUgc2VydmVyLlxyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5lcnJvcihgWW91IHJldHVybmVkIGVtcHR5IGFycmF5IGZvciBjb250cm9sOiAke2Zvcm1BcnJheS50cmFuc2xhdGlvbktleX0uYCk7XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICByZXNba2V5XS5mb3JFYWNoKChtb2RlbDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZGVsID09PSAnb2JqZWN0JyAmJiBtb2RlbCAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKGZvcm1BcnJheS5tb2RlbENvbnN0cnVjdG9yLCBtb2RlbCk7XHJcbiAgICAgICAgICAgICAgICAgIGxldCBoZWxwZXJGb3JtR3JvdXAgPSBuZXcgU3BpZGVybHlGb3JtR3JvdXAoe30pO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmJhc2VGb3JtU2VydmljZS5pbml0Rm9ybUdyb3VwKGhlbHBlckZvcm1Hcm91cCwgZm9ybUFycmF5Lm1vZGVsQ29uc3RydWN0b3IpXHJcbiAgICAgICAgICAgICAgICAgIGZvcm1BcnJheS5wdXNoKGhlbHBlckZvcm1Hcm91cCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdDYW4gbm90IGFkZCBwcmltaXRpdmUgZm9ybSBjb250cm9sIGluc2lkZSBmb3JtIGFycmF5LicpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBmb3JtQ29udHJvbC5wYXRjaFZhbHVlKHJlc1trZXldKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIC8vIEZUOiBJdCdzIG9rYXkgdG8gZG8gdGhpcy5cclxuICAgICAgICAgICAgLy8gY29uc29sZS5lcnJvcignWW91IHJldHVybmVkIHNvbWV0aGluZyB0aGF0IGlzIG5vdCBpbiB0aGUgc2F2ZSBEVE8uJyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmIChyZXJvdXRlKSB7XHJcbiAgICAgICAgICBjb25zdCBzYXZlZE9iamVjdElkID0gKHJlcyBhcyBhbnkpW3RoaXMuZm9ybUdyb3VwLm1haW5EVE9OYW1lXT8uaWQ7XHJcbiAgICAgICAgICB0aGlzLnJlcm91dGVUb1NhdmVkT2JqZWN0KHNhdmVkT2JqZWN0SWQpOyAvLyBZb3UgYWx3YXlzIG5lZWQgdG8gaGF2ZSBpZCwgYmVjYXVzZSBvZiBpZCA9PSAwIGFuZCB2ZXJzaW9uIGNoYW5nZVxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICB0aGlzLm9uQWZ0ZXJTYXZlKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgICBcclxuICAgICAgdGhpcy5vbkFmdGVyU2F2ZVJlcXVlc3QoKTtcclxuICAgIH1lbHNle1xyXG4gICAgICB0aGlzLmJhc2VGb3JtU2VydmljZS5zaG93SW52YWxpZEZpZWxkc01lc3NhZ2UoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlcm91dGVUb1NhdmVkT2JqZWN0ID0gKHJlcm91dGVJZDogbnVtYmVyIHwgc3RyaW5nKTogdm9pZCA9PiB7XHJcbiAgICBpZihyZXJvdXRlSWQgPT0gbnVsbCl7XHJcbiAgICAgIC8vIGNvbnNvbGUuZXJyb3IoJ1lvdSBkbyBub3QgaGF2ZSByZXJvdXRlSWQgaW4geW91ciBEVE8uJylcclxuICAgICAgY29uc3QgY3VycmVudFVybCA9IHRoaXMucm91dGVyLnVybDtcclxuICAgICAgY29uc3QgcGFyZW50VXJsOiBzdHJpbmcgPSBnZXRQYXJlbnRVcmwoY3VycmVudFVybCk7XHJcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwocGFyZW50VXJsKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgICBcclxuICAgIGNvbnN0IHNlZ21lbnRzID0gdGhpcy5yb3V0ZXIudXJsLnNwbGl0KCcvJyk7XHJcbiAgICBzZWdtZW50c1tzZWdtZW50cy5sZW5ndGggLSAxXSA9IHJlcm91dGVJZC50b1N0cmluZygpO1xyXG5cclxuICAgIGNvbnN0IG5ld1VybCA9IHNlZ21lbnRzLmpvaW4oJy8nKTtcclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwobmV3VXJsKTtcclxuICB9XHJcblxyXG4gIG9uQmVmb3JlU2F2ZSA9IChzYXZlQm9keT86IGFueSkgPT4ge31cclxuICBvbkFmdGVyU2F2ZSA9ICgpID0+IHt9XHJcbiAgb25BZnRlclNhdmVSZXF1ZXN0ID0gKCkgPT4ge31cclxuXHJcbiAgYXJlRm9ybUdyb3Vwc0Zyb21QYXJlbnRGb3JtR3JvdXBWYWxpZCgpOiBib29sZWFuIHtcclxuICAgIGlmKHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzID09IG51bGwpXHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIGxldCBpbnZhbGlkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgT2JqZWN0LmtleXModGhpcy5mb3JtR3JvdXAuY29udHJvbHMpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgY29uc3QgZm9ybUdyb3VwT3JDb250cm9sID0gdGhpcy5mb3JtR3JvdXAuY29udHJvbHNba2V5XTtcclxuXHJcbiAgICAgIGlmIChmb3JtR3JvdXBPckNvbnRyb2wgaW5zdGFuY2VvZiBTcGlkZXJseUZvcm1Hcm91cCl7XHJcbiAgICAgICAgT2JqZWN0LmtleXMoZm9ybUdyb3VwT3JDb250cm9sLmNvbnRyb2xzKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBmb3JtQ29udHJvbCA9IGZvcm1Hcm91cE9yQ29udHJvbC5jb250cm9sc1trZXldIGFzIFNwaWRlcmx5Rm9ybUNvbnRyb2w7IC8vIHRoaXMuZm9ybUFycmF5Lm1hcmtBc0RpcnR5KCk7IC8vIEZUOiBGb3Igc29tZSByZWFzb24gdGhpcyBkb2VzbnQgd29ya1xyXG5cclxuICAgICAgICAgIGlmIChmb3JtR3JvdXBPckNvbnRyb2wuY29udHJvbE5hbWVzRnJvbUh0bWwuaW5jbHVkZXMoZm9ybUNvbnRyb2wubGFiZWwpICYmIGZvcm1Db250cm9sLmludmFsaWQpIHtcclxuICAgICAgICAgICAgZm9ybUNvbnRyb2wubWFya0FzRGlydHkoKTtcclxuICAgICAgICAgICAgaW52YWxpZCA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAoZm9ybUdyb3VwT3JDb250cm9sIGluc3RhbmNlb2YgU3BpZGVybHlGb3JtQ29udHJvbCl7XHJcbiAgICAgICAgaWYgKGZvcm1Hcm91cE9yQ29udHJvbC5pbnZhbGlkKSB7XHJcbiAgICAgICAgICBmb3JtR3JvdXBPckNvbnRyb2wubWFya0FzRGlydHkoKTtcclxuICAgICAgICAgIGludmFsaWQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgIH0pO1xyXG5cclxuICAgIGlmIChpbnZhbGlkKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gTW9kZWwgTGlzdFxyXG4gIFxyXG4gIGdldEZvcm1BcnJheUNvbnRyb2xCeUluZGV4PFQ+KGZvcm1Db250cm9sTmFtZToga2V5b2YgVCAmIHN0cmluZywgZm9ybUFycmF5OiBTcGlkZXJseUZvcm1BcnJheTxUPiwgaW5kZXg6IG51bWJlciwgZmlsdGVyPzogKGZvcm1Hcm91cHM6IFNwaWRlcmx5Rm9ybUdyb3VwPFQ+W10pID0+IFNwaWRlcmx5Rm9ybUdyb3VwPFQ+W10pOiBTcGlkZXJseUZvcm1Db250cm9sIHtcclxuICAgIGlmKGZvcm1BcnJheS5jb250cm9sTmFtZXNGcm9tSHRtbC5maW5kSW5kZXgoeCA9PiB4ID09PSBmb3JtQ29udHJvbE5hbWUpID09PSAtMSlcclxuICAgICAgZm9ybUFycmF5LmNvbnRyb2xOYW1lc0Zyb21IdG1sLnB1c2goZm9ybUNvbnRyb2xOYW1lKTtcclxuXHJcbiAgICBsZXQgZmlsdGVyZWRGb3JtR3JvdXBzOiBTcGlkZXJseUZvcm1Hcm91cDxUPltdO1xyXG5cclxuICAgIGlmIChmaWx0ZXIpIHtcclxuICAgICAgZmlsdGVyZWRGb3JtR3JvdXBzID0gZmlsdGVyKGZvcm1BcnJheS5jb250cm9scyBhcyBTcGlkZXJseUZvcm1Hcm91cDxUPltdKTtcclxuICAgIH1cclxuICAgIGVsc2V7XHJcbiAgICAgIHJldHVybiAoZm9ybUFycmF5LmNvbnRyb2xzW2luZGV4XSBhcyBTcGlkZXJseUZvcm1Hcm91cDxUPikuY29udHJvbHNbZm9ybUNvbnRyb2xOYW1lXSBhcyBTcGlkZXJseUZvcm1Db250cm9sO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmaWx0ZXJlZEZvcm1Hcm91cHNbaW5kZXhdPy5jb250cm9sc1tmb3JtQ29udHJvbE5hbWVdIGFzIFNwaWRlcmx5Rm9ybUNvbnRyb2w7IC8vIEZUOiBEb24ndCBjaGFuZ2UgdGhpcy4gSXQncyBhbHdheXMgcG9zc2libGUgdGhhdCBjaGFuZ2UgZGV0ZWN0aW9uIG9jY3VycyBiZWZvcmUgc29tZXRoaW5nLlxyXG4gIH1cclxuXHJcbiAgZ2V0Rm9ybUFycmF5Q29udHJvbHM8VD4oZm9ybUNvbnRyb2xOYW1lOiBrZXlvZiBUICYgc3RyaW5nLCBmb3JtQXJyYXk6IFNwaWRlcmx5Rm9ybUFycmF5PFQ+LCBmaWx0ZXI/OiAoZm9ybUdyb3VwczogU3BpZGVybHlGb3JtR3JvdXA8VD5bXSkgPT4gU3BpZGVybHlGb3JtR3JvdXA8VD5bXSk6IFNwaWRlcmx5Rm9ybUNvbnRyb2xbXSB7XHJcbiAgICBpZihmb3JtQXJyYXkuY29udHJvbE5hbWVzRnJvbUh0bWwuZmluZEluZGV4KHggPT4geCA9PT0gZm9ybUNvbnRyb2xOYW1lKSA9PT0gLTEpXHJcbiAgICAgIGZvcm1BcnJheS5jb250cm9sTmFtZXNGcm9tSHRtbC5wdXNoKGZvcm1Db250cm9sTmFtZSk7XHJcblxyXG4gICAgbGV0IGZpbHRlcmVkRm9ybUdyb3VwczogU3BpZGVybHlGb3JtR3JvdXA8VD5bXTtcclxuXHJcbiAgICBpZiAoZmlsdGVyKSB7XHJcbiAgICAgIGZpbHRlcmVkRm9ybUdyb3VwcyA9IGZpbHRlcihmb3JtQXJyYXkuY29udHJvbHMgYXMgU3BpZGVybHlGb3JtR3JvdXA8VD5bXSk7XHJcbiAgICB9XHJcbiAgICBlbHNle1xyXG4gICAgICByZXR1cm4gKGZvcm1BcnJheS5jb250cm9scyBhcyBTcGlkZXJseUZvcm1Hcm91cDxUPltdKS5tYXAoeCA9PiB4LmNvbnRyb2xzW2Zvcm1Db250cm9sTmFtZV0gYXMgU3BpZGVybHlGb3JtQ29udHJvbCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZpbHRlcmVkRm9ybUdyb3Vwcy5tYXAoeCA9PiB4LmNvbnRyb2xzW2Zvcm1Db250cm9sTmFtZV0gYXMgU3BpZGVybHlGb3JtQ29udHJvbCk7XHJcbiAgfVxyXG5cclxuICBnZXRGb3JtQXJyYXlHcm91cHM8VD4oZm9ybUFycmF5OiBTcGlkZXJseUZvcm1BcnJheTxUPik6IFNwaWRlcmx5Rm9ybUdyb3VwPFQ+W117XHJcbiAgICByZXR1cm4gdGhpcy5iYXNlRm9ybVNlcnZpY2UuZ2V0Rm9ybUFycmF5R3JvdXBzKGZvcm1BcnJheSk7XHJcbiAgfVxyXG5cclxuICBhZGROZXdGb3JtR3JvdXBUb0Zvcm1BcnJheTxUPihcclxuICAgIGZvcm1BcnJheTogU3BpZGVybHlGb3JtQXJyYXk8VD4sIFxyXG4gICAgbW9kZWxDb25zdHJ1Y3RvcjogVCAmIEJhc2VFbnRpdHksXHJcbiAgICBpbmRleDogbnVtYmVyLFxyXG4gICkgOiBTcGlkZXJseUZvcm1Hcm91cCB7XHJcbiAgICByZXR1cm4gdGhpcy5iYXNlRm9ybVNlcnZpY2UuYWRkTmV3Rm9ybUdyb3VwVG9Gb3JtQXJyYXkoZm9ybUFycmF5LCBtb2RlbENvbnN0cnVjdG9yLCBpbmRleClcclxuICB9XHJcblxyXG4gIGluaXRGb3JtQXJyYXk8VD4oXHJcbiAgICBwYXJlbnRGb3JtR3JvdXA6IFNwaWRlcmx5Rm9ybUdyb3VwLCBcclxuICAgIG1vZGVsTGlzdDogKFQgJiBCYXNlRW50aXR5KVtdLCBcclxuICAgIG1vZGVsQ29uc3RydWN0b3I6IFQgJiBCYXNlRW50aXR5LCBcclxuICAgIGZvcm1BcnJheVNhdmVCb2R5TmFtZTogc3RyaW5nLCBcclxuICAgIGZvcm1BcnJheVRyYW5zbGF0aW9uS2V5OiBzdHJpbmcsIFxyXG4gICAgcmVxdWlyZWQ6IGJvb2xlYW4gPSBmYWxzZSlcclxuICB7XHJcbiAgICByZXR1cm4gdGhpcy5iYXNlRm9ybVNlcnZpY2UuaW5pdEZvcm1BcnJheTxUPihcclxuICAgICAgcGFyZW50Rm9ybUdyb3VwLCBtb2RlbExpc3QsIG1vZGVsQ29uc3RydWN0b3IsIGZvcm1BcnJheVNhdmVCb2R5TmFtZSwgZm9ybUFycmF5VHJhbnNsYXRpb25LZXksIHJlcXVpcmVkXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlRm9ybUNvbnRyb2xGcm9tVGhlRm9ybUFycmF5KGZvcm1BcnJheTogU3BpZGVybHlGb3JtQXJyYXksIGluZGV4OiBudW1iZXIpIHtcclxuICAgIGlmKGluZGV4ID09IG51bGwpXHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2FuIG5vdCBwYXNzIG51bGwgaW5kZXguJyk7XHJcblxyXG4gICAgZm9ybUFycmF5LnJlbW92ZUF0KGluZGV4KTtcclxuICB9XHJcblxyXG4gIHJlbW92ZUZvcm1Db250cm9sc0Zyb21UaGVGb3JtQXJyYXkoZm9ybUFycmF5OiBTcGlkZXJseUZvcm1BcnJheSwgaW5kZXhlczogbnVtYmVyW10pIHtcclxuICAgIC8vIFNvcnQgaW5kZXhlcyBpbiBkZXNjZW5kaW5nIG9yZGVyIHRvIGF2b2lkIGluZGV4IHNoaWZ0cyB3aGVuIHJlbW92aW5nIGNvbnRyb2xzXHJcbiAgICBjb25zdCBzb3J0ZWRJbmRleGVzID0gaW5kZXhlcy5zb3J0KChhLCBiKSA9PiBiIC0gYSk7XHJcblxyXG4gICAgc29ydGVkSW5kZXhlcy5mb3JFYWNoKGluZGV4ID0+IHtcclxuICAgICAgaWYgKGluZGV4ID49IDAgJiYgaW5kZXggPCBmb3JtQXJyYXkubGVuZ3RoKSB7XHJcbiAgICAgICAgZm9ybUFycmF5LnJlbW92ZUF0KGluZGV4KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBhcmVGb3JtQXJyYXlzVmFsaWQoKTogYm9vbGVhbiB7XHJcbiAgICBpZih0aGlzLmZvcm1Hcm91cC5jb250cm9scyA9PSBudWxsKVxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICBsZXQgaW52YWxpZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIE9iamVjdC5rZXlzKHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgIGNvbnN0IGZvcm1BcnJheSA9IHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2tleV0gYXMgdW5rbm93biBhcyBTcGlkZXJseUZvcm1BcnJheTtcclxuICAgICAgXHJcbiAgICAgIGlmIChmb3JtQXJyYXkgaW5zdGFuY2VvZiBTcGlkZXJseUZvcm1BcnJheSl7XHJcbiAgICAgICAgKGZvcm1BcnJheS5jb250cm9scyBhcyBTcGlkZXJseUZvcm1Hcm91cFtdKS5mb3JFYWNoKGZvcm1Hcm91cCA9PiB7XHJcbiAgICAgICAgICBPYmplY3Qua2V5cyhmb3JtR3JvdXAuY29udHJvbHMpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICAgICAgY29uc3QgZm9ybUNvbnRyb2wgPSBmb3JtR3JvdXAuY29udHJvbHNba2V5XSBhcyBTcGlkZXJseUZvcm1Db250cm9sOyAvLyB0aGlzLmZvcm1BcnJheS5tYXJrQXNEaXJ0eSgpOyAvLyBGVDogRm9yIHNvbWUgcmVhc29uIHRoaXMgZG9lc24ndCB3b3JrXHJcblxyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgKGZvcm1Hcm91cC5jb250cm9sTmFtZXNGcm9tSHRtbC5pbmNsdWRlcyhmb3JtQ29udHJvbC5sYWJlbCkgfHwgZm9ybUFycmF5LmNvbnRyb2xOYW1lc0Zyb21IdG1sLmluY2x1ZGVzKGZvcm1Db250cm9sLmxhYmVsKSkgJiYgXHJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2wuaW52YWxpZFxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICBmb3JtQ29udHJvbC5tYXJrQXNEaXJ0eSgpO1xyXG4gICAgICAgICAgICAgIGludmFsaWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgaWYgKGZvcm1BcnJheS5yZXF1aXJlZCA9PSB0cnVlICYmIGZvcm1BcnJheS5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgaW52YWxpZCA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLndhcm5pbmdNZXNzYWdlKHRoaXMudHJhbnNsb2NvU2VydmljZS50cmFuc2xhdGUoJ0xpc3RDYW5Ob3RCZUVtcHR5JykpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKGludmFsaWQpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgb25CZWZvcmVTYXZlTGlzdCgpe31cclxuICBvbkFmdGVyU2F2ZUxpc3QoKXt9XHJcbiAgb25BZnRlclNhdmVMaXN0UmVxdWVzdCgpe31cclxuXHJcbiAgLy8gRlQ6IFNlbmRpbmcgTGFzdE1lbnVJY29uSW5kZXhDbGlja2VkIGNsYXNzIGJlY2F1c2Ugb2YgcmVmZXJlbmNlIHR5cGVcclxuICBnZXRDcnVkTWVudUZvck9yZGVyZWREYXRhID0gKFxyXG4gICAgZm9ybUFycmF5OiBTcGlkZXJseUZvcm1BcnJheSwgXHJcbiAgICBtb2RlbENvbnN0cnVjdG9yOiBCYXNlRW50aXR5LCBcclxuICAgIGxhc3RNZW51SWNvbkluZGV4Q2xpY2tlZDogTGFzdE1lbnVJY29uSW5kZXhDbGlja2VkLCBcclxuICAgIGFkanVzdEZvcm1BcnJheU1hbnVhbGx5OiBib29sZWFuID0gZmFsc2VcclxuICApOiBNZW51SXRlbVtdID0+IHtcclxuICAgIGxldCBjcnVkTWVudUZvck9yZGVyZWREYXRhOiBNZW51SXRlbVtdID0gW1xyXG4gICAgICAgIHtsYWJlbDogdGhpcy50cmFuc2xvY29TZXJ2aWNlLnRyYW5zbGF0ZSgnUmVtb3ZlJyksIGljb246ICdwaSBwaS1taW51cycsIGNvbW1hbmQ6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMub25CZWZvcmVSZW1vdmUoZm9ybUFycmF5LCBtb2RlbENvbnN0cnVjdG9yLCBsYXN0TWVudUljb25JbmRleENsaWNrZWQuaW5kZXgpO1xyXG4gICAgICAgICAgaWYgKGFkanVzdEZvcm1BcnJheU1hbnVhbGx5ID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICB0aGlzLnJlbW92ZUZvcm1Db250cm9sRnJvbVRoZUZvcm1BcnJheShmb3JtQXJyYXksIGxhc3RNZW51SWNvbkluZGV4Q2xpY2tlZC5pbmRleCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfX0sXHJcbiAgICAgICAge2xhYmVsOiB0aGlzLnRyYW5zbG9jb1NlcnZpY2UudHJhbnNsYXRlKCdBZGRBYm92ZScpLCBpY29uOiAncGkgcGktYXJyb3ctdXAnLCBjb21tYW5kOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLm9uQmVmb3JlQWRkQWJvdmUoZm9ybUFycmF5LCBtb2RlbENvbnN0cnVjdG9yLCBsYXN0TWVudUljb25JbmRleENsaWNrZWQuaW5kZXgpO1xyXG4gICAgICAgICAgaWYgKGFkanVzdEZvcm1BcnJheU1hbnVhbGx5ID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICB0aGlzLmJhc2VGb3JtU2VydmljZS5hZGROZXdGb3JtR3JvdXBUb0Zvcm1BcnJheShcclxuICAgICAgICAgICAgICBmb3JtQXJyYXksIG1vZGVsQ29uc3RydWN0b3IsIGxhc3RNZW51SWNvbkluZGV4Q2xpY2tlZC5pbmRleFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH19LFxyXG4gICAgICAgIHtsYWJlbDogdGhpcy50cmFuc2xvY29TZXJ2aWNlLnRyYW5zbGF0ZSgnQWRkQmVsb3cnKSwgaWNvbjogJ3BpIHBpLWFycm93LWRvd24nLCBjb21tYW5kOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLm9uQmVmb3JlQWRkQmVsb3coZm9ybUFycmF5LCBtb2RlbENvbnN0cnVjdG9yLCBsYXN0TWVudUljb25JbmRleENsaWNrZWQuaW5kZXgpO1xyXG4gICAgICAgICAgaWYgKGFkanVzdEZvcm1BcnJheU1hbnVhbGx5ID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICB0aGlzLmJhc2VGb3JtU2VydmljZS5hZGROZXdGb3JtR3JvdXBUb0Zvcm1BcnJheShcclxuICAgICAgICAgICAgICBmb3JtQXJyYXksIG1vZGVsQ29uc3RydWN0b3IsIGxhc3RNZW51SWNvbkluZGV4Q2xpY2tlZC5pbmRleCArIDFcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9fSxcclxuICAgIF07XHJcblxyXG4gICAgcmV0dXJuIGNydWRNZW51Rm9yT3JkZXJlZERhdGE7XHJcbiAgfVxyXG5cclxuICBvbkJlZm9yZVJlbW92ZSA9IChmb3JtQXJyYXk6IFNwaWRlcmx5Rm9ybUFycmF5LCBtb2RlbENvbnN0cnVjdG9yOiBhbnksIGxhc3RNZW51SWNvbkluZGV4Q2xpY2tlZDogbnVtYmVyKSA9PiB7fVxyXG5cclxuICBvbkJlZm9yZUFkZEFib3ZlID0gKGZvcm1BcnJheTogU3BpZGVybHlGb3JtQXJyYXksIG1vZGVsQ29uc3RydWN0b3I6IGFueSwgbGFzdE1lbnVJY29uSW5kZXhDbGlja2VkOiBudW1iZXIpID0+IHt9XHJcblxyXG4gIG9uQmVmb3JlQWRkQmVsb3cgPSAoZm9ybUFycmF5OiBTcGlkZXJseUZvcm1BcnJheSwgbW9kZWxDb25zdHJ1Y3RvcjogYW55LCBsYXN0TWVudUljb25JbmRleENsaWNrZWQ6IG51bWJlcikgPT4ge31cclxuXHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG59XHJcbiJdfQ==
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { Component, Input } from "@angular/core";
|
|
2
|
+
import { SkeletonModule } from 'primeng/skeleton';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "primeng/skeleton";
|
|
5
|
+
export class CardSkeletonComponent {
|
|
6
|
+
constructor() {
|
|
7
|
+
this.height = 400;
|
|
8
|
+
this.titleHeight = 23;
|
|
9
|
+
this.padding = 21;
|
|
10
|
+
this.titleMarginBottom = 14;
|
|
11
|
+
this.titleMarginTop = 4;
|
|
12
|
+
}
|
|
13
|
+
ngOnInit() {
|
|
14
|
+
this.dataHeight = this.height - (this.titleHeight + this.padding * 2 + this.titleMarginBottom + this.titleMarginTop);
|
|
15
|
+
}
|
|
16
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CardSkeletonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
17
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: CardSkeletonComponent, isStandalone: true, selector: "card-skeleton", inputs: { height: "height" }, ngImport: i0, template: "<div class=\"border-round border-1 surface-border p-4 surface-card\" [style]=\"'height: ' + height + 'px;'\">\r\n <div [style]=\"'margin-bottom:' + titleMarginBottom + 'px; margin-top:' + titleMarginTop + 'px;'\">\r\n <p-skeleton width=\"160px\" [height]=\"titleHeight + 'px'\"></p-skeleton>\r\n </div>\r\n <div [style]=\"'height: ' + dataHeight + 'px;'\">\r\n <p-skeleton width=\"100%\" height=\"100%\"/>\r\n </div>\r\n</div>", dependencies: [{ kind: "ngmodule", type: SkeletonModule }, { kind: "component", type: i1.Skeleton, selector: "p-skeleton", inputs: ["styleClass", "style", "shape", "animation", "borderRadius", "size", "width", "height"] }] }); }
|
|
18
|
+
}
|
|
19
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CardSkeletonComponent, decorators: [{
|
|
20
|
+
type: Component,
|
|
21
|
+
args: [{ selector: 'card-skeleton', standalone: true, imports: [SkeletonModule], template: "<div class=\"border-round border-1 surface-border p-4 surface-card\" [style]=\"'height: ' + height + 'px;'\">\r\n <div [style]=\"'margin-bottom:' + titleMarginBottom + 'px; margin-top:' + titleMarginTop + 'px;'\">\r\n <p-skeleton width=\"160px\" [height]=\"titleHeight + 'px'\"></p-skeleton>\r\n </div>\r\n <div [style]=\"'height: ' + dataHeight + 'px;'\">\r\n <p-skeleton width=\"100%\" height=\"100%\"/>\r\n </div>\r\n</div>" }]
|
|
22
|
+
}], propDecorators: { height: [{
|
|
23
|
+
type: Input
|
|
24
|
+
}] } });
|
|
25
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyZC1za2VsZXRvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zcGlkZXJseS9zcmMvbGliL2NvbXBvbmVudHMvY2FyZC1za2VsZXRvbi9jYXJkLXNrZWxldG9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NwaWRlcmx5L3NyYy9saWIvY29tcG9uZW50cy9jYXJkLXNrZWxldG9uL2NhcmQtc2tlbGV0b24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGtCQUFrQixDQUFDOzs7QUFTbEQsTUFBTSxPQUFPLHFCQUFxQjtJQVBsQztRQVFXLFdBQU0sR0FBVyxHQUFHLENBQUM7UUFDOUIsZ0JBQVcsR0FBVyxFQUFFLENBQUM7UUFFekIsWUFBTyxHQUFXLEVBQUUsQ0FBQztRQUNyQixzQkFBaUIsR0FBVyxFQUFFLENBQUM7UUFDL0IsbUJBQWMsR0FBVyxDQUFDLENBQUM7S0FLNUI7SUFIQyxRQUFRO1FBQ04sSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFBO0lBQ3RILENBQUM7K0dBVlUscUJBQXFCO21HQUFyQixxQkFBcUIsdUdDVmxDLHNjQU9NLDJDRENNLGNBQWM7OzRGQUViLHFCQUFxQjtrQkFQakMsU0FBUzsrQkFDRSxlQUFlLGNBR2IsSUFBSSxXQUNQLENBQUMsY0FBYyxDQUFDOzhCQUdoQixNQUFNO3NCQUFkLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgU2tlbGV0b25Nb2R1bGUgfSBmcm9tICdwcmltZW5nL3NrZWxldG9uJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnY2FyZC1za2VsZXRvbicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2NhcmQtc2tlbGV0b24uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlczogW10sXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbU2tlbGV0b25Nb2R1bGVdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDYXJkU2tlbGV0b25Db21wb25lbnQge1xyXG4gIEBJbnB1dCgpIGhlaWdodDogbnVtYmVyID0gNDAwO1xyXG4gIHRpdGxlSGVpZ2h0OiBudW1iZXIgPSAyMztcclxuICBkYXRhSGVpZ2h0OiBudW1iZXI7XHJcbiAgcGFkZGluZzogbnVtYmVyID0gMjE7XHJcbiAgdGl0bGVNYXJnaW5Cb3R0b206IG51bWJlciA9IDE0O1xyXG4gIHRpdGxlTWFyZ2luVG9wOiBudW1iZXIgPSA0O1xyXG5cclxuICBuZ09uSW5pdCgpe1xyXG4gICAgdGhpcy5kYXRhSGVpZ2h0ID0gdGhpcy5oZWlnaHQgLSAodGhpcy50aXRsZUhlaWdodCArIHRoaXMucGFkZGluZyAqIDIgKyB0aGlzLnRpdGxlTWFyZ2luQm90dG9tICsgdGhpcy50aXRsZU1hcmdpblRvcClcclxuICB9XHJcbn0iLCI8ZGl2IGNsYXNzPVwiYm9yZGVyLXJvdW5kIGJvcmRlci0xIHN1cmZhY2UtYm9yZGVyIHAtNCBzdXJmYWNlLWNhcmRcIiBbc3R5bGVdPVwiJ2hlaWdodDogJyArIGhlaWdodCArICdweDsnXCI+XHJcbiAgICA8ZGl2IFtzdHlsZV09XCInbWFyZ2luLWJvdHRvbTonICsgdGl0bGVNYXJnaW5Cb3R0b20gKyAncHg7IG1hcmdpbi10b3A6JyArIHRpdGxlTWFyZ2luVG9wICsgJ3B4OydcIj5cclxuICAgICAgICA8cC1za2VsZXRvbiB3aWR0aD1cIjE2MHB4XCIgW2hlaWdodF09XCJ0aXRsZUhlaWdodCArICdweCdcIj48L3Atc2tlbGV0b24+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgW3N0eWxlXT1cIidoZWlnaHQ6ICcgKyBkYXRhSGVpZ2h0ICsgJ3B4OydcIj5cclxuICAgICAgICA8cC1za2VsZXRvbiB3aWR0aD1cIjEwMCVcIiBoZWlnaHQ9XCIxMDAlXCIvPlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PiJdfQ==
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Component } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "../../services/config-base.service";
|
|
4
|
+
export class FooterComponent {
|
|
5
|
+
constructor(config) {
|
|
6
|
+
this.config = config;
|
|
7
|
+
this.companyName = this.config.companyName;
|
|
8
|
+
}
|
|
9
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FooterComponent, deps: [{ token: i1.ConfigBaseService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
10
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: FooterComponent, isStandalone: true, selector: "footer", ngImport: i0, template: "<div class=\"layout-footer\">\r\n <span class=\"font-medium ml-2\">{{companyName}}</span>\r\n</div>\r\n" }); }
|
|
11
|
+
}
|
|
12
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FooterComponent, decorators: [{
|
|
13
|
+
type: Component,
|
|
14
|
+
args: [{ selector: 'footer', standalone: true, template: "<div class=\"layout-footer\">\r\n <span class=\"font-medium ml-2\">{{companyName}}</span>\r\n</div>\r\n" }]
|
|
15
|
+
}], ctorParameters: () => [{ type: i1.ConfigBaseService }] });
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9vdGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NwaWRlcmx5L3NyYy9saWIvY29tcG9uZW50cy9mb290ZXIvZm9vdGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NwaWRlcmx5L3NyYy9saWIvY29tcG9uZW50cy9mb290ZXIvZm9vdGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7OztBQVExQyxNQUFNLE9BQU8sZUFBZTtJQUd4QixZQUNZLE1BQXlCO1FBQXpCLFdBQU0sR0FBTixNQUFNLENBQW1CO1FBSHJDLGdCQUFXLEdBQVcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUM7SUFNOUMsQ0FBQzsrR0FQUSxlQUFlO21HQUFmLGVBQWUsa0VDUjVCLDRHQUdBOzs0RkRLYSxlQUFlO2tCQUwzQixTQUFTOytCQUNJLFFBQVEsY0FFTixJQUFJIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbmZpZ0Jhc2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY29uZmlnLWJhc2Uuc2VydmljZSdcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdmb290ZXInLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2Zvb3Rlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdGFuZGFsb25lOiB0cnVlXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGb290ZXJDb21wb25lbnQge1xyXG4gICAgY29tcGFueU5hbWU6IHN0cmluZyA9IHRoaXMuY29uZmlnLmNvbXBhbnlOYW1lO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgY29uZmlnOiBDb25maWdCYXNlU2VydmljZVxyXG4gICAgKSB7IFxyXG5cclxuICAgIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwibGF5b3V0LWZvb3RlclwiPlxyXG4gICAgPHNwYW4gY2xhc3M9XCJmb250LW1lZGl1bSBtbC0yXCI+e3tjb21wYW55TmFtZX19PC9zcGFuPlxyXG48L2Rpdj5cclxuIl19
|