@tsi-developpement/tsi-shared-ui 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/consts/app-providers.mjs +11 -0
- package/esm2022/lib/consts/html-template.const.mjs +40 -0
- package/esm2022/lib/consts/index.mjs +8 -0
- package/esm2022/lib/consts/localization-key.mjs +12 -0
- package/esm2022/lib/consts/locals.const.mjs +8 -0
- package/esm2022/lib/consts/queryParamNames.const.mjs +11 -0
- package/esm2022/lib/consts/themes.mjs +5 -0
- package/esm2022/lib/consts/tsi-consts.mjs +45 -0
- package/esm2022/lib/end-points/authorization-endpoints.mjs +35 -0
- package/esm2022/lib/end-points/baseuri.mjs +11 -0
- package/esm2022/lib/end-points/endpoints.mjs +208 -0
- package/esm2022/lib/end-points/import-export-endpoint.mjs +35 -0
- package/esm2022/lib/end-points/index.mjs +7 -0
- package/esm2022/lib/end-points/presentation-settings-endpoints.mjs +13 -0
- package/esm2022/lib/end-points/reporting-endpoints.mjs +55 -0
- package/esm2022/lib/end-points/shared-endpoint.mjs +12 -0
- package/esm2022/lib/end-points/user-identity-endpoints.mjs +61 -0
- package/esm2022/lib/enums/Language.mjs +9 -0
- package/esm2022/lib/enums/auto-complete.mjs +6 -0
- package/esm2022/lib/enums/button-type.enum.mjs +6 -0
- package/esm2022/lib/enums/claim-types.mjs +15 -0
- package/esm2022/lib/enums/code-format.mjs +6 -0
- package/esm2022/lib/enums/component-use-modes-enum.mjs +19 -0
- package/esm2022/lib/enums/css-units.mjs +10 -0
- package/esm2022/lib/enums/decimal-format.mjs +8 -0
- package/esm2022/lib/enums/display-types.mjs +35 -0
- package/esm2022/lib/enums/filter-operator-type.mjs +34 -0
- package/esm2022/lib/enums/form-validation-error.mjs +7 -0
- package/esm2022/lib/enums/grid-selection-mode.mjs +7 -0
- package/esm2022/lib/enums/grid-sort-mode.mjs +7 -0
- package/esm2022/lib/enums/http-method-types.mjs +6 -0
- package/esm2022/lib/enums/index.mjs +25 -0
- package/esm2022/lib/enums/input-types.mjs +20 -0
- package/esm2022/lib/enums/layout-orientation.mjs +6 -0
- package/esm2022/lib/enums/logout-reason-enum.mjs +8 -0
- package/esm2022/lib/enums/modal-size-enum.mjs +10 -0
- package/esm2022/lib/enums/report-type.mjs +9 -0
- package/esm2022/lib/enums/status.mjs +9 -0
- package/esm2022/lib/enums/text-box-type.mjs +7 -0
- package/esm2022/lib/enums/tooltipPosition.enum.mjs +8 -0
- package/esm2022/lib/enums/tsi-component-enum.mjs +40 -0
- package/esm2022/lib/enums/type-import.mjs +6 -0
- package/esm2022/lib/functions/array.functions.mjs +8 -0
- package/esm2022/lib/functions/index.mjs +3 -0
- package/esm2022/lib/functions/modal-open.function.mjs +69 -0
- package/esm2022/lib/guards/admin.guard.mjs +37 -0
- package/esm2022/lib/guards/auth.guard.mjs +30 -0
- package/esm2022/lib/guards/index.mjs +4 -0
- package/esm2022/lib/guards/permission.guard.mjs +32 -0
- package/esm2022/lib/interfaces/configuration/configuration.mjs +2 -0
- package/esm2022/lib/interfaces/generic-form/generic-form.mjs +118 -0
- package/esm2022/lib/interfaces/generic-types/dictionary.mjs +2 -0
- package/esm2022/lib/interfaces/grid/grid-configuration.mjs +2 -0
- package/esm2022/lib/interfaces/index.mjs +12 -0
- package/esm2022/lib/interfaces/modal/dynamic.component.mjs +7 -0
- package/esm2022/lib/interfaces/modal/modal-size.mjs +2 -0
- package/esm2022/lib/interfaces/pagination/pagination-base.mjs +2 -0
- package/esm2022/lib/interfaces/select-list/combo-status-model.mjs +10 -0
- package/esm2022/lib/interfaces/settings/app-settings.mjs +2 -0
- package/esm2022/lib/interfaces/styles/css-size-property.mjs +17 -0
- package/esm2022/lib/interfaces/translation/translation.mjs +2 -0
- package/esm2022/lib/models/Notes/Note.mjs +7 -0
- package/esm2022/lib/models/application/configuration/endpoint-infos.mjs +3 -0
- package/esm2022/lib/models/application/configuration/entity-delete-behavior.mjs +2 -0
- package/esm2022/lib/models/authorization/authorization-token-mapper.mjs +24 -0
- package/esm2022/lib/models/authorization/authorization-token.mjs +2 -0
- package/esm2022/lib/models/common/component-descriminator.mjs +2 -0
- package/esm2022/lib/models/common/entity-properties.mjs +2 -0
- package/esm2022/lib/models/common/entity-validations.mjs +2 -0
- package/esm2022/lib/models/common/event-schema.mjs +2 -0
- package/esm2022/lib/models/common/key-value-pair.mjs +2 -0
- package/esm2022/lib/models/entity-info/entity-info.mjs +29 -0
- package/esm2022/lib/models/filter/filter-by-existing-values.mjs +7 -0
- package/esm2022/lib/models/filter/paged-result-request-base.mjs +13 -0
- package/esm2022/lib/models/filter/search-field.mjs +2 -0
- package/esm2022/lib/models/import-export/import-export.mjs +15 -0
- package/esm2022/lib/models/index.mjs +38 -0
- package/esm2022/lib/models/journalisation-application/journalisation-application.mjs +10 -0
- package/esm2022/lib/models/journalisation-application/status-history.mjs +3 -0
- package/esm2022/lib/models/layout/layout-config.mjs +2 -0
- package/esm2022/lib/models/modal/bs-modal.mjs +6 -0
- package/esm2022/lib/models/presentation-settings/presentation-settings.mjs +8 -0
- package/esm2022/lib/models/progress-bar/progress-bar-create-request.mjs +2 -0
- package/esm2022/lib/models/progress-bar/progress-bar-response.mjs +8 -0
- package/esm2022/lib/models/progress-bar/progress-bar-update-request.mjs +3 -0
- package/esm2022/lib/models/remote-services-utility/subscription-result.mjs +17 -0
- package/esm2022/lib/models/reporting/json-data-connection.mjs +2 -0
- package/esm2022/lib/models/reporting/optional-endpoints.mjs +2 -0
- package/esm2022/lib/models/reporting/report-template-response.mjs +2 -0
- package/esm2022/lib/models/reporting/report-to-edit-template.mjs +2 -0
- package/esm2022/lib/models/reporting/report-to-print.mjs +2 -0
- package/esm2022/lib/models/reporting/report-to-template.mjs +2 -0
- package/esm2022/lib/models/settings/devise.mjs +3 -0
- package/esm2022/lib/models/settings/fichier.mjs +6 -0
- package/esm2022/lib/models/settings/type-fichier.mjs +3 -0
- package/esm2022/lib/models/tsi-card/tsi-card.mjs +3 -0
- package/esm2022/lib/models/user-identity/login-response.mjs +7 -0
- package/esm2022/lib/models/user-identity/tenant.mjs +3 -0
- package/esm2022/lib/models/user-identity/user-identity.mjs +3 -0
- package/esm2022/lib/models/workflow/workflow.mjs +14 -0
- package/esm2022/lib/package-initializer.mjs +7 -0
- package/esm2022/lib/pipes/cut-label.pipe.mjs +23 -0
- package/esm2022/lib/pipes/index.mjs +8 -0
- package/esm2022/lib/pipes/localize.pipe.mjs +51 -0
- package/esm2022/lib/pipes/modal-label.pipe.mjs +37 -0
- package/esm2022/lib/pipes/shorten.pipe.mjs +20 -0
- package/esm2022/lib/pipes/to-number.pipe.mjs +20 -0
- package/esm2022/lib/pipes/tsi-currency.pipe.mjs +29 -0
- package/esm2022/lib/pipes/tsi-decimal.pipe.mjs +21 -0
- package/esm2022/lib/providers/index.mjs +2 -0
- package/esm2022/lib/providers/shared-ui-tsi.provider.mjs +15 -0
- package/esm2022/lib/routes/admin.routes.mjs +5 -0
- package/esm2022/lib/routes/app.routes.mjs +7 -0
- package/esm2022/lib/routes/identity.routes.mjs +4 -0
- package/esm2022/lib/routes/index.mjs +5 -0
- package/esm2022/lib/routes/manage-reporting.routes.mjs +5 -0
- package/esm2022/lib/services/Component-Finder/tsi-component-finder.service.mjs +22 -0
- package/esm2022/lib/services/Import-Export/modele-import.service.mjs +59 -0
- package/esm2022/lib/services/Note/Note.service.mjs +35 -0
- package/esm2022/lib/services/UserIdentity/identity-platform-authentication.service.mjs +29 -0
- package/esm2022/lib/services/UserIdentity/user-identity.service.mjs +40 -0
- package/esm2022/lib/services/application/api-explorer.service.mjs +24 -0
- package/esm2022/lib/services/application/app.layout.service.mjs +97 -0
- package/esm2022/lib/services/application/parametres-application-parambase.service.mjs +20 -0
- package/esm2022/lib/services/authorization/authorization.service.mjs +124 -0
- package/esm2022/lib/services/authorization/identity-manager.service.mjs +97 -0
- package/esm2022/lib/services/base/crud-base.service.mjs +38 -0
- package/esm2022/lib/services/configuration/entity-configuration.service.mjs +49 -0
- package/esm2022/lib/services/currentUser/currentUser.service.mjs +49 -0
- package/esm2022/lib/services/date-helper.service.mjs +133 -0
- package/esm2022/lib/services/dialog-data.service.mjs +32 -0
- package/esm2022/lib/services/fichier/fichier-upload.service.mjs +44 -0
- package/esm2022/lib/services/fichier/fichier.service.mjs +20 -0
- package/esm2022/lib/services/formula.service.mjs +20 -0
- package/esm2022/lib/services/generator/html-template-generator.service.mjs +196 -0
- package/esm2022/lib/services/index.mjs +41 -0
- package/esm2022/lib/services/journalisation/journalisation-application.service.mjs +23 -0
- package/esm2022/lib/services/journalisation/status-history.service.mjs +23 -0
- package/esm2022/lib/services/layout/layout-helper.service.mjs +72 -0
- package/esm2022/lib/services/modal/tsi-bs-modal.service.mjs +37 -0
- package/esm2022/lib/services/modal/tsi-modal.service.mjs +21 -0
- package/esm2022/lib/services/module-code/module-code.service.mjs +31 -0
- package/esm2022/lib/services/module-main-parameter.service.mjs +31 -0
- package/esm2022/lib/services/notification/error-response-manager.service.mjs +57 -0
- package/esm2022/lib/services/notification/tsi-confirmation.service.mjs +37 -0
- package/esm2022/lib/services/notification/tsi-message.service.mjs +54 -0
- package/esm2022/lib/services/notification/tsi-notification.service.mjs +47 -0
- package/esm2022/lib/services/presentation-setting/presentation-designer-base.service.mjs +26 -0
- package/esm2022/lib/services/presentation-setting/presentation-designer.service.mjs +58 -0
- package/esm2022/lib/services/presentation-setting/presentation-setting.service.mjs +39 -0
- package/esm2022/lib/services/progress-bar/progress-bar-helper.service.mjs +39 -0
- package/esm2022/lib/services/progress-bar/progress-bar.service.mjs +30 -0
- package/esm2022/lib/services/record-info-popup.service.mjs +21 -0
- package/esm2022/lib/services/reporting/dashboard-module.service.mjs +24 -0
- package/esm2022/lib/services/reporting/reporting.service.mjs +111 -0
- package/esm2022/lib/services/settings/app-settings.service.mjs +47 -0
- package/esm2022/lib/services/settings/keyboard-shortcut.service.mjs +30 -0
- package/esm2022/lib/services/status/entityStatus.service.mjs +21 -0
- package/esm2022/lib/services/translation/translation.service.mjs +71 -0
- package/esm2022/lib/services/validation/entity-validations.service.mjs +21 -0
- package/esm2022/lib/services/validation/generic-validation-state.service.mjs +30 -0
- package/esm2022/lib/services/validation/input-registry.service.mjs +25 -0
- package/esm2022/lib/services/workflow/workflow-configuration.service.mjs +80 -0
- package/esm2022/lib/shared.module.mjs +643 -0
- package/esm2022/lib/tsi-base/components/app-base/app-base.component.mjs +101 -0
- package/esm2022/lib/tsi-base/components/tsi-base/tsi-base.component.mjs +25 -0
- package/esm2022/lib/tsi-base/components/tsi-form-base/tsi-form-base.component.mjs +645 -0
- package/esm2022/lib/tsi-base/components/tsi-list-base/tsi-list-base.component.mjs +514 -0
- package/esm2022/lib/tsi-base/index.mjs +6 -0
- package/esm2022/lib/tsi-base/tsi-input-base/tsi-input-base.component.mjs +141 -0
- package/esm2022/lib/tsi-components/alert-import-message/alert-import-message.component.mjs +19 -0
- package/esm2022/lib/tsi-components/button-components/Tsi-Submit-Button/tsi-submit-button.component.mjs +40 -0
- package/esm2022/lib/tsi-components/button-components/tsi-button/tsi-button.component.mjs +75 -0
- package/esm2022/lib/tsi-components/create-or-edit-entity-informations/create-or-edit-entity-informations.component.mjs +173 -0
- package/esm2022/lib/tsi-components/create-or-edit-modele-import/create-or-edit-modele-import.component.mjs +201 -0
- package/esm2022/lib/tsi-components/index.mjs +80 -0
- package/esm2022/lib/tsi-components/input-components/editable-grid/editable-grid.component.mjs +643 -0
- package/esm2022/lib/tsi-components/input-components/tsi-checkbox/tsi-checkbox.component.mjs +120 -0
- package/esm2022/lib/tsi-components/input-components/tsi-currency-other-input/tsi-currency-other-input.component.mjs +53 -0
- package/esm2022/lib/tsi-components/input-components/tsi-currency-societe-input/tsi-currency-societe-input.component.mjs +62 -0
- package/esm2022/lib/tsi-components/input-components/tsi-date-picker/tsi-date-picker.component.mjs +116 -0
- package/esm2022/lib/tsi-components/input-components/tsi-decimal-input/tsi-decimal-input.component.mjs +51 -0
- package/esm2022/lib/tsi-components/input-components/tsi-file-manager/tsi-file-manager.component.mjs +195 -0
- package/esm2022/lib/tsi-components/input-components/tsi-formula-box/tsi-formula-box.component.mjs +54 -0
- package/esm2022/lib/tsi-components/input-components/tsi-integer/tsi-integer.component.mjs +55 -0
- package/esm2022/lib/tsi-components/input-components/tsi-radio-button/tsi-radio-button.component.mjs +43 -0
- package/esm2022/lib/tsi-components/input-components/tsi-rate-input/tsi-rate-input.component.mjs +56 -0
- package/esm2022/lib/tsi-components/input-components/tsi-search-combo/tsi-search-combo.component.mjs +649 -0
- package/esm2022/lib/tsi-components/input-components/tsi-text-area/tsi-text-area.component.mjs +44 -0
- package/esm2022/lib/tsi-components/input-components/tsi-text-box/tsi-text-box.component.mjs +50 -0
- package/esm2022/lib/tsi-components/input-components/tsi-time-picker/tsi-time-picker.component.mjs +65 -0
- package/esm2022/lib/tsi-components/logout-popup/logout-popup.component.mjs +12 -0
- package/esm2022/lib/tsi-components/manage-import-export/manage-import-export.component.mjs +435 -0
- package/esm2022/lib/tsi-components/manage-reporting/add-report-popup/add-report-popup.component.mjs +148 -0
- package/esm2022/lib/tsi-components/manage-reporting/manage-reporting.component.mjs +1075 -0
- package/esm2022/lib/tsi-components/message-components/tsi-error-message/tsi-error-message.component.mjs +31 -0
- package/esm2022/lib/tsi-components/message-components/tsi-info-message/tsi-info-message.component.mjs +24 -0
- package/esm2022/lib/tsi-components/message-components/tsi-redirection-message/tsi-redirection-message.component.mjs +19 -0
- package/esm2022/lib/tsi-components/message-components/tsi-success-message/tsi-success-message.component.mjs +22 -0
- package/esm2022/lib/tsi-components/modal-component/modal.component.mjs +138 -0
- package/esm2022/lib/tsi-components/modal-loader/modal-loader.component.mjs +58 -0
- package/esm2022/lib/tsi-components/output-components/display-nested-prop/display-nested-prop.component.mjs +32 -0
- package/esm2022/lib/tsi-components/output-components/tsi-checkbox-display/tsi-checkbox-display.component.mjs +18 -0
- package/esm2022/lib/tsi-components/output-components/tsi-currency-other-display/tsi-currency-other-display.component.mjs +17 -0
- package/esm2022/lib/tsi-components/output-components/tsi-currency-societe-display/tsi-currency-societe-display.component.mjs +57 -0
- package/esm2022/lib/tsi-components/output-components/tsi-date-display/tsi-date-display.component.mjs +27 -0
- package/esm2022/lib/tsi-components/output-components/tsi-decimal-display/tsi-decimal-display.component.mjs +25 -0
- package/esm2022/lib/tsi-components/output-components/tsi-display-grid/tsi-display-grid.component.mjs +139 -0
- package/esm2022/lib/tsi-components/output-components/tsi-generic-grid/tsi-generic-grid.component.mjs +1509 -0
- package/esm2022/lib/tsi-components/output-components/tsi-image-display/tsi-image-display.component.mjs +144 -0
- package/esm2022/lib/tsi-components/output-components/tsi-integer-display/tsi-integer-display.component.mjs +13 -0
- package/esm2022/lib/tsi-components/output-components/tsi-label/tsi-label.component.mjs +24 -0
- package/esm2022/lib/tsi-components/output-components/tsi-label-legend/tsi-label-legend.component.mjs +18 -0
- package/esm2022/lib/tsi-components/output-components/tsi-legend/tsi-legend.component.mjs +20 -0
- package/esm2022/lib/tsi-components/output-components/tsi-paragraph/tsi-paragraph.component.mjs +17 -0
- package/esm2022/lib/tsi-components/output-components/tsi-rate-display/tsi-rate-display.component.mjs +30 -0
- package/esm2022/lib/tsi-components/output-components/tsi-time-display/tsi-time-display.component.mjs +17 -0
- package/esm2022/lib/tsi-components/output-components/tsi-view-grid/tsi-view-grid.component.mjs +427 -0
- package/esm2022/lib/tsi-components/reporting/reporting.component.mjs +667 -0
- package/esm2022/lib/tsi-components/spinner/spinner.component.mjs +15 -0
- package/esm2022/lib/tsi-components/tsi-bubble-info/tsi-bubble-info.component.mjs +21 -0
- package/esm2022/lib/tsi-components/tsi-calender/context-menu/context-menu.component.mjs +46 -0
- package/esm2022/lib/tsi-components/tsi-calender/tsi-calender.component.mjs +297 -0
- package/esm2022/lib/tsi-components/tsi-card/tsi-card.component.mjs +64 -0
- package/esm2022/lib/tsi-components/tsi-card-list/tsi-card-list.component.mjs +112 -0
- package/esm2022/lib/tsi-components/tsi-change-password/tsi-change-password.component.mjs +39 -0
- package/esm2022/lib/tsi-components/tsi-code-generator/tsi-code-generator.component.mjs +83 -0
- package/esm2022/lib/tsi-components/tsi-divider/tsi-divider.component.mjs +18 -0
- package/esm2022/lib/tsi-components/tsi-form/tsi-form.component.mjs +305 -0
- package/esm2022/lib/tsi-components/tsi-form-modal-footer/tsi-form-modal-footer.component.mjs +15 -0
- package/esm2022/lib/tsi-components/tsi-generic-crud/tsi-generic-crud.component.mjs +883 -0
- package/esm2022/lib/tsi-components/tsi-generic-form/tsi-generic-form.component.mjs +149 -0
- package/esm2022/lib/tsi-components/tsi-kanban/tsi-kanban.component.mjs +231 -0
- package/esm2022/lib/tsi-components/tsi-log-event-history/tsi-log-event-history.component.mjs +119 -0
- package/esm2022/lib/tsi-components/tsi-modal/tsi-modal.component.mjs +25 -0
- package/esm2022/lib/tsi-components/tsi-modal-footer/tsi-modal-footer.component.mjs +119 -0
- package/esm2022/lib/tsi-components/tsi-modal-header/tsi-modal-header.component.mjs +54 -0
- package/esm2022/lib/tsi-components/tsi-notes-avertir/tsi-notes-avertir.component.mjs +27 -0
- package/esm2022/lib/tsi-components/tsi-notes-createoredit/tsi-notes.component.mjs +123 -0
- package/esm2022/lib/tsi-components/tsi-notes-grid/tsi-notes-grid.component.mjs +41 -0
- package/esm2022/lib/tsi-components/tsi-popup-text-viewer/tsi-popup-text-viewer.component.mjs +187 -0
- package/esm2022/lib/tsi-components/tsi-progress-bar/tsi-progress-bar.component.mjs +170 -0
- package/esm2022/lib/tsi-components/tsi-search-box/tsi-search-box.component.mjs +142 -0
- package/esm2022/lib/tsi-components/tsi-send-mail/tsi-send-mail.component.mjs +37 -0
- package/esm2022/lib/tsi-components/tsi-tab-panel/tsi-tab-panel.component.mjs +52 -0
- package/esm2022/lib/tsi-components/tsi-tab-view/tsi-tab-view.component.mjs +46 -0
- package/esm2022/lib/tsi-components/tsi-tenants/tsi-tenants.component.mjs +122 -0
- package/esm2022/lib/tsi-components/tsi-tooltip/tsi-tooltip.component.mjs +21 -0
- package/esm2022/lib/tsi-components/tsi-upload-fiche/tsi-upload-fiche.component.mjs +186 -0
- package/esm2022/lib/tsi-components/tsi-upload-grid/tsi-upload-grid.component.mjs +54 -0
- package/esm2022/lib/tsi-directives/auto-select.directive.mjs +33 -0
- package/esm2022/lib/tsi-directives/busy.directive.mjs +32 -0
- package/esm2022/lib/tsi-directives/dynamic-component-loader/ad.directive.mjs +16 -0
- package/esm2022/lib/tsi-directives/index.mjs +8 -0
- package/esm2022/lib/tsi-directives/module-main-parameter.directive.mjs +16 -0
- package/esm2022/lib/tsi-directives/presentation-designer-base.directive.mjs +238 -0
- package/esm2022/lib/tsi-directives/presentation-designer.directive.mjs +205 -0
- package/esm2022/lib/tsi-directives/validation.directive.mjs +85 -0
- package/esm2022/lib/tsi-helpers/compoent-reference.helper.mjs +7 -0
- package/esm2022/lib/tsi-helpers/date-helper.mjs +21 -0
- package/esm2022/lib/tsi-helpers/export-excel.helper.mjs +40 -0
- package/esm2022/lib/tsi-helpers/filter-helper.mjs +126 -0
- package/esm2022/lib/tsi-helpers/grid-col-style.helper.mjs +7 -0
- package/esm2022/lib/tsi-helpers/guid.helper.mjs +19 -0
- package/esm2022/lib/tsi-helpers/helpers.mjs +9 -0
- package/esm2022/lib/tsi-helpers/index.mjs +13 -0
- package/esm2022/lib/tsi-helpers/mapping-helper.mjs +10 -0
- package/esm2022/lib/tsi-helpers/object.helper.mjs +6 -0
- package/esm2022/lib/tsi-helpers/primeng-translate-config.mjs +55 -0
- package/esm2022/lib/tsi-helpers/storage-manager.mjs +33 -0
- package/esm2022/lib/tsi-helpers/type-registry.helper.mjs +49 -0
- package/esm2022/lib/types/enum-description.type.mjs +2 -0
- package/esm2022/lib/types/index.mjs +3 -0
- package/esm2022/lib/types/time-only.mjs +42 -0
- package/esm2022/public-api.mjs +21 -0
- package/esm2022/tsi-developpement-tsi-shared-ui.mjs +5 -0
- package/esm2022/tsi-tsi-shared-ui.mjs +5 -0
- package/fesm2022/tsi-developpement-tsi-shared-ui.mjs +17486 -0
- package/fesm2022/tsi-developpement-tsi-shared-ui.mjs.map +1 -0
- package/fesm2022/tsi-tsi-shared-ui.mjs +17486 -0
- package/fesm2022/tsi-tsi-shared-ui.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/consts/app-providers.d.ts +4 -0
- package/lib/consts/html-template.const.d.ts +12 -0
- package/lib/consts/index.d.ts +7 -0
- package/lib/consts/localization-key.d.ts +11 -0
- package/lib/consts/locals.const.d.ts +7 -0
- package/lib/consts/queryParamNames.const.d.ts +10 -0
- package/lib/consts/themes.d.ts +4 -0
- package/lib/consts/tsi-consts.d.ts +40 -0
- package/lib/end-points/authorization-endpoints.d.ts +31 -0
- package/lib/end-points/baseuri.d.ts +10 -0
- package/lib/end-points/endpoints.d.ts +205 -0
- package/lib/end-points/import-export-endpoint.d.ts +33 -0
- package/lib/end-points/index.d.ts +6 -0
- package/lib/end-points/presentation-settings-endpoints.d.ts +11 -0
- package/lib/end-points/reporting-endpoints.d.ts +53 -0
- package/lib/end-points/shared-endpoint.d.ts +9 -0
- package/lib/end-points/user-identity-endpoints.d.ts +59 -0
- package/lib/enums/Language.d.ts +9 -0
- package/lib/enums/auto-complete.d.ts +4 -0
- package/lib/enums/button-type.enum.d.ts +4 -0
- package/lib/enums/claim-types.d.ts +13 -0
- package/lib/enums/code-format.d.ts +4 -0
- package/lib/enums/component-use-modes-enum.d.ts +17 -0
- package/lib/enums/css-units.d.ts +8 -0
- package/lib/enums/decimal-format.d.ts +6 -0
- package/lib/enums/display-types.d.ts +17 -0
- package/lib/enums/filter-operator-type.d.ts +18 -0
- package/lib/enums/form-validation-error.d.ts +11 -0
- package/lib/enums/grid-selection-mode.d.ts +5 -0
- package/lib/enums/grid-sort-mode.d.ts +5 -0
- package/lib/enums/http-method-types.d.ts +4 -0
- package/lib/enums/index.d.ts +24 -0
- package/lib/enums/input-types.d.ts +18 -0
- package/lib/enums/layout-orientation.d.ts +4 -0
- package/lib/enums/logout-reason-enum.d.ts +6 -0
- package/lib/enums/modal-size-enum.d.ts +10 -0
- package/lib/enums/report-type.d.ts +7 -0
- package/lib/enums/status.d.ts +7 -0
- package/lib/enums/text-box-type.d.ts +5 -0
- package/lib/enums/tooltipPosition.enum.d.ts +6 -0
- package/lib/enums/tsi-component-enum.d.ts +37 -0
- package/lib/enums/type-import.d.ts +4 -0
- package/lib/functions/array.functions.d.ts +1 -0
- package/lib/functions/index.d.ts +1 -0
- package/lib/functions/modal-open.function.d.ts +9 -0
- package/lib/guards/admin.guard.d.ts +14 -0
- package/lib/guards/auth.guard.d.ts +12 -0
- package/lib/guards/index.d.ts +3 -0
- package/lib/guards/permission.guard.d.ts +2 -0
- package/lib/interfaces/configuration/configuration.d.ts +10 -0
- package/lib/interfaces/generic-form/generic-form.d.ts +45 -0
- package/lib/interfaces/generic-types/dictionary.d.ts +3 -0
- package/lib/interfaces/grid/grid-configuration.d.ts +116 -0
- package/lib/interfaces/index.d.ts +11 -0
- package/lib/interfaces/modal/dynamic.component.d.ts +18 -0
- package/lib/interfaces/modal/modal-size.d.ts +4 -0
- package/lib/interfaces/pagination/pagination-base.d.ts +46 -0
- package/lib/interfaces/select-list/combo-status-model.d.ts +8 -0
- package/lib/interfaces/settings/app-settings.d.ts +4 -0
- package/lib/interfaces/styles/css-size-property.d.ts +10 -0
- package/lib/interfaces/translation/translation.d.ts +10 -0
- package/lib/models/Notes/Note.d.ts +25 -0
- package/lib/models/application/configuration/endpoint-infos.d.ts +6 -0
- package/lib/models/application/configuration/entity-delete-behavior.d.ts +6 -0
- package/lib/models/authorization/authorization-token-mapper.d.ts +4 -0
- package/lib/models/authorization/authorization-token.d.ts +16 -0
- package/lib/models/common/component-descriminator.d.ts +4 -0
- package/lib/models/common/entity-properties.d.ts +5 -0
- package/lib/models/common/entity-validations.d.ts +7 -0
- package/lib/models/common/event-schema.d.ts +6 -0
- package/lib/models/common/key-value-pair.d.ts +4 -0
- package/lib/models/entity-info/entity-info.d.ts +37 -0
- package/lib/models/filter/filter-by-existing-values.d.ts +6 -0
- package/lib/models/filter/paged-result-request-base.d.ts +16 -0
- package/lib/models/filter/search-field.d.ts +35 -0
- package/lib/models/import-export/import-export.d.ts +28 -0
- package/lib/models/index.d.ts +37 -0
- package/lib/models/journalisation-application/journalisation-application.d.ts +39 -0
- package/lib/models/journalisation-application/status-history.d.ts +12 -0
- package/lib/models/layout/layout-config.d.ts +3 -0
- package/lib/models/modal/bs-modal.d.ts +5 -0
- package/lib/models/presentation-settings/presentation-settings.d.ts +14 -0
- package/lib/models/progress-bar/progress-bar-create-request.d.ts +8 -0
- package/lib/models/progress-bar/progress-bar-response.d.ts +10 -0
- package/lib/models/progress-bar/progress-bar-update-request.d.ts +9 -0
- package/lib/models/remote-services-utility/subscription-result.d.ts +15 -0
- package/lib/models/reporting/json-data-connection.d.ts +6 -0
- package/lib/models/reporting/optional-endpoints.d.ts +8 -0
- package/lib/models/reporting/report-template-response.d.ts +13 -0
- package/lib/models/reporting/report-to-edit-template.d.ts +29 -0
- package/lib/models/reporting/report-to-print.d.ts +18 -0
- package/lib/models/reporting/report-to-template.d.ts +19 -0
- package/lib/models/settings/devise.d.ts +9 -0
- package/lib/models/settings/fichier.d.ts +14 -0
- package/lib/models/settings/type-fichier.d.ts +4 -0
- package/lib/models/tsi-card/tsi-card.d.ts +9 -0
- package/lib/models/user-identity/login-response.d.ts +8 -0
- package/lib/models/user-identity/tenant.d.ts +5 -0
- package/lib/models/user-identity/user-identity.d.ts +5 -0
- package/lib/models/workflow/workflow.d.ts +36 -0
- package/lib/package-initializer.d.ts +1 -0
- package/lib/pipes/cut-label.pipe.d.ts +7 -0
- package/lib/pipes/index.d.ts +7 -0
- package/lib/pipes/localize.pipe.d.ts +11 -0
- package/lib/pipes/modal-label.pipe.d.ts +10 -0
- package/lib/pipes/shorten.pipe.d.ts +7 -0
- package/lib/pipes/to-number.pipe.d.ts +7 -0
- package/lib/pipes/tsi-currency.pipe.d.ts +10 -0
- package/lib/pipes/tsi-decimal.pipe.d.ts +7 -0
- package/lib/providers/index.d.ts +1 -0
- package/lib/providers/shared-ui-tsi.provider.d.ts +8 -0
- package/lib/routes/admin.routes.d.ts +4 -0
- package/lib/routes/app.routes.d.ts +6 -0
- package/lib/routes/identity.routes.d.ts +3 -0
- package/lib/routes/index.d.ts +4 -0
- package/lib/routes/manage-reporting.routes.d.ts +4 -0
- package/lib/services/Component-Finder/tsi-component-finder.service.d.ts +10 -0
- package/lib/services/Import-Export/modele-import.service.d.ts +21 -0
- package/lib/services/Note/Note.service.d.ts +15 -0
- package/lib/services/UserIdentity/identity-platform-authentication.service.d.ts +13 -0
- package/lib/services/UserIdentity/user-identity.service.d.ts +15 -0
- package/lib/services/application/api-explorer.service.d.ts +13 -0
- package/lib/services/application/app.layout.service.d.ts +47 -0
- package/lib/services/application/parametres-application-parambase.service.d.ts +10 -0
- package/lib/services/authorization/authorization.service.d.ts +46 -0
- package/lib/services/authorization/identity-manager.service.d.ts +23 -0
- package/lib/services/base/crud-base.service.d.ts +20 -0
- package/lib/services/configuration/entity-configuration.service.d.ts +22 -0
- package/lib/services/currentUser/currentUser.service.d.ts +26 -0
- package/lib/services/date-helper.service.d.ts +32 -0
- package/lib/services/dialog-data.service.d.ts +12 -0
- package/lib/services/fichier/fichier-upload.service.d.ts +15 -0
- package/lib/services/fichier/fichier.service.d.ts +10 -0
- package/lib/services/formula.service.d.ts +10 -0
- package/lib/services/generator/html-template-generator.service.d.ts +28 -0
- package/lib/services/index.d.ts +40 -0
- package/lib/services/journalisation/journalisation-application.service.d.ts +12 -0
- package/lib/services/journalisation/status-history.service.d.ts +12 -0
- package/lib/services/layout/layout-helper.service.d.ts +25 -0
- package/lib/services/modal/tsi-bs-modal.service.d.ts +16 -0
- package/lib/services/modal/tsi-modal.service.d.ts +9 -0
- package/lib/services/module-code/module-code.service.d.ts +18 -0
- package/lib/services/module-main-parameter.service.d.ts +12 -0
- package/lib/services/notification/error-response-manager.service.d.ts +13 -0
- package/lib/services/notification/tsi-confirmation.service.d.ts +11 -0
- package/lib/services/notification/tsi-message.service.d.ts +13 -0
- package/lib/services/notification/tsi-notification.service.d.ts +18 -0
- package/lib/services/presentation-setting/presentation-designer-base.service.d.ts +14 -0
- package/lib/services/presentation-setting/presentation-designer.service.d.ts +19 -0
- package/lib/services/presentation-setting/presentation-setting.service.d.ts +16 -0
- package/lib/services/progress-bar/progress-bar-helper.service.d.ts +19 -0
- package/lib/services/progress-bar/progress-bar.service.d.ts +16 -0
- package/lib/services/record-info-popup.service.d.ts +10 -0
- package/lib/services/reporting/dashboard-module.service.d.ts +11 -0
- package/lib/services/reporting/reporting.service.d.ts +32 -0
- package/lib/services/settings/app-settings.service.d.ts +13 -0
- package/lib/services/settings/keyboard-shortcut.service.d.ts +9 -0
- package/lib/services/status/entityStatus.service.d.ts +11 -0
- package/lib/services/translation/translation.service.d.ts +20 -0
- package/lib/services/validation/entity-validations.service.d.ts +10 -0
- package/lib/services/validation/generic-validation-state.service.d.ts +15 -0
- package/lib/services/validation/input-registry.service.d.ts +11 -0
- package/lib/services/workflow/workflow-configuration.service.d.ts +28 -0
- package/lib/shared.module.d.ts +141 -0
- package/lib/tsi-base/components/app-base/app-base.component.d.ts +28 -0
- package/lib/tsi-base/components/tsi-base/tsi-base.component.d.ts +11 -0
- package/lib/tsi-base/components/tsi-form-base/tsi-form-base.component.d.ts +118 -0
- package/lib/tsi-base/components/tsi-list-base/tsi-list-base.component.d.ts +85 -0
- package/lib/tsi-base/index.d.ts +5 -0
- package/lib/tsi-base/tsi-input-base/tsi-input-base.component.d.ts +34 -0
- package/lib/tsi-components/alert-import-message/alert-import-message.component.d.ts +10 -0
- package/lib/tsi-components/button-components/Tsi-Submit-Button/tsi-submit-button.component.d.ts +16 -0
- package/lib/tsi-components/button-components/tsi-button/tsi-button.component.d.ts +26 -0
- package/lib/tsi-components/create-or-edit-entity-informations/create-or-edit-entity-informations.component.d.ts +31 -0
- package/lib/tsi-components/create-or-edit-modele-import/create-or-edit-modele-import.component.d.ts +52 -0
- package/lib/tsi-components/index.d.ts +79 -0
- package/lib/tsi-components/input-components/editable-grid/editable-grid.component.d.ts +127 -0
- package/lib/tsi-components/input-components/tsi-checkbox/tsi-checkbox.component.d.ts +30 -0
- package/lib/tsi-components/input-components/tsi-currency-other-input/tsi-currency-other-input.component.d.ts +18 -0
- package/lib/tsi-components/input-components/tsi-currency-societe-input/tsi-currency-societe-input.component.d.ts +21 -0
- package/lib/tsi-components/input-components/tsi-date-picker/tsi-date-picker.component.d.ts +38 -0
- package/lib/tsi-components/input-components/tsi-decimal-input/tsi-decimal-input.component.d.ts +14 -0
- package/lib/tsi-components/input-components/tsi-file-manager/tsi-file-manager.component.d.ts +45 -0
- package/lib/tsi-components/input-components/tsi-formula-box/tsi-formula-box.component.d.ts +17 -0
- package/lib/tsi-components/input-components/tsi-integer/tsi-integer.component.d.ts +19 -0
- package/lib/tsi-components/input-components/tsi-radio-button/tsi-radio-button.component.d.ts +16 -0
- package/lib/tsi-components/input-components/tsi-rate-input/tsi-rate-input.component.d.ts +16 -0
- package/lib/tsi-components/input-components/tsi-search-combo/tsi-search-combo.component.d.ts +92 -0
- package/lib/tsi-components/input-components/tsi-text-area/tsi-text-area.component.d.ts +17 -0
- package/lib/tsi-components/input-components/tsi-text-box/tsi-text-box.component.d.ts +21 -0
- package/lib/tsi-components/input-components/tsi-time-picker/tsi-time-picker.component.d.ts +23 -0
- package/lib/tsi-components/logout-popup/logout-popup.component.d.ts +5 -0
- package/lib/tsi-components/manage-import-export/manage-import-export.component.d.ts +64 -0
- package/lib/tsi-components/manage-reporting/add-report-popup/add-report-popup.component.d.ts +151 -0
- package/lib/tsi-components/manage-reporting/manage-reporting.component.d.ts +109 -0
- package/lib/tsi-components/message-components/tsi-error-message/tsi-error-message.component.d.ts +15 -0
- package/lib/tsi-components/message-components/tsi-info-message/tsi-info-message.component.d.ts +13 -0
- package/lib/tsi-components/message-components/tsi-redirection-message/tsi-redirection-message.component.d.ts +9 -0
- package/lib/tsi-components/message-components/tsi-success-message/tsi-success-message.component.d.ts +13 -0
- package/lib/tsi-components/modal-component/modal.component.d.ts +25 -0
- package/lib/tsi-components/modal-loader/modal-loader.component.d.ts +27 -0
- package/lib/tsi-components/output-components/display-nested-prop/display-nested-prop.component.d.ts +14 -0
- package/lib/tsi-components/output-components/tsi-checkbox-display/tsi-checkbox-display.component.d.ts +6 -0
- package/lib/tsi-components/output-components/tsi-currency-other-display/tsi-currency-other-display.component.d.ts +7 -0
- package/lib/tsi-components/output-components/tsi-currency-societe-display/tsi-currency-societe-display.component.d.ts +19 -0
- package/lib/tsi-components/output-components/tsi-date-display/tsi-date-display.component.d.ts +10 -0
- package/lib/tsi-components/output-components/tsi-decimal-display/tsi-decimal-display.component.d.ts +9 -0
- package/lib/tsi-components/output-components/tsi-display-grid/tsi-display-grid.component.d.ts +41 -0
- package/lib/tsi-components/output-components/tsi-generic-grid/tsi-generic-grid.component.d.ts +231 -0
- package/lib/tsi-components/output-components/tsi-image-display/tsi-image-display.component.d.ts +46 -0
- package/lib/tsi-components/output-components/tsi-integer-display/tsi-integer-display.component.d.ts +6 -0
- package/lib/tsi-components/output-components/tsi-label/tsi-label.component.d.ts +8 -0
- package/lib/tsi-components/output-components/tsi-label-legend/tsi-label-legend.component.d.ts +6 -0
- package/lib/tsi-components/output-components/tsi-legend/tsi-legend.component.d.ts +9 -0
- package/lib/tsi-components/output-components/tsi-paragraph/tsi-paragraph.component.d.ts +6 -0
- package/lib/tsi-components/output-components/tsi-rate-display/tsi-rate-display.component.d.ts +10 -0
- package/lib/tsi-components/output-components/tsi-time-display/tsi-time-display.component.d.ts +7 -0
- package/lib/tsi-components/output-components/tsi-view-grid/tsi-view-grid.component.d.ts +97 -0
- package/lib/tsi-components/reporting/reporting.component.d.ts +103 -0
- package/lib/tsi-components/spinner/spinner.component.d.ts +8 -0
- package/lib/tsi-components/tsi-bubble-info/tsi-bubble-info.component.d.ts +9 -0
- package/lib/tsi-components/tsi-calender/context-menu/context-menu.component.d.ts +25 -0
- package/lib/tsi-components/tsi-calender/tsi-calender.component.d.ts +50 -0
- package/lib/tsi-components/tsi-card/tsi-card.component.d.ts +25 -0
- package/lib/tsi-components/tsi-card-list/tsi-card-list.component.d.ts +35 -0
- package/lib/tsi-components/tsi-change-password/tsi-change-password.component.d.ts +21 -0
- package/lib/tsi-components/tsi-code-generator/tsi-code-generator.component.d.ts +23 -0
- package/lib/tsi-components/tsi-divider/tsi-divider.component.d.ts +6 -0
- package/lib/tsi-components/tsi-form/tsi-form.component.d.ts +91 -0
- package/lib/tsi-components/tsi-form-modal-footer/tsi-form-modal-footer.component.d.ts +8 -0
- package/lib/tsi-components/tsi-generic-crud/tsi-generic-crud.component.d.ts +156 -0
- package/lib/tsi-components/tsi-generic-form/tsi-generic-form.component.d.ts +28 -0
- package/lib/tsi-components/tsi-kanban/tsi-kanban.component.d.ts +68 -0
- package/lib/tsi-components/tsi-log-event-history/tsi-log-event-history.component.d.ts +35 -0
- package/lib/tsi-components/tsi-modal/tsi-modal.component.d.ts +10 -0
- package/lib/tsi-components/tsi-modal-footer/tsi-modal-footer.component.d.ts +38 -0
- package/lib/tsi-components/tsi-modal-header/tsi-modal-header.component.d.ts +19 -0
- package/lib/tsi-components/tsi-notes-avertir/tsi-notes-avertir.component.d.ts +13 -0
- package/lib/tsi-components/tsi-notes-createoredit/tsi-notes.component.d.ts +21 -0
- package/lib/tsi-components/tsi-notes-grid/tsi-notes-grid.component.d.ts +12 -0
- package/lib/tsi-components/tsi-popup-text-viewer/tsi-popup-text-viewer.component.d.ts +41 -0
- package/lib/tsi-components/tsi-progress-bar/tsi-progress-bar.component.d.ts +38 -0
- package/lib/tsi-components/tsi-search-box/tsi-search-box.component.d.ts +44 -0
- package/lib/tsi-components/tsi-send-mail/tsi-send-mail.component.d.ts +21 -0
- package/lib/tsi-components/tsi-tab-panel/tsi-tab-panel.component.d.ts +18 -0
- package/lib/tsi-components/tsi-tab-view/tsi-tab-view.component.d.ts +17 -0
- package/lib/tsi-components/tsi-tenants/tsi-tenants.component.d.ts +39 -0
- package/lib/tsi-components/tsi-tooltip/tsi-tooltip.component.d.ts +9 -0
- package/lib/tsi-components/tsi-upload-fiche/tsi-upload-fiche.component.d.ts +35 -0
- package/lib/tsi-components/tsi-upload-grid/tsi-upload-grid.component.d.ts +13 -0
- package/lib/tsi-directives/auto-select.directive.d.ts +9 -0
- package/lib/tsi-directives/busy.directive.d.ts +11 -0
- package/lib/tsi-directives/dynamic-component-loader/ad.directive.d.ts +8 -0
- package/lib/tsi-directives/index.d.ts +7 -0
- package/lib/tsi-directives/module-main-parameter.directive.d.ts +8 -0
- package/lib/tsi-directives/presentation-designer-base.directive.d.ts +41 -0
- package/lib/tsi-directives/presentation-designer.directive.d.ts +37 -0
- package/lib/tsi-directives/validation.directive.d.ts +18 -0
- package/lib/tsi-helpers/compoent-reference.helper.d.ts +5 -0
- package/lib/tsi-helpers/date-helper.d.ts +6 -0
- package/lib/tsi-helpers/export-excel.helper.d.ts +5 -0
- package/lib/tsi-helpers/filter-helper.d.ts +12 -0
- package/lib/tsi-helpers/grid-col-style.helper.d.ts +5 -0
- package/lib/tsi-helpers/guid.helper.d.ts +6 -0
- package/lib/tsi-helpers/helpers.d.ts +4 -0
- package/lib/tsi-helpers/index.d.ts +12 -0
- package/lib/tsi-helpers/mapping-helper.d.ts +5 -0
- package/lib/tsi-helpers/object.helper.d.ts +3 -0
- package/lib/tsi-helpers/primeng-translate-config.d.ts +54 -0
- package/lib/tsi-helpers/storage-manager.d.ts +8 -0
- package/lib/tsi-helpers/type-registry.helper.d.ts +34 -0
- package/lib/types/enum-description.type.d.ts +3 -0
- package/lib/types/index.d.ts +2 -0
- package/lib/types/time-only.d.ts +17 -0
- package/package.json +24 -0
- package/public-api.d.ts +17 -0
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import { Component, Input } from '@angular/core';
|
|
2
|
+
import { TsiComponentEnum, Modes } from '../../enums';
|
|
3
|
+
import { TsiFormComponentBaseComponent } from '../../tsi-base/components/tsi-form-base/tsi-form-base.component';
|
|
4
|
+
import { LocalizationKeys } from '../../consts/localization-key';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "../../services";
|
|
7
|
+
import * as i2 from "primeng/dynamicdialog";
|
|
8
|
+
import * as i3 from "@angular/common";
|
|
9
|
+
import * as i4 from "@angular/forms";
|
|
10
|
+
import * as i5 from "primeng/tabview";
|
|
11
|
+
import * as i6 from "../input-components/tsi-search-combo/tsi-search-combo.component";
|
|
12
|
+
import * as i7 from "../input-components/tsi-checkbox/tsi-checkbox.component";
|
|
13
|
+
import * as i8 from "../input-components/tsi-currency-other-input/tsi-currency-other-input.component";
|
|
14
|
+
import * as i9 from "../input-components/tsi-currency-societe-input/tsi-currency-societe-input.component";
|
|
15
|
+
import * as i10 from "../input-components/tsi-date-picker/tsi-date-picker.component";
|
|
16
|
+
import * as i11 from "../input-components/tsi-decimal-input/tsi-decimal-input.component";
|
|
17
|
+
import * as i12 from "../input-components/tsi-integer/tsi-integer.component";
|
|
18
|
+
import * as i13 from "../input-components/tsi-rate-input/tsi-rate-input.component";
|
|
19
|
+
import * as i14 from "../input-components/tsi-text-box/tsi-text-box.component";
|
|
20
|
+
import * as i15 from "../output-components/tsi-label/tsi-label.component";
|
|
21
|
+
import * as i16 from "../output-components/tsi-paragraph/tsi-paragraph.component";
|
|
22
|
+
import * as i17 from "../tsi-modal-footer/tsi-modal-footer.component";
|
|
23
|
+
import * as i18 from "../tsi-modal-header/tsi-modal-header.component";
|
|
24
|
+
import * as i19 from "../../tsi-directives/busy.directive";
|
|
25
|
+
import * as i20 from "../../pipes/localize.pipe";
|
|
26
|
+
import * as i21 from "../../pipes/modal-label.pipe";
|
|
27
|
+
export class TsiGenericFormComponent extends TsiFormComponentBaseComponent {
|
|
28
|
+
openNext() {
|
|
29
|
+
this.index = (this.index === 2) ? 0 : this.index + 1;
|
|
30
|
+
}
|
|
31
|
+
openPrev() {
|
|
32
|
+
this.index = (this.index === 0) ? 2 : this.index - 1;
|
|
33
|
+
}
|
|
34
|
+
//#endregion
|
|
35
|
+
constructor(_message, _notify, _confirm, ref, config) {
|
|
36
|
+
super(ref, config);
|
|
37
|
+
this._message = _message;
|
|
38
|
+
this._notify = _notify;
|
|
39
|
+
this._confirm = _confirm;
|
|
40
|
+
this.ref = ref;
|
|
41
|
+
this.config = config;
|
|
42
|
+
this.index = 0;
|
|
43
|
+
//item: any;
|
|
44
|
+
this.tsiComponents = TsiComponentEnum;
|
|
45
|
+
this.blocs = [];
|
|
46
|
+
}
|
|
47
|
+
ngOnInit() {
|
|
48
|
+
super.ngOnInit();
|
|
49
|
+
if ((this.mode == Modes.edit || this.mode == Modes.delete)
|
|
50
|
+
&& this.id != null
|
|
51
|
+
&& this.id != undefined
|
|
52
|
+
&& this.crudService != null
|
|
53
|
+
&& this.crudService != undefined) {
|
|
54
|
+
this.isloading = true;
|
|
55
|
+
this.crudService.getById(this.id)
|
|
56
|
+
.subscribe({
|
|
57
|
+
next: (data) => {
|
|
58
|
+
this.item = data;
|
|
59
|
+
this._notify.success(this.l(LocalizationKeys.retrievedSuccessfully));
|
|
60
|
+
},
|
|
61
|
+
error: (error) => {
|
|
62
|
+
this._notify.error(error.message);
|
|
63
|
+
},
|
|
64
|
+
complete: () => { this.isloading = false; }
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
save() {
|
|
69
|
+
super.save();
|
|
70
|
+
switch (this.mode) {
|
|
71
|
+
case Modes.create:
|
|
72
|
+
this._saveCreateMode();
|
|
73
|
+
break;
|
|
74
|
+
case Modes.edit:
|
|
75
|
+
this._saveEditMode();
|
|
76
|
+
break;
|
|
77
|
+
case Modes.delete:
|
|
78
|
+
this._saveDeleteMode();
|
|
79
|
+
break;
|
|
80
|
+
default: throw new Error('no mode have bben set to TsiGenericFormComponent');
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
//#region private methods
|
|
84
|
+
_saveCreateMode() {
|
|
85
|
+
if (this.crudService != null
|
|
86
|
+
&& this.crudService != undefined) {
|
|
87
|
+
this.isloading = true;
|
|
88
|
+
this.crudService.create(this.item)
|
|
89
|
+
.subscribe({
|
|
90
|
+
next: (data) => {
|
|
91
|
+
this._notify.success(this.l(LocalizationKeys.createdSuccessfully));
|
|
92
|
+
},
|
|
93
|
+
error: (error) => {
|
|
94
|
+
this._notify.error(error.message);
|
|
95
|
+
},
|
|
96
|
+
complete: () => { this.isloading = false; }
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
_saveEditMode() {
|
|
101
|
+
if (this.id != null
|
|
102
|
+
&& this.id != undefined
|
|
103
|
+
&& this.crudService != null
|
|
104
|
+
&& this.crudService != undefined) {
|
|
105
|
+
this.isloading = true;
|
|
106
|
+
this.crudService.update(this.item, this.id)
|
|
107
|
+
.subscribe({
|
|
108
|
+
next: (data) => {
|
|
109
|
+
this._notify.success(this.l(LocalizationKeys.updatedSuccessfully));
|
|
110
|
+
},
|
|
111
|
+
error: (error) => {
|
|
112
|
+
this._notify.error(error.message);
|
|
113
|
+
},
|
|
114
|
+
complete: () => { this.isloading = false; }
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
_saveDeleteMode() {
|
|
119
|
+
if (this.id != null
|
|
120
|
+
&& this.id != undefined
|
|
121
|
+
&& this.crudService != null
|
|
122
|
+
&& this.crudService != undefined) {
|
|
123
|
+
this.isloading = true;
|
|
124
|
+
this.crudService.delete(this.id)
|
|
125
|
+
.subscribe({
|
|
126
|
+
next: (data) => {
|
|
127
|
+
this._notify.success(this.l(LocalizationKeys.deletedSuccessfully));
|
|
128
|
+
},
|
|
129
|
+
error: (error) => {
|
|
130
|
+
this._notify.error(error.message);
|
|
131
|
+
},
|
|
132
|
+
complete: () => { this.isloading = false; }
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TsiGenericFormComponent, deps: [{ token: i1.TsiMessageService }, { token: i1.TsiNotificationService }, { token: i1.TsiConfirmationService }, { token: i2.DynamicDialogRef }, { token: i2.DynamicDialogConfig }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
137
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TsiGenericFormComponent, selector: "tsi-generic-form", inputs: { crudService: "crudService", configuration: "configuration", blocs: "blocs" }, usesInheritance: true, ngImport: i0, template: "<form class=\"form-horizontal\" autocomplete=\"off\" #editfactureAchatModal=\"ngForm\" (ngSubmit)=\"save()\">\r\n <Tsi-Modal-Header [inputTitle]=\"header | modalLabel :mode:'gesc_achats_factureachat'\" (onCloseClick)=\"hide()\">\r\n </Tsi-Modal-Header>\r\n <fieldset [disabled]=\"isDeleteMode()\" [busy]=\"isloading\">\r\n <div class=\"grid\">\r\n <div *ngFor=\"let bloc of blocs\">\r\n\r\n <!-- Tsi-Label -->\r\n <div *ngIf=\"bloc.type == tsiComponents.Label; else searchComboBlock\">\r\n <Tsi-Label [labelValue]=\"bloc.typeConfig['labelValue'] ? bloc.typeConfig['labelValue'] : '' | localize\">\r\n </Tsi-Label>\r\n </div>\r\n <!-- Tsi-Search-Combo -->\r\n <ng-template #searchComboBlock>\r\n <ng-container *ngIf=\"bloc.type == tsiComponents.SearchCombo; else currencySocieteInputBlock\">\r\n <Tsi-Search-Combo [elementSourceUrl]=\"bloc.typeConfig['elementSourceUrl']\"\r\n [listSourceUrl]=\"bloc.typeConfig['listSourceUrl']\" [(bind)]=\"item[bloc.typeConfig['bind']]\"\r\n [id-field]=\"bloc.typeConfig['id-field']\" [label-field]=\"bloc.typeConfig['label-field']\"\r\n [isFiltered]=\"bloc.typeConfig['isFiltered']\"></Tsi-Search-Combo>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-Currency-Societe-Input -->\r\n <ng-template class=\"{{bloc.styleClass}}\" #currencySocieteInputBlock>\r\n <ng-container *ngIf=\"bloc.type == tsiComponents.CurrencySocieteInput; else currencyOtherInputBlock\">\r\n <Tsi-Currency-Societe-Input [inputName]=\"bloc.typeConfig['inputName']\"\r\n [inputId]=\"bloc.typeConfig['inputId']\" [(inputField)]=\"item[bloc.typeConfig['inputField']]\">\r\n </Tsi-Currency-Societe-Input>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-Currency-Other-Input -->\r\n <ng-template class=\"{{bloc.styleClass}}\" #currencyOtherInputBlock>\r\n <ng-container *ngIf=\"bloc.type == tsiComponents.CurrencyOtherInput; else datePickerInputBlock\">\r\n <Tsi-Currency-Other-Input [inputName]=\"bloc.typeConfig['inputName']\"\r\n [inputId]=\"bloc.typeConfig['inputId']\" [(inputField)]=\"item[bloc.typeConfig['inputField']]\">\r\n </Tsi-Currency-Other-Input>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-Date-Picker -->\r\n <ng-template class=\"{{bloc.styleClass}}\" #datePickerInputBlock>\r\n <ng-container *ngIf=\"bloc.type == tsiComponents.DatePicker; else checkBoxInputBlock\">\r\n <Tsi-Date-Picker [inputName]=\"bloc.typeConfig['inputName']\"\r\n [inputId]=\"bloc.typeConfig['inputId']\" [(inputField)]=\"item[bloc.typeConfig['inputField']]\">\r\n </Tsi-Date-Picker>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-CheckBox -->\r\n <ng-template class=\"{{bloc.styleClass}}\" #checkBoxInputBlock>\r\n <ng-container *ngIf=\"bloc.type == tsiComponents.Checkbox; else decimalInputBlock\">\r\n <Tsi-CheckBox [inputName]=\"bloc.typeConfig['inputName']\" [inputId]=\"bloc.typeConfig['inputId']\"\r\n [(inputField)]=\"item[bloc.typeConfig['inputField']]\">\r\n </Tsi-CheckBox>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-Decimal-Input -->\r\n <ng-template class=\"{{bloc.styleClass}}\" #decimalInputBlock>\r\n <ng-container *ngIf=\"bloc.type == tsiComponents.DecimalInput; else integerInputBlock\">\r\n <Tsi-Decimal-Input [inputName]=\"bloc.typeConfig['inputName']\"\r\n [inputId]=\"bloc.typeConfig['inputId']\" [(inputField)]=\"item[bloc.typeConfig['inputField']]\">\r\n </Tsi-Decimal-Input>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-Integer -->\r\n <ng-template class=\"{{bloc.styleClass}}\" #integerInputBlock>\r\n <ng-container *ngIf=\"bloc.type == tsiComponents.Integer; else rateInputBlock\">\r\n <Tsi-Integer [inputName]=\"bloc.typeConfig['inputName']\" [inputId]=\"bloc.typeConfig['inputId']\"\r\n [(inputField)]=\"item[bloc.typeConfig['inputField']]\">\r\n </Tsi-Integer>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-Rate-Input -->\r\n <ng-template class=\"{{bloc.styleClass}}\" #rateInputBlock>\r\n <ng-container *ngIf=\"bloc.type == tsiComponents.RateInput; else textInputBlock\">\r\n <Tsi-Rate-Input [inputName]=\"bloc.typeConfig['inputName']\"\r\n [inputId]=\"bloc.typeConfig['inputId']\" [(inputField)]=\"item[bloc.typeConfig['inputField']]\">\r\n </Tsi-Rate-Input>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-Text-Box -->\r\n <ng-template class=\"{{bloc.styleClass}}\" #textInputBlock>\r\n <ng-container *ngIf=\"bloc.type == tsiComponents.TextBox; else paragrapheBlock\">\r\n <Tsi-Text-Box [inputName]=\"bloc.typeConfig['inputName']\" [inputId]=\"bloc.typeConfig['inputId']\"\r\n [(inputField)]=\"item[bloc.typeConfig['inputField']]\">\r\n </Tsi-Text-Box>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-Paragraph -->\r\n <ng-template class=\"{{bloc.styleClass}}\" #paragrapheBlock>\r\n <ng-container *ngIf=\"bloc.type == tsiComponents.Paragraph; else tabBlock\">\r\n <Tsi-Paragraph [paragraphName]=\"bloc.typeConfig['paragraphName']| localize\">\r\n </Tsi-Paragraph>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <ng-template #tabBlock>\r\n <ng-container>\r\n <p-tabView [(activeIndex)]=\"index\">\r\n <p-tabPanel *ngFor=\"let tab of bloc.tabPanels;\"\r\n [header]=\"tab.tabHeader ? tab.tabHeader : '' | localize\">\r\n <!-- Here start -->\r\n <div class=\"grid\">\r\n <div *ngFor=\"let bloc of tab.blocs\">\r\n <!-- Tsi-Label -->\r\n <div *ngIf=\"bloc.type == tsiComponents.Label; else searchComboBlock\">\r\n <Tsi-Label [labelValue]=\"bloc.typeConfig['labelValue'] ? bloc.typeConfig['labelValue'] : '' | localize\">\r\n </Tsi-Label>\r\n </div>\r\n <!-- Tsi-Search-Combo -->\r\n <ng-template #searchComboBlock>\r\n <ng-container *ngIf=\"bloc.type == tsiComponents.SearchCombo; else currencySocieteInputBlock\">\r\n <Tsi-Search-Combo [elementSourceUrl]=\"bloc.typeConfig['elementSourceUrl']\"\r\n [listSourceUrl]=\"bloc.typeConfig['listSourceUrl']\" [(bind)]=\"item[bloc.typeConfig['bind']]\"\r\n [id-field]=\"bloc.typeConfig['id-field']\" [label-field]=\"bloc.typeConfig['label-field']\"\r\n [isFiltered]=\"bloc.typeConfig['isFiltered']\"></Tsi-Search-Combo>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-Currency-Societe-Input -->\r\n <ng-template class=\"{{bloc.styleClass}}\" #currencySocieteInputBlock>\r\n <ng-container\r\n *ngIf=\"bloc.type == tsiComponents.CurrencySocieteInput; else currencyOtherInputBlock\">\r\n <Tsi-Currency-Societe-Input [inputName]=\"bloc.typeConfig['inputName']\"\r\n [inputId]=\"bloc.typeConfig['inputId']\"\r\n [(inputField)]=\"item[bloc.typeConfig['inputField']]\">\r\n </Tsi-Currency-Societe-Input>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-Currency-Other-Input -->\r\n <ng-template class=\"{{bloc.styleClass}}\" #currencyOtherInputBlock>\r\n <ng-container\r\n *ngIf=\"bloc.type == tsiComponents.CurrencyOtherInput; else datePickerInputBlock\">\r\n <Tsi-Currency-Other-Input [inputName]=\"bloc.typeConfig['inputName']\"\r\n [inputId]=\"bloc.typeConfig['inputId']\"\r\n [(inputField)]=\"item[bloc.typeConfig['inputField']]\">\r\n </Tsi-Currency-Other-Input>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-Date-Picker -->\r\n <ng-template class=\"{{bloc.styleClass}}\" #datePickerInputBlock>\r\n <ng-container\r\n *ngIf=\"bloc.type == tsiComponents.DatePicker; else checkBoxInputBlock\">\r\n <Tsi-Date-Picker [inputName]=\"bloc.typeConfig['inputName']\"\r\n [inputId]=\"bloc.typeConfig['inputId']\"\r\n [(inputField)]=\"item[bloc.typeConfig['inputField']]\">\r\n </Tsi-Date-Picker>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-CheckBox -->\r\n <ng-template class=\"{{bloc.styleClass}}\" #checkBoxInputBlock>\r\n <ng-container\r\n *ngIf=\"bloc.type == tsiComponents.Checkbox; else decimalInputBlock\">\r\n <Tsi-CheckBox [inputName]=\"bloc.typeConfig['inputName']\"\r\n [inputId]=\"bloc.typeConfig['inputId']\"\r\n [(inputField)]=\"item[bloc.typeConfig['inputField']]\">\r\n </Tsi-CheckBox>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-Decimal-Input -->\r\n <ng-template class=\"{{bloc.styleClass}}\" #decimalInputBlock>\r\n <ng-container\r\n *ngIf=\"bloc.type == tsiComponents.DecimalInput; else integerInputBlock\">\r\n <Tsi-Decimal-Input [inputName]=\"bloc.typeConfig['inputName']\"\r\n [inputId]=\"bloc.typeConfig['inputId']\"\r\n [(inputField)]=\"item[bloc.typeConfig['inputField']]\">\r\n </Tsi-Decimal-Input>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-Integer -->\r\n <ng-template class=\"{{bloc.styleClass}}\" #integerInputBlock>\r\n <ng-container\r\n *ngIf=\"bloc.type == tsiComponents.Integer; else rateInputBlock\">\r\n <Tsi-Integer [inputName]=\"bloc.typeConfig['inputName']\"\r\n [inputId]=\"bloc.typeConfig['inputId']\"\r\n [(inputField)]=\"item[bloc.typeConfig['inputField']]\">\r\n </Tsi-Integer>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-Rate-Input -->\r\n <ng-template class=\"{{bloc.styleClass}}\" #rateInputBlock>\r\n <ng-container\r\n *ngIf=\"bloc.type == tsiComponents.RateInput; else textInputBlock\">\r\n <Tsi-Rate-Input [inputName]=\"bloc.typeConfig['inputName']\"\r\n [inputId]=\"bloc.typeConfig['inputId']\"\r\n [(inputField)]=\"item[bloc.typeConfig['inputField']]\">\r\n </Tsi-Rate-Input>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-Text-Box -->\r\n <ng-template class=\"{{bloc.styleClass}}\" #textInputBlock>\r\n <ng-container\r\n *ngIf=\"bloc.type == tsiComponents.TextBox; else paragrapheBlock\">\r\n <Tsi-Text-Box [inputName]=\"bloc.typeConfig['inputName']\"\r\n [inputId]=\"bloc.typeConfig['inputId']\"\r\n [(inputField)]=\"item[bloc.typeConfig['inputField']]\">\r\n </Tsi-Text-Box>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-Paragraph -->\r\n <ng-template class=\"{{bloc.styleClass}}\" #paragrapheBlock>\r\n <ng-container *ngIf=\"bloc.type == tsiComponents.Paragraph\">\r\n <Tsi-Paragraph\r\n [paragraphName]=\"bloc.typeConfig['paragraphName']| localize\">\r\n </Tsi-Paragraph>\r\n </ng-container>\r\n </ng-template>\r\n </div>\r\n </div>\r\n <!-- Here Finish -->\r\n </p-tabPanel>\r\n </p-tabView>\r\n </ng-container>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </fieldset>\r\n\r\n <Tsi-Modal-Footer [cancelDisabled]=\"saving\" (onCancelClick)=\"hide()\">\r\n </Tsi-Modal-Footer>\r\n</form>", styles: [""], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i5.TabView, selector: "p-tabView", inputs: ["style", "styleClass", "controlClose", "scrollable", "activeIndex", "selectOnFocus", "nextButtonAriaLabel", "prevButtonAriaLabel", "autoHideButtons", "tabindex"], outputs: ["onChange", "onClose", "activeIndexChange"] }, { kind: "component", type: i5.TabPanel, selector: "p-tabPanel", inputs: ["closable", "headerStyle", "headerStyleClass", "cache", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "selected", "disabled", "header", "leftIcon", "rightIcon"] }, { kind: "component", type: i6.TsiSearchComboComponent, selector: "Tsi-Search-Combo", inputs: ["elementSourceUrl", "listSourceUrl", "id-field", "label-field", "multiple", "sort", "showClear", "reloadDataSource", "isFiltered", "selectedLabel", "maxWidth", "businessClass", "currentRowItem", "datasource", "bind", "showSearchButton", "showAddButton", "showConsultButton", "showUpdateButton"], outputs: ["bindChange", "datasource-loaded", "init", "isLoaded", "selectedLabelChange", "onClick", "onSearchButtonClick"] }, { kind: "component", type: i7.TsiCheckboxComponent, selector: "Tsi-CheckBox", inputs: ["class", "isBinary", "checked", "tooltipText", "tooltipPosition"], outputs: ["inputFieldChange", "checkedChange"] }, { kind: "component", type: i8.TsiCurrencyOtherInputComponent, selector: "Tsi-Currency-Other-Input", inputs: ["numOfDecimal", "currency", "class"], outputs: ["inputFieldChange"] }, { kind: "component", type: i9.TsiCurrencySocieteInputComponent, selector: "Tsi-Currency-Societe-Input", inputs: ["class"], outputs: ["inputFieldChange"] }, { kind: "component", type: i10.TsiDatePickerComponent, selector: "Tsi-Date-Picker", inputs: ["required", "showTime", "showButtonBar"], outputs: ["inputFieldChange"] }, { kind: "component", type: i11.TsiDecimalInputComponent, selector: "Tsi-Decimal-Input", inputs: ["numOfDecimal", "class"], outputs: ["inputFieldChange"] }, { kind: "component", type: i12.TsiIntegerComponent, selector: "Tsi-Integer", inputs: ["class", "minValue", "maxValue", "delayChangeTime"], outputs: ["newItemEvent", "inputFieldChange"] }, { kind: "component", type: i13.TsiRateInputComponent, selector: "Tsi-Rate-Input", inputs: ["required", "isFraction", "numOfDecimal"], outputs: ["newItemEvent", "inputFieldChange"] }, { kind: "component", type: i14.TsiTextBoxComponent, selector: "Tsi-Text-Box", inputs: ["textBoxType", "autocomplete"], outputs: ["newItemEvent", "inputFieldChange"] }, { kind: "component", type: i15.TsiLabelComponent, selector: "Tsi-Label", inputs: ["labelValue", "styleClass", "infoText"] }, { kind: "component", type: i16.TsiParagraphComponent, selector: "Tsi-Paragraph", inputs: ["paragraphName"] }, { kind: "component", type: i17.TsiModalFooterComponent, selector: "Tsi-Modal-Footer", inputs: ["cancelDisabled", "saveDisabled", "cancelLabel", "saveLabel", "isConsult", "isDuplicate", "isOnlyCreate"], outputs: ["onCancelClick", "onSaveClick"] }, { kind: "component", type: i18.TsiModalHeaderComponent, selector: "Tsi-Modal-Header", inputs: ["inputTitle"], outputs: ["onCloseClick"] }, { kind: "directive", type: i19.BusyDirective, selector: "[busy]", inputs: ["busy"] }, { kind: "pipe", type: i20.LocalizePipe, name: "localize" }, { kind: "pipe", type: i21.ModalLabelPipe, name: "modalLabel" }] }); }
|
|
138
|
+
}
|
|
139
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TsiGenericFormComponent, decorators: [{
|
|
140
|
+
type: Component,
|
|
141
|
+
args: [{ selector: 'tsi-generic-form', template: "<form class=\"form-horizontal\" autocomplete=\"off\" #editfactureAchatModal=\"ngForm\" (ngSubmit)=\"save()\">\r\n <Tsi-Modal-Header [inputTitle]=\"header | modalLabel :mode:'gesc_achats_factureachat'\" (onCloseClick)=\"hide()\">\r\n </Tsi-Modal-Header>\r\n <fieldset [disabled]=\"isDeleteMode()\" [busy]=\"isloading\">\r\n <div class=\"grid\">\r\n <div *ngFor=\"let bloc of blocs\">\r\n\r\n <!-- Tsi-Label -->\r\n <div *ngIf=\"bloc.type == tsiComponents.Label; else searchComboBlock\">\r\n <Tsi-Label [labelValue]=\"bloc.typeConfig['labelValue'] ? bloc.typeConfig['labelValue'] : '' | localize\">\r\n </Tsi-Label>\r\n </div>\r\n <!-- Tsi-Search-Combo -->\r\n <ng-template #searchComboBlock>\r\n <ng-container *ngIf=\"bloc.type == tsiComponents.SearchCombo; else currencySocieteInputBlock\">\r\n <Tsi-Search-Combo [elementSourceUrl]=\"bloc.typeConfig['elementSourceUrl']\"\r\n [listSourceUrl]=\"bloc.typeConfig['listSourceUrl']\" [(bind)]=\"item[bloc.typeConfig['bind']]\"\r\n [id-field]=\"bloc.typeConfig['id-field']\" [label-field]=\"bloc.typeConfig['label-field']\"\r\n [isFiltered]=\"bloc.typeConfig['isFiltered']\"></Tsi-Search-Combo>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-Currency-Societe-Input -->\r\n <ng-template class=\"{{bloc.styleClass}}\" #currencySocieteInputBlock>\r\n <ng-container *ngIf=\"bloc.type == tsiComponents.CurrencySocieteInput; else currencyOtherInputBlock\">\r\n <Tsi-Currency-Societe-Input [inputName]=\"bloc.typeConfig['inputName']\"\r\n [inputId]=\"bloc.typeConfig['inputId']\" [(inputField)]=\"item[bloc.typeConfig['inputField']]\">\r\n </Tsi-Currency-Societe-Input>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-Currency-Other-Input -->\r\n <ng-template class=\"{{bloc.styleClass}}\" #currencyOtherInputBlock>\r\n <ng-container *ngIf=\"bloc.type == tsiComponents.CurrencyOtherInput; else datePickerInputBlock\">\r\n <Tsi-Currency-Other-Input [inputName]=\"bloc.typeConfig['inputName']\"\r\n [inputId]=\"bloc.typeConfig['inputId']\" [(inputField)]=\"item[bloc.typeConfig['inputField']]\">\r\n </Tsi-Currency-Other-Input>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-Date-Picker -->\r\n <ng-template class=\"{{bloc.styleClass}}\" #datePickerInputBlock>\r\n <ng-container *ngIf=\"bloc.type == tsiComponents.DatePicker; else checkBoxInputBlock\">\r\n <Tsi-Date-Picker [inputName]=\"bloc.typeConfig['inputName']\"\r\n [inputId]=\"bloc.typeConfig['inputId']\" [(inputField)]=\"item[bloc.typeConfig['inputField']]\">\r\n </Tsi-Date-Picker>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-CheckBox -->\r\n <ng-template class=\"{{bloc.styleClass}}\" #checkBoxInputBlock>\r\n <ng-container *ngIf=\"bloc.type == tsiComponents.Checkbox; else decimalInputBlock\">\r\n <Tsi-CheckBox [inputName]=\"bloc.typeConfig['inputName']\" [inputId]=\"bloc.typeConfig['inputId']\"\r\n [(inputField)]=\"item[bloc.typeConfig['inputField']]\">\r\n </Tsi-CheckBox>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-Decimal-Input -->\r\n <ng-template class=\"{{bloc.styleClass}}\" #decimalInputBlock>\r\n <ng-container *ngIf=\"bloc.type == tsiComponents.DecimalInput; else integerInputBlock\">\r\n <Tsi-Decimal-Input [inputName]=\"bloc.typeConfig['inputName']\"\r\n [inputId]=\"bloc.typeConfig['inputId']\" [(inputField)]=\"item[bloc.typeConfig['inputField']]\">\r\n </Tsi-Decimal-Input>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-Integer -->\r\n <ng-template class=\"{{bloc.styleClass}}\" #integerInputBlock>\r\n <ng-container *ngIf=\"bloc.type == tsiComponents.Integer; else rateInputBlock\">\r\n <Tsi-Integer [inputName]=\"bloc.typeConfig['inputName']\" [inputId]=\"bloc.typeConfig['inputId']\"\r\n [(inputField)]=\"item[bloc.typeConfig['inputField']]\">\r\n </Tsi-Integer>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-Rate-Input -->\r\n <ng-template class=\"{{bloc.styleClass}}\" #rateInputBlock>\r\n <ng-container *ngIf=\"bloc.type == tsiComponents.RateInput; else textInputBlock\">\r\n <Tsi-Rate-Input [inputName]=\"bloc.typeConfig['inputName']\"\r\n [inputId]=\"bloc.typeConfig['inputId']\" [(inputField)]=\"item[bloc.typeConfig['inputField']]\">\r\n </Tsi-Rate-Input>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-Text-Box -->\r\n <ng-template class=\"{{bloc.styleClass}}\" #textInputBlock>\r\n <ng-container *ngIf=\"bloc.type == tsiComponents.TextBox; else paragrapheBlock\">\r\n <Tsi-Text-Box [inputName]=\"bloc.typeConfig['inputName']\" [inputId]=\"bloc.typeConfig['inputId']\"\r\n [(inputField)]=\"item[bloc.typeConfig['inputField']]\">\r\n </Tsi-Text-Box>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-Paragraph -->\r\n <ng-template class=\"{{bloc.styleClass}}\" #paragrapheBlock>\r\n <ng-container *ngIf=\"bloc.type == tsiComponents.Paragraph; else tabBlock\">\r\n <Tsi-Paragraph [paragraphName]=\"bloc.typeConfig['paragraphName']| localize\">\r\n </Tsi-Paragraph>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <ng-template #tabBlock>\r\n <ng-container>\r\n <p-tabView [(activeIndex)]=\"index\">\r\n <p-tabPanel *ngFor=\"let tab of bloc.tabPanels;\"\r\n [header]=\"tab.tabHeader ? tab.tabHeader : '' | localize\">\r\n <!-- Here start -->\r\n <div class=\"grid\">\r\n <div *ngFor=\"let bloc of tab.blocs\">\r\n <!-- Tsi-Label -->\r\n <div *ngIf=\"bloc.type == tsiComponents.Label; else searchComboBlock\">\r\n <Tsi-Label [labelValue]=\"bloc.typeConfig['labelValue'] ? bloc.typeConfig['labelValue'] : '' | localize\">\r\n </Tsi-Label>\r\n </div>\r\n <!-- Tsi-Search-Combo -->\r\n <ng-template #searchComboBlock>\r\n <ng-container *ngIf=\"bloc.type == tsiComponents.SearchCombo; else currencySocieteInputBlock\">\r\n <Tsi-Search-Combo [elementSourceUrl]=\"bloc.typeConfig['elementSourceUrl']\"\r\n [listSourceUrl]=\"bloc.typeConfig['listSourceUrl']\" [(bind)]=\"item[bloc.typeConfig['bind']]\"\r\n [id-field]=\"bloc.typeConfig['id-field']\" [label-field]=\"bloc.typeConfig['label-field']\"\r\n [isFiltered]=\"bloc.typeConfig['isFiltered']\"></Tsi-Search-Combo>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-Currency-Societe-Input -->\r\n <ng-template class=\"{{bloc.styleClass}}\" #currencySocieteInputBlock>\r\n <ng-container\r\n *ngIf=\"bloc.type == tsiComponents.CurrencySocieteInput; else currencyOtherInputBlock\">\r\n <Tsi-Currency-Societe-Input [inputName]=\"bloc.typeConfig['inputName']\"\r\n [inputId]=\"bloc.typeConfig['inputId']\"\r\n [(inputField)]=\"item[bloc.typeConfig['inputField']]\">\r\n </Tsi-Currency-Societe-Input>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-Currency-Other-Input -->\r\n <ng-template class=\"{{bloc.styleClass}}\" #currencyOtherInputBlock>\r\n <ng-container\r\n *ngIf=\"bloc.type == tsiComponents.CurrencyOtherInput; else datePickerInputBlock\">\r\n <Tsi-Currency-Other-Input [inputName]=\"bloc.typeConfig['inputName']\"\r\n [inputId]=\"bloc.typeConfig['inputId']\"\r\n [(inputField)]=\"item[bloc.typeConfig['inputField']]\">\r\n </Tsi-Currency-Other-Input>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-Date-Picker -->\r\n <ng-template class=\"{{bloc.styleClass}}\" #datePickerInputBlock>\r\n <ng-container\r\n *ngIf=\"bloc.type == tsiComponents.DatePicker; else checkBoxInputBlock\">\r\n <Tsi-Date-Picker [inputName]=\"bloc.typeConfig['inputName']\"\r\n [inputId]=\"bloc.typeConfig['inputId']\"\r\n [(inputField)]=\"item[bloc.typeConfig['inputField']]\">\r\n </Tsi-Date-Picker>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-CheckBox -->\r\n <ng-template class=\"{{bloc.styleClass}}\" #checkBoxInputBlock>\r\n <ng-container\r\n *ngIf=\"bloc.type == tsiComponents.Checkbox; else decimalInputBlock\">\r\n <Tsi-CheckBox [inputName]=\"bloc.typeConfig['inputName']\"\r\n [inputId]=\"bloc.typeConfig['inputId']\"\r\n [(inputField)]=\"item[bloc.typeConfig['inputField']]\">\r\n </Tsi-CheckBox>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-Decimal-Input -->\r\n <ng-template class=\"{{bloc.styleClass}}\" #decimalInputBlock>\r\n <ng-container\r\n *ngIf=\"bloc.type == tsiComponents.DecimalInput; else integerInputBlock\">\r\n <Tsi-Decimal-Input [inputName]=\"bloc.typeConfig['inputName']\"\r\n [inputId]=\"bloc.typeConfig['inputId']\"\r\n [(inputField)]=\"item[bloc.typeConfig['inputField']]\">\r\n </Tsi-Decimal-Input>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-Integer -->\r\n <ng-template class=\"{{bloc.styleClass}}\" #integerInputBlock>\r\n <ng-container\r\n *ngIf=\"bloc.type == tsiComponents.Integer; else rateInputBlock\">\r\n <Tsi-Integer [inputName]=\"bloc.typeConfig['inputName']\"\r\n [inputId]=\"bloc.typeConfig['inputId']\"\r\n [(inputField)]=\"item[bloc.typeConfig['inputField']]\">\r\n </Tsi-Integer>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-Rate-Input -->\r\n <ng-template class=\"{{bloc.styleClass}}\" #rateInputBlock>\r\n <ng-container\r\n *ngIf=\"bloc.type == tsiComponents.RateInput; else textInputBlock\">\r\n <Tsi-Rate-Input [inputName]=\"bloc.typeConfig['inputName']\"\r\n [inputId]=\"bloc.typeConfig['inputId']\"\r\n [(inputField)]=\"item[bloc.typeConfig['inputField']]\">\r\n </Tsi-Rate-Input>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-Text-Box -->\r\n <ng-template class=\"{{bloc.styleClass}}\" #textInputBlock>\r\n <ng-container\r\n *ngIf=\"bloc.type == tsiComponents.TextBox; else paragrapheBlock\">\r\n <Tsi-Text-Box [inputName]=\"bloc.typeConfig['inputName']\"\r\n [inputId]=\"bloc.typeConfig['inputId']\"\r\n [(inputField)]=\"item[bloc.typeConfig['inputField']]\">\r\n </Tsi-Text-Box>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-Paragraph -->\r\n <ng-template class=\"{{bloc.styleClass}}\" #paragrapheBlock>\r\n <ng-container *ngIf=\"bloc.type == tsiComponents.Paragraph\">\r\n <Tsi-Paragraph\r\n [paragraphName]=\"bloc.typeConfig['paragraphName']| localize\">\r\n </Tsi-Paragraph>\r\n </ng-container>\r\n </ng-template>\r\n </div>\r\n </div>\r\n <!-- Here Finish -->\r\n </p-tabPanel>\r\n </p-tabView>\r\n </ng-container>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </fieldset>\r\n\r\n <Tsi-Modal-Footer [cancelDisabled]=\"saving\" (onCancelClick)=\"hide()\">\r\n </Tsi-Modal-Footer>\r\n</form>" }]
|
|
142
|
+
}], ctorParameters: () => [{ type: i1.TsiMessageService }, { type: i1.TsiNotificationService }, { type: i1.TsiConfirmationService }, { type: i2.DynamicDialogRef }, { type: i2.DynamicDialogConfig }], propDecorators: { crudService: [{
|
|
143
|
+
type: Input
|
|
144
|
+
}], configuration: [{
|
|
145
|
+
type: Input
|
|
146
|
+
}], blocs: [{
|
|
147
|
+
type: Input
|
|
148
|
+
}] } });
|
|
149
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHNpLWdlbmVyaWMtZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90c2ktc2hhcmVkLXVpL3NyYy9saWIvdHNpLWNvbXBvbmVudHMvdHNpLWdlbmVyaWMtZm9ybS90c2ktZ2VuZXJpYy1mb3JtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RzaS1zaGFyZWQtdWkvc3JjL2xpYi90c2ktY29tcG9uZW50cy90c2ktZ2VuZXJpYy1mb3JtL3RzaS1nZW5lcmljLWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFakQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUd0RCxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxpRUFBaUUsQ0FBQztBQUNoSCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFPakUsTUFBTSxPQUFPLHVCQUF3QixTQUFRLDZCQUE2QjtJQUd0RSxRQUFRO1FBQ0osSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVELFFBQVE7UUFDSixJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBT0gsWUFBWTtJQUNaLFlBQW9CLFFBQTJC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STtlQUNkLElBQUksQ0FBQyxFQUFFLElBQUksU0FBUztlQUNwQixJQUFJLENBQUMsV0FBVyxJQUFJLElBQUk7ZUFDeEIsSUFBSSxDQUFDLFdBQVcsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNuQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztZQUN0QixJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2lCQUM3QixTQUFTLENBQUM7Z0JBQ1QsSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUU7b0JBQ2IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7Z0JBQ3JFLENBQUM7Z0JBQ0QsS0FBSyxFQUFFLENBQUMsS0FBd0IsRUFBRSxFQUFFO29CQUNsQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ3BDLENBQUM7Z0JBQ0QsUUFBUSxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQzthQUM1QyxDQUFDLENBQUM7UUFDUCxDQUFDO0lBQ0gsQ0FBQzsrR0E3R1UsdUJBQXVCO21HQUF2Qix1QkFBdUIsdUtDZHBDLGdnZ0JBME9POzs0RkQ1Tk0sdUJBQXVCO2tCQUxuQyxTQUFTOytCQUNFLGtCQUFrQjtpT0FpQm5CLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEeW5hbWljRGlhbG9nQ29uZmlnLCBEeW5hbWljRGlhbG9nUmVmIH0gZnJvbSAncHJpbWVuZy9keW5hbWljZGlhbG9nJztcclxuaW1wb3J0IHsgVHNpQ29tcG9uZW50RW51bSwgTW9kZXMgfSBmcm9tICcuLi8uLi9lbnVtcyc7XHJcbmltcG9ydCB7IElHZW5lcmljRm9ybUNvbmZpZ3VyYXRpb24sIElGb3JtQmxvYyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBDcnVkQmFzZVNlcnZpY2UsIFRzaU1lc3NhZ2VTZXJ2aWNlLCBUc2lOb3RpZmljYXRpb25TZXJ2aWNlLCBUc2lDb25maXJtYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xyXG5pbXBvcnQgeyBUc2lGb3JtQ29tcG9uZW50QmFzZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3RzaS1iYXNlL2NvbXBvbmVudHMvdHNpLWZvcm0tYmFzZS90c2ktZm9ybS1iYXNlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IExvY2FsaXphdGlvbktleXMgfSBmcm9tICcuLi8uLi9jb25zdHMvbG9jYWxpemF0aW9uLWtleSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3RzaS1nZW5lcmljLWZvcm0nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi90c2ktZ2VuZXJpYy1mb3JtLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi90c2ktZ2VuZXJpYy1mb3JtLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFRzaUdlbmVyaWNGb3JtQ29tcG9uZW50IGV4dGVuZHMgVHNpRm9ybUNvbXBvbmVudEJhc2VDb21wb25lbnQge1xyXG4gIGluZGV4OiBudW1iZXIgPSAwO1xyXG5cclxuICAgIG9wZW5OZXh0KCkge1xyXG4gICAgICAgIHRoaXMuaW5kZXggPSAodGhpcy5pbmRleCA9PT0gMikgPyAwIDogdGhpcy5pbmRleCArIDE7XHJcbiAgICB9XHJcblxyXG4gICAgb3BlblByZXYoKSB7XHJcbiAgICAgICAgdGhpcy5pbmRleCA9ICh0aGlzLmluZGV4ID09PSAwKSA/IDIgOiB0aGlzLmluZGV4IC0gMTtcclxuICAgIH1cclxuICAvL2l0ZW06IGFueTtcclxuICB0c2lDb21wb25lbnRzID0gVHNpQ29tcG9uZW50RW51bTtcclxuICAvLyNyZWdpb24gXHJcbiAgQElucHV0KCkgY3J1ZFNlcnZpY2U/OiBDcnVkQmFzZVNlcnZpY2U8YW55LCBhbnksIGFueSwgYW55PjtcclxuICBASW5wdXQoKSBjb25maWd1cmF0aW9uPzogSUdlbmVyaWNGb3JtQ29uZmlndXJhdGlvbjtcclxuICBASW5wdXQoKSBibG9jczogQXJyYXk8SUZvcm1CbG9jPiA9IFtdO1xyXG4gIC8vI2VuZHJlZ2lvblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX21lc3NhZ2U6IFRzaU1lc3NhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfbm90aWZ5OiBUc2lOb3RpZmljYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfY29uZmlybTogVHNpQ29uZmlybWF0aW9uU2VydmljZSxcclxuICAgIHB1YmxpYyBvdmVycmlkZSByZWY6IER5bmFtaWNEaWFsb2dSZWYsXHJcbiAgICBwdWJsaWMgb3ZlcnJpZGUgY29uZmlnOiBEeW5hbWljRGlhbG9nQ29uZmlnKSB7IHN1cGVyKHJlZiwgY29uZmlnKTsgfVxyXG5cclxuICBvdmVycmlkZSBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHN1cGVyLm5nT25Jbml0KCk7XHJcbiAgICBpZiAoKHRoaXMubW9kZSA9PSBNb2Rlcy5lZGl0IHx8IHRoaXMubW9kZSA9PSBNb2Rlcy5kZWxldGUpXHJcbiAgICAgICYmIHRoaXMuaWQgIT0gbnVsbFxyXG4gICAgICAmJiB0aGlzLmlkICE9IHVuZGVmaW5lZFxyXG4gICAgICAmJiB0aGlzLmNydWRTZXJ2aWNlICE9IG51bGxcclxuICAgICAgJiYgdGhpcy5jcnVkU2VydmljZSAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5pc2xvYWRpbmcgPSB0cnVlO1xyXG4gICAgICB0aGlzLmNydWRTZXJ2aWNlLmdldEJ5SWQodGhpcy5pZClcclxuICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgIG5leHQ6IChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbSA9IGRhdGE7XHJcbiAgICAgICAgICAgIHRoaXMuX25vdGlmeS5zdWNjZXNzKHRoaXMubChMb2NhbGl6YXRpb25LZXlzLnJldHJpZXZlZFN1Y2Nlc3NmdWxseSkpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGVycm9yOiAoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX25vdGlmeS5lcnJvcihlcnJvci5tZXNzYWdlKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBjb21wbGV0ZTogKCkgPT4geyB0aGlzLmlzbG9hZGluZyA9IGZhbHNlOyB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvdmVycmlkZSBzYXZlKCk6IHZvaWQge1xyXG4gICAgc3VwZXIuc2F2ZSgpXHJcbiAgICBzd2l0Y2ggKHRoaXMubW9kZSkge1xyXG4gICAgICBjYXNlIE1vZGVzLmNyZWF0ZTogdGhpcy5fc2F2ZUNyZWF0ZU1vZGUoKTsgYnJlYWs7XHJcbiAgICAgIGNhc2UgTW9kZXMuZWRpdDogdGhpcy5fc2F2ZUVkaXRNb2RlKCk7IGJyZWFrO1xyXG4gICAgICBjYXNlIE1vZGVzLmRlbGV0ZTogdGhpcy5fc2F2ZURlbGV0ZU1vZGUoKTsgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6IHRocm93IG5ldyBFcnJvcignbm8gbW9kZSBoYXZlIGJiZW4gc2V0IHRvIFRzaUdlbmVyaWNGb3JtQ29tcG9uZW50Jyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyNyZWdpb24gcHJpdmF0ZSBtZXRob2RzXHJcbiAgcHJpdmF0ZSBfc2F2ZUNyZWF0ZU1vZGUoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5jcnVkU2VydmljZSAhPSBudWxsXHJcbiAgICAgICYmIHRoaXMuY3J1ZFNlcnZpY2UgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMuaXNsb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgdGhpcy5jcnVkU2VydmljZS5jcmVhdGUodGhpcy5pdGVtKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgbmV4dDogKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5fbm90aWZ5LnN1Y2Nlc3ModGhpcy5sKExvY2FsaXphdGlvbktleXMuY3JlYXRlZFN1Y2Nlc3NmdWxseSkpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGVycm9yOiAoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX25vdGlmeS5lcnJvcihlcnJvci5tZXNzYWdlKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBjb21wbGV0ZTogKCkgPT4geyB0aGlzLmlzbG9hZGluZyA9IGZhbHNlOyB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zYXZlRWRpdE1vZGUoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5pZCAhPSBudWxsXHJcbiAgICAgICYmIHRoaXMuaWQgIT0gdW5kZWZpbmVkXHJcbiAgICAgICYmIHRoaXMuY3J1ZFNlcnZpY2UgIT0gbnVsbFxyXG4gICAgICAmJiB0aGlzLmNydWRTZXJ2aWNlICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLmlzbG9hZGluZyA9IHRydWU7XHJcbiAgICAgIHRoaXMuY3J1ZFNlcnZpY2UudXBkYXRlKHRoaXMuaXRlbSwgdGhpcy5pZClcclxuICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgIG5leHQ6IChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX25vdGlmeS5zdWNjZXNzKHRoaXMubChMb2NhbGl6YXRpb25LZXlzLnVwZGF0ZWRTdWNjZXNzZnVsbHkpKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBlcnJvcjogKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl9ub3RpZnkuZXJyb3IoZXJyb3IubWVzc2FnZSk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgY29tcGxldGU6ICgpID0+IHsgdGhpcy5pc2xvYWRpbmcgPSBmYWxzZTsgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc2F2ZURlbGV0ZU1vZGUoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5pZCAhPSBudWxsXHJcbiAgICAgICYmIHRoaXMuaWQgIT0gdW5kZWZpbmVkXHJcbiAgICAgICYmIHRoaXMuY3J1ZFNlcnZpY2UgIT0gbnVsbFxyXG4gICAgICAmJiB0aGlzLmNydWRTZXJ2aWNlICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLmlzbG9hZGluZyA9IHRydWU7XHJcbiAgICAgIHRoaXMuY3J1ZFNlcnZpY2UuZGVsZXRlKHRoaXMuaWQpXHJcbiAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICBuZXh0OiAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl9ub3RpZnkuc3VjY2Vzcyh0aGlzLmwoTG9jYWxpemF0aW9uS2V5cy5kZWxldGVkU3VjY2Vzc2Z1bGx5KSk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZXJyb3I6IChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5fbm90aWZ5LmVycm9yKGVycm9yLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7IHRoaXMuaXNsb2FkaW5nID0gZmFsc2U7IH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcbn1cclxuIiwiPGZvcm0gY2xhc3M9XCJmb3JtLWhvcml6b250YWxcIiBhdXRvY29tcGxldGU9XCJvZmZcIiAjZWRpdGZhY3R1cmVBY2hhdE1vZGFsPVwibmdGb3JtXCIgKG5nU3VibWl0KT1cInNhdmUoKVwiPlxyXG4gICAgPFRzaS1Nb2RhbC1IZWFkZXIgW2lucHV0VGl0bGVdPVwiaGVhZGVyIHwgbW9kYWxMYWJlbCA6bW9kZTonZ2VzY19hY2hhdHNfZmFjdHVyZWFjaGF0J1wiIChvbkNsb3NlQ2xpY2spPVwiaGlkZSgpXCI+XHJcbiAgICA8L1RzaS1Nb2RhbC1IZWFkZXI+XHJcbiAgICA8ZmllbGRzZXQgW2Rpc2FibGVkXT1cImlzRGVsZXRlTW9kZSgpXCIgW2J1c3ldPVwiaXNsb2FkaW5nXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImdyaWRcIj5cclxuICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgYmxvYyBvZiBibG9jc1wiPlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0gVHNpLUxhYmVsIC0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImJsb2MudHlwZSA9PSB0c2lDb21wb25lbnRzLkxhYmVsOyBlbHNlIHNlYXJjaENvbWJvQmxvY2tcIj5cclxuICAgICAgICAgICAgICAgICAgICA8VHNpLUxhYmVsIFtsYWJlbFZhbHVlXT1cImJsb2MudHlwZUNvbmZpZ1snbGFiZWxWYWx1ZSddID8gYmxvYy50eXBlQ29uZmlnWydsYWJlbFZhbHVlJ10gOiAnJyAgfCBsb2NhbGl6ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvVHNpLUxhYmVsPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8IS0tIFRzaS1TZWFyY2gtQ29tYm8gLS0+XHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3NlYXJjaENvbWJvQmxvY2s+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImJsb2MudHlwZSA9PSB0c2lDb21wb25lbnRzLlNlYXJjaENvbWJvOyBlbHNlIGN1cnJlbmN5U29jaWV0ZUlucHV0QmxvY2tcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPFRzaS1TZWFyY2gtQ29tYm8gW2VsZW1lbnRTb3VyY2VVcmxdPVwiYmxvYy50eXBlQ29uZmlnWydlbGVtZW50U291cmNlVXJsJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xpc3RTb3VyY2VVcmxdPVwiYmxvYy50eXBlQ29uZmlnWydsaXN0U291cmNlVXJsJ11cIiBbKGJpbmQpXT1cIml0ZW1bYmxvYy50eXBlQ29uZmlnWydiaW5kJ11dXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZC1maWVsZF09XCJibG9jLnR5cGVDb25maWdbJ2lkLWZpZWxkJ11cIiBbbGFiZWwtZmllbGRdPVwiYmxvYy50eXBlQ29uZmlnWydsYWJlbC1maWVsZCddXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpc0ZpbHRlcmVkXT1cImJsb2MudHlwZUNvbmZpZ1snaXNGaWx0ZXJlZCddXCI+PC9Uc2ktU2VhcmNoLUNvbWJvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIFRzaS1DdXJyZW5jeS1Tb2NpZXRlLUlucHV0IC0tPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGNsYXNzPVwie3tibG9jLnN0eWxlQ2xhc3N9fVwiICNjdXJyZW5jeVNvY2lldGVJbnB1dEJsb2NrPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJibG9jLnR5cGUgPT0gdHNpQ29tcG9uZW50cy5DdXJyZW5jeVNvY2lldGVJbnB1dDsgZWxzZSBjdXJyZW5jeU90aGVySW5wdXRCbG9ja1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8VHNpLUN1cnJlbmN5LVNvY2lldGUtSW5wdXQgW2lucHV0TmFtZV09XCJibG9jLnR5cGVDb25maWdbJ2lucHV0TmFtZSddXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbnB1dElkXT1cImJsb2MudHlwZUNvbmZpZ1snaW5wdXRJZCddXCIgWyhpbnB1dEZpZWxkKV09XCJpdGVtW2Jsb2MudHlwZUNvbmZpZ1snaW5wdXRGaWVsZCddXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L1RzaS1DdXJyZW5jeS1Tb2NpZXRlLUlucHV0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIFRzaS1DdXJyZW5jeS1PdGhlci1JbnB1dCAtLT5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBjbGFzcz1cInt7YmxvYy5zdHlsZUNsYXNzfX1cIiAjY3VycmVuY3lPdGhlcklucHV0QmxvY2s+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImJsb2MudHlwZSA9PSB0c2lDb21wb25lbnRzLkN1cnJlbmN5T3RoZXJJbnB1dDsgZWxzZSBkYXRlUGlja2VySW5wdXRCbG9ja1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8VHNpLUN1cnJlbmN5LU90aGVyLUlucHV0IFtpbnB1dE5hbWVdPVwiYmxvYy50eXBlQ29uZmlnWydpbnB1dE5hbWUnXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5wdXRJZF09XCJibG9jLnR5cGVDb25maWdbJ2lucHV0SWQnXVwiIFsoaW5wdXRGaWVsZCldPVwiaXRlbVtibG9jLnR5cGVDb25maWdbJ2lucHV0RmllbGQnXV1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9Uc2ktQ3VycmVuY3ktT3RoZXItSW5wdXQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0gVHNpLURhdGUtUGlja2VyIC0tPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGNsYXNzPVwie3tibG9jLnN0eWxlQ2xhc3N9fVwiICNkYXRlUGlja2VySW5wdXRCbG9jaz5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYmxvYy50eXBlID09IHRzaUNvbXBvbmVudHMuRGF0ZVBpY2tlcjsgZWxzZSBjaGVja0JveElucHV0QmxvY2tcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPFRzaS1EYXRlLVBpY2tlciBbaW5wdXROYW1lXT1cImJsb2MudHlwZUNvbmZpZ1snaW5wdXROYW1lJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lucHV0SWRdPVwiYmxvYy50eXBlQ29uZmlnWydpbnB1dElkJ11cIiBbKGlucHV0RmllbGQpXT1cIml0ZW1bYmxvYy50eXBlQ29uZmlnWydpbnB1dEZpZWxkJ11dXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvVHNpLURhdGUtUGlja2VyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIFRzaS1DaGVja0JveCAtLT5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBjbGFzcz1cInt7YmxvYy5zdHlsZUNsYXNzfX1cIiAjY2hlY2tCb3hJbnB1dEJsb2NrPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJibG9jLnR5cGUgPT0gdHNpQ29tcG9uZW50cy5DaGVja2JveDsgZWxzZSBkZWNpbWFsSW5wdXRCbG9ja1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8VHNpLUNoZWNrQm94IFtpbnB1dE5hbWVdPVwiYmxvYy50eXBlQ29uZmlnWydpbnB1dE5hbWUnXVwiIFtpbnB1dElkXT1cImJsb2MudHlwZUNvbmZpZ1snaW5wdXRJZCddXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsoaW5wdXRGaWVsZCldPVwiaXRlbVtibG9jLnR5cGVDb25maWdbJ2lucHV0RmllbGQnXV1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9Uc2ktQ2hlY2tCb3g+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0gVHNpLURlY2ltYWwtSW5wdXQgLS0+XHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgY2xhc3M9XCJ7e2Jsb2Muc3R5bGVDbGFzc319XCIgI2RlY2ltYWxJbnB1dEJsb2NrPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJibG9jLnR5cGUgPT0gdHNpQ29tcG9uZW50cy5EZWNpbWFsSW5wdXQ7IGVsc2UgaW50ZWdlcklucHV0QmxvY2tcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPFRzaS1EZWNpbWFsLUlucHV0IFtpbnB1dE5hbWVdPVwiYmxvYy50eXBlQ29uZmlnWydpbnB1dE5hbWUnXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5wdXRJZF09XCJibG9jLnR5cGVDb25maWdbJ2lucHV0SWQnXVwiIFsoaW5wdXRGaWVsZCldPVwiaXRlbVtibG9jLnR5cGVDb25maWdbJ2lucHV0RmllbGQnXV1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9Uc2ktRGVjaW1hbC1JbnB1dD5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLSBUc2ktSW50ZWdlciAtLT5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBjbGFzcz1cInt7YmxvYy5zdHlsZUNsYXNzfX1cIiAjaW50ZWdlcklucHV0QmxvY2s+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImJsb2MudHlwZSA9PSB0c2lDb21wb25lbnRzLkludGVnZXI7IGVsc2UgcmF0ZUlucHV0QmxvY2tcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPFRzaS1JbnRlZ2VyIFtpbnB1dE5hbWVdPVwiYmxvYy50eXBlQ29uZmlnWydpbnB1dE5hbWUnXVwiIFtpbnB1dElkXT1cImJsb2MudHlwZUNvbmZpZ1snaW5wdXRJZCddXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsoaW5wdXRGaWVsZCldPVwiaXRlbVtibG9jLnR5cGVDb25maWdbJ2lucHV0RmllbGQnXV1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9Uc2ktSW50ZWdlcj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLSBUc2ktUmF0ZS1JbnB1dCAtLT5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBjbGFzcz1cInt7YmxvYy5zdHlsZUNsYXNzfX1cIiAjcmF0ZUlucHV0QmxvY2s+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImJsb2MudHlwZSA9PSB0c2lDb21wb25lbnRzLlJhdGVJbnB1dDsgZWxzZSB0ZXh0SW5wdXRCbG9ja1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8VHNpLVJhdGUtSW5wdXQgW2lucHV0TmFtZV09XCJibG9jLnR5cGVDb25maWdbJ2lucHV0TmFtZSddXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbnB1dElkXT1cImJsb2MudHlwZUNvbmZpZ1snaW5wdXRJZCddXCIgWyhpbnB1dEZpZWxkKV09XCJpdGVtW2Jsb2MudHlwZUNvbmZpZ1snaW5wdXRGaWVsZCddXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L1RzaS1SYXRlLUlucHV0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIFRzaS1UZXh0LUJveCAtLT5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBjbGFzcz1cInt7YmxvYy5zdHlsZUNsYXNzfX1cIiAjdGV4dElucHV0QmxvY2s+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImJsb2MudHlwZSA9PSB0c2lDb21wb25lbnRzLlRleHRCb3g7IGVsc2UgcGFyYWdyYXBoZUJsb2NrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxUc2ktVGV4dC1Cb3ggW2lucHV0TmFtZV09XCJibG9jLnR5cGVDb25maWdbJ2lucHV0TmFtZSddXCIgW2lucHV0SWRdPVwiYmxvYy50eXBlQ29uZmlnWydpbnB1dElkJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhpbnB1dEZpZWxkKV09XCJpdGVtW2Jsb2MudHlwZUNvbmZpZ1snaW5wdXRGaWVsZCddXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L1RzaS1UZXh0LUJveD5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLSBUc2ktUGFyYWdyYXBoIC0tPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGNsYXNzPVwie3tibG9jLnN0eWxlQ2xhc3N9fVwiICNwYXJhZ3JhcGhlQmxvY2s+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImJsb2MudHlwZSA9PSB0c2lDb21wb25lbnRzLlBhcmFncmFwaDsgZWxzZSB0YWJCbG9ja1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8VHNpLVBhcmFncmFwaCBbcGFyYWdyYXBoTmFtZV09XCJibG9jLnR5cGVDb25maWdbJ3BhcmFncmFwaE5hbWUnXXwgbG9jYWxpemVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9Uc2ktUGFyYWdyYXBoPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3RhYkJsb2NrPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwLXRhYlZpZXcgWyhhY3RpdmVJbmRleCldPVwiaW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwLXRhYlBhbmVsICpuZ0Zvcj1cImxldCB0YWIgb2YgYmxvYy50YWJQYW5lbHM7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGVhZGVyXT1cInRhYi50YWJIZWFkZXIgPyB0YWIudGFiSGVhZGVyIDogJycgfCBsb2NhbGl6ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gSGVyZSBzdGFydCAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBibG9jIG9mIHRhYi5ibG9jc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBUc2ktTGFiZWwgLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYmxvYy50eXBlID09IHRzaUNvbXBvbmVudHMuTGFiZWw7IGVsc2Ugc2VhcmNoQ29tYm9CbG9ja1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxUc2ktTGFiZWwgW2xhYmVsVmFsdWVdPVwiYmxvYy50eXBlQ29uZmlnWydsYWJlbFZhbHVlJ10gPyBibG9jLnR5cGVDb25maWdbJ2xhYmVsVmFsdWUnXSA6ICcnICB8IGxvY2FsaXplXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9Uc2ktTGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwhLS0gVHNpLVNlYXJjaC1Db21ibyAtLT5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjc2VhcmNoQ29tYm9CbG9jaz5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYmxvYy50eXBlID09IHRzaUNvbXBvbmVudHMuU2VhcmNoQ29tYm87IGVsc2UgY3VycmVuY3lTb2NpZXRlSW5wdXRCbG9ja1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8VHNpLVNlYXJjaC1Db21ibyBbZWxlbWVudFNvdXJjZVVybF09XCJibG9jLnR5cGVDb25maWdbJ2VsZW1lbnRTb3VyY2VVcmwnXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGlzdFNvdXJjZVVybF09XCJibG9jLnR5cGVDb25maWdbJ2xpc3RTb3VyY2VVcmwnXVwiIFsoYmluZCldPVwiaXRlbVtibG9jLnR5cGVDb25maWdbJ2JpbmQnXV1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkLWZpZWxkXT1cImJsb2MudHlwZUNvbmZpZ1snaWQtZmllbGQnXVwiIFtsYWJlbC1maWVsZF09XCJibG9jLnR5cGVDb25maWdbJ2xhYmVsLWZpZWxkJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lzRmlsdGVyZWRdPVwiYmxvYy50eXBlQ29uZmlnWydpc0ZpbHRlcmVkJ11cIj48L1RzaS1TZWFyY2gtQ29tYm8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gVHNpLUN1cnJlbmN5LVNvY2lldGUtSW5wdXQgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgY2xhc3M9XCJ7e2Jsb2Muc3R5bGVDbGFzc319XCIgI2N1cnJlbmN5U29jaWV0ZUlucHV0QmxvY2s+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImJsb2MudHlwZSA9PSB0c2lDb21wb25lbnRzLkN1cnJlbmN5U29jaWV0ZUlucHV0OyBlbHNlIGN1cnJlbmN5T3RoZXJJbnB1dEJsb2NrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUc2ktQ3VycmVuY3ktU29jaWV0ZS1JbnB1dCBbaW5wdXROYW1lXT1cImJsb2MudHlwZUNvbmZpZ1snaW5wdXROYW1lJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lucHV0SWRdPVwiYmxvYy50eXBlQ29uZmlnWydpbnB1dElkJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhpbnB1dEZpZWxkKV09XCJpdGVtW2Jsb2MudHlwZUNvbmZpZ1snaW5wdXRGaWVsZCddXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1RzaS1DdXJyZW5jeS1Tb2NpZXRlLUlucHV0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFRzaS1DdXJyZW5jeS1PdGhlci1JbnB1dCAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBjbGFzcz1cInt7YmxvYy5zdHlsZUNsYXNzfX1cIiAjY3VycmVuY3lPdGhlcklucHV0QmxvY2s+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImJsb2MudHlwZSA9PSB0c2lDb21wb25lbnRzLkN1cnJlbmN5T3RoZXJJbnB1dDsgZWxzZSBkYXRlUGlja2VySW5wdXRCbG9ja1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VHNpLUN1cnJlbmN5LU90aGVyLUlucHV0IFtpbnB1dE5hbWVdPVwiYmxvYy50eXBlQ29uZmlnWydpbnB1dE5hbWUnXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5wdXRJZF09XCJibG9jLnR5cGVDb25maWdbJ2lucHV0SWQnXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKGlucHV0RmllbGQpXT1cIml0ZW1bYmxvYy50eXBlQ29uZmlnWydpbnB1dEZpZWxkJ11dXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVHNpLUN1cnJlbmN5LU90aGVyLUlucHV0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFRzaS1EYXRlLVBpY2tlciAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBjbGFzcz1cInt7YmxvYy5zdHlsZUNsYXNzfX1cIiAjZGF0ZVBpY2tlcklucHV0QmxvY2s+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImJsb2MudHlwZSA9PSB0c2lDb21wb25lbnRzLkRhdGVQaWNrZXI7IGVsc2UgY2hlY2tCb3hJbnB1dEJsb2NrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUc2ktRGF0ZS1QaWNrZXIgW2lucHV0TmFtZV09XCJibG9jLnR5cGVDb25maWdbJ2lucHV0TmFtZSddXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbnB1dElkXT1cImJsb2MudHlwZUNvbmZpZ1snaW5wdXRJZCddXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsoaW5wdXRGaWVsZCldPVwiaXRlbVtibG9jLnR5cGVDb25maWdbJ2lucHV0RmllbGQnXV1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Uc2ktRGF0ZS1QaWNrZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gVHNpLUNoZWNrQm94IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGNsYXNzPVwie3tibG9jLnN0eWxlQ2xhc3N9fVwiICNjaGVja0JveElucHV0QmxvY2s+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImJsb2MudHlwZSA9PSB0c2lDb21wb25lbnRzLkNoZWNrYm94OyBlbHNlIGRlY2ltYWxJbnB1dEJsb2NrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUc2ktQ2hlY2tCb3ggW2lucHV0TmFtZV09XCJibG9jLnR5cGVDb25maWdbJ2lucHV0TmFtZSddXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbnB1dElkXT1cImJsb2MudHlwZUNvbmZpZ1snaW5wdXRJZCddXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsoaW5wdXRGaWVsZCldPVwiaXRlbVtibG9jLnR5cGVDb25maWdbJ2lucHV0RmllbGQnXV1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Uc2ktQ2hlY2tCb3g+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gVHNpLURlY2ltYWwtSW5wdXQgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgY2xhc3M9XCJ7e2Jsb2Muc3R5bGVDbGFzc319XCIgI2RlY2ltYWxJbnB1dEJsb2NrPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJibG9jLnR5cGUgPT0gdHNpQ29tcG9uZW50cy5EZWNpbWFsSW5wdXQ7IGVsc2UgaW50ZWdlcklucHV0QmxvY2tcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRzaS1EZWNpbWFsLUlucHV0IFtpbnB1dE5hbWVdPVwiYmxvYy50eXBlQ29uZmlnWydpbnB1dE5hbWUnXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5wdXRJZF09XCJibG9jLnR5cGVDb25maWdbJ2lucHV0SWQnXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKGlucHV0RmllbGQpXT1cIml0ZW1bYmxvYy50eXBlQ29uZmlnWydpbnB1dEZpZWxkJ11dXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVHNpLURlY2ltYWwtSW5wdXQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gVHNpLUludGVnZXIgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgY2xhc3M9XCJ7e2Jsb2Muc3R5bGVDbGFzc319XCIgI2ludGVnZXJJbnB1dEJsb2NrPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJibG9jLnR5cGUgPT0gdHNpQ29tcG9uZW50cy5JbnRlZ2VyOyBlbHNlIHJhdGVJbnB1dEJsb2NrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUc2ktSW50ZWdlciBbaW5wdXROYW1lXT1cImJsb2MudHlwZUNvbmZpZ1snaW5wdXROYW1lJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lucHV0SWRdPVwiYmxvYy50eXBlQ29uZmlnWydpbnB1dElkJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhpbnB1dEZpZWxkKV09XCJpdGVtW2Jsb2MudHlwZUNvbmZpZ1snaW5wdXRGaWVsZCddXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1RzaS1JbnRlZ2VyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFRzaS1SYXRlLUlucHV0IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGNsYXNzPVwie3tibG9jLnN0eWxlQ2xhc3N9fVwiICNyYXRlSW5wdXRCbG9jaz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYmxvYy50eXBlID09IHRzaUNvbXBvbmVudHMuUmF0ZUlucHV0OyBlbHNlIHRleHRJbnB1dEJsb2NrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUc2ktUmF0ZS1JbnB1dCBbaW5wdXROYW1lXT1cImJsb2MudHlwZUNvbmZpZ1snaW5wdXROYW1lJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lucHV0SWRdPVwiYmxvYy50eXBlQ29uZmlnWydpbnB1dElkJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhpbnB1dEZpZWxkKV09XCJpdGVtW2Jsb2MudHlwZUNvbmZpZ1snaW5wdXRGaWVsZCddXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1RzaS1SYXRlLUlucHV0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFRzaS1UZXh0LUJveCAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBjbGFzcz1cInt7YmxvYy5zdHlsZUNsYXNzfX1cIiAjdGV4dElucHV0QmxvY2s+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImJsb2MudHlwZSA9PSB0c2lDb21wb25lbnRzLlRleHRCb3g7IGVsc2UgcGFyYWdyYXBoZUJsb2NrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUc2ktVGV4dC1Cb3ggW2lucHV0TmFtZV09XCJibG9jLnR5cGVDb25maWdbJ2lucHV0TmFtZSddXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbnB1dElkXT1cImJsb2MudHlwZUNvbmZpZ1snaW5wdXRJZCddXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsoaW5wdXRGaWVsZCldPVwiaXRlbVtibG9jLnR5cGVDb25maWdbJ2lucHV0RmllbGQnXV1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Uc2ktVGV4dC1Cb3g+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gVHNpLVBhcmFncmFwaCAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBjbGFzcz1cInt7YmxvYy5zdHlsZUNsYXNzfX1cIiAjcGFyYWdyYXBoZUJsb2NrPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJibG9jLnR5cGUgPT0gdHNpQ29tcG9uZW50cy5QYXJhZ3JhcGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRzaS1QYXJhZ3JhcGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwYXJhZ3JhcGhOYW1lXT1cImJsb2MudHlwZUNvbmZpZ1sncGFyYWdyYXBoTmFtZSddfCBsb2NhbGl6ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1RzaS1QYXJhZ3JhcGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEhlcmUgRmluaXNoIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wLXRhYlBhbmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3AtdGFiVmlldz5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9maWVsZHNldD5cclxuXHJcbiAgICA8VHNpLU1vZGFsLUZvb3RlciBbY2FuY2VsRGlzYWJsZWRdPVwic2F2aW5nXCIgKG9uQ2FuY2VsQ2xpY2spPVwiaGlkZSgpXCI+XHJcbiAgICA8L1RzaS1Nb2RhbC1Gb290ZXI+XHJcbjwvZm9ybT4iXX0=
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
2
|
+
import { firstValueFrom } from 'rxjs';
|
|
3
|
+
import { LocalizationKeys } from '../../consts/localization-key';
|
|
4
|
+
import { defaultCardHeader } from '../../consts/tsi-consts';
|
|
5
|
+
import { AppBaseComponent } from '../../tsi-base/components/app-base/app-base.component';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
import * as i1 from "../../services/configuration/entity-configuration.service";
|
|
8
|
+
import * as i2 from "../../pipes/localize.pipe";
|
|
9
|
+
import * as i3 from "../../services/status/entityStatus.service";
|
|
10
|
+
import * as i4 from "../../services/notification/tsi-notification.service";
|
|
11
|
+
import * as i5 from "@angular/common";
|
|
12
|
+
import * as i6 from "primeng/paginator";
|
|
13
|
+
import * as i7 from "../spinner/spinner.component";
|
|
14
|
+
/**
|
|
15
|
+
* TsiKanbanComponent
|
|
16
|
+
* Description: Displays a Kanban board view for TSI entities.
|
|
17
|
+
*/
|
|
18
|
+
export class TsiKanbanComponent extends AppBaseComponent {
|
|
19
|
+
set page(value) {
|
|
20
|
+
this._page = value;
|
|
21
|
+
this.handlePageChange(value);
|
|
22
|
+
}
|
|
23
|
+
get page() { return this._page; }
|
|
24
|
+
constructor(cdr, _entityConfig, _localize, _entityStatusService, _notificationService) {
|
|
25
|
+
super();
|
|
26
|
+
this.cdr = cdr;
|
|
27
|
+
this._entityConfig = _entityConfig;
|
|
28
|
+
this._localize = _localize;
|
|
29
|
+
this._entityStatusService = _entityStatusService;
|
|
30
|
+
this._notificationService = _notificationService;
|
|
31
|
+
this.buttonClicked = new EventEmitter();
|
|
32
|
+
this.callSearch = new EventEmitter();
|
|
33
|
+
this.cards = [];
|
|
34
|
+
this.cardMapByStatus = new Map();
|
|
35
|
+
this.draggedCard = null;
|
|
36
|
+
this.first = 0;
|
|
37
|
+
this.rows = 10;
|
|
38
|
+
this.totalCount = 0;
|
|
39
|
+
this.isLoading = false;
|
|
40
|
+
this.originalStatus = '';
|
|
41
|
+
this.localizedStatusLabels = [];
|
|
42
|
+
this.localizedStatusLabels = [
|
|
43
|
+
{
|
|
44
|
+
key: 'new',
|
|
45
|
+
localized: this._localize.transform('gesc_param_article_statut_enums_new').trim()
|
|
46
|
+
}
|
|
47
|
+
];
|
|
48
|
+
}
|
|
49
|
+
async ngOnInit() {
|
|
50
|
+
await this.getBusinessClassStatus(this.cardBusinessClass);
|
|
51
|
+
this.page$.subscribe(async (page) => {
|
|
52
|
+
if (page) {
|
|
53
|
+
this.isLoading = !!page.loading;
|
|
54
|
+
await this.handlePageChange(page);
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
dragStart(_, card) {
|
|
59
|
+
this.draggedCard = card;
|
|
60
|
+
this.previousStatus = this.draggedCard.status;
|
|
61
|
+
}
|
|
62
|
+
dragEnd() { this.draggedCard = null; }
|
|
63
|
+
allowDrop(event) { event.preventDefault(); }
|
|
64
|
+
trackByStatus(index, status) { return status.key; }
|
|
65
|
+
trackByCard(index, card) { return card.uid; }
|
|
66
|
+
drop(event, newStatusKey) {
|
|
67
|
+
this.isLoading = true;
|
|
68
|
+
event.preventDefault();
|
|
69
|
+
if (!this.draggedCard)
|
|
70
|
+
return;
|
|
71
|
+
const card = this.draggedCard;
|
|
72
|
+
const previousStatus = this.previousStatus;
|
|
73
|
+
if (this.draggedCard.status !== newStatusKey) {
|
|
74
|
+
this.draggedCard.status = newStatusKey;
|
|
75
|
+
let uid = this.draggedCard.uid;
|
|
76
|
+
this.crudService?.getById(uid).subscribe({
|
|
77
|
+
next: (resp) => {
|
|
78
|
+
const realStatusKey = Object.keys(resp).find(key => key.toLowerCase() === this.originalStatus.toLowerCase());
|
|
79
|
+
if (!realStatusKey) {
|
|
80
|
+
this.draggedCard = null;
|
|
81
|
+
this.updateCardMap();
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
const updatedItem = {
|
|
85
|
+
...resp,
|
|
86
|
+
[realStatusKey]: newStatusKey
|
|
87
|
+
};
|
|
88
|
+
this.crudService?.update(updatedItem, uid).subscribe({
|
|
89
|
+
next: (resp) => {
|
|
90
|
+
this.isLoading = true;
|
|
91
|
+
this._notificationService.success(this._localize.transform(LocalizationKeys.savedSuccessfully));
|
|
92
|
+
this.draggedCard = null;
|
|
93
|
+
this.updateCardMap();
|
|
94
|
+
this.isLoading = false;
|
|
95
|
+
},
|
|
96
|
+
error: (error) => {
|
|
97
|
+
let from = this._localize.transform("gesc_param_error_switch_status_from");
|
|
98
|
+
let to = this._localize.transform("gesc_param_error_switch_status_to");
|
|
99
|
+
let message = `${from} '${this.getLocalizedStatus(this.previousStatus)}' ${to} '${this.getLocalizedStatus(card.status)}'`;
|
|
100
|
+
this._notificationService.error(message);
|
|
101
|
+
card.status = previousStatus;
|
|
102
|
+
this.draggedCard = null;
|
|
103
|
+
this.updateCardMap();
|
|
104
|
+
this.isLoading = false;
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
},
|
|
108
|
+
error: (error) => {
|
|
109
|
+
card.status = previousStatus;
|
|
110
|
+
this.draggedCard = null;
|
|
111
|
+
this.updateCardMap();
|
|
112
|
+
this.isLoading = false;
|
|
113
|
+
},
|
|
114
|
+
});
|
|
115
|
+
this.updateCardMap();
|
|
116
|
+
}
|
|
117
|
+
this.draggedCard = null;
|
|
118
|
+
}
|
|
119
|
+
onPageChange(event) {
|
|
120
|
+
this.first = event.first ?? 0;
|
|
121
|
+
this.rows = event.rows ?? 10;
|
|
122
|
+
this.callSearch.emit({ skipCount: this.first, maxResultCount: this.rows });
|
|
123
|
+
}
|
|
124
|
+
getStatusClass(card) {
|
|
125
|
+
const index = this.localizedStatusLabels.findIndex(l => l.key === card.status);
|
|
126
|
+
return `status-${index >= 0 ? index : 'default'}`;
|
|
127
|
+
}
|
|
128
|
+
getLocalizedStatus(key) {
|
|
129
|
+
if (!key)
|
|
130
|
+
return '';
|
|
131
|
+
const match = this.localizedStatusLabels.find(s => s.key === key);
|
|
132
|
+
return match?.localized ?? key;
|
|
133
|
+
}
|
|
134
|
+
async handlePageChange(page) {
|
|
135
|
+
if (!page?.items)
|
|
136
|
+
return;
|
|
137
|
+
this.cards = await this.mapItemsToCards(page.items);
|
|
138
|
+
this.totalCount = page.totalCount;
|
|
139
|
+
this.updateCardMap();
|
|
140
|
+
}
|
|
141
|
+
async getEntityInfo() {
|
|
142
|
+
this.entityInfo = await this._entityConfig.getEntityInfoFromCache(this.cardBusinessClass);
|
|
143
|
+
}
|
|
144
|
+
getColKeys() {
|
|
145
|
+
return {
|
|
146
|
+
photo: this.entityInfo?.cardHeaderPhotoColumn?.toLowerCase() ?? '',
|
|
147
|
+
col1: this.entityInfo?.cardTitleColumn?.toLowerCase() ?? '',
|
|
148
|
+
col2: this.entityInfo?.cardSubHeaderColumn?.toLowerCase() ?? '',
|
|
149
|
+
col3: this.entityInfo?.cardDescriptionColumn?.toLowerCase() ?? '',
|
|
150
|
+
status: this.entityInfo?.statusColumnName?.toLowerCase() ?? ''
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
async mapItemsToCards(items) {
|
|
154
|
+
await this.getEntityInfo();
|
|
155
|
+
const { col1, col2, col3, photo, status } = this.getColKeys();
|
|
156
|
+
const validKeys = this.localizedStatusLabels.map(s => s.key);
|
|
157
|
+
this.originalStatus = status;
|
|
158
|
+
return items.map((item, index) => {
|
|
159
|
+
const keys = Object.keys(item).reduce((acc, key) => {
|
|
160
|
+
acc[key.toLowerCase()] = key;
|
|
161
|
+
return acc;
|
|
162
|
+
}, {});
|
|
163
|
+
const rawStatus = item[keys[status]]?.trim();
|
|
164
|
+
const isValidStatus = rawStatus && validKeys.includes(rawStatus);
|
|
165
|
+
const finalStatus = isValidStatus ? rawStatus : 'new';
|
|
166
|
+
return {
|
|
167
|
+
id: index + 1 + this.first,
|
|
168
|
+
uid: `${item.uid}`,
|
|
169
|
+
headerTitle: `${item[keys[col1]] ?? ''}`,
|
|
170
|
+
subHeaderTitle: `${item[keys[col2]] ?? ''}`,
|
|
171
|
+
description: `${item[keys[col3]] ?? ''}`,
|
|
172
|
+
status: finalStatus,
|
|
173
|
+
photo: item[keys[photo]] || defaultCardHeader.image
|
|
174
|
+
};
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
updateCardMap() {
|
|
178
|
+
const map = new Map();
|
|
179
|
+
for (const label of this.localizedStatusLabels) {
|
|
180
|
+
map.set(label.key, []);
|
|
181
|
+
}
|
|
182
|
+
for (const card of this.cards) {
|
|
183
|
+
const group = map.get(card.status);
|
|
184
|
+
if (group) {
|
|
185
|
+
group.push(card);
|
|
186
|
+
}
|
|
187
|
+
else {
|
|
188
|
+
console.log(`Unmapped card status: ${card.status}`, card);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
for (const [key, cards] of map.entries()) {
|
|
192
|
+
cards.sort((a, b) => (a.headerTitle ?? '').localeCompare(b.headerTitle ?? ''));
|
|
193
|
+
}
|
|
194
|
+
this.cardMapByStatus = map;
|
|
195
|
+
this.cdr.markForCheck();
|
|
196
|
+
}
|
|
197
|
+
async getBusinessClassStatus(className) {
|
|
198
|
+
const response = await firstValueFrom(this._entityStatusService.getEntityStatus(className));
|
|
199
|
+
const statuses = response?.entityStatus ?? [];
|
|
200
|
+
this.localizedStatusLabels = [
|
|
201
|
+
{ key: 'new', localized: this._localize.transform('gesc_param_article_statut_enums_new').trim() },
|
|
202
|
+
...statuses.map((s) => ({
|
|
203
|
+
key: s.key,
|
|
204
|
+
localized: this._localize.transform(s.value).trim()
|
|
205
|
+
}))
|
|
206
|
+
];
|
|
207
|
+
}
|
|
208
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TsiKanbanComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.EntityConfigurationService }, { token: i2.LocalizePipe }, { token: i3.EntityStatusService }, { token: i4.TsiNotificationService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
209
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TsiKanbanComponent, selector: "Tsi-kanban", inputs: { cardBusinessClass: "cardBusinessClass", header: "header", id: "id", page$: "page$", crudService: "crudService", page: "page" }, outputs: { buttonClicked: "buttonClicked", callSearch: "callSearch" }, usesInheritance: true, ngImport: i0, template: "<div class=\"card flex justify-content-center\">\r\n <p-paginator\r\n [first]=\"first\"\r\n [rows]=\"rows\"\r\n [totalRecords]=\"totalCount\"\r\n [rowsPerPageOptions]=\"[1, 10, 25, 50]\"\r\n (onPageChange)=\"onPageChange($event)\"\r\n [showCurrentPageReport]=\"true\"\r\n currentPageReportTemplate=\"{{ 'Showing' | localize }} {first} {{'to' | localize}} {last} {{ 'of' | localize }} {totalRecords}\">\r\n </p-paginator>\r\n</div>\r\n\r\n<div class=\"kanban-board flex gap-4 overflow-auto\">\r\n <div *ngFor=\"let status of localizedStatusLabels; trackBy: trackByStatus\"\r\n class=\"kanban-column flex flex-column border-round surface-0 shadow-2\"\r\n (dragover)=\"allowDrop($event)\"\r\n (drop)=\"drop($event, status.key)\">\r\n \r\n <div class=\"column-header p-3 border-bottom-1 surface-border font-semibold\">\r\n {{ status.localized }}\r\n <span class=\"text-sm font-normal text-gray-500\">\r\n ({{ cardMapByStatus.get(status.key)?.length || 0 }})\r\n </span>\r\n </div>\r\n\r\n <div class=\"column-cards flex-1 overflow-auto p-3\">\r\n <div *ngFor=\"let card of cardMapByStatus.get(status.key); trackBy: trackByCard\"\r\n class=\"kanban-card p-3 border-round bg-white mb-3 shadow-1\"\r\n [ngClass]=\"getStatusClass(card)\"\r\n draggable=\"true\"\r\n (dragstart)=\"dragStart($event, card)\"\r\n (dragend)=\"dragEnd()\">\r\n \r\n <div class=\"font-bold mb-2\">{{ card.headerTitle }}</div>\r\n <div class=\"text-sm text-gray-600 mb-3\">{{ card.description }}</div>\r\n <div class=\"text-sm text-gray-600 mb-3\">\r\n <span class=\"font-semibold\">{{ 'gesc_document_statut' | localize }}:</span>\r\n <span>{{ getLocalizedStatus(card.status) }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<div class=\"overlay\" *ngIf=\"isLoading\">\r\n <div class=\"spinner-wrapper\">\r\n <app-spinner></app-spinner>\r\n </div>\r\n</div>\r\n", styles: [":host{display:block;padding:1rem}[draggable=true]{-webkit-user-select:none;user-select:none}.kanban-board{height:calc(100vh - 100px);padding:1rem}.kanban-column{width:300px;max-height:100%;display:flex;flex-direction:column;background-color:#f8f9fa}.column-header{font-size:1rem;font-weight:700;background-color:#fff;border-radius:6px 6px 0 0}.column-cards{overflow-y:auto;flex:1}.kanban-card{border-left:4px solid;cursor:move;transition:border-color .3s ease}.status-0{border-left-color:#7269ef}.status-1{border-left-color:#00c853}.status-2{border-left-color:#ffab00}.status-3{border-left-color:#d50000}[class*=status-]{border-left-style:solid;border-left-width:4px}\n"], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i6.Paginator, selector: "p-paginator", inputs: ["pageLinkSize", "style", "styleClass", "alwaysShow", "dropdownAppendTo", "templateLeft", "templateRight", "appendTo", "dropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showFirstLastIcon", "totalRecords", "rows", "rowsPerPageOptions", "showJumpToPageDropdown", "showJumpToPageInput", "jumpToPageItemTemplate", "showPageLinks", "locale", "dropdownItemTemplate", "first"], outputs: ["onPageChange"] }, { kind: "component", type: i7.SpinnerComponent, selector: "app-spinner" }, { kind: "pipe", type: i2.LocalizePipe, name: "localize" }] }); }
|
|
210
|
+
}
|
|
211
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TsiKanbanComponent, decorators: [{
|
|
212
|
+
type: Component,
|
|
213
|
+
args: [{ selector: 'Tsi-kanban', template: "<div class=\"card flex justify-content-center\">\r\n <p-paginator\r\n [first]=\"first\"\r\n [rows]=\"rows\"\r\n [totalRecords]=\"totalCount\"\r\n [rowsPerPageOptions]=\"[1, 10, 25, 50]\"\r\n (onPageChange)=\"onPageChange($event)\"\r\n [showCurrentPageReport]=\"true\"\r\n currentPageReportTemplate=\"{{ 'Showing' | localize }} {first} {{'to' | localize}} {last} {{ 'of' | localize }} {totalRecords}\">\r\n </p-paginator>\r\n</div>\r\n\r\n<div class=\"kanban-board flex gap-4 overflow-auto\">\r\n <div *ngFor=\"let status of localizedStatusLabels; trackBy: trackByStatus\"\r\n class=\"kanban-column flex flex-column border-round surface-0 shadow-2\"\r\n (dragover)=\"allowDrop($event)\"\r\n (drop)=\"drop($event, status.key)\">\r\n \r\n <div class=\"column-header p-3 border-bottom-1 surface-border font-semibold\">\r\n {{ status.localized }}\r\n <span class=\"text-sm font-normal text-gray-500\">\r\n ({{ cardMapByStatus.get(status.key)?.length || 0 }})\r\n </span>\r\n </div>\r\n\r\n <div class=\"column-cards flex-1 overflow-auto p-3\">\r\n <div *ngFor=\"let card of cardMapByStatus.get(status.key); trackBy: trackByCard\"\r\n class=\"kanban-card p-3 border-round bg-white mb-3 shadow-1\"\r\n [ngClass]=\"getStatusClass(card)\"\r\n draggable=\"true\"\r\n (dragstart)=\"dragStart($event, card)\"\r\n (dragend)=\"dragEnd()\">\r\n \r\n <div class=\"font-bold mb-2\">{{ card.headerTitle }}</div>\r\n <div class=\"text-sm text-gray-600 mb-3\">{{ card.description }}</div>\r\n <div class=\"text-sm text-gray-600 mb-3\">\r\n <span class=\"font-semibold\">{{ 'gesc_document_statut' | localize }}:</span>\r\n <span>{{ getLocalizedStatus(card.status) }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<div class=\"overlay\" *ngIf=\"isLoading\">\r\n <div class=\"spinner-wrapper\">\r\n <app-spinner></app-spinner>\r\n </div>\r\n</div>\r\n", styles: [":host{display:block;padding:1rem}[draggable=true]{-webkit-user-select:none;user-select:none}.kanban-board{height:calc(100vh - 100px);padding:1rem}.kanban-column{width:300px;max-height:100%;display:flex;flex-direction:column;background-color:#f8f9fa}.column-header{font-size:1rem;font-weight:700;background-color:#fff;border-radius:6px 6px 0 0}.column-cards{overflow-y:auto;flex:1}.kanban-card{border-left:4px solid;cursor:move;transition:border-color .3s ease}.status-0{border-left-color:#7269ef}.status-1{border-left-color:#00c853}.status-2{border-left-color:#ffab00}.status-3{border-left-color:#d50000}[class*=status-]{border-left-style:solid;border-left-width:4px}\n"] }]
|
|
214
|
+
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.EntityConfigurationService }, { type: i2.LocalizePipe }, { type: i3.EntityStatusService }, { type: i4.TsiNotificationService }], propDecorators: { buttonClicked: [{
|
|
215
|
+
type: Output
|
|
216
|
+
}], callSearch: [{
|
|
217
|
+
type: Output
|
|
218
|
+
}], cardBusinessClass: [{
|
|
219
|
+
type: Input
|
|
220
|
+
}], header: [{
|
|
221
|
+
type: Input
|
|
222
|
+
}], id: [{
|
|
223
|
+
type: Input
|
|
224
|
+
}], page$: [{
|
|
225
|
+
type: Input
|
|
226
|
+
}], crudService: [{
|
|
227
|
+
type: Input
|
|
228
|
+
}], page: [{
|
|
229
|
+
type: Input
|
|
230
|
+
}] } });
|
|
231
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHNpLWthbmJhbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90c2ktc2hhcmVkLXVpL3NyYy9saWIvdHNpLWNvbXBvbmVudHMvdHNpLWthbmJhbi90c2kta2FuYmFuLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RzaS1zaGFyZWQtdWkvc3JjL2xpYi90c2ktY29tcG9uZW50cy90c2kta2FuYmFuL3RzaS1rYW5iYW4uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFxQixTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbEcsT0FBTyxFQUFtQixjQUFjLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFHakUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdURBQXVELENBQUM7Ozs7Ozs7OztBQU96Rjs7O0dBR0c7QUFNSCxNQUFNLE9BQU8sa0JBQW1CLFNBQVEsZ0JBQWdCO0lBWXBELElBQWEsSUFBSSxDQUFDLEtBQVU7UUFDeEIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFDRCxJQUFJLElBQUksS0FBSyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBa0JqQyxZQUNZLEdBQXNCLEVBQ3RCLGFBQXlDLEVBQ3pDLFNBQXVCLEVBQ3ZCLG9CQUF5QyxFQUN6QyxvQkFBNEM7UUFFcEQsS0FBSyxFQUFFLENBQUM7UUFOQSxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUN0QixrQkFB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QUFDLEdBQUc7Z0JBQ1YsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEVBQUU7YUFDdEQsQ0FBQyxDQUFDO1NBQ04sQ0FBQztJQUNOLENBQUM7K0dBcFBRLGtCQUFrQjttR0FBbEIsa0JBQWtCLDBSQ3ZCL0Isd2dFQWlEQTs7NEZEMUJhLGtCQUFrQjtrQkFMOUIsU0FBUzsrQkFDSSxZQUFZO2lPQU1aLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFFRSxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLEVBQUU7c0JBQVYsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFHTyxJQUFJO3NCQUFoQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUGFnaW5hdG9yU3RhdGUgfSBmcm9tICdwcmltZW5nL3BhZ2luYXRvcic7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgZmlyc3RWYWx1ZUZyb20gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgTG9jYWxpemF0aW9uS2V5cyB9IGZyb20gJy4uLy4uL2NvbnN0cy9sb2NhbGl6YXRpb24ta2V5JztcclxuaW1wb3J0IHsgQnV0dG9uQ2xpY2tSZXN1bHQgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgVHNpQ2FyZCB9IGZyb20gJy4uLy4uL21vZGVscyc7XHJcbmltcG9ydCB7IGRlZmF1bHRDYXJkSGVhZGVyIH0gZnJvbSAnLi4vLi4vY29uc3RzL3RzaS1jb25zdHMnO1xyXG5pbXBvcnQgeyBBcHBCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vdHNpLWJhc2UvY29tcG9uZW50cy9hcHAtYmFzZS9hcHAtYmFzZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBMb2NhbGl6ZVBpcGUgfSBmcm9tICcuLi8uLi9waXBlcy9sb2NhbGl6ZS5waXBlJztcclxuaW1wb3J0IHsgQ3J1ZEJhc2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYmFzZS9jcnVkLWJhc2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IEVudGl0eUNvbmZpZ3VyYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY29uZmlndXJhdGlvbi9lbnRpdHktY29uZmlndXJhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVHNpTm90aWZpY2F0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL25vdGlmaWNhdGlvbi90c2ktbm90aWZpY2F0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBFbnRpdHlTdGF0dXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc3RhdHVzL2VudGl0eVN0YXR1cy5zZXJ2aWNlJztcclxuXHJcbi8qKlxyXG4gKiBUc2lLYW5iYW5Db21wb25lbnRcclxuICogRGVzY3JpcHRpb246IERpc3BsYXlzIGEgS2FuYmFuIGJvYXJkIHZpZXcgZm9yIFRTSSBlbnRpdGllcy5cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdUc2kta2FuYmFuJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi90c2kta2FuYmFuLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsOiAnLi90c2kta2FuYmFuLmNvbXBvbmVudC5zY3NzJyxcclxufSlcclxuZXhwb3J0IGNsYXNzIFRzaUthbmJhbkNvbXBvbmVudCBleHRlbmRzIEFwcEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICAgIEBPdXRwdXQoKSBidXR0b25DbGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcjxCdXR0b25DbGlja1Jlc3VsdD4oKTtcclxuICAgIEBPdXRwdXQoKSBjYWxsU2VhcmNoID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gICAgQElucHV0KCkgY2FyZEJ1c2luZXNzQ2xhc3M6IGFueTtcclxuICAgIEBJbnB1dCgpIGhlYWRlcjogYW55O1xyXG4gICAgQElucHV0KCkgaWQ6IGFueTtcclxuICAgIEBJbnB1dCgpIHBhZ2UkITogQmVoYXZpb3JTdWJqZWN0PGFueT47XHJcbiAgICBASW5wdXQoKSBjcnVkU2VydmljZT86IENydWRCYXNlU2VydmljZTxhbnksIGFueSwgYW55LCBhbnk+O1xyXG5cclxuICAgIHByaXZhdGUgX3BhZ2U6IGFueTtcclxuICAgIEBJbnB1dCgpIHNldCBwYWdlKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLl9wYWdlID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy5oYW5kbGVQYWdlQ2hhbmdlKHZhbHVlKTtcclxuICAgIH1cclxuICAgIGdldCBwYWdlKCkgeyByZXR1cm4gdGhpcy5fcGFnZTsgfVxyXG5cclxuICAgIGNhcmRzOiBUc2lDYXJkW10gPSBbXTtcclxuICAgIGNhcmRNYXBCeVN0YXR1czogTWFwPHN0cmluZywgVHNpQ2FyZFtdPiA9IG5ldyBNYXAoKTtcclxuXHJcbiAgICBkcmFnZ2VkQ2FyZDogVHNpQ2FyZCB8IG51bGwgPSBudWxsO1xyXG4gICAgZmlyc3QgPSAwO1xyXG4gICAgcm93cyA9IDEwO1xyXG4gICAgdG90YWxDb3VudCA9IDA7XHJcbiAgICBpc0xvYWRpbmcgPSBmYWxzZTtcclxuXHJcbiAgICBvcmlnaW5hbFN0YXR1czogc3RyaW5nID0gJyc7XHJcbiAgICBwcmV2aW91c1N0YXR1czogYW55O1xyXG5cclxuICAgIGxvY2FsaXplZFN0YXR1c0xhYmVsczogeyBrZXk6IHN0cmluZzsgbG9jYWxpemVkOiBzdHJpbmcgfVtdID1cclxuICAgICAgICBbXHJcbiAgICAgICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICAgICAgcHJpdmF0ZSBfZW50aXR5Q29uZmlnOiBFbnRpdHlDb25maWd1cmF0aW9uU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9sb2NhbGl6ZTogTG9jYWxpemVQaXBlLFxyXG4gICAgICAgIHByaXZhdGUgX2VudGl0eVN0YXR1c1NlcnZpY2U6IEVudGl0eVN0YXR1c1NlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfbm90aWZpY2F0aW9uU2VydmljZTogVHNpTm90aWZpY2F0aW9uU2VydmljZSxcclxuICAgICkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICAgICAgdGhpcy5sb2NhbGl6ZWRTdGF0dXNMYWJlbHMgPSBbXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGtleTogJ25ldycsXHJcbiAgICAgICAgICAgICAgICBsb2NhbGl6ZWQ6IHRoaXMuX2xvY2FsaXplLnRyYW5zZm9ybSgnZ2VzY19wYXJhbV9hcnRpY2xlX3N0YXR1dF9lbnVtc19uZXcnKS50cmltKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIF1cclxuICAgIH1cclxuXHJcbiAgICBvdmVycmlkZSBhc3luYyBuZ09uSW5pdCgpIHtcclxuICAgICAgICBhd2FpdCB0aGlzLmdldEJ1c2luZXNzQ2xhc3NTdGF0dXModGhpcy5jYXJkQnVzaW5lc3NDbGFzcyk7XHJcblxyXG4gICAgICAgIHRoaXMucGFnZSQuc3Vic2NyaWJlKGFzeW5jIHBhZ2UgPT4ge1xyXG4gICAgICAgICAgICBpZiAocGFnZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSAhIXBhZ2UubG9hZGluZztcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuaGFuZGxlUGFnZUNoYW5nZShwYWdlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGRyYWdTdGFydChfOiBEcmFnRXZlbnQsIGNhcmQ6IFRzaUNhcmQpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmRyYWdnZWRDYXJkID0gY2FyZDtcclxuICAgICAgICB0aGlzLnByZXZpb3VzU3RhdHVzID0gdGhpcy5kcmFnZ2VkQ2FyZC5zdGF0dXM7XHJcbiAgICB9XHJcblxyXG4gICAgZHJhZ0VuZCgpOiB2b2lkIHsgdGhpcy5kcmFnZ2VkQ2FyZCA9IG51bGw7IH1cclxuXHJcbiAgICBhbGxvd0Ryb3AoZXZlbnQ6IERyYWdFdmVudCk6IHZvaWQgeyBldmVudC5wcmV2ZW50RGVmYXVsdCgpOyB9XHJcblxyXG4gICAgdHJhY2tCeVN0YXR1cyhpbmRleDogbnVtYmVyLCBzdGF0dXM6IHsga2V5OiBzdHJpbmc7IGxvY2FsaXplZDogc3RyaW5nIH0pIHsgcmV0dXJuIHN0YXR1cy5rZXk7IH1cclxuXHJcbiAgICB0cmFja0J5Q2FyZChpbmRleDogbnVtYmVyLCBjYXJkOiBUc2lDYXJkKSB7IHJldHVybiBjYXJkLnVpZDsgfVxyXG5cclxuICAgIGRyb3AoZXZlbnQ6IERyYWdFdmVudCwgbmV3U3RhdHVzS2V5OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICBpZiAoIXRoaXMuZHJhZ2dlZENhcmQpIHJldHVybjtcclxuXHJcbiAgICAgICAgY29uc3QgY2FyZCA9IHRoaXMuZHJhZ2dlZENhcmQ7XHJcbiAgICAgICAgY29uc3QgcHJldmlvdXNTdGF0dXMgPSB0aGlzLnByZXZpb3VzU3RhdHVzO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5kcmFnZ2VkQ2FyZC5zdGF0dXMgIT09IG5ld1N0YXR1c0tleSkge1xyXG4gICAgICAgICAgICB0aGlzLmRyYWdnZWRDYXJkLnN0YXR1cyA9IG5ld1N0YXR1c0tleTtcclxuXHJcbiAgICAgICAgICAgIGxldCB1aWQgPSB0aGlzLmRyYWdnZWRDYXJkLnVpZCE7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNydWRTZXJ2aWNlPy5nZXRCeUlkKHVpZCkuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICAgIG5leHQ6IChyZXNwKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVhbFN0YXR1c0tleSA9IE9iamVjdC5rZXlzKHJlc3ApLmZpbmQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9PiBrZXkudG9Mb3dlckNhc2UoKSA9PT0gdGhpcy5vcmlnaW5hbFN0YXR1cy50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFyZWFsU3RhdHVzS2V5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZHJhZ2dlZENhcmQgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNhcmRNYXAoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdXBkYXRlZEl0ZW0gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnJlc3AsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFsU3RhdHVzS2V5XTogbmV3U3RhdHVzS2V5XHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jcnVkU2VydmljZT8udXBkYXRlKHVwZGF0ZWRJdGVtLCB1aWQpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQ6IChyZXNwKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3ModGhpcy5fbG9jYWxpemUudHJhbnNmb3JtKExvY2FsaXphdGlvbktleXMuc2F2ZWRTdWNjZXNzZnVsbHkpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZHJhZ2dlZENhcmQgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVDYXJkTWFwKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZnJvbSA9IHRoaXMuX2xvY2FsaXplLnRyYW5zZm9ybShcImdlc2NfcGFyYW1fZXJyb3Jfc3dpdGNoX3N0YXR1c19mcm9tXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRvID0gdGhpcy5fbG9jYWxpemUudHJhbnNmb3JtKFwiZ2VzY19wYXJhbV9lcnJvcl9zd2l0Y2hfc3RhdHVzX3RvXCIpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBtZXNzYWdlID0gYCR7ZnJvbX0gJyR7dGhpcy5nZXRMb2NhbGl6ZWRTdGF0dXModGhpcy5wcmV2aW91c1N0YXR1cyl9JyAke3RvfSAnJHt0aGlzLmdldExvY2FsaXplZFN0YXR1cyhjYXJkLnN0YXR1cyl9J2A7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpY2F0aW9uU2VydmljZS5lcnJvcihtZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcmQuc3RhdHVzID0gcHJldmlvdXNTdGF0dXM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRyYWdnZWRDYXJkID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlQ2FyZE1hcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGVycm9yOiAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhcmQuc3RhdHVzID0gcHJldmlvdXNTdGF0dXM7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcmFnZ2VkQ2FyZCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVDYXJkTWFwKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgdGhpcy51cGRhdGVDYXJkTWFwKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmRyYWdnZWRDYXJkID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBvblBhZ2VDaGFuZ2UoZXZlbnQ6IFBhZ2luYXRvclN0YXRlKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5maXJzdCA9IGV2ZW50LmZpcnN0ID8/IDA7XHJcbiAgICAgICAgdGhpcy5yb3dzID0gZXZlbnQucm93cyA/PyAxMDtcclxuICAgICAgICB0aGlzLmNhbGxTZWFyY2guZW1pdCh7IHNraXBDb3VudDogdGhpcy5maXJzdCwgbWF4UmVzdWx0Q291bnQ6IHRoaXMucm93cyB9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRTdGF0dXNDbGFzcyhjYXJkOiBUc2lDYXJkKTogc3RyaW5nIHtcclxuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMubG9jYWxpemVkU3RhdHVzTGFiZWxzLmZpbmRJbmRleChsID0+IGwua2V5ID09PSBjYXJkLnN0YXR1cyk7XHJcbiAgICAgICAgcmV0dXJuIGBzdGF0dXMtJHtpbmRleCA+PSAwID8gaW5kZXggOiAnZGVmYXVsdCd9YDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRMb2NhbGl6ZWRTdGF0dXMoa2V5OiBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmICgha2V5KSByZXR1cm4gJyc7XHJcbiAgICAgICAgY29uc3QgbWF0Y2ggPSB0aGlzLmxvY2FsaXplZFN0YXR1c0xhYmVscy5maW5kKHMgPT4gcy5rZXkgPT09IGtleSk7XHJcbiAgICAgICAgcmV0dXJuIG1hdGNoPy5sb2NhbGl6ZWQgPz8ga2V5O1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgaGFuZGxlUGFnZUNoYW5nZShwYWdlOiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICBpZiAoIXBhZ2U/Lml0ZW1zKSByZXR1cm47XHJcblxyXG4gICAgICAgIHRoaXMuY2FyZHMgPSBhd2FpdCB0aGlzLm1hcEl0ZW1zVG9DYXJkcyhwYWdlLml0ZW1zKTtcclxuICAgICAgICB0aGlzLnRvdGFsQ291bnQgPSBwYWdlLnRvdGFsQ291bnQ7XHJcbiAgICAgICAgdGhpcy51cGRhdGVDYXJkTWFwKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBnZXRFbnRpdHlJbmZvKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIHRoaXMuZW50aXR5SW5mbyA9IGF3YWl0IHRoaXMuX2VudGl0eUNvbmZpZy5nZXRFbnRpdHlJbmZvRnJvbUNhY2hlKHRoaXMuY2FyZEJ1c2luZXNzQ2xhc3MpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0Q29sS2V5cygpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBwaG90bzogdGhpcy5lbnRpdHlJbmZvPy5jYXJkSGVhZGVyUGhvdG9Db2x1bW4/LnRvTG93ZXJDYXNlKCkgPz8gJycsXHJcbiAgICAgICAgICAgIGNvbDE6IHRoaXMuZW50aXR5SW5mbz8uY2FyZFRpdGxlQ29sdW1uPy50b0xvd2VyQ2FzZSgpID8/ICcnLFxyXG4gICAgICAgICAgICBjb2wyOiB0aGlzLmVudGl0eUluZm8/LmNhcmRTdWJIZWFkZXJDb2x1bW4/LnRvTG93ZXJDYXNlKCkgPz8gJycsXHJcbiAgICAgICAgICAgIGNvbDM6IHRoaXMuZW50aXR5SW5mbz8uY2FyZERlc2NyaXB0aW9uQ29sdW1uPy50b0xvd2VyQ2FzZSgpID8/ICcnLFxyXG4gICAgICAgICAgICBzdGF0dXM6IHRoaXMuZW50aXR5SW5mbz8uc3RhdHVzQ29sdW1uTmFtZT8udG9Mb3dlckNhc2UoKSA/PyAnJ1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBtYXBJdGVtc1RvQ2FyZHMoaXRlbXM6IGFueVtdKTogUHJvbWlzZTxUc2lDYXJkW10+IHtcclxuICAgICAgICBhd2FpdCB0aGlzLmdldEVudGl0eUluZm8oKTtcclxuXHJcbiAgICAgICAgY29uc3QgeyBjb2wxLCBjb2wyLCBjb2wzLCBwaG90bywgc3RhdHVzIH0gPSB0aGlzLmdldENvbEtleXMoKTtcclxuICAgICAgICBjb25zdCB2YWxpZEtleXMgPSB0aGlzLmxvY2FsaXplZFN0YXR1c0xhYmVscy5tYXAocyA9PiBzLmtleSk7XHJcblxyXG4gICAgICAgIHRoaXMub3JpZ2luYWxTdGF0dXMgPSBzdGF0dXM7XHJcblxyXG4gICAgICAgIHJldHVybiBpdGVtcy5tYXAoKGl0ZW06IGFueSwgaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoaXRlbSkucmVkdWNlKChhY2MsIGtleSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgYWNjW2tleS50b0xvd2VyQ2FzZSgpXSA9IGtleTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBhY2M7XHJcbiAgICAgICAgICAgIH0sIHt9IGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZz4pO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgcmF3U3RhdHVzID0gaXRlbVtrZXlzW3N0YXR1c11dPy50cmltKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGlzVmFsaWRTdGF0dXMgPSByYXdTdGF0dXMgJiYgdmFsaWRLZXlzLmluY2x1ZGVzKHJhd1N0YXR1cyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpbmFsU3RhdHVzID0gaXNWYWxpZFN0YXR1cyA/IHJhd1N0YXR1cyA6ICduZXcnO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGlkOiBpbmRleCArIDEgKyB0aGlzLmZpcnN0LFxyXG4gICAgICAgICAgICAgICAgdWlkOiBgJHtpdGVtLnVpZH1gLFxyXG4gICAgICAgICAgICAgICAgaGVhZGVyVGl0bGU6IGAke2l0ZW1ba2V5c1tjb2wxXV0gPz8gJyd9YCxcclxuICAgICAgICAgICAgICAgIHN1YkhlYWRlclRpdGxlOiBgJHtpdGVtW2tleXNbY29sMl1dID8/ICcnfWAsXHJcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogYCR7aXRlbVtrZXlzW2NvbDNdXSA/PyAnJ31gLFxyXG4gICAgICAgICAgICAgICAgc3RhdHVzOiBmaW5hbFN0YXR1cyxcclxuICAgICAgICAgICAgICAgIHBob3RvOiBpdGVtW2tleXNbcGhvdG9dXSB8fCBkZWZhdWx0Q2FyZEhlYWRlci5pbWFnZVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdXBkYXRlQ2FyZE1hcCgpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBtYXAgPSBuZXcgTWFwPHN0cmluZywgVHNpQ2FyZFtdPigpO1xyXG5cclxuICAgICAgICBmb3IgKGNvbnN0IGxhYmVsIG9mIHRoaXMubG9jYWxpemVkU3RhdHVzTGFiZWxzKSB7XHJcbiAgICAgICAgICAgIG1hcC5zZXQobGFiZWwua2V5LCBbXSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKGNvbnN0IGNhcmQgb2YgdGhpcy5jYXJkcykge1xyXG4gICAgICAgICAgICBjb25zdCBncm91cCA9IG1hcC5nZXQoY2FyZC5zdGF0dXMhKTtcclxuICAgICAgICAgICAgaWYgKGdyb3VwKSB7XHJcbiAgICAgICAgICAgICAgICBncm91cC5wdXNoKGNhcmQpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFVubWFwcGVkIGNhcmQgc3RhdHVzOiAke2NhcmQuc3RhdHVzfWAsIGNhcmQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIGNhcmRzXSBvZiBtYXAuZW50cmllcygpKSB7XHJcbiAgICAgICAgICAgIGNhcmRzLnNvcnQoKGEsIGIpID0+IChhLmhlYWRlclRpdGxlID8/ICcnKS5sb2NhbGVDb21wYXJlKGIuaGVhZGVyVGl0bGUgPz8gJycpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY2FyZE1hcEJ5U3RhdHVzID0gbWFwO1xyXG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgZ2V0QnVzaW5lc3NDbGFzc1N0YXR1cyhjbGFzc05hbWU/OiBzdHJpbmcpIHtcclxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuX2VudGl0eVN0YXR1c1NlcnZpY2UuZ2V0RW50aXR5U3RhdHVzKGNsYXNzTmFtZSkpO1xyXG4gICAgICAgIGNvbnN0IHN0YXR1c2VzID0gcmVzcG9uc2U/LmVudGl0eVN0YXR1cyA/PyBbXTtcclxuXHJcbiAgICAgICAgdGhpcy5sb2NhbGl6ZWRTdGF0dXNMYWJlbHMgPSBbXHJcbiAgICAgICAgICAgIHsga2V5OiAnbmV3JywgbG9jYWxpemVkOiB0aGlzLl9sb2NhbGl6ZS50cmFuc2Zvcm0oJ2dlc2NfcGFyYW1fYXJ0aWNsZV9zdGF0dXRfZW51bXNfbmV3JykudHJpbSgpIH0sXHJcbiAgICAgICAgICAgIC4uLnN0YXR1c2VzLm1hcCgoczogYW55KSA9PiAoe1xyXG4gICAgICAgICAgICAgICAga2V5OiBzLmtleSxcclxuICAgICAgICAgICAgICAgIGxvY2FsaXplZDogdGhpcy5fbG9jYWxpemUudHJhbnNmb3JtKHMudmFsdWUpLnRyaW0oKVxyXG4gICAgICAgICAgICB9KSlcclxuICAgICAgICBdO1xyXG4gICAgfVxyXG59IiwiPGRpdiBjbGFzcz1cImNhcmQgZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+XHJcbiAgPHAtcGFnaW5hdG9yXHJcbiAgICBbZmlyc3RdPVwiZmlyc3RcIlxyXG4gICAgW3Jvd3NdPVwicm93c1wiXHJcbiAgICBbdG90YWxSZWNvcmRzXT1cInRvdGFsQ291bnRcIlxyXG4gICAgW3Jvd3NQZXJQYWdlT3B0aW9uc109XCJbMSwgMTAsIDI1LCA1MF1cIlxyXG4gICAgKG9uUGFnZUNoYW5nZSk9XCJvblBhZ2VDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICBbc2hvd0N1cnJlbnRQYWdlUmVwb3J0XT1cInRydWVcIlxyXG4gICAgY3VycmVudFBhZ2VSZXBvcnRUZW1wbGF0ZT1cInt7ICdTaG93aW5nJyB8IGxvY2FsaXplIH19IHtmaXJzdH0ge3sndG8nIHwgbG9jYWxpemV9fSB7bGFzdH0ge3sgJ29mJyB8IGxvY2FsaXplIH19IHt0b3RhbFJlY29yZHN9XCI+XHJcbiAgPC9wLXBhZ2luYXRvcj5cclxuPC9kaXY+XHJcblxyXG48ZGl2IGNsYXNzPVwia2FuYmFuLWJvYXJkIGZsZXggZ2FwLTQgb3ZlcmZsb3ctYXV0b1wiPlxyXG4gIDxkaXYgKm5nRm9yPVwibGV0IHN0YXR1cyBvZiBsb2NhbGl6ZWRTdGF0dXNMYWJlbHM7IHRyYWNrQnk6IHRyYWNrQnlTdGF0dXNcIlxyXG4gICAgICAgY2xhc3M9XCJrYW5iYW4tY29sdW1uIGZsZXggZmxleC1jb2x1bW4gYm9yZGVyLXJvdW5kIHN1cmZhY2UtMCBzaGFkb3ctMlwiXHJcbiAgICAgICAoZHJhZ292ZXIpPVwiYWxsb3dEcm9wKCRldmVudClcIlxyXG4gICAgICAgKGRyb3ApPVwiZHJvcCgkZXZlbnQsIHN0YXR1cy5rZXkpXCI+XHJcbiAgICAgICBcclxuICAgIDxkaXYgY2xhc3M9XCJjb2x1bW4taGVhZGVyIHAtMyBib3JkZXItYm90dG9tLTEgc3VyZmFjZS1ib3JkZXIgZm9udC1zZW1pYm9sZFwiPlxyXG4gICAgICB7eyBzdGF0dXMubG9jYWxpemVkIH19XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1zbSBmb250LW5vcm1hbCB0ZXh0LWdyYXktNTAwXCI+XHJcbiAgICAgICAgKHt7IGNhcmRNYXBCeVN0YXR1cy5nZXQoc3RhdHVzLmtleSk/Lmxlbmd0aCB8fCAwIH19KVxyXG4gICAgICA8L3NwYW4+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sdW1uLWNhcmRzIGZsZXgtMSBvdmVyZmxvdy1hdXRvIHAtM1wiPlxyXG4gICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBjYXJkIG9mIGNhcmRNYXBCeVN0YXR1cy5nZXQoc3RhdHVzLmtleSk7IHRyYWNrQnk6IHRyYWNrQnlDYXJkXCJcclxuICAgICAgICAgICBjbGFzcz1cImthbmJhbi1jYXJkIHAtMyBib3JkZXItcm91bmQgYmctd2hpdGUgbWItMyBzaGFkb3ctMVwiXHJcbiAgICAgICAgICAgW25nQ2xhc3NdPVwiZ2V0U3RhdHVzQ2xhc3MoY2FyZClcIlxyXG4gICAgICAgICAgIGRyYWdnYWJsZT1cInRydWVcIlxyXG4gICAgICAgICAgIChkcmFnc3RhcnQpPVwiZHJhZ1N0YXJ0KCRldmVudCwgY2FyZClcIlxyXG4gICAgICAgICAgIChkcmFnZW5kKT1cImRyYWdFbmQoKVwiPlxyXG4gICAgICAgICAgIFxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb250LWJvbGQgbWItMlwiPnt7IGNhcmQuaGVhZGVyVGl0bGUgfX08L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1zbSB0ZXh0LWdyYXktNjAwIG1iLTNcIj57eyBjYXJkLmRlc2NyaXB0aW9uIH19PC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtc20gdGV4dC1ncmF5LTYwMCBtYi0zXCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImZvbnQtc2VtaWJvbGRcIj57eyAnZ2VzY19kb2N1bWVudF9zdGF0dXQnIHwgbG9jYWxpemUgfX06PC9zcGFuPlxyXG4gICAgICAgICAgPHNwYW4+e3sgZ2V0TG9jYWxpemVkU3RhdHVzKGNhcmQuc3RhdHVzKSB9fTwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG48ZGl2IGNsYXNzPVwib3ZlcmxheVwiICpuZ0lmPVwiaXNMb2FkaW5nXCI+XHJcbiAgPGRpdiBjbGFzcz1cInNwaW5uZXItd3JhcHBlclwiPlxyXG4gICAgPGFwcC1zcGlubmVyPjwvYXBwLXNwaW5uZXI+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
|