ngx-vector-components 4.44.4 → 4.46.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +829 -816
- package/README.md +35 -35
- package/assets/icons/chevron_down_icon.svg +3 -3
- package/assets/icons/home_menu_icon.svg +3 -3
- package/assets/icons/logout_icon.svg +9 -9
- package/assets/icons/menu_footer_icon.svg +3 -3
- package/assets/icons/menu_hamburguer_icon.svg +3 -3
- package/assets/icons/terms_of_use_icon.svg +9 -9
- package/assets/icons/vector_admin_icon.svg +4 -4
- package/assets/icons/vector_fintech_icon.svg +3 -3
- package/assets/icons/vector_logtech_icon.svg +6 -6
- package/assets/icons/vector_marketplace_icon.svg +3 -3
- package/assets/images/bunge_logo.svg +23 -23
- package/assets/images/cofco_logo.svg +117 -117
- package/assets/images/emote_bad.svg +6 -6
- package/assets/images/emote_cool.svg +5 -5
- package/assets/images/emote_nice.svg +5 -5
- package/assets/images/success_sign.svg +4 -4
- package/assets/images/vector-logo-horizontal-inverse-color.svg +13 -13
- package/assets/images/vector_logo_horizontal.svg +13 -13
- package/assets/images/warn_sign.svg +4 -4
- package/assets/styles/_fonts.scss +114 -114
- package/assets/styles/_mixins.scss +7 -7
- package/assets/styles/_primeng-custom-theme.scss +974 -974
- package/assets/styles/_spinner.scss +35 -35
- package/assets/styles/_styles.scss +115 -115
- package/assets/styles/_variables.scss +27 -27
- package/esm2020/lib/components/badge/badge.component.mjs +34 -34
- package/esm2020/lib/components/badge/badge.module.mjs +18 -18
- package/esm2020/lib/components/badge/index.mjs +3 -3
- package/esm2020/lib/components/breadcrumb/breadcrumb.component.mjs +65 -65
- package/esm2020/lib/components/breadcrumb/breadcrumb.module.mjs +18 -18
- package/esm2020/lib/components/breadcrumb/index.mjs +3 -3
- package/esm2020/lib/components/crud-base/crud-base.component.mjs +47 -47
- package/esm2020/lib/components/crud-base/index.mjs +2 -2
- package/esm2020/lib/components/crud-footer/crud-footer.component.mjs +31 -31
- package/esm2020/lib/components/crud-footer/crud-footer.module.mjs +19 -19
- package/esm2020/lib/components/crud-footer/index.mjs +3 -3
- package/esm2020/lib/components/crud-header/crud-header.component.mjs +30 -30
- package/esm2020/lib/components/crud-header/crud-header.module.mjs +19 -19
- package/esm2020/lib/components/crud-header/index.mjs +3 -3
- package/esm2020/lib/components/crud-history/crud-history.component.mjs +82 -82
- package/esm2020/lib/components/crud-history/crud-history.module.mjs +20 -20
- package/esm2020/lib/components/crud-history/index.mjs +3 -3
- package/esm2020/lib/components/fields/button/button.component.mjs +41 -41
- package/esm2020/lib/components/fields/button/index.mjs +2 -2
- package/esm2020/lib/components/fields/calendar-field/calendar-field.component.mjs +74 -74
- package/esm2020/lib/components/fields/calendar-field/index.mjs +2 -2
- package/esm2020/lib/components/fields/checkbox-field/checkbox-field.component.mjs +46 -46
- package/esm2020/lib/components/fields/checkbox-field/index.mjs +2 -2
- package/esm2020/lib/components/fields/currency-field/currency-field.component.mjs +87 -87
- package/esm2020/lib/components/fields/currency-field/index.mjs +2 -2
- package/esm2020/lib/components/fields/data-table/data-table.component.mjs +322 -322
- package/esm2020/lib/components/fields/data-table/index.mjs +2 -2
- package/esm2020/lib/components/fields/dropdown-field/dropdown-field.component.mjs +194 -194
- package/esm2020/lib/components/fields/dropdown-field/index.mjs +2 -2
- package/esm2020/lib/components/fields/field-error-message/field-error-message.component.mjs +30 -30
- package/esm2020/lib/components/fields/field-error-message/index.mjs +2 -2
- package/esm2020/lib/components/fields/fields.module.mjs +205 -205
- package/esm2020/lib/components/fields/filters/filters.component.mjs +195 -195
- package/esm2020/lib/components/fields/filters/index.mjs +2 -2
- package/esm2020/lib/components/fields/index.mjs +19 -19
- package/esm2020/lib/components/fields/input-number-field/index.mjs +2 -2
- package/esm2020/lib/components/fields/input-number-field/input-number-field.component.mjs +82 -82
- package/esm2020/lib/components/fields/multiselect-field/index.mjs +2 -2
- package/esm2020/lib/components/fields/multiselect-field/multiselect-field.component.mjs +44 -44
- package/esm2020/lib/components/fields/percentage-field/index.mjs +2 -2
- package/esm2020/lib/components/fields/percentage-field/percentage-field.component.mjs +42 -42
- package/esm2020/lib/components/fields/radio-button-field/index.mjs +2 -2
- package/esm2020/lib/components/fields/radio-button-field/radio-button-field.component.mjs +38 -38
- package/esm2020/lib/components/fields/range-value/index.mjs +2 -2
- package/esm2020/lib/components/fields/range-value/range-value.component.mjs +72 -72
- package/esm2020/lib/components/fields/search-field/index.mjs +2 -2
- package/esm2020/lib/components/fields/search-field/search-field.component.mjs +33 -33
- package/esm2020/lib/components/fields/select-button-field/index.mjs +2 -2
- package/esm2020/lib/components/fields/select-button-field/select-button-field.component.mjs +20 -20
- package/esm2020/lib/components/fields/text-field/index.mjs +2 -2
- package/esm2020/lib/components/fields/text-field/text-field.component.mjs +209 -224
- package/esm2020/lib/components/fields/textarea-field/index.mjs +2 -2
- package/esm2020/lib/components/fields/textarea-field/textarea-field.component.mjs +75 -75
- package/esm2020/lib/components/generic-error-modal/generic-error-modal.component.mjs +30 -30
- package/esm2020/lib/components/generic-error-modal/generic-error-modal.module.mjs +20 -20
- package/esm2020/lib/components/generic-error-modal/index.mjs +3 -3
- package/esm2020/lib/components/generic-modal/generic-modal.component.mjs +66 -66
- package/esm2020/lib/components/generic-modal/generic-modal.module.mjs +20 -20
- package/esm2020/lib/components/generic-modal/index.mjs +3 -3
- package/esm2020/lib/components/index.mjs +13 -13
- package/esm2020/lib/components/menu/index.mjs +4 -4
- package/esm2020/lib/components/menu/menu.component.mjs +302 -302
- package/esm2020/lib/components/menu/menu.module.mjs +20 -20
- package/esm2020/lib/components/menu/sub-menus-list/sub-menus-list.component.mjs +42 -42
- package/esm2020/lib/components/panel/index.mjs +3 -3
- package/esm2020/lib/components/panel/panel.component.mjs +15 -15
- package/esm2020/lib/components/panel/panel.module.mjs +19 -19
- package/esm2020/lib/components/top-bar/index.mjs +3 -3
- package/esm2020/lib/components/top-bar/top-bar.component.mjs +102 -102
- package/esm2020/lib/components/top-bar/top-bar.module.mjs +19 -19
- package/esm2020/lib/guards/crud-list-has-items.guard.mjs +22 -22
- package/esm2020/lib/guards/get-token-by-guid.guard.mjs +54 -54
- package/esm2020/lib/guards/has-permission.guard.mjs +27 -27
- package/esm2020/lib/guards/index.mjs +6 -6
- package/esm2020/lib/guards/role.guard.mjs +24 -24
- package/esm2020/lib/guards/token-is-present.guard.mjs +26 -26
- package/esm2020/lib/interceptors/http-interceptor.mjs +183 -183
- package/esm2020/lib/interceptors/index.mjs +2 -2
- package/esm2020/lib/models/app-name.enum.mjs +9 -9
- package/esm2020/lib/models/boolean-type.enum.mjs +6 -6
- package/esm2020/lib/models/crud-history.model.mjs +3 -3
- package/esm2020/lib/models/crud-mode.enum.mjs +7 -7
- package/esm2020/lib/models/data-table.model.mjs +19 -19
- package/esm2020/lib/models/document-type.enum.mjs +6 -6
- package/esm2020/lib/models/filters.model.mjs +2 -2
- package/esm2020/lib/models/generic-modal.model.mjs +2 -2
- package/esm2020/lib/models/http-response.model.mjs +2 -2
- package/esm2020/lib/models/index.mjs +16 -16
- package/esm2020/lib/models/ip-info.enum.mjs +2 -2
- package/esm2020/lib/models/list-item.model.mjs +2 -2
- package/esm2020/lib/models/menu-item.model.mjs +2 -2
- package/esm2020/lib/models/message-status.enum.mjs +8 -8
- package/esm2020/lib/models/profile.model.mjs +208 -202
- package/esm2020/lib/models/role.enum.mjs +5 -5
- package/esm2020/lib/models/status.enum.mjs +7 -7
- package/esm2020/lib/models/view.enum.mjs +7 -7
- package/esm2020/lib/pipes/currency-brl.pipe.mjs +18 -18
- package/esm2020/lib/pipes/format-document.pipe.mjs +17 -17
- package/esm2020/lib/pipes/index.mjs +8 -8
- package/esm2020/lib/pipes/mask.pipe.mjs +21 -21
- package/esm2020/lib/pipes/not-hidden.pipe.mjs +16 -16
- package/esm2020/lib/pipes/only-active.pipe.mjs +16 -16
- package/esm2020/lib/pipes/pipes.module.mjs +21 -21
- package/esm2020/lib/pipes/remove-last-child.pipe.mjs +18 -18
- package/esm2020/lib/resolvers/get-selected-crud-item.resolver.mjs +28 -28
- package/esm2020/lib/resolvers/index.mjs +2 -2
- package/esm2020/lib/services/auth.service.mjs +77 -77
- package/esm2020/lib/services/base-dropdown.mjs +2 -2
- package/esm2020/lib/services/crud-base.service.mjs +14 -14
- package/esm2020/lib/services/enum.service.mjs +43 -43
- package/esm2020/lib/services/error-message.service.mjs +16 -16
- package/esm2020/lib/services/geolocation.service.mjs +23 -23
- package/esm2020/lib/services/index.mjs +12 -12
- package/esm2020/lib/services/loading.service.mjs +15 -15
- package/esm2020/lib/services/menu.service.mjs +147 -147
- package/esm2020/lib/services/modal.service.mjs +15 -15
- package/esm2020/lib/services/profile.service.mjs +100 -100
- package/esm2020/lib/services/storage.service.mjs +108 -108
- package/esm2020/lib/shared/shared.module.mjs +17 -17
- package/esm2020/lib/utils/cpf-cnpj-validator.util.mjs +116 -116
- package/esm2020/lib/utils/file.util.mjs +15 -15
- package/esm2020/lib/utils/index.mjs +8 -8
- package/esm2020/lib/utils/mask.util.mjs +61 -61
- package/esm2020/lib/utils/object.util.mjs +27 -27
- package/esm2020/lib/utils/string.util.mjs +16 -16
- package/esm2020/lib/utils/validation.util.mjs +234 -235
- package/esm2020/lib/utils/window.util.mjs +9 -9
- package/esm2020/ngx-vector-components.mjs +4 -4
- package/esm2020/public-api.mjs +9 -9
- package/fesm2015/ngx-vector-components.mjs +4146 -4156
- package/fesm2015/ngx-vector-components.mjs.map +1 -1
- package/fesm2020/ngx-vector-components.mjs +4124 -4134
- package/fesm2020/ngx-vector-components.mjs.map +1 -1
- package/lib/components/badge/badge.component.d.ts +14 -14
- package/lib/components/badge/badge.module.d.ts +8 -8
- package/lib/components/badge/index.d.ts +2 -2
- package/lib/components/breadcrumb/breadcrumb.component.d.ts +19 -19
- package/lib/components/breadcrumb/breadcrumb.module.d.ts +8 -8
- package/lib/components/breadcrumb/index.d.ts +2 -2
- package/lib/components/crud-base/crud-base.component.d.ts +20 -20
- package/lib/components/crud-base/index.d.ts +1 -1
- package/lib/components/crud-footer/crud-footer.component.d.ts +13 -13
- package/lib/components/crud-footer/crud-footer.module.d.ts +9 -9
- package/lib/components/crud-footer/index.d.ts +2 -2
- package/lib/components/crud-header/crud-header.component.d.ts +11 -11
- package/lib/components/crud-header/crud-header.module.d.ts +9 -9
- package/lib/components/crud-header/index.d.ts +2 -2
- package/lib/components/crud-history/crud-history.component.d.ts +12 -12
- package/lib/components/crud-history/crud-history.module.d.ts +10 -10
- package/lib/components/crud-history/index.d.ts +2 -2
- package/lib/components/fields/button/button.component.d.ts +17 -17
- package/lib/components/fields/button/index.d.ts +1 -1
- package/lib/components/fields/calendar-field/calendar-field.component.d.ts +23 -23
- package/lib/components/fields/calendar-field/index.d.ts +1 -1
- package/lib/components/fields/checkbox-field/checkbox-field.component.d.ts +19 -19
- package/lib/components/fields/checkbox-field/index.d.ts +1 -1
- package/lib/components/fields/currency-field/currency-field.component.d.ts +27 -27
- package/lib/components/fields/currency-field/index.d.ts +1 -1
- package/lib/components/fields/data-table/data-table.component.d.ts +74 -74
- package/lib/components/fields/data-table/index.d.ts +1 -1
- package/lib/components/fields/dropdown-field/dropdown-field.component.d.ts +50 -50
- package/lib/components/fields/dropdown-field/index.d.ts +1 -1
- package/lib/components/fields/field-error-message/field-error-message.component.d.ts +10 -10
- package/lib/components/fields/field-error-message/index.d.ts +1 -1
- package/lib/components/fields/fields.module.d.ts +46 -46
- package/lib/components/fields/filters/filters.component.d.ts +61 -61
- package/lib/components/fields/filters/index.d.ts +1 -1
- package/lib/components/fields/index.d.ts +18 -18
- package/lib/components/fields/input-number-field/index.d.ts +1 -1
- package/lib/components/fields/input-number-field/input-number-field.component.d.ts +27 -27
- package/lib/components/fields/multiselect-field/index.d.ts +1 -1
- package/lib/components/fields/multiselect-field/multiselect-field.component.d.ts +14 -14
- package/lib/components/fields/percentage-field/index.d.ts +1 -1
- package/lib/components/fields/percentage-field/percentage-field.component.d.ts +16 -16
- package/lib/components/fields/radio-button-field/index.d.ts +1 -1
- package/lib/components/fields/radio-button-field/radio-button-field.component.d.ts +21 -21
- package/lib/components/fields/range-value/index.d.ts +1 -1
- package/lib/components/fields/range-value/range-value.component.d.ts +18 -18
- package/lib/components/fields/search-field/index.d.ts +1 -1
- package/lib/components/fields/search-field/search-field.component.d.ts +14 -14
- package/lib/components/fields/select-button-field/index.d.ts +1 -1
- package/lib/components/fields/select-button-field/select-button-field.component.d.ts +9 -9
- package/lib/components/fields/text-field/index.d.ts +1 -1
- package/lib/components/fields/text-field/text-field.component.d.ts +48 -48
- package/lib/components/fields/textarea-field/index.d.ts +1 -1
- package/lib/components/fields/textarea-field/textarea-field.component.d.ts +20 -20
- package/lib/components/generic-error-modal/generic-error-modal.component.d.ts +14 -14
- package/lib/components/generic-error-modal/generic-error-modal.module.d.ts +10 -10
- package/lib/components/generic-error-modal/index.d.ts +2 -2
- package/lib/components/generic-modal/generic-modal.component.d.ts +24 -24
- package/lib/components/generic-modal/generic-modal.module.d.ts +10 -10
- package/lib/components/generic-modal/index.d.ts +2 -2
- package/lib/components/index.d.ts +12 -12
- package/lib/components/menu/index.d.ts +3 -3
- package/lib/components/menu/menu.component.d.ts +54 -54
- package/lib/components/menu/menu.module.d.ts +10 -10
- package/lib/components/menu/sub-menus-list/sub-menus-list.component.d.ts +14 -14
- package/lib/components/panel/index.d.ts +2 -2
- package/lib/components/panel/panel.component.d.ts +8 -8
- package/lib/components/panel/panel.module.d.ts +9 -9
- package/lib/components/top-bar/index.d.ts +2 -2
- package/lib/components/top-bar/top-bar.component.d.ts +38 -38
- package/lib/components/top-bar/top-bar.module.d.ts +9 -9
- package/lib/guards/crud-list-has-items.guard.d.ts +10 -10
- package/lib/guards/get-token-by-guid.guard.d.ts +15 -15
- package/lib/guards/has-permission.guard.d.ts +13 -13
- package/lib/guards/index.d.ts +5 -5
- package/lib/guards/role.guard.d.ts +11 -11
- package/lib/guards/token-is-present.guard.d.ts +11 -11
- package/lib/interceptors/http-interceptor.d.ts +31 -31
- package/lib/interceptors/index.d.ts +1 -1
- package/lib/models/app-name.enum.d.ts +7 -7
- package/lib/models/boolean-type.enum.d.ts +4 -4
- package/lib/models/crud-history.model.d.ts +13 -12
- package/lib/models/crud-mode.enum.d.ts +5 -5
- package/lib/models/data-table.model.d.ts +58 -58
- package/lib/models/document-type.enum.d.ts +4 -4
- package/lib/models/filters.model.d.ts +4 -4
- package/lib/models/generic-modal.model.d.ts +13 -13
- package/lib/models/http-response.model.d.ts +40 -40
- package/lib/models/index.d.ts +15 -15
- package/lib/models/ip-info.enum.d.ts +6 -6
- package/lib/models/list-item.model.d.ts +5 -5
- package/lib/models/menu-item.model.d.ts +16 -16
- package/lib/models/message-status.enum.d.ts +6 -6
- package/lib/models/profile.model.d.ts +229 -223
- package/lib/models/role.enum.d.ts +3 -3
- package/lib/models/status.enum.d.ts +5 -5
- package/lib/models/view.enum.d.ts +5 -5
- package/lib/pipes/currency-brl.pipe.d.ts +7 -7
- package/lib/pipes/format-document.pipe.d.ts +7 -7
- package/lib/pipes/index.d.ts +7 -7
- package/lib/pipes/mask.pipe.d.ts +7 -7
- package/lib/pipes/not-hidden.pipe.d.ts +7 -7
- package/lib/pipes/only-active.pipe.d.ts +7 -7
- package/lib/pipes/pipes.module.d.ts +12 -12
- package/lib/pipes/remove-last-child.pipe.d.ts +7 -7
- package/lib/resolvers/get-selected-crud-item.resolver.d.ts +10 -10
- package/lib/resolvers/index.d.ts +1 -1
- package/lib/services/auth.service.d.ts +24 -24
- package/lib/services/base-dropdown.d.ts +7 -7
- package/lib/services/crud-base.service.d.ts +7 -7
- package/lib/services/enum.service.d.ts +13 -13
- package/lib/services/error-message.service.d.ts +8 -8
- package/lib/services/geolocation.service.d.ts +13 -13
- package/lib/services/index.d.ts +11 -11
- package/lib/services/loading.service.d.ts +7 -7
- package/lib/services/menu.service.d.ts +37 -37
- package/lib/services/modal.service.d.ts +7 -7
- package/lib/services/profile.service.d.ts +26 -26
- package/lib/services/storage.service.d.ts +43 -43
- package/lib/shared/shared.module.d.ts +9 -9
- package/lib/utils/cpf-cnpj-validator.util.d.ts +5 -5
- package/lib/utils/file.util.d.ts +4 -4
- package/lib/utils/index.d.ts +7 -7
- package/lib/utils/mask.util.d.ts +15 -15
- package/lib/utils/object.util.d.ts +5 -5
- package/lib/utils/string.util.d.ts +4 -4
- package/lib/utils/validation.util.d.ts +17 -17
- package/lib/utils/window.util.d.ts +4 -4
- package/ngx-vector-components.d.ts +5 -5
- package/package.json +1 -1
- package/public-api.d.ts +8 -8
|
@@ -1,322 +1,322 @@
|
|
|
1
|
-
import { Component, EventEmitter, Input, Output, ViewChild, } from '@angular/core';
|
|
2
|
-
import { DateTime } from 'luxon';
|
|
3
|
-
import { Subscription } from 'rxjs';
|
|
4
|
-
import { debounceTime } from 'rxjs/operators';
|
|
5
|
-
import { Status } from '../../../models';
|
|
6
|
-
import { TableColumnType } from '../../../models/data-table.model';
|
|
7
|
-
import { MaskUtil } from '../../../utils';
|
|
8
|
-
import { FiltersComponent } from '../filters/filters.component';
|
|
9
|
-
import * as i0 from "@angular/core";
|
|
10
|
-
import * as i1 from "../filters/filters.component";
|
|
11
|
-
import * as i2 from "../button/button.component";
|
|
12
|
-
import * as i3 from "../../panel/panel.component";
|
|
13
|
-
import * as i4 from "primeng/tabview";
|
|
14
|
-
import * as i5 from "primeng/table";
|
|
15
|
-
import * as i6 from "primeng/menu";
|
|
16
|
-
import * as i7 from "../../badge/badge.component";
|
|
17
|
-
import * as i8 from "@angular/common";
|
|
18
|
-
import * as i9 from "primeng/api";
|
|
19
|
-
export class DataTableComponent {
|
|
20
|
-
constructor(cd) {
|
|
21
|
-
this.cd = cd;
|
|
22
|
-
this.columns = [];
|
|
23
|
-
this.data = [];
|
|
24
|
-
this.exportExcel = false;
|
|
25
|
-
this.exportPDF = false;
|
|
26
|
-
this.totalRecords = 0;
|
|
27
|
-
this.disabledHeadercheckbox = false;
|
|
28
|
-
this.filters = [];
|
|
29
|
-
this.addItemLabel = '';
|
|
30
|
-
this.pagination = true;
|
|
31
|
-
this.virtualPagination = false;
|
|
32
|
-
this.addItemButtonPlusSign = false;
|
|
33
|
-
this.hasActions = true;
|
|
34
|
-
this.hasExpandableIcon = false;
|
|
35
|
-
this.addNameColumnExpand = '';
|
|
36
|
-
this.expandable = false;
|
|
37
|
-
this.selectionType = null;
|
|
38
|
-
this.onLazyLoad = new EventEmitter();
|
|
39
|
-
this.onFilter = new EventEmitter();
|
|
40
|
-
this.onAdd = new EventEmitter();
|
|
41
|
-
this.onExportExcel = new EventEmitter();
|
|
42
|
-
this.onExportPDF = new EventEmitter();
|
|
43
|
-
this.onSelectedRows = new EventEmitter();
|
|
44
|
-
this.onFilterChanged = new EventEmitter();
|
|
45
|
-
this.selectedItems = [];
|
|
46
|
-
this._selectionMode = null;
|
|
47
|
-
this._height = 'small';
|
|
48
|
-
this._tabs = [];
|
|
49
|
-
this._draw = 1;
|
|
50
|
-
this._firstLazyLoadedDone = false;
|
|
51
|
-
this._filterSubscription = new Subscription();
|
|
52
|
-
}
|
|
53
|
-
set tabs(_tabs) {
|
|
54
|
-
this._tabs = _tabs;
|
|
55
|
-
this._tabSelected = _tabs[0];
|
|
56
|
-
}
|
|
57
|
-
set selectionMode(_selectionMode) {
|
|
58
|
-
switch (_selectionMode) {
|
|
59
|
-
case 'single':
|
|
60
|
-
this._selectionMode = 'single';
|
|
61
|
-
break;
|
|
62
|
-
case 'multiple':
|
|
63
|
-
this._selectionMode = 'multiple';
|
|
64
|
-
break;
|
|
65
|
-
default:
|
|
66
|
-
this._selectionMode = null;
|
|
67
|
-
break;
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
set height(_height) {
|
|
71
|
-
switch (_height) {
|
|
72
|
-
case 'small':
|
|
73
|
-
this._height = '300px';
|
|
74
|
-
break;
|
|
75
|
-
case 'medium':
|
|
76
|
-
this._height = '500px';
|
|
77
|
-
break;
|
|
78
|
-
case 'large':
|
|
79
|
-
this._height = '700px';
|
|
80
|
-
break;
|
|
81
|
-
case 'full':
|
|
82
|
-
this._height = 'flex';
|
|
83
|
-
break;
|
|
84
|
-
default:
|
|
85
|
-
this._height = '300px';
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
get tabs() {
|
|
89
|
-
return this._tabs;
|
|
90
|
-
}
|
|
91
|
-
get height() {
|
|
92
|
-
return this._height;
|
|
93
|
-
}
|
|
94
|
-
get selectionMode() {
|
|
95
|
-
return this._selectionMode;
|
|
96
|
-
}
|
|
97
|
-
ngOnInit() {
|
|
98
|
-
if (!this.height) {
|
|
99
|
-
this.height = 'small';
|
|
100
|
-
}
|
|
101
|
-
if (!this.pagination || this.virtualPagination) {
|
|
102
|
-
this.filtersComponent?.search();
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
ngOnDestroy() {
|
|
106
|
-
this._filterSubscription.unsubscribe();
|
|
107
|
-
}
|
|
108
|
-
getColStyle(col) {
|
|
109
|
-
return { 'min-width': col.width };
|
|
110
|
-
}
|
|
111
|
-
lazyLoaded(params = { filter: false, data: { start: 0, rows: 10 } }) {
|
|
112
|
-
if (!params.filter) {
|
|
113
|
-
const columns = this.columns.map((col) => {
|
|
114
|
-
return {
|
|
115
|
-
data: col.field,
|
|
116
|
-
name: `${col.field.substring(0, 1).toUpperCase()}${col.field.substring(1, col.field.length)}`,
|
|
117
|
-
orderable: true,
|
|
118
|
-
search: { value: '', regex: false },
|
|
119
|
-
searchable: true,
|
|
120
|
-
};
|
|
121
|
-
});
|
|
122
|
-
if (this.hasActions) {
|
|
123
|
-
columns.unshift({
|
|
124
|
-
data: 'active',
|
|
125
|
-
name: 'Active',
|
|
126
|
-
orderable: true,
|
|
127
|
-
search: { value: '', regex: false },
|
|
128
|
-
searchable: true,
|
|
129
|
-
});
|
|
130
|
-
}
|
|
131
|
-
this._lastLazyLoadEvent = {
|
|
132
|
-
...(this._lastLazyLoadEvent || {}),
|
|
133
|
-
page: params.data.first / params.data.rows + 1,
|
|
134
|
-
start: params.data.first,
|
|
135
|
-
length: params.data.rows,
|
|
136
|
-
draw: this._draw++,
|
|
137
|
-
order: params.data.sortField
|
|
138
|
-
? [
|
|
139
|
-
{
|
|
140
|
-
column: this.columns.findIndex((col) => col.field === params.data.sortField) + (this.hasActions ? 1 : 0),
|
|
141
|
-
dir: params.data.sortOrder > 0 ? 'asc' : 'desc',
|
|
142
|
-
},
|
|
143
|
-
]
|
|
144
|
-
: [{ column: 0, dir: 'desc' }],
|
|
145
|
-
columns: columns,
|
|
146
|
-
};
|
|
147
|
-
}
|
|
148
|
-
else {
|
|
149
|
-
this._lastLazyLoadEvent = {
|
|
150
|
-
...this._lastLazyLoadEvent,
|
|
151
|
-
...params.data,
|
|
152
|
-
start: 0,
|
|
153
|
-
};
|
|
154
|
-
if (this._tabSelected) {
|
|
155
|
-
this._lastLazyLoadEvent = {
|
|
156
|
-
...(this._lastLazyLoadEvent || {}),
|
|
157
|
-
...{ Status: this._tabSelected.code },
|
|
158
|
-
};
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
if (this._firstLazyLoadedDone) {
|
|
162
|
-
this.onLazyLoad.emit(this._lastLazyLoadEvent);
|
|
163
|
-
}
|
|
164
|
-
this._firstLazyLoadedDone = true;
|
|
165
|
-
}
|
|
166
|
-
getCellContent(item, col) {
|
|
167
|
-
let content = `<span class="p-column-title">${col.header}</span><span class="w-100">`;
|
|
168
|
-
if (!col.type || col.type === TableColumnType.TEXT) {
|
|
169
|
-
content += item[col.field] || '';
|
|
170
|
-
}
|
|
171
|
-
if (col.type === TableColumnType.CUSTOM_STYLE) {
|
|
172
|
-
content += `<span class="${col.textFieldClass ? item[col.textFieldClass] : ''}">${item[col.field || '']}</span>`;
|
|
173
|
-
}
|
|
174
|
-
if (col.type === TableColumnType.BOOLEAN) {
|
|
175
|
-
content += `<div class="text-centered"><i class=" status-table-field fas fa-${item[col.field] ? 'check boolean-value-positive' : 'times boolean-value-negative'}"></i></div>`;
|
|
176
|
-
}
|
|
177
|
-
if (col.type === TableColumnType.ENUM && col.getEnumTranslated) {
|
|
178
|
-
content += col.getEnumTranslated(item[col.field]);
|
|
179
|
-
}
|
|
180
|
-
if (col.type === TableColumnType.DATETIME && item[col.field]) {
|
|
181
|
-
const dateTime = item[col.field] instanceof Date ? DateTime.fromJSDate(item[col.field]) : DateTime.fromISO(item[col.field]);
|
|
182
|
-
content += dateTime.toFormat('dd/MM/yyyy HH:mm');
|
|
183
|
-
}
|
|
184
|
-
if (col.type === TableColumnType.STATUS_BADGE) {
|
|
185
|
-
content += `<div class="text-centered"><i class="fas fa-circle status-table-field ${this.getStatusColor(item[col.field])}"></i></div>`;
|
|
186
|
-
}
|
|
187
|
-
if (col.type === TableColumnType.ACTIVE_BOOLEAN_BADGE) {
|
|
188
|
-
content += `<div class="text-centered"><i class="fas fa-circle status-table-field ${this.getActiveStatusColor(item[col.field])}"></i></div>`;
|
|
189
|
-
}
|
|
190
|
-
if (col.type === TableColumnType.BUTTON) {
|
|
191
|
-
content += `<div class="text-centered"><i class="fas ${col.icon || 'fa-circle'} status-table-field table-button"></i></div>`;
|
|
192
|
-
}
|
|
193
|
-
if (col.type === TableColumnType.MASK) {
|
|
194
|
-
content += MaskUtil.doMaskString(item[col.field] || '', col.mask);
|
|
195
|
-
}
|
|
196
|
-
content += `</span>`;
|
|
197
|
-
return content;
|
|
198
|
-
}
|
|
199
|
-
onTabChange($event) {
|
|
200
|
-
this._tabSelected = this.tabs[$event.index];
|
|
201
|
-
this.lazyLoaded({ filter: true, data: {} });
|
|
202
|
-
}
|
|
203
|
-
subscribeToFilterChanges() {
|
|
204
|
-
this._filterSubscription.unsubscribe();
|
|
205
|
-
this._filterSubscription = new Subscription();
|
|
206
|
-
Object.keys(this.filtersComponent?.formGroup.controls || {}).forEach((key) => {
|
|
207
|
-
this._filterSubscription.add(this.filtersComponent?.formGroup
|
|
208
|
-
.get(key)
|
|
209
|
-
?.valueChanges.pipe(debounceTime(300))
|
|
210
|
-
.subscribe((value) => {
|
|
211
|
-
this.onFilterChanged.emit({ field: key, value });
|
|
212
|
-
}));
|
|
213
|
-
this.onFilterChanged.emit({ field: key, value: this.filtersComponent?.formGroup.get(key)?.value });
|
|
214
|
-
});
|
|
215
|
-
}
|
|
216
|
-
onRowClick(item) {
|
|
217
|
-
setTimeout(() => {
|
|
218
|
-
this.cd.markForCheck();
|
|
219
|
-
});
|
|
220
|
-
}
|
|
221
|
-
get listHasActions() {
|
|
222
|
-
return this.data.some((item) => item.actions?.length);
|
|
223
|
-
}
|
|
224
|
-
getStatusColor(status) {
|
|
225
|
-
switch (status) {
|
|
226
|
-
case Status.PENDING:
|
|
227
|
-
return 'warning';
|
|
228
|
-
case Status.APPROVED:
|
|
229
|
-
return 'success';
|
|
230
|
-
case Status.REJECTED:
|
|
231
|
-
return 'error';
|
|
232
|
-
}
|
|
233
|
-
return '';
|
|
234
|
-
}
|
|
235
|
-
getActiveStatusColor(active) {
|
|
236
|
-
return active ? 'success' : 'error';
|
|
237
|
-
}
|
|
238
|
-
changeSelectedItems(value) {
|
|
239
|
-
this.onSelectedRows.emit(this.selectedItems);
|
|
240
|
-
}
|
|
241
|
-
isHtmlCell(col) {
|
|
242
|
-
if (!col.type) {
|
|
243
|
-
return true;
|
|
244
|
-
}
|
|
245
|
-
return ![TableColumnType.TEXT_BADGE].includes(col.type);
|
|
246
|
-
}
|
|
247
|
-
onSelectionChange(selection) {
|
|
248
|
-
for (let i = selection.length - 1; i >= 0; i--) {
|
|
249
|
-
let data = selection[i];
|
|
250
|
-
if (data.disabledCheckBox) {
|
|
251
|
-
selection.splice(i, 1);
|
|
252
|
-
}
|
|
253
|
-
}
|
|
254
|
-
this.selectedItems = selection;
|
|
255
|
-
}
|
|
256
|
-
}
|
|
257
|
-
DataTableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: DataTableComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
258
|
-
DataTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.3", type: DataTableComponent, selector: "vector-data-table", inputs: { columns: "columns", data: "data", exportExcel: "exportExcel", exportPDF: "exportPDF", totalRecords: "totalRecords", disabledHeadercheckbox: "disabledHeadercheckbox", filters: "filters", addItemLabel: "addItemLabel", pagination: "pagination", virtualPagination: "virtualPagination", tabs: "tabs", customButtons: "customButtons", addItemButtonPlusSign: "addItemButtonPlusSign", hasActions: "hasActions", hasExpandableIcon: "hasExpandableIcon", addNameColumnExpand: "addNameColumnExpand", expandable: "expandable", expansionTemplate: "expansionTemplate", selectionMode: "selectionMode", selectionType: "selectionType", height: "height" }, outputs: { onLazyLoad: "onLazyLoad", onFilter: "onFilter", onAdd: "onAdd", onExportExcel: "onExportExcel", onExportPDF: "onExportPDF", onSelectedRows: "onSelectedRows", onFilterChanged: "onFilterChanged" }, viewQueries: [{ propertyName: "filtersComponent", first: true, predicate: FiltersComponent, descendants: true, static: true }], ngImport: i0, template: "<div class=\"grid\">\n <div class=\"col-12\">\n <vector-filters\n [fields]=\"filters\"\n (onSearch)=\"lazyLoaded({ filter: true, data: $event })\"\n (formBuilded)=\"subscribeToFilterChanges()\"\n ></vector-filters>\n </div>\n <div class=\"table-header-actions field\" *ngIf=\"addItemLabel || exportExcel || exportPDF\">\n <button *ngIf=\"exportExcel\" (click)=\"onExportExcel.emit()\" class=\"export-button export-excel\">\n <i class=\"fas fa-file\"></i><span>Excel</span>\n </button>\n <button *ngIf=\"exportPDF\" (click)=\"onExportPDF.emit()\" class=\"export-button export-pdf\">\n <i class=\"fas fa-file\"></i><span>PDF</span>\n </button>\n <vector-button\n *ngFor=\"let button of customButtons\"\n class=\"add-item-button\"\n [label]=\"button.label\"\n (click)=\"button.clickFunction()\"\n [rightIcon]=\"addItemButtonPlusSign ? 'pi pi-plus' : ''\"\n ></vector-button>\n <vector-button\n *ngIf=\"addItemLabel\"\n class=\"add-item-button\"\n [label]=\"addItemLabel\"\n (click)=\"onAdd.emit()\"\n [rightIcon]=\"addItemButtonPlusSign ? 'pi pi-plus' : ''\"\n ></vector-button>\n </div>\n <div class=\"col-12\">\n <vector-panel class=\"data-table-panel\">\n <p-tabView (onChange)=\"onTabChange($event)\" *ngIf=\"tabs?.length\">\n <p-tabPanel *ngFor=\"let tab of tabs\" [header]=\"tab.name\"></p-tabPanel>\n </p-tabView>\n <p-table\n currentPageReportTemplate=\"Mostrando {first} at\u00E9 {last} de {totalRecords} registros\"\n sortMode=\"single\"\n [rows]=\"10\"\n [lazy]=\"pagination && !virtualPagination\"\n [value]=\"data\"\n [paginator]=\"pagination\"\n [totalRecords]=\"totalRecords\"\n [showCurrentPageReport]=\"true\"\n [rowsPerPageOptions]=\"[10, 25, 50, 100]\"\n [responsive]=\"true\"\n [resizableColumns]=\"true\"\n [scrollable]=\"true\"\n scrollDirection=\"vertical\"\n responsiveLayout=\"scroll\"\n dataKey=\"id\"\n [scrollHeight]=\"height\"\n [attr.selectionMode]=\"selectionMode\"\n [(selection)]=\"selectedItems\"\n (onRowSelect)=\"changeSelectedItems($event)\"\n (onHeaderCheckboxToggle)=\"changeSelectedItems($event)\"\n (onRowUnselect)=\"changeSelectedItems($event)\"\n (onLazyLoad)=\"lazyLoaded({ filter: false, data: $event })\"\n (selectionChange)=\"onSelectionChange($event)\"\n >\n <ng-template pTemplate=\"header\">\n <tr class=\"header\">\n <th style=\"max-width: 3rem\" *ngIf=\"selectionType === 'checkbox'\">\n <p-tableHeaderCheckbox [disabled]=\"disabledHeadercheckbox\"></p-tableHeaderCheckbox>\n </th>\n <th style=\"max-width: 150px\" class=\"centered text-center\" *ngIf=\"hasExpandableIcon\">\n {{ addNameColumnExpand }}\n </th>\n <th style=\"max-width: 100px\" class=\"centered\" *ngIf=\"hasActions\">A\u00E7\u00F5es</th>\n <th\n *ngFor=\"let col of columns\"\n [ngStyle]=\"getColStyle(col)\"\n [pSortableColumn]=\"col.notSortable ? '' : col.field\"\n >\n {{ col.header }} <p-sortIcon *ngIf=\"!col.notSortable\" [field]=\"col.field\"></p-sortIcon>\n </th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\" let-rowData let-item let-expanded=\"expanded\">\n <tr\n class=\"row\"\n [pSelectableRow]=\"rowData\"\n [ngClass]=\"{ expandable: expandable }\"\n [pRowToggler]=\"expandable ? item : undefined\"\n (click)=\"onRowClick(item)\"\n >\n <ng-container *ngIf=\"selectionType === 'checkbox'\">\n <td style=\"max-width: 3rem; padding-left: 10px\" class=\"flex justify-content-center align-items-center\">\n <p-tableCheckbox [value]=\"item\" [disabled]=\"item.disabledCheckBox\"></p-tableCheckbox>\n </td>\n </ng-container>\n <ng-container *ngIf=\"selectionType === 'radiobutton'\">\n <td style=\"max-width: 3rem; padding-left: 10px\" class=\"flex justify-content-center align-items-center\">\n <p-tableRadioButton [value]=\"item\"></p-tableRadioButton>\n </td>\n </ng-container>\n <td *ngIf=\"hasExpandableIcon\" style=\"max-width: 150px\" class=\"centered\">\n <p-menu #menu [model]=\"item.actions\" [popup]=\"true\" appendTo=\"body\"></p-menu>\n <i\n [ngClass]=\"\n expanded ? 'actions-menu-button pi pi-chevron-down' : 'actions-menu-button pi pi-chevron-right'\n \"\n ></i>\n </td>\n <td *ngIf=\"hasActions\" style=\"max-width: 100px\" class=\"centered\">\n <p-menu #menu [model]=\"item.actions\" [popup]=\"true\" appendTo=\"body\"></p-menu>\n <i class=\"actions-menu-button fas fa-cog\" (click)=\"menu.toggle($event)\"></i>\n </td>\n <ng-container *ngFor=\"let col of columns\">\n <td\n *ngIf=\"isHtmlCell(col)\"\n class=\"cell\"\n [innerHTML]=\"getCellContent(item, col)\"\n (click)=\"col && col.clickFunction && col.clickFunction(item)\"\n [ngStyle]=\"getColStyle(col)\"\n ></td>\n <td\n *ngIf=\"!isHtmlCell(col)\"\n class=\"cell\"\n (click)=\"col && col.clickFunction && col.clickFunction(item)\"\n [ngStyle]=\"getColStyle(col)\"\n >\n <vector-badge\n *ngIf=\"col.type === 'TEXT_BADGE' && !!col.getStatus\"\n [label]=\"item[col.field]\"\n [type]=\"col.getStatus(item[col.field])\"\n ></vector-badge>\n </td>\n </ng-container>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"emptymessage\">\n <tr class=\"row\">\n <td class=\"no-results\" [attr.colspan]=\"columns.length + 1\">Nenhum resultado encontrado</td>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"paginatorright\"> </ng-template>\n <ng-template let-item pTemplate=\"paginatordropdownitem\"> {{ item.value }} </ng-template>\n <ng-template pTemplate=\"rowexpansion\" let-item>\n <tr>\n <td [attr.colspan]=\"columns.length + (hasActions ? 1 : 0)\">\n <ng-container *ngTemplateOutlet=\"expansionTemplate; context: { item }\"> </ng-container>\n </td>\n </tr>\n </ng-template>\n </p-table>\n </vector-panel>\n </div>\n</div>\n", styles: [".no-results{padding:15px;background-color:#fff;width:100%}.centered{display:flex;justify-content:center}.table-header-actions{display:flex;justify-content:flex-end;align-items:flex-end;width:100%;padding-right:7px;margin-bottom:15px!important}@media (min-width: 768px){.table-header-actions{margin-top:-3px}}.table-header-actions .export-button{padding:7px 10px;color:#fff;display:flex;align-items:center;border:none;border-radius:5px;margin:5px;font-size:.75rem;cursor:pointer}.table-header-actions .export-button.export-excel{background-color:var(--success-color)}.table-header-actions .export-button.export-excel:hover{background-color:var(--success-color-dark)}.table-header-actions .export-button.export-pdf{background-color:var(--error-color)}.table-header-actions .export-button.export-pdf:hover{background-color:var(--error-color-dark)}.table-header-actions .export-button i{color:#fff}.table-header-actions .export-button span{margin-left:5px}.table-header-actions .add-item-button{margin-left:10px}.actions-menu-button{font-size:23px;cursor:pointer;color:var(--theme-medium)}.expandable{cursor:pointer}\n"], components: [{ type: i1.FiltersComponent, selector: "vector-filters", inputs: ["fields"], outputs: ["onSearch", "formBuilded"] }, { type: i2.ButtonComponent, selector: "vector-button", inputs: ["disabled", "label", "type", "leftIcon", "rightIcon", "noShadow", "style"], outputs: ["onClick"] }, { type: i3.PanelComponent, selector: "vector-panel" }, { type: i4.TabView, selector: "p-tabView", inputs: ["orientation", "style", "styleClass", "controlClose", "scrollable", "activeIndex"], outputs: ["onChange", "onClose", "activeIndexChange"] }, { type: i4.TabPanel, selector: "p-tabPanel", inputs: ["closable", "headerStyle", "headerStyleClass", "cache", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "selected", "disabled", "header", "leftIcon", "rightIcon"] }, { type: i5.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollDelay", "virtualRowHeight", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "groupRowsByOrder", "minBufferPx", "maxBufferPx", "responsiveLayout", "breakpoint", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll"], outputs: ["selectAllChange", "selectionChange", "contextMenuSelectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { type: i5.TableHeaderCheckbox, selector: "p-tableHeaderCheckbox", inputs: ["disabled", "inputId", "name", "ariaLabel"] }, { type: i5.SortIcon, selector: "p-sortIcon", inputs: ["field"] }, { type: i5.TableCheckbox, selector: "p-tableCheckbox", inputs: ["disabled", "value", "index", "inputId", "name", "required", "ariaLabel"] }, { type: i5.TableRadioButton, selector: "p-tableRadioButton", inputs: ["disabled", "value", "index", "inputId", "name", "ariaLabel"] }, { type: i6.Menu, selector: "p-menu", inputs: ["model", "popup", "style", "styleClass", "appendTo", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions"], outputs: ["onShow", "onHide"] }, { type: i7.BadgeComponent, selector: "vector-badge", inputs: ["type", "label", "customColor", "customBackgroundColor"] }], directives: [{ type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i9.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { type: i8.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i5.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { type: i5.SelectableRow, selector: "[pSelectableRow]", inputs: ["pSelectableRow", "pSelectableRowIndex", "pSelectableRowDisabled"] }, { type: i8.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i5.RowToggler, selector: "[pRowToggler]", inputs: ["pRowToggler", "pRowTogglerDisabled"] }, { type: i8.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }] });
|
|
259
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: DataTableComponent, decorators: [{
|
|
260
|
-
type: Component,
|
|
261
|
-
args: [{ selector: 'vector-data-table', template: "<div class=\"grid\">\n <div class=\"col-12\">\n <vector-filters\n [fields]=\"filters\"\n (onSearch)=\"lazyLoaded({ filter: true, data: $event })\"\n (formBuilded)=\"subscribeToFilterChanges()\"\n ></vector-filters>\n </div>\n <div class=\"table-header-actions field\" *ngIf=\"addItemLabel || exportExcel || exportPDF\">\n <button *ngIf=\"exportExcel\" (click)=\"onExportExcel.emit()\" class=\"export-button export-excel\">\n <i class=\"fas fa-file\"></i><span>Excel</span>\n </button>\n <button *ngIf=\"exportPDF\" (click)=\"onExportPDF.emit()\" class=\"export-button export-pdf\">\n <i class=\"fas fa-file\"></i><span>PDF</span>\n </button>\n <vector-button\n *ngFor=\"let button of customButtons\"\n class=\"add-item-button\"\n [label]=\"button.label\"\n (click)=\"button.clickFunction()\"\n [rightIcon]=\"addItemButtonPlusSign ? 'pi pi-plus' : ''\"\n ></vector-button>\n <vector-button\n *ngIf=\"addItemLabel\"\n class=\"add-item-button\"\n [label]=\"addItemLabel\"\n (click)=\"onAdd.emit()\"\n [rightIcon]=\"addItemButtonPlusSign ? 'pi pi-plus' : ''\"\n ></vector-button>\n </div>\n <div class=\"col-12\">\n <vector-panel class=\"data-table-panel\">\n <p-tabView (onChange)=\"onTabChange($event)\" *ngIf=\"tabs?.length\">\n <p-tabPanel *ngFor=\"let tab of tabs\" [header]=\"tab.name\"></p-tabPanel>\n </p-tabView>\n <p-table\n currentPageReportTemplate=\"Mostrando {first} at\u00E9 {last} de {totalRecords} registros\"\n sortMode=\"single\"\n [rows]=\"10\"\n [lazy]=\"pagination && !virtualPagination\"\n [value]=\"data\"\n [paginator]=\"pagination\"\n [totalRecords]=\"totalRecords\"\n [showCurrentPageReport]=\"true\"\n [rowsPerPageOptions]=\"[10, 25, 50, 100]\"\n [responsive]=\"true\"\n [resizableColumns]=\"true\"\n [scrollable]=\"true\"\n scrollDirection=\"vertical\"\n responsiveLayout=\"scroll\"\n dataKey=\"id\"\n [scrollHeight]=\"height\"\n [attr.selectionMode]=\"selectionMode\"\n [(selection)]=\"selectedItems\"\n (onRowSelect)=\"changeSelectedItems($event)\"\n (onHeaderCheckboxToggle)=\"changeSelectedItems($event)\"\n (onRowUnselect)=\"changeSelectedItems($event)\"\n (onLazyLoad)=\"lazyLoaded({ filter: false, data: $event })\"\n (selectionChange)=\"onSelectionChange($event)\"\n >\n <ng-template pTemplate=\"header\">\n <tr class=\"header\">\n <th style=\"max-width: 3rem\" *ngIf=\"selectionType === 'checkbox'\">\n <p-tableHeaderCheckbox [disabled]=\"disabledHeadercheckbox\"></p-tableHeaderCheckbox>\n </th>\n <th style=\"max-width: 150px\" class=\"centered text-center\" *ngIf=\"hasExpandableIcon\">\n {{ addNameColumnExpand }}\n </th>\n <th style=\"max-width: 100px\" class=\"centered\" *ngIf=\"hasActions\">A\u00E7\u00F5es</th>\n <th\n *ngFor=\"let col of columns\"\n [ngStyle]=\"getColStyle(col)\"\n [pSortableColumn]=\"col.notSortable ? '' : col.field\"\n >\n {{ col.header }} <p-sortIcon *ngIf=\"!col.notSortable\" [field]=\"col.field\"></p-sortIcon>\n </th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\" let-rowData let-item let-expanded=\"expanded\">\n <tr\n class=\"row\"\n [pSelectableRow]=\"rowData\"\n [ngClass]=\"{ expandable: expandable }\"\n [pRowToggler]=\"expandable ? item : undefined\"\n (click)=\"onRowClick(item)\"\n >\n <ng-container *ngIf=\"selectionType === 'checkbox'\">\n <td style=\"max-width: 3rem; padding-left: 10px\" class=\"flex justify-content-center align-items-center\">\n <p-tableCheckbox [value]=\"item\" [disabled]=\"item.disabledCheckBox\"></p-tableCheckbox>\n </td>\n </ng-container>\n <ng-container *ngIf=\"selectionType === 'radiobutton'\">\n <td style=\"max-width: 3rem; padding-left: 10px\" class=\"flex justify-content-center align-items-center\">\n <p-tableRadioButton [value]=\"item\"></p-tableRadioButton>\n </td>\n </ng-container>\n <td *ngIf=\"hasExpandableIcon\" style=\"max-width: 150px\" class=\"centered\">\n <p-menu #menu [model]=\"item.actions\" [popup]=\"true\" appendTo=\"body\"></p-menu>\n <i\n [ngClass]=\"\n expanded ? 'actions-menu-button pi pi-chevron-down' : 'actions-menu-button pi pi-chevron-right'\n \"\n ></i>\n </td>\n <td *ngIf=\"hasActions\" style=\"max-width: 100px\" class=\"centered\">\n <p-menu #menu [model]=\"item.actions\" [popup]=\"true\" appendTo=\"body\"></p-menu>\n <i class=\"actions-menu-button fas fa-cog\" (click)=\"menu.toggle($event)\"></i>\n </td>\n <ng-container *ngFor=\"let col of columns\">\n <td\n *ngIf=\"isHtmlCell(col)\"\n class=\"cell\"\n [innerHTML]=\"getCellContent(item, col)\"\n (click)=\"col && col.clickFunction && col.clickFunction(item)\"\n [ngStyle]=\"getColStyle(col)\"\n ></td>\n <td\n *ngIf=\"!isHtmlCell(col)\"\n class=\"cell\"\n (click)=\"col && col.clickFunction && col.clickFunction(item)\"\n [ngStyle]=\"getColStyle(col)\"\n >\n <vector-badge\n *ngIf=\"col.type === 'TEXT_BADGE' && !!col.getStatus\"\n [label]=\"item[col.field]\"\n [type]=\"col.getStatus(item[col.field])\"\n ></vector-badge>\n </td>\n </ng-container>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"emptymessage\">\n <tr class=\"row\">\n <td class=\"no-results\" [attr.colspan]=\"columns.length + 1\">Nenhum resultado encontrado</td>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"paginatorright\"> </ng-template>\n <ng-template let-item pTemplate=\"paginatordropdownitem\"> {{ item.value }} </ng-template>\n <ng-template pTemplate=\"rowexpansion\" let-item>\n <tr>\n <td [attr.colspan]=\"columns.length + (hasActions ? 1 : 0)\">\n <ng-container *ngTemplateOutlet=\"expansionTemplate; context: { item }\"> </ng-container>\n </td>\n </tr>\n </ng-template>\n </p-table>\n </vector-panel>\n </div>\n</div>\n", styles: [".no-results{padding:15px;background-color:#fff;width:100%}.centered{display:flex;justify-content:center}.table-header-actions{display:flex;justify-content:flex-end;align-items:flex-end;width:100%;padding-right:7px;margin-bottom:15px!important}@media (min-width: 768px){.table-header-actions{margin-top:-3px}}.table-header-actions .export-button{padding:7px 10px;color:#fff;display:flex;align-items:center;border:none;border-radius:5px;margin:5px;font-size:.75rem;cursor:pointer}.table-header-actions .export-button.export-excel{background-color:var(--success-color)}.table-header-actions .export-button.export-excel:hover{background-color:var(--success-color-dark)}.table-header-actions .export-button.export-pdf{background-color:var(--error-color)}.table-header-actions .export-button.export-pdf:hover{background-color:var(--error-color-dark)}.table-header-actions .export-button i{color:#fff}.table-header-actions .export-button span{margin-left:5px}.table-header-actions .add-item-button{margin-left:10px}.actions-menu-button{font-size:23px;cursor:pointer;color:var(--theme-medium)}.expandable{cursor:pointer}\n"] }]
|
|
262
|
-
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { columns: [{
|
|
263
|
-
type: Input
|
|
264
|
-
}], data: [{
|
|
265
|
-
type: Input
|
|
266
|
-
}], exportExcel: [{
|
|
267
|
-
type: Input
|
|
268
|
-
}], exportPDF: [{
|
|
269
|
-
type: Input
|
|
270
|
-
}], totalRecords: [{
|
|
271
|
-
type: Input
|
|
272
|
-
}], disabledHeadercheckbox: [{
|
|
273
|
-
type: Input
|
|
274
|
-
}], filters: [{
|
|
275
|
-
type: Input
|
|
276
|
-
}], addItemLabel: [{
|
|
277
|
-
type: Input
|
|
278
|
-
}], pagination: [{
|
|
279
|
-
type: Input
|
|
280
|
-
}], virtualPagination: [{
|
|
281
|
-
type: Input
|
|
282
|
-
}], tabs: [{
|
|
283
|
-
type: Input
|
|
284
|
-
}], customButtons: [{
|
|
285
|
-
type: Input
|
|
286
|
-
}], addItemButtonPlusSign: [{
|
|
287
|
-
type: Input
|
|
288
|
-
}], hasActions: [{
|
|
289
|
-
type: Input
|
|
290
|
-
}], hasExpandableIcon: [{
|
|
291
|
-
type: Input
|
|
292
|
-
}], addNameColumnExpand: [{
|
|
293
|
-
type: Input
|
|
294
|
-
}], expandable: [{
|
|
295
|
-
type: Input
|
|
296
|
-
}], expansionTemplate: [{
|
|
297
|
-
type: Input
|
|
298
|
-
}], selectionMode: [{
|
|
299
|
-
type: Input
|
|
300
|
-
}], selectionType: [{
|
|
301
|
-
type: Input
|
|
302
|
-
}], height: [{
|
|
303
|
-
type: Input
|
|
304
|
-
}], onLazyLoad: [{
|
|
305
|
-
type: Output
|
|
306
|
-
}], onFilter: [{
|
|
307
|
-
type: Output
|
|
308
|
-
}], onAdd: [{
|
|
309
|
-
type: Output
|
|
310
|
-
}], onExportExcel: [{
|
|
311
|
-
type: Output
|
|
312
|
-
}], onExportPDF: [{
|
|
313
|
-
type: Output
|
|
314
|
-
}], onSelectedRows: [{
|
|
315
|
-
type: Output
|
|
316
|
-
}], onFilterChanged: [{
|
|
317
|
-
type: Output
|
|
318
|
-
}], filtersComponent: [{
|
|
319
|
-
type: ViewChild,
|
|
320
|
-
args: [FiltersComponent, { static: true }]
|
|
321
|
-
}] } });
|
|
322
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdmVjdG9yLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2ZpZWxkcy9kYXRhLXRhYmxlL2RhdGEtdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZlY3Rvci1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9maWVsZHMvZGF0YS10YWJsZS9kYXRhLXRhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBRU4sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDakMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFnQyxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2RSxPQUFPLEVBQXVDLGVBQWUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3hHLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxQyxPQUFPLEVBQWUsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7Ozs7Ozs7Ozs7QUFPN0UsTUFBTSxPQUFPLGtCQUFrQjtJQStHN0IsWUFBbUIsRUFBcUI7UUFBckIsT0FBRSxHQUFGLEVBQUUsQ0FBbUI7UUE3R2pDLFlBQU8sR0FBa0IsRUFBRSxDQUFDO1FBRTVCLFNBQUksR0FBVSxFQUFFLENBQUM7UUFFakIsZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFFcEIsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUVs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QkFEZCxLQUFLO2dCQU1DLGFBQWE7c0JBRG5CLEtBQUs7Z0JBR0MscUJBQXFCO3NCQUQzQixLQUFLO2dCQUdDLFVBQVU7c0JBRGhCLEtBQUs7Z0JBR0MsaUJBQWlCO3NCQUR2QixLQUFLO2dCQUdDLG1CQUFtQjtzQkFEekIsS0FBSztnQkFFRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFFSyxhQUFhO3NCQUR2QixLQUFLO2dCQWVDLGFBQWE7c0JBRG5CLEtBQUs7Z0JBR0ssTUFBTTtzQkFEaEIsS0FBSztnQkFvQkMsVUFBVTtzQkFEaEIsTUFBTTtnQkFHQSxRQUFRO3NCQURkLE1BQU07Z0JBR0EsS0FBSztzQkFEWCxNQUFNO2dCQUdBLGFBQWE7c0JBRG5CLE1BQU07Z0JBR0EsV0FBVztzQkFEakIsTUFBTTtnQkFHQSxjQUFjO3NCQURwQixNQUFNO2dCQUdBLGVBQWU7c0JBRHJCLE1BQU07Z0JBR0EsZ0JBQWdCO3NCQUR0QixTQUFTO3VCQUFDLGdCQUFnQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRGF0ZVRpbWUgfSBmcm9tICdsdXhvbic7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEZpbHRlckNoYW5nZWRFdmVudCwgTGlzdEl0ZW0sIFN0YXR1cyB9IGZyb20gJy4uLy4uLy4uL21vZGVscyc7XG5pbXBvcnQgeyBEYXRhVGFibGVMYXp5TG9hZEV2ZW50LCBUYWJsZUNvbHVtbiwgVGFibGVDb2x1bW5UeXBlIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2RhdGEtdGFibGUubW9kZWwnO1xuaW1wb3J0IHsgTWFza1V0aWwgfSBmcm9tICcuLi8uLi8uLi91dGlscyc7XG5pbXBvcnQgeyBGaWx0ZXJGaWVsZCwgRmlsdGVyc0NvbXBvbmVudCB9IGZyb20gJy4uL2ZpbHRlcnMvZmlsdGVycy5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2ZWN0b3ItZGF0YS10YWJsZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRhLXRhYmxlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZGF0YS10YWJsZS5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBEYXRhVGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBjb2x1bW5zOiBUYWJsZUNvbHVtbltdID0gW107XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBkYXRhOiBhbnlbXSA9IFtdO1xuICBASW5wdXQoKVxuICBwdWJsaWMgZXhwb3J0RXhjZWwgPSBmYWxzZTtcbiAgQElucHV0KClcbiAgcHVibGljIGV4cG9ydFBERiA9IGZhbHNlO1xuICBASW5wdXQoKVxuICBwdWJsaWMgdG90YWxSZWNvcmRzID0gMDtcbiAgQElucHV0KClcbiAgcHVibGljIGRpc2FibGVkSGVhZGVyY2hlY2tib3ggPSBmYWxzZTtcbiAgQElucHV0KClcbiAgcHVibGljIGZpbHRlcnM6IEZpbHRlckZpZWxkW10gPSBbXTtcbiAgQElucHV0KClcbiAgcHVibGljIGFkZEl0ZW1MYWJlbCA9ICcnO1xuICBASW5wdXQoKVxuICBwdWJsaWMgcGFnaW5hdGlvbiA9IHRydWU7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyB2aXJ0dWFsUGFnaW5hdGlvbiA9IGZhbHNlO1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHRhYnMoX3RhYnM6IExpc3RJdGVtW10pIHtcbiAgICB0aGlzLl90YWJzID0gX3RhYnM7XG4gICAgdGhpcy5fdGFiU2VsZWN0ZWQgPSBfdGFic1swXTtcbiAgfVxuICBASW5wdXQoKVxuICBwdWJsaWMgY3VzdG9tQnV0dG9uczogeyBsYWJlbDogc3RyaW5nOyBjbGlja0Z1bmN0aW9uOiBGdW5jdGlvbiB9W10gfCB1bmRlZmluZWQ7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBhZGRJdGVtQnV0dG9uUGx1c1NpZ24gPSBmYWxzZTtcbiAgQElucHV0KClcbiAgcHVibGljIGhhc0FjdGlvbnM6IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKVxuICBwdWJsaWMgaGFzRXhwYW5kYWJsZUljb24gPSBmYWxzZTtcbiAgQElucHV0KClcbiAgcHVibGljIGFkZE5hbWVDb2x1bW5FeHBhbmQgPSAnJztcbiAgQElucHV0KCkgZXhwYW5kYWJsZSA9IGZhbHNlO1xuICBASW5wdXQoKSBleHBhbnNpb25UZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPGFueT4gfCBudWxsO1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHNlbGVjdGlvbk1vZGUoX3NlbGVjdGlvbk1vZGUpIHtcbiAgICBzd2l0Y2ggKF9zZWxlY3Rpb25Nb2RlKSB7XG4gICAgICBjYXNlICdzaW5nbGUnOlxuICAgICAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlID0gJ3NpbmdsZSc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnbXVsdGlwbGUnOlxuICAgICAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlID0gJ211bHRpcGxlJztcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlID0gbnVsbDtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZWxlY3Rpb25UeXBlOiAnY2hlY2tib3gnIHwgJ3JhZGlvYnV0dG9uJyB8IG51bGwgPSBudWxsO1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGhlaWdodChfaGVpZ2h0OiBzdHJpbmcpIHtcbiAgICBzd2l0Y2ggKF9oZWlnaHQpIHtcbiAgICAgIGNhc2UgJ3NtYWxsJzpcbiAgICAgICAgdGhpcy5faGVpZ2h0ID0gJzMwMHB4JztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdtZWRpdW0nOlxuICAgICAgICB0aGlzLl9oZWlnaHQgPSAnNTAwcHgnO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2xhcmdlJzpcbiAgICAgICAgdGhpcy5faGVpZ2h0ID0gJzcwMHB4JztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdmdWxsJzpcbiAgICAgICAgdGhpcy5faGVpZ2h0ID0gJ2ZsZXgnO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRoaXMuX2hlaWdodCA9ICczMDBweCc7XG4gICAgfVxuICB9XG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgb25MYXp5TG9hZCA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0YVRhYmxlTGF6eUxvYWRFdmVudD4oKTtcbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBvbkZpbHRlciA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KClcbiAgcHVibGljIG9uQWRkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KClcbiAgcHVibGljIG9uRXhwb3J0RXhjZWwgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgb25FeHBvcnRQREYgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgb25TZWxlY3RlZFJvd3MgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBvbkZpbHRlckNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEZpbHRlckNoYW5nZWRFdmVudD4oKTtcbiAgQFZpZXdDaGlsZChGaWx0ZXJzQ29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSB9KVxuICBwdWJsaWMgZmlsdGVyc0NvbXBvbmVudDogRmlsdGVyc0NvbXBvbmVudCB8IHVuZGVmaW5lZDtcblxuICBwdWJsaWMgc2VsZWN0ZWRJdGVtczogYW55ID0gW107XG5cbiAgZ2V0IHRhYnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3RhYnM7XG4gIH1cbiAgZ2V0IGhlaWdodCgpIHtcbiAgICByZXR1cm4gdGhpcy5faGVpZ2h0O1xuICB9XG4gIGdldCBzZWxlY3Rpb25Nb2RlKCkge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3Rpb25Nb2RlO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2VsZWN0aW9uTW9kZTogJ3NpbmdsZScgfCAnbXVsdGlwbGUnIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgX2hlaWdodDogc3RyaW5nID0gJ3NtYWxsJztcbiAgcHJpdmF0ZSBfdGFiczogTGlzdEl0ZW1bXSA9IFtdO1xuICBwcml2YXRlIF9kcmF3ID0gMTtcbiAgcHJpdmF0ZSBfZmlyc3RMYXp5TG9hZGVkRG9uZSA9IGZhbHNlO1xuICBwcml2YXRlIF9sYXN0TGF6eUxvYWRFdmVudDogRGF0YVRhYmxlTGF6eUxvYWRFdmVudCB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBfdGFiU2VsZWN0ZWQ6IExpc3RJdGVtIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIF9maWx0ZXJTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgY29uc3RydWN0b3IocHVibGljIGNkOiBDaGFuZ2VEZXRlY3RvclJlZikge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaGVpZ2h0KSB7XG4gICAgICB0aGlzLmhlaWdodCA9ICdzbWFsbCc7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnBhZ2luYXRpb24gfHwgdGhpcy52aXJ0dWFsUGFnaW5hdGlvbikge1xuICAgICAgdGhpcy5maWx0ZXJzQ29tcG9uZW50Py5zZWFyY2goKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLl9maWx0ZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIGdldENvbFN0eWxlKGNvbDogVGFibGVDb2x1bW4pIHtcbiAgICByZXR1cm4geyAnbWluLXdpZHRoJzogY29sLndpZHRoIH07XG4gIH1cblxuICBsYXp5TG9hZGVkKHBhcmFtczogeyBmaWx0ZXI6IGJvb2xlYW47IGRhdGE6IGFueSB9ID0geyBmaWx0ZXI6IGZhbHNlLCBkYXRhOiB7IHN0YXJ0OiAwLCByb3dzOiAxMCB9IH0pIHtcbiAgICBpZiAoIXBhcmFtcy5maWx0ZXIpIHtcbiAgICAgIGNvbnN0IGNvbHVtbnMgPSB0aGlzLmNvbHVtbnMubWFwKChjb2wpID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBkYXRhOiBjb2wuZmllbGQsXG4gICAgICAgICAgbmFtZTogYCR7Y29sLmZpZWxkLnN1YnN0cmluZygwLCAxKS50b1VwcGVyQ2FzZSgpfSR7Y29sLmZpZWxkLnN1YnN0cmluZygxLCBjb2wuZmllbGQubGVuZ3RoKX1gLFxuICAgICAgICAgIG9yZGVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICBzZWFyY2g6IHsgdmFsdWU6ICcnLCByZWdleDogZmFsc2UgfSxcbiAgICAgICAgICBzZWFyY2hhYmxlOiB0cnVlLFxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgICBpZiAodGhpcy5oYXNBY3Rpb25zKSB7XG4gICAgICAgIGNvbHVtbnMudW5zaGlmdCh7XG4gICAgICAgICAgZGF0YTogJ2FjdGl2ZScsXG4gICAgICAgICAgbmFtZTogJ0FjdGl2ZScsXG4gICAgICAgICAgb3JkZXJhYmxlOiB0cnVlLFxuICAgICAgICAgIHNlYXJjaDogeyB2YWx1ZTogJycsIHJlZ2V4OiBmYWxzZSB9LFxuICAgICAgICAgIHNlYXJjaGFibGU6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgdGhpcy5fbGFzdExhenlMb2FkRXZlbnQgPSB7XG4gICAgICAgIC4uLih0aGlzLl9sYXN0TGF6eUxvYWRFdmVudCB8fCAoe30gYXMgYW55KSksXG4gICAgICAgIHBhZ2U6IHBhcmFtcy5kYXRhLmZpcnN0IC8gcGFyYW1zLmRhdGEucm93cyArIDEsXG4gICAgICAgIHN0YXJ0OiBwYXJhbXMuZGF0YS5maXJzdCxcbiAgICAgICAgbGVuZ3RoOiBwYXJhbXMuZGF0YS5yb3dzLFxuICAgICAgICBkcmF3OiB0aGlzLl9kcmF3KyssXG4gICAgICAgIG9yZGVyOiBwYXJhbXMuZGF0YS5zb3J0RmllbGRcbiAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbHVtbjpcbiAgICAgICAgICAgICAgICAgIHRoaXMuY29sdW1ucy5maW5kSW5kZXgoKGNvbCkgPT4gY29sLmZpZWxkID09PSBwYXJhbXMuZGF0YS5zb3J0RmllbGQpICsgKHRoaXMuaGFzQWN0aW9ucyA/IDEgOiAwKSxcbiAgICAgICAgICAgICAgICBkaXI6IHBhcmFtcy5kYXRhLnNvcnRPcmRlciA+IDAgPyAnYXNjJyA6ICdkZXNjJyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF1cbiAgICAgICAgICA6IFt7IGNvbHVtbjogMCwgZGlyOiAnZGVzYycgfV0sXG4gICAgICAgIGNvbHVtbnM6IGNvbHVtbnMsXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9sYXN0TGF6eUxvYWRFdmVudCA9IHtcbiAgICAgICAgLi4udGhpcy5fbGFzdExhenlMb2FkRXZlbnQsXG4gICAgICAgIC4uLnBhcmFtcy5kYXRhLFxuICAgICAgICBzdGFydDogMCxcbiAgICAgIH07XG4gICAgICBpZiAodGhpcy5fdGFiU2VsZWN0ZWQpIHtcbiAgICAgICAgdGhpcy5fbGFzdExhenlMb2FkRXZlbnQgPSB7XG4gICAgICAgICAgLi4uKHRoaXMuX2xhc3RMYXp5TG9hZEV2ZW50IHx8ICh7fSBhcyBhbnkpKSxcbiAgICAgICAgICAuLi57IFN0YXR1czogdGhpcy5fdGFiU2VsZWN0ZWQuY29kZSB9LFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLl9maXJzdExhenlMb2FkZWREb25lKSB7XG4gICAgICB0aGlzLm9uTGF6eUxvYWQuZW1pdCh0aGlzLl9sYXN0TGF6eUxvYWRFdmVudCk7XG4gICAgfVxuICAgIHRoaXMuX2ZpcnN0TGF6eUxvYWRlZERvbmUgPSB0cnVlO1xuICB9XG5cbiAgZ2V0Q2VsbENvbnRlbnQoaXRlbTogYW55LCBjb2w6IFRhYmxlQ29sdW1uKSB7XG4gICAgbGV0IGNvbnRlbnQgPSBgPHNwYW4gY2xhc3M9XCJwLWNvbHVtbi10aXRsZVwiPiR7Y29sLmhlYWRlcn08L3NwYW4+PHNwYW4gY2xhc3M9XCJ3LTEwMFwiPmA7XG4gICAgaWYgKCFjb2wudHlwZSB8fCBjb2wudHlwZSA9PT0gVGFibGVDb2x1bW5UeXBlLlRFWFQpIHtcbiAgICAgIGNvbnRlbnQgKz0gaXRlbVtjb2wuZmllbGRdIHx8ICcnO1xuICAgIH1cblxuICAgIGlmIChjb2wudHlwZSA9PT0gVGFibGVDb2x1bW5UeXBlLkNVU1RPTV9TVFlMRSkge1xuICAgICAgY29udGVudCArPSBgPHNwYW4gY2xhc3M9XCIke2NvbC50ZXh0RmllbGRDbGFzcyA/IGl0ZW1bY29sLnRleHRGaWVsZENsYXNzXSA6ICcnfVwiPiR7aXRlbVtjb2wuZmllbGQgfHwgJyddfTwvc3Bhbj5gO1xuICAgIH1cblxuICAgIGlmIChjb2wudHlwZSA9PT0gVGFibGVDb2x1bW5UeXBlLkJPT0xFQU4pIHtcbiAgICAgIGNvbnRlbnQgKz0gYDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlcmVkXCI+PGkgY2xhc3M9XCIgc3RhdHVzLXRhYmxlLWZpZWxkIGZhcyBmYS0ke1xuICAgICAgICBpdGVtW2NvbC5maWVsZF0gPyAnY2hlY2sgYm9vbGVhbi12YWx1ZS1wb3NpdGl2ZScgOiAndGltZXMgYm9vbGVhbi12YWx1ZS1uZWdhdGl2ZSdcbiAgICAgIH1cIj48L2k+PC9kaXY+YDtcbiAgICB9XG5cbiAgICBpZiAoY29sLnR5cGUgPT09IFRhYmxlQ29sdW1uVHlwZS5FTlVNICYmIGNvbC5nZXRFbnVtVHJhbnNsYXRlZCkge1xuICAgICAgY29udGVudCArPSBjb2wuZ2V0RW51bVRyYW5zbGF0ZWQoaXRlbVtjb2wuZmllbGRdKTtcbiAgICB9XG5cbiAgICBpZiAoY29sLnR5cGUgPT09IFRhYmxlQ29sdW1uVHlwZS5EQVRFVElNRSAmJiBpdGVtW2NvbC5maWVsZF0pIHtcbiAgICAgIGNvbnN0IGRhdGVUaW1lID1cbiAgICAgICAgaXRlbVtjb2wuZmllbGRdIGluc3RhbmNlb2YgRGF0ZSA/IERhdGVUaW1lLmZyb21KU0RhdGUoaXRlbVtjb2wuZmllbGRdKSA6IERhdGVUaW1lLmZyb21JU08oaXRlbVtjb2wuZmllbGRdKTtcbiAgICAgIGNvbnRlbnQgKz0gZGF0ZVRpbWUudG9Gb3JtYXQoJ2RkL01NL3l5eXkgSEg6bW0nKTtcbiAgICB9XG5cbiAgICBpZiAoY29sLnR5cGUgPT09IFRhYmxlQ29sdW1uVHlwZS5TVEFUVVNfQkFER0UpIHtcbiAgICAgIGNvbnRlbnQgKz0gYDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlcmVkXCI+PGkgY2xhc3M9XCJmYXMgZmEtY2lyY2xlIHN0YXR1cy10YWJsZS1maWVsZCAke3RoaXMuZ2V0U3RhdHVzQ29sb3IoXG4gICAgICAgIGl0ZW1bY29sLmZpZWxkXVxuICAgICAgKX1cIj48L2k+PC9kaXY+YDtcbiAgICB9XG5cbiAgICBpZiAoY29sLnR5cGUgPT09IFRhYmxlQ29sdW1uVHlwZS5BQ1RJVkVfQk9PTEVBTl9CQURHRSkge1xuICAgICAgY29udGVudCArPSBgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyZWRcIj48aSBjbGFzcz1cImZhcyBmYS1jaXJjbGUgc3RhdHVzLXRhYmxlLWZpZWxkICR7dGhpcy5nZXRBY3RpdmVTdGF0dXNDb2xvcihcbiAgICAgICAgaXRlbVtjb2wuZmllbGRdXG4gICAgICApfVwiPjwvaT48L2Rpdj5gO1xuICAgIH1cblxuICAgIGlmIChjb2wudHlwZSA9PT0gVGFibGVDb2x1bW5UeXBlLkJVVFRPTikge1xuICAgICAgY29udGVudCArPSBgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyZWRcIj48aSBjbGFzcz1cImZhcyAke1xuICAgICAgICBjb2wuaWNvbiB8fCAnZmEtY2lyY2xlJ1xuICAgICAgfSBzdGF0dXMtdGFibGUtZmllbGQgdGFibGUtYnV0dG9uXCI+PC9pPjwvZGl2PmA7XG4gICAgfVxuXG4gICAgaWYgKGNvbC50eXBlID09PSBUYWJsZUNvbHVtblR5cGUuTUFTSykge1xuICAgICAgY29udGVudCArPSBNYXNrVXRpbC5kb01hc2tTdHJpbmcoaXRlbVtjb2wuZmllbGRdIHx8ICcnLCBjb2wubWFzayk7XG4gICAgfVxuXG4gICAgY29udGVudCArPSBgPC9zcGFuPmA7XG4gICAgcmV0dXJuIGNvbnRlbnQ7XG4gIH1cblxuICBvblRhYkNoYW5nZSgkZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuX3RhYlNlbGVjdGVkID0gdGhpcy50YWJzWyRldmVudC5pbmRleF07XG4gICAgdGhpcy5sYXp5TG9hZGVkKHsgZmlsdGVyOiB0cnVlLCBkYXRhOiB7fSB9KTtcbiAgfVxuXG4gIHN1YnNjcmliZVRvRmlsdGVyQ2hhbmdlcygpIHtcbiAgICB0aGlzLl9maWx0ZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLl9maWx0ZXJTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gICAgT2JqZWN0LmtleXModGhpcy5maWx0ZXJzQ29tcG9uZW50Py5mb3JtR3JvdXAuY29udHJvbHMgfHwge30pLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgdGhpcy5fZmlsdGVyU3Vic2NyaXB0aW9uLmFkZChcbiAgICAgICAgdGhpcy5maWx0ZXJzQ29tcG9uZW50Py5mb3JtR3JvdXBcbiAgICAgICAgICAuZ2V0KGtleSlcbiAgICAgICAgICA/LnZhbHVlQ2hhbmdlcy5waXBlKGRlYm91bmNlVGltZSgzMDApKVxuICAgICAgICAgIC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9uRmlsdGVyQ2hhbmdlZC5lbWl0KHsgZmllbGQ6IGtleSwgdmFsdWUgfSk7XG4gICAgICAgICAgfSlcbiAgICAgICk7XG4gICAgICB0aGlzLm9uRmlsdGVyQ2hhbmdlZC5lbWl0KHsgZmllbGQ6IGtleSwgdmFsdWU6IHRoaXMuZmlsdGVyc0NvbXBvbmVudD8uZm9ybUdyb3VwLmdldChrZXkpPy52YWx1ZSB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIG9uUm93Q2xpY2soaXRlbTogYW55KSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0IGxpc3RIYXNBY3Rpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmRhdGEuc29tZSgoaXRlbSkgPT4gaXRlbS5hY3Rpb25zPy5sZW5ndGgpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTdGF0dXNDb2xvcihzdGF0dXM6IFN0YXR1cykge1xuICAgIHN3aXRjaCAoc3RhdHVzKSB7XG4gICAgICBjYXNlIFN0YXR1cy5QRU5ESU5HOlxuICAgICAgICByZXR1cm4gJ3dhcm5pbmcnO1xuICAgICAgY2FzZSBTdGF0dXMuQVBQUk9WRUQ6XG4gICAgICAgIHJldHVybiAnc3VjY2Vzcyc7XG4gICAgICBjYXNlIFN0YXR1cy5SRUpFQ1RFRDpcbiAgICAgICAgcmV0dXJuICdlcnJvcic7XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QWN0aXZlU3RhdHVzQ29sb3IoYWN0aXZlOiBib29sZWFuKSB7XG4gICAgcmV0dXJuIGFjdGl2ZSA/ICdzdWNjZXNzJyA6ICdlcnJvcic7XG4gIH1cblxuICBwdWJsaWMgY2hhbmdlU2VsZWN0ZWRJdGVtcyh2YWx1ZTogYW55KSB7XG4gICAgdGhpcy5vblNlbGVjdGVkUm93cy5lbWl0KHRoaXMuc2VsZWN0ZWRJdGVtcyk7XG4gIH1cblxuICBwdWJsaWMgaXNIdG1sQ2VsbChjb2w6IFRhYmxlQ29sdW1uKSB7XG4gICAgaWYgKCFjb2wudHlwZSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiAhW1RhYmxlQ29sdW1uVHlwZS5URVhUX0JBREdFXS5pbmNsdWRlcyhjb2wudHlwZSk7XG4gIH1cblxuICBwdWJsaWMgb25TZWxlY3Rpb25DaGFuZ2Uoc2VsZWN0aW9uOiBhbnkpIHtcbiAgICBmb3IgKGxldCBpID0gc2VsZWN0aW9uLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBsZXQgZGF0YSA9IHNlbGVjdGlvbltpXTtcbiAgICAgIGlmIChkYXRhLmRpc2FibGVkQ2hlY2tCb3gpIHtcbiAgICAgICAgc2VsZWN0aW9uLnNwbGljZShpLCAxKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gc2VsZWN0aW9uO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZ3JpZFwiPlxuICA8ZGl2IGNsYXNzPVwiY29sLTEyXCI+XG4gICAgPHZlY3Rvci1maWx0ZXJzXG4gICAgICBbZmllbGRzXT1cImZpbHRlcnNcIlxuICAgICAgKG9uU2VhcmNoKT1cImxhenlMb2FkZWQoeyBmaWx0ZXI6IHRydWUsIGRhdGE6ICRldmVudCB9KVwiXG4gICAgICAoZm9ybUJ1aWxkZWQpPVwic3Vic2NyaWJlVG9GaWx0ZXJDaGFuZ2VzKClcIlxuICAgID48L3ZlY3Rvci1maWx0ZXJzPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cInRhYmxlLWhlYWRlci1hY3Rpb25zIGZpZWxkXCIgKm5nSWY9XCJhZGRJdGVtTGFiZWwgfHwgZXhwb3J0RXhjZWwgfHwgZXhwb3J0UERGXCI+XG4gICAgPGJ1dHRvbiAqbmdJZj1cImV4cG9ydEV4Y2VsXCIgKGNsaWNrKT1cIm9uRXhwb3J0RXhjZWwuZW1pdCgpXCIgY2xhc3M9XCJleHBvcnQtYnV0dG9uIGV4cG9ydC1leGNlbFwiPlxuICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtZmlsZVwiPjwvaT48c3Bhbj5FeGNlbDwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uICpuZ0lmPVwiZXhwb3J0UERGXCIgKGNsaWNrKT1cIm9uRXhwb3J0UERGLmVtaXQoKVwiIGNsYXNzPVwiZXhwb3J0LWJ1dHRvbiBleHBvcnQtcGRmXCI+XG4gICAgICA8aSBjbGFzcz1cImZhcyBmYS1maWxlXCI+PC9pPjxzcGFuPlBERjwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cbiAgICA8dmVjdG9yLWJ1dHRvblxuICAgICAgKm5nRm9yPVwibGV0IGJ1dHRvbiBvZiBjdXN0b21CdXR0b25zXCJcbiAgICAgIGNsYXNzPVwiYWRkLWl0ZW0tYnV0dG9uXCJcbiAgICAgIFtsYWJlbF09XCJidXR0b24ubGFiZWxcIlxuICAgICAgKGNsaWNrKT1cImJ1dHRvbi5jbGlja0Z1bmN0aW9uKClcIlxuICAgICAgW3JpZ2h0SWNvbl09XCJhZGRJdGVtQnV0dG9uUGx1c1NpZ24gPyAncGkgcGktcGx1cycgOiAnJ1wiXG4gICAgPjwvdmVjdG9yLWJ1dHRvbj5cbiAgICA8dmVjdG9yLWJ1dHRvblxuICAgICAgKm5nSWY9XCJhZGRJdGVtTGFiZWxcIlxuICAgICAgY2xhc3M9XCJhZGQtaXRlbS1idXR0b25cIlxuICAgICAgW2xhYmVsXT1cImFkZEl0ZW1MYWJlbFwiXG4gICAgICAoY2xpY2spPVwib25BZGQuZW1pdCgpXCJcbiAgICAgIFtyaWdodEljb25dPVwiYWRkSXRlbUJ1dHRvblBsdXNTaWduID8gJ3BpIHBpLXBsdXMnIDogJydcIlxuICAgID48L3ZlY3Rvci1idXR0b24+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiY29sLTEyXCI+XG4gICAgPHZlY3Rvci1wYW5lbCBjbGFzcz1cImRhdGEtdGFibGUtcGFuZWxcIj5cbiAgICAgIDxwLXRhYlZpZXcgKG9uQ2hhbmdlKT1cIm9uVGFiQ2hhbmdlKCRldmVudClcIiAqbmdJZj1cInRhYnM/Lmxlbmd0aFwiPlxuICAgICAgICA8cC10YWJQYW5lbCAqbmdGb3I9XCJsZXQgdGFiIG9mIHRhYnNcIiBbaGVhZGVyXT1cInRhYi5uYW1lXCI+PC9wLXRhYlBhbmVsPlxuICAgICAgPC9wLXRhYlZpZXc+XG4gICAgICA8cC10YWJsZVxuICAgICAgICBjdXJyZW50UGFnZVJlcG9ydFRlbXBsYXRlPVwiTW9zdHJhbmRvIHtmaXJzdH0gYXTDqSB7bGFzdH0gZGUge3RvdGFsUmVjb3Jkc30gcmVnaXN0cm9zXCJcbiAgICAgICAgc29ydE1vZGU9XCJzaW5nbGVcIlxuICAgICAgICBbcm93c109XCIxMFwiXG4gICAgICAgIFtsYXp5XT1cInBhZ2luYXRpb24gJiYgIXZpcnR1YWxQYWdpbmF0aW9uXCJcbiAgICAgICAgW3ZhbHVlXT1cImRhdGFcIlxuICAgICAgICBbcGFnaW5hdG9yXT1cInBhZ2luYXRpb25cIlxuICAgICAgICBbdG90YWxSZWNvcmRzXT1cInRvdGFsUmVjb3Jkc1wiXG4gICAgICAgIFtzaG93Q3VycmVudFBhZ2VSZXBvcnRdPVwidHJ1ZVwiXG4gICAgICAgIFtyb3dzUGVyUGFnZU9wdGlvbnNdPVwiWzEwLCAyNSwgNTAsIDEwMF1cIlxuICAgICAgICBbcmVzcG9uc2l2ZV09XCJ0cnVlXCJcbiAgICAgICAgW3Jlc2l6YWJsZUNvbHVtbnNdPVwidHJ1ZVwiXG4gICAgICAgIFtzY3JvbGxhYmxlXT1cInRydWVcIlxuICAgICAgICBzY3JvbGxEaXJlY3Rpb249XCJ2ZXJ0aWNhbFwiXG4gICAgICAgIHJlc3BvbnNpdmVMYXlvdXQ9XCJzY3JvbGxcIlxuICAgICAgICBkYXRhS2V5PVwiaWRcIlxuICAgICAgICBbc2Nyb2xsSGVpZ2h0XT1cImhlaWdodFwiXG4gICAgICAgIFthdHRyLnNlbGVjdGlvbk1vZGVdPVwic2VsZWN0aW9uTW9kZVwiXG4gICAgICAgIFsoc2VsZWN0aW9uKV09XCJzZWxlY3RlZEl0ZW1zXCJcbiAgICAgICAgKG9uUm93U2VsZWN0KT1cImNoYW5nZVNlbGVjdGVkSXRlbXMoJGV2ZW50KVwiXG4gICAgICAgIChvbkhlYWRlckNoZWNrYm94VG9nZ2xlKT1cImNoYW5nZVNlbGVjdGVkSXRlbXMoJGV2ZW50KVwiXG4gICAgICAgIChvblJvd1Vuc2VsZWN0KT1cImNoYW5nZVNlbGVjdGVkSXRlbXMoJGV2ZW50KVwiXG4gICAgICAgIChvbkxhenlMb2FkKT1cImxhenlMb2FkZWQoeyBmaWx0ZXI6IGZhbHNlLCBkYXRhOiAkZXZlbnQgfSlcIlxuICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uU2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIlxuICAgICAgPlxuICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyXCI+XG4gICAgICAgICAgPHRyIGNsYXNzPVwiaGVhZGVyXCI+XG4gICAgICAgICAgICA8dGggc3R5bGU9XCJtYXgtd2lkdGg6IDNyZW1cIiAqbmdJZj1cInNlbGVjdGlvblR5cGUgPT09ICdjaGVja2JveCdcIj5cbiAgICAgICAgICAgICAgPHAtdGFibGVIZWFkZXJDaGVja2JveCBbZGlzYWJsZWRdPVwiZGlzYWJsZWRIZWFkZXJjaGVja2JveFwiPjwvcC10YWJsZUhlYWRlckNoZWNrYm94PlxuICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgIDx0aCBzdHlsZT1cIm1heC13aWR0aDogMTUwcHhcIiBjbGFzcz1cImNlbnRlcmVkIHRleHQtY2VudGVyXCIgKm5nSWY9XCJoYXNFeHBhbmRhYmxlSWNvblwiPlxuICAgICAgICAgICAgICB7eyBhZGROYW1lQ29sdW1uRXhwYW5kIH19XG4gICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgPHRoIHN0eWxlPVwibWF4LXdpZHRoOiAxMDBweFwiIGNsYXNzPVwiY2VudGVyZWRcIiAqbmdJZj1cImhhc0FjdGlvbnNcIj5Bw6fDtWVzPC90aD5cbiAgICAgICAgICAgIDx0aFxuICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29sIG9mIGNvbHVtbnNcIlxuICAgICAgICAgICAgICBbbmdTdHlsZV09XCJnZXRDb2xTdHlsZShjb2wpXCJcbiAgICAgICAgICAgICAgW3BTb3J0YWJsZUNvbHVtbl09XCJjb2wubm90U29ydGFibGUgPyAnJyA6IGNvbC5maWVsZFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt7IGNvbC5oZWFkZXIgfX0gPHAtc29ydEljb24gKm5nSWY9XCIhY29sLm5vdFNvcnRhYmxlXCIgW2ZpZWxkXT1cImNvbC5maWVsZFwiPjwvcC1zb3J0SWNvbj5cbiAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImJvZHlcIiBsZXQtcm93RGF0YSBsZXQtaXRlbSBsZXQtZXhwYW5kZWQ9XCJleHBhbmRlZFwiPlxuICAgICAgICAgIDx0clxuICAgICAgICAgICAgY2xhc3M9XCJyb3dcIlxuICAgICAgICAgICAgW3BTZWxlY3RhYmxlUm93XT1cInJvd0RhdGFcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyBleHBhbmRhYmxlOiBleHBhbmRhYmxlIH1cIlxuICAgICAgICAgICAgW3BSb3dUb2dnbGVyXT1cImV4cGFuZGFibGUgPyBpdGVtIDogdW5kZWZpbmVkXCJcbiAgICAgICAgICAgIChjbGljayk9XCJvblJvd0NsaWNrKGl0ZW0pXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0aW9uVHlwZSA9PT0gJ2NoZWNrYm94J1wiPlxuICAgICAgICAgICAgICA8dGQgc3R5bGU9XCJtYXgtd2lkdGg6IDNyZW07IHBhZGRpbmctbGVmdDogMTBweFwiIGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgIDxwLXRhYmxlQ2hlY2tib3ggW3ZhbHVlXT1cIml0ZW1cIiBbZGlzYWJsZWRdPVwiaXRlbS5kaXNhYmxlZENoZWNrQm94XCI+PC9wLXRhYmxlQ2hlY2tib3g+XG4gICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3Rpb25UeXBlID09PSAncmFkaW9idXR0b24nXCI+XG4gICAgICAgICAgICAgIDx0ZCBzdHlsZT1cIm1heC13aWR0aDogM3JlbTsgcGFkZGluZy1sZWZ0OiAxMHB4XCIgY2xhc3M9XCJmbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgPHAtdGFibGVSYWRpb0J1dHRvbiBbdmFsdWVdPVwiaXRlbVwiPjwvcC10YWJsZVJhZGlvQnV0dG9uPlxuICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8dGQgKm5nSWY9XCJoYXNFeHBhbmRhYmxlSWNvblwiIHN0eWxlPVwibWF4LXdpZHRoOiAxNTBweFwiIGNsYXNzPVwiY2VudGVyZWRcIj5cbiAgICAgICAgICAgICAgPHAtbWVudSAjbWVudSBbbW9kZWxdPVwiaXRlbS5hY3Rpb25zXCIgW3BvcHVwXT1cInRydWVcIiBhcHBlbmRUbz1cImJvZHlcIj48L3AtbWVudT5cbiAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJcbiAgICAgICAgICAgICAgICAgIGV4cGFuZGVkID8gJ2FjdGlvbnMtbWVudS1idXR0b24gcGkgcGktY2hldnJvbi1kb3duJyA6ICdhY3Rpb25zLW1lbnUtYnV0dG9uIHBpIHBpLWNoZXZyb24tcmlnaHQnXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgPjwvaT5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICA8dGQgKm5nSWY9XCJoYXNBY3Rpb25zXCIgc3R5bGU9XCJtYXgtd2lkdGg6IDEwMHB4XCIgY2xhc3M9XCJjZW50ZXJlZFwiPlxuICAgICAgICAgICAgICA8cC1tZW51ICNtZW51IFttb2RlbF09XCJpdGVtLmFjdGlvbnNcIiBbcG9wdXBdPVwidHJ1ZVwiIGFwcGVuZFRvPVwiYm9keVwiPjwvcC1tZW51PlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImFjdGlvbnMtbWVudS1idXR0b24gZmFzIGZhLWNvZ1wiIChjbGljayk9XCJtZW51LnRvZ2dsZSgkZXZlbnQpXCI+PC9pPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvbCBvZiBjb2x1bW5zXCI+XG4gICAgICAgICAgICAgIDx0ZFxuICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNIdG1sQ2VsbChjb2wpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNlbGxcIlxuICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwiZ2V0Q2VsbENvbnRlbnQoaXRlbSwgY29sKVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImNvbCAmJiBjb2wuY2xpY2tGdW5jdGlvbiAmJiBjb2wuY2xpY2tGdW5jdGlvbihpdGVtKVwiXG4gICAgICAgICAgICAgICAgW25nU3R5bGVdPVwiZ2V0Q29sU3R5bGUoY29sKVwiXG4gICAgICAgICAgICAgID48L3RkPlxuICAgICAgICAgICAgICA8dGRcbiAgICAgICAgICAgICAgICAqbmdJZj1cIiFpc0h0bWxDZWxsKGNvbClcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY2VsbFwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImNvbCAmJiBjb2wuY2xpY2tGdW5jdGlvbiAmJiBjb2wuY2xpY2tGdW5jdGlvbihpdGVtKVwiXG4gICAgICAgICAgICAgICAgW25nU3R5bGVdPVwiZ2V0Q29sU3R5bGUoY29sKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8dmVjdG9yLWJhZGdlXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbC50eXBlID09PSAnVEVYVF9CQURHRScgJiYgISFjb2wuZ2V0U3RhdHVzXCJcbiAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJpdGVtW2NvbC5maWVsZF1cIlxuICAgICAgICAgICAgICAgICAgW3R5cGVdPVwiY29sLmdldFN0YXR1cyhpdGVtW2NvbC5maWVsZF0pXCJcbiAgICAgICAgICAgICAgICA+PC92ZWN0b3ItYmFkZ2U+XG4gICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZW1wdHltZXNzYWdlXCI+XG4gICAgICAgICAgPHRyIGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJuby1yZXN1bHRzXCIgW2F0dHIuY29sc3Bhbl09XCJjb2x1bW5zLmxlbmd0aCArIDFcIj5OZW5odW0gcmVzdWx0YWRvIGVuY29udHJhZG88L3RkPlxuICAgICAgICAgIDwvdHI+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJwYWdpbmF0b3JyaWdodFwiPiA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8bmctdGVtcGxhdGUgbGV0LWl0ZW0gcFRlbXBsYXRlPVwicGFnaW5hdG9yZHJvcGRvd25pdGVtXCI+IHt7IGl0ZW0udmFsdWUgfX0gPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cInJvd2V4cGFuc2lvblwiIGxldC1pdGVtPlxuICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgIDx0ZCBbYXR0ci5jb2xzcGFuXT1cImNvbHVtbnMubGVuZ3RoICsgKGhhc0FjdGlvbnMgPyAxIDogMClcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImV4cGFuc2lvblRlbXBsYXRlOyBjb250ZXh0OiB7IGl0ZW0gfVwiPiA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvcC10YWJsZT5cbiAgICA8L3ZlY3Rvci1wYW5lbD5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|
|
1
|
+
import { Component, EventEmitter, Input, Output, ViewChild, } from '@angular/core';
|
|
2
|
+
import { DateTime } from 'luxon';
|
|
3
|
+
import { Subscription } from 'rxjs';
|
|
4
|
+
import { debounceTime } from 'rxjs/operators';
|
|
5
|
+
import { Status } from '../../../models';
|
|
6
|
+
import { TableColumnType } from '../../../models/data-table.model';
|
|
7
|
+
import { MaskUtil } from '../../../utils';
|
|
8
|
+
import { FiltersComponent } from '../filters/filters.component';
|
|
9
|
+
import * as i0 from "@angular/core";
|
|
10
|
+
import * as i1 from "../filters/filters.component";
|
|
11
|
+
import * as i2 from "../button/button.component";
|
|
12
|
+
import * as i3 from "../../panel/panel.component";
|
|
13
|
+
import * as i4 from "primeng/tabview";
|
|
14
|
+
import * as i5 from "primeng/table";
|
|
15
|
+
import * as i6 from "primeng/menu";
|
|
16
|
+
import * as i7 from "../../badge/badge.component";
|
|
17
|
+
import * as i8 from "@angular/common";
|
|
18
|
+
import * as i9 from "primeng/api";
|
|
19
|
+
export class DataTableComponent {
|
|
20
|
+
constructor(cd) {
|
|
21
|
+
this.cd = cd;
|
|
22
|
+
this.columns = [];
|
|
23
|
+
this.data = [];
|
|
24
|
+
this.exportExcel = false;
|
|
25
|
+
this.exportPDF = false;
|
|
26
|
+
this.totalRecords = 0;
|
|
27
|
+
this.disabledHeadercheckbox = false;
|
|
28
|
+
this.filters = [];
|
|
29
|
+
this.addItemLabel = '';
|
|
30
|
+
this.pagination = true;
|
|
31
|
+
this.virtualPagination = false;
|
|
32
|
+
this.addItemButtonPlusSign = false;
|
|
33
|
+
this.hasActions = true;
|
|
34
|
+
this.hasExpandableIcon = false;
|
|
35
|
+
this.addNameColumnExpand = '';
|
|
36
|
+
this.expandable = false;
|
|
37
|
+
this.selectionType = null;
|
|
38
|
+
this.onLazyLoad = new EventEmitter();
|
|
39
|
+
this.onFilter = new EventEmitter();
|
|
40
|
+
this.onAdd = new EventEmitter();
|
|
41
|
+
this.onExportExcel = new EventEmitter();
|
|
42
|
+
this.onExportPDF = new EventEmitter();
|
|
43
|
+
this.onSelectedRows = new EventEmitter();
|
|
44
|
+
this.onFilterChanged = new EventEmitter();
|
|
45
|
+
this.selectedItems = [];
|
|
46
|
+
this._selectionMode = null;
|
|
47
|
+
this._height = 'small';
|
|
48
|
+
this._tabs = [];
|
|
49
|
+
this._draw = 1;
|
|
50
|
+
this._firstLazyLoadedDone = false;
|
|
51
|
+
this._filterSubscription = new Subscription();
|
|
52
|
+
}
|
|
53
|
+
set tabs(_tabs) {
|
|
54
|
+
this._tabs = _tabs;
|
|
55
|
+
this._tabSelected = _tabs[0];
|
|
56
|
+
}
|
|
57
|
+
set selectionMode(_selectionMode) {
|
|
58
|
+
switch (_selectionMode) {
|
|
59
|
+
case 'single':
|
|
60
|
+
this._selectionMode = 'single';
|
|
61
|
+
break;
|
|
62
|
+
case 'multiple':
|
|
63
|
+
this._selectionMode = 'multiple';
|
|
64
|
+
break;
|
|
65
|
+
default:
|
|
66
|
+
this._selectionMode = null;
|
|
67
|
+
break;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
set height(_height) {
|
|
71
|
+
switch (_height) {
|
|
72
|
+
case 'small':
|
|
73
|
+
this._height = '300px';
|
|
74
|
+
break;
|
|
75
|
+
case 'medium':
|
|
76
|
+
this._height = '500px';
|
|
77
|
+
break;
|
|
78
|
+
case 'large':
|
|
79
|
+
this._height = '700px';
|
|
80
|
+
break;
|
|
81
|
+
case 'full':
|
|
82
|
+
this._height = 'flex';
|
|
83
|
+
break;
|
|
84
|
+
default:
|
|
85
|
+
this._height = '300px';
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
get tabs() {
|
|
89
|
+
return this._tabs;
|
|
90
|
+
}
|
|
91
|
+
get height() {
|
|
92
|
+
return this._height;
|
|
93
|
+
}
|
|
94
|
+
get selectionMode() {
|
|
95
|
+
return this._selectionMode;
|
|
96
|
+
}
|
|
97
|
+
ngOnInit() {
|
|
98
|
+
if (!this.height) {
|
|
99
|
+
this.height = 'small';
|
|
100
|
+
}
|
|
101
|
+
if (!this.pagination || this.virtualPagination) {
|
|
102
|
+
this.filtersComponent?.search();
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
ngOnDestroy() {
|
|
106
|
+
this._filterSubscription.unsubscribe();
|
|
107
|
+
}
|
|
108
|
+
getColStyle(col) {
|
|
109
|
+
return { 'min-width': col.width };
|
|
110
|
+
}
|
|
111
|
+
lazyLoaded(params = { filter: false, data: { start: 0, rows: 10 } }) {
|
|
112
|
+
if (!params.filter) {
|
|
113
|
+
const columns = this.columns.map((col) => {
|
|
114
|
+
return {
|
|
115
|
+
data: col.field,
|
|
116
|
+
name: `${col.field.substring(0, 1).toUpperCase()}${col.field.substring(1, col.field.length)}`,
|
|
117
|
+
orderable: true,
|
|
118
|
+
search: { value: '', regex: false },
|
|
119
|
+
searchable: true,
|
|
120
|
+
};
|
|
121
|
+
});
|
|
122
|
+
if (this.hasActions) {
|
|
123
|
+
columns.unshift({
|
|
124
|
+
data: 'active',
|
|
125
|
+
name: 'Active',
|
|
126
|
+
orderable: true,
|
|
127
|
+
search: { value: '', regex: false },
|
|
128
|
+
searchable: true,
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
this._lastLazyLoadEvent = {
|
|
132
|
+
...(this._lastLazyLoadEvent || {}),
|
|
133
|
+
page: params.data.first / params.data.rows + 1,
|
|
134
|
+
start: params.data.first,
|
|
135
|
+
length: params.data.rows,
|
|
136
|
+
draw: this._draw++,
|
|
137
|
+
order: params.data.sortField
|
|
138
|
+
? [
|
|
139
|
+
{
|
|
140
|
+
column: this.columns.findIndex((col) => col.field === params.data.sortField) + (this.hasActions ? 1 : 0),
|
|
141
|
+
dir: params.data.sortOrder > 0 ? 'asc' : 'desc',
|
|
142
|
+
},
|
|
143
|
+
]
|
|
144
|
+
: [{ column: 0, dir: 'desc' }],
|
|
145
|
+
columns: columns,
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
this._lastLazyLoadEvent = {
|
|
150
|
+
...this._lastLazyLoadEvent,
|
|
151
|
+
...params.data,
|
|
152
|
+
start: 0,
|
|
153
|
+
};
|
|
154
|
+
if (this._tabSelected) {
|
|
155
|
+
this._lastLazyLoadEvent = {
|
|
156
|
+
...(this._lastLazyLoadEvent || {}),
|
|
157
|
+
...{ Status: this._tabSelected.code },
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
if (this._firstLazyLoadedDone) {
|
|
162
|
+
this.onLazyLoad.emit(this._lastLazyLoadEvent);
|
|
163
|
+
}
|
|
164
|
+
this._firstLazyLoadedDone = true;
|
|
165
|
+
}
|
|
166
|
+
getCellContent(item, col) {
|
|
167
|
+
let content = `<span class="p-column-title">${col.header}</span><span class="w-100">`;
|
|
168
|
+
if (!col.type || col.type === TableColumnType.TEXT) {
|
|
169
|
+
content += item[col.field] || '';
|
|
170
|
+
}
|
|
171
|
+
if (col.type === TableColumnType.CUSTOM_STYLE) {
|
|
172
|
+
content += `<span class="${col.textFieldClass ? item[col.textFieldClass] : ''}">${item[col.field || '']}</span>`;
|
|
173
|
+
}
|
|
174
|
+
if (col.type === TableColumnType.BOOLEAN) {
|
|
175
|
+
content += `<div class="text-centered"><i class=" status-table-field fas fa-${item[col.field] ? 'check boolean-value-positive' : 'times boolean-value-negative'}"></i></div>`;
|
|
176
|
+
}
|
|
177
|
+
if (col.type === TableColumnType.ENUM && col.getEnumTranslated) {
|
|
178
|
+
content += col.getEnumTranslated(item[col.field]);
|
|
179
|
+
}
|
|
180
|
+
if (col.type === TableColumnType.DATETIME && item[col.field]) {
|
|
181
|
+
const dateTime = item[col.field] instanceof Date ? DateTime.fromJSDate(item[col.field]) : DateTime.fromISO(item[col.field]);
|
|
182
|
+
content += dateTime.toFormat('dd/MM/yyyy HH:mm');
|
|
183
|
+
}
|
|
184
|
+
if (col.type === TableColumnType.STATUS_BADGE) {
|
|
185
|
+
content += `<div class="text-centered"><i class="fas fa-circle status-table-field ${this.getStatusColor(item[col.field])}"></i></div>`;
|
|
186
|
+
}
|
|
187
|
+
if (col.type === TableColumnType.ACTIVE_BOOLEAN_BADGE) {
|
|
188
|
+
content += `<div class="text-centered"><i class="fas fa-circle status-table-field ${this.getActiveStatusColor(item[col.field])}"></i></div>`;
|
|
189
|
+
}
|
|
190
|
+
if (col.type === TableColumnType.BUTTON) {
|
|
191
|
+
content += `<div class="text-centered"><i class="fas ${col.icon || 'fa-circle'} status-table-field table-button"></i></div>`;
|
|
192
|
+
}
|
|
193
|
+
if (col.type === TableColumnType.MASK) {
|
|
194
|
+
content += MaskUtil.doMaskString(item[col.field] || '', col.mask);
|
|
195
|
+
}
|
|
196
|
+
content += `</span>`;
|
|
197
|
+
return content;
|
|
198
|
+
}
|
|
199
|
+
onTabChange($event) {
|
|
200
|
+
this._tabSelected = this.tabs[$event.index];
|
|
201
|
+
this.lazyLoaded({ filter: true, data: {} });
|
|
202
|
+
}
|
|
203
|
+
subscribeToFilterChanges() {
|
|
204
|
+
this._filterSubscription.unsubscribe();
|
|
205
|
+
this._filterSubscription = new Subscription();
|
|
206
|
+
Object.keys(this.filtersComponent?.formGroup.controls || {}).forEach((key) => {
|
|
207
|
+
this._filterSubscription.add(this.filtersComponent?.formGroup
|
|
208
|
+
.get(key)
|
|
209
|
+
?.valueChanges.pipe(debounceTime(300))
|
|
210
|
+
.subscribe((value) => {
|
|
211
|
+
this.onFilterChanged.emit({ field: key, value });
|
|
212
|
+
}));
|
|
213
|
+
this.onFilterChanged.emit({ field: key, value: this.filtersComponent?.formGroup.get(key)?.value });
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
onRowClick(item) {
|
|
217
|
+
setTimeout(() => {
|
|
218
|
+
this.cd.markForCheck();
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
get listHasActions() {
|
|
222
|
+
return this.data.some((item) => item.actions?.length);
|
|
223
|
+
}
|
|
224
|
+
getStatusColor(status) {
|
|
225
|
+
switch (status) {
|
|
226
|
+
case Status.PENDING:
|
|
227
|
+
return 'warning';
|
|
228
|
+
case Status.APPROVED:
|
|
229
|
+
return 'success';
|
|
230
|
+
case Status.REJECTED:
|
|
231
|
+
return 'error';
|
|
232
|
+
}
|
|
233
|
+
return '';
|
|
234
|
+
}
|
|
235
|
+
getActiveStatusColor(active) {
|
|
236
|
+
return active ? 'success' : 'error';
|
|
237
|
+
}
|
|
238
|
+
changeSelectedItems(value) {
|
|
239
|
+
this.onSelectedRows.emit(this.selectedItems);
|
|
240
|
+
}
|
|
241
|
+
isHtmlCell(col) {
|
|
242
|
+
if (!col.type) {
|
|
243
|
+
return true;
|
|
244
|
+
}
|
|
245
|
+
return ![TableColumnType.TEXT_BADGE].includes(col.type);
|
|
246
|
+
}
|
|
247
|
+
onSelectionChange(selection) {
|
|
248
|
+
for (let i = selection.length - 1; i >= 0; i--) {
|
|
249
|
+
let data = selection[i];
|
|
250
|
+
if (data.disabledCheckBox) {
|
|
251
|
+
selection.splice(i, 1);
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
this.selectedItems = selection;
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
DataTableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: DataTableComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
258
|
+
DataTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.3", type: DataTableComponent, selector: "vector-data-table", inputs: { columns: "columns", data: "data", exportExcel: "exportExcel", exportPDF: "exportPDF", totalRecords: "totalRecords", disabledHeadercheckbox: "disabledHeadercheckbox", filters: "filters", addItemLabel: "addItemLabel", pagination: "pagination", virtualPagination: "virtualPagination", tabs: "tabs", customButtons: "customButtons", addItemButtonPlusSign: "addItemButtonPlusSign", hasActions: "hasActions", hasExpandableIcon: "hasExpandableIcon", addNameColumnExpand: "addNameColumnExpand", expandable: "expandable", expansionTemplate: "expansionTemplate", selectionMode: "selectionMode", selectionType: "selectionType", height: "height" }, outputs: { onLazyLoad: "onLazyLoad", onFilter: "onFilter", onAdd: "onAdd", onExportExcel: "onExportExcel", onExportPDF: "onExportPDF", onSelectedRows: "onSelectedRows", onFilterChanged: "onFilterChanged" }, viewQueries: [{ propertyName: "filtersComponent", first: true, predicate: FiltersComponent, descendants: true, static: true }], ngImport: i0, template: "<div class=\"grid\">\r\n <div class=\"col-12\">\r\n <vector-filters\r\n [fields]=\"filters\"\r\n (onSearch)=\"lazyLoaded({ filter: true, data: $event })\"\r\n (formBuilded)=\"subscribeToFilterChanges()\"\r\n ></vector-filters>\r\n </div>\r\n <div class=\"table-header-actions field\" *ngIf=\"addItemLabel || exportExcel || exportPDF\">\r\n <button *ngIf=\"exportExcel\" (click)=\"onExportExcel.emit()\" class=\"export-button export-excel\">\r\n <i class=\"fas fa-file\"></i><span>Excel</span>\r\n </button>\r\n <button *ngIf=\"exportPDF\" (click)=\"onExportPDF.emit()\" class=\"export-button export-pdf\">\r\n <i class=\"fas fa-file\"></i><span>PDF</span>\r\n </button>\r\n <vector-button\r\n *ngFor=\"let button of customButtons\"\r\n class=\"add-item-button\"\r\n [label]=\"button.label\"\r\n (click)=\"button.clickFunction()\"\r\n [rightIcon]=\"addItemButtonPlusSign ? 'pi pi-plus' : ''\"\r\n ></vector-button>\r\n <vector-button\r\n *ngIf=\"addItemLabel\"\r\n class=\"add-item-button\"\r\n [label]=\"addItemLabel\"\r\n (click)=\"onAdd.emit()\"\r\n [rightIcon]=\"addItemButtonPlusSign ? 'pi pi-plus' : ''\"\r\n ></vector-button>\r\n </div>\r\n <div class=\"col-12\">\r\n <vector-panel class=\"data-table-panel\">\r\n <p-tabView (onChange)=\"onTabChange($event)\" *ngIf=\"tabs?.length\">\r\n <p-tabPanel *ngFor=\"let tab of tabs\" [header]=\"tab.name\"></p-tabPanel>\r\n </p-tabView>\r\n <p-table\r\n currentPageReportTemplate=\"Mostrando {first} at\u00E9 {last} de {totalRecords} registros\"\r\n sortMode=\"single\"\r\n [rows]=\"10\"\r\n [lazy]=\"pagination && !virtualPagination\"\r\n [value]=\"data\"\r\n [paginator]=\"pagination\"\r\n [totalRecords]=\"totalRecords\"\r\n [showCurrentPageReport]=\"true\"\r\n [rowsPerPageOptions]=\"[10, 25, 50, 100]\"\r\n [responsive]=\"true\"\r\n [resizableColumns]=\"true\"\r\n [scrollable]=\"true\"\r\n scrollDirection=\"vertical\"\r\n responsiveLayout=\"scroll\"\r\n dataKey=\"id\"\r\n [scrollHeight]=\"height\"\r\n [attr.selectionMode]=\"selectionMode\"\r\n [(selection)]=\"selectedItems\"\r\n (onRowSelect)=\"changeSelectedItems($event)\"\r\n (onHeaderCheckboxToggle)=\"changeSelectedItems($event)\"\r\n (onRowUnselect)=\"changeSelectedItems($event)\"\r\n (onLazyLoad)=\"lazyLoaded({ filter: false, data: $event })\"\r\n (selectionChange)=\"onSelectionChange($event)\"\r\n >\r\n <ng-template pTemplate=\"header\">\r\n <tr class=\"header\">\r\n <th style=\"max-width: 3rem\" *ngIf=\"selectionType === 'checkbox'\">\r\n <p-tableHeaderCheckbox [disabled]=\"disabledHeadercheckbox\"></p-tableHeaderCheckbox>\r\n </th>\r\n <th style=\"max-width: 150px\" class=\"centered text-center\" *ngIf=\"hasExpandableIcon\">\r\n {{ addNameColumnExpand }}\r\n </th>\r\n <th style=\"max-width: 100px\" class=\"centered\" *ngIf=\"hasActions\">A\u00E7\u00F5es</th>\r\n <th\r\n *ngFor=\"let col of columns\"\r\n [ngStyle]=\"getColStyle(col)\"\r\n [pSortableColumn]=\"col.notSortable ? '' : col.field\"\r\n >\r\n {{ col.header }} <p-sortIcon *ngIf=\"!col.notSortable\" [field]=\"col.field\"></p-sortIcon>\r\n </th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-rowData let-item let-expanded=\"expanded\">\r\n <tr\r\n class=\"row\"\r\n [pSelectableRow]=\"rowData\"\r\n [ngClass]=\"{ expandable: expandable }\"\r\n [pRowToggler]=\"expandable ? item : undefined\"\r\n (click)=\"onRowClick(item)\"\r\n >\r\n <ng-container *ngIf=\"selectionType === 'checkbox'\">\r\n <td style=\"max-width: 3rem; padding-left: 10px\" class=\"flex justify-content-center align-items-center\">\r\n <p-tableCheckbox [value]=\"item\" [disabled]=\"item.disabledCheckBox\"></p-tableCheckbox>\r\n </td>\r\n </ng-container>\r\n <ng-container *ngIf=\"selectionType === 'radiobutton'\">\r\n <td style=\"max-width: 3rem; padding-left: 10px\" class=\"flex justify-content-center align-items-center\">\r\n <p-tableRadioButton [value]=\"item\"></p-tableRadioButton>\r\n </td>\r\n </ng-container>\r\n <td *ngIf=\"hasExpandableIcon\" style=\"max-width: 150px\" class=\"centered\">\r\n <p-menu #menu [model]=\"item.actions\" [popup]=\"true\" appendTo=\"body\"></p-menu>\r\n <i\r\n [ngClass]=\"\r\n expanded ? 'actions-menu-button pi pi-chevron-down' : 'actions-menu-button pi pi-chevron-right'\r\n \"\r\n ></i>\r\n </td>\r\n <td *ngIf=\"hasActions\" style=\"max-width: 100px\" class=\"centered\">\r\n <p-menu #menu [model]=\"item.actions\" [popup]=\"true\" appendTo=\"body\"></p-menu>\r\n <i class=\"actions-menu-button fas fa-cog\" (click)=\"menu.toggle($event)\"></i>\r\n </td>\r\n <ng-container *ngFor=\"let col of columns\">\r\n <td\r\n *ngIf=\"isHtmlCell(col)\"\r\n class=\"cell\"\r\n [innerHTML]=\"getCellContent(item, col)\"\r\n (click)=\"col && col.clickFunction && col.clickFunction(item)\"\r\n [ngStyle]=\"getColStyle(col)\"\r\n ></td>\r\n <td\r\n *ngIf=\"!isHtmlCell(col)\"\r\n class=\"cell\"\r\n (click)=\"col && col.clickFunction && col.clickFunction(item)\"\r\n [ngStyle]=\"getColStyle(col)\"\r\n >\r\n <vector-badge\r\n *ngIf=\"col.type === 'TEXT_BADGE' && !!col.getStatus\"\r\n [label]=\"item[col.field]\"\r\n [type]=\"col.getStatus(item[col.field])\"\r\n ></vector-badge>\r\n </td>\r\n </ng-container>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr class=\"row\">\r\n <td class=\"no-results\" [attr.colspan]=\"columns.length + 1\">Nenhum resultado encontrado</td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"paginatorright\"> </ng-template>\r\n <ng-template let-item pTemplate=\"paginatordropdownitem\"> {{ item.value }} </ng-template>\r\n <ng-template pTemplate=\"rowexpansion\" let-item>\r\n <tr>\r\n <td [attr.colspan]=\"columns.length + (hasActions ? 1 : 0)\">\r\n <ng-container *ngTemplateOutlet=\"expansionTemplate; context: { item }\"> </ng-container>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n </vector-panel>\r\n </div>\r\n</div>\r\n", styles: [".no-results{padding:15px;background-color:#fff;width:100%}.centered{display:flex;justify-content:center}.table-header-actions{display:flex;justify-content:flex-end;align-items:flex-end;width:100%;padding-right:7px;margin-bottom:15px!important}@media (min-width: 768px){.table-header-actions{margin-top:-3px}}.table-header-actions .export-button{padding:7px 10px;color:#fff;display:flex;align-items:center;border:none;border-radius:5px;margin:5px;font-size:.75rem;cursor:pointer}.table-header-actions .export-button.export-excel{background-color:var(--success-color)}.table-header-actions .export-button.export-excel:hover{background-color:var(--success-color-dark)}.table-header-actions .export-button.export-pdf{background-color:var(--error-color)}.table-header-actions .export-button.export-pdf:hover{background-color:var(--error-color-dark)}.table-header-actions .export-button i{color:#fff}.table-header-actions .export-button span{margin-left:5px}.table-header-actions .add-item-button{margin-left:10px}.actions-menu-button{font-size:23px;cursor:pointer;color:var(--theme-medium)}.expandable{cursor:pointer}\n"], components: [{ type: i1.FiltersComponent, selector: "vector-filters", inputs: ["fields"], outputs: ["onSearch", "formBuilded"] }, { type: i2.ButtonComponent, selector: "vector-button", inputs: ["disabled", "label", "type", "leftIcon", "rightIcon", "noShadow", "style"], outputs: ["onClick"] }, { type: i3.PanelComponent, selector: "vector-panel" }, { type: i4.TabView, selector: "p-tabView", inputs: ["orientation", "style", "styleClass", "controlClose", "scrollable", "activeIndex"], outputs: ["onChange", "onClose", "activeIndexChange"] }, { type: i4.TabPanel, selector: "p-tabPanel", inputs: ["closable", "headerStyle", "headerStyleClass", "cache", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "selected", "disabled", "header", "leftIcon", "rightIcon"] }, { type: i5.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollDelay", "virtualRowHeight", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "groupRowsByOrder", "minBufferPx", "maxBufferPx", "responsiveLayout", "breakpoint", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll"], outputs: ["selectAllChange", "selectionChange", "contextMenuSelectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { type: i5.TableHeaderCheckbox, selector: "p-tableHeaderCheckbox", inputs: ["disabled", "inputId", "name", "ariaLabel"] }, { type: i5.SortIcon, selector: "p-sortIcon", inputs: ["field"] }, { type: i5.TableCheckbox, selector: "p-tableCheckbox", inputs: ["disabled", "value", "index", "inputId", "name", "required", "ariaLabel"] }, { type: i5.TableRadioButton, selector: "p-tableRadioButton", inputs: ["disabled", "value", "index", "inputId", "name", "ariaLabel"] }, { type: i6.Menu, selector: "p-menu", inputs: ["model", "popup", "style", "styleClass", "appendTo", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions"], outputs: ["onShow", "onHide"] }, { type: i7.BadgeComponent, selector: "vector-badge", inputs: ["type", "label", "customColor", "customBackgroundColor"] }], directives: [{ type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i9.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { type: i8.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i5.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { type: i5.SelectableRow, selector: "[pSelectableRow]", inputs: ["pSelectableRow", "pSelectableRowIndex", "pSelectableRowDisabled"] }, { type: i8.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i5.RowToggler, selector: "[pRowToggler]", inputs: ["pRowToggler", "pRowTogglerDisabled"] }, { type: i8.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }] });
|
|
259
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: DataTableComponent, decorators: [{
|
|
260
|
+
type: Component,
|
|
261
|
+
args: [{ selector: 'vector-data-table', template: "<div class=\"grid\">\r\n <div class=\"col-12\">\r\n <vector-filters\r\n [fields]=\"filters\"\r\n (onSearch)=\"lazyLoaded({ filter: true, data: $event })\"\r\n (formBuilded)=\"subscribeToFilterChanges()\"\r\n ></vector-filters>\r\n </div>\r\n <div class=\"table-header-actions field\" *ngIf=\"addItemLabel || exportExcel || exportPDF\">\r\n <button *ngIf=\"exportExcel\" (click)=\"onExportExcel.emit()\" class=\"export-button export-excel\">\r\n <i class=\"fas fa-file\"></i><span>Excel</span>\r\n </button>\r\n <button *ngIf=\"exportPDF\" (click)=\"onExportPDF.emit()\" class=\"export-button export-pdf\">\r\n <i class=\"fas fa-file\"></i><span>PDF</span>\r\n </button>\r\n <vector-button\r\n *ngFor=\"let button of customButtons\"\r\n class=\"add-item-button\"\r\n [label]=\"button.label\"\r\n (click)=\"button.clickFunction()\"\r\n [rightIcon]=\"addItemButtonPlusSign ? 'pi pi-plus' : ''\"\r\n ></vector-button>\r\n <vector-button\r\n *ngIf=\"addItemLabel\"\r\n class=\"add-item-button\"\r\n [label]=\"addItemLabel\"\r\n (click)=\"onAdd.emit()\"\r\n [rightIcon]=\"addItemButtonPlusSign ? 'pi pi-plus' : ''\"\r\n ></vector-button>\r\n </div>\r\n <div class=\"col-12\">\r\n <vector-panel class=\"data-table-panel\">\r\n <p-tabView (onChange)=\"onTabChange($event)\" *ngIf=\"tabs?.length\">\r\n <p-tabPanel *ngFor=\"let tab of tabs\" [header]=\"tab.name\"></p-tabPanel>\r\n </p-tabView>\r\n <p-table\r\n currentPageReportTemplate=\"Mostrando {first} at\u00E9 {last} de {totalRecords} registros\"\r\n sortMode=\"single\"\r\n [rows]=\"10\"\r\n [lazy]=\"pagination && !virtualPagination\"\r\n [value]=\"data\"\r\n [paginator]=\"pagination\"\r\n [totalRecords]=\"totalRecords\"\r\n [showCurrentPageReport]=\"true\"\r\n [rowsPerPageOptions]=\"[10, 25, 50, 100]\"\r\n [responsive]=\"true\"\r\n [resizableColumns]=\"true\"\r\n [scrollable]=\"true\"\r\n scrollDirection=\"vertical\"\r\n responsiveLayout=\"scroll\"\r\n dataKey=\"id\"\r\n [scrollHeight]=\"height\"\r\n [attr.selectionMode]=\"selectionMode\"\r\n [(selection)]=\"selectedItems\"\r\n (onRowSelect)=\"changeSelectedItems($event)\"\r\n (onHeaderCheckboxToggle)=\"changeSelectedItems($event)\"\r\n (onRowUnselect)=\"changeSelectedItems($event)\"\r\n (onLazyLoad)=\"lazyLoaded({ filter: false, data: $event })\"\r\n (selectionChange)=\"onSelectionChange($event)\"\r\n >\r\n <ng-template pTemplate=\"header\">\r\n <tr class=\"header\">\r\n <th style=\"max-width: 3rem\" *ngIf=\"selectionType === 'checkbox'\">\r\n <p-tableHeaderCheckbox [disabled]=\"disabledHeadercheckbox\"></p-tableHeaderCheckbox>\r\n </th>\r\n <th style=\"max-width: 150px\" class=\"centered text-center\" *ngIf=\"hasExpandableIcon\">\r\n {{ addNameColumnExpand }}\r\n </th>\r\n <th style=\"max-width: 100px\" class=\"centered\" *ngIf=\"hasActions\">A\u00E7\u00F5es</th>\r\n <th\r\n *ngFor=\"let col of columns\"\r\n [ngStyle]=\"getColStyle(col)\"\r\n [pSortableColumn]=\"col.notSortable ? '' : col.field\"\r\n >\r\n {{ col.header }} <p-sortIcon *ngIf=\"!col.notSortable\" [field]=\"col.field\"></p-sortIcon>\r\n </th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-rowData let-item let-expanded=\"expanded\">\r\n <tr\r\n class=\"row\"\r\n [pSelectableRow]=\"rowData\"\r\n [ngClass]=\"{ expandable: expandable }\"\r\n [pRowToggler]=\"expandable ? item : undefined\"\r\n (click)=\"onRowClick(item)\"\r\n >\r\n <ng-container *ngIf=\"selectionType === 'checkbox'\">\r\n <td style=\"max-width: 3rem; padding-left: 10px\" class=\"flex justify-content-center align-items-center\">\r\n <p-tableCheckbox [value]=\"item\" [disabled]=\"item.disabledCheckBox\"></p-tableCheckbox>\r\n </td>\r\n </ng-container>\r\n <ng-container *ngIf=\"selectionType === 'radiobutton'\">\r\n <td style=\"max-width: 3rem; padding-left: 10px\" class=\"flex justify-content-center align-items-center\">\r\n <p-tableRadioButton [value]=\"item\"></p-tableRadioButton>\r\n </td>\r\n </ng-container>\r\n <td *ngIf=\"hasExpandableIcon\" style=\"max-width: 150px\" class=\"centered\">\r\n <p-menu #menu [model]=\"item.actions\" [popup]=\"true\" appendTo=\"body\"></p-menu>\r\n <i\r\n [ngClass]=\"\r\n expanded ? 'actions-menu-button pi pi-chevron-down' : 'actions-menu-button pi pi-chevron-right'\r\n \"\r\n ></i>\r\n </td>\r\n <td *ngIf=\"hasActions\" style=\"max-width: 100px\" class=\"centered\">\r\n <p-menu #menu [model]=\"item.actions\" [popup]=\"true\" appendTo=\"body\"></p-menu>\r\n <i class=\"actions-menu-button fas fa-cog\" (click)=\"menu.toggle($event)\"></i>\r\n </td>\r\n <ng-container *ngFor=\"let col of columns\">\r\n <td\r\n *ngIf=\"isHtmlCell(col)\"\r\n class=\"cell\"\r\n [innerHTML]=\"getCellContent(item, col)\"\r\n (click)=\"col && col.clickFunction && col.clickFunction(item)\"\r\n [ngStyle]=\"getColStyle(col)\"\r\n ></td>\r\n <td\r\n *ngIf=\"!isHtmlCell(col)\"\r\n class=\"cell\"\r\n (click)=\"col && col.clickFunction && col.clickFunction(item)\"\r\n [ngStyle]=\"getColStyle(col)\"\r\n >\r\n <vector-badge\r\n *ngIf=\"col.type === 'TEXT_BADGE' && !!col.getStatus\"\r\n [label]=\"item[col.field]\"\r\n [type]=\"col.getStatus(item[col.field])\"\r\n ></vector-badge>\r\n </td>\r\n </ng-container>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr class=\"row\">\r\n <td class=\"no-results\" [attr.colspan]=\"columns.length + 1\">Nenhum resultado encontrado</td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"paginatorright\"> </ng-template>\r\n <ng-template let-item pTemplate=\"paginatordropdownitem\"> {{ item.value }} </ng-template>\r\n <ng-template pTemplate=\"rowexpansion\" let-item>\r\n <tr>\r\n <td [attr.colspan]=\"columns.length + (hasActions ? 1 : 0)\">\r\n <ng-container *ngTemplateOutlet=\"expansionTemplate; context: { item }\"> </ng-container>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n </vector-panel>\r\n </div>\r\n</div>\r\n", styles: [".no-results{padding:15px;background-color:#fff;width:100%}.centered{display:flex;justify-content:center}.table-header-actions{display:flex;justify-content:flex-end;align-items:flex-end;width:100%;padding-right:7px;margin-bottom:15px!important}@media (min-width: 768px){.table-header-actions{margin-top:-3px}}.table-header-actions .export-button{padding:7px 10px;color:#fff;display:flex;align-items:center;border:none;border-radius:5px;margin:5px;font-size:.75rem;cursor:pointer}.table-header-actions .export-button.export-excel{background-color:var(--success-color)}.table-header-actions .export-button.export-excel:hover{background-color:var(--success-color-dark)}.table-header-actions .export-button.export-pdf{background-color:var(--error-color)}.table-header-actions .export-button.export-pdf:hover{background-color:var(--error-color-dark)}.table-header-actions .export-button i{color:#fff}.table-header-actions .export-button span{margin-left:5px}.table-header-actions .add-item-button{margin-left:10px}.actions-menu-button{font-size:23px;cursor:pointer;color:var(--theme-medium)}.expandable{cursor:pointer}\n"] }]
|
|
262
|
+
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { columns: [{
|
|
263
|
+
type: Input
|
|
264
|
+
}], data: [{
|
|
265
|
+
type: Input
|
|
266
|
+
}], exportExcel: [{
|
|
267
|
+
type: Input
|
|
268
|
+
}], exportPDF: [{
|
|
269
|
+
type: Input
|
|
270
|
+
}], totalRecords: [{
|
|
271
|
+
type: Input
|
|
272
|
+
}], disabledHeadercheckbox: [{
|
|
273
|
+
type: Input
|
|
274
|
+
}], filters: [{
|
|
275
|
+
type: Input
|
|
276
|
+
}], addItemLabel: [{
|
|
277
|
+
type: Input
|
|
278
|
+
}], pagination: [{
|
|
279
|
+
type: Input
|
|
280
|
+
}], virtualPagination: [{
|
|
281
|
+
type: Input
|
|
282
|
+
}], tabs: [{
|
|
283
|
+
type: Input
|
|
284
|
+
}], customButtons: [{
|
|
285
|
+
type: Input
|
|
286
|
+
}], addItemButtonPlusSign: [{
|
|
287
|
+
type: Input
|
|
288
|
+
}], hasActions: [{
|
|
289
|
+
type: Input
|
|
290
|
+
}], hasExpandableIcon: [{
|
|
291
|
+
type: Input
|
|
292
|
+
}], addNameColumnExpand: [{
|
|
293
|
+
type: Input
|
|
294
|
+
}], expandable: [{
|
|
295
|
+
type: Input
|
|
296
|
+
}], expansionTemplate: [{
|
|
297
|
+
type: Input
|
|
298
|
+
}], selectionMode: [{
|
|
299
|
+
type: Input
|
|
300
|
+
}], selectionType: [{
|
|
301
|
+
type: Input
|
|
302
|
+
}], height: [{
|
|
303
|
+
type: Input
|
|
304
|
+
}], onLazyLoad: [{
|
|
305
|
+
type: Output
|
|
306
|
+
}], onFilter: [{
|
|
307
|
+
type: Output
|
|
308
|
+
}], onAdd: [{
|
|
309
|
+
type: Output
|
|
310
|
+
}], onExportExcel: [{
|
|
311
|
+
type: Output
|
|
312
|
+
}], onExportPDF: [{
|
|
313
|
+
type: Output
|
|
314
|
+
}], onSelectedRows: [{
|
|
315
|
+
type: Output
|
|
316
|
+
}], onFilterChanged: [{
|
|
317
|
+
type: Output
|
|
318
|
+
}], filtersComponent: [{
|
|
319
|
+
type: ViewChild,
|
|
320
|
+
args: [FiltersComponent, { static: true }]
|
|
321
|
+
}] } });
|
|
322
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdmVjdG9yLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2ZpZWxkcy9kYXRhLXRhYmxlL2RhdGEtdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZlY3Rvci1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9maWVsZHMvZGF0YS10YWJsZS9kYXRhLXRhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBRU4sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDakMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFnQyxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2RSxPQUFPLEVBQXVDLGVBQWUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3hHLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxQyxPQUFPLEVBQWUsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7Ozs7Ozs7Ozs7QUFPN0UsTUFBTSxPQUFPLGtCQUFrQjtJQStHN0IsWUFBbUIsRUFBcUI7UUFBckIsT0FBRSxHQUFGLEVBQUUsQ0FBbUI7UUE3R2pDLFlBQU8sR0FBa0IsRUFBRSxDQUFDO1FBRTVCLFNBQUksR0FBVSxFQUFFLENBQUM7UUFFakIsZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFFcEIsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUVsQixpQkFBWSxHQUFHLENBQUMsQ0FBQztRQUVqQiwyQkFBc0IsR0FBRyxLQUFLLENBQUM7UUFFL0IsWUFBTyxHQUFrQixFQUFFLENBQUM7UUFFNUIsaUJBQVksR0FBRyxFQUFFLENBQUM7UUFFbEIsZUFBVSxHQUFHLElBQUksQ0FBQztRQUVsQixzQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFTMUIsMEJBQXFCLEdBQUcsS0FBSyxDQUFDO1FBRTlCLGVBQVUsR0FBWSxJQUFJLENBQUM7UUFFM0Isc0JBQWlCLEdBQUcsS0FBSyxDQUFDO1FBRTFCLHdCQUFtQixHQUFHLEVBQUUsQ0FBQztRQUN2QixlQUFVLEdBQUcsS0FBSyxDQUFDO1FBaUJyQixrQkFBYSxHQUFzQyxJQUFJLENBQUM7UUFxQnhELGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBMEIsQ0FBQztRQUV4RCxhQUFRLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUVuQyxVQUFLLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUVqQyxrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFFekMsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBRXZDLG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUV6QyxvQkFBZSxHQUFHLElBQUksWUFBWSxFQUFzQixDQUFDO1FBSXpELGtCQUFhLEdBQVEsRUFBRSxDQUFDO1FBWXZCLG1CQUFjLEdBQWlDLElBQUksQ0FBQztRQUNwRCxZQUFPLEdBQVcsT0FBTyxDQUFDO1FBQzFCLFVBQUssR0FBZSxFQUFFLENBQUM7UUFDdkIsVUFBSyxHQUFHLENBQUMsQ0FBQztRQUNWLHlCQUFvQixHQUFHLEtBQUssQ0FBQztRQUc3Qix3QkFBbUIsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBRU4sQ0FBQztJQTFGNUMsSUFDVyxJQUFJLENBQUMsS0FBaUI7UUFDL0IsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQWFELElBQ1csYUFBYSxDQUFDLGNBQWM7UUFDckMsUUFBUSxjQUFjLEVBQUU7WUFDdEIsS0FBSyxRQUFRO2dCQUNYLElBQUksQ0FBQyxjQUFjLEdBQUcsUUFBUSxDQUFDO2dCQUMvQixNQUFNO1lBQ1IsS0FBSyxVQUFVO2dCQUNiLElBQUksQ0FBQyxjQUFjLEdBQUcsVUFBVSxDQUFDO2dCQUNqQyxNQUFNO1lBQ1I7Z0JBQ0UsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7Z0JBQzNCLE1BQU07U0FDVDtJQUNILENBQUM7SUFHRCxJQUNXLE1BQU0sQ0FBQyxPQUFlO1FBQy9CLFFBQVEsT0FBTyxFQUFFO1lBQ2YsS0FBSyxPQUFPO2dCQUNWLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO2dCQUN2QixNQUFNO1lBQ1IsS0FBSyxRQUFRO2dCQUNYLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO2dCQUN2QixNQUFNO1lBQ1IsS0FBSyxPQUFPO2dCQUNWLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO2dCQUN2QixNQUFNO1lBQ1IsS0FBSyxNQUFNO2dCQUNULElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO2dCQUN0QixNQUFNO1lBQ1I7Z0JBQ0UsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7U0FDMUI7SUFDSCxDQUFDO0lBb0JELElBQUksSUFBSTtRQUNOLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBQ0QsSUFBSSxNQUFNO1FBQ1IsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3RCLENBQUM7SUFDRCxJQUFJLGFBQWE7UUFDZixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDN0IsQ0FBQztJQWFELFFBQVE7UUFDTixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNoQixJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQztTQUN2QjtRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtZQUM5QyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFLENBQUM7U0FDakM7SUFDSCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUN6QyxDQUFDO0lBRUQsV0FBVyxDQUFDLEdBQWdCO1FBQzFCLE9BQU8sRUFBRSxXQUFXLEVBQUUsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3BDLENBQUM7SUFFRCxVQUFVLENBQUMsU0FBeUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFO1FBQ2pHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFO1lBQ2xCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQ3ZDLE9BQU87b0JBQ0wsSUFBSSxFQUFFLEdBQUcsQ0FBQyxLQUFLO29CQUNmLElBQUksRUFBRSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRTtvQkFDN0YsU0FBUyxFQUFFLElBQUk7b0JBQ2YsTUFBTSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFO29CQUNuQyxVQUFVLEVBQUUsSUFBSTtpQkFDakIsQ0FBQztZQUNKLENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO2dCQUNuQixPQUFPLENBQUMsT0FBTyxDQUFDO29CQUNkLElBQUksRUFBRSxRQUFRO29CQUNkLElBQUksRUFBRSxRQUFRO29CQUNkLFNBQVMsRUFBRSxJQUFJO29CQUNmLE1BQU0sRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRTtvQkFDbkMsVUFBVSxFQUFFLElBQUk7aUJBQ2pCLENBQUMsQ0FBQzthQUNKO1lBQ0QsSUFBSSxDQUFDLGtCQUFrQixHQUFHO2dCQUN4QixHQUFHLENBQUMsSUFBSSxDQUFDLGtCQUFrQixJQUFLLEVBQVUsQ0FBQztnQkFDM0MsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUM7Z0JBQzlDLEtBQUssRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUs7Z0JBQ3hCLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUk7Z0JBQ3hCLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFO2dCQUNsQixLQUFLLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTO29CQUMxQixDQUFDLENBQUM7d0JBQ0U7NEJBQ0UsTUFBTSxFQUNKLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxLQUFLLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs0QkFDbEcsR0FBRyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNO3lCQUNoRDtxQkFDRjtvQkFDSCxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDO2dCQUNoQyxPQUFPLEVBQUUsT0FBTzthQUNqQixDQUFDO1NBQ0g7YUFBTTtZQUNMLElBQUksQ0FBQyxrQkFBa0IsR0FBRztnQkFDeEIsR0FBRyxJQUFJLENBQUMsa0JBQWtCO2dCQUMxQixHQUFHLE1BQU0sQ0FBQyxJQUFJO2dCQUNkLEtBQUssRUFBRSxDQUFDO2FBQ1QsQ0FBQztZQUNGLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtnQkFDckIsSUFBSSxDQUFDLGtCQUFrQixHQUFHO29CQUN4QixHQUFHLENBQUMsSUFBSSxDQUFDLGtCQUFrQixJQUFLLEVBQVUsQ0FBQztvQkFDM0MsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRTtpQkFDdEMsQ0FBQzthQUNIO1NBQ0Y7UUFFRCxJQUFJLElBQUksQ0FBQyxvQkFBb0IsRUFBRTtZQUM3QixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztTQUMvQztRQUNELElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUM7SUFDbkMsQ0FBQztJQUVELGNBQWMsQ0FBQyxJQUFTLEVBQUUsR0FBZ0I7UUFDeEMsSUFBSSxPQUFPLEdBQUcsZ0NBQWdDLEdBQUcsQ0FBQyxNQUFNLDZCQUE2QixDQUFDO1FBQ3RGLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssZUFBZSxDQUFDLElBQUksRUFBRTtZQUNsRCxPQUFPLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDbEM7UUFFRCxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssZUFBZSxDQUFDLFlBQVksRUFBRTtZQUM3QyxPQUFPLElBQUksZ0JBQWdCLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsU0FBUyxDQUFDO1NBQ2xIO1FBRUQsSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLGVBQWUsQ0FBQyxPQUFPLEVBQUU7WUFDeEMsT0FBTyxJQUFJLG1FQUNULElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLDhCQUE4QixDQUFDLENBQUMsQ0FBQyw4QkFDckQsY0FBYyxDQUFDO1NBQ2hCO1FBRUQsSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLGVBQWUsQ0FBQyxJQUFJLElBQUksR0FBRyxDQUFDLGlCQUFpQixFQUFFO1lBQzlELE9BQU8sSUFBSSxHQUFHLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1NBQ25EO1FBRUQsSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLGVBQWUsQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUM1RCxNQUFNLFFBQVEsR0FDWixJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQzdHLE9BQU8sSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUFDLENBQUM7U0FDbEQ7UUFFRCxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssZUFBZSxDQUFDLFlBQVksRUFBRTtZQUM3QyxPQUFPLElBQUkseUVBQXlFLElBQUksQ0FBQyxjQUFjLENBQ3JHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQ2hCLGNBQWMsQ0FBQztTQUNqQjtRQUVELElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxlQUFlLENBQUMsb0JBQW9CLEVBQUU7WUFDckQsT0FBTyxJQUFJLHlFQUF5RSxJQUFJLENBQUMsb0JBQW9CLENBQzNHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQ2hCLGNBQWMsQ0FBQztTQUNqQjtRQUVELElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxlQUFlLENBQUMsTUFBTSxFQUFFO1lBQ3ZDLE9BQU8sSUFBSSw0Q0FDVCxHQUFHLENBQUMsSUFBSSxJQUFJLFdBQ2QsOENBQThDLENBQUM7U0FDaEQ7UUFFRCxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssZUFBZSxDQUFDLElBQUksRUFBRTtZQUNyQyxPQUFPLElBQUksUUFBUSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDbkU7UUFFRCxPQUFPLElBQUksU0FBUyxDQUFDO1FBQ3JCLE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxXQUFXLENBQUMsTUFBVztRQUNyQixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRCx3QkFBd0I7UUFDdEIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzlDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLFNBQVMsQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDM0UsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FDMUIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLFNBQVM7aUJBQzdCLEdBQUcsQ0FBQyxHQUFHLENBQUM7Z0JBQ1QsRUFBRSxZQUFZLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztpQkFDckMsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ25CLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQ25ELENBQUMsQ0FBQyxDQUNMLENBQUM7WUFDRixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDckcsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsVUFBVSxDQUFDLElBQVM7UUFDbEIsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDekIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsSUFBSSxjQUFjO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVPLGNBQWMsQ0FBQyxNQUFjO1FBQ25DLFFBQVEsTUFBTSxFQUFFO1lBQ2QsS0FBSyxNQUFNLENBQUMsT0FBTztnQkFDakIsT0FBTyxTQUFTLENBQUM7WUFDbkIsS0FBSyxNQUFNLENBQUMsUUFBUTtnQkFDbEIsT0FBTyxTQUFTLENBQUM7WUFDbkIsS0FBSyxNQUFNLENBQUMsUUFBUTtnQkFDbEIsT0FBTyxPQUFPLENBQUM7U0FDbEI7UUFDRCxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFTyxvQkFBb0IsQ0FBQyxNQUFlO1FBQzFDLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztJQUN0QyxDQUFDO0lBRU0sbUJBQW1CLENBQUMsS0FBVTtRQUNuQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVNLFVBQVUsQ0FBQyxHQUFnQjtRQUNoQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRTtZQUNiLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxPQUFPLENBQUMsQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRU0saUJBQWlCLENBQUMsU0FBYztRQUNyQyxLQUFLLElBQUksQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDOUMsSUFBSSxJQUFJLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3hCLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFO2dCQUN6QixTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQzthQUN4QjtTQUNGO1FBQ0QsSUFBSSxDQUFDLGFBQWEsR0FBRyxTQUFTLENBQUM7SUFDakMsQ0FBQzs7K0dBbFRVLGtCQUFrQjttR0FBbEIsa0JBQWtCLGc4QkF1RmxCLGdCQUFnQiw4REMvRzdCLHkrTkFxSkE7MkZEN0hhLGtCQUFrQjtrQkFMOUIsU0FBUzsrQkFDRSxtQkFBbUI7d0dBTXRCLE9BQU87c0JBRGIsS0FBSztnQkFHQyxJQUFJO3NCQURWLEtBQUs7Z0JBR0MsV0FBVztzQkFEakIsS0FBSztnQkFHQyxTQUFTO3NCQURmLEtBQUs7Z0JBR0MsWUFBWTtzQkFEbEIsS0FBSztnQkFHQyxzQkFBc0I7c0JBRDVCLEtBQUs7Z0JBR0MsT0FBTztzQkFEYixLQUFLO2dCQUdDLFlBQVk7c0JBRGxCLEtBQUs7Z0JBR0MsVUFBVTtzQkFEaEIsS0FBSztnQkFHQyxpQkFBaUI7c0JBRHZCLEtBQUs7Z0JBR0ssSUFBSTtzQkFEZCxLQUFLO2dCQU1DLGFBQWE7c0JBRG5CLEtBQUs7Z0JBR0MscUJBQXFCO3NCQUQzQixLQUFLO2dCQUdDLFVBQVU7c0JBRGhCLEtBQUs7Z0JBR0MsaUJBQWlCO3NCQUR2QixLQUFLO2dCQUdDLG1CQUFtQjtzQkFEekIsS0FBSztnQkFFRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFFSyxhQUFhO3NCQUR2QixLQUFLO2dCQWVDLGFBQWE7c0JBRG5CLEtBQUs7Z0JBR0ssTUFBTTtzQkFEaEIsS0FBSztnQkFvQkMsVUFBVTtzQkFEaEIsTUFBTTtnQkFHQSxRQUFRO3NCQURkLE1BQU07Z0JBR0EsS0FBSztzQkFEWCxNQUFNO2dCQUdBLGFBQWE7c0JBRG5CLE1BQU07Z0JBR0EsV0FBVztzQkFEakIsTUFBTTtnQkFHQSxjQUFjO3NCQURwQixNQUFNO2dCQUdBLGVBQWU7c0JBRHJCLE1BQU07Z0JBR0EsZ0JBQWdCO3NCQUR0QixTQUFTO3VCQUFDLGdCQUFnQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBJbnB1dCxcclxuICBPbkRlc3Ryb3ksXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxuICBUZW1wbGF0ZVJlZixcclxuICBWaWV3Q2hpbGQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IERhdGVUaW1lIH0gZnJvbSAnbHV4b24nO1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBGaWx0ZXJDaGFuZ2VkRXZlbnQsIExpc3RJdGVtLCBTdGF0dXMgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBEYXRhVGFibGVMYXp5TG9hZEV2ZW50LCBUYWJsZUNvbHVtbiwgVGFibGVDb2x1bW5UeXBlIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2RhdGEtdGFibGUubW9kZWwnO1xyXG5pbXBvcnQgeyBNYXNrVXRpbCB9IGZyb20gJy4uLy4uLy4uL3V0aWxzJztcclxuaW1wb3J0IHsgRmlsdGVyRmllbGQsIEZpbHRlcnNDb21wb25lbnQgfSBmcm9tICcuLi9maWx0ZXJzL2ZpbHRlcnMuY29tcG9uZW50JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAndmVjdG9yLWRhdGEtdGFibGUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRhLXRhYmxlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9kYXRhLXRhYmxlLmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEYXRhVGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgY29sdW1uczogVGFibGVDb2x1bW5bXSA9IFtdO1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGRhdGE6IGFueVtdID0gW107XHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgZXhwb3J0RXhjZWwgPSBmYWxzZTtcclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBleHBvcnRQREYgPSBmYWxzZTtcclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyB0b3RhbFJlY29yZHMgPSAwO1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGRpc2FibGVkSGVhZGVyY2hlY2tib3ggPSBmYWxzZTtcclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBmaWx0ZXJzOiBGaWx0ZXJGaWVsZFtdID0gW107XHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgYWRkSXRlbUxhYmVsID0gJyc7XHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgcGFnaW5hdGlvbiA9IHRydWU7XHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgdmlydHVhbFBhZ2luYXRpb24gPSBmYWxzZTtcclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBzZXQgdGFicyhfdGFiczogTGlzdEl0ZW1bXSkge1xyXG4gICAgdGhpcy5fdGFicyA9IF90YWJzO1xyXG4gICAgdGhpcy5fdGFiU2VsZWN0ZWQgPSBfdGFic1swXTtcclxuICB9XHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgY3VzdG9tQnV0dG9uczogeyBsYWJlbDogc3RyaW5nOyBjbGlja0Z1bmN0aW9uOiBGdW5jdGlvbiB9W10gfCB1bmRlZmluZWQ7XHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgYWRkSXRlbUJ1dHRvblBsdXNTaWduID0gZmFsc2U7XHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgaGFzQWN0aW9uczogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgaGFzRXhwYW5kYWJsZUljb24gPSBmYWxzZTtcclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBhZGROYW1lQ29sdW1uRXhwYW5kID0gJyc7XHJcbiAgQElucHV0KCkgZXhwYW5kYWJsZSA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGV4cGFuc2lvblRlbXBsYXRlITogVGVtcGxhdGVSZWY8YW55PiB8IG51bGw7XHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgc2V0IHNlbGVjdGlvbk1vZGUoX3NlbGVjdGlvbk1vZGUpIHtcclxuICAgIHN3aXRjaCAoX3NlbGVjdGlvbk1vZGUpIHtcclxuICAgICAgY2FzZSAnc2luZ2xlJzpcclxuICAgICAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlID0gJ3NpbmdsZSc7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ211bHRpcGxlJzpcclxuICAgICAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlID0gJ211bHRpcGxlJztcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlID0gbnVsbDtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgc2VsZWN0aW9uVHlwZTogJ2NoZWNrYm94JyB8ICdyYWRpb2J1dHRvbicgfCBudWxsID0gbnVsbDtcclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBzZXQgaGVpZ2h0KF9oZWlnaHQ6IHN0cmluZykge1xyXG4gICAgc3dpdGNoIChfaGVpZ2h0KSB7XHJcbiAgICAgIGNhc2UgJ3NtYWxsJzpcclxuICAgICAgICB0aGlzLl9oZWlnaHQgPSAnMzAwcHgnO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdtZWRpdW0nOlxyXG4gICAgICAgIHRoaXMuX2hlaWdodCA9ICc1MDBweCc7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2xhcmdlJzpcclxuICAgICAgICB0aGlzLl9oZWlnaHQgPSAnNzAwcHgnO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdmdWxsJzpcclxuICAgICAgICB0aGlzLl9oZWlnaHQgPSAnZmxleCc7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgdGhpcy5faGVpZ2h0ID0gJzMwMHB4JztcclxuICAgIH1cclxuICB9XHJcbiAgQE91dHB1dCgpXHJcbiAgcHVibGljIG9uTGF6eUxvYWQgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGFUYWJsZUxhenlMb2FkRXZlbnQ+KCk7XHJcbiAgQE91dHB1dCgpXHJcbiAgcHVibGljIG9uRmlsdGVyID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpXHJcbiAgcHVibGljIG9uQWRkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG4gIEBPdXRwdXQoKVxyXG4gIHB1YmxpYyBvbkV4cG9ydEV4Y2VsID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG4gIEBPdXRwdXQoKVxyXG4gIHB1YmxpYyBvbkV4cG9ydFBERiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuICBAT3V0cHV0KClcclxuICBwdWJsaWMgb25TZWxlY3RlZFJvd3MgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KClcclxuICBwdWJsaWMgb25GaWx0ZXJDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxGaWx0ZXJDaGFuZ2VkRXZlbnQ+KCk7XHJcbiAgQFZpZXdDaGlsZChGaWx0ZXJzQ29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIHB1YmxpYyBmaWx0ZXJzQ29tcG9uZW50OiBGaWx0ZXJzQ29tcG9uZW50IHwgdW5kZWZpbmVkO1xyXG5cclxuICBwdWJsaWMgc2VsZWN0ZWRJdGVtczogYW55ID0gW107XHJcblxyXG4gIGdldCB0YWJzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3RhYnM7XHJcbiAgfVxyXG4gIGdldCBoZWlnaHQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5faGVpZ2h0O1xyXG4gIH1cclxuICBnZXQgc2VsZWN0aW9uTW9kZSgpIHtcclxuICAgIHJldHVybiB0aGlzLl9zZWxlY3Rpb25Nb2RlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc2VsZWN0aW9uTW9kZTogJ3NpbmdsZScgfCAnbXVsdGlwbGUnIHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBfaGVpZ2h0OiBzdHJpbmcgPSAnc21hbGwnO1xyXG4gIHByaXZhdGUgX3RhYnM6IExpc3RJdGVtW10gPSBbXTtcclxuICBwcml2YXRlIF9kcmF3ID0gMTtcclxuICBwcml2YXRlIF9maXJzdExhenlMb2FkZWREb25lID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfbGFzdExhenlMb2FkRXZlbnQ6IERhdGFUYWJsZUxhenlMb2FkRXZlbnQgfCB1bmRlZmluZWQ7XHJcbiAgcHJpdmF0ZSBfdGFiU2VsZWN0ZWQ6IExpc3RJdGVtIHwgdW5kZWZpbmVkO1xyXG4gIHByaXZhdGUgX2ZpbHRlclN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcclxuXHJcbiAgY29uc3RydWN0b3IocHVibGljIGNkOiBDaGFuZ2VEZXRlY3RvclJlZikge31cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuaGVpZ2h0KSB7XHJcbiAgICAgIHRoaXMuaGVpZ2h0ID0gJ3NtYWxsJztcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMucGFnaW5hdGlvbiB8fCB0aGlzLnZpcnR1YWxQYWdpbmF0aW9uKSB7XHJcbiAgICAgIHRoaXMuZmlsdGVyc0NvbXBvbmVudD8uc2VhcmNoKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2ZpbHRlclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q29sU3R5bGUoY29sOiBUYWJsZUNvbHVtbikge1xyXG4gICAgcmV0dXJuIHsgJ21pbi13aWR0aCc6IGNvbC53aWR0aCB9O1xyXG4gIH1cclxuXHJcbiAgbGF6eUxvYWRlZChwYXJhbXM6IHsgZmlsdGVyOiBib29sZWFuOyBkYXRhOiBhbnkgfSA9IHsgZmlsdGVyOiBmYWxzZSwgZGF0YTogeyBzdGFydDogMCwgcm93czogMTAgfSB9KSB7XHJcbiAgICBpZiAoIXBhcmFtcy5maWx0ZXIpIHtcclxuICAgICAgY29uc3QgY29sdW1ucyA9IHRoaXMuY29sdW1ucy5tYXAoKGNvbCkgPT4ge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICBkYXRhOiBjb2wuZmllbGQsXHJcbiAgICAgICAgICBuYW1lOiBgJHtjb2wuZmllbGQuc3Vic3RyaW5nKDAsIDEpLnRvVXBwZXJDYXNlKCl9JHtjb2wuZmllbGQuc3Vic3RyaW5nKDEsIGNvbC5maWVsZC5sZW5ndGgpfWAsXHJcbiAgICAgICAgICBvcmRlcmFibGU6IHRydWUsXHJcbiAgICAgICAgICBzZWFyY2g6IHsgdmFsdWU6ICcnLCByZWdleDogZmFsc2UgfSxcclxuICAgICAgICAgIHNlYXJjaGFibGU6IHRydWUsXHJcbiAgICAgICAgfTtcclxuICAgICAgfSk7XHJcbiAgICAgIGlmICh0aGlzLmhhc0FjdGlvbnMpIHtcclxuICAgICAgICBjb2x1bW5zLnVuc2hpZnQoe1xyXG4gICAgICAgICAgZGF0YTogJ2FjdGl2ZScsXHJcbiAgICAgICAgICBuYW1lOiAnQWN0aXZlJyxcclxuICAgICAgICAgIG9yZGVyYWJsZTogdHJ1ZSxcclxuICAgICAgICAgIHNlYXJjaDogeyB2YWx1ZTogJycsIHJlZ2V4OiBmYWxzZSB9LFxyXG4gICAgICAgICAgc2VhcmNoYWJsZTogdHJ1ZSxcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLl9sYXN0TGF6eUxvYWRFdmVudCA9IHtcclxuICAgICAgICAuLi4odGhpcy5fbGFzdExhenlMb2FkRXZlbnQgfHwgKHt9IGFzIGFueSkpLFxyXG4gICAgICAgIHBhZ2U6IHBhcmFtcy5kYXRhLmZpcnN0IC8gcGFyYW1zLmRhdGEucm93cyArIDEsXHJcbiAgICAgICAgc3RhcnQ6IHBhcmFtcy5kYXRhLmZpcnN0LFxyXG4gICAgICAgIGxlbmd0aDogcGFyYW1zLmRhdGEucm93cyxcclxuICAgICAgICBkcmF3OiB0aGlzLl9kcmF3KyssXHJcbiAgICAgICAgb3JkZXI6IHBhcmFtcy5kYXRhLnNvcnRGaWVsZFxyXG4gICAgICAgICAgPyBbXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgY29sdW1uOlxyXG4gICAgICAgICAgICAgICAgICB0aGlzLmNvbHVtbnMuZmluZEluZGV4KChjb2wpID0+IGNvbC5maWVsZCA9PT0gcGFyYW1zLmRhdGEuc29ydEZpZWxkKSArICh0aGlzLmhhc0FjdGlvbnMgPyAxIDogMCksXHJcbiAgICAgICAgICAgICAgICBkaXI6IHBhcmFtcy5kYXRhLnNvcnRPcmRlciA+IDAgPyAnYXNjJyA6ICdkZXNjJyxcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgICA6IFt7IGNvbHVtbjogMCwgZGlyOiAnZGVzYycgfV0sXHJcbiAgICAgICAgY29sdW1uczogY29sdW1ucyxcclxuICAgICAgfTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2xhc3RMYXp5TG9hZEV2ZW50ID0ge1xyXG4gICAgICAgIC4uLnRoaXMuX2xhc3RMYXp5TG9hZEV2ZW50LFxyXG4gICAgICAgIC4uLnBhcmFtcy5kYXRhLFxyXG4gICAgICAgIHN0YXJ0OiAwLFxyXG4gICAgICB9O1xyXG4gICAgICBpZiAodGhpcy5fdGFiU2VsZWN0ZWQpIHtcclxuICAgICAgICB0aGlzLl9sYXN0TGF6eUxvYWRFdmVudCA9IHtcclxuICAgICAgICAgIC4uLih0aGlzLl9sYXN0TGF6eUxvYWRFdmVudCB8fCAoe30gYXMgYW55KSksXHJcbiAgICAgICAgICAuLi57IFN0YXR1czogdGhpcy5fdGFiU2VsZWN0ZWQuY29kZSB9LFxyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5fZmlyc3RMYXp5TG9hZGVkRG9uZSkge1xyXG4gICAgICB0aGlzLm9uTGF6eUxvYWQuZW1pdCh0aGlzLl9sYXN0TGF6eUxvYWRFdmVudCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9maXJzdExhenlMb2FkZWREb25lID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGdldENlbGxDb250ZW50KGl0ZW06IGFueSwgY29sOiBUYWJsZUNvbHVtbikge1xyXG4gICAgbGV0IGNvbnRlbnQgPSBgPHNwYW4gY2xhc3M9XCJwLWNvbHVtbi10aXRsZVwiPiR7Y29sLmhlYWRlcn08L3NwYW4+PHNwYW4gY2xhc3M9XCJ3LTEwMFwiPmA7XHJcbiAgICBpZiAoIWNvbC50eXBlIHx8IGNvbC50eXBlID09PSBUYWJsZUNvbHVtblR5cGUuVEVYVCkge1xyXG4gICAgICBjb250ZW50ICs9IGl0ZW1bY29sLmZpZWxkXSB8fCAnJztcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY29sLnR5cGUgPT09IFRhYmxlQ29sdW1uVHlwZS5DVVNUT01fU1RZTEUpIHtcclxuICAgICAgY29udGVudCArPSBgPHNwYW4gY2xhc3M9XCIke2NvbC50ZXh0RmllbGRDbGFzcyA/IGl0ZW1bY29sLnRleHRGaWVsZENsYXNzXSA6ICcnfVwiPiR7aXRlbVtjb2wuZmllbGQgfHwgJyddfTwvc3Bhbj5gO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjb2wudHlwZSA9PT0gVGFibGVDb2x1bW5UeXBlLkJPT0xFQU4pIHtcclxuICAgICAgY29udGVudCArPSBgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyZWRcIj48aSBjbGFzcz1cIiBzdGF0dXMtdGFibGUtZmllbGQgZmFzIGZhLSR7XHJcbiAgICAgICAgaXRlbVtjb2wuZmllbGRdID8gJ2NoZWNrIGJvb2xlYW4tdmFsdWUtcG9zaXRpdmUnIDogJ3RpbWVzIGJvb2xlYW4tdmFsdWUtbmVnYXRpdmUnXHJcbiAgICAgIH1cIj48L2k+PC9kaXY+YDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY29sLnR5cGUgPT09IFRhYmxlQ29sdW1uVHlwZS5FTlVNICYmIGNvbC5nZXRFbnVtVHJhbnNsYXRlZCkge1xyXG4gICAgICBjb250ZW50ICs9IGNvbC5nZXRFbnVtVHJhbnNsYXRlZChpdGVtW2NvbC5maWVsZF0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjb2wudHlwZSA9PT0gVGFibGVDb2x1bW5UeXBlLkRBVEVUSU1FICYmIGl0ZW1bY29sLmZpZWxkXSkge1xyXG4gICAgICBjb25zdCBkYXRlVGltZSA9XHJcbiAgICAgICAgaXRlbVtjb2wuZmllbGRdIGluc3RhbmNlb2YgRGF0ZSA/IERhdGVUaW1lLmZyb21KU0RhdGUoaXRlbVtjb2wuZmllbGRdKSA6IERhdGVUaW1lLmZyb21JU08oaXRlbVtjb2wuZmllbGRdKTtcclxuICAgICAgY29udGVudCArPSBkYXRlVGltZS50b0Zvcm1hdCgnZGQvTU0veXl5eSBISDptbScpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjb2wudHlwZSA9PT0gVGFibGVDb2x1bW5UeXBlLlNUQVRVU19CQURHRSkge1xyXG4gICAgICBjb250ZW50ICs9IGA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXJlZFwiPjxpIGNsYXNzPVwiZmFzIGZhLWNpcmNsZSBzdGF0dXMtdGFibGUtZmllbGQgJHt0aGlzLmdldFN0YXR1c0NvbG9yKFxyXG4gICAgICAgIGl0ZW1bY29sLmZpZWxkXVxyXG4gICAgICApfVwiPjwvaT48L2Rpdj5gO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjb2wudHlwZSA9PT0gVGFibGVDb2x1bW5UeXBlLkFDVElWRV9CT09MRUFOX0JBREdFKSB7XHJcbiAgICAgIGNvbnRlbnQgKz0gYDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlcmVkXCI+PGkgY2xhc3M9XCJmYXMgZmEtY2lyY2xlIHN0YXR1cy10YWJsZS1maWVsZCAke3RoaXMuZ2V0QWN0aXZlU3RhdHVzQ29sb3IoXHJcbiAgICAgICAgaXRlbVtjb2wuZmllbGRdXHJcbiAgICAgICl9XCI+PC9pPjwvZGl2PmA7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNvbC50eXBlID09PSBUYWJsZUNvbHVtblR5cGUuQlVUVE9OKSB7XHJcbiAgICAgIGNvbnRlbnQgKz0gYDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlcmVkXCI+PGkgY2xhc3M9XCJmYXMgJHtcclxuICAgICAgICBjb2wuaWNvbiB8fCAnZmEtY2lyY2xlJ1xyXG4gICAgICB9IHN0YXR1cy10YWJsZS1maWVsZCB0YWJsZS1idXR0b25cIj48L2k+PC9kaXY+YDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY29sLnR5cGUgPT09IFRhYmxlQ29sdW1uVHlwZS5NQVNLKSB7XHJcbiAgICAgIGNvbnRlbnQgKz0gTWFza1V0aWwuZG9NYXNrU3RyaW5nKGl0ZW1bY29sLmZpZWxkXSB8fCAnJywgY29sLm1hc2spO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnRlbnQgKz0gYDwvc3Bhbj5gO1xyXG4gICAgcmV0dXJuIGNvbnRlbnQ7XHJcbiAgfVxyXG5cclxuICBvblRhYkNoYW5nZSgkZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy5fdGFiU2VsZWN0ZWQgPSB0aGlzLnRhYnNbJGV2ZW50LmluZGV4XTtcclxuICAgIHRoaXMubGF6eUxvYWRlZCh7IGZpbHRlcjogdHJ1ZSwgZGF0YToge30gfSk7XHJcbiAgfVxyXG5cclxuICBzdWJzY3JpYmVUb0ZpbHRlckNoYW5nZXMoKSB7XHJcbiAgICB0aGlzLl9maWx0ZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgIHRoaXMuX2ZpbHRlclN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcclxuICAgIE9iamVjdC5rZXlzKHRoaXMuZmlsdGVyc0NvbXBvbmVudD8uZm9ybUdyb3VwLmNvbnRyb2xzIHx8IHt9KS5mb3JFYWNoKChrZXkpID0+IHtcclxuICAgICAgdGhpcy5fZmlsdGVyU3Vic2NyaXB0aW9uLmFkZChcclxuICAgICAgICB0aGlzLmZpbHRlcnNDb21wb25lbnQ/LmZvcm1Hcm91cFxyXG4gICAgICAgICAgLmdldChrZXkpXHJcbiAgICAgICAgICA/LnZhbHVlQ2hhbmdlcy5waXBlKGRlYm91bmNlVGltZSgzMDApKVxyXG4gICAgICAgICAgLnN1YnNjcmliZSgodmFsdWUpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5vbkZpbHRlckNoYW5nZWQuZW1pdCh7IGZpZWxkOiBrZXksIHZhbHVlIH0pO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5vbkZpbHRlckNoYW5nZWQuZW1pdCh7IGZpZWxkOiBrZXksIHZhbHVlOiB0aGlzLmZpbHRlcnNDb21wb25lbnQ/LmZvcm1Hcm91cC5nZXQoa2V5KT8udmFsdWUgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uUm93Q2xpY2soaXRlbTogYW55KSB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGxpc3RIYXNBY3Rpb25zKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZGF0YS5zb21lKChpdGVtKSA9PiBpdGVtLmFjdGlvbnM/Lmxlbmd0aCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFN0YXR1c0NvbG9yKHN0YXR1czogU3RhdHVzKSB7XHJcbiAgICBzd2l0Y2ggKHN0YXR1cykge1xyXG4gICAgICBjYXNlIFN0YXR1cy5QRU5ESU5HOlxyXG4gICAgICAgIHJldHVybiAnd2FybmluZyc7XHJcbiAgICAgIGNhc2UgU3RhdHVzLkFQUFJPVkVEOlxyXG4gICAgICAgIHJldHVybiAnc3VjY2Vzcyc7XHJcbiAgICAgIGNhc2UgU3RhdHVzLlJFSkVDVEVEOlxyXG4gICAgICAgIHJldHVybiAnZXJyb3InO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuICcnO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRBY3RpdmVTdGF0dXNDb2xvcihhY3RpdmU6IGJvb2xlYW4pIHtcclxuICAgIHJldHVybiBhY3RpdmUgPyAnc3VjY2VzcycgOiAnZXJyb3InO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNoYW5nZVNlbGVjdGVkSXRlbXModmFsdWU6IGFueSkge1xyXG4gICAgdGhpcy5vblNlbGVjdGVkUm93cy5lbWl0KHRoaXMuc2VsZWN0ZWRJdGVtcyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaXNIdG1sQ2VsbChjb2w6IFRhYmxlQ29sdW1uKSB7XHJcbiAgICBpZiAoIWNvbC50eXBlKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuICFbVGFibGVDb2x1bW5UeXBlLlRFWFRfQkFER0VdLmluY2x1ZGVzKGNvbC50eXBlKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvblNlbGVjdGlvbkNoYW5nZShzZWxlY3Rpb246IGFueSkge1xyXG4gICAgZm9yIChsZXQgaSA9IHNlbGVjdGlvbi5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgICBsZXQgZGF0YSA9IHNlbGVjdGlvbltpXTtcclxuICAgICAgaWYgKGRhdGEuZGlzYWJsZWRDaGVja0JveCkge1xyXG4gICAgICAgIHNlbGVjdGlvbi5zcGxpY2UoaSwgMSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IHNlbGVjdGlvbjtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImdyaWRcIj5cclxuICA8ZGl2IGNsYXNzPVwiY29sLTEyXCI+XHJcbiAgICA8dmVjdG9yLWZpbHRlcnNcclxuICAgICAgW2ZpZWxkc109XCJmaWx0ZXJzXCJcclxuICAgICAgKG9uU2VhcmNoKT1cImxhenlMb2FkZWQoeyBmaWx0ZXI6IHRydWUsIGRhdGE6ICRldmVudCB9KVwiXHJcbiAgICAgIChmb3JtQnVpbGRlZCk9XCJzdWJzY3JpYmVUb0ZpbHRlckNoYW5nZXMoKVwiXHJcbiAgICA+PC92ZWN0b3ItZmlsdGVycz5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwidGFibGUtaGVhZGVyLWFjdGlvbnMgZmllbGRcIiAqbmdJZj1cImFkZEl0ZW1MYWJlbCB8fCBleHBvcnRFeGNlbCB8fCBleHBvcnRQREZcIj5cclxuICAgIDxidXR0b24gKm5nSWY9XCJleHBvcnRFeGNlbFwiIChjbGljayk9XCJvbkV4cG9ydEV4Y2VsLmVtaXQoKVwiIGNsYXNzPVwiZXhwb3J0LWJ1dHRvbiBleHBvcnQtZXhjZWxcIj5cclxuICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtZmlsZVwiPjwvaT48c3Bhbj5FeGNlbDwvc3Bhbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gICAgPGJ1dHRvbiAqbmdJZj1cImV4cG9ydFBERlwiIChjbGljayk9XCJvbkV4cG9ydFBERi5lbWl0KClcIiBjbGFzcz1cImV4cG9ydC1idXR0b24gZXhwb3J0LXBkZlwiPlxyXG4gICAgICA8aSBjbGFzcz1cImZhcyBmYS1maWxlXCI+PC9pPjxzcGFuPlBERjwvc3Bhbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gICAgPHZlY3Rvci1idXR0b25cclxuICAgICAgKm5nRm9yPVwibGV0IGJ1dHRvbiBvZiBjdXN0b21CdXR0b25zXCJcclxuICAgICAgY2xhc3M9XCJhZGQtaXRlbS1idXR0b25cIlxyXG4gICAgICBbbGFiZWxdPVwiYnV0dG9uLmxhYmVsXCJcclxuICAgICAgKGNsaWNrKT1cImJ1dHRvbi5jbGlja0Z1bmN0aW9uKClcIlxyXG4gICAgICBbcmlnaHRJY29uXT1cImFkZEl0ZW1CdXR0b25QbHVzU2lnbiA/ICdwaSBwaS1wbHVzJyA6ICcnXCJcclxuICAgID48L3ZlY3Rvci1idXR0b24+XHJcbiAgICA8dmVjdG9yLWJ1dHRvblxyXG4gICAgICAqbmdJZj1cImFkZEl0ZW1MYWJlbFwiXHJcbiAgICAgIGNsYXNzPVwiYWRkLWl0ZW0tYnV0dG9uXCJcclxuICAgICAgW2xhYmVsXT1cImFkZEl0ZW1MYWJlbFwiXHJcbiAgICAgIChjbGljayk9XCJvbkFkZC5lbWl0KClcIlxyXG4gICAgICBbcmlnaHRJY29uXT1cImFkZEl0ZW1CdXR0b25QbHVzU2lnbiA/ICdwaSBwaS1wbHVzJyA6ICcnXCJcclxuICAgID48L3ZlY3Rvci1idXR0b24+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cImNvbC0xMlwiPlxyXG4gICAgPHZlY3Rvci1wYW5lbCBjbGFzcz1cImRhdGEtdGFibGUtcGFuZWxcIj5cclxuICAgICAgPHAtdGFiVmlldyAob25DaGFuZ2UpPVwib25UYWJDaGFuZ2UoJGV2ZW50KVwiICpuZ0lmPVwidGFicz8ubGVuZ3RoXCI+XHJcbiAgICAgICAgPHAtdGFiUGFuZWwgKm5nRm9yPVwibGV0IHRhYiBvZiB0YWJzXCIgW2hlYWRlcl09XCJ0YWIubmFtZVwiPjwvcC10YWJQYW5lbD5cclxuICAgICAgPC9wLXRhYlZpZXc+XHJcbiAgICAgIDxwLXRhYmxlXHJcbiAgICAgICAgY3VycmVudFBhZ2VSZXBvcnRUZW1wbGF0ZT1cIk1vc3RyYW5kbyB7Zmlyc3R9IGF0w6kge2xhc3R9IGRlIHt0b3RhbFJlY29yZHN9IHJlZ2lzdHJvc1wiXHJcbiAgICAgICAgc29ydE1vZGU9XCJzaW5nbGVcIlxyXG4gICAgICAgIFtyb3dzXT1cIjEwXCJcclxuICAgICAgICBbbGF6eV09XCJwYWdpbmF0aW9uICYmICF2aXJ0dWFsUGFnaW5hdGlvblwiXHJcbiAgICAgICAgW3ZhbHVlXT1cImRhdGFcIlxyXG4gICAgICAgIFtwYWdpbmF0b3JdPVwicGFnaW5hdGlvblwiXHJcbiAgICAgICAgW3RvdGFsUmVjb3Jkc109XCJ0b3RhbFJlY29yZHNcIlxyXG4gICAgICAgIFtzaG93Q3VycmVudFBhZ2VSZXBvcnRdPVwidHJ1ZVwiXHJcbiAgICAgICAgW3Jvd3NQZXJQYWdlT3B0aW9uc109XCJbMTAsIDI1LCA1MCwgMTAwXVwiXHJcbiAgICAgICAgW3Jlc3BvbnNpdmVdPVwidHJ1ZVwiXHJcbiAgICAgICAgW3Jlc2l6YWJsZUNvbHVtbnNdPVwidHJ1ZVwiXHJcbiAgICAgICAgW3Njcm9sbGFibGVdPVwidHJ1ZVwiXHJcbiAgICAgICAgc2Nyb2xsRGlyZWN0aW9uPVwidmVydGljYWxcIlxyXG4gICAgICAgIHJlc3BvbnNpdmVMYXlvdXQ9XCJzY3JvbGxcIlxyXG4gICAgICAgIGRhdGFLZXk9XCJpZFwiXHJcbiAgICAgICAgW3Njcm9sbEhlaWdodF09XCJoZWlnaHRcIlxyXG4gICAgICAgIFthdHRyLnNlbGVjdGlvbk1vZGVdPVwic2VsZWN0aW9uTW9kZVwiXHJcbiAgICAgICAgWyhzZWxlY3Rpb24pXT1cInNlbGVjdGVkSXRlbXNcIlxyXG4gICAgICAgIChvblJvd1NlbGVjdCk9XCJjaGFuZ2VTZWxlY3RlZEl0ZW1zKCRldmVudClcIlxyXG4gICAgICAgIChvbkhlYWRlckNoZWNrYm94VG9nZ2xlKT1cImNoYW5nZVNlbGVjdGVkSXRlbXMoJGV2ZW50KVwiXHJcbiAgICAgICAgKG9uUm93VW5zZWxlY3QpPVwiY2hhbmdlU2VsZWN0ZWRJdGVtcygkZXZlbnQpXCJcclxuICAgICAgICAob25MYXp5TG9hZCk9XCJsYXp5TG9hZGVkKHsgZmlsdGVyOiBmYWxzZSwgZGF0YTogJGV2ZW50IH0pXCJcclxuICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uU2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiPlxyXG4gICAgICAgICAgPHRyIGNsYXNzPVwiaGVhZGVyXCI+XHJcbiAgICAgICAgICAgIDx0aCBzdHlsZT1cIm1heC13aWR0aDogM3JlbVwiICpuZ0lmPVwic2VsZWN0aW9uVHlwZSA9PT0gJ2NoZWNrYm94J1wiPlxyXG4gICAgICAgICAgICAgIDxwLXRhYmxlSGVhZGVyQ2hlY2tib3ggW2Rpc2FibGVkXT1cImRpc2FibGVkSGVhZGVyY2hlY2tib3hcIj48L3AtdGFibGVIZWFkZXJDaGVja2JveD5cclxuICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgPHRoIHN0eWxlPVwibWF4LXdpZHRoOiAxNTBweFwiIGNsYXNzPVwiY2VudGVyZWQgdGV4dC1jZW50ZXJcIiAqbmdJZj1cImhhc0V4cGFuZGFibGVJY29uXCI+XHJcbiAgICAgICAgICAgICAge3sgYWRkTmFtZUNvbHVtbkV4cGFuZCB9fVxyXG4gICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICA8dGggc3R5bGU9XCJtYXgtd2lkdGg6IDEwMHB4XCIgY2xhc3M9XCJjZW50ZXJlZFwiICpuZ0lmPVwiaGFzQWN0aW9uc1wiPkHDp8O1ZXM8L3RoPlxyXG4gICAgICAgICAgICA8dGhcclxuICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29sIG9mIGNvbHVtbnNcIlxyXG4gICAgICAgICAgICAgIFtuZ1N0eWxlXT1cImdldENvbFN0eWxlKGNvbClcIlxyXG4gICAgICAgICAgICAgIFtwU29ydGFibGVDb2x1bW5dPVwiY29sLm5vdFNvcnRhYmxlID8gJycgOiBjb2wuZmllbGRcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAge3sgY29sLmhlYWRlciB9fSA8cC1zb3J0SWNvbiAqbmdJZj1cIiFjb2wubm90U29ydGFibGVcIiBbZmllbGRdPVwiY29sLmZpZWxkXCI+PC9wLXNvcnRJY29uPlxyXG4gICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgPC90cj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJib2R5XCIgbGV0LXJvd0RhdGEgbGV0LWl0ZW0gbGV0LWV4cGFuZGVkPVwiZXhwYW5kZWRcIj5cclxuICAgICAgICAgIDx0clxyXG4gICAgICAgICAgICBjbGFzcz1cInJvd1wiXHJcbiAgICAgICAgICAgIFtwU2VsZWN0YWJsZVJvd109XCJyb3dEYXRhXCJcclxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyBleHBhbmRhYmxlOiBleHBhbmRhYmxlIH1cIlxyXG4gICAgICAgICAgICBbcFJvd1RvZ2dsZXJdPVwiZXhwYW5kYWJsZSA/IGl0ZW0gOiB1bmRlZmluZWRcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwib25Sb3dDbGljayhpdGVtKVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3Rpb25UeXBlID09PSAnY2hlY2tib3gnXCI+XHJcbiAgICAgICAgICAgICAgPHRkIHN0eWxlPVwibWF4LXdpZHRoOiAzcmVtOyBwYWRkaW5nLWxlZnQ6IDEwcHhcIiBjbGFzcz1cImZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxwLXRhYmxlQ2hlY2tib3ggW3ZhbHVlXT1cIml0ZW1cIiBbZGlzYWJsZWRdPVwiaXRlbS5kaXNhYmxlZENoZWNrQm94XCI+PC9wLXRhYmxlQ2hlY2tib3g+XHJcbiAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3Rpb25UeXBlID09PSAncmFkaW9idXR0b24nXCI+XHJcbiAgICAgICAgICAgICAgPHRkIHN0eWxlPVwibWF4LXdpZHRoOiAzcmVtOyBwYWRkaW5nLWxlZnQ6IDEwcHhcIiBjbGFzcz1cImZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxwLXRhYmxlUmFkaW9CdXR0b24gW3ZhbHVlXT1cIml0ZW1cIj48L3AtdGFibGVSYWRpb0J1dHRvbj5cclxuICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPHRkICpuZ0lmPVwiaGFzRXhwYW5kYWJsZUljb25cIiBzdHlsZT1cIm1heC13aWR0aDogMTUwcHhcIiBjbGFzcz1cImNlbnRlcmVkXCI+XHJcbiAgICAgICAgICAgICAgPHAtbWVudSAjbWVudSBbbW9kZWxdPVwiaXRlbS5hY3Rpb25zXCIgW3BvcHVwXT1cInRydWVcIiBhcHBlbmRUbz1cImJvZHlcIj48L3AtbWVudT5cclxuICAgICAgICAgICAgICA8aVxyXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiXHJcbiAgICAgICAgICAgICAgICAgIGV4cGFuZGVkID8gJ2FjdGlvbnMtbWVudS1idXR0b24gcGkgcGktY2hldnJvbi1kb3duJyA6ICdhY3Rpb25zLW1lbnUtYnV0dG9uIHBpIHBpLWNoZXZyb24tcmlnaHQnXHJcbiAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgID48L2k+XHJcbiAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgIDx0ZCAqbmdJZj1cImhhc0FjdGlvbnNcIiBzdHlsZT1cIm1heC13aWR0aDogMTAwcHhcIiBjbGFzcz1cImNlbnRlcmVkXCI+XHJcbiAgICAgICAgICAgICAgPHAtbWVudSAjbWVudSBbbW9kZWxdPVwiaXRlbS5hY3Rpb25zXCIgW3BvcHVwXT1cInRydWVcIiBhcHBlbmRUbz1cImJvZHlcIj48L3AtbWVudT5cclxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImFjdGlvbnMtbWVudS1idXR0b24gZmFzIGZhLWNvZ1wiIChjbGljayk9XCJtZW51LnRvZ2dsZSgkZXZlbnQpXCI+PC9pPlxyXG4gICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb2wgb2YgY29sdW1uc1wiPlxyXG4gICAgICAgICAgICAgIDx0ZFxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJpc0h0bWxDZWxsKGNvbClcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjZWxsXCJcclxuICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwiZ2V0Q2VsbENvbnRlbnQoaXRlbSwgY29sKVwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiY29sICYmIGNvbC5jbGlja0Z1bmN0aW9uICYmIGNvbC5jbGlja0Z1bmN0aW9uKGl0ZW0pXCJcclxuICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cImdldENvbFN0eWxlKGNvbClcIlxyXG4gICAgICAgICAgICAgID48L3RkPlxyXG4gICAgICAgICAgICAgIDx0ZFxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCIhaXNIdG1sQ2VsbChjb2wpXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY2VsbFwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiY29sICYmIGNvbC5jbGlja0Z1bmN0aW9uICYmIGNvbC5jbGlja0Z1bmN0aW9uKGl0ZW0pXCJcclxuICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cImdldENvbFN0eWxlKGNvbClcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDx2ZWN0b3ItYmFkZ2VcclxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb2wudHlwZSA9PT0gJ1RFWFRfQkFER0UnICYmICEhY29sLmdldFN0YXR1c1wiXHJcbiAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJpdGVtW2NvbC5maWVsZF1cIlxyXG4gICAgICAgICAgICAgICAgICBbdHlwZV09XCJjb2wuZ2V0U3RhdHVzKGl0ZW1bY29sLmZpZWxkXSlcIlxyXG4gICAgICAgICAgICAgICAgPjwvdmVjdG9yLWJhZGdlPlxyXG4gICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPC90cj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJlbXB0eW1lc3NhZ2VcIj5cclxuICAgICAgICAgIDx0ciBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJuby1yZXN1bHRzXCIgW2F0dHIuY29sc3Bhbl09XCJjb2x1bW5zLmxlbmd0aCArIDFcIj5OZW5odW0gcmVzdWx0YWRvIGVuY29udHJhZG88L3RkPlxyXG4gICAgICAgICAgPC90cj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJwYWdpbmF0b3JyaWdodFwiPiA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtaXRlbSBwVGVtcGxhdGU9XCJwYWdpbmF0b3Jkcm9wZG93bml0ZW1cIj4ge3sgaXRlbS52YWx1ZSB9fSA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJyb3dleHBhbnNpb25cIiBsZXQtaXRlbT5cclxuICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgPHRkIFthdHRyLmNvbHNwYW5dPVwiY29sdW1ucy5sZW5ndGggKyAoaGFzQWN0aW9ucyA/IDEgOiAwKVwiPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJleHBhbnNpb25UZW1wbGF0ZTsgY29udGV4dDogeyBpdGVtIH1cIj4gPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICA8L3RyPlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgIDwvcC10YWJsZT5cclxuICAgIDwvdmVjdG9yLXBhbmVsPlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19
|