UNPKG

17.8 kBJavaScriptView Raw
1/*
2 Copyright 2013-2020 the original author or authors from the JHipster project.
3
4 This file is part of the JHipster project, see https://www.jhipster.tech/
5 for more information.
6
7 Licensed under the Apache License, Version 2.0 (the "License");
8 you may not use this file except in compliance with the License.
9 You may obtain a copy of the License at
10
11 http://www.apache.org/licenses/LICENSE-2.0
12
13 Unless required by applicable law or agreed to in writing, software
14 distributed under the License is distributed on an "AS IS" BASIS,
15 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 See the License for the specific language governing permissions and
17 limitations under the License.
18 */
19import { Injectable, SecurityContext, Optional, NgZone } from '@angular/core';
20import { DomSanitizer } from '@angular/platform-browser';
21import { TranslateService } from '@ngx-translate/core';
22import { JhiConfigService } from '../config.service';
23import * as i0 from "@angular/core";
24import * as i1 from "@angular/platform-browser";
25import * as i2 from "../config.service";
26import * as i3 from "@ngx-translate/core";
27export class JhiAlertService {
28 constructor(sanitizer, configService, ngZone, translateService) {
29 this.sanitizer = sanitizer;
30 this.configService = configService;
31 this.ngZone = ngZone;
32 this.translateService = translateService;
33 const config = this.configService.getConfig();
34 this.toast = config.alertAsToast;
35 this.i18nEnabled = config.i18nEnabled;
36 this.alertId = 0; // unique id for each alert. Starts from 0.
37 this.alerts = [];
38 this.timeout = config.alertTimeout;
39 }
40 clear() {
41 this.alerts.splice(0, this.alerts.length);
42 }
43 get() {
44 return this.alerts;
45 }
46 success(msg, params, position) {
47 return this.addAlert({
48 type: 'success',
49 msg,
50 params,
51 timeout: this.timeout,
52 toast: this.isToast(),
53 position
54 }, []);
55 }
56 error(msg, params, position) {
57 return this.addAlert({
58 type: 'danger',
59 msg,
60 params,
61 timeout: this.timeout,
62 toast: this.isToast(),
63 position
64 }, []);
65 }
66 warning(msg, params, position) {
67 return this.addAlert({
68 type: 'warning',
69 msg,
70 params,
71 timeout: this.timeout,
72 toast: this.isToast(),
73 position
74 }, []);
75 }
76 info(msg, params, position) {
77 return this.addAlert({
78 type: 'info',
79 msg,
80 params,
81 timeout: this.timeout,
82 toast: this.isToast(),
83 position
84 }, []);
85 }
86 addAlert(alertOptions, extAlerts) {
87 alertOptions.id = this.alertId++;
88 if (this.i18nEnabled && alertOptions.msg) {
89 alertOptions.msg = this.translateService.instant(alertOptions.msg, alertOptions.params);
90 }
91 const alert = this.factory(alertOptions);
92 if (alertOptions.timeout && alertOptions.timeout > 0) {
93 // Workaround protractor waiting for setTimeout.
94 // Reference https://www.protractortest.org/#/timeouts
95 this.ngZone.runOutsideAngular(() => {
96 setTimeout(() => {
97 this.ngZone.run(() => {
98 this.closeAlert(alertOptions.id, extAlerts);
99 });
100 }, alertOptions.timeout);
101 });
102 }
103 return alert;
104 }
105 closeAlert(id, extAlerts) {
106 const thisAlerts = extAlerts && extAlerts.length > 0 ? extAlerts : this.alerts;
107 return this.closeAlertByIndex(thisAlerts.map(e => e.id).indexOf(id), thisAlerts);
108 }
109 closeAlertByIndex(index, thisAlerts) {
110 return thisAlerts.splice(index, 1);
111 }
112 isToast() {
113 return this.toast;
114 }
115 factory(alertOptions) {
116 const alert = {
117 type: alertOptions.type,
118 msg: this.sanitizer.sanitize(SecurityContext.HTML, alertOptions.msg),
119 id: alertOptions.id,
120 timeout: alertOptions.timeout,
121 toast: alertOptions.toast,
122 position: alertOptions.position ? alertOptions.position : 'top right',
123 scoped: alertOptions.scoped,
124 close: (alerts) => {
125 return this.closeAlert(alertOptions.id, alerts);
126 }
127 };
128 if (!alert.scoped) {
129 this.alerts.push(alert);
130 }
131 return alert;
132 }
133}
134JhiAlertService.ɵprov = i0.ɵɵdefineInjectable({ factory: function JhiAlertService_Factory() { return new JhiAlertService(i0.ɵɵinject(i1.DomSanitizer), i0.ɵɵinject(i2.JhiConfigService), i0.ɵɵinject(i0.NgZone), i0.ɵɵinject(i3.TranslateService, 8)); }, token: JhiAlertService, providedIn: "root" });
135JhiAlertService.decorators = [
136 { type: Injectable, args: [{
137 providedIn: 'root'
138 },] }
139];
140JhiAlertService.ctorParameters = () => [
141 { type: DomSanitizer },
142 { type: JhiConfigService },
143 { type: NgZone },
144 { type: TranslateService, decorators: [{ type: Optional }] }
145];
146//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxlcnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlL2FsZXJ0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUJHO0FBQ0gsT0FBTyxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFdkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7Ozs7O0FBbUJyRCxNQUFNLE9BQU8sZUFBZTtJQU94QixZQUNZLFNBQXVCLEVBQ3ZCLGFBQStCLEVBQy9CLE1BQWMsRUFDRixnQkFBa0M7UUFIOUMsY0FBUyxHQUFULFNBQVMsQ0FBYztRQUN2QixrQkFBYSxHQUFiLGFBQWEsQ0FBa0I7UUFDL0IsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNGLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFFdEQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUM5QyxJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUM7UUFDakMsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsMkNBQTJDO1FBQzdELElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQztJQUN2QyxDQUFDO0lBRUQsS0FBSztRQUNELElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLENB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UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDOzs7O1lBMUlKLFVBQVUsU0FBQztnQkFDUixVQUFVLEVBQUUsTUFBTTthQUNyQjs7O1lBckJRLFlBQVk7WUFHWixnQkFBZ0I7WUFKdUIsTUFBTTtZQUU3QyxnQkFBZ0IsdUJBZ0NoQixRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiBDb3B5cmlnaHQgMjAxMy0yMDIwIHRoZSBvcmlnaW5hbCBhdXRob3Igb3IgYXV0aG9ycyBmcm9tIHRoZSBKSGlwc3RlciBwcm9qZWN0LlxuXG4gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEpIaXBzdGVyIHByb2plY3QsIHNlZSBodHRwczovL3d3dy5qaGlwc3Rlci50ZWNoL1xuIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuXG4gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBTZWN1cml0eUNvbnRleHQsIE9wdGlvbmFsLCBOZ1pvbmUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERvbVNhbml0aXplciB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuXG5pbXBvcnQgeyBKaGlDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vY29uZmlnLnNlcnZpY2UnO1xuXG5leHBvcnQgdHlwZSBKaGlBbGVydFR5cGUgPSAnc3VjY2VzcycgfCAnZGFuZ2VyJyB8ICd3YXJuaW5nJyB8ICdpbmZvJztcblxuZXhwb3J0IGludGVyZmFjZSBKaGlBbGVydCB7XG4gICAgaWQ/OiBudW1iZXI7XG4gICAgdHlwZTogSmhpQWxlcnRUeXBlO1xuICAgIG1zZzogc3RyaW5nO1xuICAgIHBhcmFtcz86IGFueTtcbiAgICB0aW1lb3V0PzogbnVtYmVyO1xuICAgIHRvYXN0PzogYm9vbGVhbjtcbiAgICBwb3NpdGlvbj86IHN0cmluZztcbiAgICBzY29wZWQ/OiBib29sZWFuO1xuICAgIGNsb3NlPzogKGFsZXJ0czogSmhpQWxlcnRbXSkgPT4gdm9pZDtcbn1cblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBKaGlBbGVydFNlcnZpY2Uge1xuICAgIHByaXZhdGUgYWxlcnRJZDogbnVtYmVyO1xuICAgIHByaXZhdGUgYWxlcnRzOiBKaGlBbGVydFtdO1xuICAgIHByaXZhdGUgdGltZW91dDogbnVtYmVyO1xuICAgIHByaXZhdGUgdG9hc3Q6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBpMThuRW5hYmxlZDogYm9vbGVhbjtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyLFxuICAgICAgICBwcml2YXRlIGNvbmZpZ1NlcnZpY2U6IEpoaUNvbmZpZ1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmUsXG4gICAgICAgIEBPcHRpb25hbCgpIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZVxuICAgICkge1xuICAgICAgICBjb25zdCBjb25maWcgPSB0aGlzLmNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCk7XG4gICAgICAgIHRoaXMudG9hc3QgPSBjb25maWcuYWxlcnRBc1RvYXN0O1xuICAgICAgICB0aGlzLmkxOG5FbmFibGVkID0gY29uZmlnLmkxOG5FbmFibGVkO1xuICAgICAgICB0aGlzLmFsZXJ0SWQgPSAwOyAvLyB1bmlxdWUgaWQgZm9yIGVhY2ggYWxlcnQuIFN0YXJ0cyBmcm9tIDAuXG4gICAgICAgIHRoaXMuYWxlcnRzID0gW107XG4gICAgICAgIHRoaXMudGltZW91dCA9IGNvbmZpZy5hbGVydFRpbWVvdXQ7XG4gICAgfVxuXG4gICAgY2xlYXIoKSB7XG4gICAgICAgIHRoaXMuYWxlcnRzLnNwbGljZSgwLCB0aGlzLmFsZXJ0cy5sZW5ndGgpO1xuICAgIH1cblxuICAgIGdldCgpOiBKaGlBbGVydFtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWxlcnRzO1xuICAgIH1cblxuICAgIHN1Y2Nlc3MobXNnOiBzdHJpbmcsIHBhcmFtcz86IGFueSwgcG9zaXRpb24/OiBzdHJpbmcpOiBKaGlBbGVydCB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZEFsZXJ0KFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdzdWNjZXNzJyxcbiAgICAgICAgICAgICAgICBtc2csXG4gICAgICAgICAgICAgICAgcGFyYW1zLFxuICAgICAgICAgICAgICAgIHRpbWVvdXQ6IHRoaXMudGltZW91dCxcbiAgICAgICAgICAgICAgICB0b2FzdDogdGhpcy5pc1RvYXN0KCksXG4gICAgICAgICAgICAgICAgcG9zaXRpb25cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbXVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGVycm9yKG1zZzogc3RyaW5nLCBwYXJhbXM/OiBhbnksIHBvc2l0aW9uPzogc3RyaW5nKTogSmhpQWxlcnQge1xuICAgICAgICByZXR1cm4gdGhpcy5hZGRBbGVydChcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnZGFuZ2VyJyxcbiAgICAgICAgICAgICAgICBtc2csXG4gICAgICAgICAgICAgICAgcGFyYW1zLFxuICAgICAgICAgICAgICAgIHRpbWVvdXQ6IHRoaXMudGltZW91dCxcbiAgICAgICAgICAgICAgICB0b2FzdDogdGhpcy5pc1RvYXN0KCksXG4gICAgICAgICAgICAgICAgcG9zaXRpb25cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbXVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHdhcm5pbmcobXNnOiBzdHJpbmcsIHBhcmFtcz86IGFueSwgcG9zaXRpb24/OiBzdHJpbmcpOiBKaGlBbGVydCB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZEFsZXJ0KFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcbiAgICAgICAgICAgICAgICBtc2csXG4gICAgICAgICAgICAgICAgcGFyYW1zLFxuICAgICAgICAgICAgICAgIHRpbWVvdXQ6IHRoaXMudGltZW91dCxcbiAgICAgICAgICAgICAgICB0b2FzdDogdGhpcy5pc1RvYXN0KCksXG4gICAgICAgICAgICAgICAgcG9zaXRpb25cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbXVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGluZm8obXNnOiBzdHJpbmcsIHBhcmFtcz86IGFueSwgcG9zaXRpb24/OiBzdHJpbmcpOiBKaGlBbGVydCB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZEFsZXJ0KFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdpbmZvJyxcbiAgICAgICAgICAgICAgICBtc2csXG4gICAgICAgICAgICAgICAgcGFyYW1zLFxuICAgICAgICAgICAgICAgIHRpbWVvdXQ6IHRoaXMudGltZW91dCxcbiAgICAgICAgICAgICAgICB0b2FzdDogdGhpcy5pc1RvYXN0KCksXG4gICAgICAgICAgICAgICAgcG9zaXRpb25cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbXVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGFkZEFsZXJ0KGFsZXJ0T3B0aW9uczogSmhpQWxlcnQsIGV4dEFsZXJ0czogSmhpQWxlcnRbXSk6IEpoaUFsZXJ0IHtcbiAgICAgICAgYWxlcnRPcHRpb25zLmlkID0gdGhpcy5hbGVydElkKys7XG4gICAgICAgIGlmICh0aGlzLmkxOG5FbmFibGVkICYmIGFsZXJ0T3B0aW9ucy5tc2cpIHtcbiAgICAgICAgICAgIGFsZXJ0T3B0aW9ucy5tc2cgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChhbGVydE9wdGlvbnMubXNnLCBhbGVydE9wdGlvbnMucGFyYW1zKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhbGVydCA9IHRoaXMuZmFjdG9yeShhbGVydE9wdGlvbnMpO1xuICAgICAgICBpZiAoYWxlcnRPcHRpb25zLnRpbWVvdXQgJiYgYWxlcnRPcHRpb25zLnRpbWVvdXQgPiAwKSB7XG4gICAgICAgICAgICAgLy8gV29ya2Fyb3VuZCBwcm90cmFjdG9yIHdhaXRpbmcgZm9yIHNldFRpbWVvdXQuXG4gICAgICAgICAgICAgLy8gUmVmZXJlbmNlIGh0dHBzOi8vd3d3LnByb3RyYWN0b3J0ZXN0Lm9yZy8jL3RpbWVvdXRzXG4gICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZUFsZXJ0KGFsZXJ0T3B0aW9ucy5pZCwgZXh0QWxlcnRzKTtcbiAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIH0sIGFsZXJ0T3B0aW9ucy50aW1lb3V0KTtcbiAgICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWxlcnQ7XG4gICAgfVxuXG4gICAgY2xvc2VBbGVydChpZDogbnVtYmVyLCBleHRBbGVydHM/OiBKaGlBbGVydFtdKTogSmhpQWxlcnRbXSB7XG4gICAgICAgIGNvbnN0IHRoaXNBbGVydHM6IEpoaUFsZXJ0W10gPSBleHRBbGVydHMgJiYgZXh0QWxlcnRzLmxlbmd0aCA+IDAgPyBleHRBbGVydHMgOiB0aGlzLmFsZXJ0cztcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xvc2VBbGVydEJ5SW5kZXgodGhpc0FsZXJ0cy5tYXAoZSA9PiBlLmlkKS5pbmRleE9mKGlkKSwgdGhpc0FsZXJ0cyk7XG4gICAgfVxuXG4gICAgY2xvc2VBbGVydEJ5SW5kZXgoaW5kZXg6IG51bWJlciwgdGhpc0FsZXJ0czogSmhpQWxlcnRbXSk6IEpoaUFsZXJ0W10ge1xuICAgICAgICByZXR1cm4gdGhpc0FsZXJ0cy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cblxuICAgIGlzVG9hc3QoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnRvYXN0O1xuICAgIH1cblxuICAgIHByaXZhdGUgZmFjdG9yeShhbGVydE9wdGlvbnM6IEpoaUFsZXJ0KTogSmhpQWxlcnQge1xuICAgICAgICBjb25zdCBhbGVydDogSmhpQWxlcnQgPSB7XG4gICAgICAgICAgICB0eXBlOiBhbGVydE9wdGlvbnMudHlwZSxcbiAgICAgICAgICAgIG1zZzogdGhpcy5zYW5pdGl6ZXIuc2FuaXRpemUoU2VjdXJpdHlDb250ZXh0LkhUTUwsIGFsZXJ0T3B0aW9ucy5tc2cpLFxuICAgICAgICAgICAgaWQ6IGFsZXJ0T3B0aW9ucy5pZCxcbiAgICAgICAgICAgIHRpbWVvdXQ6IGFsZXJ0T3B0aW9ucy50aW1lb3V0LFxuICAgICAgICAgICAgdG9hc3Q6IGFsZXJ0T3B0aW9ucy50b2FzdCxcbiAgICAgICAgICAgIHBvc2l0aW9uOiBhbGVydE9wdGlvbnMucG9zaXRpb24gPyBhbGVydE9wdGlvbnMucG9zaXRpb24gOiAndG9wIHJpZ2h0JyxcbiAgICAgICAgICAgIHNjb3BlZDogYWxlcnRPcHRpb25zLnNjb3BlZCxcbiAgICAgICAgICAgIGNsb3NlOiAoYWxlcnRzOiBKaGlBbGVydFtdKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xvc2VBbGVydChhbGVydE9wdGlvbnMuaWQsIGFsZXJ0cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGlmICghYWxlcnQuc2NvcGVkKSB7XG4gICAgICAgICAgICB0aGlzLmFsZXJ0cy5wdXNoKGFsZXJ0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWxlcnQ7XG4gICAgfVxufVxuIl19
\No newline at end of file