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,124 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { SpiderlyFormArray, SpiderlyFormControl, SpiderlyFormGroup } from '../components/spiderly-form-control/spiderly-form-control';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "./translate-labels-abstract.service";
|
|
5
|
+
import * as i2 from "./validator-abstract.service";
|
|
6
|
+
import * as i3 from "./spiderly-message.service";
|
|
7
|
+
import * as i4 from "@jsverse/transloco";
|
|
8
|
+
export class BaseFormService {
|
|
9
|
+
constructor(translateLabelsService, validatorService, messageService, translocoService) {
|
|
10
|
+
this.translateLabelsService = translateLabelsService;
|
|
11
|
+
this.validatorService = validatorService;
|
|
12
|
+
this.messageService = messageService;
|
|
13
|
+
this.translocoService = translocoService;
|
|
14
|
+
this.addFormGroup = (formGroup, parentFormGroup, modelConstructor, propertyNameInSaveBody, updateOnChangeControls) => {
|
|
15
|
+
if (modelConstructor == null)
|
|
16
|
+
return null;
|
|
17
|
+
if (formGroup == null)
|
|
18
|
+
console.error('FT: You need to instantiate the form group.');
|
|
19
|
+
this.initFormGroup(formGroup, modelConstructor, updateOnChangeControls);
|
|
20
|
+
parentFormGroup.setControl(propertyNameInSaveBody, formGroup); // FT: Use setControl because it will update formGroup if it already exists
|
|
21
|
+
return formGroup;
|
|
22
|
+
};
|
|
23
|
+
this.initFormGroup = (formGroup, modelConstructor, updateOnChangeControls) => {
|
|
24
|
+
if (formGroup == null)
|
|
25
|
+
console.error('FT: You need to instantiate the form group.');
|
|
26
|
+
Object.keys(modelConstructor).forEach((formControlName) => {
|
|
27
|
+
let formControl;
|
|
28
|
+
const formControlValue = modelConstructor[formControlName];
|
|
29
|
+
if (updateOnChangeControls?.includes(formControlName) ||
|
|
30
|
+
(formControlName.endsWith('Id') && formControlName.length > 2)) {
|
|
31
|
+
formControl = new SpiderlyFormControl(formControlValue, { updateOn: 'change' });
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
formControl = new SpiderlyFormControl(formControlValue, { updateOn: 'blur' });
|
|
35
|
+
}
|
|
36
|
+
formControl.label = formControlName;
|
|
37
|
+
formControl.labelForDisplay = this.getTranslatedLabel(formControlName);
|
|
38
|
+
formGroup.setControl(formControlName, formControl); // FT: Use setControl because it will update formControl if it already exists
|
|
39
|
+
this.validatorService.setValidator(formControl, modelConstructor.typeName);
|
|
40
|
+
});
|
|
41
|
+
return formGroup;
|
|
42
|
+
};
|
|
43
|
+
//#region Helpers
|
|
44
|
+
// FT: If you want to call single method
|
|
45
|
+
this.checkFormGroupValidity = (formGroup) => {
|
|
46
|
+
if (formGroup.invalid) {
|
|
47
|
+
Object.keys(formGroup.controls).forEach(key => {
|
|
48
|
+
formGroup.controls[key].markAsDirty(); // this.formGroup.markAsDirty(); // FT: For some reason this doesnt work
|
|
49
|
+
});
|
|
50
|
+
this.showInvalidFieldsMessage();
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
return true;
|
|
54
|
+
};
|
|
55
|
+
this.showInvalidFieldsMessage = () => {
|
|
56
|
+
this.messageService.warningMessage(this.translocoService.translate('YouHaveSomeInvalidFieldsDescription'), this.translocoService.translate('YouHaveSomeInvalidFieldsTitle'));
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
getTranslatedLabel(formControlName) {
|
|
60
|
+
if (formControlName.endsWith('Id') && formControlName.length > 2) {
|
|
61
|
+
formControlName = formControlName.substring(0, formControlName.length - 2);
|
|
62
|
+
}
|
|
63
|
+
else if (formControlName.endsWith('DisplayName')) {
|
|
64
|
+
formControlName = formControlName.replace('DisplayName', '');
|
|
65
|
+
}
|
|
66
|
+
return this.translateLabelsService.translate(formControlName);
|
|
67
|
+
}
|
|
68
|
+
getFormArrayGroups(formArray) {
|
|
69
|
+
return formArray.controls;
|
|
70
|
+
}
|
|
71
|
+
addNewFormGroupToFormArray(formArray, modelConstructor, index) {
|
|
72
|
+
let helperFormGroup = new SpiderlyFormGroup({});
|
|
73
|
+
this.initFormGroup(helperFormGroup, modelConstructor);
|
|
74
|
+
if (index == null) {
|
|
75
|
+
formArray.push(helperFormGroup);
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
formArray.insert(index, helperFormGroup);
|
|
79
|
+
}
|
|
80
|
+
return helperFormGroup;
|
|
81
|
+
}
|
|
82
|
+
initFormArray(parentFormGroup, modelList, modelConstructor, formArraySaveBodyName, formArrayTranslationKey, required = false) {
|
|
83
|
+
if (modelList == null)
|
|
84
|
+
return null;
|
|
85
|
+
let formArray = new SpiderlyFormArray([]);
|
|
86
|
+
formArray.required = required;
|
|
87
|
+
formArray.modelConstructor = modelConstructor;
|
|
88
|
+
formArray.translationKey = formArrayTranslationKey;
|
|
89
|
+
modelList.forEach(model => {
|
|
90
|
+
Object.assign(modelConstructor, model);
|
|
91
|
+
let helperFormGroup = new SpiderlyFormGroup({});
|
|
92
|
+
this.initFormGroup(helperFormGroup, formArray.modelConstructor);
|
|
93
|
+
formArray.push(helperFormGroup);
|
|
94
|
+
});
|
|
95
|
+
parentFormGroup.setControl(formArraySaveBodyName, formArray); // FT: Use setControl because it will update formArray if it already exists
|
|
96
|
+
return formArray;
|
|
97
|
+
}
|
|
98
|
+
disableAllFormControls(formArray) {
|
|
99
|
+
formArray.controls.forEach((segmentationItemFormGroup) => {
|
|
100
|
+
Object.keys(segmentationItemFormGroup.controls).forEach(key => {
|
|
101
|
+
segmentationItemFormGroup.controls[key].disable();
|
|
102
|
+
});
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
enableAllFormControls(formArray) {
|
|
106
|
+
formArray.controls.forEach((segmentationItemFormGroup) => {
|
|
107
|
+
Object.keys(segmentationItemFormGroup.controls).forEach(key => {
|
|
108
|
+
segmentationItemFormGroup.controls[key].enable();
|
|
109
|
+
});
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
generateNewNegativeId(formArray) {
|
|
113
|
+
return -formArray.getRawValue().filter(x => x.id < 0).length - 1;
|
|
114
|
+
}
|
|
115
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: BaseFormService, deps: [{ token: i1.TranslateLabelsAbstractService }, { token: i2.ValidatorAbstractService }, { token: i3.SpiderlyMessageService }, { token: i4.TranslocoService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
116
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: BaseFormService, providedIn: 'root' }); }
|
|
117
|
+
}
|
|
118
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: BaseFormService, decorators: [{
|
|
119
|
+
type: Injectable,
|
|
120
|
+
args: [{
|
|
121
|
+
providedIn: 'root',
|
|
122
|
+
}]
|
|
123
|
+
}], ctorParameters: () => [{ type: i1.TranslateLabelsAbstractService }, { type: i2.ValidatorAbstractService }, { type: i3.SpiderlyMessageService }, { type: i4.TranslocoService }] });
|
|
124
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1mb3JtLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zcGlkZXJseS9zcmMvbGliL3NlcnZpY2VzL2Jhc2UtZm9ybS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLG1CQUFtQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sMkRBQTJELENBQUM7Ozs7OztBQVN0SSxNQUFNLE9BQU8sZUFBZTtJQUMxQixZQUNVLHNCQUFzRCxFQUN0RCxnQkFBMEMsRUFDMUMsY0FBc0MsRUFDdEMsZ0JBQWtDO1FBSGxDLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBZ0M7UUFDdEQscUJBQWdCLEdBQWhCLGdCQUFnQixDQUEwQjtRQUMxQyxtQkFBYyxHQUFkLGNBQWMsQ0FBd0I7UUFDdEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUc1QyxpQkFBWSxHQUFHLENBQ2IsU0FBK0IsRUFDL0IsZUFBa0MsRUFDbEMsZ0JBQXFCLEVBQ3JCLHNCQUE4QixFQUM5QixzQkFBb0MsRUFDcEMsRUFBRTtZQUNGLElBQUksZ0JBQWdCLElBQUksSUFBSTtnQkFDMUIsT0FBTyxJQUFJLENBQUM7WUFFZCxJQUFJLFNBQVMsSUFBSSxJQUFJO2dCQUNuQixPQUFPLENBQUMsS0FBSyxDQUFDLDZDQUE2QyxDQUFDLENBQUE7WUFFOUQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztZQUN4RSxlQUFlLENBQUMsVUFBVSxDQUFDLHNCQUFzQixFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsMkVBQTJFO1lBRTFJLE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUMsQ0FBQTtRQUVELGtCQUFhLEdBQUcsQ0FDZCxTQUErQixFQUMvQixnQkFBZ0MsRUFDaEMsc0JBQW9DLEVBQ3BDLEVBQUU7WUFDRixJQUFJLFNBQVMsSUFBSSxJQUFJO2dCQUNuQixPQUFPLENBQUMsS0FBSyxDQUFDLDZDQUE2QyxDQUFDLENBQUE7WUFFOUQsTUFBTSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLGVBQWUsRUFBRSxFQUFFO2dCQUN4RCxJQUFJLFdBQWdDLENBQUM7Z0JBRXJDLE1BQU0sZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUMsZUFBZSxDQUFDLENBQUM7Z0JBRTNELElBQUksc0JBQXNCLEVBQUUsUUFBUSxDQUFDLGVBQTBCLENBQUM7b0JBQzlELENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxlQUFlLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUMvRDtvQkFDQyxXQUFXLEdBQUcsSUFBSSxtQkFBbUIsQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO2lCQUNqRjtxQkFDRztvQkFDRixXQUFXLEdBQUcsSUFBSSxtQkFBbUIsQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO2lCQUMvRTtnQkFFRCxXQUFXLENBQUMsS0FBSyxHQUFHLGVBQWUsQ0FBQztnQkFDcEMsV0FBVyxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsZUFBZSxDQUFDLENBQUM7Z0JBRXZFLFNBQVMsQ0FBQyxVQUFVLENBQUMsZUFBZSxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsNkVBQTZFO2dCQUVqSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM3RSxDQUFDLENBQUMsQ0FBQztZQUVILE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUMsQ0FBQTtRQThFRCxpQkFBaUI7UUFFakIsd0NBQXdDO1FBQ3hDLDJCQUFzQixHQUFHLENBQUksU0FBK0IsRUFBVyxFQUFFO1lBQ3ZFLElBQUksU0FBUyxDQUFDLE9BQU8sRUFBRTtnQkFDckIsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO29CQUM1QyxTQUFTLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsd0VBQXdFO2dCQUNqSCxDQUFDLENBQUMsQ0FBQztnQkFFSCxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztnQkFFaEMsT0FBTyxLQUFLLENBQUM7YUFDZDtZQUVELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQyxDQUFBO1FBRUQsNkJBQXdCLEdBQUcsR0FBRyxFQUFFO1lBQzlCLElBQUksQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUNoQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLHFDQUFxQyxDQUFDLEVBQ3RFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsK0JBQStCLENBQUMsQ0FDakUsQ0FBQztRQUNKLENBQUMsQ0FBQTtJQXhKRSxDQUFDO0lBc0RKLGtCQUFrQixDQUFDLGVBQXVCO1FBQ3hDLElBQUksZUFBZSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxlQUFlLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNoRSxlQUFlLEdBQUcsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsZUFBZSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztTQUM1RTthQUNJLElBQUksZUFBZSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsRUFBRTtZQUNoRCxlQUFlLEdBQUcsZUFBZSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDLENBQUM7U0FDOUQ7UUFFRCxPQUFPLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVELGtCQUFrQixDQUFJLFNBQStCO1FBQ25ELE9BQU8sU0FBUyxDQUFDLFFBQWtDLENBQUE7SUFDckQsQ0FBQztJQUVELDBCQUEwQixDQUN4QixTQUErQixFQUMvQixnQkFBZ0MsRUFDaEMsS0FBYTtRQUViLElBQUksZUFBZSxHQUFHLElBQUksaUJBQWlCLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUV0RCxJQUFJLEtBQUssSUFBSSxJQUFJLEVBQUU7WUFDakIsU0FBUyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztTQUNqQzthQUFJO1lBQ0gsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsZUFBZSxDQUFDLENBQUM7U0FDMUM7UUFFRCxPQUFPLGVBQWUsQ0FBQztJQUN6QixDQUFDO0lBRUQsYUFBYSxDQUNYLGVBQWtDLEVBQ2xDLFNBQTZCLEVBQzdCLGdCQUFnQyxFQUNoQyxxQkFBNkIsRUFDN0IsdUJBQStCLEVBQy9CLFdBQW9CLEtBQUs7UUFFekIsSUFBSSxTQUFTLElBQUksSUFBSTtZQUNuQixPQUFPLElBQUksQ0FBQztRQUVkLElBQUksU0FBUyxHQUFHLElBQUksaUJBQWlCLENBQUksRUFBRSxDQUFDLENBQUM7UUFDN0MsU0FBUyxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDOUIsU0FBUyxDQUFDLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDO1FBQzlDLFNBQVMsQ0FBQyxjQUFjLEdBQUcsdUJBQXVCLENBQUM7UUFFbkQsU0FBUyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUN4QixNQUFNLENBQUMsTUFBTSxDQUFDLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3ZDLElBQUksZUFBZSxHQUFzQixJQUFJLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ25FLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxFQUFFLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ2hFLFNBQVMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDbEMsQ0FBQyxDQUFDLENBQUM7UUFFSCxlQUFlLENBQUMsVUFBVSxDQUFDLHFCQUFxQixFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsMkVBQTJFO1FBRXpJLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRCxzQkFBc0IsQ0FBSSxTQUErQjtRQUN2RCxTQUFTLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLHlCQUE0QyxFQUFFLEVBQUU7WUFDeEUsTUFBTSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQzFELHlCQUF5QixDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN0RCxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELHFCQUFxQixDQUFJLFNBQStCO1FBQ3RELFNBQVMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMseUJBQTRDLEVBQUUsRUFBRTtZQUN4RSxNQUFNLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDMUQseUJBQXlCLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3JELENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBMEJELHFCQUFxQixDQUF1QixTQUErQjtRQUN6RSxPQUFPLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNuRSxDQUFDOytHQWxLVSxlQUFlO21IQUFmLGVBQWUsY0FGZCxNQUFNOzs0RkFFUCxlQUFlO2tCQUgzQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRyYW5zbG9jb1NlcnZpY2UgfSBmcm9tICdAanN2ZXJzZS90cmFuc2xvY28nO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFNwaWRlcmx5Rm9ybUFycmF5LCBTcGlkZXJseUZvcm1Db250cm9sLCBTcGlkZXJseUZvcm1Hcm91cCB9IGZyb20gJy4uL2NvbXBvbmVudHMvc3BpZGVybHktZm9ybS1jb250cm9sL3NwaWRlcmx5LWZvcm0tY29udHJvbCc7XHJcbmltcG9ydCB7IEJhc2VFbnRpdHkgfSBmcm9tICcuLi9lbnRpdGllcy9iYXNlLWVudGl0eSc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZUxhYmVsc0Fic3RyYWN0U2VydmljZSB9IGZyb20gJy4vdHJhbnNsYXRlLWxhYmVscy1hYnN0cmFjdC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVmFsaWRhdG9yQWJzdHJhY3RTZXJ2aWNlIH0gZnJvbSAnLi92YWxpZGF0b3ItYWJzdHJhY3Quc2VydmljZSc7XHJcbmltcG9ydCB7IFNwaWRlcmx5TWVzc2FnZVNlcnZpY2UgfSBmcm9tICcuL3NwaWRlcmx5LW1lc3NhZ2Uuc2VydmljZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQmFzZUZvcm1TZXJ2aWNlIHtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgdHJhbnNsYXRlTGFiZWxzU2VydmljZTogVHJhbnNsYXRlTGFiZWxzQWJzdHJhY3RTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB2YWxpZGF0b3JTZXJ2aWNlOiBWYWxpZGF0b3JBYnN0cmFjdFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG1lc3NhZ2VTZXJ2aWNlOiBTcGlkZXJseU1lc3NhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB0cmFuc2xvY29TZXJ2aWNlOiBUcmFuc2xvY29TZXJ2aWNlXHJcbiAgKSB7fVxyXG5cclxuICBhZGRGb3JtR3JvdXAgPSA8VD4oXHJcbiAgICBmb3JtR3JvdXA6IFNwaWRlcmx5Rm9ybUdyb3VwPFQ+LCBcclxuICAgIHBhcmVudEZvcm1Hcm91cDogU3BpZGVybHlGb3JtR3JvdXAsIFxyXG4gICAgbW9kZWxDb25zdHJ1Y3RvcjogYW55LCBcclxuICAgIHByb3BlcnR5TmFtZUluU2F2ZUJvZHk6IHN0cmluZyxcclxuICAgIHVwZGF0ZU9uQ2hhbmdlQ29udHJvbHM/OiAoa2V5b2YgVClbXVxyXG4gICkgPT4ge1xyXG4gICAgaWYgKG1vZGVsQ29uc3RydWN0b3IgPT0gbnVsbClcclxuICAgICAgcmV0dXJuIG51bGw7XHJcblxyXG4gICAgaWYgKGZvcm1Hcm91cCA9PSBudWxsKVxyXG4gICAgICBjb25zb2xlLmVycm9yKCdGVDogWW91IG5lZWQgdG8gaW5zdGFudGlhdGUgdGhlIGZvcm0gZ3JvdXAuJylcclxuXHJcbiAgICB0aGlzLmluaXRGb3JtR3JvdXAoZm9ybUdyb3VwLCBtb2RlbENvbnN0cnVjdG9yLCB1cGRhdGVPbkNoYW5nZUNvbnRyb2xzKTtcclxuICAgIHBhcmVudEZvcm1Hcm91cC5zZXRDb250cm9sKHByb3BlcnR5TmFtZUluU2F2ZUJvZHksIGZvcm1Hcm91cCk7IC8vIEZUOiBVc2Ugc2V0Q29udHJvbCBiZWNhdXNlIGl0IHdpbGwgdXBkYXRlIGZvcm1Hcm91cCBpZiBpdCBhbHJlYWR5IGV4aXN0c1xyXG5cclxuICAgIHJldHVybiBmb3JtR3JvdXA7XHJcbiAgfVxyXG5cclxuICBpbml0Rm9ybUdyb3VwID0gPFQ+KFxyXG4gICAgZm9ybUdyb3VwOiBTcGlkZXJseUZvcm1Hcm91cDxUPiwgXHJcbiAgICBtb2RlbENvbnN0cnVjdG9yOiBUICYgQmFzZUVudGl0eSwgXHJcbiAgICB1cGRhdGVPbkNoYW5nZUNvbnRyb2xzPzogKGtleW9mIFQpW11cclxuICApID0+IHtcclxuICAgIGlmIChmb3JtR3JvdXAgPT0gbnVsbClcclxuICAgICAgY29uc29sZS5lcnJvcignRlQ6IFlvdSBuZWVkIHRvIGluc3RhbnRpYXRlIHRoZSBmb3JtIGdyb3VwLicpXHJcblxyXG4gICAgT2JqZWN0LmtleXMobW9kZWxDb25zdHJ1Y3RvcikuZm9yRWFjaCgoZm9ybUNvbnRyb2xOYW1lKSA9PiB7XHJcbiAgICAgIGxldCBmb3JtQ29udHJvbDogU3BpZGVybHlGb3JtQ29udHJvbDtcclxuICAgICAgXHJcbiAgICAgIGNvbnN0IGZvcm1Db250cm9sVmFsdWUgPSBtb2RlbENvbnN0cnVjdG9yW2Zvcm1Db250cm9sTmFtZV07XHJcbiAgICAgIFxyXG4gICAgICBpZiAodXBkYXRlT25DaGFuZ2VDb250cm9scz8uaW5jbHVkZXMoZm9ybUNvbnRyb2xOYW1lIGFzIGtleW9mIFQpIHx8XHJcbiAgICAgICAgKGZvcm1Db250cm9sTmFtZS5lbmRzV2l0aCgnSWQnKSAmJiBmb3JtQ29udHJvbE5hbWUubGVuZ3RoID4gMilcclxuICAgICAgKXtcclxuICAgICAgICBmb3JtQ29udHJvbCA9IG5ldyBTcGlkZXJseUZvcm1Db250cm9sKGZvcm1Db250cm9sVmFsdWUsIHsgdXBkYXRlT246ICdjaGFuZ2UnIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2V7XHJcbiAgICAgICAgZm9ybUNvbnRyb2wgPSBuZXcgU3BpZGVybHlGb3JtQ29udHJvbChmb3JtQ29udHJvbFZhbHVlLCB7IHVwZGF0ZU9uOiAnYmx1cicgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGZvcm1Db250cm9sLmxhYmVsID0gZm9ybUNvbnRyb2xOYW1lO1xyXG4gICAgICBmb3JtQ29udHJvbC5sYWJlbEZvckRpc3BsYXkgPSB0aGlzLmdldFRyYW5zbGF0ZWRMYWJlbChmb3JtQ29udHJvbE5hbWUpO1xyXG5cclxuICAgICAgZm9ybUdyb3VwLnNldENvbnRyb2woZm9ybUNvbnRyb2xOYW1lLCBmb3JtQ29udHJvbCk7IC8vIEZUOiBVc2Ugc2V0Q29udHJvbCBiZWNhdXNlIGl0IHdpbGwgdXBkYXRlIGZvcm1Db250cm9sIGlmIGl0IGFscmVhZHkgZXhpc3RzXHJcblxyXG4gICAgICB0aGlzLnZhbGlkYXRvclNlcnZpY2Uuc2V0VmFsaWRhdG9yKGZvcm1Db250cm9sLCBtb2RlbENvbnN0cnVjdG9yLnR5cGVOYW1lKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBmb3JtR3JvdXA7XHJcbiAgfVxyXG5cclxuICBnZXRUcmFuc2xhdGVkTGFiZWwoZm9ybUNvbnRyb2xOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgaWYgKGZvcm1Db250cm9sTmFtZS5lbmRzV2l0aCgnSWQnKSAmJiBmb3JtQ29udHJvbE5hbWUubGVuZ3RoID4gMikge1xyXG4gICAgICBmb3JtQ29udHJvbE5hbWUgPSBmb3JtQ29udHJvbE5hbWUuc3Vic3RyaW5nKDAsIGZvcm1Db250cm9sTmFtZS5sZW5ndGggLSAyKTtcclxuICAgIH0gXHJcbiAgICBlbHNlIGlmIChmb3JtQ29udHJvbE5hbWUuZW5kc1dpdGgoJ0Rpc3BsYXlOYW1lJykpIHtcclxuICAgICAgZm9ybUNvbnRyb2xOYW1lID0gZm9ybUNvbnRyb2xOYW1lLnJlcGxhY2UoJ0Rpc3BsYXlOYW1lJywgJycpO1xyXG4gICAgfSBcclxuXHJcbiAgICByZXR1cm4gdGhpcy50cmFuc2xhdGVMYWJlbHNTZXJ2aWNlLnRyYW5zbGF0ZShmb3JtQ29udHJvbE5hbWUpO1xyXG4gIH1cclxuXHJcbiAgZ2V0Rm9ybUFycmF5R3JvdXBzPFQ+KGZvcm1BcnJheTogU3BpZGVybHlGb3JtQXJyYXk8VD4pOiBTcGlkZXJseUZvcm1Hcm91cDxUPltde1xyXG4gICAgcmV0dXJuIGZvcm1BcnJheS5jb250cm9scyBhcyBTcGlkZXJseUZvcm1Hcm91cDxUPltdXHJcbiAgfVxyXG5cclxuICBhZGROZXdGb3JtR3JvdXBUb0Zvcm1BcnJheTxUPihcclxuICAgIGZvcm1BcnJheTogU3BpZGVybHlGb3JtQXJyYXk8VD4sIFxyXG4gICAgbW9kZWxDb25zdHJ1Y3RvcjogVCAmIEJhc2VFbnRpdHksXHJcbiAgICBpbmRleDogbnVtYmVyLFxyXG4gICkgOiBTcGlkZXJseUZvcm1Hcm91cCB7XHJcbiAgICBsZXQgaGVscGVyRm9ybUdyb3VwID0gbmV3IFNwaWRlcmx5Rm9ybUdyb3VwKHt9KTtcclxuICAgIHRoaXMuaW5pdEZvcm1Hcm91cChoZWxwZXJGb3JtR3JvdXAsIG1vZGVsQ29uc3RydWN0b3IpO1xyXG4gICAgXHJcbiAgICBpZiAoaW5kZXggPT0gbnVsbCkge1xyXG4gICAgICBmb3JtQXJyYXkucHVzaChoZWxwZXJGb3JtR3JvdXApO1xyXG4gICAgfWVsc2V7XHJcbiAgICAgIGZvcm1BcnJheS5pbnNlcnQoaW5kZXgsIGhlbHBlckZvcm1Hcm91cCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGhlbHBlckZvcm1Hcm91cDtcclxuICB9XHJcblxyXG4gIGluaXRGb3JtQXJyYXk8VD4oXHJcbiAgICBwYXJlbnRGb3JtR3JvdXA6IFNwaWRlcmx5Rm9ybUdyb3VwLCBcclxuICAgIG1vZGVsTGlzdDogKFQgJiBCYXNlRW50aXR5KVtdLCBcclxuICAgIG1vZGVsQ29uc3RydWN0b3I6IFQgJiBCYXNlRW50aXR5LCBcclxuICAgIGZvcm1BcnJheVNhdmVCb2R5TmFtZTogc3RyaW5nLCBcclxuICAgIGZvcm1BcnJheVRyYW5zbGF0aW9uS2V5OiBzdHJpbmcsIFxyXG4gICAgcmVxdWlyZWQ6IGJvb2xlYW4gPSBmYWxzZSlcclxuICB7XHJcbiAgICBpZiAobW9kZWxMaXN0ID09IG51bGwpXHJcbiAgICAgIHJldHVybiBudWxsO1xyXG5cclxuICAgIGxldCBmb3JtQXJyYXkgPSBuZXcgU3BpZGVybHlGb3JtQXJyYXk8VD4oW10pO1xyXG4gICAgZm9ybUFycmF5LnJlcXVpcmVkID0gcmVxdWlyZWQ7XHJcbiAgICBmb3JtQXJyYXkubW9kZWxDb25zdHJ1Y3RvciA9IG1vZGVsQ29uc3RydWN0b3I7XHJcbiAgICBmb3JtQXJyYXkudHJhbnNsYXRpb25LZXkgPSBmb3JtQXJyYXlUcmFuc2xhdGlvbktleTtcclxuXHJcbiAgICBtb2RlbExpc3QuZm9yRWFjaChtb2RlbCA9PiB7XHJcbiAgICAgIE9iamVjdC5hc3NpZ24obW9kZWxDb25zdHJ1Y3RvciwgbW9kZWwpO1xyXG4gICAgICBsZXQgaGVscGVyRm9ybUdyb3VwOiBTcGlkZXJseUZvcm1Hcm91cCA9IG5ldyBTcGlkZXJseUZvcm1Hcm91cCh7fSk7XHJcbiAgICAgIHRoaXMuaW5pdEZvcm1Hcm91cChoZWxwZXJGb3JtR3JvdXAsIGZvcm1BcnJheS5tb2RlbENvbnN0cnVjdG9yKTtcclxuICAgICAgZm9ybUFycmF5LnB1c2goaGVscGVyRm9ybUdyb3VwKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHBhcmVudEZvcm1Hcm91cC5zZXRDb250cm9sKGZvcm1BcnJheVNhdmVCb2R5TmFtZSwgZm9ybUFycmF5KTsgLy8gRlQ6IFVzZSBzZXRDb250cm9sIGJlY2F1c2UgaXQgd2lsbCB1cGRhdGUgZm9ybUFycmF5IGlmIGl0IGFscmVhZHkgZXhpc3RzXHJcblxyXG4gICAgcmV0dXJuIGZvcm1BcnJheTtcclxuICB9XHJcblxyXG4gIGRpc2FibGVBbGxGb3JtQ29udHJvbHM8VD4oZm9ybUFycmF5OiBTcGlkZXJseUZvcm1BcnJheTxUPil7XHJcbiAgICBmb3JtQXJyYXkuY29udHJvbHMuZm9yRWFjaCgoc2VnbWVudGF0aW9uSXRlbUZvcm1Hcm91cDogU3BpZGVybHlGb3JtR3JvdXApID0+IHtcclxuICAgICAgICBPYmplY3Qua2V5cyhzZWdtZW50YXRpb25JdGVtRm9ybUdyb3VwLmNvbnRyb2xzKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgICAgIHNlZ21lbnRhdGlvbkl0ZW1Gb3JtR3JvdXAuY29udHJvbHNba2V5XS5kaXNhYmxlKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGVuYWJsZUFsbEZvcm1Db250cm9sczxUPihmb3JtQXJyYXk6IFNwaWRlcmx5Rm9ybUFycmF5PFQ+KXtcclxuICAgIGZvcm1BcnJheS5jb250cm9scy5mb3JFYWNoKChzZWdtZW50YXRpb25JdGVtRm9ybUdyb3VwOiBTcGlkZXJseUZvcm1Hcm91cCkgPT4ge1xyXG4gICAgICAgIE9iamVjdC5rZXlzKHNlZ21lbnRhdGlvbkl0ZW1Gb3JtR3JvdXAuY29udHJvbHMpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICAgICAgc2VnbWVudGF0aW9uSXRlbUZvcm1Hcm91cC5jb250cm9sc1trZXldLmVuYWJsZSgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLyNyZWdpb24gSGVscGVyc1xyXG5cclxuICAvLyBGVDogSWYgeW91IHdhbnQgdG8gY2FsbCBzaW5nbGUgbWV0aG9kXHJcbiAgY2hlY2tGb3JtR3JvdXBWYWxpZGl0eSA9IDxUPihmb3JtR3JvdXA6IFNwaWRlcmx5Rm9ybUdyb3VwPFQ+KTogYm9vbGVhbiA9PiB7XHJcbiAgICBpZiAoZm9ybUdyb3VwLmludmFsaWQpIHtcclxuICAgICAgT2JqZWN0LmtleXMoZm9ybUdyb3VwLmNvbnRyb2xzKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2tleV0ubWFya0FzRGlydHkoKTsgLy8gdGhpcy5mb3JtR3JvdXAubWFya0FzRGlydHkoKTsgLy8gRlQ6IEZvciBzb21lIHJlYXNvbiB0aGlzIGRvZXNudCB3b3JrXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgdGhpcy5zaG93SW52YWxpZEZpZWxkc01lc3NhZ2UoKTtcclxuXHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBzaG93SW52YWxpZEZpZWxkc01lc3NhZ2UgPSAoKSA9PiB7XHJcbiAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLndhcm5pbmdNZXNzYWdlKFxyXG4gICAgICB0aGlzLnRyYW5zbG9jb1NlcnZpY2UudHJhbnNsYXRlKCdZb3VIYXZlU29tZUludmFsaWRGaWVsZHNEZXNjcmlwdGlvbicpLFxyXG4gICAgICB0aGlzLnRyYW5zbG9jb1NlcnZpY2UudHJhbnNsYXRlKCdZb3VIYXZlU29tZUludmFsaWRGaWVsZHNUaXRsZScpLCBcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBnZW5lcmF0ZU5ld05lZ2F0aXZlSWQ8VCBleHRlbmRzIEJhc2VFbnRpdHk+KGZvcm1BcnJheTogU3BpZGVybHlGb3JtQXJyYXk8VD4pe1xyXG4gICAgcmV0dXJuIC1mb3JtQXJyYXkuZ2V0UmF3VmFsdWUoKS5maWx0ZXIoeCA9PiB4LmlkIDwgMCkubGVuZ3RoIC0gMTtcclxuICB9XHJcblxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxufVxyXG4iXX0=
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { HttpHeaders, HttpParams } from "@angular/common/http";
|
|
2
|
+
import { Injectable } from "@angular/core";
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export class ConfigBaseService {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.production = false;
|
|
7
|
+
this.frontendUrl = 'http://localhost:4200';
|
|
8
|
+
this.companyName = 'Company Name';
|
|
9
|
+
this.primaryColor = '#111b2c';
|
|
10
|
+
this.googleAuth = true;
|
|
11
|
+
this.usersCanRegister = true;
|
|
12
|
+
/* URLs */
|
|
13
|
+
this.loginSlug = 'login';
|
|
14
|
+
/* Local storage */
|
|
15
|
+
this.accessTokenKey = 'access_token';
|
|
16
|
+
this.refreshTokenKey = 'refresh_token';
|
|
17
|
+
this.browserIdKey = 'browser_id';
|
|
18
|
+
this.httpOptions = {};
|
|
19
|
+
this.httpSkipSpinnerOptions = {
|
|
20
|
+
headers: new HttpHeaders({ 'Content-Type': 'application/json' }),
|
|
21
|
+
params: new HttpParams().set('X-Skip-Spinner', 'true')
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ConfigBaseService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
25
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ConfigBaseService, providedIn: 'root' }); }
|
|
26
|
+
}
|
|
27
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ConfigBaseService, decorators: [{
|
|
28
|
+
type: Injectable,
|
|
29
|
+
args: [{
|
|
30
|
+
providedIn: 'root'
|
|
31
|
+
}]
|
|
32
|
+
}], ctorParameters: () => [] });
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLWJhc2Uuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NwaWRlcmx5L3NyYy9saWIvc2VydmljZXMvY29uZmlnLWJhc2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBSzNDLE1BQU0sT0FBTyxpQkFBaUI7SUEwQjFCO1FBeEJBLGVBQVUsR0FBRyxLQUFLLENBQUM7UUFFbkIsZ0JBQVcsR0FBRyx1QkFBdUIsQ0FBQztRQUV0QyxnQkFBVyxHQUFHLGNBQWMsQ0FBQztRQUM3QixpQkFBWSxHQUFHLFNBQVMsQ0FBQztRQUV6QixlQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLHFCQUFnQixHQUFHLElBQUksQ0FBQztRQUV4QixVQUFVO1FBQ1YsY0FBUyxHQUFHLE9BQU8sQ0FBQztRQUVwQixtQkFBbUI7UUFDbkIsbUJBQWMsR0FBRyxjQUFjLENBQUM7UUFDaEMsb0JBQWUsR0FBRyxlQUFlLENBQUM7UUFDbEMsaUJBQVksR0FBRyxZQUFZLENBQUM7UUFFNUIsZ0JBQVcsR0FBRyxFQUFFLENBQUM7UUFDakIsMkJBQXNCLEdBQUc7WUFDckIsT0FBTyxFQUFFLElBQUksV0FBVyxDQUFDLEVBQUUsY0FBYyxFQUFFLGtCQUFrQixFQUFFLENBQUM7WUFDaEUsTUFBTSxFQUFFLElBQUksVUFBVSxFQUFFLENBQUMsR0FBRyxDQUFDLGdCQUFnQixFQUFFLE1BQU0sQ0FBQztTQUN6RCxDQUFDO0lBSUYsQ0FBQzsrR0E1QlEsaUJBQWlCO21IQUFqQixpQkFBaUIsY0FGZCxNQUFNOzs0RkFFVCxpQkFBaUI7a0JBSDdCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cEhlYWRlcnMsIEh0dHBQYXJhbXMgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uL2h0dHBcIjtcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIENvbmZpZ0Jhc2VTZXJ2aWNlXHJcbntcclxuICAgIHByb2R1Y3Rpb24gPSBmYWxzZTtcclxuICAgIGFwaVVybDogc3RyaW5nO1xyXG4gICAgZnJvbnRlbmRVcmwgPSAnaHR0cDovL2xvY2FsaG9zdDo0MjAwJztcclxuICAgIGdvb2dsZUNsaWVudElkOiBzdHJpbmc7XHJcbiAgICBjb21wYW55TmFtZSA9ICdDb21wYW55IE5hbWUnO1xyXG4gICAgcHJpbWFyeUNvbG9yID0gJyMxMTFiMmMnO1xyXG4gICAgXHJcbiAgICBnb29nbGVBdXRoID0gdHJ1ZTtcclxuICAgIHVzZXJzQ2FuUmVnaXN0ZXIgPSB0cnVlO1xyXG5cclxuICAgIC8qIFVSTHMgKi9cclxuICAgIGxvZ2luU2x1ZyA9ICdsb2dpbic7XHJcblxyXG4gICAgLyogTG9jYWwgc3RvcmFnZSAqL1xyXG4gICAgYWNjZXNzVG9rZW5LZXkgPSAnYWNjZXNzX3Rva2VuJztcclxuICAgIHJlZnJlc2hUb2tlbktleSA9ICdyZWZyZXNoX3Rva2VuJztcclxuICAgIGJyb3dzZXJJZEtleSA9ICdicm93c2VyX2lkJztcclxuXHJcbiAgICBodHRwT3B0aW9ucyA9IHt9O1xyXG4gICAgaHR0cFNraXBTcGlubmVyT3B0aW9ucyA9IHtcclxuICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0pLFxyXG4gICAgICAgIHBhcmFtczogbmV3IEh0dHBQYXJhbXMoKS5zZXQoJ1gtU2tpcC1TcGlubmVyJywgJ3RydWUnKVxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICkge1xyXG4gICAgfVxyXG59Il19
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
import { map } from 'rxjs';
|
|
2
|
+
import * as FileSaver from 'file-saver';
|
|
3
|
+
// Helper function for PrecisionScale validation (to be added in the TypeScript output):
|
|
4
|
+
export function validatePrecisionScale(value, precision, scale, ignoreTrailingZeros) {
|
|
5
|
+
if (typeof value !== 'number')
|
|
6
|
+
return false;
|
|
7
|
+
const [integerPart, decimalPart] = value.toString().split('.');
|
|
8
|
+
if (integerPart.length > precision - scale)
|
|
9
|
+
return false;
|
|
10
|
+
if (decimalPart && decimalPart.length > scale)
|
|
11
|
+
return false;
|
|
12
|
+
if (!ignoreTrailingZeros && decimalPart && decimalPart.replace(/0+$/, '').length > scale)
|
|
13
|
+
return false;
|
|
14
|
+
return true;
|
|
15
|
+
}
|
|
16
|
+
export function getMimeTypeForFileName(fileName) {
|
|
17
|
+
const mimeTypes = {
|
|
18
|
+
'.jpg': 'image/jpeg',
|
|
19
|
+
'.jpeg': 'image/jpeg',
|
|
20
|
+
'.png': 'image/png',
|
|
21
|
+
'.webp': 'image/webp',
|
|
22
|
+
'.gif': 'image/gif',
|
|
23
|
+
'.pdf': 'application/pdf',
|
|
24
|
+
'.txt': 'text/plain',
|
|
25
|
+
'.html': 'text/html',
|
|
26
|
+
'.css': 'text/css',
|
|
27
|
+
'.js': 'application/javascript',
|
|
28
|
+
'.json': 'application/json',
|
|
29
|
+
'.csv': 'text/csv',
|
|
30
|
+
'.xml': 'application/xml',
|
|
31
|
+
'.zip': 'application/zip',
|
|
32
|
+
'.mp4': 'video/mp4',
|
|
33
|
+
'.mp3': 'audio/mpeg',
|
|
34
|
+
'.wav': 'audio/wav',
|
|
35
|
+
'.avi': 'video/x-msvideo',
|
|
36
|
+
'.doc': 'application/msword',
|
|
37
|
+
'.docx': 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
|
|
38
|
+
'.xls': 'application/vnd.ms-excel',
|
|
39
|
+
'.xlsx': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
|
|
40
|
+
// Add more as needed
|
|
41
|
+
};
|
|
42
|
+
const extension = fileName.substring(fileName.lastIndexOf('.')).toLowerCase();
|
|
43
|
+
return mimeTypes[extension] || 'application/octet-stream'; // 'application/octet-stream' is a generic binary type
|
|
44
|
+
}
|
|
45
|
+
export function adjustColor(color, percent) {
|
|
46
|
+
if (!/^#([0-9A-F]{3}){1,2}$/i.test(color)) {
|
|
47
|
+
console.error('Invalid hex color format');
|
|
48
|
+
}
|
|
49
|
+
let r, g, b;
|
|
50
|
+
if (color.length === 7) {
|
|
51
|
+
r = parseInt(color.slice(1, 3), 16);
|
|
52
|
+
g = parseInt(color.slice(3, 5), 16);
|
|
53
|
+
b = parseInt(color.slice(5, 7), 16);
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
r = parseInt(color[1] + color[1], 16);
|
|
57
|
+
g = parseInt(color[2] + color[2], 16);
|
|
58
|
+
b = parseInt(color[3] + color[3], 16);
|
|
59
|
+
}
|
|
60
|
+
const adjust = (value, percent) => {
|
|
61
|
+
const amount = (percent / 100) * 255;
|
|
62
|
+
const newValue = Math.min(Math.max(value + amount, 0), 255);
|
|
63
|
+
return Math.round(newValue);
|
|
64
|
+
};
|
|
65
|
+
r = adjust(r, percent);
|
|
66
|
+
g = adjust(g, percent);
|
|
67
|
+
b = adjust(b, percent);
|
|
68
|
+
const toHex = (value) => {
|
|
69
|
+
const hex = value.toString(16).padStart(2, '0');
|
|
70
|
+
return hex;
|
|
71
|
+
};
|
|
72
|
+
return `#${toHex(r)}${toHex(g)}${toHex(b)}`;
|
|
73
|
+
}
|
|
74
|
+
export function getHtmlImgDisplayString64(base64String) {
|
|
75
|
+
if (base64String == null)
|
|
76
|
+
return null;
|
|
77
|
+
const [header, base64Content] = base64String.split(';base64,');
|
|
78
|
+
const fileName = header.split('=')[1];
|
|
79
|
+
const mimeType = getMimeTypeForFileName(fileName);
|
|
80
|
+
return `data:${mimeType};base64, ${base64Content}`;
|
|
81
|
+
}
|
|
82
|
+
export function nameof(key1, key2) {
|
|
83
|
+
return key2 ?? key1;
|
|
84
|
+
}
|
|
85
|
+
export function nameOf(funcOrClass) {
|
|
86
|
+
return funcOrClass.name;
|
|
87
|
+
}
|
|
88
|
+
export function getParentUrl(currentUrl) {
|
|
89
|
+
const urlSegments = currentUrl.split('/');
|
|
90
|
+
urlSegments.pop();
|
|
91
|
+
const parentUrl = urlSegments.join('/');
|
|
92
|
+
return parentUrl;
|
|
93
|
+
}
|
|
94
|
+
export function capitalizeFirstLetter(inputString) {
|
|
95
|
+
return inputString.charAt(0).toUpperCase() + inputString.slice(1);
|
|
96
|
+
}
|
|
97
|
+
// export function getMonth(number: number): string {
|
|
98
|
+
// const months: string[] = [
|
|
99
|
+
// "January", "February", "March", "April", "May", "June",
|
|
100
|
+
// "July", "August", "September", "October", "November", "December"
|
|
101
|
+
// ];
|
|
102
|
+
// if (number < 1 || number > 12) {
|
|
103
|
+
// throw new Error("Invalid month number. It should be between 1 and 12.");
|
|
104
|
+
// }
|
|
105
|
+
// return months[number - 1];
|
|
106
|
+
// }
|
|
107
|
+
export function getMonth(numberOfTheMonth) {
|
|
108
|
+
const meseci = [
|
|
109
|
+
"Januar", "Februar", "Mart", "April", "Maj", "Jun",
|
|
110
|
+
"Jul", "Avgust", "Septembar", "Oktobar", "Novembar", "Decembar"
|
|
111
|
+
];
|
|
112
|
+
if (numberOfTheMonth < 1 || numberOfTheMonth > 12) {
|
|
113
|
+
console.error("Nevažeći broj meseca. Broj treba biti između 1 i 12.");
|
|
114
|
+
}
|
|
115
|
+
return meseci[numberOfTheMonth - 1];
|
|
116
|
+
}
|
|
117
|
+
export function singleOrDefault(array, predicate) {
|
|
118
|
+
const filtered = array.filter(predicate);
|
|
119
|
+
if (filtered.length > 1) {
|
|
120
|
+
throw new Error("Sequence contains more than one matching element.");
|
|
121
|
+
}
|
|
122
|
+
return filtered[0];
|
|
123
|
+
}
|
|
124
|
+
;
|
|
125
|
+
export function pushAction(cols, action) {
|
|
126
|
+
const actionsColumn = singleOrDefault(cols, x => x.actions != null);
|
|
127
|
+
if (actionsColumn) {
|
|
128
|
+
actionsColumn.actions = [...actionsColumn.actions, action];
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
export function deleteAction(cols, actionField) {
|
|
132
|
+
const actionsColumn = singleOrDefault(cols, x => x.actions != null);
|
|
133
|
+
if (actionsColumn && actionsColumn.actions) {
|
|
134
|
+
const index = actionsColumn.actions.findIndex(a => a.field === actionField);
|
|
135
|
+
if (index !== -1) {
|
|
136
|
+
actionsColumn.actions.splice(index, 1);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
export function getFileNameFromContentDisposition(resp, defaultName) {
|
|
141
|
+
let fileName;
|
|
142
|
+
if (resp && resp.headers && resp.headers.get('Content-Disposition')) {
|
|
143
|
+
let val = resp.headers.get('Content-Disposition');
|
|
144
|
+
let start = val.indexOf('filename=');
|
|
145
|
+
if (start != -1) {
|
|
146
|
+
let end = val.indexOf(';', start);
|
|
147
|
+
fileName =
|
|
148
|
+
end != -1 ? val.substring(start + 9, end) : val.substring(start + 9);
|
|
149
|
+
fileName = fileName.split('"').join('');
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
return fileName ?? defaultName;
|
|
153
|
+
}
|
|
154
|
+
export const getControl = (formControlName, formGroup) => {
|
|
155
|
+
if (formGroup == null)
|
|
156
|
+
return null; // FT: When we initialized form group again this will happen
|
|
157
|
+
if (formGroup.controlNamesFromHtml.findIndex(x => x === formControlName) === -1)
|
|
158
|
+
formGroup.controlNamesFromHtml.push(formControlName);
|
|
159
|
+
let formControl = formGroup.controls[formControlName];
|
|
160
|
+
if (formControl == null) {
|
|
161
|
+
console.error(`FT: The property ${formControlName} in the form group ${formGroup.getRawValue().typeName} doesn't exist`);
|
|
162
|
+
return null;
|
|
163
|
+
}
|
|
164
|
+
return formControl;
|
|
165
|
+
};
|
|
166
|
+
export function toCommaSeparatedString(input) {
|
|
167
|
+
const stringList = input.map(item => (item?.toString() ?? ''));
|
|
168
|
+
if (stringList.length > 1) {
|
|
169
|
+
return `${stringList.slice(0, -1).join(', ')} and ${stringList[stringList.length - 1]}`;
|
|
170
|
+
}
|
|
171
|
+
else {
|
|
172
|
+
return stringList[0] ?? '';
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
export function isImageFileType(mimeType) {
|
|
176
|
+
if (mimeType.startsWith('image/')) {
|
|
177
|
+
return true;
|
|
178
|
+
}
|
|
179
|
+
return false;
|
|
180
|
+
}
|
|
181
|
+
export function isExcelFileType(mimeType) {
|
|
182
|
+
if (mimeType === 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' ||
|
|
183
|
+
mimeType === 'application/vnd.ms-excel') {
|
|
184
|
+
return true;
|
|
185
|
+
}
|
|
186
|
+
return false;
|
|
187
|
+
}
|
|
188
|
+
export function exportListToExcel(exportTableDataToExcelObservableMethod, tableFilter) {
|
|
189
|
+
exportTableDataToExcelObservableMethod(tableFilter).subscribe(res => {
|
|
190
|
+
let fileName = getFileNameFromContentDisposition(res, "ExcelExport.xlsx");
|
|
191
|
+
FileSaver.saveAs(res.body, decodeURIComponent(fileName));
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
export function getPrimengDropdownNamebookOptions(getDropdownListObservable, parentEntityId) {
|
|
195
|
+
return getDropdownListObservable(parentEntityId ?? 0).pipe(map(res => {
|
|
196
|
+
return res.map(x => ({ label: x.displayName, value: x.id }));
|
|
197
|
+
}));
|
|
198
|
+
}
|
|
199
|
+
export function getPrimengDropdownCodebookOptions(getDropdownListObservable) {
|
|
200
|
+
return getDropdownListObservable().pipe(map(res => {
|
|
201
|
+
return res.map(x => ({ label: x.displayName, value: x.code }));
|
|
202
|
+
}));
|
|
203
|
+
}
|
|
204
|
+
export function getPrimengAutocompleteNamebookOptions(getAutocompleteListObservable, limit, query, parentEntityId) {
|
|
205
|
+
return getAutocompleteListObservable(limit, query, parentEntityId ?? 0).pipe(map(res => {
|
|
206
|
+
return res.map(x => ({ label: x.displayName, value: x.id }));
|
|
207
|
+
}));
|
|
208
|
+
}
|
|
209
|
+
export function getPrimengAutocompleteCodebookOptions(getAutocompleteListObservable, limit, query) {
|
|
210
|
+
return getAutocompleteListObservable(limit, query).pipe(map(res => {
|
|
211
|
+
return res.map(x => ({ label: x.displayName, value: x.code }));
|
|
212
|
+
}));
|
|
213
|
+
}
|
|
214
|
+
export const isNullOrEmpty = (input) => {
|
|
215
|
+
if (input == null || input === '') {
|
|
216
|
+
return true;
|
|
217
|
+
}
|
|
218
|
+
return false;
|
|
219
|
+
};
|
|
220
|
+
export const selectedTab = (tabs) => {
|
|
221
|
+
const tab = singleOrDefault(tabs, x => x.isSelected);
|
|
222
|
+
if (tab) {
|
|
223
|
+
return tab.id;
|
|
224
|
+
}
|
|
225
|
+
else {
|
|
226
|
+
return null;
|
|
227
|
+
}
|
|
228
|
+
};
|
|
229
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVyLWZ1bmN0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NwaWRlcmx5L3NyYy9saWIvc2VydmljZXMvaGVscGVyLWZ1bmN0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxPQUFPLEVBQUUsR0FBRyxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQ3ZDLE9BQU8sS0FBSyxTQUFTLE1BQU0sWUFBWSxDQUFDO0FBT3hDLHdGQUF3RjtBQUN4RixNQUFNLFVBQVUsc0JBQXNCLENBQUMsS0FBVSxFQUFFLFNBQWlCLEVBQUUsS0FBYSxFQUFFLG1CQUE0QjtJQUM3RyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVE7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUM1QyxNQUFNLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDL0QsSUFBSSxXQUFXLENBQUMsTUFBTSxHQUFHLFNBQVMsR0FBRyxLQUFLO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDekQsSUFBSSxXQUFXLElBQUksV0FBVyxDQUFDLE1BQU0sR0FBRyxLQUFLO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDNUQsSUFBSSxDQUFDLG1CQUFtQixJQUFJLFdBQVcsSUFBSSxXQUFXLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLEdBQUcsS0FBSztRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQ3ZHLE9BQU8sSUFBSSxDQUFDO0FBQ2hCLENBQUM7QUFFRCxNQUFNLFVBQVUsc0JBQXNCLENBQUMsUUFBZ0I7SUFDbkQsTUFBTSxTQUFTLEdBQThCO1FBQ3pDLE1BQU0sRUFBRSxZQUFZO1FBQ3BCLE9BQU8sRUFBRSxZQUFZO1FBQ3JCLE1BQU0sRUFBRSxXQUFXO1FBQ25CLE9BQU8sRUFBRSxZQUFZO1FBQ3JCLE1BQU0sRUFBRSxX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QUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNqRSxDQUFDLENBQUMsQ0FDTCxDQUFDO0FBQ04sQ0FBQztBQUVELE1BQU0sVUFBVSxxQ0FBcUMsQ0FBQyw2QkFBdUYsRUFBRSxLQUFhLEVBQUUsS0FBYTtJQUN2SyxPQUFPLDZCQUE2QixDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQ25ELEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUNOLE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNuRSxDQUFDLENBQUMsQ0FDTCxDQUFDO0FBQ04sQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxDQUFDLEtBQWEsRUFBRSxFQUFFO0lBQzdDLElBQUcsS0FBSyxJQUFJLElBQUksSUFBSSxLQUFLLEtBQUssRUFBRSxFQUFDO1FBQy9CLE9BQU8sSUFBSSxDQUFDO0tBQ2I7SUFFRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUMsQ0FBQTtBQUVELE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxDQUFDLElBQW1CLEVBQVUsRUFBRTtJQUN6RCxNQUFNLEdBQUcsR0FBRyxlQUFlLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRXJELElBQUksR0FBRyxFQUFFO1FBQ1AsT0FBTyxHQUFHLENBQUMsRUFBRSxDQUFDO0tBQ2Y7U0FDRztRQUNGLE9BQU8sSUFBSSxDQUFDO0tBQ2I7QUFDSCxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBY3Rpb24sIENvbHVtbiB9IGZyb20gXCIuLi9jb21wb25lbnRzL3NwaWRlcmx5LWRhdGEtdGFibGUvc3BpZGVybHktZGF0YS10YWJsZS5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgSHR0cFJlc3BvbnNlIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XHJcbmltcG9ydCB7IEJhc2VFbnRpdHkgfSBmcm9tIFwiLi4vZW50aXRpZXMvYmFzZS1lbnRpdHlcIjtcclxuaW1wb3J0IHsgU3BpZGVybHlGb3JtR3JvdXAgfSBmcm9tIFwiLi4vY29tcG9uZW50cy9zcGlkZXJseS1mb3JtLWNvbnRyb2wvc3BpZGVybHktZm9ybS1jb250cm9sXCI7XHJcbmltcG9ydCB7IG1hcCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgKiBhcyBGaWxlU2F2ZXIgZnJvbSAnZmlsZS1zYXZlcic7XHJcbmltcG9ydCB7IFRhYmxlRmlsdGVyIH0gZnJvbSBcIi4uL2VudGl0aWVzL3RhYmxlLWZpbHRlclwiO1xyXG5pbXBvcnQgeyBOYW1lYm9vayB9IGZyb20gXCIuLi9lbnRpdGllcy9uYW1lYm9va1wiO1xyXG5pbXBvcnQgeyBDb2RlYm9vayB9IGZyb20gXCIuLi9lbnRpdGllcy9jb2RlYm9va1wiO1xyXG5pbXBvcnQgeyBQcmltZW5nT3B0aW9uIH0gZnJvbSBcIi4uL2VudGl0aWVzL3ByaW1lbmctb3B0aW9uXCI7XHJcbmltcG9ydCB7IFNwaWRlcmx5VGFiIH0gZnJvbSBcIi4uL2NvbXBvbmVudHMvc3BpZGVybHktcGFuZWxzL3BhbmVsLWhlYWRlci9wYW5lbC1oZWFkZXIuY29tcG9uZW50XCI7XHJcblxyXG4vLyBIZWxwZXIgZnVuY3Rpb24gZm9yIFByZWNpc2lvblNjYWxlIHZhbGlkYXRpb24gKHRvIGJlIGFkZGVkIGluIHRoZSBUeXBlU2NyaXB0IG91dHB1dCk6XHJcbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVByZWNpc2lvblNjYWxlKHZhbHVlOiBhbnksIHByZWNpc2lvbjogbnVtYmVyLCBzY2FsZTogbnVtYmVyLCBpZ25vcmVUcmFpbGluZ1plcm9zOiBib29sZWFuKTogYm9vbGVhbiB7XHJcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnbnVtYmVyJykgcmV0dXJuIGZhbHNlO1xyXG4gICAgY29uc3QgW2ludGVnZXJQYXJ0LCBkZWNpbWFsUGFydF0gPSB2YWx1ZS50b1N0cmluZygpLnNwbGl0KCcuJyk7XHJcbiAgICBpZiAoaW50ZWdlclBhcnQubGVuZ3RoID4gcHJlY2lzaW9uIC0gc2NhbGUpIHJldHVybiBmYWxzZTtcclxuICAgIGlmIChkZWNpbWFsUGFydCAmJiBkZWNpbWFsUGFydC5sZW5ndGggPiBzY2FsZSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgaWYgKCFpZ25vcmVUcmFpbGluZ1plcm9zICYmIGRlY2ltYWxQYXJ0ICYmIGRlY2ltYWxQYXJ0LnJlcGxhY2UoLzArJC8sICcnKS5sZW5ndGggPiBzY2FsZSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRNaW1lVHlwZUZvckZpbGVOYW1lKGZpbGVOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgbWltZVR5cGVzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge1xyXG4gICAgICAgICcuanBnJzogJ2ltYWdlL2pwZWcnLFxyXG4gICAgICAgICcuanBlZyc6ICdpbWFnZS9qcGVnJyxcclxuICAgICAgICAnLnBuZyc6ICdpbWFnZS9wbmcnLFxyXG4gICAgICAgICcud2VicCc6ICdpbWFnZS93ZWJwJyxcclxuICAgICAgICAnLmdpZic6ICdpbWFnZS9naWYnLFxyXG4gICAgICAgICcucGRmJzogJ2FwcGxpY2F0aW9uL3BkZicsXHJcbiAgICAgICAgJy50eHQnOiAndGV4dC9wbGFpbicsXHJcbiAgICAgICAgJy5odG1sJzogJ3RleHQvaHRtbCcsXHJcbiAgICAgICAgJy5jc3MnOiAndGV4dC9jc3MnLFxyXG4gICAgICAgICcuanMnOiAnYXBwbGljYXRpb24vamF2YXNjcmlwdCcsXHJcbiAgICAgICAgJy5qc29uJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxyXG4gICAgICAgICcuY3N2JzogJ3RleHQvY3N2JyxcclxuICAgICAgICAnLnhtbCc6ICdhcHBsaWNhdGlvbi94bWwnLFxyXG4gICAgICAgICcuemlwJzogJ2FwcGxpY2F0aW9uL3ppcCcsXHJcbiAgICAgICAgJy5tcDQnOiAndmlkZW8vbXA0JyxcclxuICAgICAgICAnLm1wMyc6ICdhdWRpby9tcGVnJyxcclxuICAgICAgICAnLndhdic6ICdhdWRpby93YXYnLFxyXG4gICAgICAgICcuYXZpJzogJ3ZpZGVvL3gtbXN2aWRlbycsXHJcbiAgICAgICAgJy5kb2MnOiAnYXBwbGljYXRpb24vbXN3b3JkJyxcclxuICAgICAgICAnLmRvY3gnOiAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LndvcmRwcm9jZXNzaW5nbWwuZG9jdW1lbnQnLFxyXG4gICAgICAgICcueGxzJzogJ2FwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbCcsXHJcbiAgICAgICAgJy54bHN4JzogJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0J1xyXG4gICAgICAgIC8vIEFkZCBtb3JlIGFzIG5lZWRlZFxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBleHRlbnNpb24gPSBmaWxlTmFtZS5zdWJzdHJpbmcoZmlsZU5hbWUubGFzdEluZGV4T2YoJy4nKSkudG9Mb3dlckNhc2UoKTtcclxuICAgIHJldHVybiBtaW1lVHlwZXNbZXh0ZW5zaW9uXSB8fCAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJzsgLy8gJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScgaXMgYSBnZW5lcmljIGJpbmFyeSB0eXBlXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBhZGp1c3RDb2xvcihjb2xvcjogc3RyaW5nLCBwZXJjZW50OiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgaWYgKCEvXiMoWzAtOUEtRl17M30pezEsMn0kL2kudGVzdChjb2xvcikpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdJbnZhbGlkIGhleCBjb2xvciBmb3JtYXQnKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgcjogbnVtYmVyLCBnOiBudW1iZXIsIGI6IG51bWJlcjtcclxuICAgIGlmIChjb2xvci5sZW5ndGggPT09IDcpIHtcclxuICAgICAgICByID0gcGFyc2VJbnQoY29sb3Iuc2xpY2UoMSwgMyksIDE2KTtcclxuICAgICAgICBnID0gcGFyc2VJbnQoY29sb3Iuc2xpY2UoMywgNSksIDE2KTtcclxuICAgICAgICBiID0gcGFyc2VJbnQoY29sb3Iuc2xpY2UoNSwgNyksIDE2KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgciA9IHBhcnNlSW50KGNvbG9yWzFdICsgY29sb3JbMV0sIDE2KTtcclxuICAgICAgICBnID0gcGFyc2VJbnQoY29sb3JbMl0gKyBjb2xvclsyXSwgMTYpO1xyXG4gICAgICAgIGIgPSBwYXJzZUludChjb2xvclszXSArIGNvbG9yWzNdLCAxNik7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgYWRqdXN0ID0gKHZhbHVlOiBudW1iZXIsIHBlcmNlbnQ6IG51bWJlcik6IG51bWJlciA9PiB7XHJcbiAgICAgICAgY29uc3QgYW1vdW50ID0gKHBlcmNlbnQgLyAxMDApICogMjU1O1xyXG4gICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gTWF0aC5taW4oTWF0aC5tYXgodmFsdWUgKyBhbW91bnQsIDApLCAyNTUpO1xyXG4gICAgICAgIHJldHVybiBNYXRoLnJvdW5kKG5ld1ZhbHVlKTtcclxuICAgIH07XHJcblxyXG4gICAgciA9IGFkanVzdChyLCBwZXJjZW50KTtcclxuICAgIGcgPSBhZGp1c3QoZywgcGVyY2VudCk7XHJcbiAgICBiID0gYWRqdXN0KGIsIHBlcmNlbnQpO1xyXG5cclxuICAgIGNvbnN0IHRvSGV4ID0gKHZhbHVlOiBudW1iZXIpOiBzdHJpbmcgPT4ge1xyXG4gICAgICAgIGNvbnN0IGhleCA9IHZhbHVlLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCAnMCcpO1xyXG4gICAgICAgIHJldHVybiBoZXg7XHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiBgIyR7dG9IZXgocil9JHt0b0hleChnKX0ke3RvSGV4KGIpfWA7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRIdG1sSW1nRGlzcGxheVN0cmluZzY0KGJhc2U2NFN0cmluZzogc3RyaW5nKXtcclxuICAgIGlmIChiYXNlNjRTdHJpbmcgPT0gbnVsbClcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuXHJcbiAgICBjb25zdCBbaGVhZGVyLCBiYXNlNjRDb250ZW50XSA9IGJhc2U2NFN0cmluZy5zcGxpdCgnO2Jhc2U2NCwnKTtcclxuICAgIGNvbnN0IGZpbGVOYW1lID0gaGVhZGVyLnNwbGl0KCc9JylbMV07XHJcbiAgICBjb25zdCBtaW1lVHlwZSA9IGdldE1pbWVUeXBlRm9yRmlsZU5hbWUoZmlsZU5hbWUpO1xyXG4gICAgcmV0dXJuIGBkYXRhOiR7bWltZVR5cGV9O2Jhc2U2NCwgJHtiYXNlNjRDb250ZW50fWA7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBuYW1lb2Y8VE9iamVjdD4ob2JqOiBUT2JqZWN0LCBrZXk6IGtleW9mIFRPYmplY3QpOiBzdHJpbmc7XHJcbmV4cG9ydCBmdW5jdGlvbiBuYW1lb2Y8VE9iamVjdD4oa2V5OiBrZXlvZiBUT2JqZWN0KTogc3RyaW5nO1xyXG5leHBvcnQgZnVuY3Rpb24gbmFtZW9mKGtleTE6IGFueSwga2V5Mj86IGFueSk6IGFueSB7XHJcbiAgcmV0dXJuIGtleTIgPz8ga2V5MTtcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gbmFtZU9mPFRPYmplY3QgZXh0ZW5kcyB7bmFtZTpTfSwgUyBleHRlbmRzIHN0cmluZz4oZnVuY09yQ2xhc3M6IFRPYmplY3QpOiBTIHtcclxuICAgIHJldHVybiBmdW5jT3JDbGFzcy5uYW1lO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFyZW50VXJsKGN1cnJlbnRVcmw6IHN0cmluZyl7XHJcbiAgICBjb25zdCB1cmxTZWdtZW50cyA9IGN1cnJlbnRVcmwuc3BsaXQoJy8nKTtcclxuICAgIHVybFNlZ21lbnRzLnBvcCgpO1xyXG4gICAgY29uc3QgcGFyZW50VXJsID0gdXJsU2VnbWVudHMuam9pbignLycpO1xyXG4gICAgcmV0dXJuIHBhcmVudFVybDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNhcGl0YWxpemVGaXJzdExldHRlcihpbnB1dFN0cmluZzogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBpbnB1dFN0cmluZy5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGlucHV0U3RyaW5nLnNsaWNlKDEpO1xyXG4gIH1cclxuXHJcbiAgLy8gZXhwb3J0IGZ1bmN0aW9uIGdldE1vbnRoKG51bWJlcjogbnVtYmVyKTogc3RyaW5nIHtcclxuICAvLyAgIGNvbnN0IG1vbnRoczogc3RyaW5nW10gPSBbXHJcbiAgLy8gICAgIFwiSmFudWFyeVwiLCBcIkZlYnJ1YXJ5XCIsIFwiTWFyY2hcIiwgXCJBcHJpbFwiLCBcIk1heVwiLCBcIkp1bmVcIixcclxuICAvLyAgICAgXCJKdWx5XCIsIFwiQXVndXN0XCIsIFwiU2VwdGVtYmVyXCIsIFwiT2N0b2JlclwiLCBcIk5vdmVtYmVyXCIsIFwiRGVjZW1iZXJcIlxyXG4gIC8vICAgXTtcclxuICAgIFxyXG4gIC8vICAgaWYgKG51bWJlciA8IDEgfHwgbnVtYmVyID4gMTIpIHtcclxuICAvLyAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBtb250aCBudW1iZXIuIEl0IHNob3VsZCBiZSBiZXR3ZWVuIDEgYW5kIDEyLlwiKTtcclxuICAvLyAgIH1cclxuICAgIFxyXG4gIC8vICAgcmV0dXJuIG1vbnRoc1tudW1iZXIgLSAxXTtcclxuICAvLyB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBnZXRNb250aChudW1iZXJPZlRoZU1vbnRoOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgbWVzZWNpOiBzdHJpbmdbXSA9IFtcclxuICAgICAgXCJKYW51YXJcIiwgXCJGZWJydWFyXCIsIFwiTWFydFwiLCBcIkFwcmlsXCIsIFwiTWFqXCIsIFwiSnVuXCIsXHJcbiAgICAgIFwiSnVsXCIsIFwiQXZndXN0XCIsIFwiU2VwdGVtYmFyXCIsIFwiT2t0b2JhclwiLCBcIk5vdmVtYmFyXCIsIFwiRGVjZW1iYXJcIlxyXG4gICAgXTtcclxuICAgIFxyXG4gICAgaWYgKG51bWJlck9mVGhlTW9udGggPCAxIHx8IG51bWJlck9mVGhlTW9udGggPiAxMikge1xyXG4gICAgICBjb25zb2xlLmVycm9yKFwiTmV2YcW+ZcSHaSBicm9qIG1lc2VjYS4gQnJvaiB0cmViYSBiaXRpIGl6bWXEkXUgMSBpIDEyLlwiKTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgcmV0dXJuIG1lc2VjaVtudW1iZXJPZlRoZU1vbnRoIC0gMV07XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gc2luZ2xlT3JEZWZhdWx0IDxUPihhcnJheTogVFtdLCBwcmVkaWNhdGU6IChpdGVtOiBUKSA9PiBib29sZWFuKTogVCB8IHVuZGVmaW5lZCB7XHJcbiAgICBjb25zdCBmaWx0ZXJlZCA9IGFycmF5LmZpbHRlcihwcmVkaWNhdGUpO1xyXG4gICAgaWYgKGZpbHRlcmVkLmxlbmd0aCA+IDEpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU2VxdWVuY2UgY29udGFpbnMgbW9yZSB0aGFuIG9uZSBtYXRjaGluZyBlbGVtZW50LlwiKTtcclxuICAgIH1cclxuICAgIHJldHVybiBmaWx0ZXJlZFswXTtcclxuICB9O1xyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gcHVzaEFjdGlvbihjb2xzOiBDb2x1bW5bXSwgYWN0aW9uOiBBY3Rpb24pe1xyXG4gICAgY29uc3QgYWN0aW9uc0NvbHVtbiA9IHNpbmdsZU9yRGVmYXVsdChjb2xzLCB4ID0+IHguYWN0aW9ucyAhPSBudWxsKTtcclxuICAgIGlmIChhY3Rpb25zQ29sdW1uKSB7XHJcbiAgICAgICAgYWN0aW9uc0NvbHVtbi5hY3Rpb25zID0gWy4uLmFjdGlvbnNDb2x1bW4uYWN0aW9ucywgYWN0aW9uXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBkZWxldGVBY3Rpb24oY29sczogQ29sdW1uW10sIGFjdGlvbkZpZWxkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IGFjdGlvbnNDb2x1bW4gPSBzaW5nbGVPckRlZmF1bHQoY29scywgeCA9PiB4LmFjdGlvbnMgIT0gbnVsbCk7XHJcblxyXG4gICAgaWYgKGFjdGlvbnNDb2x1bW4gJiYgYWN0aW9uc0NvbHVtbi5hY3Rpb25zKSB7XHJcbiAgICAgIGNvbnN0IGluZGV4ID0gYWN0aW9uc0NvbHVtbi5hY3Rpb25zLmZpbmRJbmRleChhID0+IGEuZmllbGQgPT09IGFjdGlvbkZpZWxkKTtcclxuICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xyXG4gICAgICAgIGFjdGlvbnNDb2x1bW4uYWN0aW9ucy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gZ2V0RmlsZU5hbWVGcm9tQ29udGVudERpc3Bvc2l0aW9uKFxyXG4gICAgcmVzcDogSHR0cFJlc3BvbnNlPEJsb2I+LFxyXG4gICAgZGVmYXVsdE5hbWU6IHN0cmluZ1xyXG4gICk6IHN0cmluZyB7XHJcbiAgICBsZXQgZmlsZU5hbWU7XHJcbiAgICBpZiAocmVzcCAmJiByZXNwLmhlYWRlcnMgJiYgcmVzcC5oZWFkZXJzLmdldCgnQ29udGVudC1EaXNwb3NpdGlvbicpKSB7XHJcbiAgICAgIGxldCB2YWwgPSByZXNwLmhlYWRlcnMuZ2V0KCdDb250ZW50LURpc3Bvc2l0aW9uJyk7XHJcbiAgICAgIGxldCBzdGFydCA9IHZhbC5pbmRleE9mKCdmaWxlbmFtZT0nKTtcclxuICAgICAgaWYgKHN0YXJ0ICE9IC0xKSB7XHJcbiAgICAgICAgbGV0IGVuZCA9IHZhbC5pbmRleE9mKCc7Jywgc3RhcnQpO1xyXG4gICAgICAgIGZpbGVOYW1lID1cclxuICAgICAgICAgIGVuZCAhPSAtMSA/IHZhbC5zdWJzdHJpbmcoc3RhcnQgKyA5LCBlbmQpIDogdmFsLnN1YnN0cmluZyhzdGFydCArIDkpO1xyXG4gICAgICAgIGZpbGVOYW1lID0gZmlsZU5hbWUuc3BsaXQoJ1wiJykuam9pbignJyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmaWxlTmFtZSA/PyBkZWZhdWx0TmFtZTtcclxuICB9XHJcblxyXG4gIGV4cG9ydCBjb25zdCBnZXRDb250cm9sID0gPFQgZXh0ZW5kcyBCYXNlRW50aXR5Pihmb3JtQ29udHJvbE5hbWU6IHN0cmluZyAmIGtleW9mIFQsIGZvcm1Hcm91cDogU3BpZGVybHlGb3JtR3JvdXA8VD4pID0+IHtcclxuICAgICAgaWYgKGZvcm1Hcm91cCA9PSBudWxsKVxyXG4gICAgICAgIHJldHVybiBudWxsOyAvLyBGVDogV2hlbiB3ZSBpbml0aWFsaXplZCBmb3JtIGdyb3VwIGFnYWluIHRoaXMgd2lsbCBoYXBwZW5cclxuICBcclxuICAgICAgaWYoZm9ybUdyb3VwLmNvbnRyb2xOYW1lc0Zyb21IdG1sLmZpbmRJbmRleCh4ID0+IHggPT09IGZvcm1Db250cm9sTmFtZSkgPT09IC0xKVxyXG4gICAgICAgIGZvcm1Hcm91cC5jb250cm9sTmFtZXNGcm9tSHRtbC5wdXNoKGZvcm1Db250cm9sTmFtZSk7XHJcbiAgXHJcbiAgICAgIGxldCBmb3JtQ29udHJvbCA9IGZvcm1Hcm91cC5jb250cm9sc1tmb3JtQ29udHJvbE5hbWVdO1xyXG4gICAgICBpZiAoZm9ybUNvbnRyb2wgPT0gbnVsbCkge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYEZUOiBUaGUgcHJvcGVydHkgJHtmb3JtQ29udHJvbE5hbWV9IGluIHRoZSBmb3JtIGdyb3VwICR7Zm9ybUdyb3VwLmdldFJhd1ZhbHVlKCkudHlwZU5hbWV9IGRvZXNuJ3QgZXhpc3RgKTtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgfVxyXG4gICAgXHJcbiAgICAgIHJldHVybiBmb3JtQ29udHJvbDtcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiB0b0NvbW1hU2VwYXJhdGVkU3RyaW5nPFQ+KGlucHV0OiBUW10pOiBzdHJpbmcge1xyXG4gICAgY29uc3Qgc3RyaW5nTGlzdCA9IGlucHV0Lm1hcChpdGVtID0+IChpdGVtPy50b1N0cmluZygpID8/ICcnKSk7XHJcblxyXG4gICAgaWYgKHN0cmluZ0xpc3QubGVuZ3RoID4gMSkge1xyXG4gICAgICAgIHJldHVybiBgJHtzdHJpbmdMaXN0LnNsaWNlKDAsIC0xKS5qb2luKCcsICcpfSBhbmQgJHtzdHJpbmdMaXN0W3N0cmluZ0xpc3QubGVuZ3RoIC0gMV19YDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHN0cmluZ0xpc3RbMF0gPz8gJyc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gaXNJbWFnZUZpbGVUeXBlKG1pbWVUeXBlOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGlmIChtaW1lVHlwZS5zdGFydHNXaXRoKCdpbWFnZS8nKSkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBpc0V4Y2VsRmlsZVR5cGUobWltZVR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICBpZiAobWltZVR5cGUgPT09ICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldCcgfHxcclxuICAgICAgICAgIG1pbWVUeXBlID09PSAnYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsJ1xyXG4gICAgICApIHtcclxuICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gZXhwb3J0TGlzdFRvRXhjZWwoZXhwb3J0VGFibGVEYXRhVG9FeGNlbE9ic2VydmFibGVNZXRob2Q6ICh0YWJsZUZpbHRlcjogVGFibGVGaWx0ZXIpID0+IE9ic2VydmFibGU8YW55PiwgdGFibGVGaWx0ZXI6IFRhYmxlRmlsdGVyKSB7XHJcbiAgICBleHBvcnRUYWJsZURhdGFUb0V4Y2VsT2JzZXJ2YWJsZU1ldGhvZCh0YWJsZUZpbHRlcikuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgICAgbGV0IGZpbGVOYW1lID0gZ2V0RmlsZU5hbWVGcm9tQ29udGVudERpc3Bvc2l0aW9uKHJlcywgXCJFeGNlbEV4cG9ydC54bHN4XCIpO1xyXG4gICAgICAgIEZpbGVTYXZlci5zYXZlQXMocmVzLmJvZHksIGRlY29kZVVSSUNvbXBvbmVudChmaWxlTmFtZSkpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gZ2V0UHJpbWVuZ0Ryb3Bkb3duTmFtZWJvb2tPcHRpb25zKGdldERyb3Bkb3duTGlzdE9ic2VydmFibGU6IChwYXJlbnRFbnRpdHlJZD86IG51bWJlcikgPT4gT2JzZXJ2YWJsZTxOYW1lYm9va1tdPiwgcGFyZW50RW50aXR5SWQ/OiBudW1iZXIpOiBPYnNlcnZhYmxlPFByaW1lbmdPcHRpb25bXT57XHJcbiAgICAgIHJldHVybiBnZXREcm9wZG93bkxpc3RPYnNlcnZhYmxlKHBhcmVudEVudGl0eUlkID8/IDApLnBpcGUoXHJcbiAgICAgICAgICBtYXAocmVzID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4gcmVzLm1hcCh4ID0+ICh7IGxhYmVsOiB4LmRpc3BsYXlOYW1lLCB2YWx1ZTogeC5pZCB9KSk7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGdldFByaW1lbmdEcm9wZG93bkNvZGVib29rT3B0aW9ucyhnZXREcm9wZG93bkxpc3RPYnNlcnZhYmxlOiAoKSA9PiBPYnNlcnZhYmxlPENvZGVib29rW10+KTogT2JzZXJ2YWJsZTxQcmltZW5nT3B0aW9uW10+e1xyXG4gICAgICByZXR1cm4gZ2V0RHJvcGRvd25MaXN0T2JzZXJ2YWJsZSgpLnBpcGUoXHJcbiAgICAgICAgICBtYXAocmVzID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4gcmVzLm1hcCh4ID0+ICh7IGxhYmVsOiB4LmRpc3BsYXlOYW1lLCB2YWx1ZTogeC5jb2RlIH0pKTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gZ2V0UHJpbWVuZ0F1dG9jb21wbGV0ZU5hbWVib29rT3B0aW9ucyhnZXRBdXRvY29tcGxldGVMaXN0T2JzZXJ2YWJsZTogKGxpbWl0OiBudW1iZXIsIHF1ZXJ5OiBzdHJpbmcsIHBhcmVudEVudGl0eUlkPzogbnVtYmVyKSA9PiBPYnNlcnZhYmxlPE5hbWVib29rW10+LCBsaW1pdDogbnVtYmVyLCBxdWVyeTogc3RyaW5nLCBwYXJlbnRFbnRpdHlJZD86IG51bWJlcik6IE9ic2VydmFibGU8UHJpbWVuZ09wdGlvbltdPntcclxuICAgICAgcmV0dXJuIGdldEF1dG9jb21wbGV0ZUxpc3RPYnNlcnZhYmxlKGxpbWl0LCBxdWVyeSwgcGFyZW50RW50aXR5SWQgPz8gMCkucGlwZShcclxuICAgICAgICAgIG1hcChyZXMgPT4ge1xyXG4gICAgICAgICAgICAgIHJldHVybiByZXMubWFwKHggPT4gKHsgbGFiZWw6IHguZGlzcGxheU5hbWUsIHZhbHVlOiB4LmlkIH0pKTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gZ2V0UHJpbWVuZ0F1dG9jb21wbGV0ZUNvZGVib29rT3B0aW9ucyhnZXRBdXRvY29tcGxldGVMaXN0T2JzZXJ2YWJsZTogKGxpbWl0OiBudW1iZXIsIHF1ZXJ5OiBzdHJpbmcpID0+IE9ic2VydmFibGU8Q29kZWJvb2tbXT4sIGxpbWl0OiBudW1iZXIsIHF1ZXJ5OiBzdHJpbmcpOiBPYnNlcnZhYmxlPFByaW1lbmdPcHRpb25bXT57XHJcbiAgICAgIHJldHVybiBnZXRBdXRvY29tcGxldGVMaXN0T2JzZXJ2YWJsZShsaW1pdCwgcXVlcnkpLnBpcGUoXHJcbiAgICAgICAgICBtYXAocmVzID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4gcmVzLm1hcCh4ID0+ICh7IGxhYmVsOiB4LmRpc3BsYXlOYW1lLCB2YWx1ZTogeC5jb2RlIH0pKTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgY29uc3QgaXNOdWxsT3JFbXB0eSA9IChpbnB1dDogc3RyaW5nKSA9PiB7XHJcbiAgICBpZihpbnB1dCA9PSBudWxsIHx8IGlucHV0ID09PSAnJyl7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgY29uc3Qgc2VsZWN0ZWRUYWIgPSAodGFiczogU3BpZGVybHlUYWJbXSk6IG51bWJlciA9PiB7XHJcbiAgICBjb25zdCB0YWIgPSBzaW5nbGVPckRlZmF1bHQodGFicywgeCA9PiB4LmlzU2VsZWN0ZWQpO1xyXG5cclxuICAgIGlmICh0YWIpIHtcclxuICAgICAgcmV0dXJuIHRhYi5pZDtcclxuICAgIH1cclxuICAgIGVsc2V7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH0iXX0=
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "primeng/api";
|
|
4
|
+
import * as i2 from "@jsverse/transloco";
|
|
5
|
+
export class SpiderlyMessageService {
|
|
6
|
+
constructor(messageService, translocoService, ngZone) {
|
|
7
|
+
this.messageService = messageService;
|
|
8
|
+
this.translocoService = translocoService;
|
|
9
|
+
this.ngZone = ngZone;
|
|
10
|
+
}
|
|
11
|
+
successMessage(detail, title = this.translocoService.translate('SuccessfulAction')) {
|
|
12
|
+
this.messageService.add({
|
|
13
|
+
severity: 'success',
|
|
14
|
+
summary: title,
|
|
15
|
+
detail: detail,
|
|
16
|
+
life: 10000,
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
warningMessage(detail, title, sticky) {
|
|
20
|
+
this.messageService.add({
|
|
21
|
+
severity: 'warn',
|
|
22
|
+
summary: title ?? this.translocoService.translate('Warning'),
|
|
23
|
+
detail: detail,
|
|
24
|
+
life: 10000,
|
|
25
|
+
sticky: sticky
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
warningMessageWithTimeout(detail, title = this.translocoService.translate('Warning')) {
|
|
29
|
+
setTimeout(() => {
|
|
30
|
+
this.messageService.add({
|
|
31
|
+
severity: 'warn',
|
|
32
|
+
summary: title,
|
|
33
|
+
detail: detail,
|
|
34
|
+
life: 10000,
|
|
35
|
+
});
|
|
36
|
+
}, 100);
|
|
37
|
+
}
|
|
38
|
+
errorMessage(detail, title = this.translocoService.translate('Error')) {
|
|
39
|
+
this.messageService.add({
|
|
40
|
+
severity: 'error',
|
|
41
|
+
summary: title,
|
|
42
|
+
detail: detail,
|
|
43
|
+
life: 10000,
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
infoMessage(detail, title, sticky) {
|
|
47
|
+
this.messageService.add({
|
|
48
|
+
severity: 'info',
|
|
49
|
+
summary: title ?? this.translocoService.translate('Info'),
|
|
50
|
+
detail: detail,
|
|
51
|
+
life: 10000,
|
|
52
|
+
sticky: sticky,
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SpiderlyMessageService, deps: [{ token: i1.MessageService }, { token: i2.TranslocoService }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
56
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SpiderlyMessageService, providedIn: 'root' }); }
|
|
57
|
+
}
|
|
58
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SpiderlyMessageService, decorators: [{
|
|
59
|
+
type: Injectable,
|
|
60
|
+
args: [{
|
|
61
|
+
providedIn: 'root',
|
|
62
|
+
}]
|
|
63
|
+
}], ctorParameters: () => [{ type: i1.MessageService }, { type: i2.TranslocoService }, { type: i0.NgZone }] });
|
|
64
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BpZGVybHktbWVzc2FnZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BpZGVybHkvc3JjL2xpYi9zZXJ2aWNlcy9zcGlkZXJseS1tZXNzYWdlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBVSxNQUFNLGVBQWUsQ0FBQzs7OztBQU1uRCxNQUFNLE9BQU8sc0JBQXNCO0lBQ2pDLFlBQ1UsY0FBOEIsRUFDOUIsZ0JBQWtDLEVBQ2xDLE1BQWM7UUFGZCxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxXQUFNLEdBQU4sTUFBTSxDQUFRO0lBR3hCLENBQUM7SUFFRCxjQUFjLENBQUMsTUFBYyxFQUFFLFFBQWdCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsa0JBQWtCLENBQUM7UUFDaEcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUM7WUFDdEIsUUFBUSxFQUFFLFNBQVM7WUFDbkIsT0FBTyxFQUFFLEtBQUs7WUFDZCxNQUFNLEVBQUUsTUFBTTtZQUNkLElBQUksRUFBRSxLQUFLO1NBQ1osQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGNBQWMsQ0FBQyxNQUFjLEVBQUUsS0FBYyxFQUFFLE1BQWdCO1FBQzdELElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDO1lBQ3RCLFFBQVEsRUFBRSxNQUFNO1lBQ2hCLE9BQU8sRUFBRSxLQUFLLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUM7WUFDNUQsTUFBTSxFQUFFLE1BQU07WUFDZCxJQUFJLEVBQUUsS0FBSztZQUNYLE1BQU0sRUFBRSxNQUFNO1NBQ2YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELHlCQUF5QixDQUFDLE1BQWMsRUFBRSxRQUFnQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQztRQUNsRyxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUM7Z0JBQ3RCLFFBQVEsRUFBRSxNQUFNO2dCQUNoQixPQUFPLEVBQUUsS0FBSztnQkFDZCxNQUFNLEVBQUUsTUFBTTtnQkFDZCxJQUFJLEVBQUUsS0FBSzthQUNaLENBQUMsQ0FBQztRQUNMLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNWLENBQUM7SUFFRCxZQUFZLENBQUMsTUFBYyxFQUFFLFFBQWdCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDO1FBQ25GLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDO1lBQ3RCLFFBQVEsRUFBRSxPQUFPO1lBQ2pCLE9BQU8sRUFBRSxLQUFLO1lBQ2QsTUFBTSxFQUFFLE1BQU07WUFDZCxJQUFJLEVBQUUsS0FBSztTQUNaLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxXQUFXLENBQUMsTUFBYyxFQUFFLEtBQWMsRUFBRSxNQUFnQjtRQUMxRCxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQztZQUN0QixRQUFRLEVBQUUsTUFBTTtZQUNoQixPQUFPLEVBQUUsS0FBSyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDO1lBQ3pELE1BQU0sRUFBRSxNQUFNO1lBQ2QsSUFBSSxFQUFFLEtBQUs7WUFDWCxNQUFNLEVBQUUsTUFBTTtTQUNmLENBQUMsQ0FBQztJQUNMLENBQUM7K0dBeERVLHNCQUFzQjttSEFBdEIsc0JBQXNCLGNBRnJCLE1BQU07OzRGQUVQLHNCQUFzQjtrQkFIbEMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUcmFuc2xvY29TZXJ2aWNlIH0gZnJvbSAnQGpzdmVyc2UvdHJhbnNsb2NvJztcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSwgTmdab25lIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAncHJpbWVuZy9hcGknO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIFNwaWRlcmx5TWVzc2FnZVNlcnZpY2UgeyAvLyBUT0RPIEZUOiBuZWNlIGRhIHByaWthemUgcG9ydWt1IGFrbyBqZSBuZWtpIGFuZ3VsYXIgZXJyb3Iga29qaSBzZSBkb2dvZGkgdGVrIG5ha29uIGFwaSBwb3ppdmFcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLCBcclxuICAgIHByaXZhdGUgdHJhbnNsb2NvU2VydmljZTogVHJhbnNsb2NvU2VydmljZSxcclxuICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmVcclxuICApIHtcclxuICAgIFxyXG4gIH1cclxuXHJcbiAgc3VjY2Vzc01lc3NhZ2UoZGV0YWlsOiBzdHJpbmcsIHRpdGxlOiBzdHJpbmcgPSB0aGlzLnRyYW5zbG9jb1NlcnZpY2UudHJhbnNsYXRlKCdTdWNjZXNzZnVsQWN0aW9uJykpIHtcclxuICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHtcclxuICAgICAgc2V2ZXJpdHk6ICdzdWNjZXNzJyxcclxuICAgICAgc3VtbWFyeTogdGl0bGUsXHJcbiAgICAgIGRldGFpbDogZGV0YWlsLFxyXG4gICAgICBsaWZlOiAxMDAwMCxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgd2FybmluZ01lc3NhZ2UoZGV0YWlsOiBzdHJpbmcsIHRpdGxlPzogc3RyaW5nLCBzdGlja3k/OiBib29sZWFuKXtcclxuICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHtcclxuICAgICAgc2V2ZXJpdHk6ICd3YXJuJyxcclxuICAgICAgc3VtbWFyeTogdGl0bGUgPz8gdGhpcy50cmFuc2xvY29TZXJ2aWNlLnRyYW5zbGF0ZSgnV2FybmluZycpLFxyXG4gICAgICBkZXRhaWw6IGRldGFpbCxcclxuICAgICAgbGlmZTogMTAwMDAsXHJcbiAgICAgIHN0aWNreTogc3RpY2t5XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHdhcm5pbmdNZXNzYWdlV2l0aFRpbWVvdXQoZGV0YWlsOiBzdHJpbmcsIHRpdGxlOiBzdHJpbmcgPSB0aGlzLnRyYW5zbG9jb1NlcnZpY2UudHJhbnNsYXRlKCdXYXJuaW5nJykpe1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHtcclxuICAgICAgICBzZXZlcml0eTogJ3dhcm4nLFxyXG4gICAgICAgIHN1bW1hcnk6IHRpdGxlLFxyXG4gICAgICAgIGRldGFpbDogZGV0YWlsLFxyXG4gICAgICAgIGxpZmU6IDEwMDAwLFxyXG4gICAgICB9KTtcclxuICAgIH0sIDEwMCk7XHJcbiAgfVxyXG5cclxuICBlcnJvck1lc3NhZ2UoZGV0YWlsOiBzdHJpbmcsIHRpdGxlOiBzdHJpbmcgPSB0aGlzLnRyYW5zbG9jb1NlcnZpY2UudHJhbnNsYXRlKCdFcnJvcicpKXtcclxuICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHtcclxuICAgICAgc2V2ZXJpdHk6ICdlcnJvcicsXHJcbiAgICAgIHN1bW1hcnk6IHRpdGxlLFxyXG4gICAgICBkZXRhaWw6IGRldGFpbCxcclxuICAgICAgbGlmZTogMTAwMDAsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGluZm9NZXNzYWdlKGRldGFpbDogc3RyaW5nLCB0aXRsZT86IHN0cmluZywgc3RpY2t5PzogYm9vbGVhbil7XHJcbiAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7XHJcbiAgICAgIHNldmVyaXR5OiAnaW5mbycsXHJcbiAgICAgIHN1bW1hcnk6IHRpdGxlID8/IHRoaXMudHJhbnNsb2NvU2VydmljZS50cmFuc2xhdGUoJ0luZm8nKSxcclxuICAgICAgZGV0YWlsOiBkZXRhaWwsXHJcbiAgICAgIGxpZmU6IDEwMDAwLFxyXG4gICAgICBzdGlja3k6IHN0aWNreSxcclxuICAgIH0pO1xyXG4gIH1cclxuICBcclxufVxyXG4iXX0=
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "@angular/common/http";
|
|
4
|
+
export class SpiderlyTranslocoLoader {
|
|
5
|
+
constructor(http) {
|
|
6
|
+
this.http = http;
|
|
7
|
+
}
|
|
8
|
+
getTranslation(lang) {
|
|
9
|
+
return this.http.get(`./assets/i18n/${lang}.json`);
|
|
10
|
+
}
|
|
11
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SpiderlyTranslocoLoader, deps: [{ token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
12
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SpiderlyTranslocoLoader, providedIn: 'root' }); }
|
|
13
|
+
}
|
|
14
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SpiderlyTranslocoLoader, decorators: [{
|
|
15
|
+
type: Injectable,
|
|
16
|
+
args: [{
|
|
17
|
+
providedIn: 'root'
|
|
18
|
+
}]
|
|
19
|
+
}], ctorParameters: () => [{ type: i1.HttpClient }] });
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BpZGVybHktdHJhbnNsb2NvLWxvYWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NwaWRlcmx5L3NyYy9saWIvc2VydmljZXMvc3BpZGVybHktdHJhbnNsb2NvLWxvYWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7QUFPM0MsTUFBTSxPQUFPLHVCQUF1QjtJQUNsQyxZQUFvQixJQUFnQjtRQUFoQixTQUFJLEdBQUosSUFBSSxDQUFZO0lBQUcsQ0FBQztJQUV4QyxjQUFjLENBQUMsSUFBWTtRQUN6QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGlCQUFpQixJQUFJLE9BQU8sQ0FBQyxDQUFDO0lBQ3JELENBQUM7K0dBTFUsdUJBQXVCO21IQUF2Qix1QkFBdUIsY0FGdEIsTUFBTTs7NEZBRVAsdUJBQXVCO2tCQUhuQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVHJhbnNsb2NvTG9hZGVyIH0gZnJvbSAnQGpzdmVyc2UvdHJhbnNsb2NvJztcclxuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuXHJcbkBJbmplY3RhYmxlKHsgXHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnIFxyXG59KVxyXG5leHBvcnQgY2xhc3MgU3BpZGVybHlUcmFuc2xvY29Mb2FkZXIgaW1wbGVtZW50cyBUcmFuc2xvY29Mb2FkZXIge1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCkge31cclxuXHJcbiAgZ2V0VHJhbnNsYXRpb24obGFuZzogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChgLi9hc3NldHMvaTE4bi8ke2xhbmd9Lmpzb25gKTtcclxuICB9XHJcblxyXG59Il19
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Injectable } from "@angular/core";
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class TranslateLabelsAbstractService {
|
|
4
|
+
constructor() {
|
|
5
|
+
}
|
|
6
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TranslateLabelsAbstractService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
7
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TranslateLabelsAbstractService, providedIn: 'root' }); }
|
|
8
|
+
}
|
|
9
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TranslateLabelsAbstractService, decorators: [{
|
|
10
|
+
type: Injectable,
|
|
11
|
+
args: [{
|
|
12
|
+
providedIn: 'root',
|
|
13
|
+
}]
|
|
14
|
+
}], ctorParameters: () => [] });
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsYXRlLWxhYmVscy1hYnN0cmFjdC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BpZGVybHkvc3JjL2xpYi9zZXJ2aWNlcy90cmFuc2xhdGUtbGFiZWxzLWFic3RyYWN0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFLM0MsTUFBTSxPQUFnQiw4QkFBOEI7SUFFaEQ7SUFFQSxDQUFDOytHQUppQiw4QkFBOEI7bUhBQTlCLDhCQUE4QixjQUZwQyxNQUFNOzs0RkFFQSw4QkFBOEI7a0JBSG5ELFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBUcmFuc2xhdGVMYWJlbHNBYnN0cmFjdFNlcnZpY2Uge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgKSB7XHJcbiAgICB9XHJcblxyXG4gICAgYWJzdHJhY3QgdHJhbnNsYXRlIChuYW1lOiBzdHJpbmcpOiBzdHJpbmc7XHJcbn1cclxuIl19
|