@seniorsistemas/platform-components 5.3.2 → 5.3.3-develop-73308358
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/modules/advanced-filter/advanced-filter.module.mjs +75 -0
- package/esm2022/modules/advanced-filter/components/advanced-filter/advanced-filter.component.mjs +128 -0
- package/esm2022/modules/advanced-filter/components/form-filter/form-filter.component.mjs +651 -0
- package/esm2022/modules/advanced-filter/index.mjs +6 -0
- package/esm2022/modules/advanced-filter/locale/fallback.mjs +73 -0
- package/esm2022/modules/advanced-filter/models/context.mjs +2 -0
- package/esm2022/modules/advanced-filter/models/depends-on.mjs +2 -0
- package/esm2022/modules/advanced-filter/models/enum-item.mjs +2 -0
- package/esm2022/modules/advanced-filter/models/filter-type.mjs +14 -0
- package/esm2022/modules/advanced-filter/models/filter-value.mjs +2 -0
- package/esm2022/modules/advanced-filter/models/filter.mjs +41 -0
- package/esm2022/modules/advanced-filter/models/form-filter.mjs +28 -0
- package/esm2022/modules/advanced-filter/models/index.mjs +11 -0
- package/esm2022/modules/advanced-filter/models/scope.mjs +6 -0
- package/esm2022/modules/advanced-filter/models/search.mjs +2 -0
- package/esm2022/modules/advanced-filter/models/tab-view.mjs +18 -0
- package/esm2022/modules/advanced-filter/models/ticked-filter.mjs +2 -0
- package/esm2022/modules/advanced-filter/pipes/map-values.pipe.mjs +14 -0
- package/esm2022/modules/advanced-filter/pipes/translate.pipe.mjs +19 -0
- package/esm2022/modules/advanced-filter/services/advanced-filter.service.mjs +146 -0
- package/esm2022/modules/advanced-filter/services/calendar-options.service.mjs +77 -0
- package/esm2022/modules/advanced-filter/services/constants.mjs +6 -0
- package/esm2022/modules/advanced-filter/shared/constants.mjs +3 -0
- package/esm2022/modules/advanced-filter/utils/comparator.mjs +53 -0
- package/esm2022/modules/advanced-filter/utils/filter-id/index.mjs +8 -0
- package/esm2022/modules/advanced-filter/utils/filter-value/index.mjs +26 -0
- package/esm2022/modules/advanced-filter/utils/filterOperators.mjs +9 -0
- package/esm2022/modules/advanced-filter/utils/form-field/index.mjs +52 -0
- package/esm2022/modules/advanced-filter/utils/index.mjs +57 -0
- package/esm2022/modules/advanced-filter/utils/json-path.mjs +13 -0
- package/esm2022/modules/cyclic-json-interceptor/cyclic-json-interceptor.module.mjs +14 -0
- package/esm2022/modules/cyclic-json-interceptor/cyclic-json-interceptor.service.mjs +29 -0
- package/esm2022/modules/cyclic-json-interceptor/index.mjs +2 -0
- package/esm2022/modules/feature-toggle/constants/endpoint.constant.mjs +26 -0
- package/esm2022/modules/feature-toggle/feature-toggle.module.mjs +15 -0
- package/esm2022/modules/feature-toggle/feature-toggle.service.mjs +42 -0
- package/esm2022/modules/feature-toggle/index.mjs +4 -0
- package/esm2022/modules/feature-toggle/models/feature.mjs +2 -0
- package/esm2022/modules/http-interceptor/http-interceptor.module.mjs +16 -0
- package/esm2022/modules/http-interceptor/http-interceptor.service.mjs +42 -0
- package/esm2022/modules/http-interceptor/index.mjs +4 -0
- package/esm2022/modules/http-interceptor/rest-url.service.mjs +15 -0
- package/esm2022/modules/http-interceptor/x-services-url.service.mjs +18 -0
- package/esm2022/modules/permissions/permissions.config.mjs +17 -0
- package/esm2022/modules/permissions/permissions.module.mjs +43 -0
- package/esm2022/modules/permissions/permissions.service.mjs +169 -0
- package/esm2022/modules/spotlight/component/spotlight.component.mjs +274 -0
- package/esm2022/modules/spotlight/index.mjs +3 -0
- package/esm2022/modules/spotlight/locale/fallback.mjs +5 -0
- package/esm2022/modules/spotlight/models/display-type.enum.mjs +6 -0
- package/esm2022/modules/spotlight/models/index.mjs +10 -0
- package/esm2022/modules/spotlight/models/spotlight-control-list.interface.mjs +2 -0
- package/esm2022/modules/spotlight/models/spotlight-control.interface.mjs +11 -0
- package/esm2022/modules/spotlight/models/spotlight-notification.interface.mjs +2 -0
- package/esm2022/modules/spotlight/models/spotlight-screen-list.interface.mjs +2 -0
- package/esm2022/modules/spotlight/models/spotlight-screen.interface.mjs +2 -0
- package/esm2022/modules/spotlight/models/spotlight-status.enum.mjs +8 -0
- package/esm2022/modules/spotlight/models/spotlight-user.interface.mjs +2 -0
- package/esm2022/modules/spotlight/models/spotlight-users-list.interface.mjs +2 -0
- package/esm2022/modules/spotlight/models/spotlight.interface.mjs +2 -0
- package/esm2022/modules/spotlight/models/user-action.enum.mjs +7 -0
- package/esm2022/modules/spotlight/pipes/translate.pipe.mjs +19 -0
- package/esm2022/modules/spotlight/service/spotlight.service.mjs +34 -0
- package/esm2022/modules/spotlight/spotlight.module.mjs +53 -0
- package/esm2022/modules/translations/translations.module.mjs +192 -0
- package/esm2022/public-api.mjs +10 -0
- package/esm2022/seniorsistemas-platform-components.mjs +5 -0
- package/fesm2022/seniorsistemas-platform-components.mjs +2432 -0
- package/fesm2022/seniorsistemas-platform-components.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/modules/advanced-filter/advanced-filter.module.d.ts +19 -0
- package/modules/advanced-filter/components/advanced-filter/advanced-filter.component.d.ts +4 -3
- package/modules/advanced-filter/components/form-filter/form-filter.component.d.ts +15 -12
- package/modules/advanced-filter/index.d.ts +1 -0
- package/modules/advanced-filter/models/tab-view.d.ts +1 -1
- package/modules/advanced-filter/pipes/map-values.pipe.d.ts +3 -0
- package/modules/advanced-filter/pipes/translate.pipe.d.ts +4 -3
- package/modules/advanced-filter/services/advanced-filter.service.d.ts +7 -3
- package/modules/advanced-filter/services/calendar-options.service.d.ts +4 -3
- package/modules/advanced-filter/services/constants.d.ts +4 -4
- package/modules/advanced-filter/utils/comparator.d.ts +1 -1
- package/modules/advanced-filter/utils/form-field/index.d.ts +1 -1
- package/modules/advanced-filter/utils/json-path.d.ts +1 -1
- package/modules/cyclic-json-interceptor/cyclic-json-interceptor.module.d.ts +4 -0
- package/modules/cyclic-json-interceptor/cyclic-json-interceptor.service.d.ts +3 -0
- package/modules/feature-toggle/feature-toggle.module.d.ts +5 -0
- package/modules/feature-toggle/feature-toggle.service.d.ts +4 -3
- package/modules/http-interceptor/http-interceptor.module.d.ts +4 -0
- package/modules/http-interceptor/http-interceptor.service.d.ts +3 -3
- package/modules/http-interceptor/rest-url.service.d.ts +3 -0
- package/modules/http-interceptor/x-services-url.service.d.ts +3 -0
- package/modules/permissions/permissions.config.d.ts +7 -1
- package/modules/permissions/permissions.module.d.ts +4 -0
- package/modules/permissions/permissions.service.d.ts +6 -12
- package/modules/spotlight/component/spotlight.component.d.ts +6 -7
- package/modules/spotlight/pipes/translate.pipe.d.ts +4 -3
- package/modules/spotlight/service/spotlight.service.d.ts +4 -3
- package/modules/spotlight/spotlight.module.d.ts +11 -0
- package/modules/translations/translations.module.d.ts +9 -5
- package/package.json +20 -54
- package/public-api.d.ts +1 -0
- package/bundles/seniorsistemas-platform-components.umd.js +0 -2745
- package/bundles/seniorsistemas-platform-components.umd.js.map +0 -1
- package/bundles/seniorsistemas-platform-components.umd.min.js +0 -17
- package/bundles/seniorsistemas-platform-components.umd.min.js.map +0 -1
- package/esm2015/modules/advanced-filter/advanced-filter.module.js +0 -47
- package/esm2015/modules/advanced-filter/components/advanced-filter/advanced-filter.component.js +0 -136
- package/esm2015/modules/advanced-filter/components/form-filter/form-filter.component.js +0 -578
- package/esm2015/modules/advanced-filter/index.js +0 -5
- package/esm2015/modules/advanced-filter/locale/fallback.js +0 -73
- package/esm2015/modules/advanced-filter/models/context.js +0 -1
- package/esm2015/modules/advanced-filter/models/depends-on.js +0 -1
- package/esm2015/modules/advanced-filter/models/enum-item.js +0 -1
- package/esm2015/modules/advanced-filter/models/filter-type.js +0 -14
- package/esm2015/modules/advanced-filter/models/filter-value.js +0 -1
- package/esm2015/modules/advanced-filter/models/filter.js +0 -23
- package/esm2015/modules/advanced-filter/models/form-filter.js +0 -19
- package/esm2015/modules/advanced-filter/models/index.js +0 -5
- package/esm2015/modules/advanced-filter/models/scope.js +0 -6
- package/esm2015/modules/advanced-filter/models/search.js +0 -1
- package/esm2015/modules/advanced-filter/models/tab-view.js +0 -18
- package/esm2015/modules/advanced-filter/models/ticked-filter.js +0 -1
- package/esm2015/modules/advanced-filter/pipes/map-values.pipe.js +0 -12
- package/esm2015/modules/advanced-filter/pipes/translate.pipe.js +0 -22
- package/esm2015/modules/advanced-filter/services/advanced-filter.service.js +0 -141
- package/esm2015/modules/advanced-filter/services/calendar-options.service.js +0 -81
- package/esm2015/modules/advanced-filter/services/constants.js +0 -6
- package/esm2015/modules/advanced-filter/shared/constants.js +0 -3
- package/esm2015/modules/advanced-filter/utils/comparator.js +0 -55
- package/esm2015/modules/advanced-filter/utils/filter-id/index.js +0 -8
- package/esm2015/modules/advanced-filter/utils/filter-value/index.js +0 -24
- package/esm2015/modules/advanced-filter/utils/filterOperators.js +0 -11
- package/esm2015/modules/advanced-filter/utils/form-field/index.js +0 -50
- package/esm2015/modules/advanced-filter/utils/index.js +0 -57
- package/esm2015/modules/advanced-filter/utils/json-path.js +0 -12
- package/esm2015/modules/cyclic-json-interceptor/cyclic-json-interceptor.module.js +0 -14
- package/esm2015/modules/cyclic-json-interceptor/cyclic-json-interceptor.service.js +0 -27
- package/esm2015/modules/cyclic-json-interceptor/index.js +0 -2
- package/esm2015/modules/feature-toggle/constants/endpoint.constant.js +0 -26
- package/esm2015/modules/feature-toggle/feature-toggle.module.js +0 -15
- package/esm2015/modules/feature-toggle/feature-toggle.service.js +0 -48
- package/esm2015/modules/feature-toggle/index.js +0 -3
- package/esm2015/modules/feature-toggle/models/feature.js +0 -1
- package/esm2015/modules/http-interceptor/http-interceptor.module.js +0 -16
- package/esm2015/modules/http-interceptor/http-interceptor.service.js +0 -47
- package/esm2015/modules/http-interceptor/index.js +0 -4
- package/esm2015/modules/http-interceptor/rest-url.service.js +0 -14
- package/esm2015/modules/http-interceptor/x-services-url.service.js +0 -17
- package/esm2015/modules/permissions/permissions.config.js +0 -11
- package/esm2015/modules/permissions/permissions.module.js +0 -42
- package/esm2015/modules/permissions/permissions.service.js +0 -196
- package/esm2015/modules/spotlight/component/spotlight.component.js +0 -274
- package/esm2015/modules/spotlight/index.js +0 -3
- package/esm2015/modules/spotlight/locale/fallback.js +0 -5
- package/esm2015/modules/spotlight/models/display-type.enum.js +0 -6
- package/esm2015/modules/spotlight/models/index.js +0 -4
- package/esm2015/modules/spotlight/models/spotlight-control-list.interface.js +0 -1
- package/esm2015/modules/spotlight/models/spotlight-control.interface.js +0 -3
- package/esm2015/modules/spotlight/models/spotlight-notification.interface.js +0 -1
- package/esm2015/modules/spotlight/models/spotlight-screen-list.interface.js +0 -1
- package/esm2015/modules/spotlight/models/spotlight-screen.interface.js +0 -1
- package/esm2015/modules/spotlight/models/spotlight-status.enum.js +0 -8
- package/esm2015/modules/spotlight/models/spotlight-user.interface.js +0 -1
- package/esm2015/modules/spotlight/models/spotlight-users-list.interface.js +0 -1
- package/esm2015/modules/spotlight/models/spotlight.interface.js +0 -1
- package/esm2015/modules/spotlight/models/user-action.enum.js +0 -7
- package/esm2015/modules/spotlight/pipes/translate.pipe.js +0 -22
- package/esm2015/modules/spotlight/service/spotlight.service.js +0 -38
- package/esm2015/modules/spotlight/spotlight.module.js +0 -37
- package/esm2015/modules/translations/translations.module.js +0 -182
- package/esm2015/public-api.js +0 -9
- package/esm2015/seniorsistemas-platform-components.js +0 -16
- package/esm5/modules/advanced-filter/advanced-filter.module.js +0 -54
- package/esm5/modules/advanced-filter/components/advanced-filter/advanced-filter.component.js +0 -144
- package/esm5/modules/advanced-filter/components/form-filter/form-filter.component.js +0 -626
- package/esm5/modules/advanced-filter/index.js +0 -5
- package/esm5/modules/advanced-filter/locale/fallback.js +0 -73
- package/esm5/modules/advanced-filter/models/context.js +0 -1
- package/esm5/modules/advanced-filter/models/depends-on.js +0 -1
- package/esm5/modules/advanced-filter/models/enum-item.js +0 -1
- package/esm5/modules/advanced-filter/models/filter-type.js +0 -14
- package/esm5/modules/advanced-filter/models/filter-value.js +0 -1
- package/esm5/modules/advanced-filter/models/filter.js +0 -25
- package/esm5/modules/advanced-filter/models/form-filter.js +0 -25
- package/esm5/modules/advanced-filter/models/index.js +0 -5
- package/esm5/modules/advanced-filter/models/scope.js +0 -6
- package/esm5/modules/advanced-filter/models/search.js +0 -1
- package/esm5/modules/advanced-filter/models/tab-view.js +0 -29
- package/esm5/modules/advanced-filter/models/ticked-filter.js +0 -1
- package/esm5/modules/advanced-filter/pipes/map-values.pipe.js +0 -16
- package/esm5/modules/advanced-filter/pipes/translate.pipe.js +0 -23
- package/esm5/modules/advanced-filter/services/advanced-filter.service.js +0 -152
- package/esm5/modules/advanced-filter/services/calendar-options.service.js +0 -82
- package/esm5/modules/advanced-filter/services/constants.js +0 -6
- package/esm5/modules/advanced-filter/shared/constants.js +0 -3
- package/esm5/modules/advanced-filter/utils/comparator.js +0 -55
- package/esm5/modules/advanced-filter/utils/filter-id/index.js +0 -8
- package/esm5/modules/advanced-filter/utils/filter-value/index.js +0 -25
- package/esm5/modules/advanced-filter/utils/filterOperators.js +0 -11
- package/esm5/modules/advanced-filter/utils/form-field/index.js +0 -52
- package/esm5/modules/advanced-filter/utils/index.js +0 -57
- package/esm5/modules/advanced-filter/utils/json-path.js +0 -12
- package/esm5/modules/cyclic-json-interceptor/cyclic-json-interceptor.module.js +0 -17
- package/esm5/modules/cyclic-json-interceptor/cyclic-json-interceptor.service.js +0 -30
- package/esm5/modules/cyclic-json-interceptor/index.js +0 -2
- package/esm5/modules/feature-toggle/constants/endpoint.constant.js +0 -27
- package/esm5/modules/feature-toggle/feature-toggle.module.js +0 -18
- package/esm5/modules/feature-toggle/feature-toggle.service.js +0 -51
- package/esm5/modules/feature-toggle/index.js +0 -3
- package/esm5/modules/feature-toggle/models/feature.js +0 -1
- package/esm5/modules/http-interceptor/http-interceptor.module.js +0 -19
- package/esm5/modules/http-interceptor/http-interceptor.service.js +0 -49
- package/esm5/modules/http-interceptor/index.js +0 -4
- package/esm5/modules/http-interceptor/rest-url.service.js +0 -17
- package/esm5/modules/http-interceptor/x-services-url.service.js +0 -20
- package/esm5/modules/permissions/permissions.config.js +0 -17
- package/esm5/modules/permissions/permissions.module.js +0 -46
- package/esm5/modules/permissions/permissions.service.js +0 -212
- package/esm5/modules/spotlight/component/spotlight.component.js +0 -300
- package/esm5/modules/spotlight/index.js +0 -3
- package/esm5/modules/spotlight/locale/fallback.js +0 -5
- package/esm5/modules/spotlight/models/display-type.enum.js +0 -6
- package/esm5/modules/spotlight/models/index.js +0 -4
- package/esm5/modules/spotlight/models/spotlight-control-list.interface.js +0 -1
- package/esm5/modules/spotlight/models/spotlight-control.interface.js +0 -7
- package/esm5/modules/spotlight/models/spotlight-notification.interface.js +0 -1
- package/esm5/modules/spotlight/models/spotlight-screen-list.interface.js +0 -1
- package/esm5/modules/spotlight/models/spotlight-screen.interface.js +0 -1
- package/esm5/modules/spotlight/models/spotlight-status.enum.js +0 -8
- package/esm5/modules/spotlight/models/spotlight-user.interface.js +0 -1
- package/esm5/modules/spotlight/models/spotlight-users-list.interface.js +0 -1
- package/esm5/modules/spotlight/models/spotlight.interface.js +0 -1
- package/esm5/modules/spotlight/models/user-action.enum.js +0 -7
- package/esm5/modules/spotlight/pipes/translate.pipe.js +0 -23
- package/esm5/modules/spotlight/service/spotlight.service.js +0 -39
- package/esm5/modules/spotlight/spotlight.module.js +0 -40
- package/esm5/modules/translations/translations.module.js +0 -226
- package/esm5/public-api.js +0 -9
- package/esm5/seniorsistemas-platform-components.js +0 -16
- package/fesm2015/seniorsistemas-platform-components.js +0 -2284
- package/fesm2015/seniorsistemas-platform-components.js.map +0 -1
- package/fesm5/seniorsistemas-platform-components.js +0 -2507
- package/fesm5/seniorsistemas-platform-components.js.map +0 -1
- package/seniorsistemas-platform-components.d.ts +0 -15
- package/seniorsistemas-platform-components.metadata.json +0 -1
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { NgModule } from '@angular/core';
|
|
2
|
+
import { RESOURCES, ENVIRONMENT } from './permissions.config';
|
|
3
|
+
import { PermissionsService } from './permissions.service';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export class PermissionsModule {
|
|
6
|
+
static forRoot(resources, environment) {
|
|
7
|
+
return {
|
|
8
|
+
ngModule: PermissionsModule,
|
|
9
|
+
providers: [
|
|
10
|
+
PermissionsService,
|
|
11
|
+
{
|
|
12
|
+
provide: RESOURCES,
|
|
13
|
+
multi: true,
|
|
14
|
+
useValue: resources
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
provide: ENVIRONMENT,
|
|
18
|
+
multi: false,
|
|
19
|
+
useValue: environment
|
|
20
|
+
}
|
|
21
|
+
]
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
static forChild(resources) {
|
|
25
|
+
return {
|
|
26
|
+
ngModule: PermissionsModule,
|
|
27
|
+
providers: [
|
|
28
|
+
{
|
|
29
|
+
provide: RESOURCES,
|
|
30
|
+
multi: true,
|
|
31
|
+
useValue: resources
|
|
32
|
+
}
|
|
33
|
+
]
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PermissionsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
37
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: PermissionsModule });
|
|
38
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PermissionsModule });
|
|
39
|
+
}
|
|
40
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PermissionsModule, decorators: [{
|
|
41
|
+
type: NgModule
|
|
42
|
+
}] });
|
|
43
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbnMubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGliL3NyYy9tb2R1bGVzL3Blcm1pc3Npb25zL3Blcm1pc3Npb25zLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUF1QixNQUFNLGVBQWUsQ0FBQztBQUM5RCxPQUFPLEVBQVksU0FBUyxFQUFFLFdBQVcsRUFBZSxNQUFNLHNCQUFzQixDQUFDO0FBQ3JGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDOztBQUczRCxNQUFNLE9BQU8saUJBQWlCO0lBQ3JCLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBcUIsRUFBRSxXQUF3QjtRQUNuRSxPQUFPO1lBQ0wsUUFBUSxFQUFFLGlCQUFpQjtZQUMzQixTQUFTLEVBQUU7Z0JBQ1Qsa0JBQWtCO2dCQUNsQjtvQkFDRSxPQUFPLEVBQUUsU0FBUztvQkFDbEIsS0FBSyxFQUFFLElBQUk7b0JBQ1gsUUFBUSxFQUFFLFNBQVM7aUJBQ3BCO2dCQUNEO29CQUNFLE9BQU8sRUFBRSxXQUFXO29CQUNwQixLQUFLLEVBQUUsS0FBSztvQkFDWixRQUFRLEVBQUUsV0FBVztpQkFDdEI7YUFDRjtTQUNGLENBQUM7SUFDSixDQUFDO0lBRU0sTUFBTSxDQUFDLFFBQVEsQ0FBQyxTQUFxQjtRQUMxQyxPQUFPO1lBQ0wsUUFBUSxFQUFFLGlCQUFpQjtZQUMzQixTQUFTLEVBQUU7Z0JBQ1Q7b0JBQ0UsT0FBTyxFQUFFLFNBQVM7b0JBQ2xCLEtBQUssRUFBRSxJQUFJO29CQUNYLFFBQVEsRUFBRSxTQUFTO2lCQUNwQjthQUNGO1NBQ0YsQ0FBQztJQUNKLENBQUM7d0dBL0JVLGlCQUFpQjt5R0FBakIsaUJBQWlCO3lHQUFqQixpQkFBaUI7OzRGQUFqQixpQkFBaUI7a0JBRDdCLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSwgTW9kdWxlV2l0aFByb3ZpZGVycyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUmVzb3VyY2UsIFJFU09VUkNFUywgRU5WSVJPTk1FTlQsIEVudmlyb25tZW50IH0gZnJvbSAnLi9wZXJtaXNzaW9ucy5jb25maWcnO1xuaW1wb3J0IHsgUGVybWlzc2lvbnNTZXJ2aWNlIH0gZnJvbSAnLi9wZXJtaXNzaW9ucy5zZXJ2aWNlJztcblxuQE5nTW9kdWxlKClcbmV4cG9ydCBjbGFzcyBQZXJtaXNzaW9uc01vZHVsZSB7XG4gIHB1YmxpYyBzdGF0aWMgZm9yUm9vdChyZXNvdXJjZXM6IFJlc291cmNlW10sIGVudmlyb25tZW50OiBFbnZpcm9ubWVudCk6IE1vZHVsZVdpdGhQcm92aWRlcnM8UGVybWlzc2lvbnNNb2R1bGU+IHtcbiAgICByZXR1cm4ge1xuICAgICAgbmdNb2R1bGU6IFBlcm1pc3Npb25zTW9kdWxlLFxuICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIFBlcm1pc3Npb25zU2VydmljZSxcbiAgICAgICAge1xuICAgICAgICAgIHByb3ZpZGU6IFJFU09VUkNFUyxcbiAgICAgICAgICBtdWx0aTogdHJ1ZSxcbiAgICAgICAgICB1c2VWYWx1ZTogcmVzb3VyY2VzXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBwcm92aWRlOiBFTlZJUk9OTUVOVCxcbiAgICAgICAgICBtdWx0aTogZmFsc2UsXG4gICAgICAgICAgdXNlVmFsdWU6IGVudmlyb25tZW50XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9O1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBmb3JDaGlsZChyZXNvdXJjZXM6IFJlc291cmNlW10pOiBNb2R1bGVXaXRoUHJvdmlkZXJzPFBlcm1pc3Npb25zTW9kdWxlPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5nTW9kdWxlOiBQZXJtaXNzaW9uc01vZHVsZSxcbiAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgcHJvdmlkZTogUkVTT1VSQ0VTLFxuICAgICAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgICAgIHVzZVZhbHVlOiByZXNvdXJjZXNcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH07XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
import { HttpClient } from '@angular/common/http';
|
|
2
|
+
import { Injectable, inject } from '@angular/core';
|
|
3
|
+
import { Router } from '@angular/router';
|
|
4
|
+
import { TranslateService } from '@ngx-translate/core';
|
|
5
|
+
import { ToastService } from "@seniorsistemas/angular-components/toast";
|
|
6
|
+
import { from, of, throwError } from 'rxjs';
|
|
7
|
+
import { catchError, map } from 'rxjs/operators';
|
|
8
|
+
import { ENVIRONMENT, RESOURCES } from './permissions.config';
|
|
9
|
+
import * as i0 from "@angular/core";
|
|
10
|
+
export let promise;
|
|
11
|
+
export class PermissionsService {
|
|
12
|
+
resources = inject(RESOURCES);
|
|
13
|
+
environment = inject(ENVIRONMENT);
|
|
14
|
+
http = inject(HttpClient);
|
|
15
|
+
router = inject(Router);
|
|
16
|
+
toastService = inject(ToastService);
|
|
17
|
+
translate = inject(TranslateService);
|
|
18
|
+
checkedPermissions = {};
|
|
19
|
+
actionUrl = 'platform/authorization/queries';
|
|
20
|
+
// v2
|
|
21
|
+
checkAccess(resources) {
|
|
22
|
+
const permissions = [];
|
|
23
|
+
resources.forEach(rec => {
|
|
24
|
+
rec.actions.forEach(action => {
|
|
25
|
+
if (!rec.uri) {
|
|
26
|
+
rec.uri = this.getUriByResourceName(rec.name, rec.entity);
|
|
27
|
+
}
|
|
28
|
+
permissions.push({ action, resource: rec.uri });
|
|
29
|
+
});
|
|
30
|
+
});
|
|
31
|
+
return this.http.post(`${this.actionUrl}/checkAccess`, { includeFilters: true, permissions }).pipe(map((response) => {
|
|
32
|
+
const checkedPermissions = response.permissions || response;
|
|
33
|
+
this.checkedPermissions = { ...this.checkedPermissions, ...checkedPermissions };
|
|
34
|
+
const values = {};
|
|
35
|
+
if (this.shouldRedirectToForbiddenPage(resources, checkedPermissions)) {
|
|
36
|
+
this.router.navigate(['error', 403]);
|
|
37
|
+
return throwError(() => new Error('forbidden'));
|
|
38
|
+
}
|
|
39
|
+
checkedPermissions.forEach((permission) => {
|
|
40
|
+
const resource = resources.find(res => res.uri === permission.resource);
|
|
41
|
+
if (!resource) {
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
const { name } = resource;
|
|
45
|
+
values[name] = values[name] || {};
|
|
46
|
+
values[name][permission.action] = permission.authorized;
|
|
47
|
+
values[name][permission.action.toLowerCase()] = permission.authorized;
|
|
48
|
+
if (permission.resourceFilters?.length) {
|
|
49
|
+
values[name]['resourceFilters'] = [
|
|
50
|
+
...(values[name]['resourceFilters'] || []),
|
|
51
|
+
...permission.resourceFilters
|
|
52
|
+
];
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
return values;
|
|
56
|
+
}));
|
|
57
|
+
}
|
|
58
|
+
// v1
|
|
59
|
+
get(resource = '') {
|
|
60
|
+
if (!promise) {
|
|
61
|
+
promise = this.getPermissions();
|
|
62
|
+
}
|
|
63
|
+
return from(promise).pipe(map((permissions) => {
|
|
64
|
+
this.checkedPermissions = permissions;
|
|
65
|
+
if (resource) {
|
|
66
|
+
const resourceKey = Object.keys(permissions)
|
|
67
|
+
.find(key => key.toLowerCase() === resource.toLowerCase());
|
|
68
|
+
return permissions[resourceKey];
|
|
69
|
+
}
|
|
70
|
+
return permissions;
|
|
71
|
+
}), catchError(() => {
|
|
72
|
+
promise = undefined;
|
|
73
|
+
this.toastService.show({
|
|
74
|
+
severity: 'error',
|
|
75
|
+
title: this.translate.instant('permission_error_summary'),
|
|
76
|
+
text: this.translate.instant('permission_error_detail')
|
|
77
|
+
});
|
|
78
|
+
return of(this.getPermissionObject(false));
|
|
79
|
+
}));
|
|
80
|
+
}
|
|
81
|
+
isAuthorized(resourceName, action, isEntity) {
|
|
82
|
+
if (!this.checkedPermissions || Object.keys(this.checkedPermissions).length === 0) {
|
|
83
|
+
throwError(() => new Error('\'Permissions\' are not defined. You should call \'get\' or \'checkAccess\' method first.'));
|
|
84
|
+
}
|
|
85
|
+
const resourceKey = Object.keys(this.checkedPermissions)
|
|
86
|
+
.find(key => key.toLowerCase() === resourceName.toLowerCase());
|
|
87
|
+
if (!resourceKey) {
|
|
88
|
+
return false;
|
|
89
|
+
}
|
|
90
|
+
const actions = this.checkedPermissions[resourceKey];
|
|
91
|
+
return actions?.[action] ?? actions?.[action.toLowerCase()] ?? false;
|
|
92
|
+
}
|
|
93
|
+
getUriByResourceName(resourceName, isEntity) {
|
|
94
|
+
const { domain, service } = this.environment;
|
|
95
|
+
if (!domain || !service) {
|
|
96
|
+
throwError(() => new Error('You must inform domain and service name'));
|
|
97
|
+
}
|
|
98
|
+
const uriBase = `res://senior.com.br/${domain}/${service}`;
|
|
99
|
+
return isEntity ? `${uriBase}/entities/${resourceName}` : `${uriBase}/${resourceName}`;
|
|
100
|
+
}
|
|
101
|
+
shouldRedirectToForbiddenPage(resources = [], permissions) {
|
|
102
|
+
const permissionsDenied = permissions.filter(perm => !perm.authorized);
|
|
103
|
+
if (permissionsDenied.length) {
|
|
104
|
+
const resourcesToCheck = resources.filter(r => r.redirectToError);
|
|
105
|
+
if (resourcesToCheck.length) {
|
|
106
|
+
return resourcesToCheck.every(resource => {
|
|
107
|
+
const actionsToCheck = resource.actionsToCheck?.length ? resource.actionsToCheck : resource.actions;
|
|
108
|
+
return actionsToCheck.every(action => permissionsDenied.some(p => p.resource === resource.uri && p.action === action));
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
return false;
|
|
113
|
+
}
|
|
114
|
+
getFlatEnvironment() {
|
|
115
|
+
return this.environment.ignorePermissions;
|
|
116
|
+
}
|
|
117
|
+
getFlatResources() {
|
|
118
|
+
return this.resources.reduce((result, item) => {
|
|
119
|
+
if (!item) {
|
|
120
|
+
return result;
|
|
121
|
+
}
|
|
122
|
+
return Array.isArray(item) ? [...result, ...item] : [...result, item];
|
|
123
|
+
}, []);
|
|
124
|
+
}
|
|
125
|
+
getPermissionObject(defaultValue) {
|
|
126
|
+
return this.getFlatResources().reduce((resources, resource) => {
|
|
127
|
+
resources[resource.name] = resource.actions.reduce((actions, action) => {
|
|
128
|
+
actions[action] = defaultValue;
|
|
129
|
+
actions[action.toLowerCase()] = defaultValue;
|
|
130
|
+
return actions;
|
|
131
|
+
}, {});
|
|
132
|
+
return resources;
|
|
133
|
+
}, {});
|
|
134
|
+
}
|
|
135
|
+
async getPermissions() {
|
|
136
|
+
if (this.getFlatEnvironment()) {
|
|
137
|
+
return this.getPermissionObject(true);
|
|
138
|
+
}
|
|
139
|
+
const resources = this.getFlatResources();
|
|
140
|
+
const perm = resources
|
|
141
|
+
.map(resource => resource.actions.map((action) => ({ action, resource: resource.uri })))
|
|
142
|
+
.reduce((acc, val) => [...acc, ...val]);
|
|
143
|
+
const response = await this.http
|
|
144
|
+
.post(`${this.actionUrl}/checkAccess`, { includeFilters: false, permissions: perm })
|
|
145
|
+
.toPromise();
|
|
146
|
+
const permissions = response.permissions ?? response;
|
|
147
|
+
const values = {};
|
|
148
|
+
permissions.forEach((permission) => {
|
|
149
|
+
const resource = resources.find((res) => res.uri === permission.resource);
|
|
150
|
+
if (!resource) {
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
const { name } = resource;
|
|
154
|
+
values[name] = values[name] || {};
|
|
155
|
+
values[name][permission.action] = permission.authorized;
|
|
156
|
+
values[name][permission.action.toLowerCase()] = permission.authorized;
|
|
157
|
+
});
|
|
158
|
+
return values;
|
|
159
|
+
}
|
|
160
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PermissionsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
161
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PermissionsService, providedIn: 'root' });
|
|
162
|
+
}
|
|
163
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PermissionsService, decorators: [{
|
|
164
|
+
type: Injectable,
|
|
165
|
+
args: [{
|
|
166
|
+
providedIn: 'root'
|
|
167
|
+
}]
|
|
168
|
+
}] });
|
|
169
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbnMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9zcmMvbW9kdWxlcy9wZXJtaXNzaW9ucy9wZXJtaXNzaW9ucy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxJQUFJLEVBQWMsRUFBRSxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN4RCxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pELE9BQU8sRUFFTCxXQUFXLEVBSVgsU0FBUyxFQUNWLE1BQU0sc0JBQXNCLENBQUM7O0FBRTlCLE1BQU0sQ0FBQyxJQUFJLE9BQXFCLENBQUM7QUFLakMsTUFBTSxPQUFPLGtCQUFrQjtJQUNaLFNBQVMsR0FBRyxNQUFNLENBQVksU0FBUyxDQUFDLENBQUM7SUFDekMsV0FBVyxHQUFHLE1BQU0sQ0FBYyxXQUFXLENBQUMsQ0FBQztJQUMvQyxJQUFJLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzFCLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDeEIsWUFBWSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNwQyxTQUFTLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFFOUMsa0JBQWtCLEdBQVEsRUFBRSxDQUFDO0lBQ3BCLFNBQVMsR0FBRyxn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QixDQUFDO3dHQWxNVSxrQkFBa0I7NEdBQWxCLGtCQUFrQixjQUZqQixNQUFNOzs0RkFFUCxrQkFBa0I7a0JBSDlCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEluamVjdGFibGUsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gXCJAc2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzL3RvYXN0XCI7XG5pbXBvcnQgeyBmcm9tLCBPYnNlcnZhYmxlLCBvZiwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtcbiAgRW52aXJvbm1lbnQsXG4gIEVOVklST05NRU5ULFxuICBQZXJtaXNzaW9uLFxuICBSZXNvdXJjZSxcbiAgUmVzb3VyY2VzLFxuICBSRVNPVVJDRVNcbn0gZnJvbSAnLi9wZXJtaXNzaW9ucy5jb25maWcnO1xuXG5leHBvcnQgbGV0IHByb21pc2U6IFByb21pc2U8YW55PjtcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgUGVybWlzc2lvbnNTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSByZXNvdXJjZXMgPSBpbmplY3Q8UmVzb3VyY2VzPihSRVNPVVJDRVMpO1xuICBwcml2YXRlIHJlYWRvbmx5IGVudmlyb25tZW50ID0gaW5qZWN0PEVudmlyb25tZW50PihFTlZJUk9OTUVOVCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgaHR0cCA9IGluamVjdChIdHRwQ2xpZW50KTtcbiAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcbiAgcHJpdmF0ZSByZWFkb25seSB0b2FzdFNlcnZpY2UgPSBpbmplY3QoVG9hc3RTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGUgPSBpbmplY3QoVHJhbnNsYXRlU2VydmljZSk7XG5cbiAgcHJpdmF0ZSBjaGVja2VkUGVybWlzc2lvbnM6IGFueSA9IHt9O1xuICBwcml2YXRlIHJlYWRvbmx5IGFjdGlvblVybCA9ICdwbGF0Zm9ybS9hdXRob3JpemF0aW9uL3F1ZXJpZXMnO1xuXG4gIC8vIHYyXG4gIGNoZWNrQWNjZXNzKHJlc291cmNlczogUmVzb3VyY2VbXSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc3QgcGVybWlzc2lvbnM6IGFueVtdID0gW107XG5cbiAgICByZXNvdXJjZXMuZm9yRWFjaChyZWMgPT4ge1xuICAgICAgcmVjLmFjdGlvbnMuZm9yRWFjaChhY3Rpb24gPT4ge1xuICAgICAgICBpZiAoIXJlYy51cmkpIHtcbiAgICAgICAgICByZWMudXJpID0gdGhpcy5nZXRVcmlCeVJlc291cmNlTmFtZShyZWMubmFtZSwgcmVjLmVudGl0eSk7XG4gICAgICAgIH1cbiAgICAgICAgcGVybWlzc2lvbnMucHVzaCh7IGFjdGlvbiwgcmVzb3VyY2U6IHJlYy51cmkgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmFjdGlvblVybH0vY2hlY2tBY2Nlc3NgLCB7IGluY2x1ZGVGaWx0ZXJzOiB0cnVlLCBwZXJtaXNzaW9ucyB9KS5waXBlKFxuICAgICAgbWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IGNoZWNrZWRQZXJtaXNzaW9ucyA9IHJlc3BvbnNlLnBlcm1pc3Npb25zIHx8IHJlc3BvbnNlO1xuXG4gICAgICAgIHRoaXMuY2hlY2tlZFBlcm1pc3Npb25zID0geyAuLi50aGlzLmNoZWNrZWRQZXJtaXNzaW9ucywgLi4uY2hlY2tlZFBlcm1pc3Npb25zIH07XG5cbiAgICAgICAgY29uc3QgdmFsdWVzOiBhbnkgPSB7fTtcblxuICAgICAgICBpZiAodGhpcy5zaG91bGRSZWRpcmVjdFRvRm9yYmlkZGVuUGFnZShyZXNvdXJjZXMsIGNoZWNrZWRQZXJtaXNzaW9ucykpIHtcbiAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJ2Vycm9yJywgNDAzXSk7XG4gICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKCdmb3JiaWRkZW4nKSk7XG4gICAgICAgIH1cblxuICAgICAgICBjaGVja2VkUGVybWlzc2lvbnMuZm9yRWFjaCgocGVybWlzc2lvbjogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3QgcmVzb3VyY2UgPSByZXNvdXJjZXMuZmluZChyZXMgPT4gcmVzLnVyaSA9PT0gcGVybWlzc2lvbi5yZXNvdXJjZSk7XG5cbiAgICAgICAgICBpZiAoIXJlc291cmNlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgeyBuYW1lIH0gPSByZXNvdXJjZTtcblxuICAgICAgICAgIHZhbHVlc1tuYW1lXSA9IHZhbHVlc1tuYW1lXSB8fCB7fTtcbiAgICAgICAgICB2YWx1ZXNbbmFtZV1bcGVybWlzc2lvbi5hY3Rpb25dID0gcGVybWlzc2lvbi5hdXRob3JpemVkO1xuICAgICAgICAgIHZhbHVlc1tuYW1lXVtwZXJtaXNzaW9uLmFjdGlvbi50b0xvd2VyQ2FzZSgpXSA9IHBlcm1pc3Npb24uYXV0aG9yaXplZDtcblxuICAgICAgICAgIGlmIChwZXJtaXNzaW9uLnJlc291cmNlRmlsdGVycz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICB2YWx1ZXNbbmFtZV1bJ3Jlc291cmNlRmlsdGVycyddID0gW1xuICAgICAgICAgICAgICAuLi4odmFsdWVzW25hbWVdWydyZXNvdXJjZUZpbHRlcnMnXSB8fCBbXSksXG4gICAgICAgICAgICAgIC4uLnBlcm1pc3Npb24ucmVzb3VyY2VGaWx0ZXJzXG4gICAgICAgICAgICBdO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHZhbHVlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8vIHYxXG4gIGdldChyZXNvdXJjZTogc3RyaW5nID0gJycpIHtcbiAgICBpZiAoIXByb21pc2UpIHtcbiAgICAgIHByb21pc2UgPSB0aGlzLmdldFBlcm1pc3Npb25zKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZyb20ocHJvbWlzZSkucGlwZShcbiAgICAgIG1hcCgocGVybWlzc2lvbnM6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmNoZWNrZWRQZXJtaXNzaW9ucyA9IHBlcm1pc3Npb25zO1xuXG4gICAgICAgIGlmIChyZXNvdXJjZSkge1xuICAgICAgICAgIGNvbnN0IHJlc291cmNlS2V5ID0gT2JqZWN0LmtleXMocGVybWlzc2lvbnMpXG4gICAgICAgICAgICAuZmluZChrZXkgPT4ga2V5LnRvTG93ZXJDYXNlKCkgPT09IHJlc291cmNlLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICAgIHJldHVybiBwZXJtaXNzaW9uc1tyZXNvdXJjZUtleV07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcGVybWlzc2lvbnM7XG4gICAgICB9KSxcbiAgICAgIGNhdGNoRXJyb3IoKCkgPT4ge1xuICAgICAgICBwcm9taXNlID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5zaG93KHtcbiAgICAgICAgICBzZXZlcml0eTogJ2Vycm9yJyxcbiAgICAgICAgICB0aXRsZTogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgncGVybWlzc2lvbl9lcnJvcl9zdW1tYXJ5JyksXG4gICAgICAgICAgdGV4dDogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgncGVybWlzc2lvbl9lcnJvcl9kZXRhaWwnKVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gb2YodGhpcy5nZXRQZXJtaXNzaW9uT2JqZWN0KGZhbHNlKSk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBpc0F1dGhvcml6ZWQocmVzb3VyY2VOYW1lOiBzdHJpbmcsIGFjdGlvbjogc3RyaW5nLCBpc0VudGl0eT86IGJvb2xlYW4pOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuY2hlY2tlZFBlcm1pc3Npb25zIHx8IE9iamVjdC5rZXlzKHRoaXMuY2hlY2tlZFBlcm1pc3Npb25zKS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKCdcXCdQZXJtaXNzaW9uc1xcJyBhcmUgbm90IGRlZmluZWQuIFlvdSBzaG91bGQgY2FsbCBcXCdnZXRcXCcgb3IgXFwnY2hlY2tBY2Nlc3NcXCcgbWV0aG9kIGZpcnN0LicpKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXNvdXJjZUtleSA9IE9iamVjdC5rZXlzKHRoaXMuY2hlY2tlZFBlcm1pc3Npb25zKVxuICAgICAgLmZpbmQoa2V5ID0+IGtleS50b0xvd2VyQ2FzZSgpID09PSByZXNvdXJjZU5hbWUudG9Mb3dlckNhc2UoKSk7XG5cbiAgICBpZiAoIXJlc291cmNlS2V5KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgYWN0aW9ucyA9IHRoaXMuY2hlY2tlZFBlcm1pc3Npb25zW3Jlc291cmNlS2V5XTtcbiAgICByZXR1cm4gYWN0aW9ucz8uW2FjdGlvbl0gPz8gYWN0aW9ucz8uW2FjdGlvbi50b0xvd2VyQ2FzZSgpXSA/PyBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VXJpQnlSZXNvdXJjZU5hbWUocmVzb3VyY2VOYW1lOiBzdHJpbmcsIGlzRW50aXR5PzogYm9vbGVhbik6IHN0cmluZyB7XG4gICAgY29uc3QgeyBkb21haW4sIHNlcnZpY2UgfSA9IHRoaXMuZW52aXJvbm1lbnQ7XG5cbiAgICBpZiAoIWRvbWFpbiB8fCAhc2VydmljZSkge1xuICAgICAgdGhyb3dFcnJvcigoKSA9PiBuZXcgRXJyb3IoJ1lvdSBtdXN0IGluZm9ybSBkb21haW4gYW5kIHNlcnZpY2UgbmFtZScpKTtcbiAgICB9XG5cbiAgICBjb25zdCB1cmlCYXNlID0gYHJlczovL3Nlbmlvci5jb20uYnIvJHtkb21haW59LyR7c2VydmljZX1gO1xuICAgIHJldHVybiBpc0VudGl0eSA/IGAke3VyaUJhc2V9L2VudGl0aWVzLyR7cmVzb3VyY2VOYW1lfWAgOiBgJHt1cmlCYXNlfS8ke3Jlc291cmNlTmFtZX1gO1xuICB9XG5cbiAgcHJpdmF0ZSBzaG91bGRSZWRpcmVjdFRvRm9yYmlkZGVuUGFnZShyZXNvdXJjZXM6IFJlc291cmNlW10gPSBbXSwgcGVybWlzc2lvbnM6IFBlcm1pc3Npb25bXSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHBlcm1pc3Npb25zRGVuaWVkID0gcGVybWlzc2lvbnMuZmlsdGVyKHBlcm0gPT4gIXBlcm0uYXV0aG9yaXplZCk7XG5cbiAgICBpZiAocGVybWlzc2lvbnNEZW5pZWQubGVuZ3RoKSB7XG4gICAgICBjb25zdCByZXNvdXJjZXNUb0NoZWNrID0gcmVzb3VyY2VzLmZpbHRlcihyID0+IHIucmVkaXJlY3RUb0Vycm9yKTtcbiAgICAgIGlmIChyZXNvdXJjZXNUb0NoZWNrLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gcmVzb3VyY2VzVG9DaGVjay5ldmVyeShyZXNvdXJjZSA9PiB7XG4gICAgICAgICAgY29uc3QgYWN0aW9uc1RvQ2hlY2sgPSByZXNvdXJjZS5hY3Rpb25zVG9DaGVjaz8ubGVuZ3RoID8gcmVzb3VyY2UuYWN0aW9uc1RvQ2hlY2sgOiByZXNvdXJjZS5hY3Rpb25zO1xuICAgICAgICAgIHJldHVybiBhY3Rpb25zVG9DaGVjay5ldmVyeShhY3Rpb24gPT5cbiAgICAgICAgICAgIHBlcm1pc3Npb25zRGVuaWVkLnNvbWUocCA9PiBwLnJlc291cmNlID09PSByZXNvdXJjZS51cmkgJiYgcC5hY3Rpb24gPT09IGFjdGlvbilcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRGbGF0RW52aXJvbm1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZW52aXJvbm1lbnQuaWdub3JlUGVybWlzc2lvbnM7XG4gIH1cblxuICBwcml2YXRlIGdldEZsYXRSZXNvdXJjZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVzb3VyY2VzLnJlZHVjZSgocmVzdWx0OiBSZXNvdXJjZVtdLCBpdGVtOiBhbnkpID0+IHtcblxuICAgICAgaWYgKCFpdGVtKSB7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KGl0ZW0pID8gWy4uLnJlc3VsdCwgLi4uaXRlbV0gOiBbLi4ucmVzdWx0LCBpdGVtXTtcbiAgICB9LCBbXSk7XG4gIH1cblxuICBwcml2YXRlIGdldFBlcm1pc3Npb25PYmplY3QoZGVmYXVsdFZhbHVlOiBib29sZWFuKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0RmxhdFJlc291cmNlcygpLnJlZHVjZSgocmVzb3VyY2VzOiBhbnksIHJlc291cmNlOiBSZXNvdXJjZSkgPT4ge1xuICAgICAgcmVzb3VyY2VzW3Jlc291cmNlLm5hbWVdID0gcmVzb3VyY2UuYWN0aW9ucy5yZWR1Y2UoKGFjdGlvbnM6IGFueSwgYWN0aW9uOiBhbnkpID0+IHtcbiAgICAgICAgYWN0aW9uc1thY3Rpb25dID0gZGVmYXVsdFZhbHVlO1xuICAgICAgICBhY3Rpb25zW2FjdGlvbi50b0xvd2VyQ2FzZSgpXSA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgcmV0dXJuIGFjdGlvbnM7XG4gICAgICB9LCB7fSk7XG4gICAgICByZXR1cm4gcmVzb3VyY2VzO1xuICAgIH0sIHt9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0UGVybWlzc2lvbnMoKSB7XG4gICAgaWYgKHRoaXMuZ2V0RmxhdEVudmlyb25tZW50KCkpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFBlcm1pc3Npb25PYmplY3QodHJ1ZSk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzb3VyY2VzID0gdGhpcy5nZXRGbGF0UmVzb3VyY2VzKCk7XG4gICAgY29uc3QgcGVybSA9IHJlc291cmNlc1xuICAgICAgLm1hcChyZXNvdXJjZSA9PiByZXNvdXJjZS5hY3Rpb25zLm1hcCgoYWN0aW9uOiBhbnkpID0+ICh7IGFjdGlvbiwgcmVzb3VyY2U6IHJlc291cmNlLnVyaSB9KSkpXG4gICAgICAucmVkdWNlKChhY2M6IGFueSwgdmFsOiBhbnkpID0+IFsuLi5hY2MsIC4uLnZhbF0pO1xuXG4gICAgY29uc3QgcmVzcG9uc2U6IGFueSA9IGF3YWl0IHRoaXMuaHR0cFxuICAgICAgLnBvc3QoYCR7dGhpcy5hY3Rpb25Vcmx9L2NoZWNrQWNjZXNzYCwgeyBpbmNsdWRlRmlsdGVyczogZmFsc2UsIHBlcm1pc3Npb25zOiBwZXJtIH0pXG4gICAgICAudG9Qcm9taXNlKCk7XG5cbiAgICBjb25zdCBwZXJtaXNzaW9ucyA9IHJlc3BvbnNlLnBlcm1pc3Npb25zID8/IHJlc3BvbnNlO1xuICAgIGNvbnN0IHZhbHVlczogYW55ID0ge307XG5cbiAgICBwZXJtaXNzaW9ucy5mb3JFYWNoKChwZXJtaXNzaW9uOiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IHJlc291cmNlID0gcmVzb3VyY2VzLmZpbmQoKHJlczogYW55KSA9PiByZXMudXJpID09PSBwZXJtaXNzaW9uLnJlc291cmNlKTtcbiAgICAgIGlmICghcmVzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB7IG5hbWUgfSA9IHJlc291cmNlO1xuICAgICAgdmFsdWVzW25hbWVdID0gdmFsdWVzW25hbWVdIHx8IHt9O1xuICAgICAgdmFsdWVzW25hbWVdW3Blcm1pc3Npb24uYWN0aW9uXSA9IHBlcm1pc3Npb24uYXV0aG9yaXplZDtcbiAgICAgIHZhbHVlc1tuYW1lXVtwZXJtaXNzaW9uLmFjdGlvbi50b0xvd2VyQ2FzZSgpXSA9IHBlcm1pc3Npb24uYXV0aG9yaXplZDtcbiAgICB9KTtcblxuICAgIHJldHVybiB2YWx1ZXM7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
import { UserAction } from './../models/user-action.enum';
|
|
2
|
+
import { Component, EventEmitter, Input, Output, inject } from '@angular/core';
|
|
3
|
+
import { SpotlightService } from '../service/spotlight.service';
|
|
4
|
+
import { EnumDisplayType, EnumSpotlightStatus } from '../models/index';
|
|
5
|
+
import { DatePipe } from '@angular/common';
|
|
6
|
+
import { CookieService } from 'ngx-cookie-service';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
import * as i1 from "primeng/button";
|
|
9
|
+
import * as i2 from "primeng/tooltip";
|
|
10
|
+
import * as i3 from "@angular/common";
|
|
11
|
+
import * as i4 from "../pipes/translate.pipe";
|
|
12
|
+
export class SpotlightComponent {
|
|
13
|
+
spotlightService = inject(SpotlightService);
|
|
14
|
+
cookieService = inject(CookieService);
|
|
15
|
+
datePipe = inject(DatePipe);
|
|
16
|
+
header;
|
|
17
|
+
imgUrl;
|
|
18
|
+
primaryButtonLabel;
|
|
19
|
+
primaryButtonTooltip;
|
|
20
|
+
canAppear = false;
|
|
21
|
+
currentUser;
|
|
22
|
+
spotlightUsersList;
|
|
23
|
+
spotlightControlsList;
|
|
24
|
+
spotlightScreen;
|
|
25
|
+
canEmitEvent;
|
|
26
|
+
visible = false;
|
|
27
|
+
menuId;
|
|
28
|
+
fade = false;
|
|
29
|
+
visibleChange = new EventEmitter();
|
|
30
|
+
async ngOnInit() {
|
|
31
|
+
await this.setValues();
|
|
32
|
+
this.fetchSpotlight();
|
|
33
|
+
}
|
|
34
|
+
async setValues() {
|
|
35
|
+
const userData = JSON.parse(this.cookieService.get('com.senior.token'));
|
|
36
|
+
this.currentUser = userData.username;
|
|
37
|
+
this.spotlightUsersList = await this.spotlightService.listSpotlightUsers();
|
|
38
|
+
this.spotlightControlsList = await this.spotlightService.listSpotlightControl();
|
|
39
|
+
}
|
|
40
|
+
setValuesInSpotlight(values) {
|
|
41
|
+
this.header = values.spotlightTitle;
|
|
42
|
+
this.imgUrl = values.bannerUrl;
|
|
43
|
+
this.primaryButtonLabel = values.primaryButtonLabel;
|
|
44
|
+
this.primaryButtonTooltip = values.primaryButtonHint;
|
|
45
|
+
}
|
|
46
|
+
getShowDate(days) {
|
|
47
|
+
const currentDate = new Date();
|
|
48
|
+
return this.datePipe.transform(currentDate.setDate(currentDate.getDate() + days).toString(), 'yyyy-MM-dd');
|
|
49
|
+
}
|
|
50
|
+
fetchSpotlight() {
|
|
51
|
+
this.spotlightService.listSpotlightScreen().subscribe(value => {
|
|
52
|
+
this.spotlightScreen = value.contents.filter(val => val.screenMenuId === this.menuId)[0];
|
|
53
|
+
if (this.spotlightScreen) {
|
|
54
|
+
this.showSpotlight(this.spotlightScreen.spotlight);
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
showSpotlight(spotlight) {
|
|
59
|
+
if (this.validateDate(spotlight.initialDate) && this.validateFinalDate(spotlight.finalDate) && this.validateSpotlight(spotlight)) {
|
|
60
|
+
this.setValuesInSpotlight(spotlight);
|
|
61
|
+
this.canAppear = true;
|
|
62
|
+
const control = this.getSpotlightControlFromList(this.spotlightScreen.spotlight.id);
|
|
63
|
+
this.canEmitEvent = !control || this.currentUser !== control.firstUser;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
validateDate(date) {
|
|
67
|
+
if (date) {
|
|
68
|
+
const currentDate = this.datePipe.transform(new Date().toString(), 'yyyy-MM-dd');
|
|
69
|
+
const initialDate = this.datePipe.transform(date, 'yyyy-MM-dd');
|
|
70
|
+
return currentDate >= initialDate;
|
|
71
|
+
}
|
|
72
|
+
return false;
|
|
73
|
+
}
|
|
74
|
+
validateFinalDate(date) {
|
|
75
|
+
if (date) {
|
|
76
|
+
const currentDate = this.datePipe.transform(new Date().toString(), 'yyyy-MM-dd');
|
|
77
|
+
const finalDate = this.datePipe.transform(date, 'yyyy-MM-dd');
|
|
78
|
+
return currentDate <= finalDate;
|
|
79
|
+
}
|
|
80
|
+
return true;
|
|
81
|
+
}
|
|
82
|
+
validateSpotlight(spotlight) {
|
|
83
|
+
if (!this.validateControlsList(this.spotlightControlsList, spotlight, this.currentUser)) {
|
|
84
|
+
return false;
|
|
85
|
+
}
|
|
86
|
+
if (!this.validateDisplayType(spotlight, this.spotlightUsersList, this.spotlightControlsList, this.currentUser)) {
|
|
87
|
+
return false;
|
|
88
|
+
}
|
|
89
|
+
return true;
|
|
90
|
+
}
|
|
91
|
+
validateControlsList(controlsList, spotlight, currentUser) {
|
|
92
|
+
if (controlsList.totalElements) {
|
|
93
|
+
const notCompatibleControls = controlsList.contents.filter(control => {
|
|
94
|
+
if (control.status === EnumSpotlightStatus.ACTIVE) {
|
|
95
|
+
return control.spotlightId === spotlight.id;
|
|
96
|
+
}
|
|
97
|
+
else if (control.status === EnumSpotlightStatus.IN_PROGRESS) {
|
|
98
|
+
return control.spotlightId === spotlight.id && control.firstUser !== currentUser;
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
if (notCompatibleControls.length > 0) {
|
|
102
|
+
return false;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return true;
|
|
106
|
+
}
|
|
107
|
+
validateDisplayType(spotlight, usersList, controlsList, currentUser) {
|
|
108
|
+
switch (spotlight.displayType) {
|
|
109
|
+
case EnumDisplayType.ADVERSITING:
|
|
110
|
+
return usersList.totalElements ? this.validateUser(usersList.contents, spotlight) : true;
|
|
111
|
+
case EnumDisplayType.INTEGRATION:
|
|
112
|
+
if (controlsList.totalElements) {
|
|
113
|
+
const compatibleControls = controlsList.contents.filter(control => {
|
|
114
|
+
switch (control.status) {
|
|
115
|
+
case EnumSpotlightStatus.NO_STARTED:
|
|
116
|
+
return control.spotlightId === spotlight.id;
|
|
117
|
+
case EnumSpotlightStatus.REFUSED:
|
|
118
|
+
return usersList.totalElements ? this.validateUser(usersList.contents, spotlight) : true;
|
|
119
|
+
case EnumSpotlightStatus.IN_PROGRESS:
|
|
120
|
+
return control.firstUser === currentUser
|
|
121
|
+
&& control.spotlightId === spotlight.id;
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
if (compatibleControls.length === 0) {
|
|
125
|
+
return false;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
return true;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
validateUser(users, spotlight) {
|
|
132
|
+
let spotlightUsers = users.filter(user => user.spotlightId === spotlight.id);
|
|
133
|
+
if (!spotlightUsers.length) {
|
|
134
|
+
spotlightUsers = users.filter(user => user.userOperation === this.currentUser);
|
|
135
|
+
return spotlightUsers.length === 0;
|
|
136
|
+
}
|
|
137
|
+
const compatibleUserToValidate = spotlightUsers.filter(user => user.userOperation === this.currentUser)[0];
|
|
138
|
+
return compatibleUserToValidate ? this.validateDate(compatibleUserToValidate.showDate) : true;
|
|
139
|
+
}
|
|
140
|
+
saveSpotlightUser(days) {
|
|
141
|
+
const spotlight = this.spotlightScreen.spotlight;
|
|
142
|
+
const user = this.spotlightUsersList.contents.filter(val => {
|
|
143
|
+
return val.spotlightId === spotlight.id
|
|
144
|
+
&& val.userOperation === this.currentUser;
|
|
145
|
+
})[0];
|
|
146
|
+
let spotlightUser = {
|
|
147
|
+
spotlightId: spotlight.id,
|
|
148
|
+
showDate: days ? this.getShowDate(days) : null,
|
|
149
|
+
userOperation: this.currentUser
|
|
150
|
+
};
|
|
151
|
+
if (user) {
|
|
152
|
+
spotlightUser = {
|
|
153
|
+
id: user.id,
|
|
154
|
+
...spotlightUser
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
this.spotlightService.saveSpotlightUser(spotlightUser).subscribe();
|
|
158
|
+
}
|
|
159
|
+
onPrimary() {
|
|
160
|
+
const spotlight = this.spotlightScreen.spotlight;
|
|
161
|
+
const notification = this.buildNotification(UserAction.CONFIRMED);
|
|
162
|
+
this.saveSpotlightControl();
|
|
163
|
+
this.saveSpotlightUser();
|
|
164
|
+
if (this.canEmitEvent) {
|
|
165
|
+
this.spotlightService.notificateSpotlight(notification).subscribe();
|
|
166
|
+
}
|
|
167
|
+
if (spotlight.primaryButtonUrl) {
|
|
168
|
+
window.open(spotlight.primaryButtonUrl);
|
|
169
|
+
}
|
|
170
|
+
this.close();
|
|
171
|
+
}
|
|
172
|
+
onSecondary() {
|
|
173
|
+
const notification = this.buildNotification(UserAction.POSTPONED);
|
|
174
|
+
this.saveSpotlightControl(EnumSpotlightStatus.REFUSED);
|
|
175
|
+
this.saveSpotlightUser(this.spotlightScreen.spotlight.daysRememberLate);
|
|
176
|
+
this.spotlightService.notificateSpotlight(notification).subscribe();
|
|
177
|
+
this.close();
|
|
178
|
+
}
|
|
179
|
+
onTertiary() {
|
|
180
|
+
const notification = this.buildNotification(UserAction.REFUSED);
|
|
181
|
+
this.saveSpotlightControl(EnumSpotlightStatus.REFUSED);
|
|
182
|
+
this.saveSpotlightUser(this.spotlightScreen.spotlight.daysNotInterested);
|
|
183
|
+
this.spotlightService.notificateSpotlight(notification).subscribe();
|
|
184
|
+
this.close();
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Verifica se um registro de usuário pertence ao usuário logado e corresponde ao spotlight atual
|
|
188
|
+
* @param user SpotlightUser Objeto representando o registro do usuário para uma spotlight
|
|
189
|
+
* @param spotlight Spotlight Spotlight
|
|
190
|
+
* @returns boolean true se corresponder ao spotlight atual, false caso contrário
|
|
191
|
+
*/
|
|
192
|
+
hasThisRegister(user, spotlight) {
|
|
193
|
+
return (user.spotlightId === spotlight.id && user.userOperation === this.currentUser);
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Verifica se um registro de usuário pertece ao usuário logado, mas não corresponde ao spotlight atual
|
|
197
|
+
* @param user SpotlightUser Objeto representando o registro do usuário para uma spotlight
|
|
198
|
+
* @param spotlight Spotlight Spotlight
|
|
199
|
+
* @returns boolean true se corresponder ao spotlight atual, false caso contrário
|
|
200
|
+
*/
|
|
201
|
+
hasAnotherRegister(user, spotlight) {
|
|
202
|
+
return user.spotlightId !== spotlight.id && user.userOperation === this.currentUser;
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Persiste um novo registro de controle para o spotlight atual se
|
|
206
|
+
* não for encontrado nenhum na lista de controles carregada inicialmente
|
|
207
|
+
* @param status EnumSpotlightStatus Status do controle do spotlight. Se nenhum for informado, IN_PROGRESS será aplicado
|
|
208
|
+
* @returns SpotlightControl Controle do spotlight recuperado/pesistido
|
|
209
|
+
*/
|
|
210
|
+
saveSpotlightControl(status = EnumSpotlightStatus.IN_PROGRESS) {
|
|
211
|
+
const spotlight = this.spotlightScreen.spotlight;
|
|
212
|
+
let control = this.getSpotlightControlFromList(spotlight.id);
|
|
213
|
+
if (!control) {
|
|
214
|
+
control = {
|
|
215
|
+
spotlightId: spotlight.id,
|
|
216
|
+
status: status,
|
|
217
|
+
firstUser: this.currentUser
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
if (this.isNewControl(control) || control.status !== EnumSpotlightStatus.IN_PROGRESS) {
|
|
221
|
+
control.status = status;
|
|
222
|
+
control.firstUser = status === EnumSpotlightStatus.IN_PROGRESS ? this.currentUser : '';
|
|
223
|
+
this.spotlightService.saveSpotlightControl(control).subscribe();
|
|
224
|
+
}
|
|
225
|
+
return control;
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Retorna o controle de spotlight correspondente ao identificador
|
|
229
|
+
* informado na lista de controles carregada na inicialização do componente
|
|
230
|
+
* @param id string Identificador do controle de spotlight
|
|
231
|
+
*/
|
|
232
|
+
getSpotlightControlFromList(id) {
|
|
233
|
+
return this.spotlightControlsList.contents.filter(val => val.spotlightId === id)[0];
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Verifica se o controle de spotlight informado não foi registrado ainda
|
|
237
|
+
* @param spotlightControl SpotlightControl Controle do spotlight
|
|
238
|
+
* @returns boolean true se ainda não foi registrado na base, false caso contrário
|
|
239
|
+
*/
|
|
240
|
+
isNewControl(spotlightControl) {
|
|
241
|
+
return !this.spotlightControlsList.contents.includes(spotlightControl);
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Retorna um objeto de notificação referente ao botão clicado pelo usuário.
|
|
245
|
+
* @param userAction UserAction Ação realizada pelo usuário ao clicar nos botões da modal
|
|
246
|
+
* @returns SpotlightNotification Objeto de notificação
|
|
247
|
+
*/
|
|
248
|
+
buildNotification(userAction) {
|
|
249
|
+
const spotlight = this.spotlightScreen.spotlight;
|
|
250
|
+
return {
|
|
251
|
+
clickedButton: userAction,
|
|
252
|
+
spotlightControlId: spotlight.id,
|
|
253
|
+
primaryButtonUrl: spotlight.primaryButtonUrl
|
|
254
|
+
};
|
|
255
|
+
}
|
|
256
|
+
close() {
|
|
257
|
+
this.visibleChange.emit(false);
|
|
258
|
+
}
|
|
259
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SpotlightComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
260
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: SpotlightComponent, selector: "s-spotlight", inputs: { visible: "visible", menuId: "menuId", fade: "fade" }, outputs: { visibleChange: "visibleChange" }, ngImport: i0, template: "<div class=\"s-spotlight-overlay\" id=\"ol\" *ngIf=\"canAppear && visible\">\n <div class=\"s-spotlight\" id=\"sl\" [ngClass]=\"{'s-effect-fadein': fade}\">\n <div class=\"s-spotlight-header\">\n <span class=\"s-spotlight-title\">{{header.toUpperCase()}}</span>\n <a role=\"button\" class=\"s-spotlight-close\" (click)=\"close()\"><span class=\"fa fa-times\" aria-hidden=\"true\"></span></a>\n </div>\n <div class=\"s-img\">\n <img src=\"{{imgUrl}}\">\n </div>\n <div class=\"s-spotlight-footer\">\n <div class=\"s-spotlight-footer-left\">\n <button\n pButton\n type=\"submit\"\n id=\"decline-button\"\n label=\"{{'platform.spotlight.no_interest' | translate}}\"\n (click)=\"onTertiary()\"\n class=\"ui-button-link\">\n </button>\n </div>\n <div class=\"s-spotlight-footer-right\">\n <button\n pButton\n type=\"submit\"\n id=\"remember-button\"\n label=\"{{'platform.spotlight.remember_late' | translate}}\"\n (click)=\"onSecondary()\"\n class=\"ui-button-raised ui-button-secondary\">\n </button>\n <button\n pButton\n label=\"{{primaryButtonLabel}}\"\n type=\"submit\"\n id=\"submit-button\"\n (click)=\"onPrimary()\"\n [pTooltip]=\"primaryButtonTooltip\"\n tooltipPosition=\"top\"\n showDelay=\"500\"\n class=\"ui-button-raised\">\n </button>\n </div>\n </div>\n</div>\n</div>", styles: [".s-spotlight-overlay{display:flex;position:fixed;z-index:10;left:0;top:0;width:100%;height:100%;overflow:auto;background-color:#000;background-color:#0006}.s-spotlight{border-radius:3px;background:#fff;margin:auto;overflow:hidden;animation:move .15s forwards}.s-spotlight-header,.s-spotlight-footer{display:flex;padding:15px}.s-spotlight-header{align-items:center;justify-content:space-between}.s-spotlight-footer,.s-spotlight-footer-right,.s-spotlight-footer-left{display:flex}.s-spotlight-footer-right{flex:2;justify-content:flex-end}.s-spotlight-footer-left{flex:1;justify-content:flex-start}.s-spotlight-title{font-family:Open Sans,sans-serif;font-size:16px;font-weight:400;color:#333}.s-spotlight-close{display:block;margin-left:15px;color:#000}.s-img{width:100%;display:flex;align-items:center;justify-content:center}.s-img img{width:100%}.s-effect-fadein{animation:fade .15s forwards}@keyframes fade{0%{opacity:0}to{opacity:1}}@media (max-width: 595px){.s-spotlight-footer,.s-spotlight-footer-right,.s-spotlight-footer-left{align-items:center;flex-direction:column-reverse}.s-spotlight-footer button{margin:0 0 15px!important;width:100%!important}}@media (min-width: 576px){.s-spotlight{width:100%}}@media (min-width: 768px){.s-spotlight{width:720px}.s-spotlight-footer,.s-spotlight-footer-right,.s-spotlight-footer-left{flex-direction:row}}@media (min-width: 992px){.s-spotlight{width:960px}}@media (min-width: 1200px){.s-spotlight{width:50%}}\n"], dependencies: [{ kind: "directive", type: i1.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain", "fluid", "label", "icon", "buttonProps"] }, { kind: "directive", type: i2.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }] });
|
|
261
|
+
}
|
|
262
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SpotlightComponent, decorators: [{
|
|
263
|
+
type: Component,
|
|
264
|
+
args: [{ selector: 's-spotlight', template: "<div class=\"s-spotlight-overlay\" id=\"ol\" *ngIf=\"canAppear && visible\">\n <div class=\"s-spotlight\" id=\"sl\" [ngClass]=\"{'s-effect-fadein': fade}\">\n <div class=\"s-spotlight-header\">\n <span class=\"s-spotlight-title\">{{header.toUpperCase()}}</span>\n <a role=\"button\" class=\"s-spotlight-close\" (click)=\"close()\"><span class=\"fa fa-times\" aria-hidden=\"true\"></span></a>\n </div>\n <div class=\"s-img\">\n <img src=\"{{imgUrl}}\">\n </div>\n <div class=\"s-spotlight-footer\">\n <div class=\"s-spotlight-footer-left\">\n <button\n pButton\n type=\"submit\"\n id=\"decline-button\"\n label=\"{{'platform.spotlight.no_interest' | translate}}\"\n (click)=\"onTertiary()\"\n class=\"ui-button-link\">\n </button>\n </div>\n <div class=\"s-spotlight-footer-right\">\n <button\n pButton\n type=\"submit\"\n id=\"remember-button\"\n label=\"{{'platform.spotlight.remember_late' | translate}}\"\n (click)=\"onSecondary()\"\n class=\"ui-button-raised ui-button-secondary\">\n </button>\n <button\n pButton\n label=\"{{primaryButtonLabel}}\"\n type=\"submit\"\n id=\"submit-button\"\n (click)=\"onPrimary()\"\n [pTooltip]=\"primaryButtonTooltip\"\n tooltipPosition=\"top\"\n showDelay=\"500\"\n class=\"ui-button-raised\">\n </button>\n </div>\n </div>\n</div>\n</div>", styles: [".s-spotlight-overlay{display:flex;position:fixed;z-index:10;left:0;top:0;width:100%;height:100%;overflow:auto;background-color:#000;background-color:#0006}.s-spotlight{border-radius:3px;background:#fff;margin:auto;overflow:hidden;animation:move .15s forwards}.s-spotlight-header,.s-spotlight-footer{display:flex;padding:15px}.s-spotlight-header{align-items:center;justify-content:space-between}.s-spotlight-footer,.s-spotlight-footer-right,.s-spotlight-footer-left{display:flex}.s-spotlight-footer-right{flex:2;justify-content:flex-end}.s-spotlight-footer-left{flex:1;justify-content:flex-start}.s-spotlight-title{font-family:Open Sans,sans-serif;font-size:16px;font-weight:400;color:#333}.s-spotlight-close{display:block;margin-left:15px;color:#000}.s-img{width:100%;display:flex;align-items:center;justify-content:center}.s-img img{width:100%}.s-effect-fadein{animation:fade .15s forwards}@keyframes fade{0%{opacity:0}to{opacity:1}}@media (max-width: 595px){.s-spotlight-footer,.s-spotlight-footer-right,.s-spotlight-footer-left{align-items:center;flex-direction:column-reverse}.s-spotlight-footer button{margin:0 0 15px!important;width:100%!important}}@media (min-width: 576px){.s-spotlight{width:100%}}@media (min-width: 768px){.s-spotlight{width:720px}.s-spotlight-footer,.s-spotlight-footer-right,.s-spotlight-footer-left{flex-direction:row}}@media (min-width: 992px){.s-spotlight{width:960px}}@media (min-width: 1200px){.s-spotlight{width:50%}}\n"] }]
|
|
265
|
+
}], propDecorators: { visible: [{
|
|
266
|
+
type: Input
|
|
267
|
+
}], menuId: [{
|
|
268
|
+
type: Input
|
|
269
|
+
}], fade: [{
|
|
270
|
+
type: Input
|
|
271
|
+
}], visibleChange: [{
|
|
272
|
+
type: Output
|
|
273
|
+
}] } });
|
|
274
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BvdGxpZ2h0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYi9zcmMvbW9kdWxlcy9zcG90bGlnaHQvY29tcG9uZW50L3Nwb3RsaWdodC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWIvc3JjL21vZHVsZXMvc3BvdGxpZ2h0L2NvbXBvbmVudC9zcG90bGlnaHQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRTFELE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2hFLE9BQU8sRUFHTCxlQUFlLEVBQ2YsbUJBQW1CLEVBS3BCLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7Ozs7O0FBT25ELE1BQU0sT0FBTyxrQkFBa0I7SUFDWixnQkFBZ0IsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUM1QyxhQUFhLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3RDLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7SUFHdEMsTUFBTSxDQUFTO0lBQ2YsTUFBTSxDQUFTO0lBQ2Ysa0JBQWtCLENBQVM7SUFDM0Isb0JBQW9CLENBQVM7SUFDN0IsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUVqQixXQUFXLENBQVM7SUFDcEIsa0JBQWtCLENBQXFCO0lBQ3ZDLHFCQUFxQixDQUF1QjtJQUM1QyxlQUFlLENBQWtCO0lBQ2pDLFlBQVksQ0FBVTtJQUd2QixP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TTtzQkFEWixLQUFLO2dCQUlDLElBQUk7c0JBRFYsS0FBSztnQkFJQyxhQUFhO3NCQURuQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVXNlckFjdGlvbiB9IGZyb20gJy4vLi4vbW9kZWxzL3VzZXItYWN0aW9uLmVudW0nO1xuaW1wb3J0IHsgU3BvdGxpZ2h0Tm90aWZpY2F0aW9uIH0gZnJvbSAnLi8uLi9tb2RlbHMvc3BvdGxpZ2h0LW5vdGlmaWNhdGlvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTcG90bGlnaHRTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZS9zcG90bGlnaHQuc2VydmljZSc7XG5pbXBvcnQge1xuICBTcG90bGlnaHQsXG4gIFNwb3RsaWdodFNjcmVlbixcbiAgRW51bURpc3BsYXlUeXBlLFxuICBFbnVtU3BvdGxpZ2h0U3RhdHVzLFxuICBTcG90bGlnaHRDb250cm9sTGlzdCxcbiAgU3BvdGxpZ2h0VXNlcnNMaXN0LFxuICBTcG90bGlnaHRVc2VyLFxuICBTcG90bGlnaHRDb250cm9sXG59IGZyb20gJy4uL21vZGVscy9pbmRleCc7XG5pbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb29raWVTZXJ2aWNlIH0gZnJvbSAnbmd4LWNvb2tpZS1zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncy1zcG90bGlnaHQnLFxuICB0ZW1wbGF0ZVVybDogJy4vc3BvdGxpZ2h0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc3BvdGxpZ2h0LmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgU3BvdGxpZ2h0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgcHJpdmF0ZSByZWFkb25seSBzcG90bGlnaHRTZXJ2aWNlID0gaW5qZWN0KFNwb3RsaWdodFNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IGNvb2tpZVNlcnZpY2UgPSBpbmplY3QoQ29va2llU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGF0ZVBpcGUgPSBpbmplY3QoRGF0ZVBpcGUpO1xuXG5cbiAgcHVibGljIGhlYWRlcjogc3RyaW5nO1xuICBwdWJsaWMgaW1nVXJsOiBzdHJpbmc7XG4gIHB1YmxpYyBwcmltYXJ5QnV0dG9uTGFiZWw6IHN0cmluZztcbiAgcHVibGljIHByaW1hcnlCdXR0b25Ub29sdGlwOiBzdHJpbmc7XG4gIHB1YmxpYyBjYW5BcHBlYXIgPSBmYWxzZTtcblxuICBwcml2YXRlIGN1cnJlbnRVc2VyOiBzdHJpbmc7XG4gIHByaXZhdGUgc3BvdGxpZ2h0VXNlcnNMaXN0OiBTcG90bGlnaHRVc2Vyc0xpc3Q7XG4gIHByaXZhdGUgc3BvdGxpZ2h0Q29udHJvbHNMaXN0OiBTcG90bGlnaHRDb250cm9sTGlzdDtcbiAgcHJpdmF0ZSBzcG90bGlnaHRTY3JlZW46IFNwb3RsaWdodFNjcmVlbjtcbiAgcHJpdmF0ZSBjYW5FbWl0RXZlbnQ6IGJvb2xlYW47XG5cbiAgQElucHV0KClcbiAgcHVibGljIHZpc2libGUgPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgbWVudUlkOiBzdHJpbmc7XG5cbiAgQElucHV0KClcbiAgcHVibGljIGZhZGUgPSBmYWxzZTtcblxuICBAT3V0cHV0KClcbiAgcHVibGljIHZpc2libGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgYXN5bmMgbmdPbkluaXQoKSB7XG4gICAgYXdhaXQgdGhpcy5zZXRWYWx1ZXMoKTtcbiAgICB0aGlzLmZldGNoU3BvdGxpZ2h0KCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNldFZhbHVlcygpIHtcbiAgICBjb25zdCB1c2VyRGF0YTogYW55ID0gSlNPTi5wYXJzZSh0aGlzLmNvb2tpZVNlcnZpY2UuZ2V0KCdjb20uc2VuaW9yLnRva2VuJykpO1xuICAgIHRoaXMuY3VycmVudFVzZXIgPSB1c2VyRGF0YS51c2VybmFtZTtcbiAgICB0aGlzLnNwb3RsaWdodFVzZXJzTGlzdCA9IGF3YWl0IHRoaXMuc3BvdGxpZ2h0U2VydmljZS5saXN0U3BvdGxpZ2h0VXNlcnMoKTtcbiAgICB0aGlzLnNwb3RsaWdodENvbnRyb2xzTGlzdCA9IGF3YWl0IHRoaXMuc3BvdGxpZ2h0U2VydmljZS5saXN0U3BvdGxpZ2h0Q29udHJvbCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRWYWx1ZXNJblNwb3RsaWdodCh2YWx1ZXM6IFNwb3RsaWdodCk6IHZvaWQge1xuICAgIHRoaXMuaGVhZGVyID0gdmFsdWVzLnNwb3RsaWdodFRpdGxlO1xuICAgIHRoaXMuaW1nVXJsID0gdmFsdWVzLmJhbm5lclVybDtcbiAgICB0aGlzLnByaW1hcnlCdXR0b25MYWJlbCA9IHZhbHVlcy5wcmltYXJ5QnV0dG9uTGFiZWw7XG4gICAgdGhpcy5wcmltYXJ5QnV0dG9uVG9vbHRpcCA9IHZhbHVlcy5wcmltYXJ5QnV0dG9uSGludDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U2hvd0RhdGUoZGF5czogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBjb25zdCBjdXJyZW50RGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgcmV0dXJuIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGN1cnJlbnREYXRlLnNldERhdGUoY3VycmVudERhdGUuZ2V0RGF0ZSgpICsgZGF5cykudG9TdHJpbmcoKSwgJ3l5eXktTU0tZGQnKTtcbiAgfVxuXG4gIHByaXZhdGUgZmV0Y2hTcG90bGlnaHQoKTogdm9pZCB7XG4gICAgdGhpcy5zcG90bGlnaHRTZXJ2aWNlLmxpc3RTcG90bGlnaHRTY3JlZW4oKS5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgdGhpcy5zcG90bGlnaHRTY3JlZW4gPSB2YWx1ZS5jb250ZW50cy5maWx0ZXIodmFsID0+IHZhbC5zY3JlZW5NZW51SWQgPT09IHRoaXMubWVudUlkKVswXTtcbiAgICAgIGlmICh0aGlzLnNwb3RsaWdodFNjcmVlbikge1xuICAgICAgICB0aGlzLnNob3dTcG90bGlnaHQodGhpcy5zcG90bGlnaHRTY3JlZW4uc3BvdGxpZ2h0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2hvd1Nwb3RsaWdodChzcG90bGlnaHQ6IFNwb3RsaWdodCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnZhbGlkYXRlRGF0ZShzcG90bGlnaHQuaW5pdGlhbERhdGUpICYmIHRoaXMudmFsaWRhdGVGaW5hbERhdGUoc3BvdGxpZ2h0LmZpbmFsRGF0ZSkgJiYgdGhpcy52YWxpZGF0ZVNwb3RsaWdodChzcG90bGlnaHQpKSB7XG4gICAgICB0aGlzLnNldFZhbHVlc0luU3BvdGxpZ2h0KHNwb3RsaWdodCk7XG4gICAgICB0aGlzLmNhbkFwcGVhciA9IHRydWU7XG4gICAgICBjb25zdCBjb250cm9sID0gdGhpcy5nZXRTcG90bGlnaHRDb250cm9sRnJvbUxpc3QodGhpcy5zcG90bGlnaHRTY3JlZW4uc3BvdGxpZ2h0LmlkKTtcbiAgICAgIHRoaXMuY2FuRW1pdEV2ZW50ID0gIWNvbnRyb2wgfHwgdGhpcy5jdXJyZW50VXNlciAhPT0gY29udHJvbC5maXJzdFVzZXI7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZURhdGUoZGF0ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKGRhdGUpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnREYXRlID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0obmV3IERhdGUoKS50b1N0cmluZygpLCAneXl5eS1NTS1kZCcpO1xuICAgICAgY29uc3QgaW5pdGlhbERhdGUgPSB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShkYXRlLCAneXl5eS1NTS1kZCcpO1xuXG4gICAgICByZXR1cm4gY3VycmVudERhdGUgPj0gaW5pdGlhbERhdGU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgdmFsaWRhdGVGaW5hbERhdGUoZGF0ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKGRhdGUpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnREYXRlID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0obmV3IERhdGUoKS50b1N0cmluZygpLCAneXl5eS1NTS1kZCcpO1xuICAgICAgY29uc3QgZmluYWxEYXRlID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oZGF0ZSwgJ3l5eXktTU0tZGQnKTtcblxuICAgICAgcmV0dXJuIGN1cnJlbnREYXRlIDw9IGZpbmFsRGF0ZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwcml2YXRlIHZhbGlkYXRlU3BvdGxpZ2h0KHNwb3RsaWdodDogU3BvdGxpZ2h0KTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLnZhbGlkYXRlQ29udHJvbHNMaXN0KHRoaXMuc3BvdGxpZ2h0Q29udHJvbHNMaXN0LCBzcG90bGlnaHQsIHRoaXMuY3VycmVudFVzZXIpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICghdGhpcy52YWxpZGF0ZURpc3BsYXlUeXBlKHNwb3RsaWdodCwgdGhpcy5zcG90bGlnaHRVc2Vyc0xpc3QsIHRoaXMuc3BvdGxpZ2h0Q29udHJvbHNMaXN0LCB0aGlzLmN1cnJlbnRVc2VyKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgdmFsaWRhdGVDb250cm9sc0xpc3QoY29udHJvbHNMaXN0OiBTcG90bGlnaHRDb250cm9sTGlzdCwgc3BvdGxpZ2h0OiBTcG90bGlnaHQsIGN1cnJlbnRVc2VyOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAoY29udHJvbHNMaXN0LnRvdGFsRWxlbWVudHMpIHtcblxuICAgICAgY29uc3Qgbm90Q29tcGF0aWJsZUNvbnRyb2xzID0gY29udHJvbHNMaXN0LmNvbnRlbnRzLmZpbHRlcihjb250cm9sID0+IHtcbiAgICAgICAgaWYgKGNvbnRyb2wuc3RhdHVzID09PSBFbnVtU3BvdGxpZ2h0U3RhdHVzLkFDVElWRSkge1xuICAgICAgICAgIHJldHVybiBjb250cm9sLnNwb3RsaWdodElkID09PSBzcG90bGlnaHQuaWQ7XG5cbiAgICAgICAgfSBlbHNlIGlmIChjb250cm9sLnN0YXR1cyA9PT0gRW51bVNwb3RsaWdodFN0YXR1cy5JTl9QUk9HUkVTUykge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRyb2wuc3BvdGxpZ2h0SWQgPT09IHNwb3RsaWdodC5pZCAmJiBjb250cm9sLmZpcnN0VXNlciAhPT0gY3VycmVudFVzZXI7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBpZiAobm90Q29tcGF0aWJsZUNvbnRyb2xzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgdmFsaWRhdGVEaXNwbGF5VHlwZShcbiAgICBzcG90bGlnaHQ6IFNwb3RsaWdodCxcbiAgICB1c2Vyc0xpc3Q6IFNwb3RsaWdodFVzZXJzTGlzdCxcbiAgICBjb250cm9sc0xpc3Q6IFNwb3RsaWdodENvbnRyb2xMaXN0LFxuICAgIGN1cnJlbnRVc2VyOiBzdHJpbmdcbiAgKTogYm9vbGVhbiB7XG5cbiAgICBzd2l0Y2ggKHNwb3RsaWdodC5kaXNwbGF5VHlwZSkge1xuICAgICAgY2FzZSBFbnVtRGlzcGxheVR5cGUuQURWRVJTSVRJTkc6XG4gICAgICAgIHJldHVybiB1c2Vyc0xpc3QudG90YWxFbGVtZW50cyA/IHRoaXMudmFsaWRhdGVVc2VyKHVzZXJzTGlzdC5jb250ZW50cywgc3BvdGxpZ2h0KSA6IHRydWU7XG5cbiAgICAgIGNhc2UgRW51bURpc3BsYXlUeXBlLklOVEVHUkFUSU9OOlxuXG4gICAgICAgIGlmIChjb250cm9sc0xpc3QudG90YWxFbGVtZW50cykge1xuICAgICAgICAgIGNvbnN0IGNvbXBhdGlibGVDb250cm9scyA9IGNvbnRyb2xzTGlzdC5jb250ZW50cy5maWx0ZXIoY29udHJvbCA9PiB7XG5cbiAgICAgICAgICAgICAgc3dpdGNoIChjb250cm9sLnN0YXR1cykge1xuXG4gICAgICAgICAgICAgICAgY2FzZSBFbnVtU3BvdGxpZ2h0U3RhdHVzLk5PX1NUQVJURUQ6XG4gICAgICAgICAgICAgICAgICByZXR1cm4gY29udHJvbC5zcG90bGlnaHRJZCA9PT0gc3BvdGxpZ2h0LmlkO1xuXG4gICAgICAgICAgICAgICAgY2FzZSBFbnVtU3BvdGxpZ2h0U3RhdHVzLlJFRlVTRUQ6XG4gICAgICAgICAgICAgICAgICByZXR1cm4gdXNlcnNMaXN0LnRvdGFsRWxlbWVudHMgPyB0aGlzLnZhbGlkYXRlVXNlcih1c2Vyc0xpc3QuY29udGVudHMsIHNwb3RsaWdodCkgOiB0cnVlO1xuXG4gICAgICAgICAgICAgICAgY2FzZSBFbnVtU3BvdGxpZ2h0U3RhdHVzLklOX1BST0dSRVNTOlxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRyb2wuZmlyc3RVc2VyID09PSBjdXJyZW50VXNlclxuICAgICAgICAgICAgICAgICAgICAmJiBjb250cm9sLnNwb3RsaWdodElkID09PSBzcG90bGlnaHQuaWQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAoY29tcGF0aWJsZUNvbnRyb2xzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHZhbGlkYXRlVXNlcih1c2VyczogU3BvdGxpZ2h0VXNlcltdLCBzcG90bGlnaHQ6IFNwb3RsaWdodCk6IGJvb2xlYW4ge1xuICAgIGxldCBzcG90bGlnaHRVc2VycyA9IHVzZXJzLmZpbHRlcih1c2VyID0+IHVzZXIuc3BvdGxpZ2h0SWQgPT09IHNwb3RsaWdodC5pZCk7XG5cbiAgICBpZiAoIXNwb3RsaWdodFVzZXJzLmxlbmd0aCkge1xuICAgICAgc3BvdGxpZ2h0VXNlcnMgPSB1c2Vycy5maWx0ZXIodXNlciA9PiB1c2VyLnVzZXJPcGVyYXRpb24gPT09IHRoaXMuY3VycmVudFVzZXIpO1xuXG4gICAgICByZXR1cm4gc3BvdGxpZ2h0VXNlcnMubGVuZ3RoID09PSAwO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbXBhdGlibGVVc2VyVG9WYWxpZGF0ZSA9IHNwb3RsaWdodFVzZXJzLmZpbHRlcih1c2VyID0+IHVzZXIudXNlck9wZXJhdGlvbiA9PT0gdGhpcy5jdXJyZW50VXNlcilbMF07XG5cbiAgICByZXR1cm4gY29tcGF0aWJsZVVzZXJUb1ZhbGlkYXRlID8gdGhpcy52YWxpZGF0ZURhdGUoY29tcGF0aWJsZVVzZXJUb1ZhbGlkYXRlLnNob3dEYXRlKSA6IHRydWU7XG4gIH1cblxuICBwcml2YXRlIHNhdmVTcG90bGlnaHRVc2VyKGRheXM/OiBudW1iZXIpOiB2b2lkIHtcblxuICAgIGNvbnN0IHNwb3RsaWdodCA9IHRoaXMuc3BvdGxpZ2h0U2NyZWVuLnNwb3RsaWdodDtcblxuICAgIGNvbnN0IHVzZXIgPSB0aGlzLnNwb3RsaWdodFVzZXJzTGlzdC5jb250ZW50cy5maWx0ZXIodmFsID0+IHtcbiAgICAgIHJldHVybiB2YWwuc3BvdGxpZ2h0SWQgPT09IHNwb3RsaWdodC5pZFxuICAgICAgICAmJiB2YWwudXNlck9wZXJhdGlvbiA9PT0gdGhpcy5jdXJyZW50VXNlcjtcbiAgICB9KVswXTtcblxuICAgIGxldCBzcG90bGlnaHRVc2VyOiBTcG90bGlnaHRVc2VyID0ge1xuICAgICAgc3BvdGxpZ2h0SWQ6IHNwb3RsaWdodC5pZCxcbiAgICAgIHNob3dEYXRlOiBkYXlzID8gdGhpcy5nZXRTaG93RGF0ZShkYXlzKSA6IG51bGwsXG4gICAgICB1c2VyT3BlcmF0aW9uOiB0aGlzLmN1cnJlbnRVc2VyXG4gICAgfTtcblxuICAgIGlmICh1c2VyKSB7XG4gICAgICBzcG90bGlnaHRVc2VyID0ge1xuICAgICAgICBpZDogdXNlci5pZCxcbiAgICAgICAgLi4uc3BvdGxpZ2h0VXNlclxuICAgICAgfTtcbiAgICB9XG4gICAgdGhpcy5zcG90bGlnaHRTZXJ2aWNlLnNhdmVTcG90bGlnaHRVc2VyKHNwb3RsaWdodFVzZXIpLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHVibGljIG9uUHJpbWFyeSgpIHtcbiAgICBjb25zdCBzcG90bGlnaHQgPSB0aGlzLnNwb3RsaWdodFNjcmVlbi5zcG90bGlnaHQ7XG4gICAgY29uc3Qgbm90aWZpY2F0aW9uID0gdGhpcy5idWlsZE5vdGlmaWNhdGlvbihVc2VyQWN0aW9uLkNPTkZJUk1FRCk7XG5cbiAgICB0aGlzLnNhdmVTcG90bGlnaHRDb250cm9sKCk7XG4gICAgdGhpcy5zYXZlU3BvdGxpZ2h0VXNlcigpO1xuXG4gICAgaWYgKHRoaXMuY2FuRW1pdEV2ZW50KSB7XG4gICAgICB0aGlzLnNwb3RsaWdodFNlcnZpY2Uubm90aWZpY2F0ZVNwb3RsaWdodChub3RpZmljYXRpb24pLnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIGlmIChzcG90bGlnaHQucHJpbWFyeUJ1dHRvblVybCkge1xuICAgICAgd2luZG93Lm9wZW4oc3BvdGxpZ2h0LnByaW1hcnlCdXR0b25VcmwpO1xuICAgIH1cblxuICAgIHRoaXMuY2xvc2UoKTtcbiAgfVxuXG4gIHB1YmxpYyBvblNlY29uZGFyeSgpOiB2b2lkIHtcbiAgICBjb25zdCBub3RpZmljYXRpb24gPSB0aGlzLmJ1aWxkTm90aWZpY2F0aW9uKFVzZXJBY3Rpb24uUE9TVFBPTkVEKTtcblxuICAgIHRoaXMuc2F2ZVNwb3RsaWdodENvbnRyb2woRW51bVNwb3RsaWdodFN0YXR1cy5SRUZVU0VEKTtcbiAgICB0aGlzLnNhdmVTcG90bGlnaHRVc2VyKHRoaXMuc3BvdGxpZ2h0U2NyZWVuLnNwb3RsaWdodC5kYXlzUmVtZW1iZXJMYXRlKTtcbiAgICB0aGlzLnNwb3RsaWdodFNlcnZpY2Uubm90aWZpY2F0ZVNwb3RsaWdodChub3RpZmljYXRpb24pLnN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy5jbG9zZSgpO1xuICB9XG5cbiAgcHVibGljIG9uVGVydGlhcnkoKTogdm9pZCB7XG4gICAgY29uc3Qgbm90aWZpY2F0aW9uID0gdGhpcy5idWlsZE5vdGlmaWNhdGlvbihVc2VyQWN0aW9uLlJFRlVTRUQpO1xuXG4gICAgdGhpcy5zYXZlU3BvdGxpZ2h0Q29udHJvbChFbnVtU3BvdGxpZ2h0U3RhdHVzLlJFRlVTRUQpO1xuICAgIHRoaXMuc2F2ZVNwb3RsaWdodFVzZXIodGhpcy5zcG90bGlnaHRTY3JlZW4uc3BvdGxpZ2h0LmRheXNOb3RJbnRlcmVzdGVkKTtcbiAgICB0aGlzLnNwb3RsaWdodFNlcnZpY2Uubm90aWZpY2F0ZVNwb3RsaWdodChub3RpZmljYXRpb24pLnN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy5jbG9zZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWNhIHNlIHVtIHJlZ2lzdHJvIGRlIHVzdcOhcmlvIHBlcnRlbmNlIGFvIHVzdcOhcmlvIGxvZ2FkbyBlIGNvcnJlc3BvbmRlIGFvIHNwb3RsaWdodCBhdHVhbFxuICAgKiBAcGFyYW0gdXNlciBTcG90bGlnaHRVc2VyIE9iamV0byByZXByZXNlbnRhbmRvIG8gcmVnaXN0cm8gZG8gdXN1w6FyaW8gcGFyYSB1bWEgc3BvdGxpZ2h0XG4gICAqIEBwYXJhbSBzcG90bGlnaHQgU3BvdGxpZ2h0IFNwb3RsaWdodFxuICAgKiBAcmV0dXJucyBib29sZWFuIHRydWUgc2UgY29ycmVzcG9uZGVyIGFvIHNwb3RsaWdodCBhdHVhbCwgZmFsc2UgY2FzbyBjb250csOhcmlvXG4gICAqL1xuICBwcml2YXRlIGhhc1RoaXNSZWdpc3Rlcih1c2VyOiBTcG90bGlnaHRVc2VyLCBzcG90bGlnaHQ6IFNwb3RsaWdodCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAodXNlci5zcG90bGlnaHRJZCA9PT0gc3BvdGxpZ2h0LmlkICYmIHVzZXIudXNlck9wZXJhdGlvbiA9PT0gdGhpcy5jdXJyZW50VXNlcik7XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZpY2Egc2UgdW0gcmVnaXN0cm8gZGUgdXN1w6FyaW8gcGVydGVjZSBhbyB1c3XDoXJpbyBsb2dhZG8sIG1hcyBuw6NvIGNvcnJlc3BvbmRlIGFvIHNwb3RsaWdodCBhdHVhbFxuICAgKiBAcGFyYW0gdXNlciBTcG90bGlnaHRVc2VyIE9iamV0byByZXByZXNlbnRhbmRvIG8gcmVnaXN0cm8gZG8gdXN1w6FyaW8gcGFyYSB1bWEgc3BvdGxpZ2h0XG4gICAqIEBwYXJhbSBzcG90bGlnaHQgU3BvdGxpZ2h0IFNwb3RsaWdodFxuICAgKiBAcmV0dXJucyBib29sZWFuIHRydWUgc2UgY29ycmVzcG9uZGVyIGFvIHNwb3RsaWdodCBhdHVhbCwgZmFsc2UgY2FzbyBjb250csOhcmlvXG4gICAqL1xuICBwcml2YXRlIGhhc0Fub3RoZXJSZWdpc3Rlcih1c2VyOiBTcG90bGlnaHRVc2VyLCBzcG90bGlnaHQ6IFNwb3RsaWdodCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB1c2VyLnNwb3RsaWdodElkICE9PSBzcG90bGlnaHQuaWQgJiYgdXNlci51c2VyT3BlcmF0aW9uID09PSB0aGlzLmN1cnJlbnRVc2VyO1xuICB9XG5cbiAgLyoqXG4gICAqIFBlcnNpc3RlIHVtIG5vdm8gcmVnaXN0cm8gZGUgY29udHJvbGUgcGFyYSBvIHNwb3RsaWdodCBhdHVhbCBzZVxuICAgKiBuw6NvIGZvciBlbmNvbnRyYWRvIG5lbmh1bSBuYSBsaXN0YSBkZSBjb250cm9sZXMgY2FycmVnYWRhIGluaWNpYWxtZW50ZVxuICAgKiBAcGFyYW0gc3RhdHVzIEVudW1TcG90bGlnaHRTdGF0dXMgU3RhdHVzIGRvIGNvbnRyb2xlIGRvIHNwb3RsaWdodC4gU2UgbmVuaHVtIGZvciBpbmZvcm1hZG8sIElOX1BST0dSRVNTIHNlcsOhIGFwbGljYWRvXG4gICAqIEByZXR1cm5zIFNwb3RsaWdodENvbnRyb2wgQ29udHJvbGUgZG8gc3BvdGxpZ2h0IHJlY3VwZXJhZG8vcGVzaXN0aWRvXG4gICAqL1xuICBwcml2YXRlIHNhdmVTcG90bGlnaHRDb250cm9sKHN0YXR1cyA9IEVudW1TcG90bGlnaHRTdGF0dXMuSU5fUFJPR1JFU1MpOiBTcG90bGlnaHRDb250cm9sIHtcbiAgICBjb25zdCBzcG90bGlnaHQgPSB0aGlzLnNwb3RsaWdodFNjcmVlbi5zcG90bGlnaHQ7XG4gICAgbGV0IGNvbnRyb2w6IFNwb3RsaWdodENvbnRyb2wgPSB0aGlzLmdldFNwb3RsaWdodENvbnRyb2xGcm9tTGlzdChzcG90bGlnaHQuaWQpO1xuXG4gICAgaWYgKCFjb250cm9sKSB7XG4gICAgICBjb250cm9sID0ge1xuICAgICAgICBzcG90bGlnaHRJZDogc3BvdGxpZ2h0LmlkLFxuICAgICAgICBzdGF0dXM6IHN0YXR1cyxcbiAgICAgICAgZmlyc3RVc2VyOiB0aGlzLmN1cnJlbnRVc2VyXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzTmV3Q29udHJvbChjb250cm9sKSB8fCBjb250cm9sLnN0YXR1cyAhPT0gRW51bVNwb3RsaWdodFN0YXR1cy5JTl9QUk9HUkVTUykge1xuICAgICAgY29udHJvbC5zdGF0dXMgPSBzdGF0dXM7XG4gICAgICBjb250cm9sLmZpcnN0VXNlciA9IHN0YXR1cyA9PT0gRW51bVNwb3RsaWdodFN0YXR1cy5JTl9QUk9HUkVTUyA/IHRoaXMuY3VycmVudFVzZXIgOiAnJztcbiAgICAgIHRoaXMuc3BvdGxpZ2h0U2VydmljZS5zYXZlU3BvdGxpZ2h0Q29udHJvbChjb250cm9sKS5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29udHJvbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRvcm5hIG8gY29udHJvbGUgZGUgc3BvdGxpZ2h0IGNvcnJlc3BvbmRlbnRlIGFvIGlkZW50aWZpY2Fkb3JcbiAgICogaW5mb3JtYWRvIG5hIGxpc3RhIGRlIGNvbnRyb2xlcyBjYXJyZWdhZGEgbmEgaW5pY2lhbGl6YcOnw6NvIGRvIGNvbXBvbmVudGVcbiAgICogQHBhcmFtIGlkIHN0cmluZyBJZGVudGlmaWNhZG9yIGRvIGNvbnRyb2xlIGRlIHNwb3RsaWdodFxuICAgKi9cbiAgcHJpdmF0ZSBnZXRTcG90bGlnaHRDb250cm9sRnJvbUxpc3QoaWQ6IHN0cmluZyk6IFNwb3RsaWdodENvbnRyb2wge1xuICAgIHJldHVybiB0aGlzLnNwb3RsaWdodENvbnRyb2xzTGlzdC5jb250ZW50cy5maWx0ZXIodmFsID0+ICB2YWwuc3BvdGxpZ2h0SWQgPT09IGlkKVswXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZmljYSBzZSBvIGNvbnRyb2xlIGRlIHNwb3RsaWdodCBpbmZvcm1hZG8gbsOjbyBmb2kgcmVnaXN0cmFkbyBhaW5kYVxuICAgKiBAcGFyYW0gc3BvdGxpZ2h0Q29udHJvbCBTcG90bGlnaHRDb250cm9sIENvbnRyb2xlIGRvIHNwb3RsaWdodFxuICAgKiBAcmV0dXJucyBib29sZWFuIHRydWUgc2UgYWluZGEgbsOjbyBmb2kgcmVnaXN0cmFkbyBuYSBiYXNlLCBmYWxzZSBjYXNvIGNvbnRyw6FyaW9cbiAgICovXG4gIHByaXZhdGUgaXNOZXdDb250cm9sKHNwb3RsaWdodENvbnRyb2w6IFNwb3RsaWdodENvbnRyb2wpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMuc3BvdGxpZ2h0Q29udHJvbHNMaXN0LmNvbnRlbnRzLmluY2x1ZGVzKHNwb3RsaWdodENvbnRyb2wpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldG9ybmEgdW0gb2JqZXRvIGRlIG5vdGlmaWNhw6fDo28gcmVmZXJlbnRlIGFvIGJvdMOjbyBjbGljYWRvIHBlbG8gdXN1w6FyaW8uXG4gICAqIEBwYXJhbSB1c2VyQWN0aW9uIFVzZXJBY3Rpb24gQcOnw6NvIHJlYWxpemFkYSBwZWxvIHVzdcOhcmlvIGFvIGNsaWNhciBub3MgYm90w7VlcyBkYSBtb2RhbFxuICAgKiBAcmV0dXJucyBTcG90bGlnaHROb3RpZmljYXRpb24gT2JqZXRvIGRlIG5vdGlmaWNhw6fDo29cbiAgICovXG4gIHByaXZhdGUgYnVpbGROb3RpZmljYXRpb24odXNlckFjdGlvbjogVXNlckFjdGlvbik6IFNwb3RsaWdodE5vdGlmaWNhdGlvbiB7XG4gICAgY29uc3Qgc3BvdGxpZ2h0ID0gdGhpcy5zcG90bGlnaHRTY3JlZW4uc3BvdGxpZ2h0O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNsaWNrZWRCdXR0b246IHVzZXJBY3Rpb24sXG4gICAgICBzcG90bGlnaHRDb250cm9sSWQ6IHNwb3RsaWdodC5pZCxcbiAgICAgIHByaW1hcnlCdXR0b25Vcmw6IHNwb3RsaWdodC5wcmltYXJ5QnV0dG9uVXJsXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBjbG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLnZpc2libGVDaGFuZ2UuZW1pdChmYWxzZSk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJzLXNwb3RsaWdodC1vdmVybGF5XCIgaWQ9XCJvbFwiICpuZ0lmPVwiY2FuQXBwZWFyICYmIHZpc2libGVcIj5cbiAgICA8ZGl2IGNsYXNzPVwicy1zcG90bGlnaHRcIiBpZD1cInNsXCIgW25nQ2xhc3NdPVwieydzLWVmZmVjdC1mYWRlaW4nOiBmYWRlfVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicy1zcG90bGlnaHQtaGVhZGVyXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInMtc3BvdGxpZ2h0LXRpdGxlXCI+e3toZWFkZXIudG9VcHBlckNhc2UoKX19PC9zcGFuPlxuICAgICAgICAgICAgPGEgcm9sZT1cImJ1dHRvblwiIGNsYXNzPVwicy1zcG90bGlnaHQtY2xvc2VcIiAoY2xpY2spPVwiY2xvc2UoKVwiPjxzcGFuIGNsYXNzPVwiZmEgZmEtdGltZXNcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L3NwYW4+PC9hPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInMtaW1nXCI+XG4gICAgICAgICAgICA8aW1nIHNyYz1cInt7aW1nVXJsfX1cIj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzLXNwb3RsaWdodC1mb290ZXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzLXNwb3RsaWdodC1mb290ZXItbGVmdFwiPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgcEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwic3VibWl0XCJcbiAgICAgICAgICAgICAgICAgICAgaWQ9XCJkZWNsaW5lLWJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsPVwie3sncGxhdGZvcm0uc3BvdGxpZ2h0Lm5vX2ludGVyZXN0JyB8IHRyYW5zbGF0ZX19XCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uVGVydGlhcnkoKVwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidWktYnV0dG9uLWxpbmtcIj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInMtc3BvdGxpZ2h0LWZvb3Rlci1yaWdodFwiPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBwQnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICAgICAgICAgICAgaWQ9XCJyZW1lbWJlci1idXR0b25cIlxuICAgICAgICAgICAgICAgIGxhYmVsPVwie3sncGxhdGZvcm0uc3BvdGxpZ2h0LnJlbWVtYmVyX2xhdGUnIHwgdHJhbnNsYXRlfX1cIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvblNlY29uZGFyeSgpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInVpLWJ1dHRvbi1yYWlzZWQgdWktYnV0dG9uLXNlY29uZGFyeVwiPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgcEJ1dHRvblxuICAgICAgICAgICAgICAgIGxhYmVsPVwie3twcmltYXJ5QnV0dG9uTGFiZWx9fVwiXG4gICAgICAgICAgICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICAgICAgICAgICAgaWQ9XCJzdWJtaXQtYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib25QcmltYXJ5KClcIlxuICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJwcmltYXJ5QnV0dG9uVG9vbHRpcFwiXG4gICAgICAgICAgICAgICAgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCJcbiAgICAgICAgICAgICAgICBzaG93RGVsYXk9XCI1MDBcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwidWktYnV0dG9uLXJhaXNlZFwiPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+XG48L2Rpdj4iXX0=
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export * from './spotlight.module';
|
|
2
|
+
export * from './component/spotlight.component';
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWIvc3JjL21vZHVsZXMvc3BvdGxpZ2h0L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyxpQ0FBaUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vc3BvdGxpZ2h0Lm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL2NvbXBvbmVudC9zcG90bGlnaHQuY29tcG9uZW50JztcbiJdfQ==
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export const fallback = {
|
|
2
|
+
'platform.spotlight.no_interest': 'Não tenho interesse',
|
|
3
|
+
'platform.spotlight.remember_late': 'Lembrar mais tarde'
|
|
4
|
+
};
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFsbGJhY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvc3JjL21vZHVsZXMvc3BvdGxpZ2h0L2xvY2FsZS9mYWxsYmFjay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQVE7SUFFekIsZ0NBQWdDLEVBQUcscUJBQXFCO0lBQ3hELGtDQUFrQyxFQUFHLG9CQUFvQjtDQUM1RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IGZhbGxiYWNrOiBhbnkgPSB7XG5cbiAgICAncGxhdGZvcm0uc3BvdGxpZ2h0Lm5vX2ludGVyZXN0JyA6ICdOw6NvIHRlbmhvIGludGVyZXNzZScsXG4gICAgJ3BsYXRmb3JtLnNwb3RsaWdodC5yZW1lbWJlcl9sYXRlJyA6ICdMZW1icmFyIG1haXMgdGFyZGUnXG59O1xuIl19
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export var EnumDisplayType;
|
|
2
|
+
(function (EnumDisplayType) {
|
|
3
|
+
EnumDisplayType["ADVERSITING"] = "ADVERSITING";
|
|
4
|
+
EnumDisplayType["INTEGRATION"] = "INTEGRATION";
|
|
5
|
+
})(EnumDisplayType || (EnumDisplayType = {}));
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlzcGxheS10eXBlLmVudW0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvc3JjL21vZHVsZXMvc3BvdGxpZ2h0L21vZGVscy9kaXNwbGF5LXR5cGUuZW51bS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQU4sSUFBWSxlQUdYO0FBSEQsV0FBWSxlQUFlO0lBQ3ZCLDhDQUEyQixDQUFBO0lBQzNCLDhDQUEyQixDQUFBO0FBQy9CLENBQUMsRUFIVyxlQUFlLEtBQWYsZUFBZSxRQUcxQiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBlbnVtIEVudW1EaXNwbGF5VHlwZSB7XG4gICAgQURWRVJTSVRJTkcgPSAnQURWRVJTSVRJTkcnLFxuICAgIElOVEVHUkFUSU9OID0gJ0lOVEVHUkFUSU9OJ1xufVxuIl19
|