@tuki-io/tuki-widgets 0.0.95 → 0.0.97
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/.editorconfig +16 -0
- package/.hintrc +14 -0
- package/.vscode/extensions.json +4 -0
- package/.vscode/launch.json +20 -0
- package/.vscode/tasks.json +42 -0
- package/README.md +10 -9
- package/angular.json +141 -0
- package/package.json +49 -65
- package/projects/tuki/widgets/README.md +24 -0
- package/projects/tuki/widgets/di2mt/api/api.endpoints.ts +31 -0
- package/projects/tuki/widgets/di2mt/assets/icons/already_upgraded.png +0 -0
- package/projects/tuki/widgets/di2mt/assets/icons/check2_icon.png +0 -0
- package/projects/tuki/widgets/di2mt/assets/icons/check_icon.png +0 -0
- package/projects/tuki/widgets/di2mt/assets/icons/details_d_icon.svg +3 -0
- package/projects/tuki/widgets/di2mt/assets/icons/expand_icon.png +0 -0
- package/projects/tuki/widgets/di2mt/assets/icons/icon_play.svg +3 -0
- package/projects/tuki/widgets/di2mt/assets/icons/issue_icon.png +0 -0
- package/projects/tuki/widgets/di2mt/assets/icons/menu_icon.png +0 -0
- package/projects/tuki/widgets/di2mt/assets/icons/ready_to_upgrade.png +0 -0
- package/projects/tuki/widgets/di2mt/assets/icons/search_icon.png +0 -0
- package/projects/tuki/widgets/di2mt/assets/icons/site.png +0 -0
- package/projects/tuki/widgets/di2mt/assets/icons/user.png +0 -0
- package/projects/tuki/widgets/di2mt/assets/icons/warning_icon.png +0 -0
- package/projects/tuki/widgets/di2mt/ng-package.json +7 -0
- package/{di2mt/public-api.d.ts → projects/tuki/widgets/di2mt/public-api.ts} +14 -0
- package/projects/tuki/widgets/di2mt/shared/components/card/card.component.html +11 -0
- package/projects/tuki/widgets/di2mt/shared/components/card/card.component.scss +48 -0
- package/projects/tuki/widgets/di2mt/shared/components/card/card.component.ts +10 -0
- package/projects/tuki/widgets/di2mt/shared/components/chart-card/chart-card.component.html +15 -0
- package/projects/tuki/widgets/di2mt/shared/components/chart-card/chart-card.component.scss +38 -0
- package/projects/tuki/widgets/di2mt/shared/components/chart-card/chart-card.component.ts +76 -0
- package/projects/tuki/widgets/di2mt/shared/components/index.ts +6 -0
- package/projects/tuki/widgets/di2mt/shared/components/stat-card/stat-card.component.html +57 -0
- package/projects/tuki/widgets/di2mt/shared/components/stat-card/stat-card.component.scss +74 -0
- package/projects/tuki/widgets/di2mt/shared/components/stat-card/stat-card.component.ts +44 -0
- package/projects/tuki/widgets/di2mt/shared/components/status-list-card/status-list-card.component.html +57 -0
- package/projects/tuki/widgets/di2mt/shared/components/status-list-card/status-list-card.component.scss +187 -0
- package/projects/tuki/widgets/di2mt/shared/components/status-list-card/status-list-card.component.ts +41 -0
- package/projects/tuki/widgets/di2mt/shared/components/summary-card/summary-card.component.html +12 -0
- package/projects/tuki/widgets/di2mt/shared/components/summary-card/summary-card.component.scss +79 -0
- package/projects/tuki/widgets/di2mt/shared/components/summary-card/summary-card.component.ts +27 -0
- package/projects/tuki/widgets/di2mt/shared/components/table-filters/table-filters.component.html +28 -0
- package/projects/tuki/widgets/di2mt/shared/components/table-filters/table-filters.component.scss +245 -0
- package/projects/tuki/widgets/di2mt/shared/components/table-filters/table-filters.component.ts +28 -0
- package/projects/tuki/widgets/di2mt/shared/constants/app.constants.ts +96 -0
- package/projects/tuki/widgets/di2mt/shared/material.module.ts +36 -0
- package/projects/tuki/widgets/di2mt/shared/services/api.service.ts +92 -0
- package/projects/tuki/widgets/di2mt/shared/shared.module.ts +39 -0
- package/projects/tuki/widgets/di2mt/shared/types/constants.ts +22 -0
- package/projects/tuki/widgets/di2mt/shared/types/data-table.ts +5 -0
- package/projects/tuki/widgets/di2mt/shared/types/table/filter.ts +14 -0
- package/projects/tuki/widgets/di2mt/styles/tuki-widgets-theme.scss +13 -0
- package/projects/tuki/widgets/di2mt/styles/variables.scss +94 -0
- package/projects/tuki/widgets/di2mt/widgets/site-upgrade/progress-bar/progress-bar.component.html +6 -0
- package/projects/tuki/widgets/di2mt/widgets/site-upgrade/progress-bar/progress-bar.component.scss +45 -0
- package/projects/tuki/widgets/di2mt/widgets/site-upgrade/progress-bar/progress-bar.component.ts +27 -0
- package/projects/tuki/widgets/di2mt/widgets/site-upgrade/site-upgrade-data-table/site-upgrade-data-table.component.html +163 -0
- package/projects/tuki/widgets/di2mt/widgets/site-upgrade/site-upgrade-data-table/site-upgrade-data-table.component.scss +459 -0
- package/projects/tuki/widgets/di2mt/widgets/site-upgrade/site-upgrade-data-table/site-upgrade-data-table.component.ts +506 -0
- package/projects/tuki/widgets/di2mt/widgets/site-upgrade/site-upgrade.module.ts +33 -0
- package/projects/tuki/widgets/di2mt/widgets/site-upgrade/site-upgrade.service.ts +172 -0
- package/projects/tuki/widgets/di2mt/widgets/site-upgrade/types/user-upgrade.ts +27 -0
- package/projects/tuki/widgets/di2mt/widgets/upgrade-overview/cards/already-upgraded-sites/already-upgraded-sites-card.component.ts +52 -0
- package/projects/tuki/widgets/di2mt/widgets/upgrade-overview/cards/already-upgraded-users/already-upgraded-users-card.component.ts +53 -0
- package/projects/tuki/widgets/di2mt/widgets/upgrade-overview/cards/preconditions-status-list/preconditions-status-list-card.component.ts +82 -0
- package/projects/tuki/widgets/di2mt/widgets/upgrade-overview/cards/ready-to-upgrade-sites/ready-to-upgrade-sites-card.component.html +7 -0
- package/projects/tuki/widgets/di2mt/widgets/upgrade-overview/cards/ready-to-upgrade-sites/ready-to-upgrade-sites-card.component.scss +0 -0
- package/projects/tuki/widgets/di2mt/widgets/upgrade-overview/cards/ready-to-upgrade-sites/ready-to-upgrade-sites-card.component.ts +45 -0
- package/projects/tuki/widgets/di2mt/widgets/upgrade-overview/cards/ready-to-upgrade-users/ready-to-upgrade-users-card.component.html +7 -0
- package/projects/tuki/widgets/di2mt/widgets/upgrade-overview/cards/ready-to-upgrade-users/ready-to-upgrade-users-card.component.scss +0 -0
- package/projects/tuki/widgets/di2mt/widgets/upgrade-overview/cards/ready-to-upgrade-users/ready-to-upgrade-users-card.component.ts +45 -0
- package/projects/tuki/widgets/di2mt/widgets/upgrade-overview/cards/site-infrastructure-status-list/site-infrastructure-status-list-card.component.ts +81 -0
- package/projects/tuki/widgets/di2mt/widgets/upgrade-overview/cards/upgrade-state-comparison-chart/upgrade-state-comparison-chart-card.component.ts +70 -0
- package/{di2mt/widgets/upgrade-overview/types/upgrade-overview.d.ts → projects/tuki/widgets/di2mt/widgets/upgrade-overview/types/upgrade-overview.ts} +20 -18
- package/projects/tuki/widgets/di2mt/widgets/upgrade-overview/upgrade-overview.module.ts +42 -0
- package/projects/tuki/widgets/di2mt/widgets/upgrade-overview/upgrade-overview.service.ts +95 -0
- package/projects/tuki/widgets/di2mt/widgets/user-upgrade/types/user-upgrade.ts +35 -0
- package/projects/tuki/widgets/di2mt/widgets/user-upgrade/user-upgrade-data-table/user-upgrade-data-table.component.html +204 -0
- package/projects/tuki/widgets/di2mt/widgets/user-upgrade/user-upgrade-data-table/user-upgrade-data-table.component.scss +457 -0
- package/projects/tuki/widgets/di2mt/widgets/user-upgrade/user-upgrade-data-table/user-upgrade-data-table.component.ts +438 -0
- package/projects/tuki/widgets/di2mt/widgets/user-upgrade/user-upgrade.module.ts +34 -0
- package/projects/tuki/widgets/di2mt/widgets/user-upgrade/user-upgrade.service.ts +137 -0
- package/projects/tuki/widgets/karma.conf.js +44 -0
- package/projects/tuki/widgets/ng-package.json +10 -0
- package/projects/tuki/widgets/package.json +13 -0
- package/projects/tuki/widgets/src/lib/widgets.component.spec.ts +23 -0
- package/projects/tuki/widgets/src/lib/widgets.component.ts +20 -0
- package/projects/tuki/widgets/src/lib/widgets.module.ts +16 -0
- package/projects/tuki/widgets/src/lib/widgets.service.spec.ts +16 -0
- package/projects/tuki/widgets/src/lib/widgets.service.ts +9 -0
- package/{public-api.d.ts → projects/tuki/widgets/src/public-api.ts} +4 -0
- package/projects/tuki/widgets/src/test.ts +27 -0
- package/projects/tuki/widgets/styles.scss +568 -0
- package/projects/tuki/widgets/tsconfig.lib.json +37 -0
- package/projects/tuki/widgets/tsconfig.lib.prod.json +10 -0
- package/projects/tuki/widgets/tsconfig.spec.json +17 -0
- package/projects/tuki/widgets/user-device-manage/ng-package.json +7 -0
- package/projects/tuki/widgets/user-device-manage/src/app.constants.ts +96 -0
- package/projects/tuki/widgets/user-device-manage/src/assets/icons/arrow-left.svg +5 -0
- package/projects/tuki/widgets/user-device-manage/src/assets/icons/arrow-right.svg +5 -0
- package/projects/tuki/widgets/user-device-manage/src/assets/icons/close_icon_x.svg +3 -0
- package/projects/tuki/widgets/user-device-manage/src/assets/icons/delete_icon.svg +5 -0
- package/projects/tuki/widgets/user-device-manage/src/assets/icons/dragger-vertical-icon.svg +3 -0
- package/projects/tuki/widgets/user-device-manage/src/assets/icons/icon_user.svg +1 -0
- package/projects/tuki/widgets/user-device-manage/src/assets/icons/vartical_divider_icon.svg +3 -0
- package/projects/tuki/widgets/user-device-manage/src/classes/device.ts +292 -0
- package/projects/tuki/widgets/user-device-manage/src/classes/line-association-interface.ts +50 -0
- package/projects/tuki/widgets/user-device-manage/src/classes/line-association.ts +177 -0
- package/projects/tuki/widgets/user-device-manage/src/classes/line-call-info-display.ts +21 -0
- package/projects/tuki/widgets/user-device-manage/src/classes/line-directory.ts +41 -0
- package/projects/tuki/widgets/user-device-manage/src/classes/line.ts +144 -0
- package/projects/tuki/widgets/user-device-manage/src/classes/notification.ts +40 -0
- package/projects/tuki/widgets/user-device-manage/src/classes/recording-options.ts +6 -0
- package/projects/tuki/widgets/user-device-manage/src/classes/simplified-user.ts +169 -0
- package/projects/tuki/widgets/user-device-manage/src/classes/site-defaults.ts +167 -0
- package/projects/tuki/widgets/user-device-manage/src/classes/translation-pattern.ts +50 -0
- package/projects/tuki/widgets/user-device-manage/src/classes/types.ts +19 -0
- package/projects/tuki/widgets/user-device-manage/src/classes/user-interface.ts +225 -0
- package/projects/tuki/widgets/user-device-manage/src/classes/user.ts +8 -0
- package/projects/tuki/widgets/user-device-manage/src/common-functions.ts +16 -0
- package/projects/tuki/widgets/user-device-manage/src/confirm-dialog/info-dialog.component.html +14 -0
- package/projects/tuki/widgets/user-device-manage/src/confirm-dialog/info-dialog.component.scss +80 -0
- package/projects/tuki/widgets/user-device-manage/src/confirm-dialog/info-dialog.component.ts +35 -0
- package/projects/tuki/widgets/user-device-manage/src/device-associated-line/associated-line-row/associated-line-row.component.html +21 -0
- package/projects/tuki/widgets/user-device-manage/src/device-associated-line/associated-line-row/associated-line-row.component.scss +97 -0
- package/projects/tuki/widgets/user-device-manage/src/device-associated-line/associated-line-row/associated-line-row.component.ts +28 -0
- package/projects/tuki/widgets/user-device-manage/src/device-associated-line/device-associated-line-details-box/device-associated-line-details-box.component.html +6 -0
- package/projects/tuki/widgets/user-device-manage/src/device-associated-line/device-associated-line-details-box/device-associated-line-details-box.component.scss +20 -0
- package/projects/tuki/widgets/user-device-manage/src/device-associated-line/device-associated-line-details-box/device-associated-line-details-box.component.ts +13 -0
- package/projects/tuki/widgets/user-device-manage/src/device-associated-line/device-associated-line-extension/device-associated-line-extension.component.html +6 -0
- package/projects/tuki/widgets/user-device-manage/src/device-associated-line/device-associated-line-extension/device-associated-line-extension.component.scss +4 -0
- package/projects/tuki/widgets/user-device-manage/src/device-associated-line/device-associated-line-extension/device-associated-line-extension.component.ts +63 -0
- package/projects/tuki/widgets/user-device-manage/src/device-associated-line/device-associated-line.component.html +241 -0
- package/projects/tuki/widgets/user-device-manage/src/device-associated-line/device-associated-line.component.scss +500 -0
- package/projects/tuki/widgets/user-device-manage/src/device-associated-line/device-associated-line.component.ts +194 -0
- package/projects/tuki/widgets/user-device-manage/src/device-list/device-list.component.html +27 -0
- package/projects/tuki/widgets/user-device-manage/src/device-list/device-list.component.scss +131 -0
- package/projects/tuki/widgets/user-device-manage/src/device-list/device-list.component.ts +25 -0
- package/projects/tuki/widgets/user-device-manage/src/device-manage-widget.component.html +209 -0
- package/projects/tuki/widgets/user-device-manage/src/device-manage-widget.component.scss +502 -0
- package/projects/tuki/widgets/user-device-manage/src/device-manage-widget.component.ts +354 -0
- package/projects/tuki/widgets/user-device-manage/src/environments/environment.prod.ts +9 -0
- package/projects/tuki/widgets/user-device-manage/src/environments/environment.ts +10 -0
- package/projects/tuki/widgets/user-device-manage/src/interseptors/auth.interceptor.ts +35 -0
- package/projects/tuki/widgets/user-device-manage/src/lazy-loading-select/lazy-loading-select.component.html +50 -0
- package/projects/tuki/widgets/user-device-manage/src/lazy-loading-select/lazy-loading-select.component.scss +8 -0
- package/projects/tuki/widgets/user-device-manage/src/lazy-loading-select/lazy-loading-select.component.ts +81 -0
- package/projects/tuki/widgets/user-device-manage/src/material.module.ts +87 -0
- package/projects/tuki/widgets/user-device-manage/src/notifications/notification.component.html +33 -0
- package/projects/tuki/widgets/user-device-manage/src/notifications/notification.component.scss +84 -0
- package/projects/tuki/widgets/user-device-manage/src/notifications/notification.component.ts +46 -0
- package/projects/tuki/widgets/user-device-manage/src/removeKynFromIBM.service.ts +25 -0
- package/projects/tuki/widgets/user-device-manage/src/services/api.service.ts +87 -0
- package/projects/tuki/widgets/user-device-manage/src/services/common-functions.ts +17 -0
- package/projects/tuki/widgets/user-device-manage/src/services/device.service.ts +95 -0
- package/projects/tuki/widgets/user-device-manage/src/services/dns.service.ts +111 -0
- package/projects/tuki/widgets/user-device-manage/src/services/line.service.ts +89 -0
- package/projects/tuki/widgets/user-device-manage/src/services/notification.service.ts +68 -0
- package/projects/tuki/widgets/user-device-manage/src/services/removeKynFromIBM.service.ts +25 -0
- package/projects/tuki/widgets/user-device-manage/src/services/site-settings.service.ts +82 -0
- package/projects/tuki/widgets/user-device-manage/src/services/sorting-utils.service.ts +203 -0
- package/projects/tuki/widgets/user-device-manage/src/services/user.service.ts +283 -0
- package/projects/tuki/widgets/user-device-manage/src/services/utils.service.ts +87 -0
- package/projects/tuki/widgets/user-device-manage/src/services/validation.service.ts +829 -0
- package/projects/tuki/widgets/user-device-manage/src/styles/_variables.scss +90 -0
- package/projects/tuki/widgets/user-device-manage/src/styles/form.scss +231 -0
- package/projects/tuki/widgets/user-device-manage/src/styles/icons.scss +32 -0
- package/projects/tuki/widgets/user-device-manage/src/styles/styles.scss +110 -0
- package/projects/tuki/widgets/user-device-manage/src/styles/tables.scss +30 -0
- package/projects/tuki/widgets/user-device-manage/src/user-device-manage.module.ts +73 -0
- package/projects/tuki/widgets/user-device-manage/src/utils/app-loader/app-loader.component.html +7 -0
- package/projects/tuki/widgets/user-device-manage/src/utils/app-loader/app-loader.component.scss +11 -0
- package/projects/tuki/widgets/user-device-manage/src/utils/app-loader/app-loader.ts +13 -0
- package/projects/tuki/widgets/user-manage/ng-package.json +7 -0
- package/projects/tuki/widgets/user-manage/src/app.constants.ts +50 -0
- package/projects/tuki/widgets/user-manage/src/assets/icons/arrow-left.svg +5 -0
- package/projects/tuki/widgets/user-manage/src/assets/icons/arrow-right.svg +5 -0
- package/projects/tuki/widgets/user-manage/src/assets/icons/delete_icon.svg +5 -0
- package/projects/tuki/widgets/user-manage/src/assets/icons/dragger-vertical-icon.svg +3 -0
- package/projects/tuki/widgets/user-manage/src/assets/icons/icon_user.svg +1 -0
- package/projects/tuki/widgets/user-manage/src/assets/icons/vartical_divider_icon.svg +3 -0
- package/projects/tuki/widgets/user-manage/src/classes/device.ts +232 -0
- package/projects/tuki/widgets/user-manage/src/classes/line-association-interface.ts +43 -0
- package/projects/tuki/widgets/user-manage/src/classes/line-association.ts +161 -0
- package/projects/tuki/widgets/user-manage/src/classes/line-call-info-display.ts +21 -0
- package/projects/tuki/widgets/user-manage/src/classes/line-directory.ts +42 -0
- package/projects/tuki/widgets/user-manage/src/classes/line.ts +144 -0
- package/projects/tuki/widgets/user-manage/src/classes/notification.ts +39 -0
- package/projects/tuki/widgets/user-manage/src/classes/pagination.ts +18 -0
- package/projects/tuki/widgets/user-manage/src/classes/recording-options.ts +6 -0
- package/projects/tuki/widgets/user-manage/src/classes/simplified-user.ts +165 -0
- package/projects/tuki/widgets/user-manage/src/classes/table-data.ts +6 -0
- package/projects/tuki/widgets/user-manage/src/classes/translation-pattern.ts +49 -0
- package/projects/tuki/widgets/user-manage/src/classes/user-interface.ts +225 -0
- package/projects/tuki/widgets/user-manage/src/classes/user-list.ts +42 -0
- package/projects/tuki/widgets/user-manage/src/classes/user.ts +8 -0
- package/projects/tuki/widgets/user-manage/src/common-functions.ts +16 -0
- package/projects/tuki/widgets/user-manage/src/device-list/device-list.component.html +27 -0
- package/projects/tuki/widgets/user-manage/src/device-list/device-list.component.scss +131 -0
- package/projects/tuki/widgets/user-manage/src/device-list/device-list.component.ts +25 -0
- package/projects/tuki/widgets/user-manage/src/environments/environment.prod.ts +9 -0
- package/projects/tuki/widgets/user-manage/src/environments/environment.ts +10 -0
- package/projects/tuki/widgets/user-manage/src/interseptors/auth.interceptor.ts +35 -0
- package/projects/tuki/widgets/user-manage/src/lazy-loading-select/lazy-loading-select.component.html +50 -0
- package/projects/tuki/widgets/user-manage/src/lazy-loading-select/lazy-loading-select.component.scss +8 -0
- package/projects/tuki/widgets/user-manage/src/lazy-loading-select/lazy-loading-select.component.ts +81 -0
- package/projects/tuki/widgets/user-manage/src/material.module.ts +85 -0
- package/projects/tuki/widgets/user-manage/src/notifications/notification.component.html +33 -0
- package/projects/tuki/widgets/user-manage/src/notifications/notification.component.scss +84 -0
- package/projects/tuki/widgets/user-manage/src/notifications/notification.component.ts +46 -0
- package/projects/tuki/widgets/user-manage/src/removeKynFromIBM.service.ts +25 -0
- package/projects/tuki/widgets/user-manage/src/services/api.service.ts +90 -0
- package/projects/tuki/widgets/user-manage/src/services/dns.service.ts +116 -0
- package/projects/tuki/widgets/user-manage/src/services/line.service.ts +31 -0
- package/projects/tuki/widgets/user-manage/src/services/notification.service.ts +68 -0
- package/projects/tuki/widgets/user-manage/src/services/removeKynFromIBM.service.ts +25 -0
- package/projects/tuki/widgets/user-manage/src/services/site-settings.service.ts +35 -0
- package/projects/tuki/widgets/user-manage/src/services/sorting-utils.service.ts +203 -0
- package/projects/tuki/widgets/user-manage/src/services/user.service.ts +242 -0
- package/projects/tuki/widgets/user-manage/src/services/users-search.service.ts +59 -0
- package/projects/tuki/widgets/user-manage/src/services/utils.service.ts +71 -0
- package/projects/tuki/widgets/user-manage/src/styles/_variables.scss +90 -0
- package/projects/tuki/widgets/user-manage/src/styles/form.scss +231 -0
- package/projects/tuki/widgets/user-manage/src/styles/icons.scss +32 -0
- package/projects/tuki/widgets/user-manage/src/styles/styles.scss +110 -0
- package/projects/tuki/widgets/user-manage/src/styles/tables.scss +30 -0
- package/projects/tuki/widgets/user-manage/src/user-calling/user-calling-extension/user-calling-extension.component.html +10 -0
- package/projects/tuki/widgets/user-manage/src/user-calling/user-calling-extension/user-calling-extension.component.scss +429 -0
- package/projects/tuki/widgets/user-manage/src/user-calling/user-calling-extension/user-calling-extension.component.ts +63 -0
- package/projects/tuki/widgets/user-manage/src/user-calling/user-calling.component.html +32 -0
- package/projects/tuki/widgets/user-manage/src/user-calling/user-calling.component.scss +444 -0
- package/projects/tuki/widgets/user-manage/src/user-calling/user-calling.component.ts +89 -0
- package/projects/tuki/widgets/user-manage/src/user-details/notification.service.ts +68 -0
- package/projects/tuki/widgets/user-manage/src/user-info/user-info.component.html +29 -0
- package/projects/tuki/widgets/user-manage/src/user-info/user-info.component.scss +64 -0
- package/projects/tuki/widgets/user-manage/src/user-info/user-info.component.ts +19 -0
- package/projects/tuki/widgets/user-manage/src/user-manage-widget.component.html +290 -0
- package/projects/tuki/widgets/user-manage/src/user-manage-widget.component.scss +489 -0
- package/projects/tuki/widgets/user-manage/src/user-manage-widget.component.ts +212 -0
- package/projects/tuki/widgets/user-manage/src/user-manage.module.ts +63 -0
- package/projects/tuki/widgets/user-manage/src/utils/app-loader/app-loader.component.html +6 -0
- package/projects/tuki/widgets/user-manage/src/utils/app-loader/app-loader.component.scss +11 -0
- package/projects/tuki/widgets/user-manage/src/utils/app-loader/app-loader.ts +13 -0
- package/projects/tuki/widgets/user-manage/src/utils/pagination/pagination.component.html +26 -0
- package/projects/tuki/widgets/user-manage/src/utils/pagination/pagination.component.scss +41 -0
- package/projects/tuki/widgets/user-manage/src/utils/pagination/pagination.component.ts +41 -0
- package/projects/tuki/widgets/users-list/ng-package.json +7 -0
- package/projects/tuki/widgets/users-list/src/app.constants.ts +54 -0
- package/projects/tuki/widgets/users-list/src/assets/icons/close_icon_modal.svg +3 -0
- package/projects/tuki/widgets/users-list/src/assets/icons/icon_user.svg +1 -0
- package/projects/tuki/widgets/users-list/src/assets/icons/move_user_to_another_location.svg +14 -0
- package/projects/tuki/widgets/users-list/src/assets/icons/white-close-icon.svg +3 -0
- package/projects/tuki/widgets/users-list/src/classes/app-location.ts +36 -0
- package/projects/tuki/widgets/users-list/src/classes/device.ts +225 -0
- package/projects/tuki/widgets/users-list/src/classes/line.ts +144 -0
- package/projects/tuki/widgets/users-list/src/classes/move-user.ts +225 -0
- package/projects/tuki/widgets/users-list/src/classes/notification.ts +38 -0
- package/projects/tuki/widgets/users-list/src/classes/pagination.ts +18 -0
- package/projects/tuki/widgets/users-list/src/classes/simlified-user.ts +74 -0
- package/projects/tuki/widgets/users-list/src/classes/table-data.ts +6 -0
- package/projects/tuki/widgets/users-list/src/classes/user-interface.ts +225 -0
- package/projects/tuki/widgets/users-list/src/classes/user-list.ts +47 -0
- package/projects/tuki/widgets/users-list/src/classes/user.ts +8 -0
- package/projects/tuki/widgets/users-list/src/material.module.ts +94 -0
- package/projects/tuki/widgets/users-list/src/move-user-wizard/move-user-stepper/device-move-user/device-move-user-wizard.component.html +37 -0
- package/projects/tuki/widgets/users-list/src/move-user-wizard/move-user-stepper/device-move-user/device-move-user-wizard.component.scss +129 -0
- package/projects/tuki/widgets/users-list/src/move-user-wizard/move-user-stepper/device-move-user/device-move-user-wizard.component.ts +46 -0
- package/projects/tuki/widgets/users-list/src/move-user-wizard/move-user-stepper/device-move-user-tab/devices-move-user-wizard-tab.component.html +31 -0
- package/projects/tuki/widgets/users-list/src/move-user-wizard/move-user-stepper/device-move-user-tab/devices-move-user-wizard-tab.component.scss +20 -0
- package/projects/tuki/widgets/users-list/src/move-user-wizard/move-user-stepper/device-move-user-tab/devices-move-user-wizard-tab.component.ts +26 -0
- package/projects/tuki/widgets/users-list/src/move-user-wizard/move-user-stepper/move-user-stepper.component.html +222 -0
- package/projects/tuki/widgets/users-list/src/move-user-wizard/move-user-stepper/move-user-stepper.component.scss +249 -0
- package/projects/tuki/widgets/users-list/src/move-user-wizard/move-user-stepper/move-user-stepper.component.ts +206 -0
- package/projects/tuki/widgets/users-list/src/move-user-wizard/move-user-wizard.component.html +12 -0
- package/projects/tuki/widgets/users-list/src/move-user-wizard/move-user-wizard.component.scss +41 -0
- package/projects/tuki/widgets/users-list/src/move-user-wizard/move-user-wizard.component.ts +36 -0
- package/projects/tuki/widgets/users-list/src/services/api-webex.service.ts +14 -0
- package/projects/tuki/widgets/users-list/src/services/api.service.ts +90 -0
- package/projects/tuki/widgets/users-list/src/services/dns.service.ts +128 -0
- package/projects/tuki/widgets/users-list/src/services/events-communication.service.ts +11 -0
- package/projects/tuki/widgets/users-list/src/services/move-user.service.ts +59 -0
- package/projects/tuki/widgets/users-list/src/services/notification.service.ts +68 -0
- package/projects/tuki/widgets/users-list/src/services/removeKynFromIBM.service.ts +25 -0
- package/projects/tuki/widgets/users-list/src/services/site-settings.service.ts +26 -0
- package/projects/tuki/widgets/users-list/src/services/user.service.ts +159 -0
- package/projects/tuki/widgets/users-list/src/services/users-search.service.ts +139 -0
- package/projects/tuki/widgets/users-list/src/styles/styles.scss +567 -0
- package/projects/tuki/widgets/users-list/src/user-list-confirm-dialog/user-list-confirm-dialog.component.html +15 -0
- package/projects/tuki/widgets/users-list/src/user-list-confirm-dialog/user-list-confirm-dialog.component.scss +103 -0
- package/projects/tuki/widgets/users-list/src/user-list-confirm-dialog/user-list-confirm-dialog.component.ts +35 -0
- package/projects/tuki/widgets/users-list/src/users-list.component.css +4 -0
- package/projects/tuki/widgets/users-list/src/users-list.component.css.map +1 -0
- package/projects/tuki/widgets/users-list/src/users-list.component.html +89 -0
- package/projects/tuki/widgets/users-list/src/users-list.component.scss +567 -0
- package/projects/tuki/widgets/users-list/src/users-list.component.ts +312 -0
- package/projects/tuki/widgets/users-list/src/users-list.module.ts +63 -0
- package/projects/tuki/widgets/users-list/src/utils/app-loader/app-loader.component.css +11 -0
- package/projects/tuki/widgets/users-list/src/utils/app-loader/app-loader.component.css.map +1 -0
- package/projects/tuki/widgets/users-list/src/utils/app-loader/app-loader.component.html +7 -0
- package/projects/tuki/widgets/users-list/src/utils/app-loader/app-loader.component.scss +11 -0
- package/projects/tuki/widgets/users-list/src/utils/app-loader/app-loader.ts +13 -0
- package/projects/tuki/widgets/users-list/src/utils/common-functions.ts +32 -0
- package/projects/tuki/widgets/users-list/src/utils/notifications/notification.component.html +33 -0
- package/projects/tuki/widgets/users-list/src/utils/notifications/notification.component.scss +84 -0
- package/projects/tuki/widgets/users-list/src/utils/notifications/notification.component.ts +46 -0
- package/projects/tuki/widgets/users-list/src/utils/pagination/pagination.component.css +45 -0
- package/projects/tuki/widgets/users-list/src/utils/pagination/pagination.component.css.map +1 -0
- package/projects/tuki/widgets/users-list/src/utils/pagination/pagination.component.html +26 -0
- package/projects/tuki/widgets/users-list/src/utils/pagination/pagination.component.scss +41 -0
- package/projects/tuki/widgets/users-list/src/utils/pagination/pagination.component.ts +41 -0
- package/projects/tuki/widgets/users-list/src/utils/utils.service.ts +71 -0
- package/projects/widgets-playground/src/app/app.component.html +118 -0
- package/projects/widgets-playground/src/app/app.component.scss +16 -0
- package/projects/widgets-playground/src/app/app.component.spec.ts +31 -0
- package/projects/widgets-playground/src/app/app.component.ts +31 -0
- package/projects/widgets-playground/src/app/app.module.ts +43 -0
- package/projects/widgets-playground/src/assets/.gitkeep +0 -0
- package/projects/widgets-playground/src/assets/icons/already_upgraded.png +0 -0
- package/projects/widgets-playground/src/assets/icons/check2_icon.png +0 -0
- package/projects/widgets-playground/src/assets/icons/check_icon.png +0 -0
- package/projects/widgets-playground/src/assets/icons/expand_icon.png +0 -0
- package/projects/widgets-playground/src/assets/icons/issue_icon.png +0 -0
- package/projects/widgets-playground/src/assets/icons/menu_icon.png +0 -0
- package/projects/widgets-playground/src/assets/icons/ready_to_upgrade.png +0 -0
- package/projects/widgets-playground/src/assets/icons/search_icon.png +0 -0
- package/projects/widgets-playground/src/assets/icons/site.png +0 -0
- package/projects/widgets-playground/src/assets/icons/user.png +0 -0
- package/projects/widgets-playground/src/assets/icons/warning_icon.png +0 -0
- package/projects/widgets-playground/src/favicon.ico +0 -0
- package/projects/widgets-playground/src/index.html +13 -0
- package/projects/widgets-playground/src/main.ts +7 -0
- package/projects/widgets-playground/src/styles.scss +24 -0
- package/projects/widgets-playground/tsconfig.app.json +14 -0
- package/projects/widgets-playground/tsconfig.spec.json +14 -0
- package/proxy.conf.js +23 -0
- package/tsconfig.json +46 -0
- package/di2mt/api/api.endpoints.d.ts +0 -31
- package/di2mt/index.d.ts +0 -5
- package/di2mt/shared/components/card/card.component.d.ts +0 -6
- package/di2mt/shared/components/chart-card/chart-card.component.d.ts +0 -23
- package/di2mt/shared/components/stat-card/stat-card.component.d.ts +0 -14
- package/di2mt/shared/components/status-list-card/status-list-card.component.d.ts +0 -15
- package/di2mt/shared/components/summary-card/summary-card.component.d.ts +0 -9
- package/di2mt/shared/components/table-filters/table-filters.component.d.ts +0 -14
- package/di2mt/shared/constants/app.constants.d.ts +0 -74
- package/di2mt/shared/material.module.d.ts +0 -15
- package/di2mt/shared/services/api.service.d.ts +0 -20
- package/di2mt/shared/shared.module.d.ts +0 -16
- package/di2mt/shared/types/constants.d.ts +0 -15
- package/di2mt/shared/types/data-table.d.ts +0 -5
- package/di2mt/shared/types/table/filter.d.ts +0 -16
- package/di2mt/widgets/site-upgrade/progress-bar/progress-bar.component.d.ts +0 -11
- package/di2mt/widgets/site-upgrade/site-upgrade-data-table/site-upgrade-data-table.component.d.ts +0 -69
- package/di2mt/widgets/site-upgrade/site-upgrade.module.d.ts +0 -15
- package/di2mt/widgets/site-upgrade/site-upgrade.service.d.ts +0 -84
- package/di2mt/widgets/site-upgrade/types/user-upgrade.d.ts +0 -26
- package/di2mt/widgets/upgrade-overview/cards/already-upgraded-sites/already-upgraded-sites-card.component.d.ts +0 -19
- package/di2mt/widgets/upgrade-overview/cards/already-upgraded-users/already-upgraded-users-card.component.d.ts +0 -19
- package/di2mt/widgets/upgrade-overview/cards/preconditions-status-list/preconditions-status-list-card.component.d.ts +0 -18
- package/di2mt/widgets/upgrade-overview/cards/ready-to-upgrade-sites/ready-to-upgrade-sites-card.component.d.ts +0 -19
- package/di2mt/widgets/upgrade-overview/cards/ready-to-upgrade-users/ready-to-upgrade-users-card.component.d.ts +0 -19
- package/di2mt/widgets/upgrade-overview/cards/site-infrastructure-status-list/site-infrastructure-status-list-card.component.d.ts +0 -15
- package/di2mt/widgets/upgrade-overview/cards/upgrade-state-comparison-chart/upgrade-state-comparison-chart-card.component.d.ts +0 -18
- package/di2mt/widgets/upgrade-overview/upgrade-overview.module.d.ts +0 -15
- package/di2mt/widgets/upgrade-overview/upgrade-overview.service.d.ts +0 -17
- package/di2mt/widgets/user-upgrade/types/user-upgrade.d.ts +0 -32
- package/di2mt/widgets/user-upgrade/user-upgrade-data-table/user-upgrade-data-table.component.d.ts +0 -79
- package/di2mt/widgets/user-upgrade/user-upgrade.module.d.ts +0 -16
- package/di2mt/widgets/user-upgrade/user-upgrade.service.d.ts +0 -41
- package/esm2020/di2mt/api/api.endpoints.mjs +0 -32
- package/esm2020/di2mt/public-api.mjs +0 -24
- package/esm2020/di2mt/shared/components/card/card.component.mjs +0 -13
- package/esm2020/di2mt/shared/components/chart-card/chart-card.component.mjs +0 -66
- package/esm2020/di2mt/shared/components/stat-card/stat-card.component.mjs +0 -47
- package/esm2020/di2mt/shared/components/status-list-card/status-list-card.component.mjs +0 -43
- package/esm2020/di2mt/shared/components/summary-card/summary-card.component.mjs +0 -36
- package/esm2020/di2mt/shared/components/table-filters/table-filters.component.mjs +0 -37
- package/esm2020/di2mt/shared/constants/app.constants.mjs +0 -95
- package/esm2020/di2mt/shared/material.module.mjs +0 -76
- package/esm2020/di2mt/shared/services/api.service.mjs +0 -86
- package/esm2020/di2mt/shared/shared.module.mjs +0 -61
- package/esm2020/di2mt/shared/types/constants.mjs +0 -20
- package/esm2020/di2mt/shared/types/data-table.mjs +0 -2
- package/esm2020/di2mt/shared/types/table/filter.mjs +0 -2
- package/esm2020/di2mt/tuki-io-tuki-widgets-di2mt.mjs +0 -5
- package/esm2020/di2mt/widgets/site-upgrade/progress-bar/progress-bar.component.mjs +0 -38
- package/esm2020/di2mt/widgets/site-upgrade/site-upgrade-data-table/site-upgrade-data-table.component.mjs +0 -433
- package/esm2020/di2mt/widgets/site-upgrade/site-upgrade.module.mjs +0 -53
- package/esm2020/di2mt/widgets/site-upgrade/site-upgrade.service.mjs +0 -92
- package/esm2020/di2mt/widgets/site-upgrade/types/user-upgrade.mjs +0 -3
- package/esm2020/di2mt/widgets/upgrade-overview/cards/already-upgraded-sites/already-upgraded-sites-card.component.mjs +0 -64
- package/esm2020/di2mt/widgets/upgrade-overview/cards/already-upgraded-users/already-upgraded-users-card.component.mjs +0 -64
- package/esm2020/di2mt/widgets/upgrade-overview/cards/preconditions-status-list/preconditions-status-list-card.component.mjs +0 -83
- package/esm2020/di2mt/widgets/upgrade-overview/cards/ready-to-upgrade-sites/ready-to-upgrade-sites-card.component.mjs +0 -45
- package/esm2020/di2mt/widgets/upgrade-overview/cards/ready-to-upgrade-users/ready-to-upgrade-users-card.component.mjs +0 -45
- package/esm2020/di2mt/widgets/upgrade-overview/cards/site-infrastructure-status-list/site-infrastructure-status-list-card.component.mjs +0 -86
- package/esm2020/di2mt/widgets/upgrade-overview/cards/upgrade-state-comparison-chart/upgrade-state-comparison-chart-card.component.mjs +0 -74
- package/esm2020/di2mt/widgets/upgrade-overview/types/upgrade-overview.mjs +0 -2
- package/esm2020/di2mt/widgets/upgrade-overview/upgrade-overview.module.mjs +0 -59
- package/esm2020/di2mt/widgets/upgrade-overview/upgrade-overview.service.mjs +0 -82
- package/esm2020/di2mt/widgets/user-upgrade/types/user-upgrade.mjs +0 -3
- package/esm2020/di2mt/widgets/user-upgrade/user-upgrade-data-table/user-upgrade-data-table.component.mjs +0 -376
- package/esm2020/di2mt/widgets/user-upgrade/user-upgrade.module.mjs +0 -59
- package/esm2020/di2mt/widgets/user-upgrade/user-upgrade.service.mjs +0 -80
- package/esm2020/lib/widgets.component.mjs +0 -22
- package/esm2020/lib/widgets.module.mjs +0 -21
- package/esm2020/lib/widgets.service.mjs +0 -14
- package/esm2020/public-api.mjs +0 -7
- package/esm2020/tuki-io-tuki-widgets.mjs +0 -5
- package/esm2020/user-device-manage/public-api.mjs +0 -9
- package/esm2020/user-device-manage/src/app.constants.mjs +0 -95
- package/esm2020/user-device-manage/src/classes/device.mjs +0 -85
- package/esm2020/user-device-manage/src/classes/line-association-interface.mjs +0 -2
- package/esm2020/user-device-manage/src/classes/line-association.mjs +0 -121
- package/esm2020/user-device-manage/src/classes/line-call-info-display.mjs +0 -10
- package/esm2020/user-device-manage/src/classes/line-directory.mjs +0 -27
- package/esm2020/user-device-manage/src/classes/line.mjs +0 -18
- package/esm2020/user-device-manage/src/classes/notification.mjs +0 -32
- package/esm2020/user-device-manage/src/classes/recording-options.mjs +0 -7
- package/esm2020/user-device-manage/src/classes/simplified-user.mjs +0 -111
- package/esm2020/user-device-manage/src/classes/site-defaults.mjs +0 -21
- package/esm2020/user-device-manage/src/classes/translation-pattern.mjs +0 -32
- package/esm2020/user-device-manage/src/classes/types.mjs +0 -24
- package/esm2020/user-device-manage/src/common-functions.mjs +0 -19
- package/esm2020/user-device-manage/src/confirm-dialog/info-dialog.component.mjs +0 -34
- package/esm2020/user-device-manage/src/device-associated-line/associated-line-row/associated-line-row.component.mjs +0 -31
- package/esm2020/user-device-manage/src/device-associated-line/device-associated-line-details-box/device-associated-line-details-box.component.mjs +0 -16
- package/esm2020/user-device-manage/src/device-associated-line/device-associated-line-extension/device-associated-line-extension.component.mjs +0 -64
- package/esm2020/user-device-manage/src/device-associated-line/device-associated-line.component.mjs +0 -179
- package/esm2020/user-device-manage/src/device-list/device-list.component.mjs +0 -24
- package/esm2020/user-device-manage/src/device-manage-widget.component.mjs +0 -335
- package/esm2020/user-device-manage/src/environments/environment.mjs +0 -11
- package/esm2020/user-device-manage/src/interseptors/auth.interceptor.mjs +0 -36
- package/esm2020/user-device-manage/src/lazy-loading-select/lazy-loading-select.component.mjs +0 -74
- package/esm2020/user-device-manage/src/material.module.mjs +0 -192
- package/esm2020/user-device-manage/src/notifications/notification.component.mjs +0 -35
- package/esm2020/user-device-manage/src/services/api.service.mjs +0 -79
- package/esm2020/user-device-manage/src/services/device.service.mjs +0 -83
- package/esm2020/user-device-manage/src/services/dns.service.mjs +0 -104
- package/esm2020/user-device-manage/src/services/line.service.mjs +0 -76
- package/esm2020/user-device-manage/src/services/notification.service.mjs +0 -62
- package/esm2020/user-device-manage/src/services/removeKynFromIBM.service.mjs +0 -25
- package/esm2020/user-device-manage/src/services/site-settings.service.mjs +0 -70
- package/esm2020/user-device-manage/src/services/sorting-utils.service.mjs +0 -197
- package/esm2020/user-device-manage/src/services/user.service.mjs +0 -243
- package/esm2020/user-device-manage/src/services/utils.service.mjs +0 -87
- package/esm2020/user-device-manage/src/services/validation.service.mjs +0 -760
- package/esm2020/user-device-manage/src/user-device-manage.module.mjs +0 -107
- package/esm2020/user-device-manage/src/utils/app-loader/app-loader.mjs +0 -14
- package/esm2020/user-device-manage/tuki-io-tuki-widgets-user-device-manage.mjs +0 -5
- package/esm2020/user-manage/public-api.mjs +0 -7
- package/esm2020/user-manage/src/app.constants.mjs +0 -50
- package/esm2020/user-manage/src/classes/device.mjs +0 -37
- package/esm2020/user-manage/src/classes/line-association-interface.mjs +0 -2
- package/esm2020/user-manage/src/classes/line-association.mjs +0 -110
- package/esm2020/user-manage/src/classes/line-call-info-display.mjs +0 -10
- package/esm2020/user-manage/src/classes/line-directory.mjs +0 -27
- package/esm2020/user-manage/src/classes/line.mjs +0 -18
- package/esm2020/user-manage/src/classes/notification.mjs +0 -32
- package/esm2020/user-manage/src/classes/pagination.mjs +0 -8
- package/esm2020/user-manage/src/classes/recording-options.mjs +0 -7
- package/esm2020/user-manage/src/classes/simplified-user.mjs +0 -109
- package/esm2020/user-manage/src/classes/table-data.mjs +0 -2
- package/esm2020/user-manage/src/classes/translation-pattern.mjs +0 -32
- package/esm2020/user-manage/src/classes/user-list.mjs +0 -10
- package/esm2020/user-manage/src/common-functions.mjs +0 -19
- package/esm2020/user-manage/src/device-list/device-list.component.mjs +0 -24
- package/esm2020/user-manage/src/environments/environment.mjs +0 -11
- package/esm2020/user-manage/src/interseptors/auth.interceptor.mjs +0 -36
- package/esm2020/user-manage/src/lazy-loading-select/lazy-loading-select.component.mjs +0 -74
- package/esm2020/user-manage/src/material.module.mjs +0 -188
- package/esm2020/user-manage/src/notifications/notification.component.mjs +0 -35
- package/esm2020/user-manage/src/removeKynFromIBM.service.mjs +0 -25
- package/esm2020/user-manage/src/services/api.service.mjs +0 -79
- package/esm2020/user-manage/src/services/dns.service.mjs +0 -110
- package/esm2020/user-manage/src/services/line.service.mjs +0 -34
- package/esm2020/user-manage/src/services/notification.service.mjs +0 -62
- package/esm2020/user-manage/src/services/removeKynFromIBM.service.mjs +0 -25
- package/esm2020/user-manage/src/services/site-settings.service.mjs +0 -36
- package/esm2020/user-manage/src/services/sorting-utils.service.mjs +0 -197
- package/esm2020/user-manage/src/services/user.service.mjs +0 -207
- package/esm2020/user-manage/src/services/users-search.service.mjs +0 -50
- package/esm2020/user-manage/src/services/utils.service.mjs +0 -73
- package/esm2020/user-manage/src/user-calling/user-calling-extension/user-calling-extension.component.mjs +0 -65
- package/esm2020/user-manage/src/user-calling/user-calling.component.mjs +0 -78
- package/esm2020/user-manage/src/user-info/user-info.component.mjs +0 -20
- package/esm2020/user-manage/src/user-manage-widget.component.mjs +0 -208
- package/esm2020/user-manage/src/user-manage.module.mjs +0 -99
- package/esm2020/user-manage/src/utils/app-loader/app-loader.mjs +0 -14
- package/esm2020/user-manage/src/utils/pagination/pagination.component.mjs +0 -43
- package/esm2020/user-manage/tuki-io-tuki-widgets-user-manage.mjs +0 -5
- package/esm2020/users-list/public-api.mjs +0 -9
- package/esm2020/users-list/src/app.constants.mjs +0 -54
- package/esm2020/users-list/src/classes/app-location.mjs +0 -32
- package/esm2020/users-list/src/classes/device.mjs +0 -7
- package/esm2020/users-list/src/classes/line.mjs +0 -18
- package/esm2020/users-list/src/classes/move-user.mjs +0 -178
- package/esm2020/users-list/src/classes/notification.mjs +0 -31
- package/esm2020/users-list/src/classes/pagination.mjs +0 -8
- package/esm2020/users-list/src/classes/simlified-user.mjs +0 -50
- package/esm2020/users-list/src/classes/table-data.mjs +0 -2
- package/esm2020/users-list/src/classes/user-list.mjs +0 -14
- package/esm2020/users-list/src/material.module.mjs +0 -209
- package/esm2020/users-list/src/move-user-wizard/move-user-stepper/device-move-user/device-move-user-wizard.component.mjs +0 -38
- package/esm2020/users-list/src/move-user-wizard/move-user-stepper/device-move-user-tab/devices-move-user-wizard-tab.component.mjs +0 -23
- package/esm2020/users-list/src/move-user-wizard/move-user-stepper/move-user-stepper.component.mjs +0 -189
- package/esm2020/users-list/src/move-user-wizard/move-user-wizard.component.mjs +0 -38
- package/esm2020/users-list/src/services/api-webex.service.mjs +0 -18
- package/esm2020/users-list/src/services/api.service.mjs +0 -78
- package/esm2020/users-list/src/services/dns.service.mjs +0 -120
- package/esm2020/users-list/src/services/events-communication.service.mjs +0 -14
- package/esm2020/users-list/src/services/move-user.service.mjs +0 -53
- package/esm2020/users-list/src/services/notification.service.mjs +0 -62
- package/esm2020/users-list/src/services/removeKynFromIBM.service.mjs +0 -25
- package/esm2020/users-list/src/services/site-settings.service.mjs +0 -27
- package/esm2020/users-list/src/services/user.service.mjs +0 -142
- package/esm2020/users-list/src/services/users-search.service.mjs +0 -124
- package/esm2020/users-list/src/user-list-confirm-dialog/user-list-confirm-dialog.component.mjs +0 -34
- package/esm2020/users-list/src/users-list.component.mjs +0 -287
- package/esm2020/users-list/src/users-list.module.mjs +0 -92
- package/esm2020/users-list/src/utils/app-loader/app-loader.mjs +0 -14
- package/esm2020/users-list/src/utils/common-functions.mjs +0 -32
- package/esm2020/users-list/src/utils/pagination/pagination.component.mjs +0 -43
- package/esm2020/users-list/src/utils/utils.service.mjs +0 -73
- package/esm2020/users-list/tuki-io-tuki-widgets-users-list.mjs +0 -5
- package/fesm2015/tuki-io-tuki-widgets-di2mt.mjs +0 -2218
- package/fesm2015/tuki-io-tuki-widgets-di2mt.mjs.map +0 -1
- package/fesm2015/tuki-io-tuki-widgets-user-device-manage.mjs +0 -3402
- package/fesm2015/tuki-io-tuki-widgets-user-device-manage.mjs.map +0 -1
- package/fesm2015/tuki-io-tuki-widgets-user-manage.mjs +0 -2124
- package/fesm2015/tuki-io-tuki-widgets-user-manage.mjs.map +0 -1
- package/fesm2015/tuki-io-tuki-widgets-users-list.mjs +0 -1996
- package/fesm2015/tuki-io-tuki-widgets-users-list.mjs.map +0 -1
- package/fesm2015/tuki-io-tuki-widgets.mjs +0 -63
- package/fesm2015/tuki-io-tuki-widgets.mjs.map +0 -1
- package/fesm2020/tuki-io-tuki-widgets-di2mt.mjs +0 -2202
- package/fesm2020/tuki-io-tuki-widgets-di2mt.mjs.map +0 -1
- package/fesm2020/tuki-io-tuki-widgets-user-device-manage.mjs +0 -3364
- package/fesm2020/tuki-io-tuki-widgets-user-device-manage.mjs.map +0 -1
- package/fesm2020/tuki-io-tuki-widgets-user-manage.mjs +0 -2107
- package/fesm2020/tuki-io-tuki-widgets-user-manage.mjs.map +0 -1
- package/fesm2020/tuki-io-tuki-widgets-users-list.mjs +0 -1975
- package/fesm2020/tuki-io-tuki-widgets-users-list.mjs.map +0 -1
- package/fesm2020/tuki-io-tuki-widgets.mjs +0 -63
- package/fesm2020/tuki-io-tuki-widgets.mjs.map +0 -1
- package/index.d.ts +0 -5
- package/lib/widgets.component.d.ts +0 -8
- package/lib/widgets.module.d.ts +0 -7
- package/lib/widgets.service.d.ts +0 -6
- package/user-device-manage/index.d.ts +0 -5
- package/user-device-manage/src/app.constants.d.ts +0 -74
- package/user-device-manage/src/classes/device.d.ts +0 -233
- package/user-device-manage/src/classes/line-association-interface.d.ts +0 -45
- package/user-device-manage/src/classes/line-association.d.ts +0 -62
- package/user-device-manage/src/classes/line-call-info-display.d.ts +0 -11
- package/user-device-manage/src/classes/line-directory.d.ts +0 -15
- package/user-device-manage/src/classes/line.d.ts +0 -140
- package/user-device-manage/src/classes/notification.d.ts +0 -18
- package/user-device-manage/src/classes/recording-options.d.ts +0 -5
- package/user-device-manage/src/classes/simplified-user.d.ts +0 -52
- package/user-device-manage/src/classes/site-defaults.d.ts +0 -146
- package/user-device-manage/src/classes/translation-pattern.d.ts +0 -19
- package/user-device-manage/src/classes/types.d.ts +0 -19
- package/user-device-manage/src/common-functions.d.ts +0 -1
- package/user-device-manage/src/confirm-dialog/info-dialog.component.d.ts +0 -20
- package/user-device-manage/src/device-associated-line/associated-line-row/associated-line-row.component.d.ts +0 -15
- package/user-device-manage/src/device-associated-line/device-associated-line-details-box/device-associated-line-details-box.component.d.ts +0 -7
- package/user-device-manage/src/device-associated-line/device-associated-line-extension/device-associated-line-extension.component.d.ts +0 -24
- package/user-device-manage/src/device-associated-line/device-associated-line.component.d.ts +0 -89
- package/user-device-manage/src/device-list/device-list.component.d.ts +0 -11
- package/user-device-manage/src/device-manage-widget.component.d.ts +0 -71
- package/user-device-manage/src/environments/environment.d.ts +0 -9
- package/user-device-manage/src/interseptors/auth.interceptor.d.ts +0 -9
- package/user-device-manage/src/lazy-loading-select/lazy-loading-select.component.d.ts +0 -35
- package/user-device-manage/src/material.module.d.ts +0 -29
- package/user-device-manage/src/notifications/notification.component.d.ts +0 -19
- package/user-device-manage/src/services/api.service.d.ts +0 -20
- package/user-device-manage/src/services/device.service.d.ts +0 -21
- package/user-device-manage/src/services/dns.service.d.ts +0 -14
- package/user-device-manage/src/services/line.service.d.ts +0 -33
- package/user-device-manage/src/services/notification.service.d.ts +0 -18
- package/user-device-manage/src/services/removeKynFromIBM.service.d.ts +0 -8
- package/user-device-manage/src/services/site-settings.service.d.ts +0 -25
- package/user-device-manage/src/services/sorting-utils.service.d.ts +0 -26
- package/user-device-manage/src/services/user.service.d.ts +0 -51
- package/user-device-manage/src/services/utils.service.d.ts +0 -10
- package/user-device-manage/src/services/validation.service.d.ts +0 -165
- package/user-device-manage/src/user-device-manage.module.d.ts +0 -22
- package/user-device-manage/src/utils/app-loader/app-loader.d.ts +0 -6
- package/user-manage/index.d.ts +0 -5
- package/user-manage/src/app.constants.d.ts +0 -29
- package/user-manage/src/classes/device.d.ts +0 -203
- package/user-manage/src/classes/line-association-interface.d.ts +0 -40
- package/user-manage/src/classes/line-association.d.ts +0 -55
- package/user-manage/src/classes/line-call-info-display.d.ts +0 -11
- package/user-manage/src/classes/line-directory.d.ts +0 -16
- package/user-manage/src/classes/line.d.ts +0 -140
- package/user-manage/src/classes/notification.d.ts +0 -18
- package/user-manage/src/classes/pagination.d.ts +0 -13
- package/user-manage/src/classes/recording-options.d.ts +0 -5
- package/user-manage/src/classes/simplified-user.d.ts +0 -50
- package/user-manage/src/classes/table-data.d.ts +0 -5
- package/user-manage/src/classes/translation-pattern.d.ts +0 -18
- package/user-manage/src/classes/user-list.d.ts +0 -34
- package/user-manage/src/common-functions.d.ts +0 -1
- package/user-manage/src/device-list/device-list.component.d.ts +0 -11
- package/user-manage/src/environments/environment.d.ts +0 -9
- package/user-manage/src/interseptors/auth.interceptor.d.ts +0 -9
- package/user-manage/src/lazy-loading-select/lazy-loading-select.component.d.ts +0 -35
- package/user-manage/src/material.module.d.ts +0 -28
- package/user-manage/src/notifications/notification.component.d.ts +0 -19
- package/user-manage/src/removeKynFromIBM.service.d.ts +0 -8
- package/user-manage/src/services/api.service.d.ts +0 -21
- package/user-manage/src/services/dns.service.d.ts +0 -14
- package/user-manage/src/services/line.service.d.ts +0 -17
- package/user-manage/src/services/notification.service.d.ts +0 -18
- package/user-manage/src/services/removeKynFromIBM.service.d.ts +0 -8
- package/user-manage/src/services/site-settings.service.d.ts +0 -9
- package/user-manage/src/services/sorting-utils.service.d.ts +0 -26
- package/user-manage/src/services/user.service.d.ts +0 -43
- package/user-manage/src/services/users-search.service.d.ts +0 -25
- package/user-manage/src/services/utils.service.d.ts +0 -9
- package/user-manage/src/user-calling/user-calling-extension/user-calling-extension.component.d.ts +0 -24
- package/user-manage/src/user-calling/user-calling.component.d.ts +0 -30
- package/user-manage/src/user-info/user-info.component.d.ts +0 -9
- package/user-manage/src/user-manage-widget.component.d.ts +0 -44
- package/user-manage/src/user-manage.module.d.ts +0 -21
- package/user-manage/src/utils/app-loader/app-loader.d.ts +0 -6
- package/user-manage/src/utils/pagination/pagination.component.d.ts +0 -18
- package/users-list/index.d.ts +0 -5
- package/users-list/src/app.constants.d.ts +0 -36
- package/users-list/src/classes/app-location.d.ts +0 -17
- package/users-list/src/classes/device.d.ts +0 -224
- package/users-list/src/classes/line.d.ts +0 -140
- package/users-list/src/classes/move-user.d.ts +0 -85
- package/users-list/src/classes/notification.d.ts +0 -18
- package/users-list/src/classes/pagination.d.ts +0 -13
- package/users-list/src/classes/simlified-user.d.ts +0 -25
- package/users-list/src/classes/table-data.d.ts +0 -5
- package/users-list/src/classes/user-list.d.ts +0 -36
- package/users-list/src/material.module.d.ts +0 -31
- package/users-list/src/move-user-wizard/move-user-stepper/device-move-user/device-move-user-wizard.component.d.ts +0 -21
- package/users-list/src/move-user-wizard/move-user-stepper/device-move-user-tab/devices-move-user-wizard-tab.component.d.ts +0 -12
- package/users-list/src/move-user-wizard/move-user-stepper/move-user-stepper.component.d.ts +0 -55
- package/users-list/src/move-user-wizard/move-user-wizard.component.d.ts +0 -17
- package/users-list/src/services/api-webex.service.d.ts +0 -8
- package/users-list/src/services/api.service.d.ts +0 -21
- package/users-list/src/services/dns.service.d.ts +0 -18
- package/users-list/src/services/events-communication.service.d.ts +0 -8
- package/users-list/src/services/move-user.service.d.ts +0 -17
- package/users-list/src/services/notification.service.d.ts +0 -18
- package/users-list/src/services/removeKynFromIBM.service.d.ts +0 -8
- package/users-list/src/services/site-settings.service.d.ts +0 -11
- package/users-list/src/services/user.service.d.ts +0 -35
- package/users-list/src/services/users-search.service.d.ts +0 -34
- package/users-list/src/user-list-confirm-dialog/user-list-confirm-dialog.component.d.ts +0 -20
- package/users-list/src/users-list.component.d.ts +0 -60
- package/users-list/src/users-list.module.d.ts +0 -18
- package/users-list/src/utils/app-loader/app-loader.d.ts +0 -6
- package/users-list/src/utils/common-functions.d.ts +0 -2
- package/users-list/src/utils/pagination/pagination.component.d.ts +0 -18
- package/users-list/src/utils/utils.service.d.ts +0 -9
- /package/{di2mt → projects/tuki/widgets/di2mt}/README.md +0 -0
- /package/{user-device-manage/public-api.d.ts → projects/tuki/widgets/user-device-manage/public-api.ts} +0 -0
- /package/{user-manage/public-api.d.ts → projects/tuki/widgets/user-manage/public-api.ts} +0 -0
- /package/{users-list/public-api.d.ts → projects/tuki/widgets/users-list/public-api.ts} +0 -0
|
@@ -1,376 +0,0 @@
|
|
|
1
|
-
import { SelectionModel } from "@angular/cdk/collections";
|
|
2
|
-
import { Component, inject, Input } from "@angular/core";
|
|
3
|
-
import { MatTableDataSource } from "@angular/material/table";
|
|
4
|
-
import { Subject, Subscription } from "rxjs";
|
|
5
|
-
import { takeUntil } from "rxjs";
|
|
6
|
-
import { FILTER_KEY_MAP, UserUpgradeService } from "../user-upgrade.service";
|
|
7
|
-
import { DEPENDENCIES_STATUS, STATUS_ENTRIES } from "../../../shared/types/constants";
|
|
8
|
-
import { APIService } from "../../../shared/services/api.service";
|
|
9
|
-
import { PAGINATION_SIZE_OPTIONS } from "../../../shared/constants/app.constants";
|
|
10
|
-
import * as i0 from "@angular/core";
|
|
11
|
-
import * as i1 from "@angular/common";
|
|
12
|
-
import * as i2 from "../../../shared/components/summary-card/summary-card.component";
|
|
13
|
-
import * as i3 from "../../../shared/components/table-filters/table-filters.component";
|
|
14
|
-
import * as i4 from "@angular/material/table";
|
|
15
|
-
import * as i5 from "@angular/material/button";
|
|
16
|
-
import * as i6 from "@angular/material/checkbox";
|
|
17
|
-
import * as i7 from "@angular/material/progress-spinner";
|
|
18
|
-
import * as i8 from "@angular/material/paginator";
|
|
19
|
-
export class UserUpgradeDataTableComponent {
|
|
20
|
-
constructor() {
|
|
21
|
-
this.destroy$ = new Subject();
|
|
22
|
-
this.userUpgradeService = inject(UserUpgradeService);
|
|
23
|
-
this.apiService = inject(APIService);
|
|
24
|
-
this.STATUS_ENTRIES = STATUS_ENTRIES;
|
|
25
|
-
this.DEPENDENCIES_STATUS = DEPENDENCIES_STATUS;
|
|
26
|
-
this.dataPending = false;
|
|
27
|
-
this.displayedColumns = ['select', 'user', 'site', 'device', 'dialPlanStatus', 'dependencies', 'userUpgradeStatus', 'userUpgradeLoader'];
|
|
28
|
-
this.selection = new SelectionModel(true, []);
|
|
29
|
-
this.filters = [];
|
|
30
|
-
this.pagination = new PaginationDataDto();
|
|
31
|
-
this.users = [];
|
|
32
|
-
this.subscriptions = new Subscription();
|
|
33
|
-
this.statusCounts = {};
|
|
34
|
-
this.activeFilters = {};
|
|
35
|
-
this.pageSizeOptions = PAGINATION_SIZE_OPTIONS;
|
|
36
|
-
}
|
|
37
|
-
ngOnInit() {
|
|
38
|
-
this.dataPending = true;
|
|
39
|
-
this.apiService.token = this.token;
|
|
40
|
-
this.userUpgradeService.customerId = this.customerId;
|
|
41
|
-
const subsc1 = this.userUpgradeService.getUserUpgradeRecords(this.pagination.pageSize, this.pagination.pageIndex, this.activeFilters)
|
|
42
|
-
.pipe(takeUntil(this.destroy$))
|
|
43
|
-
.subscribe((results) => {
|
|
44
|
-
const records = results.content;
|
|
45
|
-
records.forEach(record => {
|
|
46
|
-
record.devicesWithExtensions = this.userUpgradeService.mapDevicesWithExtensions(record.devices, record.deviceDetails);
|
|
47
|
-
});
|
|
48
|
-
this.data = new MatTableDataSource(records);
|
|
49
|
-
this.pagination.total = results.totalElements;
|
|
50
|
-
this.dataPending = false;
|
|
51
|
-
this.setupCustomFilter();
|
|
52
|
-
this.initializeFilters(records);
|
|
53
|
-
});
|
|
54
|
-
this.subscriptions.add(subsc1);
|
|
55
|
-
const subsc2 = this.userUpgradeService.getUserUpgradeStatusCounts()
|
|
56
|
-
.pipe(takeUntil(this.destroy$))
|
|
57
|
-
.subscribe((statusCounts) => {
|
|
58
|
-
this.statusCounts['Ready'] = statusCounts['READY'] || 0;
|
|
59
|
-
this.statusCounts['Not Ready'] = statusCounts['NOT_READY'] || 0;
|
|
60
|
-
this.statusCounts['Completed'] = statusCounts['COMPLETED'] || 0;
|
|
61
|
-
this.statusCounts['Failed'] = statusCounts['FAILED'] || 0;
|
|
62
|
-
});
|
|
63
|
-
this.subscriptions.add(subsc2);
|
|
64
|
-
}
|
|
65
|
-
ngOnDestroy() {
|
|
66
|
-
this.destroy$.next();
|
|
67
|
-
this.destroy$.complete();
|
|
68
|
-
this.dataPending = false;
|
|
69
|
-
if (this.subscriptions) {
|
|
70
|
-
this.subscriptions.unsubscribe();
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
onMultipleDevices(user) {
|
|
74
|
-
user.showDevices = !user.showDevices;
|
|
75
|
-
}
|
|
76
|
-
pageEvent(event) {
|
|
77
|
-
this.pagination.pageIndex = event.pageIndex;
|
|
78
|
-
this.pagination.pageSize = event.pageSize;
|
|
79
|
-
this.getData();
|
|
80
|
-
}
|
|
81
|
-
getSiteUpgradeStatusClass(status) {
|
|
82
|
-
switch (status.toLowerCase()) {
|
|
83
|
-
case 'ready':
|
|
84
|
-
return 'status-ready';
|
|
85
|
-
case 'partial ready':
|
|
86
|
-
return 'partial-ready';
|
|
87
|
-
case 'completed':
|
|
88
|
-
return 'completed';
|
|
89
|
-
case 'failed':
|
|
90
|
-
return 'failed';
|
|
91
|
-
case 'not ready':
|
|
92
|
-
return 'not-ready';
|
|
93
|
-
default:
|
|
94
|
-
return 'not-ready';
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
changePerPageNumber(pageSizeEvent) {
|
|
98
|
-
this.pagination.pageSize = pageSizeEvent.value;
|
|
99
|
-
this.pagination.pageIndex = 0;
|
|
100
|
-
this.getData();
|
|
101
|
-
}
|
|
102
|
-
getData(params) {
|
|
103
|
-
this.dataPending = true;
|
|
104
|
-
const subsc1 = this.userUpgradeService.getUserUpgradeRecords(this.pagination.pageSize, this.pagination.pageIndex, params || {})
|
|
105
|
-
.pipe(takeUntil(this.destroy$))
|
|
106
|
-
.subscribe((result) => {
|
|
107
|
-
const records = result.content;
|
|
108
|
-
records.forEach(record => {
|
|
109
|
-
record.devicesWithExtensions = this.userUpgradeService.mapDevicesWithExtensions(record.devices, record.deviceDetails);
|
|
110
|
-
});
|
|
111
|
-
this.data = new MatTableDataSource(records);
|
|
112
|
-
this.pagination.total = result.totalElements;
|
|
113
|
-
this.dataPending = false;
|
|
114
|
-
});
|
|
115
|
-
this.subscriptions.add(subsc1);
|
|
116
|
-
}
|
|
117
|
-
initializeFilters(records) {
|
|
118
|
-
if (!records?.length) {
|
|
119
|
-
this.filters = [];
|
|
120
|
-
return;
|
|
121
|
-
}
|
|
122
|
-
// Extract unique sites (skip empty/null)
|
|
123
|
-
const uniqueSites = [
|
|
124
|
-
...new Set(records
|
|
125
|
-
.map(record => record.siteName?.trim())
|
|
126
|
-
.filter((site) => !!site))
|
|
127
|
-
];
|
|
128
|
-
const siteOptions = uniqueSites.map(site => ({
|
|
129
|
-
label: site,
|
|
130
|
-
value: site.toLowerCase().replace(/\s+/g, '-')
|
|
131
|
-
}));
|
|
132
|
-
// Extract unique statuses (skip empty/null)
|
|
133
|
-
const uniqueStatuses = [
|
|
134
|
-
...new Set(records
|
|
135
|
-
.map(record => record.upgradeStatus?.trim())
|
|
136
|
-
.filter((status) => !!status))
|
|
137
|
-
];
|
|
138
|
-
const statusOptions = uniqueStatuses.map(status => ({
|
|
139
|
-
label: STATUS_ENTRIES[status],
|
|
140
|
-
value: status.toLowerCase().replace(/\s+/g, '-')
|
|
141
|
-
}));
|
|
142
|
-
this.filters = [
|
|
143
|
-
{
|
|
144
|
-
id: 'userName',
|
|
145
|
-
type: 'search',
|
|
146
|
-
columnKey: 'User',
|
|
147
|
-
placeholder: 'Search users...',
|
|
148
|
-
options: []
|
|
149
|
-
}
|
|
150
|
-
];
|
|
151
|
-
if (siteOptions.length) {
|
|
152
|
-
this.filters.push({
|
|
153
|
-
id: 'sites',
|
|
154
|
-
type: 'select',
|
|
155
|
-
columnKey: 'Site',
|
|
156
|
-
placeholder: 'Sites',
|
|
157
|
-
options: siteOptions
|
|
158
|
-
});
|
|
159
|
-
}
|
|
160
|
-
if (statusOptions.length) {
|
|
161
|
-
this.filters.push({
|
|
162
|
-
id: 'status',
|
|
163
|
-
type: 'select',
|
|
164
|
-
columnKey: 'User Upgrade Status',
|
|
165
|
-
placeholder: 'Upgrade Status',
|
|
166
|
-
options: statusOptions
|
|
167
|
-
});
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
/** Whether the number of selected elements matches the total number of rows. */
|
|
171
|
-
isAllSelected() {
|
|
172
|
-
const numSelected = this.selection.selected.length;
|
|
173
|
-
const numRows = this.data?.data.length ?? 0;
|
|
174
|
-
return numSelected === numRows;
|
|
175
|
-
}
|
|
176
|
-
/** Selects all rows if they are not all selected; otherwise clear selection. */
|
|
177
|
-
masterToggle() {
|
|
178
|
-
// this.isAllSelected() ?
|
|
179
|
-
// this.selection.clear() :
|
|
180
|
-
// this.data?.data.forEach(row => this.selection.select(row));
|
|
181
|
-
if (this.isAllSelected()) {
|
|
182
|
-
this.selection.clear();
|
|
183
|
-
}
|
|
184
|
-
else {
|
|
185
|
-
this.data?.data.forEach(row => {
|
|
186
|
-
if (row.upgradeStatus === 'READY') {
|
|
187
|
-
this.selection.select(row);
|
|
188
|
-
}
|
|
189
|
-
});
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
upgradeUser(user) {
|
|
193
|
-
if (user?.upgradeStatus === 'READY')
|
|
194
|
-
user.pending = true;
|
|
195
|
-
this.userUpgradeService.collectUsers([user])
|
|
196
|
-
.pipe(takeUntil(this.destroy$))
|
|
197
|
-
.subscribe(() => {
|
|
198
|
-
this.userUpgradeService.bulkUpgrade([user])
|
|
199
|
-
.pipe(takeUntil(this.destroy$))
|
|
200
|
-
.subscribe(() => {
|
|
201
|
-
this.updateUsersStatusAfterUpgrade([user]);
|
|
202
|
-
});
|
|
203
|
-
});
|
|
204
|
-
}
|
|
205
|
-
updateUsersStatusAfterUpgrade(users) {
|
|
206
|
-
this.userUpgradeService.getUsersUpgradeStatuses(users)
|
|
207
|
-
.pipe(takeUntil(this.destroy$))
|
|
208
|
-
.subscribe((upgradedStatuses) => {
|
|
209
|
-
upgradedStatuses.forEach(statusItem => {
|
|
210
|
-
const ind = this.getUserIndex(statusItem.userId);
|
|
211
|
-
if (ind > -1) {
|
|
212
|
-
this.data.data[ind].upgradeStatus = statusItem.upgradeStatus;
|
|
213
|
-
this.data.data[ind].pending = false;
|
|
214
|
-
}
|
|
215
|
-
});
|
|
216
|
-
this.dataPending = false;
|
|
217
|
-
});
|
|
218
|
-
}
|
|
219
|
-
getUserIndex(userId) {
|
|
220
|
-
return this.data.data.findIndex((record) => record.userId === userId);
|
|
221
|
-
}
|
|
222
|
-
upgradeSelectedUsers() {
|
|
223
|
-
if (this.selection.selected && this.selection.selected.length) {
|
|
224
|
-
this.dataPending = true;
|
|
225
|
-
this.userUpgradeService.collectUsers(this.selection.selected)
|
|
226
|
-
.pipe(takeUntil(this.destroy$))
|
|
227
|
-
.subscribe(() => {
|
|
228
|
-
this.userUpgradeService.bulkUpgrade(this.selection.selected)
|
|
229
|
-
.pipe(takeUntil(this.destroy$))
|
|
230
|
-
.subscribe(() => {
|
|
231
|
-
this.updateUsersStatusAfterUpgrade(this.selection.selected);
|
|
232
|
-
});
|
|
233
|
-
});
|
|
234
|
-
}
|
|
235
|
-
this.userUpgradeService.bulkUpgrade(this.selection.selected);
|
|
236
|
-
}
|
|
237
|
-
getFilterValue(input) {
|
|
238
|
-
if (input && input.value !== undefined)
|
|
239
|
-
return input.value; // e.g. {value,label}
|
|
240
|
-
if (input && input.target)
|
|
241
|
-
return input.target.value; // DOM event
|
|
242
|
-
return input; // plain value
|
|
243
|
-
}
|
|
244
|
-
isEmptyFilter(v) {
|
|
245
|
-
if (v === undefined || v === null)
|
|
246
|
-
return true;
|
|
247
|
-
if (typeof v === 'string') {
|
|
248
|
-
const s = v.trim().toLowerCase();
|
|
249
|
-
return s === '' || s === 'all';
|
|
250
|
-
}
|
|
251
|
-
return false;
|
|
252
|
-
}
|
|
253
|
-
onFilter(filterEvent) {
|
|
254
|
-
const rawKey = filterEvent.key;
|
|
255
|
-
const serverKey = FILTER_KEY_MAP[rawKey];
|
|
256
|
-
const value = this.getFilterValue(filterEvent.value);
|
|
257
|
-
const next = { ...this.activeFilters };
|
|
258
|
-
if (this.isEmptyFilter(value)) {
|
|
259
|
-
delete next[serverKey];
|
|
260
|
-
}
|
|
261
|
-
else {
|
|
262
|
-
// normalize to string for API (trim)
|
|
263
|
-
next[serverKey] = typeof value === 'string' ? value.trim() : String(value);
|
|
264
|
-
}
|
|
265
|
-
this.activeFilters = next;
|
|
266
|
-
this.pagination.pageIndex = 0;
|
|
267
|
-
// quick fix for demo
|
|
268
|
-
if (this.activeFilters['upgradeStatus']) {
|
|
269
|
-
this.activeFilters['upgradeStatus'] = this.activeFilters['upgradeStatus']?.toUpperCase();
|
|
270
|
-
}
|
|
271
|
-
this.getData(this.activeFilters);
|
|
272
|
-
}
|
|
273
|
-
/*onFilter(filterEvent: { key: string, value: any }) {
|
|
274
|
-
const {key, value} = filterEvent;
|
|
275
|
-
|
|
276
|
-
let filterValue: any;
|
|
277
|
-
if (value && value.value !== undefined) {
|
|
278
|
-
filterValue = value.value;
|
|
279
|
-
} else if (value && value.target) {
|
|
280
|
-
filterValue = value.target.value;
|
|
281
|
-
} else {
|
|
282
|
-
filterValue = value;
|
|
283
|
-
}
|
|
284
|
-
|
|
285
|
-
// Handle "All" option or empty values - remove the filter
|
|
286
|
-
if (filterValue === 'all' || !filterValue || filterValue === '') {
|
|
287
|
-
delete this.activeFilters[key];
|
|
288
|
-
} else {
|
|
289
|
-
this.activeFilters[key] = filterValue;
|
|
290
|
-
}
|
|
291
|
-
|
|
292
|
-
this.applyFilters();
|
|
293
|
-
}*/
|
|
294
|
-
setupCustomFilter() {
|
|
295
|
-
this.data.filterPredicate = (data, filter) => {
|
|
296
|
-
const filters = JSON.parse(filter || '{}');
|
|
297
|
-
for (const [key, value] of Object.entries(filters)) {
|
|
298
|
-
if (!value)
|
|
299
|
-
continue;
|
|
300
|
-
switch (key) {
|
|
301
|
-
case 'User':
|
|
302
|
-
const searchTerm = value.toLowerCase();
|
|
303
|
-
if (!data.userName.toLowerCase().includes(searchTerm)) {
|
|
304
|
-
return false;
|
|
305
|
-
}
|
|
306
|
-
break;
|
|
307
|
-
case 'Site':
|
|
308
|
-
if (data.siteName !== this.getSiteNameFromValue(value)) {
|
|
309
|
-
return false;
|
|
310
|
-
}
|
|
311
|
-
break;
|
|
312
|
-
case 'User Upgrade Status':
|
|
313
|
-
if (!this.matchesUpgradeStatus(data.upgradeStatus, value)) {
|
|
314
|
-
return false;
|
|
315
|
-
}
|
|
316
|
-
break;
|
|
317
|
-
}
|
|
318
|
-
}
|
|
319
|
-
return true;
|
|
320
|
-
};
|
|
321
|
-
}
|
|
322
|
-
applyFilters() {
|
|
323
|
-
this.data.filter = JSON.stringify(this.activeFilters);
|
|
324
|
-
}
|
|
325
|
-
get filteredDataCount() {
|
|
326
|
-
return this.data?.filteredData?.length || 0;
|
|
327
|
-
}
|
|
328
|
-
getSiteNameFromValue(value) {
|
|
329
|
-
// Since we're now using actual site names, just convert back from slug format
|
|
330
|
-
return value.split('-').map(word => word.charAt(0).toUpperCase() + word.slice(1)).join(' ');
|
|
331
|
-
}
|
|
332
|
-
matchesUpgradeStatus(status, filterValue) {
|
|
333
|
-
// Handle direct status matching for cleaner implementation
|
|
334
|
-
return status.toLowerCase().replace(/\s+/g, '-') === filterValue.toLowerCase();
|
|
335
|
-
}
|
|
336
|
-
getStatusClass(status) {
|
|
337
|
-
switch (status.toLowerCase()) {
|
|
338
|
-
case 'ready':
|
|
339
|
-
return 'ready';
|
|
340
|
-
case 'not ready':
|
|
341
|
-
return 'not-ready';
|
|
342
|
-
case 'partial ready':
|
|
343
|
-
return 'partial-ready';
|
|
344
|
-
case 'completed':
|
|
345
|
-
return 'completed';
|
|
346
|
-
case 'failed':
|
|
347
|
-
return 'failed';
|
|
348
|
-
default:
|
|
349
|
-
return 'not-ready';
|
|
350
|
-
}
|
|
351
|
-
}
|
|
352
|
-
}
|
|
353
|
-
UserUpgradeDataTableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: UserUpgradeDataTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
354
|
-
UserUpgradeDataTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: UserUpgradeDataTableComponent, selector: "tk-user-upgrade-data-table", inputs: { token: "token", customerId: "customerId" }, ngImport: i0, template: "<div *ngIf=\"dataPending\" class=\"overlay\">\r\n <mat-progress-spinner\r\n class=\"page-spinner\"\r\n mode=\"indeterminate\"\r\n [diameter]=\"120\"></mat-progress-spinner>\r\n</div>\r\n\r\n<div id=\"userUpgradeDataTable\" class=\"wrapper\">\r\n <div class=\"user-upgrade-status-wrapper\">\r\n <tk-summary-card [description]=\"'Users are ready to upgrade'\" [value]=\"statusCounts['Ready']\"></tk-summary-card>\r\n <tk-summary-card [description]=\"'Users are not ready'\" [value]=\"statusCounts['Not Ready']\" [status]=\"'Not Ready'\"></tk-summary-card>\r\n <tk-summary-card [description]=\"'Users failed to upgrade'\" [value]=\"statusCounts['Failed']\" [status]=\"'Failed'\"></tk-summary-card>\r\n <tk-summary-card [description]=\"'Successfully upgraded'\" [value]=\"statusCounts['Completed']\" [status]=\"'Completed'\"></tk-summary-card>\r\n </div>\r\n <div class=\"table-action-panel\">\r\n <tk-table-filters *ngIf=\"filters.length > 0\" [filters]=\"filters\" (filter)=\"onFilter($event)\"></tk-table-filters>\r\n <div class=\"action-wrapper\">\r\n <span>{{filteredDataCount}} Users</span>\r\n <button\r\n mat-button\r\n class=\"upgrade-bulk-button\"\r\n color=\"primary\"\r\n [disabled]=\"selection.selected.length === 0\"\r\n (click)=\"upgradeSelectedUsers()\">\r\n Upgrade {{ selection.selected.length === 0 ? '' : '(' + selection.selected.length + ')' }}\r\n </button>\r\n </div>\r\n </div>\r\n <table mat-table [dataSource]=\"data\" class=\"user-upgrade-table\">\r\n\r\n <!-- Checkbox Column -->\r\n <ng-container matColumnDef=\"select\">\r\n <th mat-header-cell *matHeaderCellDef>\r\n <mat-checkbox\r\n (change)=\"$event ? masterToggle() : null\"\r\n [checked]=\"selection.hasValue() && isAllSelected()\"\r\n [indeterminate]=\"selection.hasValue() && !isAllSelected()\"\r\n class=\"custom-checkbox\">\r\n </mat-checkbox>\r\n </th>\r\n <td mat-cell *matCellDef=\"let row\">\r\n <mat-checkbox\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"$event ? selection.toggle(row) : null\"\r\n [checked]=\"selection.isSelected(row)\"\r\n [disabled]=\"STATUS_ENTRIES[row.upgradeStatus] !== 'Ready' || row.pending\"\r\n class=\"custom-checkbox\">\r\n </mat-checkbox>\r\n </td>\r\n </ng-container>\r\n\r\n <!-- User Column -->\r\n <ng-container matColumnDef=\"user\">\r\n <th mat-header-cell *matHeaderCellDef>User</th>\r\n <td mat-cell *matCellDef=\"let element\">\r\n <div class=\"user-info\">\r\n <div class=\"user-name\">{{element.userName}}</div>\r\n <div class=\"user-email\">{{element.userName}}</div>\r\n </div>\r\n </td>\r\n </ng-container>\r\n\r\n <!-- Site Column -->\r\n <ng-container matColumnDef=\"site\">\r\n <th mat-header-cell *matHeaderCellDef>Site</th>\r\n <td mat-cell *matCellDef=\"let element\">\r\n <div class=\"site-info\">\r\n <span class=\"status-indicator\" [ngClass]=\"getSiteUpgradeStatusClass(element.upgradeStatus)\"></span>\r\n <span>{{element.siteName}}</span>\r\n </div>\r\n </td>\r\n </ng-container>\r\n\r\n <!-- Device Column -->\r\n <ng-container matColumnDef=\"device\">\r\n <th class=\"device-td\" mat-header-cell *matHeaderCellDef>Device</th>\r\n <td mat-cell *matCellDef=\"let element\" class=\"multi-dev-box\">\r\n <div *ngIf=\"element.showDevices\" class=\"device-list show-dev-list\">\r\n <div *ngFor=\"let device of element.devicesWithExtensions; let last = last\"\r\n class=\"device-item\"\r\n [class.no-border]=\"last\">\r\n <span class=\"device-indicator\" [ngClass]=\"{'device-indicator-ready': element.deviceStatus === 'READY'}\"></span>\r\n <span class=\"device-name\">{{ device.deviceName || device }}</span>\r\n <span class=\"device-model\">\r\n {{ device.extensions?.length ? 'Ext: ' + device.extensions.join(\", \") : 'No Extension' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"device-info\">\r\n <div class=\"multiple-dev-link\" *ngIf=\"element.devicesWithExtensions?.length > 1; else oneDevice\">\r\n <div class=\"device-name-wrapper clickable\"\r\n (mouseenter)=\"onMultipleDevices(element)\"\r\n (mouseleave)=\"onMultipleDevices(element)\">\r\n\r\n <span class=\"device-name\">Multiple devices ></span>\r\n </div>\r\n </div>\r\n <ng-template #oneDevice>\r\n <div class=\"device-name-wrapper\">\r\n <span class=\"device-indicator\"></span>\r\n <span class=\"device-name\">{{element.devicesWithExtensions[0].deviceName}}</span>\r\n </div>\r\n <div class=\"device-model one-dev-extensions\">\r\n {{ element.devicesWithExtensions[0].extensions?.length ?\r\n 'Ext: ' + element.devicesWithExtensions[0].extensions?.join(\", \") : 'No Extension' }}\r\n </div>\r\n </ng-template>\r\n </div>\r\n </td>\r\n </ng-container>\r\n\r\n <!-- Dial Plan Status Column -->\r\n <ng-container matColumnDef=\"dialPlanStatus\">\r\n <th mat-header-cell *matHeaderCellDef>Dial Plan Status</th>\r\n <td mat-cell *matCellDef=\"let element\">\r\n <div class=\"status-info\">\r\n <span class=\"status-indicator\" [ngClass]=\"getStatusClass(element.dialPlanStatus)\"></span>\r\n <span [ngClass]=\"{'status-ready': element.dialPlanStatus === 'READY'}\">{{STATUS_ENTRIES[element.dialPlanStatus]}}</span>\r\n </div>\r\n </td>\r\n </ng-container>\r\n\r\n <!-- Dependencies Column -->\r\n <ng-container matColumnDef=\"dependencies\">\r\n <th mat-header-cell *matHeaderCellDef>Dependencies</th>\r\n <td mat-cell *matCellDef=\"let element\">\r\n <span *ngIf=\"DEPENDENCIES_STATUS[element.dependenciesStatus] === 'Dependencies found'\" class=\"dependencies-text\">{{DEPENDENCIES_STATUS[element.dependenciesStatus]}}</span>\r\n <span *ngIf=\"DEPENDENCIES_STATUS[element.dependenciesStatus] === 'No dependencies'\">\u2014</span>\r\n </td>\r\n </ng-container>\r\n\r\n <!-- User Upgrade Status Column -->\r\n <ng-container matColumnDef=\"userUpgradeStatus\">\r\n <th mat-header-cell *matHeaderCellDef>User Upgrade Status</th>\r\n <td mat-cell *matCellDef=\"let element\">\r\n <div class=\"upgrade-status-cell\">\r\n <ng-container *ngIf=\"STATUS_ENTRIES[element.upgradeStatus] === 'Ready'; else statusBlock\">\r\n <button mat-button color=\"primary\" class=\"upgrade-button\" (click)=\"upgradeUser(element)\">Upgrade</button>\r\n </ng-container>\r\n <ng-template #statusBlock>\r\n <div class=\"status-info\">\r\n <span class=\"status-indicator\" [ngClass]=\"getStatusClass(element.upgradeStatus)\"></span>\r\n <span>{{STATUS_ENTRIES[element.upgradeStatus]}}</span>\r\n </div>\r\n </ng-template>\r\n </div>\r\n\r\n </td>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"userUpgradeLoader\">\r\n <th mat-header-cell *matHeaderCellDef></th>\r\n <td class=\"mat-progress-spinner-td\" mat-cell *matCellDef=\"let element\">\r\n\r\n <mat-progress-spinner\r\n *ngIf=\"element.pending\"\r\n class=\"field-spinner\"\r\n [diameter]=\"20\"\r\n mode=\"indeterminate\">\r\n </mat-progress-spinner>\r\n </td>\r\n </ng-container>\r\n\r\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\r\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"\r\n [class.selected-row]=\"selection.isSelected(row)\"></tr>\r\n </table>\r\n</div>\r\n\r\n<div class=\"app-pagination\">\r\n <mat-paginator\r\n [length]=\"pagination.total\"\r\n [pageSize]=\"pagination.pageSize\"\r\n [pageSizeOptions]=\"pagination.pageSizeOptions\"\r\n [pageIndex]=\"pagination.pageIndex\"\r\n (page)=\"pageEvent($event)\"\r\n showFirstLastButtons>\r\n </mat-paginator>\r\n\r\n <!--<div class=\"page-indexes-box\">\r\n <mat-paginator\r\n [id]=\"'commonPagination'\"\r\n [hidePageSize]=\"true\"\r\n [length]=\"pagination.total\"\r\n [pageIndex]=\"pagination.pageIndex\"\r\n [pageSize]=\"pagination.pageSize\"\r\n [pageSizeOptions]=\"pagination.pageSizeOptions\"\r\n (page)=\"pageEvent($event)\">\r\n </mat-paginator>\r\n </div>\r\n\r\n <div class=\"per-page-block\">\r\n <div class=\"item_per_page\">Items per page:</div>\r\n <div class=\"select-box select-page-size\">\r\n <mat-select (selectionChange)=\"changePerPageNumber($event)\" #page\r\n [id]=\"'commonPaginationSelect'\">\r\n <mat-option *ngFor=\"let option of pageSizeOptions; let i = index;\" [id]=\"'paginationSelectOpt_' + i\" [value]=\"option\">{{option}}</mat-option>\r\n </mat-select>\r\n </div>\r\n\r\n </div>-->\r\n</div>\r\n", styles: ["@import\"https://fonts.googleapis.com/css?family=Poppins:400,100,200,300,500,600,800,700,900\";@import\"https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap\";.app-pagination{display:flex;flex-direction:column;align-items:stretch}.app-pagination .page-indexes-box,.app-pagination .per-page-block{justify-self:center}.app-pagination mat-select{width:100px}.overlay{position:fixed;width:100%;height:100%;inset:0;background-color:#fff6;z-index:200}.mat-progress-spinner{position:absolute;top:50%;left:50%;margin-top:-20px;margin-left:-25px;width:50px;height:40px;text-align:center;font-size:10px}.mat-progress-spinner-td{position:relative}#userUpgradeDataTable .flex-container{padding:0!important}.multiple-dev-link{margin:0 0 0 13px}::ng-deep .mat-cell{border-bottom:1px solid #d6d6d6;font-family:Inter,sans-serif!important}::ng-deep .mat-header-cell{border-bottom:1px solid #afafaf;font-family:Inter,sans-serif!important}::ng-deep .progress-spinner-td{position:relative}::ng-deep #userUpgradeDataTable .mat-progress-spinner-td .mat-progress-spinner{top:28%;left:0;margin:0}.wrapper{display:flex;flex-direction:column;gap:1rem}.user-upgrade-status-wrapper{display:flex;align-items:center;gap:1rem;flex-wrap:wrap;margin-bottom:1rem}.user-upgrade-table{width:100%;background:white;border-radius:8px;overflow:hidden;font-size:14px}.user-upgrade-table .mat-header-row{font-size:12px;height:35px}.user-upgrade-table .mat-cell{border-bottom:1px solid #d6d6d6}.user-upgrade-table .mat-header-cell{border-bottom:1px solid #afafaf}.user-upgrade-table .mat-row{transition:background-color .2s ease}.user-upgrade-table .mat-row:hover{background-color:#f8f9fa}.user-upgrade-table .mat-row.selected-row{background-color:#08599c1a}.user-upgrade-table .user-info .user-name{font-weight:500;color:#212121}.user-upgrade-table .user-info .user-email{font-size:12px;color:#757575}.user-upgrade-table .site-info{display:flex;align-items:center;gap:8px}.user-upgrade-table .site-info .site-indicator{width:8px;height:8px;border-radius:50%;background-color:#737480}.user-upgrade-table .device-info .device-name-wrapper{display:flex;align-items:center;gap:5px}.user-upgrade-table .device-info .device-name-wrapper .device-name{font-weight:500;color:#212121}.user-upgrade-table .device-model{font-size:12px;color:#757575;display:block}.user-upgrade-table .one-dev-extensions{margin:0 0 0 13px}.user-upgrade-table .device-indicator{width:8px;height:8px;border-radius:50%;background-color:#f8cd00}.user-upgrade-table .device-indicator-ready{background-color:#1d805f}.user-upgrade-table .device-td{padding:0 0 0 13px}.user-upgrade-table .status-info{display:flex;align-items:center;gap:8px}.user-upgrade-table .status-info .status-indicator{width:8px;height:8px;border-radius:50%}.user-upgrade-table .status-info .status-indicator.ready{background-color:#1170cf}.user-upgrade-table .status-info .status-indicator.partial-ready{background-color:#f8cd00}.user-upgrade-table .status-info .status-indicator.not-ready{background-color:#9e9e9e}.user-upgrade-table .status-info .status-indicator.completed{background-color:#1d805f}.user-upgrade-table .status-info .status-indicator.failed{background-color:#f23933}.user-upgrade-table .dependencies-text{font-size:12px;background-color:#ffe9e9;padding:.25rem .5rem;border-radius:3px;color:#000}.user-upgrade-table .upgrade-status-cell{display:flex;align-items:center;justify-content:flex-start}.user-upgrade-table .upgrade-button{border:1px solid #08599c!important;color:#08599c!important;background:white!important;border-radius:20px!important;font-size:14px!important;font-style:normal!important;font-weight:500!important;height:32px!important;display:flex!important;align-items:center!important;justify-content:center!important}.user-upgrade-table .upgrade-button:hover{background-color:#e3f2fd!important}.user-upgrade-table .custom-checkbox .mdc-checkbox{padding:8px}.mat-checkbox-disabled{opacity:.5}.multi-dev-box{position:relative}.device-list{position:absolute;top:65%;left:0;min-width:200px;background:white;box-shadow:0 2px 8px #0000001a;padding:8px 0;margin-top:4px;border-radius:2px;opacity:0;transform:translateY(-10px);visibility:hidden;transition:all .3s ease;z-index:1000}.device-list.show-dev-list{opacity:1;transform:translateY(0);visibility:visible;pointer-events:auto}.clickable{cursor:pointer}.device-item{padding:12px 16px;border-bottom:1px solid #f5f5f5;cursor:pointer;transition:background-color .2s ease}.device-item:hover{background-color:#f9f9f9}.device-item.no-border{border-bottom:none}.device-item .device-name{font-size:14px;color:#333}.table-action-panel{width:100%;display:flex;justify-content:flex-start;gap:1rem}::ng-deep .action-wrapper{display:flex;flex:1;align-items:center;justify-content:space-between;gap:1rem;color:#555}.upgrade-bulk-button{border:1px solid #000!important;color:#fff!important;background:#000!important;border-radius:20px!important;padding:0 1rem!important;font-size:14px!important;font-style:normal!important;font-weight:400!important;height:36px!important;display:flex!important;align-items:center!important;justify-content:center!important}.upgrade-bulk-button:hover{background-color:#212121!important}.upgrade-bulk-button:disabled{background-color:#888!important;color:#fff!important;cursor:not-allowed!important;border-color:#888!important;opacity:.25!important}:host ::ng-deep .user-upgrade-table .mat-checkbox-checked.mat-accent .mat-checkbox-background{background-color:#08599c!important;border-color:#08599c!important}:host ::ng-deep .user-upgrade-table .mat-checkbox-indeterminate.mat-accent .mat-checkbox-background{background-color:#08599c!important;border-color:#08599c!important}:host ::ng-deep .user-upgrade-table .mat-checkbox.mat-accent .mat-checkbox-background{border-color:#08599c99!important}:host ::ng-deep .user-upgrade-table .mat-checkbox.mat-accent .mat-ripple-element{background-color:#08599c1a!important}:host ::ng-deep .user-upgrade-table .mat-checkbox.mat-accent:focus .mat-checkbox-background{background-color:#08599c1a!important}:host ::ng-deep .user-upgrade-table .mat-checkbox.mat-accent .mat-checkbox-frame{border-color:#08599c99!important}:host ::ng-deep .user-upgrade-table .mat-checkbox-checkmark{color:#fff!important}:host ::ng-deep .user-upgrade-table .mat-checkbox-checkmark-path{stroke:#fff!important}:host ::ng-deep .user-upgrade-table .mat-checkbox-mixedmark{border-color:#fff!important}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.SummaryCardComponent, selector: "tk-summary-card", inputs: ["value", "status", "description"] }, { kind: "component", type: i3.TableFiltersComponent, selector: "tk-table-filters", inputs: ["filters"], outputs: ["filter"] }, { kind: "component", type: i4.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i4.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i4.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i4.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { kind: "directive", type: i4.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i4.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i4.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i4.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i4.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i4.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: i5.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i6.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "component", type: i7.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "diameter", "strokeWidth", "mode", "value"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: i8.MatPaginator, selector: "mat-paginator", inputs: ["disabled"], exportAs: ["matPaginator"] }] });
|
|
355
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: UserUpgradeDataTableComponent, decorators: [{
|
|
356
|
-
type: Component,
|
|
357
|
-
args: [{ selector: 'tk-user-upgrade-data-table', template: "<div *ngIf=\"dataPending\" class=\"overlay\">\r\n <mat-progress-spinner\r\n class=\"page-spinner\"\r\n mode=\"indeterminate\"\r\n [diameter]=\"120\"></mat-progress-spinner>\r\n</div>\r\n\r\n<div id=\"userUpgradeDataTable\" class=\"wrapper\">\r\n <div class=\"user-upgrade-status-wrapper\">\r\n <tk-summary-card [description]=\"'Users are ready to upgrade'\" [value]=\"statusCounts['Ready']\"></tk-summary-card>\r\n <tk-summary-card [description]=\"'Users are not ready'\" [value]=\"statusCounts['Not Ready']\" [status]=\"'Not Ready'\"></tk-summary-card>\r\n <tk-summary-card [description]=\"'Users failed to upgrade'\" [value]=\"statusCounts['Failed']\" [status]=\"'Failed'\"></tk-summary-card>\r\n <tk-summary-card [description]=\"'Successfully upgraded'\" [value]=\"statusCounts['Completed']\" [status]=\"'Completed'\"></tk-summary-card>\r\n </div>\r\n <div class=\"table-action-panel\">\r\n <tk-table-filters *ngIf=\"filters.length > 0\" [filters]=\"filters\" (filter)=\"onFilter($event)\"></tk-table-filters>\r\n <div class=\"action-wrapper\">\r\n <span>{{filteredDataCount}} Users</span>\r\n <button\r\n mat-button\r\n class=\"upgrade-bulk-button\"\r\n color=\"primary\"\r\n [disabled]=\"selection.selected.length === 0\"\r\n (click)=\"upgradeSelectedUsers()\">\r\n Upgrade {{ selection.selected.length === 0 ? '' : '(' + selection.selected.length + ')' }}\r\n </button>\r\n </div>\r\n </div>\r\n <table mat-table [dataSource]=\"data\" class=\"user-upgrade-table\">\r\n\r\n <!-- Checkbox Column -->\r\n <ng-container matColumnDef=\"select\">\r\n <th mat-header-cell *matHeaderCellDef>\r\n <mat-checkbox\r\n (change)=\"$event ? masterToggle() : null\"\r\n [checked]=\"selection.hasValue() && isAllSelected()\"\r\n [indeterminate]=\"selection.hasValue() && !isAllSelected()\"\r\n class=\"custom-checkbox\">\r\n </mat-checkbox>\r\n </th>\r\n <td mat-cell *matCellDef=\"let row\">\r\n <mat-checkbox\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"$event ? selection.toggle(row) : null\"\r\n [checked]=\"selection.isSelected(row)\"\r\n [disabled]=\"STATUS_ENTRIES[row.upgradeStatus] !== 'Ready' || row.pending\"\r\n class=\"custom-checkbox\">\r\n </mat-checkbox>\r\n </td>\r\n </ng-container>\r\n\r\n <!-- User Column -->\r\n <ng-container matColumnDef=\"user\">\r\n <th mat-header-cell *matHeaderCellDef>User</th>\r\n <td mat-cell *matCellDef=\"let element\">\r\n <div class=\"user-info\">\r\n <div class=\"user-name\">{{element.userName}}</div>\r\n <div class=\"user-email\">{{element.userName}}</div>\r\n </div>\r\n </td>\r\n </ng-container>\r\n\r\n <!-- Site Column -->\r\n <ng-container matColumnDef=\"site\">\r\n <th mat-header-cell *matHeaderCellDef>Site</th>\r\n <td mat-cell *matCellDef=\"let element\">\r\n <div class=\"site-info\">\r\n <span class=\"status-indicator\" [ngClass]=\"getSiteUpgradeStatusClass(element.upgradeStatus)\"></span>\r\n <span>{{element.siteName}}</span>\r\n </div>\r\n </td>\r\n </ng-container>\r\n\r\n <!-- Device Column -->\r\n <ng-container matColumnDef=\"device\">\r\n <th class=\"device-td\" mat-header-cell *matHeaderCellDef>Device</th>\r\n <td mat-cell *matCellDef=\"let element\" class=\"multi-dev-box\">\r\n <div *ngIf=\"element.showDevices\" class=\"device-list show-dev-list\">\r\n <div *ngFor=\"let device of element.devicesWithExtensions; let last = last\"\r\n class=\"device-item\"\r\n [class.no-border]=\"last\">\r\n <span class=\"device-indicator\" [ngClass]=\"{'device-indicator-ready': element.deviceStatus === 'READY'}\"></span>\r\n <span class=\"device-name\">{{ device.deviceName || device }}</span>\r\n <span class=\"device-model\">\r\n {{ device.extensions?.length ? 'Ext: ' + device.extensions.join(\", \") : 'No Extension' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"device-info\">\r\n <div class=\"multiple-dev-link\" *ngIf=\"element.devicesWithExtensions?.length > 1; else oneDevice\">\r\n <div class=\"device-name-wrapper clickable\"\r\n (mouseenter)=\"onMultipleDevices(element)\"\r\n (mouseleave)=\"onMultipleDevices(element)\">\r\n\r\n <span class=\"device-name\">Multiple devices ></span>\r\n </div>\r\n </div>\r\n <ng-template #oneDevice>\r\n <div class=\"device-name-wrapper\">\r\n <span class=\"device-indicator\"></span>\r\n <span class=\"device-name\">{{element.devicesWithExtensions[0].deviceName}}</span>\r\n </div>\r\n <div class=\"device-model one-dev-extensions\">\r\n {{ element.devicesWithExtensions[0].extensions?.length ?\r\n 'Ext: ' + element.devicesWithExtensions[0].extensions?.join(\", \") : 'No Extension' }}\r\n </div>\r\n </ng-template>\r\n </div>\r\n </td>\r\n </ng-container>\r\n\r\n <!-- Dial Plan Status Column -->\r\n <ng-container matColumnDef=\"dialPlanStatus\">\r\n <th mat-header-cell *matHeaderCellDef>Dial Plan Status</th>\r\n <td mat-cell *matCellDef=\"let element\">\r\n <div class=\"status-info\">\r\n <span class=\"status-indicator\" [ngClass]=\"getStatusClass(element.dialPlanStatus)\"></span>\r\n <span [ngClass]=\"{'status-ready': element.dialPlanStatus === 'READY'}\">{{STATUS_ENTRIES[element.dialPlanStatus]}}</span>\r\n </div>\r\n </td>\r\n </ng-container>\r\n\r\n <!-- Dependencies Column -->\r\n <ng-container matColumnDef=\"dependencies\">\r\n <th mat-header-cell *matHeaderCellDef>Dependencies</th>\r\n <td mat-cell *matCellDef=\"let element\">\r\n <span *ngIf=\"DEPENDENCIES_STATUS[element.dependenciesStatus] === 'Dependencies found'\" class=\"dependencies-text\">{{DEPENDENCIES_STATUS[element.dependenciesStatus]}}</span>\r\n <span *ngIf=\"DEPENDENCIES_STATUS[element.dependenciesStatus] === 'No dependencies'\">\u2014</span>\r\n </td>\r\n </ng-container>\r\n\r\n <!-- User Upgrade Status Column -->\r\n <ng-container matColumnDef=\"userUpgradeStatus\">\r\n <th mat-header-cell *matHeaderCellDef>User Upgrade Status</th>\r\n <td mat-cell *matCellDef=\"let element\">\r\n <div class=\"upgrade-status-cell\">\r\n <ng-container *ngIf=\"STATUS_ENTRIES[element.upgradeStatus] === 'Ready'; else statusBlock\">\r\n <button mat-button color=\"primary\" class=\"upgrade-button\" (click)=\"upgradeUser(element)\">Upgrade</button>\r\n </ng-container>\r\n <ng-template #statusBlock>\r\n <div class=\"status-info\">\r\n <span class=\"status-indicator\" [ngClass]=\"getStatusClass(element.upgradeStatus)\"></span>\r\n <span>{{STATUS_ENTRIES[element.upgradeStatus]}}</span>\r\n </div>\r\n </ng-template>\r\n </div>\r\n\r\n </td>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"userUpgradeLoader\">\r\n <th mat-header-cell *matHeaderCellDef></th>\r\n <td class=\"mat-progress-spinner-td\" mat-cell *matCellDef=\"let element\">\r\n\r\n <mat-progress-spinner\r\n *ngIf=\"element.pending\"\r\n class=\"field-spinner\"\r\n [diameter]=\"20\"\r\n mode=\"indeterminate\">\r\n </mat-progress-spinner>\r\n </td>\r\n </ng-container>\r\n\r\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\r\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"\r\n [class.selected-row]=\"selection.isSelected(row)\"></tr>\r\n </table>\r\n</div>\r\n\r\n<div class=\"app-pagination\">\r\n <mat-paginator\r\n [length]=\"pagination.total\"\r\n [pageSize]=\"pagination.pageSize\"\r\n [pageSizeOptions]=\"pagination.pageSizeOptions\"\r\n [pageIndex]=\"pagination.pageIndex\"\r\n (page)=\"pageEvent($event)\"\r\n showFirstLastButtons>\r\n </mat-paginator>\r\n\r\n <!--<div class=\"page-indexes-box\">\r\n <mat-paginator\r\n [id]=\"'commonPagination'\"\r\n [hidePageSize]=\"true\"\r\n [length]=\"pagination.total\"\r\n [pageIndex]=\"pagination.pageIndex\"\r\n [pageSize]=\"pagination.pageSize\"\r\n [pageSizeOptions]=\"pagination.pageSizeOptions\"\r\n (page)=\"pageEvent($event)\">\r\n </mat-paginator>\r\n </div>\r\n\r\n <div class=\"per-page-block\">\r\n <div class=\"item_per_page\">Items per page:</div>\r\n <div class=\"select-box select-page-size\">\r\n <mat-select (selectionChange)=\"changePerPageNumber($event)\" #page\r\n [id]=\"'commonPaginationSelect'\">\r\n <mat-option *ngFor=\"let option of pageSizeOptions; let i = index;\" [id]=\"'paginationSelectOpt_' + i\" [value]=\"option\">{{option}}</mat-option>\r\n </mat-select>\r\n </div>\r\n\r\n </div>-->\r\n</div>\r\n", styles: ["@import\"https://fonts.googleapis.com/css?family=Poppins:400,100,200,300,500,600,800,700,900\";@import\"https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap\";.app-pagination{display:flex;flex-direction:column;align-items:stretch}.app-pagination .page-indexes-box,.app-pagination .per-page-block{justify-self:center}.app-pagination mat-select{width:100px}.overlay{position:fixed;width:100%;height:100%;inset:0;background-color:#fff6;z-index:200}.mat-progress-spinner{position:absolute;top:50%;left:50%;margin-top:-20px;margin-left:-25px;width:50px;height:40px;text-align:center;font-size:10px}.mat-progress-spinner-td{position:relative}#userUpgradeDataTable .flex-container{padding:0!important}.multiple-dev-link{margin:0 0 0 13px}::ng-deep .mat-cell{border-bottom:1px solid #d6d6d6;font-family:Inter,sans-serif!important}::ng-deep .mat-header-cell{border-bottom:1px solid #afafaf;font-family:Inter,sans-serif!important}::ng-deep .progress-spinner-td{position:relative}::ng-deep #userUpgradeDataTable .mat-progress-spinner-td .mat-progress-spinner{top:28%;left:0;margin:0}.wrapper{display:flex;flex-direction:column;gap:1rem}.user-upgrade-status-wrapper{display:flex;align-items:center;gap:1rem;flex-wrap:wrap;margin-bottom:1rem}.user-upgrade-table{width:100%;background:white;border-radius:8px;overflow:hidden;font-size:14px}.user-upgrade-table .mat-header-row{font-size:12px;height:35px}.user-upgrade-table .mat-cell{border-bottom:1px solid #d6d6d6}.user-upgrade-table .mat-header-cell{border-bottom:1px solid #afafaf}.user-upgrade-table .mat-row{transition:background-color .2s ease}.user-upgrade-table .mat-row:hover{background-color:#f8f9fa}.user-upgrade-table .mat-row.selected-row{background-color:#08599c1a}.user-upgrade-table .user-info .user-name{font-weight:500;color:#212121}.user-upgrade-table .user-info .user-email{font-size:12px;color:#757575}.user-upgrade-table .site-info{display:flex;align-items:center;gap:8px}.user-upgrade-table .site-info .site-indicator{width:8px;height:8px;border-radius:50%;background-color:#737480}.user-upgrade-table .device-info .device-name-wrapper{display:flex;align-items:center;gap:5px}.user-upgrade-table .device-info .device-name-wrapper .device-name{font-weight:500;color:#212121}.user-upgrade-table .device-model{font-size:12px;color:#757575;display:block}.user-upgrade-table .one-dev-extensions{margin:0 0 0 13px}.user-upgrade-table .device-indicator{width:8px;height:8px;border-radius:50%;background-color:#f8cd00}.user-upgrade-table .device-indicator-ready{background-color:#1d805f}.user-upgrade-table .device-td{padding:0 0 0 13px}.user-upgrade-table .status-info{display:flex;align-items:center;gap:8px}.user-upgrade-table .status-info .status-indicator{width:8px;height:8px;border-radius:50%}.user-upgrade-table .status-info .status-indicator.ready{background-color:#1170cf}.user-upgrade-table .status-info .status-indicator.partial-ready{background-color:#f8cd00}.user-upgrade-table .status-info .status-indicator.not-ready{background-color:#9e9e9e}.user-upgrade-table .status-info .status-indicator.completed{background-color:#1d805f}.user-upgrade-table .status-info .status-indicator.failed{background-color:#f23933}.user-upgrade-table .dependencies-text{font-size:12px;background-color:#ffe9e9;padding:.25rem .5rem;border-radius:3px;color:#000}.user-upgrade-table .upgrade-status-cell{display:flex;align-items:center;justify-content:flex-start}.user-upgrade-table .upgrade-button{border:1px solid #08599c!important;color:#08599c!important;background:white!important;border-radius:20px!important;font-size:14px!important;font-style:normal!important;font-weight:500!important;height:32px!important;display:flex!important;align-items:center!important;justify-content:center!important}.user-upgrade-table .upgrade-button:hover{background-color:#e3f2fd!important}.user-upgrade-table .custom-checkbox .mdc-checkbox{padding:8px}.mat-checkbox-disabled{opacity:.5}.multi-dev-box{position:relative}.device-list{position:absolute;top:65%;left:0;min-width:200px;background:white;box-shadow:0 2px 8px #0000001a;padding:8px 0;margin-top:4px;border-radius:2px;opacity:0;transform:translateY(-10px);visibility:hidden;transition:all .3s ease;z-index:1000}.device-list.show-dev-list{opacity:1;transform:translateY(0);visibility:visible;pointer-events:auto}.clickable{cursor:pointer}.device-item{padding:12px 16px;border-bottom:1px solid #f5f5f5;cursor:pointer;transition:background-color .2s ease}.device-item:hover{background-color:#f9f9f9}.device-item.no-border{border-bottom:none}.device-item .device-name{font-size:14px;color:#333}.table-action-panel{width:100%;display:flex;justify-content:flex-start;gap:1rem}::ng-deep .action-wrapper{display:flex;flex:1;align-items:center;justify-content:space-between;gap:1rem;color:#555}.upgrade-bulk-button{border:1px solid #000!important;color:#fff!important;background:#000!important;border-radius:20px!important;padding:0 1rem!important;font-size:14px!important;font-style:normal!important;font-weight:400!important;height:36px!important;display:flex!important;align-items:center!important;justify-content:center!important}.upgrade-bulk-button:hover{background-color:#212121!important}.upgrade-bulk-button:disabled{background-color:#888!important;color:#fff!important;cursor:not-allowed!important;border-color:#888!important;opacity:.25!important}:host ::ng-deep .user-upgrade-table .mat-checkbox-checked.mat-accent .mat-checkbox-background{background-color:#08599c!important;border-color:#08599c!important}:host ::ng-deep .user-upgrade-table .mat-checkbox-indeterminate.mat-accent .mat-checkbox-background{background-color:#08599c!important;border-color:#08599c!important}:host ::ng-deep .user-upgrade-table .mat-checkbox.mat-accent .mat-checkbox-background{border-color:#08599c99!important}:host ::ng-deep .user-upgrade-table .mat-checkbox.mat-accent .mat-ripple-element{background-color:#08599c1a!important}:host ::ng-deep .user-upgrade-table .mat-checkbox.mat-accent:focus .mat-checkbox-background{background-color:#08599c1a!important}:host ::ng-deep .user-upgrade-table .mat-checkbox.mat-accent .mat-checkbox-frame{border-color:#08599c99!important}:host ::ng-deep .user-upgrade-table .mat-checkbox-checkmark{color:#fff!important}:host ::ng-deep .user-upgrade-table .mat-checkbox-checkmark-path{stroke:#fff!important}:host ::ng-deep .user-upgrade-table .mat-checkbox-mixedmark{border-color:#fff!important}\n"] }]
|
|
358
|
-
}], propDecorators: { token: [{
|
|
359
|
-
type: Input
|
|
360
|
-
}], customerId: [{
|
|
361
|
-
type: Input
|
|
362
|
-
}] } });
|
|
363
|
-
class PaginationDataDto {
|
|
364
|
-
constructor(data) {
|
|
365
|
-
this.pageSizeOptions = data?.pageSizeOptions || PAGINATION_DATA_DEFAULTS.OPTIONS;
|
|
366
|
-
this.pageSize = data?.pageSize || PAGINATION_DATA_DEFAULTS.SIZE;
|
|
367
|
-
this.pageIndex = data?.pageIndex || PAGINATION_DATA_DEFAULTS.PAGE_INDEX;
|
|
368
|
-
this.total = data?.total || 0;
|
|
369
|
-
}
|
|
370
|
-
}
|
|
371
|
-
const PAGINATION_DATA_DEFAULTS = {
|
|
372
|
-
OPTIONS: [10, 20, 50, 100],
|
|
373
|
-
SIZE: 10,
|
|
374
|
-
PAGE_INDEX: 0
|
|
375
|
-
};
|
|
376
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci11cGdyYWRlLWRhdGEtdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHVraS93aWRnZXRzL2RpMm10L3dpZGdldHMvdXNlci11cGdyYWRlL3VzZXItdXBncmFkZS1kYXRhLXRhYmxlL3VzZXItdXBncmFkZS1kYXRhLXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1a2kvd2lkZ2V0cy9kaTJtdC93aWRnZXRzL3VzZXItdXBncmFkZS91c2VyLXVwZ3JhZGUtZGF0YS10YWJsZS91c2VyLXVwZ3JhZGUtZGF0YS10YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFNBQVMsRUFBcUIsTUFBTSxFQUFFLEtBQUssRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFDL0YsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFHN0QsT0FBTyxFQUFrQixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzdELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDakMsT0FBTyxFQUNMLGNBQWMsRUFJZCxrQkFBa0IsRUFDbkIsTUFBTSx5QkFBeUIsQ0FBQztBQUNqQyxPQUFPLEVBQUUsbUJBQW1CLEVBQVUsY0FBYyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFOUYsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDOzs7Ozs7Ozs7O0FBU2xGLE1BQU0sT0FBTyw2QkFBNkI7SUFOMUM7UUFPVSxhQUFRLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztR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QUFFRCxNQUFNLHdCQUF3QixHQUFHO0lBQy9CLE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQztJQUMxQixJQUFJLEVBQUUsRUFBRTtJQUNSLFVBQVUsRUFBRSxDQUFDO0NBQ2QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNlbGVjdGlvbk1vZGVsIH0gZnJvbSBcIkBhbmd1bGFyL2Nkay9jb2xsZWN0aW9uc1wiO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgT25EZXN0cm95LCBpbmplY3QsIElucHV0LCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IE1hdFRhYmxlRGF0YVNvdXJjZSB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC90YWJsZVwiO1xyXG5pbXBvcnQgeyBUYWJsZUNvbHVtbiB9IGZyb20gXCIuLi8uLi8uLi9zaGFyZWQvdHlwZXMvZGF0YS10YWJsZVwiO1xyXG5pbXBvcnQgeyBUYWJsZUZpbHRlciB9IGZyb20gXCIuLi8uLi8uLi9zaGFyZWQvdHlwZXMvdGFibGUvZmlsdGVyXCI7XHJcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG9mLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQge1xyXG4gIEZJTFRFUl9LRVlfTUFQLFxyXG4gIFVpRmlsdGVyS2V5LFxyXG4gIFVzZXIyVXBncmFkZVN0YXR1c0RUTyxcclxuICBVc2VyU2VhcmNoUGFyYW1zLFxyXG4gIFVzZXJVcGdyYWRlU2VydmljZVxyXG59IGZyb20gXCIuLi91c2VyLXVwZ3JhZGUuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBERVBFTkRFTkNJRVNfU1RBVFVTLCBTdGF0dXMsIFNUQVRVU19FTlRSSUVTIH0gZnJvbSBcIi4uLy4uLy4uL3NoYXJlZC90eXBlcy9jb25zdGFudHNcIjtcclxuaW1wb3J0IHsgVXNlclVwZ3JhZGVSZWNvcmQgfSBmcm9tIFwiLi4vdHlwZXMvdXNlci11cGdyYWRlXCI7XHJcbmltcG9ydCB7IEFQSVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vc2hhcmVkL3NlcnZpY2VzL2FwaS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFBBR0lOQVRJT05fU0laRV9PUFRJT05TIH0gZnJvbSBcIi4uLy4uLy4uL3NoYXJlZC9jb25zdGFudHMvYXBwLmNvbnN0YW50c1wiO1xyXG5pbXBvcnQgeyBQYWdlRXZlbnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICd0ay11c2VyLXVwZ3JhZGUtZGF0YS10YWJsZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3VzZXItdXBncmFkZS1kYXRhLXRhYmxlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi91c2VyLXVwZ3JhZGUtZGF0YS10YWJsZS5jb21wb25lbnQuc2NzcyddLFxyXG4gIC8vIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLlNoYWRvd0RvbVxyXG59KVxyXG5leHBvcnQgY2xhc3MgVXNlclVwZ3JhZGVEYXRhVGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgcHJpdmF0ZSB1c2VyVXBncmFkZVNlcnZpY2UgPSBpbmplY3QoVXNlclVwZ3JhZGVTZXJ2aWNlKTtcclxuICBwcml2YXRlIGFwaVNlcnZpY2UgPSBpbmplY3QoQVBJU2VydmljZSk7XHJcbiAgcmVhZG9ubHkgU1RBVFVTX0VOVFJJRVMgPSBTVEFUVVNfRU5UUklFUztcclxuICByZWFkb25seSBERVBFTkRFTkNJRVNfU1RBVFVTID0gREVQRU5ERU5DSUVTX1NUQVRVUztcclxuXHJcbiAgQElucHV0KCkgdG9rZW4hOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgY3VzdG9tZXJJZCE6IHN0cmluZztcclxuXHJcbiAgY29sdW1ucyE6IFRhYmxlQ29sdW1uW107XHJcbiAgZGF0YVBlbmRpbmcgPSBmYWxzZTtcclxuICBkYXRhITogTWF0VGFibGVEYXRhU291cmNlPFVzZXJVcGdyYWRlUmVjb3JkPjtcclxuICBkaXNwbGF5ZWRDb2x1bW5zOiBzdHJpbmdbXSA9IFsnc2VsZWN0JywgJ3VzZXInLCAnc2l0ZScsICdkZXZpY2UnLCAnZGlhbFBsYW5TdGF0dXMnLCAnZGVwZW5kZW5jaWVzJywgJ3VzZXJVcGdyYWRlU3RhdHVzJywgJ3VzZXJVcGdyYWRlTG9hZGVyJ107XHJcbiAgc2VsZWN0aW9uID0gbmV3IFNlbGVjdGlvbk1vZGVsPFVzZXJVcGdyYWRlUmVjb3JkPih0cnVlLCBbXSk7XHJcbiAgZmlsdGVyczogVGFibGVGaWx0ZXJbXSA9IFtdO1xyXG4gIHBhZ2luYXRpb24gPSBuZXcgUGFnaW5hdGlvbkRhdGFEdG8oKTtcclxuICB1c2VyczogVXNlclVwZ3JhZGVSZWNvcmRbXSA9IFtdO1xyXG4gIHByaXZhdGUgc3Vic2NyaXB0aW9ucyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcclxuXHJcbiAgc3RhdHVzQ291bnRzOiBhbnkgPSB7fTtcclxuXHJcbiAgcHJpdmF0ZSBhY3RpdmVGaWx0ZXJzOiBQYXJ0aWFsPFVzZXJTZWFyY2hQYXJhbXM+ID0ge307XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kYXRhUGVuZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLmFwaVNlcnZpY2UudG9rZW4gPSB0aGlzLnRva2VuO1xyXG4gICAgdGhpcy51c2VyVXBncmFkZVNlcnZpY2UuY3VzdG9tZXJJZCA9IHRoaXMuY3VzdG9tZXJJZDtcclxuXHJcbiAgICBjb25zdCBzdWJzYzEgPSB0aGlzLnVzZXJVcGdyYWRlU2VydmljZS5nZXRVc2VyVXBncmFkZVJlY29yZHModGhpcy5wYWdpbmF0aW9uLnBhZ2VTaXplLCB0aGlzLnBhZ2luYXRpb24ucGFnZUluZGV4LCB0aGlzLmFjdGl2ZUZpbHRlcnMpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSgocmVzdWx0czogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgcmVjb3JkcyA9IHJlc3VsdHMuY29udGVudCBhcyBVc2VyVXBncmFkZVJlY29yZFtdXHJcbiAgICAgICAgcmVjb3Jkcy5mb3JFYWNoKHJlY29yZCA9PiB7XHJcbiAgICAgICAgICByZWNvcmQuZGV2aWNlc1dpdGhFeHRlbnNpb25zID0gdGhpcy51c2VyVXBncmFkZVNlcnZpY2UubWFwRGV2aWNlc1dpdGhFeHRlbnNpb25zKHJlY29yZC5kZXZpY2VzLCByZWNvcmQuZGV2aWNlRGV0YWlscyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5kYXRhID0gbmV3IE1hdFRhYmxlRGF0YVNvdXJjZShyZWNvcmRzKTtcclxuICAgICAgICB0aGlzLnBhZ2luYXRpb24udG90YWwgPSByZXN1bHRzLnRvdGFsRWxlbWVudHM7XHJcbiAgICAgICAgdGhpcy5kYXRhUGVuZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2V0dXBDdXN0b21GaWx0ZXIoKTtcclxuICAgICAgICB0aGlzLmluaXRpYWxpemVGaWx0ZXJzKHJlY29yZHMpO1xyXG4gICAgICB9KTtcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoc3Vic2MxKTtcclxuXHJcbiAgICBjb25zdCBzdWJzYzIgPSB0aGlzLnVzZXJVcGdyYWRlU2VydmljZS5nZXRVc2VyVXBncmFkZVN0YXR1c0NvdW50cygpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSgoc3RhdHVzQ291bnRzKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zdGF0dXNDb3VudHNbJ1JlYWR5J10gPSBzdGF0dXNDb3VudHNbJ1JFQURZJ10gfHwgMDtcclxuICAgICAgICB0aGlzLnN0YXR1c0NvdW50c1snTm90IFJlYWR5J10gPSBzdGF0dXNDb3VudHNbJ05PVF9SRUFEWSddIHx8IDA7XHJcbiAgICAgICAgdGhpcy5zdGF0dXNDb3VudHNbJ0NvbXBsZXRlZCddID0gc3RhdHVzQ291bnRzWydDT01QTEVURUQnXSB8fCAwO1xyXG4gICAgICAgIHRoaXMuc3RhdHVzQ291bnRzWydGYWlsZWQnXSA9IHN0YXR1c0NvdW50c1snRkFJTEVEJ10gfHwgMDtcclxuICAgICAgfSk7XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHN1YnNjMik7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xyXG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gICAgdGhpcy5kYXRhUGVuZGluZyA9IGZhbHNlO1xyXG5cclxuICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbnMpIHtcclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbk11bHRpcGxlRGV2aWNlcyh1c2VyOiBVc2VyVXBncmFkZVJlY29yZCk6IHZvaWQge1xyXG4gICAgdXNlci5zaG93RGV2aWNlcyA9ICF1c2VyLnNob3dEZXZpY2VzO1xyXG4gIH1cclxuXHJcbiAgcGFnZUV2ZW50IChldmVudDogUGFnZUV2ZW50KTogdm9pZCB7XHJcbiAgICB0aGlzLnBhZ2luYXRpb24ucGFnZUluZGV4ID0gZXZlbnQucGFnZUluZGV4O1xyXG4gICAgdGhpcy5wYWdpbmF0aW9uLnBhZ2VTaXplID0gZXZlbnQucGFnZVNpemU7XHJcbiAgICB0aGlzLmdldERhdGEoKTtcclxuICB9XHJcblxyXG4gIGdldFNpdGVVcGdyYWRlU3RhdHVzQ2xhc3Moc3RhdHVzOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgc3dpdGNoIChzdGF0dXMudG9Mb3dlckNhc2UoKSkge1xyXG4gICAgICBjYXNlICdyZWFkeSc6XHJcbiAgICAgICAgcmV0dXJuICdzdGF0dXMtcmVhZHknO1xyXG4gICAgICBjYXNlICdwYXJ0aWFsIHJlYWR5JzpcclxuICAgICAgICByZXR1cm4gJ3BhcnRpYWwtcmVhZHknO1xyXG4gICAgICBjYXNlICdjb21wbGV0ZWQnOlxyXG4gICAgICAgIHJldHVybiAnY29tcGxldGVkJztcclxuICAgICAgY2FzZSAnZmFpbGVkJzpcclxuICAgICAgICByZXR1cm4gJ2ZhaWxlZCc7XHJcbiAgICAgIGNhc2UgJ25vdCByZWFkeSc6XHJcbiAgICAgICAgcmV0dXJuICdub3QtcmVhZHknO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiAnbm90LXJlYWR5JztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNoYW5nZVBlclBhZ2VOdW1iZXIocGFnZVNpemVFdmVudDogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLnBhZ2luYXRpb24ucGFnZVNpemUgPSBwYWdlU2l6ZUV2ZW50LnZhbHVlO1xyXG4gICAgdGhpcy5wYWdpbmF0aW9uLnBhZ2VJbmRleCA9IDA7XHJcbiAgICB0aGlzLmdldERhdGEoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0RGF0YShwYXJhbXM/OiBVc2VyU2VhcmNoUGFyYW1zKTogdm9pZCB7XHJcbiAgICB0aGlzLmRhdGFQZW5kaW5nID0gdHJ1ZTtcclxuICAgIGNvbnN0IHN1YnNjMSA9IHRoaXMudXNlclVwZ3JhZGVTZXJ2aWNlLmdldFVzZXJVcGdyYWRlUmVjb3Jkcyh0aGlzLnBhZ2luYXRpb24ucGFnZVNpemUsIHRoaXMucGFnaW5hdGlvbi5wYWdlSW5kZXgsIHBhcmFtcyB8fCB7fSlcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgICBjb25zdCByZWNvcmRzID0gcmVzdWx0LmNvbnRlbnQgYXMgVXNlclVwZ3JhZGVSZWNvcmRbXVxyXG4gICAgICAgIHJlY29yZHMuZm9yRWFjaChyZWNvcmQgPT4ge1xyXG4gICAgICAgICAgcmVjb3JkLmRldmljZXNXaXRoRXh0ZW5zaW9ucyA9IHRoaXMudXNlclVwZ3JhZGVTZXJ2aWNlLm1hcERldmljZXNXaXRoRXh0ZW5zaW9ucyhyZWNvcmQuZGV2aWNlcywgcmVjb3JkLmRldmljZURldGFpbHMpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmRhdGEgPSBuZXcgTWF0VGFibGVEYXRhU291cmNlKHJlY29yZHMpO1xyXG4gICAgICAgIHRoaXMucGFnaW5hdGlvbi50b3RhbCA9IHJlc3VsdC50b3RhbEVsZW1lbnRzO1xyXG4gICAgICAgIHRoaXMuZGF0YVBlbmRpbmcgPSBmYWxzZTtcclxuICAgICAgfSk7XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHN1YnNjMSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXRpYWxpemVGaWx0ZXJzKHJlY29yZHM6IFVzZXJVcGdyYWRlUmVjb3JkW10pOiB2b2lkIHtcclxuICAgIGlmICghcmVjb3Jkcz8ubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMuZmlsdGVycyA9IFtdO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gRXh0cmFjdCB1bmlxdWUgc2l0ZXMgKHNraXAgZW1wdHkvbnVsbClcclxuICAgIGNvbnN0IHVuaXF1ZVNpdGVzID0gW1xyXG4gICAgICAuLi5uZXcgU2V0KFxyXG4gICAgICAgIHJlY29yZHNcclxuICAgICAgICAgIC5tYXAocmVjb3JkID0+IHJlY29yZC5zaXRlTmFtZT8udHJpbSgpKVxyXG4gICAgICAgICAgLmZpbHRlcigoc2l0ZSk6IHNpdGUgaXMgc3RyaW5nID0+ICEhc2l0ZSlcclxuICAgICAgKVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdCBzaXRlT3B0aW9ucyA9IHVuaXF1ZVNpdGVzLm1hcChzaXRlID0+ICh7XHJcbiAgICAgIGxhYmVsOiBzaXRlLFxyXG4gICAgICB2YWx1ZTogc2l0ZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1xccysvZywgJy0nKVxyXG4gICAgfSkpO1xyXG5cclxuICAgIC8vIEV4dHJhY3QgdW5pcXVlIHN0YXR1c2VzIChza2lwIGVtcHR5L251bGwpXHJcbiAgICBjb25zdCB1bmlxdWVTdGF0dXNlcyA9IFtcclxuICAgICAgLi4ubmV3IFNldChcclxuICAgICAgICByZWNvcmRzXHJcbiAgICAgICAgICAubWFwKHJlY29yZCA9PiByZWNvcmQudXBncmFkZVN0YXR1cz8udHJpbSgpKVxyXG4gICAgICAgICAgLmZpbHRlcigoc3RhdHVzKTogc3RhdHVzIGlzIHN0cmluZyA9PiAhIXN0YXR1cylcclxuICAgICAgKVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdCBzdGF0dXNPcHRpb25zID0gdW5pcXVlU3RhdHVzZXMubWFwKHN0YXR1cyA9PiAoe1xyXG4gICAgICBsYWJlbDogU1RBVFVTX0VOVFJJRVNbc3RhdHVzXSxcclxuICAgICAgdmFsdWU6IHN0YXR1cy50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1xccysvZywgJy0nKVxyXG4gICAgfSkpO1xyXG5cclxuICAgIHRoaXMuZmlsdGVycyA9IFtcclxuICAgICAge1xyXG4gICAgICAgIGlkOiAndXNlck5hbWUnLFxyXG4gICAgICAgIHR5cGU6ICdzZWFyY2gnLFxyXG4gICAgICAgIGNvbHVtbktleTogJ1VzZXInLFxyXG4gICAgICAgIHBsYWNlaG9sZGVyOiAnU2VhcmNoIHVzZXJzLi4uJyxcclxuICAgICAgICBvcHRpb25zOiBbXVxyXG4gICAgICB9XHJcbiAgICBdO1xyXG5cclxuICAgIGlmIChzaXRlT3B0aW9ucy5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5maWx0ZXJzLnB1c2goe1xyXG4gICAgICAgIGlkOiAnc2l0ZXMnLFxyXG4gICAgICAgIHR5cGU6ICdzZWxlY3QnLFxyXG4gICAgICAgIGNvbHVtbktleTogJ1NpdGUnLFxyXG4gICAgICAgIHBsYWNlaG9sZGVyOiAnU2l0ZXMnLFxyXG4gICAgICAgIG9wdGlvbnM6IHNpdGVPcHRpb25zXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChzdGF0dXNPcHRpb25zLmxlbmd0aCkge1xyXG4gICAgICB0aGlzLmZpbHRlcnMucHVzaCh7XHJcbiAgICAgICAgaWQ6ICdzdGF0dXMnLFxyXG4gICAgICAgIHR5cGU6ICdzZWxlY3QnLFxyXG4gICAgICAgIGNvbHVtbktleTogJ1VzZXIgVXBncmFkZSBTdGF0dXMnLFxyXG4gICAgICAgIHBsYWNlaG9sZGVyOiAnVXBncmFkZSBTdGF0dXMnLFxyXG4gICAgICAgIG9wdGlvbnM6IHN0YXR1c09wdGlvbnNcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiogV2hldGhlciB0aGUgbnVtYmVyIG9mIHNlbGVjdGVkIGVsZW1lbnRzIG1hdGNoZXMgdGhlIHRvdGFsIG51bWJlciBvZiByb3dzLiAqL1xyXG4gIGlzQWxsU2VsZWN0ZWQoKSB7XHJcbiAgICBjb25zdCBudW1TZWxlY3RlZCA9IHRoaXMuc2VsZWN0aW9uLnNlbGVjdGVkLmxlbmd0aDtcclxuICAgIGNvbnN0IG51bVJvd3MgPSB0aGlzLmRhdGE/LmRhdGEubGVuZ3RoID8/IDA7XHJcbiAgICByZXR1cm4gbnVtU2VsZWN0ZWQgPT09IG51bVJvd3M7XHJcbiAgfVxyXG5cclxuICAvKiogU2VsZWN0cyBhbGwgcm93cyBpZiB0aGV5IGFyZSBub3QgYWxsIHNlbGVjdGVkOyBvdGhlcndpc2UgY2xlYXIgc2VsZWN0aW9uLiAqL1xyXG4gIG1hc3RlclRvZ2dsZSgpIHtcclxuICAgIC8vIHRoaXMuaXNBbGxTZWxlY3RlZCgpID9cclxuICAgIC8vICAgdGhpcy5zZWxlY3Rpb24uY2xlYXIoKSA6XHJcbiAgICAvLyAgIHRoaXMuZGF0YT8uZGF0YS5mb3JFYWNoKHJvdyA9PiB0aGlzLnNlbGVjdGlvbi5zZWxlY3Qocm93KSk7XHJcbiAgICBpZiAodGhpcy5pc0FsbFNlbGVjdGVkKCkpIHtcclxuICAgICAgdGhpcy5zZWxlY3Rpb24uY2xlYXIoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZGF0YT8uZGF0YS5mb3JFYWNoKHJvdyA9PiB7XHJcbiAgICAgICAgaWYgKHJvdy51cGdyYWRlU3RhdHVzID09PSAnUkVBRFknKSB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5zZWxlY3Qocm93KVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1cGdyYWRlVXNlcih1c2VyOiBVc2VyVXBncmFkZVJlY29yZCk6IHZvaWQge1xyXG4gICAgaWYgKHVzZXI/LnVwZ3JhZGVTdGF0dXMgPT09ICdSRUFEWScpXHJcbiAgICAgIHVzZXIucGVuZGluZyA9IHRydWU7XHJcblxyXG4gICAgICB0aGlzLnVzZXJVcGdyYWRlU2VydmljZS5jb2xsZWN0VXNlcnMoW3VzZXJdKVxyXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgIHRoaXMudXNlclVwZ3JhZGVTZXJ2aWNlLmJ1bGtVcGdyYWRlKFt1c2VyXSlcclxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVVzZXJzU3RhdHVzQWZ0ZXJVcGdyYWRlKFt1c2VyXSk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVVc2Vyc1N0YXR1c0FmdGVyVXBncmFkZSh1c2VyczogVXNlclVwZ3JhZGVSZWNvcmRbXSk6IHZvaWQge1xyXG4gICAgdGhpcy51c2VyVXBncmFkZVNlcnZpY2UuZ2V0VXNlcnNVcGdyYWRlU3RhdHVzZXModXNlcnMpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSgodXBncmFkZWRTdGF0dXNlczogVXNlcjJVcGdyYWRlU3RhdHVzRFRPW10pID0+IHtcclxuICAgICAgICB1cGdyYWRlZFN0YXR1c2VzLmZvckVhY2goc3RhdHVzSXRlbSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBpbmQgPSB0aGlzLmdldFVzZXJJbmRleChzdGF0dXNJdGVtLnVzZXJJZCk7XHJcbiAgICAgICAgICBpZiAoaW5kID4gLTEpIHtcclxuICAgICAgICAgICAgdGhpcy5kYXRhLmRhdGFbaW5kXS51cGdyYWRlU3RhdHVzID0gc3RhdHVzSXRlbS51cGdyYWRlU3RhdHVzO1xyXG4gICAgICAgICAgICB0aGlzLmRhdGEuZGF0YVtpbmRdLnBlbmRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmRhdGFQZW5kaW5nID0gZmFsc2U7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0VXNlckluZGV4KHVzZXJJZDogc3RyaW5nKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLmRhdGEuZGF0YS5maW5kSW5kZXgoKHJlY29yZDogVXNlclVwZ3JhZGVSZWNvcmQpID0+IHJlY29yZC51c2VySWQgPT09IHVzZXJJZCk7XHJcbiAgfVxyXG5cclxuICB1cGdyYWRlU2VsZWN0ZWRVc2VycygpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZCAmJiB0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZC5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5kYXRhUGVuZGluZyA9IHRydWU7XHJcblxyXG4gICAgICB0aGlzLnVzZXJVcGdyYWRlU2VydmljZS5jb2xsZWN0VXNlcnModGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWQpXHJcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy51c2VyVXBncmFkZVNlcnZpY2UuYnVsa1VwZ3JhZGUodGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWQpXHJcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy51cGRhdGVVc2Vyc1N0YXR1c0FmdGVyVXBncmFkZSh0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZCk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgfVxyXG4gICAgdGhpcy51c2VyVXBncmFkZVNlcnZpY2UuYnVsa1VwZ3JhZGUodGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRGaWx0ZXJWYWx1ZShpbnB1dDogYW55KTogYW55IHtcclxuICAgIGlmIChpbnB1dCAmJiBpbnB1dC52YWx1ZSAhPT0gdW5kZWZpbmVkKSByZXR1cm4gaW5wdXQudmFsdWU7ICAgICAgLy8gZS5nLiB7dmFsdWUsbGFiZWx9XHJcbiAgICBpZiAoaW5wdXQgJiYgaW5wdXQudGFyZ2V0KSByZXR1cm4gaW5wdXQudGFyZ2V0LnZhbHVlOyAgICAgICAgICAgIC8vIERPTSBldmVudFxyXG4gICAgcmV0dXJuIGlucHV0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBwbGFpbiB2YWx1ZVxyXG4gIH1cclxuICBwcml2YXRlIGlzRW1wdHlGaWx0ZXIodjogYW55KTogYm9vbGVhbiB7XHJcbiAgICBpZiAodiA9PT0gdW5kZWZpbmVkIHx8IHYgPT09IG51bGwpIHJldHVybiB0cnVlO1xyXG4gICAgaWYgKHR5cGVvZiB2ID09PSAnc3RyaW5nJykge1xyXG4gICAgICBjb25zdCBzID0gdi50cmltKCkudG9Mb3dlckNhc2UoKTtcclxuICAgICAgcmV0dXJuIHMgPT09ICcnIHx8IHMgPT09ICdhbGwnO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgb25GaWx0ZXIoZmlsdGVyRXZlbnQ6IHsga2V5OiBVaUZpbHRlcktleTsgdmFsdWU6IGFueSB9KSB7XHJcbiAgICBjb25zdCByYXdLZXkgPSBmaWx0ZXJFdmVudC5rZXk7ICAgICAgICBcclxuICAgIGNvbnN0IHNlcnZlcktleSA9IEZJTFRFUl9LRVlfTUFQW3Jhd0tleV07XHJcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0RmlsdGVyVmFsdWUoZmlsdGVyRXZlbnQudmFsdWUpO1xyXG5cclxuICAgIGNvbnN0IG5leHQ6IFBhcnRpYWw8VXNlclNlYXJjaFBhcmFtcz4gPSB7IC4uLnRoaXMuYWN0aXZlRmlsdGVycyB9OyAgICBcclxuXHJcbiAgICBpZiAodGhpcy5pc0VtcHR5RmlsdGVyKHZhbHVlKSkge1xyXG4gICAgICBkZWxldGUgbmV4dFtzZXJ2ZXJLZXldO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gbm9ybWFsaXplIHRvIHN0cmluZyBmb3IgQVBJICh0cmltKVxyXG4gICAgICBuZXh0W3NlcnZlcktleV0gPSB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gdmFsdWUudHJpbSgpIDogU3RyaW5nKHZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmFjdGl2ZUZpbHRlcnMgPSBuZXh0O1xyXG4gICAgdGhpcy5wYWdpbmF0aW9uLnBhZ2VJbmRleCA9IDA7XHJcblxyXG4gICAgLy8gcXVpY2sgZml4IGZvciBkZW1vXHJcbiAgICBpZiAodGhpcy5hY3RpdmVGaWx0ZXJzWyd1cGdyYWRlU3RhdHVzJ10pIHtcclxuICAgICAgdGhpcy5hY3RpdmVGaWx0ZXJzWyd1cGdyYWRlU3RhdHVzJ10gPSB0aGlzLmFjdGl2ZUZpbHRlcnNbJ3VwZ3JhZGVTdGF0dXMnXT8udG9VcHBlckNhc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmdldERhdGEodGhpcy5hY3RpdmVGaWx0ZXJzIGFzIFVzZXJTZWFyY2hQYXJhbXMpO1xyXG4gIH1cclxuXHJcbiAgLypvbkZpbHRlcihmaWx0ZXJFdmVudDogeyBrZXk6IHN0cmluZywgdmFsdWU6IGFueSB9KSB7XHJcbiAgICBjb25zdCB7a2V5LCB2YWx1ZX0gPSBmaWx0ZXJFdmVudDtcclxuXHJcbiAgICBsZXQgZmlsdGVyVmFsdWU6IGFueTtcclxuICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS52YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGZpbHRlclZhbHVlID0gdmFsdWUudmFsdWU7XHJcbiAgICB9IGVsc2UgaWYgKHZhbHVlICYmIHZhbHVlLnRhcmdldCkge1xyXG4gICAgICBmaWx0ZXJWYWx1ZSA9IHZhbHVlLnRhcmdldC52YWx1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGZpbHRlclZhbHVlID0gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSGFuZGxlIFwiQWxsXCIgb3B0aW9uIG9yIGVtcHR5IHZhbHVlcyAtIHJlbW92ZSB0aGUgZmlsdGVyXHJcbiAgICBpZiAoZmlsdGVyVmFsdWUgPT09ICdhbGwnIHx8ICFmaWx0ZXJWYWx1ZSB8fCBmaWx0ZXJWYWx1ZSA9PT0gJycpIHtcclxuICAgICAgZGVsZXRlIHRoaXMuYWN0aXZlRmlsdGVyc1trZXldO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5hY3RpdmVGaWx0ZXJzW2tleV0gPSBmaWx0ZXJWYWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmFwcGx5RmlsdGVycygpO1xyXG4gIH0qL1xyXG5cclxuICBwcml2YXRlIHNldHVwQ3VzdG9tRmlsdGVyKCkge1xyXG4gICAgdGhpcy5kYXRhLmZpbHRlclByZWRpY2F0ZSA9IChkYXRhOiBhbnksIGZpbHRlcjogc3RyaW5nKSA9PiB7XHJcbiAgICAgIGNvbnN0IGZpbHRlcnMgPSBKU09OLnBhcnNlKGZpbHRlciB8fCAne30nKTtcclxuXHJcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGZpbHRlcnMpKSB7XHJcbiAgICAgICAgaWYgKCF2YWx1ZSkgY29udGludWU7XHJcblxyXG4gICAgICAgIHN3aXRjaCAoa2V5KSB7XHJcbiAgICAgICAgICBjYXNlICdVc2VyJzpcclxuICAgICAgICAgICAgY29uc3Qgc2VhcmNoVGVybSA9ICh2YWx1ZSBhcyBzdHJpbmcpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgICAgIGlmICghZGF0YS51c2VyTmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaFRlcm0pKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSAnU2l0ZSc6XHJcbiAgICAgICAgICAgIGlmIChkYXRhLnNpdGVOYW1lICE9PSB0aGlzLmdldFNpdGVOYW1lRnJvbVZhbHVlKHZhbHVlIGFzIHN0cmluZykpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlICdVc2VyIFVwZ3JhZGUgU3RhdHVzJzpcclxuICAgICAgICAgICAgaWYgKCF0aGlzLm1hdGNoZXNVcGdyYWRlU3RhdHVzKGRhdGEudXBncmFkZVN0YXR1cywgdmFsdWUgYXMgc3RyaW5nKSkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXBwbHlGaWx0ZXJzKCkge1xyXG4gICAgdGhpcy5kYXRhLmZpbHRlciA9IEpTT04uc3RyaW5naWZ5KHRoaXMuYWN0aXZlRmlsdGVycyk7XHJcbiAgfVxyXG5cclxuICBnZXQgZmlsdGVyZWREYXRhQ291bnQoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLmRhdGE/LmZpbHRlcmVkRGF0YT8ubGVuZ3RoIHx8IDA7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFNpdGVOYW1lRnJvbVZhbHVlKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgLy8gU2luY2Ugd2UncmUgbm93IHVzaW5nIGFjdHVhbCBzaXRlIG5hbWVzLCBqdXN0IGNvbnZlcnQgYmFjayBmcm9tIHNsdWcgZm9ybWF0XHJcbiAgICByZXR1cm4gdmFsdWUuc3BsaXQoJy0nKS5tYXAod29yZCA9PlxyXG4gICAgICB3b3JkLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgd29yZC5zbGljZSgxKVxyXG4gICAgKS5qb2luKCcgJyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG1hdGNoZXNVcGdyYWRlU3RhdHVzKHN0YXR1czogc3RyaW5nLCBmaWx0ZXJWYWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAvLyBIYW5kbGUgZGlyZWN0IHN0YXR1cyBtYXRjaGluZyBmb3IgY2xlYW5lciBpbXBsZW1lbnRhdGlvblxyXG4gICAgcmV0dXJuIHN0YXR1cy50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1xccysvZywgJy0nKSA9PT0gZmlsdGVyVmFsdWUudG9Mb3dlckNhc2UoKTtcclxuICB9XHJcblxyXG4gIGdldFN0YXR1c0NsYXNzKHN0YXR1czogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHN3aXRjaCAoc3RhdHVzLnRvTG93ZXJDYXNlKCkpIHtcclxuICAgICAgY2FzZSAncmVhZHknOlxyXG4gICAgICAgIHJldHVybiAncmVhZHknO1xyXG4gICAgICBjYXNlICdub3QgcmVhZHknOlxyXG4gICAgICAgIHJldHVybiAnbm90LXJlYWR5JztcclxuICAgICAgY2FzZSAncGFydGlhbCByZWFkeSc6XHJcbiAgICAgICAgcmV0dXJuICdwYXJ0aWFsLXJlYWR5JztcclxuICAgICAgY2FzZSAnY29tcGxldGVkJzpcclxuICAgICAgICByZXR1cm4gJ2NvbXBsZXRlZCc7XHJcbiAgICAgIGNhc2UgJ2ZhaWxlZCc6XHJcbiAgICAgICAgcmV0dXJuICdmYWlsZWQnO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiAnbm90LXJlYWR5JztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCByZWFkb25seSBwYWdlU2l6ZU9wdGlvbnMgPSBQQUdJTkFUSU9OX1NJWkVfT1BUSU9OUztcclxufVxyXG5cclxuaW50ZXJmYWNlIFBhZ2luYXRpb25EYXRhRHRvSW50ZXJmYWNlIHtcclxuICB0b3RhbDogbnVtYmVyO1xyXG4gIHBhZ2VTaXplT3B0aW9uczogbnVtYmVyW107XHJcbiAgcGFnZVNpemU6IG51bWJlcjtcclxuICBwYWdlSW5kZXg6IG51bWJlcjtcclxufVxyXG5jbGFzcyBQYWdpbmF0aW9uRGF0YUR0byB7XHJcbiAgdG90YWwhOiBudW1iZXI7XHJcbiAgcGFnZVNpemVPcHRpb25zITogbnVtYmVyW107XHJcbiAgcGFnZVNpemUhOiBudW1iZXI7XHJcbiAgcGFnZUluZGV4ITogbnVtYmVyO1xyXG5cclxuICBjb25zdHJ1Y3RvcihkYXRhPzogUGFnaW5hdGlvbkRhdGFEdG9JbnRlcmZhY2UpIHtcclxuICAgIHRoaXMucGFnZVNpemVPcHRpb25zID0gZGF0YT8ucGFnZVNpemVPcHRpb25zIHx8IFBBR0lOQVRJT05fREFUQV9ERUZBVUxUUy5PUFRJT05TO1xyXG4gICAgdGhpcy5wYWdlU2l6ZSA9IGRhdGE/LnBhZ2VTaXplIHx8IFBBR0lOQVRJT05fREFUQV9ERUZBVUxUUy5TSVpFO1xyXG4gICAgdGhpcy5wYWdlSW5kZXggPSBkYXRhPy5wYWdlSW5kZXggfHwgUEFHSU5BVElPTl9EQVRBX0RFRkFVTFRTLlBBR0VfSU5ERVg7XHJcbiAgICB0aGlzLnRvdGFsID0gZGF0YT8udG90YWwgfHwgMDtcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IFBBR0lOQVRJT05fREFUQV9ERUZBVUxUUyA9IHtcclxuICBPUFRJT05TOiBbMTAsIDIwLCA1MCwgMTAwXSxcclxuICBTSVpFOiAxMCxcclxuICBQQUdFX0lOREVYOiAwXHJcbn07XHJcbiIsIjxkaXYgKm5nSWY9XCJkYXRhUGVuZGluZ1wiIGNsYXNzPVwib3ZlcmxheVwiPlxyXG4gIDxtYXQtcHJvZ3Jlc3Mtc3Bpbm5lclxyXG4gICAgY2xhc3M9XCJwYWdlLXNwaW5uZXJcIlxyXG4gICAgbW9kZT1cImluZGV0ZXJtaW5hdGVcIlxyXG4gICAgW2RpYW1ldGVyXT1cIjEyMFwiPjwvbWF0LXByb2dyZXNzLXNwaW5uZXI+XHJcbjwvZGl2PlxyXG5cclxuPGRpdiBpZD1cInVzZXJVcGdyYWRlRGF0YVRhYmxlXCIgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwidXNlci11cGdyYWRlLXN0YXR1cy13cmFwcGVyXCI+XHJcbiAgICAgICAgPHRrLXN1bW1hcnktY2FyZCBbZGVzY3JpcHRpb25dPVwiJ1VzZXJzIGFyZSByZWFkeSB0byB1cGdyYWRlJ1wiIFt2YWx1ZV09XCJzdGF0dXNDb3VudHNbJ1JlYWR5J11cIj48L3RrLXN1bW1hcnktY2FyZD5cclxuICAgICAgICA8dGstc3VtbWFyeS1jYXJkIFtkZXNjcmlwdGlvbl09XCInVXNlcnMgYXJlIG5vdCByZWFkeSdcIiBbdmFsdWVdPVwic3RhdHVzQ291bnRzWydOb3QgUmVhZHknXVwiIFtzdGF0dXNdPVwiJ05vdCBSZWFkeSdcIj48L3RrLXN1bW1hcnktY2FyZD5cclxuICAgICAgICA8dGstc3VtbWFyeS1jYXJkIFtkZXNjcmlwdGlvbl09XCInVXNlcnMgZmFpbGVkIHRvIHVwZ3JhZGUnXCIgW3ZhbHVlXT1cInN0YXR1c0NvdW50c1snRmFpbGVkJ11cIiBbc3RhdHVzXT1cIidGYWlsZWQnXCI+PC90ay1zdW1tYXJ5LWNhcmQ+XHJcbiAgICAgICAgPHRrLXN1bW1hcnktY2FyZCBbZGVzY3JpcHRpb25dPVwiJ1N1Y2Nlc3NmdWxseSB1cGdyYWRlZCdcIiBbdmFsdWVdPVwic3RhdHVzQ291bnRzWydDb21wbGV0ZWQnXVwiIFtzdGF0dXNdPVwiJ0NvbXBsZXRlZCdcIj48L3RrLXN1bW1hcnktY2FyZD5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cInRhYmxlLWFjdGlvbi1wYW5lbFwiPlxyXG4gICAgICAgIDx0ay10YWJsZS1maWx0ZXJzICpuZ0lmPVwiZmlsdGVycy5sZW5ndGggPiAwXCIgW2ZpbHRlcnNdPVwiZmlsdGVyc1wiIChmaWx0ZXIpPVwib25GaWx0ZXIoJGV2ZW50KVwiPjwvdGstdGFibGUtZmlsdGVycz5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uLXdyYXBwZXJcIj5cclxuICAgICAgICAgICAgPHNwYW4+e3tmaWx0ZXJlZERhdGFDb3VudH19IFVzZXJzPC9zcGFuPlxyXG4gICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICBtYXQtYnV0dG9uXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInVwZ3JhZGUtYnVsay1idXR0b25cIlxyXG4gICAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJzZWxlY3Rpb24uc2VsZWN0ZWQubGVuZ3RoID09PSAwXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJ1cGdyYWRlU2VsZWN0ZWRVc2VycygpXCI+XHJcbiAgICAgICAgICAgICAgICBVcGdyYWRlIHt7IHNlbGVjdGlvbi5zZWxlY3RlZC5sZW5ndGggPT09IDAgPyAnJyA6ICcoJyArIHNlbGVjdGlvbi5zZWxlY3RlZC5sZW5ndGggKyAnKScgfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDx0YWJsZSBtYXQtdGFibGUgW2RhdGFTb3VyY2VdPVwiZGF0YVwiIGNsYXNzPVwidXNlci11cGdyYWRlLXRhYmxlXCI+XHJcblxyXG4gICAgICAgIDwhLS0gQ2hlY2tib3ggQ29sdW1uIC0tPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwic2VsZWN0XCI+XHJcbiAgICAgICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWNoZWNrYm94XHJcbiAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCIkZXZlbnQgPyBtYXN0ZXJUb2dnbGUoKSA6IG51bGxcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cInNlbGVjdGlvbi5oYXNWYWx1ZSgpICYmIGlzQWxsU2VsZWN0ZWQoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwic2VsZWN0aW9uLmhhc1ZhbHVlKCkgJiYgIWlzQWxsU2VsZWN0ZWQoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjdXN0b20tY2hlY2tib3hcIj5cclxuICAgICAgICAgICAgICAgIDwvbWF0LWNoZWNrYm94PlxyXG4gICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93XCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWNoZWNrYm94XHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCIkZXZlbnQgPyBzZWxlY3Rpb24udG9nZ2xlKHJvdykgOiBudWxsXCJcclxuICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJzZWxlY3Rpb24uaXNTZWxlY3RlZChyb3cpXCJcclxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiU1RBVFVTX0VOVFJJRVNbcm93LnVwZ3JhZGVTdGF0dXNdICE9PSAnUmVhZHknIHx8IHJvdy5wZW5kaW5nXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImN1c3RvbS1jaGVja2JveFwiPlxyXG4gICAgICAgICAgICAgICAgPC9tYXQtY2hlY2tib3g+XHJcbiAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgIDwhLS0gVXNlciBDb2x1bW4gLS0+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJ1c2VyXCI+XHJcbiAgICAgICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+VXNlcjwvdGg+XHJcbiAgICAgICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidXNlci1pbmZvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInVzZXItbmFtZVwiPnt7ZWxlbWVudC51c2VyTmFtZX19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInVzZXItZW1haWxcIj57e2VsZW1lbnQudXNlck5hbWV9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgIDwhLS0gU2l0ZSBDb2x1bW4gLS0+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJzaXRlXCI+XHJcbiAgICAgICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+U2l0ZTwvdGg+XHJcbiAgICAgICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2l0ZS1pbmZvXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3RhdHVzLWluZGljYXRvclwiIFtuZ0NsYXNzXT1cImdldFNpdGVVcGdyYWRlU3RhdHVzQ2xhc3MoZWxlbWVudC51cGdyYWRlU3RhdHVzKVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj57e2VsZW1lbnQuc2l0ZU5hbWV9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICA8IS0tIERldmljZSBDb2x1bW4gLS0+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJkZXZpY2VcIj5cclxuICAgICAgICAgICAgPHRoIGNsYXNzPVwiZGV2aWNlLXRkXCIgbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPkRldmljZTwvdGg+XHJcbiAgICAgICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50XCIgY2xhc3M9XCJtdWx0aS1kZXYtYm94XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImVsZW1lbnQuc2hvd0RldmljZXNcIiBjbGFzcz1cImRldmljZS1saXN0IHNob3ctZGV2LWxpc3RcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGRldmljZSBvZiBlbGVtZW50LmRldmljZXNXaXRoRXh0ZW5zaW9uczsgbGV0IGxhc3QgPSBsYXN0XCJcclxuICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkZXZpY2UtaXRlbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5uby1ib3JkZXJdPVwibGFzdFwiPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImRldmljZS1pbmRpY2F0b3JcIiBbbmdDbGFzc109XCJ7J2RldmljZS1pbmRpY2F0b3ItcmVhZHknOiBlbGVtZW50LmRldmljZVN0YXR1cyA9PT0gJ1JFQURZJ31cIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZGV2aWNlLW5hbWVcIj57eyBkZXZpY2UuZGV2aWNlTmFtZSB8fCBkZXZpY2UgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZGV2aWNlLW1vZGVsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgZGV2aWNlLmV4dGVuc2lvbnM/Lmxlbmd0aCA/ICdFeHQ6ICcgKyBkZXZpY2UuZXh0ZW5zaW9ucy5qb2luKFwiLCBcIikgOiAnTm8gRXh0ZW5zaW9uJyB9fVxyXG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZXZpY2UtaW5mb1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdWx0aXBsZS1kZXYtbGlua1wiICpuZ0lmPVwiZWxlbWVudC5kZXZpY2VzV2l0aEV4dGVuc2lvbnM/Lmxlbmd0aCA+IDE7IGVsc2Ugb25lRGV2aWNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZXZpY2UtbmFtZS13cmFwcGVyIGNsaWNrYWJsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwib25NdWx0aXBsZURldmljZXMoZWxlbWVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWxlYXZlKT1cIm9uTXVsdGlwbGVEZXZpY2VzKGVsZW1lbnQpXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkZXZpY2UtbmFtZVwiPk11bHRpcGxlIGRldmljZXMgPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjb25lRGV2aWNlPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZXZpY2UtbmFtZS13cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImRldmljZS1pbmRpY2F0b3JcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImRldmljZS1uYW1lXCI+e3tlbGVtZW50LmRldmljZXNXaXRoRXh0ZW5zaW9uc1swXS5kZXZpY2VOYW1lfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRldmljZS1tb2RlbCBvbmUtZGV2LWV4dGVuc2lvbnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7IGVsZW1lbnQuZGV2aWNlc1dpdGhFeHRlbnNpb25zWzBdLmV4dGVuc2lvbnM/Lmxlbmd0aCA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAnRXh0OiAnICsgZWxlbWVudC5kZXZpY2VzV2l0aEV4dGVuc2lvbnNbMF0uZXh0ZW5zaW9ucz8uam9pbihcIiwgXCIpIDogJ05vIEV4dGVuc2lvbicgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICA8IS0tIERpYWwgUGxhbiBTdGF0dXMgQ29sdW1uIC0tPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiZGlhbFBsYW5TdGF0dXNcIj5cclxuICAgICAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj5EaWFsIFBsYW4gU3RhdHVzPC90aD5cclxuICAgICAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnRcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdGF0dXMtaW5mb1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3RhdHVzLWluZGljYXRvclwiIFtuZ0NsYXNzXT1cImdldFN0YXR1c0NsYXNzKGVsZW1lbnQuZGlhbFBsYW5TdGF0dXMpXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBbbmdDbGFzc109XCJ7J3N0YXR1cy1yZWFkeSc6IGVsZW1lbnQuZGlhbFBsYW5TdGF0dXMgPT09ICdSRUFEWSd9XCI+e3tTVEFUVVNfRU5UUklFU1tlbGVtZW50LmRpYWxQbGFuU3RhdHVzXX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgIDwhLS0gRGVwZW5kZW5jaWVzIENvbHVtbiAtLT5cclxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cImRlcGVuZGVuY2llc1wiPlxyXG4gICAgICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPkRlcGVuZGVuY2llczwvdGg+XHJcbiAgICAgICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50XCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIkRFUEVOREVOQ0lFU19TVEFUVVNbZWxlbWVudC5kZXBlbmRlbmNpZXNTdGF0dXNdID09PSAnRGVwZW5kZW5jaWVzIGZvdW5kJ1wiIGNsYXNzPVwiZGVwZW5kZW5jaWVzLXRleHRcIj57e0RFUEVOREVOQ0lFU19TVEFUVVNbZWxlbWVudC5kZXBlbmRlbmNpZXNTdGF0dXNdfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIkRFUEVOREVOQ0lFU19TVEFUVVNbZWxlbWVudC5kZXBlbmRlbmNpZXNTdGF0dXNdID09PSAnTm8gZGVwZW5kZW5jaWVzJ1wiPuKAlDwvc3Bhbj5cclxuICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgPCEtLSBVc2VyIFVwZ3JhZGUgU3RhdHVzIENvbHVtbiAtLT5cclxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cInVzZXJVcGdyYWRlU3RhdHVzXCI+XHJcbiAgICAgICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+VXNlciBVcGdyYWRlIFN0YXR1czwvdGg+XHJcbiAgICAgICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidXBncmFkZS1zdGF0dXMtY2VsbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJTVEFUVVNfRU5UUklFU1tlbGVtZW50LnVwZ3JhZGVTdGF0dXNdID09PSAnUmVhZHknOyBlbHNlIHN0YXR1c0Jsb2NrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiBjbGFzcz1cInVwZ3JhZGUtYnV0dG9uXCIgKGNsaWNrKT1cInVwZ3JhZGVVc2VyKGVsZW1lbnQpXCI+VXBncmFkZTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjc3RhdHVzQmxvY2s+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdGF0dXMtaW5mb1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdGF0dXMtaW5kaWNhdG9yXCIgW25nQ2xhc3NdPVwiZ2V0U3RhdHVzQ2xhc3MoZWxlbWVudC51cGdyYWRlU3RhdHVzKVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7U1RBVFVTX0VOVFJJRVNbZWxlbWVudC51cGdyYWRlU3RhdHVzXX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJ1c2VyVXBncmFkZUxvYWRlclwiPlxyXG4gICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+PC90aD5cclxuICAgICAgICA8dGQgY2xhc3M9XCJtYXQtcHJvZ3Jlc3Mtc3Bpbm5lci10ZFwiIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnRcIj5cclxuXHJcbiAgICAgICAgICA8bWF0LXByb2dyZXNzLXNwaW5uZXJcclxuICAgICAgICAgICAgKm5nSWY9XCJlbGVtZW50LnBlbmRpbmdcIlxyXG4gICAgICAgICAgICBjbGFzcz1cImZpZWxkLXNwaW5uZXJcIlxyXG4gICAgICAgICAgICBbZGlhbWV0ZXJdPVwiMjBcIlxyXG4gICAgICAgICAgICBtb2RlPVwiaW5kZXRlcm1pbmF0ZVwiPlxyXG4gICAgICAgICAgPC9tYXQtcHJvZ3Jlc3Mtc3Bpbm5lcj5cclxuICAgICAgICA8L3RkPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgPHRyIG1hdC1oZWFkZXItcm93ICptYXRIZWFkZXJSb3dEZWY9XCJkaXNwbGF5ZWRDb2x1bW5zXCI+PC90cj5cclxuICAgICAgICA8dHIgbWF0LXJvdyAqbWF0Um93RGVmPVwibGV0IHJvdzsgY29sdW1uczogZGlzcGxheWVkQ29sdW1ucztcIlxyXG4gICAgICAgICAgICBbY2xhc3Muc2VsZWN0ZWQtcm93XT1cInNlbGVjdGlvbi5pc1NlbGVjdGVkKHJvdylcIj48L3RyPlxyXG4gICAgPC90YWJsZT5cclxuPC9kaXY+XHJcblxyXG48ZGl2IGNsYXNzPVwiYXBwLXBhZ2luYXRpb25cIj5cclxuICA8bWF0LXBhZ2luYXRvclxyXG4gICAgW2xlbmd0aF09XCJwYWdpbmF0aW9uLnRvdGFsXCJcclxuICAgIFtwYWdlU2l6ZV09XCJwYWdpbmF0aW9uLnBhZ2VTaXplXCJcclxuICAgIFtwYWdlU2l6ZU9wdGlvbnNdPVwicGFnaW5hdGlvbi5wYWdlU2l6ZU9wdGlvbnNcIlxyXG4gICAgW3BhZ2VJbmRleF09XCJwYWdpbmF0aW9uLnBhZ2VJbmRleFwiXHJcbiAgICAocGFnZSk9XCJwYWdlRXZlbnQoJGV2ZW50KVwiXHJcbiAgICBzaG93Rmlyc3RMYXN0QnV0dG9ucz5cclxuICA8L21hdC1wYWdpbmF0b3I+XHJcblxyXG4gIDwhLS08ZGl2IGNsYXNzPVwicGFnZS1pbmRleGVzLWJveFwiPlxyXG4gICAgPG1hdC1wYWdpbmF0b3JcclxuICAgICAgW2lkXT1cIidjb21tb25QYWdpbmF0aW9uJ1wiXHJcbiAgICAgIFtoaWRlUGFnZVNpemVdPVwidHJ1ZVwiXHJcbiAgICAgIFtsZW5ndGhdPVwicGFnaW5hdGlvbi50b3RhbFwiXHJcbiAgICAgIFtwYWdlSW5kZXhdPVwicGFnaW5hdGlvbi5wYWdlSW5kZXhcIlxyXG4gICAgICBbcGFnZVNpemVdPVwicGFnaW5hdGlvbi5wYWdlU2l6ZVwiXHJcbiAgICAgIFtwYWdlU2l6ZU9wdGlvbnNdPVwicGFnaW5hdGlvbi5wYWdlU2l6ZU9wdGlvbnNcIlxyXG4gICAgICAocGFnZSk9XCJwYWdlRXZlbnQoJGV2ZW50KVwiPlxyXG4gICAgPC9tYXQtcGFnaW5hdG9yPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2IGNsYXNzPVwicGVyLXBhZ2UtYmxvY2tcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJpdGVtX3Blcl9wYWdlXCI+SXRlbXMgcGVyIHBhZ2U6PC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwic2VsZWN0LWJveCBzZWxlY3QtcGFnZS1zaXplXCI+XHJcbiAgICAgIDxtYXQtc2VsZWN0IChzZWxlY3Rpb25DaGFuZ2UpPVwiY2hhbmdlUGVyUGFnZU51bWJlcigkZXZlbnQpXCIgI3BhZ2VcclxuICAgICAgICAgICAgICAgICAgW2lkXT1cIidjb21tb25QYWdpbmF0aW9uU2VsZWN0J1wiPlxyXG4gICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgcGFnZVNpemVPcHRpb25zOyBsZXQgaSA9IGluZGV4O1wiIFtpZF09XCIncGFnaW5hdGlvblNlbGVjdE9wdF8nICsgaVwiIFt2YWx1ZV09XCJvcHRpb25cIj57e29wdGlvbn19PC9tYXQtb3B0aW9uPlxyXG4gICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgPC9kaXY+LS0+XHJcbjwvZGl2PlxyXG4iXX0=
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
import { NgModule } from "@angular/core";
|
|
2
|
-
import { UserUpgradeDataTableComponent } from "./user-upgrade-data-table/user-upgrade-data-table.component";
|
|
3
|
-
import { CommonModule } from "@angular/common";
|
|
4
|
-
import { MatButtonModule } from "@angular/material/button";
|
|
5
|
-
import { MatTableModule } from "@angular/material/table";
|
|
6
|
-
import { SharedModule } from "../../shared/shared.module";
|
|
7
|
-
import { MatCheckboxModule } from "@angular/material/checkbox";
|
|
8
|
-
import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
|
|
9
|
-
import { MatOptionModule } from '@angular/material/core';
|
|
10
|
-
import { MatPaginatorModule } from '@angular/material/paginator';
|
|
11
|
-
import { MatSelectModule } from '@angular/material/select';
|
|
12
|
-
import * as i0 from "@angular/core";
|
|
13
|
-
export class UserUpgradeModule {
|
|
14
|
-
}
|
|
15
|
-
UserUpgradeModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: UserUpgradeModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
16
|
-
UserUpgradeModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.10", ngImport: i0, type: UserUpgradeModule, declarations: [UserUpgradeDataTableComponent], imports: [CommonModule,
|
|
17
|
-
SharedModule,
|
|
18
|
-
MatTableModule,
|
|
19
|
-
MatButtonModule,
|
|
20
|
-
MatCheckboxModule,
|
|
21
|
-
MatSelectModule,
|
|
22
|
-
MatProgressSpinnerModule,
|
|
23
|
-
MatOptionModule,
|
|
24
|
-
MatPaginatorModule,
|
|
25
|
-
MatSelectModule], exports: [UserUpgradeDataTableComponent] });
|
|
26
|
-
UserUpgradeModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: UserUpgradeModule, imports: [CommonModule,
|
|
27
|
-
SharedModule,
|
|
28
|
-
MatTableModule,
|
|
29
|
-
MatButtonModule,
|
|
30
|
-
MatCheckboxModule,
|
|
31
|
-
MatSelectModule,
|
|
32
|
-
MatProgressSpinnerModule,
|
|
33
|
-
MatOptionModule,
|
|
34
|
-
MatPaginatorModule,
|
|
35
|
-
MatSelectModule] });
|
|
36
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: UserUpgradeModule, decorators: [{
|
|
37
|
-
type: NgModule,
|
|
38
|
-
args: [{
|
|
39
|
-
declarations: [
|
|
40
|
-
UserUpgradeDataTableComponent
|
|
41
|
-
],
|
|
42
|
-
imports: [
|
|
43
|
-
CommonModule,
|
|
44
|
-
SharedModule,
|
|
45
|
-
MatTableModule,
|
|
46
|
-
MatButtonModule,
|
|
47
|
-
MatCheckboxModule,
|
|
48
|
-
MatSelectModule,
|
|
49
|
-
MatProgressSpinnerModule,
|
|
50
|
-
MatOptionModule,
|
|
51
|
-
MatPaginatorModule,
|
|
52
|
-
MatSelectModule
|
|
53
|
-
],
|
|
54
|
-
exports: [
|
|
55
|
-
UserUpgradeDataTableComponent
|
|
56
|
-
]
|
|
57
|
-
}]
|
|
58
|
-
}] });
|
|
59
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci11cGdyYWRlLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1a2kvd2lkZ2V0cy9kaTJtdC93aWRnZXRzL3VzZXItdXBncmFkZS91c2VyLXVwZ3JhZGUubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sNkRBQTZELENBQUM7QUFDNUcsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzFELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQy9ELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7O0FBc0IzRCxNQUFNLE9BQU8saUJBQWlCOzsrR0FBakIsaUJBQWlCO2dIQUFqQixpQkFBaUIsaUJBbEIxQiw2QkFBNkIsYUFHN0IsWUFBWTtRQUNaLFlBQVk7UUFDWixjQUFjO1FBQ2QsZUFBZTtRQUNmLGlCQUFpQjtRQUNqQixlQUFlO1FBQ2Ysd0JBQXdCO1FBQ3hCLGVBQWU7UUFDZixrQkFBa0I7UUFDbEIsZUFBZSxhQUdmLDZCQUE2QjtnSEFHcEIsaUJBQWlCLFlBZjFCLFlBQVk7UUFDWixZQUFZO1FBQ1osY0FBYztRQUNkLGVBQWU7UUFDZixpQkFBaUI7UUFDakIsZUFBZTtRQUNmLHdCQUF3QjtRQUN4QixlQUFlO1FBQ2Ysa0JBQWtCO1FBQ2xCLGVBQWU7NEZBTU4saUJBQWlCO2tCQXBCN0IsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUU7d0JBQ1osNkJBQTZCO3FCQUM5QjtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsWUFBWTt3QkFDWixZQUFZO3dCQUNaLGNBQWM7d0JBQ2QsZUFBZTt3QkFDZixpQkFBaUI7d0JBQ2pCLGVBQWU7d0JBQ2Ysd0JBQXdCO3dCQUN4QixlQUFlO3dCQUNmLGtCQUFrQjt3QkFDbEIsZUFBZTtxQkFDaEI7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLDZCQUE2QjtxQkFDOUI7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IFVzZXJVcGdyYWRlRGF0YVRhYmxlQ29tcG9uZW50IH0gZnJvbSBcIi4vdXNlci11cGdyYWRlLWRhdGEtdGFibGUvdXNlci11cGdyYWRlLWRhdGEtdGFibGUuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcclxuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2J1dHRvblwiO1xyXG5pbXBvcnQgeyBNYXRUYWJsZU1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC90YWJsZVwiO1xyXG5pbXBvcnQgeyBTaGFyZWRNb2R1bGUgfSBmcm9tIFwiLi4vLi4vc2hhcmVkL3NoYXJlZC5tb2R1bGVcIjtcclxuaW1wb3J0IHsgTWF0Q2hlY2tib3hNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvY2hlY2tib3hcIjtcclxuaW1wb3J0IHsgTWF0UHJvZ3Jlc3NTcGlubmVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcHJvZ3Jlc3Mtc3Bpbm5lcic7XHJcbmltcG9ydCB7IE1hdE9wdGlvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRQYWdpbmF0b3JNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xyXG5pbXBvcnQgeyBNYXRTZWxlY3RNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QnO1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICBkZWNsYXJhdGlvbnM6IFtcclxuICAgIFVzZXJVcGdyYWRlRGF0YVRhYmxlQ29tcG9uZW50XHJcbiAgXSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBTaGFyZWRNb2R1bGUsXHJcbiAgICBNYXRUYWJsZU1vZHVsZSxcclxuICAgIE1hdEJ1dHRvbk1vZHVsZSxcclxuICAgIE1hdENoZWNrYm94TW9kdWxlLFxyXG4gICAgTWF0U2VsZWN0TW9kdWxlLFxyXG4gICAgTWF0UHJvZ3Jlc3NTcGlubmVyTW9kdWxlLFxyXG4gICAgTWF0T3B0aW9uTW9kdWxlLFxyXG4gICAgTWF0UGFnaW5hdG9yTW9kdWxlLFxyXG4gICAgTWF0U2VsZWN0TW9kdWxlXHJcbiAgXSxcclxuICBleHBvcnRzOiBbXHJcbiAgICBVc2VyVXBncmFkZURhdGFUYWJsZUNvbXBvbmVudFxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIFVzZXJVcGdyYWRlTW9kdWxlIHtcclxufVxyXG4iXX0=
|