ngx-techlify-core 15.0.2 → 16.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/access-control-config/access-control-config-form/access-control-config-form.component.mjs +135 -0
- package/{esm2020 → esm2022}/lib/access-control-config/access-control-config-routing.module.mjs +5 -5
- package/esm2022/lib/access-control-config/access-control-config.component.mjs +137 -0
- package/esm2022/lib/access-control-config/access-control-config.model.mjs +34 -0
- package/{esm2020 → esm2022}/lib/access-control-config/access-control-config.module.mjs +24 -24
- package/esm2022/lib/access-control-config/access-control-config.service.mjs +32 -0
- package/esm2022/lib/action-popup/action-popup.component.mjs +36 -0
- package/{esm2020 → esm2022}/lib/action-popup/action-popup.model.mjs +4 -1
- package/{esm2020 → esm2022}/lib/action-popup/action-popup.module.mjs +9 -9
- package/{esm2020 → esm2022}/lib/audit-log/audit-log-for-model/audit-log-for-model-routing.module.mjs +5 -5
- package/esm2022/lib/audit-log/audit-log-for-model/audit-log-for-model.component.mjs +54 -0
- package/{esm2020 → esm2022}/lib/audit-log/audit-log-for-model/audit-log-for-model.module.mjs +15 -15
- package/{esm2020 → esm2022}/lib/audit-log/audit-log-list/audit-log-list-routing.module.mjs +5 -5
- package/esm2022/lib/audit-log/audit-log-list/audit-log-list.component.mjs +146 -0
- package/{esm2020 → esm2022}/lib/audit-log/audit-log-list/audit-log-list.module.mjs +19 -19
- package/{esm2020 → esm2022}/lib/audit-log/audit-log-list-filter/audit-log-list-filter-routing.module.mjs +5 -5
- package/esm2022/lib/audit-log/audit-log-list-filter/audit-log-list-filter.component.mjs +79 -0
- package/{esm2020 → esm2022}/lib/audit-log/audit-log-list-filter/audit-log-list-filter.module.mjs +15 -15
- package/{esm2020 → esm2022}/lib/audit-log/audit-log-routing.module.mjs +5 -5
- package/{esm2020 → esm2022}/lib/audit-log/audit-log-view/audit-log-view-routing.module.mjs +5 -5
- package/esm2022/lib/audit-log/audit-log-view/audit-log-view.component.mjs +55 -0
- package/{esm2020 → esm2022}/lib/audit-log/audit-log-view/audit-log-view.module.mjs +11 -11
- package/{esm2020 → esm2022}/lib/audit-log/audit-log-view-model/audit-log-view-model-routing.module.mjs +5 -5
- package/esm2022/lib/audit-log/audit-log-view-model/audit-log-view-model.component.mjs +60 -0
- package/{esm2020 → esm2022}/lib/audit-log/audit-log-view-model/audit-log-view-model.module.mjs +11 -11
- package/{esm2020 → esm2022}/lib/audit-log/audit-log.module.mjs +11 -11
- package/{esm2020 → esm2022}/lib/audit-log/audit-logs-view-model/audit-logs-view-model-routing.module.mjs +5 -5
- package/esm2022/lib/audit-log/audit-logs-view-model/audit-logs-view-model.component.mjs +40 -0
- package/{esm2020 → esm2022}/lib/audit-log/audit-logs-view-model/audit-logs-view-model.module.mjs +11 -11
- package/esm2022/lib/base-model/techlify-form-component.class.mjs +52 -0
- package/esm2022/lib/base-model/techlify-listing-component.class.mjs +64 -0
- package/esm2022/lib/base-model/techlify-service.class.mjs +69 -0
- package/{esm2020 → esm2022}/lib/change-password/change-password-routing.module.mjs +5 -5
- package/esm2022/lib/change-password/change-password.component.mjs +96 -0
- package/{esm2020 → esm2022}/lib/change-password/change-password.module.mjs +19 -19
- package/esm2022/lib/column-selector/column-selector/column-selector.component.mjs +36 -0
- package/{esm2020 → esm2022}/lib/column-selector/column-selector.module.mjs +13 -13
- package/esm2022/lib/core/alert.service.mjs +39 -0
- package/esm2022/lib/core/api-prefix.interceptor.mjs +27 -0
- package/esm2022/lib/core/authentication.guard.mjs +37 -0
- package/esm2022/lib/core/authentication.service.mjs +65 -0
- package/esm2022/lib/core/cache.interceptor.mjs +59 -0
- package/esm2022/lib/core/config.service.mjs +46 -0
- package/esm2022/lib/core/core.module.mjs +63 -0
- package/esm2022/lib/core/credentials.service.mjs +80 -0
- package/esm2022/lib/core/dataManager.service.mjs +120 -0
- package/esm2022/lib/core/error-handler.interceptor.mjs +50 -0
- package/esm2022/lib/core/error-handler.service.mjs +57 -0
- package/esm2022/lib/core/filter.service.mjs +39 -0
- package/{esm2020 → esm2022}/lib/core/form-validator.service.mjs +4 -4
- package/{esm2020 → esm2022}/lib/core/header.interceptor.mjs +4 -4
- package/esm2022/lib/core/http-cache.service.mjs +110 -0
- package/esm2022/lib/core/http.service.mjs +89 -0
- package/esm2022/lib/core/logger.service.mjs +101 -0
- package/{esm2020 → esm2022}/lib/core/route-reusable-strategy.mjs +4 -4
- package/esm2022/lib/core/snack/snack.component.mjs +35 -0
- package/{esm2020 → esm2022}/lib/core/snack/snack.module.mjs +11 -11
- package/esm2022/lib/core/storage.service.mjs +38 -0
- package/esm2022/lib/core/techlify-config.model.mjs +30 -0
- package/esm2022/lib/core/token.interceptor.mjs +29 -0
- package/esm2022/lib/data-table/data-table.component.mjs +211 -0
- package/esm2022/lib/data-table/data-table.model.mjs +46 -0
- package/{esm2020 → esm2022}/lib/data-table/data-table.module.mjs +11 -11
- package/esm2022/lib/document-viewer/document-viewer.component.mjs +69 -0
- package/{esm2020 → esm2022}/lib/document-viewer/document-viewer.module.mjs +11 -11
- package/{esm2020 → esm2022}/lib/document-viewer/viewer-config.model.mjs +4 -1
- package/{esm2020 → esm2022}/lib/email-subscription/email-subscription-for-user/email-subscription-for-user-routing.module.mjs +5 -5
- package/esm2022/lib/email-subscription/email-subscription-for-user/email-subscription-for-user.component.mjs +77 -0
- package/{esm2020 → esm2022}/lib/email-subscription/email-subscription-for-user/email-subscription-for-user.module.mjs +13 -13
- package/{esm2020 → esm2022}/lib/email-subscription/email-subscription-routing.module.mjs +5 -5
- package/{esm2020 → esm2022}/lib/email-subscription/email-subscription-type/email-subscription-type-form/email-subscription-type-form-routing.module.mjs +5 -5
- package/esm2022/lib/email-subscription/email-subscription-type/email-subscription-type-form/email-subscription-type-form.component.mjs +118 -0
- package/{esm2020 → esm2022}/lib/email-subscription/email-subscription-type/email-subscription-type-form/email-subscription-type-form.module.mjs +17 -17
- package/{esm2020 → esm2022}/lib/email-subscription/email-subscription-type/email-subscription-type-list/email-subscription-type-list-routing.module.mjs +5 -5
- package/esm2022/lib/email-subscription/email-subscription-type/email-subscription-type-list/email-subscription-type-list.component.mjs +164 -0
- package/{esm2020 → esm2022}/lib/email-subscription/email-subscription-type/email-subscription-type-list/email-subscription-type-list.module.mjs +17 -17
- package/{esm2020 → esm2022}/lib/email-subscription/email-subscription-type/email-subscription-type-routing.module.mjs +5 -5
- package/{esm2020 → esm2022}/lib/email-subscription/email-subscription-type/email-subscription-type.module.mjs +7 -7
- package/{esm2020 → esm2022}/lib/email-subscription/email-subscription-user/email-subscription-user-form/email-subscription-user-form-routing.module.mjs +5 -5
- package/esm2022/lib/email-subscription/email-subscription-user/email-subscription-user-form/email-subscription-user-form.component.mjs +114 -0
- package/{esm2020 → esm2022}/lib/email-subscription/email-subscription-user/email-subscription-user-form/email-subscription-user-form.module.mjs +17 -17
- package/{esm2020 → esm2022}/lib/email-subscription/email-subscription-user/email-subscription-user-list/email-subscription-user-list-routing.module.mjs +5 -5
- package/esm2022/lib/email-subscription/email-subscription-user/email-subscription-user-list/email-subscription-user-list.component.mjs +169 -0
- package/{esm2020 → esm2022}/lib/email-subscription/email-subscription-user/email-subscription-user-list/email-subscription-user-list.module.mjs +19 -19
- package/{esm2020 → esm2022}/lib/email-subscription/email-subscription-user/email-subscription-user-list-filter/email-subscription-user-list-filter-routing.module.mjs +5 -5
- package/esm2022/lib/email-subscription/email-subscription-user/email-subscription-user-list-filter/email-subscription-user-list-filter.component.mjs +54 -0
- package/{esm2020 → esm2022}/lib/email-subscription/email-subscription-user/email-subscription-user-list-filter/email-subscription-user-list-filter.module.mjs +15 -15
- package/{esm2020 → esm2022}/lib/email-subscription/email-subscription-user/email-subscription-user-routing.module.mjs +5 -5
- package/{esm2020 → esm2022}/lib/email-subscription/email-subscription-user/email-subscription-user.module.mjs +7 -7
- package/{esm2020 → esm2022}/lib/email-subscription/email-subscription.module.mjs +7 -7
- package/esm2022/lib/entity-files/entity-file-form/entity-file-form.component.mjs +174 -0
- package/esm2022/lib/entity-files/entity-file.service.mjs +37 -0
- package/esm2022/lib/entity-files/entity-files-view-all.component.mjs +364 -0
- package/{esm2020 → esm2022}/lib/entity-files/entity-files-view-all.module.mjs +29 -29
- package/esm2022/lib/export-excel/export-excel-button/export-excel-button.component.mjs +31 -0
- package/{esm2020 → esm2022}/lib/export-excel/export-excel.module.mjs +7 -7
- package/esm2022/lib/file-dragdrop-uploader/file-dragdrop-uploader/file-dragdrop-uploader.component.mjs +92 -0
- package/{esm2020 → esm2022}/lib/file-dragdrop-uploader/file-dragdrop-uploader.module.mjs +13 -13
- package/esm2022/lib/file-dropper/file-dropper.component.mjs +129 -0
- package/esm2022/lib/file-dropper/file-dropper.model.mjs +11 -0
- package/{esm2020 → esm2022}/lib/file-dropper/file-dropper.module.mjs +9 -9
- package/{esm2020 → esm2022}/lib/forgot-password/forgot-password-routing.module.mjs +5 -5
- package/esm2022/lib/forgot-password/forgot-password.component.mjs +81 -0
- package/{esm2020 → esm2022}/lib/forgot-password/forgot-password.module.mjs +11 -11
- package/{esm2020 → esm2022}/lib/import-csv/data-import/data-import.component.mjs +5 -4
- package/esm2022/lib/import-csv/failed-items-list/failed-items-list.component.mjs +38 -0
- package/esm2022/lib/import-csv/field-mapping/field-mapping.component.mjs +160 -0
- package/esm2022/lib/import-csv/import-csv.component.mjs +207 -0
- package/{esm2020 → esm2022}/lib/import-csv/import-csv.module.mjs +28 -28
- package/esm2022/lib/import-csv/import-history-list/import-history-list.component.mjs +75 -0
- package/esm2022/lib/import-csv/import-success/import-success.component.mjs +26 -0
- package/{esm2020 → esm2022}/lib/ip-address-selector/ip-address-selector.module.mjs +17 -17
- package/esm2022/lib/ip-address-selector/ip-range-selector/ip-range-selector.component.mjs +108 -0
- package/esm2022/lib/loader/loader.component.mjs +23 -0
- package/{esm2020 → esm2022}/lib/loader/loader.module.mjs +7 -7
- package/{esm2020 → esm2022}/lib/login/login-routing.module.mjs +5 -5
- package/esm2022/lib/login/login.component.mjs +170 -0
- package/{esm2020 → esm2022}/lib/login/login.module.mjs +19 -19
- package/{esm2020 → esm2022}/lib/login-history-for-user/login-history-for-user-routing.module.mjs +5 -5
- package/esm2022/lib/login-history-for-user/login-history-for-user.component.mjs +96 -0
- package/{esm2020 → esm2022}/lib/login-history-for-user/login-history-for-user.module.mjs +17 -17
- package/{esm2020 → esm2022}/lib/material.module.mjs +53 -53
- package/{esm2020 → esm2022}/lib/ngx-techlify-users/ngx-techlify-users-routing.module.mjs +5 -5
- package/{esm2020 → esm2022}/lib/ngx-techlify-users/ngx-techlify-users.module.mjs +7 -7
- package/esm2022/lib/note/comment-form/comment-form.component.mjs +82 -0
- package/esm2022/lib/note/note-form/note-form.component.mjs +88 -0
- package/esm2022/lib/note/note-list/note-list.component.mjs +153 -0
- package/{esm2020 → esm2022}/lib/note/note.module.mjs +19 -19
- package/esm2022/lib/note/note.service.mjs +30 -0
- package/esm2022/lib/number-input-button/number-input-button/number-input-button.component.mjs +104 -0
- package/{esm2020 → esm2022}/lib/number-input-button/number-input-button.module.mjs +9 -9
- package/{esm2020 → esm2022}/lib/password-requirement-check/password-check.service.mjs +4 -4
- package/esm2022/lib/password-requirement-check/password-requirement-check/password-requirement-check.component.mjs +50 -0
- package/{esm2020 → esm2022}/lib/password-requirement-check/password-requirement-check.module.mjs +5 -5
- package/esm2022/lib/profile/profile-edit.component.mjs +84 -0
- package/{esm2020 → esm2022}/lib/profile/profile-routing.module.mjs +5 -5
- package/{esm2020 → esm2022}/lib/profile/profile.module.mjs +11 -11
- package/esm2022/lib/read-more/read-more.component.mjs +44 -0
- package/{esm2020 → esm2022}/lib/read-more/read-more.module.mjs +9 -9
- package/esm2022/lib/request-helper/request-helper.service.mjs +107 -0
- package/esm2022/lib/restrictors/restrictor-level-selector/restrictor-level-selector/restrictor-level-selector.component.mjs +93 -0
- package/{esm2020 → esm2022}/lib/restrictors/restrictor-level-selector/restrictor-level-selector.module.mjs +11 -11
- package/esm2022/lib/restrictors/restrictor-level-selector/restrictor-level.service.mjs +20 -0
- package/esm2022/lib/restrictors/restrictor-status-selector/restrictor-status-selector/restrictor-status-selector.component.mjs +93 -0
- package/{esm2020 → esm2022}/lib/restrictors/restrictor-status-selector/restrictor-status-selector.module.mjs +9 -9
- package/esm2022/lib/restrictors/restrictor-status-selector/restrictor-status.service.mjs +20 -0
- package/esm2022/lib/restrictors/restrictor-type-selector/restrictor-type-selector/restrictor-type-selector.component.mjs +94 -0
- package/{esm2020 → esm2022}/lib/restrictors/restrictor-type-selector/restrictor-type-selector.module.mjs +11 -11
- package/esm2022/lib/restrictors/restrictor-type-selector/restrictor-type.service.mjs +20 -0
- package/esm2022/lib/restrictors/restrictor.service.mjs +20 -0
- package/esm2022/lib/restrictors/restrictors-form/restrictors-form.component.mjs +111 -0
- package/esm2022/lib/restrictors/restrictors-form-page/restrictors-form-page.component.mjs +49 -0
- package/esm2022/lib/restrictors/restrictors-list-page/restrictors-list-page.component.mjs +152 -0
- package/{esm2020 → esm2022}/lib/restrictors/restrictors-routing.module.mjs +5 -5
- package/{esm2020 → esm2022}/lib/restrictors/restrictors.module.mjs +43 -43
- package/{esm2020 → esm2022}/lib/role/permission/permission.model.mjs +4 -1
- package/{esm2020 → esm2022}/lib/role/permission/permission.module.mjs +15 -15
- package/{esm2020 → esm2022}/lib/role/permission/permission.routes.mjs +5 -5
- package/esm2022/lib/role/permission/permissions-management.component.mjs +127 -0
- package/esm2022/lib/role/role-form.component.mjs +109 -0
- package/esm2022/lib/role/role-view/role-view.component.mjs +44 -0
- package/esm2022/lib/role/role.model.mjs +66 -0
- package/{esm2020 → esm2022}/lib/role/role.module.mjs +21 -21
- package/{esm2020 → esm2022}/lib/role/role.routes.mjs +5 -5
- package/esm2022/lib/role/role.service.mjs +27 -0
- package/esm2022/lib/role/roles-view-all.component.mjs +140 -0
- package/esm2022/lib/searchable-selector/searchable-selector.component.mjs +365 -0
- package/{esm2020 → esm2022}/lib/searchable-selector/searchable-selector.module.mjs +11 -11
- package/{esm2020 → esm2022}/lib/signup/signup-routing.module.mjs +5 -5
- package/esm2022/lib/signup/signup.component.mjs +87 -0
- package/{esm2020 → esm2022}/lib/signup/signup.module.mjs +11 -11
- package/esm2022/lib/techlify-company-switcher/techlify-company-switcher/techlify-company-switcher.component.mjs +73 -0
- package/{esm2020 → esm2022}/lib/techlify-company-switcher/techlify-company-switcher.module.mjs +9 -9
- package/esm2022/lib/techlify-feature/on-off-switch/on-off-switch.component.mjs +27 -0
- package/esm2022/lib/techlify-feature/techlify-feature-enabled.directive.mjs +79 -0
- package/esm2022/lib/techlify-feature/techlify-feature-listing.component.mjs +179 -0
- package/{esm2020 → esm2022}/lib/techlify-feature/techlify-feature.module.mjs +17 -17
- package/esm2022/lib/techlify-feature/techlify-feature.service.mjs +27 -0
- package/{esm2020 → esm2022}/lib/techlify-notifications/ngx-techlify-notifier/ngx-techlify-notifier-routing.module.mjs +5 -5
- package/esm2022/lib/techlify-notifications/ngx-techlify-notifier/ngx-techlify-notifier.component.mjs +109 -0
- package/{esm2020 → esm2022}/lib/techlify-notifications/ngx-techlify-notifier/ngx-techlify-notifier.module.mjs +15 -15
- package/{esm2020 → esm2022}/lib/techlify-notifications/techlify-notification-for-user/techlify-notification-for-user-routing.module.mjs +5 -5
- package/esm2022/lib/techlify-notifications/techlify-notification-for-user/techlify-notification-for-user.component.mjs +90 -0
- package/{esm2020 → esm2022}/lib/techlify-notifications/techlify-notification-for-user/techlify-notification-for-user.module.mjs +13 -13
- package/{esm2020 → esm2022}/lib/techlify-notifications/techlify-notification-routing.module.mjs +5 -5
- package/{esm2020 → esm2022}/lib/techlify-notifications/techlify-notification-subscriber/techlify-notfication-subscriber-dashboard/techlify-notfication-subscriber-dashboard-routing.module.mjs +5 -5
- package/esm2022/lib/techlify-notifications/techlify-notification-subscriber/techlify-notfication-subscriber-dashboard/techlify-notfication-subscriber-dashboard.component.mjs +180 -0
- package/{esm2020 → esm2022}/lib/techlify-notifications/techlify-notification-subscriber/techlify-notfication-subscriber-dashboard/techlify-notfication-subscriber-dashboard.module.mjs +19 -19
- package/{esm2020 → esm2022}/lib/techlify-notifications/techlify-notification-subscriber/techlify-notification-subscriber-form/techlify-notification-subscriber-form-routing.module.mjs +5 -5
- package/esm2022/lib/techlify-notifications/techlify-notification-subscriber/techlify-notification-subscriber-form/techlify-notification-subscriber-form.component.mjs +131 -0
- package/{esm2020 → esm2022}/lib/techlify-notifications/techlify-notification-subscriber/techlify-notification-subscriber-form/techlify-notification-subscriber-form.module.mjs +17 -17
- package/{esm2020 → esm2022}/lib/techlify-notifications/techlify-notification-subscriber/techlify-notification-subscriber-list/techlify-notification-subscriber-list-routing.module.mjs +5 -5
- package/esm2022/lib/techlify-notifications/techlify-notification-subscriber/techlify-notification-subscriber-list/techlify-notification-subscriber-list.component.mjs +186 -0
- package/{esm2020 → esm2022}/lib/techlify-notifications/techlify-notification-subscriber/techlify-notification-subscriber-list/techlify-notification-subscriber-list.module.mjs +19 -19
- package/{esm2020 → esm2022}/lib/techlify-notifications/techlify-notification-subscriber/techlify-notification-subscriber-list-filter/techlify-notification-subscriber-list-filter-routing.module.mjs +5 -5
- package/esm2022/lib/techlify-notifications/techlify-notification-subscriber/techlify-notification-subscriber-list-filter/techlify-notification-subscriber-list-filter.component.mjs +72 -0
- package/{esm2020 → esm2022}/lib/techlify-notifications/techlify-notification-subscriber/techlify-notification-subscriber-list-filter/techlify-notification-subscriber-list-filter.module.mjs +15 -15
- package/{esm2020 → esm2022}/lib/techlify-notifications/techlify-notification-subscriber/techlify-notification-subscriber-routing.module.mjs +5 -5
- package/{esm2020 → esm2022}/lib/techlify-notifications/techlify-notification-subscriber/techlify-notification-subscriber.module.mjs +19 -19
- package/esm2022/lib/techlify-notifications/techlify-notification-subscriber/techlify-notification-subscription-entity.model.mjs +6 -0
- package/{esm2020 → esm2022}/lib/techlify-notifications/techlify-notification-type/techlify-notification-type-form/techlify-notification-type-form-routing.module.mjs +5 -5
- package/esm2022/lib/techlify-notifications/techlify-notification-type/techlify-notification-type-form/techlify-notification-type-form.component.mjs +111 -0
- package/{esm2020 → esm2022}/lib/techlify-notifications/techlify-notification-type/techlify-notification-type-form/techlify-notification-type-form.module.mjs +19 -19
- package/{esm2020 → esm2022}/lib/techlify-notifications/techlify-notification-type/techlify-notification-type-list/techlify-notification-type-list-routing.module.mjs +5 -5
- package/esm2022/lib/techlify-notifications/techlify-notification-type/techlify-notification-type-list/techlify-notification-type-list.component.mjs +171 -0
- package/{esm2020 → esm2022}/lib/techlify-notifications/techlify-notification-type/techlify-notification-type-list/techlify-notification-type-list.module.mjs +17 -17
- package/{esm2020 → esm2022}/lib/techlify-notifications/techlify-notification-type/techlify-notification-type-routing.module.mjs +5 -5
- package/{esm2020 → esm2022}/lib/techlify-notifications/techlify-notification-type/techlify-notification-type.module.mjs +17 -17
- package/{esm2020 → esm2022}/lib/techlify-notifications/techlify-notification-user-status.model.mjs +3 -3
- package/{esm2020 → esm2022}/lib/techlify-notifications/techlify-notification.module.mjs +7 -7
- package/esm2022/lib/techlify-tagger-tag-form-field/techlify-tagger-tag-form-config.model.mjs +24 -0
- package/esm2022/lib/techlify-tagger-tag-form-field/techlify-tagger-tag-form-field.component.mjs +301 -0
- package/{esm2020 → esm2022}/lib/techlify-tagger-tag-form-field/techlify-tagger-tag-form-field.module.mjs +13 -13
- package/esm2022/lib/techlify-tagger-tag-selector/techlify-tagger-tag-selector.component.mjs +189 -0
- package/{esm2020 → esm2022}/lib/techlify-tagger-tag-selector/techlify-tagger-tag-selector.module.mjs +17 -17
- package/esm2022/lib/techlify-update/techlify-update-form/techlify-update-form.component.mjs +124 -0
- package/{esm2020 → esm2022}/lib/techlify-update/techlify-update-form/techlify-update-form.module.mjs +13 -13
- package/{esm2020 → esm2022}/lib/techlify-update/techlify-update-history/techlify-update-history-routing.module.mjs +5 -5
- package/esm2022/lib/techlify-update/techlify-update-history/techlify-update-history.component.mjs +151 -0
- package/{esm2020 → esm2022}/lib/techlify-update/techlify-update-history/techlify-update-history.module.mjs +19 -19
- package/{esm2020 → esm2022}/lib/techlify-update/techlify-update-routing.module.mjs +5 -5
- package/{esm2020 → esm2022}/lib/techlify-update/techlify-update.module.mjs +21 -21
- package/esm2022/lib/techlify-update/techlify-update.service.mjs +42 -0
- package/esm2022/lib/techlify-update/techlify-updates-list/techlify-updates-list.component.mjs +169 -0
- package/esm2022/lib/techlify-update/techlify-updates-teaser/techlify-updates-teaser.component.mjs +63 -0
- package/{esm2020 → esm2022}/lib/techlify-update/techlify-updates-teaser/techlify-updates-teaser.module.mjs +11 -11
- package/esm2022/lib/techlify-update/update-notifier/update-notifier-snack/update-notifier-snack.component.mjs +85 -0
- package/esm2022/lib/techlify-update/update-notifier/update-notifier.component.mjs +57 -0
- package/{esm2020 → esm2022}/lib/techlify-update/update-notifier/update-notifier.module.mjs +13 -13
- package/esm2022/lib/techlify-update/update-view/update-view.component.mjs +43 -0
- package/{esm2020 → esm2022}/lib/techlify-update/update-view/update-view.module.mjs +9 -9
- package/{esm2020 → esm2022}/lib/timeline-filter/timeline-filter-routing.module.mjs +5 -5
- package/esm2022/lib/timeline-filter/timeline-filter.component.mjs +253 -0
- package/{esm2020 → esm2022}/lib/timeline-filter/timeline-filter.module.mjs +25 -25
- package/esm2022/lib/timeline-filter/timeline.model.mjs +18 -0
- package/esm2022/lib/user/current-user.service.mjs +155 -0
- package/esm2022/lib/user/user-enable-button-component/user-enable-button.component.mjs +65 -0
- package/esm2022/lib/user/user-explore.component.mjs +55 -0
- package/esm2022/lib/user/user-form.component.mjs +234 -0
- package/esm2022/lib/user/user-view.component.mjs +76 -0
- package/esm2022/lib/user/user.model.mjs +49 -0
- package/{esm2020 → esm2022}/lib/user/user.module.mjs +42 -42
- package/{esm2020 → esm2022}/lib/user/user.routes.mjs +5 -5
- package/esm2022/lib/user/user.service.mjs +42 -0
- package/esm2022/lib/user/users-view-all.component.mjs +226 -0
- package/esm2022/lib/user-config/user-config.model.mjs +81 -0
- package/esm2022/lib/user-config/user-config.service.mjs +68 -0
- package/esm2022/lib/user-selector/user-data.service.mjs +37 -0
- package/esm2022/lib/user-selector/user-selector.component.mjs +100 -0
- package/{esm2020 → esm2022}/lib/user-selector/user-selector.module.mjs +11 -11
- package/{esm2020 → esm2022}/lib/utility/date-utils.service.mjs +4 -4
- package/esm2022/lib/utility/num-items-selector.component.mjs +33 -0
- package/esm2022/lib/utility/number-selector.component.mjs +46 -0
- package/{esm2020 → esm2022}/lib/utility/utility.module.mjs +7 -7
- package/{fesm2020 → fesm2022}/ngx-techlify-core.mjs +3117 -2394
- package/{fesm2020 → fesm2022}/ngx-techlify-core.mjs.map +1 -1
- package/lib/audit-log/audit-log-for-model/audit-log-for-model.component.d.ts +1 -1
- package/lib/audit-log/audit-log-list/audit-log-list.component.d.ts +1 -1
- package/lib/audit-log/audit-log-list-filter/audit-log-list-filter.component.d.ts +1 -1
- package/lib/column-selector/column-selector/column-selector.component.d.ts +1 -1
- package/lib/data-table/data-table.component.d.ts +1 -1
- package/lib/document-viewer/document-viewer.component.d.ts +1 -1
- package/lib/entity-files/entity-files-view-all.component.d.ts +1 -1
- package/lib/export-excel/export-excel-button/export-excel-button.component.d.ts +1 -1
- package/lib/file-dragdrop-uploader/file-dragdrop-uploader/file-dragdrop-uploader.component.d.ts +1 -1
- package/lib/file-dropper/file-dropper.component.d.ts +1 -1
- package/lib/import-csv/data-import/data-import.component.d.ts +1 -1
- package/lib/import-csv/failed-items-list/failed-items-list.component.d.ts +1 -1
- package/lib/import-csv/field-mapping/field-mapping.component.d.ts +1 -1
- package/lib/import-csv/import-csv.component.d.ts +1 -1
- package/lib/import-csv/import-history-list/import-history-list.component.d.ts +1 -1
- package/lib/import-csv/import-success/import-success.component.d.ts +1 -1
- package/lib/ip-address-selector/ip-range-selector/ip-range-selector.component.d.ts +1 -1
- package/lib/loader/loader.component.d.ts +1 -1
- package/lib/login-history-for-user/login-history-for-user.component.d.ts +1 -1
- package/lib/note/comment-form/comment-form.component.d.ts +1 -1
- package/lib/note/note-list/note-list.component.d.ts +1 -1
- package/lib/number-input-button/number-input-button/number-input-button.component.d.ts +1 -1
- package/lib/password-requirement-check/password-requirement-check/password-requirement-check.component.d.ts +1 -1
- package/lib/read-more/read-more.component.d.ts +1 -1
- package/lib/restrictors/restrictor-level-selector/restrictor-level-selector/restrictor-level-selector.component.d.ts +1 -1
- package/lib/restrictors/restrictor-status-selector/restrictor-status-selector/restrictor-status-selector.component.d.ts +1 -1
- package/lib/restrictors/restrictor-type-selector/restrictor-type-selector/restrictor-type-selector.component.d.ts +1 -1
- package/lib/restrictors/restrictors-form/restrictors-form.component.d.ts +1 -1
- package/lib/role/permission/permissions-management.component.d.ts +1 -1
- package/lib/role/roles-view-all.component.d.ts +1 -1
- package/lib/searchable-selector/searchable-selector.component.d.ts +1 -1
- package/lib/techlify-feature/on-off-switch/on-off-switch.component.d.ts +1 -1
- package/lib/techlify-feature/techlify-feature-enabled.directive.d.ts +1 -1
- package/lib/techlify-notifications/techlify-notification-for-user/techlify-notification-for-user.component.d.ts +1 -1
- package/lib/techlify-notifications/techlify-notification-subscriber/techlify-notification-subscriber-list-filter/techlify-notification-subscriber-list-filter.component.d.ts +1 -1
- package/lib/techlify-tagger-tag-form-field/techlify-tagger-tag-form-field.component.d.ts +1 -1
- package/lib/techlify-tagger-tag-selector/techlify-tagger-tag-selector.component.d.ts +1 -1
- package/lib/techlify-update/techlify-updates-teaser/techlify-updates-teaser.component.d.ts +1 -1
- package/lib/techlify-update/update-notifier/update-notifier.component.d.ts +1 -1
- package/lib/timeline-filter/timeline-filter.component.d.ts +1 -1
- package/lib/user/user-enable-button-component/user-enable-button.component.d.ts +1 -1
- package/lib/user/user-form.component.d.ts +1 -1
- package/lib/user/users-view-all.component.d.ts +1 -1
- package/lib/user-selector/user-selector.component.d.ts +1 -1
- package/lib/utility/num-items-selector.component.d.ts +1 -1
- package/lib/utility/number-selector.component.d.ts +1 -1
- package/package.json +19 -25
- package/esm2020/lib/access-control-config/access-control-config-form/access-control-config-form.component.mjs +0 -127
- package/esm2020/lib/access-control-config/access-control-config.component.mjs +0 -131
- package/esm2020/lib/access-control-config/access-control-config.model.mjs +0 -21
- package/esm2020/lib/access-control-config/access-control-config.service.mjs +0 -31
- package/esm2020/lib/action-popup/action-popup.component.mjs +0 -34
- package/esm2020/lib/audit-log/audit-log-for-model/audit-log-for-model.component.mjs +0 -51
- package/esm2020/lib/audit-log/audit-log-list/audit-log-list.component.mjs +0 -139
- package/esm2020/lib/audit-log/audit-log-list-filter/audit-log-list-filter.component.mjs +0 -74
- package/esm2020/lib/audit-log/audit-log-view/audit-log-view.component.mjs +0 -51
- package/esm2020/lib/audit-log/audit-log-view-model/audit-log-view-model.component.mjs +0 -56
- package/esm2020/lib/audit-log/audit-logs-view-model/audit-logs-view-model.component.mjs +0 -37
- package/esm2020/lib/base-model/techlify-form-component.class.mjs +0 -49
- package/esm2020/lib/base-model/techlify-listing-component.class.mjs +0 -65
- package/esm2020/lib/base-model/techlify-service.class.mjs +0 -68
- package/esm2020/lib/change-password/change-password.component.mjs +0 -87
- package/esm2020/lib/column-selector/column-selector/column-selector.component.mjs +0 -37
- package/esm2020/lib/core/alert.service.mjs +0 -38
- package/esm2020/lib/core/api-prefix.interceptor.mjs +0 -26
- package/esm2020/lib/core/authentication.guard.mjs +0 -35
- package/esm2020/lib/core/authentication.service.mjs +0 -62
- package/esm2020/lib/core/cache.interceptor.mjs +0 -58
- package/esm2020/lib/core/config.service.mjs +0 -45
- package/esm2020/lib/core/core.module.mjs +0 -63
- package/esm2020/lib/core/credentials.service.mjs +0 -79
- package/esm2020/lib/core/dataManager.service.mjs +0 -119
- package/esm2020/lib/core/error-handler.interceptor.mjs +0 -48
- package/esm2020/lib/core/error-handler.service.mjs +0 -55
- package/esm2020/lib/core/filter.service.mjs +0 -37
- package/esm2020/lib/core/http-cache.service.mjs +0 -107
- package/esm2020/lib/core/http.service.mjs +0 -84
- package/esm2020/lib/core/logger.service.mjs +0 -100
- package/esm2020/lib/core/snack/snack.component.mjs +0 -33
- package/esm2020/lib/core/storage.service.mjs +0 -38
- package/esm2020/lib/core/techlify-config.model.mjs +0 -28
- package/esm2020/lib/core/token.interceptor.mjs +0 -28
- package/esm2020/lib/data-table/data-table.component.mjs +0 -204
- package/esm2020/lib/data-table/data-table.model.mjs +0 -11
- package/esm2020/lib/document-viewer/document-viewer.component.mjs +0 -65
- package/esm2020/lib/email-subscription/email-subscription-for-user/email-subscription-for-user.component.mjs +0 -76
- package/esm2020/lib/email-subscription/email-subscription-type/email-subscription-type-form/email-subscription-type-form.component.mjs +0 -105
- package/esm2020/lib/email-subscription/email-subscription-type/email-subscription-type-list/email-subscription-type-list.component.mjs +0 -161
- package/esm2020/lib/email-subscription/email-subscription-user/email-subscription-user-form/email-subscription-user-form.component.mjs +0 -101
- package/esm2020/lib/email-subscription/email-subscription-user/email-subscription-user-list/email-subscription-user-list.component.mjs +0 -165
- package/esm2020/lib/email-subscription/email-subscription-user/email-subscription-user-list-filter/email-subscription-user-list-filter.component.mjs +0 -52
- package/esm2020/lib/entity-files/entity-file-form/entity-file-form.component.mjs +0 -161
- package/esm2020/lib/entity-files/entity-file.service.mjs +0 -36
- package/esm2020/lib/entity-files/entity-files-view-all.component.mjs +0 -346
- package/esm2020/lib/export-excel/export-excel-button/export-excel-button.component.mjs +0 -32
- package/esm2020/lib/file-dragdrop-uploader/file-dragdrop-uploader/file-dragdrop-uploader.component.mjs +0 -90
- package/esm2020/lib/file-dropper/file-dropper.component.mjs +0 -125
- package/esm2020/lib/file-dropper/file-dropper.model.mjs +0 -3
- package/esm2020/lib/forgot-password/forgot-password.component.mjs +0 -69
- package/esm2020/lib/import-csv/failed-items-list/failed-items-list.component.mjs +0 -35
- package/esm2020/lib/import-csv/field-mapping/field-mapping.component.mjs +0 -153
- package/esm2020/lib/import-csv/import-csv.component.mjs +0 -199
- package/esm2020/lib/import-csv/import-history-list/import-history-list.component.mjs +0 -71
- package/esm2020/lib/import-csv/import-success/import-success.component.mjs +0 -24
- package/esm2020/lib/ip-address-selector/ip-range-selector/ip-range-selector.component.mjs +0 -109
- package/esm2020/lib/loader/loader.component.mjs +0 -23
- package/esm2020/lib/login/login.component.mjs +0 -153
- package/esm2020/lib/login-history-for-user/login-history-for-user.component.mjs +0 -92
- package/esm2020/lib/note/comment-form/comment-form.component.mjs +0 -77
- package/esm2020/lib/note/note-form/note-form.component.mjs +0 -79
- package/esm2020/lib/note/note-list/note-list.component.mjs +0 -148
- package/esm2020/lib/note/note.service.mjs +0 -29
- package/esm2020/lib/number-input-button/number-input-button/number-input-button.component.mjs +0 -104
- package/esm2020/lib/password-requirement-check/password-requirement-check/password-requirement-check.component.mjs +0 -47
- package/esm2020/lib/profile/profile-edit.component.mjs +0 -75
- package/esm2020/lib/read-more/read-more.component.mjs +0 -43
- package/esm2020/lib/request-helper/request-helper.service.mjs +0 -105
- package/esm2020/lib/restrictors/restrictor-level-selector/restrictor-level-selector/restrictor-level-selector.component.mjs +0 -91
- package/esm2020/lib/restrictors/restrictor-level-selector/restrictor-level.service.mjs +0 -19
- package/esm2020/lib/restrictors/restrictor-status-selector/restrictor-status-selector/restrictor-status-selector.component.mjs +0 -91
- package/esm2020/lib/restrictors/restrictor-status-selector/restrictor-status.service.mjs +0 -19
- package/esm2020/lib/restrictors/restrictor-type-selector/restrictor-type-selector/restrictor-type-selector.component.mjs +0 -92
- package/esm2020/lib/restrictors/restrictor-type-selector/restrictor-type.service.mjs +0 -19
- package/esm2020/lib/restrictors/restrictor.service.mjs +0 -19
- package/esm2020/lib/restrictors/restrictors-form/restrictors-form.component.mjs +0 -102
- package/esm2020/lib/restrictors/restrictors-form-page/restrictors-form-page.component.mjs +0 -44
- package/esm2020/lib/restrictors/restrictors-list-page/restrictors-list-page.component.mjs +0 -143
- package/esm2020/lib/role/permission/permissions-management.component.mjs +0 -114
- package/esm2020/lib/role/role-form.component.mjs +0 -99
- package/esm2020/lib/role/role-view/role-view.component.mjs +0 -39
- package/esm2020/lib/role/role.model.mjs +0 -56
- package/esm2020/lib/role/role.service.mjs +0 -26
- package/esm2020/lib/role/roles-view-all.component.mjs +0 -131
- package/esm2020/lib/searchable-selector/searchable-selector.component.mjs +0 -348
- package/esm2020/lib/signup/signup.component.mjs +0 -78
- package/esm2020/lib/techlify-company-switcher/techlify-company-switcher/techlify-company-switcher.component.mjs +0 -68
- package/esm2020/lib/techlify-feature/on-off-switch/on-off-switch.component.mjs +0 -24
- package/esm2020/lib/techlify-feature/techlify-feature-enabled.directive.mjs +0 -73
- package/esm2020/lib/techlify-feature/techlify-feature-listing.component.mjs +0 -169
- package/esm2020/lib/techlify-feature/techlify-feature.service.mjs +0 -26
- package/esm2020/lib/techlify-notifications/ngx-techlify-notifier/ngx-techlify-notifier.component.mjs +0 -103
- package/esm2020/lib/techlify-notifications/techlify-notification-for-user/techlify-notification-for-user.component.mjs +0 -86
- package/esm2020/lib/techlify-notifications/techlify-notification-subscriber/techlify-notfication-subscriber-dashboard/techlify-notfication-subscriber-dashboard.component.mjs +0 -173
- package/esm2020/lib/techlify-notifications/techlify-notification-subscriber/techlify-notification-subscriber-form/techlify-notification-subscriber-form.component.mjs +0 -117
- package/esm2020/lib/techlify-notifications/techlify-notification-subscriber/techlify-notification-subscriber-list/techlify-notification-subscriber-list.component.mjs +0 -180
- package/esm2020/lib/techlify-notifications/techlify-notification-subscriber/techlify-notification-subscriber-list-filter/techlify-notification-subscriber-list-filter.component.mjs +0 -69
- package/esm2020/lib/techlify-notifications/techlify-notification-subscriber/techlify-notification-subscription-entity.model.mjs +0 -6
- package/esm2020/lib/techlify-notifications/techlify-notification-type/techlify-notification-type-form/techlify-notification-type-form.component.mjs +0 -99
- package/esm2020/lib/techlify-notifications/techlify-notification-type/techlify-notification-type-list/techlify-notification-type-list.component.mjs +0 -166
- package/esm2020/lib/techlify-tagger-tag-form-field/techlify-tagger-tag-form-config.model.mjs +0 -15
- package/esm2020/lib/techlify-tagger-tag-form-field/techlify-tagger-tag-form-field.component.mjs +0 -285
- package/esm2020/lib/techlify-tagger-tag-selector/techlify-tagger-tag-selector.component.mjs +0 -180
- package/esm2020/lib/techlify-update/techlify-update-form/techlify-update-form.component.mjs +0 -116
- package/esm2020/lib/techlify-update/techlify-update-history/techlify-update-history.component.mjs +0 -145
- package/esm2020/lib/techlify-update/techlify-update.service.mjs +0 -41
- package/esm2020/lib/techlify-update/techlify-updates-list/techlify-updates-list.component.mjs +0 -163
- package/esm2020/lib/techlify-update/techlify-updates-teaser/techlify-updates-teaser.component.mjs +0 -60
- package/esm2020/lib/techlify-update/update-notifier/update-notifier-snack/update-notifier-snack.component.mjs +0 -77
- package/esm2020/lib/techlify-update/update-notifier/update-notifier.component.mjs +0 -53
- package/esm2020/lib/techlify-update/update-view/update-view.component.mjs +0 -38
- package/esm2020/lib/timeline-filter/timeline-filter.component.mjs +0 -243
- package/esm2020/lib/timeline-filter/timeline.model.mjs +0 -18
- package/esm2020/lib/user/current-user.service.mjs +0 -151
- package/esm2020/lib/user/user-enable-button-component/user-enable-button.component.mjs +0 -59
- package/esm2020/lib/user/user-explore.component.mjs +0 -50
- package/esm2020/lib/user/user-form.component.mjs +0 -219
- package/esm2020/lib/user/user-view.component.mjs +0 -68
- package/esm2020/lib/user/user.model.mjs +0 -30
- package/esm2020/lib/user/user.service.mjs +0 -41
- package/esm2020/lib/user/users-view-all.component.mjs +0 -212
- package/esm2020/lib/user-config/user-config.model.mjs +0 -50
- package/esm2020/lib/user-config/user-config.service.mjs +0 -65
- package/esm2020/lib/user-selector/user-data.service.mjs +0 -35
- package/esm2020/lib/user-selector/user-selector.component.mjs +0 -91
- package/esm2020/lib/utility/num-items-selector.component.mjs +0 -31
- package/esm2020/lib/utility/number-selector.component.mjs +0 -42
- package/fesm2015/ngx-techlify-core.mjs +0 -13476
- package/fesm2015/ngx-techlify-core.mjs.map +0 -1
- /package/{esm2020 → esm2022}/lib/action-popup/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/base-model/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/column-selector/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/core/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/data-table/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/date-validator.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/document-viewer/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/email-subscription/email-subscription-for-user/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/email-subscription/email-subscription-type/email-subscription-type-form/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/email-subscription/email-subscription-type/email-subscription-type-list/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/email-subscription/email-subscription-user/email-subscription-user-form/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/email-subscription/email-subscription-user/email-subscription-user-list/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/email-subscription/email-subscription-user/email-subscription-user-list-filter/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/entity-files/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/file-dropper/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/forgot-password/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/import-csv/import-csv-config.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/loader/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/login/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/note/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/number-input-button/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/password-requirement-check/password-check-result.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/profile/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/restrictors/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/role/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/searchable-selector/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/signup/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/techlify-company-switcher/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/techlify-feature/techlify-feature.routing.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/techlify-notifications/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/timeline-filter/calculate-timeline.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/timeline-filter/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/user/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/user/user-type.enum.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/user-config/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/user-selector/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/utility/index.mjs +0 -0
- /package/{esm2020 → esm2022}/ngx-techlify-core.mjs +0 -0
- /package/{esm2020 → esm2022}/public-api.mjs +0 -0
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
var TimelineFilterComponent_1;
|
|
2
|
+
import { __decorate } from "tslib";
|
|
3
|
+
/* tslint:disable:radix */
|
|
4
|
+
import { coerceBooleanProperty } from '@angular/cdk/coercion';
|
|
5
|
+
import { DatePipe } from '@angular/common';
|
|
6
|
+
import { Component, EventEmitter, Input, Optional, Output, Self, ViewChild } from '@angular/core';
|
|
7
|
+
import { UntypedFormControl, Validators } from '@angular/forms';
|
|
8
|
+
import { MatFormFieldControl } from '@angular/material/form-field';
|
|
9
|
+
import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';
|
|
10
|
+
import { calculateTimeline } from './calculate-timeline';
|
|
11
|
+
import { Subject } from 'rxjs';
|
|
12
|
+
import { debounceTime, distinctUntilChanged } from 'rxjs/operators';
|
|
13
|
+
import { Timeline } from './timeline.model';
|
|
14
|
+
import * as i0 from "@angular/core";
|
|
15
|
+
import * as i1 from "@angular/forms";
|
|
16
|
+
import * as i2 from "@angular/common";
|
|
17
|
+
import * as i3 from "@angular/material/form-field";
|
|
18
|
+
import * as i4 from "@angular/material/select";
|
|
19
|
+
import * as i5 from "@angular/material/core";
|
|
20
|
+
import * as i6 from "@angular/material/button";
|
|
21
|
+
import * as i7 from "@angular/material/icon";
|
|
22
|
+
import * as i8 from "@angular/material/input";
|
|
23
|
+
import * as i9 from "@angular/material/datepicker";
|
|
24
|
+
let TimelineFilterComponent = TimelineFilterComponent_1 = class TimelineFilterComponent {
|
|
25
|
+
ngControl;
|
|
26
|
+
datePipe;
|
|
27
|
+
set defaultValue(value) {
|
|
28
|
+
this.timelineValue.setValue(value);
|
|
29
|
+
this.changeTimeline(value);
|
|
30
|
+
}
|
|
31
|
+
constructor(formBuilder, ngControl, datePipe) {
|
|
32
|
+
this.ngControl = ngControl;
|
|
33
|
+
this.datePipe = datePipe;
|
|
34
|
+
this.selectorForm = formBuilder.group({
|
|
35
|
+
select_value: [null],
|
|
36
|
+
});
|
|
37
|
+
if (this.ngControl != null) {
|
|
38
|
+
this.ngControl.valueAccessor = this;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
get required() { return this._required; }
|
|
42
|
+
set required(value) {
|
|
43
|
+
this.selectorForm?.get('select_value')?.setValidators(Validators.required);
|
|
44
|
+
this._required = coerceBooleanProperty(value);
|
|
45
|
+
this.stateChanges.next();
|
|
46
|
+
}
|
|
47
|
+
get disabled() { return this._disabled; }
|
|
48
|
+
set disabled(value) {
|
|
49
|
+
this._disabled = coerceBooleanProperty(value);
|
|
50
|
+
this._disabled ? this.selectorForm.disable() : this.selectorForm.enable();
|
|
51
|
+
this.stateChanges.next();
|
|
52
|
+
}
|
|
53
|
+
get value() {
|
|
54
|
+
if (this.selectorForm.valid) {
|
|
55
|
+
return this.selectorForm.value.select_value;
|
|
56
|
+
}
|
|
57
|
+
return '';
|
|
58
|
+
}
|
|
59
|
+
set value(data) {
|
|
60
|
+
this.selectorForm.patchValue({ select_value: parseInt(data) || '' }, { emitEvent: false });
|
|
61
|
+
this._handleInput();
|
|
62
|
+
this.stateChanges.next();
|
|
63
|
+
}
|
|
64
|
+
static nextId = 0;
|
|
65
|
+
picker;
|
|
66
|
+
timelineValue = new UntypedFormControl('');
|
|
67
|
+
timelines = [
|
|
68
|
+
{ value: Timeline.CUSTOM, viewValue: 'Custom' },
|
|
69
|
+
{ value: Timeline.TODAY, viewValue: 'Today' },
|
|
70
|
+
{ value: Timeline.YESTERDAY, viewValue: 'Yesterday' },
|
|
71
|
+
{ value: Timeline.TOMMOROW, viewValue: 'Tomorrow' },
|
|
72
|
+
{ value: Timeline.THIS_WEEK, viewValue: 'This Week' },
|
|
73
|
+
{ value: Timeline.LAST_WEEK, viewValue: 'Last Week' },
|
|
74
|
+
{ value: Timeline.NEXT_WEEK, viewValue: 'Next Week' },
|
|
75
|
+
{ value: Timeline.THIS_MONTH, viewValue: 'This Month' },
|
|
76
|
+
{ value: Timeline.LAST_MONTH, viewValue: 'Last Month' },
|
|
77
|
+
{ value: Timeline.NEXT_MONTH, viewValue: 'Next Month' },
|
|
78
|
+
{ value: Timeline.THIS_QUARTER, viewValue: 'This Quarter' },
|
|
79
|
+
{ value: Timeline.LAST_QUARTER, viewValue: 'Last Quarter' },
|
|
80
|
+
{ value: Timeline.THIS_YEAR, viewValue: 'This Year' },
|
|
81
|
+
{ value: Timeline.LAST_YEAR, viewValue: 'Last Year' },
|
|
82
|
+
{ value: Timeline.ALL, viewValue: 'All dates' },
|
|
83
|
+
];
|
|
84
|
+
dateFrom = 'date_from';
|
|
85
|
+
dateTo = 'date_to';
|
|
86
|
+
appearance = 'legacy';
|
|
87
|
+
showClearButton = false;
|
|
88
|
+
/**
|
|
89
|
+
* @deprecated The form input is deprecated.
|
|
90
|
+
*/
|
|
91
|
+
form;
|
|
92
|
+
labelText = 'Select Timeline';
|
|
93
|
+
selectedValue;
|
|
94
|
+
touchUi = true;
|
|
95
|
+
selectedValueChange = new EventEmitter();
|
|
96
|
+
selectionChange = new EventEmitter();
|
|
97
|
+
selectorForm;
|
|
98
|
+
stateChanges = new Subject();
|
|
99
|
+
controlType = 'timeline-filter';
|
|
100
|
+
id = `timeline-filter-${TimelineFilterComponent_1.nextId++}`;
|
|
101
|
+
describedBy = '';
|
|
102
|
+
selectedRange;
|
|
103
|
+
showCustomDateFields = false;
|
|
104
|
+
_required = false;
|
|
105
|
+
_disabled = false;
|
|
106
|
+
onChange = () => { };
|
|
107
|
+
onTouched = () => { };
|
|
108
|
+
getDateRangeString() {
|
|
109
|
+
let str = '';
|
|
110
|
+
if (this.selectedRange?.show_custom_field) {
|
|
111
|
+
if (this.selectedRange?.date_from) {
|
|
112
|
+
str += ' - ' + this.selectedRange?.date_from;
|
|
113
|
+
}
|
|
114
|
+
if (this.selectedRange?.date_to) {
|
|
115
|
+
str += ' - ' + this.selectedRange?.date_to;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
return str;
|
|
119
|
+
}
|
|
120
|
+
resetFieldValue(field) {
|
|
121
|
+
this.form?.get(field)?.setValue('');
|
|
122
|
+
}
|
|
123
|
+
getFieldValue(field) {
|
|
124
|
+
return this?.form.get(field)?.value;
|
|
125
|
+
}
|
|
126
|
+
setFieldValue(field, value) {
|
|
127
|
+
this.form?.get(field)?.setValue(value);
|
|
128
|
+
}
|
|
129
|
+
changeTimeline(value) {
|
|
130
|
+
value = parseInt(value);
|
|
131
|
+
const timeline = calculateTimeline(value, this.dateFrom, this.dateTo);
|
|
132
|
+
if (timeline) {
|
|
133
|
+
this.selectedRange = timeline;
|
|
134
|
+
this.setFieldValue(this.dateFrom, timeline.date_from);
|
|
135
|
+
this.setFieldValue(this.dateTo, timeline.date_to);
|
|
136
|
+
this.showCustomDateFields = timeline.show_custom_field;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
_handleInput() {
|
|
140
|
+
if (this.value == 1) {
|
|
141
|
+
this.picker?.open();
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
const range = calculateTimeline(this.value);
|
|
145
|
+
this.selectedRange = range;
|
|
146
|
+
this.onChange(this.value);
|
|
147
|
+
this.selectedValueChange.emit(this.selectedValue);
|
|
148
|
+
this.selectionChange.emit(range);
|
|
149
|
+
}
|
|
150
|
+
dateRangeChange(dateRangeStart, dateRangeEnd) {
|
|
151
|
+
const range = {
|
|
152
|
+
date_from: dateRangeStart.value,
|
|
153
|
+
date_to: dateRangeEnd.value,
|
|
154
|
+
show_custom_field: true
|
|
155
|
+
};
|
|
156
|
+
this.selectedRange = range;
|
|
157
|
+
this.onChange(this.value);
|
|
158
|
+
this.selectedValueChange.emit(this.selectedValue);
|
|
159
|
+
this.selectionChange.emit(range);
|
|
160
|
+
}
|
|
161
|
+
onCustomDateChange(event) {
|
|
162
|
+
}
|
|
163
|
+
setDescribedByIds(ids) {
|
|
164
|
+
this.describedBy = ids.join(' ');
|
|
165
|
+
}
|
|
166
|
+
onContainerClick(event) {
|
|
167
|
+
event.stopPropagation();
|
|
168
|
+
}
|
|
169
|
+
writeValue(data) {
|
|
170
|
+
this.value = data;
|
|
171
|
+
if (parseInt(this.value) === Timeline.CUSTOM) {
|
|
172
|
+
this.changeTimeline(this.value);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
registerOnChange(fn) {
|
|
176
|
+
this.onChange = fn;
|
|
177
|
+
}
|
|
178
|
+
registerOnTouched(fn) {
|
|
179
|
+
this.onTouched = fn;
|
|
180
|
+
}
|
|
181
|
+
setDisabledState(isDisabled) {
|
|
182
|
+
this.disabled = isDisabled;
|
|
183
|
+
}
|
|
184
|
+
ngOnInit() {
|
|
185
|
+
this.timelineValue.valueChanges.
|
|
186
|
+
pipe(debounceTime(100), distinctUntilChanged(), untilDestroyed(this)).subscribe(value => this.changeTimeline(value));
|
|
187
|
+
}
|
|
188
|
+
ngOnDestroy() {
|
|
189
|
+
this.stateChanges.complete();
|
|
190
|
+
}
|
|
191
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TimelineFilterComponent, deps: [{ token: i1.UntypedFormBuilder }, { token: i1.NgControl, optional: true, self: true }, { token: i2.DatePipe }], target: i0.ɵɵFactoryTarget.Component });
|
|
192
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TimelineFilterComponent, selector: "app-timeline-filter", inputs: { defaultValue: "defaultValue", required: "required", disabled: "disabled", value: "value", timelineValue: "timelineValue", timelines: "timelines", dateFrom: "dateFrom", dateTo: "dateTo", appearance: "appearance", showClearButton: "showClearButton", form: "form", labelText: "labelText", selectedValue: "selectedValue", touchUi: "touchUi" }, outputs: { selectedValueChange: "selectedValueChange", selectionChange: "selectionChange" }, providers: [
|
|
193
|
+
DatePipe,
|
|
194
|
+
{
|
|
195
|
+
provide: MatFormFieldControl,
|
|
196
|
+
useExisting: TimelineFilterComponent_1
|
|
197
|
+
}
|
|
198
|
+
], viewQueries: [{ propertyName: "picker", first: true, predicate: ["picker"], descendants: true }], ngImport: i0, template: "<ng-container *ngIf=\"form\" [formGroup]=\"form\">\n <mat-form-field [appearance]=\"appearance\">\n <mat-label>{{labelText}}</mat-label>\n <mat-select [formControl]=\"timelineValue\">\n <mat-option *ngFor=\"let timeline of timelines\" [value]=\"timeline.value\">\n {{timeline.viewValue}}\n </mat-option>\n </mat-select>\n <button mat-button *ngIf=\"showClearButton && timelineValue.value\" matSuffix mat-icon-button\n (click)=\"timelineValue.setValue('')\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <ng-container *ngIf=\"showCustomDateFields\">\n <mat-form-field [appearance]=\"appearance\">\n <mat-label>From Date</mat-label>\n <input matInput formControlName=\"{{dateFrom}}\" [matDatepicker]=\"fromPicker\" (click)=\"fromPicker.open()\"\n placeholder=\"From Date\" readonly />\n <mat-datepicker-toggle matSuffix [for]=\"fromPicker\"></mat-datepicker-toggle>\n <mat-datepicker #fromPicker></mat-datepicker>\n <button mat-button *ngIf=\"getFieldValue(dateFrom)\" matSuffix mat-icon-button\n (click)=\"resetFieldValue(dateFrom)\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <mat-form-field [appearance]=\"appearance\">\n <mat-label>To Date</mat-label>\n <input matInput formControlName=\"{{dateTo}}\" [matDatepicker]=\"toPicker\" (click)=\"toPicker.open()\"\n placeholder=\"To Date\" readonly />\n <mat-datepicker-toggle matSuffix [for]=\"toPicker\"></mat-datepicker-toggle>\n <mat-datepicker #toPicker></mat-datepicker>\n <button mat-button *ngIf=\"getFieldValue(dateTo)\" matSuffix mat-icon-button\n (click)=\"resetFieldValue(dateTo)\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n </ng-container>\n</ng-container>\n<div *ngIf=\"!form\" [formGroup]=\"selectorForm\">\n <mat-form-field [appearance]=\"appearance\">\n <mat-label *ngIf=\"labelText\">{{ labelText }}</mat-label>\n <mat-select formControlName=\"select_value\" [required]=\"required\" (selectionChange)=\"_handleInput()\">\n <mat-option *ngFor=\"let timeline of timelines\" [value]=\"timeline?.value\">\n {{ timeline?.viewValue }}\n {{ selectedRange?.show_custom_field && timeline?.value == 1 ? getDateRangeString() : '' }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <mat-date-range-input hidden (change)=\"onCustomDateChange($event)\" [rangePicker]=\"picker\">\n <input matStartDate #customStartDate>\n <input matEndDate (dateChange)=\"dateRangeChange(customStartDate, customEndDate)\" #customEndDate>\n </mat-date-range-input>\n <mat-date-range-picker #picker [touchUi]=\"touchUi\"></mat-date-range-picker>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatLabel, selector: "mat-label" }, { kind: "directive", type: i3.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i4.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator"], exportAs: ["matSelect"] }, { kind: "component", type: i5.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i6.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i6.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i8.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i9.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i9.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i9.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "component", type: i9.MatDateRangeInput, selector: "mat-date-range-input", inputs: ["rangePicker", "required", "dateFilter", "min", "max", "disabled", "separator", "comparisonStart", "comparisonEnd"], exportAs: ["matDateRangeInput"] }, { kind: "directive", type: i9.MatStartDate, selector: "input[matStartDate]", inputs: ["errorStateMatcher"], outputs: ["dateChange", "dateInput"] }, { kind: "directive", type: i9.MatEndDate, selector: "input[matEndDate]", inputs: ["errorStateMatcher"], outputs: ["dateChange", "dateInput"] }, { kind: "component", type: i9.MatDateRangePicker, selector: "mat-date-range-picker", exportAs: ["matDateRangePicker"] }] });
|
|
199
|
+
};
|
|
200
|
+
TimelineFilterComponent = TimelineFilterComponent_1 = __decorate([
|
|
201
|
+
UntilDestroy()
|
|
202
|
+
], TimelineFilterComponent);
|
|
203
|
+
export { TimelineFilterComponent };
|
|
204
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TimelineFilterComponent, decorators: [{
|
|
205
|
+
type: Component,
|
|
206
|
+
args: [{ selector: 'app-timeline-filter', providers: [
|
|
207
|
+
DatePipe,
|
|
208
|
+
{
|
|
209
|
+
provide: MatFormFieldControl,
|
|
210
|
+
useExisting: TimelineFilterComponent
|
|
211
|
+
}
|
|
212
|
+
], template: "<ng-container *ngIf=\"form\" [formGroup]=\"form\">\n <mat-form-field [appearance]=\"appearance\">\n <mat-label>{{labelText}}</mat-label>\n <mat-select [formControl]=\"timelineValue\">\n <mat-option *ngFor=\"let timeline of timelines\" [value]=\"timeline.value\">\n {{timeline.viewValue}}\n </mat-option>\n </mat-select>\n <button mat-button *ngIf=\"showClearButton && timelineValue.value\" matSuffix mat-icon-button\n (click)=\"timelineValue.setValue('')\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <ng-container *ngIf=\"showCustomDateFields\">\n <mat-form-field [appearance]=\"appearance\">\n <mat-label>From Date</mat-label>\n <input matInput formControlName=\"{{dateFrom}}\" [matDatepicker]=\"fromPicker\" (click)=\"fromPicker.open()\"\n placeholder=\"From Date\" readonly />\n <mat-datepicker-toggle matSuffix [for]=\"fromPicker\"></mat-datepicker-toggle>\n <mat-datepicker #fromPicker></mat-datepicker>\n <button mat-button *ngIf=\"getFieldValue(dateFrom)\" matSuffix mat-icon-button\n (click)=\"resetFieldValue(dateFrom)\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <mat-form-field [appearance]=\"appearance\">\n <mat-label>To Date</mat-label>\n <input matInput formControlName=\"{{dateTo}}\" [matDatepicker]=\"toPicker\" (click)=\"toPicker.open()\"\n placeholder=\"To Date\" readonly />\n <mat-datepicker-toggle matSuffix [for]=\"toPicker\"></mat-datepicker-toggle>\n <mat-datepicker #toPicker></mat-datepicker>\n <button mat-button *ngIf=\"getFieldValue(dateTo)\" matSuffix mat-icon-button\n (click)=\"resetFieldValue(dateTo)\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n </ng-container>\n</ng-container>\n<div *ngIf=\"!form\" [formGroup]=\"selectorForm\">\n <mat-form-field [appearance]=\"appearance\">\n <mat-label *ngIf=\"labelText\">{{ labelText }}</mat-label>\n <mat-select formControlName=\"select_value\" [required]=\"required\" (selectionChange)=\"_handleInput()\">\n <mat-option *ngFor=\"let timeline of timelines\" [value]=\"timeline?.value\">\n {{ timeline?.viewValue }}\n {{ selectedRange?.show_custom_field && timeline?.value == 1 ? getDateRangeString() : '' }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <mat-date-range-input hidden (change)=\"onCustomDateChange($event)\" [rangePicker]=\"picker\">\n <input matStartDate #customStartDate>\n <input matEndDate (dateChange)=\"dateRangeChange(customStartDate, customEndDate)\" #customEndDate>\n </mat-date-range-input>\n <mat-date-range-picker #picker [touchUi]=\"touchUi\"></mat-date-range-picker>\n</div>\n" }]
|
|
213
|
+
}], ctorParameters: function () { return [{ type: i1.UntypedFormBuilder }, { type: i1.NgControl, decorators: [{
|
|
214
|
+
type: Optional
|
|
215
|
+
}, {
|
|
216
|
+
type: Self
|
|
217
|
+
}] }, { type: i2.DatePipe }]; }, propDecorators: { defaultValue: [{
|
|
218
|
+
type: Input
|
|
219
|
+
}], required: [{
|
|
220
|
+
type: Input
|
|
221
|
+
}], disabled: [{
|
|
222
|
+
type: Input
|
|
223
|
+
}], value: [{
|
|
224
|
+
type: Input
|
|
225
|
+
}], picker: [{
|
|
226
|
+
type: ViewChild,
|
|
227
|
+
args: ['picker']
|
|
228
|
+
}], timelineValue: [{
|
|
229
|
+
type: Input
|
|
230
|
+
}], timelines: [{
|
|
231
|
+
type: Input
|
|
232
|
+
}], dateFrom: [{
|
|
233
|
+
type: Input
|
|
234
|
+
}], dateTo: [{
|
|
235
|
+
type: Input
|
|
236
|
+
}], appearance: [{
|
|
237
|
+
type: Input
|
|
238
|
+
}], showClearButton: [{
|
|
239
|
+
type: Input
|
|
240
|
+
}], form: [{
|
|
241
|
+
type: Input
|
|
242
|
+
}], labelText: [{
|
|
243
|
+
type: Input
|
|
244
|
+
}], selectedValue: [{
|
|
245
|
+
type: Input
|
|
246
|
+
}], touchUi: [{
|
|
247
|
+
type: Input
|
|
248
|
+
}], selectedValueChange: [{
|
|
249
|
+
type: Output
|
|
250
|
+
}], selectionChange: [{
|
|
251
|
+
type: Output
|
|
252
|
+
}] } });
|
|
253
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZWxpbmUtZmlsdGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC10ZWNobGlmeS1jb3JlL3NyYy9saWIvdGltZWxpbmUtZmlsdGVyL3RpbWVsaW5lLWZpbHRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdGVjaGxpZnktY29yZS9zcmMvbGliL3RpbWVsaW5lLWZpbHRlci90aW1lbGluZS1maWx0ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwwQkFBMEI7QUFDMUIsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxRQUFRLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUcsT0FBTyxFQUdMLGtCQUFrQixFQUdsQixVQUFVLEVBQ1gsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JFLE9BQU8sRUFBaUIsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7Ozs7Ozs7Ozs7O0FBZ0JyQyxJQUFNLHVCQUF1QiwrQkFBN0IsTUFBTSx1QkFBdUI7SUFRTDtJQUNuQjtJ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O3NCQUFqQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNJLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFDRyxlQUFlO3NCQUF4QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLyogdHNsaW50OmRpc2FibGU6cmFkaXggKi9cbmltcG9ydCB7IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3B0aW9uYWwsIE91dHB1dCwgU2VsZiwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBDb250cm9sVmFsdWVBY2Nlc3NvcixcbiAgVW50eXBlZEZvcm1CdWlsZGVyLFxuICBVbnR5cGVkRm9ybUNvbnRyb2wsXG4gIFVudHlwZWRGb3JtR3JvdXAsXG4gIE5nQ29udHJvbCxcbiAgVmFsaWRhdG9yc1xufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXRGb3JtRmllbGRDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5pbXBvcnQgeyBVbnRpbERlc3Ryb3ksIHVudGlsRGVzdHJveWVkIH0gZnJvbSAnQG5nbmVhdC91bnRpbC1kZXN0cm95JztcbmltcG9ydCB7IFRpbWVsaW5lVmFsdWUsIGNhbGN1bGF0ZVRpbWVsaW5lIH0gZnJvbSAnLi9jYWxjdWxhdGUtdGltZWxpbmUnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFRpbWVsaW5lIH0gZnJvbSAnLi90aW1lbGluZS5tb2RlbCc7XG5pbXBvcnQge01hdERhdGVwaWNrZXJ9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RhdGVwaWNrZXInO1xuXG5AVW50aWxEZXN0cm95KClcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC10aW1lbGluZS1maWx0ZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vdGltZWxpbmUtZmlsdGVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdGltZWxpbmUtZmlsdGVyLmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW1xuICAgIERhdGVQaXBlLFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IE1hdEZvcm1GaWVsZENvbnRyb2wsXG4gICAgICB1c2VFeGlzdGluZzogVGltZWxpbmVGaWx0ZXJDb21wb25lbnRcbiAgICB9XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgVGltZWxpbmVGaWx0ZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgQElucHV0KCkgc2V0IGRlZmF1bHRWYWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgdGhpcy50aW1lbGluZVZhbHVlLnNldFZhbHVlKHZhbHVlKTtcbiAgICB0aGlzLmNoYW5nZVRpbWVsaW5lKHZhbHVlKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGZvcm1CdWlsZGVyOiBVbnR5cGVkRm9ybUJ1aWxkZXIsXG4gICAgQE9wdGlvbmFsKCkgQFNlbGYoKSBwdWJsaWMgbmdDb250cm9sOiBOZ0NvbnRyb2wsXG4gICAgcHJpdmF0ZSBkYXRlUGlwZTogRGF0ZVBpcGVcbiAgKSB7XG4gICAgdGhpcy5zZWxlY3RvckZvcm0gPSBmb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICBzZWxlY3RfdmFsdWU6IFtudWxsXSxcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLm5nQ29udHJvbCAhPSBudWxsKSB7XG4gICAgICB0aGlzLm5nQ29udHJvbC52YWx1ZUFjY2Vzc29yID0gdGhpcztcbiAgICB9XG4gIH1cblxuICBASW5wdXQoKVxuICBnZXQgcmVxdWlyZWQoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLl9yZXF1aXJlZDsgfVxuICBzZXQgcmVxdWlyZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNlbGVjdG9yRm9ybT8uZ2V0KCdzZWxlY3RfdmFsdWUnKT8uc2V0VmFsaWRhdG9ycyhWYWxpZGF0b3JzLnJlcXVpcmVkKTtcbiAgICB0aGlzLl9yZXF1aXJlZCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xuICB9XG5cbiAgQElucHV0KClcbiAgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5fZGlzYWJsZWQ7IH1cbiAgc2V0IGRpc2FibGVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fZGlzYWJsZWQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgIHRoaXMuX2Rpc2FibGVkID8gdGhpcy5zZWxlY3RvckZvcm0uZGlzYWJsZSgpIDogdGhpcy5zZWxlY3RvckZvcm0uZW5hYmxlKCk7XG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xuICB9XG5cbiAgQElucHV0KClcbiAgZ2V0IHZhbHVlKCk6IGFueSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0b3JGb3JtLnZhbGlkKSB7XG4gICAgICByZXR1cm4gdGhpcy5zZWxlY3RvckZvcm0udmFsdWUuc2VsZWN0X3ZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgc2V0IHZhbHVlKGRhdGE6IGFueSkge1xuICAgIHRoaXMuc2VsZWN0b3JGb3JtLnBhdGNoVmFsdWUoeyBzZWxlY3RfdmFsdWU6IHBhcnNlSW50KGRhdGEpIHx8ICcnIH0sIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICB0aGlzLl9oYW5kbGVJbnB1dCgpO1xuICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcbiAgfVxuICBzdGF0aWMgbmV4dElkID0gMDtcblxuICBAVmlld0NoaWxkKCdwaWNrZXInKSBwaWNrZXI6IE1hdERhdGVwaWNrZXI8YW55PjtcbiAgQElucHV0KCkgdGltZWxpbmVWYWx1ZTogVW50eXBlZEZvcm1Db250cm9sID0gbmV3IFVudHlwZWRGb3JtQ29udHJvbCgnJyk7XG4gIEBJbnB1dCgpIHRpbWVsaW5lczogYW55W10gPSBbXG4gICAgeyB2YWx1ZTogVGltZWxpbmUuQ1VTVE9NLCB2aWV3VmFsdWU6ICdDdXN0b20nIH0sXG4gICAgeyB2YWx1ZTogVGltZWxpbmUuVE9EQVksIHZpZXdWYWx1ZTogJ1RvZGF5JyB9LFxuICAgIHsgdmFsdWU6IFRpbWVsaW5lLllFU1RFUkRBWSwgdmlld1ZhbHVlOiAnWWVzdGVyZGF5JyB9LFxuICAgIHsgdmFsdWU6IFRpbWVsaW5lLlRPTU1PUk9XLCB2aWV3VmFsdWU6ICdUb21vcnJvdycgfSxcbiAgICB7IHZhbHVlOiBUaW1lbGluZS5USElTX1dFRUssIHZpZXdWYWx1ZTogJ1RoaXMgV2VlaycgfSxcbiAgICB7IHZhbHVlOiBUaW1lbGluZS5MQVNUX1dFRUssIHZpZXdWYWx1ZTogJ0xhc3QgV2VlaycgfSxcbiAgICB7IHZhbHVlOiBUaW1lbGluZS5ORVhUX1dFRUssIHZpZXdWYWx1ZTogJ05leHQgV2VlaycgfSxcbiAgICB7IHZhbHVlOiBUaW1lbGluZS5USElTX01PTlRILCB2aWV3VmFsdWU6ICdUaGlzIE1vbnRoJyB9LFxuICAgIHsgdmFsdWU6IFRpbWVsaW5lLkxBU1RfTU9OVEgsIHZpZXdWYWx1ZTogJ0xhc3QgTW9udGgnIH0sXG4gICAgeyB2YWx1ZTogVGltZWxpbmUuTkVYVF9NT05USCwgdmlld1ZhbHVlOiAnTmV4dCBNb250aCcgfSxcbiAgICB7IHZhbHVlOiBUaW1lbGluZS5USElTX1FVQVJURVIsIHZpZXdWYWx1ZTogJ1RoaXMgUXVhcnRlcicgfSxcbiAgICB7IHZhbHVlOiBUaW1lbGluZS5MQVNUX1FVQVJURVIsIHZpZXdWYWx1ZTogJ0xhc3QgUXVhcnRlcicgfSxcbiAgICB7IHZhbHVlOiBUaW1lbGluZS5USElTX1lFQVIsIHZpZXdWYWx1ZTogJ1RoaXMgWWVhcicgfSxcbiAgICB7IHZhbHVlOiBUaW1lbGluZS5MQVNUX1lFQVIsIHZpZXdWYWx1ZTogJ0xhc3QgWWVhcicgfSxcbiAgICB7IHZhbHVlOiBUaW1lbGluZS5BTEwsIHZpZXdWYWx1ZTogJ0FsbCBkYXRlcycgfSxcbiAgXTtcbiAgQElucHV0KCkgZGF0ZUZyb20gPSAnZGF0ZV9mcm9tJztcbiAgQElucHV0KCkgZGF0ZVRvID0gJ2RhdGVfdG8nO1xuICBASW5wdXQoKSBhcHBlYXJhbmNlOiBhbnkgPSAnbGVnYWN5JztcbiAgQElucHV0KCkgc2hvd0NsZWFyQnV0dG9uID0gZmFsc2U7XG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCAgVGhlIGZvcm0gaW5wdXQgaXMgZGVwcmVjYXRlZC5cbiAgICovXG4gIEBJbnB1dCgpIGZvcm06IFVudHlwZWRGb3JtR3JvdXA7XG4gIEBJbnB1dCgpIGxhYmVsVGV4dCA9ICdTZWxlY3QgVGltZWxpbmUnO1xuICBASW5wdXQoKSBzZWxlY3RlZFZhbHVlOiBhbnk7XG4gIEBJbnB1dCgpIHRvdWNoVWkgPSB0cnVlO1xuICBAT3V0cHV0KCkgc2VsZWN0ZWRWYWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHNlbGVjdGlvbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBzZWxlY3RvckZvcm06IFVudHlwZWRGb3JtR3JvdXA7XG4gIHN0YXRlQ2hhbmdlcyA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIGNvbnRyb2xUeXBlID0gJ3RpbWVsaW5lLWZpbHRlcic7XG4gIGlkID0gYHRpbWVsaW5lLWZpbHRlci0ke1RpbWVsaW5lRmlsdGVyQ29tcG9uZW50Lm5leHRJZCsrfWA7XG4gIGRlc2NyaWJlZEJ5ID0gJyc7XG5cbiAgc2VsZWN0ZWRSYW5nZTogVGltZWxpbmVWYWx1ZTtcblxuICBzaG93Q3VzdG9tRGF0ZUZpZWxkcyA9IGZhbHNlO1xuICBwcml2YXRlIF9yZXF1aXJlZCA9IGZhbHNlO1xuICBwcml2YXRlIF9kaXNhYmxlZCA9IGZhbHNlO1xuICBvbkNoYW5nZTogYW55ID0gKCkgPT4geyB9O1xuICBvblRvdWNoZWQ6IGFueSA9ICgpID0+IHsgfTtcblxuICBnZXREYXRlUmFuZ2VTdHJpbmcoKSB7XG4gICAgbGV0IHN0ciA9ICcnO1xuICAgIGlmICh0aGlzLnNlbGVjdGVkUmFuZ2U/LnNob3dfY3VzdG9tX2ZpZWxkKSB7XG4gICAgICBpZiAodGhpcy5zZWxlY3RlZFJhbmdlPy5kYXRlX2Zyb20pIHtcbiAgICAgICAgc3RyICs9ICcgLSAnICsgdGhpcy5zZWxlY3RlZFJhbmdlPy5kYXRlX2Zyb207XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5zZWxlY3RlZFJhbmdlPy5kYXRlX3RvKSB7XG4gICAgICAgIHN0ciArPSAnIC0gJyArIHRoaXMuc2VsZWN0ZWRSYW5nZT8uZGF0ZV90bztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHN0cjtcbiAgfVxuXG4gIHJlc2V0RmllbGRWYWx1ZShmaWVsZDogc3RyaW5nKSB7XG4gICAgdGhpcy5mb3JtPy5nZXQoZmllbGQpPy5zZXRWYWx1ZSgnJyk7XG4gIH1cblxuXG4gIGdldEZpZWxkVmFsdWUoZmllbGQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzPy5mb3JtLmdldChmaWVsZCk/LnZhbHVlO1xuICB9XG5cbiAgc2V0RmllbGRWYWx1ZShmaWVsZDogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG4gICAgdGhpcy5mb3JtPy5nZXQoZmllbGQpPy5zZXRWYWx1ZSh2YWx1ZSk7XG4gIH1cblxuICBjaGFuZ2VUaW1lbGluZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgdmFsdWUgPSBwYXJzZUludCh2YWx1ZSk7XG4gICAgY29uc3QgdGltZWxpbmUgPSBjYWxjdWxhdGVUaW1lbGluZSh2YWx1ZSwgdGhpcy5kYXRlRnJvbSwgdGhpcy5kYXRlVG8pO1xuICAgIGlmICh0aW1lbGluZSkge1xuICAgICAgdGhpcy5zZWxlY3RlZFJhbmdlID0gdGltZWxpbmU7XG4gICAgICB0aGlzLnNldEZpZWxkVmFsdWUodGhpcy5kYXRlRnJvbSwgdGltZWxpbmUuZGF0ZV9mcm9tKTtcbiAgICAgIHRoaXMuc2V0RmllbGRWYWx1ZSh0aGlzLmRhdGVUbywgdGltZWxpbmUuZGF0ZV90byk7XG4gICAgICB0aGlzLnNob3dDdXN0b21EYXRlRmllbGRzID0gdGltZWxpbmUuc2hvd19jdXN0b21fZmllbGQ7XG4gICAgfVxuICB9XG5cbiAgX2hhbmRsZUlucHV0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnZhbHVlID09IDEpIHtcbiAgICAgIHRoaXMucGlja2VyPy5vcGVuKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHJhbmdlOiBUaW1lbGluZVZhbHVlID0gY2FsY3VsYXRlVGltZWxpbmUodGhpcy52YWx1ZSk7XG4gICAgdGhpcy5zZWxlY3RlZFJhbmdlID0gcmFuZ2U7XG4gICAgdGhpcy5vbkNoYW5nZSh0aGlzLnZhbHVlKTtcbiAgICB0aGlzLnNlbGVjdGVkVmFsdWVDaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdGVkVmFsdWUpO1xuICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQocmFuZ2UpO1xuICB9XG5cbiAgZGF0ZVJhbmdlQ2hhbmdlKGRhdGVSYW5nZVN0YXJ0OiBIVE1MSW5wdXRFbGVtZW50LCBkYXRlUmFuZ2VFbmQ6IEhUTUxJbnB1dEVsZW1lbnQpIHtcbiAgICBjb25zdCByYW5nZTogYW55ID0ge1xuICAgICAgZGF0ZV9mcm9tOiBkYXRlUmFuZ2VTdGFydC52YWx1ZSxcbiAgICAgIGRhdGVfdG86IGRhdGVSYW5nZUVuZC52YWx1ZSxcbiAgICAgIHNob3dfY3VzdG9tX2ZpZWxkOiB0cnVlXG4gICAgfTtcbiAgICB0aGlzLnNlbGVjdGVkUmFuZ2UgPSByYW5nZTtcbiAgICB0aGlzLm9uQ2hhbmdlKHRoaXMudmFsdWUpO1xuICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZUNoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWRWYWx1ZSk7XG4gICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdChyYW5nZSk7XG4gIH1cblxuICBvbkN1c3RvbURhdGVDaGFuZ2UoZXZlbnQ6IGFueSkge1xuICB9XG5cbiAgc2V0RGVzY3JpYmVkQnlJZHMoaWRzOiBzdHJpbmdbXSkge1xuICAgIHRoaXMuZGVzY3JpYmVkQnkgPSBpZHMuam9pbignICcpO1xuICB9XG5cbiAgb25Db250YWluZXJDbGljayhldmVudDogTW91c2VFdmVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICB9XG5cbiAgd3JpdGVWYWx1ZShkYXRhOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlID0gZGF0YTtcbiAgICBpZiAocGFyc2VJbnQodGhpcy52YWx1ZSkgPT09IFRpbWVsaW5lLkNVU1RPTSkge1xuICAgICAgdGhpcy5jaGFuZ2VUaW1lbGluZSh0aGlzLnZhbHVlKTtcbiAgICB9XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy50aW1lbGluZVZhbHVlLnZhbHVlQ2hhbmdlcy5cbiAgICAgIHBpcGUoXG4gICAgICAgIGRlYm91bmNlVGltZSgxMDApLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICB1bnRpbERlc3Ryb3llZCh0aGlzKVxuICAgICAgKS5zdWJzY3JpYmUodmFsdWUgPT4gdGhpcy5jaGFuZ2VUaW1lbGluZSh2YWx1ZSkpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMuY29tcGxldGUoKTtcbiAgfVxuXG59XG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwiZm9ybVwiIFtmb3JtR3JvdXBdPVwiZm9ybVwiPlxuICA8bWF0LWZvcm0tZmllbGQgW2FwcGVhcmFuY2VdPVwiYXBwZWFyYW5jZVwiPlxuICAgICAgPG1hdC1sYWJlbD57e2xhYmVsVGV4dH19PC9tYXQtbGFiZWw+XG4gICAgICA8bWF0LXNlbGVjdCBbZm9ybUNvbnRyb2xdPVwidGltZWxpbmVWYWx1ZVwiPlxuICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCB0aW1lbGluZSBvZiB0aW1lbGluZXNcIiBbdmFsdWVdPVwidGltZWxpbmUudmFsdWVcIj5cbiAgICAgICAgICAgICAge3t0aW1lbGluZS52aWV3VmFsdWV9fVxuICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiAqbmdJZj1cInNob3dDbGVhckJ1dHRvbiAmJiB0aW1lbGluZVZhbHVlLnZhbHVlXCIgbWF0U3VmZml4IG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAoY2xpY2spPVwidGltZWxpbmVWYWx1ZS5zZXRWYWx1ZSgnJylcIj5cbiAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxuICAgICAgPC9idXR0b24+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dDdXN0b21EYXRlRmllbGRzXCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgW2FwcGVhcmFuY2VdPVwiYXBwZWFyYW5jZVwiPlxuICAgICAgICAgIDxtYXQtbGFiZWw+RnJvbSBEYXRlPC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT1cInt7ZGF0ZUZyb219fVwiIFttYXREYXRlcGlja2VyXT1cImZyb21QaWNrZXJcIiAoY2xpY2spPVwiZnJvbVBpY2tlci5vcGVuKClcIlxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkZyb20gRGF0ZVwiIHJlYWRvbmx5IC8+XG4gICAgICAgICAgPG1hdC1kYXRlcGlja2VyLXRvZ2dsZSBtYXRTdWZmaXggW2Zvcl09XCJmcm9tUGlja2VyXCI+PC9tYXQtZGF0ZXBpY2tlci10b2dnbGU+XG4gICAgICAgICAgPG1hdC1kYXRlcGlja2VyICNmcm9tUGlja2VyPjwvbWF0LWRhdGVwaWNrZXI+XG4gICAgICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uICpuZ0lmPVwiZ2V0RmllbGRWYWx1ZShkYXRlRnJvbSlcIiBtYXRTdWZmaXggbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgIChjbGljayk9XCJyZXNldEZpZWxkVmFsdWUoZGF0ZUZyb20pXCI+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICA8bWF0LWZvcm0tZmllbGQgW2FwcGVhcmFuY2VdPVwiYXBwZWFyYW5jZVwiPlxuICAgICAgICAgIDxtYXQtbGFiZWw+VG8gRGF0ZTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJ7e2RhdGVUb319XCIgW21hdERhdGVwaWNrZXJdPVwidG9QaWNrZXJcIiAoY2xpY2spPVwidG9QaWNrZXIub3BlbigpXCJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJUbyBEYXRlXCIgcmVhZG9ubHkgLz5cbiAgICAgICAgICA8bWF0LWRhdGVwaWNrZXItdG9nZ2xlIG1hdFN1ZmZpeCBbZm9yXT1cInRvUGlja2VyXCI+PC9tYXQtZGF0ZXBpY2tlci10b2dnbGU+XG4gICAgICAgICAgPG1hdC1kYXRlcGlja2VyICN0b1BpY2tlcj48L21hdC1kYXRlcGlja2VyPlxuICAgICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiAqbmdJZj1cImdldEZpZWxkVmFsdWUoZGF0ZVRvKVwiIG1hdFN1ZmZpeCBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgKGNsaWNrKT1cInJlc2V0RmllbGRWYWx1ZShkYXRlVG8pXCI+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy1jb250YWluZXI+XG48ZGl2ICpuZ0lmPVwiIWZvcm1cIiBbZm9ybUdyb3VwXT1cInNlbGVjdG9yRm9ybVwiPlxuICA8bWF0LWZvcm0tZmllbGQgW2FwcGVhcmFuY2VdPVwiYXBwZWFyYW5jZVwiPlxuICAgIDxtYXQtbGFiZWwgKm5nSWY9XCJsYWJlbFRleHRcIj57eyBsYWJlbFRleHQgfX08L21hdC1sYWJlbD5cbiAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJzZWxlY3RfdmFsdWVcIiBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIiAoc2VsZWN0aW9uQ2hhbmdlKT1cIl9oYW5kbGVJbnB1dCgpXCI+XG4gICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgdGltZWxpbmUgb2YgdGltZWxpbmVzXCIgW3ZhbHVlXT1cInRpbWVsaW5lPy52YWx1ZVwiPlxuICAgICAgICB7eyB0aW1lbGluZT8udmlld1ZhbHVlIH19XG4gICAgICAgIHt7IHNlbGVjdGVkUmFuZ2U/LnNob3dfY3VzdG9tX2ZpZWxkICYmIHRpbWVsaW5lPy52YWx1ZSA9PSAxID8gZ2V0RGF0ZVJhbmdlU3RyaW5nKCkgOiAnJyB9fVxuICAgICAgPC9tYXQtb3B0aW9uPlxuICAgIDwvbWF0LXNlbGVjdD5cbiAgPC9tYXQtZm9ybS1maWVsZD5cbiAgPG1hdC1kYXRlLXJhbmdlLWlucHV0IGhpZGRlbiAoY2hhbmdlKT1cIm9uQ3VzdG9tRGF0ZUNoYW5nZSgkZXZlbnQpXCIgW3JhbmdlUGlja2VyXT1cInBpY2tlclwiPlxuICAgICAgPGlucHV0IG1hdFN0YXJ0RGF0ZSAjY3VzdG9tU3RhcnREYXRlPlxuICAgICAgPGlucHV0IG1hdEVuZERhdGUgKGRhdGVDaGFuZ2UpPVwiZGF0ZVJhbmdlQ2hhbmdlKGN1c3RvbVN0YXJ0RGF0ZSwgY3VzdG9tRW5kRGF0ZSlcIiAjY3VzdG9tRW5kRGF0ZT5cbiAgPC9tYXQtZGF0ZS1yYW5nZS1pbnB1dD5cbiAgPG1hdC1kYXRlLXJhbmdlLXBpY2tlciAjcGlja2VyIFt0b3VjaFVpXT1cInRvdWNoVWlcIj48L21hdC1kYXRlLXJhbmdlLXBpY2tlcj5cbjwvZGl2PlxuIl19
|
|
@@ -13,31 +13,31 @@ import { MatDatepickerModule } from "@angular/material/datepicker";
|
|
|
13
13
|
import { MatNativeDateModule } from "@angular/material/core";
|
|
14
14
|
import * as i0 from "@angular/core";
|
|
15
15
|
export class TimelineFilterModule {
|
|
16
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TimelineFilterModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
17
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: TimelineFilterModule, declarations: [TimelineFilterComponent], imports: [CommonModule,
|
|
18
|
+
TimelineFilterRoutingModule,
|
|
19
|
+
FlexLayoutModule,
|
|
20
|
+
ReactiveFormsModule,
|
|
21
|
+
MatFormFieldModule,
|
|
22
|
+
MatSelectModule,
|
|
23
|
+
MatButtonModule,
|
|
24
|
+
MatIconModule,
|
|
25
|
+
MatInputModule,
|
|
26
|
+
MatDatepickerModule,
|
|
27
|
+
MatNativeDateModule], exports: [TimelineFilterComponent] });
|
|
28
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TimelineFilterModule, imports: [CommonModule,
|
|
29
|
+
TimelineFilterRoutingModule,
|
|
30
|
+
FlexLayoutModule,
|
|
31
|
+
ReactiveFormsModule,
|
|
32
|
+
MatFormFieldModule,
|
|
33
|
+
MatSelectModule,
|
|
34
|
+
MatButtonModule,
|
|
35
|
+
MatIconModule,
|
|
36
|
+
MatInputModule,
|
|
37
|
+
MatDatepickerModule,
|
|
38
|
+
MatNativeDateModule] });
|
|
16
39
|
}
|
|
17
|
-
|
|
18
|
-
TimelineFilterModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.10", ngImport: i0, type: TimelineFilterModule, declarations: [TimelineFilterComponent], imports: [CommonModule,
|
|
19
|
-
TimelineFilterRoutingModule,
|
|
20
|
-
FlexLayoutModule,
|
|
21
|
-
ReactiveFormsModule,
|
|
22
|
-
MatFormFieldModule,
|
|
23
|
-
MatSelectModule,
|
|
24
|
-
MatButtonModule,
|
|
25
|
-
MatIconModule,
|
|
26
|
-
MatInputModule,
|
|
27
|
-
MatDatepickerModule,
|
|
28
|
-
MatNativeDateModule], exports: [TimelineFilterComponent] });
|
|
29
|
-
TimelineFilterModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TimelineFilterModule, imports: [CommonModule,
|
|
30
|
-
TimelineFilterRoutingModule,
|
|
31
|
-
FlexLayoutModule,
|
|
32
|
-
ReactiveFormsModule,
|
|
33
|
-
MatFormFieldModule,
|
|
34
|
-
MatSelectModule,
|
|
35
|
-
MatButtonModule,
|
|
36
|
-
MatIconModule,
|
|
37
|
-
MatInputModule,
|
|
38
|
-
MatDatepickerModule,
|
|
39
|
-
MatNativeDateModule] });
|
|
40
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TimelineFilterModule, decorators: [{
|
|
40
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TimelineFilterModule, decorators: [{
|
|
41
41
|
type: NgModule,
|
|
42
42
|
args: [{
|
|
43
43
|
declarations: [TimelineFilterComponent],
|
|
@@ -57,4 +57,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
57
57
|
exports: [TimelineFilterComponent]
|
|
58
58
|
}]
|
|
59
59
|
}] });
|
|
60
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
60
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZWxpbmUtZmlsdGVyLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC10ZWNobGlmeS1jb3JlL3NyYy9saWIvdGltZWxpbmUtZmlsdGVyL3RpbWVsaW5lLWZpbHRlci5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFL0MsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDL0UsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDdEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckQsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDaEUsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDckQsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBQ3ZELE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBQ2pFLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLHdCQUF3QixDQUFDOztBQW1CM0QsTUFBTSxPQUFPLG9CQUFvQjt3R0FBcEIsb0JBQW9CO3lHQUFwQixvQkFBb0IsaUJBaEJoQix1QkFBdUIsYUFFcEMsWUFBWTtZQUNaLDJCQUEyQjtZQUMzQixnQkFBZ0I7WUFDaEIsbUJBQW1CO1lBQ25CLGtCQUFrQjtZQUNsQixlQUFlO1lBQ2YsZUFBZTtZQUNmLGFBQWE7WUFDYixjQUFjO1lBQ2QsbUJBQW1CO1lBQ25CLG1CQUFtQixhQUVYLHVCQUF1Qjt5R0FFdEIsb0JBQW9CLFlBZDdCLFlBQVk7WUFDWiwyQkFBMkI7WUFDM0IsZ0JBQWdCO1lBQ2hCLG1CQUFtQjtZQUNuQixrQkFBa0I7WUFDbEIsZUFBZTtZQUNmLGVBQWU7WUFDZixhQUFhO1lBQ2IsY0FBYztZQUNkLG1CQUFtQjtZQUNuQixtQkFBbUI7OzRGQUlWLG9CQUFvQjtrQkFqQmhDLFFBQVE7bUJBQUM7b0JBQ1IsWUFBWSxFQUFFLENBQUMsdUJBQXVCLENBQUM7b0JBQ3ZDLE9BQU8sRUFBRTt3QkFDUCxZQUFZO3dCQUNaLDJCQUEyQjt3QkFDM0IsZ0JBQWdCO3dCQUNoQixtQkFBbUI7d0JBQ25CLGtCQUFrQjt3QkFDbEIsZUFBZTt3QkFDZixlQUFlO3dCQUNmLGFBQWE7d0JBQ2IsY0FBYzt3QkFDZCxtQkFBbUI7d0JBQ25CLG1CQUFtQjtxQkFDcEI7b0JBQ0QsT0FBTyxFQUFFLENBQUMsdUJBQXVCLENBQUM7aUJBQ25DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbmltcG9ydCB7IFRpbWVsaW5lRmlsdGVyUm91dGluZ01vZHVsZSB9IGZyb20gJy4vdGltZWxpbmUtZmlsdGVyLXJvdXRpbmcubW9kdWxlJztcbmltcG9ydCB7IFRpbWVsaW5lRmlsdGVyQ29tcG9uZW50IH0gZnJvbSAnLi90aW1lbGluZS1maWx0ZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEZsZXhMYXlvdXRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mbGV4LWxheW91dCc7XG5pbXBvcnQgeyBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtNYXRGb3JtRmllbGRNb2R1bGV9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkXCI7XG5pbXBvcnQge01hdFNlbGVjdE1vZHVsZX0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL3NlbGVjdFwiO1xuaW1wb3J0IHtNYXRCdXR0b25Nb2R1bGV9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9idXR0b25cIjtcbmltcG9ydCB7TWF0SWNvbk1vZHVsZX0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2ljb25cIjtcbmltcG9ydCB7TWF0SW5wdXRNb2R1bGV9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9pbnB1dFwiO1xuaW1wb3J0IHtNYXREYXRlcGlja2VyTW9kdWxlfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvZGF0ZXBpY2tlclwiO1xuaW1wb3J0IHtNYXROYXRpdmVEYXRlTW9kdWxlfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZVwiO1xuXG5ATmdNb2R1bGUoe1xuICBkZWNsYXJhdGlvbnM6IFtUaW1lbGluZUZpbHRlckNvbXBvbmVudF0sXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgVGltZWxpbmVGaWx0ZXJSb3V0aW5nTW9kdWxlLFxuICAgIEZsZXhMYXlvdXRNb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBNYXRGb3JtRmllbGRNb2R1bGUsXG4gICAgTWF0U2VsZWN0TW9kdWxlLFxuICAgIE1hdEJ1dHRvbk1vZHVsZSxcbiAgICBNYXRJY29uTW9kdWxlLFxuICAgIE1hdElucHV0TW9kdWxlLFxuICAgIE1hdERhdGVwaWNrZXJNb2R1bGUsXG4gICAgTWF0TmF0aXZlRGF0ZU1vZHVsZVxuICBdLFxuICBleHBvcnRzOiBbVGltZWxpbmVGaWx0ZXJDb21wb25lbnRdXG59KVxuZXhwb3J0IGNsYXNzIFRpbWVsaW5lRmlsdGVyTW9kdWxlIHsgfVxuIl19
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export class Timeline {
|
|
2
|
+
static CUSTOM = 1;
|
|
3
|
+
static TODAY = 2;
|
|
4
|
+
static YESTERDAY = 3;
|
|
5
|
+
static THIS_WEEK = 4;
|
|
6
|
+
static LAST_WEEK = 5;
|
|
7
|
+
static THIS_MONTH = 6;
|
|
8
|
+
static LAST_MONTH = 7;
|
|
9
|
+
static THIS_QUARTER = 8;
|
|
10
|
+
static LAST_QUARTER = 9;
|
|
11
|
+
static THIS_YEAR = 10;
|
|
12
|
+
static LAST_YEAR = 11;
|
|
13
|
+
static ALL = 12;
|
|
14
|
+
static TOMMOROW = 13;
|
|
15
|
+
static NEXT_WEEK = 14;
|
|
16
|
+
static NEXT_MONTH = 15;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZWxpbmUubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdGVjaGxpZnktY29yZS9zcmMvbGliL3RpbWVsaW5lLWZpbHRlci90aW1lbGluZS5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLE9BQU8sUUFBUTtJQUNWLE1BQU0sQ0FBQyxNQUFNLEdBQVcsQ0FBQyxDQUFDO0lBQzFCLE1BQU0sQ0FBQyxLQUFLLEdBQVcsQ0FBQyxDQUFDO0lBQ3pCLE1BQU0sQ0FBQyxTQUFTLEdBQVcsQ0FBQyxDQUFDO0lBQzdCLE1BQU0sQ0FBQyxTQUFTLEdBQVcsQ0FBQyxDQUFDO0lBQzdCLE1BQU0sQ0FBQyxTQUFTLEdBQVcsQ0FBQyxDQUFDO0lBQzdCLE1BQU0sQ0FBQyxVQUFVLEdBQVcsQ0FBQyxDQUFDO0lBQzlCLE1BQU0sQ0FBQyxVQUFVLEdBQVcsQ0FBQyxDQUFDO0lBQzlCLE1BQU0sQ0FBQyxZQUFZLEdBQVcsQ0FBQyxDQUFDO0lBQ2hDLE1BQU0sQ0FBQyxZQUFZLEdBQVcsQ0FBQyxDQUFDO0lBQ2hDLE1BQU0sQ0FBQyxTQUFTLEdBQVcsRUFBRSxDQUFDO0lBQzlCLE1BQU0sQ0FBQyxTQUFTLEdBQVcsRUFBRSxDQUFDO0lBQzlCLE1BQU0sQ0FBQyxHQUFHLEdBQVcsRUFBRSxDQUFDO0lBQ3hCLE1BQU0sQ0FBQyxRQUFRLEdBQVcsRUFBRSxDQUFDO0lBQzdCLE1BQU0sQ0FBQyxTQUFTLEdBQVcsRUFBRSxDQUFDO0lBQzlCLE1BQU0sQ0FBQyxVQUFVLEdBQVcsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNsYXNzIFRpbWVsaW5lIHtcbiAgICBwdWJsaWMgc3RhdGljIENVU1RPTTogbnVtYmVyID0gMTtcbiAgICBwdWJsaWMgc3RhdGljIFRPREFZOiBudW1iZXIgPSAyO1xuICAgIHB1YmxpYyBzdGF0aWMgWUVTVEVSREFZOiBudW1iZXIgPSAzO1xuICAgIHB1YmxpYyBzdGF0aWMgVEhJU19XRUVLOiBudW1iZXIgPSA0O1xuICAgIHB1YmxpYyBzdGF0aWMgTEFTVF9XRUVLOiBudW1iZXIgPSA1O1xuICAgIHB1YmxpYyBzdGF0aWMgVEhJU19NT05USDogbnVtYmVyID0gNjtcbiAgICBwdWJsaWMgc3RhdGljIExBU1RfTU9OVEg6IG51bWJlciA9IDc7XG4gICAgcHVibGljIHN0YXRpYyBUSElTX1FVQVJURVI6IG51bWJlciA9IDg7XG4gICAgcHVibGljIHN0YXRpYyBMQVNUX1FVQVJURVI6IG51bWJlciA9IDk7XG4gICAgcHVibGljIHN0YXRpYyBUSElTX1lFQVI6IG51bWJlciA9IDEwO1xuICAgIHB1YmxpYyBzdGF0aWMgTEFTVF9ZRUFSOiBudW1iZXIgPSAxMTtcbiAgICBwdWJsaWMgc3RhdGljIEFMTDogbnVtYmVyID0gMTI7XG4gICAgcHVibGljIHN0YXRpYyBUT01NT1JPVzogbnVtYmVyID0gMTM7XG4gICAgcHVibGljIHN0YXRpYyBORVhUX1dFRUs6IG51bWJlciA9IDE0O1xuICAgIHB1YmxpYyBzdGF0aWMgTkVYVF9NT05USDogbnVtYmVyID0gMTU7XG59XG4iXX0=
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { Subject, of, map, BehaviorSubject } from 'rxjs';
|
|
3
|
+
import { User } from './user.model';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "../core";
|
|
6
|
+
/**
|
|
7
|
+
* Service that manages information about the current user
|
|
8
|
+
*
|
|
9
|
+
* @author Joshua Kissoon
|
|
10
|
+
* @since 20170817
|
|
11
|
+
*/
|
|
12
|
+
export class CurrentUserService {
|
|
13
|
+
http;
|
|
14
|
+
storage;
|
|
15
|
+
user;
|
|
16
|
+
data;
|
|
17
|
+
/**Deprecated stop using for new projects */
|
|
18
|
+
userSub = new Subject();
|
|
19
|
+
// Track the auth status of the user.
|
|
20
|
+
isLoggedIn = new BehaviorSubject(false);
|
|
21
|
+
constructor(http, storage) {
|
|
22
|
+
this.http = http;
|
|
23
|
+
this.storage = storage;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Get the login status of the user.
|
|
27
|
+
*/
|
|
28
|
+
getAuthStatus() {
|
|
29
|
+
return this.isLoggedIn.asObservable();
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Update the login status of the user.
|
|
33
|
+
*
|
|
34
|
+
* @param val The next value of the isLoggedIn.
|
|
35
|
+
*/
|
|
36
|
+
updateAuthStatus(val) {
|
|
37
|
+
this.isLoggedIn.next(val);
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Returns an user if present, otherwise a empty user
|
|
41
|
+
* @returns {User} user
|
|
42
|
+
*/
|
|
43
|
+
getUser() {
|
|
44
|
+
if (this.user) {
|
|
45
|
+
return this.user;
|
|
46
|
+
}
|
|
47
|
+
this.user = new User();
|
|
48
|
+
const userFromStorage = JSON.parse(this.storage.getItem('currentUser'));
|
|
49
|
+
if (userFromStorage) {
|
|
50
|
+
this.user.loadFromMap(userFromStorage);
|
|
51
|
+
}
|
|
52
|
+
return this.user;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* @deprecated Don't use for new projects, use getUserObservable() instead
|
|
56
|
+
* @returns {Observable<User>} Observable of user once changed.
|
|
57
|
+
*/
|
|
58
|
+
watch() {
|
|
59
|
+
return this.userSub.asObservable();
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Loads the current logged in user
|
|
63
|
+
* @deprecated use getUserObservable() instead
|
|
64
|
+
* @param reload whether to fetch new data from server
|
|
65
|
+
* @returns {Promise<User>} promise of user
|
|
66
|
+
*/
|
|
67
|
+
getCurrentUser(reload = false) {
|
|
68
|
+
let promise;
|
|
69
|
+
if (undefined !== this.data && !reload) {
|
|
70
|
+
promise = new Promise((resolve, reject) => {
|
|
71
|
+
resolve(this.data);
|
|
72
|
+
});
|
|
73
|
+
return promise;
|
|
74
|
+
}
|
|
75
|
+
promise = this.http.get('api/user/current').toPromise();
|
|
76
|
+
promise.then(res => {
|
|
77
|
+
this.user = new User();
|
|
78
|
+
this.data = res;
|
|
79
|
+
this.user.loadFromMap(res.user);
|
|
80
|
+
this.storage.setItem('currentUser', JSON.stringify(res.user));
|
|
81
|
+
this.userSub.next(this.user);
|
|
82
|
+
});
|
|
83
|
+
return promise;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Used to update the current user data
|
|
87
|
+
* @param {any} userData data that needs to be updated to current user
|
|
88
|
+
*/
|
|
89
|
+
updateCurrentUser(userData) {
|
|
90
|
+
this.user = new User();
|
|
91
|
+
this.data = userData;
|
|
92
|
+
this.user.loadFromMap(userData);
|
|
93
|
+
this.storage.setItem('currentUser', JSON.stringify(userData));
|
|
94
|
+
this.userSub.next(this.user);
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* @param {number} id Id of role
|
|
98
|
+
* @returns {boolean} true if role is present
|
|
99
|
+
*/
|
|
100
|
+
hasRole(id) {
|
|
101
|
+
if (this.user.roles == null) {
|
|
102
|
+
return false;
|
|
103
|
+
}
|
|
104
|
+
return (this.user.roles || []).some(role => role.id == id);
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* @param {number} id Id of permission
|
|
108
|
+
* @returns {boolean} true if permission is present
|
|
109
|
+
*/
|
|
110
|
+
hasPermission(slug) {
|
|
111
|
+
if (!this.user) {
|
|
112
|
+
return false;
|
|
113
|
+
}
|
|
114
|
+
if (this.user.user_type_id == 1 || this.user.user_type_id == 2) {
|
|
115
|
+
return true;
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
if (this.user.permissions == null) {
|
|
119
|
+
return false;
|
|
120
|
+
}
|
|
121
|
+
return (this.user.permissions || []).some(permission => permission.slug == slug);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Returns the observable of user
|
|
126
|
+
* @param {boolean} reload - whether to reload the entire user again
|
|
127
|
+
* @returns {Observable<User>} Observable of user.
|
|
128
|
+
*/
|
|
129
|
+
getUserObservable(reload = false) {
|
|
130
|
+
if (this.user && !reload) {
|
|
131
|
+
return of(this.user);
|
|
132
|
+
}
|
|
133
|
+
return this.http.get('api/user/current')
|
|
134
|
+
.pipe(map((res) => {
|
|
135
|
+
this.user = new User();
|
|
136
|
+
this.data = res;
|
|
137
|
+
this.user.loadFromMap(res.user);
|
|
138
|
+
this.storage.setItem('currentUser', JSON.stringify(res.user));
|
|
139
|
+
return this.user;
|
|
140
|
+
}));
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* @returns {any} Returns the raw user data
|
|
144
|
+
*/
|
|
145
|
+
getUserData() {
|
|
146
|
+
return this.data;
|
|
147
|
+
}
|
|
148
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CurrentUserService, deps: [{ token: i1.HttpService }, { token: i1.StorageService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
149
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CurrentUserService, providedIn: 'root' });
|
|
150
|
+
}
|
|
151
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CurrentUserService, decorators: [{
|
|
152
|
+
type: Injectable,
|
|
153
|
+
args: [{ providedIn: 'root' }]
|
|
154
|
+
}], ctorParameters: function () { return [{ type: i1.HttpService }, { type: i1.StorageService }]; } });
|
|
155
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VycmVudC11c2VyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdGVjaGxpZnktY29yZS9zcmMvbGliL3VzZXIvY3VycmVudC11c2VyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUMsT0FBTyxFQUFjLEVBQUUsRUFBRSxHQUFHLEVBQUUsZUFBZSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBR25FLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxjQUFjLENBQUM7OztBQUVwQzs7Ozs7R0FLRztBQUVILE1BQU0sT0FBTyxrQkFBa0I7SUFTUDtJQUEyQjtJQVJ2QyxJQUFJLENBQU87SUFDWCxJQUFJLENBQU07SUFFbEIsNENBQTRDO0lBQ3BDLE9BQU8sR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO0lBQ3RDLHFDQUFxQztJQUM3QixVQUFVLEdBQTZCLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO0lBRW5GLFlBQW9CLElBQWlCLEVBQVUsT0FBdUI7UUFBbEQsU0FBSSxHQUFKLElBQUksQ0FBYTtRQUFVLFlBQU8sR0FBUCxPQUFPLENBQWdCO0lBQUksQ0FBQztJQUU3RTs7T0FFRztJQUNILGFBQWE7UUFDVCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDMUMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxnQkFBZ0IsQ0FBQyxHQUFZO1FBQzNCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFQzs7O09BR0c7SUFDSCxPQUFPO1FBQ0gsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ1gsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO1NBQ3BCO1FBQ0QsSUFBSSxDQUFDLElBQUksR0FBRyxJ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a0JBQWtCO2tCQUQ5QixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7U3ViamVjdCwgT2JzZXJ2YWJsZSwgb2YsIG1hcCwgQmVoYXZpb3JTdWJqZWN0fSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEh0dHBTZXJ2aWNlLCBTdG9yYWdlU2VydmljZSB9IGZyb20gJy4uL2NvcmUnO1xuXG5pbXBvcnQgeyBVc2VyIH0gZnJvbSAnLi91c2VyLm1vZGVsJztcblxuLyoqXG4gKiBTZXJ2aWNlIHRoYXQgbWFuYWdlcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY3VycmVudCB1c2VyXG4gKlxuICogQGF1dGhvciBKb3NodWEgS2lzc29vblxuICogQHNpbmNlIDIwMTcwODE3XG4gKi9cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgQ3VycmVudFVzZXJTZXJ2aWNlIHtcbiAgICBwcml2YXRlIHVzZXI6IFVzZXI7XG4gICAgcHJpdmF0ZSBkYXRhOiBhbnk7XG5cbiAgICAvKipEZXByZWNhdGVkIHN0b3AgdXNpbmcgZm9yIG5ldyBwcm9qZWN0cyAqL1xuICAgIHByaXZhdGUgdXNlclN1YiA9IG5ldyBTdWJqZWN0PFVzZXI+KCk7XG4gICAgLy8gVHJhY2sgdGhlIGF1dGggc3RhdHVzIG9mIHRoZSB1c2VyLlxuICAgIHByaXZhdGUgaXNMb2dnZWRJbjogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHA6IEh0dHBTZXJ2aWNlLCBwcml2YXRlIHN0b3JhZ2U6IFN0b3JhZ2VTZXJ2aWNlKSB7IH1cblxuICAvKipcbiAgICogR2V0IHRoZSBsb2dpbiBzdGF0dXMgb2YgdGhlIHVzZXIuXG4gICAqL1xuICBnZXRBdXRoU3RhdHVzKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgICAgcmV0dXJuIHRoaXMuaXNMb2dnZWRJbi5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgdGhlIGxvZ2luIHN0YXR1cyBvZiB0aGUgdXNlci5cbiAgICpcbiAgICogQHBhcmFtIHZhbCBUaGUgbmV4dCB2YWx1ZSBvZiB0aGUgaXNMb2dnZWRJbi5cbiAgICovXG4gIHVwZGF0ZUF1dGhTdGF0dXModmFsOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5pc0xvZ2dlZEluLm5leHQodmFsKTtcbiAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhbiB1c2VyIGlmIHByZXNlbnQsIG90aGVyd2lzZSBhIGVtcHR5IHVzZXJcbiAgICAgKiBAcmV0dXJucyB7VXNlcn0gdXNlclxuICAgICAqL1xuICAgIGdldFVzZXIoKTogYW55IHtcbiAgICAgICAgaWYgKHRoaXMudXNlcikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudXNlcjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVzZXIgPSBuZXcgVXNlcigpO1xuICAgICAgICBjb25zdCB1c2VyRnJvbVN0b3JhZ2UgPSBKU09OLnBhcnNlKHRoaXMuc3RvcmFnZS5nZXRJdGVtKCdjdXJyZW50VXNlcicpKTtcbiAgICAgICAgaWYgKHVzZXJGcm9tU3RvcmFnZSkge1xuICAgICAgICAgICAgdGhpcy51c2VyLmxvYWRGcm9tTWFwKHVzZXJGcm9tU3RvcmFnZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMudXNlcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCBEb24ndCB1c2UgZm9yIG5ldyBwcm9qZWN0cywgdXNlIGdldFVzZXJPYnNlcnZhYmxlKCkgaW5zdGVhZFxuICAgICAqIEByZXR1cm5zIHtPYnNlcnZhYmxlPFVzZXI+fSBPYnNlcnZhYmxlIG9mIHVzZXIgb25jZSBjaGFuZ2VkLlxuICAgICAqL1xuICAgIHdhdGNoKCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnVzZXJTdWIuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTG9hZHMgdGhlIGN1cnJlbnQgbG9nZ2VkIGluIHVzZXJcbiAgICAgKiBAZGVwcmVjYXRlZCB1c2UgZ2V0VXNlck9ic2VydmFibGUoKSBpbnN0ZWFkXG4gICAgICogQHBhcmFtIHJlbG9hZCB3aGV0aGVyIHRvIGZldGNoIG5ldyBkYXRhIGZyb20gc2VydmVyXG4gICAgICogQHJldHVybnMge1Byb21pc2U8VXNlcj59IHByb21pc2Ugb2YgdXNlclxuICAgICAqL1xuICAgIGdldEN1cnJlbnRVc2VyKHJlbG9hZCA9IGZhbHNlKTogYW55IHtcbiAgICAgICAgbGV0IHByb21pc2U7XG4gICAgICAgIGlmICh1bmRlZmluZWQgIT09IHRoaXMuZGF0YSAmJiAhcmVsb2FkKSB7XG4gICAgICAgICAgICBwcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICAgIHJlc29sdmUodGhpcy5kYXRhKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICAgICAgfVxuICAgICAgICBwcm9taXNlID0gdGhpcy5odHRwLmdldCgnYXBpL3VzZXIvY3VycmVudCcpLnRvUHJvbWlzZSgpO1xuXG4gICAgICAgIHByb21pc2UudGhlbihcbiAgICAgICAgICAgIHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy51c2VyID0gbmV3IFVzZXIoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSByZXM7XG4gICAgICAgICAgICAgICAgdGhpcy51c2VyLmxvYWRGcm9tTWFwKHJlcy51c2VyKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0b3JhZ2Uuc2V0SXRlbSgnY3VycmVudFVzZXInLCBKU09OLnN0cmluZ2lmeShyZXMudXNlcikpO1xuICAgICAgICAgICAgICAgIHRoaXMudXNlclN1Yi5uZXh0KHRoaXMudXNlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXNlZCB0byB1cGRhdGUgdGhlIGN1cnJlbnQgdXNlciBkYXRhXG4gICAgICogQHBhcmFtIHthbnl9IHVzZXJEYXRhIGRhdGEgdGhhdCBuZWVkcyB0byBiZSB1cGRhdGVkIHRvIGN1cnJlbnQgdXNlclxuICAgICAqL1xuICAgIHVwZGF0ZUN1cnJlbnRVc2VyKHVzZXJEYXRhOiBhbnkpOiBhbnkge1xuICAgICAgICB0aGlzLnVzZXIgPSBuZXcgVXNlcigpO1xuICAgICAgICB0aGlzLmRhdGEgPSB1c2VyRGF0YTtcbiAgICAgICAgdGhpcy51c2VyLmxvYWRGcm9tTWFwKHVzZXJEYXRhKTtcbiAgICAgICAgdGhpcy5zdG9yYWdlLnNldEl0ZW0oJ2N1cnJlbnRVc2VyJywgSlNPTi5zdHJpbmdpZnkodXNlckRhdGEpKTtcbiAgICAgICAgdGhpcy51c2VyU3ViLm5leHQodGhpcy51c2VyKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gaWQgSWQgb2Ygcm9sZVxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIHJvbGUgaXMgcHJlc2VudFxuICAgICAqL1xuICAgIGhhc1JvbGUoaWQ6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy51c2VyLnJvbGVzID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKHRoaXMudXNlci5yb2xlcyB8fCBbXSkuc29tZShyb2xlID0+IHJvbGUuaWQgPT0gaWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICogQHBhcmFtIHtudW1iZXJ9IGlkIElkIG9mIHBlcm1pc3Npb25cbiAgICAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIHBlcm1pc3Npb24gaXMgcHJlc2VudFxuICAgICovXG4gICAgaGFzUGVybWlzc2lvbihzbHVnOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCF0aGlzLnVzZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy51c2VyLnVzZXJfdHlwZV9pZCA9PSAxIHx8IHRoaXMudXNlci51c2VyX3R5cGVfaWQgPT0gMikge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy51c2VyLnBlcm1pc3Npb25zID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gKHRoaXMudXNlci5wZXJtaXNzaW9ucyB8fCBbXSkuc29tZShwZXJtaXNzaW9uID0+IHBlcm1pc3Npb24uc2x1ZyA9PSBzbHVnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIG9ic2VydmFibGUgb2YgdXNlclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gcmVsb2FkIC0gd2hldGhlciB0byByZWxvYWQgdGhlIGVudGlyZSB1c2VyIGFnYWluXG4gICAgICogQHJldHVybnMge09ic2VydmFibGU8VXNlcj59IE9ic2VydmFibGUgb2YgdXNlci5cbiAgICAgKi9cbiAgICBnZXRVc2VyT2JzZXJ2YWJsZShyZWxvYWQ6IGJvb2xlYW4gPSBmYWxzZSk6IE9ic2VydmFibGU8VXNlcj4ge1xuICAgICAgICBpZiAodGhpcy51c2VyICYmICFyZWxvYWQpIHtcbiAgICAgICAgICAgIHJldHVybiBvZih0aGlzLnVzZXIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KCdhcGkvdXNlci9jdXJyZW50JylcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51c2VyID0gbmV3IFVzZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhID0gcmVzO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVzZXIubG9hZEZyb21NYXAocmVzLnVzZXIpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0b3JhZ2Uuc2V0SXRlbSgnY3VycmVudFVzZXInLCBKU09OLnN0cmluZ2lmeShyZXMudXNlcikpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy51c2VyO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEByZXR1cm5zIHthbnl9IFJldHVybnMgdGhlIHJhdyB1c2VyIGRhdGFcbiAgICAgKi9cbiAgICBnZXRVc2VyRGF0YSgpOiBhbnkge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhO1xuICAgIH1cbn1cbiJdfQ==
|